C语言的基本类型有:整型(int)、字符型(char)、浮点型(float)、双精度型(double)、空值型(void)以及派生类型 (指针和数组)。本章介绍C语言中可由用户构造的三种数据类型:
(1)用户定义类型(typedef);(2)结构体(struct);(3)共用体(union);
1 用typedef说明新类型名
C语言允许用 typedef 说明一种新类型名,一般形式为:
typedef 类型名 标识符;
“类型名”必须是在此语句前已有定义的类型标识符。“标识符”是一个用户定义标识符。typedef 语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并不产生新的数据类型,原有类型名依然有效。例如:
typedef int INTEGER;
该语句把一个用户命名的标识符 INTEGER 说明称一个 int 类型的类型名。在此说明之后,可以用标识符 INTEGER 来定义整型变量。例如:
INTEGER m, n; 等价于 int m, n;
INTEGER 是 int 的一个别名。为便于识别,一般习惯将新的类型名用大写字母表示。如:
typedef char* CHARP;
CHARP p;
等价于:char* p;
2 结构体类型
2.1结构体类型的说明
结构体类型说明的一般形式为:
struct 结构体标识名
{
类型名1 结构成员名表1
类型名2 结构成员名表2
...
类型名n 结构成员名表n
};
其中 struct 是关键字。“结构体标识名”和“结构成员名”是用户定义的标识符,其中“结构体标识名”是可选项,在说明中可以不出现。每个“结构成员名表”中都可以含有多个同类型的成员名,它们之间用逗号隔开。结构体中的成员名可以和程序中的其他变量同名;不同结构体中的成员也可以同名。注意:结构体说明同样要以分号(;)结尾。
struct date
{int year, month, day;};
结构体类型说明中的“类型名”,不仅可以是简单数据类型,也可以是结构体类型。当结构体说明中又包含结构体时,成为结构体的嵌套。如下:
struct student
{
char name[12];
char sex;
struct date birthday;
float sc[4];
};
ANSI C 标准规定结构体至少允许嵌套15层,允许内嵌结构体成员的名字与外层成员的名字相同。
结构体类型的说明只是列出了该结构的组成情况,标志着这种类型的结构“模式”已经存在,编译程序并没有因此而分配任何存储空间。真正占有存储空间的仍是具有相应结构体类型的变量、数组以及动态开辟的存储单元。因此,在使用结构体变量、数组或指针变量前,必须先对这些变量、数组或指针变量进行定义。