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

posted @ 2014-02-12 13:36  brillliu  阅读(174)  评论(0编辑  收藏  举报