有关const的C语言题,关于const的一个有关问题

关于const的一个问题

本帖最后由 xiacanni 于 2013-08-09 20:21:56 编辑

今天在一个博客中看到说const的值也可以修改。(网址:http://lalalah.pixnet.net/blog/post/31677924-%5B%E8%BD%89%5Dc%E7%9A%84%E9%97%9C%E9%8D%B5%E5%AD%97%E2%80%94%E2%80%94const%E7%9A%84%E7%90%86%E8%A7%A3%E5%92%8C%E7%94%A8%E6%B3%95)

于是自己试了一下,发现却不能修改。后来发现修改一个地方就可以修改了。(这段说的好乱,看我的代码吧。)

多以现在对const的一些问题感到疑惑。不知道这个现象是编译器的问题,还是C或C++规范中定义了就是这个样子。

我的代码如下:

#include 

void constProblem(void);

void constProblem2(void);

int main()

{

constProblem();

constProblem2();

}

void constProblem(void)

{

printf("[const problem1]\n");

const int num = 1;

int *pointer=(int *)#

*pointer=100;

int num2=num;

int num2_pointer=*pointer;

printf("num = %d\n",num);

printf("*pointer = %d\n",*pointer);

printf("num2 = %d\n",num2);

printf("num2_pointer = %d\n",num2_pointer);

int *pointer2=pointer;

printf("address of num = %p\n",&num);

printf("pointer = %p\n",pointer);

printf("pointer2 =%p\n",pointer2);

}

void constProblem2(void)

{

printf("\n[const problem2]\n");

int num_pre=1;

const int &num = num_pre;

int *pointer=(int *)#

*pointer=100;

int num2=num;

int num2_pointer=*pointer;

printf("num = %d\n",num);

printf("*pointer = %d\n",*pointer);

printf("num2 = %d\n",num2);

printf("num2_pointer = %d\n",num2_pointer);

}

我的系统是win7 64。使用VS和minGW编译都是类似的结果

输出为:

图1:VS的输出

112106559.png

图2:minGW编译的输出

112106560.png

const

C

C++

分享到:

------解决方案--------------------

void constProblem(void)与常量折叠有关, 是优化的结果。

void constProblem2(void)是认识错误。

//表示不能通过num修改num_pre,不表示num_pre是只读的。

const int &num = num_pre;

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值