C/Vettori e puntatori/Puntatori: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riga 219:
tipo_restituito fn (elenco tipi altri argomenti, tipo [][*]...[*]);
l'asterisco va solo dove la dimensione è variabile.
 
Tornando al caso delle matrici segue un esempio commentato sull'uso delle matrici dinamiche e passaggio a funzione.
==== Esempio passaggio matrici ====
<source lang="c">
/* Il seguente codice per funzionare correttamente necessita di un compilatore che supporti
lo standard C99. */
 
#include <stdio.h>
void leggiMtrx(int, int, int[][*]); // il [*] indica che il numero di colonne è
void stampaMtrx(int, int, int[][*]); // una variabile.
 
int main(void){
int Ri,Co; // parametri necessari per definire la matrice
printf("-- acquisizione numero righe e colonne --\n");
scanf ("%d%d", &Ri, &Co);
printf("-- Lettura elementi della matrice --\n");
int M[Ri][Co]; // Matrice dinamica, è possibile dichiararla
leggiMtrx(Ri, Co, M); // dopo aver letto Ri(ghe) e Co(lonne).
printf("-- Stampa della matrice --\n");
stampaMtrx(Ri, Co, M);
}
 
void stampaMtrx(int Ri,int Co, int M[][Co]){// qui viene specicicato che M è un puntatore
int i,j; // a una matrice di Co colonne dove Co è una
// variabile.
for (i=0;i<Ri;i++){
for (j=0;j<Co;j++)
printf ("%d ",M[i][j]);
printf("\n"); // ritorno a capo per distinguere le righe del-
} // la matrice.
}
void leggiMtrx(int Ri, int Co, int M[][Co]){// lettura degli elementi della matrice.
int i,j;
for (i=0;i<Ri;i++)
for (j=0;j<Co;j++){
printf ("M[%d][%d] = ",i,j);
scanf("%d",&M[i][j]);
}
}
</source>
 
=={{IndexItem|funzioni, puntatori a}}{{IndexItem|puntatori a funzioni}}Puntatori a funzioni==