zoukankan      html  css  js  c++  java
  • C语言const简析

    C语言有个const,称为常量修饰符.即它所修饰的变量为常量,不允许被修改,赋值等等.

    1.const int a与int const a是等价的.修饰的都是a,表示a为常量,不允许被修改的.这也意味着const修饰的量在定义的时候就应该被初始化.

    2.  

       (1):const int *p与int const *p也是等价的,记住这里修饰的是p指针所指向的量为常量.如果想修饰一个指针的话,那么应该这样做:

             p++;//合法

             (*p)++;//非法 

       (2):int* const p;这个时候const右面是p,而且是指向整型的指针,所以此时p这个指针为常量.但是它所指向的数是可以改变的;

               p++;//非法

             (*p)++;//合法

    3.还有就是修饰数组的,其实功能类似的.比如const char name[]="Perry";那么如果在后面有name[2]='a';这样的语句编译器就会报错,而不至于导致程序运行的时候出现崩溃.

    4.const节省空间,避免不必要的内存分配,提高效率.

       const推出的目的是为了取代#define预编译指令.

    #include <stdio.h>
    
        #define M 3               //宏常量
        
       const int N = 5;          //此时并未将N放入内存中
       int main()
    {
           int i = N;                  //此时为N分配内存 ,以后不再分配
           int I = M;                 //预编译期间进行宏替换,分配内存
           int j = N;                  //没有内存分配
          int J = M;                  //在进行宏替换,又一次分配内存
    }

    const定义的只读变量从汇编的角度来看,只是给出了对应的内存地址,所以i=N,j=N的时候等于是i与j的地址指向了N这个内存静态区地址,这样达到了节省空间的目的.而不是像#define一样给出的是立即数,所以,const定义的只读变量在程序运行过程中只有一份备份(因为它是全局的只读变量,放在静态区),而#define定义的宏常量在内存中有若干个备份。

    总的来说,const引入常量的概念,是让我们不去修改内存中不该修改的地方.比较直接的作用是编译器可以提前发现逻辑上的错误.比如之前的name[2]='a';如果不用的话,而我们又修改了不该改的内存,那么必然会引起程序崩溃.所以尽量多得使用const.

    这只是最浅显的理解,const还有更深层次的应用,以后遇到会再记录的.

  • 相关阅读:
    番茄工作法
    Linux命令学习chroot和chmode
    ejabberd与XMPP
    【转载】Understanding When to use RabbitMQ or Apache Kafka
    Activiti的ACT_GE_PROPERTY表初始化
    Spring transaction与EJB transaction的关系
    mysql & java & spring transaction isolation level
    Drools解决积分问题
    Rendertron:谷歌 Chrome 新的 headless 模式又贡献了一个新的技巧
    LDAP的前世今生
  • 原文地址:https://www.cnblogs.com/brillliu/p/3545801.html
Copyright © 2011-2022 走看看