百思不得其解????
a)#i nclude <stdio.h>
union
{
int i;
char x;
}a;
void main()
{
a.x = 10;
a.x = 1;
printf("%d",a.i);
}
答案:266 (低位低地址,高位高地址,内存占用情况是Ox010A)
b)
main()
{
union{ /*定义一个联合*/
int i;
struct{ /*在联合中定义一个结构*/
char first;
char second;
}half;
}number;
number.i=0x4241; /*联合成员赋值*/
printf("%c%c\n", number.half.first, mumber.half.second);
number.half.first='a'; /*联合中结构成员赋值*/
number.half.second='b';
printf("%x\n", number.i);
getch();
}
答案: AB (0x41对应'A',是低位;Ox42对应'B',是高位)
6261 (number.i和number.half共用一块地址空间) 有请高手解释下两个程序的输出结果是怎么回事??? 内存组织union是重叠的,地址低位对齐;而struct是顺序的,所以i和half共用地址,低位对齐;经过OS映射后高位对应逻辑高,低位对应逻辑低。另外,这个结果应该是跟机器和OS有关。 第一个,int在这里应该是32bit的,你用char数组的方式赋值,相当于只赋了前面的16bit,所以高16bit结果未知,同时,在低位,应该是低字节的是10即0x0a,然后第二个字节是01,所以是0x10A,但是实际上个union的值是不确定的,因为高16bit内容未知,或者说和编译器相关 同理第二题也一样,懒得写了....
页:
[1]