1.定义
在c语言中,使用指针pointer可以间接获取,修改某个变量的值
在c++中,引用可以起到和指针相同的作用
int age = 20;
int &ref = age;//ref相当于age的别名
ref = 30; //此时age == 30
2.注:
a.引用相当于变量的别名
(基本数据类型,枚举,结构体,类,指针,数组等都可以引用)
b.对引用做计算,就是对引用所指向的变量做计算
c.引用在定义的时候就需要做初始化,一旦指向了某个变量,就不可以在更改(就不能在成为别的变量的引用),从一而终
d.可以利用引用初始化另一个引用,相当于某个变量的多个别名
e.不存在引用的引用,引用的指针,引用数组
int age = 10;
int &ref = age;
int &&ref2 = ref;//err 引用的引用
int & *p = &ref;//err 引用的指针
int &arr[4]; //err 引用数组
//数组的引用
方法1:
int arr[] = {1 ,2 ,3}; //ok 数组的引用
int (&ref) [3] = arr; //ok
ref[0] = 10; //ok
方法2:(建议使用)
int * const &ref = arr; //ok, arr代表数组的地址,并且是个常量
3.引用的价值
a. 比指针安全(空指针)
b。返回值可以被赋值
4. 引用的本质
引用的本质就是指针, 只是编译器消弱了他的功能,所以引用就是弱化了的指针
一个引用占用一个指针的大小
5.常引用
int age = 10;
const int &ref = age;//常引用
int const &ref = age;//同上。 常引用
const int *p = &age;//常指针
ref = 30;//err *p = 30; //err
//ref不能修改指向,但可以通过ref来修改所指向的变量
int & const ref = age; //类似int * const p = &age;
ref = 30; //ok
如果函数的形参是常引用,实参既可以是常数也可以是变量,否则只能是变量
int age = 10;
const double & ref = age;
age= 30;
cout << age << endl; //30
cout << ref << endl; //10
相当于: