2017导游考试题库:编成高手进!这个数据是在内存里怎么存放的?

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/03 06:47:06
main()
{union{int a[2];long b;char c[2];}r,*s=&r;
s->b=0x12345678;
printf("%x\n",s->c[0]);
}
这个共用体里面输出的时候位置怎么排的阿?
既然最长的是long b
应该是4没错吧
但是输出的时候
a[0]==5678;
a[1]==1234;
c[0]==78;
c[1]==56;
b==5678!!!?!?!?!?!?最后一个怎么放的阿?怎么会是5678;
我用的是turbo c/c++3.0应该比较标准吧
为什么?
b为什么为零阿?

g++ 下面没问题 如果里面加一个 short int d 输出d则是 5678

计算机在存储数据的时候,是反序的,也就是说,你一个 0x12345678,在内存中的实际四个字节依次为:0x78 0x56 0x34 0x12。

所以 a[0] = 0x78 0x56 即 0x5678
a[1] = 0x34 0x12 即 0x1234
c[0] = 0x78
c[1] = 0x56

如楼上的所说,在大部分计算机里都是反序存放的,当然也有例外。