C语言中二维数组的与行指针

C程序中可以用*(*(a+i)+j)来引用一个二维数组中任一元素a[i][j],
下列关系是等价的:1.a 与&a[0];2.*a 与a[0]与&a[0][0],而且它们的值都相同.
我的疑问是:当使用指针引用数组元素时,为什么必须用行指针(*p)[]?既然指针变量的值就是地址,为什么不能把a赋给一个指针变量p呢.
如下例:
main()
{static int a[2][3]={1,2,3,4,5,6};
int *p=a;/*此语句有问题,若改成定义行指针:int(*p)[3]=a;则编译通过*/
for(i=0;i<2;i++)
for(j=0;j<3;j++)
printf("%2d",*(*(p+i)+j));
printf("\n");
}

第1个回答  2007-12-01
int *p=a;
/*此语句有问题,若改成定义行指针:int(*p)[3]=a;则编译通过*/
一个普通指针是不行的,它是二维数组嘛。
得用一个行指针才行。学习C程序最基本的东西,也没有必要问那么多为什么,自己编译通过,就那么用就可以了。
相似回答