gpt4 book ai didi

c - 为什么 "union test{ short a,b; char c1,c2,c3,c4;};"将 c1,c2,c3,c4 存储在同一个字节中,有两个可用?

转载 作者:行者123 更新时间:2023-11-30 18:26:33 28 4
gpt4 key购买 nike

在下面的程序中,我可以理解为什么 union 体的短成员存储在相同的 2 个字节中(因为 union 体的大小是最大成员的大小)。但我就是不明白不明白为什么所有 4 个字符成员都存储在同一个字节中,而人们会假设它们会分布在两个字节上并像

一样存储
c1,c3--->first byte
c2,c4--->2nd byte

或者更清楚

Byte1     Byte2
----short a----
----short b----
--c1-- --c2--
--c3-- --c4--

它们存储为

的原因是什么
Byte1     Byte2
----short a----
----short b----
--c1--
--c2--
--c3--
--c4--

这背后的原因是什么?她的程序:

#include<stdio.h>

int main(void)
{
union test
{
short a,b;
char c1,c2,c3,c4;
} var= {65};
printf("%hd,%hd,%c,%c,%c,%c",var.a,var.b,var.c1,var.c2,var.c3,var.c4);
}

结果:

   65,65,A,A,A,A

最佳答案

因为 union 不是这样运作的。

如果您希望它像这样工作,您应该混合匿名结构和 union ,例如:

union test
{
short a,b;
struct { char c1,c2; };
struct { char c3,c4; };
};

编辑:

看起来像anonymous structs are non-standard 。如果您想要符合标准的代码,则必须使用简单的结构,并处理更长的语法。

union test
{
short a,b;
struct c { char _1,_2; };
struct d { char _3,_4; };
};

test var;
if(var.c._1 == var.d._3) {}

关于c - 为什么 "union test{ short a,b; char c1,c2,c3,c4;};"将 c1,c2,c3,c4 存储在同一个字节中,有两个可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16618045/

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