while (condition)
statement
Anweisung wird wiederholt ausgeführt. Vor jeder einzelnen Ausführungsbedingung (Iteration) wird ausgewertet. Wenn es falsch ist, wird die while-Schleife beendet und die Ausführung wird darüber hinaus fortgesetzt.
In diesem Fall ist die Anweisung leer. Die Anweisung könnte entweder eine einzelne Codezeile sein, die mit einem Semikolon (;) endet, oder ein Blockcode in geschweiften Klammern ({,}).
Daher passiert es, dass die Bedingung kontinuierlich ausgewertet wird, bis sie false ergibt. Um zu verstehen, was vor sich geht, müssen wir untersuchen, wie der Komma-Operator funktioniert.
(Beachten Sie, während Komma als ein Zeichen an Orten in C verwendet werden kann - ich kann an Funktionsdeklarationen, Definitionen und Aufrufe denken - in diesem Fall ist Komma Teil der Bedingung, daher fungiert es als Operator.)
Komma-Operator bewirkt, dass Ausdruck zuerst ausgewertet wird, dann Ausdruck2 und gibt den Wert von Ausdruck2 zurück.
Bei jeder Auswertung der Bedingung werden wir also beide Operanden auswerten (i ++, i < = 8) und weitermachen, während der rechte Operand als wahr verrechnet wird.
Während wir normalerweise Bedingung verwenden, um die Ausführung von Schleife zu steuern, oft, wie in diesem Fall, Bedingung kann andere Auswirkungen haben. In unserem Fall ist die Variable i von jeder Zustandsbewertung betroffen. Es wird um eins erhöht.
Unser Beispiel unterscheidet sich nur in der Reihenfolge der Operanden der Bedingung, daher in welchen Operanden Ergebnis wirklich die Ausführung der Schleife steuert.
Lassen Sie uns zuerst das zweite Beispiel untersuchen. In diesem Fall haben wir die Bedingung "i ++, i < = 8". Das bedeutet, dass wir bei jeder Auswertung zuerst i erhöhen, dann prüfen, ob es kleiner oder gleich 8 ist. Bei der ersten Bewertung der Bedingung werden wir also i von 0 auf 1 erhöhen und daraus schließen, dass 1 < = 8 ist. Die so konstruierte Schleife kann nur brechen, wenn i 9 wird, d. am 9. Iteration.
Wie im ersten Beispiel lautet die Bedingung "i < = 8, ++ i". Da der Vergleich keine Nebenwirkungen hat, können wir eine beliebige Anzahl von Vergleichen in beliebiger Reihenfolge durchführen, und wenn dies das einzige ist, was wir getan haben, nämlich wenn wir keine andere Aktion in einer von den Ergebnissen der Vergleiche abhängigen Art oder Reihenfolge durchgeführt haben, diese Vergleiche würden absolut nichts tun. Wie in unserem Fall evaluieren wir i < = 8, was wahr oder falsch ergibt, aber wir verwenden den Wert nicht, sondern fahren einfach fort, den rechten Operanden auszuwerten. Also ist unser Zustand praktisch gleich "i ++".
Dies ist ein unärer Operator der Post-Inkrementierung. Es gibt den Wert von i zurück und erhöht es dann nur um eins. (Alles, was garantiert ist, ist diese Reihenfolge. Wann genau ich erhöht wird, ist eigentlich ein kompliziertes und nicht immer in der Standardsache, wenn ich nicht falsch liege). Also, was passiert ist, überprüfen wir zuerst, ob ich wahr oder falsch bin, und dann, egal was, erhöhen wir es um eins, und erst dann brechen wir die Schleife oder fahren fort.
In C gibt es keinen wahren oder falschen Wert, keinen booleschen Typ. Ganzzahlen werden als wahr betrachtet, wenn sie einen Wert ungleich Null haben.
Also bei der ersten Auswertung von "i ++" erhalten wir 0, das ist falsch. Dies bedeutet, dass die Schleife ohne eine einzige Iteration unterbrochen wird. Die Auswertung von "i ++" führt jedoch dazu, dass sie um eins zunimmt. Wenn wir also mit der while-Schleife fertig sind, ist i bereits 1.