在C程序中的函数中传递2D数组

xyz*_*xyz 9 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)
{
    int i,j;
    for(i=0;i<n;i++)
    {
       for(j=0;j<m;j++)
       printf("%d ",array[i][j]);

       printf("\n");
    }
}
Run Code Online (Sandbox Code Playgroud)

cni*_*tar 12

这个(像往常一样)在c faq中解释.简而言之,一个数组仅衰减一次指针(在它衰减之后,结果指针不会进一步衰减).

数组数组(即C中的二维数组)衰减为指向数组的指针,而不是指向指针的指针.

最简单的解决方法:

int **array; /* and then malloc */
Run Code Online (Sandbox Code Playgroud)


Jen*_*edt 5

在C99中,作为接收"可变长度数组"的函数的简单规则,首先声明边界:

void print2(int n, int m, int array[n][m]);
Run Code Online (Sandbox Code Playgroud)

然后你的功能应该像你期望的那样工作.

编辑:通常,您应该查看指定维度的顺序.(和我:)