C语言如果结构体成员有联合体类型,会导致sizeof取数组长度失效吗
时间: 2024-09-25 18:15:38 浏览: 36
详解C语言的结构体中成员变量偏移问题
5星 · 资源好评率100%
在C语言中,当一个结构体包含联合体(union)作为其成员时,`sizeof`运算符的结果不会返回整个结构体的大小,而是返回联合体在内存中占用的空间大小。这是因为联合体中的所有成员共享同一块内存区域,所以无论当前存储的是哪一个成员,`sizeof`都会得到相同的值。
例如:
```c
typedef union {
int i;
char c[4];
} MyUnion;
struct MyStruct {
int a;
MyUnion u;
};
int main() {
printf("Size of MyStruct: %zu\n", sizeof(struct MyStruct)); // 输出可能不是你期望的整数+4
printf("Size of MyUnion in MyStruct: %zu\n", sizeof(struct MyStruct.u)); // 输出是sizeof(char)即4
return 0;
}
```
在这种情况下,`sizeof(struct MyStruct)`将只给出联合体`u`的实际大小,而不是包含`a`和`u`之后的整体结构体大小。如果你想获取结构体整体的大小,你需要加上其他成员的大小(这里假设`int`占4字节)。
阅读全文