我無法理解,爲什麼這個工程: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