Самый простой способ - использовать b
, чтобы просто хранить указатели на такие матрицы:
На каждом временном шаге копируйте матрицу a
и вставляйте указатель на копию матрицы a
в b
.
Затем вы можете передать b[i]
в вашу функцию func(b[i])
.
Это в основном то, что предлагает frsim.
В коде:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAX_TIME 5
void func(int array[2][3]) {
for(size_t x = 0; x < 2; ++x) {
for(size_t y = 0; y < 3; ++y) {
printf("%i ", array[x][y]);
}
printf("\n");
}
printf("\n");
}
int main (int argc, char** argv) {
int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
int b[MAX_TIME][2][3] = {0};
for(size_t time = 0; time < MAX_TIME; ++time) {
/* Calculate your new version of `a` here */
a[1][0] = time;
memcpy(b[time], a, sizeof(a));
printf("%zu ", sizeof(a));
}
for(size_t i = 0; i < MAX_TIME; ++i) {
printf("time: %zu \n", i);
func(b[i]);
}
}
Массивы несут много ловушек, в частности, массив не указатель.
Но: если вы передадите массив функции, то случится так, что в сам массив будет передан не сам массив, а указатель на массив.
То же самое произошло бы с двумерным массивом: при вызове функции с двумерным массивом в функцию передается не массив, а указатель, и этот указатель по-прежнему просто int *
, а не int **
... см. Например этот вопрос