PERCHE' nela funzione alloca(), che mi permette di allocare una matrice dinamicamente
devo usare il doppio puntatre come il seguente programma?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int conta(FILE *); /*conta quanti elementi sono presenti nel file*/
int **alloca (int);
main()
{
FILE *fpi, *fpu;
int N;
int **matrice;
int valore; /*restituisco la dimensione della matrice dopo aver fatto la radice*/
fpi = fopen ("C:\\LABORATORIO\\ingresso.txt", "r");
if (fpi == NULL)
printf ("Il file ingresso.txt non esiste!!!\n");
else
{
fpu = fopen ("C:\\LABORATORIO\\uscita.txt", "w");
N = conta (fpi);
fprintf(fpu, "La dimensione del file ingresso.txt e' %d", N);
valore = sqrt (N);
fprintf(fpu, "\nLa radice quandrata di %d e' %d", N, valore);
fprintf(fpu, "\n\nQuindi la matrice sara' di ordine %d*%d", valore, valore);
matrice = alloca (valore);
}
}
int conta (FILE *A)
{
int i, conta;
i = 0;
while (fscanf(A, "%d", &conta) != EOF)
i = i + 1;
return i;
}
int **alloca (int A)
{
int i;
int **mat;
mat = malloc (A * sizeof(int *));
for (i=0; i<A; i++)
mat[i] = malloc (A * sizeof (int));
return mat;
}