C++Const修饰指针的三种效果
Posted 西科陈冠希
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++Const修饰指针的三种效果相关的知识,希望对你有一定的参考价值。
Const修饰指针的三种效果
const int*p=&a
当把 const 放最前面的时候,它修饰的就是 *p,那么 *p 就不可变。*p 表示的是指针变量 p 所指向的内存单元里面的内容,此时这个内容不可变。其他的都可变,如 p 中存放的是指向的内存单元的地址,这个地址可变,即 p 的指向可变。但指向谁,谁的内容就不可变。
这种用法常见于定义函数的形参。前面学习 printf 和 scanf,以及后面将要学习的很多函数,它们的原型中很多参数都是用 const 修饰的,这样做的好处是安全!我们通过参数传递数据时,就把数据暴露了。而大多数情况下只是想使用传过来的数据,并不想改变它的值,但往往由于编程人员个人水平的原因会不小心改变它的值。这时我们在形参中用 const 把传过来的数据定义成只读的,这样就更安全了。这也是 const 最有用之处。
所以如果你不想改变某个参数传过来的值,那么定义函数时就最好用 const 修饰这个参数,否则就不要用 const 修饰了。
int*const p=&a
此时 const 修饰的是 p,所以 p 中存放的内存单元的地址不可变,而内存单元中的内容可变。即 p 的指向不可变,p 所指向的内存单元的内容可变。
const int*const p=&a
此时 *p 和 p 都被修饰了,那么 p 中存放的内存单元的地址和内存单元中的内容都不可变。
综上所述,使用 const 可以保护用指针访问内存时由指针导致的被访问内存空间中数据的误更改。因为指针是直接访问内存的,没有拷贝,而有些时候使用指针访问内存时并不是要改变里面的值,而只是要使用里面的值,所以一旦不小心误操作把里面的数据改了就糟糕了。
以上是关于C++Const修饰指针的三种效果的主要内容,如果未能解决你的问题,请参考以下文章
C 语言const 关键字用法 ( 常量指针 - const 在 * 左边 - 修饰数据类型 - 内存不变 | 指针常量 - const 在 * 右边 - 修饰变量 - 指针不变 )