我对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和实现定义的值.
http://en.wikipedia.org/wiki/Little_endian#Little-endian
您可能使用x86架构的处理器:),这是little-endian.
这意味着当您将字符分配给char数组时,它们会以相同的顺序进入内存,但是当您将该内存读取为整数时,它会以相反的顺序进入处理器寄存器.
编辑
对不起,相反但是以相反的顺序,用"ABC"多字符文字初始化整数,它以相反的顺序从处理器寄存器到内存,作为字符数组,它变成"CBA"
| 归档时间: |
|
| 查看次数: |
238 次 |
| 最近记录: |