2023-2024-1 20231304 《计算机基础与程序设计》第十二周学习总结
2023-2024-1 20231304 《计算机基础与程序设计》第十二周学习总结
作业信息
这个作业属于哪个课程 | 2023-2024-1-计算机基础与程序设计 |
---|---|
这个作业要求在哪里 | 2023-2024-1计算机基础与程序设计第十二周作业 |
这个作业的目标 | 《C语言程序设计》第11章并完成云班课测试 |
作业正文 |
教材学习内容总结
-
函数指针:函数指针是一种特殊的指针,它指向一个函数。通过函数指针,可以在运行时调用特定的函数。
-
数组指针:数组指针是一种指针,它指向一个数组的第一个元素。通过数组指针,可以访问数组中的各个元素。
-
字符串操作:C语言提供了许多字符串操作函数,如字符串拷贝、连接、查找、替换等。
-
动态内存分配:动态内存分配是一种在运行时分配内存的方法。通过动态内存分配,可以在程序运行时动态地分配和释放内存。
-
预处理器指令:预处理器指令是在编译之前处理的特殊指令,如宏定义、条件编译、文件包含等。
-
文件操作:C语言提供了文件操作函数,用于打开、关闭、读取、写入文件等。
-
库函数:C语言提供了许多库函数,如标准库(如输入输出、数学运算等)、字符库(如字符串操作、字符转换等)、动态库等。
-
错误处理:C语言提供了错误处理机制,如错误码、错误提示等,以便在程序出现错误时进行处理。
-
面向对象编程:C语言支持面向对象编程,通过结构体、联合体、枚举等实现面向对象编程的特性。
-
网络编程:C语言提供了网络编程的相关函数,如套接字创建、连接、接收发送数据等,用于实现网络通信功能。
基于AI的学习
我在学动态内存分配知识点,请你以苏格拉底的方式对我进行提问,一次一个问题
1.在动态内存分配中,为什么要使用指针?
这里是两个常见需要动态分配对象的情况:
(1)分配不限制作用域的对象,对象存储在其特定的内存中,而不是在内存中存储对象的拷贝。如果对象是可以拷贝/移动的,一般情况下你应该选择使用定义对象的方式。
(2)定义的对象会消耗大量内存,这时可能会耗尽栈空间。如果我们永远不需要考虑这个问题那该多好(实际大部分情况下,我们真不需要考虑),因为这个本身已经超出 C++ 语言的范畴,但不幸的是,在我们实际的开发过程中却不得不去处理这个问题。
当确实需要动态分配对象时,应该将对象封装在一个智能指针(smart pointer)或其他提供RAII机制的类型中(类似标准的 container)。智能指针提供动态对象的所有权语义(ownership)。如果使用得当,基本上可以避免自己管理内存
2.请解释动态内存分配的三个常用函数:malloc、calloc 和 realloc 的作用及区别。
(1)malloc在C语言中不是关键字而是C函数库中提供的函数。如果需要进行内存分配时在调用malloc时就是在内存池中提取一块内存空间(在堆上申请一块空间),但是这块空间是连续的空间。,并向该程序返回一个这块内存的指针。
(2)calloc和calloc的动态分配内存是有相同之处,他们的主要区别在于:
①在函数原型中calloc多了一个参数(他的参数是由所需元素的个数和每个元素的字节数组成)
②最大区别:calloc在调用完后返回指向内存的指针之前把他初始化为0
(3)ptr是指向原来地址的指针。
这个函数用于修改一个原先已经分配内存块的大小。
使用:
Ⅰ.可以使一块内存扩大或缩小(原来的内存块可以扩大缩小)
①如果是扩大一个内存块,则将原来的内存块保留在他的后边新增一块内存块(但是新增的内存块并未初始化)
②如果是缩小一块内存块,则将该内存块的后半部分直接拿掉,剩余部分内存块及其内容保留。
Ⅱ.原来的内存块无法扩大缩小
如果是着这种情况,realloc会重新开辟一个新的内存空间,并把原来的内存空间的内容拷贝到新的内存空间里。
3.在 C/C++ 程序中,如何实现内存的释放?
在C/C++程序中,实现内存释放的主要方法是使用内存分配函数(如malloc、calloc或new)和相应的内存释放函数(如free、delete或delete[])。
#include <iostream>
int main()
{
int *ptr = (int *)malloc(10 * sizeof(int));
if (ptr == NULL) {
std::cout << "内存分配失败" << std::endl;
return 1;
}// 使用分配的内存
for (int i = 0; i < 10; i++) {
ptr[i] = i;
} // 释放内存
free(ptr);
return 0;
}
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 30/90 | |
第五周 | 300/1600 | 2/11 | 20/110 | |
第六周 | 200/1800 | 3/14 | 25/135 | |
第七周 | 200/2000 | 1/15 | 20/155 | |
第八周 | 200/2200 | 3/18 | 20/175 | |
第九周 | 300/2500 | 1/19 | 15/190 | |
第十周 | 250/2750 | 1/20 | 25/215 | |
第十一周 | 250/3000 | 2/22 | 25/240 | |
第十二周 | 200/3200 | 1/23 | 15/255 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」