当前位置: 首页 > news >正文

C++面试的一些总结day1:指针和引用的区别

文章目录

  • 指针和引用的区别和作用
    • 定义
    • 区别
    • 作用

指针和引用的区别和作用

定义

  • 指针:指针是一个变量,其值为指向对象的内存地址,而不是值本身。
  • 引用:可以理解为对象的别名,是另外一个变量的直接别名,用于创建一个已存在变量的另一个名字。
int a = 10;      // 变量 a 存储了值 10
int &ref = a;    // ref 是变量 a 的引用int b = 20;      // 变量 b 存储了值 20
ref = b;         // 这实际上是将 b 的值赋给 a

区别

  1. 是否初始化
    1. 指针可以不初始化,但是最好初始化。
      • 防止未定义行为:未初始化的指针可能指向任意内存地址。
      • 如果不知道指向什么,可以将其指向nullptr,。
    2. 引用必须初始化,不能初始化为空对象,初始化之后不能改变
      • 从引用是对象的别名角度理解,如果初始化为空对象,本身就没有意义。
      • 原因:引用底层是通过指针实现的。当声明一个引用时编译器底层会创建一个指向原对象的指针,并在之后的操作中使用这个指针来访为对象。但是这个指针是隐式的,对程序员不可见,一旦这个指针被初始化(即引用被绑定到一个对象),编译器没有提供机制来更改这个指针的值。
        例如,开始的代码中
		int &ref = a;// 这里ref直接引用的a的地址,注意ref本身没有内存地址。ref = b; // 这里可以直接将a的值改为20,也就是将a所代表的那块内存中存储的值改为20ref = &b; // 错误,ref引用了a,不可改变。

对于a占据的内存,ref是他的别名(底层有编译器指针实现的),而由于地址不可变性,因此在编译完成到整个生命周期这个a的地址和ref都是不可改变的。符号表?

  1. 是否能为空
    1. 指针可以为空
    2. 引用不可以为空
  2. 是否直接操作对象
    1. 指针间接操作对象
      指针存储了对象的地址,对指针操作不会直接改变这个对象,要通过指针变量对所指向的对象间接操作。例如,*解地址引用。
    2. 引用直接操作对象
  3. 是否是对象
    1. 指针是对象
      指针有地址,可以有指针的指针
    2. 引用不是对象
      引用没有地址。

作用

  1. 指针:

    1. 传参,避免对象数据的复制,尤其是大型数据结构的时候。
    2. 多态,通过指针可以找到子类
    3. 代码复用
  2. 引用

    1. 传参,避免对象数据的复制
    2. 函数返回值
http://www.lryc.cn/news/248157.html

相关文章:

  • Java核心知识点整理大全15-笔记
  • 初始本地仓库推送到远程仓库-git
  • OpenCV | 图像梯度sobel算子、scharr算子、lapkacian算子
  • WS2812灯条基于WLED开源项目无门槛使用简介
  • 基于AOP的声明式事物控制
  • 第七节HarmonyOS UIAbility生命周期以及启动模式
  • matlab设置背景颜色
  • Linux gzip命令用法详解:如何压缩和解压文件(附实例教程和注意事项)
  • 初刷leetcode题目(11)——数据结构与算法
  • 基于SSM框架的图书馆管理系统设计与实现
  • 【面试】css预处理器之sass(scss)
  • Android设计模式--享元模式
  • 人工智能对我们的生活影响有多大
  • 【蓝桥杯选拔赛真题26】C++字符串逆序 第十三届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析
  • antd vue a-select 下拉框位置偏移
  • Windows10免安装PostgreSQL
  • lua_next
  • svn服务端安装
  • 基于C#实现十字链表
  • 【MySQL】常用内置函数:数值函数 / 字符串函数 / 日期函数 / 其他函数
  • Python内置函数与标准库函数的详细解读
  • 计算机应用基础_错题集_Internet应用1---网络教育统考工作笔记004
  • STM32之定时器--超声波测距
  • 微信小程序 老年人心血管健康知识科普系统
  • influxdb2.x安装配置指南
  • android APP使用指定网络上网的原理
  • git-2
  • Vue实现可拖拽边界布局
  • Day41力扣打卡
  • SpringBoot项目发送邮件