Forum: Compiler & IDEs Zeiger auf struct-Arrays


von Laplace (Gast)


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"

von Laplace (Gast)


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];

von Fritz G. (fritzg)


Lesenswert?

so wie du das schreibst brauchst ja keinen Zeiger.

a=step.legato sollte gehen.

Wenn mit zeiger dann

step_point->legato

von Fritz G. (fritzg)


Lesenswert?

oder doch mit *step_point->legato ?

Ich hasse Zeiger.

von Laplace (Gast)


Lesenswert?

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

von Μαtthias W. (matthias) Benutzerseite


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

von Laplace (Gast)


Lesenswert?

Korrekt...ich danke euch.

von Fritz G. (fritzg)


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...

von Laplace (Gast)


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...

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.