c - C 中的参数值不可变?

标签 c pointers segmentation-fault

我有以下代码:

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/

相关文章:

使用 malloc 将 token 复制到二维数组

c - 算法复杂度与运行时间

c++ - 在 C++ 中获取指向复数 vector 的实部和虚部的指针

c - C 中的 sprintf(指向 char 元素数组的指针)

c - 尝试交换字符串内容时出现段错误 11

c - 根据教授的说法,代码中的段错误应该有效

c - 我的进程仍然是守护进程吗?

c - Axis2C内存泄漏?

c++ - 从匿名指针类型中检索内部类型

c++ - vector::大小和段错误