1. 程式人生 > >二維“陣列”轉換成二維“指標”

二維“陣列”轉換成二維“指標”

我們知道char array[]=”abcdef”; array是陣列的首地址, 
那麼在二維陣列中array當然也是陣列的首地址, 
看看這個定義char Array[][3] ={“ab“,“cd“,“ef“}; 
怎麼知道的呢?定義這樣一個數組,在vc除錯視窗中 
我們看到: 
Array ---------0x64324234 
|------Array[0]---0x64324234 “ab“ 
|------Array[1]---0x64324337 “cd“ 
|------Array[2]---0x6432433A “ef” 
已經很明白了,實際編譯器是這樣實現二維陣列的,實際上Array是“一維指標陣列“的首地址,其中每一個元素指標都對應一個字串,那麼好我們來看看是否可以這樣來使用Array二維陣列. 
char **pArray = Array;編譯器提示出錯,怎麼辦呢?加個(char **)試試,仍然出錯,設斷看一下pArray的值和Array的值是相等的,但我們是否可以象使用Array那樣來同樣輸出字串呢?很明顯是不行的,編譯器不會把pArray+i處理成pArray+i*3尋找到第i個指標的地址,而只是簡單的加了一個i.這說明編譯器只做了很簡單的將地址值賦給了pArray,而它實際沒有任何意義.我們不能用它來訪問任何資料.很奇怪嗎? 
再來看看這樣定義char *p[] = {“ab“, “cd“, “ef“};定義了一個指標陣列.char **sp = p;這樣的用法經常看到,為什麼這樣就可以使用sp來訪問字串了呢,的確編譯器在編譯的時候識別出了sp是一個指向一維陣列的指標的指標,那麼我們就可以把它做為陣列名來操縱整個陣列了.