C++与C中const的比较以及const和define的比较

C++与C中const的比较:

C语言中 const修饰的变量是一个 常变量,本质还是变量,有自己的地址空间

C++编译器对const常量的处理
当碰见常量声明时,在符号表中放入常量  ==> 问题:那又如何解释取地址
 编译过程中若发现对const使用了extern或者&操作符,则给对应的常量分配存储空间(兼容C)
但是编译过程中若发现使用常量则直接以符号表中的值替换,即使给该常量分配了空间,也并不使用里面的值

#include <stdio.h>

// 建议用 const 常量 代替宏常量 
// define  宏 在预编译的时候进行处理  const 是在编译的时候进行处理的
// 宏做简单替换,不会进行类型检查,作用域的检查
void func4_1()
{
// 宏的作用域从定义的那个位置开始,到文件结束都可见,可以使用
#define   A  100

    // const 常量的作用 在当前的 {}之内
    const int b = 20;
    printf ("%d\n", A);
    printf ("b = %d\n", b);

// 撤销宏定义,如果不撤销,宏可以一直使用
#undef A
}

int main4_2()
{
    //printf ("b = %d\n", b);
    // func4_1();
    // printf ("%d\n", A);
    return 0;
}


int main4_1()
{   
    // C++中用 const 来定义常量
    const int a = 10;
    // a = 20;

    // C++中常量放在一个常量表中
    // 当编译器检测到要const常量进行取地址操作,它会为 a 分配内存
    // 但是这个内存并不会被 a 使用
    int *p = (int *)&a;
    *p = 100;

    printf ("&a = %p, p = %p\n", &a, p);

    // const 常量 a 并不会使用分配它的空间,使用 a 的时候,用常量表中的值进行替换
    printf ("a = %d, *p = %d\n", a, *p);

    return 0;
}

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值