面试题答案
一键面试#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
在内存中的数据就被覆盖了。 访问时也需注意当前存储的是哪种类型的数据,否则可能得到错误的结果。