我意识到我的例子一般不正确。但有趣的是找出它是如何工作的。
/* 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 变量(请参阅地址),为什么此代码不起作用?