Ein zweidimensionales Array definieren und initialisieren Sie so:
unsigned values[500][500] = { v_00, v_01, ..., v_499499 };
Die Werteliste in geschweiften Klammern kann dabei auch kürzer
als 500 * 500 sein; fehlende Werte werde mit 0 initialisiert. Um
also ein vollständig mit 0 gefülltes Array zu definieren:
unsigned values[500][500] = { 0 };
In den üblichen PC-Implementierungen von C ist der Typ 'unsigned'
32 Bit groß, das Array damit 250000 * 4 Byte = 1 MB groß. Wenn der
Wertebereich ausreicht, wäre als Elementtyp also 'unsigned short'
empfehlenswert (ich nehme an, daß die Pixelwerte kein Vorzeichen
haben).
Datenobjekte dieser Größe sollten nicht mit automatischer Lebensdauer,
also lokal in Funktionen, angelegt werden, sondern global außerhalb
von Funktionen:
unsigned values[500][500] = { 0 };
void foo(void)
{
/* ... */
}
oder als 'static' - dann werden sie nicht auf dem Stack angelegt -:
void foo(void)
{
static unsigned values[500][500] = { 0 };
}
oder am besten dynamisch allokiert werden:
#include <stdlib.h> /* wegen malloc() */
unsigned (*values)[500];
void foo(void)
{
/* "values" initialisieren */
values = malloc(500 * sizeof values[500]);
if (values == NULL) {
/* Oha, nicht genug Speicher! */
}
/* ... */
}
Hilft das bei Ihrer Frage weiter?
Gruß
Martin