【C++核心编程】引用|引用的本质

 🔥博客主页: 我要成为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;
}

引用是编译器提供的一个有用且安全的工具,去除了指针的一些缺点,禁止了部分不安全的操作。

变量是什么?变量就是一个在程序执行过程中可以改变的量。

换一个角度,变量是一块内存区域的名字,它代表了这块内存区域,当我们对变量进行修改的时候,会引起内存区域中内容的改变。

在计算机看来,内存区域根本就不存在什么名字,它仅有的标志就是它的地址,因此我们若想修改一块内存区域的内容,只有知道他的地址才能实现。

所谓的变量只不过是编译器给我们进行的一种抽象,让我们不必去了解更多的细节,降低我们的思维跨度而已。

程序员拥有引用,但编译器仅拥有指针(地址)。

引用的底层机制实际上是和指针一样的。不要相信有别名,不要认为引用可以节省一个指针的空间,因为这一切不会发生,编译器还是会把引用解释为指针。

引用和指针本质上没有区别。

  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值