为什么我们不能在C中通过引用传递指针?

时间:2014-06-05 05:26:38

标签: c pointers pass-by-reference

我正在学习C.当我遇到分段错误时,我正在编写代码来创建链表。我在this问题中找到了解决问题的方法。 我试图通过引用传递指针。解决方案说我们不能这样做。我们必须将指针传递给指针。这个解决方案对我有用。 但是,我不明白为什么会这样。有人能说出原因吗?

1 个答案:

答案 0 :(得分:6)

来自 C编程语言 - 第二版(K& R 2):

  

5.2指针和函数参数

     

由于C通过值传递函数的参数,因此没有直接的方法   对于被调用函数来改变调用函数中的变量。

     

...

     

指针参数使函数能够访问和更改对象   调用它的函数。

如果您理解:

void fn1(int x) {
    x = 5; /* a in main is not affected */
}
void fn2(int *x) {
    *x = 5; /* a in main is affected */
}
int main(void) {
    int a;

    fn1(a);
    fn2(&a);
    return 0;
}

出于同样的原因:

void fn1(element *x) {
    x = malloc(sizeof(element)); /* a in main is not affected */
}
void fn2(element **x) {
    *x = malloc(sizeof(element)); /* a in main is affected */
}
int main(void) {
    element *a;

    fn1(a);
    fn2(&a);
    return 0;
}

正如您所看到的,int和指向元素的指针之间没有区别,在第一个示例中,您需要将指针传递给int,在第二个示例中您需要传递指向元素指针的指针。