Zeiger problem(Speicher Überschreibung?)[gelöst]
-
Hallo,
ich arbeite mich gerade durch das Tutorial:
http://www.c-howto.de/tutorial-zeiger-uebung-loesung-teil1.htmlBin 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