Frage zu char-Pointer



  • Hallo,
    ich habe eine Frage zu char-Pointer. Es geht um folgenden Code:

    #include <iostream>
    using namespace std;
    
    int main()
    {
       char c[]={'H','a','l','l','o'};//"Hallo";
       char *ptr=c;
       cout << ptr<<endl;
       cout << *ptr<<endl;
    
       int a[]={5,1};
       int *z=a;
       cout <<z<<endl;
       cout <<*z<<endl;
    
    }
    

    Wieso wird bei cout << ptr<<endl; "Hallo" ausgegeben? Normalerweise muss doch die Anfangsadresse des Arrays c angezeigt werden. Grundsätzlich scheint es nicht einfach zu sein, dass man die Anfangsadresse von c rausbekommt.

    cout << &c<<endl;
    

    bringt es auch nicht.



  • altlast aus C. zeiger auf chars sind c-strings und werden auch als solche ausgegeben. wenn du die adresse des ersten objektes willst musst du z.b. nach void* casten.



  • Dein C-String in c ist aber nicht Nullterminiert. Da fehlt noch ein '\0' als letztes Element im Array.
    Erst dann ist es wie das Stringliteral "Hallo".



  • ungefähr so

    cout << static_cast<void*>(ptr) << endl;
    

    ein char* behandelt so ein stream-Operator wie eine Zeichenkette (die, auf die er zeigt). Bei einem void* bekommt du die Adresse angezeigt. Für andere Adresse muss man diesen Cast auch nicht selbst durchführen. Das passiert implizit. Aber für char* gibt's eben eine speziellere Überladung/Sonderbehandlung. In 99% der Fälle will man einfach nicht die Adresse sehen, sondern eine Zeichenkette. Bissel inkonsistent, aber tendenziell bequem.



  • Vielen Dank!!


Anmelden zum Antworten