首页 > 后端开发 > C++ > 正文

const指针和指针const区别 常量指针与指针常量详解

P粉602998670
发布: 2025-08-15 18:54:01
原创
846人浏览过

zuojiankuohaophpc++np>c++中const与指针结合时,关键在于const的位置:const在左边修饰数据,表示“常量指针”(如const int ptr),指针可变但不能修改所指向的值;const在右边修饰指针本身,表示“指针常量”(如int const ptr),指针不可变但可修改所指向的值;若两边都有const(如const int* const ptr),则指针和数据均不可变,必须在声明时初始化,适用于需要严格保护的场景,理解时可依据“左定值,右定向”口诀快速判断。</p>

const指针和指针const区别 常量指针与指针常量详解

在C++中,

const
登录后复制
关键字与指针结合使用时,容易让人混淆。常见的说法“const指针”和“指针const”其实并不准确,更规范的说法是“常量指针对”和“指针常量”,它们的含义完全不同,取决于
const
登录后复制
修饰的是指针本身,还是指针所指向的数据。

下面我们来详细解释:


一、常量指针(Pointer to const)——“指向常量的指针”

定义:指针可以指向不同的地址,但不能通过该指针修改所指向的数据。

语法形式

const int* ptr;
// 或
int const* ptr;
登录后复制

这两种写法是等价的,都表示“指向常量整数的指针”。

特点

  • 指向的数据是“常量”,不能通过
    ptr
    登录后复制
    去修改。
  • 指针本身可以改变,即可以指向其他地址。

示例

协和·太初
协和·太初

国内首个针对罕见病领域的AI大模型

协和·太初38
查看详情 协和·太初
int a = 10;
int b = 20;

const int* ptr = &a;
// *ptr = 30;  // 错误!不能通过ptr修改a的值
ptr = &b;       // 正确!ptr可以指向b
登录后复制

关键点

  • const
    登录后复制
    *
    登录后复制
    的左边,说明数据是常量。
  • 口诀:“左定值,右定向”——
    const
    登录后复制
    *
    登录后复制
    左边,值不能改。

二、指针常量(const pointer)——“常量指针(注意命名歧义)”

定义:指针本身是一个常量,即指针的指向不能改变,但可以修改它所指向的数据。

语法形式

int* const ptr = &some_variable;
登录后复制

特点

  • 指针一旦初始化,就不能再指向别的地址。
  • 可以通过指针修改它所指向的值。

示例

int a = 10;
int b = 20;

int* const ptr = &a;
*ptr = 30;      // 正确!可以修改a的值
// ptr = &b;   // 错误!ptr不能改变指向
登录后复制

关键点

  • const
    登录后复制
    *
    登录后复制
    的右边,说明指针本身是常量。
  • 必须在声明时初始化,因为之后不能再赋值。

三、指向常量的常量指针(const pointer to const)

定义:指针本身不能改变,指向的数据也不能通过该指针修改。

语法形式

const int* const ptr = &a;
登录后复制

特点

  • 指针不能重新指向其他变量。
  • 也不能通过指针修改所指向的值。

示例

int a = 10;
int b = 20;

const int* const ptr = &a;
// *ptr = 30;  // 错误!不能修改值
// ptr = &b;   // 错误!不能修改指针指向
登录后复制

适用场景:用于保护数据和指针本身,常用于函数参数中防止误操作。


四、如何快速判断?——看const的位置

记住这个简单规则:

  • const
    登录后复制
    *
    登录后复制
    左边:数据是常量 → 不能改值。
  • const
    登录后复制
    *
    登录后复制
    右边:指针是常量 → 不能改指向。
  • 两边都有
    const
    登录后复制
    :都不能改。

例子分析

声明 含义
@@######@@ 数据是常量,指针可变(常量指针)
@@######@@ 同上(等价写法)
@@######@@ 指针是常量,数据可变(指针常量)
@@######@@ 数据和指针都是常量

五、常见误区与注意事项

  • “常量指针” vs “指针常量”命名容易混淆

    • “常量指针”指的是指向常量的指针(
      const int* ptr
      登录后复制
      ),重点在“指向常量”。
    • “指针常量”指的是指针本身是常量(
      int const* ptr
      登录后复制
      ),重点在“指针是常量”。
  • 初始化要求

    • 指针常量(
      int* const ptr
      登录后复制
      )必须在定义时初始化,否则编译报错。
  • 函数参数中的使用

    const int* const ptr
    登录后复制

基本上就这些。理解的关键是分清

const int*
登录后复制
修饰的是
int* const
登录后复制
后面的类型(数据),还是
int* const ptr
登录后复制
本身(指针变量)。多写几个例子,结合“左定值,右定向”的口诀,很快就能掌握。

void func(const int* ptr);        // 防止函数内修改数据
void func(int* const ptr);        // 指针不能变,但数据可改(较少用)
void func(const int* const ptr);  // 最严格保护
登录后复制
const
登录后复制
*
登录后复制
*
登录后复制

以上就是const指针和指针const区别 常量指针与指针常量详解的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号