引用
- 引用的基本使用
作用:给变量起别名
语法:数据类型 &别名=原名
示例
int main()
{
int a = 10;
int& b = a;
cout << "a= " << a << endl;
cout << "b= " << b << endl;
b = 100;
cout << "a= " << a << endl;
cout << "b= " << b << endl;
return 0;
}
2.引用的注意事项
引用必须初始化
应用在初始化之后,不可以改变
示例
int main()
{
int a = 10;
int b = 20;
//int &c; //错误,引用必须初始化
int& c = a; //一旦初始化后,就不可以更改
c = b; //这是赋值操作,不是更改应用
cout << "a= " << a << endl;
cout << "b= " << b << endl;
cout << "c= " << a << endl;
return 0;
}
int a=10;
int &b=a;
(1)引用必须要初始化
int &b; //错误
(2)引用一旦初始化后,就不可以更改了
int &b=c; //错误
3.引用做函数参数
作用:函数传参时,可以用引用的技术让形参修饰实参
优点:可以简化指针修改实参
先介绍一下函数传参的方式
(1)值传递
void swap01(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
int main()
{
int a = 10;
int b = 20;
swap01(a, b);
cout << "a= " << a << endl;
cout << "b= " << b << endl;
return 0;
}
使用值传递时,形参的改变不会影响到实参的改变,因此经过swap函数后,a和
b的值仍然不变
(2)地址传递
void swap02(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int a = 10;
int b = 20;
swap02(&a, &b);
cout << "a= " << a << endl;
cout << "b= " << b << endl;
return 0;
}
地址传递参数时,形参会通过实参的地址来修饰实参,因此在上面的代码中,a和b的值会发生改变
(3)引用传递
void swap03(int& a, int& b)
{
int temp = a;
a = b;
b = temp;
}
int main()
{
int a = 10;
int b = 20;
swap03(a, b);
cout << "a= " << a << endl;
cout << "b= " << b << endl;
return 0;
}
引用传递,形参会修饰实参
总结:通过引用参数产生的效果同地址传参是一样的。引用的语法更清楚简单
4.引用做函数返回值
注意:不要返回局部变量的引用
错误示例
int& test01()
{
int a = 10; //局部变量存放在四区中的栈区
return a;
}
int main()
{
int& re = test01();
cout << "re= " << re << endl;
cout << "re= " << re << endl;
return 0;
}
返回局部变量的引用时,得到的结果可能是错误的
引用可以返回全局区的变量
如:
int& test02()
{
static int a = 10; //静态变量,存放在全局区,全局区上的数据在程序结束后系统释放
return a;
}
int main()
{
int& re = test02();
cout << "re= " << re << endl;
cout << "re= " << re << endl;
cout << "re= " << re << endl;
return 0;
}
函数的调用可以作为左值
int& test02()
{
static int a = 10; //静态变量,存放在全局区,全局区上的数据在程序结束后系统释放
return a;
}
int main()
{
int& re = test02();
cout << "re= " << re << endl;
cout << "re= " << re << endl;
test02() = 1000; //如果函数的返回值是引用,这个函数调用可以作为左值
cout << "re= " << re << endl;
cout << "re= " << re << endl;
return 0;
}
如果函数的返回值是引用,这个函数调用可以作为左值
5.引用的本质
本质:引用的本质在c++内部实现是一个指针常量