use*_*740 4 c pointers pass-by-reference
我正在学习C.当我遇到分段错误时,我正在编写代码来创建链表.我在这个问题上找到了解决问题的方法.我试图通过引用传递指针.解决方案说我们不能这样做.我们必须将指针传递给指针.这个解决方案对我有用.但是,我不明白为什么会这样.有人能说出原因吗?
来自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,在第二个示例中,您需要将指针传递给指向元素的指针.