为什么“ &&”可以用来判断最大界限?

时间:2019-08-13 05:23:05

标签: c max

我不知道这行num && *num == maxNum发生了什么。为什么var && *var可以用来判断最大界限? 我真的需要有人解释一下...

void func(...,size_t *_Nullable num,...){

    size_t num_=0;
    somethingHappen_get_num(&num_);

    if(num){
        *num =  num_;
    }

    if (num && *num == maxNum) { //why???????????
        Log_print("num is too big");
        return Error;
    }
}

2 个答案:

答案 0 :(得分:4)

由于numsize_t *_Nullable num即指针类型,因此您应始终检查其是否为空,即NULL或是否有一些有效数据,如果其有效,则只能安全地对其进行解密引用(*num)

这里

if (num && (*num == maxNum)) { } /* safe & correct, && means if 1st operand is valid then only check 2nd operand which is recommended here */

条件检查是正确且安全的,因为首先它检查num是否不是NULL,如果是,则仅进行检查*num == maxNum,即{{ 1}},以便您可以num

考虑以下情况

*num

如果if (num || (*num == maxNum)) { } /* bad practice, don't do it */ num,则以上条件检查会产生问题,由于逻辑OR操作数NULL,它将检查第二个操作数,因为第一个为false,并且在执行{{1 }}。

答案 1 :(得分:2)

您也可以写:

if ((num != 0) && (*num == maxNum))

也许这使它更清晰。
首先,您检查num是否不是NULL。如果此条件为真(只有这样!),您将取消引用指针并检查*num == maxNum