共用体的问题
程序如下:main()
{
union int_char
{
int i;
char ch;
}x;
x.i=24897;
printf("i=%o\n",x.i);
printf("ch0=%o,ch1=%o\n ch0=%c,ch1=%c\n", x.ch,x.ch,x.ch, x.ch);
}
结果为:
i=60501
ch0=101,ch1=141
ch0=A,ch1=a
但共用体只能存放一个值,虽然下面的调用都是用到,24897这个值,但这值只是赋给 i ,
为什么可以用 x.ch 把这个值调用出来呢? 不懂,不懂 换成二进制就清楚了,首先要理解联合的意思,联合是一个内存块中放多个变量类型.
在你的联合当中,我们可以看出该内存共16bit
而I的值为:
110000101000001(B)
根据ASM中的存储规范,低位的要在低位址中,因此保存顺序是01000001 01100001,因此在调用char模块时,由于数组地址指向了该联合的头地址,因此在ch0中因该是01000001,ch1中是01100001 回答的够细致. 赞个 其實union某較少用,該說不多機會使用吧 在联合中,优先开辟最大长度元素内存.并且以求整倍为要求,
上面那个联合里,最大长度的应该是int类型,占4字节,应该是32位吧. 楼上的没看来吗?August很喜欢复古dance的人哈,他一直都在用TC...... - -看完另外那帖才发现...呵呵
页:
[1]