🔥博客主页: 我要成为C++领域大神
🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】
❤️感谢大家点赞👍收藏⭐评论✍️
本博客致力于分享知识,欢迎大家共同学习和交流。
引用变量是C++新增的复合类型,对已定义的变量的别名。主要用途是用作函数的形参和返回值。
声明/创建引用的语法:数据类型 &引用名=原变量名;
注意:
l 引用的数据类型要与原变量名的数据类型相同。
l 引用名和原变量名可以互换,它们值和内存单元是相同的。
l 必须在声明引用的时候初始化,初始化后不可改变。
l C和C++用&符号来指示/取变量的地址,C++给&符号赋予了另一种含义。
引用的本质是什么?
大部分网站告诉我们,引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它与引用的变量共用同一块内存空间。
但是实际上,引用是常指针的伪装,我们用常指针也可以达到引用的效果。看下面这样一段代码:
#include <iostream>
using namespace std;
int main()
{
int a = 10;
int &q_a = a;
q_a = 52; // 引用可以修改变量,但是不能再引用其它变量了
cout << a << endl;
int *const p_a = &a; // 指针常量可以修改所指向变量的值,但是不能指向其它变量了
//二者作用几乎一模一样
// 所以我们可以将引用理解为常量指针的伪装
*p_a = 85;
cout << a << endl;
return 0;
}
引用是编译器提供的一个有用且安全的工具,去除了指针的一些缺点,禁止了部分不安全的操作。
变量是什么?变量就是一个在程序执行过程中可以改变的量。
换一个角度,变量是一块内存区域的名字,它代表了这块内存区域,当我们对变量进行修改的时候,会引起内存区域中内容的改变。
在计算机看来,内存区域根本就不存在什么名字,它仅有的标志就是它的地址,因此我们若想修改一块内存区域的内容,只有知道他的地址才能实现。
所谓的变量只不过是编译器给我们进行的一种抽象,让我们不必去了解更多的细节,降低我们的思维跨度而已。
程序员拥有引用,但编译器仅拥有指针(地址)。
引用的底层机制实际上是和指针一样的。不要相信有别名,不要认为引用可以节省一个指针的空间,因为这一切不会发生,编译器还是会把引用解释为指针。
引用和指针本质上没有区别。