UNION IN C(将是什么输出)

sam*_*ain 1 c unions

union a
{
 int x;
 char a[2];
}
Run Code Online (Sandbox Code Playgroud)

如果我们为x分配512值并尝试打印[0]和[1]那么输出的内容请解释如何?

Jer*_*fin 5

根据标准,写入一个工会成员,然后从另一个成员读取的结果没有定义.几乎任何事都可能发生.

实际上,如果你在小端机器上运行代码,[0]可能是0,而[1]可能是2.在16位大端机器上,[0]将是2并且a [1]将为0.在32位大端机器上,(不存在,因为你定义的东西)a [2]将是2,并且a [0],a [1]和a [3]将为0.

  • 我不认为这是正确的.[C99](http://goo.gl/A6yq)(附有勘误表)6.5.2.3(结构和工会成员)在脚注中说:"如果用于访问工会对象内容的成员不同于成员最后用于在对象中存储一个值,该值的对象表示的适当部分被重新解释为新类型中的对象表示,如6.2.6所述(有时称为"类型双关"的过程).可能是一个陷阱代表." 正如@detly所说,表示是实现定义的,所以重新解释也必须如此. (2认同)