Hallo,
ich kann den Zellen eines Arrays bei der Initialisierung Werte zuordnen:
uint array[5] = {1,2,3,4,5};
Gibt es eine einfache Möglichkeit, das Array auch im Programm dann mal
komplett zu beschreiben???
array[5]= {6,5,3,4,5}; geht nicht.
Danke :-)
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?
@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?
Alex schrieb:> später im Programmablauf will ich die Werte {6,5,3,4,5} in das Array> schreiben
Die Konstanten würde ich in ein eigenes Feld packen und dann mit memcpy
übernehmen.
Okay. Dann vielen Dank für Eure Mühe und Hilfe!
P.S.: sry fuers angepisst sein, habe gerade nochmal gelesen und
"array[5]= {6,5,3,4,5}; geht nicht." war wohl der grund fuer den tipp
mit dem buch.
Alex schrieb:> In meinem C-Buch steht nicht, wie ich mehreren Zellen gleichzeitig Werte> zuordnen kann, so wie es bei der Initialisierung der Fall ist.
Kein Wunder, weil es in Standard-C ja auch nicht geht.
Der gcc wiederum kann sowas, das ist dann aber nicht mehr portabel.
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},sizeofarray);
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.