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

区分指向常量的指针、常指针和指向常量的常指针

这是 C++ 中非常经典的一个“指针修饰语”问题,其实理解起来并不难。我们来逐一拆解这些术语:


🌟 一分钟快速理解:

类型名含义是否能改值是否能改地址
const int* ptr指向常量的指针(const 是修饰 int)❌不能改值✅能改地址
int* const ptr常指针(const 修饰指针本身)✅能改值❌不能改地址
const int* const ptr指向常量的常指针❌不能改值❌不能改地址

🧠 为什么要区分这些?

这些修饰语设计的初衷是为了 提供更强的类型安全与表达意图

1. const int* ptr(指向常量的指针)

const int* ptr = &x;
  • 表示:你不能通过 ptr 来修改指向的数据(即 *ptr = ... 是非法的)。

  • 但可以改变它的指向(ptr = &y 是可以的)。

  • 用于 函数参数 时非常常见:传入但不能修改参数数据。

目的:保护数据不被误改,特别是函数内部。


2. int* const ptr(常指针)

int* const ptr = &x;
  • 表示:指针 ptr 一旦初始化,就不能再指向别的地址

  • 但你可以通过它修改指向的数据:*ptr = 10; 是允许的。

目的:用于实现固定指向(比如全局状态或系统资源)。


3. const int* const ptr(指向常量的常指针)

const int* const ptr = &x;
  • 既不能改值*ptr),也不能改地址ptr)。

  • 这是一种只读且不可变引用的实现方式。

目的:强制彻底只读。


💬 生活类比

想象你是一个管钥匙的管理员(ptr 是钥匙):

  • 🔑 const int* ptr:你可以把钥匙交给别人(换指向),但他们只能看,不能改门里内容。

  • 🔐 int* const ptr:你只能开这一扇门(不能换钥匙),但可以随便动里面的东西。

  • 🧱 const int* const ptr:你这把钥匙只能开这扇门,而且里面的东西你不能碰。


✨ 总结建议

在实际编程中建议:

  • 优先使用 const 修饰不应修改的参数(例如 const std::string&)。

  • 理解清晰你的目的:你是要锁住“指针”还是“指针指向的数据”?

  • 写代码时从右往左读更清楚
    例如:const int* const p 可读为 “p 是一个常量指针,指向一个常量 int”。

如果你常用的话,养成“从右向左读指针声明”的习惯,真的非常有帮助!


http://www.xdnf.cn/news/1751.html

相关文章:

  • OCP考试需要注意什么?
  • Python判断文本是不是注释方法
  • SAM12
  • 虚拟机系统介绍
  • 机器学习项目管理:团队协作与版本控制
  • Concepts (C++20)
  • 【Linux】网络基础和socket(4)
  • 访问者模式
  • HOJ.单词统计
  • 系统架构师2025年论文《系统架构风格2》
  • 生成运算树
  • AIP代码生成器——标准化接口开发智能工具
  • SpringMVC知识体系
  • 【MySQL数据库入门到精通-06 DCL操作】
  • 《数据结构之美--栈和队列》
  • 三格电子Profinet从站转EtherNet/IP从站网关:工业通信协议转换的桥梁
  • 每日Python 4.24
  • 动态自适应分区算法(DAPS)设计流程详解
  • 深度学习:迁移学习
  • 2025年04月24日Github流行趋势
  • 那些年开发踩过的坑
  • day002
  • C++/Qt中QActionGroup类用法
  • 100.HTB-Meow
  • Redis高级数据类型解析(二)——Set、Sorted Set与Geo实战指南
  • 怎么设定自动化测试目标?
  • AI打开潘多拉魔盒?当深度伪造成为虚假信息的核动力引擎
  • RAG 的完整流程是怎么样的?
  • 【扣子Coze 智能体案例四】五行八卦占卜智能体
  • ESP32_IDF_VScode安装多版本共存