1.字符串
字符串的定义为由双引号引起来的一串字符称为字符串的字面值,或者简称为字符串。
我们可以用一个数组来存放字符串也可以用数组存放单个字符来表示字符串,如下图,但我们可以看到显示效果,输出的内容却不相同,我们可以用断点监控方式来测试一下这个代码
我们可以看到存放字符串的数组中多了一个\0,而另一个存放单个字符的数组却依然只有'a' 'b' 'c'
如果在这个存放单个字符的数组后面加上一个/0,那么结果会不会和字符串的输出结果一样呢,下面我们来尝试一下
加入一个’\0'后我们可以发现输出结果一样。
这是因为字符串默认是以\0结尾的,当我们使用printf进行打印时,程序会从前向后依次打印,直到找到\0才会停止,因此在输出arr2时因为没有默认的\0,程序会一直进行打印操作,因此输出了内存中的一些脏数据。
\0本身为字符串的一个结束标志,是一个转义字符,并不算做字符串的内容。也不算做字符串长度。
2.转义字符
在C语言中除了像\0这样的转义字符以外C语言中还存在着其他的转义字符
\t | 水平制表符 |
\n | 换行操作符 |
\ddd | ddd表示三个八进制位的数字 |
\xdd | xdd表示两个十六进制的数字 |
下面我们来看一下不同的转义字符的实现效果
我们可以看到当输入\t是系统会空出一段长处,这段长度就相当于一个tab键
当字符串中间有\n时,系统不会直接输出,而是当成一个换行符,如果我们想输出一个\t那么应该在\t前再添加一个“\",如下图
上图,我们可以看到当要输出一个字符\101时,系统不会直接输出\101,而是输出了A,此时系统将\101看成了一个转义字符,输出的结果为八进制对应的十进制对应的ASSIC表中的值。
输入\x41,也同理,系统会输出十六进制对应的十进制对应的ASSIC表中的值。请各位读者注意。
请各位读者将ASSIC表中以下几个常用的值简单记忆一下,方便日常使用
十进制 | 字符 |
48 | 0 |
65 | A |
97 | a |
3.sizeof操作符
sizeof是计算变量的长度,上文使用到的strlen是计算字符类型的长度,使用sizeof计算得出的单位为字节,例如上图,定义了一个int类型的变量,int类型为4个字节,因此输出结果为4
sizeof最经常在计算数组长度中使用,我们先计算整个数组所占的字节数,在除以一个元素所占的字节数,最终会得出数组的长度。