Forum: Mikrocontroller und Digitale Elektronik C: Array komplett mit Daten füllen


von Steven (Gast)


Lesenswert?

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.

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

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.

von 42 (Gast)


Lesenswert?

1
uint8_t mein_array[4] = {1, 2, 3, 4};

von Stefan P. (form)


Lesenswert?

uint8_t mein_array[5];
...

void main( void )
{
  ...
  sprintf(mein_array,"%c%c%c%c",1,2,3,4);
}

Wenn es wirklich nicht anders geht :)

von Steven (Gast)


Lesenswert?

42 schrieb:
> uint8_t mein_array[4] = {1, 2, 3, 4};

Das geht nicht.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Stefan P. schrieb:
>   sprintf(mein_array,"%c%c%c%c",1,2,3,4);

Das ist so ziemlich das Schlechteste, was man machen kann.

von DirkB (Gast)


Lesenswert?

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.

von M. M. (muma)


Lesenswert?

war das nicht so dass am ende jedes arrays eine NULL steht?
das heißt wie stefan es geschrieben hat

>uint8_t mein_array[5];

musst dein array ein feld größer sein als du daten speichern willst

von Peter II (Gast)


Lesenswert?

Mathias M. schrieb:
> war das nicht so dass am ende jedes arrays eine NULL steht?

nein nur bei strings (char*)

von ufff (Gast)


Lesenswert?

>> war das nicht so dass am ende jedes arrays eine NULL steht?

Geballte Kompetenz.

von 42 (Gast)


Lesenswert?

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

von DirkB (Gast)


Lesenswert?

Die Erklärung war auch für Steven. Er hat das missverstanden.
Die Farben machen das irgendwie nicht deutlich

von 42 (Gast)


Lesenswert?

DirkB schrieb:
> Die Erklärung war auch für Steven.
>
meine auch, um meinen Vorschlag "zu verteidigen"..., da er ja meinte es 
geht nicht.

DirkB schrieb:
> Die Farben machen das irgendwie nicht deutlich
>
gebe ich dir recht, ich habe bedenkenlos zu viel gequotet...;-)

von Steven (Gast)


Lesenswert?

Danke für eure Rückmeldungen.

Also um es kurz zu sagen: Als Zuweisung geht es nicht als Einzeiler?

von 42 (Gast)


Lesenswert?

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

von 42 (Gast)


Lesenswert?

42 schrieb:
> Also um es kurz zu sagen: Als Zuweisung geht es nicht als Einzeiler?

doch ;-)
1
for {i=0; i<5; i++} mein_array[i]=i;

von Steven (Gast)


Lesenswert?

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!

von DirkB (Gast)


Lesenswert?

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
}

von Michael R. (dj_motionx)


Lesenswert?

Stefan P. schrieb:
> sprintf(mein_array,"%c%c%c%c",1,2,3,4);

cool -> hab ich auch noch nie so gesehn !
--> Schnell wieder vergessen !

von Stefan P. (form)


Lesenswert?

Was regt ihr euch so drüber auf... Das macht genau das was er wollte :)

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.