Der Vergleich in beiden der if
Aussagen gemacht ergeben undefined behaviour. Also könnte alles passieren. Weil a
ohne einen dazwischenliegenden Sequenzpunkt gelesen und geändert wird. Der Vergleichsoperator ==
führt keinen Sequenzpunkt ein. Sie müssen wahrscheinlich über undefined Verhalten und sequence points usw. lernen, um das Problem besser zu verstehen.
Moderne Compiler können Ihnen auch helfen. Zum Beispiel Fragen Clang:
warning: unsequenced modification and access to 'a' [-Wunsequenced]
if(a==a--)
~ ^
warning: unsequenced modification and access to 'a' [-Wunsequenced]
if(a==--a)
~^
für die beiden if
Aussagen (GCC produziert auch ähnliche Warnungen mit gcc -Wall -Wextra
).
Die Ausgabe * kann nicht erklärt werden, weil Sie [* undefiniertes Verhalten *] haben (https: // en. wikipedia.org/wiki/Undefiniertes_verhalten). Lesen Sie über [Evaluierungsreihenfolge und Sequenzierung] (http://en.cppreference.com/w/c/language/eval_order). –
Dies ist ein sinnloser Müll, kein Code. (Es tut uns leid). Was soll es zeigen? –
zur besseren Lesbarkeit und Verständnis, 1) konsistent den Code einrücken. Nach jeder öffnenden Klammer '{' einrücken. Unindent vor jeder schließenden Klammer '}'. 2) separate Code-Blöcke (für, wenn, sonst, während, tun ... while, switch, case, default) über eine leere Zeile – user3629249