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这个名字。