1、引用的基础
※引用,简单来说就是给已经定的变量起别名。
#include<iostream>
using namespace std;
// 数据类型 &别名 = 变量名;
int main() {
int a = 1;
int &b = a;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
b = 10;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
system("pause");
return 0;
}
2、引用的注意事项
※引用必须初始化,不可以创建一个空别名。
※引用在初始化后,不可以改变
#include<iostream>
using namespace std;
int main() {
int a = 10;
int b = 20;
//int &c; //错误,引用必须初始化
int &c = a;
//int &c = b; //错误,一旦初始化后,就不可以更改
c = b; //这是赋值操作,不是更改引用
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
system("pause");
return 0;
}
3、引用做函数参数
※使用引用做函数参数,可以达到和用指针做函数参数的效果,即利用引用做函数参数可使形参修饰实参。
#include <iostream>
using namespace std;
//值传递
void ValuePass(int a, int b) {
a = 2;
b = 3;
}
//地址传递
void AddressPass(int *a, int *b) {
*a = 2;
*b = 3;
}
//引用做函数参数
void Adduce(int &a, int &b) {
a = 1;//别名可以和原名相同
b = 1;
}
int main() {
int a = 10;
int b = 10;
ValuePass(a, b);
cout << "使用值传递之后的a=" << a << endl;
cout << "使用值传递之后的b=" << b << endl;
AddressPass(&a, &b);
cout << "使用地址传递之后的a=" << a << endl;
cout << "使用地址传递之后的b=" << b << endl;
Adduce(a, b);
cout << "使用引用做函数参数之后的a=" << a << endl;
cout << "使用引用做函数参数之后的b=" << b << endl;
system("pause");
return 0;
}
4、引用做函数的返回值
#include <iostream>
using namespace std;
//返回局部变量引用
int& test01() {
int a = 10; //局部变量
return a;
}
//返回静态变量引用
int& test02() {
static int a = 20; //静态变量
return a;
}
int main() {
//不能返回局部变量的引用
int& ref = test01();
cout << "ref = " << ref << endl;//第一次结果正确,是因为编译器做了保留
cout << "ref = " << ref << endl;//第二次结果错误,是因为a的内存已经释放
//如果函数做左值,那么必须返回引用
int& ref2 = test02();
cout << "ref2 = " << ref2 << endl;
cout << "ref2 = " << ref2 << endl;
test02() = 1000;//如果函数的返回值是引用,这个函数调用则可以作为左值
cout << "ref2 = " << ref2 << endl;
cout << "ref2 = " << ref2 << endl;
system("pause");
return 0;
}
5、常量引用
※常量引用主要用来修饰形参,防止误操作
※在函数形参列表中,可以加==const修饰形参==,防止形参改变实参
//引用使用的场景,通常用来修饰形参
void showValue(const int& v) {
//v += 10;//数据不可修改
cout << v << endl;
}
int main() {
//int& ref = 10; //引用本身需要一个合法的内存空间,因此这行错误
//加入const就可以了,编译器优化代码,int temp = 10; const int& ref = temp;
const int& ref = 10;
//ref = 100; //加入const后不可以修改变量
cout << ref << endl;
//函数中利用常量引用防止误操作修改实参
int a = 10;
showValue(a);
system("pause");
return 0;
}