Из моих наблюдений вы можете не знать точно, что вы хотите, и путать в арифметике структуры и указателя.Пожалуйста, просмотрите следующие 2 возможности.
1) Двумерный массив с каждым элементом имеет указатель на test
.В этом случае память всех указателей на test
с уже статически выделена .Но память реального test
s не готова.В этом случае вы должны заполнить test [i][j]
один за другим.
Каждый из test
является дискретным в памяти, и вы можете динамически создавать или уничтожать их по отдельности.
typedef struct {
int i;
} test;
test* t[20][20];
/* or instead of statically allocated the memory of all the pointers to tests
you can do the following to dynamically allocate the memory
test ***t;
t = (test***)malloc(sizeof(test *) * 20 * 20);
*/
for (int i=0; i < 20; i++){
for (int j=0; j < 20; j++){
t[i][j] = malloc(sizeof(test));
}
}
2) Двумерный массив с каждым элементом представляет собойtest
.В этом случае память всех test
s уже выделена .Кроме того, память настоящих test
s готова к использованию без дополнительной подготовки.
Все test
непрерывны в памяти как большой блок и всегда находятся там.Это означает, что вы можете тратить часть памяти, если вам нужны все test
с в определенное пиковое время, и большую часть времени вы используете только несколько из них.
typedef struct {
int i;
} test;
test t[20][20];
/* or instead of statically allocated the memory of all tests
you can do the following to dynamically allocate the memory
test **t;
t = (test**)malloc(sizeof(test) * 20 * 20);
*/