代码:
#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
任何人都可以解释一下代码输出的性质吗?
答案 0 :(得分:5)
当您设置j = i + 1时,我未初始化。所以j(最初)几乎可以是任何东西。
答案 1 :(得分:2)
在您的代码i
中,j
在声明时未初始化
在for循环中,您指定j = i + 1
因此j
仍然是垃圾值而i
已分配1
,
,您可以增加i
,j
和printf值。 i
从1
增加到5
,j
从初始垃圾值(输出中为66)增加到initial garbage + 5
。
修改根据评论:
如果您在声明时未指定初始值,则变量将指向可能包含先前来自其他应用程序的数据(或任何上次使用的数据)的地址。
在运行时分配内存之前系统在分配之前不会清除内存(只是为了保持系统性能高)因此,变量的默认值是垃圾值。< / p>
答案 2 :(得分:0)
j也被分配了i的值。所以这里我可以是OS提供给它的任意值。在上面的例子中,OS分配给i的值是66.这个任意值在不同的系统上可能不同。