2023-2024 20231313《计算机基础与程序设计》第十二周学习总结
作业 | 速达 |
---|---|
作业课程 | 班级链接 |
作业要求 | 计算机基础与程序设计第十二周学习总结 |
作业内容 | 《C语言程序设计》第11章并完成云班课测试 |
作业正文 | 我的作业 |
目录
教材总结
总结
《C语言程序设计》
指针和一维数组的关系,如何用指针引用和操作数组元素,如何用数组名和指针变量作为函数参数。指针和二维数组的关系,如何用行指针和列指针引用和操作二维数组元素,如何用指针数组作为函数参数。指针数组和字符串数组的区别和联系,如何用指针数组实现字符串的排序和输出。
学习过程中的问题
在理解指针和数组名的异同,以及指针运算和下标运算的区别、正确使用指针变量的类型,特别是对于二维数组的行指针和列指针,包括如何避免指针越界和空指针的错误,以及如何检查和调试指针相关的程序等方面的内容存在一定的问题
《C语言程序设计》第十一章
指针是一种特殊的变量,它的值是另一个变量的地址,也就是说,它指向了另一个变量的存储位置。通过指针,我们可以间接地访问和修改另一个变量的值,这样可以提高程序的效率和灵活性。指针的类型决定了它指向的变量的类型,以及它所占用的存储空间。例如,int *p; 表示定义了一个指向整型变量的指针变量 p,它在内存中占用 4 个字节(这取决于编译器和操作系统)。
其次,我们要了解指针和数组的关系。数组是一种数据结构,它是由相同类型的元素按照一定的顺序排列而成的集合。数组的每个元素都相当于一个变量,都有自己的地址和值。数组的名字代表了数组的首地址,也就是数组第一个元素的地址。通过数组的名字和下标,我们可以确定和访问数组中的任意一个元素。例如,int a[5]; 表示定义了一个包含 5 个整型元素的数组 a,它在内存中占用 20 个字节(每个元素占 4 个字节)。a[0] 表示数组的第一个元素,它的地址是 a,它的值是 *a。a1 表示数组的第二个元素,它的地址是 a+1,它的值是 *(a+1)。以此类推,a[i] 表示数组的第 i+1 个元素,它的地址是 a+i,它的值是 *(a+i)。
由于数组的每个元素都是一个变量,因此指针变量可以指向数组中的元素,也就是说,我们可以用指针方式访问数组中的元素。例如,int p = a; 表示定义了一个指向整型变量的指针变量 p,并让它指向数组 a 的首地址,也就是 a[0] 的地址。那么,p 的值就是 a,p 的值就是 a[0]。p+1 的值就是 a+1,也就是 a1 的地址,(p+1) 的值就是 a1。以此类推,p+i 的值就是 a+i,也就是 a[i] 的地址,(p+i) 的值就是 a[i]。这样,我们就可以用 p[i] 来表示 a[i],它们是等价的。
对于二维数组,它是由若干个一维数组组成的数组。二维数组的每个元素都是一个一维数组,也有自己的地址和值。二维数组的名字也代表了数组的首地址,也就是数组第一个一维数组的地址。通过二维数组的名字和两个下标,我们可以确定和访问数组中的任意一个一维数组或者一个元素。例如,int a3; 表示定义了一个包含 3 个一维数组的二维数组 a,每个一维数组包含 4 个整型元素,它在内存中占用 48 个字节(每个元素占 4 个字节)。a[0] 表示二维数组的第一个一维数组,它的地址是 a,它的值是 *a。a[0][0] 表示二维数组的第一个一维数组的第一个元素,它的地址是 a,它的值是 **a。a1 表示二维数组的第二个一维数组,它的地址是 a+1,它的值是 *(a+1)。a[1][0] 表示二维数组的第二个一维数组的第一个元素,它的地址是 a+1,它的值是 ((a+1))。以此类推,a[i] 表示二维数组的第 i+1 个一维数组,它的地址是 a+i,它的值是 *(a+i)。a[i][j] 表示二维数组的第 i+1 个一维数组的第 j+1 个元素,它的地址是 *(a+i)+j,它的值是 ((a+i)+j)。
同样,由于二维数组的每个元素都是一个一维数组,因此指针变量也可以指向二维数组中的元素,也就是说,我们也可以用指针方式访问二维数组中的元素。但是,这里要注意指针变量的类型,因为二维数组的元素是一维数组,所以指针变量的类型应该是指向一维数组的指针,也就是行指针。例如,int (p)4 = a; 表示定义了一个指向含有 4 个元素的一维整型数组的指针变量 p,并让它指向二维数组 a 的首地址,也就是 a[0] 的地址。那么,p 的值就是 a,p 的值就是 a[0]。p+1 的值就是 a+1,也就是 a1 的地址,(p+1) 的值就是 a1。以此类推,p+i 的值就是 a+i,也就是 a[i] 的地址,(p+i) 的值就是 a[i]。这样,我们就可以用 p[i] 来表示 a[i],它们是等价的。但是,如果我们想要访问二维数组中的一个元素,而不是一个一维数组,我们就需要再加一个下标。例如,p[0][0] 表示 a[0][0],它的地址是 *p,它的值是 **p。p[1][0] 表示 a[1][0],它的地址是 *(p+1),它的值是 ((p+1))。以此类推,p[i][j] 表示 a[i][j],它的地址是 *(p+i)+j,它的值是 ((p+i)+j)。这样,我们就可以用 p[i][j] 来表示 a[i][j],它们是等价的。
除了行指针,我们还可以用列指针来访问二维数组中的元素。列指针是指向二维数组中的一个元素的指针,而不是一个一维数组的指针。例如,int p = a[0]; 表示定义了一个指向整型变量的指针变量 p,并让它指向二维数组 a 的第一个一维数组的第一个元素的地址,也就是 a[0][0] 的地址。那么,p 的值就是 a[0],p 的值就是 a[0][0]。p+1 的值就是 a[0]+1,也就是 a0 的地址,(p+1) 的值就是 a0。以此类推,p+i 的值就是 a[0]+i,也就是 a[0][i] 的地址,(p+i) 的值就是 a
基于AI的学习
代码行数(新增/累积) | 学习时间(新增/累积) | |
---|---|---|
目标 | 2000行 | 100小时 |
第一周 | 50/50 | 2/2 |
第二周 | 50/50 | 2/2 |
第三周 | 50/50 | 2/2 |
第四周 | 50/50 | 2/2 |
第五周 | 300/300 | 2/2 |
第六周 | 300/300 | 2/2 |
第七周 | 200/200 | 1/1 |
第八周 | 200/200 | 1/1 |
第九周 | 200/200 | 1/1 |
第十周 | 150/150 | 1/1 |
第十一周 | 250/250 | 1.5/1.5 |
第十二周 | 200/200 | 1.2/1.2 |