Grundlagen der Programmiersprache C

int a = 0, b = 0;
if (a++ && b++) { }
if (a++ || b++) { }
printf("%d %d\n", a, b);

Welche Ausgabe erzeugt der obige Code, in dem b++ rechts von && und || steht, bei der Ausführung?

  1. A2 0
  2. B2 1
  3. C2 2
Antwort und Erläuterung anzeigen

Antwort: A. 2 0

&& wertet die rechte Seite nicht aus, wenn die linke falsch ist, und || nicht, wenn die linke wahr ist (Kurzschlussauswertung). Im ersten if ist der Wert von a++ der Wert vor dem Erhöhen, also 0 und damit falsch; b++ wird nicht ausgeführt, und nur a wird 1. Im zweiten if ist der Wert von a++ gleich 1 und damit wahr; wieder wird b++ nicht ausgeführt, und a wird 2. Steht rechts ein Ausdruck mit Nebeneffekten wie ++ oder ein Funktionsaufruf, hängt es vom Wert der linken Seite ab, ob er ausgeführt wird.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Grundlagen der Programmiersprache C

  1. Welche Ausgabe erzeugt die obige switch-Anweisung, die ein case ohne break enthält, bei der Ausführung?
  2. Welche Ausgabe erzeugt das obige Programm bei der Ausführung?
  3. Die obige Funktion f wird dreimal hintereinander aufgerufen. Welcher Rückgabewert ergibt sich beim dritten Aufruf?
  4. Welche Kombination gibt in C die Zeitspanne (Lebensdauer) richtig an, in der (1) eine in einer Funktion ohne static deklarierte lokale Variable, (2) ein mit malloc reservierter Bereich und (3) eine außerhalb von Funktionen deklarierte Variable existieren?
  5. int habe 32 Bit (Maximalwert 2147483647). Was ist das größte n, für das die obige Funktion fact(n) die Fakultät von n ohne Überlauf korrekt zurückgibt?