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

Gast #1715306
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
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
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.