*char



  • ich hab da ne n00bfrage:

    #include <iostream>
    using namespace std;
    
    int main()
    {
              char * pc = "Hello world!";
              cout << "Char (Wert):\t" << *pc << endl;
              cout << "Char (Adresse):\t" << pc << endl;
              cin.get();
              return 0;  
    
    }
    

    Ausgabe:
    *pc ist H
    pc ist Hello world!

    wie kann das sein, schließlich hab ich immer gelernt, dass man zeiger immer nur auf einen wert (int) spetialisiert und dann (ohne 😉 die adresse bekommt... 😕
    ist das bei char anders?



  • Bei deinem C-String holst du mit *pc den ersten Buchstaben und mit *(pc+i) den i-ten Buchstaben im String.
    Die Adresse deines Strings kriegst mit &pc .
    Im Artikel-Forum gibt's auch einen Artikel zu Zeigern.



  • IpOperator schrieb:

    ist das bei char anders?

    Jein. Es ist so, dass der überladene operator<< für char*-Zeiger eben nicht die Adresse ausgibt. Der Einfachheit halber dereferenziert und inkrementiert der op<< den char*Zeiger solange bis er die Nullterminierung findet (\0).

    Beispiel: So könnte der überladene op<< im Groben für char*-Zeiger definiert sein:

    std::ostream& operator<<(std::ostream& os, const char* cp)
    {
        while(*cp != '\0')
           os << *cp++;
        return os;
    }
    

    Um dennoch die Adresse eines char*-Zeigers zu bekommen, musst du diesen in einen void* Zeiger casten.
    Beispiel:

    std::cout << static_cast<void*>(cp); // cp ist hier ein Zeiger auf char.
    

    Gruß Caipi



  • George_ schrieb:

    Bei deinem C-String holst du mit *pc den ersten Buchstaben und mit *(pc+i) den i-ten Buchstaben im String.
    Die Adresse deines Strings kriegst mit &pc .
    Im Artikel-Forum gibt's auch einen Artikel zu Zeigern.

    Mit &pc bekommst du die Adresse des Zeigers! Nicht die Adresse des Wertes, den der Zeiger speichert.

    Gruß Caipi



  • danke zur schnellen antwort 🙂


Anmelden zum Antworten