Hi, innerhalb einer Funktion fkt() möchte ich einen Zeiger auf eine Struktur definieren.Dem Zeiger werden in einer for-Schleife versch. Werte zugewiesen. Diese möchte ich in einem Array geben und als Rückgabewert liefern: struct mystruct * fkt(){ struct mystruct *point; for(point=irgendwas; point; point=point->next) /*so, jetzt möchte ich alle point's in array abspeichern, aber wie?*/ return(den array mit dem Strukturzeigern auf mystruct); } Vielen Dank für die Hilfe
Um etwas in ein Array zu speichern, muss man erstmal ein Array haben. Es gibt 2 Möglichkeiten - entweder Du legst das Array in der Funktion mittels malloc o.ä. an, also struct mystruct **pointarray = malloc(maximale Größe), oder Du übergibst der Funktion einen Zeiger auf ein bereits exestierendes Array (am besten mit seiner Größe), also struct mystruct * fkt(struct mystruct **pointarray, size_t size). Beim ersteren muss man noch beachten, dass der Array-Speicher irgendwann wieder manuell freigegeben werden muss. MfG Mark
Ich meine, das ich ein Array mit Strukturzeigern als Returnwert geben möchte.Wenn point auf einen bestimmten Wert zeigt mach ich "return(point)".Wie aber, wenn ich mehrere Werte auf die point (durch Schleife)zeigt habe. Dann müsste ich ein array als Returnwert geben (also ein Array von Strukturzeigern). Und da habe ich keine Ahnung! Christian
Suchst du sowas?
1 | struct mystruct ** fkt() { |
2 | int size = 5; |
3 | struct mystruct ** ptr = malloc( sizeof(struct mystruct *) * size ); |
4 | for ( int i = 0; i < size; ++i ) { |
5 | ptr[i] = malloc( sizeof(struct mystruct) ); |
6 | // ptr[i] füllen
|
7 | }
|
8 | return ptr; |
9 | }
|
Ist aber keine verkettete Liste mehr. Vielleicht schreibst du mal, wofür du das genau brauchst.
Christian wrote:
>Dann müsste ich ein array als Returnwert geben
Man kann in C keine Arrays übergeben, sondern nur Zeiger, die auf ein
Array zeigen.
man kann Arrays in C nicht direkt übergeben, man kann aber ein Array in ein struct reinpacken und dieses dann an eine Funktion übergeben!
Was aber ziemlich dämlich ist, weil die ganzen Daten dann jedesmal auf'n Stack kopiert werden müssen. In C übergibt man an der Stelle einen Zeiger, in C++ eine const reference.
darum übergibt man auch einen Zeiger auf die Struktur. hätte ich dazusagen sollen!
> darum übergibt man auch einen Zeiger auf die Struktur. hätte ich > dazusagen sollen! Dann kannst du auch gleich den Zeiger auf das Array übergeben, macht den Zugriff auf den Inhalt auch (schreib) kürzer.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.