首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >const int *p 和 int *const p的区别

const int *p 和 int *const p的区别

作者头像
YueXuan
发布2025-08-19 12:08:43
发布2025-08-19 12:08:43
8200
代码可运行
举报
运行总次数:0
代码可运行

在 C++ 中,const int *pint *const p 是两种不同的指针声明方式,它们的核心区别在于 const 修饰的对象不同,导致指针的行为不同。以下是详细对比:


1. const int *p(或 int const *p

含义: • 指针 p 可以指向不同的内存地址。 • 不能通过 p 修改其指向的数据(数据是常量)。 • 用途: 用于保护数据不被意外修改,常用于函数参数传递只读数据。

示例

代码语言:javascript
代码运行次数:0
运行
复制
int a = 10, b = 20;
const int *p = &a;  // 正确:p 指向 a(a 不需要是 const)
// *p = 15;         // 错误:不能通过 p 修改 a
p = &b;             // 正确:p 可以指向其他地址

2. int *const p

含义: • 指针 p 的地址不可变(指针本身是常量)。 • 可以通过 p 修改其指向的数据(数据可变)。 • 用途: 用于固定指针的指向地址,但允许修改数据(如硬件寄存器操作)。

示例

代码语言:javascript
代码运行次数:0
运行
复制
int a = 10, b = 20;
int *const p = &a;  // p 必须初始化且无法修改地址
*p = 15;            // 正确:可以通过 p 修改 a 的值
// p = &b;          // 错误:p 的地址不可变

3. 组合形式:const int *const p

含义: • 指针 p 的地址不可变。 • 也不能通过 p 修改其指向的数据。 • 用途: 完全固定指针和数据,适用于只读且地址固定的场景(如全局常量)。

示例

代码语言:javascript
代码运行次数:0
运行
复制
const int a = 10;
const int *const p = &a;  // p 指向 a,且不可修改地址和数据
// *p = 20;               // 错误:数据不可修改
// p = nullptr;           // 错误:指针地址不可修改

对比表格

声明形式

指针地址是否可变

指向数据是否可变

典型场景

const int *p

传递只读数据

int *const p

固定地址,允许修改数据

const int *const p

完全固定指针和数据


记忆口诀

const* 左侧数据不可变。 • const* 右侧指针不可变


实际应用场景

const int *p

代码语言:javascript
代码运行次数:0
运行
复制
void printData(const int *arr, int size) {
    // 保证函数内不会修改 arr 指向的数据
    for (int i = 0; i < size; i++) {
        cout << arr[i] << " ";
    }
}

int *const p

代码语言:javascript
代码运行次数:0
运行
复制
int buffer[100];
int *const ptr = buffer;  // ptr 始终指向 buffer 首地址
*ptr = 1;                 // 允许修改数据

掌握 const 与指针的组合使用,能有效提升代码的安全性和可读性!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. const int *p(或 int const *p)
  • 2. int *const p
  • 3. 组合形式:const int *const p
  • 对比表格
  • 记忆口诀
  • 实际应用场景
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档