我对u6.c的预期输出是ABC,但在这里我得到了CBA为什么会这样?请您详细解释一下这个问题吗?
union mediatech
{
int i;
char c[5];
};
int main(){
mediatech u1 = {2}; // 1
mediatech u2 = {'a'}; // 2
mediatech u3 = {2.0}; // 3
mediatech u6 = {'ABC'}; // 6
cout<<"\nu6.i = "<<u6.i<<" u6.c="<<u6.c; // o/p: u6.i=4276803 u6.c=CBA
}
答案 0 :(得分:14)
您正在使用多字符文字'ABC'
初始化int
。
如何解释多字符文字(这是一种不常见的使用''
的方式)是实现定义的。具体而言,int
解释中各个字符的顺序是实现定义的。
根据'ABC'
中字符的顺序,没有可移植的(即与实现无关的)方式来预测此程序将执行的操作。
从标准(C ++ 11,§2.14.3/ 1):
[...]多字符文字具有类型
int
和实现定义的值。
答案 1 :(得分:5)
http://en.wikipedia.org/wiki/Little_endian#Little-endian
您可能使用x86架构的处理器:),这是小端的。
这意味着当你将字符分配给char数组时,它们会以相同的顺序进入内存,但当你将该内存读为整数时,它会以相反的顺序进入处理器寄存器。
<强>被修改强>
对不起,相反但是以相反的顺序,你用'ABC'多字符文字初始化整数,它以相反的顺序从处理器寄存器到内存,而作为字符数组变成“CBA”