C++ const与指针:详解指向常量、常量指针及组合用法

小满
小满
发布时间:2026-10-16| 8人浏览过
原创

C++中const关键字修饰指针时,位置不同含义截然不同:左侧限定指向的内容不可变,右侧限定指针自身的存储地址不可变。理解这两种约束机制是编写安全C++代码的关键,本文将逐一解析指向常量的指针、常量指针及其组合用法的实际操作与边界。

C++ const与指针的核心区别

const关键字在C++中主要用于声明不可变量,当它与指针结合使用时,根据const位于星号(*)的左侧还是右侧,产生了两种截然不同的语义约束。第一种情况是指针指向的对象被保护为常量,防止通过该指针修改内存中的值;第二种情况是指针本身被声明为常量,即一旦初始化便不能改变其指向的内存地址。此外,还存在同时施加这两种限制的组合模式。

第1步:定义指向常量的指针

目的:确保指针只能用于读取数据,而不能修改所指向的目标对象。 操作入口:编译器语法检查模块 具体动作:将const置于星号之前,声明指针类型为指向常量。例如const int * p;表示p是一个指针,其指向的数据类型被标记为const int。

这种指针具有较大的灵活性,它既可以指向一个已存在的非常量变量,也可以指向常量。关键在于通过该指针无法进行写入操作:

int age = 23;
const int* p = &age; // 合法:指向非常量

const double price = 233;
const double* pt = &price; // 合法:指向常量

反之,尝试将一个const类型的变量赋值给非const指针是非法的,这会破坏常量性契约:const int age = 23;
int* p = &age; // 非法:丢失const属性

如果因特殊需求必须打破此限制,可以使用const_cast运算符进行强制转换移除const属性,但此举存在未定义行为风险,需谨慎使用。

值得注意的是,虽然通过指针p修改变量是非法的(*p = 233;报错),但直接访问原始变量并进行修改是完全合法的:age = 233;同样有效。此外,指向常量的指针本身允许改变其指向的地址:p = &price;是允许的。

第2步:定义常量指针

目的:锁定指针的存储地址,确保程序运行期间指针始终指向同一块内存区域。 操作入口:编译器语法检查模块 具体动作:将const置于星号之后,声明指针本体为常量。例如int* const p;。

常量指针在初始化后,其指向的地址便不可更改。然而,这并不影响对目标数据的读写权限。只要目标数据未被声明为const,即可通过解引用操作进行修改:

int age = 23;
int* const p = &age;
*p = 2333; // 合法:指针内容可修改
// p = &price; // 非法:指针地址不可修改

第3步:实现指针与内容的双重恒定

目的:构建完全只读的内存视图,既保护数据不被篡改,也固定数据来源。 操作入口:编译器语法检查模块 具体动作:将const同时置于星号的左右两侧。const int * const p = &age;。

这是最严格的指针定义方式。在此状态下,指针自身不能被重新赋值以指向其他地址,且通过该指针无法对指向的整型数据进行任何修改。这种模式常用于API接口设计,向调用者明确承诺“不修改传入数据且不追踪其他数据”。

以上就是C++ const和指针详细用法的详细内容,更多关于C++ const和指针的资料请关注本站其它相关文章!

相关标签:

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

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 算法库。