Forum: Compiler & IDEs Mehrdimensionale Arrays - Mehrere Werte aufeinmal zuweisen


von Nookie N. (nook)


Lesenswert?

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

von kopfkratzer (Gast)


Lesenswert?

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}};

von DirkB (Gast)


Lesenswert?

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
                   };

von (prx) A. K. (prx)


Lesenswert?

C99:
1
int a[4][3] = { [3] = { 1, 2, 3 },
2
                [1] = { 4, 5, 6 },
3
                [0] = { 7, 8, 9 } };

von Nookie N. (nook)


Lesenswert?

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?!?

von (prx) A. K. (prx)


Lesenswert?

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.

von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

von Nookie N. (nook)


Lesenswert?

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
Noch kein Account? Hier anmelden.