2023-2024-1 20231309 《计算机基础与程序设计》第十周学习总结
作业信息
这个作业属于哪个课程 | 2023-2024-1-计算机基础与程序设计 |
---|---|
这个作业要求在哪里 | 2023-2024-1计算机基础与程序设计第十周作业 |
这个作业的目标 | |
作业正文 | 2023-2024-1 20231309 《计算机基础与程序设计》第十周学习总结 |
教材学习内容总结
下图分别为《C语言程序设计》第9章梳理和《计算机科学概论》第12章梳理
基于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(目标数组, 源数组)即可。
上周考试错题总结
- 错题1:
- 原因:误解题意,没有正确理解题目说的是抽象数据类型的属性与该数据类型的实现密切相关,而实际上并不密切相关因为隐藏了实现的细节。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 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小时
-
改进情况:本周计划水平有所进步