二维数组相当于多行列数相同的一位数组组合起来;int (*p)[N]定义一个行指针p,其中:p指向一个N列二维数组的首地址p自增1,p指向下一“行”一维数组的首地址因为p是一个二级指针。所以索引其指向的数据内容需要取二次内容,格式及解释如下:格式:*(*(p+行)+列)解释:其实很好理解,因为p作为二级指针,p++代表的仅仅是行号+1所以格式中*(p+行)就取到了所在行首地址指针(因为p是二级指针,取一次内容之后,取到的内容还是指针)现在把*(p+行)整体看作一个一维数组指针再进行一位数组的指针内容索引*(*(p+行)+列)就能索引到内容,当然也能进行初始化了!例子:#include<stdio.h>void main(){ int (*p)[4]; int a[3][4],i,j;/*常规的初始化与输出*/ printf("input:\n"); for(i=0;i<3;i++) for(j=0;j<4;j++) scanf("%d",&a[i][j]);printf("二维数组\n:"); for(i=0;i<3;i++){ for(j=0;j<4;j++) printf("%d\t",a[i][j]); printf("\n"); }/*用行指针的初始化与输出*/ p=a; printf("input:\n"); for(i=0;i<3;i++) for(j=0;j<4;j++) scanf("%d",*(p+i)+j);printf("二维数组\n:"); for(i=0;i<3;i++){ for(j=0;j<4;j++) printf("%d\t",*(*(p+i)+j)); printf("\n"); }}结果