C++ const指针和指向const的指针 C++常量指针语法记忆口诀【易错】

发布时间 - 2026-01-30 00:00:00    点击率:
const位置决定指针语义:const在左边(如const int)表示指向const的指针,不可修改所指对象;在指针名右边(如int* const)表示const指针,不可修改指针本身;两者兼具则均不可变。

const 在 * 左边还是右边决定语义

判断一个指针声明是「指向 const 的指针」还是「const 指针」,只看 const 直接修饰谁:
const 紧挨 * 左边(如 const int*),表示「指向 const int 的指针」,即不能通过它修改所指对象;
const 紧挨指针名右边(如 int* const),表示「const 指针」,即指针本身不可再赋值指向

别处。

常见易错声明与对应错误行为

这些写法看着像,但语义完全不同,编译器报错位置也不同:

  • const int* p1 = &x; → 允许 p1 = &y;,但禁止 *p1 = 5;(报错:assignment of read-only location)
  • int* const p2 = &x; → 禁止 p2 = &y;(报错:assignment of read-only variable 'p2'),但允许 *p2 = 5;
  • const int* const p3 = &x; → 两者都禁止,p3*p3 都不可变

从右往左读口诀真有用

把声明当英语读,从右往左解析更可靠。例如:
int* const p → “p is const pointer to int” → p 是 int 的 const 指针
const int* p → “p is pointer to const int” → p 是指向 const int 的指针
const int* const p → “p is const pointer to const int”

这个顺序和 C++ 声明语法一致(类型修饰符从右向左绑定),比死记“左定值、右定址”更少歧义。

立即学习“C++免费学习笔记(深入)”;

函数参数中 const 指针的典型用法

实际编码里,const 指针多用于表达意图和避免意外修改:

  • 传入只读数据时用 const T*:如 void print(const char* s),确保函数内不改 s 所指字符串
  • 传入固定地址且不允许重绑定时用 T* const:少见,但可用于封装类内部缓存指针(如 Buffer* const m_buf
  • 返回局部 const 指针要小心:如 const int* get_ptr() { return &local; } 是悬垂指针,const 不解决生命周期问题

真正容易被忽略的是:const 修饰的是「通过该指针访问时的行为约束」,不是内存本身的只读性;底层内存仍可能被其他非 const 途径修改(比如同时存在 int* q = &x;const int* p = &x;)。


# 编码  # c++  # print  # 常量  # 封装  # const  # 字符串  # char  # int  # void  # 指针  # pointer  # 对象  # location  # 的是  # 报错  # 绑定  # 时用  # 往左  # 看着  # 都不  # 英语  # 只看  # 要小心 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 在线制作视频网站免费,都有哪些好的动漫网站?  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  零服务器AI建站解决方案:快速部署与云端平台低成本实践  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  js实现获取鼠标当前的位置  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  Python结构化数据采集_字段抽取解析【教程】  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  JavaScript数据类型有哪些_如何准确判断一个变量的类型  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  浅析上传头像示例及其注意事项  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  Android okhttputils现在进度显示实例代码  网站制作价目表怎么做,珍爱网婚介费用多少?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  香港服务器租用费用高吗?如何避免常见误区?  网站建设要注意的标准 促进网站用户好感度!  Laravel怎么使用artisan命令缓存配置和视图  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  php485函数参数是什么意思_php485各参数详细说明【介绍】  三星、SK海力士获美批准:可向中国出口芯片制造设备  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  如何用低价快速搭建高质量网站?  PythonWeb开发入门教程_Flask快速构建Web应用  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  网站建设整体流程解析,建站其实很容易!  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  高防服务器租用首荐平台,企业级优惠套餐快速部署  大连 网站制作,大连天途有线官网?  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  JavaScript Ajax实现异步通信  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  如何在搬瓦工VPS快速搭建网站?  Python并发异常传播_错误处理解析【教程】  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  ,怎么在广州志愿者网站注册?  详解Android——蓝牙技术 带你实现终端间数据传输  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  googleplay官方入口在哪里_Google Play官方商店快速入口指南  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  HTML 中动态设置元素 name 属性的正确语法详解  Android自定义控件实现温度旋转按钮效果  Laravel怎么实现模型属性的自动加密  Laravel如何优化应用性能?(缓存和优化命令)  如何快速搭建个人网站并优化SEO?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?