[经验分享] const指南

[复制链接]
46|9
xiaoyaodz 发表于 2026-1-30 10:15 | 显示全部楼层 |阅读模式
代码, TI, ST, pi, ID, in
基本词义

意思就就是说利用const进行修饰的变量的值在程序的任意位置将不能再被修改,就如同常数一样使用!

使用方法


  1. const int a=1;//这里定义了一个int类型的const常数变量a;

但对于指针来说const仍然是起作用的,以下有两点要十分注意,因为下面的两个问题很容易混淆!

我们来看一个如下的例子:
  1. <p>
  2. </p><p>#include <iostream> </p><p>
  3. </p><p>using namespace std; </p><p>
  4. </p><p>void main(void) </p><p>
  5. </p><p>{ </p><p>
  6. </p><p>const int a=10; </p><p>
  7. </p><p>int b=20; </p><p>
  8. </p><p>const int *pi; </p><p>
  9. </p><p>pi=a; </p><p>
  10. </p><p>cout <<*pi << "|" << a <<endl; </p><p>
  11. </p><p>pi=b; </p><p>
  12. </p><p>cout <<*pi << "|" <<b <<endl; </p><p>
  13. </p><p>cin.get(); </p><p>
  14. </p><p>} </p>

上面的代码中最重要的一句是 const int *pi

这句从右向左读作:

pi是一个指向int类型的,被定义成const的对象的指针;

这样的一种声明方式的作用是可以修改pi这个指针所指向的内存地址却不能修改指向对象的值。

  如果你在代码后加上*pi=10;这样的赋值操作是不被允许编译的!

请看如下的代码

  1. <p></p><p>
  2. </p><p>#include <iostream> </p><p>
  3. </p><p>using namespace std; </p><p>
  4. </p><p>void main(void) </p><p>
  5. </p><p>{ </p><p>
  6. </p><p>int a=10; </p><p>
  7. </p><p>const int *const pi=a; </p><p>
  8. </p><p>cout <<*pi << "|" <<a <<endl; </p><p>
  9. </p><p>cin.get(); </p><p>
  10. </p><p>} </p>

上面的代码中最重要的一句是 const int *const pi

这句从右向座读作:

pi是一个指向int类型对象的const指针;

这样的一种声明方式的作用是你既不可以修改pi所指向对象的内存地址也不能利用指针的解引用方式修改对象的值;

所以你如果在最后加上*pi=20,想试图通过这样的方式修改对象a的值是不被允许编译的!

作业粉碎机 发表于 2026-2-3 07:19 | 显示全部楼层
例子中的代码很好地展示了const在指针中的应用,第一种情况只能改变指针指向
jackcat 发表于 2026-2-6 11:00 | 显示全部楼层
const是 C/C++ 中的关键字,用于定义"常量",但更准确地说,它定义了只读变量——编译器会阻止对其进行直接修改。
qiufengsd 发表于 2026-2-6 11:05 | 显示全部楼层
只读寄存器用const volatile,可写寄存器用volatile
juliestephen 发表于 2026-2-6 12:10 | 显示全部楼层
它提升代码可读性、安全性、可维护性
averyleigh 发表于 2026-2-6 12:48 | 显示全部楼层
const 指针参数接收普通指针,引发编译警告
1988020566 发表于 2026-2-6 13:03 | 显示全部楼层
编译器会将带有 const 修饰的全局变量直接链接到 Flash存储区。程序运行时,MCU 直接去 Flash 读数据,完全不占用宝贵的 RAM。这在单片机资源紧张时是救命稻草。
louliana 发表于 2026-2-6 13:33 | 显示全部楼层
const 是编译期约束,不是运行时保护。通过指针强转可绕过
tifmill 发表于 2026-2-6 16:25 | 显示全部楼层
如果不修改参数,就用const指针或const引用
adolphcocker 发表于 2026-2-7 09:42 | 显示全部楼层
const 只限制通过该指针/引用的修改,不限制原始变量。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

5126

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部
0