Dalla mia osservazione, potresti non sapere esattamente cosa vuoi e confondere sulla struttura e l'aritmetica del puntatore. Si prega di passare attraverso le seguenti 2 possibilità.
1) Un array bidimensionale con ciascun elemento ha un puntatore a test
. In questo caso la memoria di tutti i puntatori a test
s è già statica allocata. Ma la memoria del reale test
s non è pronta. In questo caso è necessario compilare uno per uno il numero test [i][j]
.
Ciascuno del test
è discreto nella memoria e si ha il vantaggio di crearli o distruggerli singolarmente in modo dinamico.
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) Una matrice bidimensionale con ciascun elemento è un test
. In questo caso la memoria di tutti gli test
s è già allocata. Inoltre, la memoria reale test
s è pronta per l'uso senza preparazione extra.
Tutte le test
s sono continue nella memoria, come un grande blocco ed è sempre presente. Ciò significa che si può perdere un pezzo di memoria se solo avete bisogno di tutte test
s ad una certa ora di punta e il più delle volte si usa solo alcuni di loro.
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);
*/
Grazie mille! – Mortezaipo