Forum: Compiler & IDEs pointer auf arrayelement in struct


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von peterguy (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich stehe grad etwas auf dem Schlauch.
Ich versuche, einen Zeiger auf ein Arrayelement innerhalb eines Structs 
zu bekommen.

Hier der Struct:
struct {
  uint16 readPointer;
  uint16 writePointer;
  _tCommand command[APP_LENGTH_COMMAND_QUEUE];  // Auf eines der Elemente brauche ich später den Zeiger
} APP_CommandList;

Mein Zugriff sieht wie folgt aus:
_tCommand* APP_GetNextCommand( ) 
{
   /* 
   Some code
   */
   return APP_CommandList.command[APP_CommandList.readPointer];  // <-- Hier soll ein Zeiger zurückgegeben werden
}

Nun möchte ich nicht den Array-Eintrag "command[x]" an sich zurüchgeben, 
sondern einen Zeiger darauf. So wie es der Rückgabewert der Funktion 
auch fordert.

Wie genau kann ich das bewerkstelligen? Bin da grad echt verpeilt...

von Jörg G. (joergderxte)


Bewertung
0 lesenswert
nicht lesenswert
Suchst du "&", oder versteh ich bloß nicht was du meinst?
_tCommand* APP_GetNextCommand( ) 
{
   /* 
   Some code
   */
   return &APP_CommandList.command[APP_CommandList.readPointer];
//        ^Hier die Adresse zurückgeben 

hth, Jörg
ps.:
struct {
  /* Das hier ist besser verständlich, wenn du es korrekterweise
     als Index bezeichnest */
  uint16 readIdx;// bzw. readIndex
  uint16 writeIdx;
  _tCommand command[APP_LENGTH_COMMAND_QUEUE];
} APP_CommandList;

von peterguy (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> Suchst du "&", oder versteh ich bloß nicht was du meinst?
Nö, ersteres. Habe verzweifelt versucht, das '&' vor command zu packen, 
was natürlich nicht funktioniert hat ;-)

Scheint zu klappen, zumindest kompilierts jetzt durch.

Mit deinem Hinweis bzgl. Verständlichkeit hast du natürlich recht. Werde 
ich bei gelegenheit nachpflegen.

von Rolf Magnus (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Sinnvoll wäre es gewesen, wenn du den Index nicht als "Pointer" 
bezeichnet hättest. Ich hatte zuerst gedacht, der Fehler sei, daß du 
einen Zeiger als Array-Index verwendest.

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.