二維數組和二維指針作為函數的參數


不管是在工作上,還是最近在LeetCode上刷題。都錯誤的認為 二維數組 和 二維指針作為函數的參數時是等價的。這種認知是錯誤的。究其原因,還是對數組和指針理解的不深入。今天把我的理解做一個總結:

假如一個函數的形參是一個二維指針,但是你實參傳入的是一個二維數組。那么你就會編譯報錯。

為什么我會錯誤的認為二維數組作為函數參數的時候等價於二維指針呢?

我思考了我為什么會這么想的原因了:一維數組作為函數參數的時候,編譯器會把數組名當作指向該數組第一個元素的指針。所以我想當然的以為:既然一維數組和一維指針在函數參數中等價,那二維數組應該就等價於二維指針啊。

但是很遺憾,二維數組作為函數參數並等價於二維指針。因為數組作為函數參數時轉換為指針沒有傳遞性。也就是說你不能認為一維數組和一維指針作為函數參數等價,就認為二維數組和二維指針就等價了。在C語言中沒有這樣的傳遞性。

其實仔細想想,也是很容易明白的。二維數組其實就是一個數組的數組(即它是一個一維數組,只不過它的每個元素又都是一個一維數組)。當二維數組作為函數入參時,比如 int a[3][4]; 它的第一維數組會被轉換成指針,相當於是傳入了一個指向數組的指針。即作為函數參數, int a[3][4]和 int (*p)[4]等價。那 int (*p)[4]和 int **pp等價嗎?肯定不等價呀, p指針指向類型是 int [4],而pp指向的類型是int *。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM