Probleme mit Anweisungen



  • Hallo,

    ich sitz gerade über folgender Aufgabe:

    i=2
    j=1
    z=&v[1]
    ; j+=i* *z++-v[i++]
    i=?
    j=?
    z=?

    Mein Problem ist, dass ich das ganze noch nicht "lesen" kann, also nicht genau weiss, wie ich wann was ausführen muss. Kann mir dabei bitte jemand Hilfestellung geben?



  • Basti B schrieb:

    Hallo,

    ich sitz gerade über folgender Aufgabe:

    i=2
    j=1
    z=&v[1]
    ; j+=i* *z++-v[i++]
    i=?
    j=?
    z=?

    Mein Problem ist, dass ich das ganze noch nicht "lesen" kann, also nicht genau weiss, wie ich wann was ausführen muss. Kann mir dabei bitte jemand Hilfestellung geben?

    Hab gerade einen guten Moment und gehe mal davon aus das dies kein Getrolle sein soll. 🙄

    Was ist i? Was ist j? Was ist z? Was ist v? Wo ist der Rest?



  • Ich glaub du verschweigst uns ein v[]

    Weißt du was der Adressoperator '&' bzw der Dereferenzierungsoperator '*' macht?

    Zusätzlich solltest du bezüglich z++ mal nach Postincrement googlen.

    und

    a += b

    ist äquivalent zu

    a = a + b

    (für int)

    Diese Themen solltest du dir mal anschauen...

    Falls du dann noch fragen hast, hilft man dir sicherlich gerne



  • j += i * (*z++) - v[i++] dürfte schon undefiniert sein..


  • Mod

    Ich entziffere es dir mal:

    i=2        // klar
    j=1        // klar
    z=&v[1]    // z ist Adresse von v[1]
    
    j+=i* *z++-v[i++]
    
    Da steht:
     j = j + i * (*z++) - v[i++]
    
    Weiter entschlüsselt:
    *z++
    Ist eine Kombination von Dereferenzierung und anschließende um 1. Da das Inkrementieren später stattfindet ist das nur:
    *(z)
    Da aber z = v[1] ist, steht da
    v[1]
    und z ist hinterher &[v2].
    
    Gucken wir jetzt diesen Ausdruck an:
    v[i++] 
    Da steht
    v[i]
    und hinterher wird i um 1 erhöht. Da i=2 ist, steht da
    v[2]
    Und hinterher ist i=3.
    
    Jetzt haben wir aber ein Problem: In dem ganzen Ausdruck kommt i zweimal vor. Es ist aber nicht festgelegt, in welcher Reihenfolge die i ausgewertet werden, da im Ausdruck keine Sequenzpunkte sind. Das andere i könnte also entweder 2 sein (vor der Auswerung von i++) oder 3 (danach). Dies ist undefiniert.
    
    i=?
    Hinterher ist jedenfalls i=3
    j=?
    j ist problematisch, siehe unten
    z=? 
    z ist um eins erhöht, also z=&v[2]
    
    Jetzt zum j, wir setzen alles von oben ein:
    j = 1 + (2 oder 3, undefiniert) * v[1] - v[2]
    


  • life schrieb:

    j += i * (*z++) - v[i++] dürfte schon undefiniert sein..

    👍

    Das war auch das Erste, was ich gedacht habe 😉


Anmelden zum Antworten