解释一下这道题 C语言和数组

来源:百度知道 编辑:UC知道 时间:2024/06/22 12:21:39
#include<stdio.h>

int main()
{
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int *pa[3];
int *p=&a[0][0];
int **pp;

pa[0]=a[0];
pa[1]=a[0]+1;
pa[2]=a[0]+2;
pp=pa;

printf("%3d",*a[2]);
printf("%3d",*(*(a+1)+1));
printf("%3d",*pa[1]);
printf("%3d",p[2]);
printf("%3d",pp[1][2]);

getch();
return 0;
}
//运行结果 7 5 2 3 4

二维数组可以看作二级指针,也可以说是一维数组的嵌套吧,*a[2]这是一个二级指针,这里只指明了数组的二维值,即2,一维值没有指明,所以就指向了第一个元素,即a[2][0];
*(*(a+1)+1)这不就是把二维数组看成二级指针了嘛,也是引用数组元素的另一个表达嘛,a[1][1]
pa是一个指针数组,二维数组是二级指针,a[0]就是一个指针数组,它指向一个一维数组,a[0]+1就是a[1],..,这样pa就和a一样了嘛,还有pp和a也一样是二级指针啦

这里确实很乱,初学时也不要在这里钻的太深,我觉的反而不好,以后学的多了,对指针理解也就深了,这些就很简单了