CL0419 发表于 2014-3-10 17:22:14

所谓的底层const和顶层const

const限定符:
        定义的一般形式:
                const 数据类型 常量名 = 常量值;
                数据类型 const 常量名 = 常量值;
        举例:
                const float PI = 3.14159f;
        注意事项:
                1. 常变量在定义时必须初始化;
                2. 常变量初始化之后,不允许再被赋值;


const限定符与指针
        const int * p;       //const在*左边,表示*p为常量,不可更改(经由*p不能更改指针所指向的内容)
                     //但指针p还是变量,想怎么变都可以。这就是所谓的底层const
        举例:
        int b = 22;
        const int * p;
        p = &b;
        //* p = 200;        //Error *p是常量,不能再对常量赋值

       
        int * const p = &b;//在声明的同时必须初始化,const在*的右边,表示p为常量,p所指向的地址
                          //是不可更改的,所以当把b的地址赋值给它时,会报错。这也就是所谓的顶层const
        举例:
        int b = 33;
        int c = 22;
        int * const p = &b;//在声明的同时必须初始化,const在*的右边,表示p为常量,p所指向的地址
                          //是不可更改的,所以当把b的地址赋值给它时,会报错
        //p = &c;        //Error p为常量


        const int *const p;//这个就相当于以上两种情况的混合体,p是常量,
                          //所以不能把test2的地址赋给p;同时*p也是常量,所以*p的内容不可更改;
        举例:
        int test1 = 10;
        int test2 = 20;
        const int * const p = &test1;
        p = &test2;        //Error,p是常量,所以不能把test2的地址赋给p;
        *p = 30;        //Error,*p是常量,所以*p的内容不可更改;
                       
页: [1]
查看完整版本: 所谓的底层const和顶层const