2016-08-01 55 views
-6
#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

+0

_寻求调试帮助的问题(“为什么这个代码不工作?”)必须包含所需的行为,特定的问题或错误以及在问题本身中重现问题所需的最短代码。没有明确问题陈述的问题对其他读者无益。请参阅:如何创建最小,完整和可验证的示例._ –

+3

在此处发布您的代码,请勿链接到外部网站 –

+1

您的代码应该发布且未链接,是UB。 'p'指向'a'并将指针移动到该对象的外部_Undefined behavior_ – LPs

回答

2

除了人们已经说过(未定义的行为),那么原因可能在于编译器的代码重排。

根据标准,没有什么东西禁止编译器重新排列代码的顺序,只要变量的值保持不变,就很可能重新排列这些变量,使得一个int向前移动a现在指向变量c。

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

+1

而且,相同的编译器可能会根据其选项(如优化-O0,-O1,-O2 ...)为此代码返回不同的结果。 – Garf365