Alocação de Arrays
char letra = 'a';
char *p1;
char **p2;
char ***p3;
p1 = &letra;
p2 = &p1;
p3 = &p2;
int **p;
int i , j , N = 2;
p = (int **) malloc( N * sizeof( int* ) );
for ( i = 0 ; i < N ; i++ ) {
p[i] = ( int* ) malloc( N * sizeof( int ) );
for ( j = 0 ; j < N ; j++ ) {
scanf( "%i" , &p[i][j] );
}
}
Em um ponteiro para ponteiro, cada nível do ponteiro permite criar uma nova dimensão no array.
Diferente dos arrays de uma dimensão, para liberar um array com mais de uma dimensão da memória, é preciso liberar a memória alocada em cada uma de suas dimensões, na ordem inversa da que foi alocada
int **p;
int i , j , N = 2;
p = (int **) malloc( N * sizeof( int* ) );
for ( i = 0 ; i < N ; i++ ) {
p[i] = ( int* ) malloc( N * sizeof( int ) );
for ( j = 0 ; j < N ; j++ ) {
scanf( "%i" , &p[i][j] );
}
}
for ( i = 0 ; i < N ; i++ ) {
free( p[i] );
}
free(p);
Alocação de Struct
Exemplo