问题描述
在下面的代码输出中是“垃圾300”,但我希望它是“ 0 300”
为什么会这样?
main()
{
int a = 300,b,c ;
if ( a >= 400 )
b = 300 ;
c = 200 ;
printf ( "\n%d %d",c ) ;
}
main( )
{
int a = 300,c ;
c = 200 ;
printf ( "\n%d %d",c ) ;
}
解决方法
自动变量不会自动初始化。在写之前先阅读它们是未定义的行为。对于整数,通常会得到一些垃圾值(无论碰巧在堆栈上)。
您的第一个程序是
main()
{
int a = 300,b,c;
if (a >= 400)
b = 300;
c = 200;
printf("\n%d %d",c) ;
}
条件是错误的,因此不会为b分配值(它保持未初始化状态)。那就是为什么你要扔垃圾。
第二个程序基本相同。在这种情况下,b
的垃圾值为0
。
自动变量是在没有存储类说明符static
或extern
的函数中定义的所有变量。