繁体   English   中英

在 C 程序中的 function 中传递二维数组

[英]Passing a 2D array in a function in C program

下面的程序(将 arrays 传递给函数的玩具程序)无法编译。 请解释一下,为什么编译器无法编译(是因为技术原因还是因为标准原因?

我还会看一些解释指针/多维数组的书(因为我对这些不太了解),但是这里的任何现成的指针都应该是有用的。

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 faq中进行了解释。 简而言之,数组只衰减一次指针(在它衰减后,生成的指针不会进一步衰减)。

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

最简单的解决方法:

int **array; /* and then malloc */

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

void print2(int n, int m, int array[n][m]);

然后您的 function 应该可以按您的预期工作。

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

在您的代码中,双指针不适合访问二维数组,因为它不知道其跳数大小,即列数。 二维阵列是连续分配的 memory。

以下类型转换和二维数组指针将解决该问题。

# define COLUMN_SIZE 4
void print2(int ** array,int n,int m)
{
    // Create a pointer to a 2D array
    int (*ptr)[COLUMN_SIZE];
    ptr = int(*)[COLUMN_SIZE]array;

    int i,j;
    for(i = 0; i < n; i++)
    {
       for(j = 0; j < m; j++)
       printf("%d ", ptr[i][j]);
       printf("\n");
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM