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

c++ 的(引用)和*(指针)

在C++中,&(引用)和*(指针)在函数参数中的使用有各自的特点和用途。下面是它们的具体使用方式以及它们之间的一些区别:

引用(&)

  1. 使用方式:
  • 引用作为函数参数时,可以使得函数能够修改传入的原始变量。

  • 引用参数在函数内部看起来就像是原始变量的别名。

    void increment(int &value) {
    value += 1; // 直接修改传入的变量
    }

  1. 优点:
  • 引用传递避免了复制开销,特别是对于大型对象。
  • 引用必须绑定到已经存在的对象,不能是空引用。
  1. 缺点:
  • 引用本身不占用独立内存,因此不能有引用的引用。
  • 引用不能重新绑定到另一个对象。

指针(*)

  1. 使用方式:
  • 指针作为函数参数时,可以接收一个变量的内存地址,然后在函数内部通过指针操作该变量。

  • 指针可以是空指针(nullptr或NULL),表示没有指向任何对象。

    void increment(int *value) {
    if (value != nullptr) {
    *value += 1; // 通过解引用来修改传入的变量
    }
    }

  1. 优点:
  • 指针提供了灵活性,可以指向任何类型的对象,包括数组和大型对象。
  • 指针可以是空指针,表示没有指向任何对象。
  1. 缺点:
  • 使用指针需要进行额外的解引用操作(*pointer)。
  • 指针可能指向空值,需要进行空值检查。

区别

  • 内存占用: 引用不占用独立内存,而指针需要占用内存来存储地址。
  • 空值: 引用不能是空的,指针可以是nullptr。
  • 重新绑定: 引用不能重新绑定到另一个对象,指针可以重新指向另一个对象。
  • 语法: 使用引用时,不需要解引用操作;使用指针时,需要通过*来解引用。

示例

void useReference(int &ref) {ref = 10; // 直接修改原始变量
}void usePointer(int *ptr) {if (ptr != nullptr) {*ptr = 20; // 通过指针修改原始变量}
}int main() {int value = 5;int *ptr = &value;useReference(value); // 使用引用std::cout << value << std::endl; // 输出 10usePointer(ptr); // 使用指针std::cout << value << std::endl; // 输出 20return 0;
}

在这个示例中,useReference 直接修改了传入的变量 value,而 usePointer 通过指针来修改 value。两种方式都达到了修改原始变量的目的,但是它们的使用方式和语义有所不同。

http://www.lryc.cn/news/397216.html

相关文章:

  • 人工智能算法工程师(中级)课程6-sklearn机器学习之聚类问题与代码详解
  • Objective-C 中的 isa 不再是简单的结构体指针
  • 中介子方程五十二
  • LabVIEW在半导体自动化测试中的应用
  • 政安晨:【Keras机器学习示例演绎】(五十三)—— 使用 TensorFlow 决策森林进行分类
  • 51单片机:电脑通过串口控制LED亮灭(附溢出率和波特率详解)
  • Java中的消息中间件选择与比较
  • react基础语法,模板语法,ui渲染,jsx,useState状态管理
  • OJ-0710
  • 人工智能在自动驾驶中的目标检测研究
  • 【合并两个有序数组】
  • 链表 OJ(一)
  • 《Linux与Windows文件系统的区别》
  • 批量修改Git历史commit信息中的username
  • LabVIEW与ABB工业机器人据监控
  • c++栈内存和堆内存的基本使用
  • 快速入门,springboot知识点汇总
  • Ubuntu20.04系统非root用户安装GAMIT10.71
  • stm32 开发板可以拿来做什么?
  • latex英文转中文word,及一些latex相关工具分享
  • EasyOCR: 简单易用的多语言OCR工具
  • arm架构安装chrome
  • ETAS工具导入Com Arxml修改步骤
  • Apache Kylin模型构建全解析:深入理解大数据的多维分析
  • element-plus的文件上传组件el-upload
  • 等保测评视角下的哈尔滨智慧城市安全框架构建
  • Java中的数据缓存技术及其应用
  • SQL 索引
  • free第一次成功,第二次失败
  • 各种音频处理器