c语言基础教程_第九章联合和枚举,免费版.docVIP

c语言基础教程_第九章联合和枚举,免费版.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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)该程序中,首先定义一个

文档评论(0)

hong333666 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档