Wurstbrot schrieb:
> sizeof( ... ) wird zur Kompilierzeit bestimmt. Wenn also ein Array mit
> unbekannter Größe übergeben wird, kann man dort sizeof nicht einsetzen.
Das ist nur die halbe Wahrheit. sizeof() kann man prinzipiell immer
einsetzen, aber wenn man die Details nicht kennt, kommt nicht unbedingt
das raus, was man vielleicht erwartet.
Eins dieser Details ist, daß man in C ein Array nicht direkt an eine
Funktion übergeben kann. Es sieht zwar bei der obigen Definition so aus,
als würde das geschehen, aber das täuscht. Die C-Erfinder fanden das
damals intuitiver, aber es ist meiner Meinung nach genau das Gegenteil.
1 | void SendCommand(unsigned char buf[])
|
Hier sieht es zwar so aus, als sei buf ein Array, aber in diesem Falle
tritt eine C-Spezialregel inkraft, nach der bei einem Funktionsparameter
die eckigen Klammern nicht wie sonst bei Definitionen üblich für ein
Array stehen, sondern stattdessen für einen Zeiger. Das heißt, es ist zu
100% äquivalent zu
1 | void SendCommand(unsigned char* buf)
|
Deshalb kommt für sizeof(buf) die Größe eines Zeigers heraus. Man darf
übrigens zwischen die eckigen Klammern auch eine Zahl als Arraygröße
schreiben, aber die hat keinerlei Bedeutung und wird schlichtweg
ignoriert.