今日在論壇上看到有人問到指標的問題,我想通過這樣的例子來闡述幾個常見的錯誤,並加深對二
級指標和二維陣列之間關係的理解.
我們知道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 arr...
二維陣列與二級指標
今日在論壇上看到有人問到指標 級指標和二維陣列 我們知道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 要訪問的陣列有三行,所以申請三個一維...