我意识到我的示例总体上不正确。但了解它是如何工作的很有趣。
/* C/C++ (gcc-4.3.4) */
#include <stdio.h>
int main() {
/*volatile*/ int i = 5;
int j = 500;
int *p = &j;
printf( "%d %x\n", *p, p );
p++;
printf( "%d %x\n", *p, p ); // works correct with volatile (*p is 5)
//printf( "%d %x\n", *p, &i ); // works correct without volatile
return 0;
}
这是某种优化吗?
UPDT 好吧,我了解了 UB。我不会寄希望于别人。
但是,如果我有 2 个 int 变量,它们彼此相邻放置(请参阅地址),为什么此代码不应该工作?
最佳答案
p++;
该代码具有未定义的行为。指针指向某个垃圾位置。取消引用它会导致不可预测的结果。
关于c++ - 奇怪的初始化优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11526263/