/**首先弄明白什么是指针数组,什么又是数组指针。 指针数组: 类型名 *数组名[数组长度] 如: int *p[8]; 因为优先级的关系,p先与[]结合,说明p是一个数组,然后再与*结合数组p 的元素是指向整型数据的指针。相当于定义了8个整型指针变量。在此,p就是 数组元素为指针的数组,本质为数组。 数组指针: 类型名 (*指针名)[数组长度] 如:int (*p)[8]; p先与*号结合,形成一个指针,该指针指向的是有8个整型元素的数组, p即为指向数组首元素地址的指针,其本质为指针。 **/ #include <stdio.h> #include <stdlib.h> int main() { int arr[4][4]; int i,j,k=0; for(i=0;i<4;i++){ for(j=0;j<4;j++){ arr[i][j]=k; k++; } } int *p1[4]; int (*p2)[4]; for(k=0;k<4;k++){ p1[k]=arr[k]; } printf("\n使用指针数组的方式访问二维数组arr\n"); for(i=0;i<4;i++){ for(j=0;j<4;j++){ printf("arr[%d][%d]=%d\t",i,j,*(p1[i]+j)); ///p1[i]+[j]即第i行第j列的元素地址 } } printf("\n-----------------------------------\n"); p2=arr; printf("\n使用数组指针的方式访问二维数组arr\n"); for(i=0;i<4;i++){ for(j=0;j<4;j++){ printf("arr[%d][%d]=%d\t",i,j,*(*(p2+i)+j)); } } return 0; }
运行结果: