C++中的引用是为对象起了另一个名字,类型& 引用的变量名=被引用的变量名
引用的特点:
引用必须初始化;
一个变量可以有多个引用;
引用的应用:
基础应用
void test_base_1()
{
int x = 10;
x--;
cout << x << endl; //x=9
//int& m; //没有初始化
int& y = x;
y--;
cout << x << endl; //输出8,即对引用操作就是对变量操作
int& z = x; //可以有多个引用
z--;
cout << x << endl;
}
常引用
常引用可以绑定到非常量引用,非常量引用不可以绑定到常量引用。
简而言之,就是限制小的兼容性好,
}
void test8()
{
//=========================================
const int a = 3;
const int& b = a; //正确,引用及其对应的对象都是常量
b = 5; //错误,b是对常量的引用
int& c = a; //错误,试图让一个非常量引用指向一个常量引用
//=========================================
int i = 20;
const int& m = i; //允许将const int&绑定到一个普通int对象上
const int& n = 23; //正确,n是一个常量引用
int& p = m; //错误,p是一个普通的非常量引用
}
引用作为参数
例如在做两个数交换得过程中,直接传参不能真正地交换两个数,所以我们在学C语言时提到了传指针来解决,但是显然这种方式相对来说太过于繁琐,引用的方式简单很多。
//swap
test_swap(a,b);
void test_swap(int a, int b)
{
int t = a;
a = b;
b = t;
}
//引用作为参数
test3_swap(a,b);
void test3_swap(int& a, int& b)
{
int t = a;
a = b;
b = t;
}
//指针实现
test3_swap_1(&a,&b);
void test3_swap_1(int* a, int* b)
{
int t = *a;
*a = *b;
*b = t;
}
引用的本质知识给变量起了个名字,对引用取地址取到的还是变量的地址。
void test4()
{
int a = 1;
int& b = a;
cout << "变量的地址:" << &a << endl;
cout << "引用的地址:" << &b << endl;
}
运行结果:
引用作为返回值
//引用作为函数的返回值时,必须在定义函数时在函数名前将&
//用引用作函数的返回值,的最大的好处是在内存中不产生返回值的副本
int& test5(int temp)
{
int t = temp * temp;
return t;
}
引用不是一种数据类型,不能建立指向引用类型的指针
建立指针变量的引用
不能建立引用的数组
引用的注意事项:
&不是取地址,而是标识这是一个引用
声明引用时必须同时初始化
引用一旦初始化指向一个对象,就不能指向另一个对象了
引用不是一种数据类型,不能建立指向引用类型的指针
可以建立指针变量的引用
不能建立引用的数组
引用与指针的区别
引用使用比指针便捷,可读性强
引用不占用内存,指针占内存
引用只有一级,指针可以有多级
指针和引用的自增和自减意义不同,指针的++表示下一份数据,引用的++指引用所指的变量+1.