如果块被赋值为零,则内部变量,即使if表达式在C中的计算结果为false

dro*_*our 0 c

#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;
}
Run Code Online (Sandbox Code Playgroud)

现在好像块评估为false所以如果块不应该执行,但代码打印b的值为0.此外,如果在if块结束后未分配c的值,则代码显示一些垃圾值湾 任何人都可以告诉我为什么会发生这种情况,据我所知,b必须为第一种情况显示一些垃圾值.

mat*_*975 5

除非你初始化你的变量,否则你不会确定它们的值是什么,所以这并不令人惊讶.如果希望b变量包含有意义的值,则使用该值初始化它.

  • @JayPrakashSarma:你声明你已经"在块内初始化b"是错误的.不执行`if`语句的then子句,因此不执行对b的赋值,并且b保持未初始化.当打印b时,你会得到零,因为这就是编译器使用的任何寄存器或内存位置,代替b初始化时b的值.在编译器或操作系统或其他地方,任何软件都不负责确保您是否获得零值或任何其他值.你不能指望任何特定的结果. (3认同)