C++ 常量


#include <iostream>
using std::cout;
using std::endl;

int main(int argc, char *argv[])
{
    const int count = 10;
    int *p = (int *)&count;

    *p = 100;
    cout << "count: /t/t/t" << count << endl;
    cout << "&count: /t/t" << &count << endl;
    cout << "*((int *)&count): /t" << *((int *)&count) << endl;
    cout << "*(&count): /t/t" << *(&count) << endl;
    cout << "*p: /t/t/t" << *p << endl;
    cout << "p: /t/t/t" << p << endl;

    return 0;
}

上述代码在 gcc 中的运行结果如下:
count:                  10
&count:                 0xbfa723cc
*((int *)&count):       100
*(&count):              10
*p:                     100
p:                      0xbfa723cc

解释

常量 count 的地址和指针 p 的值是一样的;

对于程序中出现的、前面没有取地址符的 count,gcc 在编译时直接把它换成了 count 的值 10;
对于程序中的 *(&count),gcc 同样处理;
在这里,gcc 识别出它们是常量类型,认为它们的值不会被改变,也就是说,它们的值在编译期就被确定了;

对于 *((int *)&count) 和 *p,gcc 识别出它们是对 int * 类型的指针的解引用,编译期间无法确定,gcc 将它们的求值留给运行期来决定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值