c++引用详细解说1

1、基本概念百度百科是这样解释的:c++是c语言的继承,它可进行过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。
引用(reference)就是c++对c语言的重要扩充。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。引用的声明方法:类型标识符 &引用名=目标变量名。
别名,又可以说是外号,代称,比如水浒传里几乎是别名最多的地方。林冲,在家称为林教头,江湖上人称豹子头。教头和豹子头就是林冲的别名。
2、区分&就是引用,但是&这个操作符和取地址&操作符是重叠的,所以它们需要不同的场景规范:
当 &b单独存在时,这时就代表取地址,为取出变量的地址。
但是如果这样:
int main(){ int a = 10; int& b = a; // 引用 int* p = &b; // 取地址 return 0;}当 & 位于类型和变量名之间时,为引用。
3、本质调试查看一下 a 和 b 的关系:
我们发现a和b的值不仅相等,连它的地址也是相同的。这就可以说明,b就是a ,但是在语法层面上,这里b并不是开辟的新空间,而是对原来的a取了一个新名称,叫做b。
就好比林冲被叫做豹子头一样,林冲还是林冲,豹子头也是它;而a就是a,但是b也是 a 。
而如果这时候对 a 或 b 任意一个修改,那么 a 和 b 都会发生修改。
4、特性引用有以下3点是必须注意的!!!
引用必须在定义时初始化
引用是取别名,所以在定义的时候必须明确是谁的别名。
一个变量可以有多个引用就和林冲一样,他可以叫豹子头也可以叫林教头,这都是它。
所以一个变量也可以有多个别名。
而对于一个起过别名的变量,对它的别名取别名也是可以的。
而从根本上看,就可以这么理解:
本质上还是一个变量。
但是别名不能和正式名字冲突,就比如取过别名,就不能定义和别名重名的变量,即使它们的类型并不相同。
所以说这里的报错信息并不准确,实际上是命名冲突。
引用一旦引用一个实体,就不能引用其他实体int main(){ int a = 10; int& b = a; int c = 20; b = c; return 0;}对于下一组代码,有什么含义?
让 b 变成 c 的别名?还是把 c 赋值给 b ?这里的代码意思是第二个含义,就是赋值,我们调试看看:
调试我们也可以看到,我们只是把 c 的值赋值给了 b ,b 的地址还是没变的 ,并且 a 的值也改变了。
这就说明引用一旦引用某一个实体,就不能引用其他的实体,引用是不会发生改变的。
因为它们是完全独立的两个变量,仅有的关联也只是值相等,改变 b 并不能影响 c ,但是此时 b 是 a 的别名,所以改变 b 就会影响 a 。
图:
但是对于指针,则是截然不同的:
int main(){ int a = 10; int c = 20; int* p = &a; p = &c; return 0;}对于指针来说,指针就可以时刻修改:
p原本指向 a ,现在指向 c.
但是引用也有局限性,因为引用之后的变量是不可修改引用的,比如链表,节点是要不断更替迭代的,所以还需要指针配合,c++才可以写出一个链表。

21.5寸4K iMac拆解大曝光,内部芯片一览!
未来谁将成为Mini LED市场的主导者
RUCKUS AP R850表现如何?
汇川技术电液伺服方案助力冶金行业绿色可持续发展
电磁干扰的来源及屏蔽方法介绍
c++引用详细解说1
线性电源与开关电源的关系
物联网还会有多少变数
LN4890 低成本的单声道1W音频功率放大器
中国联通正式公布了数字通信电缆公开招募结果
新一代USB 4的传输速度将是当前USB 3.2的2倍
英特尔表示,首款独立GPU将会在2020年推出
ic设计是什么专业_IC设计的设计方法
看点 走进斯坦福大学,全球AI峰会今日开幕
Qorvo®的5G RF前端解决方案荣获GTI大奖
2017年台湾VR头显出货量将增加一倍
行人摔倒检测-在英特尔开发套件上基于OpenVINO™ C# API部署PP-Human
四轴mpu6050姿态角卡尔曼滤波代码分析
护眼灯该怎么选,这些你有考虑到吗
骨传导蓝牙耳机哪个牌子好,骨传导耳机品牌排行榜