鱼C论坛

 找回密码
 立即注册
查看: 2524|回复: 0

[技术交流] 所谓的底层const和顶层const

[复制链接]
发表于 2014-3-10 17:22:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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的内容不可更改;
                         
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 12:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表