www.mikrocontroller.net

Forum: Compiler & IDEs Zeiger auf struct-Arrays


Autor: Laplace (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forum,

ich arbeite auf einem ATMega8 und WinAVR. Nun habe ich mir ein Array
aus Strukturen angelegt:

struct step{
  volatile BYTE a_note_nr:3;
  volatile BYTE legato:1;
  volatile BYTE n_length:4;
} step_arr[16];

Dann einen Zeiger für diese Strukturen:

struct step_arr *step_point;

Dann hab ich den Zeiger auf das erste Arrayelement gesetzt:

step_point = step;

Warum kann ich jetzt nicht über

step_point.legato

auf die Strukturvariable zugreifen?
Fehlermeldung:
"midi.c:101: error: request for member `legato' in something not a
structure or union"

Autor: Laplace (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Halt...Fehler...das Array habe ich so angelegt:

struct step_arr{
  volatile BYTE a_note_nr:3;
  volatile BYTE legato:1;
  volatile BYTE n_length:4;
} step[16];

Autor: Fritz Ganter (fritzg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so wie du das schreibst brauchst ja keinen Zeiger.

a=step.legato sollte gehen.

Wenn mit zeiger dann

step_point->legato

Autor: Fritz Ganter (fritzg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder doch mit *step_point->legato ?

Ich hasse Zeiger.

Autor: Laplace (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also a=step.legato
geht auf keien fall, weil step ja ein Array ist und keine Struktur.

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

step_point ist ein Pointer auf den ersten Arrayeintrag. Zugriff also
per -> Operator

step_point->legato = foo; was eine Kurzform für
(*step_point).legato = foo; ist.

Matthias

Autor: Laplace (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Korrekt...ich danke euch.

Autor: Fritz Ganter (fritzg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also a=step.legato
geht auf keien fall, weil step ja ein Array ist und keine Struktur.

Aja, übersehen, aber dann sollte

a=step[3].legato

auf den 4. Eintrag zugreifen.

bzw. *(step_point+3)->legato

Man möge mich korrigieren, ich bin mir da auch nie sicher wenn ich
müde/hungrig/durstig bin...

Autor: Laplace (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das funktioniert klar:
a=step[3].legato
Aber bei
*(step_point+3)->legato
steigst du erst ab (*) von deinem Zeiger, benutzt dann aber trotzdem
den Pfeiloperator, das passt auch nicht ganz...
Du hattest Anfangs schon recht mit
step_point->legato
Wenn ich auf den 4.Eintrag im Array zugreifen will muss ich das dann
über
(step_point+3)->legato
machen.

Dank Dir...

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.