大小端模式:大端模式:先存放最高有效字节,表现为最高有效字节存储在低地址小端模式:先存放最低有效字节,表现为最低有效字节存储在低地址 小端模式便于机器处理,大端模式方便人阅读。 测试平台的字节序模式:代码1uniontest{inta;charb;}c;intmain(intargc,charconstargv〔〕){c。a1;cout(c。b1?小端:大端)endl;return0;} 为什么union可以测出当前平台的字节序到底是大端还是小端呢? union:共用体,也叫联合体,在一个联合内可以定义多种不同的数据类型,一个被说明为该联合类型的变量中,允许装入该联合所定义的任何一种数据,这些数据共享同一段内存,以达到节省空间的目的。 这里所谓的共享不是指把多个成员同时装入一个联合变量内,而是指该联合变量可被赋予任一成员值,但每次只能赋一种值,赋入新值则冲去旧值。 union变量所占用的内存长度等于最长的成员的内存长度。以下程序说明联合只能对一个成员赋值,所有的变量共享这一段内存uniontest{inta;charb;}c;intmain(intargc,charconstargv〔〕){c。a65;coutc。aendl;输出整数65coutc。bendl;输出65的ASCII码c。b66;coutc。aendl;coutc。bendl;return0;} 对于代码1,所以我们赋值c。a1;如果是小端模式,内存内存放的应该是0x00000001,此时c。b的值为0x01,如果是大端模式,存放的应该是0x01000000,此时c。b的值为0x00。 union与struct比较 联合与结构有一些相似之处。但两者有本质上的不同。在结构中各成员有各自的内存空间,一个结构变量的总长度是各成员长度之和(空结构除外,同时不考虑边界调整)。而在联合中,各成员共享一段内存空间,一个联合变量的长度等于各成员中最长的长度。联合里面那些东西不能存放? 我们知道,联合里面的东西共享内存,所以静态、引用都不能用,因为他们不可能共享内存。类可以放入联合吗? 因为联合里不允许存放带有构造函数、析够函数、复制拷贝操作符等的类,因为他们共享内存,编译器无法保证这些对象不被破坏,也无法保证离开时调用析够函数。 在C中使用union时,尽量保持C语言中使用union的风格,尽量不要让union带有对象。