2024-2025-1 20241411王思棋《计算机基础与程序设计》第十二周学习总结

作业信息

这个作业属于哪个课程 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP
这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK12
这个作业的目标 指针与数组
作业正文 https://www.cnblogs.com/wangsiqi828828/p/18607254

教材学习内容总结

一、指针和一维数组的关系

  1. 基本关系
    • 数组名是指向首元素的指针常量,和首元素地址相同。可以用指针遍历数组,如*(ptr + i)访问元素。
  2. 指针运算
    • 加法使指针后移,减法可算元素间隔,比较用于判断指针指向地址大小,用于判断是否在数组范围内。
  3. 函数参数关系
    • 数组名作参数传递首地址。在函数中可通过指针修改数组内容。
  4. 延伸内容
    • 可结合动态内存分配创建动态数组。访问数组时要注意边界检查,避免指针越界。
      二、指针和二维数组的关系
  5. 基本概念与存储方式
    • 二维数组在内存中按行存储,可看作元素为一维数组的一维数组。指针用于访问和操作二维数组元素。
  6. 二维数组名与指针关系
    • 二维数组名是指向第一个一维子数组的指针常量。和一维数组名不同,其偏移是一个子数组的地址。
  7. 通过指针访问元素
    • 可用数组指针,如int (*ptr)[4]=arr,通过(*(ptr + i))[j]访问arr[i][j]。也可用普通指针间接访问,如int *p=&arr[0][0],通过*(p + 4*i + j)访问arr[i][j]
  8. 二维数组作为函数参数与指针关系
    • 函数形参要明确第二维大小,形参实际是数组指针。在函数内可像主函数一样用指针访问和修改元素。
  9. 指针运算应用
    • 指针加法和减法单位是子数组大小。指针比较用于判断所指子数组地址大小,对遍历和判断越界有用。
  10. 延伸内容
    • 可动态分配二维数组,还涉及复杂的不规则二维数组,需要更复杂的指针操作和内存管理。
      三、指针数组及其应用
  11. 概念
    • 指针数组是数组,其元素为指针,如int *arr[5]包含5个指向int类型的指针。
  12. 初始化
    • 可以在定义时初始化,例如将指针数组元素初始化为指向不同变量的指针。
  13. 与普通数组区别
    • 普通数组存实际数据,指针数组存数据元素地址。
  14. 应用
    • 字符串数组替代:用指针数组存储字符串更灵活,可避免二维字符数组存储字符串时的空间浪费。
    • 多分支选择结构:定义函数指针数组,根据索引调用不同函数,实现多分支选择。
    • 构建动态数据结构:如管理多个链表头节点,通过指针数组操作不同链表,包括初始化、插入和删除节点等。
      四、动态数组
  15. 概念
    • 动态数组是程序运行时能动态分配内存空间大小的数组,与编译时就确定大小的静态数组不同。
  16. 创建(内存分配)
    • malloc分配指定字节数的连续内存,返回指向起始地址的指针,分配失败返回NULL
    • calloc也分配内存,且会将内存初始化为0。
    • realloc用于重新分配已分配内存块的大小,成功返回新内存块起始地址指针,失败返回NULL
  17. 访问和使用
    • 分配成功后像普通数组一样访问元素,可进行赋值、计算、排序等操作。
  18. 释放(内存回收)
    • 不再需要时用free函数释放内存,避免内存泄漏,释放后不能再通过指针访问原数据。
  19. 优势与应用场景
    • 优势:灵活性高,避免静态数组空间浪费或不足的问题。
    • 应用场景:处理不确定数量的数据,或作为数据结构底层存储方式,可根据操作需要灵活调整大小。

教材学习中的问题和解决过程(先问 AI)

  • 问题1:数组元素的等价引用形式有哪些?
  • 问题1解决方案:
    索引:直接使用索引号访问,如 array[index]。
    指针算术:使用指针加上偏移量来访问,如 *(array + index)。
    数组名作为指针:数组名代表数组首元素的地址,可以像指针一样使用。
    循环遍历:通过循环结构逐个访问数组元素。
    切片:在支持切片的语言中,可以引用数组的一部分。
    数组下标运算符:特定语言中用于访问元素的运算符。
    解构赋值:直接从数组中提取元素到变量。
    内置函数或方法:使用语言提供的函数或方法访问元素。

基于AI的学习


代码托管

(statistics.sh脚本的运行结果截图)

上周考试错题总结

  • 错题1及原因,理解情况
  • 错题2及原因,理解情况
  • ...

其他(感悟、思考等,可选)

xxx
xxx

学习进度条

|
| 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|重要成长
|
|
-------- | :----------------😐:----------------😐:---------------: |:-----😐
| 目标 | 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 | |

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难,[软件工程 估计方法](http://www.cnblogs.com/xinz/archive/2011/04/06/2007294
.html)

  • 计划学习时间
    :XX
    小时

  • 实际学习时间
    :XX
    小时

  • 改进情况:

(有空多看看[现代软件工程 课件
软件工程师能力自我评价表](
http://www.cnblogs.com/xinz/p/3852177
.html))

参考资料

posted @ 2024-12-14 21:41  王思棋  阅读(10)  评论(0编辑  收藏  举报