关于数组指针的那些事儿
#include <stdio.h>
main()
{
int x[3][4] = {{2,1},{4,3},{6}}, (*q)[4] = &x[0][0],*p=&x[0][0],*r[3];
++q;
p++;
r[0]=x[0];//将r这个存放地址的数组中的第一个值里面存放了二维数组的第一个列地址
r[1]=x[1];
r[2]=x[2];
printf("%d %d %d %d %d",**q,*p,r,*r,**r);
//r是这个数组指针自己本身在内存中的地址
//*r为取得是内容即这个数组第一个空间中存在的地址,这里方的是二维数组的第一列的地址
//同理*(r+1)为取得这个数组中的第二空间中存放的内容,即存放的地址
printf("\n");
printf("%d %d %d",*r,*(r+1),*(r+2));
printf("\n");
printf("%d %d %d",**r,**(r+1),**(r+2));//地址所对应的值
printf("\n");
printf("%d %d %d",*(*r+1),*(*(r+1)+1),*(*(r+2)+1));//对列地址的移动,得到这个列中的所有值
//数组指针与指针数组没有本质的区别
}