Formatierung von Speicheradressen durch cout
-
Hi,
ich lerne gerade C++ und habe mal ein wenig mit cout und Zeigern herumprobiert, bin dabei dann auf Verhalten gestossen das ich mir nicht so recht erklären kann.
Wenn ich mir einen int definiere und den dann mitsamt Adresse über cout ausgebe, verhält sich alles wie ich es erwarte, also:int *a = new int(10); cout << *a << "@" << a << "\n";...ergibt wie erwartet etwas wie
10@0012FFC1
wenn ich das gleiche dann aber mit nem char probiere:
char *b = new char('x'); cout << *b << "@" << b << "\n";...wird mir die Adresse auch in chars ausgegeben, also in etwa so
x@x²²²²usw
Hat jemand eine Erklärung für mich?
Danke schonmal
-
std::ostream(also die Klasse vonstd::cout) besitzt mehrere Überladungen vonoperator<<. Eine davon ist für Zeiger (da wird die Adresse ausgegeben), eine ist speziell für Zeiger aufchar, dachar*oft als String benutzt wird.Wenn du an die Adresse kommen willst, kannst du das beispielsweise über
reinterpret_castmachen:std::cout << reinterpret_cast<void*>(b) << std::endl;void*ist ein nicht typisierter Zeiger, der einfach eine Adresse speichert, ohne den Typ des Speicherinhalts dahinter zu kennen.