内容简介:Declares a named variable as a reference, that is, an alias to an already-existing object or function.先从一个简单的例子开始:上述代码似乎不用解释都知道它所要说明的问题。似乎与今天的主题无关,但是不着急,看下
认识引用
Declares a named variable as a reference, that is, an alias to an already-existing object or function. 来自: C++参考手册
先从一个简单的例子开始: 交换函数 swap() 。
// 代码片段01
void swap01(int a, int b) {
int temp = a;
a = b;
b = temp;
}
// 代码片段02
void swap02(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main(int argc, const char * argv[]) {
int a= 10, b = 20;
swap01(a, b); // 不会交换
swap02(&a, &b); // 会交换
return 0;
}
上述代码似乎不用解释都知道它所要说明的问题。似乎与今天的主题无关,但是不着急,看下 代码片段02 。内部充斥着 *a 、 *b 这样的操作,代码似乎不够简洁。有没有什么方式可以使其更简洁一些呢?有! 引用!! 。
有了引用以后,代码是这样的:
void swap03(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
int main(int argc, const char * argv[]) {
int a= 10, b = 20;
swap03(a, b); // 会交换
return 0;
}
代码看起来和上面没有什么大的差别。 &a 、 &b 似乎是! 在取地址。 实际上不是的。 它表示的 a 是某个 int 类型变量的引用(或者说某个 int 类型变量的 别名 )。
那么如何创建一个 引用 呢?
int main(int argc, const char * argv[]) {
int num = 10;
int & ref = num; // 创建一个引用。
int & refref = ref; // 创建一个引用
return 0;
}
如上,创建的是 num 的引用,名字叫 ret 。 既然是引用,就是说,使用 num 和 ret 没有任何区别。
没有任何区别是什么意思?意思就是说: num 和 ret 都是同一个内存地址的名称。举个小例子,如图:
num: 周樟寿 ref: 周树人 refref: 鲁迅
只是名字变了,但它都是同一个内存!!
说到这里,有没有发现其实引用是什么?像不像下面这样:
int &ref = num; // 等价于 int *ref = #
另外有一个需要注意的地方是:引用一旦创建,便不能更改(只读)!!既然不能修改,那就说明必须在创建时就要给引用初始化!!!。
int one = 10; int two = 20; // 错误01(ref创建时就要被初始化) int &ref; ref = one; // 正确写法:int &ref = one; // 异常 02(引用一旦创建,便不能修改) int &ref = one; ref = two; // 这句话不会报错,但是它表达的意思不是让ref变成two的引用。而是将 two 的值,赋值给 ref。即,ref = 20;
至此,对引用有了一个基本的认识。总结一下:
- 引用是某个变量的别名。
- 引用一旦创建,便不可以修改。
- 引用创建时,必须要初始化。
基于以上的观点。我们可以对引用有一个本质上的认识,即 指针常量 :
int & ref = num; // 等价于 int * const ref = #
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 强引用、软引用、弱引用、虚引用
- java的强引用、软引用、弱引用、幻象引用,引用队列总结
- Java 对象引用方式 —— 强引用、软引用、弱引用和虚引用
- 强引用、软引用、弱引用、幻象引用有什么区别?
- 你确定真的了解 Java 四种引用(强引用、弱引用、软引用、虚引用)了吗?
- java:强引用,软引用,弱引用和虚引用
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
PYTHON3:数据分析与机器学习实战
龙马高新教育 / 北京大学出版社 / 2018-9-1 / 69.00
机器学习(Machine Learning, ML)是一门多领域交叉学科,是人工智能的核心,其应用遍及人工智能的各个领域,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。在机器学习过程中,需要使用大量数据,而数据分析是指用适当的方法对收集的大量数据进行分析,提取有用信息并形成结论,进而对数据加以详细研究和概括总结的过程。本书结合机器学......一起来看看 《PYTHON3:数据分析与机器学习实战》 这本书的介绍吧!