C++ 指針
指針可以聲明為*d的形式,d為變量名。
指針可以和引用一樣實現(xiàn)對其他對象的間接訪問,然而指針還有很多其他的屬性。
指針本身是一個對象,允許對指針賦值和拷貝。
指針可以在生命周期內(nèi)實現(xiàn)對不同對象的指定,這是引用無法做到的。
指針在定義時無需初始化。

獲取對象的地址:

一般情況下(后面我們會講兩種特殊情況),指針類型和他所指對象的類型嚴格匹配


指針的值(也是地址)應(yīng)屬于一下四個狀態(tài)之一:
1。指向一個對象
2。指向緊鄰對象所占空間的下一個位置
3??罩羔?,意味著指針沒有指向任何對象
4。無效指針,也就是上述情況外的其他值
試圖操作無效指針都將引發(fā)錯誤,但是編譯器并不會檢查此類錯誤!
第二種和第三種指針沒有指向具體對象,所以訪問此類指針的對象不被允許,如果這么做了后果無法預(yù)計。
利用指針訪問對象
我們用*(解引符)來訪問指針所指的對象(如果有的話)


這里總結(jié)一下&和*的多重含義

空指針

nullptr可以被轉(zhuǎn)換成任意其他的指針類型。
NULL為一個預(yù)處理變量,它的值就是0
預(yù)處理器
后面會詳細介紹,現(xiàn)在我們可以知道它是運行于編譯過程之前的一段程序就行了,預(yù)處理變量不屬于命名空間std,由預(yù)處理器管理,因此我們可以直接使用而無需std::。
注意:
讓int變量直接賦給指針是錯誤的操作,即使int變量恰好等于0

訪問未經(jīng)初始化的指針后果很難處理,因此建議初始化所有的指針。
賦值和指針

指針可以通過==或者!=來比較,同時一個指針指向某一個對象,同時另一個指針指向另一對象的下一個地址,兩個指針也可能相等。(注:這里要用到指針的值,如果是非法指針后果將無法預(yù)測)
后面還會介紹更多關(guān)于指針的知識。(可見指針在C++中十分重要。。
void*指針
void*可以存放任意類型指針,看起來很炫酷但是這也讓我們無法知道這個地址到底是個什么類型的對象。

關(guān)于void*在比較后面會有更詳細的介紹。
練習:
改變指針的值和指針所指對象的值。

敘述下列代碼的作用

(將p1和i綁定,同時將i變成i方

?lp錯誤的原因
