Forum: Compiler & IDEs 2-dimensionales Array global behandeln


von Robert (Gast)


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

von yalu (Gast)


Lesenswert?

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

Falsch:
1
extern uint16_t pulsmuster[][];

Richtig:
1
extern uint16_t pulsmuster[][6];

oder
1
extern uint16_t pulsmuster[36][6];

von Rolf Magnus (Gast)


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.

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.