自定义类型-结构,枚举,联合

前言
前面我们学习过很多数据类型,包括整数家族,浮点数家族,还有指针,数组等,今天学习三种自定义类型,结构,枚举与联合
文章目录
结构体
结构体的声明
和数组一样,结构体也是一种聚合类型数据。和数组不同的是,数组只能存放相同类型的元素,而结构体里面可以保罗万象,每一个成员可以具有不同的类型。
基本形式
struct tag
{
member-list;
}variable-list;
我们可以在申明结构体的时候就定义变量,如:
struct {
int a;
char b;
float c;
}x;
这种没有给出结构名的形式只能在申明的时候定义结构体变量,如果有其他的新增的结构体变量,就只能再定义一遍,所以不推荐使用。我们可以给它加上一个名称。如:
struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];//性别
char id[20];//学号
}; //分号不能丢
这种形式我们可以在声明的后面跟上变量名直接创建变量,如:
struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];//性别
char id[20];//学号
}x,y[20],*z; //分号不能丢
上面的代码就是创建了一个名称为x的结构体,一个数组名为y的结构体数组,以及指向这样一个结构体类型的指针z;
我们也可以在声明之后再定义变量,如:
struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];//性别
char id[20];//学号
}; //分号不能丢
struct Stu x,y[20],*z;
效果和上面是完全一样的,但是如果嫌每次定义变量都要跟上一个struct。我们不妨使用typedef。如:
typedef struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];//性别
char id[20];//学号
}Stu; //分号不能丢
Stu x,y[10],*z;
这样我们就可以使用Stu来定义结构体变量了。
结构体的初始化
用几段代码就能搞清楚初始化:
struct Point
{
int x;
int y;
}p1; //声明类型的同时定义变量p1
struct Point p2; //定义结构体变量p2
//初始化:定义变量的同时赋初值。
struct Point p3 = {
x, y};
struct Stu //类型声明
{
char name[15];//名字
int age; //年龄
};
struct