mikrocontroller.net

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


Autor: André Wippich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Autor: Franz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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! ;)

Autor: André Wippich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
char Buffer[3][3] = { {0,0,0},
                      {0,0,0},
                      {0,0,0} };

char Bild[3][3] = { { {1,0,1},
                      {0,1,0},
                      {1,0,1} };
...
int main()
{
...
for ( int i = 0; i < 3; i++)
{
  for ( int j = 0; j < 3; j++)
    Buffer[i][j] = Bild[i][j];
}
...
}

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

Autor: Stefan Seegel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jau!

memcpy(Buffer, Bild, 9);

Stefan

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.