我想知道在var
是char *
类型时,!var
是否等同于var != NULL
。
这里有一个非常简单的 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。
编辑:要么我需要一些真正的睡眠,要么你们都误读了程序的实际输出!请多读几次。
!c
意味着“如果c
不为NULL”,那么它应该在第一个if
中打印2
,但它却打印了1
!编辑:确实,我需要一些睡眠。我不知道我在想什么。谢谢大家!