面试题答案
一键面试- 联合体占用字节数:
- 在32位系统下,
int
通常占4字节,char
占1字节,float
占4字节。 - 联合体的大小取决于其最大成员的大小。所以
union Data
占用4字节内存。
- 在32位系统下,
- 对不同成员赋值后访问数据:
- 当对联合体的一个成员赋值后,访问另一个成员时,需要注意联合体成员共享同一块内存。
- 例如:
#include <stdio.h> union Data { int num; char ch; float f; }; int main() { union Data data; data.num = 10; printf("data.num: %d\n", data.num); // 如果此时访问data.ch,它会读取num的第一个字节(因为内存共享) printf("data.ch: %c\n", data.ch); data.f = 3.14f; printf("data.f: %f\n", data.f); // 此时data.num和data.ch的值已经被覆盖,因为它们共享同一块内存 // 如果再访问data.num或data.ch,得到的值是无意义的,因为内存已经被float数据覆盖 return 0; }
- 原因:联合体的所有成员在内存中从同一个地址开始存储,它们共享同一块内存空间。当对一个成员赋值时,会覆盖其他成员在内存中的值。所以在访问联合体成员时,要确保访问的是最近赋值的成员,否则可能得到错误或无意义的数据。