您的位置:首页 > 其它

const和指针的交叉问题

2014-10-05 15:28 162 查看
一、const限定符

const用于声明一个常量,即这个量的值不允许被修改。咋一看类似Java中的关键字final。

const double cd = 3.14;
以后任何企图给cd常量赋值的行为,编译器都会报错。

这也提示我们,常量被赋值的唯一机会是在声明的地方(如果不赋值,编译器也会报错!)。

二、const指针

double cd = 3.14, cd2 = 3.14159;
double *const cpd = &cd; //声明
cpd = &cd2;              //非法:指向的地址不可以被改变
*cpd = 3.14159;          //合法:可以改变其指向的值,因为cd不是常量。
此处声明了一个指向double型的const指针cpstr:指向的地址不可以被改变,但是可以改变其指向的值(如果指向const对象,值同样不可被改变)。
这一点很容易理解。因为指针本身代表的就是地址嘛!

三、指向const对象的指针(一)

double cd = 3.14, cd2 = 3.14159;
const double *cpd = &cd; //声明
cpd = &cd2; //合法:指向的地址可以被改变
*cpd = 3.14159; //非法:不可以改变其指向的值。


指向const对象的指针既可以指向const量也可以指向非const量,但是编译器无法判断指向的是哪种情况,所以均不允许其改变所指向的值。 在实际的程序中指向const 的指针常被用作函数的形式参数它作为一个约定来保证被传递给函数的实际对象在函数中不会被修改。例如在实际的程序中, 指向常量的指针往往被用作函数参数

int strcmp( const char *str1, const char *str2 );

推荐一篇文章
http://www.cnblogs.com/xkfz007/archive/2012/02/27/2370478.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: