[英]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.