如果按原样编译,则以下代码无法正常工作,但是当您将*(p+i*C+j)
替换为(*p+i*C+j)
时,它可以正常工作。任何人都可以帮助我理解为什么,因为我学到的相同功能的方法已经在代码中了?另外,我编写了其他具有相同语法并完美工作的代码。我不知道为什么这个不起作用。
#include <stdio.h>
void disp(int *p[][20],int R,int C)//Method 1
{int i,j;
printf("Elements are(disp):\n");
for(i=0;i<R;i++)
{for(j=0;j<C;j++)
{printf("%d ",p[i][j]);
}
printf("\n");
}
}
void disp1(int *p,int R,int C)//Method 2
{int i,j;
printf("Elements are(disp1):\n");
for(i=0;i<R;i++)
{for(j=0;j<C;j++)
{printf("%d ",*(p+i*C+j));
}
printf("\n");
}
}
int main()
{int i,j,R,C,a[20][20];
printf("Enter R and C");
scanf("%d %d",&R,&C);
printf("\nEnter the elements:");
for(i=0;i<R;i++)
{for(j=0;j<C;j++)
{scanf("%d",&a[i][j]);
}
}
disp(a,R,C);
printf("\n\n");
disp1(a,R,C);
return 0;
}
答案 0 :(得分:1)
这个原型是错误的:
void disp(int *p[][20],int R,int C)
此处p
是指向int
的2D指针数组。 *
绑定在左侧。
你想要
void disp(int p[20][20],int R,int C)
在内部被重写为与
相同void disp(int (*p)[20],int R,int C)
但你应该坚持使用[20][20]
的版本,这样可以明确你的意图。