我意识到我的例子一般不正确.但有趣的是找出它是如何工作的.
/* 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;
}
Run Code Online (Sandbox Code Playgroud)
这是某种优化吗?
UPDT 好的我得到了UB.我不希望别的别的.
但是,如果我有2个int vars,彼此相邻(见地址)为什么这个代码不起作用?
p++;
Run Code Online (Sandbox Code Playgroud)
代码具有未定义的行为.指针指向一些垃圾位置.取消引用它会导致不可预测的结果.