[C/C++] Simple Frage zu Verhalten von char pointern.

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Coksnuss, 10. Juni 2010 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 10. Juni 2010
    Simple Frage zu Verhalten von char pointern.

    'n Abend (oder Morgen):

    habe eine kurze simple Frage:
    Und zwar wenn ich einen pointer mit cout ausgeben lasse sollte ich ja eigentlich die Adresse angezeigt bekommen auf welche der Pointer zeigt.

    Also wenn ich jetzt bspw. folgenden Code habe:
    Code:
    int i = 3;
    int *pi = &i;
    cout << i << endl;
    Dann bekomm ich halt irgentwas mit 0012FF30 oder so raus.

    Aber wieso ist das Verhalten bei char pointern anders? Wenn ich einen pointer auf das erste Element in einem char Array anlege und ausgeben lasse bekomme ich den String anstatt der Adresse des ersten Elements gezeigt.

    Also bspw. folgender Code:
    Code:
    char str[] = "Irgentein String";
    char *pstr = str;
    // char *pstr = str[0] <-- ist ja das selbe wenn ich das richtig verstanden habe...
    // char *pstr = "Irgentein String"; <-- oder das...
    cout << pstr << endl;
    Erwarten tu ich jetzt doch eigentlich das ich eine Adresse ausgespuckt bekomme weil ich mir ja den Inhalt des Pointers ausgeben lassen will (=> Welcher doch auf eine Adresse zeigt?!)
    Aber als Ergebnis kommt "Irgentein String" - Wieso?
     
  2. 10. Juni 2010
    AW: Simple Frage zu Verhalten von char pointern.

    Das liegt daran, dass irgendwo in der Standard-Bibiothek der Operator<< für char * überladen ist. Da wird dann eben statt der Adresse jedes zeichen bis zum ersten auftauchenden 0-Zeichen ('\0') ausgegeben.
    Die Überladung sieht dann so aus (hier mit Beispiel int *):

    Code:
    #include <iostream>
    
    std::ostream &operator<<(std::ostream &ostr, int *i)
    {
     std::cout << *i;
    
     return ostr;
    }
    
    int main(void)
    {
     int i = 1337, *pi = &i;
    
     std::cout << pi; // 1337
    }
    
    Hier wird 1337 (der Wert von i) statt der Adresse von i ausgegeben.

    Wenn du nun die Operatorüberladung auskommentierst, wird die Adresse ausgegeben.




    Nein,
    Code:
    char *pstr = &str[0]
    wäre das gleiche.
     
  3. 10. Juni 2010
    AW: Simple Frage zu Verhalten von char pointern.

    Ich glaube, dass das an dem Verhalten von cout liegt (oder auch printf). Wenn man als Argument ein Char Pointer oder CHar Array (was auch wieder ein Pointer ist) übergibt, dann wird dieser automatisch als String interpretiert.

    Um die Adresse des ersten Elementes zu bekommen, müsstest du entweder mit
    Code:
    (int*)pstr
    oder mit

    Code:
    static_cast<void*>(pstr)
    casten.

    greez

    //edit: mist, Gibbon war schneller
     
  4. 10. Juni 2010
    AW: Simple Frage zu Verhalten von char pointern.

    Mist - Meinte ich doch ...

    Aber Danke für deine Antwort, jetzt versteh ich wieso sich das so verhält...

    Habt beide ne BW
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.