char Pointer auf int?
-
Hallo, wir haben die folgende Aufgabe:
"Definieren Sie eine int Variable und lassen Sie eine Pointervariable vom Typ unsigned char * darauf zeigen. Geben Sie den Inhalt dieser Adresse als Dezimalzahl aus."Allerdings bekomm ich beim versuchen mit:
int a=987654321; unsigned char *p; p = &a;den Fehler:
cannot convert `int' to `unsigned char' in assignment**Wie soll es denn Funktionieren?
Gruß
-
Da dieses Mittel eigentlich nur für Dummheiten genutzt werden kann, braucht es hier den stärksten Cast den C++ kennt:
int a=987654321; unsigned char *p; p = reinterpret_cast<unsigned char*>(&a);Mit dem reinterpret_cast sagst du dem Compiler, dass du ganz genau weißt was du tust und dass er gefälligst das Maul halten soll.
Da dies eine Übungsaufgabe ist, weißt du zwar vermutlich nicht was du da tust, aber da du dies anhand der Aufgabe lernen sollst, ist der reinterpret_cast wohl angemessen. Normalerweise weist die Verwendung von reinterpret_cast im Programm nämlich auf Designfehler hin.
-
Hallo SeppJ, danke für deine Antwort! Aber wenn wir es mit:
int a=987654321; unsigned char *p; p = reinterpret_cast<unsigned char*>(&a);versuchen, kommen nur Smilies und andere seltsame Zeichen bei raus.
Unsere komplette Aufgabe sieht wie folgt aus:
"Definieren Sie eine int Variable und lassen Sie eine Pointervariable vom Typ unsigned char * darauf zeigen. Geben Sie den Inhalt dieser Adresse als Dezimalzahl aus. Tun Sie dasselbe mit den folgenden drei Speicherzellen. Wandeln Sie diese drei Werte manuell in eine Dualzahl um und kontrollieren Sie das Ergebnis.
Testlauf für 987654321 = 00111010 11011110 01101000 10110001:
int Wert = ? 987654321
0x22ff1c: 177
0x22ff1d: 104
0x22ff1e: 222
0x22ff1f: 58"
-
kommen nur Smilies und andere seltsame Zeichen bei raus.
Ich schließe daraus, dass du den Inhalt der Speicherzelle nicht als Zahl, sondern als Zeichen(kette) ausgegeben hast. Dies ist der Normalfall wäre, wenn du einfach
cout<<p;odercout<<*p;gemacht hast, weil der Operator << Zeichen(ketten) gesondert behandelt (das erste wäre übrigens ganz falsch). Um dies zu vermeiden musst du wieder zurück in einen nicht-char Datentyp konvertieren:cout<<static_cast<unsigned int>(*p);
-
Danke! Die Ausgabe des Inhalts klappt schonmal.
Allerdings müssen wir (wie der Testlauf zeigt) auch den dazugehörigen Adressennamen ausgeben.Im Normalfall klappt das ja mit
cout << p;wenn ich z.B. habe:
int a; int *p; p = &a;Aber wie Stelle ich das jetzt mit dem reinterpret_cast an?
-
Probiers doch einfach mal aus. Wieso sollte irgendetwas anders sein?