我无法理解联盟如何运作..混淆联盟用C
#include <stdio.h>
#include <stdlib.h>
int main()
{
union {
int a:4;
char b[4];
}abc;
abc.a = 0xF;
printf(" %d, %d, %d, %d, %d, %d\n", sizeof(abc), abc.a, abc.b[0], abc.b[1], abc.b[2], abc.b[3]);
return 0;
}
在上面的程序。
我制作int a : 4;
所以,一个应该采取4位。
我现在存储,a = 0xF; //i.e a= 1111(Binary form)
所以,当我访问b[0 0r 1 or 2 or 3]
为什么输出不来像1, 1, 1, 1
实际上,在你分配到'abc.a'之后访问'abc.b'是我所知的未定义的行为。你不应该以任何可能认为它可行的方式依赖它。 –
@NiklasB。不再有C11可用,它在那里定义。 –
@Daniel Fischer:很好,谢谢。 –