面试题答案
一键面试#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
。