为什么第一个程序输出“垃圾300”,第二个程序“ 0 300”为什么会发生这种情况?

问题描述

在下面的代码输出中是“垃圾300”,但我希望它是“ 0 300”
为什么会这样?

    main()
    {
    int a = 300,b,c ;
 if ( a >= 400 )
    b = 300 ;
    c = 200 ;
    printf ( "\n%d %d",c ) ;
    }

在下面的代码中,它给出的预期输出为-0 200

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

自动变量是在没有存储类说明符staticextern的函数中定义的所有变量。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...