c语言-结构体
结构体
结构的模型:
- struct 结构体名 { //[成员列表(member list)/域表(field list)] 类型名1 成员名1; 类型名2 成员名3; }- Tips: - 许多计算机以4个字节为一个“字”,所以,如果在一个“字”中只存放了一个字节,但是该“字”剩下的3个字节不会被占用,而是跳过他们,去到下一个“字”开始存放。 - 所以这里sizeof(student1)的结果是64,而不是63 - 这种定义方式的好处:将`声明类型`和`定义变量`分离开来,可以随时修改- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 - 成员可以是其他结构体
 ### 定义结构体
 - 1. 先声明结构体类型,在定义该类型的变量
 ```c
 //声明结构体类型
 struct Student
 {
 int num;
 char name[20];
 char sex;
 int age;
 //struct Date birthday;
 chat addr[30];
 }
 struct Student student1,student2;
- 2.在声明类型的同时定义变量 - struct Student { int num; char name[20]; char sex; int age; }student1,student2;- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 - 3.不指定类型名而直接定义结构体类型变量
 - ```c
 struct
 {
 int num;
 int num;
 char sex;
 int age;
 /* data */
 }student1,student2;
 
- Tips: - 结构体类型与结构体变量:- 类型:定义结构体时用的,不会分配内存;
- 变量:实例化后的结构体,对其分配对应的空间大小;
 
- 结构体的成员名可以和程序中的变量名相同
 
- 结构体类型与结构体变量:
结构体变量的初始化和引用
| 1 |  | 
使用结构体数组
- 定义  1 
 2
 3
 4
 5
 6
 7
 8
 9// 方式1.
 struct 结构体名
 { 成员列表} 数组名[数组长度];
 //方式2
 struct Person{
 ...
 };
 struct Person leader[3];
- 赋值  1 
 2
 3struct Person leader[3] = { "li",0,"zhang",0,"sun",0};
 struct Person leader[3] = { {"li",0},{"zhang",0},{"sun",0}};
结构体指针
就是指向结构体变量的指针
- 一个结构体变量的起始地址 === 结构体变量的指针
指向结构体变量的指针
- 3种等价方法: - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12- struct Student
 {
 long num;
 };
 struct Student stu;
 //方法1
 stu.num;
 //方法2
 (*p).num;
 //方法3
 p->num;
指向结构体数组的指针
- 可以用指针变量指向结构体数组的元素 
- p应该指向结构体类型,而不是结构体数组元素中的成员 
- 如果非要,先将成员的地址转换成p的类型 - 1 - p = (struct Student*)stu[0].name;
 
结构体变量和结构体变量的指针作为函数参数
用指针处理链表
共用体类型
| 1 |  | 
| 1 |  | 
枚举类型
- 类型声明- 方式1:- 同时声明和定义[不带枚举类型名]
- enum {sum,mon,tue,wed,thu,fri,sat} workday,weekend;
 
- 方式2:- 先声明枚举类型名,再定义枚举变量
- enum Weekday{sum,mon,tue,wed,thu,fri,sat};
- enum Weekday workday,weekend;
 
 
- 方式1:
- 枚举类型的枚举元素是常量,不能对其赋值
- 每个枚举元素都代表一个整数,一般默认顺序为:0,1,2,3,4….
- 枚举元素可以用来判断比较,因为每个枚举类型变量的值是整数。
typedef声明新类型名
| 1 |  | 
typedef与#define的区别
- 相似:作用都是用来将一个名字替换成另一个
- 不同:- typedefis during- compile
- #defineis during- precomppile
 
c语言-结构体
      https://clint456.github.io/2023/09/22/C语言-2023-09-23-结构体/