Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1346851
  • 博文数量: 370
  • 博客积分: 10654
  • 博客等级: 中将
  • 技术积分: 4396
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 15:44
文章分类

全部博文(370)

文章存档

2012年(36)

2011年(195)

2010年(139)

分类: C/C++

2010-11-06 21:35:57

    前些日子再看《c++与面向对象》那本书的时候,遇到了const这个限定符,书中举了许多“const”位置不同的例子看得我头晕,例如,int * const p  、 int const * p 、const int *p 。今天我誊出了一个下午的时间对指针与const限定符做了一个全面的总结。应该还会又不完善的地方,以后回继续补充修改。
    当用const限定指针时,需要注意常用的以下五类:

    一),指向非常量的非常量指针(不使用const)
     例如,int val1,val2;
          int *p;
          val1 = 10;
          val2 = 20;
          p = &val1;
          p = &val2;
          *p += 10;

    二),指向常量数据的非常量指针
         const int * p
         p是指向常整数的指针,即p指向的整数是不能通过p来修改的,即不能通过*p来修改该整数,但这并不意味着该整数是不可修改的,实际上可以通过其他途径来修改。
    例如,int  i,j;
         const int *p;     //p是一个指向常量数据的指针,是变量,所以修改p本身是允许的,但*p=5是错误的。
         p = &j;  //允许
         p = &i;   //允许
         i = 10;  //允许
         *p = 5;  //不允许

    三),指向非常量数据的常量指针
         int * const p;

         如果想声明一个不可修改的指针变量,保证该指针总是指向固定的内存地址,则需要定义常量指针。
         int var;
         int * const p = &var;
         //声明p的同时对p进行初始化,通过这个声明,p定义为一个指向整数的常量指针。这意味着p指向的整数通过p是可修改的,但是本身的值在初始化后,就不能杂修改了,也就是说,p只能永远指向变量var,另外,由于声明了p是指向整型变量的,也不能将const修饰的整型变量的地址赋给p

         例如,const int var;
              int * const p = &var;     //错误  var是一个常量

    四),指向常量数据的常量指针
        用const同时限定指针和指针指向的数据
        const int val = 10;
        const int * const p = &val;
        val是一个常整型变量,初始化后不可在修改;p是一个指向长整数的常量指针,p本身在初始化指向val后也不能被修改,同时也不能通过p修改它所指向的变量。

    五),const用于传递函数参数
        传值:不会破坏实参,但传递参数时要复制数据,如果参数存储空间较大在时间与空间上效率低。
        传引用:传递的数据量小,在时间与空间上效率较高,但被调用函数可以操作实参,可能带来完全的隐患
         
阅读(781) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~