2024年10月10日 16:04

This commit is contained in:
许大仙 2024-10-10 08:04:08 +00:00
parent 41ef712d0c
commit 5bba8d4b86
4 changed files with 207 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

View File

@ -323,6 +323,213 @@ int main() {
# 第二章:结构体(⭐) # 第二章:结构体(⭐)
## 2.1 概述
* C 语言内置的数据类型,除了几种原始的基本数据类型,只有数组属于复合类型,可以同时包含多个值,但是只能包含`相同类型`的数据,实际使用场景受限。
## 2.2 为什么需要结构体?
### 2.2.1 需求分析 1
* 现有一个需求,编写学生档案管理系统,这里需要描述一个学生的 信息。该学生的信息包括学号、姓名、性别、年龄、家庭住址等, 这些数据共同说明一个学生的总体情况。
![](./assets/5.png)
* 显然,这些数据类型各不相同,无法使用数组进行统一管理。
### 2.2.2 需求分析 2
* 隔壁老王养了两只猫咪。一只名字叫小黄,今年 2 岁,橘色;另一只叫小黑,今年 3 岁,黑色。请编写一个程序,当用户输入小猫的名字 时,就显示该猫的名字,年龄,颜色。如果用户输入的小猫名错误,则显示老王没有这只猫。
![](./assets/6.png)
### 2.2.3 传统的解决方案
* 尝试 ① :单独定义多个变量存储,实现需求,但是,多个变量,不便于数据的管理。
* 尝试 ② :使用数组,它是一组具有相同类型的数据的集合。但在编程中,往往还需要一组类型不同的数据,例如:猫的名字使用字符串、年龄是 int颜色是字符串因为数据类型不同不能用一个数组来存放。
* 尝试 ③ C 语言提供了结构体。使用结构体,内部可以定义多个不同类型的变量作为其成员。
## 2.3 什么是结构体
* C 语言提供了 struct 关键字允许自定义复合数据类型将不同类型的值组合在一起这种类型称为结构体structure类型。
![](./assets/7.png)
> [!NOTE]
>
> C 语言没有其他语言的对象object和类class的概念struct 结构很大程度上提供了对象和类的功能。
## 2.4 声明结构体
* 语法:
```c
struct 结构体名{
数据类型1 成员名1; // 分号结尾
数据类型2 成员名2;
……
数据类型n 成员名n;
};
```
> [!NOTE]
>
> 结构体中可以包含以下数据类型:
>
> * ① 基本数据类型:整型、浮点型、字符型、布尔型。
> * ② 指针类型。
> * ③ 枚举类型。
> * ④ 结构体类型:
> * 可以包含其他结构体作为成员(称为嵌套结构体)。
> * 结构体指针。
> * ⑤ 联合体类型。
> * ⑥ 位域。
* 示例:
```c
#include <stdio.h>
/**
* 声明学生的结构体
*/
struct Student {
int id; // 学号
char name[20]; // 姓名
char gender; // 性别
int age; // 年龄
char address[50]; // 地址
};
int main() {
// 禁用 stdout 缓冲区
setbuf(stdout, nullptr);
return 0;
}
```
* 示例:
```c
#include <stdio.h>
/**
* 声明猫的结构体
*/
struct Cat {
char name[20]; // 姓名
int age; // 年龄
char color[50]; // 颜色
};
int main() {
// 禁用 stdout 缓冲区
setbuf(stdout, nullptr);
return 0;
}
```
* 示例:
```c
#include <stdio.h>
/**
* 声明人类的结构体
*/
struct Person {
char name[20]; // 姓名
char gender; // 性别
int age; // 年龄
double weight; // 体重
};
int main() {
// 禁用 stdout 缓冲区
setbuf(stdout, nullptr);
return 0;
}
```
* 示例:
```c
#include <stdio.h>
/**
* 声明通讯录的结构体
*/
struct Contact {
char name[50]; // 姓名
int year; // 年
int month; // 月
int day; // 日
char email[100]; // 电子邮箱
char phoneNumber[15]; // 手机号
};
int main() {
// 禁用 stdout 缓冲区
setbuf(stdout, nullptr);
return 0;
}
```
* 示例:
```c
#include <stdio.h>
/**
* 声明员工的结构体
*/
struct Employee {
int id; // 员工编号
char name[20]; // 员工姓名
char gender; // 员工性别
int age; // 员工年龄
char address[30]; // 员工住址
};
int main() {
// 禁用 stdout 缓冲区
setbuf(stdout, nullptr);
return 0;
}
```
## 2.5 声明结构体变量
### 2.5.1 概述
* 定义了新的数据类型(结构体类型)以后,就可以声明该类型的变量,这与声明其他类型变量的写法是一样的。
2.5.2
# 第三章:共用体