Frage zu Variablen



  • Guten Abend,

    eine vllt etwas komische Frage, jedoch hatte ich Prüfung gehabt und habe bei dieses folgende Variableninitialisierungen dabei gehabt, wo ich nicht weiß wie ich diese Umsetze. Ich bitte daher um Hilfe:

    Gegeben sei:
    int a = 2, b = 1; /* Diese Anweisungen sind Grundlage */
    int * ptr = &b;

    a) a = b = 2;
    b) a = 5 * 3 + 2;
    c) a = 5 * (3 + 2);
    d) a *= 5 + 5;
    e) a %= 2 * 3;
    f) a = !(--b == 0);
    g) a = 0 && 0 + 2;
    h) a = b++ * 2;
    i) a = -5 -5;
    j) a = -(+b++);
    k) a= 5 == 5 && 0 || 1;
    l) a = ((((((b + b) * 2) + b) && b || b)) == b);
    m) a = b ? 5 -3 : b;
    n) a = 5 ** ptr;
    o) a = b + (++b);

    Das sind jetzt nur Beispiele. Die einfachen wie a),b),c),d) . verstehe ich. Jedoch speziell zb. f),g),j),k),l),m) verstehe ich nicht ganz.

    In der Realität werden so keine Variablen initialisiert oder?

    Ich bitte um Hilfe

    Danke!


  • Mod

    moses030 schrieb:

    In der Realität werden so keine Variablen initialisiert oder?

    a, b, c, f, h, l, m und n könnte ich mir schon vorstellen als etwas, das mir so oder ähnlich in echtem Code begegnen könnte. Und natürlich auch o, leider viel zu oft. Ich frage mich, ob der Aufgabensteller überhaupt das Problem mit o sieht. Irgendwie habe ich die Befürchtung, dass der Lehrer es selber nicht weiß.



  • Habe grade tewas editiert, wa sich als wichtig empfand. Sorry vllt erklärt das deine Überlegung. 🙂


  • Mod

    moses030 schrieb:

    Habe grade tewas editiert, wa sich als wichtig empfand. Sorry vllt erklärt das deine Überlegung. 🙂

    Ähh, ja. Meine Indizes sind nun alle durcheinander. Aber du weißt ja sicherlich noch, wie es vorher aussah und weißt nun die Antwort auf deine Frage, was davon realistisch sein kann und was eher nicht.

    Passen denn deine eigenen Kommentare, welche du verstehst und welche nicht, noch? Ich hätte beispielsweise das neue m für sehr einfach gehalten, das neue o ist hingegen das alte m, welches ich in meinem vorherigen Beitrag als besonders problematisch hervorgehoben habe.



  • Ich hab nur das

    Gegeben sei:
    int a = 2, b = 1; /* Diese Anweisungen sind Grundlage */
    int * ptr = &b;

    eingefügt 😃


  • Mod

    moses030 schrieb:

    Ich hab nur das

    Gegeben sei:
    int a = 2, b = 1; /* Diese Anweisungen sind Grundlage */
    int * ptr = &b;

    eingefügt 😃

    Upps, da war ich es selber, der durcheinander gekommen ist 😃

    Ich meinte o, wo ich m schrieb. Hab's korrigiert.

    Wobei ich mich nun frage, was deine Antwort zu o ist.



  • o wäre für mich...

    o) a = b + (++b);

    a = 3

    weil b wird erst inkrementiert und dann plus 1 gerechnet.

    So würde ich das sagen 🙂


  • Mod

    Dummerweise ist eine Klammer aber kein Sequenzpunkt, daher ist weder garantiert, ob das Inkrement vor dem zweiten Zugriff auf b erfolgt, noch in welchem Zustand b überhaupt ist, wenn man b gleichzeitig ändert und liest. Der ganze Ausdruck ist daher undefiniert.



  • Aber werden Klammern vom Compiler nicht bevorzugt behandelt?

    Ich danke dir das du dich schonmal mit dem Beitrag auseinandersetzt.

    Ich hoffe wir bekommen irgendwann alle Lösungen zusammen.
    Hab nochmal eine Chance bei meinem Dozenten den Test zu schreiben.

    Grüße


  • Mod

    moses030 schrieb:

    Aber werden Klammern vom Compiler nicht bevorzugt behandelt?

    Das betrifft aber keine Nebeneffekte. Und auch die tatsächliche Reihenfolge der Abarbeitung muss nur zu dem gleichen Ergebnis führen, wie die aus der Mathematik bekannte Reihenfolge, wie sie tatsächlich abläuft, kann dann noch optimiert werden. Gerne werden da mehrere Teilausdrücke gleichzeitig oder wild durcheinander ausgewertet. Und dann ist es schlecht (milde ausgedrückt), wenn einer der Teilausdrücke den Wert eines anderen beeinflussen würde.



  • Verstehe verstehe...

    danke für deine Erläuterung. Nichts destotrotz kann ich mienem Dozenten nicht sagen, hey das was Sie von uns verlangen, is nicht optimal was die initialisierung vonVariablen angeht. Könnte ich zwar machen aber obs ihn interessiert ist die Frage 😕

    Grüße

    Bitte weiter um Hilfe 😕



  • o) ist undefiniertes Verhalten. Sowas machen Leute, die keine Ahnung von C haben. Dein Lehrer hat keine Ahnung.
    Schätze selber ein, was es dir bringt, von einem Ahnungslosen C gelehrt zu bekommen.



  • Bei l) ist ein überflüssiges Klammerpaar. Dann wird es doch gleich viel übersichtlicher.

    EDIT:
    Eigentlich sogar zwei.

    EDIT #2:
    Noch mindestens eine gefunden.



  • Wutz schrieb:

    o) ist undefiniertes Verhalten. Sowas machen Leute, die keine Ahnung von C haben. Dein Lehrer hat keine Ahnung.
    Schätze selber ein, was es dir bringt, von einem Ahnungslosen C gelehrt zu bekommen.

    vielleicht erwartet der Leher "undefiniertes Verhalten" als Antwort.


Log in to reply