malloc in C, aber mehrdimensionale Array-Syntax verwenden

Gibt es eine Möglichkeit, ein großes Array zu mallocieren, aber mit 2D-Syntax darauf zu verweisen? Ich möchte so etwas wie:

int *memory = (int *)malloc(sizeof(int)*400*200);
int MAGICVAR = ...;
MAGICVAR[20][10] = 3; //sets the (200*20 + 10)th element

UPDATE: Dies war wichtig zu erwähnen: Ich möchte nur einen zusammenhängenden Speicherblock haben. Ich möchte einfach kein Makro schreiben wie:

#define INDX(a,b) (a*200+b);

und dann beziehe dich auf meinen Blob wie:

memory[INDX(a,b)];

Ich würde viel bevorzugen:

memory[a][b];

UPDATE: Ich verstehe, der Compiler hat keine Möglichkeit zu wissen, wie er ist. Ich würde gerne zusätzliche Informationen bereitstellen, wie zum Beispiel:

int *MAGICVAR[][200] = memory;

Existiert keine solche Syntax? Beachten Sie, dass ich nicht nur ein Array mit fester Breite verwende, sondern dass es zu groß ist, um es auf dem Stapel abzulegen.

UPDATE: OK Leute, ich kann das machen:

void toldyou(char MAGICVAR[][286][5]) {
  //use MAGICVAR
}

//from another function:
  char *memory = (char *)malloc(sizeof(char)*1820*286*5);
  fool(memory);

Ich bekomme eine Warnung,passing arg 1 of toldyou from incompatible pointer type, aber der Code funktioniert und ich habe überprüft, dass auf dieselben Speicherorte zugegriffen wird. Gibt es eine Möglichkeit, dies zu tun, ohne eine andere Funktion zu verwenden?

Antworten auf die Frage(16)

Ihre Antwort auf die Frage