Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1028939
  • 博文数量: 123
  • 博客积分: 5051
  • 博客等级: 大校
  • 技术积分: 1356
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-14 10:56
文章分类
文章存档

2012年(1)

2011年(21)

2010年(13)

2009年(55)

2008年(33)

分类: C/C++

2009-07-20 10:14:07

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) |
给主人留下些什么吧!~~