共用体与枚举类型

9.7共用体

9.7.1引例

【例10.1】高校学生的课程设置中,有些课程是必修课,有些是选修课程,各门课程的考核方式不同,必修课采用百分制,选修课可以采用百分制和五级制(如'A''B''C''D''E')两种。学生在完成学校规定的课程的同时,可以根据需要选择自己感兴趣的一些课程。假设某个学期有三门选修课程:统计学(百分制)、电脑维护(百分制)、旅游管理(五级制),每位学生只能选择其中一门。编程实现输入若干个学生的成绩,统计各门选修课的人数并分别输出选修课的成绩。

9.7.2共用体类型与共用体变量

1.共用体类型

共用体,也叫联合体,是一种用户自定义的构造数据类型,它使几个不同类型的变量共占同一段内存。即在计算机的内存中分配一个特殊的存储空间,该存储空间是由若干个连续的内存单元构成的,各种不同类型的数据均可以存放在该存储空间中。共用体实质上是采用了覆盖技术,使几个变量互相覆盖。

声明一个共用体类型的一般形式为:

union 共用体名

{     类型名 成员名1;

类型名 成员名2;

……

类型名 成员名n;

};

关键字union是共用体类型的标志,“union 共用体名”共同构成共用体类型。注意括号后的分号是不可少的。

2.共用体变量

声明了共用体类型后就可以用它来定义共用体变量了,和结构变量的定义方法一样,定义共用体变量的方法也有三种:

方法一:先声明共用体类型,然后再定义共用体变量

方法二:声明共用体类型的同时定义共用体变量

方法三:直接定义共用体变量

3.共用体数组和共用体指针变量

声明了共用体类型后,也可以定义共用体数组和共用体指针变量,定义和使用方法同共用体变量。

9.7.3共用体变量的初始化

(1)由于共用体变量只有一个成员起作用,因此对共用体变量的初始化只能有一个初始值,也可以不加花括号。

(2)不能同时对共用体变量的所有成员进行初始化。

(3)共用体变量的初始化操作实际上是对其第一个成员进行的初始化。如果初始值的类型与第一个成员的类型不同,则系统会进行自动类型转换。

9.7.4共用体变量的使用

1.共用体变量的使用

定义了共用体变量后就能在程序中引用它了,但是不能整体引用共用体变量,而只能引用共用体变量中的成员,并且不能同时引用多个成员,在某一时刻,只能使用其中之一的成员。

对于共用体变量成员的引用也是通过成员运算符“.”进行的,引用方式为:

共用体变量名.成员名

2.共用体变量作为参数

与结构变量类似,共用体变量可以作为参数进行传递。共用体作为实参传递的是共用体变量的值,也可以使用共用体数组或共用体指针传递地址。

3.共用体和结构的嵌套

共用体和结构可以嵌套使用,即结构中的成员可以是共用体,共用体中的成员也可以是结构。引用内部成员的方式如下:

结构变量.共用体变量.成员

共用体变量.结构变量.成员

9.8枚举

9.8.1引例

【例9.10】某餐厅用西瓜、桃子、草莓、香蕉、菠萝、苹果六种水果制作水果拼盘,要求每个拼盘中有四种不同水果。编写程序计算可以制作出多少种这样的水果拼盘。

9.8.2枚举类型的定义

1.枚举类型

声明一个枚举类型的一般形式为:

enum 枚举名{      枚举值列表   };

(1)关键字enum是枚举类型的标志,“enum 枚举名”构成枚举类型。

(2)枚举是一个集合,集合中的元素(称为枚举成员或枚举常量)是一些特定的标识符,元素之间用逗号隔开。

(3)在枚举类型中,枚举成员是有值的,第一个枚举成员的默认值为0,后续成员的值依次递增。

(4)枚举成员是常量,不能对它们赋值。如“red=1;”是错误的。但是在定义枚举类型时可以指定枚举成员的值。

(5)同一个程序中不能定义同名的枚举类型,不同的枚举类型中也不能存在同名的枚举成员。

2.枚举变量

声明了枚举类型后,可以使用它来定义枚举变量,定义的方法与结构、共用体类似,有以下三种形式:

形式一:先定义枚举类型,然后定义枚举变量

形式二:定义枚举类型的同时定义枚举变量

形式三:直接定义枚举变量

使用枚举变量时需注意:

(1)枚举变量的值只能为枚举类型中列举出来的枚举成员。

(2)枚举成员不是字符常量或字符串常量,使用时不能加单引号或双引号。

(3)不能将一个数值直接赋值给枚举变量。

9.8.3枚举类型的使用

1.枚举类型数据的输入输出

枚举类型的数据不能直接进行输入输出。在输入时应先输入其序号,然后使用强制类型转换完成;输出时应先进行转换才能输出其对应的字符串。

2.枚举类型数据的关系运算

同一种枚举类型数据可以进行关系运算,枚举类型数据的比较是对其序号进行比较。

3.枚举类型与sizeof运算符

在C语言中,枚举类型是被当作整型常量来处理的,因此枚举类型占用内存字节数为2,可以使用sizeof运算符来计算。

9.9类型定义

C语言不仅提供了丰富的数据类型,还允许用户自己定义类型说明符,即允许用户为数据类型取“别名”,类型定义符typedef可用来实现此功能。

使用typedef定义类型说明符的格式为:

typedef 类型标识符 别名;

其中,类型标识符可以是C语言中的基本数据类型或者是构造数据类型。

使用typedef定义类型的步骤如下:

(1)按定义变量方法写出定义体,如:int i;

(2)将变量名换成新类型名,如:int INTEGER;

(3)最前面加typedef,如:typedef int INTEGER;

(4)用新类型名定义变量,如:INTEGER i,j;

你可能感兴趣的:(C语言,c语言,开发语言,算法)