MST

星途 面试题库

面试题:C语言联合体的基础应用

定义一个联合体,包含一个整型成员和一个字符数组成员(字符数组长度为4)。编写代码,给整型成员赋值为12345,然后尝试通过字符数组成员打印联合体存储的值(以十六进制形式),并解释输出结果的原因。
27.3万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>

// 定义联合体
union Data {
    int num;
    char arr[4];
};

int main() {
    union Data data;
    data.num = 12345;

    // 以十六进制形式打印字符数组内容
    for (int i = 0; i < 4; i++) {
        printf("%02hhx ", data.arr[i]);
    }
    printf("\n");

    // 解释:联合体所有成员共享同一块内存空间,大小为其最大成员的大小。
    // 在大多数系统中,int为4字节。12345的十六进制表示为0x3039。
    // 当以小端序存储时,低字节在前,高字节在后,所以数组中依次存储为 0x39 0x30 0x00 0x00
    return 0;
}

输出结果(以小端序系统为例):39 30 00 00

解释:联合体的所有成员共享同一块内存空间,其大小为最大成员的大小,在大多数系统中int为4字节。12345的十六进制表示为0x3039,当以小端序存储时,低字节在前,高字节在后,所以字符数组中依次存储为0x39 0x30 0x00 0x00