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

C语言的指针与cpp的引用

指针 vs 引用 的相似之处

共同特点:

  • 都是间接访问:都提供了对另一个对象/变量的间接访问
  • 都避免拷贝:传递大型对象时都可以避免昂贵的拷贝操作
  • 都能修改原对象:通过指针或引用都可以修改所指向的对象

具体代码对比

#include <iostream>
using namespace std;void pointerExample() {int value = 10;int* ptr = &value;    // 指针int& ref = value;     // 引用cout << "原始值: " << value << endl;*ptr = 20;  // 通过指针修改cout << "指针修改后: " << value << endl;ref = 30;   // 通过引用修改cout << "引用修改后: " << value << endl;
}void functionParameters() {// 指针作为参数void updateWithPointer(int* ptr) {if (ptr) *ptr = 100;}// 引用作为参数void updateWithReference(int& ref) {ref = 200;}int num = 5;updateWithPointer(&num);  // 需要取地址updateWithReference(num); // 直接传递变量
}

主要区别

特性 指针 引用
语法 *ptr, &var &ref, 直接使用
空值 可以为 nullptr 必须初始化,不能为空
重绑定 可以指向不同对象 一旦绑定不能改变
内存占用 有自己的内存地址 是别名,不占额外内存
数组 支持指针算术 不能重新绑定

使用场景

// 推荐使用引用的场景
void processString(string& str) {  // 修改原字符串str += " processed";
}void printObject(const Object& obj) {  // 避免拷贝,只读访问cout << obj << endl;
}// 推荐使用指针的场景
void optionalParameter(int* optional = nullptr) {if (optional) {*optional = 42;}
}void dynamicAllocation() {int* arr = new int[100];  // 动态内存必须用指针// ... 使用 arrdelete[] arr;
}

现代C++建议

在现代C++中,通常优先考虑使用引用,除非你需要:

  • 处理可选参数(可能为空)
  • 进行动态内存管理
  • 需要重绑定指向不同的对象
  • 与C语言接口交互

引用提供了更安全、更直观的语法,减少了空指针和内存管理的风险。

http://www.zskr.cn/news/13826.html

相关文章:

  • 进程互斥的硬件实现方式(比较难懂的一节课,但是我搞懂了)
  • 【征文计划】基于Rokid眼镜平台的AR历史情景课堂创意应用 - 指南
  • 华清远见携STM32全矩阵产品及创新机器狗亮相2025 STM32研讨会,共启嵌入式工艺探索新程
  • 母线操作术语
  • 【Linux指令 (一)】Linux 命令行入门:从零开始理解Linux平台理论核心概念与基础指令
  • 完整教程:国检集团官网UI设计展示——专业界面设计实力呈现
  • HAProxy+keepalived+nginx实现高性能负载均衡集群 转发
  • 京东JoyAgent环境搭建与推理测试
  • 2025 年最新推荐 OCR 图片识别软件厂商权威排行榜:聚焦文字识别与表格转换优质服务商全景评测
  • 实用指南:Go tool pprof 与 Gin 框架性能分析完整指南
  • win10 环境变量不可编辑
  • 2025云南游选哪家?久游国际旅行社吃住超便利
  • .NET开发中3秒判断该用 IEnumerable 还是 IQueryable
  • 最想要的答案,一定不在备选项中
  • 【论文阅读 | IF 2025 | LFDT-Fusion:潜在特征引导的扩散 Transformer 模型在通用图像融合中的应用】 - 教程
  • PaddleLabel百度飞桨Al Studio图像标注平台安装和使用指南(包冲突 using the ‘flask‘ extra、眼底医疗分割材料集演示)
  • 订单模块
  • 手写MyBatis第78弹:装饰器模式在MyBatis二级缓存中的应用:从LRU到防击穿的全方案实现 - 指南
  • 2025最新四面刨厂家权威推荐排行榜:四面刨厂家实力品牌测评,含定制,高速,重型四面刨优选指南
  • Java之泛型使用教程
  • 单调栈优化DP [ROI 2018] Decryption
  • 手工调整pip whl 文件内容
  • vscode tunnel远程隧道访问 正确重启方法
  • 修复lazarus/fpc在windows不支持中文(三)总结
  • 2025工业冷水机、风冷式、螺杆式、小型、水冷式、实验室等多类型冷水机品牌排行榜,帮企业选靠谱设备
  • FreeFileSync 本地文件同步及开机自启
  • 2025 年最新留学中介机构 TOP3 权威推荐排行榜,深度解析留学机构服务特色与核心优势
  • 2025 年最新权威推荐!化妆品代工公司 TOP3 排行榜:OEM/ODM/ 一站式服务优质企业精选指南
  • 2025 年传感器品牌最新权威推荐排行榜:聚焦磁致伸缩等多类型传感器,传感器厂家选购指南!
  • MySQL数据误删或者误更新如何恢复25-9-29