⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

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 * 参数并尝试修改它,看编译器的反应。

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 105 篇
0 完成
🔥 0