[英]Edit a 2D array through a function in C
我有這個函數:void foo(char tab [8] [8])
我希望這個函數編輯選項卡數組的值,所以我嘗試了這些語法:
void foo( char *(*tab)[8][8] )
void foo( char *(tab)[8][8] )
void foo( char **tab )
還有很多其他人。 我總是在編譯時遇到失敗,如下所示:錯誤:無法將'char( )[8] [8]'轉換為'char (*)[8] [8]'參數'1'(...)
所以,我的問題是:如何創建並向函數傳遞指向2D數組的指針?
謝謝。
這次嘗試將您的函數聲明為
void foo( char (*tab)[8] );
並稱之為
foo(point);
請注意,在這種情況下,您需要傳遞數組名稱,因為它在傳遞給函數時會衰減到指針(有一些例外)。 衰變后,它的類型為char (*)[8]
。
你也可以通過聲明來做到這一點
void foo( char (*tab)[8][8] );
並稱之為
foo(&point);
在這種情況下,請注意我傳遞了&poinnt
,即整個數組的地址,類型為char (*)[8][8]
。
樣品:
void foo(char (*tab)[8][8])
{
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 68j++)
{
scanf("%d", &(*tab)[i][j]);
}
}
}
使用數組,您始終可以修改函數中的數據,因為傳遞的是指針(當然,在沒有const
限定符的情況下)。 也就是說,你可以寫:
void foo(char tab[8][8])
{
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
tab[i][j] = (x + y) % 2 : 'X' : 'O';
}
}
並稱之為:
void calling_func(void)
{
char board[8][8];
foo(board);
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
putchar(tab[i][j]);
putchar('\n');
}
}
如果你寫的話,你可以得到你看到的錯誤信息:
foo(&board);
這會將指向數組的指針傳遞給函數。 要實現這一點,您必須將函數重寫為:
void foo(char (*tab)[8][8])
{
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
(*tab)[i][j] = (x + y) % 2 : 'X' : 'O';
}
}
但是,這很少是編寫代碼的正確方法。 使用第一個替代方案,直到你被迫(這可能不會是今年 - 我不記得必須使用指向陣列的指針,除了回答關於SO的問題,但也許這是一個可怕的經歷,我已經忘記了一切)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.