MST

星途 面试题库

面试题:C语言联合体初始化与成员访问基础问题

假设有如下联合体定义:`union Data { int i; float f; char str[20]; };` 请编写代码对该联合体进行初始化,并分别访问其不同成员。同时说明联合体在内存中的存储方式对这种初始化和访问的影响。
39.3万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>

union Data { 
    int i; 
    float f; 
    char str[20]; 
};

int main() {
    union Data data;

    // 初始化 int 成员
    data.i = 10;
    printf("访问 int 成员: %d\n", data.i);

    // 初始化 float 成员
    data.f = 3.14f;
    printf("访问 float 成员: %f\n", data.f);

    // 初始化 char 数组成员
    const char* newStr = "Hello, Union!";
    for(int i = 0; i < 20 && newStr[i] != '\0'; i++) {
        data.str[i] = newStr[i];
    }
    for(int i = 0; i < 20 && data.str[i] != '\0'; i++) {
        printf("%c", data.str[i]);
    }
    printf("\n");

    return 0;
}

联合体在内存中的存储方式为:所有成员共享同一段内存空间,其大小为联合体中最大成员的大小。这就意味着在初始化和访问不同成员时,后一个成员的初始化会覆盖前一个成员在内存中的数据。例如,在上述代码中,先初始化data.i,之后初始化data.f时,data.i在内存中的数据就被覆盖了。 访问时也需注意当前存储的是哪种类型的数据,否则可能得到错误的结果。