zoukankan      html  css  js  c++  java
  • C语言深度剖析---const关键字(转载)

     const是constant的缩写,是恒定不变的意思。被const修饰的值,是只读变量。

    1、const修饰只读变量,具有不变性
          #include <stdio.h>

         int main()
        {
           const int Max = 100;
           int Array[Max];
        
              return 1;
        }

         在VC6.0中创建该文件,编译器会报错。因为我们定义数组必须指定其元素的个数,这也从侧面证实C语言中,const修饰的Max仍然是一个变量,只不过是只读属性罢了。
         const修饰的只读变量必须在定义的同时初始化。

    2、节省空间,避免不必要的内存分配,同时提高效率
        const推出的初始目的,是为了取代预编译指令,消除它的缺点,同时继承他的优点。可以看下它和define的区别:
        编译器通常不为普通const只读变量分配存储空间,而是将它们保存在符号表中,这使它成为一个编译期间的值,没有了存储于读内存的操作,使得它的效率也提高

      #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定义的只读变量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的只读变量在程序运行过程中只有一份备份(因为它是全局的只读变量,放在静态   区),而#define定义的宏常量在内存中有若干个备份。#define宏是在预编译阶段进行替换,而const修饰的只读变量是在编译的时候确定其值。#define宏没有类型,而const修饰的只读变量具有特定的类型。

    3、const修饰变量

    C语言深度剖析---const关键字 - engineerdream - engineerdream
        先忽略类型名(编译器解析的时候也是先忽略类型名),我们看const离哪个近,“近水楼台先得月”,离谁近就修饰谁。
     
    4、const修饰函数的参数
     const修饰符可以修饰函数的参数,当不希望这个参数值在函数体内被意外改变时使用const void fun(const int i)
     告诉编译器i在函数体内不能被改变,从而防止了使用者的一些无意的或者错误的修改

    5、
    修饰函数的返回值
      const修饰符也可以修饰函数的返回值,返回值不可被改变

    6、在另一链接文件中引用const只读变量 
       
    extern const int i   ; 
  • 相关阅读:
    @Schedule注解中的Cron表达式读取properties的方法
    antdv 使用单文件方式递归生成菜单
    git 新建分支并将代码推送到远程
    echarts 饼图 pie label 颜色自定义
    关于bootstrapValidator 表单校验remote出现两次重复提交才能验证通过问题处理
    bootstrap table实现x-editable的行单元格编辑及解决数据Empty的问题
    element-ui 弹出组件的遮罩层在弹出层dialog模态框的上面
    vue cli 3.0 用axios 调用本地json数据一直报404
    vue项目webpack打包部署到tomcat时,访问成功,但是刷新后页面报404
    select2的使用
  • 原文地址:https://www.cnblogs.com/NewZealand/p/3414625.html
Copyright © 2011-2022 走看看