(*prt)[3]=a指的是(*prt)+3的这块指针指向2维数组a的首地址,prt应该是个2维指针。
*p=a[0]指的是大小为3的第二维数组的首地址。
如果不对指针做加法运算的话,不用计较它真正指向几维数组,他们指向的都是a、a[0]、a[0][0]的地址。
(*prt)[3]=a,指向数组a,a[0][0],a[0][1],a[0][2]....,a[3][2],指针确实很麻烦..
*p=a[0] ;p指向a[0][0],a[0][1],a[0][2]
验证程序如下:
#include
void main()
{int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12} , (*prt)[3]=a, *p=a[0] ;
int i;
printf("%d\n",*p);
//printf("%d\n",*prt);这样写是错误的,因为prt是指向一个含3个元素的数组的
//*prt的值是a[0]数组的首地址,&a[0][0],才指向a[0][0];
printf("%d\n",**prt);
for (i=0;i<3;i++)
printf("%d ",*(*prt+i));
printf("%d\n",**(prt+3));
}
嗯 为数组下标是从0开始的,所以不可能出现4 最后是a[3][2]
1 2 3
4 5 6
7 8 9
10 11 12
对应的数组下标:
a[0][0] a[0][1] a[0][2]
a[1][0] a[1][1] a[1][2]
a[2][0] a[2][1] a[2][2]
a[3][0] a[3][1] a[3][2]
a[0]指的是a[0][0]也就是1
a[0][0], a[0][1], a[0][2], a[0][3]