Forum: PC-Programmierung Zeiger auf struktur?


von christian (Gast)


Lesenswert?

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

von Stefan (kann sich in FF nicht einloggen) (Gast)


Lesenswert?

Unverständliche Frage.

Meinst du sowas?
Beitrag "Verkettete Listen in Ansi C"

von Mark .. (mork)


Lesenswert?

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

von christian (Gast)


Lesenswert?

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

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

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.

von Mark .. (mork)


Lesenswert?

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.

von Polster (Gast)


Lesenswert?

man kann Arrays in C nicht direkt übergeben, man kann aber ein Array in 
ein struct reinpacken und dieses dann an eine Funktion übergeben!

von I_ H. (i_h)


Lesenswert?

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.

von Polster (Gast)


Lesenswert?

darum übergibt man auch einen Zeiger auf die Struktur. hätte ich 
dazusagen sollen!

von yxcv (Gast)


Lesenswert?

> 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
Noch kein Account? Hier anmelden.