Hallo,
Als Beispiel:
float arry_1[3][33];
arry_1[0][33] = {23,3,23,4,45,6,45,4 ...};
arry_1[1][33] = {23,3,23,4,45,6,45,4 ...};
arry_1[2][33] = {23,3,23,4,45,6,45,4 ...};
Ich will dem Array direkt eine Liste zuweisen. Aber nicht beim
Deklarieren sondern jedem Index seine eigende damit der Code mit
Kommentar gut lesbar bleibt.
Wie bekomme ich das hin?
Gruß Nook
Geht so:
1 | /* 4 Zeilen 5 Spalten */
|
2 | int Matrix[4][5] = { {10,20,30,40,50}, |
3 | {15,25,35,45,55}, |
4 | {20,30,40,50,60}, |
5 | {25,35,45,55,65}}; |
Und dazwischen darfst du auch Kommentare schreiben.
1 | int Matrix[4][5] = { |
2 | /* Matrix[0] = */ {10,20,30,40,50}, /* Testzahlen */ |
3 | /* Matrix[1] = */ {15,25,35,45,55}, /* Mehr davon */ |
4 | /* Matrix[2] = */ {20,30,40,50,60}, |
5 | /* Matrix[3] = */ {25,35,45,55,65} |
6 | };
|
C99:
1 | int a[4][3] = { [3] = { 1, 2, 3 }, |
2 | [1] = { 4, 5, 6 }, |
3 | [0] = { 7, 8, 9 } }; |
Danke. genau so kenne ich es auch. aber ich habe 4 Arrays. So hätte ich immer Array 1- 4 geschrieben, mit den zusammenhängenden daten. bei der variante muss man halt immer hin und her springen. also anders geht es nicht?!?
Nookie Nook schrieb: > also anders geht es nicht?!? Doch. Eigenes Initialisierungsformat definieren und Script schreiben, das dies umsortierend ein Include-File mit dem C-Quellcode der Daten erzeugt.
Nookie Nook schrieb: > Ich will dem Array direkt eine Liste zuweisen. Aber nicht beim > Deklarieren Du meinst also nicht initialisieren, sondern tatsächlich zuweisen? Zuweisungen für Arrays gibt es in C nicht. Man muss entweder die Elemente mit memcpy hineinkopieren oder das Array in ein Struct verpacken. Das folgende Programm zeigt mehrere Alternativen:
1 | #include <stdio.h> |
2 | #include <stdint.h> |
3 | #include <string.h> |
4 | |
5 | // Array von Arrays
|
6 | float arry_1[3][33]; |
7 | |
8 | // Array in Struct
|
9 | typedef struct { |
10 | float values[33]; |
11 | } floatarray33_t; |
12 | |
13 | // Array von Arrays in Structs
|
14 | floatarray33_t arry_2[3]; |
15 | |
16 | // Bequemlichkeitsmakros
|
17 | #define FILL_FLOAT_ARRAY1(array,...) memcpy(array, (float []){__VA_ARGS__}, sizeof (array))
|
18 | #define FILL_FLOAT_ARRAY2(array,...) array = (floatarray33_t){{__VA_ARGS__}}
|
19 | |
20 | int main(void) { |
21 | static float avalues[33] = {1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3}; |
22 | static floatarray33_t svalues = {{1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3}}; |
23 | |
24 | // Drei Möglichkeiten, ein Array zu befüllen
|
25 | memcpy(arry_1[0], (float []){1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3}, sizeof arry_1[0]); |
26 | memcpy(arry_1[0], avalues, sizeof arry_1[0]); |
27 | FILL_FLOAT_ARRAY1(arry_1[1], 1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3); |
28 | |
29 | // Drei Möglichkeiten, ein in ein Struct varpacktes Array zu befüllen
|
30 | arry_2[0] = (floatarray33_t){{1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3}}; |
31 | arry_2[0] = svalues; |
32 | FILL_FLOAT_ARRAY2(arry_2[1], 1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3); |
33 | |
34 | return 0; |
35 | }
|
Such dir eine davon aus.
Vielen Dank an Alle. Das war mit C nicht so bekannt.
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.