Προγραμματισμός

Γνώση Υπολογιστών >> Προγραμματισμός >  >> Προγραμματισμός C / C++

Μπορείτε να εξηγήσετε τη διαφορά μεταξύ των δεικτών και των μεταβλητών στις γλώσσες προγραμματισμού;

Η βασική διαφορά μεταξύ των δεικτών και των μεταβλητών έγκειται σε αυτό που κατέχουν:

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

* δείκτης: Ένας δείκτης κρατά μια διεύθυνση *μνήμης *. Αυτή η διεύθυνση δείχνει τη θέση στη μνήμη όπου αποθηκεύεται μια άλλη τιμή. Είναι σαν να έχεις ένα κομμάτι χαρτί με μια διεύθυνση γραμμένη σε αυτό - η ίδια η διεύθυνση δεν είναι το σπίτι (η αξία), αλλά σας λέει πού να βρείτε το σπίτι.

Εδώ είναι μια αναλογία:

Φανταστείτε μια πόλη.

* Μεταβλητή: Ένα σπίτι στην πόλη. Το σπίτι περιέχει κάτι (έπιπλα, άνθρωποι, κλπ.). Η διεύθυνση του σπιτιού δεν είναι μέρος του τι είναι μέσα στο σπίτι. Είναι η θέση του σπιτιού.

* δείκτης: Ένα κομμάτι χαρτί με τη διεύθυνση ενός σπιτιού που γράφτηκε πάνω του. Το ίδιο το χαρτί δεν περιέχει τα περιεχόμενα του σπιτιού, μόνο τη διεύθυνση για να το βρει.

στον κωδικό (Παράδειγμα C ++):

`` c ++

#include

int main () {

int x =10; // x είναι μια μεταβλητή που κρατά την τιμή 10

int* ptr; // Το PTR είναι ένας δείκτης σε έναν ακέραιο (δεν δείχνει τίποτα ακόμα)

ptr =&x; // ptr τώρα δείχνει τη διεύθυνση μνήμης του x

std ::cout <<"τιμή του x:" < std ::cout <<"Διεύθυνση του x:" <<&x < std ::cout <<"Τιμή PTR:" < std ::cout <<"Η τιμή που υποδεικνύεται από το PTR:" <<*ptr <

επιστροφή 0;

}

`` `

Σε αυτό το παράδειγμα:

* `x` είναι μια μεταβλητή που αποθηκεύει απευθείας την τιμή ακέραιου αριθμού 10.

* `ptr` είναι μια μεταβλητή δείκτη. `&x` μας δίνει τη διεύθυνση μνήμης του` x` και αναθέτουμε αυτή τη διεύθυνση στο `ptr '. `*ptr` (ο χειριστής dereference) αποκτά πρόσβαση στην τιμή στη διεύθυνση μνήμης που είναι αποθηκευμένη στο` ptr`.

Οι βασικές διαφορές συνοψίζονται:

| Χαρακτηριστικό | Μεταβλητή | Δείκτης |

| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------

| κατέχει | Αξία | Διεύθυνση μνήμης |

| Δήλωση | `int x;` (π.χ.) | `int* ptr;` (π.χ.) |

| πρόσβαση | Άμεση (π.χ., `x`) | Έμμεσα (χρησιμοποιώντας τον χειριστή Dereference `*`) |

| μνήμη | Η μνήμη που διατίθεται για την αποθήκευση της τιμής | Η μνήμη που διατίθεται για την αποθήκευση της διεύθυνσης

Οι δείκτες είναι ισχυροί αλλά μπορεί να είναι δύσκολο να χρησιμοποιηθούν σωστά. Είναι απαραίτητα για τη δυναμική κατανομή μνήμης, τους συνδεδεμένους καταλόγους, τα δέντρα και άλλες προηγμένες δομές δεδομένων. Ωστόσο, η ακατάλληλη χρήση των δεικτών μπορεί να οδηγήσει σε διαρροές μνήμης και σφάλματα τμηματοποίησης. Πολλές γλώσσες υψηλότερου επιπέδου (όπως η Python, η Java και η C#) προσφέρουν συλλογή απορριμμάτων και κρύβουν δείκτες από τον προγραμματιστή για να απλοποιήσουν την ανάπτυξη και να ενισχύσουν την ασφάλεια.

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα