const 与 define的区别

const 与 define之间的区别


  • 符号常量不占用内存,在预处理阶段就全部由符号常量的值替换;而常变量则占用内存空间,只是它在存在期间不能重新被赋值。并且常变量在声明时必须同时进行初始化,而且以后不能被更新。
  • const 定义的常量从汇编的角度来看,是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中则有若干份拷贝。
  • 编译器通常不为普通的const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读取的操作,使得它的效率也很高。

需要注意的是:

const int *p表明p指向的值不能通过p来修改,但可以直接修改其原值

int main(void)
{
    int a = 2;
    const int *p = &a;
    /*  我们不能通过指针p去修改a的值  */
    *p = 1;    /*  这样是不对的  */
    /*  但我们可以直接修改a的原值  */
    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;
}

猜你喜欢

转载自blog.csdn.net/qq_41145192/article/details/80547049
今日推荐