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语言指针的理解。

  1. 什么是指针?
来自你的消息:

指针是一种反应数据地址的变量,指向数据本身

来自AI的消息:

很好!你对指针的定义正确。那么,接下来的问题是:

  1. 为什么使用指针而不直接使用变量呢?
来自你的消息:

直接使用变量可能会因为作用域有限等产生问题,而指针可以直接通过地址处理数据本身

来自AI的消息:

很好,你提到了指针的核心作用,即可以通过地址对内存中的数据进行读写操作,解决了变量作用域的限制。下一个问题是:

  1. 如何声明指针变量?
来自你的消息:

基类型 *变量名 如int *abc

来自AI的消息:

很好,你给出了正确的声明指针变量的方式。下一个问题是:

  1. 如何通过指针访问变量的值?
来自你的消息:

用解引用运算符,如abc = 12;

来自AI的消息:

非常好!你提到了使用解引用运算符 * 来访问指针所指向的变量的值。你的回答是正确的。下一个问题是:

  1. 如何获取一个变量的地址,并将其赋值给指针?
来自你的消息:

获取地址可以通过取地址符&或者%p,给指针直接赋值即可如abc = &len

来自AI的消息:

非常好!你提到了通过取地址符 & 或者 %p 来获取变量的地址,并且可以将获取到的地址直接赋值给指针变量。你的回答是正确的。下一个问题是:

  1. 什么是空指针?如何将指针设置为空指针?
来自你的消息:

空指针是暂时不用的指针不指向任何数据,通过赋值为NULL进行设置

来自AI的消息:

非常好,你描述了空指针的概念以及如何将指针设置为空指针。空指针就是不指向任何有效地址的指针,它的值通常为 NULL。将指针变量赋值为 NULL 可以将其设置为空指针,如下所示:

int *ptr = NULL;

通过将指针变量赋值为 NULL,可以避免指针变量悬空引用造成的安全问题。下一个问题是:

  1. 指针所占据的内存空间大小是多少?
来自你的消息:

这有数据对应地址大小决定

来自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小时

  • 改进情况:本周计划水平有所进步

参考资料

posted @ 2023-12-03 22:46  20231309  阅读(21)  评论(0编辑  收藏  举报