Forum: PC-Programmierung Länge eines Arrays in c als Funktion ausgeben funktioniert nicht


von Bärenmarke Qualität (Gast)


Lesenswert?

Hallo, leider funktioniert meine Funktion so nicht, die gibt mir, 
unabhängig von der Länge des Testarrays, immer 1 aus. was kann da los 
sein? evtl. irgendwas mit pointerarithmetik als übergabe? wenn ich die 
arraylänge ohne funktionsaufruf ausrechne funktioniert die formel mit 
sizeof.
1
int cla[]={2,3,4,5,6}; //testarray
2
3
int arraylen(int array[]) {
4
 int len=sizeof(array)/sizeof(array[0]);
5
 return len;
6
}
7
8
void main() {
9
 int ba;
10
 ba=arraylen(cla);
11
12
}
ba ist immer 1, unabhängig von der arraylänge?!

von Klaus W. (mfgkw)


Lesenswert?

ja (könnte auch 0 sein oder mehr als 1, aber nicht die Feldlänge)

Weil in C nie ein Feld übergeben wird, sondern nur ein Zeiger
auf das erste Element.
Dem kann die Funktion nicht mehr ansehen, wieviel Elemente da noch
kommen.
Wenn man so etwas braucht, muß man neben dem Feld noch die
Länge zusätzlich übergeben.

von Karl H. (kbuchegg)


Lesenswert?

Und um das was Klaus bereits gesagt hat, noch abzurunden:

Die Schreibweise
1
int arraylen(int array[]) {

ist nichts anderes als syntaktischer Zucker für
1
int arraylen(int* array) {

an dieser Stelle kannst du die [] im Grunde nur als Hinweis für den 
Leser des Codes sehen, dass die Funktion gerne ein Array (genauer die 
Adresse eines Arrays) als Eingangsparameter hätte. Aber behandelt wird 
es vom Compiler auch nicht anders, als wie wenn da ein Pointer stünde.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.