kleine Pointer und Type cast Frage

Gast #3065885
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)));
#3065921
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.

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