首页 > 编程语言 >C++引用在本质上是什么,它和指针到底有什么区别?

C++引用在本质上是什么,它和指针到底有什么区别?

时间:2023-12-20 13:11:23浏览次数:29  
标签:变量 C++ --- 地址 引用 操作 指针

参考文章:https://www.bilibili.com/read/cv13541907/

对于指针变量P,引用变量Q,以及变量a=10;

赋值过程:

  P=&a;

  &Q=a;

P=&a:

  将变量a的地址传给指针P。a的地址上存的值是10;P的地址上存值是a的地址;

*P:

  指向的是存在指针P上的地址(a的地址)上的内容,即a的值10。指针P指向的是地址,或者说指针P中存的它所指向变量的地址。而要操作所指向地址中所存的数值(即a中所存的值10),需要在指针P前加           *。这略显麻烦,而引用就是将指针P从地址到加*这个过程进行了封装。

Q:

  是引用变量,当&Q=a语句运行时,将变量a的地址传给引用变量Q,这和指针类似,P和Q中存的都是a的地址。而Q要操作a中的数值时,可以直接操作,如Q=15(等价于a=15,等价于*P=15);

       所以引用变量和指针变量的相同点在于,二者存的都是所指向的变量的地址;而区别在于,指针需要在指标变量P前面加*才能操作所指向的变量数值;引用却可以直接操作,不需要加任何符号。

简单粗暴理解就是:

  对指针而言:“P---*P---操作所指变量的值”;需要经历中间加*的过程才能操作变量;

  对引用而言:“Q---*Q---Q---操作所指变量的值”;由于C++封装了加*这一过程,所以从用户角度来来看,相比于P,Q操作变量经历的过程更少,不用加*可以直接操作。但实际上,Q操作变量的过程相比于P是多一个步骤,只不过C++将Q+*=Q这一过程封装了。所以原本更繁琐的过程:“Q---*Q---Q---操作所指变量的值”就在用户角度便简化成了更精简的过程:“Q--操作所指变量的值”。

C++小白,如有错误,还请大佬多多指正!

标签:变量,C++,---,地址,引用,操作,指针
From: https://www.cnblogs.com/gomyj/p/17916290.html

相关文章

  • C++中的explicit关键字
    一、简介explicit关键字可以阻止隐式转换的发生。举例:C++中只带有一个参数的构造函数,或者或者除了第一个参数外其余参数都有缺省值的多参构造函数,承担了两个角色:(1)用于构建单参数的类对象。(2)隐含的类型转换操作符。一个类A的构造函数A(inti)就是既可以用来作为构造器,......
  • C++聊天集群服务器解决客户端注销登录问题
    客户端如何处理注销登录问题?问题描述:​ 在客户端登录后进行注销选择,然后重新登录刚才注销的账号,直接卡死。注意这是概率发生,因为是主线程和子线程抢服务器发送的信息,只有子线程抢到才会发生卡死问题产生原因分析:​ 前置条件:主线程循环等待用户输入选择(第一张图是死循环,send......
  • C++ Qt开发:QItemDelegate 自定义代理组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QStyledItemDelegate自定义代理组件的常用方法及灵活运用。在Qt中,QStyledItemDelegate类是用于......
  • C++11 多线程
    文章参考:C++教程|爱编程的大丙(subingwen.cn)C++11的原子量与内存序浅析-兔晓侠-博客园(cnblogs.com)从C++11起,C++为用户提供一套新的多线程类。线程相关操作头文件:thread#include<thread>一.std::thread1.初始化和析构默认构造函数:原型:thread()noexce......
  • C++(std::pair)
    在C++中,std::pair是一个标准库模板,用于将两个不同类型的值组合成一个单元,即一对(pair)。std::pair定义在头文件<utility>中。这个模板是为了提供一种简单的方式来存储和传递两个相关但不同类型的值。std::pair模板的定义如下:namespacestd{template<classT1,classT2>......
  • C++(深拷贝、潜拷贝)
    在C++中,深拷贝(deepcopy)和浅拷贝(shallowcopy)是涉及对象复制的两个概念,特别是当涉及到类或结构体时。下面我将解释这两个概念:1.浅拷贝(ShallowCopy):浅拷贝是指将一个对象的内容复制到另一个对象,但如果对象中包含指针,则只会复制指针的值,而不是指针所指向的数据。这意味着两个对象......
  • C++(STL标准库)
    C++标准模板库(StandardTemplateLibrary,STL)是C++标准库的一部分,提供了一组通用的模板类和函数,包括数据结构和算法,以便开发者能够更容易地实现各种功能。STL的设计目标是提供高性能、灵活和通用的工具,使得开发者能够专注于问题的解决,而不必为数据结构和算法的实现而费心。STL......
  • 刘方舟 VC++面向对象与可视化程序设计 黄维通
    注:由于题目不确定,整理知识点范围比较宽,适当选取1.内联函数     定义:定义在类体内的成员函数,即函数的函数体放在类体内     特点:在调用处用内联函数体的代码来替换,用于解决程序的运行效率问题。一定要在调用之前定义,并且内联函数无法递归调用。2.构造函数与析构......
  • 深入理解自动化测试:前置接口数据引用的优化实践
    当进行 自动化测试 编排时,测试步骤间的数据传递是至关重要的。在传统的方式中,一般通过复杂的脚本配置,或者手动复制这些数据,然后再慢慢地粘贴到每个需要它们的地方,以此来实现接口之间的参数传递。这种方式往往效率低下、容易出错并且难以维护,当接口或业务逻辑发生变化时,需要进行大......
  • 【重排链表】双指针+反转链表+合并链表
    leetcode143.重排链表题意:给定一个单链表L的头节点head,单链表L表示为:L0→L1→…→Ln-1→Ln请将其重新排列后变为:L0→Ln→L1→Ln-1→L2→Ln-2→…不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。题解:可以发现重新排列的链......