电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

struct和union结构体和联合体的区别VIP免费

struct和union结构体和联合体的区别_第1页
1/5
struct和union结构体和联合体的区别_第2页
2/5
struct和union结构体和联合体的区别_第3页
3/5
struct和union结构体和联合体的区别(转)共用体构造数据类型,也叫联合体用途:使几个不同类型的变量共占一段内存(相互覆盖)结构体是一种构造数据类型用途:把不同类型的数据组合成一个整体-------自定义数据类型---------------------------------------------------------------结构体变量所占内存长度是各成员占的内存长度的总和。共同体变量所占内存长度是各最长的成员占的内存长度。共同体每次只能存放哪个的一种!!共同体变量中起作用的成员是尊后一次存放的成员,在存入新的成员后原有的成员失去了作用!---------------------------------------------------------------Structure与Union主要有以下区别:1.struct和union都是由多个不同的数据类型成员组成,但在任何同一时刻,union中只存放了一个被选中的成员,而struct的所有成员都存在。在struct中,各成员都占有自己的内存空间,它们是同时存在的。一个struct变量的总长度等于所有成员长度之和。在Union中,所有成员不能同时占用它的内存空间,它们不能同时存在。Union变量的长度等于最长的成员的长度。2.对于union的不同成员赋值,将会对其它成员重写,原来成员的值就不存在了,而对于struct的不同成员赋值是互不影响的。举一个例子:例:#includevoidmain(){union{/*定义一个联合*/inti;struct{/*在联合中定义一个结构*/charfirst;charsecond;}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");}输出结果为:AB6261分析:union的成员是共用内存的union{inti;struct{charfirst;charsecond;}half;}number;number.i=0x4241;在这里i和half结构是共用内存number.i=0x4241给i赋值后,内存中以二进制存储0100001001000001按顺序对应到结构中halt.first=01000010转换成10进制就是66(字母A的asc码)halt.second=01000001转换成10进制是65(字母B的asc码)所以输出后就是AB下面同理了==========================================================================第一题:#includeunion{inti;charx[2];}a;voidmain(){a.x[0]=10;a.x[1]=1;printf("%d",a.i);}答案:266第二题:main(){union{/*定义一个联合*/inti;struct{/*在联合中定义一个结构*/charfirst;charsecond;}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);getch();}答案:AB6261C语言中的联合体(UNION)的概念是,联合体中的多种数据类型共享同一个内存空间。就拿你举的例子来说:union{inti;charx[2];}a;在联合体a中定义了两种数据类型,字符数组x以及整形变量i.其中整形变量是16位的,数组大小为2的字符数组为8X2=16位。如此一来,编译器便会为联合体a在内存中开辟一个16位的空间,这个空间里存储联合体的数据,但是这个空间只有16位,它既是整形变量的数据,也是字符数组的数据。如果你的程序从字符数组的角度解析这个空间,那么它就是两个字符,如果你的程序从整型的角度解析这个空间,那么它就是一个整数。以你的程序为例子,现在已经开辟了一个16位的空间,然后我们假定现在空间还没有被赋值,为:0000000000000000那么在运行完代码a.x[0]=10;a.x[1]=1;之后,16位的空间变为:0000011000000001然后程序运行printf("%d",a.i);就是把联合体a当成一个整数来解析,而不是字符串数组。那么这样一来,程序就把这16位变成了一个完整的整数:(0000000100000110)二进制=(266)十进制注意,你可以看到程序在把16位弄成整数的时候把后面八位放在了前面,前面八位放在了后面。这个反序是计算机存储结构造成的,这个和联合体没有直接关系。如果感兴趣的话可以参考汇编语言。就是这个道理。第二个例子同样,union{/*定义一个联合*/inti;struct{/*在联合中定义一个结构*/charfirst;charsecond;}half;}number;定义了联合体number,这个...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

struct和union结构体和联合体的区别

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部