引用
引用是對物件起乙個別名,即相互繫結的意思,引用不像指標那樣可以指向不同物件,不可解綁,引用不是乙個物件,所以必須進行初始化。
如:int a;
int &b = a;//即b是a的別名,a的值也是b的值,改變a或b的值兩者值都會改變。
引用只能繫結在物件上,不能繫結在字面值或某個表示式的結果上。
如:int &i = 10;//錯誤,不能繫結在字面值上,初始值必須是乙個物件。
double dua = 3.14;
int &i = dua;//錯誤,引用型別的初始值型別不同。
指標
指標也是一種復合型別,與引用類似,指標也實現了對其他物件的間接訪問,與引用最大的區別在於指標是乙個物件,指標的生命週期內可以先後指向幾個不同的物件,可以不被初始化,但建議必須初始化。
int *ip1;//ip1是指向int型物件的指標,存放的是不確定的值。
int ival = 42;
int *ip2 = &ival;//ip2是指向int型物件的指標,且ip2的初始值是int型物件的位址,允許解引用符*來訪問該物件,即 //*ip2 等價於 ival,改變兩者中的任何乙個,其值均被改變。
int **ip3 = &ip2;//ip3是指向乙個int型的指標,存放的是指標ip2指向的物件的位址,可以表達為ival = *ip2 = **ip3;
void * 指標是一種特殊的指標型別,可用於存放任一物件的位址。
如:double obj = 3.14;
void *pv = &obj;//obj可以是任意型別的物件
空指標空指標不指向任何物件,在試圖使用乙個指標之前應當先檢查他是否為空。
生成空指標的三種方法:
1. int *p1 = nullptr;//nullptr為指標型字面值
2. int *p2 = 0;
3. #include cstdlib
int *p3 = null;//null為預處理變數
指向指標的引用
引用本身不是乙個物件,也就不能定義指向引用的指標,但是指標是物件,可以存在對指標的引用 如:
int i = 42;
int *p;
int *&r = p;//r是乙個對指標p的引用
*r = 0;//此時r = i = 0;
復合型別 指標和引用
復合型別,顧名思義就是指基於其他型別定義的型別,主要有 指標 與 引用 本文將先分別介紹這兩種型別,接著將介紹二者之間的異同之處。一般來講,一條宣告通用的格式為 基本資料型別 宣告符。在簡單宣告語句中,宣告符就是變數名,換句話說,此時的變數型別就是宣告符前面的基本資料型別。而復合型別就是一種基於基本...
C 復合型別 引用和指標
include using namespace std 復合型別 基於其他型別定義的型別 常見 引用 指標 引用 1.右值引用 rvalue reference 2.左值引用 lvalue reference 引用必須是乙個物件,引用就是起乙個別名,引用必須初始化。指標 是 指向 point to ...
C 復合型別之引用和指標
復合型別是指基於其他型別定義的型別。c 有很多復合型別,介紹其中的引用和指標 對變數的宣告的解釋 一條簡單的宣告語句是由乙個資料型別和緊隨其後的變數名列表組成。其實更通用的描述是 一條宣告語句由乙個基本資料型別和緊隨其後的乙個宣告符列表組成。每個宣告符命名了乙個變數並指定該變數是與基本資料型別有關的...