为什么要打印反向字符串?

时间:2013-06-13 08:26:13

标签: c++ unions

我对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
}

2 个答案:

答案 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”