指向常量的指针,常量指针,指向常量的常量指针

本文详细解释了三种指针的概念:指向常量的指针、常量指针以及指向常量的常量指针,并通过实例说明了它们的使用场景及区别。

指针就是很让人头痛的了,然后再来常量指针,指向常量的指针,和指向常量的常量指针绝对会让你晕。

指向常量的指针也就是这个指针是指向常量的,所以是不要想去改变常量的值的,借TCPL中的例子来说一下:

const char * pc  = s;     //这里PC就是一个指向常量的指针了。它所指的值是不能变动的

char * const cp = s;      //这里的CP就是一个常量指针了,这个写法比较怪异的,记住就行了,它的地址是不能动的

const char * const cpc = s;    //这里的CPC就是一个指向常量的常量指针了。它的值和地址都不能动

一般看得比较多的还是指向常量的指针,这个记法也好记:

char * 就当作是字符串常量类型,它的常量自然就是在其前面加上一个CONST修符了。其它的两种见得用处比较少,了解一下。

 

### 指向常量常量指针(Constant Pointer to a Constant) 指向常量常量指针是一种同时修饰指针本身和指针指向内容的构造。这种类型的指针具有以下特性: - 指针本身是常量,不能被重新赋值指向其他地址。 - 指针指向的内容也是常量,不能通过该指针修改其指向的数据。 #### 定义方式 定义指向常量常量指针时,需要使用 `const` 两次。一次用于修饰指针指向的内容,另一次用于修饰指针本身。语法如下: ```cpp const int* const pointer = &variable; ``` 或者等价地写为: ```cpp int const* const pointer = &variable; ``` #### 示例代码 以下是一个完整的示例,展示如何定义和使用指向常量常量指针: ```cpp #include <iostream> using namespace std; int main() { const int value = 10; // 常量整数 const int* const ptr = &value; // 指向常量常量指针 cout << "Value: " << *ptr << endl; // 输出:Value: 10 // *ptr = 20; // 错误:不能通过 ptr 修改 value 的值[^4] // ptr = &anotherValue; // 错误:ptr 是常量指针,不能重新赋值 return 0; } ``` #### 解释 - 在上述代码中,`ptr` 是一个指向常量常量指针。它初始化为指向 `value` 的地址。 - 尝试通过 `ptr` 修改 `value` 的值会导致编译错误,因为 `ptr` 指向的是一个常量数据。 - 同样,尝试将 `ptr` 重新赋值为指向其他变量也会导致编译错误,因为 `ptr` 自身是一个常量指针。 #### 注意事项 - 如果仅使用 `const int*`,则表示指针指向的内容是常量,但指针本身可以重新赋值指向其他地址[^3]。 - 如果仅使用 `int* const`,则表示指针本身是常量,但可以通过指针修改其指向的数据[^3]。 - 只有当两者结合时,才会形成指向常量常量指针。 #### 使用场景 指向常量常量指针通常用于以下场景: - 当需要确保指针不会被重新赋值,并且指针指向的数据也不会被修改时。 - 在函数参数传递中,防止意外修改指针或其指向的数据[^5]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值