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


von Michael (Gast)


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

von Stefan (Gast)


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.

von Michael (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.