以下代码显示了使用const变量时gcc和g ++的不同输出i.的地址i和值ptr是相同的,但上通过印刷的值访问该地址i和derefrencing的值ptr我得到的值i作为5与g ++以及10用gcc.
g ++如何在内存中保存const变量?
#include <stdio.h>
int main()
{
const int i =5;
int *ptr =(int*)&i;
*ptr = 10;
printf("\n %u and %u and %d and %d \n",&i,ptr,i,*ptr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您正在修改const限定对象.这在C中是不允许的("未定义的行为").任何事情都可能发生.
例子:
i只读内存.写入*ptr将使您的程序崩溃.i5号替换所有读访问(你答应过const,不是吗?).我猜C编译器选择2而C++编译器选择3.
其他人评论了代码正在做什么的"未定义"性质.但是要解释这是如何发生的,完全有可能编译器应用了一个优化,而运行时的值i永远不会传递给它printf,而是替换i为常量5.你确实声明它const是不应该改变的.