【摘要】:如前所述,如有定义int arr[4][3],则arr代表数组的起始地址,指向数组的0号单元,而arr的0号单元中存放的就是一个长度为3的int数组,所以二维数组名实质上就是一个指向数组的指针。用指向数组的指针访问二维数组。二者不同之处在于arr作为数组名字是一个常量,是不能改变的,而ptr是一个指针变量,可以改变,如执行ptr++则使ptr指向当前行的下一行。
数组是一种构造数据类型,是一个大类,只有基类型和长度都相同的数组才可以看成是同一类,而基类型或长度不同的数组应该属于不同的数组类型。可以定义一类指针,用来指向数组,指向数组的指针定义形式为:
类型 (*指针变量名)[长度];
其中类型指数组的基类型,长度指数组的长度,如有定义如下:
int (*ptr)[3];
则ptr是一个指向长度为3的int数组的指针。如前所述,如有定义int arr[4][3],则arr代表数组的起始地址,指向数组的0号单元,而arr的0号单元中存放的就是一个长度为3的int数组,所以二维数组名实质上就是一个指向数组的指针。
【例7-14】用指向数组的指针访问二维数组。(www.xing528.com)
可以看到和我们使用二维数组名字arr访问数组时的效果是一样的。事实上由于ptr=arr,所以ptr就成了二维数组的首地址,因此反过来也可以将ptr看作二维数组arr的另外一个名字。
二者不同之处在于arr作为数组名字是一个常量,是不能改变的,而ptr是一个指针变量,可以改变,如执行ptr++则使ptr指向当前行的下一行。如将例7-14修改如下:
该程序同例7-14运行结果完全一致,请同学们自己验证。
需要注意的是,程序中由于使用了ptr++,因此ptr能够自动地指向数组的每一行,输入语句中使用ptr[0]+j代表的就是第i行第j列的地址(请思考为什么?),而正是由于ptr的改变,所以在输出时必须先执行ptr=arr,使得ptr仍然代表数组的起始地址才能够获得正确的输出结果。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。