const
2026/7/9大约 2 分钟
const
const的核心作用:限制修改,约束接口。
一、修饰变量
const int a = 10;
a = 20; // ❌ 编译错误嵌入式中,const 全局数据通常可放在 Flash 的只读区域(如 .rodata),减少 RAM 使用。
二、修饰指针
1. const int *p
指向的数据不能改,指针可以改。const的右边是返回值int,修饰指针指向的数据
int x = 10, y = 20;
const int *p = &x;
*p = 100; // ❌
p = &y; // ✅理解:
const int ← 修饰 int2. int * const p
指针不能改,指向的数据可以改。const,右边是指针,所以修饰指针
int x = 10, y = 20;
int * const p = &x;
*p = 100; // ✅
p = &y; // ❌3. const int * const p
指针和指向的数据都不能改。
int x = 10;
const int * const p = &x;
*p = 100; // ❌
p = &y; // ❌记忆
const int *p → 内容不能改
int * const p → 指针不能改
const int * const p → 两者都不能改三、修饰函数参数
void print_string(const char *s)
{
printf("%s\n", s);
s[0] = 'X'; // ❌
}表示:
函数只读取数据,不通过
s修改数据。
常见接口:
size_t strlen(const char *s);
char *strcpy(char *dest, const char *src);dest 可修改,src 只读。
四、修饰返回值
常用于返回内部数据时,防止调用者修改:
const char *get_name(void)
{
return dev.name;
}调用:
const char *name = get_name();
name[0] = 'X'; // ❌五、C++:const 成员函数
class Sensor
{
int value;
public:
int getValue() const
{
return value;
}
void setValue(int v)
{
value = v;
}
};const 成员函数:
承诺不修改对象状态。
因此:
const Sensor &s;
s.getValue(); // ✅
s.setValue(50); // ❌最终记忆
const 变量
→ 不能修改变量
const int *
→ 不能修改指向的数据
int * const
→ 不能修改指针
const int * const
→ 两者都不能修改
const 函数参数
→ 函数不能通过参数修改数据
C++ const 成员函数
→ 不能修改对象状态
