C语言中二维数组的与行指针 20
C程序中可以用*(*(a+i)+j)来引用一个二维数组中任一元素a[i][j],下列关系是等价的:1.a与&a[0];2.*a与a[0]与&a[0][0],而且它们的值都...
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.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个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询