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

Anonim

Βασική διαφορά - δείκτης έναντι αναφοράς

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

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

Ένας δείκτης είναι ένα αντικείμενο γλώσσας προγραμματισμού που αποθηκεύει τη διεύθυνση μνήμης μιας τιμής στη μνήμη υπολογιστών.

Σε σύνταξη C ++.

int i = 5;

int * ptr = & i;

Η πρώτη γραμμή ορίζει μια μεταβλητή αρχικοποιημένη με τιμή 5. Η δεύτερη γραμμή ορίζει έναν δείκτη στη διεύθυνση μνήμης της μεταβλητής. Εδώ, το 'ptr' δηλώνεται ως αντικείμενο τύπου 'pointer to int' του οποίου η αρχική τιμή είναι η διεύθυνση του αντικειμένου i. Ουσιαστικά ptr μεταβάλλει τα σημεία στο i αποθηκεύοντας τη διεύθυνση μνήμης του.

Η απόκτηση της τιμής που είναι αποθηκευμένη σε μια θέση μνήμης ονομάζεται dereferencing . Ο χειριστής * χρησιμοποιείται για την αποδυνάμωση του δείκτη. Αφού ολοκληρωθούν οι δηλώσεις, η έμμεση έκφραση * ptr dereferences ptr αναφέρεται στο i.

Για να αλλάξετε την τιμή του i, μπορείτε να χρησιμοποιήσετε την αντιστοίχιση.

* ptr = 20;

Οι δείκτες μπορούν να ανακατανεμηθούν για να αναφερθούν και σε διαφορετικά αντικείμενα.

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

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

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

Οι δείκτες υποστηρίζονται σε γλώσσες όπως C, C ++, Pascal και πολλές γλώσσες συναρμολόγησης.

Δείκτης a που δείχνει τη διεύθυνση μνήμης που σχετίζεται με τη μεταβλητή b.

Τι είναι μια αναφορά;

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

Σε σύνταξη C ++.

int i = 5;

int & ref = i.

Η πρώτη γραμμή ορίζει μια μεταβλητή αρχικοποιημένη με τιμή 5. Η δεύτερη γραμμή δηλώνει το "ref" ως αντικείμενο τύπου "reference to int" που αναφέρεται στο i. Μια αναφορά είναι διαφορετική από τα ίδια τα δεδομένα δεδομένου ότι μια αναφορά εφαρμόζεται ως η φυσική διεύθυνση του συγκεκριμένου δεδομένου που είναι αποθηκευμένο στη μνήμη.

Μόλις καθοριστεί, μια αναφορά δεν μπορεί να επανατοποθετηθεί μια νέα τιμή. Μια αναφορά αναφέρεται πάντα στο αντικείμενο με το οποίο έχει αρχικοποιηθεί. Στην επόμενη ανάθεση, το ref εξακολουθεί να αναφέρεται στο i, αλλά η τιμή είναι τώρα 20.

ref = 20;

Σύμφωνα με το παραπάνω παράδειγμα, οι αναφορές απόκλισης δεν απαιτούν κανέναν χειριστή.

Οι αναφορές μπορούν να χρησιμοποιηθούν όταν μια μεταβλητή αναφέρεται πάντοτε σε ένα αντικείμενο. Αυτό συμβαίνει επειδή, αντίθετα με τους δείκτες, οι αναφορές δεν μπορούν να είναι μηδενικές και πρέπει πάντα να εκχωρούνται κατά την αρχικοποίηση. Δεδομένου ότι οι αναφορές πρέπει πάντα να αναφέρονται σε κάποιο αντικείμενο, κάνοντας μια τέτοια μεταβλητή μια αναφορά διασφαλίζει ότι το πρόγραμμα θα λειτουργήσει αποτελεσματικά και σωστά. Δεδομένου ότι δεν υπάρχουν αναφορές null, η εγκυρότητα μιας μεταβλητής αναφοράς δεν χρειάζεται να δοκιμαστεί.

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

Γλώσσες προγραμματισμού όπως αναφορές υποστήριξης C ++, Java, Python, Perl, PHP, Ruby κ.λπ.

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

Ορισμός δείκτη και αναφοράς

Δείκτης: Ένας δείκτης είναι η διεύθυνση μνήμης ενός αντικειμένου που είναι αποθηκευμένο στη μνήμη υπολογιστών.

Αναφορά: Μια αναφορά είναι ένα εναλλακτικό αναγνωριστικό ή ένα ψευδώνυμο για ένα αντικείμενο.

Χαρακτηριστικά του δείκτη και αναφοράς

Δήλωση

Δείκτης: Δείκτης δηλώνεται με τον χειριστή *.

Αναφορά: Δηλώνεται αναφορά με τον χειριστή &.

Απόσπαση

Δείκτης: Μια μεταβλητή δείκτη απαιτεί την απομάκρυνση του χειριστή *.

Αναφορά: Μία μεταβλητή αναφοράς δεν απαιτεί να μην υπάρξει διαφοροποίηση από τον χειριστή.

Αρχικοποίηση

Δείκτης: Οι δείκτες μπορούν να αρχικοποιηθούν σε null.Τέτοιες μεταβλητές ονομάζονται μηδενικοί δείκτες.

Αναφορά: Οι αναφορές δεν μπορούν να αρχικοποιηθούν σε null. Δεν υπάρχει λόγος μηδέν. Μια αναφορά πρέπει πάντα να αναφέρεται σε ένα αντικείμενο.

Επανατοποθετήσεις

Δείκτης: Μια μεταβλητή δείκτη μπορεί να ανακατανεμηθεί για να αναφερθεί σε διαφορετικά αντικείμενα.

Αναφορά: Δεν είναι δυνατή η εκ νέου αντιστοίχιση μιας μεταβλητής αναφοράς. Αναφέρεται πάντα στο αντικείμενο με το οποίο έχει αρχικοποιηθεί.

Χρήση

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

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

Εφαρμογή χρήσης

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

Αναφορά: Οι μεταβλητές αναφοράς μπορούν να χρησιμοποιηθούν σε παραμέτρους λειτουργίας και οι τύποι επιστροφής ορίζουν χρήσιμες διεπαφές.

Χρησιμοποιούμενες γλώσσες:

Δείκτης: Γλώσσες προγραμματισμού όπως C, C ++, Pascal και πολλές γλώσσες συναρμολόγησης υποστηρίζουν δείκτες.

Αναφορά: Γλώσσες προγραμματισμού όπως οι αναφορές υποστήριξης C ++, Java, Python, Perl, PHP, Ruby κ.λπ.

Ευγένεια εικόνας: "δείκτες" από Αυτό το αρχείο έγινε από χρήστη: SvenTranslation. Ίδια δουλειά. Αυτή η εικόνα διάνυσμα δημιουργήθηκε με Inkscape. (CC BY-SA 3. 0) μέσω Commons -