C++中的引用
引用變量是一個別名,也就是說,它是某個已存在變量的另一個名字。一旦把引用初始化為某個變量,就可以使用該引用名稱或變量名稱來指向變量。
引用引入了對象的一個同義詞。定義引用的表示方法與定義指針相似,只是用&代替了*。引用(reference)是c++對c語言的重要擴充。引用就是某
一變量(目標)的一個別名,對引用的操作與對變量直接操作完全一樣。其格式為:類型 &引用變量名 = 已定義過的變量名。
引用的特點:
①一個變量可取多個別名。
②引用必須初始化,只有別名是不能成立的。
③引用只能在初始化的時候引用一次 ,不能更改為轉而引用其他變量。
C++ 引用 vs 指針
引用很容易與指針混淆,它們之間有三個主要的不同:
- 不存在空引用。引用必須連接到一塊合法的內存。
- 一旦引用被初始化為一個對象,就不能被指向到另一個對象。指針可以在任何時候指向到另一個對象。
- 引用必須在創建時被初始化。指針可以在任何時間被初始化
1、基礎數據類型引用:
#include <iostream> #include <stdio.h> using namespace std; int main(void) { int a=10; int &b=a; // 給a起一個別名b b=20; // 對b操作和對a操作效果是一樣的 cout << a <<endl; a=30; cout << b << endl; system("pause"); return 0; }
運行結果:20 30
2、結構體類型的引用
#include <iostream> #include <stdio.h> using namespace std; typedef struct // 定義一個結構體 { int x; int y; }Coord; // 結構體的名字 int main(void) { Coord c; Coord &c1 = c; // 給c起一個別名c1 c1.x = 10; // 對c1操作相當於對c操作 c1.y = 20; cout << c.x << "," << c.y << endl; system("pause"); return 0; }
運行結果:
3、指針類型的引用:
格式:類型 *&指針引用名 = 指針簡而言之:給地址起一個別名
#include <iostream> #include <stdio.h> using namespace std; int main(void) { int a = 3; int *p = &a; int *&q = p; cout << p << endl; // P = 0093FC60 cout << &q << endl; // &q = 0093FC54 cout << *&q << endl;//*&q = 0093FC60 *q = 5; cout << a << endl; system("pause"); return 0; }
運行結果:
4、函數參數引用:
以前我們在C語言中交換a,b的位置時:
void fun(int *a,int *b) { int c; c = *a; *a = *b; *b = c; }
調用的時候我們需要吧參數的地址傳進去:
int x =10,y = 20; fun(&x,&y);
而當我們引入了引用,事情就方便多了
void fun(int &a,int &b) // 形參就是引用別名 { int c = 0; c = a; a = b; // a和b都是以別名形式進行交換 b = c; }
調用傳參
int x =10,y = 20; fun(x,y);
代碼示例:
#include <iostream> #include <stdio.h> using namespace std; void fun(int &a,int &b) int main(void) { int x =10; int y =20; cout << x << "," << y << endl; fun(x,y); cout << x << "," << y << endl; system("pause"); return 0; } void fun(int &a,int &b) { int c = 0; c = a; a = b; b = c; }
輸出結果: