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还有更深层次的应用,以后遇到会再记录的.

  • 相关阅读:
    zbb20181207 springboot @ConfigurationProperties使用
    zbb20181206 logback,lombok 默认日志logback配置解析
    Spring Boot (8) 全局异常处理
    Spring Boot (7) JdbcTemplate访问数据库
    Spring Boot (6) Spring Data JPA
    Spring Boot (4) 静态页面和Thymeleaf模板
    Spring Boot (3) 热部署devtools
    Spring Boot (2) Restful风格接口
    Spring Boot (1) 构建第一个Spring Boot工程
    idea使用maven搭建ssm框架实现登陆商品增删改查
  • 原文地址:https://www.cnblogs.com/brillliu/p/3545801.html
Copyright © 2011-2022 走看看