Pages: [1]   Go Down
Author Topic: Array - Problem  (Read 761 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
God Member
*****
Karma: 2
Posts: 711
a, b = b, a+b
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset


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.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das ist die Fehlermeldung:

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

Logged

Offline Offline
God Member
*****
Karma: 2
Posts: 711
a, b = b, a+b
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset



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.
Logged


0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3470
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
Code:
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:

Code:
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 smiley-wink
Logged

Check out my experiments http://blog.blinkenlight.net

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3470
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
#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.
Logged

Check out my experiments http://blog.blinkenlight.net

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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.
Logged

0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3470
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Check out my experiments http://blog.blinkenlight.net

Pages: [1]   Go Up
Jump to: