- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c语言结构体和共用体,实验心得
所谓共用体类型是指将不同的数据项组织成一个整体,它们在内存中占用同一段存储单元。其定义形式为: union共用体名 {成员表列}; 共用体的定义 uniondata { inta; floatb; doublec; chard; }obj; 该形式定义了一个共用体数据类型uniondata,定义了共用体数据类型变量obj。共用体 数据类型与结构体在形式上非常相似,但其表示的含义及存储是完全不同的。先让我们看一个小例子。 [例7-8] uniondata/*共用体*/ { inta; floatb; doublec; chard; }mm; structstud/*结构体*/ { inta; floatb; doublec; chard; }; main() { structstudstudent printf(%d,%d,sizeof(structstud),sizeof(uniondata)); } 程序的输出说明结构体类型所占的内存空间为其各成员所占存储空间之和。而形同结构体的 共用体类型实际占用存储空间为其最长的成员所占的存储空间。详细说明如图7-6所示。 对共用体的成员的引用与结构体成员的引用相同。但由于共用体各成员共用同一段内存空间,使用时,根据需要使用其中的某一个成员。从图中特别说明了共用体的特点,方便程序设计人员在同一内存区对不同数据类型的交替使用,增加灵活性,节省内存。 共用体变量的引用 可以引用共用体变量的成员,其用法与结构体完全相同。若定义共用体类型为: uniondata/*共用体*/ { inta; floatb; doublec; chard; }mm; 其成员引用为:mm.a,mm.b,mm.c,mm.d 但是要注意的是,不能同时引用四个成员,在某一时刻,只能使用其中之一的成员。 [例7-9]对共用体变量的使用。 main() { uniondata { inta; floatb; doublec; chard; }mm; mm.a=6; printf(%d\n,); mm.c=67.2; printf(%5.1lf\n,mm.c); mm.d=W; mm.b=34.2; printf(%5.1f,%c\n,mm.b,mm.d); } 程序最后一行的输出是我们无法预料的。其原因是连续做mm.d=W;mm.b=34.2;两个 连续的赋值语句最终使共用体变量的成员mm.b所占四字节被写入34.2,而写入的字符被覆盖 了,输出的字符变成了符号“=”。事实上,字符的输出是无法得知的,由写入内存的数据决 定。 例子虽然很简单,但却说明了共用体变量的正确用法。 [例7-10]通过共用体成员显示其在内存的存储情况。 定义一个名为time的结构体,再定义共用体dig: structtime { intyear;/*年*/ intmonth;/*月*/ intday;/*日*/ }; uniondig { structtimedata;/*嵌套的结构体类型*/ charbyte[6]; }; 假定共用体的成员在内存的存储是从地址1000单元开始存放,整个共用体类型需占存储空间6个字节,即共用体dig的成员data与byte共用这6个字节的存储空间,存储空间分配示意如图7-7所示。 由于共用体成员data包含三个整型的结构体成员,各占2个字节。由图7-7所示可见,data.year是由2个字节组成,用byte字符数组表示为byte[0]和byte[1]。byte[1]是高字节, byte[0]是低字节。下面用程序实现共用体在内存中的存储。 structtime { intyear;/*年*/ intmonth;/*月*/ intday;/*日*/ }; uniondig { structtimedata;/*嵌套的结构体类型*/ charbyte[6]; }; main() { uniondigunit; inti; printf(enteryear:\n); scanf(%d,unit.data.year);/*输入年*/ printf(entermonth:\n); scanf(%d,unit.data.month);/*输入月*/ printf(enterday
文档评论(0)