如果 !var
是 var != NULL
,我想知道 var
是否与 char *
相同。
这是一个非常小的 POC,表明它不是一回事(或者我做错了什么?)但我不明白为什么。
int main(void) {
char *c = NULL;
if(!c){
printf("1\n");
}else{
printf("2\n");
}
if(c != NULL){
printf("1\n");
}else{
printf("2\n");
}
return 0;
}
输出是
1
2
我在 x64 Arch Linux,GCC 4.8.2 上运行它
编辑:要么我需要一些真正的 sleep ,要么你们都误读了程序的实际输出!请多读几遍。
!c
的意思是“如果 c
不是 NULL”,这是错误的,所以它应该在第一个 2
打印 if
,但它打印 1
!编辑:确实,我需要 sleep 。我不知道我在想什么。谢谢你们!
最佳答案
!var
等价于 var==NULL
。
因此,您的第一个测试会检查 if (var == NULL)
。您的第二个测试检查是否与此相反,因此给您相反的结果。!
运算符的这种行为在 C11 6.5.3.3 一元算术运算符 p5 中描述
关于c - !var 和 var != NULL 一样吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19646557/