【发布时间】:2018-05-08 08:35:38
【问题描述】:
我有以下:
#include <stdio.h>
typedef union u_data
{
struct
{
int a;
int b;
int c;
};
int elem[3];
} my_data;
int main(void)
{
my_data data;
data.a = 3;
data.b = 5;
data.c = -3;
printf("%d, %d, %d\n", data.elem[0], data.elem[1], data.elem[2]);
}
它按我预期的方式工作,输出:3, 5, -3
但是我知道结构中可以有填充,这是否意味着结构中的元素可能并不总是与数组对齐?
【问题讨论】:
-
访问与最后一个写入的联合成员不同的成员会导致未定义的行为。所以:是的,在“可能是鼻恶魔”的意义上。
-
@Yunnosch 不,C 标准对联合有一个例外(排除可能的陷阱表示)。这里问的填充问题是不同的问题。
-
作为我为什么问的一些背景信息......我最初看到stackoverflow.com/questions/8932707/…,第二条评论在做我正在做的事情
-
@user694733 我承认我可能错了。但是,您能否更详细地解释一下 gsamaras 赞成(和不反对)的答案,这似乎是一样的。有什么相关的区别?
-
@Yunnosch This recent answer 谈论工会成员的访问。到目前为止,这个问题只有大约 30 次观看,所以现在使用投票作为衡量正确性的指标还为时过早。
标签: c struct padding unions memory-alignment