user-0 提问: 这道题的输出是什么呢？为什么？

回复:
user: user-0
content: 引用 17 楼 Adol1111 的回复:[quote=引用 16 楼 aoqqq 的回复:] [quote=引用 14 楼 AzraelLamber 的回复:] [quote=引用 11 楼 Adol1111 的回复:] [quote=引用 10 楼 wyc6668205 的回复:] 这个得分系统，在windows系统是低字节在前，高字节在后，得出的结果是266(010A) 在linux系统是高字节在前，低字节在后，得出的结果是167837696(0A010000) 联合体的内存是共享的，所有变量共用一块内存，为最大内存空间变量的内存空间 大小端应该和系统无关吧，是硬件决定的吧。[/quote] 嗯cpu定的[/quote]  administrator@ubuntu:~/Desktop/aoqianglin $ vi Test3.c  administrator@ubuntu:~/Desktop/aoqianglin $ gcc -o Test3 Test3.c  administrator@ubuntu:~/Desktop/aoqianglin $ ./Test3  -1217265398       就是把这个在linux下测试的，[/quote] 这个还真不能这样说，-1217265398的16进制的64位值是FFFF FFFF B772010A。算32位的话，去掉前面的FFFF FFFF也就是B772 010A，你可以最后4位是 010A 和 你的设置是符合的。有问题的是前面的4位是B772，问题就在于你没给它指定值，所以他里面的值是无法保证的。你应该声明char[4]，然后先全部清0，再赋值。[/quote] 分析非常到位，赞

user: user-1
content: 引用 楼主 aoqqq 的回复:union {  int i;  char x[2]; }a;   void main() {  a.x[0] = 10;   a.x[1] = 1;  printf("%d",a.i); }   联合体啊 就像int 你也可以看作char x[4] = {...}

user: user-2
content: 引用 20 楼 jiandingzhe 的回复:输出是不定的。跟系统的大小端有关，还跟int的尺寸有关。 大小端跟CPU有关，和系统无关

user: user-2
content: 引用 19 楼 u011930458 的回复:问下，大端小端，高字节，低字节，大尾端，小尾端，的对应关系  [quote=引用 11 楼 Adol1111 的回复:] [quote=引用 10 楼 wyc6668205 的回复:] 这个得分系统，在windows系统是低字节在前，高字节在后，得出的结果是266(010A) 在linux系统是高字节在前，低字节在后，得出的结果是167837696(0A010000) 联合体的内存是共享的，所有变量共用一块内存，为最大内存空间变量的内存空间 大小端应该和系统无关吧，是硬件决定的吧。[/quote][/quote] 大端应该就是大尾端，是指：高位在低地址 小端应该就是小尾端，是指：尾位在低地址 如图：

user: user-3
content: 输出是不定的。跟系统的大小端有关，还跟int的尺寸有关。

user: user-4
content: 问下，大端小端，高字节，低字节，大尾端，小尾端，的对应关系  引用 11 楼 Adol1111 的回复:[quote=引用 10 楼 wyc6668205 的回复:] 这个得分系统，在windows系统是低字节在前，高字节在后，得出的结果是266(010A) 在linux系统是高字节在前，低字节在后，得出的结果是167837696(0A010000) 联合体的内存是共享的，所有变量共用一块内存，为最大内存空间变量的内存空间 大小端应该和系统无关吧，是硬件决定的吧。[/quote]

user: user-5
content: 关键是Union会共享空间，你给char数组赋值的时候，其实就等于是给int i赋值了。当然仅从i的角度来看，这个是无法预估的值，因为你是给char数组赋值，而不是i。

user: user-6
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……

user: user-2
content: 测试的结果依然是一个小端CPU，在测试的时候记得去掉干扰。不要让系统帮你取默认环境。

user: user-2
content: 引用 16 楼 aoqqq 的回复:[quote=引用 14 楼 AzraelLamber 的回复:] [quote=引用 11 楼 Adol1111 的回复:] [quote=引用 10 楼 wyc6668205 的回复:] 这个得分系统，在windows系统是低字节在前，高字节在后，得出的结果是266(010A) 在linux系统是高字节在前，低字节在后，得出的结果是167837696(0A010000) 联合体的内存是共享的，所有变量共用一块内存，为最大内存空间变量的内存空间 大小端应该和系统无关吧，是硬件决定的吧。[/quote] 嗯cpu定的[/quote]  administrator@ubuntu:~/Desktop/aoqianglin $ vi Test3.c  administrator@ubuntu:~/Desktop/aoqianglin $ gcc -o Test3 Test3.c  administrator@ubuntu:~/Desktop/aoqianglin $ ./Test3  -1217265398       就是把这个在linux下测试的，[/quote] 这个还真不能这样说，-1217265398的16进制的64位值是FFFF FFFF B772010A。算32位的话，去掉前面的FFFF FFFF也就是B772 010A，你可以最后4位是 010A 和 你的设置是符合的。有问题的是前面的4位是B772，问题就在于你没给它指定值，所以他里面的值是无法保证的。你应该声明char[4]，然后先全部清0，再赋值。

