簡體   English   中英

什么是 int (*tabes)[N]?

[英]What is int (*tabes)[N]?

1 個問題 - 指針在此代碼中的作用 2 個問題 - 為什么當我們傳遞二維數組時,function 的參數是一維數組

#define N 10
int tab[N][N]

void create(int (*tabes)[N]){
     for (i=0; i<N; i++){
       for (j=0; j<N; j++){
          tabes[i][j] = 2;
       }
    }
}

int main(){
    create(tab);
}

僅使用指針的動態數組分配

對於初學者,您的問題中提供的代碼中沒有動態數組分配。 所以問題的標題令人困惑。

您忘記放置分號的數組聲明

int tab[N][N]

聲明一個具有 static 存儲持續時間的數組。

將標題更改為

什么是 int (*tabes)[N]?

然后簡單地說,它是一個名為tabes的指針的聲明,它指向數組類型int[N]的 object 。

2 問題 - 當我們傳遞二維數組時,為什么 function 的參數是一維數組

我想你想說為什么 function 的參數是一維數組,因為很明顯 function 調用的參數

create(tab);

是一個二維數組。

好吧,您可以像這樣聲明 function

void create(int tabes[][N]){
    //...
}

如您所見,參數有一個二維數組。 但是編譯器將參數調整為指向數組元素類型的指針。 數組tab的元素類型聲明為

int tab[N][N];

int[N] 所以指向數組元素的指針類型看起來像int ( * )[N] 此類型在您的 function 聲明中使用。

就是這些 function 聲明

void create(int tabes[N][N]);
void create(int tabes[][N]);
void create(int ( *tabes )[N]);

聲明相同的 function 因為據說編譯器將具有數組類型的參數調整為具有指向數組元素類型的指針類型的參數。

所以 function 處理指向int[N]類型數組的指針。

另一方面,用作 function 調用的參數的數組選項卡被隱式轉換為指向其第一個元素的指針。 同樣,該指針的類型為int ( * )[N]

事實上這個電話

create(tab);

相當於下面的調用

int ( *ptr )[N] = tab;
create( ptr );

除了在最后一種情況下使用了輔助變量ptr

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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