我无法理解为什么会这样有效:
int main() {
int test = 4;
int *bar = &test;
int **out = &bar;
printf("%d\n", **out);
return 0;
}
但这不是:
void foo(int *src, int **out) {
out = &src;
}
int main() {
int test = 4;
int *bar = &test;
int **out;
foo(bar, out);
printf("%d\n", **out);
return 0;
}
第二个片段引发“分段错误”。对我来说,似乎他们做同样的事情。有人可以解释一下吗?
编辑:(根据答案更新的代码):
void foo(int *src, int **out) {
out = &src;
}
int main() {
int test = 4;
int *bar = &test;
int *out;
foo(bar, &out);
printf("%d\n", *out);
return 0;
}
那为什么这不起作用?
解决:(我必须仔细考虑我真正想做的事情),这就是结果:
void foo(int *src, int **out) {
*out = src;
}
int main() {
int test = 4;
int *bar = &test;
int *out;
foo(bar, &out);
printf("%d\n", *out);
return 0;
}
答案 0 :(得分:4)
在第二个中,out
中的变量main
不受foo
内作业的影响。
在您的修改中,您需要foo
分配其中out
指向的内容:
*out = src;
答案 1 :(得分:0)
事物按价值传递到函数中。更改函数中的值不会改变外部世界。