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

sre*_*ree 6 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
}
Run Code Online (Sandbox Code Playgroud)

jog*_*pan 14

您正在使用多字符文字'ABC'来初始化int.

如何解释多字符文字(这是一种不常见的使用方式'')是实现定义的.具体而言,int解释中的各个字符的顺序是实现定义的.

没有可移植的(即与实现无关的)方法来预测该程序将根据字符的顺序执行什么操作'ABC'.

从标准(C++ 11,§2.14.3/ 1):

[...]多字符文字具有类型int和实现定义的值.

  • @jogojapan:+1从来不知道这个字面类型,谢谢:) (2认同)

Dav*_*yan 5

http://en.wikipedia.org/wiki/Little_endian#Little-endian

您可能使用x86架构的处理器:),这是little-endian.

这意味着当您将字符分配给char数组时,它们会以相同的顺序进入内存,但是当您将该内存读取为整数时,它会以相反的顺序进入处理器寄存器.

编辑

对不起,相反但是以相反的顺序,用"ABC"多字符文字初始化整数,它以相反的顺序从处理器寄存器到内存,作为字符数组,它变成"CBA"