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

Gast #877584
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
(MyReg+2) ist eine Adresse.
(int *) (MyReg+2) ist immer noch eine Adresse.

Da eine Adresse (stark vereinfacht) einer Konstanten entspricht, steht 
da so etwas ähnliches wie
  1 = 2

Gemeint ist wohl
  *(int *)(MyReg+2) = ...
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
>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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.