[英]2-D arrays and functions
如果按原样进行编译,下面的代码将不起作用,但是当用(*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;
}
这个原型是错误的:
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]
的版本,这样可以使您的意图明确。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.