当前位置: 首页 > news >正文

【C++基础】指针常量 | 常量指针 | int* p | const int* p | int* const p| const int* const p

        const 修饰指针时常常让人感到困惑:const 到底修饰的是指针,还是指针所指的值? 

一、先了解什么是指针

        在 C++ 中,指针是一个变量,它的值是另一个变量的地址:

int a = 10;
int* p = &a;

        这表示:p 是一个指向 int 类型的指针,它保存了 a 的地址。 

二、指针与 const 的四种组合

1. int* p;

        普通指针:既可以修改指向的地址,也可以通过它修改值。

int a = 10;
int b = 20;
int* p = &a;
*p = 100;   // 修改 a 的值
p = &b;     // 修改指向

2. const int* p;

        指向常量的指针:不能通过指针修改值,但可以修改指向。

✅ 指针可以变
❌ 值不可以改

int a = 10;
const int* p = &a;
// *p = 100;   // ❌ 错误:不能修改 a 的值
p = nullptr; // ✅ OK:可以修改指向

3. int* const p;

        常量指针:指针一旦初始化后不能改指向,但可以修改值。

❌ 指针不能变
✅ 值可以改

int a = 10;
int* const p = &a;
*p = 100;   // ✅ OK:可以修改 a 的值
// p = &b;  // ❌ 错误:不能修改指向

4. const int* const p;

        指向常量的常量指针:既不能修改指向,也不能通过它修改值。

❌ 指针不能变
❌ 值不能改

int a = 10;
const int* const p = &a;
// *p = 100;  // ❌ 错误:不能修改值
// p = &b;    // ❌ 错误:不能修改指向

三、如何判断 const 修饰的是谁?

const 在 * 左边:修的是值;const 在 * 右边:修的是指针本身。

声明含义
const int* p值不能变,指针能变
int* const p值能变,指针不能变
const int* const p值和指针都不能变

四、真实应用场景举例

函数参数保护数据:

void printData(const int* data)
{// 不允许修改 data 指向的内容,安全性高
}

函数内部固定资源:

void useBuffer()
{static int buffer[10];int* const ptr = buffer; // 不允许 ptr 改变指向,防止意外错误
}
修饰形式能否修改值能否修改指向常见用途
int* p普通指针
const int* p只读访问
int* const p固定地址,值可变
const int* const p完全保护,不可变
http://www.xdnf.cn/news/1189261.html

相关文章:

  • 详解力扣高频SQL50题之619. 只出现一次的最大数字【简单】
  • PCIe 的L状态(链路状态)和D状态(设备状态)
  • 前端组件梳理
  • 【WPF】NumericUpDown的用法
  • 【CTF-WEB-反序列化】利用__toString魔术方法读取flag.php
  • 教育培训系统源码解析:如何打造高可扩展的在线学习平台?
  • 【CTF-Web】dirsearch寻找download.php进行?path=flag.txt任意文件下载
  • Android Studio 提示信息 ‘equals(““)‘ can be replaced with ‘isEmpty()‘
  • 《Java 程序设计》第 6 章 - 字符串
  • VTK交互——Callback
  • NLua和C#交互
  • 访问者模式感悟
  • 泰山派GPIO编译 ADB下载 万用表测量GPIO电压
  • 【ELasticsearch】节点角色分类与作用解析
  • OpenCV学习探秘之二 :数字图像的矩阵原理,OpenCV图像类与常用函数接口说明,及其常见操作核心技术详解
  • 分治算法 (Divide and Conquer)原理、及示例-JS版
  • AI 编程工具 Trae 重要的升级。。。
  • 经典IDE之Turbo C
  • nginx的 `root` 和 `alias` 笔记250726
  • 0.深度学习环境配置步骤
  • VTK交互——ClientData
  • 英语听力口语词汇-8.美食类
  • (AC)Playlist
  • 【橘子分布式】gRPC(番外篇-监听流)
  • 15.6 DeepSpeed+Transformers实战:LLaMA-7B训练效率提升210%,显存直降73%
  • 前端设计中如何在鼠标悬浮时同步修改块内样式
  • Cgroup 控制组学习(一)
  • 基于深度学习的图像分类:使用Inception-v3实现高效分类
  • 前端基础知识Vue系列 - 29(怎么处理vue项目中的错误)
  • vue 脚手架配置代理