Basis van programmeren in C

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

Wat is de uitvoer als de bovenstaande code, met b++ aan de rechterkant van && en ||, wordt uitgevoerd?

  1. A2 0
  2. B2 1
  3. C2 2
Antwoord en toelichting tonen

Antwoord: A. 2 0

&& evalueert de rechterkant niet als de linkerkant onwaar is, en || niet als de linkerkant waar is (kortsluitevaluatie). In de eerste if is de waarde van a++ de waarde van vóór de verhoging, 0, wat onwaar is, dus b++ wordt niet uitgevoerd en alleen a wordt 1. In de tweede if is de waarde van a++ 1, wat waar is, dus wordt b++ opnieuw niet uitgevoerd en wordt a 2. Let erop dat als de rechterkant een expressie met neveneffecten bevat, zoals ++ of een functieaanroep, het van de waarde van de linkerkant afhangt of die wordt uitgevoerd.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Basis van programmeren in C

  1. Wat is de uitvoer als het bovenstaande switch-statement, met een case zonder break, wordt uitgevoerd?
  2. Wat is de uitvoer als het bovenstaande programma wordt uitgevoerd?
  3. Wat is de retourwaarde van de derde aanroep als de bovenstaande functie f drie keer achter elkaar wordt aangeroepen?
  4. Welke combinatie van de levensduur van (1) een lokale variabele die binnen een functie zonder static is gedeclareerd, (2) een met malloc gereserveerd gebied en (3) een variabele die buiten elke functie is gedeclareerd, is in C juist?
  5. int is 32 bits (maximum 2147483647). Wat is de grootste n waarvoor de bovenstaande functie fact(n) de faculteit van n correct en zonder overloop teruggeeft?