C语言学习第二节课

2020/10/14 15:13
阅读数 9

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表示假。

  1. 选择语句
    if () { } else { }

这里强调一下,这个语句的重点就是要:先识别 ( ) 里面的表达式,得到真假,然后再判定。

4.循环语句
(1)首先是while循环
它必须包括1,条件设置;2,条件判断;3,条件更新。

格式如下:
while(语句) {}
1,执行()内部的语句得到真假;2,判定。

还要知道while(1) {}表示死循环。

(2)for 循环

格式如下:
for (条件设置;条件判断;条件更新) { }

for (;;){ } 死循环

(3)do....while....循环

格式如下:
do{循环体} while (条件判断)

它与前两者的不同之处在于,它是先循环,再判断

5.函数体
这里,先说一下函数体的简单知识。后面的板块将进行具体深入的讲解。

返回值 函数名(形参,形参,形参,......)
函数名建议大驼峰,即单词首字母都大写。 MyAdd

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部