代码:
#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
任何人都可以解释代码输出的性质吗?
当您设置 j=i+1 时,i 被未初始化。所以 j (最初)几乎可以是任何东西。
在您的代码中i
,j
在声明时未初始化。
在 for 循环中,您分配j = i + 1
Soj
仍然是垃圾值,而i
分配 1
,
在 for 循环中增加i
,j
和 printf 值。从到,从初始垃圾值(即输出中的 66)i
递增到。1
5
j
initial garbage + 5
编辑根据评论:
如果您在声明时未分配初始值,则该变量将指向一个地址,该地址可能包含来自另一个应用程序(或任何最后使用的数据)的先前使用的数据。
在运行时系统分配内存之前不会在分配前清除内存(只是为了保持系统性能高)所以,变量的默认值是垃圾值。
甚至在 i 被分配 = 1 之前,j 就被分配了 i 的值。所以这里的 i 可以是操作系统提供给它的任意值。在上述情况下,操作系统分配给 i 的值为 66。这个任意值在不同的系统上可能不同。