mikrocontroller.net

Forum: Compiler & IDEs 2-dimensionales Array global behandeln


Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein problem mit dem Übergeben von 2-dimensionalen Arrays.

In meinem main.c werden ein 1-dim und ein 2-dim array erzeugt:


uint16_t pulsmuster[36][6] = {......};
uint16_t phasen[6] = {......};


Diese beiden Arrays will ich nun in einer Funkton aufrufen. Dazu benutze 
ich die extern Anweisung und lade sozusagen die Arrays in die Funktion.

extern uint16_t pulsmuster[][];
extern uint16_t phasen[];

Bei dem 1-dim array funktioniert das, bei dem anderen allerdings nicht.

Wäre über Hilfe sehr dankbar !

Grüße

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei der Deklaration von Arrays müssen immer mindestens alle
Dimensionen bis auf die erste angegeben werden.

Falsch:
extern uint16_t pulsmuster[][];

Richtig:
extern uint16_t pulsmuster[][6];

oder
extern uint16_t pulsmuster[36][6];

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ich habe ein problem mit dem Übergeben von 2-dimensionalen Arrays.

Eigentlich gibt es in C keine zweidimensionalen Arrays. Manchmal ist es 
für das Verständnis hilfreich, wenn man sich vor Augen hält, daß es sich 
um ein Array aus Arrays handelt.

> Diese beiden Arrays will ich nun in einer Funkton aufrufen.

Arrays kann man nicht "aufrufen". Das kann man nur mit Funktionen 
machen.

> extern uint16_t pulsmuster[][];
> extern uint16_t phasen[];
>
> Bei dem 1-dim array funktioniert das, bei dem anderen allerdings nicht.

Das liegt daran, daß er die Größe nicht kennt. Er muß ja für einen 
Zugriff auf ein Element immer dessen Offset zum Anfang des Arrays 
berechnen. Bei einem eindimensionalen Array ist das kein Problem. Er muß 
nur den Index mit der Elementgröße multiplizieren. Aber beim 
zweidimensionalen geht das nicht mehr. Da muß er auch die Größe des 
"inneren" Arrays kennen.

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.