C++引用的学习
引用系列
本质:在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;
}
本文来自博客园,作者:Alaso_shuang,转载请注明原文链接:https://www.cnblogs.com/Alaso687/p/18698092