Zeiger problem(Speicher Überschreibung?)[gelöst]



  • Hallo,

    ich arbeite mich gerade durch das Tutorial:
    http://www.c-howto.de/tutorial-zeiger-uebung-loesung-teil1.html

    Bin jetzt beim Thema Zeiger angelegt soweit eigentlich auch alles klar.

    Nur leider kann ich hiermit nicht viel anfangen:

    int a=2, b=5, *c=&a, *d=&b;
    
    a = *c * *d;		// a=10
    *d -= 3;		// b=2, *d=2
    b = a * b;		// b=20
    c = d;			// *c=20 ab hier ist es für mich nicht mehr zu verstehen. Was ist mit c und d? Sind beide werte = 0?
    b = 7;			// b=7 
    a = *c + *d;		// a=14
    

    Bei einer Ausgabe habe ich gesehen das *c und *d auf dem Speicherplatz von b liegen. Wie kann das passieren.

    danke schonmal.

    Gruß,
    Martin



  • int a=2, b=5, *c=&a, *d=&b; 
    
    a = *c * *d;        // a=10 
    *d -= 3;        // b=2, *d=2 
    b = a * b;        // b=20 -> *d = 20 weil d zeigt auf b
    c = d;            // *c=20 -> c zeigt auf d und somit auf b
    b = 7;            // b=7 -> *c = 7 und *d = 7 weil c und d zeigen beide auf b!
    a = *c + *d;        // a=14
    


  • c = d;            // *c=20 -> c zeigt auf d und somit auf b
    b = 7;            // b=7 -> *c = 7 und *d = 7 weil c und d zeigen beide auf b
    

    zum Verständnis soll das also heißen:

    c = d bedeutet soviel in diesem Fall wie c zeigt auf d.
    Liegt das daran das beide Zeiger sind?

    Dann ist der Rest wieder logisch. Hoffe meine Schlussfolgerung ist richtig.



  • Ein Zeiger ist quasi nur eine Adresse im Speicher. Wenn du nun d=&b schreibst und d ist ein Zeiger, dann speichert dieser die Adresse von b. mit *d kannst du auf den Wert hinter dieser Adresse zugreifen (dereferenzieren).

    Im Fall wenn c und d Zeiger sind ist das ganze logisch. beide haben eine Adresse im Zeiger und bei c = d hat c danach auch die Adresse von d.

    int a = 5, b = 10, *d, *c;
    d = &b;
    printf("Wert von d: %d\n", *d);
    printf("Adresse von d: %p\n", d);
    
    c = &a;
    printf("Wert von c: %d\n", *c);
    printf("Adresse von c: %p\n", c);
    
    c = d;
    printf("Wert von c: %d\n", *c);
    printf("Adresse von c: %p\n", c);
    printf("Wert von d: %d\n", *d);
    printf("Adresse von d: %p\n", d);
    


  • Jetzt ist es drin!
    Vielen dank! Super Erklärung


Anmelden zum Antworten