c語言與指標 (一)指標與變數

2021-08-13 13:11:08 字數 1777 閱讀 7039

寫在前面:

指標是學習c語言時,最讓人頭痛的乙個難題。但是指標不僅是c語言的精髓,它還貫穿整個計算機底層儲存與訪問方式。

指標實際上就是位址指標變數用來存放指標(位址)。

指標變數也是一種變數,它和不同的變數同樣要佔一定的儲存空間。但指標變數與不同的變數不同之處在於,指標的儲存空間存放的不是不同的資料,而是乙個位址。

因此,在我們寫程式時使用指標時,為了不讓自己混淆,請習慣性將定義指標稱為定義指標變數。

指標變數可以操作多種資料結果,使用指標可以運算元組和字串,可進行函式呼叫,還可以處理記憶體位址。

資料在記憶體中是如何存放的?在機器中,記憶體是由乙個個記憶體單元構成的每個記憶體單元包含8位二進位制位,也就是乙個位元組。每個記憶體單元有乙個唯一的編號,這個編號稱為記憶體單元位址。而記憶體單元位址在書寫時通常使用16進製制來表示,在本質上還是2進製數,只是為了方便書寫。

上圖中,1000h,2000h,2001h......都是位址值,而記憶體單元內容就是我們所說的變數值。2000h就是乙個16進製制數,它所對應的二進位制數為:0010000000000000.

例如:printf(「%d」,i);的執行過程。現將變數i轉換成對應的位址變數,這一步在編譯程式時完成,然後根據變數i的位址,假設在2000h找到記憶體中對應的儲存單元,並從中取出資料,最後輸出資料。很多程式語言變數的位址是由計算機來分配的,而在c語言中,可以使用區位址運算子&來對變數的位址進行操作。

在程式中,使用的都是變數名,實際上是通過變數名轉換成實際位址來操作記憶體單元的,對記憶體單元進行讀寫。

假設i是乙個佔兩個位元組的整型變數,而p是乙個指向變數i的指標。如下圖所示:

變數i的位址範圍為2000h~2001h,i的數值為1010010001001011。指標變數p也佔兩個記憶體單元,位址範圍為2100h~2101h,數值為0010000000000000。這裡需要強調的是,數值的儲存是高位元組儲存高八位,低位元組儲存第八位。

仔細檢視,指標變數p有自己的記憶體位址2100h(取首位址為代表位址),而變數p的值卻是0010000000000000,那麼這個值等於多少呢?換算成16進製制,發現,這個值為2000h,正是變數i的位址(取首位址為代表位址)。這樣子,我們就將指標變數p和整型變數i連線起來了,通過p就可以找到i,當然先獲得的是i的位址, 其次是i對應的記憶體單元。

由於通過位址能夠找到某個變數對應的記憶體單元,因此,我們常說指標指向某個變數,而位址也被稱為指標,上面的例子,我們就可以稱為指標變數p指向變數i。此外,我們關心的是指標變數到底指向的是誰,而不關心指標本身的位址。若有乙個指標變數p的位址存放在另乙個指標變數q中,那麼指標變數q就指向了指標變數p,而指標 變數p指向指標變數i,那麼指標變數q就是指向指標的指標變數。

c語言指標初探 一 指標與陣列

一 陣列名指標 c 編譯器將陣列名解釋為指標 include using namespace std int main cout sz 編譯器將陣列名解釋為陣列記憶體區域的首位址,對一維陣列來說要實現對某個元素的訪問,既可以用陣列名 下標的形式,也可以用間接引用 陣列名 偏移 陣列元素的指標形式 指...

C語言指標初探 一 指標與函式

1.通過指標引數申請動態記憶體。2 利用函式返回值申請動態記憶體。3 返回棧記憶體的 或靜態儲存區的 指標或引用。以上知識請參考 記憶體管理。4 函式引數的三種傳遞方式 1 值傳遞 這個應該簡單吧,來看個經典程式 include include using namespace std void sw...

指標與陣列(一) 指標認知

一 定義與初始化 1.如何理解指標?1 指標是變數。2 指標是乙個位址,指向的是個型別。3 指標指向的是位址,位址指向的是內容。4 指標的指標,是面對於指標的變數。5 指標型別的位元組長度由作業系統決定 32位作業系統為4位元組,64位作業系統為8位元組 2.定義指標的幾種規範 int p 重在表示...