Con i puntatori non si può:
Codice: Seleziona tutto
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int dim = 4;
int mat[dim][dim];
int **mat_ptr = malloc ( dim * sizeof (int*) );
for ( int i=0; i<dim; ++i )
{
mat_ptr[i] = malloc ( dim * sizeof (int) );
}
printf ("dimensione di mat_ptr : %lu\n", sizeof (mat_ptr));
printf ("dimensione di mat_ptr[0]: %lu\n", sizeof (mat_ptr[0]));
printf ("dimensione di mat : %lu\n", sizeof (mat));
printf ("dimensione di mat[0]: %lu\n", sizeof (mat[0]));
return 0;
}
output:
Codice: Seleziona tutto
dimensione di mat_ptr : 8
dimensione di mat_ptr[0]: 8
dimensione di mat : 64
dimensione di mat[0]: 16
Il valore ritornato da sizeof è correto: il doppio puntatore ad interi occupa 8 Byte (=64 bit) in un'architettura a 64 bit. Il valore a cui punta è un puntatore ad intero, che occupa anch'esso 8 Byte.
Invece l'array statico è allocato tutto nello stack, e occupa 64 Byte.
Ci sono dei modi per ottenere la dimensione di un buffer allocato con la malloc, ma niente di standard e niente di sicuramente funzonante, perciò non ti incollerò un link. Li puoi trovare cercando sul web a tuo rischio e pericolo.
(;