我对指针增量有点困惑

时间:2016-08-01 14:40:18

标签: c

#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?

[1]:强文 http://i.stack.imgur.com/HYrLA.png

1 个答案:

答案 0 :(得分:2)

除了人们已经说过的(未定义的行为)之外,原因还在于编译器重新安排代码。

根据标准,没有任何东西禁止编译器重新排列代码的顺序,只要变量的值保持不变,变量很可能以这样一种方式重新排列,即从现在指向变量c。

但由于这不是标准的一部分,因此无法知道会发生什么,不同的编译器可能会为此代码返回不同的结果。