你把指針想象為鼠標,看看鼠標游移指示是什麽意思。
數組等於數學上的數列。
數組的下標,指明這是第幾個元素,那麽如果知道第一個元素的真實位置(比如屏幕上一個點的坐標),則只要將起始位置加上下標個單元,就把指針(鼠標)移動到那個下標標示的數據上面了。比如,在屏幕上第3行第2列有一橫排文字string[] = "Hello,world!",可以用一個叫指針p的東西,記錄字符'H'的位置,這時p叫起始指針,即string[0]的地址(第3行第2列),現在我們說string[4]是什麽呢?因爲4是下標,表示數組中的第5個元素(C從0開始計算,第一個是0,則4是第五個),所以此時可以將指針p往前移動4個單元(因爲是字符數組,每個單元是一個字符的長度,不要管字符佔多少字節,只算字符數),即p+4就是所求元素的地址,這只是地址,現在取它的内容,ch = *(p+4)就是内容了,此時,你得到的ch是字符'o',亦即string[4],所以*(p+4) = string[4],*p = *(p+0) = string[0]。
現在囘過頭來看原先的變量聲明。我們聲明char *p的時候,意思是說p是一個指針,它應該指向一個char類型的數據對象。所以,p是地址,*p才是這個地址上的内容,前者是門牌號碼,後者纔是實體。所以,看看上面,*(p+4)確實必須與一個char數據對應,如果不是這樣,編譯器就會給出警告,因爲你原先聲明過char string[]的數組元素是char,兩邊應該是相同的。
同樣是屏幕上的字串例子。我們不用管當前屏幕上顯示的字符是多大的,它可能是9磅的字,也可能是12磅的字,但sizeof(char)會告訴你,現在的字是多大,你不要預測sizeof(char)的具體數值,只要用它的結果,千萬不要自作聰明,sizeof(int)等於2或4,它等於多少,是視程序在什麽機器和操作系統上以什麽模式運行而定的,寫正確程序的修養,是不要假定它的具體數值。這相當於不要假定當前屏幕的字體都是9磅,把鼠標往右移動9個1磅的位置,這樣很可能是錯的。在你的機器上是9磅,在我的機器未必是9磅。
[
本帖最后由 TonyDeng 于 2011-7-29 14:27 编辑 ]