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

时间:2016-07-25 21:11:43

标签: c pointers segmentation-fault

我有以下代码:

void func(uint8 *var) {
    uint8 tempvar;

    if (var)
        var = &tempvar;

    *var = 0;
}

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

func(NULL);

代码在行#34; * var = 0;"因为var仍然指向内存地址0x0。我不明白为什么我对临时变量的分配不起作用!

1 个答案:

答案 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语句对此进行验证。因此,您最终会使用空指针进行赋值,并使程序崩溃。