作业信息
这个作业属于那个班级 https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP
作业要求 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK12
作业目标 学习《C语言程序设计》第11章
作业正文 https://www.cnblogs.com/ni-yidan/p/16890317.html
教材内容总结
* 指针的概念及引入
1.指针变量的定义————来存放变量的地址 初始化————不知把它指向哪里,那就指向NULL,并且指针变量只能指向同一基类型的变量。
2.间接寻址运算符————引用指针指向的变量的值,称为指针的解引用
* 向函数传递指针
1. 按值调用与按地址调用
普通变量作函数参数—按值调用 指针做函数参数—按地址调用
* 函数指针—————指向函数的指针变量
1.数据类型 (*指针变量名)(形参列表);
2.指针函数的应用
* 指针与数组
1. 指针和一维数组间的关系
演示数组和指针变量作函数参数
2. 指针和二维数组间的关系————可将二维数组看作一维数组,其每个数组元素又是一个一维数组,并按行顺序存放所有元素
3. 指针数组及其应用————元素均为指针类型数据的数组
定义形式为: 数据类型 *数组名[数组长度];
学习中的问题
Q:我对于指针与二维数组的关系以及使用还并不是很了解,我在网上查找相关资料
A:1.数组名与指针的关系:
a;//代表数组首行地址,一般用a[0][0]的地址表示
&a;//代表整个数组的地址,一般用a[0][0]地址表示
a[i];代表了第i行起始元素的地址(网上说是代表了第i行的地址,但我觉得不是,在讲数组与指针的关系时我会验证给大家看)
&a[i];代表了第i行的地址,一般用a[i][0]的地址表示
a[i]+j;//代表了第i行第j个元素地址,a[i]就是j==0的情况
a[i][j];//代表了第i行第j个元素
&a[i][j];//代表了第i行第j个元素的地址
*a;//代表数组a首元素地址也就是a[0]或者&a[0][0]
(a+i);//代表了第i行首元素的地址,a是i=0的情况
*(a+i)+j;//代表了第i行j个元素的地址
**a;//代表a的首元素的值也就是a[0][0]
((a+i)+j);//代表了第i行第j个元素
Q:指针数组与数组指针的区别
首先,对于语句“intp1[5]”,因为“[]”的优先级要比“”要高,所以 p1 先与“[]”结合,构成一个数组的定义,数组名为 p1,而“int”修饰的是数组的内容,即数组的每个元素。也就是说,该数组包含 5 个指向 int 类型数据的指针,如图 1 所示,因此,它是一个指针数组。
其次,对于语句“int(p2)[5]”,“()”的优先级比“[]”高,“*”号和 p2 构成一个指针的定义,指针变量名为 p2,而 int 修饰的是数组的内容,即数组的每个元素。也就是说,p2 是一个指针,它指向一个包含 5 个 int 类型数据的数组,如图 2 所示。很显然,它是一个数组指针,数组在这里并没有名字,是个匿名数组。
由此可见,对指针数组来说,首先它是一个数组,数组的元素都是指针,也就是说该数组存储的是指针,数组占多少个字节由数组本身决定;而对数组指针来说,首先它是一个指针,它指向一个数组,也就是说它是指向数组的指针,在 32 位系统下永远占 4 字节,至于它指向的数组占多少字节,这个不能够确定,要看具体情况。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
第一周 | 0/0 | 3/3 | 20/20 | |
第二周 | 105/105 | 2/5 | 20/40 | |
第三周 | 150/255 | 2/7 | 20/60 | |
第四周 | 210/465 | 2/9 | 20/80 | |
第五周 | 280/745 | 2/11 | 20/100 | |
第六周 | 320/1065 | 1/12 | 20/120 | |
第七周 | 400/1465 | 1/13 | 20/140 | |
第八周 | 400/1865 | 1/14 | 20/160 | |
第九周 | 400/2265 | 1/15 | 20/180 | |
第十周 | 400/2665 | 1/16 | 20/200 | |
第十一周 | 400/3065 | 1/17 | 20/220 | |
第十二周 | 360/3425 | 1/17 | 20/240 |