是!var与var!= NULL相同?

ale*_*nst 3 c null pointers

我想知道,如果!var是一样的var != NULL,如果varchar *.

这是一个非常小的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;
}
Run Code Online (Sandbox Code Playgroud)

输出是

1
2
Run Code Online (Sandbox Code Playgroud)

我在x64 Arch Linux,GCC 4.8.2上运行它

编辑:要么我需要一些真正的睡眠,要么你们都误读了程序的实际输出!请阅读几次.

!c意思是"如果c不是NULL",这是假的,所以它应该2在第一个打印if,但它打印1!

编辑:的确,我需要睡个好觉.我不知道我在想什么.谢谢你们!

sim*_*onc 5

!var相当于var==NULL.

因此,你的第一个测试检查if (var == NULL).你的第二次测试检查与此相反,所以给你相反的结果.

C11 6.5.3.3一元算术运算符 p5中!描述了运算符的这种行为

逻辑否定运算符的结果!如果其操作数的值比较不等于0则为0;如果其操作数的值比较等于0则为1.