2016-08-01 113 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