linux user group brescia

immagine del castello

Archivio della mailing list

Array e malloc

Maurizio Paolini paolini a dmf.bs.unicatt.it
Mar 7 Maggio 2002 16:16:09 UTC
> From: Carlo Mor <jenawork a iol.it>
> Subject: Re: Array e malloc
>
>
> Maurizio Paolini wrote:
>
> >No.  Attenzione che in C gli array a piu' di una dimensione hanno comunque
> >un solo livello di indirezione, ovvero "jolly" e' in sostanza un puntatore
> >a una "struct orso".  Quindi "struct orso *jolly".
> >
> Sei sicuro?
> Guarda che un array di array e' consentito ed ha doppia indirezione
> pensa al classico
> int main (int argc, char **argv)

Beh, quella e' una cosa diversa.  Comunque ho fatto una veloce prova e
devo darti ragione!  E mi spiego anche il motivo del mio errore.
Devo ringraziare gli intervenuti, poiche' ora mi sono chiarito un grosso
dubbio che avevo.

Comunque, tornando in tema, se ho una matrice a due indici:

   int a[10][10];

questa puo' essere alternativamente dichiarata con

   int **a;

e poi allocata con    a = (int **) malloc (10*10*sizeof(int));
salvo che poi il compilatore non sa come raggiungere l'elemento (i,j) 
poiche' gli manca la lunghezza della riga.

Suggerisco di provare il seguente codice:

   int a[10][10];

   a[0][0] = 99;

   printf ("%d %d %d\n, a, *a, **a);

Il risultato e' interessante!

mp

>
> >
> >Deve essere allocata con qualcosa del tipo:
> >
> >   jolly= (struct orso *) malloc (dim1*dim2*dim3*sizeof(struct orso));
> >
> >dove dim1, dim2, dim3 sono i tre valori massimi dei 3 indici. 
> >(Pero' stai attento, e' pericoloso avventurarsi con le matrici a piu' indici:
> >e' facile sbagliarsi)
> >
> Il modo piu' efficiente e' quello proposto da Bauno, che effettivamente 
> uso anch'io in C++ e che e' velocissimo
> (array monodimensionale di dimensione pari al prodotto delle dimensioni)
>
> >
> >mp
> >
> >>Carlo
> >>
> >



Maggiori informazioni sulla lista Lug