天天看點

《指針的程式設計藝術(第二版)》一第二章 指針與變量2.1 一顆星星:表示一把鑰匙

本節書摘來自異步社群《指針的程式設計藝術(第二版)》一書中的第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

輸出結果

《指針的程式設計藝術(第二版)》一第二章 指針與變量2.1 一顆星星:表示一把鑰匙

程式中的

 <code>`</code>javascript

int *ptr = &amp;x;

表示将&amp;x指派給ptr,而不是将位址(&amp;x)賦給值(ptr),否則會造成兩邊的資料類型不同。程式使用ptr間接地得到x的值。間接通路的過程很像間諜(spy)的工作,他們不會直接指派工作,這樣才不會暴露彼此之間的關系。

強烈建議大家畫出程式定義的示意圖,例如,下圖為ptr = &amp;x的示意圖,你可以很容易的從圖形中看出實質。

《指針的程式設計藝術(第二版)》一第二章 指針與變量2.1 一顆星星:表示一把鑰匙

最後,将&amp;y指派給ptr。

其示意圖如下所示。

《指針的程式設計藝術(第二版)》一第二章 指針與變量2.1 一顆星星:表示一把鑰匙

如果将指針與const共享,則應該注意什麼?請參閱範例constpointer。

範例constpointer

《指針的程式設計藝術(第二版)》一第二章 指針與變量2.1 一顆星星:表示一把鑰匙

程式中

這條語句的示意圖如下所示。

《指針的程式設計藝術(第二版)》一第二章 指針與變量2.1 一顆星星:表示一把鑰匙

這條語句表示p指針指向變量a的位址。因為const 寫在int的前面,表示不可以使用p指針間接改變變量a的值,如p=200。但可以改變p指針指向另一變量,如p=&amp;b。

而下一條語句

int * const q = &amp;b;

繼續閱讀