MST

星途 面试题库

面试题:C语言联合体节省内存原理及简单应用

请解释C语言联合体在节省内存方面的原理。并编写一个简单的C程序,利用联合体存储不同类型的数据(如整型、字符型),以展示其内存节省特性。
27.8万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

联合体节省内存原理

联合体(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) 输出联合体的大小,进一步验证其内存占用情况。