1. 基本概述

构造类型:
不是基本类型的数据结构也不是指针,它是若干个相同或不同类型的数据构成的集合。常用的构造类型有数组、结构体、共用体。
数组用于保存多个相同类型的数据。
结构体用于保存多个不同类型的数据。

2. 结构体的概念

结构体是一种构造类型的数据结构,是一种或多种基本类型或构造类型的数据的集合。

3. 结构体类型的定义

先定义结构体类型,再去定义结构体变量

struct 结构体类型名{
成员列表
};

e.g.

struct stu{
int num;
char name[20];
char sex;
};

有了结构体类型后,就可以用类型定义变量了。

在定义结构体类型的时候顺便定义结构体变量,以后还可以定义结构体变量

struct 结构体类型名{
成员列表;
}结构体变量1,变量2;

e.g.

struct stu{
int num;
char name[20];
char sex;
}lucy,bob,alice;
struct stu stefen, lina;

注意: 一般结构体类型都会定义在全局,也就是main函数的外面
所以在定义结构体类型的同时定义变量,这些变量一般都是全局变量
定义完类型之后定义的结构体变量内存分配要看定义的位置。

无名结构体的定义

在定义结构体类型的时候,没有结构体类型名,顺便定义结构体变量,
因为没有类型名,所以以后不能再定义相关类型的数据了。

struct {
成员列表;
}变量1,变量2

注意: 无名结构体由于没有结构体名,所以定义完之后是无法在定义结构体变量的,只能在定义类型的同时定义结构体变量。
e.g.

struct {
int num;
char name[20];
char sex;
}lucy,bob;

给结构体类型取别名

通常咱们将一个结构体类型重新起个类型名,用新的类型名替代原先的类型。

typedef struct 结构体名 {
成员列表;
}重新定义的结构体类型名A

注意:typedef主要用于给一个类型取别名,此时相当于给当前结构体重新起了一个类型名为A,相当于 struct 结构体名,所以如果结构体要取别名,一般不需要先给结构体定义名字,定义结构体变量时,直接使用A即可,不用加struct。
e.g.

typedef struct stu{
	int num;
	char name[20];
	char sex;
}STU;

以后STU 就相当于 struct stu。STU lucy;和struct stu lucy;是等价的,所以可以不指定stu这个名字。