面试题答案
一键面试联合体节省内存原理
联合体(union)是一种特殊的数据类型,它允许在相同的内存位置存储不同的数据类型。联合体的所有成员共享同一块内存空间,其大小取决于最大成员的大小。这与结构体(struct)不同,结构体的大小是其所有成员大小之和(考虑内存对齐)。因此,联合体通过共享内存,在同一时间仅存储一种数据类型,从而节省内存。
示例C程序
#include <stdio.h>
// 定义一个联合体
union Data {
int num;
char ch;
};
int main() {
union Data data;
// 存储整数
data.num = 100;
printf("存储整数: data.num = %d\n", data.num);
// 存储字符
data.ch = 'A';
printf("存储字符: data.ch = %c\n", data.ch);
// 联合体大小
printf("联合体大小: sizeof(data) = %zu\n", sizeof(data));
return 0;
}
在上述程序中,union Data
联合体包含一个 int
类型成员 num
和一个 char
类型成员 ch
。由于 int
类型通常比 char
类型占用更多内存,所以联合体 Data
的大小等于 int
类型的大小。通过在不同时刻存储不同类型的数据,展示了联合体的内存节省特性。同时,通过 sizeof(data)
输出联合体的大小,进一步验证其内存占用情况。