一、定义
本质上:它是某个已存在变量的另一个名字。
引用 VS 指针
1、不会存在空引用
2、引用只能指向一个对象
3、引用必须在创建的时候被初始化
#include <iostream>
using namespace std;
int main()
{
int i = 1;
int& r = i; // 读作:r是一个初始化为i的整型引用
cout << "i is " << i << endl;
cout << "value of r reference: " << r << endl;
return 0;
}
二、引用与函数
1、引用来调用函数
实现效果:
定义一个函数,实现数值交换功能,区别于之前指针实现的版本,这里要求用引用的功能实现。
代码思路:
外部的swap函数,形参是对引用的声明,实现以下效果:
int& x = a;
即在调用函数过程中执行对引用变量的初始化,把原来变量位置的值赋给新的名字(即引用),引用也就指向了对应变量值所在的位置,像指针一样,实现了值传递。
经过了接下来的传值后,原变量的值得到交换。
#include <iostream>
using namespace std;
void swap(int& x, int& y);
int main()
{
int a = 1, b = 4;
cout << "before swap " << a << " and : " << b << endl;
swap(a, b);
cout << "after " << a << " and : " << b << endl;
return 0;
}
// 1、用引用来调用函数
void swap(int& x, int& y)
{
int temp;
temp = x;
x = y;
y = temp;
return;
}
2、引用作为返回值
实现效果:
定义一个数组、一个函数,函数的目的是利用引用实现改变数组内的一个值。
代码思路:
把函数定义为引用,目的是:当函数返回一个引用时,则返回一个指向返回值的隐式指针。这样,函数就可以放在赋值语句的左边。把内部变量ref定义为引用,是为了取任意一个变量作为修改数组值的索引。
#include <iostream>
using namespace std;
// 2、把引用作为返回值
double myvals[] = {1,2,4};
double& setValues(int i)
{
double& ref = myvals[i];
return ref; // 返回第i个元素的引用
}
int main()
{
cout << "before the data change:" << endl;
cout << myvals[2] << endl;
setValues(2) = 22;
cout << "after it:" << endl;
cout << myvals[2] << endl;
return 0;
}