指針與引用類似,實現了對其他對象的間接訪問。
指針和引用區別:指針本身就是對象,允許對指針賦值和拷貝,在生命週期內可以先後指向不同的對象;指針不需要在定義時賦初值。
引用不是對象,沒有實際地址,不能定義指向引用的指針。
給指針賦值就是令它存一個新的地址,從而指向新的對象;而引用定義後無法再綁定到另外的對象。
指向指針的引用
int a = 12;
int *pa = &a; // pa爲int型指針
int *&ra = pa; // ra爲對指針pa的引用
int b = 22;
int *pb = &b;
pa = &b; // 正確,指針的對象可以改變
ra = pb; // 錯誤,引用的對象爲指針,初始化後不能改變
對於複雜的指針或引用的聲明,從右向左閱讀。ra首先是一個引用,引用的對象是一個指針,該指針是int型,所以ra是一個int指針的引用。
空指針
int *p1 = nullptr; // 推薦
int *p2 = 0; // 字面常量0
int *p3 = NULL; // NULL爲預處理變量,在頭文件cstdlib中定義