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 von std::cout ) besitzt mehrere Überladungen von operator<< . Eine davon ist für Zeiger (da wird die Adresse ausgegeben), eine ist speziell für Zeiger auf char , da char* oft als String benutzt wird.

    Wenn du an die Adresse kommen willst, kannst du das beispielsweise über reinterpret_cast machen:

    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.


Anmelden zum Antworten