1.1 引用的基本使用
作用:给变量起别名
语法:数据类型 &别名=原名
注意事项:1、引用必须初始化 2、引用初始化后不可以改变
int main()
{
int a=10;
int &b=a;
//int &b;错误写法
cout <<"a = "<<a<<endl;
cout <<"b = "<<b<<endl;
b = 100;
cout <<"a = "<<a<<endl;
cout <<"b = "<<b<<endl;
return 0;
}
输出结果
a = 10
b = 10
a = 100
b = 100
1.2 引用做函数参数
作用:函数传参时,可以利用引用的技术让形参修饰实参
void mySwap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
int main()
{
int a =10;
int b =20;
mySwap(10,20);
cout<<"a:= "<<a<<"b:= "<<b<<endl;
return 0;
}
1.3 引用做函数的返回值
注意:1、不要返回局部变量的引用
int& test01()//用引用的方式去接收a,a的返回类型为"int&"
{
int a=10;//局部变量存放在四区中的栈区
return a;
}
//2、函数的调用可以作为左值
int& test02()
{
static int a = 10;// 静态变量,存放在全局区,全局区的数据在程序结束后系统释放
return a;
}
可以理解为 ref2相当于test02()的一个别名 ,二者指向同一块内存
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;
}
1.4 引用的本质
本质:引用的本质在C++中是一个指针常量(指针的指向不可以修改,指针指向的值可以修改)
//发现是引用,转化为int* const ref = &a;
void func(int& ref)
{
ref = 100;//ref是引用,转化为*ref =100
}
int main()
{
int& a =10;
int& ref =a;
ref =20;//内部发现ref是引用,自动帮我们转换为:*ref=20
cout<<"a: "<<a<<endl;
cout<<"ref: "<<ref<<endl;
func(a);
return 0;
}
1.5 常量引用
作用:常量引用主要用来修饰形参,防止误操作
void showValue(const int &val)
{
val =1000;//错误
cout<<"val = "<<val;
}
int main()
{
//int &ref = 10;//引用必须是一块合法内存
const int &ref =10;//--->int temp =10; const int &ref =temp;
int a = 100;
showValue(a);//给a取一个别名叫val
}