Chinaunix首页 | 论坛 | 博客
  • 博客访问: 489082
  • 博文数量: 137
  • 博客积分: 3874
  • 博客等级: 中校
  • 技术积分: 1475
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-05 10:50
文章分类

全部博文(137)

文章存档

2011年(37)

2010年(100)

分类: C/C++

2011-01-22 16:37:59

今天看书看到一个  const char * const * array;   登时眼就晕了...

后来仔细分析分析, 又加以自己的乱加推测, 算是搞明白了~~

const 就是拿来声明常变量的, 被声明的那些值不可以被改变,若尝试改变之,编译器就不干了

int non_const_ival = 10;    int another_non_const_ival

const int const_ival = 10;     int const const_ival = 10;   //  val 常量为整型常量  将val 看做一个变量,val的值是不可以被改变的。

 

const int *pival = &non_const_ival;                int const *pival = &non_const_ival;      

//  这下子被声明为常量的就是 (*pival) 了, 故而(*pival) 便是不可改变的了, 然而 pival 却是可以改变的,

//  如:  pival = &another_non_const_ival;     这是完全可以的, pival 指向新的数据, 同时 (*pival) 依然不可被改变

 

const int * const pival = &non_const_ival;      int const * const pival = &non_const_ival;

//   上面的 从右往左考虑,  首先 const pival  说明 pival 是常量, 就是这个指针的值不可以被改变; 继续往左看

//   是说 (* const pival)  是常量, 也就是所指向的值不可被改变。  故而: pival = & another_non_const_ival;  非法

//   同时  *pival = 20;   也非法

 

其实就是把类型说明符去掉后  const 右边的一大堆整体 是常量;  要么是指针  要么是 (*指针)  或者更高级的指针,像开篇那里的:

const char * const * array ;         //   二级指针

//    首先 const * array;   说明array指向的 一个指向字符串的指针数组  的值不可被改变

//   其次   const **array;  说明 (**array) 不可被改变,  就是字符串不能被篡改;

 

class Test { int ival; };

类里面的 const:

const Test Test::add ( const Test & rhs) const       //  类的成员函数

{

Test temp;

// ......

return temp;

}

//  右边的 const  限制这个函数体内 不可以对调用这个函数的 对象进行任何更改, 就是 私有变量 ival 的值不可改变

//  中间的  const   限制作为引用形参传递过来的  对象 不能被篡改   rhs.ival   值改变就非法

//  左边的 const  是指 返回的值不可以被篡改, 如下:

Test t1,t2,t3;

t1.doIt( t2) = t3;    //    返回的值 被篡改,  非法了, 虽然一般不会这么些...     

 

归根结底就是在声明变量时,  const 右边的一大堆那个整体 是常量; 
阅读(2012) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

niuniu2006t2011-01-26 20:22:15

mhsy2003: char const * const * const   array;.....
全是const

mhsy20032011-01-24 15:44:17

char const * const * const   array;

mhsy20032011-01-24 15:43:45

char * *   array;
char * const *   array;     
char const * const *   array;