Array - Problem

Hallo Leute,

ich habe zurzeit ein kleines Problem mit Arrays.
Und zwar habe ich zunächst einige eindimensionale Arrays deklariert und initialisiert.
z.B.:
int ROT [3] = {255, 0, 0};
int GRUEN [3] = {0, 255, 0};
int BLAU [3] = {0, 0, 255};

Nun möchte ich ein weiteres zweidimensionales Array bauen mit einer Größe von [8][3]. Da will ich dann die oben erstellen Arrays in beliebiger Reihenfolge rein schreiben können, z.B. so:

int farbe[8][3] = {ROT, GRUEN, BLAU, BLAU, ROT, ROT, GRUEN, BLAU);

An dieser Stelle gibt es nun Probleme. In Java funktioniert das einwandfrei, aber Java ist nun mal kein c/c++ ^^.

Ich hoffe es kann mir jemand helfen.

Mfg

was genau funktioniert nicht?
Kannst du deinen code + error message posten?

Habs selber nicht ausprobiert, sollte aber kein problem sein.

vielleicht probiers mal mit

int ROT [] = {.... }
und
int farbe[7][2] = { BLAU, ...}

also, in deinem fall:

ROT[0] == 255
ROT[1] == 0
ROT[2] == 0

ROT[3] == ?

Zähler beginnt mit 0. Weis aber nicht, ob dass wirklich das problem ist. Glaubs eher nicht.

Das ist die Fehlermeldung:

error: invalid conversion from 'int*' to 'int'

hm. hast du diesen thread gesehen?

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1256522369

mich würds auch interessieren, wenn dus löst, poste hier bitte.

Wie schon richtig bemerkt wurde ist C kein Java.

http://home.fhtw-berlin.de/~junghans/cref/CONCEPT/arrays.html

Der Punkt ist: C kennt ausschliesslich eindimensionale Arrays.

Zweidimensionale Arrays werden wie folgt definiert:

	main()
	{
	  int Matrix[4][2]={{1, 2},
	  		    {3, 4},
			    {5, 6},
			    {7, 8}};
	}

Nur - was bedeutet das? Wie gesagt C kennt nur eindimensionale Arrays. Die Antwort ist: Matrix ist ein eindimensionales Array. Die Elemente von Matrix, also z.B. Matrix[3] sind vom Type int*, d.h. Zeiger auf int. Deshalb kann man Matrix[3][1] hinschreiben. Man könnte genausogut auch (Matrix[3])[1] schreiben. Dann sieht man schon deutlicher, dass Matrix tatsächlich nur eindimensional ist.

D.h. Du könntest auf die Idee kommen Folgendes zu schreiben:

int ROT [3] = {255, 0, 0};
int GRUEN [3] = {0, 255, 0};
int BLAU [3] = {0, 0, 255};

int * farbe[8] = {ROT, GRUEN, BLAU, BLAU, ROT, ROT, GRUEN, BLAU);

Ob das dass ist was Du willst kann ich aber ohne weiteren Kontext nicht sagen. Bei dem Vorschlag stehen in farbe ja nicht die Werte aus ROT, GRUEN, BLAU sondern die Arrayzeiger. Je nachdem was Du vorhast ist das genau richtig oder völlig falsch.

Wenn man von gemanagten Sprachen wie Java kommt ist das regelmäßig eine kleine Hürde. Sobald man es einmal kapiert hat ist es aber nicht wirklich schwierig :wink:

Danke für deine aufschlussreiche Antwort =)
brauche aber leider die Werte und nicht die Zeiger...

Falls es reicht kannst Du das auch mit Makros erledigen, also

#define ROT   { 255,   0,   0}
#define GRUEN {   0, 255,   0}
#define BLAU  {   0,   0, 255}


int farbe[8][3] = {ROT, GRUEN, BLAU, BLAU, ROT, ROT, GRUEN, BLAU);

Ansonsten kannst Du auch eine Struktur mit struct für RGB anlegen, oder Du füllst die Werte eben per Schleife ein. Wie gesagt, solange Du nicht sagst was genau Du vorhast kann man nur schwer sagen was optimal ist.

Hallo,
also habe es eben mal den den Makros ausprobiert und es funktioniert genau so wie ich es will :slight_smile:

Ich steuere gerade eine RGB-LED Matrix 8x8 an und ich habe dafür diese Methoden programmiert:

void setLed(int kanal[3], int farbe[3]) //Hier kann ich eine einzelnen Pixel setzen (RGB -> 3Kanäle -> deswegen das kanal-Array)
void setLedSpalte(int farbe [8][3]) //Hier eben eine ganze Spalte
void setLedMatrix(int farbe [8][8][3]) //Und hier die ganze Matrix

die unteren beiden Methoden konnte ich bisher nicht aufrufen, weil das mit dem farb-Array nicht geklappt hat.

Danke für eure Hilfe.

Für Deinen Anwendungsfall sind Arrays overkill. "struct" heisst die bessere Lösung.