[Powered by Google Translate] DAVID DICIURCIO: Έτσι, μια σημαντική έννοια για να κατανοήσουν σε
προγραμματισμού είναι η έννοια του πεδίου εφαρμογής.
Πεδίο εφαρμογής μπορεί να οριστεί ως το πλαίσιο στο οποίο μια μεταβλητή είναι
ορατές ή προσβάσιμο.
Για παράδειγμα, ας υποθέσουμε ότι έχουμε μια συνάρτηση, κυρίως, που είναι
υποτίθεται ότι προσαυξήσετε μια μεταβλητή, χ, από μία έως δύο.
Όπως μπορούμε να δούμε, κυρίως αρχικοποιεί x σε ένα, εκτυπώνει
από κάποιο κείμενο, τότε διατρέχει τον προσαύξηση λειτουργία, πριν από
εκτύπωση περισσότερο κείμενο.
Αν αυτή η λειτουργία ήταν να λειτουργήσει σωστά, θα ήταν
εκτυπώσετε ως x 2.
Ας το προσπαθήσουμε.
>> Έτσι, όπως μπορείτε να δείτε, το κύριο δεν κάνουμε ό, τι αναμένεται.
Επιστρέφει την τιμή 1, μάλλον
από το 2 περιμέναμε.
Ο λόγος για αυτό το σφάλμα μπορεί να εξηγηθεί από το πεδίο εφαρμογής.
Σε συνάρτηση, κυρίως, έχουμε προετοιμαστεί x
μόνο εντός της λειτουργία.
Με άλλα λόγια, η μεταβλητή x έχει δηλωθεί τοπικά εντός του
λειτουργία, κυρίως, και δεν είναι προσβάσιμο
έξω από τη συνάρτηση.
Μόνο κύριος μπορούν να έχουν πρόσβαση x σε αυτή την κατάσταση.
Όταν λέμε αύξηση δεν περνούν x ως την είσοδο, αλλά
απλώς ένα αντίγραφο του x.
Ως αποτέλεσμα αυτού, η αύξηση της λειτουργίας μόνο προσθέτει
η τιμή 1 σε ένα αντίγραφο της αξίας του x.
Αλλά δεν είναι το ίδιο με x.
Όταν επιστρέψετε στην κύρια, x η ίδια δεν έχει αλλάξει καθόλου.
Έτσι εκτύπωση x θα δώσει μόνο την τιμή 1.
>> Λοιπόν, στη συνέχεια, ότι αφήνει το ερώτημα: πώς θα πρέπει να καθορίσει
αυτή η λειτουργία;
Μια λύση έχει αύξηση επιστρέψει μια τιμή.
Με τον τρόπο αυτό, η αύξηση της λειτουργίας θα
να μας δώσει πίσω έναν ακέραιο.
Τόσο εδώ είναι αναθεωρημένο κώδικα μας με το
εναλλακτική λειτουργία προσαύξηση.
Εδώ, αντί να επιστρέψει το x + 1, και όχι μόνο τέλος
με x είναι ίσο με x + 1.
Επίσης, να σημειωθεί ότι αντικαταστήσαμε την έξοδο του
αύξηση, προηγουμένως ακυρώσει, με int, δηλώνοντας ότι
αύξηση θα περάσει τώρα πίσω μια ακέραια τιμή.
Τώρα, μετά την αύξηση τρέχει, θα επιστρέψει με την αξία του
2, ακριβώς όπως εμείς έχουμε σκοπό.
>> Μια άλλη κατάσταση που δείχνει το πεδίο εφαρμογής της σημασίας
είναι στην scopeloop.c.
Σε αυτόν τον κώδικα, έχουμε α για το βρόχο στην οποία η μεταβλητή
συνολικά ξεκινά κατά τη διάρκεια κάθε βήματος.
Δυστυχώς, αυτός ο κώδικας δεν συγκεντρώνει.
Αυτό συμβαίνει επειδή η μεταβλητή συνολική πραγματικότητα δεν υπάρχει
έξω από το βρόχο for.
Οι μεταβλητές που δηλώνονται μέσα σε βρόχους υπάρχει μόνο εντός της
βρόχο και η ίδια αποδεικνύεται σε λάθος μας
μήνυμα, συνολικά αδήλωτα.
Η μεταβλητή συνολικά έχει ακόμη να δηλωθεί εντός του πεδίου
της λειτουργίας κύριο.
Επιπλέον, κατά τη διάρκεια κάθε επανάληψη του βρόχου για μας, έχουμε
Τα συνολικά reinitializing μας στο 0.
Αυτό από μόνο του δεν τηρεί τον κώδικα από την κατάρτιση, αλλά
θα αποτρέψει συνολικά από ποτέ αθροίζοντας σε αξία παρελθόν 1.
>> Και πάλι, ποιος είναι ο καλύτερος τρόπος να το διορθώσω αυτό;
Ένα από τα πιο εύκολο μεθόδων περιλαμβάνει τη διάθεση συνολικά το τοπικό έως το
η συνάρτηση, κυρίως, όχι στην ίδια βρόχο.
Αυτό θα ανέλθει συνολικά σε πραγματικά αυξήσετε, και, τελικά,
ώστε να μπορεί να εκτυπωθεί μετά το βρόχο for.
Μια άλλη τεχνική που θα συνοψίσω εν συντομία μόνο θα
είναι η χρήση των καθολικών μεταβλητών.
Οι καθολικές μεταβλητές είναι μεταβλητές που έχουν δηλωθεί πριν από τα κύρια
που διατηρούν την αξία τους σε όλο το πρόγραμμα.
Φυσικά, οι λειτουργίες μπορεί να αλλάξει την αξία του σε παγκόσμιο,
αλλά δεν πηγαίνουν από το πεδίο εφαρμογής όπως οι τοπικές μεταβλητές.
Ωστόσο, η χρήση καθολικών μεταβλητών τείνει να παρακινδυνευμένο
από το κακό σχεδιασμό, δεδομένου ότι υπάρχουν καλύτεροι τρόποι
ανταλλαγή δεδομένων μεταξύ των λειτουργιών.
Για παράδειγμα, χρησιμοποιώντας δείκτες.
Αλλά περισσότερα για αυτό μια άλλη φορά.
>> Τέλος, είναι σημαντικό να υπάρχει κατανόηση του πεδίου εφαρμογής
στο πλαίσιο της μνήμης του υπολογιστή, ή RAM.
Κατά την εκτέλεση ενός προγράμματος, τις τοπικές μεταβλητές και συναρτήσεις
προστίθενται σε μια συγκεκριμένη θέση στην
RAM ονομάζεται τη στοίβα.
Ως λειτουργίες επιστροφής, είναι τα πλαίσια στοίβα των μεταβλητών
απομακρύνεται αποτελεσματικά από τη στοίβα απελευθερώνοντας περισσότερο μνήμη.
Έτσι, όταν επανεξέτασης του πεδίου εφαρμογής, βεβαιωθείτε ότι έχετε να θυμάστε αυτά τα τρία
βασικά σημεία.
Ένα, το πεδίο μπορεί να είναι είτε τοπικό ή παγκόσμιο επίπεδο.
Εξαρτάται από όπου η μεταβλητή έχει δηλωθεί.
Δύο, μεταβλητές που δηλώνονται ή αρχικοποιηθεί σε λειτουργίες
το τοπικό έως την λειτουργία και δεν μπορεί να αλλάξει από άλλους
λειτουργίες, τουλάχιστον όχι χωρίς τη χρήση δεικτών.
Τέλος, οι μεταβλητές είναι επίσης τοπικά στα κυκλώματα που είναι
δηλώνονται μέσα.
Οι μεταβλητές δεν είναι προσβάσιμες
εκτός του βρόχου.
>> Αυτό είναι όλο για τώρα και στο πεδίο.
Ευχαριστώ για την προσοχή.