文档详情

struct及union结构体及联合体的区别.docx

发布:2017-05-26约3.35千字共6页下载文档
文本预览下载声明
struct和union结构体和联合体的区别(转) 共用体? 构造数据类型,也叫联合体? 用途:使几个不同类型的变量共占一段内存(相互覆盖)? 结构体是一种构造数据类型? 用途:把不同类型的数据组合成一个整体-------自定义数据类型? ---------------------------------------------------------------? 结构体变量所占内存长度是各成员占的内存长度的总和。? 共同体变量所占内存长度是各最长的成员占的内存长度。? 共同体每次只能存放哪个的一种!!? 共同体变量中起作用的成员是尊后一次存放的成员,? 在存入新的成员后原有的成员失去了作用!? ---------------------------------------------------------------? Structure 与 Union主要有以下区别:? 1. struct和union都是由多个不同的数据类型成员组成, 但在任何同一时刻, union中只存放了一个被选中的成员, 而struct的所有成员都存在。在struct中,各成员都占有自己的内存空间,它们是同时存在的。一个struct变量的总长度等于所有成员长度之 和。在Union中,所有成员不能同时占用它的内存空间,它们不能同时存在。Union变量的长度等于最长的成员的长度。? 2. 对于union的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于struct的不同成员赋值是互不影响的。? 举一个例子:? 例: #include stdio.h? 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? 转换成10进制就是66(字母A的asc码) halt.second转换成10进制是65?? (字母B的asc码) 所以输出后就是 AB 下面同理了 ========================================================================== 第一题:? #include stdio.h? union? {? int i;? char x[2];? }a;? void main()? {? a.x[0] = 10;? a.x[1] = 1;? printf(%d,a.i);? }? 答案:266? 第二题:? main()? {? union{ /*定义一个联合*/? int i;? struct{ /*在联合中定义一个结构*/? char first;? char second;? }half;? }number;? number.i=0x4241; /*联合成员赋值*/? printf(%c%c\n, number.half.first, mumber.half.second);? number.half.first=a; /*联合中结构成员赋值*/? number.half.second=b;? printf(%x\n, number.i);?
显示全部
相似文档