C語言(二維數組)

有同學在面對二維數組的時候,常常會犯渾。尤其是使用函數傳參的時候,有老師講到一維數組傳參後就等價於一級指針,部分同學舉一反三自學成才,想當然地認爲二維數組傳參後就等價於二級指針,這是錯誤的。

假如,有如下代碼:

int a[2][3]; // 一個二維數組

function(a); // 將二維數組傳參給一個函數

 

上述代碼中,就是將一個二維數組傳遞給一個函數,那麼這個函數怎麼接受這個參數呢,答案是這樣的:

void function(int a[2][3]) // 這是對的

}

void function(int (*a)[3]) // 這也是對的

}

 

千萬別寫成這樣:

void function(int **a) // 這是錯的

}

 

究其原因,還是回到以前提過多次的數組與指針的結論:任何數組,都將被一律視爲一個指向其首元素的指針。因此以下兩行代碼是等價的:

function(a);

function(&a[0]);

 

對於二維數組 int a[2][3] 而言,其首元素就是一個 int [3] ,因此&a[0]就是一個指向 int [3] 的指針,其類型當然是 int (*)[3] 了。這樣再來看上述的function兩種正確定義,就不難理解了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章