Όταν εκχωρείτε μια μεταβλητή σε οποιαδήποτε γλώσσα προγραμματισμού , ένα ορισμένο ποσό της μνήμης του συστήματος βρίσκεται στην άκρη για να κρατήσει τα στοιχεία του . Για απλές μεταβλητές , αυτό θα είναι συνήθως ένα μικρό ποσό της μνήμης, αλλά για λίστες και συστοιχίες αυθαίρετου μήκους , το μέγεθος της μνήμης που χρησιμοποιείται μπορεί να είναι εξαιρετικά μεγάλη . Ορισμένες λειτουργίες και εργασίες που εκτελούνται σε μεταβλητές απαιτούν την αντιγραφή των δεδομένων τους σε ένα χώρο εργασίας ? Όταν οι μεταβλητές χειρουργηθεί είναι μεγάλες , η ποσότητα των δεδομένων που πρέπει να αντιγραφεί μπορεί να επιβραδύνει τη λειτουργία του προγράμματος , ή σε περιορισμένες καταστάσεις μνήμης, να προκαλέσει το πρόγραμμα να . συντριβή
Δείκτες αποφύγετε αυτό το πρόβλημα με τη δημιουργία θέσεων σελιδοδείκτη στη μνήμη? οι εργασίες στη συνέχεια έκανε στις θέσεις μνήμης , αντί για τα πραγματικά δεδομένα που είναι αποθηκευμένα στη μεταβλητή . Σκεφτείτε για παράδειγμα ένα πρόγραμμα που φορτώνει αρκετές χιλιάδες εγγραφές από μια βάση δεδομένων σε μια μεταβλητή πίνακα . Εάν εκτελέσετε μια λειτουργία , όπως , « να επιστρέψει το πέμπτο ρεκόρ από τον πίνακα , « σε ορισμένες μη βελτιστοποιημένες γλώσσες αυτό θα επαναλάβει ολόκληρη τη λίστα πριν από το πέμπτο αρχείο μπορεί να βρεθεί και να εξάγεται . Ένας δείκτης στην ίδια θέση μνήμης , ωστόσο , μπορεί να ανακτήσει τα δεδομένα προγραμματισμού χωρίς να προκαλεί η όλη διάταξη πρέπει να αντιγραφεί στο εσωτερικό .
Εικόνων Pointer Σφάλματα
Η
Πρέπει να ληφθεί μέριμνα για την κατανοήσει τις εσωτερικές λειτουργίες μιας γλώσσας προγραμματισμού κατά την ανάθεση μεταβλητών . Ας εξετάσουμε το ακόλουθο ψευδοκώδικα :
a = 5β = aa = 10print
Σε ορισμένες γλώσσες b, το "b = a " επιχείρηση θα αναθέσει την τιμή της μεταβλητής "a" στην μεταβλητή "b . " Σε αυτές τις περιπτώσεις , η λειτουργία "print b" θα επιστρέψει " 5 ", η οποία ήταν η αξία του "α" κατά το χρόνο ένταξής του στο "b ". Ωστόσο, σε άλλες γλώσσες , " b = ένας " δημιουργεί ένα δείκτη (ή αναφορά ) από το " b" με " a", δίνοντας τα ίδια μεταβλητή δύο διαφορετικά ονόματα . Σε αυτές τις γλώσσες , όταν η τιμή του "α" έχει αλλάξει, η τιμή του " β " είναι επίσης αλλάξει , και το αποτέλεσμα του "print b" θα είναι " 5 ".
Ομοίως , όταν μιας μεταβλητής είναι απλώς μια αναφορά , τα σφάλματα μπορούν να εισαχθούν ως εξής :
a = 5β = adelete Aprint β
στην περίπτωση αυτή , αν το " b" και "a" αναφέρονται στην ίδια μεταβλητή , όταν η μεταβλητή a διαγράφεται , μεταβλητή " b" δεν υπάρχει πια ? αυτό το πρόγραμμα θα κλείσει με ένα σφάλμα εκτέλεσης
Κάθε γλώσσα έχει τους δικούς της κανόνες για το χειρισμό δείκτες , οι αναφορές και οι μεταβλητές θέσεις μνήμης , έτσι τεχνικές που έμαθε για ένα . γλώσσα πρέπει να προσαρμόζονται , με βάση το περιβάλλον προγραμματισμού που χρησιμοποιείτε .
εικόνων
εικόνων
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα