c++中const与指针总结

一、const与指针一起使用

const与指针同时使用主要分为两种情况:(1)指针指向的内存地址里装的内容是不能被修改的。(2)指针只能指向一个初始地址,不能再指向其他地址。

(1)指针指向的是const类型的,它的意思是指针指向的内存里的内容是不能通过指针被修改的。它有两种写法。

const int* p; (推荐)

int const* p;

这两种写法的意思是一样的,前一种比较推荐。它的意思是指针p所指向的内容是const int类型的。即p所指向的内容是不能改变的。严格来说,应当是p所指向的内存所装的内容,是不能通过指针p来改变的。下面举个例子,

1 const int* p1;
2 int const* p2;//
3 int a=1,b=2;
4 p1=&a;//正确
5 p2=&b;//正确
6 cout<<*p1<<*p2<<endl;//此时*p1=1,*p2=2;
7 *p1=3;//编译错误,*p1的值不可以被改变
8 a=6;
9 cout<<*p1<<endl;//此时,*p1=6,可见p1所指向的内存里装的值仍然可以被改变的,只是不能通过指针p1来改变而已。

通过上述例子可以看出,其实p1所指向的那块内存的值是可以改变的,只不过不允许通过指针p1来改变而已。

(2)const指针,它只有一种写法:

int* const p=&a; (因为指针本身的值是不能被修改的所以它必须被初始化)

这种形式可以被理解为:p是一个const的指针(不能再指向其他地址了),这个指针是指向int 类型的。它指向的值是可以被改变的如*p=3(这时,a的值也被赋为了3);但指针本身是不能改变的,即p=&b是不允许的。

(3)指针本身和它指向的内容都是不能被改变的。比如:

const int* const p=&a;

int const* const p=&a;

上面两种写法是一样的,(3)(1)(2)的一个综合写法。

区分以上三点有个规律:指向const的指针(指针指向的内容不能被修改)const关健字总是出现在*的左边,而const指针(指针本身不能被修改)const关健字总是出现在*的右边,那不用说两个const中间加个*肯定是指针本身和它指向的内容都是不能被改变的。

最后,给出一段总的代码,来验证以上3个方面

#include <iostream>
 using namespace std;

 int main(int argc, char *argv[])
 {
     int a=3;
     int b;

     /*定义指向const的指针(指针指向的内容不能通过指针被修改)*/
     const int* p1;
     int const* p2;

     /*定义const指针(由于指针本身的值不能改变所以必须得初始化)*/
     int* const p3=&a;

     /*指针本身和它指向的内容都是不能被改变的所以也得初始化*/
     const int* const p4=&a;
     int const* const p5=&b;
    //(1)------------------------------------------------------------
      p1=p2=&a; //正确
      *p1=*p2=8; //错误,编译不通过(指针指向的内容不能被修改)
      a=4;
      cout<<*p1<<endl;//*p1=4,不通过指针p1,用其他方式是可以修改这块内存的。
    //(2)------------------------------------------------------------
      p3=p1; //错误,编译不通过(指针所指向的内存地址不能被更改)
      *p3=5; //正确,指针所指向的内存里装的值是可以变的
      cout<<*p3<<a<<endl;//输出*p3和a的值都是5,变量a的值也跟着指针被修改了。
    //(3)------------------------------------------------------------
      p4=p5;//错误,编译不通过 (指针本身和它指向的内容都是不能被改变)
      *p4=*p5=4; //错误,编译不通过(指针本身和它指向的内容都是不能被改变)

     return 0;
 }

 

参考博客:http://www.cnblogs.com/younes/archive/2009/12/02/1615348.htm,感谢相关博主。

posted on 2012-10-25 23:30  大油蛙  阅读(280)  评论(0编辑  收藏  举报

导航