user: user-0
content: 引用 14 楼 AzraelLamber 的回复:[quote=引用 11 楼 Adol1111 的回复:] [quote=引用 10 楼 wyc6668205 的回复:] 这个得分系统，在windows系统是低字节在前，高字节在后，得出的结果是266(010A) 在linux系统是高字节在前，低字节在后，得出的结果是167837696(0A010000) 联合体的内存是共享的，所有变量共用一块内存，为最大内存空间变量的内存空间 大小端应该和系统无关吧，是硬件决定的吧。[/quote] 嗯cpu定的[/quote]  administrator@ubuntu:~/Desktop/aoqianglin $ vi Test3.c  administrator@ubuntu:~/Desktop/aoqianglin $ gcc -o Test3 Test3.c  administrator@ubuntu:~/Desktop/aoqianglin $ ./Test3  -1217265398       就是把这个在linux下测试的，

user: user-0
content: 引用 13 楼 wyc6668205 的回复:[quote=引用 11 楼 Adol1111 的回复:] [quote=引用 10 楼 wyc6668205 的回复:] 这个得分系统，在windows系统是低字节在前，高字节在后，得出的结果是266(010A) 在linux系统是高字节在前，低字节在后，得出的结果是167837696(0A010000) 联合体的内存是共享的，所有变量共用一块内存，为最大内存空间变量的内存空间 大小端应该和系统无关吧，是硬件决定的吧。[/quote]  sorry，我整错了，没经过测试道听途说的，确实不靠谱。[/quote]  我电脑的windows输出为266，linux输出为-1217396470，这不是跟系统有关啊

user: user-7
content: 引用 11 楼 Adol1111 的回复:[quote=引用 10 楼 wyc6668205 的回复:] 这个得分系统，在windows系统是低字节在前，高字节在后，得出的结果是266(010A) 在linux系统是高字节在前，低字节在后，得出的结果是167837696(0A010000) 联合体的内存是共享的，所有变量共用一块内存，为最大内存空间变量的内存空间 大小端应该和系统无关吧，是硬件决定的吧。[/quote] 嗯cpu定的

user: user-8
content: 引用 11 楼 Adol1111 的回复:[quote=引用 10 楼 wyc6668205 的回复:] 这个得分系统，在windows系统是低字节在前，高字节在后，得出的结果是266(010A) 在linux系统是高字节在前，低字节在后，得出的结果是167837696(0A010000) 联合体的内存是共享的，所有变量共用一块内存，为最大内存空间变量的内存空间 大小端应该和系统无关吧，是硬件决定的吧。[/quote]  sorry，我整错了，没经过测试道听途说的，确实不靠谱。

user: user-0
content: 我怪自己分不够多啊，真想都给高分，我这算是抛砖引玉啊

user: user-2
content: 引用 10 楼 wyc6668205 的回复:这个得分系统，在windows系统是低字节在前，高字节在后，得出的结果是266(010A) 在linux系统是高字节在前，低字节在后，得出的结果是167837696(0A010000) 联合体的内存是共享的，所有变量共用一块内存，为最大内存空间变量的内存空间 大小端应该和系统无关吧，是硬件决定的吧。

user: user-8
content: 这个得分系统，在windows系统是低字节在前，高字节在后，得出的结果是266(010A) 在linux系统是高字节在前，低字节在后，得出的结果是167837696(0A010000) 联合体的内存是共享的，所有变量共用一块内存，为最大内存空间变量的内存空间

user: user-0
content: 引用 7 楼 Adol1111 的回复:[quote=引用 5 楼 AzraelLamber 的回复:] 看内存嘛 赋值 char[0]内存 0x0a char[1]内存 0x01  int内存就是： 0x00 00 01 0a 这就是266 +1[/quote] 这么一讲确实清楚多了，为什么不是0a01呢

user: user-2
content: 关键是Union会共享空间，你给char数组赋值的时候，其实就等于是给int i赋值了。当然仅从i的角度来看，这个是无法预估的值，因为你是给char数组赋值，而不是i。

user: user-2
content: 引用 5 楼 AzraelLamber 的回复:看内存嘛 赋值 char[0]内存 0x0a char[1]内存 0x01  int内存就是： 0x00 00 01 0a 这就是266 +1