当我在Mac上运行sizeof(r)时。它表示 sizeof(r)= 1 。我的理解是联合的大小是其最大元素的大小。在这种情况下,最大元素不应该是struct s吗?
union
{
struct
{
char i:1;
char j:2;
char m:3;
}s;
char ch;
}r;
答案 0 :(得分:11)
你的联盟由两部分组成,一个结构和一个角色。联合的大小,因为它共享内存,是最大元素的大小,加上它所粘贴的任何填充的大小(在你的情况下是0字节)。
首先,让我们看一下每个人的尺寸: http://ideone.com/LAhop
好的,两者都是1.因此,联合的大小也必须是1。
结构由位域组成。一个是1位,一个是2,一个是3.这在一个字节中总共给出了8位中的6位。因为它必须至少有一个字节(位域的大小不是真正的位),所以大小为1.
至于char,这是C ++ 11标准在§3.9.1/ 1 [ basic.fundamental ]中所说的内容:
Objects declared as characters (char) shall be large enough to store any member
of the implementation’s basic character set.
对于几乎所有平台,这都是一个字节。
这是一个字节。
答案 1 :(得分:4)
struct s占用1 + 2 + 3 = 6位,适合1个字节,并且与1个字节的char结合。因此答案为1个字节。