mikrocontroller.net

Forum: Compiler & IDEs Zugriff auf Zeiger / Strukturen


Autor: mikes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe folgende Strukturen:
typedef struct b
{
   unsigned char* rd; 
} b_t;

typedef struct a
{
   struct b_t* ring_buff;
} a_t;

struct a_t* xxx

Mein Ziel ist es nun den Wert der durch
*xxx.ring_buff->rd
adressiert wird, mit seinem Nachfolger zu addieren.
da der Compiler mir auf alle meine Versuche mit Fehlermeldungen 
reagiert, hier meine Frage an Euch, wie funktioniert das?.
Meiner Meinung nach wäre folgenes plausibel, aber wie gesagt nicht 
Compilerfreundlich
 temp = *xxx.ring_buff->rd + *xxx.ring_buff->(rd+1)

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
temp = *xxx->ring_buff->rd + *(xxx->ring_buff->rd+1);

Autor: der mechatroniker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
temp = xxx->ring_buff->rd[0] + xxx->ring_buff->rd[1];

Autor: mikes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
geht dies auch? Natürlich bei erlaubter Veränderung des Pointers?

temp = (xxx->ring_buff->rd)++ + xxx->ring_buff->rd;

Autor: Volker Zabe (vza)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
kann funktionieren, muss aber nicht. Der Compiler hat hier die Wahl der 
Reihgenfolge.
Besser:
temp  = *xxx->ring_buff->rd++;
temp += *xxx->ring_buff->rd++;   // ++ optional

Autor: mikes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Neue Frage:
[c]
unsigned char func(unsigned char* ptr){

      if(*ptr=='5')   return 1;
      else            return 0;
}

//Aufruf
func( &((unsigned char)'5') );
[\c]

Warum ist dieser Aufruf nicht erlaubt vom Compiler?

'5' wird doch in "gecastet" und die Adresse dieses gecasteten wird 
übergeben, was ja gleichbedeutend mit einem Pointer ist.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Warum ist dieser Aufruf nicht erlaubt vom Compiler?

Ich würde vermuten, daß der  Compiler dir das mit irgendeiner 
Fehlermledung mitteilt. Leider kennst die nur du.

> '5' wird doch in "gecastet"

Genau das ist das Problem. Du versuchst, die Adresse vom Ergebnis des 
Casts zu bilden, und das geht nicht.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Außerdem macht ein Cast aus einer Konstanten keine Variable. Ich denke, 
dass hier das Verständnisproblem des OP liegt. Das Ergebnis des Cast ist 
nicht eine namenlose Variable vom angegebene Typ, sondern immer noch 
eine Konstante.

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.