Есть ли способ 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];
UPDATE: Я понимаю, что компилятор не знает, как есть. Я бы хотел предоставить дополнительную информацию, например:
int *MAGICVAR[][200] = memory;
Не существует ли такого синтаксиса? Обратите внимание, что я не просто использую массив фиксированной ширины, так это то, что он слишком велик для размещения в стеке.
UPDATE: Хорошо, ребята, я могу это сделать:
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
, но код работает, и я проверял, что доступны те же адреса. Есть ли способ сделать это без использования другой функции?