我有以下代码:
void func(uint8 *var) {
uint8 tempvar;
if (var)
var = &tempvar;
*var = 0;
}
我使用以下方法调用该函数:
func(NULL);
代码在行#34; * var = 0;"因为var仍然指向内存地址0x0。我不明白为什么我对临时变量的分配不起作用!
答案 0 :(得分:7)
因为您省略了!
。您正在测试变量是否存在,但您应该测试是否存在:if (!var) ...
要进一步扩展...... var
的类型为uint8 *
,因此var本身就是一个指针。通过编写if (var)
,您正在测试该指针是否为NULL。在伪代码中,您的代码说:
if (the var pointer already exists)
assign a new pointer to it (make it point to somewhere else)
但如果它不存在(如果它指向NULL),你就不管它了。您可以使用调试器或简单的print语句对此进行验证。因此,您最终会使用空指针进行赋值,并使程序崩溃。