[Powered by Google Translate] David J. Malan: Εντάξει.
Αυτό είναι CS50, και αυτό είναι το τέλος της δεύτερης εβδομάδας.
Αν περιμένετε να είναι πεινασμένοι γύρω από αυτή τη στιγμή αύριο, ξέρουμε ότι θα πάμε
να συγκαλέσει ως μια μικρή ομάδα αύριο, Πέμπτη, 13.15 μ.μ..
Υπάρχει αυτό το URL εδώ αν θέλετε να RSVP.
Ο χώρος είναι περιορισμένος, γι 'αυτό παρακαλώ συγχωρήστε εάν η φόρμα έχει συμπληρωθεί από τη στιγμή που θα
συμπληρώσετε αυτό.
Μια άλλη διεύθυνση URL αν και αυτό μπορεί να έχει ενδιαφέρον είναι αυτό.
>> Έτσι, μέσα σε μόλις ένα μήνα περίπου, το μάθημα πρόκειται να διατεθούν
όλα τα ευρύτερα μέσω EDX, μέσω της οποίας οι λαοί στο Διαδίκτυο θα είναι
είναι σε θέση να παρακολουθήσει μαζί του, να ασκεί κατά τη διάρκεια αρκετά ενεργά, στην πραγματικότητα.
Θα πρέπει να χρησιμοποιούν την συσκευή CS50 και CS50 Συζητήστε και τα περισσότερα από τα
διάφορα εργαλεία λογισμικού που ήδη έχουν χρησιμοποιήσει αυτό το εξάμηνο.
Και μια από τις πρωτοβουλίες που θα θέλαμε να αναλάβει ως ένα πείραμα φέτος
είναι να δούμε πόσο περιεχόμενο μπορούμε να μεταφράσουμε σε άλλες μιλήσει και
γραπτές γλώσσες.
Έτσι, αν θα μπορούσε να έχει συμφέρον να συμμετέχει σε αυτό το έργο, σύμφωνα με την οποία
θα παρέχουν αντίγραφα αγγλικά και υπότιτλους για την πορεία της
διαλέξεις και σεμινάρια και σορτς και τα τμήματα και τα παρόμοια -
αν μιλάτε άπταιστα ή γράψε άπταιστα κάποια άλλη γλώσσα, εμείς θα
αγαπούν να συμμετέχετε σε αυτό το έργο, το οποίο σας μεταφέρει σε ένα ή περισσότερα από τα
βίντεο, μετατροπή τους σε μια γλώσσα που γνωρίζουν αρκετά καλά.
Για να σας δώσω μια αίσθηση της διεπαφής, δεν υπάρχει αυτό το web-based user interface
ότι θα πρέπει να χρησιμοποιούν αυτό θα δημιουργήσει ουσιαστικά ένα UI σαν αυτό.
Αυτό με τη διδασκαλία κάποια Απόκριες πριν.
Και στη δεξιά πλευρά υπάρχει σε μαύρο δίπλα σε αυτά τα ένσημα του χρόνου,
θα δείτε τα διάφορα πράγματα που βγήκε από το στόμα μου εκείνη την ημέρα.
Και στη συνέχεια, κάτω από αυτό, θα είστε σε θέση να μεταφράσουν σε κάποια άλλη γλώσσα.
Ακριβώς ό, τι είναι η χαρτογράφηση μεταξύ, στην περίπτωση αυτή, Αγγλικά
και, ας πούμε, ισπανικά.
Γι 'αυτό είναι πραγματικά ένα πολύ φιλικό προς το χρήστη εργαλείο.
Μπορείτε να rewind και fast forward πολύ εύκολα με συντομεύσεις πληκτρολογίου.
Έτσι, αν θα θέλατε να λάβουν μέρος σε αυτό το πείραμα και να έχουν τα λόγια σας
δει και διαβάσει από δυνητικά χιλιάδες παιδιά εκεί έξω, παρακαλούμε να μην αισθάνονται
ελεύθεροι να συμμετάσχουν.
>> Τώρα μια λέξη για το γατάκι από τη Δευτέρα, για να μην έχουμε στείλει ένα υπερβολικά
τρομακτικό μήνυμα.
Συνειδητοποιούν ότι οι ώρες γραφείου και προτείνουν ως τμήματα δείχνουν, η
σχεδιασμός του μαθήματος είναι πάρα πολύ για να έχουν οι μαθητές συνεργάζονται και
μιλάμε για εργασία μέσα από σύνολα πρόβλημα και τα προβλήματα μαζί.
Και πραγματικά η γραμμή έρχεται ακριβώς κάτω, και πάλι, το έργο που τελικά
θα πρέπει να υποβάλουν πρέπει να είναι δική σας.
Και έτσι είναι, ειλικρινά - σε ώρες γραφείου, είναι απολύτως φυσιολογικό -
Είναι εντελώς πρέπει να αναμένεται, ακόμη και - να συνομιλείτε με κάποια
φίλους δίπλα σας.
Αν αυτός ή αυτή αγωνίζεται με κάποιο θέμα, και είστε όπως, OH, και ας
μου να σας δώσω μια γεύση από κάποια γραμμή κώδικα που έγραψα.
Αυτό είναι μια χαρά.
Αυτό συμβαίνει.
Και αυτό είναι πολύ ευνοϊκό, νομίζω, με τη διαδικασία της μάθησης.
Όταν η γραμμή, και πάλι, παίρνει διέσχισε είναι όταν η κεφαλή είναι είδος κλίση πάνω
εδώ για πάρα πολλά δευτερόλεπτα ή λεπτά για να πραγματικά να έχουν μόνο
ήταν μια ευκαιρία για την απεμπλοκή φίλο σας.
Και βέβαια, όταν τα πράγματα παίρνουν ανταλλάσσονται μέσω του ηλεκτρονικού ταχυδρομείου και Dropbox και
τα παρόμοια, και εκεί είναι η γραμμή.
Έτσι, με όλα τα μέσα, να αισθάνονται άνετα και να αισθάνονται ενθαρρύνονται να συνομιλήσετε με τους φίλους σας
και τους συμμαθητές για psets και περισσότερο.
Και μόλις συνειδητοποιήσετε ότι αυτό που τελικά θα πρέπει να υποβάλουν πραγματικά να είναι η
προϊόν της δημιουργίας σας και όχι κάποιος άλλος.
>> Έτσι, στο ίδιο πνεύμα της μαζεμένος πλάσματα, ίσως
γνωρίζουν από αυτόν τον τύπο εδώ.
Έτσι, αυτό είναι ένα τρομακτικά τυρώδης ταινία από χρόνια.
Όποιος δει εδώ Spaceballs;
Εντάξει.
Έτσι, ένας καλός αριθμός εδώ.
Έτσι, αυτό είναι υπέροχα ακαδημαϊκό τρόπο εισαγωγής μας σήμερα τελικά
η έννοια της κρυπτογραφίας.
Και έτσι ένας από τους συγκεκριμένους τομείς προβλημάτων για PSET 2, το οποίο θα έρθει
από αργά το βράδυ αύριο, είναι να βουτήξει στον κόσμο της κρυπτογραφίας, τα οποία
Είναι η τέχνη της κρυπτογράφησης ή κρυπτογράφησης πληροφοριών.
Και αυτό αφορά τελικά στον κόσμο της ασφάλειας.
>> Τώρα ασφάλεια για τους περισσότερους μας έρχεται με τη μορφή του αρκετά κοσμικό μηχανισμών.
Όλοι μας έχουμε τα ονόματα χρήστη και κωδικούς πρόσβασης.
Και όλοι μας έχουμε πολύ άσχημα ονόματα χρηστών και κωδικούς πρόσβασης, κατά πάσα πιθανότητα.
Εάν ο κωδικός πρόσβασής σας είναι το ίδιο για πολλούς δικτυακούς τόπους, αυτό είναι πιθανόν να μην
η καλύτερη ιδέα, όπως θα συζητήσουμε προς το τέλος του εξαμήνου.
Εάν ο κωδικός πρόσβασής σας είναι γραμμένο σε μια κολλώδη σημείωση - δεν είναι αστείο - για σας
οθόνη, η οποία επίσης δεν είναι κατ 'ανάγκη το καλύτερο σχέδιο, αλλά αρκετά συνηθισμένο
φαινόμενο.
Και αν δεν είστε με τη χρήση κρυπτογράφησης για την κρυπτογράφηση των κωδικών πρόσβασης σας, είναι
ιδιαίτερα ευάλωτες.
Έτσι, αν νομίζετε ότι είστε έξυπνοι είναι σούπερ, έχοντας ένα κρυφό του Word
τεκμηριώνουν κάπου στο σκληρό σας δίσκο που έχει όλους τους κωδικούς πρόσβασής σας, αλλά
είναι σε ένα φάκελο ότι κανείς δεν πρόκειται να δούμε σε, το οποίο επίσης δεν είναι μια πολύ
ασφαλή μηχανισμό.
Και έτσι τι PSET 2 θα εισαγάγει είναι αυτή η τέχνη της κρυπτογραφίας και
κρυπτογράφησης πληροφοριών, ώστε να είναι τα πράγματα όπως τους κωδικούς πρόσβασης
όλα τα πιο ασφαλή.
Έτσι ώστε να παρακινήσει αυτό το πολύ πραγματικό κόσμο πρόβλημα με ένα πολύ μη πραγματικό κόσμο
σενάριο, επιτρέψτε μου να σας παρουσιάσουμε ένα από τα αγαπημένα μας αποσπάσματα από αυτό εδώ
ταινία, Spaceballs.
>> [ΑΝΑΠΑΡΑΓΩΓΗ ΒΙΝΤΕΟ]
-Κράνος, σας δαίμονας, τι συμβαίνει;
Τι κάνεις με την κόρη μου;
-Επιτρέψτε μου να εισαγάγει την λαμπρή μικρά πλαστικό χειρουργό, ο Δρ Φίλιππος
Schlotkin, ο μεγαλύτερος άνθρωπος εργασία μύτης σε ολόκληρο το
σύμπαν και το Μπέβερλι Χιλς.
-Highness σας.
-Μύτη δουλειά;
Δεν καταλαβαίνω.
Έχει ήδη μια εργασία μύτης.
Ήταν ένα γλυκό 16 του παρόντος.
-Όχι, δεν είναι αυτό που νομίζετε.
Είναι πολύ, πολύ χειρότερα.
Αν δεν μου δώσεις το συνδυασμό με την ασπίδα του αέρα, ο Δρ Schlotkin θα
δώσει πίσω την κόρη σου παλιά μύτη της.
-Όχι!
Που το βρήκες αυτό;
-Εντάξει.
Θα σας πω.
-Όχι, μπαμπά, όχι.
Δεν πρέπει.
-Είσαι δικαίωμα, αγαπητέ μου.
Θα χάσετε νέα μύτη σας.
Αλλά εγώ δεν θα πω το συνδυασμό τους δεν έχει σημασία τι.
-Πολύ καλά.
Ο Δρ Schlotkin, όσο χειρότερα τόσο καλύτερα.
-Μου ευχαρίστηση.
-Όχι!
Περιμένετε, περιμένετε.
Θα σας πω.
-Το ήξερα ότι θα μπορούσε να λειτουργήσει.
Εντάξει, το δώσει σε μένα.
-Ο συνδυασμός είναι ένα.
-Ένα.
-Δύο.
Τρεις-
-Τρία.
-Τέσσερα.
Πέντε-
-Πέντε.
-Έτσι, ο συνδυασμός είναι ένα, δύο, τρία, τέσσερα, πέντε.
Αυτό είναι το πιο χαζό συνδυασμός που έχω ακούσει στη ζωή μου.
Αυτό είναι το είδος των πράγμα που ένας ηλίθιος θα έχει στις αποσκευές του.
Σας ευχαριστώ, Υψηλότατε.
-Τι έκανες;
-Γύρισα από τον τοίχο.
-Όχι, δεν το έκανε.
Μπορείτε απενεργοποιήσει ολόκληρη την ταινία.
-Θα πρέπει να πατήσετε το λάθος κουμπί.
-Λοιπόν, να επαναφέρει την οικονομία.
Βάλτε την ταινία ξανά.
-Ναι, κύριε.
Ναι, κύριε.
-Πάμε, Erna.
Έλα, Gretchen.
Φυσικά ξέρετε ότι θα πρέπει ακόμα να σας χρεώσει για αυτό.
-Καλά, δεν λειτουργεί;
Πού είναι η πύλη;
-Δούλεψε, κύριε.
Έχουμε το συνδυασμό.
-Ωραία.
Τώρα μπορούμε να πάρουμε όλα τα τελευταία του πνοή φρέσκου αέρα από τον πλανήτη Druidia.
Τι είναι ο συνδυασμός;
Ένα, δύο, τρία, τέσσερα, πέντε.
Ένα, δύο, τρία, τέσσερα, πέντε;
-Ναι.
-Αυτό είναι καταπληκτικό.
Έχω τον ίδιο συνδυασμό στις αποσκευές μου.
Ετοιμάστε Spaceball 1 για άμεση αναχώρηση.
-Ναι, κύριε.
-Και αλλάξετε το συνδυασμό στις αποσκευές μου.
-Ωχ!
[ΑΝΑΠΑΡΑΓΩΓΗ ΒΙΝΤΕΟ ΤΕΛΟΣ]
>> David J. Malan: Μια καταπληκτική ταινία που πρέπει να δείτε όλοι τώρα.
Έτσι, το πλαίσιο εδώ είναι ότι με την ανασφάλεια δεδομένων έρχεται την ευκαιρία να
κρυπτογραφήσει και να τον αγωνίζομαι.
Και έτσι αυτό, για παράδειγμα, είναι ένα παράδειγμα ενός κρυπτογραφημένου μηνύματος.
Αυτό λέει πραγματικά κάτι στα αγγλικά.
Αλλά σαφώς δεν είναι εντελώς προφανές.
Και θα έρθει πλήρης κύκλος σήμερα να δώσουμε έμφαση, εκτός ό, τι αυτό το μυστικό
το μήνυμα εδώ είναι.
Αλλά στον πραγματικό κόσμο των υπολογιστών, τα πράγματα δεν χρειάζεται καν μοιάζουν σαν να μπορούσαν
είναι Αγγλικές φράσεις.
Για παράδειγμα, αυτό είναι ό, τι μπορείτε να βρείτε σε ένα πρότυπο Linux ή Mac ή
Unix υπολογιστή σε ένα αρχείο που ήταν κάποτε ονομάζεται το αρχείο κωδικού πρόσβασης.
Σήμερα, έχει μετακινηθεί σε άλλες θέσεις.
Αλλά αν κοιτάξετε στο σωστό μέρος, σε ένα σύστημα, θα δείτε όχι μόνο σας
ότι το όνομα χρήστη ή άλλων ανθρώπων για το σύστημα, αλλά θα δείτε ένα
κρυπτογραφημένη εκδοχή του κωδικού τους.
Πράγματι, η κρύπτη λέξη υποδηλώνει ότι τα ακόλουθα πράγματα είναι κρυπτογραφημένη.
Και αυτή η σειρά από φαινομενικά τυχαία γράμματα και αριθμούς και χαρακτήρες και
ούτω καθεξής μπορούν να αποκρυπτογραφηθούν μόνο με γενικά γνωρίζοντας κάποιο μυστικό -
μια μυστική λέξη, ένα μυστικό αριθμό.
Και έτσι, η τέχνη της κρυπτογραφίας τελικά βράζει κάτω να εμπιστεύονται ορισμένων
είδος και γνωρίζοντας κάτι που κάποιος άλλος δεν το κάνει.
Θα το ερευνήσω αυτό σε λίγο πιο αναλυτικά σήμερα και στο PSET να έρθει.
>> Και τώρα μια λέξη για επιτυχίας / αποτυχίας.
Έτσι, ειδικά, όπως κάποιοι από εσάς έχουν καταδυθεί σε PSET 1, η συσκευή, και
ένα πολύ νέο κόσμο για τον εαυτό σας, συνειδητοποίησε ότι απογοητεύσεις και
σύγχυση και μόνο τεχνικές δυσκολίες θα πρέπει να αναμένονται.
Ειδικά με το πρώτο PSET, όπου υπάρχει μόνο τόσο πολύ νέα, μόλις πάρει
εξοικειωμένοι με ls και cd και όλα αυτά τα απόκρυφα εντολές σε ένα νέο περιβάλλον.
Και αυτό είναι ξεχωριστό από το ίδιο υλικό και τον προγραμματισμό ίδια.
Έτσι συνειδητοποιήσουμε, επίσης, ότι υπάρχουν σίγουρα ώρες γραφείου που υπάρχουν ως
η δομή στήριξης.
Τμήματα αρχίζουν την ερχόμενη Κυριακή.
Αλλά το πιο σημαντικό, εάν αισθάνεστε ακριβώς ότι αυτό δεν είναι το
κόσμο για σας, συνειδητοποιήστε ότι πραγματικά λαμβάνουν ακριβώς το χρόνο.
Και αν δεν ήταν για αυτήν την ευκαιρία χρόνια για μένα να λάβει μια τάξη
επιτυχίας / αποτυχίας, ειλικρινά, ποτέ δεν θα είχα θέσει ακόμη πόδι στην τάξη.
Και μπορείτε να το αλλάξετε αυτό, μέχρι, δηλαδή, το πέμπτο Δευτέρα του πορεία.
Έτσι, εάν είστε στην άκρη τώρα, συνειδητοποιούν ότι αντί για το κεφάλι σε κάποιο άλλο
υδάτων συνολικά, σίγουρα δεν θεωρούν απλώς να αλλάζει επιτυχίας / αποτυχίας.
Και πάλι, δεν υπάρχει πραγματικά αυτός ο πολιτισμός εδώ στο Harvard της λήψης πράγματα
επιτυχίας / αποτυχίας δεδομένου ότι ο καθένας θέλει πραγματικά να επιτύχει ή να υπερκερασθεί ο στόχος.
Αλλά ειλικρινά, αυτό είναι ένας θαυμάσιος τρόπος για να προσπαθήσει κάτι που μπορεί να μην
να είναι γνωστά σε σας.
Και θα καταλήξετε να κάνει στις περισσότερες περιπτώσεις αρκετά καλά, ίσως
πολύ προς έκπληξή σας.
Και πιο συγκεκριμένα, αυτό που νομίζω ότι επιτυχίας / αποτυχίας γενικά κάνει,
ειδικά όπως μπορεί να έχετε βιώσει με PSET 0, αν έχετε θέσει
σε 10 ώρες, 15 ώρες, 25 ώρες σε κάποιο PSET - και είστε ακριβώς χτυπάς
το κεφάλι σου στον τοίχο,
και είναι να πάρει σούπερ αργά το βράδυ,
αλλά έχετε πάρει το PSET το 90% του τρόπο,
ξέρετε ότι απλά δεν μπορώ να καταλάβω ένα πράγμα -
επιτυχίας / αποτυχίας πραγματικά βγάζει την άκρη από μια κατηγορία του, όπως αυτό, όπου μπορείτε να ταξινομήσετε
του ευτυχώς να πω εντάξει, ξέρω ότι δεν είναι τέλεια.
Αλλά δούλεψα κώλο μου μακριά σε αυτό.
Είμαι αρκετά ευχαριστημένος με αυτό που καταλήξαμε.
Και ότι θα ανταποκριθεί στις προσδοκίες για την επιτυχία / αποτυχία.
Έτσι, μπορώ να κρατήσει αυτό κατά νου.
>> Εντάξει.
Έτσι, όσοι από εσάς έχουν αγωνιστεί για να χρησιμοποιήσετε το Πανεπιστήμιο του Χάρβαρντ Wi-Fi γνωρίζουν
ότι υπάρχει μια CS50 SSID, μια σύνδεση Wi-Fi που επιπλέουν γύρω σας
θα μπορούσε να έχει καλύτερη τύχη για.
Είναι λίγο ειρωνικό το γεγονός ότι ο κωδικός πρόσβασης για αυτό - αν θα θέλατε να δοκιμάσετε
τη σύνδεση με αυτό για καλύτερη ταχύτητα και να μας ενημερώσετε αν δεν είναι καλύτερη -
είναι ένα, δύο, τρία, τέσσερα, πέντε, σε όλη τη διαδρομή μέχρι και οκτώ διότι οκτώ είναι
πιο ασφαλή από ό, τι πέντε.
Έτσι, αν χρειάζεστε τη σύνδεση Wi-Fi κωδικό πρόσβασης, συνδεθείτε ασύρματα CS50 εδώ.
Ένα, δύο, τρία, τέσσερα, πέντε, έξι, επτά, οκτώ.
Και μετά για CS50 Συζητήστε αν έχετε ακόμα διαλείπουσα προβλήματα συνδεσιμότητας,
και θα αφήσουμε τις εξουσίες που πρέπει να ξέρετε για αυτή τη θέση.
>> Εντάξει.
Έτσι, μια γρήγορη teaser, ειδικά για εκείνους από εσάς που είναι αγόρια ή κορίτσια ανεμιστήρα
του συνόλου της Apple πράγματα.
Αυτό που ξέθαψε από λίγα χρόνια πίσω ήταν αυτό το αρχείο εδώ, ilock.c, ακριβώς για να
είδος του κάνει πιο συγκεκριμένες και πιο περίπλοκη μερικές από τις πιο βασικές C
προγράμματα που έχουμε γράψει.
Έτσι άνοιξα αυτό το αρχείο, ilock.c.
Είναι διαθέσιμο στη σελίδα διαλέξεις για σήμερα.
Στην αριστερή πλευρά, θα δείτε έναν μακρύ κατάλογο των λειτουργιών.
Έτσι, ο τύπος που έγραψε αυτό έγραψε πολλές λειτουργίες,
περισσότερο από ό, τι ακριβώς κύριος.
Συνήθιζε ένα σωρό βιβλιοθήκες εδώ.
Και αν αρχίσουμε κύλιση, τι είναι στην πραγματικότητα αυτό είναι το πολύ
Κατ 'αρχάς, πιστεύω ότι, για να σπάσει το αρχικό iPhone.
Όταν θέλετε να κάνετε jailbreak το iPhone πρωτότυπο, το οποίο σημαίνει untether
από την AT & T και στην πραγματικότητα εγκατάσταση ειδικού λογισμικού για αυτό και κάνουμε τα πράγματα
ότι η Apple δεν ήθελε τους ανθρώπους να κάνουν -
καλά, κάποιος πήρε το χρόνο για να καταλάβουμε ακριβώς πώς θα μπορούσαν να αξιοποιήσουν
ελαττώματα του λογισμικού, τα λάθη, σφάλματα, το λογισμικό της Apple.
Και έτσι γεννήθηκε ilock.c.
Ότι αν το καταρτίζονται σε έναν υπολογιστή και εγκατασταθεί σε ένα iPhone που
συνδέθηκε με τον υπολογιστή σας μέσω, για παράδειγμα, ένα καλώδιο USB, αυτό θα σας δώσει
διοικητικές ή προνόμια root στο iPhone σας και σας επιτρέπουν να κάνετε λίγο πολύ
ό, τι θέλετε.
>> Και έτσι έχει υπάρξει αυτό το συναρπαστικό παιχνίδι της γάτας και του ποντικιού μεταξύ της Apple και
ο υπόλοιπος κόσμος, ιδίως δεδομένου ότι, όπως πολλές εταιρείες, προσπαθήστε να κλειδώσετε
πράγματά τους κάτω έτσι ώστε να μπορείτε να το κάνετε μόνο με το τι σκοπεύουν.
Όμως, χάρη σε ανθρώπους σαν και αυτή η κατανόηση του χαμηλού επιπέδου
λεπτομέρειες και, στην περίπτωση αυτή, προγραμματισμού C και πολλά από τα γνωστά κατασκευάσματα
ότι έχουμε αρχίσει να παίζει με, είστε σε θέση να αξιοποιούν πραγματικά το
υλικό με τρόπο που βλέπετε την τακτοποίηση και όχι κατ 'ανάγκη κάποια εταιρική οντότητα.
Έτσι, για παράδειγμα, δεν έχω καμία ιδέα για το τι όλα αυτά που κάνει.
Αλλά GetVersion ακούγεται αρκετά απλή.
Και αυτό μοιάζει με αυτό είναι μια λειτουργία που έγραψε αυτό το πρόσωπο.
Πάρτε κάποιο είδος του ακεραίου ως επιχείρημα, δεν επιστρέφει τίποτα, αλλά
φαίνεται να βρόχο με ένα for loop εδώ και μια κατάσταση, αν, αν κατάσταση,
σπάσει, και με κάποιο τρόπο σχετίζεται με αριθμούς έκδοσης.
Αν μετακινηθείτε προς τα κάτω -
παρόλο που πολλές από αυτές τις λέξεις-κλειδιά θα είναι νέα, και υπάρχει μια
σωρό λειτουργίες σε εδώ που έχουμε δει ποτέ και δεν θα δείτε ποτέ πάνω από
η πορεία του εξαμήνου -
Στο τέλος της ημέρας, ακολουθεί τους ίδιους κανόνες και τη λογική ότι έχουμε ήδη
παίζοντας με μέχρι στιγμής.
Έτσι, αυτό είναι πολύ γέρος για να σπάσει το iPhone σας 3s ή 4s 5s ή γρήγορα, αυτές τις μέρες,
αλλά ξέρω ότι είναι όλοι πάρα πολύ που προέρχονται από αυτό τον κόσμο που έχουμε
βουτούσαν.
>> Έτσι, ας ρίξουμε μια ματιά σε ένα λίγο πιο απλό παράδειγμα.
Αυτό και μόνο, απλά για να ζεσταθεί με κάποια σύνταξη, καθώς και ορισμένα άλλα στοιχεία
τύπου ότι έχουμε μιλήσει, αλλά δεν έχουν πραγματικά δει σε C. Έτσι, αυτό είναι ένα
αρχείο με όνομα positive1.c.
Και σύμφωνα με τις παρατηρήσεις στην κορυφή, αυτό απαιτεί απλώς ότι ένας χρήστης παρέχει ένα
θετικός αριθμός.
Γι 'αυτό είναι ένα παράδειγμα ένα do-while loop, το οποίο είναι ωραίο για το χρήστη διαδραστική
προγράμματα για τα οποία θα πρέπει να πείτε στον χρήστη να κάνει κάτι.
Και αν δεν συνεργαστούν, θα φωνάζω σε αυτούς ή να απορρίψει τη συμβολή τους.
Υπόθεση στο σημείο, εγώ είμαι πρόκειται να κάνει γραμμές 19 έως 24, εφόσον ο χρήστης έχει
δεν μου έδωσε έναν θετικό αριθμό.
Τώρα αυτή η λεπτομέρεια εδώ στη γραμμή 18, γιατί δηλώνω n πάνω από αυτό το σύνολο
looping κατασκευή, σε αντίθεση προς τα δεξιά δίπλα στη γραμμή 22, όπου θα
πραγματικά ενδιαφέρονται για να πάρει n;
Ναι;
[Δεν ακούγεται]
>> David J. Malan: Ναι, έτσι το ζήτημα του πεδίου εφαρμογής.
Και σε απλή γλώσσα όρος, τι δεν αναφέρεται στο πεδίο;
Ναι;
[Δεν ακούγεται]
David J. Malan: Μπορείτε να μας μιλήσετε λίγο πιο δυνατά;
ΟΜΙΛΗΤΗΣ 1: Πού μπορείτε να αποκτήσετε πρόσβαση σε μια συγκεκριμένη μεταβλητή.
David J. Malan: Τέλεια.
Πού μπορείτε να αποκτήσετε πρόσβαση σε μια συγκεκριμένη μεταβλητή.
Και γενικά, ο κανόνας μέχρι τώρα ήταν ότι το πεδίο εφαρμογής ορισμένων
μεταβλητή αυτή ορίζεται από τις πιο πρόσφατες άγκιστρα που έχετε δει.
Και έτσι σε αυτή την περίπτωση, αν έκανα το λάθος να δηλώσει n στη γραμμή 22,
ότι η γραμμή θα μπορούσε να λειτουργήσει.
Θα ήθελα να πάρετε μια int, και θα ήθελα να το θέσω σε αυτή τη μεταβλητή n στην γραμμή 22.
Αλλά ποια γραμμή κώδικα θα έχουν πλέον καμία ιδέα για το τι μιλάω;
Έτσι, 25, και βγάζει 24, καθώς και, επειδή σε αυτήν την περίπτωση, δεν εμπίπτει
τα άγκιστρα.
Έτσι, μόλις ένα μικρό κομμάτι από μια ενόχληση, αλλά πολύ εύκολα να λυθεί με απλή δήλωση
η μεταβλητή έξω από την ίδια τη λειτουργία.
>> Τώρα θα δούμε αργότερα σήμερα, μπορείτε να πάτε ένα βήμα παραπέρα.
Και θα μπορούσατε ακόμα και να πάρετε μια λίγο τεμπέλης -
και αυτό δεν πρέπει να συνιστάται, σε γενικές γραμμές -
αλλά θα μπορούσε ακόμη και να πάρει τεμπέλης και να θέσει μια μεταβλητή σε παγκόσμιο επίπεδο, να το πω έτσι, δεν
εσωτερικό μιας συνάρτησης, όχι στο εσωτερικό ενός βρόχου, αλλά στο ίδιο το αρχείο, εκτός
από όλες τις λειτουργίες που έχετε γράψει, όπως έκανα εδώ στη γραμμή 15.
Αλλά αυτό είναι γενικά επάνω.
Αλλά συνειδητοποιούν αυτό είναι μια λύση μερικές φορές σε άλλα προβλήματα, όπως θα
τελικά δείτε.
Έτσι, για τώρα, εμείς θα το αφήσουμε έτσι.
Αλλά ας δούμε αν μπορούμε να ξαναγράψουμε αυτό ακριβώς για να ξεκινήσει μια εκφραζόμαστε
λίγο διαφορετικά.
>> Έτσι, το πρόγραμμα αυτό, ακριβώς για να είναι σαφής, είναι positive1.
Επιτρέψτε μου να προχωρήσει εδώ και στο παράθυρο του τερματικού μου κάνει positive1, Enter.
Συλλέγει, εντάξει.
Πάω να τρέξει positive1, πατήστε Enter.
Απαιτώ να μου δώσετε ένα θετικό ακέραιο.
Θα πω -1.
Αυτό δεν λειτούργησε.
0, 99, η οποία φαίνεται να λειτουργεί.
Ίσως δεν είναι η πιο αυστηρή δοκιμασία.
Αλλά τουλάχιστον είναι μια ωραία επιταγή λογική ότι είμαστε στο σωστό δρόμο.
Έτσι, τώρα επιτρέψτε μου να προχωρήσει και να ανοίξει την έκδοση δύο από αυτό.
Και τι είναι διαφορετικό ήδη;
Υλοποιεί το ίδιο πράγμα.
Αλλά τι είναι το άλμα από το σαφώς διαφορετικό αυτή τη φορά;
Ναι, έτσι αυτό bool στο πράσινο.
Gedit έχει τονίσει σε αυτό το πράσινο λέξη-κλειδί γνωστή ως bool,
η οποία είναι ένας τύπος δεδομένων.
Δεν έχει έρθει ενσωματωμένο σε όλες τις εκδόσεις του C. Θα πρέπει να περιλαμβάνει ένα
συγκεκριμένη βιβλιοθήκη.
Στην περίπτωσή μας, θα περιλαμβάνεται το CS50 βιβλιοθήκη έτσι ώστε να
έχουν πρόσβαση σε bool.
Όμως, στη γραμμή 18, φαίνεται να έχουμε μια λογική τιμή εδώ ονομάζεται ευγνώμων.
Γι 'αυτό και θα μπορούσε να λέγεται αυτό το τίποτα.
Αλλά αυτό που ονομάζεται απλά ευγνώμων για το είδος του μεταφέρω κάποια σημασιολογική έννοια.
Έτσι, αρχικά στη γραμμή 18, είμαι προφανώς δεν ευγνώμων, διότι η
Boolean τιμή ευγνώμων ξεκινά να false στη γραμμή 18.
Και τότε φαίνεται τι έχω κάνει εδώ στις γραμμές 21 έως 23 είναι που έχω μόλις
το είδος της ξαναγραφεί λογική μου.
Έτσι, δεν έχει λειτουργικά διαφορετικές.
Αλλά στην γραμμή 22 τώρα, μπορώ να ελέγξω αν το int ο χρήστης έχει δώσει είναι μεγαλύτερη από ό, τι
0, τότε μπορώ να αλλάξω απλώς την αξία των ευγνώμων για αλήθεια.
Και γιατί το κάνω αυτό;
Επειδή στην γραμμή 25, προφανώς, Πάω να ελέγξετε την κατάσταση.
Κάντε αυτό το βρόχο, ενώ ευγνώμων είναι ψευδής.
>> Γι 'αυτό και προτείνω αυτό ως εναλλακτική λύση στην έκδοση γιατί είναι τουλάχιστον ένα
λίγο πιο έξυπνο, ίσως.
Είναι λίγο πιο γειωμένη στην αγγλική γλώσσα.
Έτσι, κάνετε τα ακόλουθα, ενώ δεν είστε ευγνώμονες ή ενώ ευγνώμων είναι ψευδής.
Και αυτή τη φορά, πάρα πολύ, εγώ προφανώς δεν με νοιάζει να θυμόμαστε ό, τι ο χρήστης πληκτρολογήσει
επειδή στην ανακοίνωση δεν υπάρχει μεταβλητή n.
Έτσι, στην πραγματικότητα, Ι -
ένα μικρό αθώο ψέμα εκεί.
Λειτουργικά, το πρόγραμμα είναι λίγο διαφορετική όταν θα φτάσετε στο κάτω μέρος του
επειδή δεν είμαι θυμόμαστε τι είναι n.
Αλλά ήθελα να αποδείξει εδώ ότι ακόμα κι αν έχουμε δει και GetInt
GetString που χρησιμοποιείται στη δεξιά πλευρά ενός ίσον μέχρι τώρα, έτσι ώστε
θυμόμαστε την αξία, από τεχνική άποψη, αυτό δεν είναι απολύτως απαραίτητο.
Αν για οποιοδήποτε λόγο απλά δεν με νοιάζει να σώσει την τιμή, απλά θέλετε
για να ελέγξετε την τιμή, παρατηρούμε ότι μπορούμε να γράψουμε απλά αυτό ως GetInt ανοιχτό
παρένθεση, κοντά παρένθεση.
Η λειτουργία πρόκειται να επιστρέψει μια τιμή, όπως έχουμε πει.
Είναι πρόκειται να σας δώσει πίσω ένα int.
Και έτσι, αν σκεφτούμε διανοητικά να συμβεί αυτό, όταν πληκτρολογείτε σε 99, GetInt
επιστρέφει τον αριθμό 99.
Και έτσι εννοιολογικά, είναι σαν τον κωδικό μου ήταν πραγματικά αυτό.
Έτσι, εάν 99 είναι πράγματι μεγαλύτερη από μηδέν, τότε ευγνώμονες γίνει αληθής.
Στη συνέχεια, γραμμή 25 πραγματοποιεί ooh, τελειώσαμε επειδή είμαι τώρα ευγνώμων.
Και στη γραμμή 26, εμείς απλώς να πω, ευχαριστώ για το θετικό ακέραιο, ανεξάρτητα από το
έτυχε να είναι.
>> Τώρα ας κάνουμε μικρή συντακτική ζάχαρη εδώ, να το πω έτσι.
Ας δούμε αν μπορούμε να καθαρίσει αυτή τη γραμμή 25 με αυτό το τρίτο και τελευταίο διακύμανση
σε positive3.
Έτσι, παρατηρούμε την μόνη διαφορά τώρα είναι τι γραμμή κώδικα;
Ναι, έτσι 25.
Και δεν έχουμε δει πραγματικά αυτό το τέχνασμα ακριβώς ακόμα.
Αλλά κάναμε δείτε το θαυμαστικό τη Δευτέρα, η οποία δηλώνει τι;
Έτσι, δεν είναι, ή άρνηση.
Πάρτε λοιπόν μια λογική τιμή και γυρίστε την αξία του.
True γίνεται ψευδής.
Λάθος γίνεται πραγματικότητα.
Έτσι αυτό, θα ήθελα να προτείνω, είναι ακόμη λίγο πιο έξυπνο από ένα τρόπο
γράφοντας τον κωδικό γιατί ακόμα προετοιμαστεί ευγνώμων για ψευδείς.
Εξακολουθώ να κάνω το εξής.
Έθεσα ευγνώμων για αλήθεια, όταν έρθει η ώρα.
Αλλά τώρα μπορείτε πραγματικά να μεταφράσει ακριβώς αυτόν τον κώδικα προφορικά αριστερά προς τα δεξιά,
ενώ δεν ευγνώμων.
Επειδή Έκρηξη, ή θαυμαστικό, υποδηλώνει την έννοια του όχι, έτσι ενώ
δεν ευγνώμων.
>> Έτσι, και πάλι, δεν έχουμε εισάγει νέες έννοιες per se.
Έχουμε μιλήσει για τα Boolean πίσω όταν παίξαμε με Scratch.
Αλλά συνειδητοποιούν τώρα μπορούμε απλά να αρχίσετε να γράφετε κώδικα μας
πολλούς διαφορετικούς τρόπους.
Έτσι, ειδικά σε pset1, εάν είστε το είδος του που αγωνίζονται να καταλάβω τον τρόπο να
γράψετε κάποιο πρόγραμμα, οι πιθανότητες είναι είστε στην τύχη, διότι εκεί πρόκειται να είναι οποιαδήποτε
αριθμός των λύσεων που μπορεί να συμβεί μετά.
Για παράδειγμα, αυτό είναι μόνο τρεις για ακόμη και το απλούστερο των προγραμμάτων.
Εντάξει.
Και τώρα θυμάμαι την Δευτέρα, αφήσαμε σε αυτό το σημείωμα με τις τιμές επιστροφής.
Έτσι, για πρώτη φορά, γράψαμε ένα πρόγραμμα που δεν είναι μόνο να έχουν την κύρια,
έχει επίσης τη δική του προσαρμοσμένη συνάρτηση που έγραψα εδώ.
Έτσι, σε σειρά 31 έως 34, έχω εφαρμόσει μια λειτουργία κύβο.
Δεν είναι πολύπλοκη.
Είναι μόλις φορές φορές ένα, σε αυτή την περίπτωση.
Αλλά αυτό που είναι σημαντικό για αυτό είναι ότι παίρνω εισόδου με τη μορφή ενός και
Είμαι επιστροφή εξόδου με τη μορφή ενός φορές φορές ένα.
>> Έτσι, τώρα έχω τη δυνατότητα, όπως και εγώ που χρησιμοποιούνται για να με printf μόνο, για να καλέσετε
αυτή η λειτουργία καλώντας τη λειτουργία του κύβου.
Και η λειτουργία κύβος παίρνει κάποια στοιχεία.
Και η λειτουργία κύβος επιστρέφει κάποιο αποτέλεσμα.
Και έτσι, αντίθετα, printf έκανε κάτι.
Δεν επιστρέφει τίποτα ότι νοιαζόμαστε για - έστω και αν, ως
μέρος, το κάνει να επιστρέψει μια τιμή.
Μπορείτε απλά αγνοούν γενικά.
Printf έκανε κάτι.
Είχε μια παρενέργεια της εκτύπωσης στην οθόνη.
Αντίθετα εδώ, έχουμε τη λειτουργία κύβου, η οποία
στην πραγματικότητα επιστρέφει κάτι.
>> Έτσι, αυτό είναι γενικά -
για όσους είναι εξοικειωμένοι με αυτό, είναι μια αρκετά απλή ιδέα.
Αλλά για εκείνους που είναι λιγότερο εξοικειωμένοι με την ιδέα αυτή να περάσει στις εισροές και να πάρει
πίσω εξόδους, ας προσπαθήσουμε κάτι εξαιρετικά απλό.
Είναι κανείς άνετα να ανεβαίνει στη σκηνή για λίγο;
Θα πρέπει να αισθάνονται άνετα με μια φωτογραφική μηχανή για σας, καθώς και.
Ναι.
Εντάξει, τι είναι το όνομά σας;
KEN: Ken.
David J. Malan: Ken.
Εντάξει, ο Ken.
Ελάτε επάνω.
Έτσι Ken πρόκειται να είναι μια συνάρτηση του είδους εδώ.
Και ας πάμε μπροστά και να το κάνουμε αυτό.
Ας πάμε λίγο φαντασία.
Χάρηκα για τη γνωριμία.
Καλώς ήρθατε στο προσκήνιο.
Εντάξει.
Ας χτυπήσει αυτό το κουμπί εδώ.
Εντάξει.
Έτσι, εδώ έχετε ένα σύγχρονο μαυροπίνακα.
Και αυτό που είμαι είναι η κύρια λειτουργία, για παράδειγμα.
Και δεν έχω ένα iPad στο χέρι μου.
Πραγματικά, δεν θυμάμαι πώς - και, στην πραγματικότητα, δεν μπορούμε να πούμε ότι.
Δεν έχω πραγματικά καλή γραφή.
Και έτσι λοιπόν, θέλετε να εκτυπώσετε κάτι στην οθόνη για μένα.
>> Είμαι, λοιπόν, είναι το κύριο πρόγραμμα.
Και εγώ είμαι πρόκειται να έχετε το πω αυτό με το γράψιμο το μηδέν στο κοτόπουλο μου και
στη συνέχεια, περνώντας μια είσοδο σας.
Έτσι, ως ανόητη και αν αυτή η άσκηση είναι, η έννοια των λειτουργιών και μια κλήση
λειτουργία και επιστρέφει μια λειτουργία πραγματικά βράζει κάτω σε αυτό.
Είμαι κύριος.
Έχω γράψει μόλις printf ("κάτι") στην οθόνη.
Τρέχω αυτό το πρόγραμμα.
Και το συντομότερο printf παίρνει ονομάζεται, παίρνει ένα επιχείρημα - ή μία παράμετρο,
μερικές φορές -
μεταξύ διπλά εισαγωγικά.
Εδώ είναι το επιχείρημα.
Είμαι το πέρασμα στον Ken.
Τώρα είναι ένα μαύρο κουτί γραπτή κάποια πριν από μερικά χρόνια ότι προφανώς
μόνο ξέρει πώς να εκτυπώσετε τα πράγματα στην οθόνη.
>> Έτσι, την εκτέλεση.
Αυτό δεν είναι κακό.
Έτσι, είναι πολύ καλή.
Έτσι τώρα ο Ken γίνεται εκτέλεσης.
Μήπως πρέπει να το χέρι μου τίποτα πίσω;
Έτσι, δεν είναι ότι έχουμε δει μέχρι στιγμής.
Και πάλι, printf δεν επιστρέφει στην πραγματικότητα έναν αριθμό.
Αλλά θα πάμε να αγνοούν ότι για τώρα, γιατί ποτέ δεν έχω χρησιμοποιήσει.
Έτσι, αυτό που είναι για τον Ken.
Και έτσι τώρα κύρια έρχεται πίσω για να εκτελεστεί -
κύριος αναλαμβάνει τον έλεγχο του προγράμματος και πάλι, επειδή αυτή τη γραμμή του κώδικα,
printf, γίνεται εκτέλεσης.
Και πάμε για τον τρόπο μας την εκτέλεση ό, τι άλλες γραμμές υπάρχουν.
>> Εντάξει.
Έτσι, τώρα ας προσπαθήσουμε ένα ελαφρώς διαφορετικό παράδειγμα.
Και αυτή τη φορά εδώ, ας ξεκαθαρίσουμε πρώτα την οθόνη εδώ.
Και αυτή τη φορά, θα κάνουμε τη λειτουργία κοπής σε κύβους.
Αλλά αυτή τη φορά, περιμένω μια τιμή εξόδου.
Ας προχωρήσουμε και να κάνουμε αυτό.
Έτσι, τώρα έχω μια γραμμή κώδικα που λέει ότι x = κύβος (x).
Έτσι, στην πραγματικότητα let's -
η γραμμή του κώδικα, ανάκληση, μοιάζει με αυτό.
χ = κύβο (χ).
Λοιπόν, πώς είναι αυτό πρόκειται να λειτουργήσει;
Ας προχωρήσουμε και να σας δώσει μια λευκή οθόνη και πάλι.
Και εγώ είμαι πρόκειται να γράψω τώρα κάτω από την τιμή του x, η οποία αυτή τη στιγμή σε
φορά συμβαίνει να είναι, ας πούμε, 2, για να το κρατήσει απλό.
Έτσι έχω γράψει κάτω σε ένα κομμάτι χαρτί η αξία των 2,
η οποία είναι η τιμή του x μου.
Μου το χέρι στον Ken.
KEN: Και γράφω απλά την απάντηση;
David J. Malan: Ναι, ας γράψει ακριβώς την απάντηση.
Εντάξει.
Και τώρα πρέπει να επιστρέψει με κάτι.
Έτσι -
τέλεια.
Νίκαια segue.
>> Έτσι, τώρα τα χέρια μου πίσω την αξία των 8, σε αυτή την περίπτωση.
Και τι μπορώ να κάνω με αυτό;
Λοιπόν, στην πραγματικότητα, ας δούμε.
Πάρτε αυτό το δικαίωμα.
Τι θα πάω να κάνω με αυτό;
Τώρα είμαι πρόκειται να λάβει αυτήν την τιμή και πραγματικά να το αποθηκεύσετε σε εκείνους
ίδια bits στη μνήμη.
Αλλά ειδοποίηση, είμαι το είδος του αγώνα εδώ.
Είμαι λίγο μπερδεμένος γιατί όπου μπορώ να γράψω πραγματικά την αξία του x;
Γιατί ό, τι έχω κάνει ακριβώς είναι φυσικά το χέρι Ken ένα κομμάτι χαρτί
που είχε την τιμή 2, η οποία ήταν x.
Και πράγματι, αυτό είναι ακριβώς ό, τι συμβαίνει.
Έτσι, αποδεικνύεται ότι όταν καλείτε μια συνάρτηση, και να περάσετε σε ένα επιχείρημα
όπως το "Hello World" ή να περάσετε σε ένα επιχείρημα όπως είναι το 2, σε γενικές γραμμές, είστε
περνώντας σε ένα αντίγραφο της εν λόγω επιχείρημα.
Και έτσι ακριβώς όπως έγραψα κάτω τον αριθμό 2 εδώ και παρέδωσαν στον Ken? Που πρέπει
σημαίνει ότι εξακολουθώ να έχω ένα αντίγραφο του 2 αξία κάπου.
Διότι πράγματι, τώρα που έχω πάρει πίσω την τιμή 8, θα πρέπει να πάμε πίσω στο
RAM και πραγματικά γράψετε 8, όπου είχα μια φορά τον αριθμό 2.
>> Έτσι, να θυμάστε αυτή την οπτική αντίληψη του περνώντας κυριολεκτικά
αντίγραφο της αξίας.
Ken κάνει το πράγμα του, τα χέρια μου πίσω κάτι - στην περίπτωση αυτή,
μια αξία σαν 8.
Και τότε θα πρέπει να κάνουμε κάτι με αυτή την τιμή αν
θέλετε να το κρατήσετε γύρω.
Έτσι, όλα αυτά θα είναι όλοι πάρα πολύ εξοικειωμένοι πριν από καιρό.
Σας ευχαριστώ πολύ για αυτό το demo, εδώ Ken.
Εντάξει.
Πολύ καλά κάνει.
Ας δούμε λοιπόν πώς τελικά που σχετίζεται με κάποια από τη λειτουργία
καλώντας ότι έχουμε κάνει εδώ.
Επιτρέψτε μου λοιπόν να προχωρήσουμε και να μας φέρει πίσω στο παράδειγμα εδώ κοπής σε κύβους.
Και παρατηρώ ότι, αν θέλουμε πραγματικά να αρχίσετε να παίρνετε αυτό περαιτέρω, θα πάμε
να πρέπει να λαμβάνει υπόψη της το γεγονός ότι ο αριθμός x που είναι να περάσει στην
εδώ είναι διαφορετική από ό, τι είναι στην πραγματικότητα να περάσει σε λειτουργία.
Έτσι, και πάλι, αυτό πέρασε από αντίγραφο πρόκειται να γίνει αρκετά
germane ακριβώς σε μια στιγμή.
>> Έτσι, ας ρίξουμε μια ματιά σε κάτι που δεν εργάζονται αρκετά δεξιά ακόμα.
Πάω να πάει μπροστά και να ανοίξει ένα τρίτο παράδειγμα με λάθη, τα οποία
πάσχει από τη φύση.
Και λέγεται buggy3, και εφαρμόζει μια εναλλαγή λειτουργίας.
Έτσι, εδώ έχουμε μια βασική λειτουργία που έχει x και y αρχικοποιείται σε αυθαίρετα
1 και 2, αντιστοίχως.
Θα μπορούσαμε να χρησιμοποιήσουμε GetInt, αλλά χρειαζόμαστε μια απλή άσκηση.
Έτσι είναι δύσκολο-κωδικοποιημένα ως 1 και 2.
Στις γραμμές 21 και 22, που προφανώς εκτυπώσετε x και y, μία ανά γραμμή.
Στη συνέχεια, στη γραμμή 23, που ισχυρίζονται είμαι εναλλαγή αυτές τις αξίες, τελεία, τελεία, τελεία.
Καλώ προφανώς μια λειτουργία στην γραμμή 24 που ονομάζεται ανταλλαγής
που παίρνει δύο επιχειρήματα.
Είναι εντελώς legit λειτουργίες για να λάβει δύο επιχειρήματα.
Έχουμε δει printf το κάνει ήδη.
Έτσι ανταλλαγής παίρνει προφανώς x και y.
Και όπως υποδηλώνει το όνομά του, θα ήθελα να ελπίζω ότι πρόκειται να
ανταλλάξουν αυτές τις δύο τιμές.
Έτσι, τότε θα διεκδικήσει στη γραμμή 25, αντάλλαξαν.
Και εγώ επανεκτύπωση x και y με την παραδοχή ότι
που έχουν πράγματι έχουν μετατραπεί.
Αλλά αν τρέξω πραγματικά αυτό το πρόγραμμα -
επιτρέψτε μου να ανοίξει ένα παράθυρο τερματικού.
Επιτρέψτε μου να κάνω buggy3.
Όπως υποδηλώνει το όνομα, αυτό δεν πρόκειται να τελειώσει καλά.
Γιατί όταν χτύπησα Enter, παρατηρούμε ότι το x είναι 1.
γ είναι 2.
Και ακόμη στο τέλος του προγράμματος, είναι ακόμα, στην πραγματικότητα, το ίδιο.
>> Έτσι, με βάση την επίδειξη μόλις τώρα με τον Ken, τι πραγματικά συμβαίνει;
Λοιπόν, ας βουτήξει σε αυτή τη λειτουργία swap.
Είναι εξαιρετικά σύντομη.
Είναι μόνο λίγες γραμμές κώδικα καιρό.
Αλλά ποιο είναι το βασικό πρόβλημα με βάση την απλή ιστορία είπε
εδώ με τον Ken;
Γιατί έχει σπάσει swap;
[Δεν ακούγεται]
Ακριβώς.
Έτσι είμαστε αποθήκευση σε ένα αντίγραφο, δεν είναι η ίδια η μεταβλητή.
Με άλλα λόγια, η ανταλλαγή παίρνει προφανώς δύο επιχειρήματα, ένα int.
Και αυτό είναι που ονομάζεται αυθαίρετα a και b.
Και μέχρι εδώ, έχω περάσει σε x και y, τα οποία είναι αντίστοιχα 1 και 2.
Αλλά δεν είμαι κυριολεκτικά περνώντας x.
Δεν είμαι κυριολεκτικά περνώντας y.
Είμαι περνώντας ένα αντίγραφο του x και ένα αντίγραφο του y.
Είναι σαν σχεδόν σαν να αντιγραφεί και να επικολληθεί σε ανταλλάξουν τις αξίες που
θέλετε πραγματικά να χειριστείτε.
Έτσι, αν αυτή είναι η περίπτωση, όταν εγώ, το πρόγραμμα, ξεκινήστε την εκτέλεση
γραμμή 35, ακολούθως 36 -
όταν έχω στη γραμμή 37, σε αυτό το σημείο στην ιστορία, ποια είναι η αξία του ένα;
Σε αυτό το σημείο στην ιστορία, γραμμή 37, ποια είναι η αξία του ενός σε αυτό το σημείο;
Γι 'αυτό θα πρέπει να είναι ακριβώς 1.
Σωστά;
Επειδή x ψηφίστηκε ως το πρώτο επιχείρημα.
Και αυτή η λειτουργία ακριβώς αυθαίρετα ζητά πρώτο επιχείρημα του, ένα.
Το ίδιο ισχύει και y, το δεύτερο επιχείρημα.
Και αυτό είναι ένα απλό τηλεφώνημα αυθαίρετα το δεύτερο β επιχείρημα.
>> Τώρα, αυτή η διχοτόμηση είναι πραγματικά αρκετά απλά εξήγησε.
Σκεφτείτε το.
Κανείς από εμάς δεν έχουν συναντήσει το πρόσωπο που έγραψε printf.
Έτσι, σίγουρα, αυτός ή αυτή δεν έχει καμία ιδέα για το τι μεταβλητές μας 30 χρόνια αργότερα θα
να ονομάζεται.
Έτσι, πρέπει να υπάρχει μια διάκριση ανάμεσα σε αυτό που αποκαλούν μεταβλητές
λειτουργίες είστε γραπτώς και αυτό που εσείς ονομάζετε τις μεταβλητές σε συναρτήσεις είστε
κλήσης ή τη χρήση.
Έτσι με άλλα λόγια, έχω γράψει μου ως μεταβλητές x και y.
Αλλά αν κάποιος άλλος είχε γράψει τη λειτουργία ανταλλαγής, αυτός ή αυτή σίγουρα
Δεν ξέρω τι θα μου μεταβλητές πρόκειται να κληθεί.
Έτσι, συνειδητοποιούν ότι αυτός είναι ο λόγος που έχουν αυτή τη δυαδικότητα των ονομάτων.
Τεχνικά, θα μπορούσα να κάνω αυτό από σύμπτωση.
Αλλά θα εξακολουθεί να περάσει στην ως αντίγραφα.
Θα ήταν απλώς να είναι μια καθαρή σύμπτωση αισθητικά αν το πρόσωπο που έγραψε
ανταλλαγής είχε χρησιμοποιήσει τα ίδια ονόματα.
>> Εντάξει.
Έτσι, σε αυτό το σημείο στην ιστορία, γραμμή 37, ένα είναι 1.
το b είναι 2.
Και τώρα να προχωρήσει για να τους ανταλλάξουν.
Λοιπόν, πρώτα απ 'όλα, επιτρέψτε μου να κάνω πραγματικά αυτό πολύ πιο απλά.
Δεν ξέρω τι αυτές οι τρεις γραμμές κώδικα έκαναν.
Επιτρέψτε μου να κάνω ακριβώς αυτό.
β παίρνει.
β παίρνει ένα.
Τέλος.
Γιατί αυτό είναι σπασμένο, λογικά;
Είναι το είδος της διαισθητικής πράγμα, έτσι δεν είναι;
Έτσι, γίνεται ένα b.
Και β γίνεται.
Αλλά το πρόβλημα είναι ότι το συντομότερο γραμμή 37 εκτελεί, ποια είναι η
αξία των α και β;
Το ίδιο, 1.
Επειδή έχετε clobbered, να το πω έτσι, έχετε αλλάξει β να ισούται με ένα.
Έτσι, μια φορά γραμμή 37 εκτελείται, αυτό είναι υπέροχο.
Τώρα έχετε δύο αντίγραφα του τον αριθμό 1 στο εσωτερικό αυτής της λειτουργίας.
Έτσι λοιπόν, όταν λέτε στην γραμμή 38, παίρνει β, καλά, είστε το είδος του βιδωθεί.
Επειδή είστε ανάθεση μόλις 1 προς 1.
Έχετε είδος χάσει την αξία που νοιαζόταν για.
>> Έτσι, στην αρχική εκδοχή του αυτό, παρατηρήστε τι έκανα.
Είχα αντ 'αυτού μια τρίτη γραμμή του κώδικα που έμοιαζε με αυτό.
Δηλώνω μια προσωρινή μεταβλητή - tmp είναι ένα πολύ κοινό όνομα
για μια προσωρινή μεταβλητή.
Είναι μια int επειδή έχει να ταιριάζει με αυτό που θέλω να κάνω ένα αντίγραφο του.
Έχω αποθηκεύσει ένα αντίγραφο στο εσωτερικό του tmp. Έτσι, μια φορά γραμμή 37 έχει εκτελεστεί,
η τιμή του α είναι -
γρήγορη λογική ελέγχου -
1.
Η τιμή του b είναι 2.
Και η τιμή του tmp είναι επίσης 1.
Έτσι, τώρα έχω εκτελέσει γραμμή 38.
Έτσι, όταν εκτελεί τη γραμμή 38, ένα παίρνει την τιμή του b.
Και Β 2.
Έτσι, ένα είναι τώρα 2.
Έτσι, σε αυτό το σημείο στην ιστορία, ένα είναι 2, b είναι 2,
tmp και είναι 1.
Έτσι τώρα λογικά, μπορούμε αξία μόνο tmp γδούπο του σε β.
Και τελειώσαμε.
>> Έτσι έχουμε λύσει αυτό το πρόβλημα.
Δυστυχώς, όταν εγώ τρέχω αυτό το πρόγραμμα σε αυτή τη μορφή, δεν πραγματικά ανταλλάξουν
οποιεσδήποτε τιμές.
Αλλά για να είναι σαφής, γιατί;
I σταθερό το λογικό πρόβλημα από μόλις πριν από λίγο.
Αλλά και πάλι, αν εκτελέσετε αυτό το πρόγραμμα, x και y παραμένουν αμετάβλητα από το τέλος του
εκτέλεση του προγράμματος.
[Δεν ακούγεται]
David J. Malan: Γι 'αυτό και δεν έχουν επιστρέψει τίποτα.
Έτσι, αυτό είναι αλήθεια.
, Αλλά αποδεικνύεται ότι υπάρχει ένα μικρό πρόβλημα εδώ, διότι μέχρι στιγμής η
μόνο πράγμα που έχουν βρεθεί εκεί σε θέση να επιστρέψει είναι ένα πράγμα.
Και αυτό είναι ο περιορισμός του C. Μπορείτε να επιστρέψετε μόνο πραγματικά μία τιμή,
Στην περίπτωση αυτή, είμαι το είδος του κολλήσει εδώ
γιατί θα μπορούσε να επιστρέψει τη νέα τιμή του x ή θα μπορούσε να επιστρέψει το
νέα τιμή του y.
Αλλά θέλω τόσο πίσω.
Έτσι επιστρέφοντας δεν είναι η απλή λύση εδώ.
Αλλά το πρόβλημα είναι ουσιαστικά ο λόγος;
Τι έχουμε πραγματικά αντάλλαξαν;
a και b.
Αλλά α και b είναι αντίγραφα των χ και γ, που σημαίνει ακριβώς κάναμε όλα αυτά
εργασία - που μόλις πέρασε σαν τρία λεπτά μιλώντας για τη συμφωνία ανταλλαγής
λειτουργία και οι τρεις από αυτές τις μεταβλητές.
Και αυτό είναι μεγάλη, απολύτως σωστό σε απομόνωση.
Αλλά μια και το πεδίο εφαρμογής β είναι μόνο σε αυτές τις γραμμές εδώ.
Έτσι ακριβώς όπως ένα για βρόχο, αν κηρύξει έναν ακέραιο i στο εσωτερικό του για
βρόχο - ομοίως, εάν είστε δηλώνοντας α και β στο εσωτερικό του μια λειτουργία που
έχετε γράψει, από όπου και αν ισχύει μόνο στο εσωτερικό αυτής της λειτουργίας.
Πράγμα που σημαίνει το συντομότερο ανταλλαγής γίνεται εκτέλεση και πάμε από τη γραμμή 24 έως
γραμμή 25, χ και γ δεν έχουν τροποποιηθεί καθόλου.
Θα χάσει μόλις ένα σωρό χρόνο ανταλλάσσοντας τα αντίγραφα των μεταβλητών.
>> Έτσι αποδεικνύεται ότι η λύση σε αυτό είναι πράγματι μη-προφανείς.
Δεν είναι αρκετά επαρκής για να επιστρέψουν οι τιμές, γιατί μπορούμε να
επιστρέψει μόνο μία τιμή.
Και εγώ πραγματικά δεν θέλουν να ανταλλάξουν τα δύο x και y την ίδια στιγμή.
Έτσι θα πάμε για να επανέλθουμε σε αυτό.
Αλλά για τώρα, συνειδητοποιούν ότι το ζήτημα προέρχεται ουσιαστικά από το γεγονός
τα α και b είναι αντίγραφα.
Και είναι στο δικό τους πεδίο.
Λοιπόν, ας προσπαθήσουμε να λύσουμε αυτό με κάποιο τρόπο.
Επιτρέψτε μου να μετακινηθείτε προς τα πίσω στην πραγματικότητα εδώ και να ανοίξει, ας πούμε, μια τέταρτη παραλλαγή
αυτό, buggy4.
Και τι γίνεται με αυτό;
Αυτό είναι ένα παρόμοιο αλλά απλούστερο πρόβλημα να εξετάσουμε πριν λάβουμε μια μαχαιριά στο
επίλυση του προβλήματος.
Αυτό το πρόγραμμα ονομάζεται προσαύξηση.
Και προφανώς αρχικοποιεί έναν ακέραιο x και 1 στη γραμμή 18.
Στη συνέχεια ισχυρίζονται x είναι 1.
Στη συνέχεια ισχυρίζονται προσαύξηση, τελεία, τελεία, τελεία.
Καλώ λοιπόν προσαύξηση.
Στη συνέχεια, όμως στις γραμμές 22 και 23, που ισχυρίζονται ότι είναι ήδη αυξάνεται.
Ισχυρίζομαι x είναι τώρα ό, τι είναι, 2 κατά πάσα πιθανότητα.
>> Όμως αυτό το πρόγραμμα είναι λάθη.
Ποιο είναι το πρόβλημα;
Ναι;
[Δεν ακούγεται]
David J. Malan: Ακριβώς.
Έτσι x έχει κηρυχθεί προφανώς στη γραμμή 18.
Αυτό είναι μέσα σε αγκύλες κύριο του.
Έτσι, η απλή απάντηση εδώ είναι ότι, καλά, υπάρχει x εδώ.
Αυτό δεν υπάρχει στην γραμμή 32.
Έτσι, το πρόγραμμα αυτό στην πραγματικότητα δεν θα καν σύνταξη.
Ο compiler, όταν προσπαθήσετε να χτίσετε τον κωδικό αυτό, θα μου φωνάζεις
για κάποιο αναγνωριστικό της αδήλωτης ή κάτι για το σκοπό αυτό.
Στην πραγματικότητα, ας προσπαθήσουμε.
Αυτό είναι να buggy4.
Εκεί είναι.
Χρήση της αδήλωτης x αναγνωριστικό στη γραμμή 32.
Και πραγματικά, ας είναι πιο σαφής εδώ σήμερα, έτσι ώστε αυτό είναι χρήσιμο σε
ώρες γραφείου και στο σπίτι.
Σημειώστε ότι είναι λίγο κρυφά γραμμένο.
Αλλά το γεγονός ότι έχει Clang φώναξε σε μας, λέγοντας
buggy4.c: 32:5, είναι πραγματικά χρήσιμο.
Αυτό σημαίνει ότι το σφάλμα είναι στη γραμμή 32 στη θέση του χαρακτήρα πέντε.
Έτσι, ένα, δύο, τρία, τέσσερα, πέντε.
Αυτό είναι, στην πραγματικότητα, όπου το πρόβλημα είναι.
Και, επίσης, να έχετε κατά νου σε ώρες γραφείου και στο σπίτι, είμαι τυχερός εδώ.
Έχω ένα λάθος.
Είναι πρόκειται να είναι σχετικά εύκολο να καθοριστεί.
Αλλά αν μπορείτε να πάρετε μια ολόκληρη οθόνη με συντριπτική μηνύματα λάθους, και πάλι,
συνειδητοποιούν ότι η κατώτατη θα μπορούσε κανείς να είναι απλά συμπτωματική
το κορυφαίο αυτά.
Έτσι, πάντα να κυνηγήσει σφάλματα σας από πάνω προς τα κάτω.
Επειδή μπορεί να υπάρχει απλώς μια μαργαρίτα-αλυσίδα επίδραση που σας προτείνει
έχουν τον τρόπο περισσότερα προβλήματα από ό, τι στην πραγματικότητα κάνει.
>> Λοιπόν, πώς θα μπορούσαμε να το διορθώσω αυτό, αν ο στόχος μου είναι να αυξήσετε x;
Τι είναι αυτό;
Εντάξει.
Έτσι, μπορούμε να κάνουμε την παγκόσμια x.
Ας πάρουμε τη συντόμευση που είχα προειδοποιήσει για νωρίτερα.
Αλλά καλό, χρειαζόμαστε μόνο μια γρήγορη λύση.
Έτσι, ας πούμε int x μέχρι εδώ.
Αυτό κάνει την παγκόσμια x.
Έτσι τώρα έχει κύρια πρόσβαση σε αυτό.
Και αύξηση έχει πρόσβαση σε αυτό.
Και επιτρέψτε μου να προχωρήσει και να συγκεντρώσει αυτό τώρα.
Κάντε buggy4, Enter.
Φαίνεται να συγκεντρώσει τώρα.
Ας τρέξει buggy4, και φαίνεται να λειτουργούν πραγματικά.
Τώρα αυτό είναι ένα από αυτά τα πράγματα -
κάνει όπως λέω, όχι όπως κάνω εγώ, όπως έχω κάνει εδώ ακριβώς.
Επειδή σε γενικές γραμμές, τα προγράμματα μας πρόκειται να πάρει πολύ πιο ενδιαφέρουσα και
πολύ περισσότερο από αυτό.
Και αν σας λύση για τα προβλήματα της ζωής είναι απλά αχ, βάλτε όλα τα
μεταβλητές στην κορυφή του αρχείου σας, πολύ γρήγορα κάνουν τα προγράμματα να
τρομακτικά δύσκολο να διαχειριστεί.
Παίρνει πιο δύσκολο να σκεφτούμε νέες ονόματα μεταβλητών.
Παίρνει πιο δύσκολο να καταλάβουμε τι μεταβλητή κάνει τι.
>> Και έτσι σε γενικές γραμμές, αυτό δεν είναι μία καλή λύση.
Ας κάνουμε αυτό καλύτερα.
Δεν θέλετε να χρησιμοποιήσετε μια καθολική μεταβλητή εδώ.
Θέλω να αυξήσετε x.
Γι 'αυτό και θα μπορούσε προφανώς -
Στο τέλος της ημέρας, είναι το είδος της μια ανόητη ιστορία, γιατί κάνουμε ακριβώς αυτό.
Αλλά αν δεν ήξερα για τον συγκεκριμένο φορέα εκμετάλλευσης, ή εγώ δεν επιτρέπεται να
αλλάξτε το κύριο ίδια, πώς αλλιώς θα μπορούσα να εφαρμόσω Ken πάνω από εδώ, αυτό
φορά να μην κύβο, αλλά να αυξήσετε;
Πώς μπορώ να αλλάξω αυτό το πράγμα εδώ;
Ναι.
[Δεν ακούγεται]
David J. Malan: Εντάξει, καλά.
Γιατί λοιπόν να μην έχω περάσει στο x;
Και τότε, αντί να επιστρέψει, γιατί δεν μπορώ να κάνω μόνο την επιστροφή x + 1;
Τώρα, ένα ζευγάρι περισσότερα πράγματα πρέπει να αλλάξουν εδώ.
Είμαι στο σωστό δρόμο.
Τι άλλο πρέπει να κάνω για να τσιμπιά;
Κάποιος άλλος.
Ναι;
[Δεν ακούγεται]
David J. Malan: Πρέπει να αλλάξω τον τύπο επιστροφής της προσαύξησης
επειδή είναι άκυρη δεν.
Κενό σημαίνει τίποτα δεν επιστρέφονται.
Αλλά σαφώς, τώρα είναι.
Έτσι, αυτό πρέπει να αλλάξει σε int για να είναι συνεπής με ό, τι
Είμαι πραγματικά επιστρέφουν.
>> Τώρα κάτι άλλο είναι ακόμα εδώ λάθη.
Ναι;
[Δεν ακούγεται]
David J. Malan: Γι 'αυτό πρέπει να αυξήσετε x;
[Δεν ακούγεται]
David J. Malan: Αχ, γι 'αυτό πρέπει να περάσει x.
Γι 'αυτό και πρέπει να το κάνουμε αυτό εδώ.
Έτσι, το πρωτότυπο, πρέπει να αλλάξει αυτό μέχρι εδώ.
Έτσι, αυτό πρέπει να γίνει ένα int.
Αυτό πρέπει να γίνει -
Χμμ.
Έχω πραγματικά ένα bug εδώ κάτω.
Ας διορθώσετε αυτό ένα πρώτο.
Τι θα πρέπει πραγματικά να είναι αυτό;
Γι 'αυτό πήρε να είναι ένα int κάτι.
Θα μπορούσε να είναι x.
Αλλά ειλικρινά, αν ξεκινήσετε καλώντας όλες τις μεταβλητές x σας, πρόκειται να πάρει
και λιγότερο σαφές ποιο είναι ποιο.
Έτσι, ας επιλέγουν αυθαίρετα ένα διαφορετικό σύμβαση ονομασίας για μου
βοηθητικές λειτουργίες, οι λειτουργίες που γράφω.
Θα το ονομάσουμε ένα.
Ή θα μπορούσαμε να το ονομάσουμε - ας την ονομάσουμε even_number να είναι ακόμη πιο σαφής.
Μέχρι τότε θα πρέπει να επιστρέψει ό, τι ο αριθμός είναι συν 1.
Και τώρα πρέπει να αλλάξω κάτι άλλο εδώ και ένα
άλλο πράγμα εδώ.
Τι πρέπει να αλλάξει στην γραμμή 21 πρώτα;
Έχω να αναθέσει στο x.
Γι 'αυτό και δεν μπορεί να καλέσει μόνο προσαύξηση x.
Πρέπει να θυμηθώ την απάντηση, αλλάζοντας την τιμή του x για
η αριστερή πλευρά.
Και ακόμα κι αν το x είναι τώρα στα αριστερά και δεξιά, αυτό είναι εντελώς πρόστιμο επειδή
η δεξιά πλευρά παίρνει εκτελείται πρώτη, τότε παίρνει plopped στην αριστερή
πράγμα το χέρι, το χ στην περίπτωση αυτή.
Και στη συνέχεια, τέλος, αυτό είναι μια εύκολη αποτύπωση τώρα.
Αυτό ακριβώς θα πρέπει να ταιριάζει με αυτό που είναι κάτω.
Int αριθμό.
>> Εντάξει.
Έτσι, ένα σωρό αλλαγές για ένα πραγματικά ηλίθιο λειτουργία.
Αλλά εκπρόσωπος των πραγμάτων που θα όλο και περισσότερο θέλουμε να κάνουμε.
Έτσι, βεβαιωθείτε buggy4.
Έχω μαντάρα κάπου.
Θεέ μου.
Πέντε λάθη, όπως, έξι-line πρόγραμμα.
Έτσι τι είναι λάθος στη γραμμή 18, χαρακτήρα 5;
Εντάξει.
Γι 'αυτό και πρέπει να δηλώνουν αυτό το int.
Εντάξει.
Ας δούμε λοιπόν, ένα σωρό άλλα σφάλματα.
Θεέ μου.
19, 18, 21.
Αλλά και πάλι, ας ξεκαθαρίσουμε λίγο την οθόνη -
L Ελέγχου εδώ - και επανάληψη Clang.
Έτσι, πέντε προβλήματα είναι στην πραγματικότητα μόνο το ένα.
Έτσι τώρα ας τρέξει buggy4, Enter.
Ουφ.
χ έχει έχει αυξηθεί σωστά.
>> Εντάξει.
Οποιεσδήποτε ερωτήσεις σχετικά με το πώς να αυξήσετε τους αριθμούς;
Ναι;
ΗΧΕΙΟ 2: Γιατί είναι ότι μπορείτε να αλλάξετε μόνο τον αριθμό Χ στην μεταβλητή
το όνομα και θα ξέρετε τι σημαίνει;
David J. Malan: Καλή ερώτηση.
Πώς είναι ότι μπορώ να αλλάξω μόνο x με τον αριθμό και το πρόγραμμα θα γνωρίζει
αμέσως;
Έτσι, και πάλι, σκεφτείτε το σαν αυτό αφαίρεση.
Έτσι, αν είμαι κύριος και ο Ken είναι σταδιακή, ειλικρινά, δεν με νοιάζει
τι Ken καλεί iPad του.
Δεν με νοιάζει ό, τι ο ίδιος αποκαλεί κάτι που έχει να κάνει με την εφαρμογή του
αυτής της λειτουργίας.
Έτσι, αυτό είναι μια λεπτομέρεια εφαρμογής που έχω, κύρια, δεν
πρέπει να νοιάζονται για.
Και έτσι απλά αλλάζουν συνεχώς μέσα από τη λειτουργία, τον αριθμό εδώ
και τον αριθμό εδώ, είναι το μόνο που χρειάζεται τόσο πολύ όπως ξαναμεταγλωττίσετε.
Είναι το είδος του αρέσει, αν σκεφτούμε - πολλοί από εμάς, όσοι από εσάς με οδηγού
άδειες που έχουν οδηγηθεί, ή εάν έχετε ακόμα οδηγείται σε ένα αυτοκίνητο -
οι περισσότεροι από εμάς δεν έχουν ιδέα για το πώς λειτουργεί ένα αυτοκίνητο κάτω από το καπό.
Και κυριολεκτικά, αν ανοίξετε το καπό, οι περισσότεροι από μας - συμπεριλαμβανομένου και εμού -
δεν πρόκειται να ξέρει πραγματικά τι ψάχνουμε σε.
Κάτι σαν να αισθανθείτε με πράγματα όπως το δικαίωμα αυτό τώρα.
Αλλά εμείς δεν πρέπει πραγματικά να φροντίσει πώς λειτουργεί το αυτοκίνητο.
Δεν έχουμε να ενδιαφέρει τι όλες τις ράβδους και τα έμβολα και τα καλώδια στο εσωτερικό του
το αυτοκίνητο είναι πραγματικά κάνει.
>> Έτσι, κάτι σαν αυτό που εσείς ονομάζετε το έμβολο δεν έχει σημασία
εδώ σε αυτή την περίπτωση.
Η ίδια ιδέα.
Ναι;
[Δεν ακούγεται]
David J. Malan: Αν υπήρχαν περισσότερες χρήσεις της μεταβλητής στιγμή xa πριν,
εσείς, ο προγραμματιστής, θα πρέπει να τα αλλάξει παντού.
Ή θα μπορούσατε να κάνετε κυριολεκτικά αρχείου, Μενού, και στη συνέχεια Find / Replace,
κάτι τέτοιο.
Αλλά θα έχετε την ευκαιρία να χρειαστεί να κάνετε τον εαυτό σας αυτές τις αλλαγές.
Θα πρέπει να είναι συνεπής.
[Δεν ακούγεται]
David J. Malan: Μια συγκεκριμένη σειρά, όπως εδώ;
Αν αυτό ήταν int έναν άλλο αριθμό;
Ναι.
Έτσι, προκειμένου σημασία όταν καλείτε τη λειτουργία.
Έτσι, αν ζητούσαν αύξηση εδώ με κάτι κόμμα κάτι,
υπάρχει μια άμεση χαρτογράφηση.
Η πρώτη μεταβλητή, ό, τι λέγεται, γίνεται ένα αντίγραφο της πρώτης
επιχείρημα εδώ.
Συγνώμη, αλλά αυτό δεν θα πρέπει να είναι μια παρένθεση.
Οι δεύτερες γραμμές επιχείρημα επάνω με το δεύτερο.
>> Έτσι ώστε, ναι, θέματα.
Εντάξει.
Συγνώμη που πήρε ένα μακρύ δρόμο για να φτάσετε εκεί.
Άλλες ερωτήσεις;
Εντάξει.
Ας δούμε λοιπόν αν δεν μπορούμε να ζωγραφίσει μια εικόνα του τι πραγματικά συμβαίνει
εδώ κάτω από την κουκούλα, να το πω έτσι.
Έτσι, αυτό είναι ένα ορθογώνιο που θα μπορούσαν να αντιπροσωπεύουν τη μνήμη του υπολογιστή σας.
Έτσι, ακόμη και αν δεν έχετε καμία ιδέα για το πώς λειτουργεί η μνήμη RAM ή πώς λειτουργεί, τουλάχιστον
ας υποθέσουμε ότι έχετε τσαμπιά από αυτό αυτές τις μέρες.
Έχετε megabytes από αυτό.
Έχετε gigabytes του.
Και ξέρουμε από το μηδέν την εβδομάδα ότι ένα byte είναι ακριβώς αυτό;
8 bits.
Σωστά, έτσι 8 μηδενικά και αυτά.
Έτσι, αν ο υπολογιστής σας έχει ένα gig του RAM, δύο συναυλίες της μνήμης RAM αυτές τις μέρες, έχετε ένα
δισ. ή 2 δισεκατομμύριο bytes της μνήμης, ή περίπου 8 δισ. ευρώ ή 16 δισεκατομμύρια
bits, στο εσωτερικό του υπολογιστή σας.
Τώρα, σε αντίθεση με το λίγο μαλλιαρός Willy παράδειγμα, δεν είναι μαγνητικά σωματίδια
τυπικά πια.
Ολοένα και περισσότερο, σε φορητούς υπολογιστές τουλάχιστον, είναι solid state drives, SSDs, που
απλά δεν έχουν κινούμενα μέρη.
Είναι όλα ηλεκτρονικά.
Είναι όλα βασίζονται ηλεκτρικής ενέργειας.
Έτσι νομίζω, όμως, από αυτό το ορθογώνιο, όπως ακριβώς εκπροσωπούν το ένα ή δύο
gigabytes μνήμης που έχετε.
>> Γι 'αυτό είναι ένα κομμάτι της μνήμης.
Τώρα, ο κόσμος της επιστήμης των υπολογιστών έχει το είδος του διαμοιράζεται από τα χοντρά κομμάτια του
μνήμη για να κάνει διαφορετικά πράγματα.
Έτσι, για παράδειγμα, αν αυτό είναι η μνήμη RAM του υπολογιστή σας - όπως προτείνεται από το
ορθογώνιο εκεί - αποδεικνύεται ότι η σύμβαση, στην κορυφή της RAM σας, έτσι
να μιλήσει, είναι γενικά αυτό που ονομάζεται ένα τμήμα κειμένου.
Αυτά είναι τα μηδενικά και αυτά που έχετε φτιάξει.
Έτσι, όταν έχουμε εξετάσει κάτω από την κουκούλα σε ό, τι a.out είναι, όλα
τα μηδενικά και αυτά -
όταν εκτελείτε ένα πρόγραμμα, αυτά τα μηδενικά και αυτά που φορτώνονται από τον σκληρό σας
δίσκου σε κάτι που ονομάζεται μνήμη RAM.
Και στη RAM, όπου και αν τεθεί στην κορυφή.
Τώρα, εν τω μεταξύ, έχετε άλλα πράγματα.
Initialized δεδομένα, τα δεδομένα δεν έχει προετοιμαστεί.
Οι δύο δρεπανιές της μνήμης αναφέρονται σε καθολικές μεταβλητές, οι οποίες
που δεν χρησιμοποιείτε συχνά.
Αλλά μερικές φορές, αν το κάνετε, καταλήγουν εκεί, καθώς και.
Στη συνέχεια, υπάρχει κάποια άλλα πράγματα.
Οι μεταβλητές περιβάλλοντος, το οποίο δεν θα περνούν πολύ χρόνο σε.
Στη συνέχεια, όμως δύο σημαντικά πράγματα που θα έρθει πίσω σε όλο αυτό
εξάμηνο, και στοίβα σωρός.
>> Έτσι, οι περισσότεροι από τη μνήμη του υπολογιστή σας προορίζεται όταν τρέχει ένα πρόγραμμα για την
κάτι που ονομάζεται τη στοίβα και κάτι που ονομάζεται το σωρό.
Και εμείς δεν πρόκειται να μιλήσω για το σωρό σήμερα, αλλά εμείς θα
μιλήσουμε για τη στοίβα.
Και η στοίβα έχει ως στόχο να πλάθω την οπτική της, όπως η τραπεζαρία
δίσκοι γεύμα σε Mather Βουλή, ή όπου και αν τυχαίνει να είναι, όπου η
τραπεζαρία αίθουσα προσωπικό καθαρισμό τους κάθε μέρα.
Τους στιβάζω από το πάτωμα και πάνω.
Και ομοίως στη μνήμη, υπάρχει η ιδέα της τοποθέτησης κάτι σχετικά με ένα
στοίβα, βάζοντας κάτι σε μια στοίβα, βάζοντας κάτι σε μια στοίβα.
Και τι εννοούμε με αυτό;
Λοιπόν, ας μεγέθυνση ακριβώς κάτω μισό αυτής της εικόνας, του υπολογιστή σας
RAM, να προτείνω τα ακόλουθα.
Αποδεικνύεται ότι όταν εκτελείτε ένα πρόγραμμα όπως το a.out ή γειά σου, όποιο κι αν είναι
το πρόγραμμα είναι ότι έχετε γράψει,
και πάλι, αυτά τα μηδενικά και αυτά που φορτώνονται από τον σκληρό σας δίσκο - το οποίο είναι
μακροχρόνια αποθήκευση, παραμένει εκεί ακόμα και όταν τραβάτε το βύσμα -
φορτώνονται στη μνήμη RAM.
RAM είναι ταχύτερη από ό, τι σκληρούς δίσκους.
Είναι μικρότερο από σκληρούς δίσκους.
Αλλά αυτό είναι όπου ζουν τα προγράμματα, ενώ είστε τους λειτουργία.
>> Έτσι, κάνετε διπλό κλικ σε ένα πρόγραμμα σε έναν υπολογιστή Mac ή PC - είναι φορτωμένο από
σκληρό δίσκο στη μνήμη RAM.
Από τη στιγμή που είναι φορτωμένο στη μνήμη RAM, τα μηδενικά και αυτά που πάνε στην κορυφή τρόπο, η
λεγόμενο τμήμα κειμένου.
Στη συνέχεια, όμως, το συντομότερο το πρόγραμμά σας αρχίζει πραγματικά το τρέξιμο, το κύριο
καλείται η συνάρτηση.
Και κυρίως, όπως είδαμε, έχει συχνά τις τοπικές μεταβλητές.
Και έχει ints και strings και χαρακτήρες και τα παρόμοια.
Έτσι, αν το πρόγραμμά σας ότι έχετε γράψει ή το πρόγραμμα που έχετε
διπλό κλικ χρησιμοποιούνται κάποιες μεταβλητές μέσα από τους κύριους, που καταλήγουν στο
κάτω μέρος του stack σας της μνήμης, να το πω έτσι.
Τώρα, πιο συγκεκριμένα, τι ακριβώς σημαίνει αυτό;
Αυτό σημαίνει απλά ότι αν επρόκειτο να αριθμήσετε τα πράγματα -
αν επρόκειτο για τον αριθμό των bytes της μνήμης RAM στον υπολογιστή σας, παρατηρήστε ότι
αυτό θα μπορούσε να byte αριθμό μηδέν.
Αυτό μπορεί να είναι byte νούμερο ένα, δύο, τρία, τέσσερα, πέντε, έξι, όλες
το δρόμο μέχρι να αρέσει -
2 δισεκατομμύρια θα είναι σε όλη τη διαδρομή μέχρι εκεί στην κορυφή.
Έτσι με άλλα λόγια, όταν μιλάμε για τη μνήμη RAM ή από την άποψη των bytes, το
απλά σημαίνει ότι κάποιος έχει αποφασίσει τι πρέπει να αριθμήσετε κάθε
αυτά τα κομμάτια της μνήμης.
>> Έτσι, όταν θα πρέπει να έχετε 32 bit για έναν int, ή θα πρέπει να έχετε 8 bits για ένα char, όπου
δεν καταλήγουν στη μνήμη;
Λοιπόν εννοιολογικά, το μόνο που καταλήγουν στο κάτω μέρος αυτής της
πράγμα που ονομάζεται τη στοίβα.
Αλλά αυτό που είναι ενδιαφέρον είναι τώρα, όταν ένα κύριο καλεί λειτουργία.
Ας υποθέσουμε ότι μια λειτουργία που ονομάζεται foo, μόλις ένα αυθαίρετο όνομα.
Αυτό που συμβαίνει είναι η κύρια είναι στο κάτω μέρος της στοίβας αυτής της μνήμης.
Foo τώρα τίθεται στην κορυφή των κύριων στη μνήμη.
Έτσι, τυχόν τοπικές μεταβλητές που foo έχει καταλήξει είδος των παραπάνω εννοιολογικά
εκείνες κύρια.
Αν foo καλεί μια άλλη λειτουργία που ονομάζεται μπαρ, οι μεταβλητές καταλήγουν εδώ.
Εάν η γραμμή καλεί κάτι άλλο, εδώ, εδώ, εδώ.
Έτσι, αυτό που είναι ενδιαφέρον σχετικά με την εκτέλεση ενός προγράμματος είναι ότι σας καλούν λειτουργίες,
και οι εν λόγω λειτουργίες κλήση λειτουργιών, καθώς και οι λειτουργίες κλήσης λειτουργίες,
θα δημιουργηθεί αυτό το σωρό των λειτουργιών στη μνήμη.
Και μόνο μια φορά επιστρέφει λειτουργία να ξεκινήσει να πάρει πίσω αυτή τη μνήμη.
Έτσι, ένας από τους ευκολότερους τρόπους για να ξεμείνει από μνήμη σε ένα πρόγραμμα υπολογιστή είναι να
γράψετε λειτουργίες που να μην επιστρέψει ποτέ.
>> Έτσι, για παράδειγμα, ας αποδείξει τόσο πολύ με ένα
σκόπιμα λάθη πρόγραμμα.
Επιτρέψτε μου να προχωρήσει και δεν περιλαμβάνουν # , int main (void).
Και Πάω να κάνω, ενώ (2> 1), η οποία κατά πάσα πιθανότητα δεν θα είναι ποτέ
αλλαγή για μας.
Και επιτρέψτε μου να προχωρήσουμε και να κάνουμε τώρα printf.
Στην πραγματικότητα, αυτό πρόκειται να είναι λιγότερο ενδιαφέρουσα οπτικά.
Ας το κάνουμε αυτό.
Για int (i = 0? I> 0).
Ας κάνουμε αυτό το λάθος, i + +.
Και ας μην printf εδώ.
Ας πράξη αυτό που κηρύττει.
Ας ρίξουμε μια μέθοδο εδώ.
Χορωδία Void, και εμείς θα πούμε int i.
Και τότε Πάω να πω, printf -
Ω, ας κάνουμε αυτό πιο ενδιαφέρουσα.
Ας μην τυπώσει πραγματικά τίποτα καθόλου.
Ας το κάνουμε αυτό.
Chorus (i).
>> Εντάξει.
Έτσι, αυτό είναι προβληματικό, διότι ο λόγος;
Κάνω αυτό ως πάω γιατί το πρόγραμμα δεν κάνει τίποτα στην πραγματικότητα
του ενδιαφέροντος.
Αλλά αυτό δεν είναι ο στόχος.
Ο στόχος είναι να γράψετε ένα πρόγραμμα, του οποίου η κύρια λειτουργία κάνει τι, προφανώς;
Καλέστε το ίδιο.
Και στην πραγματικότητα, δεν χρειαζόμαστε το βρόχο.
Ας απλοποιήσει ακόμα και αυτό μόνο και μόνο για να μην χάσουμε από τα μάτια στην πραγματικότητα η
θεμελιώδες σφάλμα.
Κύρια κλήσεις χορωδία να τραγουδήσει κάποια χορωδία.
Στη συνέχεια, έκανα κάτι ηλίθιο, και είχα χορωδία Chorus Call γιατί υπέθεσα
κάποιος άλλος θα το εφαρμόσουν ίσως.
Και τώρα, αυτό δεν πρόκειται να συγκεντρώσει ακόμα.
Πρέπει να κάνουμε ό, τι;
Χρειάζομαι το πρωτότυπο, θυμάται.
Γι 'αυτό πρέπει να έχουμε εδώ χορωδία άκυρη (int i)?.
>> Έτσι τώρα, αν πάω εδώ κάτω -
στην πραγματικότητα, ας χρησιμοποιήσουμε το μεγαλύτερο παράθυρο.
Ας πάμε μπροστά και να κάνουν χορωδία.
Χρήση των αγνώστων εκτελεστής i.
Ω, αυτό ήταν ηλίθιο.
Δεν χρειαζόμαστε το επιχείρημα.
Ας το κάνουμε αυτό.
Μακάρι να είχαμε ξεκινήσει με αυτόν τον τρόπο.
Θα ήταν πολύ πιο εύκολο να γράψει το πρόγραμμα.
Έτσι εκεί.
Τώρα ας πάμε πάνω στο παράθυρο του τερματικού μου, επανάληψη Clang.
Και εδώ πάμε.
Αυτό ήταν πραγματικά γρήγορα.
Τι πραγματικά συνέβη ακριβώς, όμως;
Λοιπόν, τώρα εγώ θα προσθέσω τη γραμμή εκτύπωσης, ώστε να μπορούμε να δούμε.
Έτσι, επιτρέψτε μου να πω printf, ας πούμε, είμαι εδώ.
Εντάξει, δεν μεταβλητές, εμείς θα το αφήσουμε έτσι.
Επιτρέψτε μου να επαναληφθεί κάνει.
Επιτρέψτε μου να τρέχει εκ νέου χορωδία.
Και έλα.
Συνεχίστε.
Ως μέρος, γιατί δεν έχει συνετρίβη ακόμα;
Το σφάλμα καταμερισμού που συνέβη πριν από πολύ γρήγορο.
[Δεν ακούγεται]
David J. Malan: Ακριβώς.
Γι 'αυτό χρειάζεται χρόνος για να εκτυπώσετε.
Χρειάζονται μόνο περισσότερη δουλειά από την πλευρά του υπολογιστή.
Και εκεί είναι.
Τμηματοποίηση σφάλμα.
>> Έτσι παρατηρήσετε πόσο γρήγορα τρέχουν προγράμματα.
Αν δεν είστε εκτύπωση κάτι, σούπερ γρήγορο.
Αλλά έχουμε ακόμα αυτό το σφάλμα κατάτμησης, επειδή ό, τι συνέβαινε;
Λοιπόν, αν σκέφτεστε για το πώς η μνήμη του υπολογιστή σας είναι που έξω, αυτό
συμβαίνει να είναι κύρια.
Αλλά εδώ -
ας την ονομάσουμε ακριβώς αυτό το χορό, και ας ονομάσουμε αυτό χορωδία.
Και τώρα αν κάνω αισθητική μου δικαίωμα, αυτό ακριβώς πρόκειται να πω χορωδία,
χορός, χορός, χορός, χορός, χορός, χορός, nauseum τώρα.
Και τελικά, τι πρόκειται να συμβεί;
Αν η μεγάλη εικόνα είναι κυριολεκτικά αυτό, τι ακριβώς συμβαίνει εννοιολογικά;
Οι υπερβάσεις στοίβα του σωρού.
Ή, ακόμη χειρότερα, έχετε υπερβεί τα πάντα, συμπεριλαμβανομένου του τμήματος κειμένου, το οποίο είναι
τα μηδενικά και αυτά που αντιπροσωπεύουν το πρόγραμμά σας.
Εν ολίγοις, αυτό είναι απλά σούπερ, σούπερ κακός.
Σωστά;
Το πρόγραμμά σας έχει κινηθεί σπειροειδώς εκτός ελέγχου.
Είσαι με τον τρόπο περισσότερη μνήμη από ό, τι προορίζεται όλα εξαιτίας ενός ηλίθιου
λάθος, σε αυτή την περίπτωση.
Ή στην περίπτωση αυτή, ένα πολύ σκόπιμα κάνει η ίδια η λειτουργία κλήσης.
Τώρα αυτό δεν είναι όλα άσχημα.
Λειτουργίες αυτοαποκαλούνται έχει πραγματικά μεγάλη δύναμη
όταν μπορείτε να το χρησιμοποιήσετε σωστά.
Δεν έχω χρησιμοποιήσει σωστά εδώ.
>> Έτσι, αυτό δεν είναι όλα άσχημα.
Αλλά το γεγονός ότι ποτέ δεν έχω πραγματικά να σταματήσει καλώντας τον εαυτό μου είναι ένα θεμελιώδες
αδυναμία εδώ από αυτό το πρόγραμμα.
Έτσι, όταν θα πάμε με όλα αυτά;
Λοιπόν, τι πραγματικά συμβαίνει;
Όταν καλείτε τη λειτουργία αύξησης, όπως κάναμε σε αυτά τα παραδείγματα,
Έχω μια αξία όπως 1 που περνάω μέσα
Περνώ σε ένα αντίγραφο του υπ 'αριθμόν ένα.
Έτσι συμβαίνει το εξής.
Ας πάμε στο παράδειγμα αύξηση.
Και αυτός ο τύπος δεξιά εδώ.
Έτσι, εδώ είναι το τι πραγματικά συμβαίνει.
Όταν πήρα αύξηση, και περνώ στο x, εικονογραφικά τι
συμβαίνει εδώ είναι αυτό -
αν έχω την τιμή 1 αποθηκεύονται εδώ, και καλώ πραγματικά προσαύξηση, η οποία
καλείται τώρα χορωδία -
Ναι, αυτό είναι μου αποτίναξη εδώ.
Ας ονομάσουμε αυτό προσαύξηση.
Και δεν ξέρουμε τι είναι αυτό επόμενη λειτουργία πρόκειται να είναι.
Έτσι, αυτό που πραγματικά συμβαίνει είναι κάπου εδώ σε γενικές γραμμές, έχω ένα κομμάτι του
μνήμη που αποθηκεύει τον αριθμό 1.
Όταν καλώ αύξηση, είμαι χρησιμοποιώντας ένα άλλο κομμάτι της μνήμης, αλλά τώρα
έχουν το αντίγραφο 1.
Όταν αυξήσετε αυτή την τιμή, αυτό γίνεται 2 - φρικτά γραμμένο το
οθόνη εδώ.
Στη συνέχεια, όμως, τι θα συμβεί το συντομότερο επιστρέφει αύξηση;
Αυτή η μνήμη παίρνει μόλις παραδοθεί πίσω στο λειτουργικό σύστημα, το οποίο σημαίνει ότι όλα
έχετε κάνει δεν είναι τίποτα χρήσιμο.
Η μία που είχε αρχικά περιέχονται στην κύρια εξακολουθεί να είναι πραγματικά εκεί.
>> Έτσι, όταν θα πάμε με αυτό;
Λοιπόν, αποδεικνύεται ότι στη μνήμη έχετε αυτό το back to back ακολουθία του
bytes που μπορείτε να βάλετε μέσα τα πράγματα
Και αποδεικνύεται ότι έχουμε ήδη δει κάτι που προϋποθέτει την τοποθέτηση
πράγματα πλάτη με πλάτη με πλάτη με πλάτη.
Τι είναι μια χορδή, με βάση την εβδομάδα και τώρα την εβδομάδα δύο;
Έτσι είναι απλά μια συλλογή από χαρακτήρες.
Έτσι αποδεικνύεται, ακριβώς όπως μπορείτε να βάλετε τους αριθμούς στη μνήμη, μπορείτε ομοίως
θέσει χαρακτήρες σε μνήμη.
Και τη στιγμή που θα αρχίσει η εφαρμογή τους χαρακτήρες στη μνήμη πλάτη με πλάτη με πλάτη σε
πίσω, αποδεικνύεται ότι η χρήση της πιο απλά πράγματα, όπως ένα για βρόχο ή
ένας βρόχος while, μπορούμε να επαναλάβει -
από αριστερά προς τα δεξιά κατά τη διάρκεια των χαρακτήρων σε μια συμβολοσειρά -
μασάζ και να αρχίσει τους σε εντελώς διαφορετικούς χαρακτήρες.
Ένας θα μπορούσε να γίνει Β. Β θα μπορούσε να γίνει C. Έτσι ώστε τελικά, μπορούμε να πάρουμε μια
Ελληνικά πρόταση που κάνει πραγματικά την αίσθηση και τη μετατροπή κάθε ένα από αυτά
γράμματα, ένα κάθε φορά με τα πόδια μέσα από τη μνήμη του υπολογιστή μας άφησαν να
δικαίωμα να κρυπτογραφήσει πραγματικά.
>> Έτσι, ας ρίξουμε πέντε λεπτά διάλειμμα μας εδώ, και όταν θα έρθει πίσω, θα
ξεκινήσει αυτή η διαδικασία κρυπτογράφησης πληροφοριών.
>> Εντάξει.
Έτσι, πριν βουτήξετε σε κάποια crypto και αυτά τα πράγματα που ονομάζονται συστοιχίες, επιτρέψτε μου να
παύση για οποιαδήποτε απορία, γιατί νιώθω ότι πραγματικά το είδος των μπερδεμένη μερικές από
αυτά τα θέματα.
Ας ορίσει τώρα, αν μπορούμε.
Γι 'αυτό ακριβώς μίλησε για τις τιμές επιστροφής.
Μιλήσαμε για τα επιχειρήματα.
Και μιλήσαμε για την έννοια αυτή, η οποία θα επανέλθουμε τις επόμενες εβδομάδες
έρχονται, που βλέπουν τη μνήμη ως ένα σωρό από αυτά στοιβάζονται
δίσκους, να το πω έτσι.
Από κάτω προς επάνω, έτσι ώστε κάθε δίσκος που παίρνει τοποθετούνται στη στοίβα παριστάνει
Μια λειτουργία που είναι σήμερα ονομάζεται.
Οποιεσδήποτε ερωτήσεις;
Πώς, λοιπόν, για την - επιτρέψτε μου να προσπαθήσω μια ερώτηση.
Κρατάω ότι χαλάσει, αλλά τώρα it's - you've δει όλα το πρόσωπο του αγοριού.
Γι 'αυτό και θα επανέλθω σε αυτό.
>> Έτσι, επιτρέψτε μου να κάνω μια ερώτηση εδώ.
Επιτρέψτε μου να απλοποιήσει την πλάτη σε ό, τι ήταν πριν από μερικές από τις προηγούμενες Q & A. μας
Και το γεγονός ότι η αύξηση έχει ανοιχτή παρένθεση, int αριθμό, έκλεισε
παρένθεση.
Τι σημαίνει int αριθμός αντιπροσωπεύει;
[Δεν ακούγεται]
David J. Malan: Ένα επιχείρημα.
Εντάξει, αλλά τι είναι ένα επιχείρημα;
[Δεν ακούγεται]
David J. Malan: Συγγνώμη, τι είναι αυτό;
ΟΜΙΛΗΤΗΣ 3: Κάτι που περνούν μέσα
David J. Malan: Εντάξει.
Έτσι, κάτι που θα περάσει μέσα
Και γενικότερα, είναι απλά η είσοδος.
Αν είστε γραπτώς μια λειτουργία και το σκοπό της εν λόγω λειτουργία στη ζωή είναι να κάνουμε
κάτι λίγο διαφορετικό κάθε φορά που το χρησιμοποιείτε, τότε ο μόνος τρόπος για
ότι για να συμβεί αυτό πραγματικά φαίνεται να είναι να καταθέσουν τις απόψεις τους, έτσι ώστε να
μπορεί να κάνει κάτι διαφορετικό με την είσοδο κάθε φορά.
>> Έτσι, θα πρέπει να καθορίσετε δύο πράγματα, όταν μια λειτουργία παίρνει εισόδους.
Θα πρέπει να καθορίσετε το όνομα που θέλετε να δώσετε στη συγκεκριμένη είσοδο, για καθαρά
τη δική σας ευκολία, έτσι ώστε να μπορείτε να ανατρέχετε σε αυτό στη λειτουργία που
τον εαυτό σου γράφουν, όπως έκανα εδώ στη γραμμή 32.
Αλλά θα πρέπει επίσης να καθορίσετε το είδος, γιατί το C είναι μια γλώσσα προγραμματισμού
αυτό ακριβώς απαιτεί
ότι αν θέλετε μια μεταβλητή, θα πρέπει να πείτε στον υπολογιστή τι
το είδος των δεδομένων είναι,
σε μεγάλο μέρος έτσι ώστε να ξέρει πόσα bits να
διαθέσει για αυτή τη μεταβλητή.
Επειδή θα μπορούσε να είναι έξι -
Συγγνώμη, δεν θα είναι έξι.
Μπορεί να είναι 16.
Μπορεί να είναι 8.
Μπορεί να είναι 32, 64 ακόμη.
Όμως, ο υπολογιστής πρέπει να γνωρίζει.
Τώρα το int στην αριστερή πλευρά αντιπροσωπεύει αυτό, σε αντίθεση;
[Δεν ακούγεται]
David J. Malan: Τι είναι αυτό;
[Δεν ακούγεται]
DAVID J. Malan: Ο τύπος της λειτουργίας και, πιο συγκεκριμένα, η
είδος της παραγωγής της.
Δεξιά.
Έτσι, ενώ το πράγμα σε παρένθεση αντιπροσωπεύει είσοδο του, αν υπάρχουν, η
πράγμα προς τα αριστερά αντιπροσωπεύει την παραγωγή του.
Και σε αυτή την περίπτωση, προφανώς αύξηση επιστρέφει ένα int.
Και έτσι int είναι ο τύπος επιστροφής αυτής της λειτουργίας.
>> Τι σημαίνει να επιστρέφουν;
Κυριολεκτικά, μπορείτε να χρησιμοποιήσετε την επιστροφή λέξη-κλειδί.
Και στη συνέχεια, αν αυτό που επιστρέφουν στα δεξιά του τη λέξη-κλειδί είναι ένας
ακέραιος, τότε αυτό είναι πράγματι σύμφωνη με ό, τι έχουμε υποσχεθεί.
Δεν θα μπορούσε να κάνει κάτι τέτοιο -
γειά σου, τον κόσμο -
επειδή αυτό είναι ένα string.
Προφανώς, δεν είναι ένας ακέραιος.
Έτσι, με λίγα λόγια, το βάρος είναι πραγματικά για μας, ο προγραμματιστής, να είναι συγκεκριμένα ως
σε ό, τι είμαστε και να επιστρέφουν στη συνέχεια πραγματικά να πάμε για την επιστροφή του.
Και στη συνέχεια να γίνει ένα αγοράκι πιο σαφές το πλαίσιο -
εκεί είναι και πάλι.
Το πλαίσιο -
μεγάλη έκπληξη έρχεται σε μια στιγμή.
Το πλαίσιο είναι εδώ τώρα ότι η μνήμη του υπολογιστή σας είναι, και πάλι, μια
gigabyte, δύο gigabytes, όποια και αν είναι.
Ίσως είναι περισσότερο.
Ίσως είναι λιγότερο.
Αλλά ο υπολογιστής θεωρεί ως έχουν διαφορετικά τμήματα.
Κάτι πηγαίνει εκεί κάτω.
Κάτι άλλο πάει εκεί.
Διαφορετικά πράγματα πηγαίνει στη μέση.
Και σήμερα, εμείς απλά να αρχίσει λέγοντας αυτή την ιστορία.
>> Αλλά θα επανέλθω σε αυτό την πάροδο του χρόνου.
Προς το παρόν, το μόνο κομμάτι της μνήμης που πραγματικά νοιάζονται για το τμήμα κειμένου
γιατί αυτό αντιπροσωπεύει μόλις τα μηδενικά και αυτά
Clang που έχει εξάγεται.
Έτσι, όταν εκτελείτε μια εντολή στο πληκτρολόγιο, όπως a.out, ή κάνετε διπλό
κάντε κλικ σε ένα εικονίδιο για Mac OS ή Windows, το πρόγραμμά σας είναι φορτωμένο από το σκληρό σας
οδηγούν σε μνήμη RAM.
Και αυτό είναι plopped στην κορυφή της μνήμης RAM του υπολογιστή σας, να το πω έτσι.
Τώρα, εν τω μεταξύ, το πρόγραμμά σας αρχίζει να τρέχει και παίρνει κύρια κάλεσε το
πρόγραμμα που έγραψε ή το πρόγραμμα Microsoft ή η Apple έγραψε, κάποια από της
τοπικές μεταβλητές καταλήγουν εκεί κάτω στο κάτω μέρος της μνήμης του υπολογιστή σας.
Αλλά αν η κύρια καλεί μια άλλη λειτουργία που η ίδια έχει μεταβλητές ή
επιχειρήματα, καταλήγουν πάνω από αυτό.
Και αν αυτή η λειτουργία απαιτεί κάτι, που καταλήγουν πάνω από αυτό,
πάνω από αυτό, πάνω από αυτό.
Και μόνο μία φορά μία λειτουργία γίνεται εκτέλεσης κάνει τη στοίβα των δίσκων, έτσι
να μιλήσει, να αρχίσει να πάρει όλο και πιο χαμηλά.
Και αυτό είναι ό, τι τότε, με λίγα λόγια, εξηγεί γιατί, όταν καλείτε κύβος -
ή να καλέσετε αύξηση -
είστε περνώντας σε ένα αντίγραφο του αξία.
Και τι σημαίνει αυτό εικονογραφικά είναι ότι είστε κυριολεκτικά γραπτώς το
αριθμός 1 σε ένα άλλο μέρος της μνήμης, αλλάζοντας ότι 1 έως 2, στην περίπτωση των
προσαύξηση -
ή σε ένα 8, στην περίπτωση του κύβου -
και ρίχνοντας στη συνέχεια ότι η μνήμη μακριά το συντομότερο η αύξηση ή τον κύβο
επιστρέφει λειτουργία.
>> Ερώτηση.
[Δεν ακούγεται]
David J. Malan: Όπου - Οι καθολικές μεταβλητές αποθηκεύονται σε ό, τι είναι
σήμερα ονομάζεται αρχικοποίηση των δεδομένων ή δεν έχει προετοιμαστεί δεδομένα.
Η διαφορά είναι, αν έχετε μια καθολική μεταβλητή, και μπορείτε να ορίσετε
αμέσως μια αξία με το ίσον, καταλήγει στην κορυφή εκεί.
Και αν σας πω ακριβώς int x ερωτηματικό χωρίς αξία, καταλήγει ελαφρώς
χαμηλότερο σε RAM απλά με σύμβαση.
Άλλες ερωτήσεις.
Εντάξει.
>> Έτσι, αυτή η εικόνα θα επανέλθει, όπως έχουμε πιο ισχυρή με το τι μπορούμε να κάνουμε
με τον υπολογιστή.
Αλλά για τώρα, ας ρίξουμε μια σύντομη εισαγωγή στην κρυπτογραφία, ένας συγκεκριμένος τύπος
κρυπτογραφία που δεν λύνει όλα τα προβλήματα του κόσμου, αλλά δεν επιλύει
ορισμένες από αυτές.
Στην περίπτωση αυτή εδώ, έχουμε κάτι που ονομάζεται μυστικό κλειδί κρυπτογράφησης.
Και μυστικό κλειδί κρυπτογράφησης, όπως υποδηλώνει το όνομα, αντλεί την ασφάλεια του
από ένα μυστικό.
Έτσι, για παράδειγμα, αν είστε πίσω στο σχολείο βαθμού και είστε περνώντας ένα
μικρό μυστικό ερωτικό γράμμα προς το αγόρι ή το κορίτσι σας σε συντριβή - αν
ήθελε να περάσει ότι μέσα από το κοινό, τότε μάλλον δεν θα γράψω
ένα τέτοιο σημείωμα στα αγγλικά ή ό, τι η μητρική σας γλώσσα είναι? μάλλον, σας
μπορεί να το κρυπτογραφήσει.
Ή ίσως απλά να τους στείλετε ένα μήνυμα κειμένου αυτές τις μέρες.
Αλλά στην πραγματικότητα μπορεί να περάσει ένα σημείωμα σε όλη την τάξη.
Και για να το κάνουμε αυτό με ασφάλεια, με τέτοιο τρόπο που οι φίλοι σας και ο δάσκαλος
Δεν ξέρω τι είστε γραπτώς, μπορεί να καταλήξει σε μια αρκετά απλή
αλγόριθμο -
νέοι κι αν θα μπορούσε να είναι -
να αγωνίζομαι μόνο τα λόγια.
Έτσι, αντί της γραφής Α, μπορείτε να γράψετε Β. Αντί B, μπορείτε να γράψετε
Γ. Αντί C, μπορείτε να γράψετε D, και ούτω καθεξής.
Ή θα μπορούσε να καταλήξει σε μια πιο εξελιγμένη μετάφραση των γραμμάτων
με διαφορετικά γράμματα.
Όμως, τα αλιεύματα είναι το αγόρι ή το κορίτσι στο οποίο στέλνετε το σημείωμα αυτό πρέπει να
γνωρίζουν κάτι.
Ποιο είναι αυτό που, προφανώς;
Όπως, ποιο είναι το μυστικό σας.
Όπως, τι είναι η χαρτογράφηση μεταξύ Όπως και Β και Κ και Ds;
Είναι προσθέτοντας μόνο ένα, να το πω έτσι, σε κάθε ένα από τα γράμματα για να πάει από
Α στο Β, Β Γ;
Είναι πιο περίπλοκο από αυτό;
Έτσι και φλερτ σας θα πρέπει να έχουν αυτό το μυστικό των πληροφοριών.
Αλλά υπάρχει ένα είδος catch-22 εδώ.
Αν αυτή είναι η πρώτη φορά που στέλνετε αυτό το γράμμα αγάπης με την
τάξη, πώς είναι ότι το αγόρι ή το κορίτσι πρόκειται να ξέρει ποιο είναι το μυστικό ακόμα;
Έτσι, το μυστικό κλειδί κρυπτογράφησης δεν μπορεί να λύσει όλα τα προβλήματα του κόσμου.
Και υπάρχει πραγματικά μια σχέση που θα έρθει πίσω στο προς
τέλος του εξαμήνου.
>> Ομοίως, δεν έχουν κανέναν από μας ίσως ποτέ στείλει ένα -
Ομοίως, δεν περισσότεροι από εμάς δεν γνωρίζουμε κάποιον που δουλεύει, για παράδειγμα, σε
Amazon.com.
Και όμως, πολλοί από εμάς έχουν αγοράσει πιθανώς τα πράγματα στο Amazon.com.
Και έχουμε μάθει να υποθέσουμε ότι αυτά τα e-commerce
συναλλαγές είναι ασφαλείς.
Σωστά;
Η διεύθυνση URL λέει πιθανώς https.
Υπάρχει ίσως ένα ανόητο μικρό εικονίδιο λουκέτου κάπου.
Υπάρχει κάποιο είδος της κρυπτογραφίας διασφάλιση των στοιχείων της πιστωτικής σας κάρτας
ανάμεσα σε εσάς και το Amazon.com.
Και όμως, αν κρυπτογραφία περιλαμβάνει τη γνώση κάποιο μυστικό, ακόμα και να κάνω δεν
ξέρω κανέναν στο Amazon, και δεν έχω τοποθετημένα σίγουρα κάθε είδους
μυστικό με κάποιον στο Amazon, πώς είναι ο υπολογιστής μου ή browser μου το κάνετε αυτό;
Λοιπόν, αποδεικνύεται ότι δεν υπάρχει άλλου είδους κρυπτογράφηση εντελώς ότι να λύσει
αυτό το πρόβλημα.
Αλλά για σήμερα, θα επικεντρωθεί στην απλή, όπου μπορείτε να κανονίσετε σε
εκ των προτέρων να γνωρίζει κάποιο μυστικό, όπως συν 1 ή κάποια χαρτογράφηση μεταξύ Όπως και πολλά άλλα.
>> Και η διαδικασία της κρυπτογραφίας περιλαμβάνει γενικά αυτό.
Έχετε κάποια μορφή απλού κειμένου, που απεικονίζονται εδώ στα αριστερά.
Μπορείτε να εκτελέσετε μέσα από κάποιο είδος του αλγορίθμου ή διαδικασίας
για την κρυπτογράφηση αυτό.
Ίσως αυτό είναι απλά Α γίνεται Β, Β γίνεται C. Και τότε θα καταλήξετε με
κρυπτογραφημένο κείμενο.
Εν τω μεταξύ, μία φορά φλερτ σας λαμβάνει το μυστικό σημείωμα, αυτός ή αυτή πρέπει να τότε
αποκρυπτογραφήσει με γενικά αναστροφή της αλγόριθμο, έτσι ώστε να πάρει
υποστηρίξουν το απλό κείμενο.
Τώρα υπάρχουν φυσικά ενσαρκώσεις του αυτό.
Για παράδειγμα, αυτό είναι ένα μικρό μυστικό δακτύλιο αποκωδικοποιητή.
Και αυτό είναι ένας δακτύλιος με την έννοια ότι υπάρχουν δύο καντράν εδώ.
Στην εξωτερική περιφέρεια του αυτό το πράγμα, υπάρχει γράμματα A έως Z,
αν είστε σε τυχαία σειρά.
Και στο εσωτερικό, δεν υπάρχει στην πραγματικότητα ορισμένοι αριθμοί, έτσι ώστε με αυτό
δαχτυλίδι, μπορείτε να το είδος των γυρίστε το εξωτερικό, αλλά όχι το εσωτερικό, προκειμένου να παρατάξει
αριθμούς με γράμματα.
Και στο κλιπ που είστε έτοιμος να δείτε - μερικά από τα οποία μπορεί να έχετε δει 24/7
γύρω από την περίοδο των Χριστουγέννων από μια ταινία που ονομάζεται Μια ιστορία των Χριστουγέννων.
Θα δείτε ότι λίγο Ralphie ήταν τόσο πρόθυμοι να καταλάβω τι μικρό ορφανό
Μυστικό μήνυμα Annie ήταν σ 'αυτόν που είχε κοινοποιηθεί, νομίζω, στην
μορφή αριθμητικών μηνύματα σε ένα σειριακό κιβώτιο.
Και θα έπρεπε να συσσωρεύονται όλα τα μικρά φύλλα που ήρθαν
στο πλαίσιο των δημητριακών.
Θα έπρεπε να τα ταχυδρομήσετε μέσα
Θα έπρεπε να πάρει πίσω το δαχτυλίδι μυστικό αποκωδικοποιητή, έτσι ώστε να μπορείτε τελικά να καταλάβω
τι είναι η χαρτογράφηση μεταξύ γραμμάτων και αριθμών,
ή γράμματα και γράμματα.
Έτσι, μπορώ να σας δώσω αυτό το σύντομο κλιπ από μια ιστορία των Χριστουγέννων για να παρακινήσει PSET 2 και
συζήτησή μας, σε μια στιγμή, από συστοιχίες.
Έτσι, εδώ έχουμε Ralphie.
>> [ΑΝΑΠΑΡΑΓΩΓΗ ΒΙΝΤΕΟ]
-Να είναι γνωστό σε όλους και διάφορες ότι Ralph Parker διορίζεται
μέλος του Little Orphan Annie Secret Circle και δικαιούται να επικαλείται όλα
οι τιμητικές διακρίσεις και τα οφέλη που συμβαίνουν σ 'αυτό.
-Υπογραφή, Little Orphan Annie.
Προσυπογράφονται, Pierre Andre!
Το μελάνι!
Διακρίσεις και τα οφέλη, ήδη από την ηλικία των εννέα ετών.
Έλα, ας πάρουν το δρόμο τους.
Δεν χρειάζεται όλα αυτά τζαζ για τους διακινητές και τους πειρατές.
-Ακούστε αύριο το βράδυ για τη σύναψη περιπέτεια του The Black
Πειρατικό πλοίο.
Τώρα ήρθε η ώρα για το μυστικό μήνυμα Annie για εσάς τα μέλη
του Secret Circle.
Θυμηθείτε, τα παιδιά, μόνο τα μέλη του Secret Circle Annie μπορεί να αποκωδικοποιήσει
Μυστικό μήνυμα της Annie.
Θυμηθείτε, η Annie είναι ανάλογα με εσάς.
Ρυθμίστε τις πινέζες σας για Β2.
Εδώ είναι το μήνυμα.
12, 11 -
-Είμαι στην πρώτη συνεδρίαση μυστικό μου.
-14, 11, 18, 16 -
-Pierre ήταν σε μεγάλη απόψε φωνή.
Θα μπορούσα να πω ότι το μήνυμα απόψε ήταν πολύ σημαντικό.
-3, 25.
Αυτό είναι ένα μήνυμα από τον εαυτό της Annie.
Θυμηθείτε, μην το πεις σε κανέναν.
-90 Δευτερόλεπτα αργότερα, είμαι ο μόνος δωμάτιο του σπιτιού, όπου ένα αγόρι εννέα
θα μπορούσε να καθίσει στην προστασία της ιδιωτικής ζωής και αποκωδικοποίηση.
Aha, Β. πήγα στο επόμενο.
Ε. Η πρώτη λέξη είναι να είναι.
Σ. Είναι ερχόταν πιο εύκολο τώρα.
U.
-Έλα τώρα, Ralphie.
Πρέπει να φύγω.
-Θα είναι κάτω δεξιά, ma.
-Gee σφυρίζω.
-T, O. Να είστε βέβαιος να.
Να είστε βέβαιος να τι;
Ποια ήταν η Little Orphan Annie προσπαθώ να πω;
Να είστε βέβαιος να τι;
-Ralphie!
Randy πρέπει να πάει.
Θα σας παρακαλώ να βγει;
-Εντάξει, ma.
Θα είμαι δεξιά έξω.
-Ήμουν όλο και πιο κοντά τώρα.
Η ένταση ήταν φοβερή.
Τι ήταν αυτό;
Η μοίρα του πλανήτη μπορεί να κολλήσει στην ισορροπία.
-Ralphie!
Randy πήρε για να πάει.
-Θα είναι ακριβώς έξω, για να φωνάξει έξω δυνατό.
-Gee, σχεδόν εκεί.
Τα δάχτυλά μου πέταξε.
Το μυαλό μου ήταν μια παγίδα χάλυβα.
Κάθε πόρων δονείται.
Ήταν σχεδόν σαφής.
Ναι, ναι, ναι, ναι.
-Φροντίστε να πίνετε Ovaltine σας.
Ovaltine;
Ένας ταλαιπωρημένος εμπορικός;
Κάθαρμα.
[ΑΝΑΠΑΡΑΓΩΓΗ ΒΙΝΤΕΟ ΤΕΛΟΣ]
>> David J. Malan: Έτσι εκεί έχουμε κρυπτογραφία.
Πώς, λοιπόν, σε έναν υπολογιστή μπορούμε να πάμε για την εφαρμογή ή
εκπροσωπούν τα πράγματα όπως αυτό;
Λοιπόν, χρειαζόμαστε έναν τρόπο να εκφράσουν τους εαυτούς μας λίγο πιο ευέλικτα από ό, τι
μεταβλητές μας μέχρι στιγμής επέτρεψαν.
Είχαμε ints.
Είχαμε χαρακτήρες.
Είχαμε άρματα και δίκλινα και μερικά άλλα.
Αλλά αυτά είναι μεμονωμένα κομμάτια της μνήμης που πραγματικά δεν μας επιτρέπουν να
εκφράσουν τα πράγματα όπως λέξεις και φράσεις και φράσεις.
Πράγματι, έχουμε τέτοιες ονομάζεται χορδές πράγματα.
Αλλά υποσχέθηκε ότι αυτό είναι πραγματικά ακριβώς μια απλούστευση της CS50
βιβλιοθήκη ότι είμαστε προτίθενται να φλούδα πίσω.
>> Κι έτσι ας αρχίσουμε να το κάνουμε αυτό εδώ.
Επιτρέψτε μου να προχωρήσει και να ανοίξει ένα αρχείο -
όλα αυτά τα αρχεία είναι διαθέσιμα ως συνήθως σε απευθείας σύνδεση -
που ονομάζεται array.c να λύσει ένα πρόβλημα που δεν σχετίζονται με χορδές, αλλά ότι ζωγραφίζει ένα
εδώ εικόνα για το πώς μπορούμε να χρησιμοποιήσουμε κάτι που ονομάζεται μια σειρά.
Ένας πίνακας είναι ένας τύπος δεδομένων.
Είναι ένα είδος της μεταβλητής, του είδους, η οποία έχει πολλαπλά μικρότερα τύπους δεδομένων
μέσα από την πλάτη με πλάτη με πλάτη με πλάτη.
Έτσι, για παράδειγμα, εάν θέλετε να γράψετε ένα μικρό πρόγραμμα που σας δίνει σας
κουίζ μέσος όρος για μια σειρά μαθημάτων, όπως 50 που έχει δύο κουίζ, θα μπορούσατε πολύ εύκολα
γράψω αυτό το πρόγραμμα - με βάση ακόμα και σε μερικές από υλικό της περασμένης εβδομάδας -
με τη χρήση GetInt και ένα ζευγάρι των μεταβλητών.
Int quiz1, int quiz2, και είναι αρκετά απλή.
Είναι ίσως 10, 20 γραμμές κώδικα, max, να εφαρμόσει ένα πρόγραμμα που ζητά η
χρήστη για δύο αποτελέσματα κουίζ και στη συνέχεια υπολογίζει μέσο όρο τους, με την προσθήκη τους
μαζί, διαιρώντας με δύο, και στη συνέχεια, την εκτύπωση των αποτελεσμάτων.
Θα μπορούσαμε να κάνουμε ότι κατά πάσα πιθανότητα αρκετά εύκολα τώρα μετά
μερικοί αριθμό των λεπτών.
>> Αλλά το πρόβλημα είναι ότι ας υποθέσουμε ότι το 50 είχε τρεις ή τέσσερις κουίζ.
Ας υποθέσουμε ότι θέλετε να χρησιμοποιήσετε το ίδιο πρόγραμμα για μια τάξη που είχε
εβδομαδιαίο κουίζ.
Σκεφτείτε για μια κατηγορία που έχει εβδομαδιαίο κουίζ.
Αν υπάρχει, όπως 16 ή έτσι εβδομάδες σε ένα εξάμηνο, τώρα έχετε 16 μεταβλητές -
int quiz1, int quiz2, int quiz3, int quiz4.
Μόλις αρχίσετε να βλέπετε αυτή την απόλυση, η αντιγραφή και επικόλληση
του κώδικα, θα πρέπει να αρχίσει να σας κάνει να θέλετε υπήρχαν ένας καλύτερος τρόπος.
Και ευτυχώς, γιατί από πίνακες, δεν υπάρχει.
Ας το κάνουμε αυτό.
Κατ 'αρχάς, επιτρέψτε μου να εισαγάγει ένα πολύ απλό πράγμα που δεν έχω χρησιμοποιήσει μέχρι στιγμής,
αλλά θα το δείτε περιστασιακά σε κώδικα.
Αυτό είναι αυτό που γενικά ονομάζεται μια σταθερά.
Έτσι είναι σταθερά συνδεδεμένο με την έννοια ότι ποτέ αυτή η τιμή αλλάζει.
Η ανθρώπινη σύμβαση κατά τη δημιουργία μιας σταθεράς είναι να χρησιμοποιήσει όλα τα κεφάλαια
γράμματα, ακριβώς έτσι ώστε να ξεχωρίζει πραγματικά στον κώδικά σας.
Και το ειδικό κλειδί που χρησιμοποιείτε στο Γ # define.
Έτσι, αν σας πω # define, τότε ένα διάστημα, στη συνέχεια, τη λέξη που θέλετε να χρησιμοποιήσετε για
το όνομα μιας σταθεράς, και στη συνέχεια η τιμή της σταθεράς.
Έτσι ειδοποίηση, αυτό είναι διαφορετικό από κάτι ανάθεση σε μια μεταβλητή.
Δεν υπάρχει ίσον.
Δεν υπάρχει ερωτηματικό.
Αυτό είναι ό, τι είναι γενικά γνωστή ως οδηγία προεπεξεργαστή, αλλά περισσότερο για
ότι μια άλλη φορά.
>> Προς το παρόν, αυτό δημιουργεί ένα αμετάβλητο ονομάζεται πραγματική αξία των οποίων ΒΙΝΤΕΟ ΑΓΓΕΛΙΕΣ
αριθμητική τιμή είναι 2.
Έτσι, οπουδήποτε βλέπετε κουίζ, κουίζ, κουίζ όλο αυτό το αρχείο, αυτό είναι
μόνο ο αριθμός 2.
Τώρα, αν κοιτάζω κύρια τώρα, ας δούμε πώς αυτό λειτουργεί.
Κατά την πρώτη, φαίνεται λίγο αινιγματικό.
Αλλά είναι όλα τα πράγματα από την εβδομάδα.
Ζητήστε από το χρήστη για τους βαθμούς.
Πώς θα το κάνουμε αυτό;
Λοιπόν, σε γραμμή 22 -
αυτό είναι πραγματικά το ζουμερό μέρος -
Δηλώνω μια float, αλλά δεν είναι μόνο μια ενιαία float.
Είμαι δηλώνοντας, μάλλον, μια σειρά από τιμές κινητής υποδιαστολής.
Η μεταβλητή πρόκειται να κληθεί βαθμούς, όπως υπονοείται εδώ.
Αλλά το μόνο κομμάτι του νέου σύνταξη τότε αυτές οι αγκύλες, το γεγονός
ότι έχω πει float βαθμούς και στη συνέχεια ανοίξτε το στήριγμα και στη συνέχεια ένας αριθμός.
Ανακοίνωση, αν αυτό είναι μια σταθερά, αυτό είναι ακριβώς όπως το κάναμε αυτό.
Αυτό σημαίνει hey υπολογιστή, να μου δώσει δύο πλωτήρες, και ας συλλογικά καλέστε
τους βαθμούς.
Αυτό είναι σε αντίθεση με ένα πολύ πιο επίπονη διαδικασία όπως αυτή.
Float βαθμός1, επιπλέουν grade2, και ούτω καθεξής.
Έτσι, ένας πίνακας μας επιτρέπει να εφαρμόσει αυτή την ιδέα, αλλά πολύ λιγότερο messily, σε
τέτοιο τρόπο ώστε να μπορεί να γράψει μια γραμμή κώδικα, αντί, ας πούμε, 16 για ένα 16
εξάμηνο εβδομάδα.
Γι 'αυτό και δεν ήθελα να σκληρό κωδικό 2, γιατί αν σκεφτούμε αυτό τώρα
λογικά - ας υποθέσουμε ότι το επόμενο έτος CS50 αλλαγές σε 3 αντί κουίζ.
Και είχα τον αριθμό 2 εδώ.
Είχα τον αριθμό 2 εδώ.
Γίνεται πολύ κουραστική και πολύ εύκολο να βίδα μέχρι και να αλλάξει κατά λάθος
μία τιμή σε 3 και χάσετε κάποια άλλη τιμή 2.
Έτσι, Πάω να αντί αφηρημένο αυτό μακριά και να χρησιμοποιήσετε αυτό σταθερά, όπως της
υποδηλώνει το όνομα, δεν αλλάζει ποτέ.
Και τώρα, δεν έχει σημασία αν έχουμε διαφορετικές κουίζ αυτό το έτος ή το επόμενο, I
Απλά πρέπει να το αλλάξετε σε ένα μέρος, εδώ στην κορυφή.
>> Έτσι, αυτό είναι όλο είναι σταθερή.
Εν τω μεταξύ, η νέα εννοιολογική χαρακτηριστικό είναι ότι από μία συστοιχία.
Έτσι, οι αγκύλες να μου δώσει αυτό το πολλά άρματα και μου επιτρέπει να συλλογικά
καλέσει τους βαθμούς εδώ.
Έτσι, τώρα ας δούμε τι Πάω να κάνουμε.
Εδώ στην γραμμή 24 είναι η αρχή για ένα βρόχο.
Αυτό είναι πραγματικά φανταχτερό τίποτα.
Είναι μόνο με τη χρήση κουίζ αντί για ένα σκληρό κωδικοποιημένο αριθμό.
Αλλά δεν υπάρχει τίποτα εκεί πνευματικά διαφορετικά από την προηγούμενη εβδομάδα.
Αυτό είναι απλά printf.
Έτσι printf ("αριθμός κουίζ% d από% d") γιατί απλά θέλετε να εκτυπώσετε μου δώσει κουίζ
νούμερο ένα των δύο και στη συνέχεια, δύο από τις δύο.
Έτσι, αυτό είναι καθαρά ένα αισθητικό πράγμα.
Αλλά το ενδιαφέρον είναι τώρα στην γραμμή 27.
Για να συμπληρώσετε ένα από τα δύο σύμβολα κράτησης θέσης με floating-point
αξία, μπορείτε να χρησιμοποιήσετε και πάλι αγκύλες.
Σε αυτή την περίπτωση, είμαι με τη χρήση i επειδή αυτό για βρόχο έχει ξεκινήσει με το i ισούται
Τι αξία, προφανώς;
0.
>> Έτσι, για την πρώτη επανάληψη αυτού του βρόχου, είναι σαν Ι
έγραψε αυτό το κωδικό.
Αλλά για τη δεύτερη επανάληψη του βρόχου, είναι σαν να
έγραψε αυτό τον κωδικό μου.
Αλλά το γεγονός ότι είμαι με τη χρήση μιας μεταβλητής είναι τέλεια, γιατί, όπως το όνομα
προτείνει, είναι διαφορετικά την αξία του σε κάθε επανάληψη.
Έτσι είμαι συμπληρώνοντας Αυτός ο πίνακας ένα σημείο κάθε φορά.
Τι σημαίνει αυτή η σειρά μοιάζει;
Λοιπόν, ο λόγος που συνέταξε αυτό το σούπερ απλό ορθογώνιο στην οθόνη εδώ
πριν ήταν για το λόγο αυτό.
Ένας πίνακας είναι απλά ένα κομμάτι της μνήμης που ακολουθείται από ένα άλλο κομμάτι της μνήμης,
ακολουθούμενο από ένα άλλο κομμάτι της μνήμης, και ούτω καθεξής.
Έτσι, αν μου σειρά είναι το μέγεθος 2, στην περίπτωση αυτή εδώ, όλα θα ήθελα να κάνει με
πληκτρολογώντας αποτελέσματα κουίζ μου, όπως και εδώ.
Πήρα 100 σε αυτό το σημείο.
Και τότε πήρα ένα 99 σε αυτό το σημείο.
Στη συνέχεια, αυτή η μνήμη δεν μπορεί ακόμη να χρησιμοποιηθεί, επειδή έχω μόνο ζήτησε από την
υπολογιστή για μια σειρά μεγέθους 2.
Οι πλατείες είναι ακόμα εκεί.
Σωστά;
Έχετε ακόμα δύο gigabytes μνήμης RAM, ακόμα και αν είστε μόνο
ζητώντας για δύο πλωτήρες.
Έτσι, η ιδέα πίσω από συστοιχίες είναι ότι ο υπολογιστής παίρνει μόνο ένα κομμάτι της μνήμης
και επιμερίζει στη συνέχεια μικρότερα κομμάτια πλάτη με πλάτη με πλάτη με πλάτη.
Και έτσι αυτό είναι όλο ένας πίνακας είναι.
Είναι ένα συνεχές κομμάτι της μνήμης, μέσα από τα οποία μπορείτε να βάλετε τα πράγματα.
>> Τώρα αυτό συμβαίνει τότε να κάνει μόνο κάποια βαρετή αριθμητική.
Αν μετακινηθείτε προς τα κάτω εδώ, αυτό είναι που εγώ τότε επαναλάβει πάνω στον πίνακα.
Έρχομαι με το άθροισμα όλων των τιμών του πίνακα.
Και τότε μπορώ να χρησιμοποιήσω το γύρο λειτουργία εδώ για να κάνουμε πραγματικότητα το
Συνοψίζοντας διαιρείται με κουίζ.
Αλλά επιτρέψτε μου να κύμα το χέρι μου στο ότι ως είδος αριθμητική αρκετά για τώρα.
Αλλά το μόνο που κάνει είναι για μένα τελικά να υπολογίσει τη μέση.
Έτσι, η πρώτη κουίζ συν το δεύτερο κουίζ, διαιρούμενο δια του 2, και στη συνέχεια εκτύπωση
έξω ως int.
>> Αλλά τώρα ας μετάβαση σε ένα διαφορετικό παράδειγμα που ονομάζεται συμβολοσειρά1,
η οποία περιγράφει μια παρόμοια κατάσταση, αλλά με χορδές.
Επιτρέψτε μου να προχωρήσει και να απλοποιήσει αυτό για μια στιγμή.
Και συγχωρήστε την εσοχή για τώρα.
Ανακοίνωση στην γραμμή 19 του αυτό το παράδειγμα, έχω μια σειρά από τον χρήστη.
Αλλά παρατηρήσετε τι είμαι δίπλα σε αυτόν των γραμμών 22 και μετά.
Είμαι πραγματικά επανάληψη από i μέχρι - και αυτό είναι ένα νέο τέχνασμα -
strlen, μήκους.
Πρόκειται για μια λειτουργία που έρχεται με C ότι αν δώσετε μια συμβολοσειρά, λέει
πόσες είναι οι χαρακτήρες σε αυτό το string.
Αυτό είναι όλο.
Το γεγονός ότι είναι strlen αντί του μήκους είναι μόνο και μόνο επειδή είναι
πιο σύντομη.
Πριν από 30 χρόνια, οι άνθρωποι του άρεσε να γράφει τα πράγματα όπως συνοπτικά γίνεται.
Έτσι έχουμε κρατήσει τη σύμβαση αυτή εδώ.
i + + απλά σημαίνει αυξήσετε i σε κάθε επανάληψη.
Και τώρα παρατηρήσετε αυτό, το οποίο είναι πολύ ενδιαφέρον.
Έτσι, σε γραμμή 24, λέω υπολογιστή, να μου δώσει ένα χαρακτήρα, οκτώ
bits, και το ονομάσουμε γ.
Αλλά τι είναι αυτό για το δεξιά πλευρά λέει;
Στα αγγλικά, τι σημαίνει αυτό αντιπροσωπεύει;
[Δεν ακούγεται]
David J. Malan: Ακριβώς.
Δώσε μου τον πρώτο χαρακτήρα του πίνακα.
Ή γενικότερα, να μου δώσει το i-οστό χαρακτήρα του πίνακα.
Και συνειδητοποιούν ότι είναι σημαντικό τώρα που οι επιστήμονες ηλεκτρονικών υπολογιστών, είμαστε πραγματικά
ξεκινώντας από το 0.
Δεν έχουν τη διακριτική ευχέρεια τώρα να αρχίσουν να κάνουν αυτό.
Τώρα θα πρέπει να συμπεριφέρονται σύμφωνα με τις προσδοκίες του υπολογιστή και
μετρά από το μηδέν, επειδή [0] θα είναι η πρώτη
χαρακτήρα σε μια συμβολοσειρά.
[1] πρόκειται να είναι το δεύτερο.
[2], πρόκειται να είναι η τρίτη, και ούτω καθεξής.
Έτσι, το πρόγραμμα αυτό, αν μπορώ να το μεταγλωττίσετε - αυτό είναι, και πάλι, string1.
>> Έτσι, βεβαιωθείτε string1.
Και τώρα τρέχω string1 στο παράθυρο του τερματικού μου.
Είναι σε αναμονή για την είσοδο, έτσι είμαι πρόκειται να πληκτρολογήσετε, ας πούμε, Ντέιβιντ.
Enter.
Και τώρα εκτυπώνει όλα DAVID σε διαφορετικές γραμμές, επειδή
παρατηρήσετε τι κάνω.
Είμαι εκτύπωση ενός χαρακτήρα σε μια στιγμή.
Τώρα δεν θα μπω σε λεπτομέρειες για το θέμα αυτό σήμερα.
Αλλά διαγραφεί πριν από λίγο τον έλεγχο αυτό εδώ.
Αποδεικνύεται ότι αν ο χρήστης δεν λειτούργησε σωστά, αντιδικία, ή απλά
σύγχυση, μπορείτε πραγματικά να αποτύχει να δώσει μια σειρά από κάποιο μήκος.
Αν πατήσετε το λάθος πλήκτρο στο πληκτρολόγιο, μπορεί να δώσει
δεν συμβολοσειρά.
Ή αν είστε κακόβουλο, μπορείτε να δοκιμάσετε να επικολλήσετε στην αξία ενός gigabyte του ένα
δοκίμιο για να καλύψει αυτό το string.
Και αν ο υπολογιστής τρέχει από τη μνήμη, αποδεικνύεται ότι θα πάμε
να πάρει πίσω αυτή την ειδική τιμή που ονομάζεται μηδενική.
Έτσι, για τώρα, απλά ξέρω ότι υπάρχει αυτή η ειδική τιμή null ότι ονομάζεται
θα μας επιτρέψει να ελέγξετε όταν είμαστε έξω από τη μνήμη, μεταξύ άλλων.
>> Αλλά αν ανοίξει τώρα συμβολοσειρά2, παρατηρήσετε μια διαφορά εδώ.
Παρατηρήστε μια διαφορά εδώ με συμβολοσειρά2.
Με συμβολοσειρά2, αυτό για το βρόχο είναι λίγο διαφορετική.
Επιτρέψτε μου να διαγράψετε τα μηδενικά, έτσι ώστε να μπορούμε να μιλήσουμε για μια άλλη φορά αυτά.
Αλλά αυτό είναι διαφορετικό για το βρόχο για αυτή τη φορά;
Και μπορώ να πάω πίσω στο προηγούμενο παράδειγμα.
Έτσι, αυτό είναι έκδοση δύο.
Αυτή είναι η μία εκδοχή.
Ένα, δύο, ένα δύο.
Έτσι, η κλήση strlen είναι πού;
Είναι το πρώτο μέρος του βρόχου for.
Οποιεσδήποτε σκέψεις ως προς το γιατί το κάνω αυτό;
Ναι.
[Δεν ακούγεται]
David J. Malan: Γι 'αυτό και δεν απαιτούν τη λειτουργία κάθε φορά.
Ακριβώς.
Ανάκληση από τους βρόχους για ότι είναι εξαιρετικά απλό μόλις το είδος του
κατανοούν ότι αυτή είναι η αρχικοποίηση, ο
κατάσταση, καθώς και η ενημέρωση.
Το πρόβλημα είναι ότι η κατάσταση συμβαίνει σε κάθε
επανάληψη του βρόχου.
Και έτσι σε αυτό το παράδειγμα εδώ, τι είναι κακό για το γεγονός
ότι αυτή είναι η κατάστασή μου;
Είσαι strlen καλώντας ξανά και ξανά και ξανά.
Αλλά από τη στιγμή που έχω πληκτρολογήσει στο DAVID, το μήκος της στοιχειοσειράς είναι πέντε.
Και δεν πρόκειται να αλλάξει σε κάθε επανάληψη του βρόχου, διότι η
συμβολοσειρά εξακολουθεί να είναι ϋ-Α-V-Ι-ϋ. Έτσι, αυτό είναι μια νύξη στο τι πρόκειται να γίνει
όλο και πιο σημαντική ιδέα είναι γνωστή ως απόφαση σχεδιασμό, όπου - απλά δεν
κάνει ο υπολογιστής κάνει περιττή εργασία.
>> Τώρα, ακριβώς όπως μια προεπισκόπηση των PSET 2, PSET 2 στην τυπική έκδοση είναι
θα σας πρόκληση να εφαρμόσουν στην πράξη κάποια αριθμός των αλγόριθμους κρυπτογράφησης, κάποια
αριθμός των αλγορίθμων κρυπτογράφησης, έτσι ώστε να μπορεί τόσο να κρυπτογραφήσει και να αποκρυπτογραφήσει
μυστικά μηνύματα, μοιάζει πολύ με το Ralphie κανείς εκεί αποκωδικοποιηθεί.
Στην έκδοση του χάκερ PSET 2, θα πάμε για να πάει λίγο παραπέρα.
Εμείς πάμε για να σας παραδώσει ένα αρχείο από ένα πραγματικό σύστημα υπολογιστή που περιέχει ένα
σωρό ονόματα χρηστών και των πραγματικών κρυπτογραφημένους κωδικούς πρόσβασης, καθώς και η πρόκληση
για την έκδοση χάκερ θα είναι να σπάσει αυτούς τους κωδικούς πρόσβασης και εικόνα
τι κρυπτογραφία ή ποιο είναι το μυστικό χρησιμοποιήθηκε για την πραγματικότητα
παράγουν αυτούς τους κωδικούς πρόσβασης.
Και θα πάμε να το κάνετε αυτό, χρησιμοποιώντας ένα νέο χαρακτηριστικό εδώ του C ότι θα δώσω
απλά ένα demo του, γνωστή ως ορίσματα της γραμμής εντολών.
>> Έτσι, αποδεικνύεται, όπως κάποιοι από εσάς μπορεί να έχετε δει στο τμήμα ή στα σχολικά εγχειρίδια,
κύριος δεν πρέπει πάντα να είναι κενό σε παρένθεση.
Αποδεικνύεται ότι ο κύριος μπορεί επίσης να γραφτεί όπως αυτό, με δύο επιχειρήματα,
argc και argv, argc όπου είναι ο αριθμός των λέξεων που πληκτρολογείτε μετά
όνομα του προγράμματος στη γραμμή εντολών σας.
Και argv είναι οι πραγματικές λέξεις.
Και όπως δείχνουν οι αγκύλες εκεί, argv είναι προφανώς μια σειρά.
Είναι πρόκειται να είναι μια σειρά μετά από μια σειρά μετά από μια σειρά στη μνήμη.
Λοιπόν, τι θα πάμε να είναι σε θέση να κάνει, ξεκινώντας με PSET 2,
κάτι σαν αυτό.
Αν κάνω argv1, το οποίο είναι ένα παράδειγμα θα επανέλθουμε τη Δευτέρα, και να τρέξει
αυτό, παρατηρούμε ότι δεν φαίνεται να κάνει τίποτα ακόμα.
Είναι απλά τυπώνει το δικό του όνομα.
Αλλά αν πω αντίο τάξη, ειδοποίηση ότι το πρόγραμμα αυτό επαναλαμβάνεται προφανώς
για κάθε μία από τις λέξεις που πληκτρολογούνται στη γραμμή εντολών.
Και τα μέσα με τα οποία θα αποκτήσουν πρόσβαση σε λέξεις που ο χρήστης έχει
πληκτρολογείται στη γραμμή είναι με την αλλαγή κύρια, αρχής γενομένης από αυτό το Σαββατοκύριακο, από int
main (void) σε int main (argc, argv).
Και έτσι θα γεννηθεί επιχειρήματα της γραμμής εντολών.
Και τη στιγμή που θα πάρει πραγματικά εξελιγμένη σε αυτό, θα είστε σε θέση να γράψετε
trippy πραγματικά προγράμματα, όπως αυτή εδώ, που πηγαίνει πέρα ​​και πάνω από
μερικές από τις λειτουργίες που έχουμε κάνει μέχρι τώρα, αλλά όλα είναι αρκετά ισχυρό.
>> Γι 'αυτό και θα αφήσει αυτό με αυτό στην οθόνη.
Και εμείς θα δούμε την Δευτέρα.