我有以下代码:
void func(uint8 *var) {
uint8 tempvar;
if (var)
var = &tempvar;
*var = 0;
}
我使用以下方式调用该函数:
func(NULL);
代码在“*var = 0;”行给出了段错误因为var仍然指向内存地址0x0。我不明白为什么我对临时变量的赋值不起作用!
最佳答案
因为你省略了!
。您正在测试变量是否存在,但您应该测试它是否不存在: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),则不要管它。您可以使用调试器或简单的打印语句来验证这一点。因此,你最终会得到一个空指针的赋值,并使你的程序崩溃。
关于c - C 中的参数值不可变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38577497/