const 相关
2016-10-23 本文已影响0人
sharpeye_nba
1.常量指针与指针常量
常量指针是针对于普通指针而言,语义在于指向常量的指针;
定义:
<code>
const <type> *<_name>;
</code>
常量指针解引用无法对引用值进行改变,但是可以改变指针自己的值;
example:
<code>
int tmp = 0, tmp2 = 1;
const int p = &tmp;
p = &tmp2; // ok
p = 1;//error
</code>
指针常量语义指针本身为常量;解引用可以改变指向的值,但是不能改变指针本身的值:
<code><type> const <_name>;
</code>
example:
<code>
int tmp = 0, tmp2 = 1;
int const p = &tmp;
p = &tmp2; // error
*p = 1;//ok
</code>
typedef 与const
关于const有个地方特别容易出问题:
如下:
<code>
typedef int* int_p;
const int_p tmp;
</code>
这里的 tmp 到底是常量指针还是指针常量?一般的人会将typedef 直接替换那就理解为:const int_p tmp 与 const int* tmp相对应,其实这种理解是错的!!!
这里定义其实是一个指针常量;解释如下:
typedef的意义在于定义一个类型,也就是是int_p 并不是直接被int* 替换,const语义在于对于定义的类型为常量,所以这里语义上解释为指针常量,指针本身是常量。