0

0

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

P粉602998670

P粉602998670

发布时间:2025-08-15 18:54:01

|

876人浏览过

|

来源于php中文网

原创

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

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

在C++中,

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

下面我们来详细解释:


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

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

语法形式

const int* ptr;
// 或
int const* ptr;

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

特点

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

示例

BibiGPT-哔哔终结者
BibiGPT-哔哔终结者

B站视频总结器-一键总结 音视频内容

下载
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
*
*

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1463

2023.10.24

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

520

2023.09.20

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

315

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

534

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

51

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

194

2025.08.29

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

78

2026.01.09

c++框架学习教程汇总
c++框架学习教程汇总

本专题整合了c++框架学习教程汇总,阅读专题下面的文章了解更多详细内容。

45

2026.01.09

学python好用的网站推荐
学python好用的网站推荐

本专题整合了python学习教程汇总,阅读专题下面的文章了解更多详细内容。

118

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
极客学院Java8新特性视频教程
极客学院Java8新特性视频教程

共17课时 | 3.7万人学习

极客学院Java8新特性视频教程
极客学院Java8新特性视频教程

共17课时 | 3.7万人学习

C# 教程
C# 教程

共94课时 | 6.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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