- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
免费版
第九章 联合和枚举
9.1.1 联合变量的定义和赋值
?? 联合变量定义的形式与结构很相似,除关键字不同,其余几乎相同。下面是一个联合模式的定义格式:
??? union(联合名)??? {?????? (联合成员说明);??? };
??? 其中,union是联合的关键字。(联合名)的命名方法同标识符,联合成员说明》是将组成该联合的所有成员进行类型说明。C:语言中,几乎所有类型都作为联合的成员,包含结构变量在内。
??? 联合变量的定义如下所示:??? union联合名)(联合变量名表);
??? 定义一个联合变量之前要先定义一种联合模式,任何一种联合变量都是属于某种联合模
??? 式的联合变量,这一点与结构变量很相似。联合变量名表)中,可以是一个联合变量名,也可是多个联合变量名,多个变量用逗号分隔。这里的变量可以是一般联合变量,也可以是指向联合变量的指针。例如:
??? union date??? {??????? Char c_data;??????? int idata;??????? float? f._data;??????? double d_data;??? };??? union data dl,d2.*pd.
??? 其中,anion是关键字,data是联合名,该联合有4个成员,分别作了说明dl和d2是两个联合变量,pd是一个指向联合变量的指针。联合变量dl和d2都是具有联合名data的联合变量。而联合变量指针pd也是指向具有data联合名的联合变量的指针。
??? 与结构相类似,上述定义联合变量也可以写成如下形式:
??? union data??? {?????? char c_data;?????? int i _data;?????? float f_data;?????? double d_data;??? }d1,d2,*pd;
??? 这里,也同样定义了联合变量dl和d2以及指向联合变量的指针pd。
??? 联合变量的成员表示也与结构相似。联合变量的成员用·表示,指向联合变量的指针用一表示。
??? 联合变量的赋值主要是给联合变量的各成员赋值。例如,在上例中,对联合变量dl的几个成员赋值分别如下:
??? dl.c_data=a;??? dl.i_data=15;??? dl.f_data=10.5;??? dl.b_data=87.63;
??? 对指向联合变量的指针pd赋值与给联合变量赋值相同,只是其成员表示不同。例如,给pd的最后一个成员赋值如下:??? Pd一d_data =97.0
??? 由于联合变量中的若干个成员共用内存单元,即一个联合变量的所有成员具有一个相同
??? 的内存地址值,因此,在联合变量中起作用的成员是最近一次被赋值的成员,因为一个联合变量的若干个成员共用一个内存地址,存入了新的成员值时,原来的成员值便失去意义。
??? 如果给联合变量赋初值,只能有一个值,并且指定斌给第一个成员,而不能用多个值赋给多个成员,其原因是由于联合变量所有成员共占一个内存地址。
C语言基础教程 9.1.2联合与结构的区别
??? 前面对联合变量的定义和联合变量成员的表示以及对联合变量的赋值作了描述,可以看出联合与结构有许多相似之处,但是也指出了两者的最大区别在于联合是共址的,结构是异址的。即联合的所有成员共同使用一个内存地址,而结构的每个成员都有自己的内存地址。
??? 由于联合的共址特性使得它与结构产生了很大差别。例如,在斌初值时,联合变量只能给第一个成员赋初值;不能对联合变量名赋值;不能用联合变量作函数参数,也不能用联合变量作函数的返回值,只能用指向联合变量的指针作函数参数。
??? 下面举出两个例子说明联合变量的使用和特点。
??? [例9.1] 分析下列程序的输出结果,进而说明联合变量的成员是共址的。
uninn data
{
char c_data;
int i_data;
float f_data;
};
main()
{
unian data dl;
d1.c_data=a;
dl.i_data=5;
d1.f_data=3.7;
printf (%c\t%d\t%.2f\n,dl.c._data,dl.i_data,dl. f,data);
printf(%d\n,sizeof(dl));
printf( %p\t%p\t%p\t%p\n,dl.c_data,dl.i_data,dl.f.data,dl);
}
??? 执行该程序输出结果如下:??? ???? ???? 3.7(?表示无意义)??? 4??? FFD6?? FFD6?? FFD6???? FFD6
??? 说明:
??? (1)该程序中,首先定义一个
您可能关注的文档
- C语言程序设计 习题大全(含答案) C语言-2.doc
- C语言程序设计(B)试卷.doc
- C语言程序设计(第三版)笔记——谭浩强.doc
- C语言程序设计(第三版)-谭浩强_笔记.doc
- c语言程序设计(科学出版社)课后习题解答.doc
- C语言程序设计(龙昭华主编)习题集.doc
- C语言程序设计:期末考试试卷(A卷).doc
- c语言程序设计__学生成绩管理系统.doc
- C语言程序设计_第五章 指针.doc
- C语言程序设计_梁栋_经典c程序100例==11--20.doc
- 供应链金融助力中小企业融资:2025年创新模式与可持续发展报告.docx
- 智能家居产品创新2025年实施方案评估报告.docx
- 心血管疾病医疗技术创新应用与2025年市场潜力深度解析报告.docx
- 2025年跨境电商美妆工具品牌联名合作模式创新趋势分析.docx
- 2025年植物基食品行业健康食品市场发展与竞争态势研究报告.docx
- 探索农业未来:2025年生物育种技术创新与应用案例.docx
- 开发工程师的试题带答案.pdf
- 2025年度生态保护修复资金申请流程详解报告.docx
- 2025年跨境电商美妆工具品牌运营体系构建与客户关系管理.docx
- 中药现代化进程中药企国际化合作模式研究报告.docx
文档评论(0)