C++ 常量指针&指针常量

本文详细解析了C++中常量指针、指针常量及指向常量的指针常量的概念与使用场景,强调了const关键字的重要性,帮助读者掌握高级指针操作技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、常量指针


常量指针:顾名思义就是指向常量指针使用常量指针可以防止使用该指针来修改所指向的值。声明形式为const type *pttype const *pt

// 不希望函数内部修改参数的值(或者说是函数调用的值),例如求和但不希望改变原来的值
int sum(const int *pA, const int *pB) {
	int ans;
	//*pA += 1;  //error: assignment of read-only location ‘* pA’
	ans = *pA + *pB;
	return ans;
}
//------------------------
int value = 10;
const int const_value = 9;		// const变量
int *pt = &const_value;			// invalid  将const变量的地址赋给常规指针,不可行
//补充解释:若允许这样赋值,则可以通过pt来修改const_value的值,这使得变量定义的const很荒谬
const int *pt_const = &const_value;		// valid 将const变量的地址赋给const指针,可行

注:能用就尽可能使用const

  1. 可以有效避免无意间修改数据导致的错误
  2. 使用const作为函数形参,可接受const和非const类型实参,否则无法接受const实参

二、指针常量


指针常量:即数据类型为指针类型常量将指针本身定义为常量,可以防止改变指针所指向的位置。声明形式为type* const pt

int num;
int* const p_num = #

三、指向常量的指针常量


指向常量的指针常量:名字听起来绕,解释一下就是——本身是一个常量,类型为指针类型,它所指向的对象一个常量。声明形式为const type* const pt

const int value = 10;
const int* const pt = &value;
### C++常量指针的概念 在 C++ 中,常量指针(Pointer to Const)是指向常量数据的指针。这意味着指针所指向的数据不能被修改,但指针本身可以指向其他位置[^3]。 定义方式如下: ```cpp const int *ptr; // 或者 int const *ptr; ``` 这两种写法是等价的,都表示 `ptr` 是一个指向整型常量指针。 ### 常量指针的具体用法 当声明了一个常量指针后,无法通过该指针来更改其所指向对象的值。然而,可以让这个指针指向其他的内存地址。下面是一个具体的例子说明如何使用常量指针: #### 示例代码 ```cpp #include <iostream> int main() { int a = 10, b = 20; // 定义一个指向整数常量指针 ptr const int* ptr = &a; std::cout << "*ptr is " << *ptr << '\n'; // 输出: *ptr is 10 // 尝试解引用并修改它会引发编译错误 //*ptr = 15; // 错误:不允许这样做因为 *ptr 被视为 const 类型 // 可以让 ptr 指向另一个变量 ptr = &b; std::cout << "*ptr now points to " << *ptr << '\n'; // 输出: *ptr now points to 20 return 0; } ``` 这段程序展示了即使我们尝试改变由 `ptr` 所指向的对象的值也会失败,但是我们可以自由地使 `ptr` 自身重新绑定到新的目标上。 ### 关于常量指针的一些注意事项 需要注意的是,在某些情况下可能会遇到既希望保护数据又不希望允许指针移动的需求;这时就需要引入所谓的“双重恒定”,也就是常说的 **常量指针常量** (`const T* const`) ,这将在后续部分介绍[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值