第八章 位域、联合、枚举和自定义类型
第八章 位域、联合、枚举 和自定义类型位域的说明与使用 联合的说明与使用 枚举 用typedef 定义类型
位域(位段)
struct [位域结构类型名] 位域结构说明的一般形式是: { unsigned 成员名:位数; struct w_data ……………. { }; 该成员(位段) unsigned a:2; 所需要的位数 位域结构的各位段可以不恰好占满一个字节 unsigned b:6; 位域结构变量的定义和引用都与结构变量的定义类似 unsigned c:4; unsigned d:4; 位域结构成员无地址概念;也不能说明位段数组。 int i; 可以说明无名字段,无名字段的空间不能被引用。 }; 一个位段必须存储在同一个单元中,不能跨两个单元。位段除了可以参加位运算外,还可以在数值表达式中引用。
一个位域必须存储在同一个字节中,不能跨两个字节。 如一个字节所剩空间不够存放另一位域时,应从下一单 元起存放该位域struct bs { unsigned unsigned unsigned unsigned };
a:4; :0; //空域 b:6; //从下一单元开始存放 c:2;
位域可以无位域 名,这时它只用 来作填充或调整 位置。
struct k sb { int a:1;int :2 ; //该2位不能使用 int b:3;int c:2; };
联合
属于构造数据类型
用途:使几个不同类型的变量共占一段内存 形式: union 联合名 { 类型标识符 成员名; 类型标识符 成员名; ……………. };f
联合类型说明
例 union data { int i; char ch; float f; };
i ch
类型说明不分配内存
联合变量的定义
形式三: 形式二: 形式一: union union data union data { int i; { int i; { int i; char ch; char ch; char ch; float f; float f; float f; }a,b,c; }; }a,b; union data a,b,c,*p,d[3];i ch f i ch f
a 联合变量任何时刻 只有一个成员存在
b 联合变量定义时分配内存长度 =最长成员所占字节数
联合变量的引用
引用方式:联合指针名->成员名 (*联合指针名).成员名
联合变量名.成员名
引用规则
不能引用联合变量,只能引用其成员 union data 联合变量中起作用的成员是最后一次存放的成员 a.i a.ch a.f { 不能在定义联合变量时初始化 例 union
int 例 a.i=1; i; p->i p->ch p->f 可以用一个联合变量为另一个联合变量赋值 char ch; { a.ch= a ; union int i; 例 char float 与结构不同,不能用联合变量作为函数参数 a.f=1.5; f; 例 float x; ch; (*p).i (*p).ch (*p).f { int float f; i; }; printf(“%d”,a.i); ch; ( 编译通过,运行结果不对) union char d[0].i d[0].ch d[0].f }a; union data a,b,c,*p=&b, i; char ch; float f; { int d[3]; float a=1; f; ( ) }a,b; }a={1, a ,1.5}; ( ) a.i=1; a.ch= a ; a.f=1.5; b=a; ( ) x=a.f; ( )
例:将一个整数按字节输出 main( ) { union int_char { int i; char ch[2]; }x; x.i=24897; printf("i=%o\n",x.i);
printf("ch0=%o,ch1=%o\n ch0=%c,ch1=%c\n", x.ch[0],x.ch[1],x.ch[0],x.ch[1]); }
高字节 低字节 01100001 01000001
0100000101100001
ch[0] ch[1]
运行结果: i=60501 ch0=101,ch1=141 ch0=A,ch1=a
结构与联合
区别:存储方式不同、初始化、赋值等操作不同
两者可相互嵌套变量的各成员同时存在
struct node { char ch[2]; int k; }a; union node { char ch[2]; int k; }b;
ch k
a
ch k
b任一时刻只有一个成员存在
例:结构中嵌套联合 struct { char name[10]; int num; char sex; char job; union { int class; char position[6]; }category; }person[2];
name num Li 1011
sex F
job S
class
position 501
Wang 2086
M
T
prof
枚举
用于一个变量只有几种可能的值 “枚举”类型的定义中列举出所有可能的取值,被说 明为该“枚举”类型的变量取值不能超过定义的范围; 枚举类型的说明 enum [枚举名] { 枚举值表 }; 合法标识符 可省略
enum是关键字, 不能省略
枚举值是常量,由系统定义 了一个表示序号的数值。 可以初始化,可以进行比较
枚举变量的定义形式一: enum weekday { sunday, monday, tuesday, wednesday, tuesday, friday, saturday }; enum weekday wkd;形式二: enum weekday { sunday, monday, tuesday, wednesday, tuesday, friday, saturday } wkd; 形式三: enum { sunday, monday, tuesday, wednesday, tuesday, friday, saturday } wkd;
枚举类型的使用说明
枚举元素按定义时的顺序获得整型数值,定义时可改变 枚举元素的取值。
枚举元素(值)是常量,不能赋值。枚举元素可作为整型 例: 常量使用。 enum weekday { sun, mon, tue, wed, thu, fri, sat }; 只能把枚举值赋予枚举变量,不能把元素的数值直接赋予 /* sun, mon, tue, wed, thu, fri, sat 例: 枚举变量。如: a=sun;b=mon; 是正确的。而: a=0;b=1; 是 0, 1, 3, 4, sun=0, mon=1;2,/* wrong */ 5, 6 */ 错误的。如一定要把数值赋予枚举变量,则必须用强制类型 赋值: 转换,如: a=(enum weekday)2;其意义是将顺序号为2的 enum weekday ok */ int a=mon; /* 枚举元素赋予枚举变量a。 {sun=7, mon=1, tue, wed, thu, fri, sat=-1}; 比较: /*sun, mon, tue,"yes!\n" : "no!\n"); /* yes */ printf(7==sun? wed, thu, fri, sat 7, 1, 2, 3, 4, 5, -1 */
用typedef定义类型
功能:用自定义名字为已有数据类型命名 类型定义简单形式: typedef type name;类型定义语句关键字 已有数据类型名 例 typedef int INTEGER; 例 INTEGER a,b,c; REAL f1,f2; int a,b,c; float f1,f2; 用户定义的类型名
例 typedef float REAL;类型定义后,与已有类型一样使用
说明:1.typedef 没有创造新数据类型 2.typedef 是定义类型,不能定义变量 3.typedef 与 define 不同
define 预编译时处理 简单字符置换
typedef 编译时处理 为已有类型命名
typedef定义类型步骤:按定义变量
方法先写出定义体 如:int i; 将变量名换成新类型名 如:int INTEGER; 最前面加typedef 如:typedef int INTEGER; 例 typedef struct club 如:INTEGER i, j; { 用新类型名定义变量
类型定义可嵌套 char name[20]; GROUP为结构类型 PG为指向GROUP的指针类型 int size; 例:定义指针类型 int year; char *str; }GROUP; *STRING; char typedef GROUP *PG; typedef char *STRING; GROUP char *p; *pclub; PG pclub; STRING p, s[10]; struct club *pclub; char *s[10];
…… 此处隐藏:2071字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [初中教育]婚姻家庭法学教学教案
- [初中教育]浅谈小学语文教学中的创新教育
- [初中教育]中华人民共和国侵权责任法2009
- [初中教育]2016-2022年中国薄膜太阳能电池行业发
- [初中教育]多级轻型井点降水的应用
- [初中教育]外语教学法流派介绍和简评
- [初中教育]实验一、典型环节及其阶跃响应
- [初中教育]内蒙古2012-2013学年度国家奖学金获奖
- [初中教育]移动通信营销渠道管理探讨
- [初中教育]初三化学第一学期第一第二章基础知识点
- [初中教育]一天的食物教学设计
- [初中教育]光导照明系统的基本结构及工作原理
- [初中教育]长春市十一高、东北师范大学附属中学、
- [初中教育]“十三五”规划重点-配重式装卸车项目
- [初中教育]领导方法和领导艺术
- [初中教育]第三章 植物病虫草鼠害诊断与防治基
- [初中教育]2019届九年级语文上册 第二单元 6纪念
- [初中教育]甲级单位编制水豆腐项目可行性报告(立
- [初中教育]Ch8-1补充 09101数据库系统原理及应用-
- [初中教育]2017-2023年中国吊装设备行业市场分析
- 制作毕业纪念册需要哪些材料
- 2015-2016学年高二化学苏教版选修4课件
- 哈佛管理导师-创建商业案例
- 职场交际中的谈吐礼仪知识与职场会议接
- 中国糕点及面包行业发展现状与竞争战略
- 沂河“12·7”洪水茶山拦河坝
- 管道水流量计算公式
- 4-2发电机火灾事故处置方案
- 数字信号处理实验五
- 2009年经济师(中级)金融专业知识全真试
- 历史街区保护规划--04历史文化遗产保护
- 宁夏回族自治区中小学职称评价标准
- 评先评优测评表
- 圆的切线证明及线段长求解在在中考中的
- 【解析版】2015年江苏省南京外国语学校
- 人教版八年级上册科学第一章习题精华
- 责任心与执行力
- SA8000社会责任管理体系标准培训
- IgA肾病的饮食应注意
- 杭州市建设工程文件归档整理方案(试行)




