mikrocontroller.net

Forum: PC-Programmierung Länge Array aus Pointer bestimmen?


Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte in C ein kleines Programm schreiben, dass an eine 
Unterfunktion einen Pointer auf ein Array übergibt. In dieser 
Unterfunktion sollen dann die Daten das gesamten Arrays addiert werden. 
Ich möchte dafür auch in der Unterfunktion die Länge das Arrays 
bestimmen. Allerdings kommt bei der Bestimmung der Pointerlänge immer 
der Wert 4 raus. Kann man nicht die Länge eines Arrays über ainen 
Pointer bestimmen?

Ein Beispiel dazu aus dem Internet:
 
int main() 
{
    int days[] = {1,2,3,4,5};
    int *ptr = days;
    printf("%u\n", sizeof(days));
    printf("%u\n", sizeof(ptr));

    return 0;
}

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dirk schrieb:

> Kann man nicht die Länge eines Arrays über ainen
> Pointer bestimmen?

So wie bei dir nicht, da dein Pointer konzeptionell auf ein einzelnes 
Element zeigt, nicht auf das ganze Array. Daher kriegst du bei 
sizeof(ptr) nur die Grösse des Pointers selbst und bei sizeof(*ptr) die 
Grösse eines Elements.

So hingegen geht es, aber die Information wird hier aus den deklarierten 
Typ des Pointers ermittelt, nicht aus dem Array, und der Pointer verdaut 
nun nur Arrays der Länge 5, was der Sache ihren Sinn nimmt:
int main() 
{
    int days[5] = {1,2,3,4,5};
    int (*ptr)[5] = &days;
    printf("%u\n", sizeof(days));
    printf("%u\n", sizeof(*ptr));

    return 0;
}

In C99 und GCC gibt es Arrays variabler Länge, was hier vielleicht 
besser passen könnte, aber da muss ich vorerst passen.

Autor: A.H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein guter Hinweis, dass das nicht geht, verdeutlicht ja schon die volle 
Deklaration der main Funktion:
int main(int argc, char **argv){
}

Daher wird immer sowohl ein Pointer als auch die Anzahl der Elemente 
übergeben. Oder man einigt sich darauf, dass das letzte Element immer 
einen magischen Wert wie NULL hat.

Autor: Detlev T. (detlevt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider erzählt mancher dem Programmiernachwuchs auch heute noch den 
Unsinn, Pointer und Arrays wären das gleiche. Und dann kommt halt so 
etwas dabei heraus.

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, dann weiß ich bescheid. ann werd ich wohl an die Funktion die Länge 
des Arrays als zusätzlichen Parameter übergeben müssen.

Danke für eure Kommentare

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.