私の例は一般的に正しくないことに気づきました。しかし、それがどのように機能するかを知るのは興味深いことです。
/* 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変数がある場合(アドレスを参照)、なぜこのコードが機能しないのですか?