C 中的引用(重要知識點)

2021-09-27 01:27:42 字數 2600 閱讀 4563

引用即別名

對變數取另外的名稱,相當於是取了乙個錯號。引用變數與其所引用的變數的位址其實是同乙個;

c++用引用來取代指標

宣告引用變數:

資料型別& 變數名 = 變數;

資料型別 和 變數 的型別必須完全一致;

1.引用必須初始化 引用一經定義必須初始化

int& z; //錯誤的

#include using namespace std;

int func(int& b)

void exchange(int& a,int& b)

int main()

2.引用一經初始化 (引用不能再引用其它變數) 不能改變引用物件

#include using namespace std;

int main()

3.引用不能為空 沒有空引用 但指標可以指向null

#include using namespace std;

int main()

4.常引用

const int& r = 100; //常量引用 常引用 即引用常量的引用

不能通過該引用變數修改所引用物件的值

例1:

#include using namespace std;

int main()

例2:

#include using namespace std;

void fun(const int& r)

int main()

例3:

#include using namespace std;

int main()

5.引用的作用:

(1)作為函式的引數

在函式中可以修改實參的值

如果在函式的引數中用const來修飾引用引數,防止在函式中修改該引用變數所引用物件的值

(2)作為函式的返回值

如果函式返回引用,則該函式的返回值可以作為左值

注意:不要返回區域性變數的引用

能夠返回全域性變數、靜態變數、動態記憶體、引用形參的 引用

(3)提高引數傳遞的效率

普通的傳遞 值 複製傳遞

const int& fun(const int& r)

#include using namespace std;

int& max(int& m,int& n)

int main()

6.引用的本質其實就是指標,引用的底層實現是指標

1.指標是實體變數 引用不是實體變數

任何一種型別 定義乙個變數 sizeof(變數) 不會變

#include using namespace std;

void fun(int& a)

int main()

2.指標可以不初始化 引用必須初始化

3.指標可以改變指向 引用不能改變"引向" 一經引用乙個物件之後 不能再引用其它物件

4.指標可以指向為空(null) 引用不能引用為空

函式形參為引用時 是在呼叫時 初始化 而並不是引用為空

5.可以宣告指標的引用 但不能宣告引用的指標

int a = 10;

int *pa = &a;

int* &rp = pa; //rp 引用 pa

int& rx = a;

int& *px = ℞ //錯誤的 沒有 int& 型別的指標

int *px = ℞ //正確的 引用變數的位址型別 即為 引用變數所引用物件的型別

**:

#include using namespace std;

int main()

6.可以宣告指標的指標 但不能宣告引用的引用

int a = 10;

int *pa = &a;

int **ppa = &pa;

int& ra = a;

int&& rra = ra;//錯誤的

int& rra = ra;

7.可以宣告陣列的引用 但不能宣告引用的陣列

int arr[5] = ;

int (&rarr)[5] = arr; //rarr是乙個引用變數 引用乙個陣列

int a,b,c,d,e;

int& arr[5] = ;//引用型別的陣列不行

**:

#include using namespace std;

int main();

int (&rb)[5] = arr;

rb[0] = 100;

rb[3] = 455;

for(int i=0;i<5;i++)

cout << endl;

int a=1,b=2,c=3,d=4,e=5;

//int& brr[5] = ;//不能宣告引用的陣列

return 0;

}

C 重要知識點

參考從4行 看右值引用 什麼叫左值,什麼叫右值?可以對表示式取位址的是左值,不能對表示式取位址的是右值。例如 int a 1 這裡a是變數,在棧中為其分配了具體的位址,是左值。1是右值。例如 int a std max 1,3 max方法的返回值是右值,在賦值給a後會被銷毀,因此是右值。什麼是右值引...

C語言的重要知識點

一 陣列與指標 1 陣列名就是陣列的首位址,一維陣列中 nums nums 0 二維陣列中 nums nums 0 0 2 一維陣列中 nums i nums i 二維陣列中可以模擬,即把 nums i j 中的nums i 看作陣列名,所以二維陣列中的 nums i j nums i j 並最終表...

C 學習 二 函式中的重要知識點

有人說 函式呼叫是不是使得c 的程式複雜了,而且沒有什麼實際的用處呢?恰恰相反,函式的使用讓程式的可讀性 可維護性更強。同時函式可以被反覆呼叫,也提高了模組的可復用性。例1 計算計算1 1 2 1 2 3 1 10 11 不使用函式 includeusing namespace std 計算1 1 ...