在学习 C语言指针常量 与 常量指针 的过程中,很多初学者常常感到困惑。它们看起来很相似,但含义却完全不同。本文将用通俗易懂的方式,带你彻底搞清楚这两者的区别和用法,并掌握 C语言const用法 的核心要点。
常量指针(Pointer to constant)是指指针所指向的内容不能被修改,但指针本身可以指向其他地址。
语法格式如下:
const int *ptr; 或者等价写法:
int const *ptr; 这两种写法完全等价!const 修饰的是它右边的类型(即 int),表示“指向一个整型常量的指针”。
#include <stdio.h>int main() { int a = 10; int b = 20; const int *ptr = &a; // ptr 指向 a printf("*ptr = %d\n", *ptr); // 输出:10 // *ptr = 30; // ❌ 错误!不能通过 ptr 修改 a 的值 ptr = &b; // ✅ 正确!ptr 可以指向 b printf("*ptr = %d\n", *ptr); // 输出:20 return 0;} 指针常量(Constant pointer)是指指针本身的地址不能被修改,但可以通过该指针修改它所指向的内容。
语法格式如下:
int * const ptr = &variable; 注意:const 紧跟在 * 后面,修饰的是指针变量 ptr 本身,表示“一个指向整型的常量指针”。
#include <stdio.h>int main() { int a = 10; int b = 20; int * const ptr = &a; // ptr 被初始化后不能再指向其他地址 *ptr = 30; // ✅ 正确!可以通过 ptr 修改 a 的值 printf("a = %d\n", a); // 输出:30 // ptr = &b; // ❌ 错误!ptr 是常量,不能重新赋值 return 0;} | 类型 | 声明方式 | 能否修改指针指向? | 能否修改指向的内容? |
|---|---|---|---|
| 常量指针 | const int *ptr | ✅ 可以 | ❌ 不可以 |
| 指针常量 | int * const ptr | ❌ 不可以 | ✅ 可以 |
一个简单的方法是:从右往左读 声明语句。
const int *ptr → “ptr 是一个指针,指向一个 const int” → 内容不可变。int * const ptr → “ptr 是一个 const 指针,指向一个 int” → 指针地址不可变。- 常量指针 常用于函数参数,防止函数内部意外修改传入的数据。例如:
void printArray(const int *arr, int size) { for (int i = 0; i < size; i++) { printf("%d ", arr[i]); // arr[i] = 0; // 编译错误!保护原始数据 }} - 指针常量 在需要固定指向某个内存地址(如硬件寄存器)时非常有用,确保指针不会被意外重定向。
掌握 C语言指针常量 与 常量指针 的区别,是深入理解 C 语言内存管理和 C语言const用法 的关键一步。希望这篇 C语言指针教程 能帮你打下坚实基础!多写代码、多调试,你很快就能熟练运用它们。
—— 学好指针,C语言就成功了一半 ——
本文由主机测评网于2025-12-22发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20251211556.html