【发布时间】:2014-12-31 14:18:27
【问题描述】:
&i(inside main function) 和 p(inside func function) 拥有相同的地址。好吧,我知道不能修改常量对象/变量,但我可以在 func 函数中使用 (*p)++ 递增变量 i,但结果并未反映在主函数中。这是为什么呢?
#include <iostream>
using namespace std;
void func(int *p){
(*p)++;
printf("%p %d\n", p, *p);
}
int main(int argc, char **argv){
const int i = 47;
const int *p = &i;
func(const_cast<int *>(p));
printf("%p %d\n", &i, i);
return 0;
}
我得到这个输出:
000000000022fe44 48
000000000022fe44 47
【问题讨论】:
-
当心!这里是龙!
-
你告诉编译器
i是const。它将常量值折叠到 printf arg 中。它没有义务对它那么明智,或者根本不明智。你撒谎了。它依赖于你告诉它的内容。
标签: c++