Salve

il problema che vi sottopongo riguarda i puntatori e le matrici, niente di complesso ma i conti non tornano.

Se scrivo come codice prova:
codice:
    int mat[3];
    
    int* p = mat;
Il compilatore è contento (DevC++, Mingw).

Se scrivo:

codice:
   int mat[3][4];

    int* p = mat;
Si rifiuta di compilare riportando:

18 cannot convert `int (*)[4]' to `int*' in initialization
Questo messaggio d'errore mi tornerebbe utile se riuscissi bene a intendere cosa significhi int(*)[4].

Io mi aspettavo che come nel caso dell'array monodimensionale il nome non è altro che un puntatore anche nel caso di array multidimensionale il nome non fosse altro che un puntatore.

Inoltre la scrittura:
codice:
 
int mat[3][4];
int *p;
p= &mat[0][0];
Viene, a mio avviso, giustamente compilata.
Ecco, io pensavo ma il compilatore mi smentisce e per questo vorrei delucidazioni, che l'ultima scrittura e quella sopra scritta fossero equivalenti, cioè:

p=&mat[0][0] equ. a p = mat;





PS: Ho pensato e il compilatore mi ha confermato che la scrittura p=mat[0] è corretta che non è altro che il puntatore dal primo elemento della prima riga, anche se personalmente non avrei mal visto la scrittura p=mat; che facesse puntare anch'essa al primo elemento