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