C++的常量指针和指针常量

本文详细解析了C/C++中三种指针概念:常量指针、指针常量及指向常量的指针常量。通过具体示例阐述了每种指针的定义、使用及注意事项。
1、常量指针
    指向常量的指针变量的定义和使用
    如:const int *p;
 
2、指针常量
    如:char* const p = "abcde";
    可以这么理解:
        const p的类型式char*,所以p是不可以再修改的。也就是所p必须是在定义时就已经初始化,并且不能再修改了。
 
3、指向常量的指针常量
    指向常量的指针常量
    如:const int* const p = &b;
    可以这么理解
        int* const p的类型时const,那么也就是所int* const p是不可以修改的。
        再看int* const p。const p的类型是int*,也就是p是不可以再修改的,并且它的类型是int*。
 
总结:
    不管指针的命名怎么变,都要把它分解开了看待。从最外的一层开始,一层一层往里面走,用“类型-对象”的眼光去看待这些命名。
### C++常量指针指针常量的区别及使用场景 #### 1. 常量指针(Pointer to Constant) - **定义**:常量指针是指向常量数据的指针,意味着通过该指针无法修改其所指向的数据内容[^2]。这种情况下,指针本身是可以变化的,但它始终指向一个不可变的对象。 - **声明形式**:`const int* ptr;` 或者 `int const* ptr;` 表示 `ptr` 是一个指向常量整数的指针。 ```cpp #include <iostream> using namespace std; int main() { const int a = 10; const int* ptr = &a; // 指向常量指针 // *ptr = 20; // 错误:不能通过此指针修改指向的内容 cout << "*ptr: " << *ptr << endl; // 可以读取指向的内容 } ``` #### 2. 指针常量(Constant Pointer) - **定义**:指针常量表示指针本身的值是固定的,在初始化之后不能再指向其他的地址[^3]。然而,它所指向的数据内容是可以被修改的(除非另外加上了 `const` 关键字)。 - **声明形式**:`int* const ptr = &var;` 表示 `ptr` 的值在初始化后固定不变。 ```cpp #include <iostream> using namespace std; int main() { int a = 10, b = 20; int* const ptr = &a; // 指针常量 *ptr = 30; // 正确:可以修改指向的内容 cout << "*ptr after change: " << *ptr << endl; // ptr = &b; // 错误:指针常量的值不能改变 } ``` #### 3. 组合情况 —— 常量指针常量(Constant Pointer to Constant) - 还有一种更严格的组合形式,称为常量指针常量,即指针本身以及它所指向的数据都是不可变的[^4]。 - **声明形式**:`const int* const ptr = &a;` ```cpp #include <iostream> using namespace std; int main() { const int a = 10; const int* const ptr = &a; // 常量指针常量 // *ptr = 20; // 错误:不能修改指向的内容 // ptr = &another_var; // 错误:指针自身的值也不能改变 } ``` --- #### 使用场景分析 ##### (1) 常量指针的应用场景 - 当需要保护某些数据不被意外修改时,应该采用常量指针的形式。这通常发生在函数间传递参数或者实现接口设计的时候,确保外部调用不会篡改内部敏感数据[^1]。 ##### (2) 指针常量的应用场景 - 若程序逻辑中有一处特定位置总是需要用到同一个资源,则可以用指针常量来锁定这个连接关系,从而减少因频繁重新赋值而导致的潜在错误风险。 ##### (3) 常量指针常量的应用场景 - 在一些特殊需求下,比如配置文件加载器或硬件寄存器映射等领域,可能要求既定地址上的数值在整个运行周期内都维持稳定状态,此时就可以利用这一特性构建安全可靠的编程模型[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值