c++中的指针和const
可以使用两种不同的方式将const关键字用用于指针,第一种方法是让指针指向一个常量对象,这样可以防
止使用该指针来修改所指的值,第二种方法是将指针本身声明为常量,这样可以防止改变指针指向的位置。
例如:
int age = 90;
const int *pt =&age;
现在如果想改变age的值能使用的方法为:age = new_value;
但是不能使用*pt=new_value来改变age的值,可以这样理解,pt指向的地址对应的值为常量,如果使用pt
来更改指向地址的值,明显地,这是不允许的,但是可以通过变量本身age来改变age的值。
这里要区分const int *pt和int *const pt,这两者的区别应该是比较简单的,第一个是一个指针pt,
指向的位置对应的值为常量,第二个则说明pt是个常量,即pt指向的位置不能被更改,例如下面的代码是
行不同的:
int age;
int number;
int *const ptr = &age;
ptr = &number;
还有一种情况,将const的地址赋给常规指针,这样的操作是不允许的,例如:
const int age = 90;
int *p = &age;
我们可以这样来分析,如果上面的操作可以,那么我们可以改变指针p指向位置的值,即可以进行类似于下
面的更新操作:
*p = new_value;
这样结果就与之前声明的const int age相矛盾,因为age为int型常量,*p改变了age的值。
当然,如果非要这样做,可以使用强制类型转换来突破这样的限制。
还有一类情况,即声明只想const对象的const指针:
double trouble = 2.0;
const double * const stick = &trouble;
这里的结果就是stick是常量,stick指向的位置的值也是不变的,即*stick也是常量.
应用:我们将指针作为函数参数来传递时,可以使用指向const的指针来保护数据.
阅读(932) | 评论(0) | 转发(0) |