1 00:00:06,650 --> 00:00:09,390 [Powered by Google Translate] JOE MCCORMICK: Τώρα θα πάμε να μιλήσουμε για τις μεταβλητές. 2 00:00:09,390 --> 00:00:13,270 Μεταβλητές στην επιστήμη των υπολογιστών είναι ένας τρόπος για να αποθηκεύσετε μια τιμή. 3 00:00:13,270 --> 00:00:14,980 Τώρα, το τι και το πώς αποθηκεύουμε ότι 4 00:00:14,980 --> 00:00:16,210 αξία δεν είναι πάρα πολύ σημαντικό. 5 00:00:16,210 --> 00:00:19,780 Μπορούμε να έχουμε μια τιμή που είναι μια λέξη, που θα μπορούσε να 6 00:00:19,780 --> 00:00:21,170 να αποθηκευτεί ως ένα string. 7 00:00:21,170 --> 00:00:23,160 Ή θα μπορούσαμε να έχουμε κάτι που είναι ένας χαρακτήρας, 8 00:00:23,160 --> 00:00:24,110 όπως το γράμμα a. 9 00:00:24,110 --> 00:00:26,420 Και αυτό θα πρέπει να αποθηκεύονται ως char. 10 00:00:26,420 --> 00:00:29,660 Θα μπορούσαμε να έχουμε έναν αριθμό, όπως ένα ή 12, αυτό θα ήταν 11 00:00:29,660 --> 00:00:32,310 αποθηκεύονται ως έναν ακέραιο ή έναν int. 12 00:00:32,310 --> 00:00:35,940 Στη συνέχεια, έχουμε διαφορετικά πράγματα, όπως ένα άρμα, το οποίο μπορεί να αποθηκεύσει 13 00:00:35,940 --> 00:00:41,700 πράγματα όπως 1,01 ή 111,13. 14 00:00:41,700 --> 00:00:43,530 Αυτές οι τιμές είναι πάντα ονομάζεται ευμετάβλητος. 15 00:00:43,530 --> 00:00:46,490 Αυτό σημαίνει ότι αν έχουμε αποθηκευμένο το νούμερο ένα σε έναν ακέραιο αριθμό σε 16 00:00:46,490 --> 00:00:49,490 η κορυφή ενός προγράμματος αργότερα, θα μπορούσε να αλλάξει τον αριθμό αυτό με 17 00:00:49,490 --> 00:00:51,460 είναι τρεις ή επτά. 18 00:00:51,460 --> 00:00:53,890 Τώρα, μια τοπική μεταβλητή είναι αυτό που θα συναντήσετε συνήθως, 19 00:00:53,890 --> 00:00:55,250 κατά την εκτέλεση μιας λειτουργίας. 20 00:00:55,250 --> 00:00:57,260 Ας πούμε ότι είστε στην κύρια λειτουργία σας. 21 00:00:57,260 --> 00:00:59,910 Και θέλετε να δημιουργήσετε μια μεταβλητή που ονομάζεται num. 22 00:00:59,910 --> 00:01:01,240 Και εμείς θα αποθηκεύσει έναν ακέραιο αριθμό σε αυτό. 23 00:01:01,240 --> 00:01:04,680 Έτσι, θα μπορούσαμε να πούμε κάτι σαν int num = 3. 24 00:01:04,680 --> 00:01:05,319 Τώρα, θα πάμε εκεί. 25 00:01:05,319 --> 00:01:06,830 Έχετε μια τοπική μεταβλητή. 26 00:01:06,830 --> 00:01:09,670 Τώρα, αυτή η μεταβλητή μπορεί να αλλάξει στη συνέχεια στην κύρια 27 00:01:09,670 --> 00:01:13,700 λειτουργία, λέγοντας κάτι σαν num = 6 ή num = 7. 28 00:01:13,700 --> 00:01:15,940 Αλλά μεταβλητή σας έχει κολλήσει εντός της 29 00:01:15,940 --> 00:01:18,320 το πεδίο εφαρμογής της εν λόγω λειτουργία. 30 00:01:18,320 --> 00:01:21,690 Και το πεδίο εφαρμογής ξεκινά συνήθως με τα σγουρά στήριγμα σε ο 31 00:01:21,690 --> 00:01:23,990 αρχίζοντας από τις κύριες και τελειώνει με το άγκιστρο ότι 32 00:01:23,990 --> 00:01:26,230 κλείνει την κύρια λειτουργία. 33 00:01:26,230 --> 00:01:29,610 Και αυτή η τοπική μεταβλητή είναι πλέον κολλήσει σε αυτό το πεδίο. 34 00:01:29,610 --> 00:01:32,200 Έτσι δεν μπορεί πλέον να έχει πρόσβαση σε μια άλλη λειτουργία, 35 00:01:32,200 --> 00:01:33,950 έξω από την κύρια λειτουργία. 36 00:01:33,950 --> 00:01:36,230 Και μόλις η κύρια λειτουργία τελειώνει την εκτέλεσή του και 37 00:01:36,230 --> 00:01:40,460 επιστρέφει, αυτή η τοπική μεταβλητή με το όνομα num έχει φύγει. 38 00:01:40,460 --> 00:01:42,760 Έτσι, σε αντίθεση με τις τοπικές μεταβλητές, έχουμε κάτι 39 00:01:42,760 --> 00:01:43,970 ονομάζονται καθολικές μεταβλητές. 40 00:01:43,970 --> 00:01:46,890 Τώρα, μια παγκόσμια μεταβλητή έχει δηλωθεί στην κορυφή της 41 00:01:46,890 --> 00:01:49,860 προγράμματος και μπορεί να προσπελαστεί οπουδήποτε στο πρόγραμμα. 42 00:01:49,860 --> 00:01:51,805 Ας πούμε ότι έχετε δηλώσει μια global μεταβλητή στην κορυφή 43 00:01:51,805 --> 00:01:53,200 πρόγραμμα, που ονομάζεται δοκιμασία. 44 00:01:53,200 --> 00:01:54,990 Τώρα, αυτή η μεταβλητή θα μπορούσε να προσεγγιστεί 45 00:01:54,990 --> 00:01:56,000 οπουδήποτε στο πρόγραμμα. 46 00:01:56,000 --> 00:01:58,230 Μπορείτε να αποκτήσετε πρόσβαση στην κύρια λειτουργία ή μια συνάρτηση 47 00:01:58,230 --> 00:01:59,300 κάτω από αυτό. 48 00:01:59,300 --> 00:02:02,210 Αλλά αν ποτέ προσπαθήσει να δημιουργήσει μια τοπική μεταβλητή σε μία από τις 49 00:02:02,210 --> 00:02:04,170 αυτές οι λειτουργίες, με το ίδιο όνομα όπως 50 00:02:04,170 --> 00:02:05,880 δοκιμή, υπάρχει μια σύγκρουση. 51 00:02:05,880 --> 00:02:07,720 Επειδή δεν ξέρετε ποια μεταβλητή που θέλετε να χρησιμοποιήσετε. 52 00:02:07,720 --> 00:02:09,039 Θέλετε να χρησιμοποιήσετε την παγκόσμια δοκιμή, 53 00:02:09,039 --> 00:02:10,910 δήλωσε στην κορυφή του προγράμματος; 54 00:02:10,910 --> 00:02:12,495 Ή μήπως θέλετε να χρησιμοποιήσετε την τοπική μεταβλητή δοκιμή που 55 00:02:12,495 --> 00:02:14,920 προσπαθείτε να δημιουργήσετε μέσα σε αυτή τη λειτουργία; 56 00:02:14,920 --> 00:02:16,700 Τώρα, αυτό είναι ένας από τους λόγους για τους οποίους δεν θέλουμε να 57 00:02:16,700 --> 00:02:18,960 απλά χρησιμοποιήστε καθολικές μεταβλητές ελεύθερα. 58 00:02:18,960 --> 00:02:21,570 Υπάρχει κάτι που λέγεται χαλάτε το χώρο ονόματος. 59 00:02:21,570 --> 00:02:23,940 Ακόμα κι αν δεν σημαίνει να, μπορείτε να δημιουργήσετε ένα λάθος 60 00:02:23,940 --> 00:02:26,270 τοπική μεταβλητή, αργότερα στο πρόγραμμα, με την ίδια 61 00:02:26,270 --> 00:02:28,140 όνομα, καθώς η παγκόσμια μεταβλητή. 62 00:02:28,140 --> 00:02:30,130 Και αυτό δεν δημιουργεί ένα τεράστιο πρόβλημα, όταν εργάζεστε σε 63 00:02:30,130 --> 00:02:33,120 μικρό 10, 20, 30-line προγράμματα. 64 00:02:33,120 --> 00:02:35,520 Μόλις έχετε έως και χιλιάδες γραμμές κώδικα, δεν θα 65 00:02:35,520 --> 00:02:38,740 θυμάμαι ακριβώς τι έχετε αποθηκεύσει για την παγκόσμια μεταβλητή. 66 00:02:38,740 --> 00:02:41,000 Έτσι, ένα πράγμα για να εξετάσει, όταν χρησιμοποιεί το τοπικό και παγκόσμιο 67 00:02:41,000 --> 00:02:43,570 μεταβλητές είναι να σκεφτούμε το πεδίο εφαρμογής τους. 68 00:02:43,570 --> 00:02:47,270 Τώρα, το πεδίο αναφέρεται στο όπου αυτές οι μεταβλητές μπορούν να χρησιμοποιηθούν σε 69 00:02:47,270 --> 00:02:48,500 το πρόγραμμα. 70 00:02:48,500 --> 00:02:51,080 Έτσι, μια καθολική μεταβλητή έχει αυτό που ονομάζεται παγκόσμια εμβέλεια, 71 00:02:51,080 --> 00:02:53,820 έννοια ότι θα μπορούσε να χρησιμοποιηθεί οπουδήποτε στο πρόγραμμα. 72 00:02:53,820 --> 00:02:56,860 Μόλις αρχικοποιήσετε ότι αυτή η μεταβλητή, μπορεί να χρησιμοποιηθεί σε 73 00:02:56,860 --> 00:03:00,530 κάθε λειτουργία, είτε αυτή είναι η κύρια λειτουργία ή ένα 74 00:03:00,530 --> 00:03:03,780 λειτουργία 10 λειτουργίες κάτω, που ονομάζεται foo10. 75 00:03:03,780 --> 00:03:05,160 Δεν έχει σημασία, όπου μπορείτε να το χρησιμοποιήσετε. 76 00:03:05,160 --> 00:03:07,490 Αλλά μια τοπική μεταβλητή έχει συγκεκριμένο πεδίο εφαρμογής. 77 00:03:07,490 --> 00:03:09,800 Και το πεδίο εφαρμογής της εν λόγω τοπικής μεταβλητής καθορίζεται από 78 00:03:09,800 --> 00:03:11,030 όπου αρχικοποιείται. 79 00:03:11,030 --> 00:03:13,680 Τώρα, το πεδίο προσδιορίζεται τυπικά από το άνοιγμα 80 00:03:13,680 --> 00:03:16,540 στήριγμα της λειτουργίας ότι η μεταβλητή έχει δηλωθεί στην, μέχρι 81 00:03:16,540 --> 00:03:18,300 το κλείσιμο στήριγμα αυτής της λειτουργίας. 82 00:03:18,300 --> 00:03:19,730 Ας πούμε ότι είστε στην κύρια λειτουργία. 83 00:03:19,730 --> 00:03:21,410 Και μπορείτε να δημιουργήσετε μια μεταβλητή. 84 00:03:21,410 --> 00:03:23,110 Αλλά τώρα, σε αυτή την κύρια λειτουργία, καλούμε άλλη 85 00:03:23,110 --> 00:03:24,640 λειτουργούν foo. 86 00:03:24,640 --> 00:03:27,070 Σε συνάρτηση foo, δεν μπορούμε να καλέσετε τη μεταβλητή που μόλις 87 00:03:27,070 --> 00:03:29,940 δημιουργήθηκε στην κύρια λειτουργία, επειδή δεν είναι σε έκταση. 88 00:03:29,940 --> 00:03:33,410 Αυτή η μεταβλητή είναι μόνο στο πεδίο εφαρμογής κατά την κύρια λειτουργία. 89 00:03:33,410 --> 00:03:36,540 Έτσι, θα μπορούσαμε να το χρησιμοποιήσει περαιτέρω, στο πλαίσιο της κύριας λειτουργίας, αλλά 90 00:03:36,540 --> 00:03:40,650 όχι μέσα σε μια συνάρτηση που καλείται από την κύρια λειτουργία. 91 00:03:40,650 --> 00:03:43,390 Έτσι, όπως της στοίβας και του σωρού, είναι καθολικές μεταβλητές 92 00:03:43,390 --> 00:03:45,580 αποθηκεύονται σε ένα ορισμένο μέρος της μνήμης. 93 00:03:45,580 --> 00:03:47,665 Τώρα, αυτό το μέρος της μνήμης εξαρτάται από το σύστημα που 94 00:03:47,665 --> 00:03:48,490 που χρησιμοποιείτε. 95 00:03:48,490 --> 00:03:50,840 Οι καθολικές μεταβλητές έχουν δύο διαφορετικά σημεία ότι είναι 96 00:03:50,840 --> 00:03:54,570 αποθηκεύονται, μία για καθολικές μεταβλητές αρχικοποιηθούν, όπως εάν 97 00:03:54,570 --> 00:03:58,130 είχατε δηλώσει int δοκιμή = 5, στο πάνω μέρος του προγράμματός σας. 98 00:03:58,130 --> 00:04:01,010 Και ο άλλος τομέας είναι για unitialized global μεταβλητές, 99 00:04:01,010 --> 00:04:03,190 αν απλά είπε, int δοκιμή, στην κορυφή του προγράμματός σας και 100 00:04:03,190 --> 00:04:05,040 επρόκειτο να ρυθμίσετε τις μεταβλητές ελέγχου 101 00:04:05,040 --> 00:04:07,626 αργότερα στο πρόγραμμα. 102 00:04:07,626 --> 00:04:10,140 Έτσι, τώρα είμαι πρόκειται να μιλήσω για κάτι που ονομάζεται # define, 103 00:04:10,140 --> 00:04:13,380 η οποία είναι ένας τρόπος για να δώσει ένα συμβολικό όνομα σε μία σταθερή. 104 00:04:13,380 --> 00:04:17,420 Και εδώ έχουμε ένα παράδειγμα ενός προγράμματος C που υπολογίζει 105 00:04:17,420 --> 00:04:19,470 το εμβαδόν ενός κύκλου. 106 00:04:19,470 --> 00:04:21,690 Και στην κορυφή του προγράμματος θα κάνουμε κάτι που λέει 107 00:04:21,690 --> 00:04:25,830 # Define pi 3,14159. 108 00:04:25,830 --> 00:04:29,330 # Define δεν δημιουργεί τεχνικά μια global μεταβλητή. 109 00:04:29,330 --> 00:04:31,590 Αντίθετα, λέει προεπεξεργαστή του μεταγλωττιστή να 110 00:04:31,590 --> 00:04:34,350 βρείτε και να αντικαταστήσετε όλες τις εμφανίσεις του με pi 111 00:04:34,350 --> 00:04:37,540 3,14159 πριν από τη σύνταξη. 112 00:04:37,540 --> 00:04:39,830 Παρ 'όλα αυτά, γίνεται μια χρήσιμη τεχνική για την κήρυξη 113 00:04:39,830 --> 00:04:41,510 σταθερές, για χρήση σε όλο το πρόγραμμα. 114 00:04:41,510 --> 00:04:44,540 Τώρα, κοιτάζοντας τη λειτουργία περιοχή, παίρνει σε μια float 115 00:04:44,540 --> 00:04:48,150 rad και απλά επιστρέφει το εμβαδόν ενός κύκλου με εκείνη 116 00:04:48,150 --> 00:04:52,920 ακτίνα ή pi r τετράγωνο, ή pi φορές rad rad φορές. 117 00:04:52,920 --> 00:04:56,040 Και αυτό είναι όπου το # define παίζει σημαντικό ρόλο. 118 00:04:56,040 --> 00:04:59,270 Επειδή ο compiler θα αντικαταστήσει ουσιαστικά ότι η pi 119 00:04:59,270 --> 00:05:02,780 σύμβολο με τον αριθμό 3,14159. 120 00:05:02,780 --> 00:05:05,560 Και έτσι δεν έχουμε να γράψετε ότι ξανά και ξανά. 121 00:05:05,560 --> 00:05:08,900 Και αργότερα, αν αποφασίσετε να χρησιμοποιήσετε μια πιο ψηφία του π, ας 122 00:05:08,900 --> 00:05:12,800 3.1415926 λένε, θα μπορούσαμε να προσθέσουμε μόνο ότι στην κορυφή του 123 00:05:12,800 --> 00:05:14,330 πρόγραμμα και δεν θα πρέπει να το αλλάξει, 124 00:05:14,330 --> 00:05:16,160 αργότερα στο πρόγραμμα. 125 00:05:16,160 --> 00:05:18,240 Αυτή είναι μια καλή χρήση της # define. 126 00:05:18,240 --> 00:05:20,520 Δεν θέλετε να αποθηκεύσετε pi ως καθολική μεταβλητή, διότι 127 00:05:20,520 --> 00:05:21,780 θα μπορούσε να αλλάξει αργότερα στο πρόγραμμα. 128 00:05:21,780 --> 00:05:23,430 Και ξέρουμε pi δεν αλλάζει. 129 00:05:23,430 --> 00:05:25,650 Είναι μια συνεχής. 130 00:05:25,650 --> 00:05:28,120 Έτσι, αυτό αναδιπλώνεται μέχρι το θέμα μας από την παγκόσμια μεταβλητές. 131 00:05:28,120 --> 00:05:29,930 Έτσι, σήμερα μιλήσαμε για τη διαφορά μεταξύ των τοπικών και 132 00:05:29,930 --> 00:05:32,490 καθολικές μεταβλητές? πότε να τα χρησιμοποιήσετε, ανάλογα με τους 133 00:05:32,490 --> 00:05:36,660 πεδίο? και γιατί όχι να χρησιμοποιήσει την παγκόσμια μεταβλητές κατά βούληση 134 00:05:36,660 --> 00:05:39,360 λόγω δημιουργούμε σύγχυση του χώρου του ονόματος. 135 00:05:39,360 --> 00:05:40,270 Είμαι Joe McCormick. 136 00:05:40,270 --> 00:05:42,290 Και αυτό είναι CS50.