DOUG LLOYD: Όπως μπορείτε να ξεκινήσετε σε συνεργασία με τις λειτουργίες,
Ένα άλλο πράγμα που πρόκειται να γίνει πραγματικά σημαντικό να γίνει κατανοητό,
η οποία είναι η έννοια των μεταβλητών πεδίου.
Έτσι, το πεδίο εφαρμογής είναι χαρακτηριστικό μιας μεταβλητής
αυτό προσδιορίζει από το οποίο λειτουργεί ότι οι μεταβλητές μπορούν να έχουν πρόσβαση.
>> Υπάρχουν δύο κύρια πεδία εφαρμογής σε C, τοπικές μεταβλητές και καθολικές μεταβλητές.
Τώρα, οι τοπικές μεταβλητές μπορούν μόνο να έχει πρόσβαση στις αρμοδιότητες
στην οποία από όπου και αν δημιουργούνται.
Δεν μπορεί να προσεγγιστεί από κάθε άλλη λειτουργία που υπάρχει στο πρόγραμμά σας,
μόνο η λειτουργία σε τον οποίο δημιουργήθηκε.
Παγκόσμια μεταβλητές, σχετικά με το άλλη πλευρά, μπορεί να προσεγγιστεί
με οποιαδήποτε λειτουργία στο πρόγραμμα.
Και ο λόγος γι 'αυτό είναι επειδή δεν δημιουργήθηκε μέσα
από οποιαδήποτε συγκεκριμένη λειτουργία.
Τους δηλώνουμε εκτός της όλες οι λειτουργίες, οι οποίες
σημαίνει ότι κάθε λειτουργία ξέρει πού είναι και μπορούν να έχουν πρόσβαση και να χειριστούν αυτό.
>> Μέχρι στιγμής, κατά τη διάρκεια που έχετε αρκετά πολύ Ασχολούμενος αποκλειστικά
με τις τοπικές μεταβλητές.
Εδώ είναι ένα παράδειγμα ενός πολύ, πολύ απλή κύρια λειτουργία και μια πολύ απλή
πρόσθετη λειτουργία που έχουμε γράψει.
Στην περίπτωση αυτή, Χ, το οποίο Έχω πράσινο χρώμα μόνο
να αναδείξει τον τόπο ή τους το πεδίο εφαρμογής αυτής της μεταβλητής,
είναι τοπικά στη συνάρτηση τριπλή.
κύριος δεν μπορεί να αναφέρεται σε χ καθόλου.
Δεν ξέρω τι είναι.
Καμία άλλη λειτουργία, στην πραγματικότητα, εάν είχε πρόσθετες λειτουργίες εδώ,
θα μπορούσε να αναφέρεται στο x.
>> Ομοίως, αποτελέσματα τα οποία έχω χρώματος μπλε, είναι μόνο τοπικά στο κύριο.
Μόνο κύριος ξέρει τι η μεταβλητή result.
τριπλό δεν μπορούν να το χρησιμοποιήσουν.
>> Τώρα, όπως ανέφερα, δεν υπάρχουν καθολικές μεταβλητές.
Αν διαπιστώσει ότι το μεταβλητό έξω από κάθε λειτουργία,
όλες τις λειτουργίες της πρόγραμμα μπορεί να αναφέρεται σε αυτό.
Έτσι, σε αυτή την περίπτωση έχω τονίζεται στην πράσινο παγκόσμια δήλωση μεταβλητών.
Στην περίπτωση αυτή, ο μεταβλητής που δηλώνεται
ονομάζεται παγκόσμια, ακριβώς για να είναι εξαιρετικά σαφής σχετικά με αυτό.
Είναι τύπου float.
Και εγώ το ορίσετε την τιμή 0,5050.
>> Θα παρατηρήσετε ότι στην κύρια και στην τρίκλινα, είμαι σε θέση να αναφερθώ σε παγκόσμιο επίπεδο.
Και στην πραγματικότητα, αν πάω μέσα από το πρόγραμμα όπως αναφέρεται, κύρια πρώτες προσκλήσεις τρίκλινα,
τριπλή παγκόσμια πολλαπλασιάζει επί 3, η οποία καθορίζει την τιμή του στο 1.5-κάτι,
1,51 ή κάτι τέτοιο, και τότε κύρια εκτυπώνει επίσης την τιμή
της παγκόσμιας.
Έτσι, κύρια δε θα εκτυπώσετε το 0,5050, θα εκτυπώσετε παγκόσμια φορές 3, 1.51.
Έτσι, έχετε να είναι προσεκτικοί όταν εργάζεστε με καθολικές μεταβλητές.
Ενώ είναι πολύ ευέλικτη να είναι σε θέση να περάσει τις πληροφορίες
γύρω έτσι ώστε κάθε λειτουργία μπορεί να το χρησιμοποιήσει,
μπορεί επίσης να έχουν κάποια επικίνδυνες συνέπειες
αν οι αλλαγές μία λειτουργία η τιμή μιας μεταβλητής
πριν Σας περιμένουμε για να μπορεί να αλλάξει.
>> Γιατί αυτή η διάκριση έχει σημασία;
Γιατί μας νοιάζει αν ορισμένες μεταβλητές είναι τοπικές και άλλες είναι παγκόσμιο;
Λοιπόν, ως επί το πλείστον, οι τοπικές μεταβλητές σε C είναι ό, τι λέγεται πέρασε με βάση την αξία
όταν κάνουμε μια κλήση συνάρτησης.
Τι σημαίνει αυτό?
>> Λοιπόν, όταν μια μεταβλητή περνά με βάση την αξία, τον καλούμενο, η οποία
είναι ένας άλλος τρόπος για να πούμε την λειτουργία που λαμβάνει η μεταβλητή που
παίρνει πέρασε σαν είσοδο, στην πραγματικότητα δεν λαμβάνει αυτή την ίδια μεταβλητή.
Λαμβάνει τη δική του αντίγραφό της να εργαστεί με.
Αυτή είναι μια πραγματικά σημαντική διάκριση.
Είμαστε μόλις είδα πριν από ένα δευτερόλεπτο ότι με τις παγκόσμιες μεταβλητές,
αν χειραγωγήσουν την παγκόσμια μεταβλητή σε μία λειτουργία, η επίδραση
ότι μια λειτουργία μεταφέρει μέσω της σε κάθε άλλη λειτουργία.
>> Αλλά με τις τοπικές μεταβλητές, αυτό δεν είναι αλήθεια.
Κάθε λειτουργία όταν δέχεται ως είσοδο μεταβλητές
λαμβάνουν αντίγραφα αυτών των μεταβλητών, όχι οι ίδιοι μεταβλητές.
Έτσι ποια είναι η παρενέργεια του ότι;
Αυτό σημαίνει ότι η μεταβλητή σε ο καλών, η λειτουργία που
είναι να καταστεί η κλήση της συνάρτησης, είναι αμετάβλητο εκτός αν το παρακάμψετε.
>> Για παράδειγμα, σε αυτόν τον κώδικα foo δεν έχει αλλάξει καθόλου.
Int foo ισούται με 4, καλέστε το τριπλό παπο, στο εσωτερικό του τριπλού,
θα περίμενε κανείς ότι θα foo να πολλαπλασιασθεί με το 3 και επέστρεψε,
αλλά δεν υπάρχει στην πραγματικότητα καμία επίδραση.
>> Εδώ όμως, μια πολύ λεπτή διαφορά.
Το γεγονός αυτό έχει ως αποτέλεσμα που θέλουμε.
Βλέπετε γιατί;
Είμαστε επιτακτικούς foo στον κύριο αυτό το διάστημα.
>> Έτσι int foo ισούται με 4, foo ισούται τριπλό foo, όταν κάνουμε αυτή την έκκληση,
τριπλό αποκτά το δικό του αντίγραφο παπο, το δικό του αντίγραφο της 4.
Λέει επιστρέψουν 4 φορές 3, ή οτιδήποτε μεταβλητή παίρνει πέρασε στην εποχή 3.
Και τότε θα αναθέσει την επιστροφή αξία της τριπλής να foo και πάλι.
Έτσι, αυτό πραγματικά θα αντικαταστήσει foo.
Αυτός είναι ο μόνος τρόπος για να γίνει αυτό με τοπική μεταβλητή.
Έτσι τώρα, αν προσθέσουμε άλλο γραμμή κώδικα εδώ
κατά το τέλος της κύριας να εκτυπώσετε την αξία του foo,
θα ήταν στην πραγματικότητα εκτυπώσετε 12.
>> Μεταβλητό πεδίο είναι γενικά δεν είναι πάρα πολύ από ένα πρόβλημα
εάν ονομάσετε όλους σας μεταβλητές διαφορετικά πράγματα.
Αλλά μπορεί να πάρει το είδος των δυσάρεστων αν το ίδιο όνομα μεταβλητής
εμφανίζεται σε πολλαπλές λειτουργίες, η οποία θα συμβούν πολλά.
Αν ποτέ δεν λειτουργούν σε το πραγματικό κόσμο, όπου
εργάζεστε σε συλλογική τα προγράμματα και οι άνθρωποι σε διαφορετικές ομάδες
εργάζονται μαζί για να γράψετε το ίδιο πρόγραμμα ή το ίδιο σύνολο των προγραμμάτων,
θα χρησιμοποιήσουν ξανά συχνά μεταβλητή ονόματα, ιδιαίτερα συνηθισμένες
όπως x, y, i, j, και ούτω καθεξής.
>> Αλλά όταν οι μεταβλητές έχουν το ίδιο όνομα, θέματα πεδίο εφαρμογής
μπορεί να πάρει λίγο δυσκολότερο να αναλύσει.
Για παράδειγμα, το ξέρεις τι θα εκτυπωθεί
στο τέλος του αυτό το συγκεκριμένο πρόγραμμα;
Πάρτε ένα λεπτό.
Παύση το βίντεο και διαβάστε μέσω αυτού του προγράμματος.
Μπορείτε να δείτε στην κορυφή εμείς έχουν μια δήλωση λειτουργία
για μια λειτουργία που ονομάζεται προσαύξηση.
Αυτή η λειτουργία λαμβάνει μια ενιαία παράμετρος, ένας ακέραιος αριθμός που ονομάζουμε x.
Και εξάγει έναν ακέραιο.
Αυτός είναι ο τύπος επιστροφής στην αρχή.
>> Στη συνέχεια, έχουμε κύρια, ένα ζευγάρι των γραμμών του κώδικα σε κύρια, η τελευταία εκ των οποίων
είναι μια εντολή print.
Και να θυμάστε, αυτό είναι το ζήτημα εδώ.
Τι είναι στην πραγματικότητα πρόκειται να είναι εκτυπώνεται στο τέλος αυτής της λειτουργίας;
Και τότε θα έχουμε πράγματι η ορισμό της προσαύξησης παρακάτω.
>> Έτσι, πάρτε ένα λεπτό, μέσα από το βήμα ο κώδικας, εντοπίζουν τα πράγματα έξω.
Ξέρετε τι θα εκτυπωθεί το τέλος του συγκεκριμένου προγράμματος;
>> Εντάξει.
Ας ελπίσουμε ότι, έχετε πάρει μερικά δευτερόλεπτα να προσπαθήσουμε και να αναλύσει αυτό το ένα έξω.
Ας το κάνουμε μαζί.
>> Έτσι έχω περάσει από αύξηση του δήλωση στην κορυφή εκεί.
Ήταν το είδος του μια απόσπαση της προσοχής.
Δεν είναι δική μεταβλητή της.
Δεν έχει δική του πεδίου εφαρμογής της.
Είναι απλά μια λειτουργία δήλωση, τόσο για λόγους
προσπαθεί να αναλύσει τι είναι συμβαίνει σε αυτό το πρόγραμμα,
θα μπορούσαμε απλώς να το αποφύγει.
>> Τώρα έχουμε στην περίπτωση αυτή, ο λόγο αυτό είναι δύσκολο πρόβλημα
είναι επειδή έχουμε τοπικές μεταβλητές στο τόσο η κύρια όσο και η αύξηση, καθένα από τα οποία
Είναι ονομάζεται x.
Και φυσικά η ουσία αυτού του ζητήματος είναι προσπαθώντας να κατευνάσω το οποίο παίρνει αλλάξει x
και πώς να αλλάξει.
Έτσι έχω χρωματιστά κάθε περίπτωση του x που είναι τοπικές στο κύριο κόκκινο.
Και έχω χρωματιστά κάθε περίπτωση x ότι είναι τοπικές για να αυξήσετε το μπλε.
>> Ανακοίνωση στην εν λόγω τρίτη γραμμή των κύριων, y ισούται με προσαύξηση
x, ότι η αύξηση δεν είναι πέρασε κύριο του x, ή το κόκκινο Χ.
Είναι να πάρει περάσει ένα αντίγραφό του.
Και αυτό είναι μόνο πρόκειται να συνεργαστεί με ότι αντίγραφό της, το γαλάζιο x.
Εάν είστε μαθηματικά κλίση, ίσως
Οι αντί σκεφτεί αυτό ως x υπο m για τις κύριες και επιμέρους x i για αύξηση.
Αλλά είναι η ίδια ιδέα.
x υπο m, ή το κόκκινο Χ στην προηγούμενη διαφάνεια,
είναι οι μεταβλητές που είναι local-- είναι η περίπτωση του x μάλλον ότι
είναι τοπική στο κύριο, και υπο χ ι, ή το μπλε μεταβλητές στην προηγούμενη διαφάνεια,
είναι οι περιπτώσεις του X που είναι τοπικά για να αυξήσετε.
>> Έτσι, θα ήταν σε θέση να καταλάβω τι Η λειτουργία αυτή εκτυπώνονται στο τέλος;
Είμαι ο Νταγκ Lloyd, και αυτό είναι CS50.