Basis van programmeren in C

void f(int x) { x = 10; }
void g(int *p) { *p = 20; }
int main(void) {
    int a = 1, b = 1;
    f(a);
    g(&b);
    printf("%d %d\n", a, b);
    return 0;
}

Wat is de uitvoer als het bovenstaande programma wordt uitgevoerd?

  1. A1 20
  2. B10 1
  3. C10 20
Antwoord en toelichting tonen

Antwoord: A. 1 20

In C worden de argumenten van een functie als waarde doorgegeven (call by value): de aanroep f(a) kopieert de waarde 1 van a naar x. Als x binnen f op 10 wordt gezet, verandert alleen de kopie, en de a van de aanroeper blijft 1. g(&b) geeft het adres van b door, dus *p = 20 binnen g schrijft naar b zelf, en b wordt 20. Om een variabele van de aanroeper binnen een aangeroepen functie te veranderen, wordt op deze manier een pointer doorgegeven.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Basis van programmeren in C

  1. Wat is de retourwaarde van de derde aanroep als de bovenstaande functie f drie keer achter elkaar wordt aangeroepen?
  2. 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?
  3. 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?
  4. int is 4 bytes en een pointer is 8 bytes. Als de waarde (het adres) van een pointer p naar int 0x1000 is, wat is dan de waarde van p + 3?
  5. int is 4 bytes en een pointer is 8 bytes. Wat is de uitvoer als het bovenstaande programma wordt uitgevoerd?