目录
引用
作用:给变量起别名
引用基本语法:
数据类型 &别名 = 原名
例如:
int a = 10;
int &b = a;
现在b的地址就是a的地址,改变b地址中的内容相当于改变a地址中的内容
例如:
b = 100;
则现在a和b都等于100
引用注意事项
1)引用必须初始化
int& b; //这样写是错误的,引用必须一开始就初始化,明确引用的是哪一个
2)引用在初始化后。不可以改变
int& b = a; //引用一旦初始化后,就不可以更改了
10. 引用做函数参数
作用:函数传参时,可以利用引用的技术让形参修饰实参
优点:可以简化指针修改实参
例:
void mySwap(int& a, int& b)
{
int temp;
temp = a;
a = b;
b = temp;
}
引用做函数的返回值
1)不要返回局部变量的引用
int& test()
{
int a = 10;
return a;
}
int main()
{
int& a = test();
cout << a << endl;
cout << a << endl;
cout << a << endl;
//这样第一次输出a的值为10(编译器的功劳,不然第一次也出不来10),其他的都为一堆乱七八糟的数
}
2)如果函数的返回值是引用,这个函数调用可以作为左值
//可以返回静态变量引用
int& test02()
{
static int a = 10; //静态变量,存放在全局区,全局区上的数据在程序结束后系统释放
return a;
}
int main()
{
int& a1 = test02(); //其实这里a1是test02()函数中返回值静态变量a的别名
cout << a1 << endl;
cout << a1 << endl;
cout << a1 << endl;
//如果函数的返回值是引用,这个函数调用可以作为左值
test02() = 1000; //相当于对test02()函数中的a进行操作
cout << a1 << endl;
cout << a1 << endl;
system("pause");
return 0;
}
引用的本质
本质:在c++内部实现是是一个指针常量(int* const ref = &a)
起始从引用的性质就可以看出
例如:引用必须初始化,而且初始化之后就不可以再改变了
int& ref = a;//当出现这行代码,编译器会自动转换为 int* const ref = &a;指针常量是指针指向不可更改,也说明了为什么引用一旦初始化就不可更改
ref = 20;//内部发现ref是引用,自动帮我们转换为:*ref = 20;
常量引用
作用:常量引用主要用来修饰形参,防止误操作
在函数形参列表中,可以加const修饰形参,防止形参改变实参
例:
//引用使用的场景,通常用来修饰形参
void test(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;
test(a);
system("pause");
return 0;
}