1、结构体
结构体类型一般形式:
struct 结构体名 {
类型名1 成员名1;
类型名n 成员名n;
};
struct :结构体类型
结构体名:用户定义标识
成员 :结构体组成成分,成员名命名规则与变量名相同
注:定义结构体类型,只是说明结构体的组成,编译系统并未给其分配内存空间,就像系统不为 int 等类型本身分配空间一样。
只有当定义了结构体类型变量时,系统才会分配内存空间给结构体变量。
结构体变量所占内存空间是其成员所占内存空间之和。
结构体变量的3种定义方式:
a.先定义结构体类型再定义变量
struct student{
char name[20];
int age;
};
struct student strstudent;
b.定义结构体类型的同时定义变量(常用)
struct student{
char name[20];
int age;
}strstudent;
c.直接定义结构体类型变量(无结构体名,用于不需再次定义此类型结构体变量的情况,即只定义一次该类型结构体变量)
struct {
char name[20];
int age;
}strstudent;
结构体变量初始化:
定义时初始化
struct student{
char name[20];
int age;
}strstudent = {"Xiao Ming" , 20};
结构体变量:
对结构体变量的引用须在定义结构体变量之后进行;
对结构体变量的引用可分为对结构体变量成员的引用和对整个结构体变量的引用;
引用的一般形式为:结构体变量.成员名
若某个成员本身即是结构体变量,须连续使用成员运算符 ' . ',直到最低一级成员才能进行运算;
结构体变量的成员都属于某种数据类型,故可以像普通变量一样进行类型允许的运算;
结构体数组:
定义结构体数组方法与定义结构体变量一样,定义结构体变量的3种方法亦可用来定义结构体数组。不过较结构体变量多了数组的属性,在初始化和引用时有稍许不同,此时每一个数组元素都是一个结构体变量。
2、联合体(共用体)
联合体类型一般形式:
union 联合体名{
类型名1 成员名1;
类型名n 成员名n;
};
对比:
结构体变量每个成员占有独立的内存区域
而联合体变量所有成员共用一段内存区域
故联合体变量所占内存大小为其成员中占内存空间最大的成员的大小
结构体变量可直接引用
而联合体变量不能直接引用,只能引用联合体变量的成员,引用方式同结构体变量
注:由于联合体成员变量共用内存空间,故联合体变量中有效的总是最后一次存放的成员变量的值
3、枚举
枚举类型定义的一般形式为: enum 枚举名{枚举元素1,枚举元素2,....};
枚举类型变量两种定义方法:
a.先定义枚举类型,再定义变量
enum season{Spring,Summer,Autumn,Winter};
enum season sea;
b.直接定义枚举变量
enum {Spring,Summer,Autumn,Winter} sea;
在C编译中,将枚举元素当做整型常量处理,称为枚举常量,故不能对其赋值
枚举常量的值取决于定义时枚举元素的排列顺序
默认第一个元素值为0,其后元素值为前一元素值加1
也可在定义时指定枚举元素的值,未被指定的元素值依旧为前一元素值加1
4、类型定义(取别名)
定义新类型的一般形式:
typedef 类型名 标识符;
struct student{
char name[20];
int age;
};
typedef struct student STUDENT;
STUDENT stu;
typedef并不是创造一个新类型,而是给已有类型取别名。