C const 指针
掌握 const 与指针的组合规则,理解指针常量、常量指针和指向常量的指针常量。 · 难度:入门 · +15XP
为什么需要 const 指针
在C语言中,const 用于定义不可修改的值。当与指针结合时,const 的位置决定了是“指针本身不可变”还是“指针指向的值不可变”,这有助于编写更安全的代码,防止意外修改。
三种基本形式
1. 指向常量的指针(Pointer to constant)
const int *ptr;
int const *ptr; // 等价写法指针指向的值不可通过该指针修改,但指针本身可以指向其他变量。
int a = 10, b = 20;
const int *p = &a;
// *p = 30; // 错误!不能修改值
p = &b; // 正确,指针可以改变2. 常量指针(Constant pointer)
int * const ptr;指针本身是常量,一旦初始化就不能指向其他地址,但可以通过它修改指向的值。
int a = 10, b = 20;
int * const p = &a;
*p = 30; // 正确,可以修改值
// p = &b; // 错误!指针不能改变3. 指向常量的常量指针(Constant pointer to constant)
const int * const ptr;两者都不能修改:指针不能换指向,也不能通过它修改值。
表格:const 指针速查
| 声明 | 指针可变? | 指向值可变? |
|---|---|---|
const int *p | 是 | 否 |
int * const p | 否 | 是 |
const int * const p | 否 | 否 |
函数参数中的 const 指针
常用于只读参数:
void print_array(const int *arr, int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
// arr[i] = 0; // 错误,不能修改
}
}这明确告诉调用者,函数不会修改数组内容。
练习提示
在右侧编辑器中,声明一个 const int *p 指向变量 x,尝试修改 *p 和让 p 指向另一个变量。然后改为 int * const p 重复实验,观察哪些操作合法。最后尝试定义一个函数,接受 const int * 参数并尝试修改它,看编译器的反应。