您正在传递一个指向数组的指针,但您的函数需要一个指向指针的指针。在 C 中,数组名称衰减为指向第一个数组元素的指针的值。在这种情况下,第一个数组元素是一个数组,因此函数参数衰减为指向数组的指针。
这是解决此问题的一种方法。将函数更改为采用 avoid *
以便维度不会干扰参数。然后在函数体中使用维度参数为二维数组创建正确的指针类型。
void print2(void *p,int n,int m)
{
int i,j;
int (*array)[m] = p;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%d ",array[i][j]);
printf("\n");
}
}
如果您愿意更改参数的顺序,则可以为数组参数使用正确的类型:
void print2(int n, int m, int array[n][m])
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%d ",array[i][j]);
printf("\n");
}
}
由于 Jack 询问了 C89,这里有一种处理方法。由于 2D 数组的组织方式与内存中的长 1D 数组相同,因此您可以像这样遍历传入的指针。同样,我们接受输入参数作为 avoid *
以避免处理衰减类型。然后,我们将指针视为一个长的一维数组,但我们根据正确的维度对其进行遍历:
void print2(void *p, int n, int m)
{
int i,j;
int *array = p;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%d ",array[i*m+j]);
printf("\n");
}
}