Можно ли как-то использовать malloc для большого массива, но ссылаться на него с помощью 2D-синтаксиса? Я хочу что-то вроде:
int *memory = (int *)malloc(sizeof(int)*400*200);
int MAGICVAR = ...;
MAGICVAR[20][10] = 3; //sets the (200*20 + 10)th element
ОБНОВЛЕНИЕ: это было важно упомянуть: я просто хочу иметь один непрерывный блок памяти. Я просто не хочу писать макрос вроде:
#define INDX(a,b) (a*200+b);
, а затем сослаться на мой блоб как:
memory[INDX(a,b)];
Я бы предпочел:
memory[a][b];
ОБНОВЛЕНИЕ: я понимаю, что у компилятора нет способа узнать как есть. Я хотел бы предоставить дополнительную информацию, что-то вроде:
int *MAGICVAR[][200] = memory;
Не существует такого синтаксиса? Обратите внимание, что я не просто использую массив фиксированной ширины, потому что он слишком большой для размещения в стеке.
ОБНОВЛЕНИЕ: ОК, ребята, я могу сделать это:
void toldyou(char MAGICVAR[][286][5]) {
//use MAGICVAR
}
//from another function:
char *memory = (char *)malloc(sizeof(char)*1820*286*5);
fool(memory);
Я получаю предупреждение, passing arg 1 of toldyou from incompatible pointer type
, но код работает, и я проверил, что к тем же адресам обращаются. Есть ли способ сделать это без использования другой функции?