目录
引用的基本使用
作用:引用就是给变量起别名,它不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。我的理解就是在某些场景下它比指针好用。
语法:数据类型& 别名 = 原名;
#include<iostream>
using namespace std;
int main()
{
int a = 10; //定义各个整型变量
int& b = a; //定义个引用
cout << "a的值为:" << a << endl; // a的值为10
cout << "b的值为:" << b << endl; // b的值为10
system("pasue");
return 0;
}
引用的注意事项
1、引用必须初始化
int &b; //这是不可以的
2、引用初始化后,就不可以更改
int a = 10;
int c = 20;
int& b = a;
int& b = c; //b引用了a之后,就不能再引用c 不可以再进行更改3、引用还可以继续有引用
int a = 10;
int& b = a;
int& c = b; //b引用了a, c引用了b4、一个变量可以有多个引用
int a = 10;
int& b = a;
int& c = a; //b c都引用了a5、可以对任何类型做引用
#include<iostream>
using namespace std;
int main()
{
int a = 10; //定义各个整型变量
int &b = a; //必须初始化 ,此时 b 和 a 是相等的共享空间 相当于b就是a的别名(小名)
int c = 20; //引用初始化后,不可以更改
b = c; //这是复赋值操作,不是更改引用
cout << "a的值为:" << a << endl; // a的值为20
cout << "b的值为:" << b << endl; // b的值为20
cout << "c的值为:" << c << endl; // b的值为20
system("pasue");
return 0;
}
引用的两大应用场景(做函数参数、做返回值)
引用的两大应用场景分别是1、做函数参数,2、做返回值
1、做函数参数
引用做函数的参数,作用相当于指针,可以改变变量本身,前面说形参不能修饰实参,但是用指针的时候可以修饰,但是利用指针来传参,还需要解引用,但是采用 引用来传参则不需要这么麻烦,因为传参传一个实参过去,接收时使用引用,此时该引用就是形参的别名,形参的别名改变会改变形参本身。
2、做返回值
用引用接收返回值时,不再需要开辟额外的空间来存函数返回值时产生的临时变量,在main()函数中将临时变量拷贝给接收值。对于像静态变量、全局变量等这些出了作用域不会销毁的对象,就可以使用 传引用返回 ,它不用拷贝,返回的直接就是返回变量的别名,这能够极大地提高效率(目前简单粗暴的理解)
作用:函数传参时,可以利用引用的技术让形参修饰实参
优点:可以简化指针修改实参
#include<iostream>
using namespace std;
//交换函数
int Swap01( int a,int b)
{
int temp = a;
a = b;
b = temp;
return 0;
}
//1、值传递
int Swap02( int a,int b)
{
int temp = a;
a = b;
b = temp;
cout << "Swap02 a的值为:" << a << endl; // a的值为20
cout << "Swap02 b的值为:" << b << endl; // b的值为10
return 0;
}
//2、地址传递
int Swap03( int *a,int *b)
{
int temp = *a;
*a = *b;
*b = temp;
cout << "Swap03 a的值为:" << a << endl; // a的值为20
cout << "Swap03 b的值为:" << b << endl; // b的值为10
return 0;
}
//3、引用
int Swap04( int &a,int &b)
{
int temp = a;
a = b;
b = temp;
cout << "Swap04 a的值为:" << a << endl; // a的值为20
cout << "Swap04 b的值为:" << b << endl; // b的值为10
return 0;
}
int main()
{
int a = 10;
int b = 20;
Swap01(a,b); //值传递 形参不会修饰实参
Swap03(&a,&b); //地址传递 形参会修饰实参
Swap04(a,b); //引用传递 形参会修饰实参
cout << "a的值为:" << a << endl; // a的值为10
cout << "b的值为:" << b << endl; // b的值为20
cout << "Swap03 a的值为:" << a << endl; // a的值为20
cout << "Swap03 b的值为:" << b << endl; // b的值为10
cout << "Swap04 a的值为:" << a << endl; // a的值为20
cout << "Swap04 b的值为:" << b << endl; // b的值为10
system("pasue");
return 0;
}
引用做函数的返回值
#include<iostream>
using namespace std;
//引用做函数的返回值
//1、不要返回局部变量的引用
int& test01() // int& 表示a最为一个引用返回
{
int a = 10; //局部变量存放在四区中 栈区 执行完就释放掉了
return a;
}
//2、函数的调用可以作为左值
int& test02()
{
static int a = 10;// 加 static 变为静态变量存放在四区中的全局区 执行完整个程序由系统释放掉了
return a;
}
int main()
{
int &ref1= test01();
int &ref2= test02();
cout << "ref1的值为:" << ref1 << endl; // ref1的值为20
cout << "ref1的值为:" << ref1 << endl; // 出现错误乱码 因为局部变量 执行完这个代码 空间被释放掉了,第二次输出就会出现错误不一致情况
test02()=1000; //作为左值(也就是左边的值)
cout << "ref2的值为:" << ref2 << endl; // ref2的值为1000
cout << "ref2的值为:" << ref2 << endl; // ref2的值为1000
system("pasue");
return 0;
}
引用的本质
本质:应用的本质在C++内部实现是一个指针常量
#include<iostream>
using namespace std;
//发现是引用,转化为 int* const ref = &a
void test01(int& ref)
{
ref = 10; //ref是引用,转化为*ref = 10
}
int main()
{
int a = 100;
//自动转为为int* const ref = &a,指针常量是指针指向不可改变,所以说为什么引用不可以更改
int& ref= a;
ref = 20;
cout << "a:" << a << endl;
cout << "ref:" << ref << endl;
test01();
system("pasue");
return 0;
}
关于引用的知识点还没学完,先写到这,感兴趣的可以参考这篇文章C++ 引用(&)的超详细解析(小白必看系列)_c++ &-CSDN博客,虽然写的很详细,对我而言还是有有很多地方需要仔细研究才能懂。
标签:11,10,变量,int,C++,基础知识,引用,返回值,ref From: https://blog.csdn.net/weixin_45754224/article/details/140101864