www.mikrocontroller.net

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


Autor: Bärenmarke Qualität (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

int cla[]={2,3,4,5,6}; //testarray

int arraylen(int array[]) {
 int len=sizeof(array)/sizeof(array[0]);
 return len;
}

void main() {
 int ba;
 ba=arraylen(cla);

}

ba ist immer 1, unabhängig von der arraylänge?!

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und um das was Klaus bereits gesagt hat, noch abzurunden:

Die Schreibweise
int arraylen(int array[]) {

ist nichts anderes als syntaktischer Zucker für
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.