枚举类型
enum 类型标识符
{ 枚举值名表 };
注:枚举常量只定义序号;
枚举类型不是构造型数据类型,只是简单类型,类型定义中,仅定义该简单类型的取值范围,里面并没有成员的概念
一个枚举变量的值只能取该类型定义的几个枚举常量,可以将枚举常量或枚举变量赋给一个枚举变量,但不能将一个整数赋给它
枚举值可比较大小,按序号比较
枚举值不能直接输入和输出,输入一般通过序号转换,输出则一般通过switch语句以字符串的方式输出。
typedef语句
typedef语句可为系统已定义的简单类型(如int、char、float等)另起一个名称
typedef 类型名 新类型名
typedef为类型定义的关键字,类型名是标准类型名或已定义的类型名,新类型名为用户定义的类型名等价的别名
仅给已有的类型名重新命名,不产生新的数据类型
语句举例
typedef int INTEGER;
将int型重新命名为INTEGER,此后的程序中可用INTEGER作为类型名定义变量
typedef struct st_type STUDENT
struct st_type与STUDENT等价,也可进行如下定义:
typedef struct
{
...;
}STUDENT; //STUDENT是类型名,注意它和直接定义结构体变量的区别
此后可用STUDENT定义结构体变量。加粗样式
优点:缩写长的类型定义,使用便于理解的类型名
可将程序参数化,便于移植
结构体共用体注意点:
结构体类型不分配内存,不能赋值、存取、运算;结构体变量分配内存,可以赋值、存取、运算
结构体变量引用:
结构体变量作为整体不能进行运算、比较、输入、输出
结构体变量可以整体赋值,但不能将花括号括起来的常量表整体赋值给它
结构体变量可以作为函数的形参、实参或函数返回值
结构体成员可进行该成员类型允许的各种操作
要遵循结构体的法则,也要遵循数组的法则
共用体成员的定义和引用
不能同时存放多个成员的值,所以共用体变量不能在定义时赋初值
能整体引用的操作与结构体变量基本相同
任意时刻共用体成员只能对一个值有效
共用体和结构体的区别
共用体的各成员相互覆盖存储,几个不同的成员共占同一段内存,某一个时刻只能存一个成员,结构体各成员之间互相独立存储,不同的成员占不同的内存,可存储不同的值。所以结构体变量可初始化,共用体变量不能初始化。