您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> C/C++ >> 专题一:const 修饰的指针

专题一:const 修饰的指针

来源:网络整理     时间:2016/7/7 12:59:10     关键词:

关于网友提出的“ 专题一:const 修饰的指针”问题疑问,本网通过在网上对“ 专题一:const 修饰的指针”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 专题一:const 修饰的指针
描述:

///////////////////////////////////////////
//文章标题:const 修饰的指针。
//整理时间:2004/10/27
//整理人:  daylove
//来源:    c++ primer
///////////////////////////////////////////
    指针是c、c++里比较灵活的东东,稍微不注意就会引起错误,而const在这个时候出现似乎就是为了给指针找个好娘家,因为在飘也有累的时候,指针似乎安静了,真是如此吗?今天又看了大师的c++ primer,终于领会了它是怎么被驯化的。下面我把它帖上来和一些对此概念不清楚的朋友分享一下。
-----------------------
定义一个const对象的非const指针:
    const double *cptr;
    cptr 是一个指向double 类型的const 对象的指针。我们可以从右往左把这个定义读为cptr 是一个指向double 类型的被定义成const 的对象的指针。此中微妙在于cptr 本身不是常量我们可以重新赋值cptr 使其指向不同的对象但不能修改cptr 指向的对象。
例如:
    const double *pc = 0;
    const double minWage = 9.60;
    // ok: 不能通过pc 修改minWage
    pc = &minWage;
    double dval = 3.14;
    // ok: 不能通过pc 修改dval
    // 虽然dval 本身不是一个常量
    pc = &dval; // ok
    dval = 3.14159; // ok
    *pc = 3.14159; // 错误
    const 对象的地址只能赋值给指向const 对象的指针例如pc 但是指向const 对象的指针可以被赋以一个非const 对象的地址,例如:
    pc = &dval;
    虽然dval 不是常量,但试图通过pc 修改它的值仍会导致编译错误。因为在运行程序的任意一点上,编译器不能确定指针所指的实际对象。
----------------------------
定义一个const 指针指向一个const 或一个非const 对象,例如:
    int errNumb = 0;
    int *const curErr = &errNumb;
    curErr 是指向一个非const 对象的const 指针。我们可以从右拄左把定义读作curErr是一个指向int 类型对象的const 指针。这意味着不能赋给curErr 其他的地址值但可以修改curErr 指向的值。下面的代码说明我们可以怎样使用curErr:
do_something();
if ( *curErr ) 
{
    errorHandler();
    *curErr = 0; // ok: 重置指针所指的对象
}
试图给const 指针赋值会在编译时刻被标记为错误
curErr = &myErrNumb; // 错误
--------------------------------------------------------------
指向const 对象的const 指针的定义就是将前面两种定义结合起来,例如:
    const double pi = 3.14159;
    const double *const pi_ptr = π
    在这种情况下pi_ptr 指向的对象的值以及它的地址本身都不能被改变。我们可以从右往左将定义读作pi_ptr 是指向被定义为const 的double 类型对象的const 指针。


以上介绍了“ 专题一:const 修饰的指针”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2380136.html

相关图片

相关文章