個人覺得 C 語言最神奇的地方是有好些個對等寫法

類型 相關運算子 寫法一 寫法二 說明/宣告
1. (變數)取址 "&" p &x p 為指標, 並指向變數 x
2. (指標)取值 "*" *p x 同上
3. 陣列與指標 "[]" and "*" p[n] *(p+n) p 為陣列變數或者指標變數
4. 結構成員 "->" and "." p->x (*p).x p 為指標, 並指向一結構
x 為該結構成員

上列幾個類型的寫法一寫法二是對等的 (注意: 我用對等是因為有些不是全然相等喔!).

第一項 (變數)取址和第二項 (指標)取值基本上是一體之兩面: 使用變數 x 時, x 代表的是值, 其位址以 &x 表示; 而使用指標 p 時, p 代表的是 (某一個變數的) 位址, 其值 (該變數的值) 則以 *p 表示.

使用變數和使用指摽基本上是的不同. 使用變數是存取固定的位址其內容值是變動的, 而使用指標的目的則是希望可以處理不同的變數, 因此位址是變動的 (或者換句話說是間接取存固定的位址).

對大部份的 CPU 來說, 存取固定的位址是以比較快速的直接定址來完成, 而存取變動的位址則以相對比較慢的間接定址來完成. 現今大多數的 CPU 也都有支援直接定址及間接定址這二種定址模式.

第三項陣列與指標, 在這裡所提的二種寫法是完全相等的, 不論變數是以陣列宣告的或者是以指標宣告, 二種寫法都可以共用.

(註: 請小心, 指標變數陣列變數基本上並不相同, 只有 "指標的偏移計算" 和 "陣列的索引計算" 是相同的, 但是在此因為是針對同一個變數, 所以這二種寫法所產生的目的碼會是一致的, 全等的. 參看:...)

第四項是以指標存取結構成員, 這二種寫法也是全等的.

弄懂以上這幾種對等寫法的組合運用及轉換, 再配合小括號及運算元優先順序保證 C 語言的功力大增.

arrow
arrow
    文章標籤
    C 語言 指標 陣列 結構
    全站熱搜

    MagicJackTing 發表在 痞客邦 留言(0) 人氣()