对char x='abcd'的解释

时间:2022-02-21 21:38:26

问题:
char x='abcd';
x=?


答案是:x=d;
为什么呢?


详解:
char x='abcd'中的'abcd'被存储为一个int型的整数,这个整数的值是:
一个int数值 :(97<<8<<8<<8)+(98<<8<<8)+(99<<8)+100);
其中97是'a'的ASCII码;
其中98是'b'的ASCII码;
其中99是'c'的ASCII码;
其中100是'd'的ASCII码;
因为x是char型的,只有8位,故截取该int的低八位,即'd'的ASCII码100存入x。
下面一段程序证明之:

 

输出:
1633837924
1633837924
d

还有个疑问就是为什么'abcd'被存储为int型,这与为什么#define N 123中的sizeof(N)=4和#define PI 3.14159中的sizeof(PI)=8是一个道理,凡是常量,编译器都会给它找一个合适的数据类型,也就是多少位存储空间来存放它。'abcd'中的字母的ASCII码是整数的,所以就分配了int型的存储空间给它,int是32位的,最多放4个char型数据,再多了就放不下了,这就是为什么上面的语句char x='abcd'最多只能赋值4个字母的原因,再多了编译器就报错,因为存储空间不够了。

我们最近考试的那个char c='/0xab'与上面是同一种情况,只不过四个字母变成了'/0','x','a','b'罢了。
其实,平时我们写程序根本不会这么写,但遇到了,还是要分析出来。