簡體   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