Array zurückgeben
-
Hallo,
ich habe ein Problem mit der Rückgabe eines Arrays:
int* funktion(...); //Funktion deklariert main() { int result[2]; result = funktion(...); //Wieso geht das nicht? } int* funktion(...){ int array[] = {1,2,3}; return array; }
Wie oben im Kommentar erkennbar, kann ich das array nicht zuweisen wegen einem incompatible assignment error.
Doch wie sollte ich das array sonst zurückgeben?
Danke für Anfänger Hilfe im voraus!
-
gar nicht... mach es so:
void funktion(int*); //Funktion deklariert main() { int result[2]; funktion(resultat); //Wieso geht das nicht? } void funktion(int* array){ for(int i=0; i<2; ++i) array[i] = i+1; }
Deine "Methode" deklariert ein lokales Array in der Funktion. Du gibst zwar einen Zeiger auf dieses lokale Array zurück, jedoch befindet es sich nicht mehr auf dem Stack sobald die Funktion verlassen wird!
Returne nie eine Referenz oder einen Zeiger auf eine lokale Variable.
-
int* != int[]
-
kurze Ergänzung:
result = funktion(...); //Wieso geht das nicht?
das geht nicht, weil man arrays nichts zuweisen kann. Ein Array ist quasi ein speicherbereich wo mehrere Werte hintereinander liegen.
result für sich ist im zusammenhang mit = ein Zeiger auf das erste Element, deshalb kann man ja auch:
int* p=result;schreiben.
Nun klappt das mit dem = zuweisen deshalb nicht. Die Lösung wäre ein
memcpy(result, funktion(...), 2*sizeof(int));nur wie bereits von FireFlow erklärt, ist das Array nach dem beenden der Funktion funktion nicht mehr existent und der Code ist deshalb fehlerhaft. Aber ich hoffe du hast den Punkt mit dem memcpy() für die Zuweisung des Arrays trotzdem verstanden