C语言 第八节 位域.ppt

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第八章 位域,联合,枚举,定义类型及预处理功能 制作人 计科一班 王建政 目录 1.1位域 位域是结构成员的特殊形式,它需要定义位的长度,它是整型数存储区中相连的位的集合。通过位域可以方便的用成员访问小于一个字节的存储区。 它的一般形式为: struct 结构名 { 类型 变量名 1:长度; 类型 变量名 1:长度; } 2.1联合 联合 应用举例 联合 应用举例 3.1枚举 枚举 3.2定义类型名typedef 4预处理功能 1.简单的字符串替换 2.带参宏定义及宏调用 程序举例 宏的撤销 包含文件#include 包含文件 谢谢观赏 Page ? * 位域及结构嵌套 联合 枚举 定义类型名 预处理功能 1.1 位域 其中,冒号:表示使用的是位域,其后的长度表示需要分配的存储单元位数。 域变量必须定义为int或unsigned. 位域变量有某些限制。比如,不能去一个位域变量的地址;不允许超越整型量边界。例: 下面定义非法: struct flg { unsigned flag1:8; unsigned flag2:12; }fcode; 这里,flag1和flag2的位数超越整型(16位)的边界。应该写成; struct flg { unsigned flag1:8; unsigned: 0; unsigned flag2:12; }fcode; 这里,第二个成员省略位域变量名,其长度说明为0.表示该位域变量后面定义的位域从下一个字边界开始存放。 1.2结构嵌套 woker name[10] age wage payday 结构成员不仅可以是位数可变的位域变量,而且可以是另一个结构类型变量。这种情况被称为嵌套式结构。例如: 下面的结构变量payday就是嵌套在结构person内的一个嵌套式结构变量。 struct date { int month; int day; int year; }; struct person { char name[10]; int age; float wage; struct date payday; }woker; month day year 成员变量 成员变量 成员变量 结构成员变量 子成员 子成员 子成员 1.2结构嵌套 如果要给woker的各成员赋值,可以使用下面程序段: 显然对每个结构成员的访问,在结构嵌套情况下,必须从最外到最内层逐个列出结构成员变量名。 在定义时可以用同样的方法赋初值。 woker={Li_ming,34,350,11,1,1993}; woker.payday.year=1993 2.1联合 联合是一种与结构相类似的构造类型,联合与结构一样,可以包括不同类型和长度的数据。联合与结构的主要区别在于, 联合类型变量所占用空间不是各个成员所需空间字节数的总和,而是联合成员中需要空间最大的成员的字节数。 定义联合类型的一般形式: union 联合名 { 类型 变量名; 类型 变量名; }联合变量; 例如,定义一个名为data的联合,并说明value为联合变量,这个变量在不同时刻,可以是一个字符(1byte),一个短整型(2byte),一个长整型(4byte)。定义如下 union data { char ch; short num; long lnum; }value; value ch num lnum 内存区域 共享起始位置 共享存储空间 对于上述定义,当编译程序编译时看到关键字union,它扫视联合定义中的成员类型表,找出要求占用的最大存储空间的一个成员,并以这个成员所需的存储空间作为分配给联合变量的存储空间,以保证能存放任何一个成员数据。 为了访问联合的成员,可以使用与结构相同的方法,即使用句号运算符“.或箭头“-。如果直接对联合变量进行操作,使用“。”,若联合变量通过一个指针来访问,使用箭头运算符。例如: value.num=100; 此时,联合变量为一个整型变量。 value.ch=a;此时,联合变量为一个字符变量。 由于value是一个共享变量。因此在变成是必须记住在联合中当前存储的是什么样的数据类型。如果要进行数值计算,那么用法要前后一致,即取回的类型一定是最近才存放的类型。如果以一种类型存放,而以另一种类型取出,

文档评论(0)

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

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

1亿VIP精品文档

相关文档