論C語言中二級指標和二維陣列之間的區別

2022-07-31 02:27:15 字數 609 閱讀 7586

剛開始學習c語言的時候,覺得乙個陣列可以定義乙個一級指標去訪問,想當然的就覺得可以定義乙個二級指標去訪問二維陣列。很顯然這是錯誤的。

我們來看看c語言的陣列在記憶體中的儲存方式。

實際上c語言中的陣列,實際上都是一維的。即不管是幾維的,都是通過陣列的陣列這種方式來建立的,實際上它們在記憶體中的儲存方式還是連續的一維陣列。

那麼我們再來回來剛剛的問題:為何二級指標不能指向乙個二維陣列?

二級指標首先是指標的指標,即乙個物件的位址的位址,而實際上我們的陣列所需要的指標只是需要的指標的乙個物件的位址,只是這個指標還有其他的指向位置的限制。

因此我們在要用到乙個指標將乙個二維陣列傳遞的時候,這個指標的定義方式應該是這樣的。int (*p)[10],而不是int *p[10],後者表示的是乙個指標陣列(即這個一維陣列有10個元素,每個元素都是int型指標)。

另外關於二級指標,它是位址的位址,當它作為形參的時候,可以接受二級指標**p或者是指標陣列*p作為引數傳入(可以這麼理解,本身乙個一維陣列的陣列名就是指向乙個位址的,然後裡面的元素又是指向某個元素的位址,即位址的位址)。

C語言中二維陣列和指標

a或 a 1 行位址 a i 行位址加列位址test 如下所示 include int main void 第一行位址 printf p,p,p,p n nums,nums 0 nums,nums 0 第二行位址 printf p,p,p,p n nums 1,nums 1 nums 1 nums ...

二維陣列和二級指標

前兩天寫個程式,傳引數的時候想傳個二維陣列進去,結果悲劇了,函式寫成fun int p 原來沒有這麼寫過,以為這麼寫也是對的,結果錯了,查了些資料,做個總結。fun int p 這裡面的int p 這裡的p不是二維陣列的指標,而是指向指標的指標,即二級指標。正確的二維陣列的指標應該是 int a 2...

C語言中二級指標的作用

c語言中不存在引用,所以當你試圖 改變乙個指標的值的時候必須使用二級指標。1.當不用指標時,引數傳入子函式的過程為值傳遞,子函式中修改的區域性變數的值對原來的實參並沒有影響。2.當用一級指標時,引數傳入子函式的過程為位址傳遞,子函式的實際操作是對指標的操作,那就可以通過子函式中對於實參指標的修改達到...