Mehrdimensionales Array übergeben

Gast #2806937
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?
Moderator #2807173
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]).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren