zoukankan      html  css  js  c++  java
  • C和C++中const的区别

    使用const修饰变量意味着其只读的,但是C语言的const和C++中const确有着很大的不同。

    C语言const是“冒牌货”,而C++中的是一个真正的常量。

    C语言中虽然我们不能直接修改const变量的值,但是可以通过获取变量的地址通过指针来间接修改。

    下面这个C语言程序,a先后输出的值为5和6。

    int main()
    {   
        const int a = 5;    
        printf("a修改前:%d 
    ",a);
        int *p = (int *)&a;  
        *p = 6;     
        printf("a修改后:%d 
    ",a); 
        return 0;
    }
    

    上面这个例子说明:C语言中const常量,其实只是只读变量,有自己的储空间,能通过地址间接修改其的值。

    那C++中的const有什么不同呢?

    同样用C++编译器执行上述代码,a先后输出的值均为5。

    解释:当碰见常量声明时,C++在编译期间就把该变量放到符号表内,符号表里的一项key=a, val=5。在运行的时候,如果用到a,就直接从符号表中取值。

          int *p = (int *)&a;

          对于这行代码,C++编译器会插入一段代码,运行时为a单独开辟一块内存空间,相当于指针p指向这一段内存空间,你把这个空间内的值无论改成多少,都

          和符号表中的5没有任何关系,所以第二次仍然输出5。

    结论:C++中的const常量:其是放在符号表中,可能分配存储空间,也可能不分配存储空间 ,使用&符号时候才分配一个临时内存空间。

     

      

  • 相关阅读:
    window.open打开页面及页面大小设置
    java--->Stack的使用
    java简单实现直接运算表达式
    idea--->tomcat控制台乱码
    多线程--->线程的几种基本实现
    java--->读取wsdl方法(二)
    java--->wsdl的简单使用(spring+cxf)
    ActiveMQ(学习1)
    基本类型和包装类型的区别
    弄懂JDK、JRE和JVM到底是什么
  • 原文地址:https://www.cnblogs.com/yanghh/p/12944832.html
Copyright © 2011-2022 走看看