接上篇:C++57个入门知识点_06_ 什么是引用(需改变外部内容,用指针存在判断地址的问题、引用本质给外部内容起别名、fool(int& n) 外部函数:int& refN=n fool(refN/n)),本篇主要讲引用的使用。
总结:
-
1.引用在定义时就必须初始化,不能用常量进行赋值,需要采用变量进行赋值;int& refN = n;
对上句的理解:引用本质是变量的别名,变量是可以修改的,如果可以用常量赋值,那这个常量是不是就可以修改了? -
2.只有常量引用才可以使用常量进行初始化,如果想要对常量引用,可以使用const int& refN = 123;
-
3.引用的关系一旦建立则无法修改
-
4.引用的使用:
(1)作为函数参数void fooRef(int& n){n = 6;} 引用时fooRef(n);
(2)作为函数的返回值int& fooRtnRef() {int k = 3;return k;} int& refk = fooRtnRef(); -
5.不存在二级引用,但可以使用指针的引用来替代二级指针
-
引用既可以像指针一样使得修改立即生效(地址传递),又没有指针那么麻烦需要解引用、获取地址,使用方便。
1. 引用使用变量进行初始化
在上篇我们对引用赋值采用int& refN=n的形式,那是否可以直接采用int& refN=8进行赋值呢?
int main(int argc, char* argv[])
{
int& refN = 5;
return 0;
}
可以看到如下报警:非常量引用的初始值必须为左值

使用nullptr也是同样的效果
引用在定义时就必须初始化,不能用常量进行赋值,需要采用变量进行赋值;int& refN = n;
对上句的理解:引用本质是变量的别名,变量是可以修改的,如果可以用常量赋值,作为常量的别名,那这个常量是不是就可以修改了?
2. 常量引用使用常量进行初始化
如果需要指向常量呢?可以采用如下方法:const int& refN = 5;
只有常量引用才可以使用常量进行初始化,如果想要对常量引用,可以使用const int& refN = 123;。
3.引用的关系一旦建立(别名关系),无法修改
下面的一段代码,使用refN = m;,m改变的是引用关系,使refN成为m的别名,还是对refN进行赋值,修改了n的值呢?
#include <iostream>
int main(int argc, char* argv[])
{
int n = 5;
int m = 6;
int& refN = n;
refN = m;
return 0;
}
运行结果:可以看到refN和n的值都发生了改变,当refN称为n的别名,就永远不会改变

4.引用的使用:函数参数、函数返回值
(1)最常见的用法作为函数参数
函数:void fooRef(int& n){n = 6;} 引用:fooRef(n);
(2)作为函数的返回值
#include <iostream>
int& fooRtnRef()
{
int k = 3;
return k;
}
int main(int argc, char* argv[])
{
int& refK = fooRtnRef();
refK = 123;
return 0;
}
运行结果:k作为引用返回给refK ,refK = 123;实现的是改变refK 和函数中k值的作用,因此两个的值均从3变为123。
查看局部变量原内存地址内容的方法: 函数中的k作为内部值,可以使用内存进行查看,单步运行至函数体,得到k的地址,通过VS查看其地址内的值的变化。

但是有一个安全隐患,函数外界改变函数内部局部变量值,函数一旦出了作用域,函数内部的局部变量应该清空释放,通过引用去改变的是一个已经释放控件的值,这个内存下的值可能已经分配给其他变量了,已经不属于k了,可能产生不可预料的结果。因此在将引用作为返回值是,需要保证返回的值还在生命周期内。
5.不存在二级引用
指针存在二级指针:int* p=(&n); int** pp=&p,但不存在二级引用,但可以使用指针的引用来替代二级指针,这样就可以少写一个指针。
以下代码利用指针的引用实现了指针交换,之前我们可能会使用二级指针实现交换,通过引用就可以实现少写一个指针的目的。
#include <iostream>
//交换两个指针
void exchange(int*& n1, int*& n2)
{
int*k = n1;
n1 = n2;
n2 = k;
return;
}
int main(int argc, char* argv[])
{
int n = 5;
int m = 6;
int* pN = &n;
int* pM = &m;
exchange(pN, pM);
return 0;
}
运行结果:指针实现了交换


6. 学习视频地址:C++57个入门知识点_07_ 引用的使用
C++入门:引用详解与使用实例
本文深入探讨了C++中的引用概念,包括引用的初始化必须使用变量、常量引用、引用关系的不可变性以及引用在函数参数和返回值中的应用。通过示例代码展示了引用如何作为函数参数传递和作为返回值使用,并强调了引用作为返回值时的潜在风险。此外,还提及了指针引用可以替代二级指针,并提供了引用在指针交换中的应用案例。
444

被折叠的 条评论
为什么被折叠?



