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

use*_*740 4 c pointers pass-by-reference

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

Dav*_*eri 8

来自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;
}
Run Code Online (Sandbox Code Playgroud)

出于同样的原因:

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;
}
Run Code Online (Sandbox Code Playgroud)

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