Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 传递给函数的二维数组_C_Arrays_Pointers_Multidimensional Array - Fatal编程技术网

C 传递给函数的二维数组

C 传递给函数的二维数组,c,arrays,pointers,multidimensional-array,C,Arrays,Pointers,Multidimensional Array,我一直在读这篇文章,但我无法得到解决问题的结果代码。 我应该如何改变它以使其工作 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) {

我一直在读这篇文章,但我无法得到解决问题的结果代码。 我应该如何改变它以使其工作

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");
    }
}
void print2(int**array,int n,int m);
main()
{
int数组[][4]={{1,2,3,4},{5,6,7,8};
int array2[][2]={{1,2},{3,4},{5,6},{7,8};
print2(数组,2,4);
}
无效打印2(整数**数组,整数n,整数m)
{
int i,j;

对于(i=0;i您正在传递指向数组的指针,但您的函数需要指向指针的指针。在C中,数组名称衰减为指向第一个数组元素的指针的值。。在这种情况下,第一个数组元素是数组,因此函数参数衰减为指向数组的指针

有一种方法可以解决此问题。将函数更改为采用
void*
,以便维度不会干扰参数。然后在函数体中使用维度参数为2D数组创建正确的指针类型

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 (*array)[4],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");
    }
}
void print2(int(*array)[4],int n,int m)
{
int i,j;

对于(i=0;i您所说的“我无法获得解决问题的结果代码”是什么意思?编译器无法编译程序。出现以下错误:
警告:从不兼容的指针类型传递print2的arg 1
我不理解上一个问题中给出的解决方案:sIs this last
print2()
函数在C89中有效吗?@Jack:我的两个答案都依赖于可变长度数组。两个答案都不适用于C89。正如我想象的那样。谢谢@user315052@Jack:我添加了一个C89解决方案。再次非常感谢。如果可以的话,请输入I+1。另外,请不要误解我的意思:“正如我想象的那样。”这不是我的“粗鲁”意思。
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");
    }
}
void print2(int (*array)[4],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");
    }
}