2013-07-18 45 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.这个任意值在不同系统上可能不同。