Forum: Compiler & IDEs Array Matrix mit Werten auffüllen


von André Wippich (Gast)


Lesenswert?

Hi.

Es ist mir echt peinlich zu fragen, aber ich krieg es einfach nicht hin
ein mehrdimensionales Array zu füllen (mit WinAVR).

Ich hab das Array als globale Variable erstellt (noch vor der main()
):

char Bildbuffer[3][3];


und in der Main will ich da dann verschiedene Bilder einfüllen und
dachte mir das ginge so:

int main(void)
{
.
.
.

Bildbuffer[][] = { {1,1,1} ,
                   {1,1,1} ,
                   {1,1,1} };
.
.
.
}

Funktioniert leider nicht, bekomme die Fehlermeldung:
" main.c:107: error: parse error before ']' token "
(Zeile 107 ist die "Bildpuffer[][] = ..." Zeile)

Der Bildbuffer ist in echt natürlich nicht 3x3 groß, aber die Tipperei
wäre für's erklären ziemlich übertrieben den 11x11 Buffer
einzugeben...

Wäre sehr nett wenn mir kurz wer weiterhelfen könnte. Für einen Link zu
ner guten Anleitung wäre auch dankbar, damit ich wegen so nem Kinderkram
nicht nochmal nerven muss :-)

Danke schonmal!

____________________
http://www.dark-sun.de

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Sowas geht nur als Initialisierung (also direkt dort, wo die
Variable definiert wird), nicht als Zuweisung.

von Franz (Gast)


Lesenswert?

versuche es mal folgendermaßen:

char x[3][3];
...
int main()
{
...
for ( int i = 0; i < 3; i++)
{
  for ( int j = 0; j < 3; j++)
    x[i][j] = 1;
}
...
}
das sollte funktionieren! ;)

von André Wippich (Gast)


Lesenswert?

Jo, so mache ich es momentan auch. Bin ich schon vorher ganz alleine
drauf gekommen ggg

Aber dazu nochmal ne Frage. Gibt es eine einfache Möglichkeit Arrays
umzuladen? Das Array Buffer wird ständig von einer Funktion ausgegeben,
daher müssen die verschiedenen Bilder, die ich einfach als eigene Arrays
erstelle da reingeladen werden.

Momentan sieht es so aus:
1
char Buffer[3][3] = { {0,0,0},
2
                      {0,0,0},
3
                      {0,0,0} };
4
5
char Bild[3][3] = { { {1,0,1},
6
                      {0,1,0},
7
                      {1,0,1} };
8
...
9
int main()
10
{
11
...
12
for ( int i = 0; i < 3; i++)
13
{
14
  for ( int j = 0; j < 3; j++)
15
    Buffer[i][j] = Bild[i][j];
16
}
17
...
18
}

Aber kann man es nicht schneller machen indem man das Array Buffer
irgendwie als Zeiger auf das Array Bild umreferenziert? Stand mit
Pointern schon immer auf Kriegsfuß und dazu kommt noch dass ich seit
Ewigkeiten nicht mehr geproggt habe...

von Stefan Seegel (Gast)


Lesenswert?

Jau!

memcpy(Buffer, Bild, 9);

Stefan

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> Aber kann man es nicht schneller machen indem man das Array Buffer
> irgendwie als Zeiger auf das Array Bild umreferenziert?

Sicher.

Wenn du das Array an eine Funktion übergibst zur weiteren
Bearbeitung, wird ohnehin nur ein Zeiger weitergegeben.

Einen Zeiger umlegen geht auch, allerdings macht sich das
bei mehrdimensionalen Arrays nicht ganz so einfach.  Der
Funktionsaufruf (der ja implizit nur einen Zeiger vermittelt)
ist da einfacher.  Die Funktion kann ja durchaus auch inline
sein, wenn du den Overhead scheust.

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.