mikrocontroller.net

Forum: PC-Programmierung Zeiger auf struktur?


Autor: christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan (kann sich in FF nicht einloggen) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Unverständliche Frage.

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

Autor: Mark .. (mork)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tobi H. (tobi-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Suchst du sowas?
struct mystruct ** fkt() {
  int size = 5;
  struct mystruct ** ptr = malloc( sizeof(struct mystruct *) * size );
  for ( int i = 0; i < size; ++i ) {
    ptr[i] = malloc( sizeof(struct mystruct) );
    // ptr[i] füllen
  }
  return ptr;
}

Ist aber keine verkettete Liste mehr. Vielleicht schreibst du mal, wofür 
du das genau brauchst.

Autor: Mark .. (mork)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Polster (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: I_ H. (i_h)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Polster (Gast)
Datum:

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

Autor: yxcv (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.