有关const关键字的整理

来源:互联网 发布:php上传图片并压缩 编辑:程序博客网 时间:2024/05/16 07:50

       顾名思义const是constant的缩写,意义为永恒不变的意思。常常被翻译为常量,常数等意思。但是很不幸,正是由于这一点导致很多C程序员认为const修饰的值为常数。这是不正确的,const修饰的是只读变量,在预处理(编译)时是不知道具体内容的。

    在C语言中,这样写一个函数对吗?为什么呢?

    const int MAX = 100;

    int array[MAX];

   其实这个程序在C语言的编译器中运行是会产生错误警告的,因为C语言中const修饰的是变量,而数组在定义是必须告诉编译器它的元素个数,因此MAX是不能作为变量出现在数组中的。这个程序在C++编译器上运行正确,想想为什么 ?

    用const修饰的只读变量可以节省内存,提高效率。因为编译器通常不会为const变量分配空间的,将他们存在符号表中,使其成为一个编译期间的值,没有读写内存的操作,自然提高了效率。

   从汇编的角度来说,定义const变量只是给出了对应内存的地址,而不是像#define那样给出了立即数。因此,在运行程序的过程中const只有一个拷贝,而宏定义则有若干个。另外,#define宏定义是在预编译时进行替换,而const变量是在编译时确定其值。,#define宏定义是没有类型的,而const变量有固定的类型。

  下面是介绍几种关于const的用法:

1.修饰一般变量:修饰符可放类型说明前,也可放在类型说明后。例如:const int i =10;或int const i = 10;

2.修饰数组:int const a[5] ={1,2,3,4,5};或 const int a[5] = {1,2,3,4,5};

3.修饰指针:const int *p; // p 可变,p 指向的对象不可变
                     int const *p; // p 可变,p 指向的对象不可变
                     int *const p; // p 不可变,p 指向的对象可变
                     const int *const p; //指针p 和p 指向的对象都不可变    

4.修饰函数参数:当你不希望函数的参数被函数体内进行任意的改变时,可以用const进行修饰。

                          例如:int fun(const int n) ;这就告诉编译器在函数内部不能对变量n进行改变,以防止出错。

5.修饰函数返回值:const还可以修饰函数返回值,例如:const int fun(void);在另一链接文件中引用只读变量。

原创粉丝点击