特殊符号——双引号和单引号

特殊符号——双引号和单引号

  • 一.通常理解
  • 二.一般使用
  • 三.特殊使用
  • 四.为何计算机需要字符

特殊符号——双引号和单引号_第1张图片

一.通常理解

在c语言中,我们通常认为双引号保存的是字符串,单引号里保存的是字符。这里也没什么好说的,说一说它们的细微的一些地方

二.一般使用

特殊符号——双引号和单引号_第2张图片

接下来我们可以把它们每个大小都打印出来

特殊符号——双引号和单引号_第3张图片

看到这,前面两个大家可能都觉得正常(但凡双引号里都别忘了加上反斜杠0,一般它不应该被称为有效元素,应该是结束的标志符,但它依然占一个字节),但到第三个时发现了问题,字符不应该是1个字节吗?这里怎么显示4个字节啊?接下来就讲解这个现象

在c99标准中,‘a’被叫做整形字符常量,被看作是int类型,所以它的大小就应该是4个字节,那可能又有疑问了,那为什么char类型的明明也是整形字符常量,结果却是一个字节呢?。

特殊符号——双引号和单引号_第4张图片

这其实是 因为发生了截断。计算机在解释‘c’时其实时解释为4个字节,但放入char类型里时,被截断为1个字节。这也印证了我们常说的字符其实就是整形(当然以上解释是在c语言中,如果在c++中,‘c’就被解释为1个字节)

三.特殊使用

使用一

如果我们引号里什么都没有,那能编过吗?

特殊符号——双引号和单引号_第5张图片

由上可以看出单引号里什么都不加是不能通过的,但双引号里什么都不加是能通过的。这是因为双引号里即使什么都不写还是有反斜杠0,而单引号里就真的什么都没有,我们可以看看它的报错

特殊符号——双引号和单引号_第6张图片

同样我们也可以看看它的大小

特殊符号——双引号和单引号_第7张图片

大小为1,刚好对应一个反斜杠0

使用二

特殊符号——双引号和单引号_第8张图片

我们常用char类型来定义一个字符,但如果我们在里面写两个三个四个字符,它依然不会报错。但当超过四个字符后它就会报错。好奇怪呀。

这里其实上文已经有过讲解,还是整形字符常量的问题。因为编译器在识别单引号时,其实就是按整形来扩充的,也就是说单引号内有4个字节大小的空间。那么如果你写的字符在4个以内编译器是不会报错的,但当超过4个以后,空间就会不够,自然就报错了

我们也可以看看它打印出来是什么样的

特殊符号——双引号和单引号_第9张图片

编译器其实打印的是最后一个字符(在VS内)。这是因为编译器永远是从最低的地址开始拿的,具体是右边最低还是左边最低就要看编译器是大端还是小端。VS是小端,所以右边是最低的

四.为何计算机需要字符

特殊符号——双引号和单引号_第10张图片

ascll码表是随着我们计算机发展而发展的。众所周知,计算机内部存的是二进制(当然最早还是10进制,后来发现不行),在早期还没有ascll码这个概念时,程序员还不叫程序员,叫做科学家。因为只有他们才能翻译一大串的二进制序列。所以ascll码表就应运而生了

ascll码表其实本质上就是对计算机内部的一种映射关系。计算机就在内部直接转换后显示在显示屏上,也就是做了原来科学家的翻译工作(ascll码表本质对计算机毫无影响,只是为了方便人理解),所以我们显示屏上显示的全是字符,像1234,其实就是1字符,2字符,3字符和4字符组成的并非我们所理解的一千两百三十四

总结:ascll码表最大意义就是把二进制序列翻译给人看
特殊符号——双引号和单引号_第11张图片

你可能感兴趣的:(#,初识c语言,c++,开发语言)