#include <stdio.h>
union st
{
int a;
char b;
};
int main()
{
union st s;
char *p = (char*)&s;
s.a = 0x3132;
s.b = 0x33;
printf("%c", *p);
}
A.1
B.2
C.3
D.不确定
union是用来定义共用体结构体的,顾名思义就是几个变量共用一个内存空间
union st
{
int a;
char b;
};
就是在一块空间内存中存放一个int类型数据或者一个char型数据,也就是说在同一时间内这个结构体里只能够存在一种类型的数据
s.a = 0x3132; //执行完内存中存放0x3132
s.b = 0x33; //执行完内存中存放0x33,覆盖掉原先的0x3132
printf("%c", *p); //0x33输出字符 3
答案 “C”
扩展:
#include <stdio.h>
union U
{
char st[4];
int i;
long l;
};
struct A
{
int c;
union U u;
}a;
int main()
{
printf("%d\n", sizeof(a));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(long));
getchar();
}
A.4
B.5
C.6
D.8
A.4
B.5
C.6
D.8
union共用体变量的内存长度是取各成员变量中最长的
struct结构体变量的内存长度是各成员栈内存长度之和,并且存在内存对齐问题
win32 | win64 | linux32 | linux64 | |
int | 2 | 4 | 4 | 4 |
long | 4 | 4 | 4 | 8 |
union | 4 | 4 | 4 | 8 |
struct | 8(对齐) | 8 | 8 | 16(对齐) |