Итак, вам на самом деле нужен буфер памяти, а затем у вас есть разные массивы указателей, которые указывают на этот буфер памяти.
Итак, используя глобалы (некрасиво), что-то вроде:
unsigned char *my_data; // allocate to have enough space, 10000 chars or whatever
unsigned char **my_array; //Global defined
void reshape(unsigned short max_cols, unsigned short max_rows) {
free(my_array); // don't leak memory
// no need for cast below
// also, since array will be initialized below, use malloc
my_array = malloc(max_cols * sizeof(unsigned char*));
// initialize my_data with addresses of rows
for(i = 0; i < max_cols; ++i) {
my_array[i] = &(my_data[i * max_rows]);
}
}
Хотя учтите, что если вам не нужно, чтобы my_array
был массивом указателей, вы можете избежать косвенного обращения, напрямую обращаясь к mydata, например:
my_data[row_index * max_cols + column_index]