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?
- A10 10
- B40 8
- 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.
Weiter: 9 weitere Fragen zu Grundlagen der Programmiersprache C