mikrocontroller.net

Forum: Compiler & IDEs Startet der Arrayindex bei 0 oder 1


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leutz

Hätte mal ne Frage, wär schön wenn jemand helfen könnte.

Von wo startet eigentlich der Arrayindex beim avr-gcc? Mir ist
aufgefallen, dass ich Arrays mit Index 0 soviel anlegen kann wiviel ich
will, die Zusammenfassung nach dem Compilieren, wo ja steht wiviel ich
Speicher benutze ist immer gleich.

Ich deklariere die Arrays so:


uint8_t variable[0];


Würde mich echt freuen wenn ihr eine Antwort wisst, danke.

Michael

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die von dir eingesetzte 0 ist kein Index. Sie ist die Anzahl der
gewünschten Arrayelemente beim Anlegen des Arrays.

Der Index wird erst beim Arbeiten mit dem Array verwendet, also beim
Lesen oder Schreiben. Und da beginnt der Index bei C immer mit 0 (nie
negativ sonst Bufferunderflow) und geht bis zur oben festgelegten
Anzahl minus 1 (nie drüber sonst Bufferoverflow).

Es kann durchaus sein, dass

uint8_t variable[0];
uint8_t variable[1];
uint8_t variable[2];

den gleichen Speicherbedarf haben. Das hängt davon ab, wie der
Compiler/Linker Variablen im Speicher ausrichten - Stichwort Alignment.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan

Voll cool, :) Habe jetzt schon einige Stunden damit verbracht den
Fehler zu finden, und das ist er gewesen. Programmiererfahrung habe ich
nur in  Visual Basic.NET, und wenn man da einen Array mit 0 deklariert
dann hat man Bereits ein Element. Also ddanke nochmal, jetzt
funktionierts wunderbar.

Michael

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.