const 与 define之间的区别
- 符号常量不占用内存,在预处理阶段就全部由符号常量的值替换;而常变量则占用内存空间,只是它在存在期间不能重新被赋值。并且常变量在声明时必须同时进行初始化,而且以后不能被更新。
- const 定义的常量从汇编的角度来看,是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中则有若干份拷贝。
- 编译器通常不为普通的const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读取的操作,使得它的效率也很高。
需要注意的是:
const int *p表明p指向的值不能通过p来修改,但可以直接修改其原值
int main(void)
{
int a = 2;
const int *p = &a;
*p = 1;
a = 1;
return 0;
}
int *const p表明p的值不能被修改,但可以修改p指向的值
int main(void)
{
int a = 2;
int b = 4;
int *const p = &a;
p = &b;
a = 1;
return 0;
}