2023-2024-1 20231309 《计算机基础与程序设计》第十一周学习总结
作业信息
这个作业属于哪个课程 | 2023-2024-1-计算机基础与程序设计 |
---|---|
这个作业要求在哪里 | 2023-2024-1计算机基础与程序设计第十一周作业 |
这个作业的目标 | |
作业正文 | 2023-2024-1 20231309 《计算机基础与程序设计》第十一周学习总结 |
教材学习内容总结
下图分别为《C语言程序设计》第10章梳理和《计算机科学概论》第15、16章梳理
教材学习中遇到的问题
-问题1:看书之后仍然对cookie没有清晰的认识,也不清楚为什么有时会在浏览网页时收到cookie提示请求
-解决:在问GPT后我了解了,cookie就是网站在用户计算机留下/访问相关数据的技术,同时,大多国家都有法律规定,网站使用cookie必须经过用户许可。
-问题2:在学习函数指针之后仍不会使用函数指针,也不知道函数指针有什么用。
-解决:在向GPT寻求实例后(代码如下)我知道了,函数指针的用法即(*f)(datatype),可以用于函数回调,即将该函数作为另一函数的参数。
#include <stdio.h>
// 回调函数,执行特定操作
void callback(int num) {
printf("回调函数被调用,传递的参数是:%d\n", num);
}
// 带有回调函数的函数
void performCallback(void (*cb)(int), int num) {
cb(num);
}
int main() {
int number = 42;
printf("执行回调函数前的操作\n");
// 调用带有回调函数的函数
performCallback(callback, number);
printf("执行回调函数后的操作\n");
return 0;
}
基于AI的学习
(以下为导出的对话记录)
来自你的消息:
今天我学习了C语言程序设计关于字符串的使用,请你以苏格拉底的方式向我提问,一次一个问题
来自AI的消息:
你好!我很高兴听到你学习了C语言程序设计中关于字符串的使用。现在,让我以苏格拉底的方式来向你提问。首先,你能否告诉我,在C语言中,你是如何声明和初始化一个字符串的呢?
来自你的消息:
声明和初始化字符串通常使用数组,如 char str[]="Hello";
来自AI的消息:
非常好!你正确地指出了在C语言中,可以使用数组来声明和初始化字符串。你提到了一个例子:char str[]="Hello";
。 那么,接下来的问题是,你知道为什么我们在声明和初始化字符串时需要使用字符数组吗?
来自你的消息:
因为C语言下没有直接对应的字符串数据类型,不得不采用字符数组
来自AI的消息:
非常准确!在C语言中,没有直接对应的字符串数据类型,因此我们通常使用字符数组来表示和操作字符串。字符数组允许我们在内存中连续存储一系列字符,从而构成字符串。接下来的问题是,你知道在C语言中,如何使用字符数组来表示和处理字符串的长度吗?
来自你的消息:
通常使用头文件<string.h>下的strlen(str)来获得字符串长度
来自AI的消息:
很好!你提到了在C语言中使用 <string.h>
头文件中的 strlen(str)
函数来获取字符串的长度。strlen
函数返回给定字符串的字符数(不包括空字符\0
)。继续深入讨论,你知道如何在C语言中比较两个字符串的内容是否相等吗?
来自你的消息:
通常使用头文件<string.h>下的strcmp(str1,str2)来比较字符串,如果两个字符串内容相等则返回)
来自AI的消息:
没错!在C语言中,可以使用 <string.h>
头文件中的 strcmp(str1, str2)
函数来比较两个字符串的内容。如果两个字符串相等,strcmp
函数会返回0;如果不相等,它会返回一个非零值。这是一种常见的比较字符串内容的方法。如果你有其他关于C语言字符串处理的问题,我很乐意继续帮助你。
来自你的消息:
请你继续以苏格拉底的方式向我提问,一次一个问题
来自AI的消息:
当然,我将继续以苏格拉底式的方式,逐步提问。首先,你能否告诉我如何在C语言中将一个字符串复制到另一个字符串中?
来自你的消息:
通常使用头文件<string.h>下的strcpy(str1,str2)来把str2的内容复制给str1
来自AI的消息:
非常好!你描述得很准确。在C语言中,可以使用 <string.h>
头文件中的 strcpy(str1, str2)
函数来将一个字符串复制到另一个字符串中。这个函数会将 str2
的内容复制到 str1
中,包括字符串结束符\0
。接下来,我想问一下你对C语言中动态内存分配的了解如何呢?
来自你的消息:
malloc、calloc?
来自AI的消息:
非常棒,你提到了C语言中的动态内存分配函数 malloc
和 calloc
。那么,你能够解释一下这两个函数的区别以及它们的作用吗?
来自你的消息:
我不太记得了,你能和我说说吗
来自AI的消息:
当然!让我为你解释一下。
在C语言中,malloc
和 calloc
都用于动态分配内存空间。它们的主要区别在于:
-
参数不同:
malloc
函数有一个参数,即所需的内存大小(以字节为单位)。例如,malloc(sizeof(int))
将分配一个整型变量的内存空间。calloc
函数有两个参数,第一个参数是所需的元素数量,第二个参数是每个元素的大小。例如,calloc(5, sizeof(int))
将分配一个包含5个整型元素的数组的内存空间。
-
内存内容:
malloc
函数返回的内存空间不会被初始化,其中的内容是随机的。calloc
函数返回的内存空间会被初始化为零,也就是每个字节都被设置为0。
使用这两个函数时,需要注意以下几点:
- 如果要分配的内存空间不太大,并且不需要初始化为0,可以使用
malloc
函数。 - 如果要分配的内存空间较大,并且需要初始化为0,可以使用
calloc
函数。
需要记住的是,在使用完动态分配的内存后,要确保使用 free
函数来释放已分配的内存,以避免内存泄漏。
希望这个解释能够帮助你更好地理解 malloc
和 calloc
函数的用法。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 2/2 | 12/12 | ||
第二周 | 10/10 | 1/3 | 7/19 | |
第三周 | 60/70 | 4/7 | 12/31 | |
第四周 | 120/190 | 3/10 | 12/43 | |
第五周 | 260/450 | 2/12 | 16/59 | |
第六周 | 250/700 | 4/16 | 12/71 | |
第七周 | 400/1100 | 1/17 | 14/85 | 学习程序编写规范 |
第八周 | 400/1500 | 2/19 | 10/95 | 学习模块化编程 |
第九周 | 500/2000 | 1/20 | 7/102 | 学习指针的使用 |
第十周 | 500/2500 | 1/21 | 11/103 | 学习字符串函数 |
第十一周 | 500/3000 | 1/22 | 12/115 | 学习结构体的使用 |
-
计划学习时间:10小时
-
实际学习时间:12小时
-
改进情况:本周计划水平与上周基本一致