C++——常量指针和指针常量

常量指针和指针常量

1. 常量指针

  • 定义: 指针指向的内存地址中的值是常量,不能通过该指针修改指向的值,但指针本身可以指向其他地址。

  • 声明: const 数据类型 * 指针变量名;

    ini 复制代码
    int a = 10;
    int b = 20;
    const int *pa1 = &a; // pa1 是一个指向常量整数的指针
    // *pa1 = 30;  // 错误!不能通过 pa1 修改 a 的值
    pa1 = &b;      // 正确!pa1 可以指向其他地址

2. 指针常量

  • 定义: 指针本身是一个常量,一旦初始化后,它所指向的地址不能改变,但可以通过该指针修改指向的内存地址处的值。

  • 声明: 数据类型 * const 指针变量名;

    • 例如:

      ini 复制代码
      int a = 10;
      int b = 20;
      int *const pa2 = &a; // pa2 是一个指向整数的常量指针
      *pa2 = 30;      // 正确!可以通过 pa2 修改 a 的值
      // pa2 = &b;      // 错误!pa2 不能指向其他地址
  • 理解: const 修饰的是 pa2,即指针本身。

3. 指向常量的指针常量

  • 定义: 指针本身是常量,并且它指向的内存地址中的值也是常量,两者都不能被修改。

  • 声明: `const 数据类型 * const 指const int * const pa3 = &a; // pa3 是一个指向常量整数的常量指针

    ini 复制代码
    // *pa3 = 30; // 错误!不能通过 pa3 修改 a 的值  
    // pa3 = &b; // 错误!pa3 不能指向其他地址  
  • 理解: 两个 const 各司其职,第一个 const 修饰 *pa3,表示不能通过 pa3 修改指向的值;第二个 const 修饰 pa3,表示 pa3 的指向不能修改。

🤔 记忆技巧: 从右向左读有助于理解。

  • const int * pa: pa 是一个指针,指向 const int (常量整数)。
  • int * const pa: pa 是一个 const 指针,指向 int (整数)。
  • const int * const pa: pa 是一个 const 指针,指向 const int (常量整数)。
相关推荐
架构技术专栏1 小时前
Agent 工具调用:从工具声明到执行反馈
前端·人工智能·后端
码事漫谈2 小时前
你让AI干的活,它可能只干了十分之一——而你根本看不出来
后端
Wx-bishekaifayuan2 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游
Wx-bishekaifayuan3 小时前
springboot汉中旅游服务平台41442-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
WeiXin_DZbishe3 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
WeiXin_DZbishe3 小时前
基于Springboot+AI的kuall音乐广场的设计与实现-计算机毕设 附源码【课程设计】12715
vue.js·人工智能·spring boot·后端·python·php·课程设计
A接拉起0074 小时前
2026 年 JavaScript 开发者需要了解的知识
前端·javascript·后端
Bazingga4 小时前
RAG评测体系保姆级教程:生产级实践指南
后端
tachibana25 小时前
使用for range 的时候,它的地址会发生变化吗?
开发语言·后端·golang·go·语法
蜗牛互联网5 小时前
GPT-6 与 Intelligent UI:从回答到可审计操作的产品迁移
java·人工智能·后端