加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – is var与var!= NULL相同吗?

发布时间:2020-12-16 10:25:14 所属栏目:百科 来源:网络整理
导读:我想知道如果var是char *,var是否与var!= NULL相同. 这是一个非常小的POC,它表明它不是一回事(或者我做错了什么?)但我不明白为什么. int main(void) { char *c = NULL; if(!c){ printf("1n"); }else{ printf("2n"); } if(c != NULL){ printf("1n"); }el
我想知道如果var是char *,var是否与var!= NULL相同.

这是一个非常小的POC,它表明它不是一回事(或者我做错了什么?)但我不明白为什么.

int main(void) {
    char *c = NULL;
    if(!c){
        printf("1n");
    }else{
        printf("2n");
    }

    if(c != NULL){
        printf("1n");
    }else{
        printf("2n");
    }
    return 0;
}

输出是

1
2

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

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

!c表示“如果c不为NULL”,这是假的,所以它应该在第一个if中打印2,但它打印1!

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

解决方法

!var等效于var == NULL.

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

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

The result of the logical negation operator ! is 0 if the value of its operand compares unequal to 0,1 if the value of its operand compares equal to 0.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读