C语言中的char是用于声明单个字符的关键字。char关键字具有一些很奇怪的特点,但是想要了解这些奇怪的特点为什么会存在,我们就要先了解char关键字的原理。char关键字会在内存中找到一字节的空闲空间,并且在里面写入一个从0到255的整型(int)值。正是因为这个原因,我们在使用char的时候就会发现一些很奇怪的现象。大家请看这个例子:
#include
大家运行一下这个程序就会发现,第一个printf函数输出了a和b,但第二个printf函数则输出了97和98。这里大家可能就要奇怪了,我明明声明的是两个字符,为什么第二个语句却输出了两个数字?我是用了假的char吗?事实上,这就恰好证明了char实际上是在内存里存储整型。也正是因为这个原因,我们在C语言中无法直接声明字符串,而是需要先创建一个char类型的数组,创建好之后,在向里面写入字符变量。接下来,我们再来看看char类型的溢出。大家可以看看这个例子:
#include <stdio.h>
void main(){char a = ' ';char a_plus_1 = a + 100;printf("%d, %d", a, a_plus_1);
}
如果大家运行一下,就会发现a的输出为34,34+100想必小学生都能很轻松的算出来,但是结果却不是我们想的那样,而是-124。这是因为char类型只使用了一字节的空间,因此能存储的数字范围很小。那么,溢出又是怎么一回事呢?让我们来看看:
假设有一条二进制消息,占用一字节空间,内容如下:
1 0 1 0 1 0 1 0
现在从右边写入一个比特位,内容为0。内容变为:
0 1 0 1 0 1 0 0
我们可以用一种相当形象的方式来理解溢出,即在一个台子上,放着许多物品,这些物品就是数据。这时候,右边突然挤过来别的什么东西,这是新的数据。这个数据被放到台子上之后,所有的数据都左移了一格,而最靠边的数据则被挤掉了,这就是为什么我们会看到32变成-124这样离谱的答案。
本人正在跟随B站上的C语言教程学习C语言,随后将会继续分享心得体会,欢迎多多指教。