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?