特殊符号——双引号和单引号
一.通常理解二.一般使用三.特殊使用四.为何计算机需要字符一.通常理解
在c语言中,我们通常认为双引号保存的是字符串,单引号里保存的是字符。这里也没什么好说的,说一说它们的细微的一些地方
二.一般使用
接下来我们可以把它们每个大小都打印出来
看到这,前面两个大家可能都觉得正常(双引号里别忘了反斜杠0,一般它不应该被称为有效元素,应该是结束的标志符,但它依然占一个字节),但到第三个时发现了问题,字符不应该是1个字节吗?这里怎么显示4个字节啊?接下来就讲解这个现象
在c99标准中,‘a’被叫做整形字符常量,被看作是int类型,所以它的大小就应该是4个字节,那可能又有疑问了,那为什么char类型的明明也是整形字符常量,结果却是一个字节呢?。
这其实是 因为发生了截断。计算机在解释‘c’时其实时解释为4个字节,但放入char类型里时,被截断为1个字节。这也印证了我们常说的字符其实就是整形(当然以上解释是在c语言中,如果在c++中,‘c’就被解释为1个字节)
三.特殊使用
使用一
如果我们引号里什么都没有,那能编过吗?
由上可以看出单引号里什么都不加是不能通过的,但双引号里什么都不加是能通过的。这是因为双引号里即使什么都不写还是有反斜杠0,而单引号里就真的什么都没有,我们可以看看它的报错
同样我们也可以看看它的大小
大小为1,刚好对应一个反斜杠0
使用二
我们常用char类型来定义一个字符,但如果我们在里面写两个三个四个字符,它依然不会报错。但当超过四个字符后它就会报错。好奇怪呀。
这里其实上文已经有过讲解,还是整形字符常量的问题。因为编译器在识别单引号时,其实就是按整形来扩充的,也就是说单引号内有4个字节大小的空间。那么如果你写的字符在4个以内编译器是不会报错的,但当超过4个以后,空间就会不够,自然就报错了
我们也可以看看它打印出来是什么样的
编译器其实打印的是最后一个字符(在VS内)。这是因为编译器永远是从最低的地址开始拿的,具体是右边最低还是左边最低就要看编译器是大端还是小端。VS是小端,所以右边是最低的
四.为何计算机需要字符
ascll码表是随着我们计算机发展而发展的。众所周知,计算机内部存的是二进制(当然最早还是10进制,后来发现不行),在早期还没有ascll码这个概念时,程序员还不叫程序员,叫做科学家。因为只有他们才能翻译一大串的二进制序列。所以ascll码表就应运而生了
ascll码表其实本质上就是对计算机内部的一种映射关系。计算机就在内部直接转换后显示在显示屏上,也就是做了原来科学家的翻译工作(ascll码表本质对计算机毫无影响,只是为了方便人理解),所以我们显示屏上显示的全是字符,像1234,其实就是1字符,2字符,3字符和4字符组成的并非我们所理解的一千两百三十四
总结:ascll码表最大意义就是把二进制序列翻译给人看