stru ct 和u nion 结构体和联合体的区别(转) 共用体 构造数据类型,也叫联合体 用途:使几个不同类型的变量共占一段内存(相互覆盖) 结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体-------自定义数据类型 --------------------------------------------------------------- 结构体变量所占内存长度是各成员占的内存长度的总和。 共同体变量所占内存长度是各最长的成员占的内存长度。 共同体每次只能存放哪个的一种!! 共同体变量中起作用的成员是尊后一次存放的成员, 在存入新的成员后原有的成员失去了作用! --------------------------------------------------------------- Stru ctu re 与 Union 主要有以下区别: 1. stru ct 和u nion 都是由多个不同的数据类型成员组成, 但在任何同一时刻, u nion 中只存放了一个被选中的成员, 而 stru ct 的所有成员都存在。在 stru ct 中,各成员都占有自己的内存空间,它们是同时存在的。一个stru ct 变量的总长度等于所有成员长度之 和。在 Union 中,所有成员不能同时占用它的内存空间,它们不能同时存在。Union 变量的长度等于最长的成员的长度。 2. 对于u nion的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于stru ct的不同成员赋值是互不影响的。 举一个例子: 例: #include void main() { union{ /*定义一个联合*/ int i; struct{ /*在联合中定义一个结构*/ char first; char second; }half; }number; number.i=0x4241; /*联合成员赋值*/ printf("%c%c\n", number.half.first, number.half.second); number.half.first='a'; /*联合中结构成员赋值*/ number.half.second='b'; printf("%x\n", number.i); system("pause"); } 输出结果为: AB 6261 分析: union 的成员是共用内存的 union{ int i; struct{ char first; char second; }half; }number; number.i=0x4241; 在这里i 和 half 结构是共用内存 number.i=0x4241 给i 赋值后,内存中以二进制存储0100 0010 0100 0001 按顺序对应到结构中 halt.first=01000010 转换成10 进制就是66(字母A 的asc 码) halt.second=01000001 转换成10 进制是65 (字母B 的asc 码) 所以输出后就是 AB 下面同理了 ===============================================================...