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
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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.