类似于Java,C++中也有引用类型,具体用法如下:
一.引用的基本用法
#include <iostream> using namespace std; int main(){ int a = 99; int &b = a; cout<<a<<", "<<b<<endl; cout<<&a<<", "<<&b<<endl; return 0; }
运行结果:
99, 99
0x28ff44, 0x28ff44
如果不希望通过引用修改原始数据的值,可以在定义时添加const限制:
const int &b = a; // 或 int const &b = a;
注意:引用在定义时需要添加&
,在使用时不能添加&
,使用时添加&
表示取地址
二.引用作为函数参数
#include <iostream> using namespace std; void swap3(int &a, int &b); int main(){ int num1, num2; cout<<"Input two integers: "; cin>>num1>>num2; swap3(num1, num2); cout<<num1<<" "<<num2<<endl; return 0; } void swap3(int &a, int &b){ int temp = a; a = b; b = temp; }
运行结果:
Input two integers: 12 34
12 34
Input two integers: 88 99
99 88
Input two integers: 100 200
200 100
三.引用作为函数返回值
引用除了可以作为函数形参,还可以作为函数返回值,请看下面的例子:
#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; }
运行结果:
20 20
注意:在将引用作为函数返回值时应该注意一个小问题,就是不能返回局部数据(例如局部变量、局部对象、局部数组等)的引用,因为当函数调用完成后局部数据就会被销毁,有可能在下次使用时数据就不存在了,C++ 编译器检测到该行为时也会给出警告。
因此像下面的写法是不正确的:
#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; }
不能将局部变量m返回!因为函数是在栈上运行的,并且运行结束后会放弃对所有局部数据的管理权,后面的函数调用会覆盖前面函数的局部数据。本例中,第二次调用 plus10() 会覆盖第一次调用 plus10() 所产生的局部数据,第三次调用 plus10() 会覆盖第二次调用 plus10() 所产生的局部数据。
时间: 2024-11-06 03:34:26