const int i=10;
int* j=(int*)&i;
*j=20;
printf("%d,%d\n",*j,i);
问题:在C和C++中,输出的结果分别是什么?
c中: 20 20
c++中: 20 10
原因是因为c++中有个常量折叠概念,所有的const变量都会被放在编译器符号表中,取const变量的时候会直接从表中取值,而不会去内存中取值。(编译优化)
另外说一点,这种方式修改的const变量,只能是局部变量,不能是全局变量或静态变量。 如果是全局区的变量,编译不会出现问题,当运行的时候会发生段错误,因为没有应用程序没有权限去修改全局区的常量。
参考文档:https://blog.csdn.net/weixin_41413441/article/details/80860135