笔试遇到一个选择题,有点晕,现在记录下:
union data{
struct { int x, y; }s;
int x, y;
}d;
d.x = 1;
d.y = 2;
d.s.x = d.x*d.x;
d.s.y = d.y+d.y;
cout << d.s.x << d.s.y;
输出的结果是多少?
整个过程:
个人理解:
在The C Programming Language里面讲述union内存分配的原话是
1)联合体就是一个结构
2)联合体的所有成员相对于基地址的偏移量为0
3)此结构空间要大到总够容纳最“宽”的成员
4)并且,其对其方式要适合于联合体中所有类型的成员
所以,s占8个字节,data同样占8个字节。
又因为 联合体变量的各个成员都是从低字节开始公用的。即:所有的成员都是从低字节开始的。
我把过程直接画出来了,如下(如有不对欢迎指正)