Forum: Mikrocontroller und Digitale Elektronik Mehrdimensionales Array übergeben


von Frank5000 (Gast)


Lesenswert?

Hallo zusammen!

Ich möchte mir hier in C ein Menü bauen und habe zur Anzeige der 
Menüparameter 4 7-Segment-Zeichen zur Verfügung

Jetzt möchte ich die Menüpunkte ins Flash legen, habe also:
1
const uint8_t flash_text1[4] = { CHAR_Z, CHAR_E, CHAR_r, CHAR_o } // "ZEro"
2
const uint8_t flash_text2[4] = { CHAR_S, CHAR_P, CHAR_A, CHAR_n } // "SPAn"

Wenn jetzt ein Punkt angezeigt werden soll, dann kopiere ich den 
entsprechenden Text in den Ausgangspuffer für die 7-Segment-Anzeigen:
1
void flash_text_to_display( const uint8_t *source_buffer, uint8_t *dest_buffer )
2
{
3
  uint8_t i;
4
5
  for( i = 0; i < 4; i++ )
6
  {
7
    dest_buffer[i] = source_buffer[i];
8
  }
9
}

Aufrufen tue ich die Funktion dann so:
1
flash_text_to_display( flash_text1, display_output_buffer );

Das ist natürlich jetzt etwas blöd, da ich jedes der Textelemente 
einzeln dahingeben muss mit seinem Namen. Es wäre besser, wenn ich es 
anhand eines zweiten Index übergeben könnte, da ich mit einem 
Tastendruck dann auch nur den Index hochzählen muss.

Aber das bekomme ich nicht hin :-\ Es soll in etwa halt so sein:
1
const flash_text[2][4] = { { CHAR_Z, CHAR_E, CHAR_r, CHAR_o },
2
                           { CHAR_S, CHAR_P, CHAR_A, CHAR_n } };
3
4
flash_text_to_display( flash_text[index], display_output_buffer );

Wie übergebe ich das?

von Karl H. (kbuchegg)


Lesenswert?

flash_text_to_display( & flash_text[index], display_output_buffer );

von Frank5000 (Gast)


Lesenswert?

Hi!

Es funktioniert ohne das "&". Ich brauche also garnicht der Funktion zu 
sagen, dass es sich um ein mehrdimensionales Array handelt?

von Karl H. (kbuchegg)


Lesenswert?

Frank5000 schrieb:
> Hi!
>
> Es funktioniert ohne das "&". Ich brauche also garnicht der Funktion zu
> sagen, dass es sich um ein mehrdimensionales Array handelt?

flash_text[index]

ist ja kein mehrdimensionales Array.
Ein Zeile aus einer Matrix ist eine Zeile und keine Matrix.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Frank5000 schrieb:
> Es funktioniert ohne das "&".

Das & wäre an dieser Stelle auch verkehrt und sollte dem Compiler eine
Warnung entlocken. Ohne das & ist es aber genau richtig.

Streng genommen kennt C gar keine mehrdimensionalen Arrays, sondern nur
eindimensionale Arrays, die aber ihrerseits Arrays als Elemente enthal-
ten dürfen¹.

Deswegen ist
1
const uint8_t flash_text[2][4]

in Wirklichkeit ein Array mit zwei Elementen, von denen jedes ein Array
mit 4 uint8_t-Elementen ist.

Die beiden Elemente von flash_text sind also vom Typ
1
const uint8_t [4]

und haben somit exakt den gleichen Typ wie
1
const uint8_t flash_text1[4]

Folglich kannst du flash_text[index] genau gleich verwenden wie
flash_text1, also bspw. auch als Argument für flash_text_to_display().

——————————————
¹) Die Eindimensionalität der C-Arrays ist auch daran erkennbar, dass in
   jedem Klammerpaar [] immer nur ein einzelner Index steht. In den
   meisten anderen Programmiersprachen stehen bei mehrdimensionalen
   Arrays alle Indizes durch Kommata getrennt in einem Klammerpaar
   (z.B. in Pascal: array[i,j]).

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.