引用系列
本质:在C++内部是一个指针常量
1.语法 数据类型 &别名 = 本名
提要点:
1.引用必须初始化
2.引用在初始化后,不可改变值
#include<iostream>
using namespace std;//用引用代替指针
void swap1(int a,int b)
{int tmp = a;a = b;b = tmp;cout<<a<<" "<<b<<"\n";//仅在函数体内部交换
}
int main()
{//引用基本语法:实例// int a = 10;// int &b = a;// b = 20;// cout<<a<<"\n";// int a = 10;// int &b = a;// int &c = a;//报错!引用 变量 "c" 需要初始值设定项// int d = 20;// b = d;//赋值操作,而不是更改引用// cout<<b<<c<<"\n";int a = 10,b = 20;swap1(a,b);cout<<a<<" "<<b<<"\n";//值传递其实没有实质上的交换,只是拷贝了一份,在内部函数进行交换return 0;
}
2.引用传参
注意:形参会影响实参
地址传递
//地址传递
#include<iostream>
using namespace std;
void swap1(int *a,int *b)
{int tmp = *a;*a = *b;*b = tmp;
}
int main()
{int a = 10;int b = 20;swap1(&a,&b);cout<<a<<" "<<b<<"\n";return 0;
}
引用传递
#include<iostream>
using namespace std;
void swap1(int &ar,int &br)
{int tmp = ar;ar = br;br = tmp;
}
int main()
{int a = 10,b = 20;swap1(a,b);cout<<a<<" "<<b<<"\n";return 0;
}
3.引用做函数返回值
提要点:
1.不要返回局部变量的引用
2.函数调用作为左值(也就是函数调用可以被赋值)
#include<iostream>
using namespace std;
//不要返回局部变量
//原因如下
// int &test()
// {
// int b = 10;
// return b;
// //这里是返回局部变量,属于栈区,程序执行完后直接丢掉
// //我这里显示直接报错了
// }//接下来是函数可以作为左值的实例
int &test1()
{static int a = 10;//把它化为静态变量,属于全局区,不会因为程序的结束而自动释放变量return a;
}int main()
{// int &h = test();// cout<<h<<"\n";int &h = test1();cout<<h<<"\n";return 0;
}
4.常量引用
提要点:主要是为了防止误修改的值影响原本应该要操作的值
#include<iostream>
using namespace std;
void Print(const int &a)//改成const常量就不会轻易修改值了
{//a = 500;//如果我任意改一下值,那么形参里的数值也会变cout<<a<<"\n";
}
int main()
{//int &tmp = 10;//注意:这里报错了,引用的时候必须是一个合法的内存空间//const int &tmp = 10;//这里的const 将它修饰成了:/*int a = 10;int &tmp = a;*/int tmp = 10;Print(tmp); return 0;
}