Ich habe Probleme beim Begreifen, warum dies funktioniert:C Zeiger seltsames Verhalten
int main() {
int test = 4;
int *bar = &test;
int **out = &bar;
printf("%d\n", **out);
return 0;
}
aber nicht:
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;
}
Der zweite Schnipsel wirft "Segmentation fault". Mir scheint es, sie machen das Gleiche. Kann mir bitte jemand erklären?
Edit: (aktualisierte Code basiert auf Antworten):
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;
}
Warum funktioniert das nicht?
Gelöst: (ich hatte zu durchdenken, was ich wirklich tun wollte), das ist das Ergebnis:
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;
}
Sie beeinflussen die lokale 'int ** out' in Funktion nicht die von Main übergeben, das ist die chronische Frage der Weitergabe von Wert – Raindrop7