Mehrdimensionale Arrays - Mehrere Werte aufeinmal zuweisen

OP #2905286
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
Gast #2905395
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
                   };
Moderator #2905692
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.

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