本節書摘來自異步社群《指針的程式設計藝術(第二版)》一書中的第2章,第2.1節,作者 蔡明志,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
指針的程式設計藝術(第二版)
2-1 一顆星星:表示一把鑰匙
2-2 兩顆星星:表示兩把鑰匙
2-3 三顆星星:表示三把鑰匙
2-4 練習
如果要間接通路某一變量值,我們可使用指針來完成。
本章将介紹指針變量(pointer variable)與一般變量的關系。首先介紹的是,如何定義一個指針變量,如下所示。
上述語句表示下列3種含義。
1.ptr是一個指針變量。
2.ptr變量所存儲的資料是某一個變量的位址(假設是整數變量x的位址)。
3.使用ptr可以得到整數變量x的值。你可以把 比喻成一把鑰匙,用它來打開目前ptr指向的信箱,而得到該信箱内的信件。
先來看看範例onepointer。
範例onepointer
輸出結果
程式中的
<code>`</code>javascript
int *ptr = &x;
表示将&x指派給ptr,而不是将位址(&x)賦給值(ptr),否則會造成兩邊的資料類型不同。程式使用ptr間接地得到x的值。間接通路的過程很像間諜(spy)的工作,他們不會直接指派工作,這樣才不會暴露彼此之間的關系。
強烈建議大家畫出程式定義的示意圖,例如,下圖為ptr = &x的示意圖,你可以很容易的從圖形中看出實質。
最後,将&y指派給ptr。
其示意圖如下所示。
如果将指針與const共享,則應該注意什麼?請參閱範例constpointer。
範例constpointer
程式中
這條語句的示意圖如下所示。
這條語句表示p指針指向變量a的位址。因為const 寫在int的前面,表示不可以使用p指針間接改變變量a的值,如p=200。但可以改變p指針指向另一變量,如p=&b。
而下一條語句
int * const q = &b;