在 C/C++ 中,我們將 char、int、float 等由語言本身支持的類型稱為基本類型,將數組、結構體、類(對象)等由基本類型組合而成的類型稱為聚合類型(在講解結構體時也曾使用復雜類型、構造類型這兩種說法)。引用(Reference)是 C++ 相對於C語言的又一個擴充。引用可以看做是數據的一個別名,通過這個別名和原來的名字都能夠找到這份數據。引用類似於 Windows 中的快捷方式,一個可執行程序可以有多個快捷方式,通過這些快捷方式和可執行程序本身都能夠運行程序;引用還類似於人的綽號(筆名),使用綽號(筆名)和本名都能表示一個人。
&
取代了*
,語法格式為:
type &name = data;
type 是被引用的數據的類型,name 是引用的名稱,data 是被引用的數據。引用必須在定義的同時初始化,並且以後也要從一而終,不能再引用其它數據,這有點類似於常量(const 變量)。#include <iostream> using namespace std; int main(){ int a = 99; int &b = a; cout<<a<<", "<<b<<endl; cout<<&a<<", "<<&b<<endl; return 0; }運行結果:
0x28ff44
;或者說地址為0x28ff44
的內存有兩個名字,a 和 b,想要訪問該內存上的數據時,使用哪個名字都行。&
,在使用時不能添加&
,使用時添加&
表示取地址。如上面代碼所示,第 6 行中的&
表示引用,第 8 行中的&
表示取地址。除了這兩種用法,&
還可以表示位運算中的與運算。#include <iostream> using namespace std; int main(){ int a = 99; int &b = a; b = 47; cout<<a<<", "<<b<<endl; return 0; }運行結果:
const type &name = value;
也可以是:type const &name = value;
這種引用方式為常引用#include <iostream> using namespace std; void swap1(int a, int b); void swap2(int *p1, int *p2); void swap3(int &a, int &b); int main(){ int num1, num2; cout<<"Input two integers: "; cin>>num1>>num2; swap1(num1, num2); cout<<num1<<" "<<num2<<endl; cout<<"Input two integers: "; cin>>num1>>num2; swap2(&num1, &num2); cout<<num1<<" "<<num2<<endl; cout<<"Input two integers: "; cin>>num1>>num2; swap3(num1, num2); cout<<num1<<" "<<num2<<endl; return 0; } //直接傳遞參數內容 void swap1(int a, int b){ int temp = a; a = b; b = temp; } //傳遞指針 void swap2(int *p1, int *p2){ int temp = *p1; *p1 = *p2; *p2 = temp; } //按引用傳參 void swap3(int &a, int &b){ int temp = a; a = b; b = temp; }運行結果:
#include <iostream> using namespace std; int &plus10(int &n){ n = n + 10; return n; } int main(){ int num1 = 10; int num2 = plus10(num1); cout<<num1<<" "<<num2<<endl; return 0; }運行結果:
#include <iostream> using namespace std; int &plus10(int &n){ int m = n + 10; return m; //返回局部數據的引用 } int main(){ int num1 = 10; int num2 = plus10(num1); cout<<num2<<endl; int &num3 = plus10(num1); int &num4 = plus10(num3); cout<<num3<<" "<<num4<<endl; return 0; }在 Visual Studio 下的運行結果:
20
-858993450 -858993450
20
30 30
20
30 0
20
20 30