C++基础·笔记——引用的总结

不羁岁月 提交于 2020-01-31 11:20:14

~QQ:3020889729

~小蔡

引用的理解(C++)

引用的定义

引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。

引用的含义

①引用就是一个指针常量——所谓指针常量就是,指针指向一个确定的地址,且该地址确定不变
②既然只是确定地址不变,那么地址上的内容就是可以修改/设置的。
③引用作用的一个目标——该目标可以是对象或者说变量,但是不能是数组,因为数组不单一。
(ps:对数组操作,就直接使用指针就好。多级指针会在另外一篇博客上有说。)

引用的使用(C++)

ps:使用引用时,必须初始化,并且初始化确定后,不可以再更改。

对变量进行引用操作

关于必须初始化/不能进行第二次引用修改的说明(代码)

①必须初始化:

(代码如下)

#include "iostream"
using namespace std;
int main()
{
    int a=5;
    int &b;//未进行引用初始化——报错点
    cout << a << endl;
    cout << b << endl;
    return 0;
}

结果显示:(报错)
在这里插入图片描述
编译提示:出现未初始化的错误。

②只能进行一次引用

(代码如下)

#include "iostream"
using namespace std;
int main()
{
    int a=5;
    int c=6;
    int &b=a;//进行第一次引用初始化
    &b=c;//再次进行引用,尝试更换引用对象
    cout << a << endl;
    cout << b << endl;
    cout << c << endl;
    return 0;
}

结果显示:(报错)
在这里插入图片描述
编译提示:出现左值不应该被赋值(再次引用新目标)的错误。

一、实参与实参的引用操作:

该类的引用操作就是,将一个变量的地址复制给另一个变量,两个变量都可以操控同一个地址
(代码如下)

//实参与实参的引用操作——Text1
#include "iostream"
using namespace std;
int main()
{
    int a=5;
    cout << "First time cout~" << endl;
    cout << "a = " << a << endl;
    //还未被b引用之前,打印一次a的值,查看当前地址上的内容

    cout << endl;
    cout << endl;//空2行,方便查看

    int &b = a;//用b引用a(a被b引用)——注意,b引用a后,不可以再引用其它的目标(变量)
    b = 8;//修改b的值
    cout << "Second time cout~" << endl;
    cout << "a = " << a << endl;
    //a被b引用后,再打印值,看前后的区别
    cout << "b = " << b << endl;
    return 0;
}

结果展示:(可以看出a被引用后,b修改值,a也跟着修改了)
在这里插入图片描述

二、实参与形参的引用操作:

形参变量使用引用,可以实现对实参的修改——同地址传递可以修改实参值一样。
(ps:当然你也可以在引用前添加const,保证引用后,函数操作中该引用的内容不发生改变。)
(代码如下)

#include "iostream"
using namespace std;

//通过设置形参为引用类型的变量
//可以实现对实参的修改功能
void be_used_points(int &a,int &b);

int main()
{
    int a=5;
    int c=7;//进行第一次引用初始化
    cout << "First time cout~" << endl;
    cout << "a = " << a << endl;
    cout << "c = " << c << endl;
    //还未传入函数前的值

    cout << endl;
    cout << endl;//空2行,方便查看

    be_used_points(a,c);

    cout << "Second time cout~" << endl;
    cout << "a = " << a << endl;
    //传入函数出来后,再打印值,看前后的区别
    cout << "c = " << c << endl;

    return 0;
}

void be_used_points(int &a,int &b)
{
    a*=a;//改变传入参数的值
    b*=b;
}

结果显示:

在这里插入图片描述
结果显示可以印证引用的实质——对一个目标地址的拷贝。
在函数参数为引用类型时,传入目标后,形参拷贝一份地址,进而对该地址的内容进行修改。
(再提一下,引用相当于一个指针常量,地址锁定)

返回值为引用类型的操作

返回值为引用类型——就相当于普通的返回值类型的函数返回值。
(int num()的返回值,和int &num()返回值相同)
(代码如下)

#include "iostream"
using namespace std;

//返回值为普通的int类型
int be_used_point_return_1();
//返回值为int的引用类型
int& be_used_point_return_2();

int main()
{
    int c;
    //int d;
    int b=be_used_point_return_1();//b=5——值返回为普通类型时返回的是一个值
    c=be_used_point_return_2();//c=5——值返回为引用类型时返回的也是一个值

    cout << "b = " << b << endl;
    cout << "c = " << c << endl;
    return 0;
}

int be_used_point_return_1()
{
    int b=5;
    return b;//返回该变量——返回值类型为整型引用
}

int& be_used_point_return_2()
{
    int a=5;
    int &b=a;
    return b;//返回该变量——返回值类型为整型引用
}

结果显示:
在这里插入图片描述
说明一下,普通返回值和引用返回值,返回的用处的差别之一:
虽然两种返回的都是值,但是不能将返回值为普通类型的赋给引用类型(会报错),而引用类型却是可以把返回值赋给普通类型的。
在这里插入图片描述

返回值为引用类型的理解

引用——都说了是指针常量的一个应用。既然如此,返回值中的引用返回值特定的值就是该地址上的,但是呢,既是返回值,又同时拷贝了对应的地址——虽然它主要是赋值操作,但是呢,它也将引用它的变量的地址改变了。
①就拿返回值为引用类型来说,假设返回引用类型的是a,然后可以进行这样的操作:
int &b=be_used_point_return();
这样操作后,b首先获得了一个值,同时函数关闭,函数里定义的那个局部参数被释放,但是地址却也拷贝给了b,此时b上又得到一个值,也就相当于该地址上的数据未被释放——此时b就保持得到的返回值。
②而返回值未普通类型的,它就仅仅是返回该类型的值,地址为传递(拷贝)。

总结

引用,在C++中的引用既简单又易于书写,可以在一些地方替代指针,而使得代码更简洁,更健壮易读。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!