#include<stdio.h>
int main() {
int a = 10;
int *p = &a;
int b = 800;
double d=547;
int c=900;
printf("a = %d\n", a);
printf("p = %p\n", p);
printf("*p= %d\n", *p);
p++;
//p = &b;
printf("a = %d\n", a);
printf("p = %p\n", p);
printf("*p= %d\n", *p);
return 0;
}
如果我在增量后打印存储在p中的值,为什么我得到900而不是800?
答案 0 :(得分:2)
除了人们已经说过的(未定义的行为)之外,原因还在于编译器重新安排代码。
根据标准,没有任何东西禁止编译器重新排列代码的顺序,只要变量的值保持不变,变量很可能以这样一种方式重新排列,即从现在指向变量c。
但由于这不是标准的一部分,因此无法知道会发生什么,不同的编译器可能会为此代码返回不同的结果。