Differenza tra puntatore e matrice

Puntatore contro matrice

Un puntatore è un tipo di dati che contiene un riferimento a una posizione di memoria (cioè una variabile puntatore memorizza un indirizzo di una posizione di memoria in cui sono memorizzati alcuni dati). Le matrici sono la struttura dati più comunemente utilizzata per memorizzare una raccolta di elementi. La maggior parte dei linguaggi di programmazione fornisce metodi per dichiarare facilmente matrici e accedere agli elementi negli array.

Cos'è un puntatore?

Un puntatore è un tipo di dati che memorizza un indirizzo di una posizione di memoria in cui sono memorizzati alcuni dati. In altre parole, un puntatore contiene un riferimento a una posizione di memoria. L'accesso ai dati memorizzati nella posizione di memoria a cui fa riferimento il puntatore è chiamato dereferenziazione. Quando si eseguono operazioni ripetitive come attraversare alberi / stringhe, ricerche di tabelle, ecc., L'uso di puntatori migliorerebbe le prestazioni. Questo perché il dereferenziamento e la copia dei puntatori è più economico rispetto alla copia e all'accesso effettivo ai dati puntati dai puntatori. Un puntatore nullo è un puntatore che non punta a nulla. In Java, l'accesso a un puntatore nullo genera un'eccezione denominata NullPointerException.

Cos'è una matrice?

Nella figura 1 è mostrato un pezzo di codice utilizzato in genere per dichiarare e assegnare valori a un array. La Figura 2 mostra come apparirà una matrice nella memoria.

valori int [5];

valori [0] = 100;

valori [1] = 101;

valori [2] = 102;

valori [3] = 103;

valori [4] = 104;

Figura 1: codice per la dichiarazione e l'assegnazione di valori a un array


100 101 102 103 104
Indice: 0 1 2 3 4

Figura 2: array memorizzato nella memoria

Il codice sopra definisce un array che può memorizzare 5 numeri interi e vi si accede usando gli indici da 0 a 4. Una proprietà importante di un array è che l'intero array è allocato come un singolo blocco di memoria e ogni elemento riceve il proprio spazio nell'array . Una volta definito un array, la sua dimensione è fissa. Quindi, se non si è sicuri della dimensione dell'array in fase di compilazione, si dovrà definire una matrice abbastanza grande da essere nella parte sicura. Ma, il più delle volte, in realtà utilizzeremo un numero di elementi inferiore a quello che abbiamo assegnato. Quindi una notevole quantità di memoria è effettivamente sprecata. D'altra parte se la "matrice abbastanza grande" non è effettivamente abbastanza grande, il programma si bloccherebbe.

Qual è la differenza tra puntatori e matrici?

Un puntatore è un tipo di dati che memorizza un indirizzo di una posizione di memoria in cui sono memorizzati alcuni dati, mentre gli array sono la struttura di dati più comunemente utilizzata per memorizzare una raccolta di elementi. Nel linguaggio di programmazione C, l'indicizzazione dell'array viene eseguita utilizzando l'aritmetica del puntatore (vale a dire l'elemento ith dell'array x sarebbe equivalente a * (x + i)). Pertanto in C, l'insieme di puntatori che puntano a un insieme di posizioni di memoria che sono consecutivi, può essere pensato come una matrice. Inoltre, c'è una differenza nel modo in cui l'operatore sizeof opera su puntatori e array. Quando viene applicato a un array, l'operatore sizeof restituisce l'intera dimensione dell'array, mentre quando viene applicato a un puntatore restituisce solo la dimensione del puntatore.