首页 > 代码库 > 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)-引用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。