关于union的题

#include <stdio.h>
union Un
{
	short s[7];
	int n;
};
int main()
{
  printf("%d\n", sizeof(union Un));
  return 0;
}

答案解析

结构体向int对齐,7个short一共是14字节,对齐后是16字节。n是单独的4字节,由于是union,所以n与s共用空间,只取最长的元素,故占用16字节。

在X86下,有下列程序

#include<stdio.h>
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;
}

答案解析

union只有2字节,2字节的十六进制只有4位,而位顺序类似小端,低地址在低处,所以39是低地址,在低位,38在高位,所以是3839


版权声明:本文为Dingyuan0原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。