Forum: Compiler & IDEs Zugriff auf Zeiger / Strukturen


von mikes (Gast)


Lesenswert?

Ich habe folgende Strukturen:
1
typedef struct b
2
{
3
   unsigned char* rd; 
4
} b_t;
5
6
typedef struct a
7
{
8
   struct b_t* ring_buff;
9
} a_t;
10
11
struct a_t* xxx

Mein Ziel ist es nun den Wert der durch
1
*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
1
 temp = *xxx.ring_buff->rd + *xxx.ring_buff->(rd+1)

von Stefan E. (sternst)


Lesenswert?

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

von der mechatroniker (Gast)


Lesenswert?

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

von mikes (Gast)


Lesenswert?

geht dies auch? Natürlich bei erlaubter Veränderung des Pointers?

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

von Volker Z. (vza)


Lesenswert?

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

von mikes (Gast)


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.

von Rolf Magnus (Gast)


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.

von Stefan E. (sternst)


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.

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.