gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 15:22:00 24 4
gpt4 key购买 nike

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

最佳答案

来自 The C Programming Language - Second Edition (K&R 2):

5.2 Pointers and Function Arguments

Since C passes arguments to functions by value, there is no direct way for the called function to alter a variable in the calling function.

...

Pointer arguments enable a function to access and change objects in the function that called it.

如果你明白这一点:

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 的指针,在第二个你需要传递一个指向元素的指针。

关于c - 为什么我们不能在 C 中通过引用传递指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24052243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com