我无法理解,为什么这个工程:C指针怪异的行为
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;
}
你正在影响本地'int ** out'在函数中不是从main传入的,这是传递值的慢性问题 – Raindrop7