1 00:00:00,000 --> 00:00:02,270 [Powered by Google Translate] [Εβδομάδα 2, Συνέχεια] 2 00:00:02,270 --> 00:00:04,220 [David J. Malan, Πανεπιστήμιο Χάρβαρντ] 3 00:00:04,220 --> 00:00:06,880 [Αυτό είναι CS50. - CS50.TV] 4 00:00:06,880 --> 00:00:10,990 Εντάξει. Αυτό είναι CS50, και αυτό είναι το τέλος της εβδομάδας 2. 5 00:00:10,990 --> 00:00:14,410 Αν περιμένετε να είναι πεινασμένοι γύρω από αυτή τη στιγμή αύριο, 6 00:00:14,410 --> 00:00:18,620 Γνωρίζω ότι θα πάμε να συγκαλέσει ως μια μικρή ομάδα αύριο, Πέμπτη, 1:15 pm. 7 00:00:18,620 --> 00:00:21,360 Υπάρχει αυτό το URL εδώ αν θέλετε να RSVP. 8 00:00:21,360 --> 00:00:26,740 Ο χώρος είναι περιορισμένος, γι 'αυτό παρακαλώ συγχωρήστε εάν η φόρμα έχει συμπληρωθεί από τη στιγμή που θα συμπληρώσετε αυτό. 9 00:00:26,740 --> 00:00:29,300 Μια άλλη διεύθυνση URL, όμως, που θα μπορούσε να έχει ενδιαφέρον είναι αυτό. 10 00:00:29,300 --> 00:00:32,369 Σε μόλις ένα μήνα περίπου, το μάθημα πρόκειται να διατεθούν 11 00:00:32,369 --> 00:00:36,890 όλα τα ευρύτερα μέσω EDX, μέσω της οποίας οι λαοί στο Διαδίκτυο θα είναι σε θέση να παρακολουθήσει μαζί, 12 00:00:36,890 --> 00:00:39,380 συμμετέχουν στην πορεία αρκετά ενεργά, στην πραγματικότητα. 13 00:00:39,380 --> 00:00:42,270 Θα πρέπει να χρησιμοποιούν την συσκευή CS50 και CS50 Συζήτηση 14 00:00:42,270 --> 00:00:45,490 και τα περισσότερα από τα διάφορα εργαλεία λογισμικού που ήδη έχουν χρησιμοποιήσει αυτό το εξάμηνο. 15 00:00:45,490 --> 00:00:48,710 Και μια από τις πρωτοβουλίες που θα θέλαμε να αναλάβει ως ένα πείραμα φέτος 16 00:00:48,710 --> 00:00:51,930 είναι να δούμε πόσο περιεχόμενο μπορούμε να μεταφράσουμε 17 00:00:51,930 --> 00:00:53,960 σε άλλες προφορικές και γραπτές γλώσσες. 18 00:00:53,960 --> 00:00:57,500 Έτσι, αν θα μπορούσε να έχει συμφέρον να συμμετέχει σε αυτό το έργο 19 00:00:57,500 --> 00:01:02,270 σύμφωνα με την οποία θα παρέχει αντίγραφα αγγλικά και υπότιτλους για διαλέξεις του μαθήματος 20 00:01:02,270 --> 00:01:05,450 και σορτς και σεμινάρια και τμήματα και τα παρόμοια, 21 00:01:05,450 --> 00:01:08,200 αν μιλάτε άπταιστα ή γράψε άπταιστα κάποια άλλη γλώσσα, 22 00:01:08,200 --> 00:01:12,290 θα θέλαμε να σας συμμετάσχουν σε αυτό το πρόγραμμα το οποίο σας μεταφέρει σε ένα ή περισσότερα από τα βίντεο, 23 00:01:12,290 --> 00:01:15,200 μετατροπή τους σε μια γλώσσα που γνωρίζουν αρκετά καλά. 24 00:01:15,200 --> 00:01:18,700 >> Για να σας δώσω μια αίσθηση της διεπαφής, δεν υπάρχει αυτό το web-based user interface 25 00:01:18,700 --> 00:01:22,090 ότι θα πρέπει να χρησιμοποιούν αυτό θα δημιουργήσει ουσιαστικά ένα UI σαν αυτό. 26 00:01:22,090 --> 00:01:24,290 Αυτό με τη διδασκαλία κάποια Απόκριες πριν, 27 00:01:24,290 --> 00:01:27,390 και για την δεξιά πλευρά εκεί σε μαύρο δίπλα σε αυτά τα χρονικά γραμματόσημα, 28 00:01:27,390 --> 00:01:31,210 θα δείτε τα διάφορα πράγματα που βγήκε από το στόμα μου εκείνη την ημέρα, 29 00:01:31,210 --> 00:01:34,850 και στη συνέχεια κάτω θα είστε σε θέση να μεταφράσουν σε κάποια άλλη γλώσσα 30 00:01:34,850 --> 00:01:38,690 τι ακριβώς είναι η χαρτογράφηση μεταξύ, σε αυτή την περίπτωση, τα αγγλικά και, ας πούμε, ισπανικά. 31 00:01:38,690 --> 00:01:40,440 Γι 'αυτό είναι πραγματικά ένα πολύ φιλικό προς το χρήστη εργαλείο. 32 00:01:40,440 --> 00:01:43,370 Μπορείτε να rewind και fast-forward πολύ εύκολα με συντομεύσεις πληκτρολογίου. 33 00:01:43,370 --> 00:01:47,490 Έτσι, αν θα θέλατε να λάβουν μέρος σε αυτό το πείραμα και να έχουν τα λόγια σας δει και να διαβάσετε 34 00:01:47,490 --> 00:01:51,850 από δυνητικά χιλιάδες παιδιά εκεί έξω, παρακαλώ μην διστάσετε να συμμετάσχουν. 35 00:01:51,850 --> 00:01:54,350 Μια λέξη για το γατάκι από τη Δευτέρα. 36 00:01:54,350 --> 00:02:00,350 Μήπως έχουμε στείλει ένα μήνυμα υπερβολικά τρομακτικό, συνειδητοποιούν ότι, όπως προτείνουν ώρες γραφείου 37 00:02:00,350 --> 00:02:03,300 και ως τμήματα υποδεικνύουν, ο σχεδιασμός του μαθήματος είναι πολύ 38 00:02:03,300 --> 00:02:07,360 Οι μαθητές να συνεργάζονται και να μιλάμε και να εργαστούν με σύνολα πρόβλημα 39 00:02:07,360 --> 00:02:11,260 και τα προβλήματα μαζί, και πραγματικά η γραμμή έρχεται ακριβώς κάτω, 40 00:02:11,260 --> 00:02:16,010 πάλι, η εργασία σας θα πρέπει να υποβάλουν τελικά να είναι το δικό σας. 41 00:02:16,010 --> 00:02:18,860 Και έτσι ειλικρινά, σε ώρες γραφείου είναι απόλυτα φυσιολογικό, 42 00:02:18,860 --> 00:02:22,240 Είναι εντελώς να αναμένεται ακόμη, να συνομιλείτε με κάποιο φίλο δίπλα σας. 43 00:02:22,240 --> 00:02:24,370 >> Αν αυτός ή αυτή αγωνίζεται με κάποιο θέμα και είστε όπως, 44 00:02:24,370 --> 00:02:27,940 "Ω, καλά, επιτρέψτε μου να σας δώσω μια γεύση από κάποια γραμμή κώδικα που έγραψα,« ότι είναι εντάξει, 45 00:02:27,940 --> 00:02:31,250 αυτό συμβαίνει, και αυτό είναι πολύ ευνοϊκό, νομίζω, με τη διαδικασία της μάθησης. 46 00:02:31,250 --> 00:02:36,750 Όταν η γραμμή παίρνει διέσχισε είναι όταν η κεφαλή είναι είδος κλίση εδώ για πάρα πολλά δευτερόλεπτα 47 00:02:36,750 --> 00:02:41,160 ή λεπτά για την πραγματικά να έχουν μόλις μια ευκαιρία για την απεμπλοκή φίλο σας, 48 00:02:41,160 --> 00:02:44,160 και σίγουρα όταν τα πράγματα παίρνουν ανταλλάσσονται μέσω του ηλεκτρονικού ταχυδρομείου και Dropbox και τα παρόμοια, 49 00:02:44,160 --> 00:02:45,640 και εκεί είναι η γραμμή. 50 00:02:45,640 --> 00:02:48,620 Έτσι, με όλα τα μέσα να αισθάνονται άνετα και να ενθαρρύνονται να συνομιλήσετε με τους φίλους σας 51 00:02:48,620 --> 00:02:52,810 και τους συμμαθητές για psets και περισσότερο και απλά να συνειδητοποιήσουμε ότι αυτό που τελικά υποβάλουν 52 00:02:52,810 --> 00:02:57,340 πρέπει πραγματικά να είναι το προϊόν της δημιουργίας σας και όχι κάποιος άλλος. 53 00:02:57,340 --> 00:03:00,490 Και έτσι ένας από τους συγκεκριμένους τομείς προβλημάτων για pset2, 54 00:03:00,490 --> 00:03:04,740 η οποία θα βγει αργά το βράδυ αύριο, είναι να βουτήξει στον κόσμο της κρυπτογραφίας, 55 00:03:04,740 --> 00:03:08,970 η οποία είναι η τέχνη της κρυπτογράφησης ή κρυπτογράφησης πληροφοριών, 56 00:03:08,970 --> 00:03:12,600 και αυτό αφορά τελικά στον κόσμο της ασφάλειας. 57 00:03:12,600 --> 00:03:16,560 Τώρα, η ασφάλεια για τους περισσότερους από εμάς έρχεται με τη μορφή του αρκετά κοσμικό μηχανισμών. 58 00:03:16,560 --> 00:03:19,050 Όλοι μας έχουμε τα ονόματα χρήστη και κωδικούς πρόσβασης, 59 00:03:19,050 --> 00:03:23,450 και όλοι μας έχουμε πολύ άσχημα ονόματα χρηστών και κωδικούς πρόσβασης, κατά πάσα πιθανότητα. 60 00:03:23,450 --> 00:03:28,240 >> Εάν ο κωδικός πρόσβασής σας είναι το ίδιο για πολλούς δικτυακούς τόπους, αυτό είναι πιθανόν να μην είναι η καλύτερη ιδέα, 61 00:03:28,240 --> 00:03:30,070 όπως θα συζητήσουμε προς το τέλος του εξαμήνου. 62 00:03:30,070 --> 00:03:34,720 Εάν ο κωδικός πρόσβασής σας είναι γραμμένο σε μια κολλώδη σημείωση - δεν είναι αστείο - στην οθόνη σας, 63 00:03:34,720 --> 00:03:38,350 αυτό είναι πάρα πολύ δεν είναι απαραίτητα το καλύτερο σχέδιο, αλλά αρκετά συνηθισμένο φαινόμενο. 64 00:03:38,350 --> 00:03:42,470 Και αν δεν είστε με τη χρήση κρυπτογράφησης για την κρυπτογράφηση των κωδικών πρόσβασης, 65 00:03:42,470 --> 00:03:44,210 είναι ιδιαίτερα ευάλωτα. 66 00:03:44,210 --> 00:03:47,270 Έτσι, αν νομίζετε ότι είστε έξυπνοι είναι σούπερ, έχοντας μια κρυφή έγγραφο του Word 67 00:03:47,270 --> 00:03:49,910 κάπου στο σκληρό σας δίσκο που έχει όλους τους κωδικούς πρόσβασής σας 68 00:03:49,910 --> 00:03:53,670 αλλά είναι σε ένα φάκελο ότι κανείς δεν πρόκειται να δούμε σε, που επίσης δεν είναι μια πολύ ασφαλής μηχανισμός. 69 00:03:53,670 --> 00:03:56,990 Και έτσι αυτό που θα εισαγάγει pset2 είναι αυτή η τέχνη της κρυπτογραφίας 70 00:03:56,990 --> 00:04:02,010 κρυπτογράφησης και πληροφορίες, έτσι ώστε τα πράγματα όπως κωδικοί πρόσβασης είναι όλο και πιο ασφαλής. 71 00:04:02,010 --> 00:04:05,790 Το πλαίσιο εδώ είναι ότι με ανασφαλής δεδομένα 72 00:04:05,790 --> 00:04:07,930 έρχεται μια ευκαιρία για να κρυπτογραφήσει και να αγωνίζομαι. 73 00:04:07,930 --> 00:04:11,470 Και έτσι αυτό, για παράδειγμα, είναι ένα παράδειγμα ενός κρυπτογραφημένου μηνύματος. 74 00:04:11,470 --> 00:04:14,700 Αυτό λέει πραγματικά κάτι στα αγγλικά, αλλά δεν είναι εντελώς σαφές προφανής. 75 00:04:14,700 --> 00:04:18,279 Και θα έρθει πλήρης κύκλος σήμερα να δώσουμε έμφαση, εκτός ό, τι αυτό το μυστικό μήνυμα εδώ είναι. 76 00:04:18,279 --> 00:04:23,490 Αλλά στον πραγματικό κόσμο των υπολογιστών, τα πράγματα δεν μοιάζουν καν θα μπορούσαν να είναι Αγγλικές φράσεις. 77 00:04:23,490 --> 00:04:28,430 Για παράδειγμα, αυτό είναι ό, τι μπορείτε να βρείτε σε ένα πρότυπο Linux ή Mac ή UNIX υπολογιστή 78 00:04:28,430 --> 00:04:32,070 σε ένα αρχείο που ήταν μια φορά κι έναν καιρό που ονομάζεται το αρχείο κωδικού πρόσβασης. 79 00:04:32,070 --> 00:04:34,200 >> Σήμερα έχει μετακινηθεί σε άλλες θέσεις. 80 00:04:34,200 --> 00:04:39,210 Αλλά αν κοιτάξετε στο σωστό μέρος, σε ένα σύστημα, θα δείτε όχι μόνο το όνομα χρήστη σας 81 00:04:39,210 --> 00:04:43,400 ή των άλλων ανθρώπων για το σύστημα, αλλά θα δείτε μια κρυπτογραφημένη εκδοχή του κωδικού τους. 82 00:04:43,400 --> 00:04:47,980 Πράγματι, η κρύπτη λέξη υποδηλώνει ότι τα ακόλουθα πράγματα είναι κρυπτογραφημένη, 83 00:04:47,980 --> 00:04:52,680 και αυτή η σειρά από φαινομενικά τυχαία γράμματα και αριθμούς και χαρακτήρες και ούτω καθεξής 84 00:04:52,680 --> 00:04:56,480 μπορούν να αποκρυπτογραφηθούν μόνο με γενικά γνωρίζοντας κάποιο μυστικό - 85 00:04:56,480 --> 00:04:58,840 μια μυστική λέξη, ένα μυστικό αριθμό - 86 00:04:58,840 --> 00:05:03,160 και πράγματι έτσι, η τέχνη της κρυπτογραφίας τελικά βράζει κάτω από την εμπιστοσύνη κάποιου είδους 87 00:05:03,160 --> 00:05:05,650 και γνωρίζοντας κάτι που κάποιος άλλος δεν το κάνει. 88 00:05:05,650 --> 00:05:10,090 Γι 'αυτό και θα διερευνήσει αυτό το λίγο πιο αναλυτικά σήμερα και στο PSET να έρθει. 89 00:05:10,090 --> 00:05:12,200 Και τώρα μια λέξη για επιτυχίας / αποτυχίας. 90 00:05:12,200 --> 00:05:15,360 Ειδικά ως κάποιοι από εσάς έχουν καταδυθεί σε pset1, η συσκευή, 91 00:05:15,360 --> 00:05:19,080 και ένα πολύ νέο κόσμο για τον εαυτό σας, να συνειδητοποιήσουν ότι απογοητεύσεις και σύγχυση 92 00:05:19,080 --> 00:05:21,700 και μόλις τεχνικές δυσκολίες είναι αρκετά πρέπει να αναμένεται, 93 00:05:21,700 --> 00:05:24,180 ειδικά με την πρώτη PSET, όπου υπάρχει μόνο τόσο πολύ νέα, 94 00:05:24,180 --> 00:05:27,730 απλά να πάρει εξοικειωμένοι με ls και cd και όλα αυτά τα απόκρυφα εντολές 95 00:05:27,730 --> 00:05:33,050 και ένα νέο περιβάλλον, και αυτό είναι ξεχωριστό από το ίδιο υλικό και τον προγραμματισμό ίδια. 96 00:05:33,050 --> 00:05:36,940 Έτσι αντιλαμβάνονται επίσης ότι υπάρχουν σίγουρα ώρες γραφείου που υπάρχουν ως δομή υποστήριξης. 97 00:05:36,940 --> 00:05:38,880 >> Τμήματα αρχίζουν την ερχόμενη Κυριακή. 98 00:05:38,880 --> 00:05:42,960 Αλλά το πιο σημαντικό, εάν αισθάνεστε ότι αυτό ακριβώς δεν είναι ο κόσμος για σένα, 99 00:05:42,960 --> 00:05:44,710 συνειδητοποιήσουμε ότι δεν πραγματικά να αναλάβει ακριβώς το χρόνο. 100 00:05:44,710 --> 00:05:48,600 Και αν δεν ήταν για αυτήν την ευκαιρία χρόνια για μένα να λάβει ένα πέρασμα τάξη / αποτύχει, 101 00:05:48,600 --> 00:05:50,990 Ειλικρινά, ποτέ δεν θα έχουν θέσει ακόμη και το πόδι στην τάξη. 102 00:05:50,990 --> 00:05:53,690 Και μπορείτε να το αλλάξετε αυτό, μέχρι, δηλαδή, το πέμπτο Δευτέρα του μαθήματος, 103 00:05:53,690 --> 00:05:58,280 οπότε αν είστε στην άκρη τώρα, συνειδητοποιούν ότι αντί για το κεφάλι σε κάποια άλλα νερά συνολικά, 104 00:05:58,280 --> 00:06:01,260 σίγουρα δεν θεωρούν απλώς να αλλάζει επιτυχίας / αποτυχίας. 105 00:06:01,260 --> 00:06:04,570 Και πάλι, δεν υπάρχει πραγματικά αυτός ο πολιτισμός εδώ στο Harvard της λήψης πράγματα επιτυχίας / αποτυχίας 106 00:06:04,570 --> 00:06:08,670 δεδομένου ότι ο καθένας θέλει πραγματικά να επιτύχει ή να υπερβεί, 107 00:06:08,670 --> 00:06:11,130 αλλά ειλικρινά, αυτό είναι ένας θαυμάσιος τρόπος για να δοκιμάσουν κάτι έξω 108 00:06:11,130 --> 00:06:16,720 που μπορεί να μην είναι γνωστά σε σας, και θα καταλήξετε να κάνει, στις περισσότερες περιπτώσεις, πολύ ωραία, 109 00:06:16,720 --> 00:06:18,210 ίσως πολύ προς έκπληξή σας. 110 00:06:18,210 --> 00:06:20,980 Και πιο συγκεκριμένα, αυτό που νομίζω ότι επιτυχίας / αποτυχίας γενικά κάνει, 111 00:06:20,980 --> 00:06:22,940 ειδικά όπως μπορεί να έχετε βιώσει με pset0, 112 00:06:22,940 --> 00:06:26,560 αν βάλετε μέσα σε 10 ώρες, 15 ώρες, 25 ώρες σε κάποιο PSET 113 00:06:26,560 --> 00:06:29,920 και είστε απλά χτυπάς το κεφάλι σου στον τοίχο και είναι να πάρει σούπερ αργά το βράδυ 114 00:06:29,920 --> 00:06:33,950 αλλά έχετε πάρει το PSET 90% του τρόπο και δεν μπορείτε ακριβώς να καταλάβω ένα πράγμα, 115 00:06:33,950 --> 00:06:36,520 επιτυχίας / αποτυχίας πραγματικά βγάζει την άκρη από μια κατηγορία του, όπως αυτό, 116 00:06:36,520 --> 00:06:39,100 όπου μπορείτε να ταξινομήσετε του πω ευτυχώς, "Εντάξει, το ξέρω ότι δεν είναι τέλεια, 117 00:06:39,100 --> 00:06:42,350 αλλά Δούλεψα κώλο μου μακριά σε αυτό, είμαι αρκετά χαρούμενος με αυτό που κατέληξε, " 118 00:06:42,350 --> 00:06:44,850 και ότι θα ανταποκριθεί στις προσδοκίες για την επιτυχία / αποτυχία. 119 00:06:44,850 --> 00:06:47,540 Έτσι, μπορώ να κρατήσει αυτό κατά νου. Εντάξει. 120 00:06:47,540 --> 00:06:50,520 >> Έτσι, όσοι από εσάς έχουν αγωνιστεί για να χρησιμοποιήσετε το Πανεπιστήμιο του Χάρβαρντ Wi-Fi, 121 00:06:50,520 --> 00:06:54,780 Γνωρίζω ότι υπάρχει μια CS50 SSID, μια σύνδεση Wi-Fi, επιπλέουν γύρω 122 00:06:54,780 --> 00:06:56,490 ότι μπορεί να έχετε καλύτερη τύχη για. 123 00:06:56,490 --> 00:07:00,130 Είναι λίγο ειρωνικό το γεγονός ότι ο κωδικός πρόσβασης για αυτό, αν θέλετε να δοκιμάσετε τη σύνδεση με αυτό 124 00:07:00,130 --> 00:07:08,350 για καλύτερες ταχύτητες - και να μας ενημερώσετε αν δεν είναι καλύτερη - είναι 12345, σε όλη τη διαδρομή μέχρι 8 125 00:07:08,350 --> 00:07:10,910 γιατί 8 είναι πιο ασφαλής από ό, τι 5. 126 00:07:10,910 --> 00:07:16,910 Έτσι, αν χρειάζεστε τη σύνδεση Wi-Fi κωδικό πρόσβασης, συνδεθείτε ασύρματα CS50 εδώ, 12345678, 127 00:07:16,910 --> 00:07:20,380 και μετά για CS50 Συζητήστε αν έχετε ακόμα διαλείπουσα προβλήματα συνδεσιμότητας, 128 00:07:20,380 --> 00:07:25,420 και θα αφήσουμε τις εξουσίες που πρέπει να ξέρετε για αυτή τη θέση. Εντάξει. 129 00:07:25,420 --> 00:07:32,230 Έτσι, μια γρήγορη teaser, ειδικά για εκείνους από εσάς που είστε fan αγόρια ή κορίτσια όλων των πραγμάτων της Apple. 130 00:07:32,230 --> 00:07:37,460 Αυτό που ξέθαψε από λίγα χρόνια πίσω ήταν αυτό το αρχείο εδώ, iUnlock.c, 131 00:07:37,460 --> 00:07:39,930 απλά για να κάνουν το είδος των πιο συγκεκριμένες και πιο περίπλοκη 132 00:07:39,930 --> 00:07:42,560 μερικά από τα πιο βασικά προγράμματα C που έχουμε γράψει. 133 00:07:42,560 --> 00:07:46,910 Έτσι άνοιξα αυτό το αρχείο, iUnlock.c. Είναι διαθέσιμο στη σελίδα Διαλέξεις για σήμερα. 134 00:07:46,910 --> 00:07:49,810 Στην αριστερή πλευρά θα δείτε έναν μακρύ κατάλογο των λειτουργιών. 135 00:07:49,810 --> 00:07:53,230 Έτσι, ο τύπος που έγραψε αυτό έγραψε πολλές λειτουργίες, περισσότερο από ό, τι ακριβώς κύριος. 136 00:07:53,230 --> 00:07:57,340 Συνήθιζε ένα σωρό βιβλιοθήκες εδώ, και αν αρχίσουμε κύλιση, 137 00:07:57,340 --> 00:08:04,890 ό, τι είναι στην πραγματικότητα αυτό είναι το πρώτο, πιστεύω, ρωγμή για το αρχικό iPhone. 138 00:08:04,890 --> 00:08:09,830 >> Όταν θέλετε να κάνετε jailbreak το iPhone πρωτότυπο, το οποίο σημαίνει untether από την AT & T 139 00:08:09,830 --> 00:08:13,710 και εγκατάσταση ειδικού λογισμικού πραγματικά σε αυτό και να κάνουμε τα πράγματα που η Apple δεν ήθελε τους ανθρώπους να κάνουν, 140 00:08:13,710 --> 00:08:18,480 κάποιος πήρε το χρόνο για να καταλάβουμε ακριβώς πώς θα μπορούσαν να εκμεταλλευτούν αδυναμίες του λογισμικού, 141 00:08:18,480 --> 00:08:22,690 λάθη, σφάλματα, στο λογισμικό της Apple, και έτσι γεννήθηκε iUnlock.c-- 142 00:08:22,690 --> 00:08:26,760 ότι αν το συνταχθεί στον υπολογιστή σας και να εγκατασταθεί σε ένα iPhone 143 00:08:26,760 --> 00:08:29,430 που συνδέθηκε με τον υπολογιστή σας μέσω, για παράδειγμα, ένα καλώδιο USB, 144 00:08:29,430 --> 00:08:32,450 αυτό θα σας δώσει τις διοικητικές ή προνόμια root στο iPhone σας 145 00:08:32,450 --> 00:08:34,620 και σας επιτρέπουν να κάνετε λίγο πολύ ό, τι θέλετε. 146 00:08:34,620 --> 00:08:36,400 Και έτσι έχει υπάρξει αυτό το συναρπαστικό παιχνίδι της γάτας και του ποντικιού 147 00:08:36,400 --> 00:08:39,340 μεταξύ της Apple και τον υπόλοιπο κόσμο, ιδίως δεδομένου ότι, όπως πολλές εταιρείες, 148 00:08:39,340 --> 00:08:43,350 προσπαθήστε να κλειδώσετε τα πράγματά τους κάτω έτσι ώστε να μπορείτε να το κάνετε μόνο με το τι σκοπεύουν. 149 00:08:43,350 --> 00:08:47,360 Όμως, χάρη σε ανθρώπους σαν και αυτό την κατανόηση του χαμηλού επιπέδου λεπτομέρειες - 150 00:08:47,360 --> 00:08:50,830 και σε αυτή την περίπτωση προγραμματισμού C - και πολλές από τις γνωστές δομές 151 00:08:50,830 --> 00:08:55,280 ότι έχουμε αρχίσει να παίζει με, είστε σε θέση να αξιοποιούν πραγματικά το υλικό 152 00:08:55,280 --> 00:08:59,250 κατά τρόπο που βλέπετε την τακτοποίηση και όχι κατ 'ανάγκη κάποια εταιρική οντότητα. 153 00:08:59,250 --> 00:09:01,600 Έτσι, για παράδειγμα, δεν έχω καμία ιδέα για το τι όλα αυτά που κάνει, 154 00:09:01,600 --> 00:09:03,580 GetVersion αλλά ακούγεται αρκετά απλή, 155 00:09:03,580 --> 00:09:05,710 και μοιάζει με αυτό είναι μια λειτουργία που έγραψε αυτό το πρόσωπο. 156 00:09:05,710 --> 00:09:09,250 Χρειάζεται κάποιο είδος του ακεραίου ως επιχείρημα, δεν επιστρέφει τίποτα, 157 00:09:09,250 --> 00:09:13,710 αλλά φαίνεται να βρόχο με ένα for loop εδώ και μια κατάσταση, εάν, εάν η διακοπή κατάσταση, 158 00:09:13,710 --> 00:09:16,770 και με κάποιο τρόπο σχετίζεται με αριθμούς έκδοσης αν μετακινηθείτε προς τα κάτω, 159 00:09:16,770 --> 00:09:19,650 παρόλο που πολλές από αυτές τις λέξεις-κλειδιά θα είναι νέα. 160 00:09:19,650 --> 00:09:22,590 Και υπάρχουν ένα σωρό λειτουργίες σε εδώ δεν έχουμε δει ποτέ και δεν θα μπορούσε να δει ποτέ 161 00:09:22,590 --> 00:09:24,350 κατά τη διάρκεια του εξαμήνου. 162 00:09:24,350 --> 00:09:29,160 >> Στο τέλος της ημέρας, ακολουθεί τους ίδιους κανόνες και τη λογική ότι έχουμε το παιχνίδι με μέχρι στιγμής. 163 00:09:29,160 --> 00:09:34,340 Έτσι, αυτό είναι πολύ γέρος για να σπάσει το iPhone σας 3s ή 4s 5s ή σύντομα αυτές τις μέρες, 164 00:09:34,340 --> 00:09:38,830 αλλά ξέρω ότι είναι όλοι πάρα πολύ που προέρχονται από αυτό τον κόσμο που έχουμε βουτούσαν. 165 00:09:38,830 --> 00:09:42,280 Ας ρίξουμε μια ματιά σε ένα λίγο πιο απλό παράδειγμα: 166 00:09:42,280 --> 00:09:46,260 αυτό, μόνο και μόνο για να ζεσταθεί με κάποια σύνταξη, αλλά και κάποιο άλλο είδος των δεδομένων 167 00:09:46,260 --> 00:09:48,910 ότι έχουμε μιλήσει, αλλά δεν έχουν πραγματικά δει σε C. 168 00:09:48,910 --> 00:09:53,670 Αυτό είναι ένα αρχείο που ονομάζεται positive1.c, και σύμφωνα με τις παρατηρήσεις στην κορυφή, 169 00:09:53,670 --> 00:09:56,070 αυτό απαιτεί απλώς ότι ένας χρήστης παρέχει ένα θετικό αριθμό. 170 00:09:56,070 --> 00:09:59,910 Γι 'αυτό είναι ένα παράδειγμα ένα do-while loop, το οποίο είναι ωραίο για το χρήστη διαδραστικά προγράμματα 171 00:09:59,910 --> 00:10:02,070 όπου θα πρέπει να πείτε στον χρήστη να κάνει κάτι, 172 00:10:02,070 --> 00:10:05,530 και αν δεν συνεργαστούν θα φωνάζω σε αυτούς ή να απορρίψει τη συμβολή τους. 173 00:10:05,530 --> 00:10:10,480 Υπόθεση στο σημείο: εγώ είμαι πρόκειται να κάνει γραμμές 19 έως 24 174 00:10:10,480 --> 00:10:14,620 εφ 'όσον ο χρήστης δεν έχει δώσει εμένα ένα θετικό αριθμό. 175 00:10:14,620 --> 00:10:21,340 Αυτή η λεπτομέρεια εδώ στη γραμμή 18, γιατί δηλώνω n πάνω από όλο αυτό το looping κατασκευή 176 00:10:21,340 --> 00:10:26,870 σε αντίθεση προς τα δεξιά δίπλα στην γραμμή 22 όπου πραγματικά ενδιαφέρονται για να πάρει n; Ναι. 177 00:10:26,870 --> 00:10:29,330 [Φοιτητής] Πεδίο. >> Ναι, έτσι το ζήτημα του πεδίου εφαρμογής. 178 00:10:29,330 --> 00:10:31,770 Και σε απλή γλώσσα, τι αναφέρεται στο πεδίο; 179 00:10:34,880 --> 00:10:41,560 Ναι. >> [Ακούγεται ανταπόκριση των φοιτητών] >> Μπορείτε να μιλήσετε λίγο πιο δυνατά; 180 00:10:41,560 --> 00:10:45,440 [Φοιτητής] Πού μπορείτε να έχετε πρόσβαση αυτή τη μεταβλητή. >> Perfect. 181 00:10:45,440 --> 00:10:47,610 Πού μπορείτε να αποκτήσετε πρόσβαση σε μια συγκεκριμένη μεταβλητή. 182 00:10:47,610 --> 00:10:50,990 Και γενικά, ο κανόνας μέχρι τώρα ήταν ότι το πεδίο εφαρμογής του κάποια μεταβλητή 183 00:10:50,990 --> 00:10:56,140 ορίζεται από τις πιο πρόσφατες άγκιστρα που έχετε δει. 184 00:10:56,140 --> 00:11:03,070 >> Και έτσι σε αυτή την περίπτωση, αν έκανα το λάθος να δηλώσει n στη γραμμή 22, η γραμμή θα μπορούσε να λειτουργήσει. 185 00:11:03,070 --> 00:11:10,840 Θα ήθελα να πάρετε μια int, και θα ήθελα να το θέσω σε αυτή τη μεταβλητή n στην γραμμή 22, 186 00:11:10,840 --> 00:11:17,060 αλλά ποια γραμμή του κώδικα θα έχουν τώρα καμία ιδέα για το τι μιλάω; >> [Φοιτητής] 25. 187 00:11:17,060 --> 00:11:23,840 [Malan] 25, και βγάζει 24, όπως επίσης και επειδή στην περίπτωση αυτή δεν εμπίπτει στο πεδίο των άγκιστρα. 188 00:11:23,840 --> 00:11:28,550 Έτσι, μόλις ένα μικρό κομμάτι από μια ενόχληση, αλλά πολύ εύκολα να λυθεί με απλά δηλώνοντας τη μεταβλητή 189 00:11:28,550 --> 00:11:30,700 εκτός της συνάρτησης. 190 00:11:30,700 --> 00:11:32,760 Θα δούμε αργότερα σήμερα μπορείτε να πάτε ένα βήμα παραπέρα 191 00:11:32,760 --> 00:11:34,940 και θα μπορούσε ακόμη και να πάρετε λίγο τεμπέλης. 192 00:11:34,940 --> 00:11:39,660 Και αυτό δεν πρέπει να συνιστάται σε γενικές γραμμές, αλλά θα μπορούσατε να πάρετε ακόμη και τεμπέλης 193 00:11:39,660 --> 00:11:44,150 και να θέσει μια μεταβλητή σε παγκόσμιο επίπεδο, ούτως ειπείν, όχι μέσα από μια συνάρτηση, όχι μέσα από ένα βρόγχο, 194 00:11:44,150 --> 00:11:49,800 αλλά στο ίδιο το αρχείο, εκτός από όλες τις λειτουργίες που έχετε γράψει, όπως έκανα εδώ στη γραμμή 15. 195 00:11:49,800 --> 00:11:55,220 Αυτό είναι γενικά αποδοκιμαζόταν, αλλά συνειδητοποιούν αυτό είναι μια λύση μερικές φορές σε άλλα προβλήματα, 196 00:11:55,220 --> 00:11:56,910 όπως θα δούμε τελικά. 197 00:11:56,910 --> 00:11:59,500 Έτσι, για την ώρα θα το αφήσουμε έτσι, αλλά ας δούμε αν μπορούμε να ξαναγράψουμε αυτό 198 00:11:59,500 --> 00:12:02,360 μόλις αρχίσει να εκφράζουν τους εαυτούς μας λίγο διαφορετικά. 199 00:12:02,360 --> 00:12:05,550 Το πρόγραμμα αυτό, ακριβώς για να είναι σαφής, είναι positive1. 200 00:12:05,550 --> 00:12:11,980 Επιτρέψτε μου να προχωρήσει εδώ και στο παράθυρο του τερματικού μου κάνει positive1, Enter. 201 00:12:11,980 --> 00:12:15,080 Συλλέγει εντάξει. Πάω να τρέξει positive1, πατήστε Enter. 202 00:12:15,080 --> 00:12:19,250 Απαιτώ να μου δώσετε ένα θετικό ακέραιο. Θα πω -1. Αυτό δεν λειτούργησε. 203 00:12:19,250 --> 00:12:22,340 0, 99. Αυτό φαίνεται να λειτουργεί. 204 00:12:22,340 --> 00:12:25,310 Ίσως δεν είναι η πιο αυστηρή δοκιμασία, αλλά τουλάχιστον είναι μια ωραία επιταγή λογική 205 00:12:25,310 --> 00:12:27,100 ότι είμαστε στο σωστό δρόμο. 206 00:12:27,100 --> 00:12:29,570 >> Έτσι, τώρα επιτρέψτε μου να προχωρήσει και να ανοίξει την έκδοση 2 του παρόντος άρθρου, 207 00:12:29,570 --> 00:12:32,800 και ό, τι ήδη είναι διαφορετικό; 208 00:12:32,800 --> 00:12:39,030 Υλοποιεί το ίδιο πράγμα, αλλά τι είναι το άλμα από το σαφώς διαφορετικό αυτή τη φορά; 209 00:12:40,790 --> 00:12:47,090 Αυτό bool στο πράσινο. Είναι επισημαίνεται με πράσινο, αυτή η λέξη-κλειδί είναι γνωστό ως bool, η οποία είναι ένας τύπος δεδομένων. 210 00:12:47,090 --> 00:12:50,510 Αυτό έρχεται δεν χτίστηκε σε σε όλες τις εκδόσεις του C. 211 00:12:50,510 --> 00:12:52,650 Θα πρέπει να περιλαμβάνει μια συγκεκριμένη βιβλιοθήκη. 212 00:12:52,650 --> 00:12:56,460 Στην περίπτωσή μας, θα περιλαμβάνεται το CS50 βιβλιοθήκη έτσι ώστε να έχουμε πρόσβαση σε bool. 213 00:12:56,460 --> 00:12:59,860 Όμως, στη γραμμή 18, φαίνεται να έχουμε μια λογική τιμή εδώ ονομάζεται ευγνώμων. 214 00:12:59,860 --> 00:13:02,190 Θα μπορούσα να έχω αυτό το κάτι λέγεται, αλλά εγώ αυτό που ονομάζεται ευγνώμων 215 00:13:02,190 --> 00:13:04,750 ακριβώς το είδος του μεταφέρω κάποια σημασιολογική έννοια. 216 00:13:04,750 --> 00:13:07,700 Έτσι, αρχικά στη γραμμή 18, είμαι ευγνώμων προφανώς δεν 217 00:13:07,700 --> 00:13:12,230 επειδή η τιμή Boolean ευγνώμων ξεκινά να false στη γραμμή 18. 218 00:13:12,230 --> 00:13:16,500 Και τότε φαίνεται τι έχω κάνει εδώ στις γραμμές 21 έως 23 219 00:13:16,500 --> 00:13:19,200 το έχω ακριβώς το είδος της ξαναγραφεί λογική μου. 220 00:13:19,200 --> 00:13:26,100 Έτσι, δεν έχει λειτουργικά διαφορετικά, αλλά στην γραμμή 22 τώρα μπορώ να ελέγξω αν το int ο χρήστης έχει δώσει 221 00:13:26,100 --> 00:13:31,360 είναι μεγαλύτερη από 0, τότε μπορώ να αλλάξω απλώς την αξία των ευγνώμων για αλήθεια. 222 00:13:31,360 --> 00:13:35,590 Και γιατί το κάνω αυτό; Επειδή στην γραμμή 25, προφανώς θα πάω για να ελέγξετε την κατάσταση. 223 00:13:35,590 --> 00:13:39,760 Κάντε αυτό το βρόχο, ενώ ευγνώμων είναι ψευδής. 224 00:13:39,760 --> 00:13:42,960 Γι 'αυτό πρότεινε ως εναλλακτική λύση για την έκδοση 1 225 00:13:42,960 --> 00:13:47,050 γιατί είναι τουλάχιστον λίγο πιο έξυπνο ίσως, είναι λίγο πιο γειωμένη στην αγγλική γλώσσα. 226 00:13:47,050 --> 00:13:51,980 Έτσι, κάνετε τα ακόλουθα, ενώ δεν είστε ευγνώμονες ή ενώ ευγνώμων είναι ψευδής. 227 00:13:51,980 --> 00:13:56,220 Και αυτή τη φορά πάρα πολύ εγώ προφανώς δεν με νοιάζει να θυμόμαστε ό, τι ο χρήστης πληκτρολογήσει 228 00:13:56,220 --> 00:14:00,050 ειδοποίηση επειδή δεν υπάρχει μεταβλητή n, έτσι στην πραγματικότητα, ένα μικρό λευκό ψέμα εκεί. 229 00:14:00,050 --> 00:14:03,290 >> Λειτουργικά, το πρόγραμμα είναι λίγο διαφορετικό όταν φτάσουμε στο κάτω μέρος του 230 00:14:03,290 --> 00:14:04,960 επειδή δεν είμαι θυμόμαστε τι είναι n. 231 00:14:04,960 --> 00:14:09,120 Αλλά ήθελα να αποδείξει εδώ ότι ακόμα κι αν έχουμε δει GetInt 232 00:14:09,120 --> 00:14:13,780 και GetString χρησιμοποιούνται στην δεξιά πλευρά του ένα ίσον μέχρι στιγμής 233 00:14:13,780 --> 00:14:17,310 έτσι ώστε να θυμόμαστε την αξία, από τεχνική άποψη, αυτό δεν είναι απολύτως απαραίτητο. 234 00:14:17,310 --> 00:14:20,290 Αν για οποιοδήποτε λόγο, απλά δεν με νοιάζει να σώσει την αξία, 235 00:14:20,290 --> 00:14:25,540 απλά θέλετε να ελέγξετε την τιμή, παρατηρούμε ότι μπορούμε να γράψουμε απλά αυτό ως GetInt, 236 00:14:25,540 --> 00:14:27,320 ανοιχτή παρένθεση, κοντά παρένθεση. 237 00:14:27,320 --> 00:14:30,570 Η λειτουργία πρόκειται να επιστρέψει μια τιμή, όπως έχουμε πει. 238 00:14:30,570 --> 00:14:32,220 Είναι πρόκειται να σας δώσει πίσω ένα int. 239 00:14:32,220 --> 00:14:34,460 Και έτσι, αν σκεφτούμε διανοητικά να συμβεί αυτό, 240 00:14:34,460 --> 00:14:38,190 όταν πληκτρολογείτε σε 99, GetInt επιστρέφει τον αριθμό 99, 241 00:14:38,190 --> 00:14:41,840 εννοιολογικά και έτσι, είναι σαν τον κωδικό μου ήταν πραγματικά αυτό. 242 00:14:41,840 --> 00:14:45,950 Έτσι, εάν 99 είναι πράγματι μεγαλύτερη από μηδέν, τότε ευγνώμων γίνει αληθής, 243 00:14:45,950 --> 00:14:50,810 τότε συνειδητοποιεί γραμμή 25 ooh, τελειώσαμε επειδή είμαι ευγνώμων τώρα, 244 00:14:50,810 --> 00:14:53,970 και στη γραμμή 26, θα πω απλά, "Ευχαριστώ για το θετικό ακέραιο!" 245 00:14:53,970 --> 00:14:55,960 ό, τι συνέβη να είναι. 246 00:14:55,960 --> 00:14:59,140 Τώρα ας κάνουμε μικρή συντακτική ζάχαρη εδώ, να το πω έτσι. 247 00:14:59,140 --> 00:15:04,670 Ας δούμε αν μπορούμε να καθαρίσει αυτή τη γραμμή 25 με αυτό το τρίτο και τελευταίο παραλλαγή positive3. 248 00:15:04,670 --> 00:15:13,600 >> Παρατηρήστε τη μόνη διαφορά τώρα είναι τι γραμμή κώδικα; >> [Φοιτητής] 25. >> [Malan] Ναι, 25. 249 00:15:13,600 --> 00:15:17,680 Και δεν έχουμε δει πραγματικά αυτό το τέχνασμα ακριβώς ακόμα, αλλά εμείς δεν δείτε το θαυμαστικό τη Δευτέρα, 250 00:15:17,680 --> 00:15:21,070 η οποία υποδηλώνει τι; >> [Φοιτητής] Δεν. Δεν >> ή άρνηση. 251 00:15:21,070 --> 00:15:23,510 Πάρτε λοιπόν μια λογική τιμή και γυρίστε την αξία του. 252 00:15:23,510 --> 00:15:25,810 True γίνεται ψευδής, ψεύτικος γίνεται πραγματικότητα. 253 00:15:25,810 --> 00:15:30,420 Έτσι αυτό, θα ήθελα να προτείνω, είναι ακόμη λίγο πιο διαισθητικό ένας τρόπος γραφής του κώδικα 254 00:15:30,420 --> 00:15:33,430 γιατί ακόμα προετοιμαστεί ευγνώμων σε ψευδείς, κάνω ακόμη τα ακόλουθα, 255 00:15:33,430 --> 00:15:36,010 Έθεσα ευγνώμων για αλήθεια, όταν έρθει η ώρα, 256 00:15:36,010 --> 00:15:40,880 αλλά τώρα μπορείτε πραγματικά να μεταφράσει ακριβώς αυτόν τον κώδικα προφορικά αριστερά προς τα δεξιά, 257 00:15:40,880 --> 00:15:45,630 ενώ (ευγνώμων!)? επειδή κτύπημα ή θαυμαστικό υποδηλώνει την έννοια του όχι, 258 00:15:45,630 --> 00:15:47,580 έτσι ενώ δεν είναι ευγνώμων. 259 00:15:47,580 --> 00:15:49,900 Έτσι, και πάλι, δεν έχουμε εισάγει νέες έννοιες per se. 260 00:15:49,900 --> 00:15:53,730 Μιλήσαμε για τα Boolean πίσω όταν παίξαμε με Scratch, 261 00:15:53,730 --> 00:15:56,720 αλλά συνειδητοποιούν τώρα μπορούμε απλά να αρχίσετε να γράφετε κώδικα μας με πολλούς διαφορετικούς τρόπους. 262 00:15:56,720 --> 00:16:01,060 Έτσι, ειδικά σε pset1 αν είστε το είδος του που αγωνίζονται να καταλάβω τον τρόπο να γράψει κάποιο πρόγραμμα, 263 00:16:01,060 --> 00:16:04,340 οι πιθανότητες είναι είστε στην τύχη, διότι μπορεί να υπάρξει οποιοσδήποτε αριθμός των λύσεων 264 00:16:04,340 --> 00:16:06,110 που μπορεί να συμβεί μετά. 265 00:16:06,110 --> 00:16:10,500 Για παράδειγμα, αυτό είναι μόλις 3 για ακόμη και το απλούστερο των προγραμμάτων. Εντάξει. 266 00:16:10,500 --> 00:16:14,200 Και τώρα θυμάμαι τη Δευτέρα φύγαμε για αυτό το σημείωμα με τις τιμές επιστροφής. 267 00:16:14,200 --> 00:16:18,450 Έτσι, για πρώτη φορά γράψαμε ένα πρόγραμμα που δεν είναι μόνο να έχουν την κύρια? 268 00:16:18,450 --> 00:16:22,550 έχει επίσης τη δική του προσαρμοσμένη συνάρτηση που έγραψα εδώ. 269 00:16:22,550 --> 00:16:26,810 Έτσι, σε σειρά 31 έως 34 που έχω εφαρμόσει μια λειτουργία κύβο. 270 00:16:26,810 --> 00:16:30,240 Δεν είναι πολύπλοκη. Είναι απλά μια * a * a σε αυτή την περίπτωση. 271 00:16:30,240 --> 00:16:34,750 Αλλά αυτό που είναι σημαντικό για αυτό είναι ότι παίρνω εισόδου με τη μορφή ενός 272 00:16:34,750 --> 00:16:39,180 και εγώ την επιστροφή στην παραγωγή με τη μορφή * a * a. 273 00:16:39,180 --> 00:16:43,560 Έτσι, τώρα έχω τη δυνατότητα, όπως και εγώ που χρησιμοποιούνται για να με prinf μόνο, 274 00:16:43,560 --> 00:16:47,240 να καλέσετε τη λειτουργία αυτή καλώντας τη λειτουργία κύβο. 275 00:16:47,240 --> 00:16:51,970 >> Και η λειτουργία κύβος παίρνει κάποια δεδομένα εισόδου, και η λειτουργία κύβος επιστρέφει κάποιο αποτέλεσμα. 276 00:16:51,970 --> 00:16:56,960 Αντίθετα, printf έκανε κάτι. 277 00:16:56,960 --> 00:17:00,840 Δεν επιστρέφει τίποτα ότι νοιαζόμαστε για, έστω και αν ως μέρος αυτό δεν επιστρέφει μια τιμή? 278 00:17:00,840 --> 00:17:03,110 απλά αγνοούν γενικά. 279 00:17:03,110 --> 00:17:06,510 Printf έκανε κάτι. Είχε μια παρενέργεια της εκτύπωσης στην οθόνη. 280 00:17:06,510 --> 00:17:11,770 Αντίθετα εδώ, έχουμε τη λειτουργία κύβου, η οποία επιστρέφει στην πραγματικότητα κάτι. 281 00:17:11,770 --> 00:17:15,520 Έτσι, για όσους είναι εξοικειωμένοι με αυτό, είναι μια αρκετά απλή ιδέα. 282 00:17:15,520 --> 00:17:19,640 Αλλά για εκείνους που είναι λιγότερο εξοικειωμένοι με την ιδέα αυτή να περάσει στις εισόδους και εξόδους πάρει πίσω, 283 00:17:19,640 --> 00:17:21,950 ας προσπαθήσουμε κάτι εξαιρετικά απλό. 284 00:17:21,950 --> 00:17:25,490 Είναι κανείς άνετα να ανεβαίνει στη σκηνή για λίγο; 285 00:17:25,490 --> 00:17:28,040 Θα πρέπει να αισθάνονται άνετα με μια φωτογραφική μηχανή για σας επίσης. Ναι; Εντάξει. 286 00:17:28,040 --> 00:17:31,240 Ποιο είναι το όνομά σου; >> [Φοιτητής] Ken. >> Ken. Εντάξει. Ken, έλα επάνω. 287 00:17:31,240 --> 00:17:35,050 Ken πρόκειται να είναι μια συνάρτηση του είδους εδώ. 288 00:17:35,050 --> 00:17:38,720 Ας πάμε μπροστά και να το κάνουμε αυτό. Ας πάμε λίγο φαντασία. 289 00:17:38,720 --> 00:17:42,260 Χάρηκα για τη γνωριμία. Καλώς ήρθατε στο προσκήνιο. Εντάξει. 290 00:17:42,260 --> 00:17:46,640 Ας χτυπήσει αυτό το κουμπί εδώ. Εντάξει. 291 00:17:46,640 --> 00:17:49,820 Έτσι, εδώ έχετε ένα σύγχρονο μαυροπίνακα, 292 00:17:49,820 --> 00:17:53,470 και τι είμαι είναι η κύρια λειτουργία, για παράδειγμα, 293 00:17:53,470 --> 00:17:56,460 και δεν έχω ένα iPad στο χέρι μου. 294 00:17:56,460 --> 00:17:59,710 >> Πραγματικά, δεν θυμάμαι πώς - Λοιπόν, δεν μπορώ να πω ότι. 295 00:17:59,710 --> 00:18:02,480 Δεν έχω πραγματικά καλή γραφή, 296 00:18:02,480 --> 00:18:05,520 και ως εκ τούτου έτσι θέλω να εκτυπώσετε κάτι στην οθόνη για μένα. 297 00:18:05,520 --> 00:18:12,040 Είμαι είναι το κύριο πρόγραμμα, και είμαι πρόκειται να σας το πω αυτό 298 00:18:12,040 --> 00:18:16,720 γράφοντας το μηδέν στο κοτόπουλο μου και στη συνέχεια περνώντας μια είσοδο σας. 299 00:18:16,720 --> 00:18:20,400 Έτσι, αν και ανόητη αυτή η άσκηση είναι, η έννοια των λειτουργιών και καλώντας μια συνάρτηση 300 00:18:20,400 --> 00:18:22,400 και επιστρέφει μια συνάρτηση πραγματικά βράζει κάτω σε αυτό. 301 00:18:22,400 --> 00:18:26,260 Είμαι κύριος, έχω γράψει μόνο printf, παραθέτω-unquote κάτι στην οθόνη, 302 00:18:26,260 --> 00:18:29,110 Τρέχω αυτό το πρόγραμμα, και το συντομότερο printf παίρνει ονομάζεται, 303 00:18:29,110 --> 00:18:32,880 παίρνει ένα επιχείρημα ή μια παράμετρο μερικές φορές μεταξύ διπλά εισαγωγικά. 304 00:18:32,880 --> 00:18:35,880 Εδώ είναι το επιχείρημα. Είμαι το πέρασμα στον Ken. 305 00:18:35,880 --> 00:18:39,020 Είναι ένα μαύρο κουτί γραπτή κάποια αρκετά χρόνια πριν 306 00:18:39,020 --> 00:18:41,510 ότι προφανώς μόνο ξέρει πώς να εκτυπώσετε τα πράγματα στην οθόνη. 307 00:18:41,510 --> 00:18:43,150 Έτσι εκτελέσει. 308 00:18:49,280 --> 00:18:51,280 Αυτό δεν είναι κακό. Πολύ καλό. 309 00:18:51,280 --> 00:18:55,510 Έτσι τώρα ο Ken γίνεται εκτέλεσης. Μήπως πρέπει να το χέρι μου τίποτα πίσω; 310 00:18:55,510 --> 00:18:57,470 Όχι ότι έχουμε δει μέχρι στιγμής. 311 00:18:57,470 --> 00:19:00,460 Και πάλι, printf δεν επιστρέφει στην πραγματικότητα έναν αριθμό, αλλά θα πάμε να αγνοήσει ότι προς το παρόν 312 00:19:00,460 --> 00:19:03,470 επειδή έχουμε ποτέ χρησιμοποιήσει. Έτσι, αυτό που είναι για τον Ken. 313 00:19:03,470 --> 00:19:08,580 Και έτσι τώρα κύρια αναλαμβάνει τον έλεγχο του προγράμματος και πάλι 314 00:19:08,580 --> 00:19:11,060 επειδή η γραμμή του κώδικα, printf, γίνεται εκτέλεσης. 315 00:19:11,060 --> 00:19:14,050 Και πάμε για τον τρόπο μας, την εκτέλεση ό, τι άλλες γραμμές υπάρχουν. 316 00:19:14,050 --> 00:19:17,320 Έτσι, τώρα ας προσπαθήσουμε ένα ελαφρώς διαφορετικό παράδειγμα. 317 00:19:17,320 --> 00:19:24,940 Αυτή τη φορά εδώ ας ξεκαθαρίσουμε πρώτα την οθόνη, και αυτή τη φορά θα κάνουμε τη λειτουργία κοπής σε κύβους, 318 00:19:24,940 --> 00:19:27,080 αλλά αυτή τη φορά, περιμένω μια τιμή εξόδου. 319 00:19:27,080 --> 00:19:29,180 >> Ας προχωρήσουμε και να κάνουμε αυτό. 320 00:19:29,180 --> 00:19:35,790 Τώρα έχω μια γραμμή κώδικα που λέει x παίρνει κύβο του x. 321 00:19:41,370 --> 00:19:46,370 Η γραμμή του κώδικα, ανάκληση, μοιάζει με αυτό: x = κύβος (x)? 322 00:19:46,370 --> 00:19:50,930 Λοιπόν, πώς είναι αυτό πρόκειται να λειτουργήσει; Ας πάμε μπροστά και να σας δώσει μια λευκή οθόνη και πάλι. 323 00:19:50,930 --> 00:19:54,070 Πάω να γράψω τώρα την τιμή του x, 324 00:19:54,070 --> 00:20:01,400 η οποία αυτή τη στιγμή συμβαίνει να είναι, ας πούμε, 2 για να το κρατήσει απλό. 325 00:20:01,400 --> 00:20:06,150 Έχω γράψει κάτω σε ένα κομμάτι χαρτί η τιμή 2, το οποίο είναι x αξία μου. 326 00:20:06,150 --> 00:20:10,920 Μου το χέρι στον Ken. >> Και γράφω απλά την απάντηση; >> Ναι, ας γράψει ακριβώς την απάντηση. 327 00:20:12,760 --> 00:20:18,940 Εντάξει. Και τώρα πρέπει να επιστρέψει με κάτι. Τέλεια. Νίκαια segue. 328 00:20:18,940 --> 00:20:23,120 Έτσι, τώρα τα χέρια μου πίσω την τιμή από 8 σε αυτή την περίπτωση, και τι μπορώ να κάνω με αυτό; 329 00:20:23,120 --> 00:20:28,250 Στην πραγματικότητα - ας δούμε, να πάρει αυτό το δικαίωμα. Τι θα πάω να κάνω με αυτό; 330 00:20:28,250 --> 00:20:33,440 Τώρα είμαι πρόκειται να λάβει αυτήν την τιμή και πραγματικά να το αποθηκεύσετε σε αυτά τα ίδια bits στη μνήμη. 331 00:20:33,440 --> 00:20:35,170 Αλλά παρατηρήσετε είμαι το είδος του αγώνα εδώ. 332 00:20:35,170 --> 00:20:38,210 Είμαι λίγο μπερδεμένος γιατί όπου μπορώ να γράψω πραγματικά την τιμή του x, 333 00:20:38,210 --> 00:20:43,150 γιατί ό, τι έχω κάνει ακριβώς είναι φυσικά το χέρι Ken ένα κομμάτι χαρτί που είχε την τιμή 2, 334 00:20:43,150 --> 00:20:46,590 που ήταν x, και πράγματι, αυτό είναι ακριβώς τι συνέβη. 335 00:20:46,590 --> 00:20:50,210 Έτσι, αποδεικνύεται ότι όταν καλείτε τη λειτουργία και περνάτε σε ένα επιχείρημα 336 00:20:50,210 --> 00:20:53,290 όπως γειά σου, τον κόσμο ή να περάσετε σε ένα επιχείρημα όπως είναι το 2, 337 00:20:53,290 --> 00:20:57,110 γενικά, είστε περνώντας σε ένα αντίγραφο της εν λόγω επιχείρημα. 338 00:20:57,110 --> 00:21:00,730 Και έτσι ακριβώς όπως έγραψα κάτω τον αριθμό 2 εδώ και παρέδωσαν στον Ken, 339 00:21:00,730 --> 00:21:04,720 αυτό πρέπει να σημαίνει ότι έχω ακόμη ένα αντίγραφο του κάπου τιμή 2 340 00:21:04,720 --> 00:21:08,890 διότι πράγματι, τώρα που έχω πάρει πίσω την τιμή 8, πρέπει να πάω πίσω στη μνήμη RAM 341 00:21:08,890 --> 00:21:12,130 και πραγματικά γράψετε 8, όπου είχα μια φορά τον αριθμό 2. 342 00:21:12,130 --> 00:21:16,950 Έτσι, οπτικά, να θυμάστε αυτή την ιδέα να περάσει σε, κυριολεκτικά, ένα αντίγραφο της αξίας. 343 00:21:16,950 --> 00:21:20,780 >> Ken κάνει το πράγμα του, με τα χέρια πίσω κάτι - σε αυτή την περίπτωση μια τιμή, όπως 8 - 344 00:21:20,780 --> 00:21:24,980 και στη συνέχεια, πρέπει να κάνω κάτι με αυτή την τιμή, αν θέλω να το κρατήσει γύρω. 345 00:21:24,980 --> 00:21:29,650 Έτσι, όλα αυτά θα έρθει πίσω να είναι όλοι πάρα πολύ εξοικειωμένοι πριν από καιρό. 346 00:21:29,650 --> 00:21:34,920 Σας ευχαριστώ πολύ για αυτό το demo, εδώ Ken. [Χειροκροτήματα] 347 00:21:34,920 --> 00:21:36,920 Πολύ καλά κάνει. 348 00:21:36,920 --> 00:21:42,690 Ας δούμε πώς τελικά που σχετίζεται με κάποια από τη λειτουργία καλώντας ότι έχουμε κάνει εδώ. 349 00:21:42,690 --> 00:21:47,910 Επιτρέψτε μου να πάμε μπροστά και να μας φέρει πίσω στο παράδειγμα εδώ κοπής σε κύβους. 350 00:21:47,910 --> 00:21:53,300 Σημειώστε ότι, αν θέλουμε πραγματικά να αρχίσετε να παίρνετε αυτό περαιτέρω, 351 00:21:53,300 --> 00:21:57,570 θα πάμε να πρέπει να λαμβάνει υπόψη της το γεγονός ότι ο αριθμός x που είναι να περάσει το εδώ 352 00:21:57,570 --> 00:22:01,530 είναι διαφορετική από ό, τι είναι στην πραγματικότητα που πέρασε μέσα στο λειτουργία. 353 00:22:01,530 --> 00:22:05,880 Έτσι, και πάλι, αυτό το πέρασμα από το αντίγραφο πρόκειται να γίνει αρκετά γερμάνιο σε μια στιγμή. 354 00:22:05,880 --> 00:22:09,580 Ας ρίξουμε μια ματιά σε κάτι που δεν εργάζονται αρκετά δεξιά ακόμα. 355 00:22:09,580 --> 00:22:13,250 Πάω να πάει μπροστά και να ανοίξει ένα τρίτο παράδειγμα λάθη, που πάσχει από τη φύση, 356 00:22:13,250 --> 00:22:18,550 και λέγεται buggy3 και εφαρμόζει μια εναλλαγή λειτουργίας. 357 00:22:18,550 --> 00:22:25,110 Εδώ έχουμε μια κύρια λειτουργία που έχει x και y αυθαίρετα αρχικοποιείται στο 1 και 2, αντιστοίχως. 358 00:22:25,110 --> 00:22:27,700 Θα μπορούσαμε να χρησιμοποιήσουμε GetInt, αλλά χρειαζόμαστε μια απλή άσκηση, 359 00:22:27,700 --> 00:22:30,170 έτσι είναι δύσκολο-κωδικοποιημένα ως 1 και 2. 360 00:22:30,170 --> 00:22:35,340 Στις γραμμές 21 και 22, μπορούμε προφανώς εκτυπώνει x και y, 1 ανά γραμμή. 361 00:22:35,340 --> 00:22:39,720 Στη συνέχεια, στη γραμμή 23, που ισχυρίζονται είμαι εναλλαγή αυτές τις αξίες, τελεία, τελεία, τελεία. 362 00:22:39,720 --> 00:22:44,170 Εγώ προφανώς καλούν σε μια λειτουργία που ονομάζεται γραμμή 24 ανταλλαγής που διαρκεί 2 επιχειρήματα. 363 00:22:44,170 --> 00:22:48,300 Είναι εντελώς legit λειτουργίες για να πάρει 2 επιχειρήματα. Έχουμε δει printf το κάνει ήδη. 364 00:22:48,300 --> 00:22:51,830 >> Έτσι ανταλλαγής παίρνει προφανώς x και y, και όπως υποδηλώνει το όνομά του, 365 00:22:51,830 --> 00:22:54,670 Θα ήθελα να ελπίζω ότι πρόκειται να ανταλλάξει αυτά τα 2 τιμές. 366 00:22:54,670 --> 00:23:00,090 Έτσι, τότε θα διεκδικήσει on line 25 "Αλλαγή εικόνων!" και εγώ επανεκτύπωση x και y 367 00:23:00,090 --> 00:23:03,070 υπό την προϋπόθεση ότι έχουν πράγματι έχουν μετατραπεί. 368 00:23:03,070 --> 00:23:06,080 Αλλά αν τρέξω πραγματικά αυτό το πρόγραμμα - επιτρέψτε μου να ανοίξει ένα παράθυρο τερματικού, 369 00:23:06,080 --> 00:23:09,860 επιτρέψτε μου να κάνω buggy3 - όπως υποδηλώνει το όνομα, αυτό δεν πρόκειται να τελειώσει καλά 370 00:23:09,860 --> 00:23:15,770 γιατί όταν χτύπησα Enter, παρατηρούμε ότι το x είναι 1, y είναι 2, 371 00:23:15,770 --> 00:23:19,420 και ακόμη στο τέλος του προγράμματος, είναι ακόμα, στην πραγματικότητα, το ίδιο. 372 00:23:19,420 --> 00:23:22,960 Έτσι, με βάση την επίδειξη μόλις τώρα με τον Ken, τι πραγματικά συμβαίνει; 373 00:23:22,960 --> 00:23:28,710 Ας βουτιά σε αυτή τη λειτουργία swap. Είναι εξαιρετικά σύντομη. Είναι μόνο λίγες γραμμές κώδικα καιρό. 374 00:23:28,710 --> 00:23:34,520 Αλλά ποιο είναι το βασικό πρόβλημα με βάση την απλή ιστορία είπε εδώ με τον Ken; 375 00:23:34,520 --> 00:23:36,670 Γιατί έχει σπάσει swap; 376 00:23:36,670 --> 00:23:39,660 [Φοιτητής] Είσαι αποθήκευση σε ένα αντίγραφο και όχι η μεταβλητή. 377 00:23:39,660 --> 00:23:43,980 Ακριβώς. Είμαστε αποθήκευση σε ένα αντίγραφο, δεν είναι η ίδια η μεταβλητή. 378 00:23:43,980 --> 00:23:47,170 Με άλλα λόγια, χρειάζεται προφανώς ανταλλαγής επιχειρημάτων 2, μια int, 379 00:23:47,170 --> 00:23:49,370 και είναι αυθαίρετα ονομάζονται α και β, 380 00:23:49,370 --> 00:23:54,420 και εδώ έχω περάσει σε x και y, τα οποία είναι αντίστοιχα 1 και 2, 381 00:23:54,420 --> 00:23:58,770 αλλά δεν είμαι κυριολεκτικά περνώντας στο x, δεν είμαι κυριολεκτικά περνώντας y, 382 00:23:58,770 --> 00:24:01,450 Είμαι περνώντας ένα αντίγραφο του x και ένα αντίγραφο του y. 383 00:24:01,450 --> 00:24:04,510 Είναι σχεδόν σαν να αντιγραφεί και να επικολληθεί σε ανταλλαγή 384 00:24:04,510 --> 00:24:07,810 οι τιμές που θέλετε πραγματικά να χειριστείτε. 385 00:24:07,810 --> 00:24:14,480 Έτσι, αν αυτή είναι η περίπτωση, όταν η έναρξη του προγράμματος εκτέλεσης γραμμή 35 στη συνέχεια, 36, 386 00:24:14,480 --> 00:24:18,650 όταν έχω στη γραμμή 37, σε αυτό το σημείο στην ιστορία, ποια είναι η αξία του ένα; 387 00:24:21,040 --> 00:24:25,050 Σε αυτό το σημείο στην ιστορία, γραμμή 37, ποια είναι η αξία του ενός σε αυτό το σημείο; >> [Φοιτητής] 1. 388 00:24:25,050 --> 00:24:29,280 [Malan] Θα πρέπει μόνο να είναι 1, δεξιά, επειδή x ψηφίστηκε ως το πρώτο επιχείρημα, 389 00:24:29,280 --> 00:24:33,080 και αυτή η λειτουργία ακριβώς αυθαίρετα ζητά πρώτο επιχείρημα του ενός. 390 00:24:33,080 --> 00:24:38,200 Ομοίως είναι y το δεύτερο επιχείρημα, και αυτό είναι ένα απλό τηλεφώνημα αυθαίρετα το δεύτερο β επιχείρημα. 391 00:24:38,200 --> 00:24:40,990 >> Η διαφορά αυτή είναι στην πραγματικότητα αρκετά απλά εξήγησε. Σκεφτείτε το. 392 00:24:40,990 --> 00:24:43,320 Κανείς από εμάς δεν έχουν συναντήσει το πρόσωπο που έγραψε printf, 393 00:24:43,320 --> 00:24:50,770 έτσι σίγουρα, αυτός ή αυτή δεν έχει καμία ιδέα για το τι μεταβλητές μας 30 χρόνια αργότερα πρόκειται να κληθεί. 394 00:24:50,770 --> 00:24:56,650 Έτσι, πρέπει να υπάρχει μια διάκριση ανάμεσα σε αυτό που αποκαλούν μεταβλητές σε συναρτήσεις είστε γραπτώς 395 00:24:56,650 --> 00:25:02,080 και αυτό που εσείς ονομάζετε τις μεταβλητές σε συναρτήσεις που καλείτε ή χρήση. 396 00:25:02,080 --> 00:25:05,340 Έτσι με άλλα λόγια, έχω γράψει μου ως μεταβλητές x και y, 397 00:25:05,340 --> 00:25:08,890 αλλά αν κάποιος άλλος είχε γράψει τη λειτουργία ανταλλαγής, αυτός ή αυτή σίγουρα δεν θα ξέρουν 398 00:25:08,890 --> 00:25:10,690 τι μου μεταβλητές πρόκειται να κληθεί, 399 00:25:10,690 --> 00:25:13,830 έτσι ώστε να συνειδητοποιήσουν ότι αυτός είναι ο λόγος που έχουν αυτή τη δυαδικότητα των ονομάτων. 400 00:25:13,830 --> 00:25:16,750 Τεχνικά, θα μπορούσα να κάνω αυτό από σύμπτωση, 401 00:25:16,750 --> 00:25:20,080 αλλά θα εξακολουθεί να περάσει στην ως αντίγραφα. 402 00:25:20,080 --> 00:25:23,650 Θα ήταν απλώς να είναι μια καθαρή σύμπτωση αισθητικά αν το πρόσωπο που έγραψε ανταλλαγής 403 00:25:23,650 --> 00:25:26,150 είχε χρησιμοποιήσει τα ίδια ονόματα. 404 00:25:26,150 --> 00:25:32,370 Έτσι, σε αυτό το σημείο στην ιστορία, γραμμή 37, είναι 1, β είναι 2, και τώρα θα προχωρήσει για να τους ανταλλάξουν. 405 00:25:32,370 --> 00:25:34,900 Πρώτα απ 'όλα, επιτρέψτε μου να κάνω πραγματικά αυτό πολύ πιο απλά. 406 00:25:34,900 --> 00:25:36,690 Δεν ξέρω ποιοί είναι αυτοί οι 3 γραμμές του κώδικα έκαναν. 407 00:25:36,690 --> 00:25:41,210 Επιτρέψτε μου να κάνω ακριβώς αυτό: b = a? A = b? Γίνει. 408 00:25:41,210 --> 00:25:44,690 Γιατί αυτό είναι σπασμένο, λογικά; 409 00:25:46,490 --> 00:25:48,900 Είναι το είδος της διαισθητικής πράγμα, έτσι δεν είναι; 410 00:25:48,900 --> 00:25:52,560 Έτσι, γίνεται ένα b και b γίνεται, 411 00:25:52,560 --> 00:25:57,730 αλλά το πρόβλημα είναι ότι το συντομότερο γραμμή 37 εκτελεί, ποια είναι η αξία του ενός και β; 412 00:25:57,730 --> 00:26:03,410 Το ίδιο, 1, επειδή έχετε clobbered, να το πω έτσι, έχετε αλλάξει β να ισούται με ένα. 413 00:26:03,410 --> 00:26:08,890 Έτσι, μια φορά γραμμή 37 έχει εκτελέσει, αυτό είναι υπέροχο, τώρα έχετε 2 αντίγραφα του τον αριθμό 1 414 00:26:08,890 --> 00:26:13,350 μέσα από αυτή τη λειτουργία, έτσι ώστε στη συνέχεια, όταν λέτε στην γραμμή 38 α = β, 415 00:26:13,350 --> 00:26:17,640 είστε το είδος του βιδωθεί επειδή είστε ανάθεση μόλις 1 προς 1. 416 00:26:17,640 --> 00:26:20,580 Έχετε είδος χάσει την αξία που νοιαζόταν για. 417 00:26:20,580 --> 00:26:23,220 Έτσι, στην αρχική εκδοχή του αυτό, παρατηρήστε τι έκανα. 418 00:26:23,220 --> 00:26:26,850 Είχα αντ 'αυτού μια τρίτη γραμμή του κώδικα που έμοιαζε με αυτό. 419 00:26:26,850 --> 00:26:28,580 Δηλώνω μια προσωρινή μεταβλητή. 420 00:26:28,580 --> 00:26:32,170 >> Tmp είναι ένα πολύ κοινό όνομα για μια προσωρινή μεταβλητή, και αυτό είναι ένα int 421 00:26:32,170 --> 00:26:34,580 γιατί πρέπει να ταιριάζει με αυτό που θέλω να κάνω ένα αντίγραφο του. 422 00:26:34,580 --> 00:26:39,770 Έχω αποθηκεύσει αντίγραφο στο εσωτερικό του tmp, έτσι μόλις γραμμή 37 έχει εκτελεστεί, 423 00:26:39,770 --> 00:26:45,860 η τιμή του α είναι - γρήγορος έλεγχος λογικότητα - 1, η τιμή του b είναι 2, 424 00:26:45,860 --> 00:26:48,970 και η τιμή του tmp είναι επίσης 1. 425 00:26:48,970 --> 00:26:52,060 Έτσι, τώρα έχω εκτελέσει γραμμή 38. 426 00:26:52,060 --> 00:27:00,540 Μόλις γραμμή 38 εκτελεί, ένα παίρνει την τιμή του b. Και ήταν 2 β, έτσι, ένα είναι τώρα 2. 427 00:27:00,540 --> 00:27:05,210 Έτσι, σε αυτό το σημείο στην ιστορία, ένα είναι 2, b είναι 2, και tmp είναι 1, 428 00:27:05,210 --> 00:27:11,060 έτσι και τώρα λογικά, μπορούμε αξία μόνο tmp γδούπο του σε β και τελειώσαμε. 429 00:27:11,060 --> 00:27:12,800 Έτσι έχουμε λύσει αυτό το πρόβλημα. 430 00:27:12,800 --> 00:27:17,720 Δυστυχώς, όταν εγώ τρέχω αυτό το πρόγραμμα σε αυτή τη μορφή, δεν αλλάζετε πραγματικά οποιεσδήποτε αξίες. 431 00:27:17,720 --> 00:27:20,100 Αλλά για να είναι σαφής, γιατί; 432 00:27:23,660 --> 00:27:26,450 I σταθερό το λογικό πρόβλημα από μόλις πριν από λίγο, 433 00:27:26,450 --> 00:27:31,020 αλλά και πάλι, αν εκτελέσετε αυτό το πρόγραμμα, x και y παραμένουν αμετάβλητες 434 00:27:31,020 --> 00:27:33,310 μέχρι το τέλος της εκτέλεσης του προγράμματος. 435 00:27:33,310 --> 00:27:37,220 [Ακούγεται σχόλιο φοιτητής] >> Δεν έχουν επιστρέψει τίποτα, έτσι αυτό είναι αλήθεια. 436 00:27:37,220 --> 00:27:39,670 Αλλά αποδεικνύεται ότι υπάρχει ένα μικρό πρόβλημα εδώ, γιατί μέχρι τώρα, 437 00:27:39,670 --> 00:27:44,170 το μόνο πράγμα που έχουν βρεθεί εκεί σε θέση να επιστρέψει είναι ένα πράγμα, και αυτό είναι ένας περιορισμός του C. 438 00:27:44,170 --> 00:27:49,070 Μπορείτε να επιστρέψετε μόνο πραγματικά μία τιμή, οπότε είμαι το είδος του κολλήσει εδώ 439 00:27:49,070 --> 00:27:53,310 γιατί θα μπορούσε να επιστρέψει τη νέα τιμή του x ή θα μπορούσε να επιστρέψει τη νέα τιμή του y, 440 00:27:53,310 --> 00:27:55,190 αλλά θέλω τόσο πίσω. 441 00:27:55,190 --> 00:27:58,650 Έτσι επιστρέφοντας δεν είναι η απλή λύση εδώ. 442 00:27:58,650 --> 00:28:01,710 Αλλά το πρόβλημα είναι ουσιαστικά ο λόγος; Τι έχουμε πραγματικά αντάλλαξαν; 443 00:28:01,710 --> 00:28:04,190 [Φοιτητής] a και b. >> A και b. 444 00:28:04,190 --> 00:28:08,230 Αλλά α και b είναι αντίγραφα των χ και γ, που σημαίνει ακριβώς κάναμε όλες αυτές τις εργασίες, 445 00:28:08,230 --> 00:28:11,650 περάσαμε μόλις 3 λεπτά μιλώντας για τη λειτουργία ανταλλαγής και τα 3 από αυτές τις μεταβλητές, 446 00:28:11,650 --> 00:28:15,420 και ότι είναι μεγάλη, απολύτως σωστό σε απομόνωση, 447 00:28:15,420 --> 00:28:20,740 αλλά και το πεδίο εφαρμογής β είναι μόνο σε αυτές τις γραμμές εδώ. 448 00:28:20,740 --> 00:28:24,790 >> Έτσι ακριβώς όπως ένα για βρόχο, αν κηρύξει έναν ακέραιο i στο εσωτερικό του για το βρόχο, 449 00:28:24,790 --> 00:28:28,760 Ομοίως, εάν μια δήλωση και β μέσα από μια λειτουργία που έχετε γράψει, 450 00:28:28,760 --> 00:28:33,320 από όπου και αν ισχύει μόνο στο εσωτερικό του εν λόγω λειτουργία, που σημαίνει το συντομότερο ανταλλαγής γίνεται εκτέλεση 451 00:28:33,320 --> 00:28:38,470 και πάμε από τη γραμμή 24 προς τη γραμμή 25, χ και γ δεν έχουν μεταβληθεί καθόλου. 452 00:28:38,470 --> 00:28:42,790 Θα χάσει μόλις ένα σωρό χρόνο ανταλλάσσοντας τα αντίγραφα των μεταβλητών. 453 00:28:42,790 --> 00:28:47,010 Έτσι αποδεικνύεται ότι η λύση σε αυτό είναι πράγματι μη-προφανείς. 454 00:28:47,010 --> 00:28:50,670 Δεν είναι αρκετά επαρκής για να επιστρέψουν οι τιμές, γιατί μπορούμε να επιστρέψουμε μόνο 1 τιμή, 455 00:28:50,670 --> 00:28:53,470 και εγώ πραγματικά δεν θέλουν να ανταλλάξουν τα δύο x και y την ίδια στιγμή, 456 00:28:53,470 --> 00:28:55,210 έτσι θα πάμε να πρέπει να επανέλθουμε σε αυτό. 457 00:28:55,210 --> 00:29:01,020 Αλλά για τώρα, συνειδητοποιούν ότι το ζήτημα ουσιαστικά προέρχεται από το γεγονός ότι οι α και β είναι αντίγραφα 458 00:29:01,020 --> 00:29:03,630 και είναι στο δικό τους πεδίο. 459 00:29:03,630 --> 00:29:05,050 Ας προσπαθήσουμε να λύσουμε αυτό με κάποιο τρόπο. 460 00:29:05,050 --> 00:29:11,250 Επιτρέψτε μου να μετακινηθείτε προς τα πίσω στην πραγματικότητα εδώ και να ανοίξει, ας πούμε, μια τέταρτη παραλλαγή αυτού, buggy4. 461 00:29:11,250 --> 00:29:13,370 Τι γίνεται με αυτό; 462 00:29:13,370 --> 00:29:17,810 Αυτό είναι ένα παρόμοιο αλλά απλούστερο πρόβλημα να εξετάσουμε πριν λάβουμε μια μαχαιριά στην επίλυση του προβλήματος. 463 00:29:17,810 --> 00:29:24,190 Αυτό το πρόγραμμα ονομάζεται αύξηση, και αυτό προφανώς προετοιμάζει έναν ακέραιο x και 1 στη γραμμή 18. 464 00:29:24,190 --> 00:29:28,150 Στη συνέχεια ισχυρίζονται x είναι 1, τότε θα διεκδικήσει «Προσαύξηση ..." 465 00:29:28,150 --> 00:29:33,730 Καλώ λοιπόν αύξηση, αλλά στη συνέχεια στις γραμμές 22 και 23, που ισχυρίζονται ότι είναι ήδη αυξάνεται, 466 00:29:33,730 --> 00:29:40,220 Ισχυρίζομαι x είναι τώρα ό, τι είναι - 2, προφανώς - αλλά αυτό το πρόγραμμα είναι λάθη. 467 00:29:40,220 --> 00:29:42,610 Ποιο είναι το πρόβλημα; 468 00:29:43,440 --> 00:29:50,160 Ναι. >> [Ακούγεται ανταπόκριση των φοιτητών] >> Ακριβώς. 469 00:29:50,160 --> 00:29:52,490 Έτσι x έχει δηλωθεί, προφανώς, στη γραμμή 18. 470 00:29:52,490 --> 00:29:54,700 Αυτό είναι μέσα σε αγκύλες κύριο του. 471 00:29:54,700 --> 00:29:58,440 Έτσι, η απλή απάντηση εδώ είναι ότι ενώ υπάρχει x εδώ, 472 00:29:58,440 --> 00:30:03,930 δεν υπάρχει στη γραμμή 32, έτσι ώστε το πρόγραμμα αυτό στην πραγματικότητα δεν θα είναι καν σύνταξη. 473 00:30:03,930 --> 00:30:07,940 Ο compiler όταν προσπαθήσετε να χτίσετε τον κωδικό αυτό πρόκειται να μου φωνάζεις 474 00:30:07,940 --> 00:30:14,100 για κάποιο αναγνωριστικό της αδήλωτης ή κάτι για το σκοπό αυτό. Στην πραγματικότητα, ας προσπαθήσουμε. 475 00:30:14,100 --> 00:30:18,470 Αυτό είναι να buggy4. Εκεί είναι. 476 00:30:18,470 --> 00:30:22,110 Η χρήση του «x» της αδήλωτης αναγνωριστικό στη γραμμή 32. 477 00:30:22,110 --> 00:30:25,580 Και πραγματικά, ας είναι πιο σαφής εδώ σήμερα, έτσι ώστε αυτό είναι χρήσιμο 478 00:30:25,580 --> 00:30:27,580 σε ώρες γραφείου και στο σπίτι. 479 00:30:27,580 --> 00:30:29,300 >> Σημειώστε ότι είναι λίγο κρυφά γραμμένο. 480 00:30:29,300 --> 00:30:37,270 Αλλά το γεγονός ότι έχει Clang φώναξε σε μας, λέγοντας buggy4.c: 32:5, είναι πραγματικά χρήσιμο. 481 00:30:37,270 --> 00:30:42,050 Αυτό σημαίνει ότι το σφάλμα είναι στη γραμμή 32 στη θέση 5 χαρακτήρων. 482 00:30:42,050 --> 00:30:46,700 Έτσι 1, 2, 3, 4, 5. Αυτό είναι, στην πραγματικότητα, όπου το πρόβλημα είναι. 483 00:30:46,700 --> 00:30:49,790 Και επίσης, πάρα πολύ, να έχετε κατά νου σε ώρες γραφείου και στο σπίτι, είμαι τυχερός εδώ. 484 00:30:49,790 --> 00:30:52,990 Έχω ένα λάθος. Είναι πρόκειται να είναι σχετικά εύκολο να καθοριστεί. 485 00:30:52,990 --> 00:30:55,990 Αλλά αν μπορείτε να πάρετε μια ολόκληρη οθόνη με συντριπτική μηνύματα λάθους, 486 00:30:55,990 --> 00:31:00,330 και πάλι να συνειδητοποιήσουμε ότι η κατώτατη θα μπορούσε κανείς να είναι απλά συμπτωματική του ανώτατου ένα. 487 00:31:00,330 --> 00:31:03,450 Έτσι, πάντα να κυνηγήσει σφάλματα σας από πάνω προς τα κάτω 488 00:31:03,450 --> 00:31:05,820 επειδή μπορεί να υπάρχει μόνο ένα αποτέλεσμα να είναι αλυσιδωτή 489 00:31:05,820 --> 00:31:09,240 που προτείνει τον τρόπο έχετε περισσότερα προβλήματα από ό, τι στην πραγματικότητα κάνει. 490 00:31:09,240 --> 00:31:15,150 Λοιπόν, πώς θα μπορούσαμε να το διορθώσω αυτό, αν ο στόχος μου είναι να αυξήσετε x; >> [Φοιτητής] Κάντε x παγκόσμια. 491 00:31:15,150 --> 00:31:17,060 Εντάξει, έτσι μπορούμε να κάνουμε x παγκόσμια. 492 00:31:17,060 --> 00:31:20,480 Ας πάρουμε τη συντόμευση που είχα προειδοποιήσει για νωρίτερα, αλλά καλό, χρειαζόμαστε μόνο μια γρήγορη λύση, 493 00:31:20,480 --> 00:31:25,730 έτσι ας πούμε int x μέχρι εδώ. Αυτό κάνει την παγκόσμια x. 494 00:31:25,730 --> 00:31:31,800 Έτσι τώρα έχει κύρια πρόσβαση σε αυτό και αύξηση έχει πρόσβαση σε αυτό, 495 00:31:31,800 --> 00:31:34,110 και έτσι επιτρέψτε μου να προχωρήσει και να συγκεντρώσει αυτό τώρα. 496 00:31:34,110 --> 00:31:37,630 Κάντε buggy4, Enter. Φαίνεται να συγκεντρώσει τώρα. 497 00:31:37,630 --> 00:31:41,230 Ας τρέξει buggy4. Και αυτό φαίνεται να λειτουργούν πραγματικά. 498 00:31:41,230 --> 00:31:45,150 Αυτό είναι ένα από αυτά τα πράγματα που κάνω είναι αυτό που λέω, όχι όπως κάνω εγώ, 499 00:31:45,150 --> 00:31:47,010 όπως έχω κάνει εδώ ακριβώς, γιατί σε γενικές γραμμές, 500 00:31:47,010 --> 00:31:50,440 προγράμματά μας πρόκειται να πάρει πολύ πιο ενδιαφέρουσα και πολύ περισσότερο από αυτό, 501 00:31:50,440 --> 00:31:56,390 και αν σας λύση για τα προβλήματα της ζωής είναι απλά βάλτε όλες τις μεταβλητές στην κορυφή του αρχείου σας, 502 00:31:56,390 --> 00:31:59,690 πολύ γρήγορα να πάρει τα προγράμματα τρομακτικά δύσκολο να διαχειριστεί. 503 00:31:59,690 --> 00:32:02,190 Παίρνει πιο δύσκολο να σκεφτούμε νέες ονόματα μεταβλητών, 504 00:32:02,190 --> 00:32:05,240 γίνεται πιο δύσκολο να καταλάβουμε τι μεταβλητή κάνει ό, τι, 505 00:32:05,240 --> 00:32:08,460 και έτσι σε γενικές γραμμές, αυτό δεν είναι μία καλή λύση. 506 00:32:08,460 --> 00:32:10,030 Ας κάνουμε αυτό καλύτερα. 507 00:32:10,030 --> 00:32:12,160 Δεν θέλετε να χρησιμοποιήσετε μια καθολική μεταβλητή εδώ. 508 00:32:12,160 --> 00:32:16,240 >> Θέλω να αυξήσετε x, οπότε θα μπορούσα προφανώς - 509 00:32:16,240 --> 00:32:18,670 Στο τέλος της ημέρας, αυτό είναι το είδος της μια ανόητη ιστορία, γιατί κάνουμε ακριβώς αυτό - 510 00:32:18,670 --> 00:32:24,450 αλλά αν δεν ήξερα για τον συγκεκριμένο φορέα εκμετάλλευσης ή δεν είχα τη δυνατότητα να το αλλάξετε σε κεντρικό ίδια, 511 00:32:24,450 --> 00:32:30,730 πώς αλλιώς θα μπορούσα να εφαρμόσω Ken εδώ αυτή τη φορά να μην κύβο, αλλά να αυξήσετε; 512 00:32:31,380 --> 00:32:33,190 Πώς μπορώ να αλλάξω αυτό το πράγμα εδώ; Ναι. 513 00:32:33,190 --> 00:32:38,480 [Φοιτητής] Πέρασμα στο x και στη συνέχεια επιστρέφουν [δεν ακούγεται] >> Εντάξει, καλά. 514 00:32:38,480 --> 00:32:41,900 Γιατί λοιπόν να μην έχω περάσει στο x και στη συνέχεια, αντί να επιστρέψει, 515 00:32:41,900 --> 00:32:44,870 γιατί δεν μπορώ απλά να επιστρέψει x + 1. 516 00:32:44,870 --> 00:32:47,710 Ένα ζευγάρι περισσότερα πράγματα πρέπει να αλλάξουν εδώ. Είμαι στο σωστό δρόμο. 517 00:32:47,710 --> 00:32:49,770 Τι άλλο πρέπει να κάνω για να τσιμπιά; Κάποιος άλλος. Ναι. 518 00:32:49,770 --> 00:32:51,740 [Ακούγεται ανταπόκριση των φοιτητών] 519 00:32:51,740 --> 00:32:54,730 Πρέπει να αλλάξω τον τύπο επιστροφής της αύξησης επειδή δεν είναι άκυρη. 520 00:32:54,730 --> 00:32:57,780 Void δεν σημαίνει τίποτα είναι να επιστρέψει, αλλά σαφώς είναι τώρα, 521 00:32:57,780 --> 00:32:59,830 έτσι αυτό πρέπει να αλλάξει στο - >> [φοιτητής] int. 522 00:32:59,830 --> 00:33:02,740 int να είναι συνεπής με ό, τι είμαι πραγματικά επιστρέφουν. 523 00:33:02,740 --> 00:33:05,180 Τώρα κάτι άλλο είναι ακόμα εδώ λάθη. Ναι. 524 00:33:05,180 --> 00:33:08,400 [Ακούγεται ανταπόκριση των φοιτητών] >> [Malan] Γι 'αυτό πρέπει να αυξήσετε x; 525 00:33:08,400 --> 00:33:12,080 [Ακούγεται ανταπόκριση των φοιτητών] >> [Malan] Αχ, γι 'αυτό πρέπει να περάσει x. 526 00:33:12,080 --> 00:33:16,660 Γι 'αυτό και πρέπει να το κάνουμε αυτό εδώ. >> [Ακούγεται σχόλιο φοιτητής] 527 00:33:16,660 --> 00:33:20,050 [Malan] Έτσι, το πρωτότυπο, πρέπει να αλλάξει αυτό μέχρι εδώ. 528 00:33:20,050 --> 00:33:22,930 Έτσι, αυτό πρέπει να γίνει ένας int, αυτό πρέπει να γίνει - 529 00:33:22,930 --> 00:33:25,620 Χμμ, έχω πραγματικά ένα bug εδώ κάτω. Ας διορθώσετε αυτό ένα πρώτο. 530 00:33:25,620 --> 00:33:29,590 Τι θα πρέπει πραγματικά να είναι αυτό; Είναι πήρε να είναι ένα int κάτι. 531 00:33:29,590 --> 00:33:32,700 Θα μπορούσε να είναι x, αλλά ειλικρινά, αν ξεκινήσετε καλώντας όλες τις μεταβλητές x σας, 532 00:33:32,700 --> 00:33:35,390 πρόκειται να πάρουν όλο και λιγότερο σαφές ποιο είναι ποιο. 533 00:33:35,390 --> 00:33:39,560 >> Έτσι, ας επιλέγουν αυθαίρετα ένα διαφορετικό σύμβαση ονομασίας για τις λειτουργίες βοηθός μου, 534 00:33:39,560 --> 00:33:41,940 οι λειτουργίες που γράφω. Θα το ονομάσουμε ένα, ή θα μπορούσαμε να το ονομάσουμε - 535 00:33:41,940 --> 00:33:45,010 Ας το ονομάσουμε αριθμός να είναι ακόμη πιο σαφής. 536 00:33:45,010 --> 00:33:47,560 Μέχρι τότε θα πρέπει να επιστρέψει ό, τι ο αριθμός είναι συν 1, 537 00:33:47,560 --> 00:33:50,740 και τώρα πρέπει να αλλάξω 1 άλλο πράγμα εδώ και κάτι άλλο εδώ. 538 00:33:50,740 --> 00:33:54,350 Τι πρέπει να αλλάξει στην γραμμή 21 πρώτα; >> [Ακούγεται ανταπόκριση των φοιτητών] 539 00:33:54,350 --> 00:33:57,610 [Malan] Έχω να αναθέσει στο x. Δεν μπορώ να καλέσετε μόνο αύξηση (x). 540 00:33:57,610 --> 00:34:01,960 Πρέπει να θυμηθώ την απάντηση, αλλάζοντας την τιμή του x για την αριστερή πλευρά. 541 00:34:01,960 --> 00:34:04,680 Και ακόμα κι αν το x είναι τώρα στα αριστερά και δεξιά, αυτό είναι εντελώς πρόστιμο 542 00:34:04,680 --> 00:34:08,860 επειδή η δεξιά πλευρά παίρνει εκτελείται πρώτη, τότε παίρνει plopped στην αριστερή πράγμα - 543 00:34:08,860 --> 00:34:10,600 χ στην περίπτωση αυτή. 544 00:34:10,600 --> 00:34:12,159 Και στη συνέχεια, τέλος, αυτό είναι μια εύκολη αποτύπωση τώρα. 545 00:34:12,159 --> 00:34:17,230 Αυτό ακριβώς θα πρέπει να ταιριάζει με αυτό που είναι κάτω, int αριθμό. 546 00:34:17,230 --> 00:34:20,570 Έτσι, ένα σωρό αλλαγές για ένα πραγματικά ηλίθιο λειτουργία 547 00:34:20,570 --> 00:34:24,420 αλλά εκπρόσωπος των πραγμάτων που θα όλο και περισσότερο θέλουμε να κάνουμε. 548 00:34:24,420 --> 00:34:27,090 Έτσι, βεβαιωθείτε buggy4. Έχω μαντάρα κάπου. 549 00:34:27,090 --> 00:34:30,139 Ω, Θεέ μου. Πέντε λάθη σε ένα πρόγραμμα 6-line. 550 00:34:30,139 --> 00:34:35,690 Έτσι τι είναι λάθος στη γραμμή 18, χαρακτήρα 5; 551 00:34:35,690 --> 00:34:39,610 Γι 'αυτό και πρέπει να δηλώνουν αυτό, int. 552 00:34:39,610 --> 00:34:41,920 Ας δούμε. Υπάρχουν ένα σωρό άλλα σφάλματα. 553 00:34:41,920 --> 00:34:47,010 Ω, Θεέ μου - 19, 18, 21 - αλλά και πάλι, ας ξεκαθαρίσουμε λίγο την οθόνη, L Ελέγχου εδώ, 554 00:34:47,010 --> 00:34:49,380 και επανάληψη Clang. 555 00:34:49,380 --> 00:34:51,340 Έτσι 5 προβλήματα είναι πραγματικά ακριβώς ότι: 1. 556 00:34:51,340 --> 00:34:57,520 Έτσι τώρα ας τρέξει buggy4, Enter. Ουφ, χ έχει αυξάνεται σωστά. 557 00:34:57,520 --> 00:35:02,720 Εντάξει. Οποιεσδήποτε ερωτήσεις σχετικά με το πώς να αυξήσετε τους αριθμούς; Ναι. 558 00:35:02,720 --> 00:35:09,870 [Ακούγεται ερώτηση φοιτητή] >> Καλή ερώτηση. 559 00:35:09,870 --> 00:35:14,220 Πώς είναι ότι μπορώ να αλλάξω μόνο x με τον αριθμό και το πρόγραμμα θα γνωρίζουν αμέσως; 560 00:35:14,220 --> 00:35:16,200 >> Και πάλι, σκεφτείτε το σαν αυτό αφαίρεση. 561 00:35:16,200 --> 00:35:21,600 Έτσι, αν είμαι κύριος και ο Ken είναι αύξηση, ειλικρινά, δεν με νοιάζει τι Ken καλεί iPad του. 562 00:35:21,600 --> 00:35:26,570 Δεν με νοιάζει ό, τι ο ίδιος αποκαλεί κάτι που έχει να κάνει με την εφαρμογή του από αυτή τη λειτουργία. 563 00:35:26,570 --> 00:35:33,340 Αυτή είναι μια λεπτομέρεια εφαρμογής που έχω, κύρια, δεν χρειάζεται να νοιάζονται για. 564 00:35:33,340 --> 00:35:38,250 Και έτσι απλά αλλάζουν συνεχώς μέσα από τη λειτουργία - αριθμός εδώ και εδώ τον αριθμό - 565 00:35:38,250 --> 00:35:40,960 είναι το μόνο που χρειάζεται τόσο πολύ όπως εγώ ξαναμεταγλωττίσετε. 566 00:35:40,960 --> 00:35:44,180 Είναι το είδος του αρέσει, αν νομίζετε ότι για πολλούς από εμάς, όσοι από εσάς με τις άδειες οδήγησης 567 00:35:44,180 --> 00:35:46,770 που έχουν οδηγήσει ή εάν έχετε ακόμα οδηγείται σε ένα αυτοκίνητο, 568 00:35:46,770 --> 00:35:50,950 οι περισσότεροι από εμάς δεν έχουν ιδέα για το πώς λειτουργεί ένα αυτοκίνητο κάτω από το καπό. 569 00:35:50,950 --> 00:35:54,970 Και κυριολεκτικά, αν ανοίξετε το καπό, οι περισσότεροι από μας - συμπεριλαμβανομένου και εμού - 570 00:35:54,970 --> 00:35:56,940 δεν πρόκειται να ξέρει πραγματικά τι ψάχνουμε σε, 571 00:35:56,940 --> 00:35:59,220 είδος του, όπως μπορεί να νιώσετε με πράγματα όπως το δικαίωμα αυτό τώρα. 572 00:35:59,220 --> 00:36:01,480 Αλλά εμείς δεν πρέπει πραγματικά να φροντίσει πώς λειτουργεί το αυτοκίνητο, 573 00:36:01,480 --> 00:36:05,970 δεν έχουμε να ενδιαφέρει τι όλες τις ράβδους και τα έμβολα και τα καλώδια στο εσωτερικό του αυτοκινήτου 574 00:36:05,970 --> 00:36:08,160 Τα πραγματικά κάνει. 575 00:36:08,160 --> 00:36:12,770 Έτσι, κάτι σαν αυτό που εσείς ονομάζετε το έμβολο δεν έχει σημασία εδώ σε αυτή την περίπτωση. Η ίδια ιδέα. 576 00:36:12,770 --> 00:36:25,300 Ναι. >> [Ακούγεται ερώτηση φοιτητή] 577 00:36:25,300 --> 00:36:29,180 Εάν υπάρχουν περισσότερες χρήσεις της μεταβλητής στιγμή xa πριν, 578 00:36:29,180 --> 00:36:32,150 εσείς, ο προγραμματιστής, θα πρέπει να τα αλλάξει παντού. 579 00:36:32,150 --> 00:36:36,600 Ή θα μπορούσατε να κάνετε κυριολεκτικά αρχείου, Μενού, και στη συνέχεια, Εύρεση, Αντικατάσταση - κάτι τέτοιο - 580 00:36:36,600 --> 00:36:39,170 αλλά θα έχετε την ευκαιρία να χρειαστεί να κάνετε τον εαυτό σας αυτές τις αλλαγές. 581 00:36:39,170 --> 00:36:47,450 Θα πρέπει να είναι συνεπής. >> [Φοιτητής] Εάν υπάρχουν πολλές μεταβλητές [δεν ακούγεται] 582 00:36:47,450 --> 00:36:53,100 Μια συγκεκριμένη σειρά, όπως εδώ, αν αυτό ήταν int έναν άλλο αριθμό; >> [Φοιτητής] Σωστό. 583 00:36:53,100 --> 00:36:56,590 [Malan] Ναι. Παραγγελία σημασία όταν καλείτε τη λειτουργία. 584 00:36:56,590 --> 00:37:00,050 >> Έτσι, αν ζητούσαν αύξηση εδώ με κάτι κόμμα κάτι, 585 00:37:00,050 --> 00:37:01,680 υπάρχει μια άμεση χαρτογράφηση. 586 00:37:01,680 --> 00:37:05,690 Η πρώτη μεταβλητή, ό, τι λέγεται, γίνεται ένα αντίγραφο από το πρώτο επιχείρημα εδώ. 587 00:37:05,690 --> 00:37:07,760 Λυπάμαι. Αυτό δεν θα πρέπει να είναι μια παρένθεση. 588 00:37:07,760 --> 00:37:11,490 Οι δεύτερες γραμμές επιχείρημα επάνω με το δεύτερο. Έτσι ώστε, ναι, θέματα. Εντάξει. 589 00:37:11,490 --> 00:37:17,020 Λυπάμαι. Πήρα το μακρύ δρόμο για να φτάσετε εκεί. Άλλες ερωτήσεις; Εντάξει. 590 00:37:17,020 --> 00:37:20,610 Ας δούμε λοιπόν αν δεν μπορούμε να ζωγραφίσει μια εικόνα του τι πραγματικά συμβαίνει εδώ 591 00:37:20,610 --> 00:37:23,090 κάτω από την κουκούλα, να το πω έτσι. 592 00:37:23,090 --> 00:37:26,640 Πρόκειται για ένα ορθογώνιο που θα μπορούσαν να αντιπροσωπεύουν τη μνήμη του υπολογιστή σας. 593 00:37:26,640 --> 00:37:30,970 Ακόμα κι αν δεν έχετε καμία ιδέα για το πώς λειτουργεί η μνήμη RAM ή πώς λειτουργεί, 594 00:37:30,970 --> 00:37:33,940 τουλάχιστον ας υποθέσουμε ότι έχετε τσαμπιά από αυτό αυτές τις μέρες. 595 00:37:33,940 --> 00:37:36,280 Έχετε megabytes από αυτό, έχετε gigabytes του, 596 00:37:36,280 --> 00:37:40,870 και γνωρίζουμε από εβδομάδα 0 ότι ένα byte είναι ακριβώς αυτό; >> [Φοιτητής] 8 bits. 597 00:37:40,870 --> 00:37:42,950 8 bits, έτσι δεν είναι; So 8 μηδενικά και 1. 598 00:37:42,950 --> 00:37:45,880 Έτσι, αν ο υπολογιστής σας έχει ένα gig του RAM, 2 συναυλίες των RAM αυτές τις μέρες, 599 00:37:45,880 --> 00:37:55,030 έχετε ένα δισεκατομμύριο ή 2 δις bytes της μνήμης ή περίπου 8 δισ. ευρώ ή 16 δισεκατομμύρια bits 600 00:37:55,030 --> 00:37:56,890 στο εσωτερικό του υπολογιστή σας. 601 00:37:56,890 --> 00:38:00,590 Σε αντίθεση με το μικρό παράδειγμα Wooly Willy, δεν είναι μαγνητικά σωματίδια συνήθως πια. 602 00:38:00,590 --> 00:38:04,450 Όλο και περισσότερο - σε φορητούς υπολογιστές τουλάχιστον - είναι solid state drives, SSDs, 603 00:38:04,450 --> 00:38:08,580 που έχουν μόνο δεν έχουν κινούμενα μέρη. Είναι όλα ηλεκτρονικά. Είναι όλα ηλεκτρικής ενέργειας που βασίζονται. 604 00:38:08,580 --> 00:38:14,060 Έτσι σκέφτονται αυτό το ορθογώνιο, όπως ακριβώς αντιπροσωπεύουν τα 1 ή 2 gigabytes μνήμης που έχετε. 605 00:38:14,060 --> 00:38:16,020 >> Γι 'αυτό είναι ένα κομμάτι της μνήμης. 606 00:38:16,020 --> 00:38:19,830 Ο κόσμος της επιστήμης των υπολογιστών έχει το είδος του διαμοιράζεται off 607 00:38:19,830 --> 00:38:22,950 κομμάτια της μνήμης να κάνει διαφορετικά πράγματα. 608 00:38:22,950 --> 00:38:27,190 Για παράδειγμα, αν αυτό είναι μνήμη RAM του υπολογιστή σας, όπως προτείνεται από το ορθογώνιο εκεί, 609 00:38:27,190 --> 00:38:31,130 αποδεικνύεται ότι η σύμβαση, στην κορυφή της RAM σας, να το πω έτσι, 610 00:38:31,130 --> 00:38:33,660 είναι γενικά αυτό που ονομάζεται ένα τμήμα κειμένου. 611 00:38:33,660 --> 00:38:36,740 Αυτοί είναι οι 0s και 1s ότι έχετε φτιάξει. 612 00:38:36,740 --> 00:38:39,020 Έτσι, όταν έχουμε εξετάσει κάτω από την κουκούλα σε ό, τι a.out είναι, 613 00:38:39,020 --> 00:38:41,980 όλα αυτά 0s και 1s, όταν εκτελείτε ένα πρόγραμμα, 614 00:38:41,980 --> 00:38:46,290 εκείνοι 0s και 1s φορτώνονται από τον σκληρό δίσκο σας σε κάτι που ονομάζεται RAM, 615 00:38:46,290 --> 00:38:49,320 και στη RAM όπου και αν τεθεί στην κορυφή. 616 00:38:49,320 --> 00:38:52,770 Εν τω μεταξύ, έχετε άλλα πράγματα: την αρχικοποίηση των δεδομένων, κατάργησε την προετοιμασία των δεδομένων. 617 00:38:52,770 --> 00:38:57,510 Αυτές οι 2 δρεπανιές της μνήμης αναφέρονται σε καθολικές μεταβλητές, οι οποίες δεν χρησιμοποιούν συχνά 618 00:38:57,510 --> 00:39:00,760 αλλά μερικές φορές αν το κάνετε, καταλήγουν εκεί, καθώς και. 619 00:39:00,760 --> 00:39:04,260 Στη συνέχεια, υπάρχει κάποια άλλα πράγματα: μεταβλητές περιβάλλοντος, το οποίο δεν θα περνούν πολύ χρόνο για, 620 00:39:04,260 --> 00:39:06,860 αλλά στη συνέχεια 2 σημαντικά πράγματα που θα έρθει πίσω σε όλο το εξάμηνο, 621 00:39:06,860 --> 00:39:08,550 στοίβα και σωρού. 622 00:39:08,550 --> 00:39:12,210 Έτσι, οι περισσότεροι από τη μνήμη του υπολογιστή σας διατηρούνται κατά την εκτέλεση ενός προγράμματος 623 00:39:12,210 --> 00:39:15,370 για κάτι που ονομάζεται τη στοίβα και κάτι που ονομάζεται το σωρό. 624 00:39:15,370 --> 00:39:18,840 Εμείς δεν πρόκειται να μιλήσουμε για το σωρό σήμερα, αλλά θα μιλήσουμε για τη στοίβα. 625 00:39:18,840 --> 00:39:24,600 Η στοίβα έχει ως στόχο να πλάθω την οπτική των δίσκοι γεύμα τραπεζαρία αίθουσα στο Σπίτι Mather 626 00:39:24,600 --> 00:39:28,110 ή όπου κι αν τυχαίνει να είναι όπου το προσωπικό τραπεζαρία τον καθαρισμό τους κάθε μέρα, 627 00:39:28,110 --> 00:39:30,180 Τους στιβάζω από το δάπεδο μέχρι την, 628 00:39:30,180 --> 00:39:34,550 και ομοίως, στη μνήμη, υπάρχει η ιδέα της τοποθέτησης κάτι σε μια στοίβα, 629 00:39:34,550 --> 00:39:36,860 βάζοντας κάτι σε μια στοίβα, βάζοντας κάτι σε μια στοίβα. 630 00:39:36,860 --> 00:39:38,240 Και τι εννοούμε με αυτό; 631 00:39:38,240 --> 00:39:41,860 >> Ας ζουμ σε μόλις κάτω μισό αυτής της εικόνας, μνήμη RAM του υπολογιστή σας, 632 00:39:41,860 --> 00:39:44,330 να προτείνω τα ακόλουθα. 633 00:39:44,330 --> 00:39:48,170 Αποδεικνύεται ότι όταν εκτελείτε ένα πρόγραμμα όπως το a.out ή γειά σου - 634 00:39:48,170 --> 00:39:50,100 ό, τι το πρόγραμμα είναι ότι έχετε γράψει - 635 00:39:50,100 --> 00:39:54,020 πάλι, εκείνοι 0s και 1s έχουν φορτωθεί από το σκληρό σας δίσκο, που είναι μακροχρόνια αποθήκευση, 636 00:39:54,020 --> 00:39:57,230 μένει εκεί ακόμα και όταν τραβάτε το βύσμα, φορτώνονται στη μνήμη RAM. 637 00:39:57,230 --> 00:40:00,610 RAM είναι ταχύτερη από ό, τι σκληρούς δίσκους - είναι μικρότερη από σκληρούς δίσκους - 638 00:40:00,610 --> 00:40:03,300 αλλά αυτό είναι όπου ζουν τα προγράμματα, ενώ είστε τους λειτουργία. 639 00:40:03,300 --> 00:40:08,230 Έτσι, κάνετε διπλό κλικ σε ένα πρόγραμμα σε έναν υπολογιστή Mac ή PC, είναι φορτωμένο από το σκληρό δίσκο στη μνήμη RAM. 640 00:40:08,230 --> 00:40:11,520 Από τη στιγμή που είναι φορτωμένο στη μνήμη RAM, η 0s και 1s πάει στην κορυφή τρόπο, 641 00:40:11,520 --> 00:40:16,610 το λεγόμενο τμήμα κειμένου, αλλά στη συνέχεια, μόλις το πρόγραμμά σας αρχίζει πραγματικά το τρέξιμο, 642 00:40:16,610 --> 00:40:21,360 η κύρια λειτουργία ονομάζεται, και κυρίως, όπως είδαμε, έχει συχνά τοπικές μεταβλητές, 643 00:40:21,360 --> 00:40:24,870 και έχει ints και strings και χαρακτήρες και τα παρόμοια. 644 00:40:24,870 --> 00:40:29,180 Έτσι, αν το πρόγραμμά σας ότι έχετε γράψει ή το πρόγραμμα που έχετε διπλό κλικ 645 00:40:29,180 --> 00:40:32,970 χρησιμοποιούνται κάποιες μεταβλητές μέσα από τις κύριες, 646 00:40:32,970 --> 00:40:37,240 καταλήγουν στο κάτω μέρος του stack σας της μνήμης, να το πω έτσι. 647 00:40:37,240 --> 00:40:39,410 Πιο συγκεκριμένα, τι ακριβώς σημαίνει αυτό; 648 00:40:39,410 --> 00:40:48,450 Αυτό σημαίνει απλά ότι αν επρόκειτο να τον αριθμό των bytes της μνήμης RAM στον υπολογιστή σας, 649 00:40:48,450 --> 00:40:55,750 παρατηρήσετε ότι αυτό μπορεί να είναι αριθμός 0 byte, αυτό θα μπορούσε να είναι byte αριθμός 1, 2, 3, 4, 5, 6, 650 00:40:55,750 --> 00:41:01,480 σε όλη τη διαδρομή έως 2 δισ. θα είναι σε όλη τη διαδρομή μέχρι εκεί στην κορυφή. 651 00:41:01,480 --> 00:41:05,880 Έτσι με άλλα λόγια, όταν μιλάμε για τη μνήμη RAM ή από την άποψη των bytes, 652 00:41:05,880 --> 00:41:11,500 αυτό σημαίνει απλά ότι κάποιος έχει αποφασίσει τι πρέπει να αριθμήσετε κάθε ένα από αυτά κομμάτια της μνήμης. 653 00:41:11,500 --> 00:41:16,650 Έτσι, όταν θα πρέπει να έχετε 32 bit για έναν int ή χρειάζεστε 8 bits για ένα char, 654 00:41:16,650 --> 00:41:18,840 πού καταλήγουν στη μνήμη; 655 00:41:18,840 --> 00:41:22,350 >> Εννοιολογικά, το μόνο που καταλήγουν στο κάτω μέρος του αυτό το πράγμα που ονομάζεται στοίβα. 656 00:41:22,350 --> 00:41:25,870 Αλλά αυτό που είναι ενδιαφέρον είναι τώρα, όταν κύρια καλεί μια λειτουργία - 657 00:41:25,870 --> 00:41:28,750 ας υποθέσουμε ότι μια λειτουργία που ονομάζεται foo, μόλις ένα αυθαίρετο όνομα - 658 00:41:28,750 --> 00:41:32,330 αυτό που συμβαίνει είναι κύρια είναι στο κάτω μέρος της στοίβας αυτής της μνήμης? 659 00:41:32,330 --> 00:41:35,680 foo τώρα τίθεται στην κορυφή των κύριων στη μνήμη. 660 00:41:35,680 --> 00:41:40,990 Έτσι, τυχόν τοπικές μεταβλητές που foo έχει καταλήξει είδος εννοιολογικά πάνω από αυτές σε κύρια. 661 00:41:40,990 --> 00:41:47,070 Αν foo καλεί μια άλλη λειτουργία που ονομάζεται μπαρ, οι μεταβλητές καταλήγουν εδώ. 662 00:41:47,070 --> 00:41:50,120 Εάν η γραμμή καλεί κάτι άλλο, εδώ, εδώ, εδώ. 663 00:41:50,120 --> 00:41:53,830 Έτσι, αυτό που είναι ενδιαφέρον σχετικά με την εκτέλεση ενός προγράμματος είναι ότι σας καλούν συναρτήσεις 664 00:41:53,830 --> 00:41:57,750 και όπως αποκαλούν οι λειτουργίες και λειτουργίες, όπως οι λειτουργίες κλήση λειτουργιών, 665 00:41:57,750 --> 00:42:01,470 θα δημιουργηθεί αυτό το σωρό των λειτουργιών στη μνήμη. 666 00:42:01,470 --> 00:42:06,890 Και μόνο μια φορά επιστρέφει λειτουργία να ξεκινήσει να πάρει πίσω αυτή τη μνήμη. 667 00:42:06,890 --> 00:42:10,860 Έτσι, ένας από τους ευκολότερους τρόπους για να ξεμείνει από μνήμη σε ένα πρόγραμμα υπολογιστή 668 00:42:10,860 --> 00:42:14,360 είναι να γράψει λειτουργίες που να μην επιστρέψει ποτέ. 669 00:42:14,360 --> 00:42:18,900 Έτσι, για παράδειγμα, ας αποδείξει τόσο με ένα σκόπιμα λάθη πρόγραμμα. 670 00:42:18,900 --> 00:42:22,230 Επιτρέψτε μου να προχωρήσει και να συμπεριλάβει # , 671 00:42:22,230 --> 00:42:25,000 int main (void), 672 00:42:25,000 --> 00:42:32,940 και πάω να κάνω, ενώ (2> 1), η οποία κατά πάσα πιθανότητα δεν θα αλλάξει ποτέ για μας, 673 00:42:32,940 --> 00:42:37,560 και επιτρέψτε μου να προχωρήσουμε και να κάνουμε τώρα printf. 674 00:42:37,560 --> 00:42:40,700 Στην πραγματικότητα, αυτό πρόκειται να είναι λιγότερο ενδιαφέρουσα οπτικά. Ας το κάνουμε αυτό. 675 00:42:40,700 --> 00:42:50,240 Για int i = 0? I> 0 - ας κάνουμε αυτό το λάθος - i + +. 676 00:42:50,240 --> 00:42:52,720 Και ας μην printf εδώ. Ας πράξη αυτό που κηρύττει. 677 00:42:52,720 --> 00:43:00,190 Ας ρίξουμε μια μέθοδο, εδώ χορωδία κενό, και εμείς θα πούμε int i, 678 00:43:00,190 --> 00:43:06,830 και στη συνέχεια, Πάω να πω printf - όχι, ας κάνουμε αυτό πιο ενδιαφέρουσα. 679 00:43:06,830 --> 00:43:15,790 Ας μην τυπώσει πραγματικά τίποτα καθόλου. Ας κάνουν ακριβώς αυτό: χορός (i). 680 00:43:15,790 --> 00:43:20,390 Εντάξει. Έτσι, αυτό είναι προβληματικό, διότι ο λόγος; 681 00:43:20,390 --> 00:43:23,380 Κάνω αυτό ως πάω γιατί το πρόγραμμα δεν κάνει πραγματικά τίποτα ενδιαφέρον. 682 00:43:23,380 --> 00:43:25,320 >> Αλλά αυτό δεν είναι ο στόχος. 683 00:43:25,320 --> 00:43:29,630 Ο στόχος είναι να γράψετε ένα πρόγραμμα, του οποίου η κύρια λειτουργία κάνει τι, προφανώς; 684 00:43:30,720 --> 00:43:32,860 Καλέστε το ίδιο. Και στην πραγματικότητα, δεν χρειαζόμαστε το βρόχο. 685 00:43:32,860 --> 00:43:37,200 Ας απλοποιήσει ακόμα και αυτό μόνο και μόνο για να μην χάσουμε από τα μάτια του πραγματικά το θεμελιώδες σφάλμα. 686 00:43:37,200 --> 00:43:39,640 Κύρια κλήσεις χορωδία να τραγουδήσει κάποια χορωδία, 687 00:43:39,640 --> 00:43:41,440 τότε έκανα κάτι ηλίθιο και είχα χορωδία Chorus Call 688 00:43:41,440 --> 00:43:43,760 γιατί νόμιζα ότι κάποιος άλλος θα το εφαρμόσουν ίσως, 689 00:43:43,760 --> 00:43:47,210 και τώρα αυτό δεν πρόκειται να συγκεντρώσει ακόμα. Πρέπει να κάνουμε ό, τι; 690 00:43:47,210 --> 00:43:49,970 Χρειάζομαι το πρωτότυπο, θυμάται. 691 00:43:49,970 --> 00:43:56,110 Γι 'αυτό πρέπει να έχουμε εδώ χορωδία άκυρη (int i)? 692 00:43:56,110 --> 00:43:59,210 Έτσι τώρα, αν πάω εδώ κάτω - στην πραγματικότητα, ας χρησιμοποιήσουμε το μεγαλύτερο παράθυρο. 693 00:43:59,210 --> 00:44:01,980 Ας πάμε μπροστά και να κάνουν χορωδία. 694 00:44:01,980 --> 00:44:06,490 Ας πάμε μπροστά και να κάνουν χορωδία. 695 00:44:06,490 --> 00:44:08,370 Η χρήση της αδήλωτης αναγνωριστικό i. 696 00:44:08,370 --> 00:44:12,500 Ω, αυτό ήταν ηλίθιο. Δεν χρειαζόμαστε το επιχείρημα. Ας το κάνουμε αυτό. 697 00:44:12,500 --> 00:44:16,370 Μακάρι να είχε αρχίσει με αυτόν τον τρόπο. Θα ήταν πολύ πιο εύκολο να γράψει το πρόγραμμα. 698 00:44:16,370 --> 00:44:25,590 . Υπάρχει Τώρα ας πάμε πάνω στο παράθυρο του τερματικού μου, επανάληψη Clang, και εδώ πάμε. 699 00:44:25,590 --> 00:44:28,460 Αυτό ήταν πραγματικά γρήγορα. 700 00:44:28,460 --> 00:44:31,150 Τι πραγματικά συνέβη ακριβώς, όμως; 701 00:44:31,150 --> 00:44:33,730 Λοιπόν, τώρα εγώ θα προσθέσω τη γραμμή εκτύπωσης έτσι μπορούμε να δούμε. 702 00:44:33,730 --> 00:44:43,490 Επιτρέψτε μου να πω printf ("είμαι εδώ") - δεν μεταβλητές. Θα το αφήσουμε έτσι. 703 00:44:43,490 --> 00:44:47,480 Επιτρέψτε μου να κάνω επανάληψη. Επιτρέψτε μου επανάληψη χορωδία. 704 00:44:47,480 --> 00:44:57,380 Και ... έλα. Συνεχίστε. 705 00:44:57,380 --> 00:44:59,930 Ως μέρος, γιατί δεν έχει συνετρίβη ακόμα; 706 00:44:59,930 --> 00:45:02,080 Το σφάλμα καταμερισμού που συνέβη πριν από πολύ γρήγορο. 707 00:45:02,080 --> 00:45:06,570 [Ακούγεται ανταπόκριση των φοιτητών] >> Ακριβώς. Γι 'αυτό χρειάζεται χρόνος για να εκτυπώσετε, έτσι δεν είναι; 708 00:45:06,570 --> 00:45:08,610 Χρειάζονται μόνο περισσότερη δουλειά από την πλευρά του υπολογιστή. 709 00:45:08,610 --> 00:45:10,620 Και εκεί είναι: Τμηματοποίηση σφάλμα. 710 00:45:10,620 --> 00:45:12,340 >> Έτσι παρατηρήσετε πόσο γρήγορα τρέχουν προγράμματα. 711 00:45:12,340 --> 00:45:14,130 Αν δεν είστε εκτύπωση κάτι, σούπερ γρήγορο. 712 00:45:14,130 --> 00:45:18,770 Αλλά έχουμε ακόμα αυτό το σφάλμα κατάτμησης, επειδή ό, τι συνέβαινε; 713 00:45:18,770 --> 00:45:21,210 Εάν σκέφτεστε για το πώς η μνήμη του υπολογιστή σας είναι που έξω, 714 00:45:21,210 --> 00:45:28,740 αυτό συμβαίνει να είναι το κύριο, αλλά εδώ ας την ονομάσουμε ακριβώς αυτό το χορό, και ας την ονομάσουμε αυτή την χορωδία. 715 00:45:28,740 --> 00:45:34,550 Και τώρα αν κάνω αισθητική μου δικαίωμα, αυτό ακριβώς πρόκειται να πω χορωδία, χορωδία, χορωδία, 716 00:45:34,550 --> 00:45:40,550 χορός, χορός, χορός, χορός, nauseum αγγελία, και τελικά, τι πρόκειται να συμβεί; 717 00:45:40,550 --> 00:45:45,630 Αν η μεγάλη εικόνα, στην κυριολεξία, είναι αυτό, τι ακριβώς συμβαίνει εννοιολογικά; 718 00:45:46,520 --> 00:45:48,630 Οι υπερβάσεις στοίβα του σωρού. 719 00:45:48,630 --> 00:45:51,940 Ή, ακόμα χειρότερα, μπορείτε πάντα απλά υπέρβαση, συμπεριλαμβανομένου του τμήματος κειμένου, 720 00:45:51,940 --> 00:45:54,590 η οποία είναι η 0s και 1s που αντιπροσωπεύουν το πρόγραμμά σας. 721 00:45:54,590 --> 00:45:57,080 Εν ολίγοις, αυτό είναι απλά σούπερ, σούπερ κακός. 722 00:45:57,080 --> 00:45:58,830 Το πρόγραμμά σας έχει κινηθεί σπειροειδώς εκτός ελέγχου. 723 00:45:58,830 --> 00:46:01,220 Είσαι με τον τρόπο περισσότερη μνήμη από ό, τι προορίζεται 724 00:46:01,220 --> 00:46:03,960 όλα εξαιτίας ενός ηλίθιου λάθος σε αυτή την περίπτωση, 725 00:46:03,960 --> 00:46:08,040 ή στην περίπτωση αυτή μια πολύ σκόπιμα κάνει η ίδια η λειτουργία κλήσης. 726 00:46:08,040 --> 00:46:09,500 Τώρα, αυτό δεν είναι όλα άσχημα. 727 00:46:09,500 --> 00:46:13,800 Λειτουργίες αυτοαποκαλούνται έχει πραγματικά μεγάλη δύναμη, όταν μπορείτε να το χρησιμοποιήσετε σωστά. 728 00:46:13,800 --> 00:46:15,800 Δεν έχω χρησιμοποιήσει σωστά εδώ. 729 00:46:15,800 --> 00:46:19,780 Έτσι, αυτό δεν είναι όλα άσχημα, αλλά το γεγονός ότι ποτέ δεν έχω πραγματικά να σταματήσει τον εαυτό μου κλήση 730 00:46:19,780 --> 00:46:23,520 Είναι μια θεμελιώδης αδυναμία εδώ αυτού του προγράμματος. 731 00:46:23,520 --> 00:46:26,400 Έτσι, όταν θα πάμε με όλα αυτά; Τι πραγματικά συμβαίνει; 732 00:46:26,400 --> 00:46:30,340 Όταν καλείτε τη λειτουργία αύξησης, όπως κάναμε σε αυτά τα παραδείγματα, 733 00:46:30,340 --> 00:46:33,420 Έχω μια αξία όπως 1 που περνάω μέσα 734 00:46:33,420 --> 00:46:37,570 Περνώ σε ένα αντίγραφο του αριθμού 1, έτσι συμβαίνουν τα ακόλουθα. 735 00:46:37,570 --> 00:46:44,240 Ας πάμε στο παράδειγμα αύξηση, αυτός ο τύπος δεξιά εδώ. 736 00:46:44,240 --> 00:46:46,870 Εδώ είναι τι πραγματικά συμβαίνει. 737 00:46:46,870 --> 00:46:53,400 Όταν καλώ αύξηση και περνώ στο x, εικονογραφικά, τι συμβαίνει εδώ είναι αυτό. 738 00:46:53,400 --> 00:46:59,520 >> Αν έχω την τιμή 1 αποθηκεύονται εδώ και καλώ πραγματικά προσαύξηση, 739 00:46:59,520 --> 00:47:04,330 η οποία καλείται τώρα χορωδία - το iPad μου είναι αποτίναξη εδώ. 740 00:47:04,330 --> 00:47:09,760 Ας το ονομάσουμε αυτό το βήμα, και δεν ξέρουμε τι είναι αυτό επόμενη λειτουργία θα είναι. 741 00:47:09,760 --> 00:47:14,840 Έτσι, αυτό που πραγματικά συμβαίνει είναι κάπου εδώ στην κύρια Έχω ένα κομμάτι της μνήμης 742 00:47:14,840 --> 00:47:17,000 δηλαδή να αποθηκεύει τον αριθμό 1. 743 00:47:17,000 --> 00:47:19,380 Όταν καλώ αύξηση, είμαι χρησιμοποιώντας ένα άλλο κομμάτι της μνήμης, 744 00:47:19,380 --> 00:47:21,230 αλλά τώρα έχω το αντίγραφο 1. 745 00:47:21,230 --> 00:47:26,660 Όταν αυξήσετε αυτή την τιμή, αυτό γίνεται 2, 746 00:47:26,660 --> 00:47:30,560 αλλά τότε τι θα συμβεί το συντομότερο επιστρέφει αύξηση; 747 00:47:30,560 --> 00:47:33,630 Αυτή η μνήμη παίρνει μόλις παραδοθεί πίσω στο λειτουργικό σύστημα, 748 00:47:33,630 --> 00:47:37,450 πράγμα που σημαίνει ό, τι έχω κάνει δεν είναι τίποτα χρήσιμο. 749 00:47:37,450 --> 00:47:43,120 Το 1 που περιλαμβανόταν αρχικά στην κύρια εξακολουθεί να είναι πραγματικά εκεί. 750 00:47:43,120 --> 00:47:44,890 Έτσι, όταν θα πάμε με αυτό; 751 00:47:44,890 --> 00:47:49,770 Αποδεικνύεται ότι στη μνήμη έχετε αυτό το back-to-back ακολουθία των bytes 752 00:47:49,770 --> 00:47:53,050 ότι μπορείτε να βάλετε τα πράγματα σε, και αποδεικνύεται ότι έχουμε ήδη δει κάτι 753 00:47:53,050 --> 00:47:55,390 που περιλαμβάνει την τοποθέτηση πράγματα πλάτη με πλάτη με πλάτη με πλάτη. 754 00:47:55,390 --> 00:47:59,860 Τι είναι μια σειρά με βάση την εβδομάδα 1 και πλέον εβδομάδα 2; 755 00:48:00,020 --> 00:48:01,980 Είναι απλά μια συλλογή από χαρακτήρες. 756 00:48:01,980 --> 00:48:04,310 Έτσι αποδεικνύεται ακριβώς όπως μπορείτε να βάλετε τους αριθμούς στη μνήμη, 757 00:48:04,310 --> 00:48:06,990 Ομοίως μπορείτε να βάλετε χαρακτήρες στη μνήμη. 758 00:48:06,990 --> 00:48:10,530 Και τη στιγμή που θα αρχίσει η εφαρμογή τους χαρακτήρες στη μνήμη πλάτη με πλάτη με πλάτη με πλάτη, 759 00:48:10,530 --> 00:48:13,620 αποδεικνύεται ότι η χρήση της πιο απλά πράγματα, όπως ένα για βρόχο ή ένα βρόχο, ενώ, 760 00:48:13,620 --> 00:48:17,170 μπορούμε να επαναλάβει από αριστερά προς τα δεξιά κατά τη διάρκεια των χαρακτήρων σε μια συμβολοσειρά 761 00:48:17,170 --> 00:48:20,600 μασάζ και να αρχίσει τους σε εντελώς διαφορετικούς χαρακτήρες - 762 00:48:20,600 --> 00:48:23,370 θα μπορούσε να γίνει ένα β, β θα μπορούσε να γίνει γ - 763 00:48:23,370 --> 00:48:27,780 έτσι ώστε τελικά, μπορούμε να πάρουμε μια αγγλική φράση που κάνει πραγματικά αίσθηση 764 00:48:27,780 --> 00:48:30,310 και να μετατρέψει το καθένα από τα έγγραφα αυτά, ένα κάθε φορά 765 00:48:30,310 --> 00:48:34,400 περπατώντας μέσα από τη μνήμη του υπολογιστή μας αριστερά προς τα δεξιά στην πραγματικότητα κρυπτογράφηση. 766 00:48:34,400 --> 00:48:35,810 Έτσι, ας ρίξουμε πέντε λεπτά διάλειμμα μας εδώ, 767 00:48:35,810 --> 00:48:40,730 και όταν θα έρθει πίσω, θα αρχίσουμε αυτή τη διαδικασία κρυπτογράφησης πληροφοριών. 768 00:48:42,020 --> 00:48:43,520 >> Εντάξει. 769 00:48:43,520 --> 00:48:48,070 Πριν βουτήξετε σε κάποια crypto και αυτά τα πράγματα που ονομάζονται συστοιχίες, 770 00:48:48,070 --> 00:48:51,470 επιτρέψτε μου να σταματήσουμε για οποιαδήποτε απορία, γιατί νιώθω ότι πραγματικά το είδος των μπερδεμένη 771 00:48:51,470 --> 00:48:54,080 ορισμένα από αυτά τα θέματα. Ας ορίσει τώρα, αν μπορούμε. 772 00:48:54,080 --> 00:48:58,700 Εμείς απλά μίλησε για την επιστροφή αξίες, μιλήσαμε για τα επιχειρήματα, 773 00:48:58,700 --> 00:49:03,250 και μιλήσαμε για την έννοια αυτή, η οποία θα επανέλθουμε στις επόμενες εβδομάδες, 774 00:49:03,250 --> 00:49:08,720 προβολή της μνήμης ως ένα σωρό από αυτούς τους δίσκους στοιβάζονται, να το πω έτσι, 775 00:49:08,720 --> 00:49:12,660 από τον πυθμένα επάνω, έτσι ώστε κάθε δίσκος που παίρνει τοποθετούνται στη στοίβα 776 00:49:12,660 --> 00:49:16,530 αντιπροσωπεύει μια λειτουργία που είναι σήμερα ονομάζεται. 777 00:49:17,900 --> 00:49:20,260 Οποιεσδήποτε ερωτήσεις; 778 00:49:20,260 --> 00:49:22,640 Επιτρέψτε μου να κάνω μια ερώτηση εδώ. 779 00:49:22,640 --> 00:49:27,890 Επιτρέψτε μου να απλοποιήσει την πλάτη σε ό, τι ήταν πριν από μερικές από τις προηγούμενες Q & A. μας 780 00:49:27,890 --> 00:49:35,570 Το γεγονός ότι η αύξηση έχει ανοιχτή παρένθεση, int αριθμό, κλειστή παρένθεση - 781 00:49:35,570 --> 00:49:39,110 τι int αριθμός αντιπροσωπεύει; 782 00:49:39,110 --> 00:49:42,790 [Φοιτητής] Ένα επιχείρημα. >> Ένα επιχείρημα. Εντάξει. Αλλά αυτό είναι ένα επιχείρημα; 783 00:49:42,790 --> 00:49:46,370 [Ακούγεται ανταπόκριση των φοιτητών] >> Τι είναι αυτό; >> [Φοιτητής] Κάτι που θα περάσει μέσα 784 00:49:46,370 --> 00:49:49,940 Εντάξει, έτσι κάτι που θα περάσει μέσα Και γενικότερα, είναι απλά η είσοδος. 785 00:49:49,940 --> 00:49:52,450 Αν έγραφαν μια λειτουργία και το σκοπό της εν λόγω λειτουργία στη ζωή 786 00:49:52,450 --> 00:49:55,770 είναι να κάνουμε κάτι λίγο διαφορετικό κάθε φορά που το χρησιμοποιείτε, 787 00:49:55,770 --> 00:50:00,110 τότε ο μόνος τρόπος για να συμβεί αυτό πραγματικά φαίνεται να είναι για να καταθέσουν τις απόψεις τους 788 00:50:00,110 --> 00:50:03,510 έτσι ώστε να μπορεί να κάνει κάτι διαφορετικό με την είσοδο κάθε φορά. 789 00:50:03,510 --> 00:50:06,650 >> Έτσι, θα πρέπει να καθορίσετε δύο πράγματα, όταν μια συνάρτηση παίρνει είσοδο. 790 00:50:06,650 --> 00:50:09,590 Θα πρέπει να καθορίσετε το όνομα που θέλετε να δώσετε στη συγκεκριμένη είσοδο 791 00:50:09,590 --> 00:50:12,700 αποκλειστικά για τη δική σας ευκολία, έτσι ώστε να μπορείτε να ανατρέχετε σε αυτό 792 00:50:12,700 --> 00:50:16,540 στη λειτουργία που εσείς οι ίδιοι γράφουν, όπως έκανα εδώ στη γραμμή 32. 793 00:50:16,540 --> 00:50:20,800 Αλλά θα πρέπει επίσης να καθορίσετε το είδος, γιατί το C είναι μια γλώσσα προγραμματισμού 794 00:50:20,800 --> 00:50:25,940 που απαιτεί μόνο ότι αν θέλετε μια μεταβλητή, θα πρέπει να πείτε στον υπολογιστή τι είδους δεδομένα είναι, 795 00:50:25,940 --> 00:50:30,200 σε μεγάλο μέρος έτσι ώστε να γνωρίζει πόσα κομμάτια να κατανείμει για την μεταβλητή 796 00:50:30,200 --> 00:50:33,020 επειδή θα μπορούσε να είναι 6 - συγνώμη, δεν θα είναι 6. 797 00:50:33,020 --> 00:50:37,080 Μπορεί να είναι 16, μπορεί να είναι 8, μπορεί να είναι 32, ακόμα και 64, 798 00:50:37,080 --> 00:50:39,130 αλλά ο υπολογιστής πρέπει να γνωρίζει. 799 00:50:39,130 --> 00:50:43,180 Τώρα, η int στην αριστερή πλευρά αντιπροσωπεύει αυτό, αντίθετα; 800 00:50:46,350 --> 00:50:48,850 [Ακούγεται ανταπόκριση των φοιτητών] >> Τι είναι αυτό; >> [Φοιτητής] Τύπος της λειτουργίας. 801 00:50:48,850 --> 00:50:53,610 Ο τύπος της λειτουργίας και, πιο συγκεκριμένα, τον τύπο της εξόδου της. Δεξιά. 802 00:50:53,610 --> 00:50:57,380 Έτσι, ενώ το πράγμα σε παρένθεση αντιπροσωπεύει είσοδο του, αν υπάρχουν, 803 00:50:57,380 --> 00:50:59,660 το πράγμα προς τα αριστερά αντιπροσωπεύει την παραγωγή της. 804 00:50:59,660 --> 00:51:03,530 Και σε αυτή την περίπτωση, προφανώς αύξηση επιστρέφει ένα int, 805 00:51:03,530 --> 00:51:07,690 int και έτσι είναι ο τύπος επιστροφής αυτής της λειτουργίας. 806 00:51:07,690 --> 00:51:09,340 Τι σημαίνει να επιστρέφουν; 807 00:51:09,340 --> 00:51:15,090 Κυριολεκτικά, μπορείτε να χρησιμοποιήσετε την επιστροφή λέξη-κλειδί και στη συνέχεια, αν αυτό που επιστρέφουν 808 00:51:15,090 --> 00:51:18,600 στα δεξιά του τη λέξη-κλειδί είναι ένας ακέραιος, 809 00:51:18,600 --> 00:51:21,660 τότε αυτό είναι πράγματι σύμφωνη με ό, τι έχουμε υποσχεθεί. 810 00:51:21,660 --> 00:51:26,410 Δεν θα μπορούσε να κάνει κάτι τέτοιο - γειά σου, τον κόσμο - γιατί αυτό είναι ένα string. 811 00:51:26,410 --> 00:51:28,860 >> Προφανώς, δεν είναι ένας ακέραιος. 812 00:51:28,860 --> 00:51:33,140 Έτσι, με λίγα λόγια, το βάρος είναι πραγματικά για μας, ο προγραμματιστής, να είναι συγκεκριμένες 813 00:51:33,140 --> 00:51:37,770 ως προς το τι είμαστε και να επιστρέφουν στη συνέχεια πραγματικά να πάμε για την επιστροφή του. 814 00:51:37,770 --> 00:51:43,440 Το πλαίσιο είναι εδώ τώρα ότι η μνήμη του υπολογιστή σας είναι ένα gigabyte, 2 gigabyte - 815 00:51:43,440 --> 00:51:45,920 ό, τι - ίσως είναι περισσότερο, ίσως είναι λιγότερο, 816 00:51:45,920 --> 00:51:49,050 αλλά ο υπολογιστής βλέπει ως έχουν διαφορετικά τμήματα. 817 00:51:49,050 --> 00:51:51,200 Κάτι πηγαίνει εκεί κάτω, κάτι άλλο πάει μέχρι εκεί, 818 00:51:51,200 --> 00:51:54,290 διαφορετικά πράγματα πηγαίνει στη μέση, και σήμερα έχουμε μόλις αρχίσει λέει την ιστορία, 819 00:51:54,290 --> 00:51:56,340 αλλά θα επανέλθω σε αυτό την πάροδο του χρόνου. 820 00:51:56,340 --> 00:51:59,980 Προς το παρόν, το μόνο κομμάτι της μνήμης που πραγματικά νοιάζονται για το τμήμα κειμένου 821 00:51:59,980 --> 00:52:03,360 γιατί αυτό αντιπροσωπεύει μόλις το 0s και 1s ότι έχει Clang εξάγεται. 822 00:52:03,360 --> 00:52:06,050 Έτσι, όταν εκτελείτε μια εντολή στο πληκτρολόγιο, όπως a.out 823 00:52:06,050 --> 00:52:09,110 ή κάνετε διπλό κλικ σε ένα εικονίδιο για Mac OS ή Windows, 824 00:52:09,110 --> 00:52:11,880 το πρόγραμμά σας είναι φορτωμένο από το σκληρό σας δίσκο στη μνήμη RAM 825 00:52:11,880 --> 00:52:16,330 και αυτό είναι plopped στην κορυφή της μνήμης RAM του υπολογιστή σας, να το πω έτσι. 826 00:52:16,330 --> 00:52:20,450 Εν τω μεταξύ, το πρόγραμμά σας αρχίζει να τρέχει και παίρνει κύρια καλείται 827 00:52:20,450 --> 00:52:23,640 στο πρόγραμμα που έγραψε ή το πρόγραμμα Microsoft ή η Apple έγραψε, 828 00:52:23,640 --> 00:52:27,860 οποιαδήποτε από τις τοπικές μεταβλητές της καταλήγουν εκεί κάτω στο κάτω μέρος της μνήμης του υπολογιστή σας. 829 00:52:27,860 --> 00:52:33,230 Αλλά αν κύριες κλήσεις μια άλλη λειτουργία που η ίδια έχει μεταβλητές ή επιχειρήματα, καταλήγουν πάνω από αυτό. 830 00:52:33,230 --> 00:52:36,680 Και αν αυτή η λειτουργία απαιτεί κάτι, που καταλήγουν πάνω από αυτό, από πάνω, από πάνω. 831 00:52:36,680 --> 00:52:41,460 >> Και μόνο μια φορά γίνεται η λειτουργία δεν εκτελεί η στοίβα των δίσκων, να το πω έτσι, 832 00:52:41,460 --> 00:52:43,240 αρχίζουν να παίρνουν όλο και πιο χαμηλά. 833 00:52:43,240 --> 00:52:48,250 Και αυτό είναι ό, τι τότε, με λίγα λόγια, εξηγεί γιατί όταν σας καλούν κύβο 834 00:52:48,250 --> 00:52:51,550 ή να καλέσετε αύξηση, είστε περνώντας σε ένα αντίγραφο του αξία. 835 00:52:51,550 --> 00:52:55,520 Και τι σημαίνει αυτό εικονογραφικά είναι ότι είστε γραπτώς στην κυριολεξία τον αριθμό 1 836 00:52:55,520 --> 00:53:00,460 σε ένα άλλο μέρος της μνήμης, αλλάζοντας ότι 1 ως 2 στην περίπτωση της προσαύξησης 837 00:53:00,460 --> 00:53:04,820 ή σε ένα 8 στην περίπτωση του κύβου και στη συνέχεια ρίχνοντας ότι η μνήμη μακριά 838 00:53:04,820 --> 00:53:09,140 μόλις η αύξηση των αποδόσεων ή λειτουργία κύβου. Ερώτηση. 839 00:53:09,140 --> 00:53:12,900 [Φοιτητής] Όταν οι καθολικές μεταβλητές αποθηκεύονται; 840 00:53:12,900 --> 00:53:18,100 Οι παγκόσμιες μεταβλητές αποθηκεύονται σε ό, τι είναι σήμερα ονομάζεται αρχικοποίηση των δεδομένων ή δεν έχει προετοιμαστεί δεδομένα, 841 00:53:18,100 --> 00:53:21,920 η διαφορά είναι αν έχετε μια καθολική μεταβλητή και να αναθέσει αμέσως μια τιμή 842 00:53:21,920 --> 00:53:24,640 με το σύμβολο του ίσον, καταλήγει στην κορυφή εκεί, 843 00:53:24,640 --> 00:53:29,200 και αν πω int x? χωρίς αξία, που καταλήγει σε ελαφρώς χαμηλότερα RAM 844 00:53:29,200 --> 00:53:31,710 απλά με την σύμβαση. 845 00:53:31,710 --> 00:53:34,940 Άλλες ερωτήσεις; Εντάξει. 846 00:53:34,940 --> 00:53:37,340 Έτσι, αυτή η εικόνα θα επανέλθει, όπως έχουμε πιο ισχυρό 847 00:53:37,340 --> 00:53:39,170 με ό, τι μπορούμε να κάνουμε με τον υπολογιστή, 848 00:53:39,170 --> 00:53:42,720 αλλά για τώρα, ας ρίξουμε μια σύντομη εισαγωγή στην κρυπτογραφία, 849 00:53:42,720 --> 00:53:46,080 ένα συγκεκριμένο τύπο κρυπτογραφίας που δεν λύνει όλα τα προβλήματα του κόσμου 850 00:53:46,080 --> 00:53:47,720 αλλά δεν λύσει μερικά από αυτά. 851 00:53:47,720 --> 00:53:51,700 Στην περίπτωση αυτή εδώ, έχουμε κάτι που ονομάζεται μυστικό κλειδί κρυπτογράφησης. 852 00:53:51,700 --> 00:53:56,410 Μυστική-κλειδί κρυπτογράφησης, όπως υποδηλώνει το όνομα, προέρχεται από την ασφάλεια της ένα μυστικό. 853 00:53:56,410 --> 00:54:00,690 >> Για παράδειγμα, αν ήσασταν πίσω στο σχολείο και θα περνούσαν ένα μικρό μυστικό ερωτικό γράμμα 854 00:54:00,690 --> 00:54:04,850 για το αγόρι ή το κορίτσι που ήταν σύνθλιψη στην, αν θέλετε να περάσει μέσα από αυτό το σημείωμα το κοινό, 855 00:54:04,850 --> 00:54:08,380 τότε μάλλον δεν θα γράψω ένα τέτοιο σημείωμα στα αγγλικά ή όποια και αν είναι η μητρική σας γλώσσα είναι. 856 00:54:08,380 --> 00:54:13,340 Αντίθετα, μπορείτε να το κρυπτογραφήσετε ή ίσως απλά να τους στείλετε ένα μήνυμα κειμένου αυτές τις μέρες. 857 00:54:13,340 --> 00:54:15,460 Αλλά στην πραγματικότητα μπορεί να περάσει ένα σημείωμα σε όλη την τάξη. 858 00:54:15,460 --> 00:54:18,700 Και για να το κάνουμε αυτό με ασφάλεια με τέτοιο τρόπο που οι φίλοι σας και ο δάσκαλος 859 00:54:18,700 --> 00:54:22,650 Δεν ξέρω τι είστε γραπτώς, μπορεί να καταλήξει σε ένα αρκετά απλό αλγόριθμο, 860 00:54:22,650 --> 00:54:25,920 νέοι κι αν θα μπορούσε να είναι, για να ανακατώσει μόνο τις λέξεις. 861 00:54:25,920 --> 00:54:28,130 Έτσι, αντί της γραφής ένας μπορεί να γράψει β, 862 00:54:28,130 --> 00:54:30,220 αντί του β μπορείτε να γράψετε γ, 863 00:54:30,220 --> 00:54:32,140 αντί του γ μπορείτε να γράψετε δ, και ούτω καθεξής. 864 00:54:32,140 --> 00:54:34,360 Ή θα μπορούσε να καταλήξει σε μια πιο εξελιγμένη μετάφραση 865 00:54:34,360 --> 00:54:36,720 γραμμάτων σε διαφορετικά γράμματα. 866 00:54:36,720 --> 00:54:39,740 Όμως, τα αλιεύματα είναι το αγόρι ή κορίτσι, στους οποίους στέλνετε αυτή τη σημείωση 867 00:54:39,740 --> 00:54:45,020 πρέπει να ξέρει κάτι, το οποίο είναι αυτό, προφανώς; >> [Φοιτητής] Τι στέλνετε. 868 00:54:45,020 --> 00:54:49,720 Ποιο είναι το μυστικό σας, όπως και ό, τι είναι η χαρτογράφηση μεταξύ ενός και του β και του γ και d's. 869 00:54:49,720 --> 00:54:54,650 Είναι προσθέτοντας μόλις 1 σε κάθε ένα από τα γράμματα για να πάει από το Α στο Β, b για να γ? 870 00:54:54,650 --> 00:54:56,670 Είναι πιο περίπλοκο από αυτό; 871 00:54:56,670 --> 00:55:01,540 >> Έτσι και φλερτ σας θα πρέπει να έχουν αυτό το μυστικό των πληροφοριών, 872 00:55:01,540 --> 00:55:03,190 αλλά υπάρχει ένα είδος catch-22 εδώ. 873 00:55:03,190 --> 00:55:06,830 Αν αυτή είναι η πρώτη φορά που στέλνετε αυτό το γράμμα αγάπης μέσα στην τάξη, 874 00:55:06,830 --> 00:55:10,720 πώς είναι ότι το αγόρι ή το κορίτσι πρόκειται να ξέρει ποιο είναι το μυστικό ακόμα; 875 00:55:10,720 --> 00:55:13,930 Έτσι μυστικό κλειδί κρυπτογράφησης δεν λύνει όλα τα προβλήματα του κόσμου, 876 00:55:13,930 --> 00:55:16,320 και υπάρχει πραγματικά μια σχέση εδώ ότι θα έρθει πίσω στο προς το τέλος του εξαμήνου. 877 00:55:16,320 --> 00:55:25,110 Ομοίως, δεν περισσότεροι από εμάς δεν γνωρίζουμε κάποιον που δουλεύει, για παράδειγμα, στο Amazon.com, 878 00:55:25,110 --> 00:55:28,190 και όμως πολλοί από εμάς έχουν αγοράσει πιθανώς τα πράγματα στο Amazon.com, 879 00:55:28,190 --> 00:55:31,990 και έχουμε διδαχθεί να υποθέσουμε ότι αυτές οι συναλλαγές ηλεκτρονικού εμπορίου είναι ασφαλείς. 880 00:55:31,990 --> 00:55:36,470 Η διεύθυνση URL λέει πιθανώς https, υπάρχει ίσως ένα ανόητο μικρό εικονίδιο λουκέτου κάπου, 881 00:55:36,470 --> 00:55:39,930 υπάρχει κάποιο είδος της κρυπτογραφίας διασφάλιση των στοιχείων της πιστωτικής σας κάρτας 882 00:55:39,930 --> 00:55:42,160 ανάμεσα σε εσάς και το Amazon.com. 883 00:55:42,160 --> 00:55:45,430 Και όμως, αν κρυπτογραφία περιλαμβάνει τη γνώση κάποιο μυστικό 884 00:55:45,430 --> 00:55:48,620 και ακόμη δεν ξέρω κανέναν στο Amazon και δεν έχω τοποθετημένα σίγουρα κάθε είδους μυστικό 885 00:55:48,620 --> 00:55:52,710 με κάποιον στο Amazon, πώς είναι ο υπολογιστής μου ή browser μου το κάνετε αυτό; 886 00:55:52,710 --> 00:55:55,720 Αποδεικνύεται ότι υπάρχει άλλου είδους κρυπτογράφηση εντελώς ότι να λύσει αυτό το πρόβλημα. 887 00:55:55,720 --> 00:55:57,670 Αλλά για σήμερα, θα επικεντρωθεί στην απλή 888 00:55:57,670 --> 00:56:00,290 όπου μπορείτε να κανονίσετε εκ των προτέρων να γνωρίζει κάποιο μυστικό 889 00:56:00,290 --> 00:56:03,760 σαν +1 ή κάποια αντιστοίχιση μεταξύ ενός και b. 890 00:56:03,760 --> 00:56:05,840 Και η διαδικασία της κρυπτογραφίας περιλαμβάνει γενικά αυτό. 891 00:56:05,840 --> 00:56:08,620 Έχετε κάποια μορφή απλού κειμένου, που απεικονίζονται εδώ στα αριστερά, 892 00:56:08,620 --> 00:56:12,930 μπορείτε να εκτελέσετε μέσα από κάποιο είδος του αλγορίθμου ή διαδικασία για την κρυπτογράφηση το - 893 00:56:12,930 --> 00:56:15,100 Ίσως αυτό είναι απλά ένα γίνεται β, γ γίνεται β - 894 00:56:15,100 --> 00:56:17,490 και τότε θα καταλήξετε με ciphertext. 895 00:56:17,490 --> 00:56:20,380 Εν τω μεταξύ, μία φορά φλερτ σας λάβει αυτό το μυστικό σημείωμα, 896 00:56:20,380 --> 00:56:24,200 αυτός ή αυτή πρέπει να είναι στη συνέχεια να αποκρυπτογραφήσει με γενικά αναστροφή της αλγόριθμος 897 00:56:24,200 --> 00:56:27,190 έτσι ώστε να πάρει πίσω το απλό κείμενο. 898 00:56:27,190 --> 00:56:28,960 Υπάρχουν φυσικά ενσαρκώσεις του αυτό. 899 00:56:28,960 --> 00:56:31,680 >> Για παράδειγμα, αυτό είναι ένα μικρό δακτύλιο αποκωδικοποιητή μυστικό, 900 00:56:31,680 --> 00:56:35,110 και αυτό είναι ένας δακτύλιος με την έννοια ότι υπάρχουν δύο καντράν εδώ. 901 00:56:35,110 --> 00:56:38,490 Στην εξωτερική περιφέρεια του αυτό το πράγμα, υπάρχει γράμματα A έως Z, 902 00:56:38,490 --> 00:56:40,340 αν είστε σε τυχαία σειρά, 903 00:56:40,340 --> 00:56:42,880 και στο εσωτερικό, δεν υπάρχει στην πραγματικότητα ορισμένοι αριθμοί 904 00:56:42,880 --> 00:56:46,620 έτσι ώστε με αυτό το δαχτυλίδι, μπορείτε να ενεργοποιήσετε το είδος το εξωτερικό, αλλά όχι το εσωτερικό 905 00:56:46,620 --> 00:56:49,140 προκειμένου να παρατάξει τους αριθμούς με γράμματα. 906 00:56:49,140 --> 00:56:53,020 Από μια ταινία που ονομάζεται Μια ιστορία των Χριστουγέννων, θα δείτε ότι λίγο Ralphie 907 00:56:53,020 --> 00:56:58,000 ήταν τόσο πρόθυμοι να καταλάβω ποιο είναι το μυστικό μήνυμα Little Orphan Annie ήταν να τον 908 00:56:58,000 --> 00:57:02,570 που είχε κοινοποιηθεί, νομίζω, με τη μορφή των αριθμητικών μηνύματα σε ένα κουτί δημητριακών 909 00:57:02,570 --> 00:57:07,220 και θα έπρεπε να συσσωρεύονται όλα τα μικρά φύλλα που ήρθαν στο κουτί δημητριακών, 910 00:57:07,220 --> 00:57:09,770 θα έπρεπε να τους mail στο, θα έπρεπε να πάρει πίσω το μυστικό δαχτυλίδι αποκωδικοποιητή 911 00:57:09,770 --> 00:57:13,910 έτσι ώστε να μπορείτε τελικά να καταλάβω τι είναι η χαρτογράφηση μεταξύ γραμμάτων και αριθμών 912 00:57:13,910 --> 00:57:15,550 ή γράμματα και γράμματα. 913 00:57:15,550 --> 00:57:19,520 Πώς σε έναν υπολογιστή μπορούμε να πάμε για την εφαρμογή ή εκπροσωπούν τα πράγματα όπως αυτό; 914 00:57:19,520 --> 00:57:22,560 Χρειαζόμαστε έναν τρόπο να εκφράσουν τους εαυτούς μας λίγο πιο ευέλικτα 915 00:57:22,560 --> 00:57:25,080 από τις μεταβλητές μας μέχρι στιγμής επέτρεψαν. 916 00:57:25,080 --> 00:57:29,000 Είχαμε ints, είχαμε χαρακτήρες, είχαμε άρματα και δίκλινα και μερικά άλλα, 917 00:57:29,000 --> 00:57:34,200 αλλά αυτά είναι μεμονωμένα κομμάτια της μνήμης που πραγματικά δεν μας επιτρέπουν να εκφράσουν τα πράγματα 918 00:57:34,200 --> 00:57:36,440 όπως λέξεις και φράσεις και φράσεις. 919 00:57:36,440 --> 00:57:38,630 Πράγματι, έχουμε τέτοιες ονομάζεται χορδές πράγματα, 920 00:57:38,630 --> 00:57:42,660 αλλά υποσχόμαστε ότι αυτό είναι πραγματικά ακριβώς μια απλοποίηση στη βιβλιοθήκη CS50 921 00:57:42,660 --> 00:57:45,540 ότι είμαστε προτίθενται να φλούδα πίσω. 922 00:57:45,540 --> 00:57:47,500 Κι έτσι ας αρχίσουμε να το κάνουμε αυτό εδώ. 923 00:57:47,500 --> 00:57:49,840 Επιτρέψτε μου να προχωρήσει και να ανοίξει ένα αρχείο - 924 00:57:49,840 --> 00:57:54,100 όλα αυτά τα αρχεία είναι διαθέσιμα, ως συνήθως, σε απευθείας σύνδεση - που ονομάζεται array.c 925 00:57:54,100 --> 00:57:58,960 για να λύσει ένα πρόβλημα που σχετίζεται με χορδές, αλλά ότι δίνει μια εικόνα εδώ 926 00:57:58,960 --> 00:58:01,520 για το πώς μπορούμε να χρησιμοποιήσουμε κάτι που ονομάζεται μια σειρά. 927 00:58:01,520 --> 00:58:04,050 >> Ένας πίνακας είναι ένας τύπος δεδομένων. 928 00:58:04,050 --> 00:58:10,730 Είναι ένα είδος της μεταβλητής του είδους που έχει πολλά μικρότερα τύπους δεδομένων μέσα από το 929 00:58:10,730 --> 00:58:12,680 πλάτη με πλάτη με πλάτη με πλάτη. 930 00:58:12,680 --> 00:58:16,980 Έτσι, για παράδειγμα, αν θέλαμε να γράψει ένα μικρό πρόγραμμα που σας δίνει μέσο όρο κουίζ σας 931 00:58:16,980 --> 00:58:19,780 για μια σειρά μαθημάτων, όπως 50 που έχει 2 κουίζ, 932 00:58:19,780 --> 00:58:23,450 θα μπορούσε πολύ εύκολα να γράψω αυτό το πρόγραμμα που βασίζεται ακόμα σε μερικά από υλικό της περασμένης εβδομάδας 933 00:58:23,450 --> 00:58:28,830 με τη χρήση GetInt και ένα ζευγάρι των μεταβλητών: int quiz1, int quiz2. 934 00:58:28,830 --> 00:58:30,550 Και είναι αρκετά απλή. 935 00:58:30,550 --> 00:58:33,500 Είναι ίσως 10, 20 γραμμές κώδικα max για την εφαρμογή ενός προγράμματος 936 00:58:33,500 --> 00:58:38,940 που ζητά από το χρήστη για 2 αποτελέσματα κουίζ και στη συνέχεια υπολογίζει το μέσο όρο τους 937 00:58:38,940 --> 00:58:42,020 με την προσθήκη τους μαζί, διαιρώντας με 2, και στη συνέχεια την εκτύπωση των αποτελεσμάτων. 938 00:58:42,020 --> 00:58:46,400 Θα μπορούσαμε να κάνουμε ότι κατά πάσα πιθανότητα αρκετά εύκολα τώρα μετά από κάποιο αριθμό λεπτών. 939 00:58:46,400 --> 00:58:49,450 Αλλά το πρόβλημα είναι ότι ας υποθέσουμε ότι το 50 είχε 3 ή 4 κουίζ. 940 00:58:49,450 --> 00:58:52,830 Ας υποθέσουμε ότι θέλετε να χρησιμοποιήσετε το ίδιο πρόγραμμα για μια τάξη που είχε εβδομαδιαίο κουίζ. 941 00:58:52,830 --> 00:58:55,100 Σκεφτείτε για μια κατηγορία που έχει εβδομαδιαίο κουίζ. 942 00:58:55,100 --> 00:58:58,840 Αν υπάρχει 16 ή έτσι εβδομάδες σε ένα εξάμηνο, τώρα έχετε 16 μεταβλητές: 943 00:58:58,840 --> 00:59:03,030 int quiz1, int quiz2, int quiz3, int quiz4. 944 00:59:03,030 --> 00:59:06,870 Μόλις αρχίσετε να βλέπετε αυτή την απόλυση, η αντιγραφή και επικόλληση του κώδικα, 945 00:59:06,870 --> 00:59:09,810 θα πρέπει να αρχίσει να σας κάνει να θέλετε υπήρχαν ένας καλύτερος τρόπος. 946 00:59:09,810 --> 00:59:13,610 Και ευτυχώς, γιατί από συστοιχίες υπάρχει. Ας το κάνουμε αυτό. 947 00:59:13,610 --> 00:59:16,700 Κατ 'αρχάς, επιτρέψτε μου να εισαγάγει ένα πολύ απλό πράγμα που δεν έχω χρησιμοποιήσει μέχρι στιγμής, 948 00:59:16,700 --> 00:59:18,820 αλλά θα το δείτε περιστασιακά σε κώδικα. 949 00:59:18,820 --> 00:59:21,270 >> Αυτό είναι αυτό που γενικά ονομάζεται μια σταθερά. 950 00:59:21,270 --> 00:59:24,410 Έτσι είναι σταθερά συνδεδεμένο με την έννοια ότι ποτέ αυτή η τιμή αλλάζει. 951 00:59:24,410 --> 00:59:26,450 Η ανθρώπινη σύμβαση κατά τη δημιουργία ενός σταθερού 952 00:59:26,450 --> 00:59:30,420 είναι να χρησιμοποιήσει όλα τα κεφαλαία γράμματα ακριβώς, έτσι ώστε να ξεχωρίζει πραγματικά το κωδικό σας, 953 00:59:30,420 --> 00:59:34,270 και το ειδικό κλειδί που χρησιμοποιείτε στο Γ # define. 954 00:59:34,270 --> 00:59:39,970 Έτσι λέμε # define, τότε ένα διάστημα, στη συνέχεια, τη λέξη που θέλετε να χρησιμοποιήσετε για το όνομα της σταθεράς 955 00:59:39,970 --> 00:59:41,730 και στη συνέχεια η τιμή της σταθεράς. 956 00:59:41,730 --> 00:59:44,710 Παρατηρήστε αυτό είναι διαφορετικό από κάτι ανάθεση σε μια μεταβλητή. 957 00:59:44,710 --> 00:59:46,430 Δεν υπάρχει ίσον, δεν υπάρχει ερωτηματικό. 958 00:59:46,430 --> 00:59:49,140 Αυτό είναι ό, τι είναι γενικά γνωστή ως οδηγία προεπεξεργαστή, 959 00:59:49,140 --> 00:59:50,840 αλλά περισσότερο για αυτό μια άλλη φορά. 960 00:59:50,840 --> 00:59:56,350 Προς το παρόν, αυτό δημιουργεί μια αμετάβλητη αξία που ονομάζεται ΒΙΝΤΕΟ ΑΓΓΕΛΙΕΣ 961 00:59:56,350 --> 00:59:58,290 πραγματική αριθμητική τιμή των οποίων είναι 2. 962 00:59:58,290 --> 01:00:02,180 Έτσι, οπουδήποτε βλέπετε κουίζ, κουίζ, κουίζ σε όλο αυτό το αρχείο, 963 01:00:02,180 --> 01:00:04,230 αυτό είναι ακριβώς ο αριθμός 2. 964 01:00:04,230 --> 01:00:06,550 Αν κοιτάζω κύρια τώρα, ας δούμε πώς αυτό λειτουργεί. 965 01:00:06,550 --> 01:00:09,770 Πρώτον φαίνεται λίγο περίεργη, αλλά είναι όλα τα πράγματα από την εβδομάδα 1. 966 01:00:09,770 --> 01:00:12,210 Ζητήστε από το χρήστη για τους βαθμούς. Πώς θα το κάνουμε αυτό; 967 01:00:12,210 --> 01:00:17,350 Στη γραμμή 22 - αυτό είναι πραγματικά το ζουμερό μέρος - Δηλώνω έναν πλωτήρα 968 01:00:17,350 --> 01:00:23,240 αλλά δεν είναι μόνο μια ενιαία float. Είμαι δηλώνοντας, μάλλον, μια σειρά από floating-point αξίες. 969 01:00:23,240 --> 01:00:27,700 Η μεταβλητή πρόκειται να κληθεί βαθμούς, όπως υπονοείται εδώ, 970 01:00:27,700 --> 01:00:31,420 αλλά το μόνο κομμάτι του νέου σύνταξη τότε οι αγκύλες. 971 01:00:31,420 --> 01:00:37,280 Το γεγονός ότι έχω πει float βαθμούς και στη συνέχεια ανοίξτε το στήριγμα και στη συνέχεια έναν αριθμό - 972 01:00:37,280 --> 01:00:40,980 παρατηρήσετε αν αυτό είναι μια σταθερά αυτό είναι ακριβώς όπως το κάναμε αυτό - 973 01:00:40,980 --> 01:00:46,840 αυτό σημαίνει, "Hey υπολογιστή, να μου δώσει 2 άρματα και ας συλλογικά τους αποκαλούν βαθμούς." 974 01:00:46,840 --> 01:00:51,780 >> Αυτό είναι σε αντίθεση με ένα πολύ πιο επίπονη διαδικασία όπως αυτό: πλωτήρα βαθμός1? 975 01:00:51,780 --> 01:00:54,580 επιπλέουν grade2? και ούτω καθεξής. 976 01:00:54,580 --> 01:00:58,310 Έτσι, ένας πίνακας μας επιτρέπει να εφαρμόσει αυτή την ιδέα, αλλά πολύ λιγότερο messily, 977 01:00:58,310 --> 01:01:04,560 με τέτοιο τρόπο ώστε να μπορούμε να γράψουμε 1 γραμμή κώδικα αντί, ας πούμε, 16 για ένα εξάμηνο 16-εβδομάδα. 978 01:01:04,560 --> 01:01:09,060 Δεν ήθελα να σκληρό κωδικό 2, γιατί αν σκεφτούμε αυτό τώρα λογικά, 979 01:01:09,060 --> 01:01:12,560 ας υποθέσουμε ότι το επόμενο έτος CS50 αλλαγές σε 3 αντί κουίζ 980 01:01:12,560 --> 01:01:15,010 και είχα τον αριθμό 2 εδώ, είχα τον αριθμό 2 εδώ, 981 01:01:15,010 --> 01:01:17,210 Είχα τον αριθμό 2, εδώ τον αριθμό 2 εδώ. 982 01:01:17,210 --> 01:01:19,890 Γίνεται πολύ κουραστική και πολύ εύκολο να βίδα μέχρι 983 01:01:19,890 --> 01:01:26,550 και να αλλάξουν κατά λάθος τιμή 1 έως 3 και χάσετε κάποια άλλη τιμή 2. 984 01:01:26,550 --> 01:01:30,660 Έτσι, Πάω να αντί αφηρημένο αυτό μακριά και να χρησιμοποιήσετε αυτή την σταθερή ότι, 985 01:01:30,660 --> 01:01:32,520 όπως υποδηλώνει το όνομά του, ποτέ δεν αλλάζει. 986 01:01:32,520 --> 01:01:35,870 Και τώρα δεν έχει σημασία αν έχουμε διαφορετικές κουίζ αυτό το έτος ή το επόμενο, 987 01:01:35,870 --> 01:01:39,380 Απλά πρέπει να το αλλάξετε σε ένα μέρος εδώ στην κορυφή. 988 01:01:39,380 --> 01:01:41,230 Έτσι, αυτό είναι το μόνο σταθερό είναι. 989 01:01:41,230 --> 01:01:47,100 Εν τω μεταξύ, η νέα εννοιολογική χαρακτηριστικό είναι ότι από μία συστοιχία. 990 01:01:47,100 --> 01:01:55,030 Έτσι, οι αγκύλες να μου δώσει αυτό το πολλά άρματα και μου επιτρέπει να καλέσετε συλλογικά τους βαθμούς εδώ. 991 01:01:55,030 --> 01:01:56,720 Έτσι, τώρα ας δούμε τι Πάω να κάνουμε. 992 01:01:56,720 --> 01:01:59,220 Εδώ στην γραμμή 24 είναι η αρχή για ένα βρόχο. 993 01:01:59,220 --> 01:02:03,380 >> Αυτό είναι πραγματικά φανταχτερό τίποτα. Είναι μόνο με τη χρήση ΒΙΝΤΕΟ ΑΓΓΕΛΙΕΣ αντί για σκληρό κωδικοποιημένο αριθμό. 994 01:02:03,380 --> 01:02:06,740 Αλλά δεν υπάρχει τίποτα εκεί πνευματικά διαφορετικά από την προηγούμενη εβδομάδα. 995 01:02:06,740 --> 01:02:11,650 Αυτό είναι απλά printf, έτσι printf ("Quiz #% d από% d:") 996 01:02:11,650 --> 01:02:16,670 γιατί απλά θέλετε να εκτυπώσετε κουίζ μου δώσει τον αριθμό 1 από 2 και, στη συνέχεια 2 από 2. 997 01:02:16,670 --> 01:02:18,480 Έτσι, αυτό είναι μια καθαρά αισθητική πράγμα. 998 01:02:18,480 --> 01:02:21,000 Αλλά το ενδιαφέρον είναι τώρα στην γραμμή 27. 999 01:02:21,000 --> 01:02:27,840 Για να συμπληρώσετε ένα από τα δύο σύμβολα κράτησης θέσης με floating-point αξία, 1000 01:02:27,840 --> 01:02:29,640 χρησιμοποιήσετε ξανά αγκύλες. 1001 01:02:29,640 --> 01:02:35,170 Σε αυτή την περίπτωση, είμαι με τη χρήση i επειδή αυτό για βρόχο έχει ξεκινήσει με το i ισούται με το τι αξία, προφανώς; 1002 01:02:35,170 --> 01:02:36,670 [Φοιτητής] 0. >> [Malan] 0. 1003 01:02:36,670 --> 01:02:40,990 Έτσι, στην πρώτη επανάληψη του βρόχου αυτού, είναι σαν να έγραψα αυτό σε κώδικα, 1004 01:02:40,990 --> 01:02:46,310 αλλά για τη δεύτερη επανάληψη του βρόχου, είναι σαν να έγραψα αυτό τον κωδικό μου. 1005 01:02:46,310 --> 01:02:49,970 Αλλά το γεγονός ότι είμαι με τη χρήση μιας μεταβλητής είναι τέλεια, επειδή, όπως υποδηλώνει το όνομα, 1006 01:02:49,970 --> 01:02:52,600 αυτό είναι διαφορετικό αξία του σε κάθε επανάληψη, 1007 01:02:52,600 --> 01:02:55,900 έτσι είμαι συμπληρώνοντας Αυτός ο πίνακας ένα σημείο κάθε φορά. 1008 01:02:55,900 --> 01:02:57,380 Τι σημαίνει αυτή η σειρά μοιάζει; 1009 01:02:57,380 --> 01:03:01,570 Ο λόγος που επέστησε την σούπερ απλό ορθογώνιο στην οθόνη εδώ πριν ήταν για το λόγο αυτό. 1010 01:03:01,570 --> 01:03:05,590 Ένας πίνακας είναι απλά ένα κομμάτι της μνήμης που ακολουθείται από ένα άλλο κομμάτι της μνήμης 1011 01:03:05,590 --> 01:03:08,570 ακολουθούμενο από ένα άλλο κομμάτι της μνήμης και ούτω καθεξής. 1012 01:03:08,570 --> 01:03:13,120 Έτσι, αν μου σειρά είναι το μέγεθος 2 σε αυτήν την περίπτωση εδώ, όλα θα ήθελα να κάνω 1013 01:03:13,120 --> 01:03:20,200 πληκτρολογώντας αποτελέσματα κουίζ μου αρέσει εδώ - πήρα 100 σε αυτό το σημείο και έπειτα πήρα ένα 99 σε αυτό το σημείο - 1014 01:03:20,200 --> 01:03:24,970 τότε η μνήμη θα μπορούσε ούτε καν να χρησιμοποιηθεί, επειδή έχω ζητήσει μόνο τον υπολογιστή 1015 01:03:24,970 --> 01:03:26,840 για μια σειρά μεγέθους 2. 1016 01:03:26,840 --> 01:03:28,600 Οι πλατείες είναι ακόμα εκεί, έτσι δεν είναι; 1017 01:03:28,600 --> 01:03:32,670 Έχετε ακόμα 2 gigabytes μνήμης RAM ακόμα και αν είστε ζητά μόνο για 2 επιπλέει. 1018 01:03:32,670 --> 01:03:36,840 Έτσι, η ιδέα πίσω από συστοιχίες είναι ότι ο υπολογιστής παίρνει μόνο ένα κομμάτι της μνήμης 1019 01:03:36,840 --> 01:03:41,340 και επιμερίζει στη συνέχεια μικρότερα κομμάτια πλάτη με πλάτη με πλάτη με πλάτη. 1020 01:03:41,340 --> 01:03:43,310 Και έτσι αυτό είναι όλο ένας πίνακας είναι. 1021 01:03:43,310 --> 01:03:47,350 >> Είναι ένα συνεχές κομμάτι της μνήμης μέσα από τα οποία μπορείτε να βάλετε τα πράγματα. 1022 01:03:47,350 --> 01:03:50,700 Αυτό συμβαίνει για να κάνει στη συνέχεια κάποια απλά βαρετό αριθμητική. 1023 01:03:50,700 --> 01:03:54,640 Αν μετακινηθείτε προς τα κάτω εδώ, αυτό είναι που εγώ τότε επαναλάβει πάνω στον πίνακα. 1024 01:03:54,640 --> 01:03:58,020 Έρχομαι με το άθροισμα όλων των τιμών του πίνακα, 1025 01:03:58,020 --> 01:04:02,470 και στη συνέχεια να μπορώ να χρησιμοποιήσω το γύρο λειτουργία εδώ για να κάνουμε πραγματικότητα το άθροισμα διαιρείται με κουίζ. 1026 01:04:02,470 --> 01:04:06,320 Αλλά επιτρέψτε μου να κύμα το χέρι μου στο ότι ως είδος αριθμητική αρκετά για τώρα. 1027 01:04:06,320 --> 01:04:08,370 Αλλά το μόνο που κάνει είναι για μένα τελικά να υπολογίσει τη μέση. 1028 01:04:08,370 --> 01:04:13,580 Έτσι, η πρώτη κουίζ κουίζ συν το δεύτερο διαιρείται με το 2 και στη συνέχεια εκτύπωση ως int. 1029 01:04:13,580 --> 01:04:17,280 Αλλά τώρα ας μετάβαση σε ένα διαφορετικό παράδειγμα που ονομάζεται συμβολοσειρά1, 1030 01:04:17,280 --> 01:04:20,700 η οποία περιγράφει μια παρόμοια κατάσταση, αλλά με χορδές. 1031 01:04:20,700 --> 01:04:23,940 Επιτρέψτε μου να προχωρήσει και να απλοποιήσει αυτό για μια στιγμή. 1032 01:04:23,940 --> 01:04:27,090 Συγχωρέστε την εσοχή για τώρα. 1033 01:04:27,090 --> 01:04:30,870 Ανακοίνωση στην γραμμή 19 του αυτό το παράδειγμα, έχω μια σειρά από τον χρήστη. 1034 01:04:30,870 --> 01:04:34,640 Αλλά παρατηρήσετε τι είμαι δίπλα σε αυτόν των γραμμών 22 και μετά. 1035 01:04:34,640 --> 01:04:41,250 Είμαι πραγματικά επανάληψη από i μέχρι - και αυτό είναι ένα νέο τέχνασμα - strlen, μήκους. 1036 01:04:41,250 --> 01:04:44,880 Πρόκειται για μια λειτουργία που έρχεται με C ότι αν δώσετε μια συμβολοσειρά, 1037 01:04:44,880 --> 01:04:47,730 αυτό σας λέει πόσοι χαρακτήρες είναι σε αυτό το string. Αυτό είναι όλο. 1038 01:04:47,730 --> 01:04:51,550 Και το γεγονός ότι είναι strlen αντί του μήκους είναι μόνο και μόνο επειδή είναι πιο σύντομη. 1039 01:04:51,550 --> 01:04:55,100 Τριάντα χρόνια πριν, οι άνθρωποι του άρεσε να γράφει τα πράγματα όπως συνοπτικά το δυνατόν, 1040 01:04:55,100 --> 01:04:57,630 έτσι έχουμε κρατήσει τη σύμβαση αυτή εδώ. 1041 01:04:57,630 --> 01:05:00,660 i + + απλά σημαίνει αυξήσετε i σε κάθε επανάληψη. 1042 01:05:00,660 --> 01:05:02,990 Και τώρα παρατηρήσετε αυτό, το οποίο είναι πολύ ενδιαφέρον. 1043 01:05:02,990 --> 01:05:09,180 Στη γραμμή 24, λέω, "Computer, να μου δώσει ένα χαρακτήρα, 8 bits, και να το ονομάσουμε γ». 1044 01:05:09,180 --> 01:05:12,630 Αλλά τι είναι αυτό για το δεξιά πλευρά λέγοντας; 1045 01:05:13,490 --> 01:05:16,530 Στα αγγλικά, τι σημαίνει αυτό αντιπροσωπεύει; 1046 01:05:16,530 --> 01:05:18,730 [Φοιτητής] Ο πρώτος χαρακτήρας του πίνακα. 1047 01:05:18,730 --> 01:05:20,790 Ακριβώς. Δώσε μου τον πρώτο χαρακτήρα του πίνακα. 1048 01:05:20,790 --> 01:05:24,090 Ή, πιο γενικά, να μου δώσει το i-χαρακτήρας στη σειρά. 1049 01:05:24,090 --> 01:05:26,100 Και συνειδητοποιούν ότι είναι σημαντικό τώρα που οι επιστήμονες ηλεκτρονικών υπολογιστών, 1050 01:05:26,100 --> 01:05:27,890 είμαστε πραγματικά ξεκινώντας από το 0. 1051 01:05:27,890 --> 01:05:29,720 >> Δεν έχουν την ευχέρεια τώρα να αρχίσουν να κάνουν αυτό. 1052 01:05:29,720 --> 01:05:34,160 Τώρα θα πρέπει να συμπεριφέρονται σύμφωνα με τις προσδοκίες του υπολογιστή και μετρήστε από 0 1053 01:05:34,160 --> 01:05:38,180 επειδή [0] θα είναι ο πρώτος χαρακτήρας σε μια σειρά, 1054 01:05:38,180 --> 01:05:42,150 [1] πρόκειται να είναι η δεύτερη, [2], πρόκειται να είναι η τρίτη, και ούτω καθεξής. 1055 01:05:42,150 --> 01:05:49,720 Έτσι, αυτό το πρόγραμμα, αν μπορώ να συγκεντρώνουν, αυτή είναι και πάλι συμβολοσειρά1, ώστε να συμβολοσειρά1, 1056 01:05:49,720 --> 01:05:54,670 και τώρα έχω τρέξει string1 στο παράθυρο του τερματικού μου. 1057 01:05:54,670 --> 01:05:58,330 Είναι σε αναμονή για την είσοδο, έτσι Πάω να πληκτρολογήσετε τον David, Enter, 1058 01:05:58,330 --> 01:06:02,540 και τώρα ο David εκτυπώνει όλα σε διαφορετικές γραμμές, επειδή ειδοποίηση τι κάνω. 1059 01:06:02,540 --> 01:06:05,820 Είμαι εκτύπωση ενός χαρακτήρα σε μια στιγμή. 1060 01:06:05,820 --> 01:06:10,100 Δεν θα μπω σε λεπτομέρειες για το θέμα αυτό σήμερα, αλλά έχω διαγράψει μια στιγμή πριν από τον έλεγχο αυτό εδώ. 1061 01:06:10,100 --> 01:06:15,480 Αποδεικνύεται ότι αν ο χρήστης δεν λειτούργησε σωστά, αντιδικία, ή απλά σύγχυση, 1062 01:06:15,480 --> 01:06:20,210 μπορείτε πραγματικά να αποτύχει να δώσει μια σειρά από κάποιο μήκος. 1063 01:06:20,210 --> 01:06:22,860 Αν πατήσετε το λάθος πλήκτρο στο πληκτρολόγιο, μπορεί να δώσει καμία συμβολοσειρά, 1064 01:06:22,860 --> 01:06:26,950 ή αν είστε κακόβουλο, μπορείτε να δοκιμάσετε να επικολλήσετε στην αξία ενός gigabyte του ένα δοκίμιο 1065 01:06:26,950 --> 01:06:29,290 να συμπληρώσετε αυτή τη σειρά, και αν ο υπολογιστής διαθέτει μνήμη, 1066 01:06:29,290 --> 01:06:32,710 αποδεικνύεται ότι θα πάμε για να πάρει πίσω αυτή την ειδική τιμή που ονομάζεται NULL. 1067 01:06:32,710 --> 01:06:35,580 Έτσι, για τώρα, απλά ξέρω ότι υπάρχει αυτή η ιδιαίτερη αξία που ονομάζεται NULL 1068 01:06:35,580 --> 01:06:39,580 που θα μας επιτρέψει να ελέγξετε όταν είμαστε έξω από τη μνήμη, μεταξύ άλλων. 1069 01:06:39,580 --> 01:06:45,630 Αλλά αν ανοίξει τώρα συμβολοσειρά2, παρατηρήσετε μια διαφορά εδώ. 1070 01:06:45,630 --> 01:06:48,210 Παρατηρήστε μια διαφορά εδώ με συμβολοσειρά2. 1071 01:06:48,210 --> 01:06:51,340 Με συμβολοσειρά2, αυτό για το βρόχο είναι λίγο διαφορετική. 1072 01:06:51,340 --> 01:06:55,010 >> Επιτρέψτε μου να διαγράψετε τις τιμές NULL, έτσι ώστε να μπορούμε να μιλήσουμε για μια άλλη φορά αυτά. 1073 01:06:55,010 --> 01:06:57,800 Τι είναι διαφορετικό για το βρόχο για αυτή τη φορά; 1074 01:06:59,620 --> 01:07:01,670 Μπορώ να πάω πίσω στο προηγούμενο παράδειγμα. 1075 01:07:01,670 --> 01:07:08,580 Έτσι, αυτό είναι έκδοση 2, αυτό είναι η έκδοση 1. 1, 2. 1076 01:07:08,580 --> 01:07:11,980 1, 2. 1077 01:07:13,520 --> 01:07:16,660 Η strlen κλήση είναι πού; 1078 01:07:16,660 --> 01:07:18,860 Είναι το πρώτο μέρος του βρόχου for. 1079 01:07:18,860 --> 01:07:21,830 Οποιεσδήποτε σκέψεις ως προς το γιατί το κάνω αυτό; Ναι. 1080 01:07:21,830 --> 01:07:24,560 [Φοιτητής] Έτσι δεν απαιτούν τη λειτουργία κάθε φορά. 1081 01:07:24,560 --> 01:07:26,440 [Malan] Γι 'αυτό και δεν απαιτούν τη λειτουργία κάθε φορά. Ακριβώς. 1082 01:07:26,440 --> 01:07:28,300 Ανάκληση από τους βρόχους για ότι είναι εξαιρετικά απλή 1083 01:07:28,300 --> 01:07:31,770 από τη στιγμή που το είδος καταλάβουμε ότι αυτή είναι η αρχικοποίηση, η κατάσταση και η ενημέρωση. 1084 01:07:31,770 --> 01:07:34,750 Το πρόβλημα είναι ότι η κατάσταση συμβαίνει σε κάθε επανάληψη του βρόχου. 1085 01:07:34,750 --> 01:07:40,010 Και έτσι σε αυτό το παράδειγμα εδώ, τι είναι κακό για το γεγονός ότι αυτή είναι η κατάστασή μου; 1086 01:07:40,010 --> 01:07:41,830 [Φοιτητής] Είσαι καλώντας strlen. 1087 01:07:41,830 --> 01:07:44,340 [Malan] Είσαι strlen καλώντας ξανά και ξανά και ξανά. 1088 01:07:44,340 --> 01:07:47,410 Αλλά από τη στιγμή που έχω πληκτρολογήσει στο Δαβίδ, το μήκος της στοιχειοσειράς είναι 5, 1089 01:07:47,410 --> 01:07:49,650 και δεν πρόκειται να αλλάξει σε κάθε επανάληψη του βρόχου 1090 01:07:49,650 --> 01:07:51,670 επειδή το κορδόνι είναι ακόμα ϋ-α-ν-ί-ά. 1091 01:07:51,670 --> 01:07:55,320 Έτσι, αυτό είναι μια νύξη στο τι πρόκειται να γίνει μια όλο και πιο σημαντική ιδέα 1092 01:07:55,320 --> 01:08:00,410 γνωστή ως απόφαση σχεδιασμού σε περιπτώσεις όπου απλά δεν κάνουν τον υπολογιστή να κάνει περιττές εργασίες. 1093 01:08:00,410 --> 01:08:03,920 >> Ακριβώς όπως μια προεπισκόπηση των pset2, pset2 στην τυπική έκδοση 1094 01:08:03,920 --> 01:08:07,030 πρόκειται να σας πρόκληση να εφαρμόσουν στην πράξη κάποια αριθμός των αλγόριθμους κρυπτογράφησης, 1095 01:08:07,030 --> 01:08:10,410 κάποια αριθμός των αλγορίθμων κρυπτογράφησης, έτσι ώστε να μπορεί τόσο να κρυπτογραφήσετε 1096 01:08:10,410 --> 01:08:13,840 και να αποκρυπτογραφήσει τα μηνύματα μυστικό μοιάζει πολύ με το Ralphie κανείς εκεί αποκωδικοποιηθεί. 1097 01:08:13,840 --> 01:08:16,810 Στην έκδοση του χάκερ pset2, θα πάμε για να πάει λίγο παραπέρα. 1098 01:08:16,810 --> 01:08:19,649 Εμείς πάμε για να σας παραδώσει ένα αρχείο από ένα πραγματικό σύστημα υπολογιστή 1099 01:08:19,649 --> 01:08:23,479 που περιέχει ένα σωρό ονόματα χρηστών και των πραγματικών κρυπτογραφημένους κωδικούς πρόσβασης, 1100 01:08:23,479 --> 01:08:26,939 και η πρόκληση για την έκδοση χάκερ θα είναι να σπάσει αυτούς τους κωδικούς πρόσβασης 1101 01:08:26,939 --> 01:08:33,200 και να καταλάβω τι κρυπτογραφία ή ποιο είναι το μυστικό έχει χρησιμοποιηθεί για την παραγωγή πραγματικά αυτούς τους κωδικούς πρόσβασης. 1102 01:08:33,200 --> 01:08:36,109 Και θα πάμε να το κάνετε αυτό, χρησιμοποιώντας ένα νέο χαρακτηριστικό εδώ από C 1103 01:08:36,109 --> 01:08:40,630 ότι θα σας δώσω μόνο ένα demo του είναι γνωστή ως ορίσματα της γραμμής εντολών. 1104 01:08:40,630 --> 01:08:44,229 Αποδεικνύεται, όπως κάποιοι από εσάς μπορεί να έχετε δει στο τμήμα ή στα σχολικά εγχειρίδια, 1105 01:08:44,229 --> 01:08:48,260 κύριος δεν πρέπει πάντα να είναι κενό σε παρένθεση. 1106 01:08:48,260 --> 01:08:52,430 Αποδεικνύεται ότι ο κύριος μπορεί επίσης να γραφτεί όπως αυτό, με δύο επιχειρήματα, 1107 01:08:52,430 --> 01:08:56,870 argc και argv, argc όπου είναι ο αριθμός των λέξεων 1108 01:08:56,870 --> 01:09:00,020 που πληκτρολογείτε μετά από το όνομα του προγράμματος στη γραμμή εντολών σας 1109 01:09:00,020 --> 01:09:03,420 και argv είναι οι πραγματικές λέξεις. 1110 01:09:03,420 --> 01:09:07,540 Και όπως δείχνουν οι αγκύλες εκεί, argv είναι προφανώς μια σειρά. 1111 01:09:07,540 --> 01:09:12,210 Είναι πρόκειται να είναι μια σειρά μετά από μια σειρά μετά από μια σειρά στη μνήμη. 1112 01:09:12,210 --> 01:09:16,010 >> Λοιπόν, τι θα πάμε να είναι σε θέση να κάνει εκκίνηση με PSET 2 είναι κάτι σαν αυτό. 1113 01:09:16,010 --> 01:09:21,350 Αν κάνω argv1, το οποίο είναι ένα παράδειγμα θα επανέλθουμε τη Δευτέρα, και τρέχει, 1114 01:09:21,350 --> 01:09:23,370 παρατηρήσετε ότι δεν φαίνεται να κάνει τίποτα ακόμα. 1115 01:09:23,370 --> 01:09:25,490 Είναι απλά τυπώνει το δικό του όνομα. 1116 01:09:25,490 --> 01:09:31,479 Αλλά αν πω αντίο τάξη, ειδοποίηση ότι το πρόγραμμα αυτό επαναλαμβάνεται προφανώς 1117 01:09:31,479 --> 01:09:35,479 για κάθε μία από τις λέξεις που πληκτρολογούνται στη γραμμή εντολών. 1118 01:09:35,479 --> 01:09:41,630 Και τα μέσα με τα οποία θα αποκτήσουν πρόσβαση σε λέξεις που ο χρήστης έχει πληκτρολογήσει στη γραμμή εντολών 1119 01:09:41,630 --> 01:09:49,160 είναι με την αλλαγή κύρια ξεκινώντας από αυτό το Σαββατοκύριακο int main (void) σε int main (argc, argv) 1120 01:09:49,160 --> 01:09:52,050 και έτσι θα γεννηθεί ορίσματα της γραμμής εντολών. 1121 01:09:52,050 --> 01:09:57,100 Και τη στιγμή που θα πάρει πραγματικά εξελιγμένη σε αυτό, θα είστε σε θέση να γράψει πραγματικά trippy προγράμματα 1122 01:09:57,100 --> 01:09:59,610 όπως αυτό εδώ, το οποίο πηγαίνει πάνω και πέρα ​​από 1123 01:09:59,610 --> 01:10:03,940 μερικές από τις λειτουργίες που έχουμε κάνει μέχρι τώρα, αλλά όλα είναι αρκετά ισχυρό. 1124 01:10:03,940 --> 01:10:08,950 >> Γι 'αυτό και θα αφήσει αυτό με αυτό στην οθόνη, και θα δείτε τη Δευτέρα. 1125 01:10:17,570 --> 01:10:20,000 >> [CS50.TV]