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?
- A10 10
- B40 8
- 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.