const

来源:互联网 发布:手持式移动数据终端 编辑:程序博客网 时间:2024/05/22 13:57

http://blog.chinaunix.net/uid-26853826-id-3365403.html

const可以被指针修改的情况


转自:http://blog.sina.com.cn/s/blog_4762d6850100y1l1.html

先看以下的定义,指出哪些是非法的:

    int i;
    const int ic;       
    int const ic1;       
    const int *pic;    
    int *const cpi;   
    const int *const cpic;  
上面是会遇到的几种变量的定义,你能说出哪几个是非法的吗?至少我第一次看的时候,还以为全对了,然而我错了,现把分析写在下面,还望大家指正!

--------------------------------------------------
     int i;                    //正确:

    const int ic;        //错误:const类型的必须在定义时初始化

    int const ic1;        //错误:同上

    const int *pic;        //正确:pic自认为自己指向的是int类型的const常量,而其自身并不是const的,所以不必定义时初始化;既然是其自认为指向的是int类型的const常量,所以其所指向的也可以不是const常量;无论其所指的是不是const常量,既然自认为是,那就不能通过*pic来改变其值,但可以给pic重新赋值,指向新的变量;

    int *const cpi;        //错误:注意和上面的区别。这个定义中的cpi是一个指向int变量的const指针常量,也就是说cpi是一个常量,那么要在定义时完成初始化,并且以后也不能改变其所指,即使把自身再赋值给自己;虽然cpi是常量,但其所指的并不能是常量类型的指针,即不能是const int *。

    const int *const cpic;    //错误:本定义是对前两种的综合,也就是说cpic是一个指向int类型的const常量的cons指针常量,也就是说cpic本身是个常量,也自认为其所指变为常量。所以其定义时也必须先初始化
0 0
原创粉丝点击