2D数组传递给函数

我一直在阅读这个问题,但我无法得到结果代码来解决问题。 我应该如何更改它以使其工作?

void print2(int ** array,int n, int m); main() { int array[][4]={{1,2,3,4},{5,6,7,8}}; int array2[][2]={{1,2},{3,4},{5,6},{7,8}}; print2(array,2,4); } void print2(int ** array,int n,int m) { int i,j; for(i=0;i<n;i++) { for(j=0;j<m;j++) printf("%d ",array[i][j]); printf("\n"); } } 

您正在传递一个指向数组的指针,但您的函数期望指向指针。 在C中,数组名称衰减为一个值,该值是指向第一个数组元素的指针 。 在这种情况下,第一个数组元素是一个数组,因此函数参数衰减为指向数组的指针。

这是解决这个问题的一种方法。 更改函数以获取void *以便维度不会干扰参数。 然后在函数体中使用dimension参数来为2D数组创建正确的指针类型。

 void print2(void *p,int n,int m) { int i,j; int (*array)[m] = p; for(i=0;i 

如果您愿意更改参数的顺序,则可以使用数组参数的正确类型:

 void print2(int n, int m, int array[n][m]) { int i,j; for(i=0;i 

因为杰克问起C89,这是一种处理它的方法。 由于2D数组的组织方式与内存中的长1D数组相同,因此您可以直接遍历传入的指针。 同样,我们接受输入参数作为void *以避免处理衰减类型。 然后,我们将指针视为一个长1D数组,但我们按照适当的尺寸进行处理:

 void print2(void *p, int n, int m) { int i,j; int *array = p; for(i=0;i 

在您的问题中,您将参数作为指向数组的指针传递。 如下所示:

 void print2(int (*array)[4],int n,int m) { int i,j; for(i=0;i