Hallo,
es geht wieder um C. Diesmal aber vllt um nicht eine zu einfache Sache, zumindest mache ich hier oft Fehler OBWOHL ich das schon tausend mal durchgegangen bin :/
Also mit einfachen Pointer kann ich gut umgehen. Verstehe die denke ich wirklich. Deswegen sagte man mir, dass ich auch so auch kompliziertere Pointer Aufgaben können müsste (pointer-pointer auf pointer usw.). Aber da hört es bei mir oft doch auf.
Nehmen wir mal so eine nette aufgabe:
Im grunde verstehe ich das auch. Also vielleicht bin ich bei "*q = r" etwas unsicher aber sonst bin ich auch ohne Programmausführung auf die gleiche Ergebnise gekommen. Was genau macht jetzt "*q = r" ? , es zeigt auf r und r zeigt ja auf y, somit sorgt **q = 55 dafür, dass y 55 wird. Okey okey verstehe soweit. Habe es ausprobiert und weiß jetzt, dass man da anstatt "*q = r" auch "q = &r" schreiben könnte, das wäre das gleiche. Zumindest kommt das gleiche ergebnis raus. Aber da ist was komisches: Wenn also *q=r == q=&r , warum kann ich weiter oben im code statt "q = &p" nicht einfach "*q = p" schreiben? Weil dann gibt es nähmlich speicherzugriffsfehler - deswegen die Frage, warum geht das unten so?
Also versteht ihr was ich Fragen möchte? ^^ , sehe dass es etwas verwirrend ist zu lesen. Also unten im code geht das mit *etwas = variable und oben geht kein *etwas = variable, sondern nur etwas = adresse von variable.
Im Grunde zeigt das doch, dass ich das nicht komplett verstanden habe(?) - da ich immer noch nicht alles 100% verstehe. Es gibt natürlich schlimmere aufgaben, da würde ich vllt sogar Falsche ergebnise hinschreiben(es geht darum, dass ich das ohne compilieren wissen will ob das code so geht und was da als ergebnis raus kommt). Ich brauche wieder mal die gewisse *klick* "aaaah" Situation
Könnte es jemand bitte versuchen mich dazu zu bringen? Was für Aufgaben könnte ich noch eure Meinung nach durchgehen (da selbstgemachte Aufgaben ob falsch oder nicht gerade reizvoll sind)
Danke und Gruß
es geht wieder um C. Diesmal aber vllt um nicht eine zu einfache Sache, zumindest mache ich hier oft Fehler OBWOHL ich das schon tausend mal durchgegangen bin :/
Also mit einfachen Pointer kann ich gut umgehen. Verstehe die denke ich wirklich. Deswegen sagte man mir, dass ich auch so auch kompliziertere Pointer Aufgaben können müsste (pointer-pointer auf pointer usw.). Aber da hört es bei mir oft doch auf.
Nehmen wir mal so eine nette aufgabe:
PHP:
int main() {
int x = 5;
int y = 7;
int *p;
int *r;
int **q;
p = &x;
r = &y;
q = &p;
**q = 33;
*q = r; //hier würde auch q = &r gehen , bzw. geht hier *q = r und oben geht das nicht!! :(
**q = 55;
printf("\nausgabe x: %d \n", x); //hier wird x 33
printf("\nausgabe y: %d \n", y); //hier wird y 55
return 0;
}
Im grunde verstehe ich das auch. Also vielleicht bin ich bei "*q = r" etwas unsicher aber sonst bin ich auch ohne Programmausführung auf die gleiche Ergebnise gekommen. Was genau macht jetzt "*q = r" ? , es zeigt auf r und r zeigt ja auf y, somit sorgt **q = 55 dafür, dass y 55 wird. Okey okey verstehe soweit. Habe es ausprobiert und weiß jetzt, dass man da anstatt "*q = r" auch "q = &r" schreiben könnte, das wäre das gleiche. Zumindest kommt das gleiche ergebnis raus. Aber da ist was komisches: Wenn also *q=r == q=&r , warum kann ich weiter oben im code statt "q = &p" nicht einfach "*q = p" schreiben? Weil dann gibt es nähmlich speicherzugriffsfehler - deswegen die Frage, warum geht das unten so?
Also versteht ihr was ich Fragen möchte? ^^ , sehe dass es etwas verwirrend ist zu lesen. Also unten im code geht das mit *etwas = variable und oben geht kein *etwas = variable, sondern nur etwas = adresse von variable.
Im Grunde zeigt das doch, dass ich das nicht komplett verstanden habe(?) - da ich immer noch nicht alles 100% verstehe. Es gibt natürlich schlimmere aufgaben, da würde ich vllt sogar Falsche ergebnise hinschreiben(es geht darum, dass ich das ohne compilieren wissen will ob das code so geht und was da als ergebnis raus kommt). Ich brauche wieder mal die gewisse *klick* "aaaah" Situation

Danke und Gruß