C中的if station和垃圾值
我是C编程的新手。我知道这是一个非常简单的问题,但我需要一些建议。 我正在使用控制结构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; } 在这
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;
}