繁体   English   中英

奇怪的初始化优化

[英]Strange optimization of initialization

我意识到我的例子通常是不正确的。 但有趣的是找出它是如何工作的。

/* 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 var(请参见地址),为什么此代码不起作用?

p++;

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

你怎么称呼corerct 它不保证如何存储变量,所以ANY结果都是正确的

两个变量在内存中不必相邻。 您可以使用数组来执行此操作。

#define PRINT(p) (printf("%i %p\n", *(p), (void *)(p)))

int t[2];
int *a = &t[0];
int *b = &t[1];

*a = 5;
*b = 6;

int *p = a;
PRINT(p);

++p;
PRINT(p);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM