[Newbie] Adressausgabe einer char-Variabel



  • Hi!

    Ich verstehe hier nicht, warum mir der Zeiger zeig2 bei
    der Ausgabe in der Konsole nicht die Adresse von c anzeigt,
    so wie ich es erwarten würde und es auch bei zeig1 passiert,
    sondern "G" + ein Sonderzeichen? Ich übergebe mit &c doch richtig,
    da es kein Array sondern nur ein char ist...

    /* Beispiel für Verwendung einer Referenz */
    #include <iostream>
    
    using namespace std;
    
    int main() {
    	int x = 5;
    	int &ref1 = x;
    	int *zeig1 = &x;
    
    	char c = 'G';
    	char &ref2 = c;
    	char *zeig2 = &c;
    
    	cout << "\tReferenz auf x: " << ref1;
    	cout << "\tReferenz auf c: " << ref2 << endl;
    	cout << "\tZeiger   auf x: " << zeig1;
    	cout << "\tZeiger   auf c: " << zeig2 << endl;
    
    	return 0;
    }
    


  • der operator << ist für die meisten Zeiger ganz ok, aber für char-Zeiger wurde er überladen mit einer anderen Bedeutung. Da interpretiert er die Adrresse als Zeiger aufs erste Element eines Strings, der mit char(0) aufhört.

    void *zeig3 = zeig2;
    cout << "\tZeiger   auf c: " << zeig3 << endl;
    


  • [quote="volkard"]der operator << ist für die meisten Zeiger ganz ok[cpp]

    Gibt es eine weitere Ausnahme?



  • Exception# schrieb:

    Gibt es eine weitere Ausnahme?

    char*, die noch mit const oder volatile verziert werden (ok, kleinlich)
    und natürlich Methodenzeiger.



  • MSVC interpretiert IIRC auch (cv) signed char* als String-Zeiger. Weiss aber nicht ob das auch standardkonform ist.


  • Mod

    volkard schrieb:

    Exception# schrieb:

    Gibt es eine weitere Ausnahme?

    char*, die noch mit const oder volatile verziert werden (ok, kleinlich)
    und natürlich Methodenzeiger.

    Zeiger auf nicht-statische Memberfunktionen sind keine Zeiger. Funktionszeiger wären als Ausnahme mögliche: für die meisten existieren keine Überladungen, sondern nur für solche, die Inserter sind.

    hustbaer schrieb:

    MSVC interpretiert IIRC auch (cv) signed char* als String-Zeiger. Weiss aber nicht ob das auch standardkonform ist.

    Das ist so vorgeschrieben (27.6.2.5.4/2).


Anmelden zum Antworten