gpt4 book ai didi

c++ - C 常量指针中的奇怪行为

转载 作者:行者123 更新时间:2023-11-30 20:47:33 24 4
gpt4 key购买 nike

以下几行的结果应该是什么?

const int ci=10;
int * ip=(int *)&ci;
(*ip)=90;

我们有两个规则,常量不能更改,并且直接使用 * 运算符更改部分内存必须更改该部分内存的内容。但是当我尝试打印这些变量时,我遇到这样的事情:

cout<<ci<<' '<<(*ip)<<endl;
// output: 10 90

我们该如何解释这一点?

最佳答案

哦,这只是编译器使用的一种名为常量折叠的优化技术。

因为,你告诉编译器 ci 是一个常量 int,所以它信任你,并在编译你的代码时将 ci 的所有引用替换为 10,所以如果你 cout<<ci ,你会得到一个10,这并不是因为ci占用的内存没有变化,只是因为编译器在使用ci的地方都将ci替换为10!

但是,你通过一种不礼貌的方式改变了内存,编译器并没有意识到这个事实!

所以,“constant”关键字并不是一个严格的约束,而只是程序员和编译器之间的一个契约

关于c++ - C 常量指针中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17038644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com