这个作业属于哪个课程 | https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP |
---|---|
这个作业要求在哪里 | https://www.cnblogs.com/rocedu/p/9577842.html#WEEK12 |
这个作业的目标 | <自学教材 |
《C语言程序设计》第11章并完成云班课测试>|
|作业正文|https://i.cnblogs.com/posts/edit |
教材学习内容总结
指针与数组的关系
- 数组名在很多情况下可视为指针常量,指向数组的首元素地址。例如 int arr[5]; , arr 就相当于指向 arr[0] 的指针常量。
- 可以通过指针来访问数组元素,比如定义 int *p = arr; ,那么 *(p + i) 就等价于 arr[i] ,通过指针的偏移来实现对数组不同元素的操作。
指针运算与数组遍历
- 指针可以进行算术运算,像 ++ 、 -- 以及加上、减去一个整数等。利用指针自增等操作能方便地遍历数组元素,如 for(int *p = arr; p < arr + sizeof(arr)/sizeof(arr[0]); p++){} 这样的循环可依次访问数组各元素。
多维数组与指针
- 对于二维数组,比如 int a[3][4] , a 可看作指向包含4个元素的一维数组的指针, a[i] 是指向第 i 行首元素的指针,而 *(a[i] + j) 或 a[i][j] 则是访问具体元素的方式,也能用指向二维数组的指针来进行相关操作与遍历。
数组指针与指针数组区别
- 数组指针:例如 int (*p)[4] , p 是一个指针,指向包含4个 int 类型元素的数组,常用来操作二维数组等。
- 指针数组:像 int *arr[5] , arr 是一个数组,数组的元素是指针类型,可用来存储多个指针,比如指向不同字符串等的指针。
教材学习中的问题和解决过程
问题1
在多维数组中,如果有 int a[3][4] ,如何通过一个指向数组的指针变量来访问 a[2][3] 元素?
解答:首先定义一个数组指针 int (*p)[4] = a; ,然后通过 ((p + 2)+3) 来访问 a[2][3] 。因为 p + 2 指向二维数组 a 的第3行(下标从0开始), *(p + 2) 就相当于 a[2] ,它是指向该行首元素的指针,再加上3就偏移到该行第4个元素(下标为3),最后通过 * 取值就能访问到 a[2][3] 。
问题2
指针数组和数组指针在内存分配上有什么不同?
解答:指针数组是一个数组,数组中的每个元素都是指针。其内存分配是为数组本身分配一块连续的内存空间,每个元素(指针)占用一个存储单元,这些指针可以指向不同内存地址。例如 int arr[5] ,系统会为这个包含5个指针元素的数组分配内存。而数组指针是一个指针,它指向一个数组。当定义 int (p)[4] 时, p 本身占用一个指针大小的内存空间,它所指向的数组(如果存在)在内存中是另一段连续空间,这段空间的大小是数组元素类型大小乘以数组长度。
基于AI的学习
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 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 |