Forum: Mikrocontroller und Digitale Elektronik Feld initialisieren


von Steff (Gast)


Lesenswert?

Gibt es eine Möglichkeit ein 10*10 Feld mit Buchstaben zu 
initialisieren??ohne for und ohne komplette Eingabe?
zb:   char c[10][10] ='A'


Bin zwar kein Anfänger mehr aber fällt momentan nichts dazu ein



im voraus Danke

von Thomas B. (detritus)


Lesenswert?


von Johannes M. (johnny-m)


Lesenswert?

Steff wrote:
> Gibt es eine Möglichkeit ein 10*10 Feld mit Buchstaben zu
> initialisieren??ohne for und ohne komplette Eingabe?
Naja, irgendwo her muss der Speicher ja wissen, was er enthalten soll, 
und das muss ihm der Programmierer mitteilen. Und das, was Du da 
schreibst, sind im Prinzip genau die beiden Möglichkeiten, die der 
Programmierer hat, das zu tun.

> zb:   char c[10][10] ='A'
Alle Feldelemente sollen den gleichen Wert enthalten? Tja, ist zwar ein 
Sonderfall, aber leider gibt's auch da keine Ausnahme vom oben gesagten.

EDIT:
Thomas' Link zeigt, wie man es macht, wenn nicht alle Feldelemente 
initialisiert werden sollen. Aber wenn alle Elemente einen Wert != 0 
haben sollen, musst Du es auf die Ochsentour machen...

von yalu (Gast)


Lesenswert?

Statisch geht es in C (darum geht es doch?) m.W. nicht. Zur Laufzeit
mit memset, was aber intern eine Schleife enthält.

von JojoS (Gast)


Lesenswert?

beim µC ist die for Schleife sicher die bessere Lösung. Wenn man alle 
Felder per Konstanten vorgibt werden die ins Flash gelegt und beim 
Programmstart von der C-Runtime umkopiert.

von Thomas B. (detritus)


Lesenswert?

Johannes M. wrote:
> EDIT:
> Thomas' Link zeigt, wie man es macht, wenn nicht alle Feldelemente
> initialisiert werden sollen. Aber wenn alle Elemente einen Wert != 0
> haben sollen, musst Du es auf die Ochsentour machen...

Hm?
1
   static int month_days[2][12] =
2
   {
3
    { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
4
    { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
5
   };

Hier werden alle Feldelemente an der Deklarationstelle mit nem festen 
wert beschrieben.
Es gibt halt keine schöne Möglichkeit, alles mit dem gleichen Wert 
vorzubelegen.
Reden wir einander vorbei?

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Muste mal gucken ob die C-Library memcpy(3), bcopy(3), ... und Konsorten 
bereitstellt.

von Johannes M. (johnny-m)


Lesenswert?

Thomas B. wrote:
> Hier werden alle Feldelemente an der Deklarationstelle mit nem festen
> wert beschrieben.
> Es gibt halt keine schöne Möglichkeit, alles mit dem gleichen Wert
> vorzubelegen.
> Reden wir einander vorbei?
Möglich. Das oben ist ja eine der beiden möglichen Ochsentouren. Und 
auch, wenn die Initialisierungswerte der Feldelemente alle gleich sein 
sollen (nur eben nicht 0), muss er trotzdem entweder alle einzeln 
angeben (wie in Deinem Beispiel, nur dass dann überall z.B. 'A' stünde) 
oder das Feld zur Programmlaufzeit füllen. Und das sind genau die 
beiden Methoden, die er nicht will. Aber da führt leider kein Weg dran 
vorbei...

von yalu (Gast)


Lesenswert?

Mir fällt bei diesem Anwendungsbeispiel bei genauerer Betrachtung kein
einziges Argument für eine statische Initialisierung (mit {'A', 'A',
... } o.ä.) ein, dafür gibt gleich mehrere Argumente für die
Initialisierung zur Laufzeit (mit Schleife oder memset). Letztere hat
Speicher- und Geschwindigkeitsvorteile sowohl auf einen µC als auch
auf einem PC als Zielsystem. JohoS hat schon das wichtigste Argument
genannt.

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.