Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中的if station和垃圾值_C_Initialization - Fatal编程技术网

C中的if station和垃圾值

C中的if station和垃圾值,c,initialization,C,Initialization,我是C编程的新手。我知道这是一个非常简单的问题,但我需要一些建议。 我正在使用控制结构if语句。我遇到了一个例子 代码如下:- #include<stdio.h> int main() { int a = 200, b, c ; if (a >= 300) { b = 100 ; c = 200 ; } printf ( "b=%d\nc=%d", b, c ) ; return 0; } 在这

我是C编程的新手。我知道这是一个非常简单的问题,但我需要一些建议。 我正在使用控制结构
if语句
。我遇到了一个例子

代码如下:-

#include<stdio.h>
int main()
{
    int a = 200, b, c ;
    if (a >= 300)
    {
        b = 100 ;
        c = 200 ;
    }
    printf ( "b=%d\nc=%d", b, c ) ;
    return 0;
} 
在这里,我希望输出值都是零。看到这个输出,我不太奇怪为什么变量
b
中的垃圾值

这背后的原因是什么?或者我以错误的方式声明了变量。这背后的整个场景应该是什么?

以防万一

if (a >= 300)
如果失败,
b
c
将不会被分配任何值

现在,
b
c
是自动局部变量,除非明确初始化,否则它们包含不确定值

参见第§6.7.9章,初始化

如果没有显式初始化具有自动存储持续时间的对象,则其值为 不确定。[…]

使用统一化的局部变量访问它们的值调用

参考同一标准的附录§J.2,了解未定义的行为

具有自动存储持续时间的对象的值将在其运行时使用 不确定

所以,初始化局部变量总是明智的,比如

int a = 200, b = 0, c = 0;

也就是说,FWIW,
int main()
至少应该是
int main(void)
以符合标准。

您必须将变量初始化为0:

#include<stdio.h>
int main()
{
    int a = 200, b = 0, c  = 0;
    if (a >= 300)
    {
        b = 100 ;
        c = 200 ;
    }
    printf ( "b=%d\nc=%d", b, c ) ;
    return 0;
} 
#包括
int main()
{
INTA=200,b=0,c=0;
如果(a>=300)
{
b=100;
c=200;
}
printf(“b=%d\nc=%d”,b,c);
返回0;
} 

<>在C和C++中,你的声明不初始化你的int变量到0。任何声明都会在变量内以随机值结束…

似乎假设声明变量会隐式将其值设置为0

声明变量但不初始化是未定义行为的好地方

一旦您声明了一个变量,它就会在堆栈上获得分配给它的内存,但不会对该内存空间执行任何操作,因此它可以保存以前调用的剩余数据,或者只是在堆栈空间上丢弃数据

它被称为未定义行为,因为该数据可以是您期望的实际数据,但它可以(也可能会)是完全其他的数据。这是一种不确定的行为


您需要做的是首先初始化这些值,以确保您的运行是确定的

如果它总是0,那么现在就不是垃圾了,是吗?但是变量
c
0
值是怎样的呢?我想它也应该是垃圾值。它有垃圾值。正好是零。(垃圾的正确术语是“undefined behavior”(未定义的行为),这意味着任何事情都可能发生。无法保证未定义的值看起来像垃圾。)这就是未定义的行为,它可能会工作,也可能会出现故障。是的,首先我们需要正确初始化变量以获得所需的结果。经验教训。谢谢。
#include<stdio.h>
int main()
{
    int a = 200, b = 0, c  = 0;
    if (a >= 300)
    {
        b = 100 ;
        c = 200 ;
    }
    printf ( "b=%d\nc=%d", b, c ) ;
    return 0;
}