第10章 共用体枚举类型.doc

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第10章 共用体枚举类型

第10章 共用体枚举类型 10.1 共用体 共用体——不同数据类型的数据项组成一个整体的构造数据类型。共用体变量的各个成员共同占用同一内存单元,即共用体变量所占用的存储空间的字节数,不是各成员所需字节数的总和,而是共用体各成员中需要空间最大的那个成员所需要的字节数。 1. 共用体类型的定义 定义格式: union 共用体名 { 数据类型 成员名1; 数据类型 成员名2; …… }; 如: union data { int i; char ch; float f; }; 这样就定义了一种共用体数据类型data,是一个含用i,ch,f三个成员的构造类型,该类型数据在内存中元占用的字节数与float类型的数据相同,即4个字节。 例:比较共用体和结构。 #includestdio.h union A { char ch; short i; long f; }; struct B { char ch; short i; long f; }; main() { union A AA; struct B BB; printf(%d %d %d %d\n,sizeof(AA),sizeof(AA.i),sizeof(AA.ch),sizeof(BB.f)); printf(%d %d %d %d\n,sizeof(BB),sizeof(BB.i),sizeof(BB.ch),sizeof(BB.f)); AA.i=97;AA.ch=98;AA.f=99; BB.i=97;BB.ch=98;BB.f=99; printf(%d %c %d\n,AA.i,AA.ch,AA.f); printf(%d %c %d\n,BB.i,BB.ch,BB.f); printf(%x %x %x\n,AA.i,AA.ch,AA.f); printf(%x %x %x\n,BB.i,BB.ch,BB.f); } 程序运行后输出: 4 2 1 4 //共用体占用空间为各成员中最长类型的字节数 8 2 1 4 //结构体占用的空间=各成员占用节数之和 99 c 99 //共体各成员的值均=最后一次向某成员的赋值 97 b 99 //结构体各成员的值是独立的 12ff7c 12ff7c 12ff7c//共用体各成员共享同一存储空间 12ff74 12ff76 12ff78//结构体各成员分配有独立的存储空间 注意:共用体用结构的区别是: ⑴共用体变量中的各成员共享同一存储空间;为结构体变量中的各成员均分配有独立的存储空间。 ⑵在共用体变量中,向一个成员赋值,其它成员的值均随之改变,即同一时刻只有一个成员的值存储在该存储体中,其他成员的值被其复盖;在结构体变量中,各成员的值互不影响,在同一时刻各成员的值都安全地存储在各自独立的存储单元中,不会相互复盖。 2. 共用体变量的定义 共用体变量的定义与结构体变量的定义相同。 ⑴先定义共用体类型,然后定义共用体变量。例如: union data a,b,c,*p,d[3]; ⑵在定义共用体类型的同时定义共用体变量。例如: union data { int i; char ch; float f; }a,b,c,*p,d[3]; ⑶定义与说明同时进行,不提供共用体名,为无名共用体。例如: union { int i; char ch; float f; }a,b,c,*p,d[3]; 10.2 共用体变量成员的引用 ⑴引用共用体变量成员的方式有三种: 共用体变量名.成员名 共用体指针名-成员名 (*共用体指针名).成员名 例如: #includestdio.h #includestdlib.h union data { int i; char ch; short f; }; void main() { union data a,*p; p=a; a.i=120; printf(%d %c %d\n,a.i,p-ch,(*p).f); printf(%0x %0x %0x\n,(a.i),(a.ch),(a.f)); } 运行结果为: 120 x 120 12ff7c 12ff7c 12ff7c 可见,三个成员i、ch、f确实共同用一地址空间 ⑵引用规则 ◇不能引用共用体变量,只能引用其成员。例如: a=120; 是错的。 ◇可以用一个共用体变量为另一个共用体变量赋值。例如: #includestdio.h #includestdlib.h union data { int i; char ch; short f; }; void main() { union

文档评论(0)

jgx3536 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档