第8章-位域、联合、枚举、定义类型及预处理功能.ppt

第8章-位域、联合、枚举、定义类型及预处理功能.ppt

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

第八章 * 8 位域、联合、枚举、定义类型及预处理功能 8.1.1 位域 位域是结构成员的特殊形式,它需要定义位的长度。位域定义的一般形式是: struct 结构名 { 类型 变量名1:长度; 类型 变量名2:长度; ┆ 类型 变量名n:长度; } 其中,冒号“:”表示使用的是位域,其后的长度表示需要分配的存储单元的位数。域变量必须定义为int或unsigned。 8.1 位域和结构嵌套 例如: struct { unsigned bit0:1; unsigned bit1:1; unsigned bit2:1; unsigned bit3:1; unsigned bit4:1; unsigned bit5:1; unsigned bit6:1; unsigned bit7:1; }bits; 这个结构定义了8个成员变量,每个变量只有1位。实际上这8个连续的变量表示了一个字节中的8位。图8-1-1表示了结构变量bits在内存中的分配情况。 例:程序计算一个字符串中每个字符的奇偶校验码。输出该字符及其二进制表示形式,奇偶校验码放在二进制码前面,使奇偶校验码和字符二进制码中“1”的总 个数为偶数。 #include stdio.h struct bit { unsigned b0:1,b1:1,b2:1,b3:1,b4:1,b5:1,b6:1,b7:1; }*sp; static char data[ ]=”abcdef”; main( ) { int bit_sum,parity; char *dp; dp=data; while(*dp!=‘\0’) { sp=(struct bit *)dp; bit_sum=sp-b0+sp-b1+sp-b2+sp- b3+sp-b4 +sp-b5+sp-b6; parity=bit_sum%2; printf(”%c”,*dp); Printf(”%d%d%d%d%d%d%d%d\n”,parity, sp-b6,sp-b5,sp-b4,sp-b3,sp-b2, sp-b1,sp-b0); dp++; } } 运行结果: a 1 1 1 0 0 0 0 1 b 1 1 1 0 0 0 1 0 c 0 1 1 0 0 0 1 1 d 1 1 1 0 0 1 0 0 e 0 1 1 0 0 1 0 1 f 0 1 1 0 0 1 1 0 结构可以嵌套,即结构中可以是另一个结构类型的成员变量。例如: struct person struct date { { char name[10]; int month; int age; int day; float wage; int year; struct date payday; } }worker; 也可以表示为: 8.1.2 结构的嵌套 结构变量payday 是嵌套在结构person 内的一个成员分量。在访问嵌套结构的成员时,可以使用多个点操作符,从最外层到最内层逐个列出成员名: worker.wage=5000.0; worker.payday.month=11; …… struct person { char name[10]; int wage; struct date { int month; int day; int year; }payday; }worker; 8.2 联合 联合是一种与结构相类似的构造类型。联合与结构的主要区别在于,联合类型分量所占内存空间不是各个成员所需存储空间字节数的总和,而是联合成员中所需要存储空间最大的成员所需要的字节数。 编译

文档评论(0)

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

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

1亿VIP精品文档

相关文档