gpt4 book ai didi

c - 通过将结构嵌套在 union 中来为结构生成填充字节

转载 作者:太空宇宙 更新时间:2023-11-04 06:22:17 24 4
gpt4 key购买 nike

我正在浏览 this question重申我对结构填充的理解。我现在有疑问。当我做这样的事情时:

#include <stdio.h>

#define ALIGNTHIS 16 //16,Not necessarily

union myunion
{
struct mystruct
{
char a;
int b;
} myst;
char DS4Alignment[ALIGNTHIS];
};

//Main Routine
int main(void)
{
union myunion WannaPad;

printf("Union's size: %d\n\
Struct's size: %d\n", sizeof(WannaPad),
sizeof(WannaPad.myst));

return 0;
}

输出:

Union's size: 16
Struct's size: 8

我不应该期望结构被填充了 8 个字节吗?如果我显式地将八个字节填充到结构中,那么将它嵌套在一个 union 中的整个目的就无效了。

我觉得声明一个包含一个结构体和一个字符数组的 union 体应该是结构体的大小,但实际上不是,这样可以让代码更简洁。

是否有变通方法可以让它按照我的意愿工作?

最佳答案

从逻辑上考虑一下。

假设我有一个包含一些基本类型的 union :

union my_union{
int i;
long l;
double d;
float f;
};

你会期望 sizeof(int) == sizeof(double) 吗?

内部类型将始终是它们的大小,但 union 将始终足够大以容纳其任何内部类型。

关于c - 通过将结构嵌套在 union 中来为结构生成填充字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32678296/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com