假设以下代码:
#include <stdio.h>
int main()
{
union a
{
int i;
char ch[2];
};
union a u;
u.ch[0]=3;
u.ch[1]=2;
printf("%d, %d, %d\n", u.ch[0], u.ch[1], u.i);
return 0;
}
我想知道为什么ch[0]
和ch[1]
在联合的低位地址上。在堆栈中如果我有一个Little Endian字节,它们应该在更高阶的地址上。任何人都可以解释一个联盟的记忆表示吗?
答案 0 :(得分:3)
由于所有成员都放在union所占用的内存块的开头,因此union应该对齐,以便它的所有成员都对齐。
答案 1 :(得分:0)
这就是工会的运作方式。它与endianess无关
每个工会成员都从工会开始的地址开始,并根据需要获取。因此ch[0]
将采用第一个地址。
仅当整数类型占用两个或更多字节时,Endianess才有意义。然后,最重要的字节可以是第一个或最后一个。但是这里有两个字符,第一个是第一个,第二个是第二个。