美文网首页C/C++知识点
一、C++中的const、define

一、C++中的const、define

作者: 木鱼_cc | 来源:发表于2018-06-01 15:09 被阅读4次

    C 语言中

    在C语言中,const是个假语法,const 中的变量可以通过指针修改,例如:

    int const 和 const int 等价
    const int a = 10;
    int *p = (int*)&a;
    *p = 20;
    printf("%d\n",a);//输出20
    

    C++中

    const 修饰的常量必须被初始化

    int const 和 const int 等价
    const int a = 10;//C++的const确实对a起了保护作用,不能通过指针的间接修改
    int *p = (int*)&a;
    *p = 20;
    printf("%d\n",a);//输出10
    
    void test(){
       const int a;
       const int b;
       int array[a+b]={0};//C++中的const就是一个常量,永远不会被改变
    }
    

    const* 和*const的区别

    经常混淆c++中的const修饰指针的作用,今天看到一个blog说的很好“以*为界,左物右指”

    当使用带有指针的const时,有两种选择:

    • const修饰指针正指向的对象
    • const修饰存储在指针本身的地址。

    1 指向const的指针
    使用指针定义的技巧,正如任何复杂的定义一样,是在标识符的开始处读它并从里到外读。如果我们要使正指向的元素不发生改变,得写:

    const int * x;
    从标识符开始:“x 是一个指针,指向一个const int。”
    把const从一边移到另一边,结果一样。
    int const * x;
    

    2 const指针
    是指针本身成为一个const指针,必须把const标明的部分放在*的右边,如:

    int d = 1;
    int * const x = &d;
    指针本身是const指针,编译器要求给它一个初始化值,这个值在指针寿命期间不变。然而要改变它所指向的值是可以的,可以写*x = 2。
    

    这些可以总结成这样一句话:
    以*为分界点,
    当const在*的左边时,实际物体值不变
    当const在*的右边时,指针不变,
    即,(锁)左物右指
    这样来记比较方便!!

    int main(int argc,char **argv)
    {
        int b = 10;
        int * const a = &b;//右指针
        *a = 30;
        printf("%d---%d\n", *a,b);//30---30
    
        int c = 20;
        int const *d;//左物
        d = &b;
        d = &c;
        
        printf("%d\n", *d);//20
        system("pause");
       return 0;
    }
    

    define和const的区别

    • define和const变量在编译的阶段不一样,define是预处理器,const是编译器
    • define没有{}区域限制,const是编译器处理,完全符合编译器的逻辑判断和语法分析

    相关文章

      网友评论

        本文标题:一、C++中的const、define

        本文链接:https://www.haomeiwen.com/subject/crxksftx.html