#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j;
int a[3][2] = {{1,2},{3,4},{5,6}};
int *p = a[0];
int (*q)[2];//数组指针 q是一个指针,指向一维数组,每个一维数组有2个元素,所以q是行指针
q = a;
int *ptr[3];//指针数组,ptr有3个元素,每个元素是一个指针。
for(i = 0; i < 3; i++)
{
ptr[i] = a[i];//保存每一列首数据的地址
for(j = 0; j < 2; j++)
printf("%d",*(ptr[i]+j));
}
printf("\n");
for(i = 0; i < sizeof(a)/sizeof(int); i++)
{
printf("%d",*(p+i));//通过列指针,输出数组元素
}
printf("\n");
for(i=0;i<3;i++,q++)//p可看成是行指针
{
printf("%3d ",**q);//每一行的第一个元素
printf("%3d ",*(*q+1));//每一行的第二个元素
printf("/n");
}
for(i = 0; i < sizeof(a)/sizeof(int); i++)
{
printf("%d",*((int *)q+i));//通过行指针,输出数组元素
}
printf("\n");
for(i = 0; i < 3; i++)
for(j = 0; j < 2; j++)
printf("%d",*(*(q+i)+j));
printf("\n");
for(i = 0; i < 3; i++)
{
printf("%d",*(*(q+i)));
//q保存的是数组的行地址,*q保存的是a[0]的首地址,所以**q取得是数组的首元素
}
printf("\n");
return 0;
}