Cast to (int *): Was mache ich falsch?

Gast #877584
Lesenswert?

Wieso geht das nicht, bzw. wieso kriege ich stets die Fehlermeldung
"error: invalid lvalue in assignment"?


void Test(void)
{
  unsigned char MyReg[8];
  int step_count = 4000;
  (int *) (MyReg+2) = step_count;  // error: invalid lvalue in 
assignment
  (int *) &MyReg[2] = step_count;  // error: invalid lvalue in 
assignment
}

Ich verwende AVRGCC 4.1.2
#877624
Lesenswert?

Du nimmst also an, dass das Array fortlaufend im Speicher definiert ist, 
oder ?

Warum willst Du einen int-Wert in einem Char-Array speichern ? Das passt 
nicht so ganz zusammen. Die Definition von int ist von Plattform zu 
Plattform unterschiedlich definiert, d.h. Deine Lösung ergibt einen sehr 
schlecht portierbaren Code.

Ok, ich nehme an, Du brauchst noch 8 Byte Speicher :-)
Gast #877704
Lesenswert?

>Du nimmst also an, dass das Array fortlaufend im Speicher definiert ist,
>oder ?

-Ja-

Ich könnte den MyReg-Block natürlich auch als Struct, statt als Array 
zusammen bauen, das wäre etwas sauberer.

Aber auf den Registerblock wird eh Bytweise als I2C-Bus Registerblock 
von einem anderen Controller aus gelesen und geschrieben...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren