如果c中没有布尔值条件的if循环

时间:2019-01-29 12:00:07

标签: c if-statement

if语句在这里实际发生了什么?

#include <stdio.h>
    int x;
    void main()
    {
      if (x)
         printf("hi");
      else
         printf("how are u");
    }

4 个答案:

答案 0 :(得分:3)

如果printf("hi");非零,则运行

x,如果printf("how are u");为零,则运行x

条件检查在C中正式使用int类型(在评估之前,任何其他类型都隐式转换为int);不是布尔类型。

请注意,x在您的情况下会自动初始化为0,因为它位于 global 范围内。

答案 1 :(得分:2)

这里

if (x)

如果x不为0,则进入第一个分支,否则进入第二个(其他)分支。

答案 2 :(得分:1)

在C中,任何非零值都等效于truth,零值等效于false

因此,任何值都被视为有效的逻辑(甚至是指针)。

int *p = malloc(40);;
if (p) printf("Good!!");

在您的示例中,x等于零(统一的全局变量为零),并且将执行else printf。

由于可以转换为整数的任何值在逻辑上都是有效的,因此我们可以编写非常简短的函数,如下所示:

char *strcpy(char *dest, const char *src)
{
    char *saveddest = dest;
    while(*dest++ = *src++);
    return saveddest;
}

答案 3 :(得分:0)

这里int x;是全局未初始化的变量。编译器将全局int变量初始化为0。在C中,0表示false,1表示true。那就是为什么它会打印else部分的原因,因为if(0)表示false,编译器将执行else块,即u。

请访问该链接以获得更好的理解:

https://www.geeksforgeeks.org/g-fact-53/