main()
{ union int_char
{ int i;
char ch[2];
}x;
x.i=24897;
printf("i=%o\n",x.i);
printf("ch0=%o,ch1=%o\n
ch0=%c,ch1=%c\n",
x.ch[0],x.ch[1],x.ch[0],x.ch[1]);
}
运行结果:
i=60501
ch0=101,ch1=141
ch0=A,ch1=a
以上题目如何理解!
參考答案:联合就是一块连续的储存区域,它的特点是数据类型可以灵活变换
如上例中联合int_char可以做为整型读取(在DOS系统下整型占两个字节)
也可以做为两个字符型读取(字符型占一个字节)
例程中x.i=24897;就是给这个区域中置入
*********** ***********
你会发现这两个连续单元按顺序转换为十进制后不能组成24897这个数
这是因为数据在内存中的是以高8位在后的顺序来保存的
所以这个数其实是(*********** ***********)=24897
如果以整型来读取这块区域,这个数据就是24897再以8进制来表示24897这个数的话这个数就是(60501)(%o就是以8进制输出数据)
如果以字符型来读取这块区域,这个数据就分别是65和97再以8进制来表示这两个数的话就是(101)和(141)
而这两个数对应的ASCII码就是A和a(%c就是以字符输出数据);