1.结构体
C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体,在其他一些高级语言中称为“记录”。
struct Student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
};
声明一个结构体类型一般形式为:
struct 结构体名
{成员列表};
注意:结构体类型的名字是由一个关键字struct 和结构体名组合而成的(例如struct Student),其中Student就是结构体名,但是这个变量的数据类型是struct Student。
结构体变量的引用由两种方式:①用“.”符号,结构体变量.结构体内的成员变量;②用“->”符号,结构体指针变量名->结构体成员变量。
2.共用体
有时候想用一段内存单元存放不同类型的变量。例如把一个短整型变量,一个字符型变量和一个实型变量放在同一个地址开始的内存单元中。以上三个变量在内存中占得字节数不同,但都是从同一地址开始存放,也就是使用覆盖技术,后一个数据覆盖了前一个数据。这种使几个不同的变量共享同一段内存的结构成为“共用体”类型的结构。
定义公用特类型变量的方式一般如下:
union 共用体名
{
成员表列;
}变量表列;
结构体变量所占得内存长度是各成员占得内存长度之和,而共用体所占得内存长度等于最长的成员长度。
引用共用体变量的方式:只有先定义了共用体变量才能引用它,但应注意,不能引用共用体变量,而只能引用共用体变量中的成员。
共用体类型数据的特点:
(1)同一个内存段可以用来存放不同类型的成员,但在每一瞬时只能存放其中一个成员,而不是同时存放几个;
(2)可以对共用体变量初始化,但初始化表中只能有一个常量;
(3)共用体变量中起作用的成员是最后一次被赋值的成员;
(4)共用体变量的地址和他各成员变量的地址都是同一地址。
3.枚举变量
如果一个变量只有几种可能的值,则可以定义为枚举类型,所谓枚举就是把可能的值一一列举出来,变量的值只限于列举出来的值的范围内。
声明枚举类型用enum开头。例如:
enum weekday{sun,mon,tue,wed,thu,fri,sat};
enum weekday
花括号中的sun,mon,...,sat成为枚举元素或者枚举常量。
说明:(1)c编译对枚举类型的枚举元素按常量处理,故称为枚举常量,不要因为它们是标识符而把它们看作变量,不能对其进行赋值。
(2)每一个枚举元素都代表一个整数,c语言按照定义时的顺序默认它们的值为0,1,2,3,4,5....在上面的定义中。sum的值为0,mon的值为1,如果有赋值语句:workday = Mon;相当于workday = 1。