if语句在这里实际发生了什么?
#include <stdio.h>
int x;
void main()
{
if (x)
printf("hi");
else
printf("how are u");
}
答案 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。
请访问该链接以获得更好的理解: