- #include <stdio.h>
-
- int main(void)
- {
-
- int a = 'a';
- printf("a = %d\n", a);
-
-
- a = 'abc';
- printf("a = %d\n", a);
-
-
- a = "a";
- printf("a = %d\n", a);
-
- a = "abc";
- printf("a = %d\n", a);
- return 0;
- }
'abc'这样的写法,我也是第一次见到,居然编译器只给一个警告。
程序的运行结果是:
第二行的结果,即a = 'abc';后a的值显得诡异,跟贴中,大家纷纷猜测。
我对这种情况也不清楚,这时想到的是,要将整型数a中的4个字节中每个字节的值能分隔出来,应该就一目了然了,最好将每个字节解释成一个之字符直接输出来看。
想到了“联合体”union,将程序改造了一下,得到下面的程序:
- #include <stdio.h>
- union un
- {
- int i;
- char c[4];
- };
- int main(void)
- {
-
- int a = 'a';
- union un b;
- printf("a = %d\n", a);
-
- b.i = 'abc';
- printf("b.i = %d\n", b.i);
- printf("b.c = %c %c %c %c\n", b.c[0], b.c[1],b.c[2],b.c[3]);
-
-
- a = "a";
- printf("a = %d\n", a);
-
- a = "abc";
- printf("a = %d\n", a);
- return 0;
- }
运行结果是:
结果不解释了,原理应该在“计算机组成原理”或“计算机体系结构”中介绍,学过汇编语言的人也明白。程序员学软件,要对计算机系统有理解,这是专业人员该关注的。
C/C++中的union,似乎在教学中都是一带而过,感兴趣的同学,再找其他资料了解了解即可。