Array extern - Anzahl Elemente mit eingeben oder nicht?

Gast #3747214
Lesenswert?
• ▲
▼
Hi Leute!

Kurze und knappe Frage:

Ich habe in einer c-Datei ein Array
1
const uint8_t array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
Wenn ich dieses Array nun in anderen Dateien verwenden möchte, schreibe 
ich dann in meine h-Datei
1
extern const uint8_t array[10];
oder lasse ich die Elementeanzahl weg
1
extern const array[];
?

Ist eines davon richtig / falsch, oder macht es einen Unterschied? Der 
Compiler sagt bei beiden Varianten garnichts.

Gruß und danke
Gast #3747966
Lesenswert?
• ▲
▼
Wenn Du dich mit Arrays beschäftigen würdest, dann könntest du dir die 
Frage selbst beantworten.

Wenn du ein Array anlegst, erhältst du als "Belohnung" die Adresse des 
ersten Eintrags in diesem Array.

Diese Adresse ist für den zukünftigen Zugriff wichtig. In C kannst Du 
die Anzahl der Arrayelemente nicht abfragen. Du musst dir diese separat 
merken.

Der Datentyp ist aber wichtig! Es reicht also ein
1
extern const uint8_t array[];
2

3
oder
4

5
extern const uint8_t *array;
#3748078
Lesenswert?
• ▲
▼
Array schrieb:
> Wenn Du dich mit Arrays beschäftigen würdest,

Was du vielleicht selber auch mal etwas intensiver machen solltest, denn 
was du geschrieben hast, ist größtenteils Unsinn.

Array schrieb:
> In C kannst Du
> die Anzahl der Arrayelemente nicht abfragen.

Doch, kann man. Dazu muss aber bei der Deklaration auch die Größe mit 
angegeben werden.

Array schrieb:
> Es reicht also ein
> extern const uint8_t array[];
>
> oder
>
> extern const uint8_t *array;

Die zweite Variante ist falsch und funktioniert nicht.


Innerhalb einer Funktion, die ein Array als Parameter hat, treffen deine 
Aussagen zu. Darum geht es hier aber nicht.
Gast #3748111
Lesenswert?
• ▲
▼
Fred schrieb:
> Ist eines davon richtig / falsch, oder macht es einen Unterschied?

Die erste liefert die Grössenangabe mit,
abfragbar per sizeof(array)/sizeof(array[0]),
die zweite nicht.
Wenn dein Arry nicht selbst eine Grössenangabe enthält, beispielsweise 
mit einem 0-Element als letztem Element, dann ist die erste sicher 
schlauer.

Antwort schreiben

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.

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.