首页 > 代码库 > C++语言基础(8)-引用

C++语言基础(8)-引用

 

类似于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() 所产生的局部数据。

 

C++语言基础(8)-引用