2013-07-18 79 views
0

代碼:解釋代碼輸出的性質?

#include<stdio.h> 
int main(void) 
{ 
    int i, j; 
    for(j = i+1, i=1; i<=5; j++, i++) 
    printf("%d %d\n", i, j); 
    return 0; 
} 

輸出:

1 66 
2 67 
3 68 
4 69 
5 70 

任何人都可以對代碼的輸出的性質解釋?

回答

2

在您的代碼i,j未在聲明時初始化。
在for循環分配j = i + 1所以j仍而分配1i

在for循環

你增加ij和printf值垃圾值。 i1增加到5j從初始垃圾值(即輸出中的66)到initial garbage + 5

編輯在意見的基礎:

如果你不分配在聲明變量將在地址是指向一個初始值可能包含以前從另一個應用程序使用的數據(或最後使用的)。

之前在運行系統中分配內存分配之前不會清除內存(只是爲了保持系統性能高因此,該變量的默認值是垃圾值。

+0

如果我再次運行此代碼,那麼每次j都採用相同的垃圾值? –

+0

@AmanSingh可能會立即執行。但不同的恆溫垃圾價值undepnup性能目的 –

+0

你可以請解釋什麼時候它可能是不同的或它將如何取決於? –

5

當您設置j = i + 1時,我被單元化。所以j(最初)幾乎可以是任何東西。

+0

爲什麼它僅從66開始? –

+1

我是唯一一個不能運行它的人嗎? –

+0

@AmanSingh有時你的垃圾值看起來一樣的東西 –

0

即使在i被賦值爲1之前,j也被分配了i的值。所以我在這裏可以是由操作系統提供給它的任意值。在上面的例子中,OS分配給i的值是66.這個任意值在不同系統上可能不同。