我想知道,如果!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;
}
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
!
编辑:的确,我需要睡个好觉.我不知道我在想什么.谢谢你们!
!var
相当于var==NULL
.
因此,你的第一个测试检查if (var == NULL)
.你的第二次测试检查与此相反,所以给你相反的结果.
C11 6.5.3.3一元算术运算符 p5中!
描述了运算符的这种行为
逻辑否定运算符的结果!如果其操作数的值比较不等于0则为0;如果其操作数的值比较等于0则为1.
归档时间: |
|
查看次数: |
152 次 |
最近记录: |