[英]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.