Zeiger auf int und char
-
Hallo,
ich suche nach einer Möglichkeit einen Zeiger bereitzustellen, der sowhol auf char als auch auf int zeigen können soll.
Folgender Ansatz also:volatile char key; int button; int *zeiger; zeiger = &button; // geht zeiger = &key; // Fehler!Jetzt brauche ich die Möglichkeit, mit einer Variablen entweder auf key oder auf button zuzugreifen, wie mache ich das?
Brauche ich da einen bestimmtes Cast?
Mit zeiger = &(int)key; geht es ja nicht (kein lvalue)!MfG
PS: Möglicherweise ist das Beispiel mehr c als c++, da ich aber mit vc++ programmiere habe ich die Frage hier gestellt!
-
zeiger = (int*)&key;Mit harten casts kriegst du jeden Zeiger umgebogen. Ein void Zeiger wäre hier für zeiger aber wohl sowieso angebrachter.
Was das volatile dort soll ist mir ein Rätsel und was das ganze überhaupt soll auch. Sag lieber warum du meinst, dass du einen solchen Zeiger brauchst.
-
Danke, das es so einfach sein würde, hätte ich nicht gedacht!
Mit void-Zeigern habe ich noch kaum gearbeitet, wie würde sowas denn aussehen?
Ich programmiere an einem Spiel, das mit einer Tastatur oder auch einem Joypad steuerbar sein soll. Die Werte für Tastatur sind als volatile char vorgegeben, für Button eines Joypads int. Für eine Zuordnung und Abfrage der Steuerung brauche ich diesen Zeiger, um es möglichst einfach zu gestalten.
-
void* ptr = NULL; int joypad; char key; ptr = (void*)joypad; ptr = (void*)key;volatine sagt, dass der wert jedes mal neu vom Speicher eingelesen sein soll, und nicht im CPU-Register gehalten werden soll. (Wird bei multi-threading verwendet)
Achtung:
-> void (ohne sternchen): nichts!
-> void*: pointer auf "irgendetwas".
-> Du musst einen void* Pointer bei verwendung auf den ziel-typ casten (oder nicht?).-> Dies ist dann nicht möglich...:
void* myarray = new void[10]; // pointer zu nichts :rolling_eyes:
-
lk schrieb:
volatine sagt, dass der wert jedes mal neu vom Speicher eingelesen sein soll, und nicht im CPU-Register gehalten werden soll. (Wird bei multi-threading verwendet)
Das heißt es bei Java, aber nicht bei C++. Dort bedeutet es nur, dass der Compiler die Variable nicht (weg-)optimieren soll. Ach und es heißt volatile.
@TE: wozu brauchst du die Zeiger? Würde es nicht reichen, den
charin einenintoder andersrum zu casten?
-
Dazu gibt es hier einen interessanten Artikel darüber was volatile exakt bedeutet.