在做leetcode的時候常會傳進來乙個二維陣列,一般都是以二級指標的形式。
這裡提一嘴做leetcode二維陣列題時很多萌新都不知道最後兩個形參是幹什麼的:
returnsize:指返回的二維陣列的行數,真正需要的是乙個int值,這裡通過位址傳遞來實現被調函式向主調函式傳輸多個資料。我們直接那如果我們定義了乙個二維陣列*returnsize=i
就行了。returncolumnsizes:指返回的二維陣列的每一行的列數,真正需要的是乙個int陣列,這裡通過位址傳遞來實現被調函式向主調函式傳輸多個資料。我們直接建立乙個int陣列,然後把陣列的位址傳給
*returncolumnsize
就行了。
a[3][2]
,在呼叫這個函式的時候需要傳乙個二級指標我們需要做哪些變化呢?肯定不能把二維陣列名傳進去,因為二維陣列名是乙個指向陣列型別的指標
,雖然我的破爛教材上說二維陣列名也是二級指標,但肯定是像我們常說的:為了前期方便理解某些知識點,而把一些後備知識以缺漏甚至是錯誤的方式告訴我們。
只是巧合二級指標和指向陣列的指標在*
運算一次之後都能得到乙個指向int型別的指標
,然後第二次*
運算的時候得到乙個int值。
二級指標和指向陣列的指標在第一次*
運算時如果有加i
,就是a[i][j]
裡的a[i]
,他們移動的位元組數是不一樣的:
二級指標:移動 i * 4個位元組
指向陣列的指標:移動 (i * 其指向陣列的長度)個位元組
所以在形參是二級指標的時候,你傳乙個&a[0]
或者(int **)a
是不行的。因為在第二次迴圈的時候,你的指向第二個陣列的int指標在你的後面8個位元組處,而二級指標只移動了4個位元組。
需要乙個陣列名你傳乙個二級指標也是一樣的不行。測試**就不貼了
C C 二維陣列名和二級指標
1.1 乙個指標包含兩方面 a 位址值 b 所指向的資料型別。1.2 解引用操作符 dereference operator 會根據指標當前的位址值,以及所指向的資料型別,訪問一塊連續的記憶體空間 大小由指標所指向的資料型別決定 將這塊空間的內容轉換成相應的資料型別,並返回左值。有時候,兩個指標的值...
指標和陣列名(指標訪問陣列)以及二級指標
既然可以把陣列名當成位址存放到乙個指標中,我們使用指標來訪問乙個就成為可能。讓我們看下面 include includeint main int p arr 指標存放首元素的位址 所以 p i 其實計算的是陣列 arr 下標為i的位址。那我們可以直接通過指標來訪問陣列。如下 include incl...
陣列名和指標
c c 陣列名與指標區別深層探索 看了這篇文章之後,終於將混淆了很久的概念搞清楚了。1 陣列名的內涵在於其指代的實體是一種資料結構,其資料結構就是陣列 2 陣列名的外延在於其可轉換為指向其指代實體的指標,而且是乙個指標常量 3 指向陣列的指標則是另外一種變數型別,僅僅意味著陣列的存放位址。陣列名在作...