1.比较以下三个的结果有何不同
char str1[] = "bit" ; char str2[] = {'b','i','t'} ; char str3[] = {'b','i','t','\0'} ;
printf("%s\n", str1);
printf("%s\n", str2);
printf("%s\n", str3);
结果如下:
bit
bit烫烫烫 it
bit
分析这样的结果产生的原因
首先,字符串的结束标志是\0的转义字符。在计算字符串长度时,\0是结束标志,不算作字符串内容。
对于双引号中的字符串,默认是以\0结尾的,所以检测到\0后,即结束;
所以1输出是bit,
对于2和3,都是字符数组,
对于2,它不是一个有效的字符串,因为后面没有放置'\0',因此,将有效字符检测完之后,还会继续向后检测,直到遇到'\0'是才终止,而后面是否是\0呢,这个其实是随机的,也可能第一个就是,也可能过了好多也不是,所以这就是出现乱码的原因。
对于3,由于加了\0,所以,显然可以正常输出结果。
- 另外,再来聊一下,strlen和sizeof的区别, 例如:
printf("%d\n",strlen("abcdef")); printf("%d\n",sizeof("abcdef"));
运行之后,结果为 6 7
为什么会出现这样的结果,究其原因,strlen是计算字符串的长度,而sizeof计算的字符串所占空间的大小。
首先,我们得知道strlen是用来获取字符串的有效长度的,结尾标记'\0'不包含在内。 strlen获取的规则非常简单:从前往后一次检测,直到遇到'\0'是就终止检测。
而对于双引号中的字符串,我们知道,它是默认以\0结尾的,所以在计算字符串有效长度时,是6, 但,在计算所占空间时,\0占据一个字节。所以呢,答案是7。
那好,我们继续 如下:printf("%d\n",strlen(c:\test\328\test.c"));
这个的答案应该是几呢? 这就涉及到转义字符
那好,我们开始数, c一个字节,冒号一个字节,\t一个字节(因为此时\t就表示水平制表符了),e一个,s一个,t一个, 下面是\328,这个算几个字节呢?
根据转义字符, \ddd ddd表示的是1~3个八进制的数字。例如:\023
那么,我们应该将\32算作是一个,因为数字8不是八进制数哦, 好,接着数,8算一个,\t一个,e一个,s一个,t一个,点一个,c一个,
所以一共是14。
这个题的重点就是 \32被解析成一个
2.第二个知识点 C语言中没有布尔类型,所以呢,我们用非0表示真,0表示假。
- 选择语句 if () { } else { }
这里强调一下,这个语句的重点就是要:先识别 ( ) 里面的表达式,得到真假,然后再判定。
4.循环语句 (1)首先是while循环 它必须包括1,条件设置;2,条件判断;3,条件更新。
格式如下:
while(语句) {}
1,执行()内部的语句得到真假;2,判定。
还要知道while(1) {}表示死循环。
(2)for 循环
格式如下: for (条件设置;条件判断;条件更新) { }
for (;;){ } 死循环
(3)do....while....循环
格式如下: do{循环体} while (条件判断)
它与前两者的不同之处在于,它是先循环,再判断
5.函数体 这里,先说一下函数体的简单知识。后面的板块将进行具体深入的讲解。
返回值 函数名(形参,形参,形参,......) 函数名建议大驼峰,即单词首字母都大写。 MyAdd