Grundlagen der Programmiersprache 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 habe 4 Byte und ein Zeiger 8 Byte. Welche Ausgabe erzeugt das obige Programm bei der Ausführung?

  1. A10 10
  2. B40 8
  3. C40 40
Antwort und Erläuterung anzeigen

Antwort: B. 40 8

b in main ist ein int-Array mit 10 Elementen, daher ist sizeof b = 10 × 4 = 40 Byte. Auch wenn das Funktionsargument als int a[10] geschrieben ist, wird es nicht als Array, sondern als Zeiger auf int (int *a) behandelt, und f(b) übergibt nur die Adresse des ersten Elements. Deshalb ergibt sizeof a in f die Größe eines Zeigers, also 8. gcc warnt mit -Wall vor diesem sizeof. Wird in einer Funktion die Elementanzahl eines Arrays benötigt, übergibt man sie als separates Argument.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Grundlagen der Programmiersprache C

  1. int habe 4 Byte. Welche Ausgabe erzeugt der obige Code bei der Ausführung?
  2. Welche Ausgabe erzeugt der obige Code mit einem char-Array, das eine Zeichenkette enthält, bei der Ausführung?
  3. 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?
  4. Welche Ausgabe erzeugt das obige Programm mit einem Array von Funktionszeigern bei der Ausführung?
  5. fill und use seien separat definierte Funktionen. Welches Problem hat die obige Funktion?