C 語言中的指標算術
高等 C 語言簡介字串指標與陣列函數結構物件導向記憶體檔案錯誤處理巨集處理C 與組合語言資料結構動態字串動態陣列鏈結串列雜湊表開發環境MakeCygwinMinGWDevC++wxDevC++編譯器gcc 編譯器TinyCC 編譯器LCC 編譯器應用主題CGI 程式GNU 程式視窗程式影像處理練習題訊息相關網站參考文獻最新修改簡體版English |
在 C 語言當中,指標型態的變數,像是下列範例中的 char *cp; int* ip; 等,其加減法的表現,會根據型態而有所不同。 舉例而言,假如 cp = 0x0022FF77,那麼 cp+1 就是 0x0022FF78,因為 cp 是一種字元指標,這種結果是理所當然的。 但是,假如 ip = 0x0022FF6C,那麼 ip+1 卻是 0x0022FF70,這是因為 ip 是整數指標,因此當我們將 ip 加上 1 單位距離時,這個一單位距離的大小就相當於整數 int 的大小,也就是 sizeof(int) = 4。 範例程式
執行結果
習題這個設計的邏輯,是為了讓您寫程式時,可以都用 ptr ++ 來將指標前進一格,而不需要用 ptr += sizeof(*ptr) 這樣複雜的寫法,但是這也造成了一些問題。 假如您的認知錯誤,很可能會多此一舉,萬一您自己計算大小以便調整指標時,就會產生錯誤的結果,像是以下程式一樣。
習題的輸出
如果您已經讀懂了上面的範例,那麼,您一定可以看出為何下列程式會有那樣奇怪的輸出了吧?這顯然是一個不容易理解的 bug。 補充根據 jserv 的來信補充,提到下列這幾點,是本文原本所沒提到的:
|
page revision: 1, last edited: 03 Mar 2016 12:53
Post preview:
Close preview