教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 初中教育 >

第八章 位域、联合、枚举和自定义类型

来源:网络收集 时间:2026-08-17
导读: 第八章 位域、联合、枚举 和自定义类型位域的说明与使用 联合的说明与使用 枚举 用typedef 定义类型 位域(位段) struct [位域结构类型名] 位域结构说明的一般形式是: { unsigned 成员名:位数; struct w_data ……………. { }; 该成员(位段) unsigned a:2;

第八章 位域、联合、枚举 和自定义类型位域的说明与使用 联合的说明与使用 枚举 用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字,全部文档内容请下载后查看。喜欢就下载吧 ……
第八章 位域、联合、枚举和自定义类型.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/1565919.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)