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

C++中指针和引用的区别

在C++中,指针和引用都是用于间接访问变量的方式,但它们在底层实现和使用上有本质的区别。

一、指针


1、定义方式:

指针是一个变量,其值为另一个变量的地址,这意味着指针本身存储的是内存地址。

int var = 10; int* ptr = &var; // ptr是一个指向int类型变量的指针

2、空值:

指针可以有nullptr(C++11及以后版本)或NULL(在C++98中)作为空值。

int* ptr = nullptr; // C++11及以后 // 或者 int* ptr = NULL; // C++98

3、可以改变指向:

指针的值(即它所指向的地址)可以在程序运行时被改变,指向另一个变量或地址。

int x = 20; ptr = &x; // ptr现在指向x

4、解引用:

使用*操作符可以访问指针所指向的变量的值。

int value = *ptr; // value现在是20

5、用途:

指针通常用于动态内存管理(如使用new和delete),或者在需要操作地址或进行低级内存操作时使用。




二、引用

1、定义方式:

引用在定义时必须被初始化,并且一旦被初始化之后,它就一直引用那个变量,不能改变引用的目标(即不能让一个引用引用另一个变量)。

int var = 10; int& ref = var; // ref是对var的引用

2、空引用:

引用不能为空,必须在定义时被初始化。

int& ref; // 错误,引用必须初始化

3、不可变指向:

一旦一个变量被引用,就不能改变它引用的目标。

int x = 20; ref = x; // 错误,不能改变ref引用的目标

4、使用场景:

引用主要用于函数参数传递,特别是当你想要函数修改调用者的变量但又不想复制整个对象时。它还可以增加代码的可读性,使得变量的别名更加直观。

void func(int& x) { x = x + 1; // 直接修改原变量 }



三、总结

1、指针提供了灵活性,可以改变其指向的地址,适用于动态内存管理和需要底层操作的情况。
2、引用提供了不可变的别名,使得代码更加直观和易于理解,适用于参数传递以避免复制大型对象。
3、选择使用指针还是引用取决于具体的需求和上下文。
4、在实际编程中,合理地选择使用它们可以提高代码的效率和可读性。




C++ 中引用和指针的详细区别

https://blog.csdn.net/qq_40844444/article/details/145294231

C++ 指针和引用的区别

https://blog.csdn.net/qq_58271100/article/details/149727436

C++ 引用详解:引用和指针的区别;按值传递,按引用传递和按指针传递的区别

https://blog.csdn.net/pure_dreams/article/details/81217392

C++ 参数传递详解:值传递、指针传递、引用传递

https://blog.csdn.net/qq_22734027/article/details/145969095

C语言面试篇:指针和引用

https://blog.csdn.net/2503_90903957/article/details/157210099

C++ 中指针和引用的区别

https://www.runoob.com/w3cnote/cpp-difference-between-pointers-and-references.html



AtCoder Beginner Contest 361

https://blog.csdn.net/dllglvzhenfeng/article/details/144401882

AtCoder Beginner Contest ABC-361(2024.12.17)

https://blog.csdn.net/dllglvzhenfeng/article/details/144542009

AtCoder Beginner Contest 362

https://blog.csdn.net/dllglvzhenfeng/article/details/147540521

AtCoder Beginner Contest 363

https://blog.csdn.net/dllglvzhenfeng/article/details/148495117

AtCoder Beginner Contest 364

https://blog.csdn.net/dllglvzhenfeng/article/details/148495823

AtCoder Beginner Contest 365

https://blog.csdn.net/dllglvzhenfeng/article/details/148512601







AtCoder Beginner Contest 366

https://blog.csdn.net/dllglvzhenfeng/article/details/148512922

AtCoder Beginner Contest 367

https://blog.csdn.net/dllglvzhenfeng/article/details/148528928

AtCoder Beginner Contest 368

https://blog.csdn.net/dllglvzhenfeng/article/details/148529438

AtCoder Beginner Contest 369

https://blog.csdn.net/dllglvzhenfeng/article/details/148533573

AtCoder Beginner Contest 370

https://blog.csdn.net/dllglvzhenfeng/article/details/148534963




http://www.jsqmd.com/news/723794/

相关文章:

  • 通俗数学4-虚光子的数学拟合
  • c++primer类详解
  • 播客内容创作4个核心技巧,帮你稳定产出高质量吸粉内容
  • ARM MPAMSM_EL1寄存器解析与资源隔离技术
  • Prompt工程的反模式:那些让你的AI应用变差的常见错误
  • Oracle 数据库启动失败:ORA-29701、ORA-01565、ORA-17503 故障处理记录_20260429
  • 睡眠编译优化:软件测试从业者的专业效能提升指南
  • 跟着 MDN 学 HTML day_1:(全套原生Input+表单结构拆解)
  • 前端性能优化:JavaScript 性能优化详解
  • 房产看房记录口碑推荐|经筛选优质实用选择整理分享
  • baidupankey:极速一键智能获取百度网盘提取码的全自动解决方案
  • ARM PMSEVFR_EL1寄存器解析与性能监控实践
  • 【技术应用】PLA技术“点亮”蛋白互作,破解动脉粥样硬化新机制!
  • 2026年全国靠谱的网球场地租赁公司推荐,梅江南网球俱乐部上榜 - 工业品网
  • 2026最新鲁大师 6.2最终绿化版,去除无用功能和广告
  • 3步快速上手:用哔哩下载姬downkyi轻松搞定B站视频下载
  • 数据光合作用:软件测试从业者的专业视角
  • 【C++27安全红线】:3类已被标记为deprecated的异常传播模式(含std::exception_ptr隐式转换),9月30日前必须迁移!
  • Kubernetes集群基石:保姆级Containerd配置与CNI网络插件集成指南(含一键脚本)
  • 声定向系统改良设计——大功率集成化声频定向扬声器系统
  • 运维必看:如何用Java Oshi监控Linux服务器性能并接入Prometheus+Grafana
  • SeuratWrappers终极指南:如何在单细胞分析中轻松使用社区扩展工具
  • FDA新政落地,先觉生物类器官引领研发新变革
  • Go语言轻量级HTTP路由库Oatmeal:高性能微服务与API开发实践
  • 秘语盾技术博客:Ledger 设备恢复出厂设置教程
  • 分析2026年杭州靠谱美术集训推荐学校,哪家性价比高 - 工业品网
  • 泛微OA中如何实现,将选中的明细行数据内容,传送给其他系统或是单独存放
  • ADLINK Alder Lake-H COM模块技术解析与工业应用
  • 焦虑冷核聚变:软件测试从业者的技术焦虑与突破之道
  • 零基础药师用药指导入门指南,新手避坑看完就能直接上手