我无法理解为什么会这样:
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;
}
最佳答案
在第二种情况下,main
中的变量 out
不受 foo
内部赋值的影响。
在您的编辑中,您需要将 foo
分配给其中的 out
指向的内容:
*out = src;
关于C 指针奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41404072/