引用是c++引入的新語言特性,正確、靈活地使用引用,可以使程式簡潔高效。
一、一般變數的引用
引用只是給變數起了乙個別名,它們兩個儲存在同乙個儲存單元,具有同一位址。
來看下面的**
int a = 10;
int b = 20;
int &rn = a;
int equal;
rn = b;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
rn = 100;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
equal = (&a == &rn) ? 1 : 0;
cout << "equal = " << equal << endl;
這裡將rn作為a的引用,對rn操作就相當於對a進行了相應的操作。因為它們具有相同的儲存單元,所以最後一行輸出的是 equal = 1;
二、指標變數的引用
其實指標變數的引用和普通變數的引用差不多,都是給它們取了乙個別名。
int a = 1;
int *p = &a;
int *&pa = p;
上面的一段**就是將pa作為p的引用,所以對pa的操作就相當於對p的操作。
三、使用指標引用來交換兩個字串
#include using namespace std;
void swap(char *&x, char *&y)
int main()
上面的**就是利用傳指標的引用實現字串的交換。如果沒有傳遞指標的引用,那麼只是在swap函式中交換了兩個字串,和main函式裡的ap,bp並沒有什麼關係。
四、指標和引用的區別
1、初始化要求不同
引用在建立的同時必須初始化
指標在定義的時候不一定要初始化
2、可修改性不同
引用一旦被初始化為指向乙個物件,它就不能被改變為另乙個物件的引用
指標可以在任何時候改變為指向另乙個物件
3、不存在null引用
引用不能使用指向空值的引用,它必須指向乙個某個物件
指標可以null,不需要總是指向某些物件,可以把指標指向任意的物件
4、測試需要的區別
引用不會指向空值,所以在使用引用前不需要測試它的合法性
指標可以指向任意的物件,所以需要在使用它之前檢測它的合法性
5、應用的區別
如果是指一旦指向乙個物件後就不會改變的指向,那麼應該使用引用
如果存在指向null或在不同的時刻指向不同的物件這些可能性,應該使用指標。
五、指標的加減操作
我們先看下面一段**
#include int main()
; //第一行
int *ptr = (int *)(&a + 1); //第二行
printf("%d\n", *(a + 1)); //第三行
printf("%d\n", *(ptr - 1)); //第四行
return 0;
}
這段**執行的時候會輸出什麼樣的結果呢,我們來分析一下。
第一行宣告了乙個含有五個int型別的陣列,並給這個陣列初始化了。
第二行宣告了乙個int型別的指標,並把a的位址加一賦給了ptr;注意這裡的加一加的是整個a陣列的大小,因為a是含有五個int型別的陣列,所以這裡就是加上了20個位元組;所以ptr指向了a[5];
第三行就是列印了,這裡的a+1和之前&a+1不同,因為這裡的a是陣列的首位址也就是a[0]的位址,加上一就是a[0]的下乙個元素,但是&a是整個陣列的首位址,加上一就是加了整個陣列的大小。所以這裡會輸入2.
第四行,因為ptr指向的是a[5], 所以ptr-1就會指向a[4],然後再用*解引用,就會得到a[4]的值了。
【注意】:注意a + 1和 &a + 1 的區別。
六、指標常量和常量指標的區別
指標常量就是指標的常量,它的位址不能被改變,但是可以修改其指向的內容。
例:
int * const p;
常量指標是指向常量的指標,它所指向的位址的內容是不可修改的。
例:
int const * p;
const int * p;
七、指標陣列和陣列指標的區別
指標陣列表示乙個陣列,這個陣列的每個元素都是乙個指標。
例:
int *p[5]; //p是乙個含有五個int * 元素的陣列
陣列指標表示乙個指標,這個指標指向乙個陣列。
例:
int (*p)[5]; //p是乙個指向含有五個int型別的陣列的指標。
C (二)引用和指標
引用不是定義乙個新的變數,而是給乙個已經定義的變數重新起乙個別名。定義的格式是 型別 引用變數名 已定義過得變數名 引用的特點 1 乙個變數可以取多個別名 2 引用必須初始化 3 引用只能在初始化的時候引用一次,不能改變為再引用其他的變數。include using namespace std vo...
C 複習(1) 引用和指標的區別
引用在定義時必須初始化,而指標沒有要求。引用在初始化時引用乙個實體後,就不能再引用其他實體,而指標可以在任何時候指向任何乙個同型別實 體。沒有null引用,但有null指標。在sizeof中含義不同 引用結果為引用型別的大小,但指標始終是位址空間所佔位元組個數 32位平台下佔4 個位元組 引用自加即...
C 集錦二 引用和指標
1.什麼是 引用 宣告和使用 引用 需要注意哪些問題?引用就是某個目標變數的 別名 對引用的操作與對變數的操作效果完全相同。宣告乙個引用需要對其進行初始化,這不是新定義了乙個變數,它只是表示該引用名是目標變數名的乙個別名,它本身不是一種資料型別,因此引用不佔儲存單元。2.使用 引用 作為函式引數有哪...