无论错过了多少年,无论时光奔流向何方,
唯有不相忘,可抵岁月长。
引用是为变量的起别名。
引用的本质是c++内部实现的一个指针常量。
语法: 数据类型 &别名=原名
注意:
1.引用必须初始化。创建时必须指明引用的变量名称。
2.引用一旦初始化,就不可以更改。只能作为初始化时变量的别名,不允许更改。
引用做函数参数和返回值
函数引用做参数比指针做参数更加清楚,本质上也是地址传递。
引用做函数返回值是注意:
1.不要返回局部变量的的引用。
2.函数的调用可以作为左值。返回的是引用,引用是可修改的左值。
#include <iostream>
using namespace std;
void swap1(int a1,int a2)//值传递,形参不修饰实参
{
int temp = a1;
a1 = a2;
a2 = temp;
}
void swap2(int *p1,int *p2)//地址传递,形参修饰实参
{
int temp = *p1;
* p1 = * p2;//*p是一个左值表达式,左值和右值的概念
* p2 = temp;
}
void swap3(int& m1, int& m2)//地址传递,形参修饰实参
{
int temp = m1;
m1 = m2;
m2 = temp;
}
int& test()
{
static int e = 100;//static修饰的局部变量的作用域并不会改变,只是生命周期会随着整个程序运行结束而结束。存放在全局区
return e;
}
int test2(const int& c)//常量引用,确保传入的参数在函数运行中不因误操作修改
{
cout << c << endl;
return 0;
}
int main()
{
int a = 10;
int b = 20;
int d = 80;
swap1(a, b);
cout << "a=" << a << endl;
cout << "b=" << b << endl;
swap2(&a, &b);
cout << "a=" << a << endl;
cout << "b=" << b << endl;
swap3(a,b);
cout << "a=" << a << endl;
cout << "b=" << b << endl;
int &ref2 = test();//通过引用操作返回的内存,如果是局部变量,函数结束时会被销毁,因而局部变量的引用不能做函数返回值
cout << "ref2=" << ref2 << endl;
cout << "ref2=" << ref2 << endl;
test() = 110;//引用做函数返回值,可以做左值。本质上是静态变量e=110
cout << "ref2="<<ref2 << endl;
cout << "ref2="<<ref2 << endl;
test2(d);
system("pause");
return 0;
}