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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.