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