- 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语言的语法规则
知识点16 [共用体型数据]
综述:
通常情况下,一旦一个变量被创建,那么它就占据了一块内存区域,只能用于存放某类型的数据,例如,int型变量只能存放int型数据,结构体变量只能存放结构体类型的数据等等。但是,在解决实际问题的时候,会碰到一些特别的数据存放方式。
例1:希望创建一个变量u1(该变量在计算机内存中占据一块空间),用该变量来存放某同学的年龄或性别,年龄(整型)和性别(字符型)是不同类型的数据,年龄和性别不同时使用! 当需要使用年龄时,可以用它来存放年龄,需要使用性别时,可以用它来存放性别,该变量的内存空间大小=整型和字符型所需空间的较大值,也就是:希望该变量的内存空间允许存放不同类型的数据,用同一块内存地方来存放某同学的年龄或性别,如下所示:
u1 100,101号字节 ‘M’或19 显然,在这种情况下,变量u1的类型我们就无法表达了,u1不可能属于整型、实型、字符型等基本类型,因为这些类型的变量只能存放同一类型的数据,不能实现存放不同类型的int型和char型数据;u1也不属于数组,因为数组变量虽然可以存放多个元素,但元素类型也要求是一样的,如果将u1需要存放的年龄和性别看作两个元素,这两个元素类型不同;
u1是否属于结构体变量呢?u1需要存放的年龄和性别看作两个元素,这两个元素类型不同,正好可以看作是结构体变量的两个成员。但是,如果我们将u1定义成为一个结构体变量:
struct
{
char sex;
int age;
}u1; 那么,u1占据的内存空间=sex占据的1字节+age占据的2字节=3字节。显然,这不符合我们对u1的希望,我们只希望:
u1占据的内存空间=max(sex占据的1字节+age占据的2字节)=2字节
而且,如果u1作为结构体变量,其两个成员u1.sex 和 u1.age占据的是不同的内存空间,是可以同时使用的。而我们希望u1的两个成员u1.sex 和 u1.age占据的是相同的内存空间,两个成员相互覆盖使用。
可见,对于象u1这样的变量,需要约定新的数据类型。C语法规定了共用体类型来集中象u1这样的变量。
例2:某在校人员的人事信息整体:
姓名 类别 班级或职称 年龄 “Liming” student 1 19 “Lili” Teacher “Professor” 56 字符串型 枚举型 班级:int型
职称:10个字符组成的字符数组型 Int型 在上表数据中,姓名数据我们可以用字符串变量来存放,类别数据可以用枚举型变量来存放,年龄数据可以用int型变量来存放。分析班级或职称这个数据,如果我们创建一个变量u2来存放它,那么u2具备特征:u2可以存放int型的班级数据和字符数组型的职称数据,u2占据内存空间=max(班级占据的2字节+职称占据的10字节)=2字节,用这2个字节既存放int型数据,又存放字符数组型数据,即班级和职称这两个成员在内存中占据同一起始地址的内存单元,但班级和职称相互覆盖使用,在某一时刻,我们只会用到u2中的一个成员变量)。
对于象u1、u2这样的变量,C语法将它们归为共用体类型。有了共用体类型变量,我们就使用它来存放不同类型的数据,而且这些数据共享该变量的内存空间。下面,我们就详细学习与共用体类型相关的语法规则(包括如何声明共用体类型,如何定义和使用共用体类型变量)。
知识点161 [共用体类型声明]
同为共用体类型的变量,但其内部共享同一段内存的成员变量可能差别很大,例如成员个数不同,成员类型不同,可见,对于共用体类型变量,其最基本的要素为:
共享同一段内存的成员变量个数和成员变量类型
例如:共用体变量u1包含共享同一段内存的2个成员变量组成,int型成员变量age和char型成员变量sex。
地址 u1
100号字节 成员1:int age;
成员2:char sex; 19 2个字节 例如:共用体变量u2包含共享同一段内存的2个成员变量组成,int型成员变量class和字符数组型成员变量zhichen。
地址 u2
100号字节 成员1:int class;
成员2:char zhichen; “Professor” 10个字节
U1和u2就是两个不同的共用体类型变量。因此,C语法没有办法对共用体类型数据规定出诸如int、float的同一的类型符号,因为共用体类型数据的内部结构无法穷举,具体问题不同,成员个数和成员类型不同,就是不同的共用体类型数据,于是,C语法给程序设计者提供了一种自己声明所需要的共用体类型的方法,按照这个方法,可以声明实际问题所需要的任何共用体类型,指明该共用体类型的成员类型
您可能关注的文档
- Copyright 简报.ppt
- CORPORATE RESOLUTION 公司决议.pdf
- COSBS2000应用环境的要求.doc
- cover - 同时,今年8-9月间发生的美加、伦敦、悉尼.doc
- CP03020011 USB 2.0 Video Camera 用户手册.pdf
- cpa税法模拟试题综合题.doc
- CPCI 总线与VME 总线桥接底板的研制.pdf
- Creating Jobs in Michigan’s Renewable Energy Economy.pdf
- Crediting management system 财务信用管理系统.ppt
- CRM在通用 本刊特约记者田同生 在实施了CRM之后,会不会操作电脑可能.doc
文档评论(0)