指針和引用在c++中都是複合類型(compound type),即基於其他類型定義的類型。
指針本身就是一個對象
,允許對指針進行賦值和拷貝,在指針的生命週期內它可以先後指向幾個不同的對象。
引用並非對象,相反它只是爲一個已經存在的對象所起的另外一個名字,“引用即別名”。
因爲引用不是對象,所以:
不能定義引用 的引用;
沒有實際地址,不能定義指向引用的指針。
區別:
指針是一個對象,而引用僅是個別名;
指針可以有多級(int **p;),引用只能是一級(int &a=b;);
“sizeof 引用”得到的是所指向的變量(對象)的大小,而“sizeof 指針”得到的是指針本身(所指向的變量或對象的地址)的大小;
指針訪問對象需要解引用(*),引用不需要;
指針的值可以爲空,但是引用的值不能爲NULL,並且引用在定義的時候必須初始化;
指針和引用的自增(++)運算意義不一樣.
指針自增是對象的地址加1,int *p;p++;
表示指針向後移動4個字節;
引用的自增運算時對象本身加1,int b=1;int &a=b; a++;
a是b的別名,a與b都是2。