C: Array komplett mit Daten füllen

Gast #2641552
Hallo!

Habe eine Frage zu Arrays in C:

Kann ich ein Array komplett mit Daten füllen in einer Anweisung?

Also quasi so:
1
uint8_t mein_array[4];
2

3
...
4

5
void main( void )
6
{
7
  ...
8
  mein_array = {1, 2, 3, 4};
9
}

Das geht so auf jeden Fall nicht. Muss ich jedes Element einzeln 
reinschreiben? Initialisieren kann ich es ja auch so.
(Firma: guloshop.de) #2641566
Du kannst dir ein zweites Array mit den gewünschten Daten als const 
Array erstellen und dann, wenn du es brauchst, die Daten in einem Rutsch 
rüberkopieren (Funktion memcpy). Natürlich sollten dazu die Arrays 
gleich groß sein.
Gast #2641591
Steven schrieb:
> 42 schrieb:
>> uint8_t mein_array[4] = {1, 2, 3, 4};
>
> Das geht nicht.

Das ist eine Definition. Und da geht das.
Das geht nicht als Zuweisung. (Im Standard-C)

Also die Zeile vor das main, wenn du eine globale Variable möchtest.
Gast #2641610
DirkB schrieb:
> Steven schrieb:
>
>> 42 schrieb:
>
>>> uint8_t mein_array[4] = {1, 2, 3, 4};
>> Das geht nicht.
> Das ist eine Definition. Und da geht das.
>
so war es auch gemeint, weil der Eingangs-Code-Fetzen nicht anders 
wollte/meinte...
Gast #2641623
Hallo Steven,

um mal die richtige Lösung für dich herauszuarbeiten:

* wenn dein Array immer die gleichen Werte im Programmverlauf haben 
soll, dann machst du es so, wie ich es vorgeschlagen habe --> 
Wertzuweisung gleich bei der Definition des Arrays

* werden die Werte erst im Programmverlauf ermittelt, dann gibt es keine 
pauschale Lösung. Die Lösung ergibt sich dann aus der Art und Weise der 
Ermittlung der Array-Werte...
Gast #2641635
42 schrieb:
> * werden die Werte erst im Programmverlauf ermittelt, dann gibt es keine
> pauschale Lösung. Die Lösung ergibt sich dann aus der Art und Weise der
> Ermittlung der Array-Werte...

Das ist der Fall.

42 schrieb:
> doch ;-)

Ja, ok...ist ein Einzeiler, stimmt ;-)

Ich danke euch!
Gast #2641647
Wenn die Werte berechnet werden, dann geht es eh nur mit der Zuweisung 
eines Elements (wie bei dem Einzeiler).

Wenn du aber verschiedene Vorgaben hast, kannst du auch verschiedene 
Arrays (oder ein 2D-Array) nehmen und einen Zeiger darauf setzen.
1
uint8_t mein_array2D[][4] = {{1, 2, 3, 4},
2
                             {5, 6, 8, 7}, 
3
                             {9, 10, 12, 0}};
4
uint8_t *mein_array;
5
...
6

7
void main( void )
8
{  
9
  ...
10
  mein_array =  mein_array2D[0];
11
}

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.