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

任何人都可以解释代码输出的性质吗?

4

3 回答 3

5

当您设置 j=i+1 时,i 被未初始化。所以 j (最初)几乎可以是任何东西。

于 2013-07-18T19:34:51.597 回答
2

在您的代码中ij在声明时未初始化。
在 for 循环中,您分配j = i + 1 Soj仍然是垃圾值,而i分配 1

在 for 循环中增加i,j和 printf 值。从到,从初始垃圾值(即输出中的 66)i递增到。15jinitial garbage + 5

编辑根据评论:

如果您在声明时未分配初始值,则该变量将指向一个地址,该地址可能包含来自另一个应用程序(或任何最后使用的数据)的先前使用的数据。

在运行时系统分配内存之前不会在分配前清除内存(只是为了保持系统性能高所以,变量的默认值是垃圾值。

于 2013-07-18T19:36:39.190 回答
0

甚至在 i 被分配 = 1 之前,j 就被分配了 i 的值。所以这里的 i 可以是操作系统提供给它的任意值。在上述情况下,操作系统分配给 i 的值为 66。这个任意值在不同的系统上可能不同。

于 2013-07-18T20:03:54.167 回答