news 2026/4/30 7:12:44

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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




版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 7:12:13

如何在 iPhone 上恢复已删除的 iMessage?

您是否不小心删除了 iMessage 对话?或者您正在寻找恢复已删除的 iMessage 信息的方法?不用担心!无论您是意外删除了一条 iMessage 还是丢失了整个对话,本文都会教您几种有效的方法来恢复已删除的 iMessage。无论您是否有备份&…

作者头像 李华
网站建设 2026/4/30 7:10:32

开源AI智能体评估指南:从基准测试到技术选型实战

1. 项目概述:一个面向开源智能体的“华山论剑”最近几年,AI Agent(智能体)这个概念火得不行。从能帮你写代码的Devin,到能自主完成复杂任务的AutoGPT,再到各种垂直领域的工具,大家似乎都看到了一…

作者头像 李华
网站建设 2026/4/30 7:04:57

ADLINK Alder Lake-H COM模块技术解析与工业应用

1. ADLINK基于Alder Lake-H的COM模块技术解析在嵌入式系统领域,COM(Computer-on-Module)技术一直是实现高性能、标准化设计的关键方案。最近ADLINK推出的Express-ADP(COM Express Type 6)和COM-HPC-cADP(CO…

作者头像 李华
网站建设 2026/4/30 6:59:25

重载型工业安全地毯,机械作业安全防护优选

机械作业车间中,重型设备频繁移动、物料重载堆放,对地面防护材料的抗压、耐磨性能提出了极高要求,重载型工业安全地毯凭借其超强的承载能力和耐用性,成为机械作业安全防护的优选产品,全方位适配机械作业的复杂场景&…

作者头像 李华