Grundlagen der Programmiersprache C

int m[3][4];
printf("%td\n", (char *)&m[2][1] - (char *)&m[0][0]);

int habe 4 Byte. Welche Ausgabe erzeugt der obige Code bei der Ausführung?

  1. A9
  2. B20
  3. C36
Antwort und Erläuterung anzeigen

Antwort: C. 36

Ein zweidimensionales Array wird in C zeilenweise abgelegt (Row-Major): m[3][4] liegt in der Reihenfolge m[0][0] bis m[0][3], m[1][0] bis m[1][3], m[2][0] bis m[2][3] im Speicher. Vor m[2][1] liegen die 2 × 4 = 8 Elemente der beiden vorherigen Zeilen und 1 Element derselben Zeile, zusammen 9 Elemente. Ein Element hat 4 Byte, daher beträgt der Abstand vom Anfang 9 × 4 = 36 Byte. Da vor der Subtraktion in char * umgewandelt wird, wird die Differenz in Byte angegeben.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Grundlagen der Programmiersprache C

  1. Welche Ausgabe erzeugt der obige Code mit einem char-Array, das eine Zeichenkette enthält, bei der Ausführung?
  2. Nach den obigen Deklarationen wird eine der Anweisungen A „p = t;“, B „*p = 'x';“, C „q = t;“ oder D „*q = 'x';“ geschrieben. Welche Kombination führt zu Kompilierfehlern?
  3. Welche Ausgabe erzeugt das obige Programm mit einem Array von Funktionszeigern bei der Ausführung?
  4. fill und use seien separat definierte Funktionen. Welches Problem hat die obige Funktion?
  5. Was trifft auf den Zeiger zu, den die obige Funktion make zurückgibt?