c语言结构体与共用体之间的区别.doc

c语言结构体与共用体之间的区别.doc

ID:62033300

大小:32.00 KB

页数:3页

时间:2021-04-15

c语言结构体与共用体之间的区别.doc_第1页
c语言结构体与共用体之间的区别.doc_第2页
c语言结构体与共用体之间的区别.doc_第3页
资源描述:

《c语言结构体与共用体之间的区别.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、http://dev.21tx.com/2005/03/25/12365。html所谓共用体类型是指将不同的数据项组织成一个整体,它们在内存中占用同一段存储单元。其定义形式为:union共用体名{成员表列};7。5。1共用体的定义ﻫunion data{ﻫinta;floatb;doub lec;ﻫch ard ;ﻫ}obj;ﻫ该形式定义了一个共用体数据类型union data,定义了共用体数据类型变量obj。共用体数据类型与结构体在形式上非常相似,但其表示的含义及存储是完全不同的。先让我们看一个小例

2、子.[例7 -8 ]uniondata /*共用体*/{ﻫint a;float b;doublec;ﻫchar d;}mm;ﻫstructstud /*结构体*/ﻫ{inta;ﻫfloat b;doublec;ﻫchar d;ﻫ};ﻫm a in ( )ﻫ{structstudstudentprintf(”%d,%d",sizeof(struct stud),sizeof(uniondata));}ﻫﻫ程序的输出说明结构体类型所占的内存空间为其各成员所占存储空间之和.而形同结构体的共用体类型实际占用

3、存储空间为其最长的成员所占的存储空间。详细说明如图7-6所示。 ﻫ对共用体的成员的引用与结构体成员的引用相同。但由于共用体各成员共用同一段内存ﻫ空间,使用时,根据需要使用其中的某一个成员.从图中特别说明了共用体的特点,方便程ﻫ序设计人员在同一内存区对不同数据类型的交替使用,增加灵活性,节省内存。7.5。2 共用体变量的引用可以引用共用体变量的成员,其用法与结构体完全相同。若定义共用体类型为:union data/*共用体* /ﻫ{ﻫinta;float b;doublec;chard;ﻫ}m m;其成

4、员引用为:mm. a,mm.b,mm 。c,m m.dﻫ但是要注意的是,不能同时引用四个成员,在某一时刻,只能使用其中之一的成员。ﻫ[例7-9]对共用体变量的使用.ﻫmain()ﻫ{ﻫuniondata{ﻫinta;floatb;ﻫdouble c;ﻫchard;ﻫ}mm;mm. a =6;ﻫprintf(”%d\n",mm.a);mm。c=67.2;ﻫp r i ntf("%5.1 lf\n", mm 。 c) ;mm。d= 'W';mm 。b = 34。2;ﻫp rintf("%5。1f ,% c

5、n”,m m. b ,mm.d) ;ﻫ}程序最后一行的输出是我们无法预料的。其原因是连续做mm。 d='W ';m m 。 b =3 4。2;两个ﻫ连续的赋值语句最终使共用体变量的成员mm. b所占四字节被写入34.2,而写入的字符被覆盖了,输出的字符变成了符号“ =”。事实上,字符的输出是无法得知的,由写入内存的数据决定.ﻫ例子虽然很简单,但却说明了共用体变量的正确用法.[例7-10] 通过共用体成员显示其在内存的存储情况。ﻫ定义一个名为time的结构体,再定义共用体dig:ﻫstructtime

6、{ﻫintyear;/*年* /int month;/*月*/intday;/*日* /ﻫ};ﻫuniondigﻫ{ﻫstructtimedata;/*嵌套的结构体类型*/ﻫchar byte[6];} ;假定共用体的成员在内存的存储是从地址10 00单元开始存放,整个共用体类型需占存储空间6个字节,即共用体di g的成员d ata与byte共用这6个字节的存储空间,存储空间分配示意如图7 -7所示。由于共用体成员data包含三个整型的结构体成员,各占2个字节.由图7-7所示可见,ﻫda t a.ye

7、a r是由2个字节组成,用byt e字符数组表示为byte[0 ]和byte[1]。b yte[1]是高字节,byte[ 0]是低字节.下面用程序实现共用体在内存中的存储.ﻫstructtime{int year;/*年* /ﻫint month;/ *月*/ﻫintday; /*日*/ﻫ};uniondigﻫ{ﻫstructtime data;/*嵌套的结构体类型* /charbyte[6];ﻫ} ;ﻫmain()ﻫ{union digunit;ﻫinti;printf(”enter year:\n

8、");sc anf (”%d”,&un i t.da ta。yea r);/*输入年*/printf("enter month:”);sc anf(”% d" ,& unit .d ata。month);/*输入月* /ﻫprintf("enter day:");ﻫsc a nf( "%d ",&un it 。data.da y); /*输入日* /prin tf( " y e ar=% d month=%d day=%d”,unit.dat

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。