c++ - 奇怪的初始化优化

标签 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;
}

这是某种优化吗?

UPDT 好吧,我了解了 UB。我不会寄希望于别人。

但是,如果我有 2 个 int 变量,它们彼此相邻放置(请参阅地址),为什么此代码不应该工作?

最佳答案

p++;

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

关于c++ - 奇怪的初始化优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11526263/

相关文章:

c++ - #include <文件名> 和 #include "filename"有什么区别?

c - c 中的 pthread 预期声明说明符或 '...' 之前的 '('

C中用union将串口数据转为float

c++ - 与 std::atomic 相反,读取互斥量范围之外的 volatile 变量

c++ - 将 std::is_convertible 与 std::type_index 一起使用

c++ - 指向 std::map 中的值的指针

java - 引用类型的 volatile - 它是否总是避免由于 JMM 而发布引用问题?

c++ - 多线程应用程序上的 volatile C/C++

c++ - 看不到 x264 库的日志

c++ - 如何检测我是否正在为 C++ 中的 64 位架构进行编译