C: Array mehrere Zellen beschreiben

#2327196
Lesenswert?

Alex schrieb:
> array[5]= {6,5,3,4,5}; geht nicht.

Nein, gibt es so nicht.

Außerdem :
- Bei
uint array[5] = {1,2,3,4,5};
bedeutet der 5er, dass das Array 5 Elemente groß ist.

Bei
array[5]= xx;
schreibst Du auf Element 5, das es nicht gibt, weil array nur die 
Elemente
0 bis 4 hat.

Glaubst Du nicht, da wäre ein Grund ein Buch über C zu lesen?
Gast #2327216
Lesenswert?

@Klaus
Dass ich bei der Initialisierung ein 5 Byte grosses Array erzeugt habe 
ist mit klar, das hättest Du ja z.B. daran sehen können, dass ich auch 
genau 5 (wow!) Zellen mit 5 Werten initialisiere.
Ich weiss auch, dass die letzte Zelle nicht array[5] sondern array[4] 
heisst, aber das ist ja alles nicht mein Problem!

In meinem C-Buch steht nicht, wie ich mehreren Zellen gleichzeitig Werte 
zuordnen kann, so wie es bei der Initialisierung der Fall ist. Steht es 
in Deinem / Weißt Du es? - Dann sag mir bitte, was da steht / wie es 
geht.

@Volker
Danke fuer die Hilfe! - So könnte ich ohne for-Schleife das Array mit 
den gleichen Werten beschreiben, aber ich will ja verschiedene Werte 
drin haben.

@All
nagut, ich habe mich vielleicht doof ausgedrückt. Meine Frage ist:
Ich initialisiere ein Array, schreibe Werte hinein:
uint array[5] = {1,2,3,4,5};
später im Programmablauf will ich die Werte {6,5,3,4,5} in das Array 
schreiben. Das kann ich so machen:
array[0]=6;
array[1]=5;
array[2]=3;
array[3]=4;
array[4]=5;
Aber gibt es dafür eine einfacherer Lösung / Schreibweise?
Moderator #2327271
Lesenswert?

Alex schrieb:
> array[5]= {6,5,3,4,5}; geht nicht.

Du meinst sicher
1
  array = {6,5,3,4,5};

Aber auch das geht nicht, u.a. deswegen, weil C keine Arrayzuweisungen
erlaubt. Zugewiesen werden können nur einfache Datentypen (wie int,
double, Zeiger usw.), Structs und Unions.

Als Workaround können Arrays aber mit memcpy kopiert werden. In deinem
Fall sähe diese so aus:
1
  memcpy(array, (int []){1, 2, 3, 4, 5}, sizeof array);

Das komische Konstrukt in der Mitte nennt sich offiziell "compound
literal" und wurde im C99-Standard eingeführt. Sehr Alte C-Compiler
unterstützen es möglicherweise nicht. Auch in C++ gibt es das offiziell
(noch) nicht. Kann sein, dass es in C++11 enthalten ist.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren