對於部分初學者來說,指標是理解c語言的一大難點。其它語言,比如python 和 java 也可以透過 對物件的引用,實現c語言指標類似的功能,但是隻有c語言才有 顯式的指標。正因為c語言有指標,所以才適合作為 計算機系統的底層程式語言,用於編寫作業系統 和驅動程式。
理解指標,其實就是明白 指標本質 就是計算機中 儲存資料的地址。比如程式中一個變數,在計算機中儲存時,都有對應的地址。
在c語言中,可以用 取地址 運算子 & ,來獲取變數的地址,打印出來以後,隨系統為32位或64位的不同,為32bit 或 64 bit 的數字。
知道一個變數的地址以後,可以用 取內容運算子 * ,來對這個地址的內容 來進行讀寫。
那對任意一個64bit 的地址,都可以透過取內容運算子讀寫內容嗎? 如果 這個地址不在作業系統 設定的 範圍內,就會引發 段 錯誤,使程式執行終止。java 因為 沒有 指標,所以不會發生類似錯誤,這也是java 語言 安全的原因。
理解了 取地址 運算子 &和 取內容運算子* ,就理解了 指標的一半了。剩餘的 需要 理解 指標 加 操作時,實際增加的 地址值,隨指標指向的變數型別不同而不同。可以用 指標來操作字串,或者用 指標來操作malloc 分配的記憶體來讀寫資料,以熟悉指標的使用方法。
進一步在實際開發中 使用指標,可以結合 資料結構中 連結串列 和 二叉樹的 內容來進行。
透過指標熟悉 了資料在 計算機中的儲存格式以後,可以順便 進行 位段,結構體,聯合體的學習。