if块内的变量被指定为零,即使在C中if表达式的计算结果为false #包括 内部主(空){ int a=123,b,c; 如果(a>300){ b=200; } c=4556; printf(“b=%d\n”,b); 返回0; }

if块内的变量被指定为零,即使在C中if表达式的计算结果为false #包括 内部主(空){ int a=123,b,c; 如果(a>300){ b=200; } c=4556; printf(“b=%d\n”,b); 返回0; },c,C,现在,if块的计算结果为false,因此if块不应执行,但代码将b的值打印为0。 此外,如果在if块结束后没有分配c的值,那么代码会显示b的一些垃圾值。 谁能告诉我为什么会这样,据我所知,b在第一种情况下也必须显示一些垃圾值。除非您初始化变量,否则您将无法确定它们的值是什么,所以这一点都不奇怪。如果希望b变量包含有意义的值,请使用该值对其进行初始化。除非初始化变量,否则无法确定它们的值是什么,因此这一点毫不奇怪。如果希望b变量包含有意义的值,请使用该值对其进行初始化。“b必须显示一些垃圾值”-0

现在,if块的计算结果为false,因此if块不应执行,但代码将b的值打印为0。 此外,如果在if块结束后没有分配c的值,那么代码会显示b的一些垃圾值。
谁能告诉我为什么会这样,据我所知,b在第一种情况下也必须显示一些垃圾值。

除非您初始化变量,否则您将无法确定它们的值是什么,所以这一点都不奇怪。如果希望
b
变量包含有意义的值,请使用该值对其进行初始化。

除非初始化变量,否则无法确定它们的值是什么,因此这一点毫不奇怪。如果希望
b
变量包含有意义的值,请使用该值对其进行初始化。

“b必须显示一些垃圾值”-0是有效的垃圾值。每次运行时,我都会得到b=-1215655948和不同的值。因此b在我的SUSE12.1系统中保存垃圾值:(@Dcoder但为什么只有在if块后定义了某个变量时b才会显示0,而在if块后没有任何定义时,b才会显示某个随机值?@Jay-没有原因。
b
有一个垃圾值,在测试时正好是
0
。正式地说,读取或打印一个未调整的值的结果未定义序列化的值,因此您可以得到任何结果。“b必须显示一些垃圾值”-0是有效的垃圾值。我每次运行时都会得到b=-1215655948和不同的值。因此b在我的SUSE12.1系统中保留垃圾值:(@Dcoder但为什么只有在if块后定义了某个变量时b才会显示0,而在if块后没有任何定义时,b才会显示某个随机值?@Jay-没有原因。
b
有一个垃圾值,在测试时正好是
0
。正式地说,读取或打印一个未调整的值的结果未定义序列化的值,所以您可以得到任何结果。正如您所看到的,我在if块中初始化了b,所以这应该不是问题,虽然if表达式的计算结果为false,但为什么为零它应该显示任何其他随机垃圾值。@JayPrakashSarma为什么不为零?它与选择初始化a的任何其他整数一样有效未初始化的值。如果您在另一台计算机上编译此代码,它可能会给出另一个数字。不要假设任何未初始化的数据。@JayPrakashSarma:您的语句“在If块内初始化了b”为false。
if
语句的then子句未执行,因此对b的赋值未执行,b保持未初始化状态。当打印b时,会得到零,因为编译器使用的寄存器或内存位置正好是零,而不是初始化b时b值所在的位置。没有软件,在编译器、操作系统或其他地方,负责确保得到零或任何其他值。您不能期望得到任何特定的结果。正如您所看到的,我已在if块中初始化了b,因此这应该不是问题,尽管if表达式的计算结果为false,但为什么为零它应该显示任何其他随机值bage值。@JayPrakashSarma为什么不为零?它与初始化未初始化值时选择的任何其他整数一样有效。如果您在其他计算机上编译此代码,它可能会给出另一个数字。不要假设任何未初始化数据。@JayPrakashSarma:您的语句“在If块中初始化了b”为false。
if
语句的then子句未执行,因此对b的赋值未执行,b保持未初始化状态。当打印b时,会得到零,因为编译器使用的寄存器或内存位置正好是零,而不是初始化b时b值所在的位置。没有软件,在编译器、操作系统或其他地方,负责确保获得零或任何其他值。您不能期望任何特定结果。
#include<stdio.h>
int main(void) {
    int a = 123,b,c;
    if(a>300) {
        b=200;
    }
    c=4556;
    printf("b = %d\n",b);
    return 0;
}