Bitte um QuellcodeErklärung
-
Hallo zusammen,
meine Freundin hat in der Uni C und ich würde Ihr gerne behilflich sein. Bloß ist mein Fachwissen was C/C++ sehr stark eingerostet da ich es ewig nicht gebraucht hab.
Könnt ihr mir bitte eine Musteraufgabe einer Klausur Zeile für Zeile erklären?
Ich wäre euch mit großem Dank verbundenint i, n=10; /*Das ist klar, i ist integer und n ist gleich 10 int *p /* Zeiger ist p? p=malloc(n * sizeof(int)); /* ?? for(i=0; i<10; i++) /* typische for schleife { *(p+i) = 2*i; /* ?? } printf("%d", *(p+i-*(p+2))); /* ??
und wieso kommt als Ergebnis 12 raus?
-
Der C-Kommentar /* braucht auch ein Abschluss mit */
wegen malloc: http://www.cplusplus.com/reference/cstdlib/malloc/In Array-Schreibweise sieht das Programm so aus:
... for(i=0; i<10; i++) { p[i] = 2*i; } printf("%d", p[i - p[2] ]);
Du bekommst einen Speicherbereich für 10 int geliefert.
Dort schreibst du die Werte 0,2,4,6,8,10,12,14,16,18 rein
Am Ende der Schleife (also beim printf) hat i den Wert 10.
In p[2] steht der Wert 4.
Du greifst also auf das Element 6 zu (10-4 ist 6). Und darin steht der Wert 12
-
Aber das Element 6 ist doch 10 und nicht die 12.
Oder zählt man die 0 nicht mit? und wenn nicht, warum?Danke für die Antwort
-
Der Index beim Array fängt immer bei 0 an. (Aber bedenke, dass wir über C reden)
p[0] = 0; /* 1. Element /
p[1] = 2;
p[2] = 4;
p[3] = 6;
p[4] = 8;
p[5] = 10;
p[6] = 12;
p[7] = 14;
p[8] = 16;
p[9] = 18; / 10. Element */Du musst zwischen dem Element 6 und dem 6. Element unterscheiden.