Διαφορά μεταξύ δείκτη και πίνακα

Διαφορά μεταξύ δείκτη και πίνακα
Διαφορά μεταξύ δείκτη και πίνακα

Βίντεο: Διαφορά μεταξύ δείκτη και πίνακα

Βίντεο: Διαφορά μεταξύ δείκτη και πίνακα
Βίντεο: Πώς να Προστατέψετε Τις Ηλεκτρικές Συσκευές σας! 2024, Ιούλιος
Anonim

Pointer vs Array

Ο δείκτης είναι ένας τύπος δεδομένων που περιέχει μια αναφορά σε μια θέση μνήμης (δηλαδή μια μεταβλητή δείκτη αποθηκεύει μια διεύθυνση μιας θέσης μνήμης στην οποία αποθηκεύονται ορισμένα δεδομένα). Οι πίνακες είναι η πιο συχνά χρησιμοποιούμενη δομή δεδομένων για την αποθήκευση μιας συλλογής στοιχείων. Οι περισσότερες γλώσσες προγραμματισμού παρέχουν μεθόδους για εύκολη δήλωση πινάκων και πρόσβασης σε στοιχεία στους πίνακες.

Τι είναι ένας δείκτης;

Ο δείκτης είναι ένας τύπος δεδομένων που αποθηκεύει μια διεύθυνση μιας θέσης μνήμης στην οποία είναι αποθηκευμένα ορισμένα δεδομένα. Με άλλα λόγια, ένας δείκτης κρατά μια αναφορά σε μια θέση μνήμης. Η πρόσβαση στα δεδομένα που είναι αποθηκευμένα στη θέση μνήμης που αναφέρεται από τον δείκτη ονομάζεται αποαναφορά. Όταν εκτελείτε επαναλαμβανόμενες λειτουργίες, όπως η διέλευση δέντρων/συμβολοσειρών, αναζητήσεις πινάκων κ.λπ., η χρήση δεικτών θα βελτίωνε την απόδοση. Αυτό συμβαίνει επειδή η αποαναφορά και η αντιγραφή δεικτών είναι φθηνότερη από την πραγματική αντιγραφή και πρόσβαση στα δεδομένα που επισημαίνονται από τους δείκτες. Ένας μηδενικός δείκτης είναι ένας δείκτης που δεν δείχνει τίποτα. Στην Java, η πρόσβαση σε έναν μηδενικό δείκτη θα δημιουργήσει μια εξαίρεση που ονομάζεται NullPointerException.

Τι είναι ένας πίνακας;

Το Εμφανίζεται στο σχήμα 1, είναι ένα κομμάτι κώδικα που χρησιμοποιείται συνήθως για τη δήλωση και την εκχώρηση τιμών σε έναν πίνακα. Το σχήμα 2 απεικονίζει πώς θα φαινόταν ένας πίνακας στη μνήμη.

τιμές int[5];

values[0]=100;

values[1]=101;

values[2]=102;

values[3]=103;

values[4]=104;

Εικόνα 1: Κωδικός για τη δήλωση και την εκχώρηση τιμών σε έναν πίνακα

100 101 102 103 104
Δείκτης: 0 1 2 3 4

Εικόνα 2: Συστοιχία αποθηκευμένη στη μνήμη

Ο παραπάνω κώδικας ορίζει έναν πίνακα που μπορεί να αποθηκεύσει 5 ακέραιους αριθμούς και η πρόσβαση σε αυτούς γίνεται χρησιμοποιώντας δείκτες 0 έως 4. Μια σημαντική ιδιότητα ενός πίνακα είναι ότι, ολόκληρος ο πίνακας εκχωρείται ως ένα ενιαίο μπλοκ μνήμης και κάθε στοιχείο παίρνει το δικό του δικό σας χώρο στη συστοιχία. Μόλις οριστεί ένας πίνακας, το μέγεθός του είναι σταθερό. Επομένως, εάν δεν είστε σίγουροι για το μέγεθος του πίνακα κατά τη στιγμή της μεταγλώττισης, θα πρέπει να ορίσετε έναν αρκετά μεγάλο πίνακα ώστε να βρίσκεται στην ασφαλή πλευρά. Αλλά, τις περισσότερες φορές, θα χρησιμοποιήσουμε στην πραγματικότητα λιγότερο αριθμό στοιχείων από αυτόν που έχουμε διαθέσει. Έτσι, ένα σημαντικό μέρος της μνήμης σπαταλάται πραγματικά. Από την άλλη πλευρά, εάν ο "αρκετά μεγάλος πίνακας" δεν είναι στην πραγματικότητα αρκετά μεγάλος, το πρόγραμμα θα διακοπεί.

Ποια είναι η διαφορά μεταξύ Pointers και Arrays;

Ο δείκτης είναι ένας τύπος δεδομένων που αποθηκεύει μια διεύθυνση μιας θέσης μνήμης στην οποία αποθηκεύονται ορισμένα δεδομένα, ενώ οι Πίνακες είναι η πιο συχνά χρησιμοποιούμενη δομή δεδομένων για την αποθήκευση μιας συλλογής στοιχείων. Στη γλώσσα προγραμματισμού C, η ευρετηρίαση πίνακα γίνεται χρησιμοποιώντας αριθμητική δείκτη (δηλαδή το iο στοιχείο του πίνακα x θα ήταν ισοδύναμο με (x+i)). Επομένως στο C, ένα σύνολο δεικτών που δείχνουν σε ένα σύνολο θέσεων μνήμης που είναι διαδοχικές, μπορεί να θεωρηθεί ως πίνακας. Επιπλέον, υπάρχει διαφορά στον τρόπο με τον οποίο λειτουργεί ο τελεστής sizeof σε δείκτες και πίνακες. Όταν εφαρμόζεται σε έναν πίνακα, ο τελεστής sizeof θα επιστρέψει ολόκληρο το μέγεθος του πίνακα, ενώ όταν εφαρμόζεται σε έναν δείκτη, θα επέστρεφε μόνο το μέγεθος του δείκτη.

Συνιστάται: