指針與引用的區別

指針和引用在c++中都是複合類型(compound type),即基於其他類型定義的類型。

指針本身就是一個對象,允許對指針進行賦值和拷貝,在指針的生命週期內它可以先後指向幾個不同的對象。
引用並非對象,相反它只是爲一個已經存在的對象所起的另外一個名字,“引用即別名”。

因爲引用不是對象,所以:
不能定義引用 的引用;
沒有實際地址,不能定義指向引用的指針。

區別:

  1. 指針是一個對象,而引用僅是個別名;

  2. 指針可以有多級(int **p;),引用只能是一級(int &a=b;);

  3. “sizeof 引用”得到的是所指向的變量(對象)的大小,而“sizeof 指針”得到的是指針本身(所指向的變量或對象的地址)的大小;

  4. 指針訪問對象需要解引用(*),引用不需要;

  5. 指針的值可以爲空,但是引用的值不能爲NULL,並且引用在定義的時候必須初始化;

  6. 指針和引用的自增(++)運算意義不一樣.
    指針自增是對象的地址加1,int *p;p++;表示指針向後移動4個字節;
    引用的自增運算時對象本身加1,int b=1;int &a=b; a++;a是b的別名,a與b都是2。

發佈了71 篇原創文章 · 獲贊 30 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章