Länge eines Arrays in c als Funktion ausgeben funktioniert nicht

Gast #1715306
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?!
#1715325
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.
#1715383
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren