最近在学习C下多维数组指针的时候,发现个小的技巧。比如定义一个二维数组,int a[3][4],如果想引用第一个元素,直接**a,就可以了。当然如果定义三维的数组,引用第一个元素,直接***a。多维的照此推理就可以了。
如果在程序中使用指向数组元素的指针变量,对其赋初值时,要使用元素地址,不能使用行的地址。如果要对引用二维数组元素a[r][l],可以使用*(a[r]+l);如果是引用三维数组a[h][r][l],可以使用*(a[h][r]+l);参考程序:
/*多维数组指针参考程序*/
#include <stdio.h>
void main(void)
{
int *p,a[2][3] = {1,2,3,4,5,6},b[2][2][3] = {1,2,3,4,5,6,7,8,9,10,11,12};
p = a[0] + 0;/*指向数组元素的指针变量,对其赋初值时,要使用元素地址*/
printf("a[0][0] = %d/n",**a);/*引用第一个元素,直接**a*/
printf("a[1][2] = %d/n",*(a[1] + 2));/*引用二维数组元素a[r][l],可以使用*(a[r]+l)*/
printf("a[1][1] = %d/n",*(p+(1*3)+1));
p = b[0][0] + 0;
printf("b[0][0][0] = %d/n",***b);
printf("b[1][0][1] = %d/n",*(b[1][0]+1));/*引用三维数组a[h][r][l],可以使用*(a[h][r]+l)*/
printf("b[1][1][1] = %d/n",*(p+1*6+1*3+1));
}
输出结果如下:
a[0][0] = 1
a[1][2] = 6
a[1][1] = 5
b[0][0][0] = 1
b[1][0][1] = 8
b[1][1][1] = 11