C++中的指针常量和常量指针怎么区分?(const修饰符位置的差异)

发布时间 - 2026-01-12 00:00:00    点击率:
const在左边→指向内容不可变,右边→指针本身不可变;常量指针(const T)内容只读、指针可重定向;指针常量(T const)指针固定、内容可修改;二者兼具(const T const)则内容与地址均不可变。

const 在 * 左边还是右边,决定“谁不可变”

关键看 const 紧挨着谁:const* 左边 → 指向的内容不可变;const* 右边 → 指针本身不可变。中间有没有空格不影响语义,只看相对位置。

常量指针(pointer to const):内容不能改,指针可以换地址

写法是 const T* p 或等价的 T const* p。这里的 const 修饰的是 T,即它指向的那个值是只读的。

  • 允许执行 p = &b;(重新指向别的变量)
  • 禁止执行 *p = 42;(修改它当前指向的值)
  • 常见于函数参数,比如 void print(const int* p),保证函数不意外改原始数据
int a = 10, b = 20;
const int* p = &a;
*p = 30;   // ❌ 编译错误:不能通过 p 修改 *p
p = &b;    // ✅ 合法:p 可以指向别处

指针常量(const pointer):指针不能换地址,内容可以改

写法是 T* const pconst 紧贴 * 右边,修饰的是指针变量自身,意味着这个指针初始化后就不能再指向别处。

  • 禁止执行 p = &b;(指针值不可再赋值)
  • 允许执行 *p = 42;(它指向的值仍可修改)
  • 必须在定义时初始化,否则编译报错:T* const p; 是非法的
int a = 10, b = 20;
int* const p = &a;  // ✅ 必须初始化
*p = 99;            // ✅ 合法:修改 a 的值
p = &b;             // ❌ 编译错误:p 本身是 const

既是指针常量又是常量指针(const T* const)

写法是 const T* const p,两个 const 各管一摊:左边的管内容,右边的管指针变量。两者都不可变。

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

  • 不能改 *p
  • 不能改 p
  • 必须初始化
int a = 10;
const int* const p = &a;
*p = 5;    // ❌
p = &a;    // ❌
// 定义后就彻底只读 + 固定地址

最容易漏掉的是:当指针类型嵌套或带 typedef 时,const 的绑定对象容易误判。建议用「从右往左读」方式解析声明,比如 const int* const p 读作 “p 是一个 const 指针,指向一个 const int”。


# c++  # 编译错误  # typedef  # print  # 常量  # const  # int  # void  # 指针  # 指针类型  # pointer  # 对象  # 的是  # 是一个  # 都不  # 又是  # 就不  # 报错  # 只看  # 最容易  # 能再  # 绑定 


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


相关推荐: 成都网站制作公司哪家好,四川省职工服务网是做什么用?  JavaScript如何实现错误处理_try...catch如何捕获异常?  WordPress 子目录安装中正确处理脚本路径的完整指南  linux top下的 minerd 木马清除方法  如何用PHP工具快速搭建高效网站?  Linux后台任务运行方法_nohup与&使用技巧【技巧】  潮流网站制作头像软件下载,适合母子的网名有哪些?  如何在Windows虚拟主机上快速搭建网站?  Laravel怎么调用外部API_Laravel Http Client客户端使用  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  Python文件流缓冲机制_IO性能解析【教程】  常州企业网站制作公司,全国继续教育网怎么登录?  独立制作一个网站多少钱,建立网站需要花多少钱?  微信小程序 canvas开发实例及注意事项  Laravel如何处理CORS跨域请求?(配置示例)  如何生成腾讯云建站专用兑换码?  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  如何构建满足综合性能需求的优质建站方案?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  深入理解Android中的xmlns:tools属性  如何在橙子建站上传落地页?操作指南详解  Linux网络带宽限制_tc配置实践解析【教程】  Laravel如何记录自定义日志?(Log频道配置)  香港服务器选型指南:免备案配置与高效建站方案解析  香港服务器网站推广:SEO优化与外贸独立站搭建策略  Laravel API资源类怎么用_Laravel API Resource数据转换  JavaScript模板引擎Template.js使用详解  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  Laravel如何创建自定义Artisan命令?(代码示例)  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  如何在Windows 2008云服务器安全搭建网站?  php485函数参数是什么意思_php485各参数详细说明【介绍】  iOS UIView常见属性方法小结  制作电商网页,电商供应链怎么做?  javascript中闭包概念与用法深入理解  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  黑客如何通过漏洞一步步攻陷网站服务器?  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  Laravel怎么实现验证码(Captcha)功能  Laravel如何使用Collections进行数据处理?(实用方法示例)  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  香港服务器部署网站为何提示未备案?  黑客如何利用漏洞与弱口令入侵网站服务器?  百度浏览器如何管理插件 百度浏览器插件管理方法  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  Laravel如何配置Horizon来管理队列?(安装和使用)  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  如何用腾讯建站主机快速创建免费网站?  详解Android——蓝牙技术 带你实现终端间数据传输