前言:本部分内容主要是C++语言中关于引用的相关介绍与使用,属于拓展类知识,对于想要对C++语言进行进一步学习的,以及要学会优化程序的,建议掌握。
目录
1、引用
1.1、引用的基本使用
作用:给变量起别名
语法:
数据类型 &别名 = 原名;
1.2、引用的注意事项
1、引用必须初始化
int &b;//错误的
2、引用在初始化后不可以改变
int a = 10;
int &b = a;
int c = 20;
b = c;//这是赋值操作,而不是更改别名
1.3、引用作函数参数
作用:函数传参时,可以利用引用的技术让形参修饰实参
优点:可以简化指针修改实参
//交换函数
//1、值传递
void mySwap01(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
//2、地址传递
void mySwap02(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
cout << "在mySwap02函数中的 a = " << *a << endl;
cout << "在mySwap02函数中的 b = " << *b << endl;
}
//3、引用传递
void mySwap03(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
int main()
{
int a = 10;
int b = 20;
mySwap01(a,b);// 值传递 形参不会修饰实参
mySwap02(&a, &b);// 地址传递 形参会修饰实参
mySwap03(a, b);// 引用传递 形参会修饰实参(别名可以于原名一样)
}
小结:通过引用参数产生的效果与地址传递是一样的。引用的语法更清楚简单
1.4、引用做返回值
作用:引用是可以作为函数的返回值存在的
注意:不要返回局部变量引用
用法:函数的调用可以作为左值
int& test01()
{
int a = 10;
return a;
}
int& test02()
{
static int a = 10; //静态变量,存放在全局区中,全局区上的数据在程序运行结束后系统释放
return a; /返回了a的引用,相当于返回了a变量
}
int main()
{
int &ref = test01();
cout << "ref = " << ref << endl; //第一次结果正确,是因为编译器做了保留
cout << "ref = " << ref << endl; //第二次结果错误,因为a的内存已经释放
int &ref2 = test02(); //相当于给变量a起了别名ref2
cout << "ref2 = " << ref << endl;
cout << "ref2 = " << ref << endl;
//相当于将1000赋值给变量a;如果函数的返回值是引用,这个函数调用可以作为左值
test02() = 1000;
//若函数作为左值,那么必须返回引用
cout << "ref2 = " << ref << endl;
cout << "ref2 = " << ref << endl;
}
1.5、引用的本质
本质:引用的本质是在C++内部实现一个指针常量(指针的指向是不能修改的,但指针的值是可以改动的)
//发现是引用,转换为 int* const ref = &a;
void func(int& ref)
{
ref = 100;
}
int main()
{
int a = 10;
//自动转换为 int* const ref = &a; 指针常量是指针指向不可更改,也说明为什么引用不可以更改
int& ref = a;
ref = 20;//内部发现ref是引用,会自动帮我们转换为 *ref = 20
cout << "a: " << a <<endl;
cout << "ref: " << ref << endl;
func(a);
return 0;
}
1.6、常量引用
作用:常量引用主要是用来修饰形参,防止误操作
TIPS: 在函数形参中,可以加 const 修饰形参,防止形参改变实参
//1、
//该操作是错误的,引用必须引一块合法的内存空间
//int &ref = 10;
//该操作就是正确的;加上 const 之后,编译器将代码修改成:int temp = 10;
const int &ref = 10;
const int &ref = temp;
//2、
//加上 const 之后,就不能再在函数中对形参进行改动
void showValue(const int &val)
{
cout << "val = " << val << endl;
}
int main()
{
int a = 10;
showValue(a);
}
尾声:以上是我学习是做的笔记,可供大家参考学习,若有不准确的地方,欢迎指出!