簡體   English   中英

通過C中的函數編輯2D數組

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM