奇怪的初始化优化

tri*_*san -1 c c++ volatile

我意识到我的例子一般不正确.但有趣的是找出它是如何工作的.

/* 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,彼此相邻(见地址)为什么这个代码不起作用?

Mah*_*esh 5

p++;
Run Code Online (Sandbox Code Playgroud)

代码具有未定义的行为.指针指向一些垃圾位置.取消引用它会导致不可预测的结果.

  • 嗯,值得注意的是,"p ++"完全合法.这里没有未定义的行为.取消引用`p`导致UB,而不是'++`本身. (3认同)