2023-2024-1 20231306 《计算机基础与程序设计》第十三周学习总结
作业信息
这个作业属于哪个课程 | 2023-2024-1-计算机基础与程序设计 |
---|---|
这个作业要求在哪里 | 2023-2024-1计算机基础与程序设计第一周作业 |
这个作业的目标 | 无 |
作业正文 | https://www.cnblogs.com/zwywuhu/p/17924830.html |
教材学习内容总结
《c语言程序设计》第12章——结构体和数据结构基础
-
结构体——允许用户自定义数据类型,与此相似的还有:链表、树、堆栈等数据对象。
-
结构体与共用体
- 结构体:
定义: 结构体是一种用户自定义的数据类型,允许你将不同类型的数据组织在一个单一的实体中。它允许你创建一个包含多个成员的数据结构。
在C语言中,结构体的定义通常如下:
struct MyStruct {
type1 member1;
type2 member2;
// ...
};
- 共用体:
用体是一种特殊的数据类型,允许你在相同的内存空间中存储不同的数据类型。共用体的所有成员共享同一块内存,但每次只能使用其中一个成员。
在C语言中,共用体的定义通常如下:
union MyUnion {
type1 member1;
type2 member2;
// ...
};
两者对比:
(1)内存分配方式:
结构体: 结构体的各个成员在内存中是依次排列的,每个成员都有自己的内存空间。
共用体: 共用体的所有成员共享同一块内存空间,它们的起始地址是相同的,这意味着共用体的大小取决于其最大的成员。
(2) 成员访问:
结构体: 结构体的不同成员可以同时被访问和操作,互不影响。
共用体: 只能同时访问一个成员,因为它们共享内存,修改一个成员可能会影响其他成员的值。
(3)使用场景:
结构体: 适合用于组织不同类型的数据,每个成员存储不同种类的信息。
共用体: 适合在同一块内存中存储不同类型的数据,但每次只使用其中一种类型的情况。通常用于节省内存空间。
(4)内存占用:
结构体: 占用的内存空间等于各个成员的大小之和。
共用体: 占用的内存空间等于最大成员的大小。
(5)修改数据的影响:
结构体: 修改结构体的一个成员不会影响其他成员。
共用体: 修改一个成员会影响共用体中的其他成员,因为它们共享同一块内存。
(6)应用领域:
结构体: 用于表示和组织复杂的数据结构,例如表示一个点、人物信息等。
共用体: 用于需要在不同类型数据之间切换的情况,例如在某个时刻存储整数,另一个时刻存储浮点数。
3.用typedef定义数据类型
-
使用方法举例
typedef int INT; // 将 int 定义为 INT,现在 INT 可以用来声明变量
typedef struct {
int x;
int y;
} Point; // 定义结构体别名 Point
int main() {
INT a = 5;Point p1;
p1.x = 3;
p1.y = 7;return 0;
} -
注:typedef只是为一种已存在的类型定义一个新名字而已,并未定义一种新的数据类型。
4.嵌套结构体
(1)在一个结构体内包含了另一个结构体作为其成员。例如:
include <stdio.h>
// 定义 Address 结构体
struct Address {
char street[50];
char city[50];
char state[20];
char zipCode[10];
};
// 定义 Person 结构体,其中包含一个 Address 结构体
struct Person {
char firstName[30];
char lastName[30];
int age;
struct Address homeAddress; // 嵌套的 Address 结构体
};
int main() {
// 创建一个 Person 结构体实例
struct Person person1 = {
"John",
"Doe",
30,
{"123 Main St", "Anytown", "CA", "12345"} // 初始化嵌套的 Address 结构体
};
// 访问 Person 结构体的成员
printf("Name: %s %s\n", person1.firstName, person1.lastName);
printf("Age: %d\n", person1.age);
// 访问嵌套的 Address 结构体的成员
printf("Address: %s, %s, %s %s\n",
person1.homeAddress.street,
person1.homeAddress.city,
person1.homeAddress.state,
person1.homeAddress.zipCode);
return 0;
}
5.结构体变量的引用
- 不能将一个结构体变量作为一个整体进行输入、输出操作,只能对每个具体成员进行输入、输出操作。
- 并非所有的结构体成员进行赋值时,必须使用字符串处理函数strcpy()。
- 全局声明:在函数体外声明对结构体类型可为所有函数使用。
- 局部声明:在函数体内声明的结构体类型只能在本函数内使用,离开该函数,声明失效。
6.结构体指针
- 例:STUDENT *pt = &stu1;
- 指向结构体的指针变量变量名->成员名
- 向函数传递结构体
(1) 用结构体的单个成员作为函数参数,向函数传递结构体的单个成员。
(2)用结构体变量作函数参数,向函数传递结构体的完整结构。
(3)用结构体指针或结构体数组作函数参数,向函数传递结构体的地址。
基于AI的学习
代码调试中的问题和解决过程
问题一:在进行openssl实践中,遇到的问题,如图:
问题一解决过程:经过询问chatgpt,结果如下:
问题二和问题二解决过程:
如图:
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
------- | -------- | ----- | ||
第二周 | 200/400 | 2/4 | ||
第三周 | 200/600 | 3/7 | ||
第四周 | 100/700 | 2/9 | ||
第五周 | 200/900 | 1/ 10 | ||
第六周 | 300/1200 | 1/11 | ||
第七周 | 400/1600 | 1/12 | ||
第八周 | 500/2100 | 1/13 | ||
第九周 | 500/2600 | 3/16 | ||
第十周 | 400/3000 | 1/17 | ||
第十一周 | 400/3400 | 1/18 | ||
第十二周 | 400/3800 | 2/20 | ||
第十三周 | 400/4200 | 6/26 |