c - 为什么'&&'可以用来判断最大界限?
问题描述
我不知道这条线发生了什么num && *num == maxNum
。为什么var && *var
可以用max bound来判断?我真的需要有人来解释这个...
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;
}
}
解决方案
因为num
是size_t *_Nullable num
ie指针类型,所以你应该总是检查它是否为空ieNULL
或有一些有效数据,如果它有效,那么只有它可以安全地去引用(*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
即有什么东西在那里num
你可以做*num
。
考虑以下场景
if (num || (*num == maxNum)) { } /* bad practice, don't do it */
num
如果是,上述条件检查会产生问题NULL
,由于逻辑或操作数||
,它将检查第二个操作数,因为第一个操作数为假,并且在执行时会导致崩溃*num
。
推荐阅读
- c# - 如何在 XPath .net 应用程序中按索引选择元素
- python - 将存储为 Azure Blob 的 CSV 直接加载到 Pandas 数据帧中,而无需先保存到磁盘
- angular - 如何使用带条件的 mat 表扩展行
- c# - 标签未显示随机模拟的输出
- spring-boot - 如何使用默认类从 JSON 登录尝试中读取用户凭据?
- android - Android Bluedroid BLE:某些手机没有收到来自 GATT 服务器的通知?
- azure - 将变量传递到 YAML 文件
- django - 将 AWS Elastic 搜索与 VPC 端点 django haystack 一起使用
- python-3.x - 在没有中间浮点数组的情况下将整数 numpy 数组与浮点标量相乘
- dynamics-crm - XrmToolBox 插件注册。从插件代码编辑插件步骤配置