簡體   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