Array dinamici
Nei corsi precedenti sugli array, abbiamo esaminato la creazione di un array come questo:
cost int Nmax = 1000;
intero A[Nmax];
o questo:
intA[1000];
Questo metodo crea un array statico. Uno svantaggio è che la dimensione e il tipo di elementi dell'array non possono essere modificati mentre il programma è in esecuzione.
Nell'esempio precedente, viene creato un array statico di 1000 elementi. Cioè, viene allocata un'area in memoria per memorizzare 1000 elementi di tipo int (un array di 1000 elementi di tipo int ). L'indirizzo dell'inizio dell'array è memorizzato nella variabile A . Se è necessario elaborare un array di più di 1000 elementi, sarà necessario modificare la descrizione e ricompilare nuovamente il programma. Quando si lavora con piccoli array, la maggior parte della memoria allocata per un array statico verrà sprecata.
Per un uso efficiente della memoria del computer, è necessario allocarla dinamicamente. In altre parole, la memoria per gli oggetti dovrebbe essere allocata durante l'esecuzione del programma secondo necessità (creazione di nuovi oggetti).
In C++, le operazioni new e delete sono progettate per allocare dinamicamente la memoria del computer. Operazione new alloca la memoria dall'area di memoria libera e l'operazione delete dealloca la memoria allocata.
Un esempio di creazione ed eliminazione di una variabile dinamica
int *A = nuovo int; // crea un oggetto di tipo int
*A = 15; // l'inizializzazione dell'oggetto avviene tramite un puntatore (*)
// l'inizializzazione può essere eseguita immediatamente
// quando si dichiara un oggetto dinamico
int *B = nuovo int(25);
cout << *A << " " << *B; // valore di output tramite puntatore
cancellaA; // libera la memoria allocata
cancella B;
L'operazione new crea un oggetto del tipo specificato, alloca memoria per esso e restituisce un puntatore del tipo corretto alla posizione di memoria specificata. Se la memoria non può essere allocata, ad esempio se non ci sono aree libere, viene restituito un puntatore nullo, ovvero il puntatore restituirà il valore 0. L'allocazione della memoria è possibile per qualsiasi tipo di dato: int , virgola mobile , doppio , carattere ecc.
Allo stesso modo, in C++ puoi creare un array dinamico che utilizzerà l'allocazione dinamica della memoria. La dimensione di tale matrice, che può essere utilizzata mentre il programma è in esecuzione, ad esempio dalla tastiera, per creare variabili dinamiche.
Nella sintassi C
intN;
scanf("%d", &N);
int *mas = malloc (sizeof(int) * N);
// successivamente per ridimensionare l'array
// utilizzato da realloc .
...
libero(mas); // rilascia la memoria allocata
Nella sintassi C++
intN;
cin>> N;
int*A = nuovo int[N];
// per modificare la dimensione dell'array, puoi farlo
// trasferisce i dati su un altro array e cancella quello vecchio
...
cancella []mas; // rilascia la memoria allocata
// le parentesi quadre indicano
// che stiamo liberando memoria da sotto l'array
|