Basis van programmeren in C

void f(int a[10]) {
    printf("%zu\n", sizeof a);
}
int main(void) {
    int b[10] = {0};
    printf("%zu ", sizeof b);
    f(b);
    return 0;
}

int is 4 bytes en een pointer is 8 bytes. Wat is de uitvoer als het bovenstaande programma wordt uitgevoerd?

  1. A10 10
  2. B40 8
  3. C40 40
Antwoord en toelichting tonen

Antwoord: B. 40 8

b in main is een int-array van 10 elementen, dus sizeof b is 10 × 4 = 40 bytes. Ook als een functieparameter als int a[10] wordt geschreven, wordt de parameter niet als array maar als pointer naar int (int *a) behandeld, en f(b) geeft alleen het adres van het eerste element door. Daarom is sizeof a binnen f gelijk aan 8, de grootte van een pointer. gcc geeft met -Wall een waarschuwing voor deze sizeof. Als een functie het aantal elementen van een array nodig heeft, wordt dat als apart argument doorgegeven.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Basis van programmeren in C

  1. int is 4 bytes. Wat is de uitvoer als de bovenstaande code wordt uitgevoerd?
  2. Wat is de uitvoer als de bovenstaande code met een char-array die een string bevat, wordt uitgevoerd?
  3. Na de bovenstaande declaraties wordt een van de statements A „p = t;”, B „*p = 'x';”, C „q = t;” of D „*q = 'x';” geschreven. Welke combinatie geeft compileerfouten?
  4. Wat is de uitvoer als het bovenstaande programma, dat een array van functiepointers gebruikt, wordt uitgevoerd?
  5. fill en use zijn elders gedefinieerde functies. Wat is een probleem van de bovenstaande functie?