解析二級指標與二維陣列之間的關係

2021-03-31 08:57:00 字數 1007 閱讀 5883

解析二級指標與二維陣列之間的關係

今日在論壇上看到有人問到指標的問題,我想通過這樣的例子來闡述幾個常見的錯誤,並加深對二

級指標和二維陣列之間關係的理解.

我們知道char array=」abcdef」;   array是陣列的首位址,

那麼在二維陣列中array當然也是陣列的首位址,

看看這個定義char array[3] =;

怎麼知道的呢?定義這樣乙個陣列,在vc除錯視窗中

我們看到:

array ---------0x64324234

|------array[0]---0x64324234 「ab「

|------array[1]---0x64324337 「cd「

|------array[2]---0x6432433a 「ef」

已經很明白了,實際編譯器是這樣實現二維陣列的,實際上array是「一維指標陣列「的首位址,其中每乙個元素指標都

對應乙個字串,那麼好我們來看看是否可以這樣來使用array二維陣列.

char **parray = array;編譯器提示出錯,怎麼辦呢?加個(char **)試試,仍然出錯,設斷看一下parray的值和array

的值是相等的,但我們是否可以象使用array[i]那樣來同樣輸出字串呢?很明顯是不行的,編譯器不會把

parray+i處理成parray+i*3尋找到第i個指標的位址,而只是簡單的加了乙個i.這說明編譯器只做了很簡單的將位址值賦給

了parray,而它實際沒有任何意義.我們不能用它來訪問任何資料.很奇怪嗎?

再來看看這樣定義char *p = ;定義了乙個指標陣列.char **sp = p;這樣的用法經常看到,為什麼這樣

就可以使用sp[i]來訪問字串了呢,的確編譯器在編譯的時候識別出了sp是乙個指向一維陣列的指標的

指標,那麼我們就可以把它做為陣列名來操縱整個陣列了,c神奇的地方或者說精華的地方就在這裡了,希望

這篇文章對那些對指標或二級指標有疑惑的朋友能夠有所幫助,這也是我blog裡的第一篇文章,呵呵.

解析二級指標與二維陣列之間的關係

今日在論壇上看到有人問到指標的問題,我想通過這樣的例子來闡述幾個常見的錯誤,並加深對二 級指標和二維陣列之間關係的理解.我們知道char array abcdef array是陣列的首位址,那麼在二維陣列中array當然也是陣列的首位址,看看這個定義char array 3 怎麼知道的呢?定義這樣乙...

二維陣列與二級指標

今日在論壇上看到有人問到指標 級指標和二維陣列 我們知道char array abcdef array是陣列的首位址,那麼在二維陣列中array當然也是陣列的首位址,看看這個定義char array 3 怎麼知道的呢?定義這樣乙個陣列,在vc除錯視窗中 我們看到 array 0x64324234 a...

二級指標與二維陣列

include 輸入輸出標頭檔案。include 本程式需要用到malloc free函式,引用該標頭檔案。int main 定義二維陣列a,並賦值從1 12.int p null 定義二維指標。int i,j p int malloc sizeof int 3 要訪問的陣列有三行,所以申請三個一維...