在 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 &r = a; cout << a << ", " << r << endl; cout << &a << ", " << &r << endl; return 0; }运行结果:
0x28ff44
;或者说地址为0x28ff44
的内存有两个名字,a 和 r,想要访问该内存上的数据时,使用哪个名字都行。&
,在使用时不能添加&
,使用时添加&
表示取地址。如上面代码所示,第 6 行中的&
表示引用,第 8 行中的&
表示取地址。除了这两种用法,&
还可以表示位运算中的与运算。#include <iostream> using namespace std; int main() { int a = 99; int &r = a; r = 47; cout << a << ", " << r << 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 &r1, int &r2); 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 &r1, int &r2) { int temp = r1; r1 = r2; r2 = temp; }运行结果:
#include <iostream> using namespace std; int &plus10(int &r) { r += 10; return r; } int main() { int num1 = 10; int num2 = plus10(num1); cout << num1 << " " << num2 << endl; return 0; }运行结果:
#include <iostream> using namespace std; int &plus10(int &r) { int m = r + 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
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有