Basis van programmeren in C
int m[3][4];
printf("%td\n", (char *)&m[2][1] - (char *)&m[0][0]);int is 4 bytes. Wat is de uitvoer als de bovenstaande code wordt uitgevoerd?
- A9
- B20
- C36
Antwoord en toelichting tonen
Antwoord: C. 36
Een tweedimensionale array wordt in C rij voor rij opgeslagen (row-major): m[3][4] ligt in de volgorde m[0][0] tot m[0][3], m[1][0] tot m[1][3] en daarna m[2][0] tot m[2][3]. Vóór m[2][1] staan 2 × 4 = 8 elementen uit twee rijen plus 1 uit dezelfde rij, samen 9 elementen. Elk element is 4 bytes, dus de afstand vanaf het begin is 9 × 4 = 36 bytes. De aftrekking gebeurt na omzetting naar char *, dus het verschil wordt in bytes uitgedrukt.