如何从"const int i"获取i的真实地址

lin*_*inw -2 c++ const

int main()
{
  const int i = 10;
  int *p = (int*) &i;
  *p = 20; 
  printf("%d\n",i);   // 10
  printf("%d\n",*p);  // 20
}
Run Code Online (Sandbox Code Playgroud)

我可以得到我的真实地址吗?如果我想改变i的价值,我该怎么办呢?原谅我可怜的英语!

Pét*_*rök 8

我可以得到我的真实地址吗?

是:

const int* p = &i;
...
printf("%p\n", p);
Run Code Online (Sandbox Code Playgroud)

如果我想改变i的价值,我该怎么办呢?

你最好不要,这是未定义的行为.毕竟,const意味着"不能改变"不是吗?如果您确实想要因任何原因而更改它,则不应将其声明为const句点.

在某些平台上,const数据被放入一个不同的只读内存段,并且尝试写入这些位置会导致段错误.此外,许多编译器用它们的字面值替换对const变量的引用,并且 - 在您的情况下似乎 - 尝试获取这些的地址可能会创建一个带有原始值副本的临时变量.所以你只能改变临时值,而不是原始值.