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

  • 相关阅读:
    PDA智能程序访问WebService,报告“未能建立与网络的连接”
    VS2008中开发智能设备程序的一些总结收藏
    Error: The INF file contains Unicode characters that could not be converted correctly
    在vs2008工程中制作cab包
    linux专题三之如何悄悄破解root密码(以redhat7.2x64为例)
    linux专题一之文件描述符、重定向、管道符、tee命令
    linux的计划
    如何安装RHEL7.2x64 即红帽7.2虚拟机?
    快速排序及查找第K个大的数。
    来来来,做道题,一起防老年痴呆
  • 原文地址:https://www.cnblogs.com/brillliu/p/3545801.html
Copyright © 2011-2022 走看看