C中的参数值是不可变的吗?

Kun*_*oor -5 c pointers segmentation-fault

我有以下代码:

void func(uint8 *var) {
    uint8 tempvar;

    if (var)
        var = &tempvar;

    *var = 0;
}
Run Code Online (Sandbox Code Playgroud)

我使用以下方法调用函数:

func(NULL);
Run Code Online (Sandbox Code Playgroud)

代码在"*var = 0;"行给出了分段错误 因为var仍然指向内存地址0x0.我不明白为什么我对临时变量的赋值不起作用!

H. *_*ijt 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)
Run Code Online (Sandbox Code Playgroud)

但如果它不存在(如果它指向NULL),你就不管它了.您可以使用调试器或简单的print语句对此进行验证.因此,您最终会使用空指针进行赋值,并使程序崩溃.

  • 不.`if(...)`是测试某事是否真实的测试.零(NULL)值提升为false; 所有其他值为true.无论如何,试试吧! (5认同)
  • @Kunal Kapoor:`if(var)`转换为`if(var!= 0)`,这与你想象的完全相反. (3认同)