一.指標到底是什麼
指標(pointer)到底是什麼,弄清楚這個問題很重要,這是我們所討論的話題的源頭,而在闡述指標是什麼之前,我們需要先來看一下變數的概念。
我們知道,計算機的記憶體(primary storage)被劃分為多個儲存單元,這些儲存單元可以以單個或者順序相連組成乙個更大單元的方式被使用。每乙個單獨的儲存單元都是乙個位元組(byte),它通常由8個位(bit)組成,每乙個位可以表示的值只有0或1。每乙個儲存單元都被乙個及其分配的標識唯一地表示,而這個標識就是位址。
下圖表示了儲存單元單獨被操作時的情形,矩形表示儲存單元,矩形內的內容是儲存在這個記憶體單元的具體的值。矩形上方的數就是每個記憶體單元的位址。因為每個單元為乙個位元組,而每個字元型常量(character constant)所佔據的正是乙個位元組,如下所示:
再來看下面的圖:
這次的情況是順序連成組進行操作,對於整型常量(integer constant),在32位計算機中需要四個位元組來儲存(有一點要宣告,208位置的那個矩形裡的1078345超出了int型別的範圍,是long int型別,但ansi c只規定了long型資料長度不小於int型,int型資料長度不小於short型,並規定int型為16位,long型為32位,然而很多編譯器採取的策略是使long和int型資料佔據相同的記憶體位元組數,即全為32位),所以位址以4個單位增長(也就是說現在的乙個矩形表示4個記憶體單元),這次矩形下面多了幾個小寫字母,儲存在矩形裡面的值不是固定唯一的,而是可變的。我們可以把矩形認為是乙個變數(variable),每次我們要引用矩形裡的值時,機器都是通過位址來定位(那個矩形)並取得其中的值的,而對於我們來說要記住這些位址幾乎是不可能的,所以高階語言提供了用名字來訪問記憶體位置的特性,它們就是變數名,即上圖的a,b,c,d。
來看新增的ptr,同樣是個變數,它也有位址,它的值是變數a的位址。至此可以給出指標的定義了:指標是一種用於存放另乙個變數的位址的變數。上圖中的ptr就是乙個指標,並且我們說它指向了變數a(因為ptr的值是變數a的位址),要注意指標中只能存放位址,不能將乙個整型量或者其他非位址型別(整型數0及具有0值的整形常量表示式除外,後面的文章會細緻講解)的資料賦給乙個指標!
還有,指標這個詞,由於是對pointer這個詞翻譯得來,完整的叫法應該是指標變數,由於指標變數中存的位址,而在很多英文資料中,指標(pointer)的涵義不完全都是指標變數,有時也指位址,請大家在閱讀或參考資料時注意區分!
前言
2.指標的定義及運算
3.指標與陣列的「愛恨情仇」
4.分清函式指標和指標函式
5.指標與結構
6.使用指標時的「陷阱」
後記
C語言指標學習 一 指標是什麼
僅供自己學習使用,謝謝!指標的定義 位址 記憶體單元的編號 從0開始的非付整數 在32位機器上,記憶體最大為4g 2 32個位元組 指標 指標就是位址,位址就是指標 指標變數就是存放記憶體單元編號的變數,或者說指標變數就是存放位址的變數 指標和指標變數是兩個不同的概念 需要注意的是,我們平時在敘述的...
C語言指標導學 後記
rel file list href file c 5cdocume 7e1 5cporsche 5clocals 7e1 5ctemp 5cmsohtml1 5c01 5cclip filelist.xml rel file list href file c 5cdocume 7e1 5cpors...
C語言之旅(1)指標
指標是什麼?指標是變數。指標是幹什麼用的?指標是儲存位址的。指標佔多少個位元組?對於32位系統來說是4個位元組,對於64位系統來說是8個位元組,當前大多數用的還是32位系統。這裡面說的系統不是計算機的作業系統,而是計算機架構的定址能力。對於32位系統來說計算機的位址用8位16進製制數表示。因為一位1...