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?
1 | memset(array,0,sizeof(array)); |
Oder du schaust in dein C-Buch. Bitte
@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}, 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.
Yalu X. schrieb: > ... "compound literal" und wurde im C99-Standard eingeführt. ja, und zudem kann es der gcc auch in C90 und C++, wenn man es ihm nicht per Compileroption verbietet. http://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.