Zeiger Verständnis die 20.



  • Hallo,

    ich lerne zur Zeit den Umgang mit Zeigern.
    Ich schrieb ein kleines Programm, welches mir die Adresse und den Inhalt einer
    Adresse ausgeben sollte, leider bekomme ich total wirres Zeug heraus,
    z.B hat plötzlich *c = "hallo" in der Ausgabe mit cout << *c; nur noch ein h, die
    anderen Buchstaben fallen förmlich weg. Na jedenfalls hier ist der Quellcode, wäre nett wenn mir den jemand kommentieren könnte.

    #include <iostream>
    using namespace std;
    
    int main() {
    
        // Wieso geht: int *p = 3; nicht? aber ->
        int *p;
        *p = 3;
        cout << p << '\n' << *p;
    
        char *c = "hallo";
        char *q;
        *c == *q;
        cout << *c << '\n' << *q;
        cout << c  << '\n' << q;
        cout << *c << '\n' << q;
        cout << c  << '\n' << *q;
    }
    


  • // Wieso geht: int *p = 3; nicht? aber ->
        int *p;
        *p = 3;
        // weil int *p = 3; gleichbedeutend ist mit int *p; p = 3;
        // btw ist dein Code inkorrekt. p ist nicht initialisiert und zeigt
        // "zufällig" irgendwo in die Pampa. Dann machst du einen Schreibzugriff
        // auf die Adresse -> Peng
    
        cout << p << '\n' << *p;
    
        char *c = "hallo";
        char *q;
        *c == *q; // kann ebenfalls zum Absturz führen:
        // 1) q ist nicht initialisiert, zeigt also auf eine "zufällige" Speicherstelle
        // ein Lesezugriff kann einen Schutzfehler verursachen
        // 2) c zeigt auf eine Zeichenkettenkonstante. Ein Schreibzugriff darauf
        // ist nicht erlaubt und kann mit Absturz oder wenigstens 
        // unvorhergesehenem Verhalten beantwortet werden
        cout << *c; // gibt das Zeichen, auf das c zeigt, aus
        cout << c; // gibt die nullterminierte Zeichenkette, die bei c beginnt,
                   // aus
    }
    




  • Ist da ein "dev/" zuviel im URL?



  • MFK schrieb:

    Ist da ein "dev/" zuviel im URL?

    Ja. 🙂





  • // 2) c zeigt auf eine Zeichenkettenkonstante. Ein Schreibzugriff darauf
    // ist nicht erlaubt und kann mit Absturz oder wenigstens
    // unvorhergesehenem Verhalten beantwortet werden

    hm? C wird an der stelle doch garkeinem schreibzugriff ausgesetzt, oder?

    *c == *q;
    

    Bleibt immernoch ein vergleich, wobei das ergebnis im Datennirvana verschwindet.

    @Author: sicher das das gewollt war? 😉



  • THE_FreaK schrieb:

    C wird an der stelle doch garkeinem schreibzugriff ausgesetzt, oder?

    Ups, ich hab an der Stelle eine Zuweisung sehen wollen. Du hast natürlich recht.


Anmelden zum Antworten