Pointer vs Array
Un pointer este un tip de date care deține o referință la o locație de memorie (adică o variabilă de pointer stochează o adresă a unei locații de memorie în care sunt stocate unele date). Arrays sunt structura de date cea mai frecvent utilizată pentru a stoca o colecție de elemente. Cele mai multe limbi de programare oferă metode pentru a declara cu ușurință matrice și elemente de acces în matrice.
Ce este un Pointer?
Un pointer este un tip de date care stochează o adresă a unei locații de memorie în care sunt stocate date. Cu alte cuvinte, un pointer deține o referință la o locație de memorie. Accesarea datelor stocate în locația de memorie la care se face referire prin pointer se numește dereferencing. Atunci când efectuați operații repetitive, cum ar fi traversarea arborilor / șirurilor, căutări de tabelă etc., folosind indicii ar îmbunătăți performanța. Acest lucru se datorează faptului că dereferențialul și copierea indicatoarelor sunt mai ieftine decât copierea și accesarea de fapt a datelor indicate de indicatori. Un pointer nul este un indicator care nu indică nimic. În Java, accesarea unui pointer nul ar genera o excepție numită NullPointerException.
Ce este o matrice?
Afișată în figura 1, este o bucată de cod utilizată în mod obișnuit pentru a declara și a atribui valori unei matrice. Figura 2 prezintă modul în care ar arăta o matrice în memorie.
valori int [5]; valori [0] = 100; valori [1] = 101; valori [2] = 102; valori [3] = 103; valori [4] = 104; |
Figura 1: Cod pentru declararea și atribuirea valorilor unei matrice
100 | 101 | 102 | 103 | 104 |
Index: 0 | 1 | 2 | 3 | 4 |
Figura 2: Array stocat în memorie
Codul de mai sus definește o matrice care poate stoca 5 numere întregi și acestea sunt accesate folosind indicii 0 până la 4. O proprietate importantă a unei matrice este aceea că întreaga matrice este alocată ca un singur bloc de memorie și fiecare element își are propriul spațiu în matrice . Odată ce o matrice este definită, dimensiunea acesteia este fixă. Deci, dacă nu sunteți sigur de dimensiunea matricei la momentul compilării, va trebui să definiți o matrice suficient de mare pentru a fi în partea sigură. Dar, de cele mai multe ori, vom folosi de fapt mai puține elemente decât am alocat. Deci, o cantitate considerabilă de memorie este de fapt pierdută. Pe de altă parte, dacă "matricea suficientă" nu este destul de mare, programul s-ar prăbuși.
Care este diferența dintre Pointeri și Arrays?
Un pointer este un tip de date care stochează o adresă a unei locații de memorie în care sunt stocate date, în timp ce Arrays sunt structura de date cea mai frecvent utilizată pentru stocarea unei colecții de elemente. În limbajul de programare C, indexarea matricei se face folosind aritmetica pointerului (adică elementul ith al matricei x ar fi echivalent cu * (x + i)). Prin urmare, în C, setul de indicatori care indică un set de locații de memorie care sunt consecutivi, poate fi considerat ca o matrice. Mai mult decât atât, există o diferență în modul în care operatorul sizeof operează pe pointeri și matrice. Atunci când se aplică la o matrice, operatorul sizeof va întoarce întreaga dimensiune a matricei, în timp ce atunci când este aplicat unui pointer, va reveni doar la dimensiunea indicelui.