C 为什么第一个程序输出;垃圾300“;第二个计划;0 300“;为什么会这样?
在下面的代码中,输出是“垃圾300”,但我希望它是“0 300”C 为什么第一个程序输出;垃圾300“;第二个计划;0 300“;为什么会这样?,c,garbage,C,Garbage,在下面的代码中,输出是“垃圾300”,但我希望它是“0 300” 为什么会这样 main() { int a = 300, b, c ; if ( a >= 400 ) b = 300 ; c = 200 ; printf ( "\n%d %d", b, c ) ; } 在下面的代码中,它的预期输出为-0 200 main( ) { int a = 300, b, c ; c = 200 ; print
为什么会这样
main()
{
int a = 300, b, c ;
if ( a >= 400 )
b = 300 ;
c = 200 ;
printf ( "\n%d %d", b, c ) ;
}
在下面的代码中,它的预期输出为-0 200
main( )
{
int a = 300, b, c ;
c = 200 ;
printf ( "\n%d %d", b, c ) ;
}
自动变量不会自动初始化。在写作之前阅读它们是未定义的行为。对于整数,通常会得到一些垃圾值(不管堆栈上发生了什么) 你的第一个节目是
main()
{
int a = 300, b, c;
if (a >= 400)
b = 300;
c = 200;
printf("\n%d %d", b, c) ;
}
条件是错误的,因此b没有被赋值(它保持未初始化状态)。这就是为什么你会收到垃圾
第二个程序本质上是相同的<在这种情况下,code>b恰好具有垃圾值0
自动变量是在没有存储类说明符的函数中定义的所有变量
static
或extern
,因为b
仅在a>=400的情况下分配。事实并非如此。适当的缩进在这里会有所帮助。@Divyank-Lalwani具有自动存储持续时间的未初始化变量具有不确定的值。为什么要更改问题中的代码?在本例中,很明显您正在打印未初始化的变量(b
)。没有标题中提到的“第二个程序”。未定义的行为是未定义的。Dupe of0
是一个完全有效的垃圾值。。。与-8002413217
一样有效,“自动变量不是自动初始化的。”这是一种极具讽刺意味的说法。我必须记住这一点。