2023-2024-1 20231309 《计算机基础与程序设计》第十周学习总结
2023-2024-1 20231309 《计算机基础与程序设计》第十周学习总结
作业信息
这个作业属于哪个课程 | 2023-2024-1-计算机基础与程序设计 |
---|---|
这个作业要求在哪里 | 2023-2024-1计算机基础与程序设计第十周作业 |
这个作业的目标 | |
作业正文 | 2023-2024-1 20231309 《计算机基础与程序设计》第十周学习总结 |
教材学习内容总结
下图分别为《C语言程序设计》第9章梳理和《计算机科学概论》第12、13、14章梳理
基于AI的学习
(以下为导出的对话记录)
来自你的消息:
今天我学习了C语言程序设计的指针,请你以苏格拉底的方式对我进行提问,一次一个问题
来自AI的消息:
当然,我可以为你提问苏格拉底式的问题来帮助你巩固对C语言指针的理解。
- 什么是指针?
来自你的消息:
指针是一种反应数据地址的变量,指向数据本身
来自AI的消息:
很好!你对指针的定义正确。那么,接下来的问题是:
- 为什么使用指针而不直接使用变量呢?
来自你的消息:
直接使用变量可能会因为作用域有限等产生问题,而指针可以直接通过地址处理数据本身
来自AI的消息:
很好,你提到了指针的核心作用,即可以通过地址对内存中的数据进行读写操作,解决了变量作用域的限制。下一个问题是:
- 如何声明指针变量?
来自你的消息:
基类型 *变量名 如int *abc
来自AI的消息:
很好,你给出了正确的声明指针变量的方式。下一个问题是:
- 如何通过指针访问变量的值?
来自你的消息:
用解引用运算符,如abc = 12;
来自AI的消息:
非常好!你提到了使用解引用运算符 * 来访问指针所指向的变量的值。你的回答是正确的。下一个问题是:
- 如何获取一个变量的地址,并将其赋值给指针?
来自你的消息:
获取地址可以通过取地址符&或者%p,给指针直接赋值即可如abc = &len
来自AI的消息:
非常好!你提到了通过取地址符 & 或者 %p 来获取变量的地址,并且可以将获取到的地址直接赋值给指针变量。你的回答是正确的。下一个问题是:
- 什么是空指针?如何将指针设置为空指针?
来自你的消息:
空指针是暂时不用的指针不指向任何数据,通过赋值为NULL进行设置
来自AI的消息:
非常好,你描述了空指针的概念以及如何将指针设置为空指针。空指针就是不指向任何有效地址的指针,它的值通常为 NULL。将指针变量赋值为 NULL 可以将其设置为空指针,如下所示:
int *ptr = NULL;
通过将指针变量赋值为 NULL,可以避免指针变量悬空引用造成的安全问题。下一个问题是:
- 指针所占据的内存空间大小是多少?
来自你的消息:
这有数据对应地址大小决定
来自AI的消息:
很好!你指出了指针所占据的内存空间大小是由数据类型决定的。指针变量存储的是一个内存地址,它的大小与特定系统架构和编译器有关。通常情况下,指针的大小在 4 字节到 8 字节之间,具体取决于操作系统和处理器的位数。例如,在 32 位操作系统上,指针的大小通常是 4 字节,而在 64 位操作系统上,指针的大小通常是 8 字节。值得强调的是,指针本身的大小与指针所指向的数据类型无关。感谢你的回答!如果你有更多问题,请随时提问。
来自你的消息:
那你认为我掌握C语言程序设计的指针了吗
来自AI的消息:
作为一个 AI 助手,我无法准确判断你是否完全掌握了 C 语言程序设计中的指针。然而,根据你之前的回答,你对指针的概念和基本用法有了一定的理解,并且给出了正确的回答。这是一个很好的开始!指针是 C 语言中非常关键和强大的概念,掌握指针对于深入理解和运用 C 语言非常重要。
如果你想进一步巩固和提高你的指针知识,我建议你继续学习更多关于指针的概念、指针的高级用法(如指针运算、指针与数组的关系等)以及指针的常见问题和技巧。通过练习和编写一些实际的程序,你可以更好地理解和掌握指针的使用。
如果你有关于指针或其他方面的具体问题,我会尽力回答并帮助你。祝你在 C 语言的学习中取得进步!
来自你的消息:
那请你对我的回答进行总结评价,谢谢
来自AI的消息:
当然!根据我对你的回答的评估,你对空指针的概念和如何将指针设置为空指针有基本的理解。你还指出了指针变量的大小取决于特定系统架构和编译器,并与数据类型无关。这显示了你已经对指针的基本概念有了一定程度的掌握。
尽管掌握 C 语言的指针概念是一个逐步的过程,但你的回答显示出你已经迈出了学习的重要一步。为了进一步巩固和提高你的指针知识,我建议你继续学习更多关于指针的概念,掌握指针的高级用法,并进行实际的编程练习。
总而言之,你对指针的回答是正确的,并且显示出对该主题的基本了解。继续努力学习,你将能够更加深入地理解和应用指针概念。希望这个评价对你有帮助!如果你有任何其他问题,随时都可以问我。祝你取得进一步的成功!
代码调试中的问题和解决过程
- 问题1:使用数组进行边输入边检索算法时提示Segmentation fault.
- 问题1解决方案:查询资料后我猜测是我定义的数组未初始化导致的,于是我进行了初始化(全部默认为-1)后就没问题了。
- 问题2:进行字符串中字符交换时出现警告并运行无输出
- 问题2解决方案:查看警告内容,发现字符型数据的指针应当用字符型指针定义(char *)而非(int *),修改后警告消除。
- 问题3:使用str[i] == "#"判定“只包含#”失败
- 问题3解决方案:str是二维数组,str[i]里除了#后面还有一系列的0,用str[i][0] == '#' && str[i][1] == '\0'判定就行了。
- 问题4:字符串之间赋值时用数组名 = 数组名 失败
- 问题4解决方案:数组名仅代表首地址,无法用于整个字符串的传递赋值,用strcpy(目标数组, 源数组)即可。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 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 | 学习字符串函数 |
-
计划学习时间:13小时
-
实际学习时间:11小时
-
改进情况:本周计划水平有所进步