Forum: Compiler & IDEs kleine Pointer und Type cast Frage


von simon (Gast)


Lesenswert?

Was bedeuten die zwei Zeilen genau?

Die Addresse von page wird um 1 erhöht und anschliessend ein cast auf 
unsigned char, aber warum mit *? Warum wird hier eine addresse zu einem 
pointer gemacht, und warum das zweite * ganz am Anfang?
1
SPITransfer((*((unsigned char*)&page+1)));

Warum ist hier kein weiterer * notwendig?
1
SPITransfer((((unsigned char)page&0xFE)|(*((unsigned char*)&addr+1) & 0x01)));

von Fabian O. (xfr)


Lesenswert?

Die Funktion SPITransfer erwartet offenbar einen unsigned char, also 8 
Bit. page hat aber (hoffentlich) einen größeren Typ, vielleicht ein 
uint16_t.

Von diesem uint16_t soll nun das "zweite" Byte gelesen werden. Welche 
Wertigkeit das hat, ist plattformabhängig. Daher ist das schon mal eine 
blöde Idee. Aber sei es drum. Der Aufruf macht jetzt folgendes:
1
                     page       // Der Wert von page (16 Bit)
2
                    &page       // Die Adresse von page als Zeiger auf 16 Bit
3
   (unsigned char*) &page       // Die Adresse von page als Zeiger auf ein Byte interpretiert
4
  ((unsigned char*) &page) + 1  // Die Adresse des nächsten Bytes
5
*(((unsigned char*) &page) + 1) // Der Wert des Bytes an dieser Adresse

Im zweiten Beispiel wird im ersten Teil kein Zeiger gebildet, sondern 
nur der Typ von page von (vermutlich) uint16_t auf unsigned char 
geändert. Also muss auch kein Zeiger mit * derefenziert werden.

von simon (Gast)


Lesenswert?

Danke!

Was wäre dann das hier?

1
(unsigned char) &page

von Ingo L. (Gast)


Lesenswert?

Die Adresse von Page als integer (Zahl)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

simon schrieb:
> Was wäre dann das hier?
>
> (unsigned char) &page


Ingo L. schrieb:
> Die Adresse von Page als integer (Zahl)

Nein. Es ist die Adresse von page als unsigned char - also auf den 
Wertebereich von 0 bis 255 beschnitten.

von Carl D. (jcw2)


Lesenswert?

Die unteren 8Bit der Adresse von page.
Oder deutsch: Blödsinn!

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.