当前位置:文档之家› C语言共用体、枚举、typedef

C语言共用体、枚举、typedef

一、typedef声明新的类型名
结构体类型名较长、有些类型名不直观或不习惯、不喜欢?可不可以重命名呢?
用typedef声明新的类型名来代替已有的类型名
例如:
1)typedef float single;
2) typedef struct STU SD;
则“float x,y;”与“single x,y;”等价;
“p=(struct STU*)malloc(sizeof(struct STU));”与
“p=( SD *)malloc(sizeof(SD));”等价。

二、共用体
1、共用体类型的定义
当若干变量每次只使用其中之一时,可以采用“共用体”数据结构。

共用体数据中各成员存放到同一段内存单元,设置这种数据类型的主要目的就是节省内存。

共用体类型需要用户自己定义,然后才能用之来定义相应类
型的变量、数组、指针等。

定义共用体类型的格式为:
union 共用体类型名
{ 数据类型1 成员名1;
数据类型2 成员名2;
……
数据类型n 成员名n;
};
【注意】在右花括号}的后面有一个语句结束符“分号”。

2、共用体变量、数组的定义
有三种方法可以定义共用体变量、数组:先定义共用体类型,然后定义变量、数组;同时定义共用体类型和变量、数组;定义无名称的共用体类型的同时定义变量、数组。

例如:①union GYT
{char a[2];
int b;
};
GYT x ,y[5];
②union GYT
{ char a[2];
int b;
}x ,y[5];
③union
{ char a[2];
int b;
}x ,y[5];
上述三种方法完全等价。

【注意】(1)共用体变量所占内存单元数目等于占用单元数目最多的那个成员的单元数目。

(2)共用体变量各成员占据相同的起始地址,每一瞬时
只有一个成员起作用,成员的引用方式是:共用体变量名.成员名。

例如,有如下定义和赋值:
union GYT
{ char a[2];
int b;
}x;
x.a[0]= '\x41'; x.a[1]= '\x22';
其中字符'\x41'的ASCII码值为41H,二进制值为1000001B;字符'\x21'的ASCII码值为22H,二进制值为100010B。

占据内存情况如下(不足8位,高字节补0):
x.b
所以当执行printf("%d\n",x.b);时,输出8769,因为x.b中存放着(0010001001000001)2,十进制值为即为8769。

(3)共用体变量不能初始化,不能被整体引用,只能引用共用体变量中的成员。

三、枚举类型
枚举型变量
如果一个变量只有几种可能的值,可以定义为枚举类型。

“枚举”:将变量可能的值一一列举出来。

变量的值只能取列举出来的值之一。

1、定义形式如下:
enum 枚举型名{枚举常量标识符1, 枚举常量标识符2,……}; 注意:
①定义时枚举型名之后没有赋值号=;
②枚举常量标识符外不能添加任何符号,比如双引号等,必须
符合标识符命名规则;
③各枚举常量按定义顺序取值0、1、2、……,但在定义的同
时可以指定枚举常量的值,其后未指定的枚举常量的取值依次加1。

④枚举类型与整型是不同的数据类型,不能直接从键盘读入枚
举常量值。

2、例题
(1)有说明:enum money{Fen, Jiao, Yuan=100, Tenyuam};
每个枚举量所对应的实际值为__________。

A. 0,1,100,101
B.1,2,100,101
C. Fen, Jiao, Yuan, Tenyuam
D. Fen,Jiao,100,Tenyuam
(2)以下程序的输出结果是________。

enum week{SUN=7,MON=1,WED,TUS,FRI,SAT};
main()
{printf("%d",hour(FRI,SUN));}
hour(int x, int y)
{if(y>x)return 24*(y-x);
else return -1;
}。

相关主题