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?

  1. A9
  2. B20
  3. 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.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Basis van programmeren in C

  1. Wat is de uitvoer als de bovenstaande code met een char-array die een string bevat, wordt uitgevoerd?
  2. 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?
  3. Wat is de uitvoer als het bovenstaande programma, dat een array van functiepointers gebruikt, wordt uitgevoerd?
  4. fill en use zijn elders gedefinieerde functies. Wat is een probleem van de bovenstaande functie?
  5. Wat is juist over de pointer die de bovenstaande functie make teruggeeft?