B
hermes schrieb:
Was ist casten?
Eine explizite Typumwandlung.
int a;
int b;
int c;
int *pionter;
pointer = (int*) &a;
pointer zeigt auf a;
Soweit richtig, aber das kannst du auch einfacher haben:
poiner = &a;
&a ist bereits ein Pointer auf int (weil a ein int ist), muss also nicht weiter gecastet werden.
pointer++;
pointer zeigt auf b;
Falsch. Der Pointer zeigt auf die Position nach a. Was genau dort liegt, ist nicht festgelegt. Selbst wenn dein Compiler so arbeitet, dass b dort liegt, ist es ausgesprochen mieser Stil, sich darauf zu verlassen. Wenn du Variablen (gleichen Typs) willst, die im Speicher direkt hintereinander liegen, musst du mit Arrays arbeiten.
Folgendes Beispiel:
buffer = (unsigned char *)&TXB0D0;
TXB0D0 ein 8Bit Register eines Microcontrollers, es folgen TXB0D1,....,TXB0D7.
Ich übergebe der Funktion einen Zeiger auf einen 8 Byte langen String,
der anschliessend in die Register TXB0D0- TXB0D7 kopiert werden soll.
buffer ist als unsigned char Pointer declariert, warum muß ich "casten" wenn
ich den Pointer auf TXB0D0 setzen möchte, habe vorher Assembler programmiert
und es kommt mir deshalb vieleicht etwas komisch vor.
Wenn TXB0D0 einen Typ hat, der sich von unsigned char unterscheidet, kannst du buffer nicht direkt drauf zeigen lassen. Ein Zeiger kann immer nur auf Daten von "seinem" Typ zeigen (also int* auf int, char** auf char* usw.). Weißt du aber aus irgendeinem Grund besser als der Compiler, kannst du ihn durch einen Cast zwingen, buffer die Adresse von TXB0D0 zuzuweisen.