当前位置: 首页 > 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.dtcms.com/a/300111.html

相关文章:

  • MyBatis-Plus 进阶功能:分页插件与乐观锁的实战指南
  • Codeforces Round 181 (Rated for Div. 2)
  • 哈尔滨←→南昌的铁路要道
  • 计算公式放配置
  • 【linux】keepalived
  • ART某板卡的软件位置
  • 每日一道算法题(九)
  • 【C/C++】Undefined reference: memset_s
  • 【seismic中的颜色】
  • ETF历史高频逐笔分钟数据解析
  • FastAPI入门:demo、路径参数、查询参数
  • Linux进程替换
  • Dynamic Model in RL
  • 渲染篇(二):解密Diff算法:如何用“最少的操作”更新UI
  • 【数据结构】二叉树初阶详解(二):实现逻辑与代码拆解(超详版)
  • 聚类-一种无监督分类算法
  • 中文语音识别与偏误检测系统开发
  • Redis的下载和安装(Linux)
  • 亚马逊全球物流(AGL)与Amazon SEND双重升级:重塑跨境电商物流新生态​
  • FastAPI入门:安装、Pydantic、并发和并行
  • Python应用:三局两胜制石头剪刀布游戏
  • VS Code + LaTeX 绘制电气图完全指南(含 PlantUML 样式参考)
  • 典型的 Vue 3 项目目录结构详解
  • Android中ViewStub和View有什么区别?
  • 过油防溅:3 步搞定 油星乱蹦
  • 具身视觉语言导航算法学习笔记
  • C++20 协程
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-27,(知识点:信号完整性,信号反射,串扰,时延,抖动,衰减)
  • 物联网统一网关:多协议转换与数据处理架构设计
  • useCallback/useMemo