10: Allocazione dinamica della memoria Vers. 9.1 – Ottobre 2025
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 del 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