C语言指针常量与常量指针区别详解

陈默
陈默
发布时间:2026-10-16| 6人浏览过
原创

C语言面试中常问指针常量与常量指针的区别:指针常量是固定不变的“路标”,指向的地址锁定但内容可改;常量指针是只读的“相机”,可查看或改变观察对象但拍摄内容不可变。核心差异在于 const 修饰符相对于星号的位置。

核心概念与声明语法

在 C/C++ 中,区分两者的关键在于看 const 修饰的是谁。它放在指针变量名的左侧还是右侧:

  • 指针常量 (Pointer to Constant Variable):数据类型 * const 变量名。const 位于星号右侧,修饰指针本身。
  • 常量指针 (Constant Pointer):数据类型 const * 变量名 或 const 数据类型 *变量名。const 位于星号左侧,修饰指针指向的值。
  • 常量指针常量:const 数据类型 * const 变量名。

第1步:理解指针常量 (int *const)

目的**:理解如何将一个指针的指向固定下来,使其成为地址常量。

规则说明:将 const 写在指针操作符的右侧。这意味着指针变量自身保存的地址不能被修改,但该地址存储的内容可以被改写。

代码演示与结果分析:

int a = 10;
// 定义一个指针常量 p,初始指向 a
int *const p = &a;

// 编译报错:无法给常量赋值
// p = &b; 

// 正确:可以通过解引用修改 a 的值
*p = 50; // 此时 a 变为 50

第2步:理解常量指针 (const int *)

目的**:确保通过指针访问的数据不被意外修改。

规则说明:const 紧跟在数据类型后。这限制了通过该指针进行的写入操作,但不限制指针自身的移动。

代码演示与结果分析:

int b = 20;
// 定义一个常量指针 q
const int *q = &a;

// 正确:可以修改 q 的指向
q = &b; // q 现在指向 b

// 编译报错:不能通过常量指针修改值
// *q = 60;

第3步:完整实战对比程序

目的**:在一个程序中直观展示四种指针类型的不同行为。

入口**:编写测试函数并打印内存变化。

动作步骤**:

  1. 创建普通整型变量 `a` 和常量整型变量 `b`。
  2. 实例化四种指针并分别尝试修改其指向和内容。

运行状态与输出截图:以下为实际运行时的内存快照与数据对比,展示了修改前后的数值变化。

第4步:排错指南(常见问题排查)

真实操作顺序:

  • 错误现象 1**:`assignment of read-only location`。

    **原因**试图给定义为 const int * 的指针直接赋值新值(如 `q = &c` 时编译器报错了?不,这是对的。是指 `错误现象 2:`invalid conversion from 'const int*' to 'int*'`。

    **原因**试图将指向常量的指针赋给普通指针。由于普通指针可能修改值,而原值是只读的,这种转换会破坏常量性。

以上就是C语言中指针常量和常量指针的详细解析,更多关于C语言指针用法及进阶资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。