码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-06-23 12:52:08      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:返回   blog   integer   使用   结束   一个   覆盖   参数   end   

 

类似于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)-引用

标签:返回   blog   integer   使用   结束   一个   覆盖   参数   end   

原文地址:http://www.cnblogs.com/yongdaimi/p/7069081.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!