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 verbunden 🙂

    int 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.


Anmelden zum Antworten