mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Feld initialisieren


Autor: Steff (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas B. (detritus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: yalu (Gast)
Datum:

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

Autor: JojoS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas B. (detritus)
Datum:

Bewertung
0 lesenswert
nicht 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?
   static int month_days[2][12] =
   {
    { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
    { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
   };

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?

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.