当前位置:首页 > C > 正文

C语言指针常量与常量指针详解(新手也能轻松掌握的C语言指针教程)

在学习 C语言指针常量常量指针 的过程中,很多初学者常常感到困惑。它们看起来很相似,但含义却完全不同。本文将用通俗易懂的方式,带你彻底搞清楚这两者的区别和用法,并掌握 C语言const用法 的核心要点。

C语言指针常量与常量指针详解(新手也能轻松掌握的C语言指针教程) C语言指针常量 常量指针 C语言const用法 C语言指针教程 第1张

一、什么是常量指针?

常量指针(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语言就成功了一半 ——