首页 理论教育多维数组的指针C语言程序设计实用教程

多维数组的指针C语言程序设计实用教程

【摘要】:从二维数组的角度看,数组名array 代表整个二维数组的首地址,也是第0 行的首地址。所以,&array[i]和array+i 等价,都是指向二维数组的第i 行。array[i]+j 指向二维数组array[i][j]。*就是数组元素 array[i][j]的值。计算 array[i][j]在数组中的相对位置为“i×m+j”,*就是数组array[i][j]的值。使用指针变量输出二维数组任一行任一列元素的值。图6.12程序运行结果说明:在主函数中定义了一个指针变量p,指向数组array 第0 行第0 列。p+是二维数组array 第i 行第j 列的地址。

指针变量可以指向一维数组,也可以指向多维数组。这里仅讨论二维数组的指针。

1.二维数组的地址

例如int array[n] [m];定义一个二维数组array,有n×m 个元素。

从二维数组的角度看,数组名array 代表整个二维数组的首地址,也是第0 行的首地址。array+1 代表第1 行的首地址。因此,array[0]代表第0 行中第0 列元素地址,即&array[0][0],array[1]代表第1 行第0 列元素的地址,即&array[1][0]。当然,并不存在array[i]这样的变量,它只是一种地址的计算方法,能得到第i 行的首地址。

显然,array[0]和*(array+0)等价,array[1]和*(array+1)等价,array[i]和*(array+i)等价。所以,&array[i]和array+i 等价,都是指向二维数组的第i 行。array[i]和*(array+i) 都是指向二维数组的第i 行第0 列。array[i]+j 指向二维数组array[i][j]。*(*(array+i))就是数组元素array[i][0]的值。*(*(array+i)+j)就是数组元素 array[i][j]的值。计算 array[i][j]在数组中的相对位置为“i×m+j”,*(array[i]+j)就是数组array[i][j]的值。

2.二维数组指针

如果二维数组array[0]的指针为p,则*(p+(i*m+j))指向数组元素array[i][j]。

【例6.8】使用指针变量输出二维数组任一行任一列元素的值。程序如下:(www.chuimin.cn)

程序运行结果如图6.12 所示。

图6.12 程序运行结果

说明:

(1)在主函数中定义了一个指针变量p,指向数组array 第0 行第0 列。

(2)p+(i*4+j)是二维数组array 第i 行第j 列的地址。*(p+(i*4+j))就是二维数组array 元素array[i][j]的值。