1.
int main()
{
union
{
short k;
char i[2];
}*s, a;
s = &a;
s->i[0] = 0x39;
s->i[1] = 0x38;
printf(“%x\n”,a.k);
return 0;
}
short和char共用两个个字节,对进行修改也会对k进行修改。
低地址在低处,所以39是低地址,38为高地址,打印出来为3839。
2.
union Un
{
short s[7];
int n;
};
int main()
{
printf("%d\n", sizeof(union Un));
return 0;
}
short数组有14个字节,int有4个字节,二者取最大共14字节。但是他的对齐数应取int和short类型中较大的即4,而共用体的大小也应为对齐数的整数倍所以共占16个字节。
5392

被折叠的 条评论
为什么被折叠?



