C++常量和指针

C++常量和指针的定义:

 注:定义指针的技巧是在标识符的开始处读他,并从里向外读。

  1. 指向const的指针

①const int* u;

  表示:u是一个指针,它指向一个const int。这里不需要初始化,因为u可以指向任何标识符,也就是说,它不是一个const。但是它指向的值不能改变。

②int const* v;

  表示:v是一个指向恰好是const的int的普通指针。即意义与①一样。建议使用①

  1. Const指针

使指针本身成为一个const指针,必须把const标明的部分放在*右边

如:

①int* const w=&d;

表示:w是一个指针,这个指针是指向int的const指针。因为指针本身是一个const,因此需要给w设置初始值,这个值在指针的生命期间内不变,但是可以改变它所指向的值。: 所以 *w=2 是有效的

   ② int const* const x1=&d;

     Const int* const x2=&d;

    以上这两种做法是把一个const指针指向一个const对象,现在指针和对象都不能变。

### 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、付费专栏及课程。

余额充值