当前位置: 首页 > 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.lryc.cn/news/600929.html

相关文章:

  • 鼎捷T100程序开发(双档程序开发)
  • Unity 实现帧率(FPS)显示功能
  • 手写PPO_clip(FrozenLake环境)
  • 智慧水库管理系统中标签工厂的建立方案
  • ARM SMMUv3控制器注册过程分析(八)
  • ISIS分片扩展实验案例
  • 【Android】内容提供器
  • Kubernetes 与 Docker的爱恨情仇
  • 1.安装anaconda详细步骤(含安装截图)
  • C++20 协程
  • ​机器学习从入门到实践:算法、特征工程与模型评估详解
  • 是德科技 | AI上车后,这条“高速公路”如何畅通?
  • 聚类-一种无监督分类算法
  • 聚类里面的一些相关概念介绍阐述
  • Digit Queries
  • OpenFeign-远程调用
  • 数据结构 二叉树(2)---二叉树的实现
  • excel删除重复项场景
  • HarmonyOS中的PX、 VP、 FP 、LPX、Percentage、Resource 详细区别是什么
  • 商汤InternLM发布最先进的开源多模态推理模型——Intern-S1
  • CUDA杂记--FP16与FP32用途
  • P2392 kkksc03考前临时抱佛脚
  • Linux——线程互斥
  • 【RHCSA 问答题】第 13 章 访问 Linux 文件系统
  • PYTHON从入门到实践-16数据视图化展示
  • 卫星通信终端天线对星之:参考星对星
  • DOM元素添加技巧全解析
  • 单片机CPU内部的定时器——滴答定时器
  • Linux DNS 服务器正反向解析
  • Mybatis学习之配置文件(三)