如果 !varvar != 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/

10-09 18:37
查看更多