Zeiger als Rückgabewert
-
oder wie wäre es denn einfach mit einer globalen variablen?
das müsste doch auch funktionieren...
-
oder wie wäre es denn einfach mit einer globalen variablen?
das müsste doch auch funktionieren...Würde sicherlich funktionieren. Allerdings sind die Lösungsansätze von supertux und TactX eleganter. Gerade bei größen Projekten kann man sich mit globalen Variablen in Teufels Küche und auch noch etwas weiter bringen....
-
Dr. Tux schrieb:
Gerade bei größen Projekten kann man sich mit globalen Variablen in Teufels Küche und auch noch etwas weiter bringen....
das sind nur gerüchte...
-
ich komme gerade nicht weiter! mit "static" funktionert es!
Nun möchte ich es mit malloc probieren!
Ich muss also in der main funktion das array allozieren!
Aber nun meine Fragen:
1. Wozu steht bei der funktion "int* klar(void)" hinter dem int* ein Sternchen(*)?
2. Wie alloziere ich das Feld?Ich habe schon mehreres probiert:
int *ptr; int i = 0; ptr = (int*)malloc(sizeof(int feld[5])); ptr = klar(); for(i=0; i <10; i++) printf("%d\n", ptr[i]);
oder
int *ptr; int i = 0; ptr = (int*)malloc(sizeof(feld[5])); /* ohne int*/ ptr = klar(); for(i=0; i <10; i++) printf("%d\n", ptr[i]);
Aber irgendwie kriege ich es nicht gebacken!
-
@1: Das Sternchen steht für "Zeiger auf (in dem Fall) int".
@2: Nein, deine Funktion sollte den Speicher anlegen (das Hauptprogramm ist dann dafür zuständig, ihn wieder freizugeben):
int* klar() { int* feld = malloc(5*sizeof(int)); ... return feld; } int main() { int* ptr=klar(); ... free(ptr); }
-
okay, klingt irgendwie plausibel!
aber brauche ich dann überhaupt das Sternchen hinter dem int* bei der funktion int* klar()? (und ich meine nicht den zeiger bzw. die allozierung des arrays feld!)
-
Ja, klar brauchst du den.
Fehlt er hieße das ja, dass du EINEN int zurückgibst.
Du willst aber ein Array zurückgeben.
In C werden Arrays intern als Pointer dargestellt.
Beispiel:int feld[5]; int* pFeld = feld; /* Jetzt kannst du pFeld als Aliasnamen für feld benutzen: */ pFeld[2] = 4; /* feld[2] enthält jetzt 4 */
Lässt du die [] weg ist feld ein Pointer auf das erste int im Array.
Gruß
Don06
-
vista schrieb:
Dr. Tux schrieb:
Gerade bei größen Projekten kann man sich mit globalen Variablen in Teufels Küche und auch noch etwas weiter bringen....
das sind nur gerüchte...
Die Loadgröße sollte man nicht unterschätzen
-
Oh, ein Verschollener kehrt zurück
-
Danke euch allen!! Hab's kapiert