Hi Leute!
Richtig geraten, ich habe ein Problem. Wie immer. Dieses Mal ist mein Problem, dass ich nirgendwo einen Infotext oder so über den Unterschied zwischen
char *test;
und
char test[];
finden kann. Dass es irgendwas mit Arrays zu tun hat, habe ich mir mithilfe von google halbwegs errätseln können, mehr aber auch nicht.
Arrays zerfallen bei der Übergabe zu einem Zeiger auf das erste Element. Auch wenn man die Klammern bei einem Funktionsparameter verwendet.
Sowas versteckt also was wirklich abläuft:
void func(char str[])
Das ist trotzdem nur ein Zeiger. Deshalb sollte man da auch gleich einen Zeiger explizit verwenden
Aber bei der ursprünglichen Deklaration steckt noch mehr Information drin. Bei einem Array kannst du mit sizeof() die Größe in Bytes bekommen. Wenn du sizeof() eines Zeigers machst (und im obigen Beispiel auch innerhalb von func() ) bekommst du nur die Größe des Zeigers selbst zurück. Also 2 oder 4 Bytes
Außerdem kannst du mit der Array-Schreibweise auch Arrays anliegen ohne sie explizit zu initialisieren:
char test[20];
Und dann später was reinschreiben. Das geht mit einem Zeiger nicht (oder nur mit dynamischen Speicher). Ein Zeiger ist nur eine Adresse irgendwohin