我不知道这行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;
}
}
答案 0 :(得分:4)
由于num
是size_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
。