4° Anno TEORIA 2. Allocazione dinamica della memoria | Page 18

10 : Allocazione dinamica della memoria Vers . 8.3 – Ottobre 2023
Nota Bene
Nel linguaggio C , il NOME di un vettore è un PUNTATORE AL SUO PRIMO ELEMENTO , e quindi , grazie all ’ aritmetica dei puntatori , se ne ricava che :
v [ i ] equivale a scrivere *( v + i ) INDIPENDENTEMENTE DAL TIPO DI ALLOCAZIONE SCELTA PER L ’ ARRAY .
Ecco spiegato finalmente il motivo per cui l ’ indice del PRIMO ELEMENTO di un vettore nel linguaggio C ( ed altri linguaggi " fratelli ") parte da 0 .
// Utilizzando il linguaggio C – Array _ Dinamico
# include < stdio . h > # include < stdlib . h >
int main ( int argc , char * argv []) { int * p ; int n , i ;
/* Check sul numero di elementi possibili dell ' array dinamico */ /* VERA DINAMICITA ': unico limite la quantità di memoria assegnata al TASK */ do { printf ("\ nInserisci la dimensione dl vettore : "); fflush ( stdin ); scanf ("% d ",& n ); } while ( n <= 0 );
/* ALLOCAZIONE DINAMICA dell ' array nello heap */ p = ( int *) malloc ( n * sizeof ( int ));
if ( p != NULL ) { printf ("\ nALLOCAZIONE puntatore OK !\ n \ n ");
/* Ciclo di caricamento array dinamico */ printf (" CARICAMENTO Vettore dinamico grazie al PUNTATORE AL SUO PRIMO ELEMENTO \ n "); for ( i = 0 ; i < n ; i ++) { printf (" Inserire l ' elemento del vettore con indice % d : ", i ); fflush ( stdin ); scanf ("% d ", p + i ); } /* Ciclo di visualizzazione array dinamico */ printf ("\ nVISUALIZZAZIONE Vettore dinamico grazie al PUNTATORE AL SUO PRIMO ELEMENTO "); for ( i = 0 ; i < n ; i ++) { printf ("\ nIl valore di *( p +% d ) che equivale a p [% d ] e ': % d ", i , i , *( p + i )); } /* Deallocazione area di memoria dimamica */ printf ("\ n \ nDEALLOCAZIONE puntatore OK !"); free ( p ); } else { printf ("\ n *** ERRORE : ALLOCAZIONE puntatore KO !\ n \ n "); }
return 0 ; }
Autore : Rio Chierego ( email : riochierego @ libero . it - sito web : www . riochierego . it ) Pag . 18