Startet der Arrayindex bei 0 oder 1

Gast #412273
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
Gast #412274
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.
Gast #412275
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

Eine eigene Frage? Dieser Thread ist über 20 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.