我不知道为什么在二维数组的情况下我们必须使用排版(int *)
?
我想知道的另一件事是,为什么我们不能在下面的代码中使用*(*(p+i)+j))
来访问2d数组?总是有必要使用p + col*i + j
?当*(*(p+i)+j))
包含数组的基地址并且p
等同于*(*(p+i)+j))
时,为什么不能使用a[i][j]
?
提前谢谢你。
main()
{
int a[3][4] = {
1,2,3,4,
5,6,7,8,
9,0,1,6
};
int *p,i,j;
p=(int *)a; // this is my doubt why did we use int *
for(i=0;i<3;i++)
{
for(j=0;j<4;j++) {
printf("%d",*(*(p+i)+j)); // here is my 2nd doubt
}
}
}
最佳答案
您提供的代码由于以下行而无法编译:
printf("%d",*(*(p+i)+j));
在这里,你要解引用两次int*
您可以创建一个指针来引用数组a,类型为指针指向4个元素的数组。
请参阅所附代码,其中所有指针都是在执行嵌套for循环期间打印出来的。
#include<stdio.h>
main()
{
int a[3][4]={
1,2,3,4,
5,6,7,8,
9,0,1,6
};
int (*p)[4],i,j;
p = a;
for(i=0;i<3;i++){
printf("row pointer: %p\n",p+i);
for(j=0;j<4;j++){
printf("element pointer: %p\n", (*(p+i))+j );
printf("element: %d\n",*( (*(p+i)) + j ) );
}
}
}
关于c - 我无法知道(int *)的用法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18815680/