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 p。const 紧贴 * 右边,修饰的是指针变量自身,意味着这个指针初始化后就不能再指向别处。
- 禁止执行
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——蓝牙技术 带你实现终端间数据传输


// ✅ 必须初始化
*p = 99; // ✅ 合法:修改 a 的值
p = &b; // ❌ 编译错误:p 本身是 const