引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。(必须初始化),不占空间,不开辟空间,引用和被引用变量拥有相同的地址
引用一旦初始化,就不能修改指向
举例:
int i = 17;
int& r = i; 定义并初始化引用变量( r 完全等价于 i )
对数组的引用
示例:
int a[5] = {10, 15, 30, 12, 80};
用 typedef 定义数组类型
typedef 类型 变量名[size];
示例: typedef int arr[5] ;
使用:变量名 数组名={};等价于 基本类型(&引用变量名)[大小]
示例: arr& c = a; int (&d)[5] = a;
定义数组引用 变量名&引用变量名=数组;
函数中的引用
引用作为函数参数
示例:
void exchange(int& a, int& b)
{
int c = a;
a = b;
b = c;
}
引用作为函数返回值(返回的是返回值的别名);不要返回局部变量的引用,会非法访问内存,除非保证不被释放( static )
如果函数返回值为左值,则其返回的值是引用
示例:
int& exchange(void)
{
static int e = 20;
return e;
}
exchange() = 50;
e的值变为50
引用的本质是常量指针
指针的引用
类型* &指针变量名
示例:
char* &p; 指针的引用,等同于二级指针
常量引用(既降低内存开销,又安全)
示例:
const int & a;
加 const修饰引用,无法通过引用更改值