[Μουσικό θέμα] ΟΜΙΛΗΤΗΣ 1: Γεια, σε όλους. Καλώς ήρθατε και πάλι στο τμήμα. Υπέροχο ημέρα out-- οποία είναι ο λόγος, είμαι Σίγουρα, υπάρχουν μόνο τέσσερις από εσάς εδώ και όχι το συνηθισμένο πακέτο μας. Έχω ήταν άρρωστος αυτό το Σαββατοκύριακο. Έτσι, δεν έχω εκρήξεως για σας παιδιά. Και εγώ μπορεί να αρχίσει βήχα τρομερά καθ 'όλο αυτό. Έτσι απλά να φέρει μαζί μου. Πάω να προσπαθήσουμε πραγματικά και να πάρει μέσα από αυτό το πρώτο, όμως, πριν να έχω μια επίθεση βήχα. Αλλά ακριβώς είναι εύκολο για μένα ένα λίγο bit-- αυτό είναι το μόνο που ζητώ. Έτσι ατζέντα μας για today-- μόνο ένα reminder-- κουίζ σας είναι την επόμενη εβδομάδα. Σας είπα την περασμένη εβδομάδα, ώστε να δεν θα σας πιάσει από τη φρουρά. Έτσι είμαι να σας υπενθυμίσω και πάλι. Κουίζ σας την επόμενη εβδομάδα. Για το σκοπό αυτό, την επόμενη εβδομάδα τμήμα θα είναι πολύ πιο of-- Θα προσπαθήσω και να εργαστούν σε κάποια αναθεώρηση. Έτσι, αν εσείς θα μπορούσε να με βοηθήσει με την αποστολή μου πράγματα που είστε άνετοι με, που είστε ανησυχούν για, θέματα που θα θέλατε για Θέλω να καλύψει, αυτό θα ήταν μεγάλη. Έτσι, μπορώ να προσπαθήσω και να εργαστούν στο τμήμα μας την επόμενη εβδομάδα ή να σας στείλουμε επιπλέον υλικό ή prep ότι δεν μπορείτε να πάρετε αλλού. Ναι! Περισσότεροι άνθρωποι έρχονται! Σκέφτηκα, έκανα ότι άσχημα τελευταία εβδομάδα, ότι κανείς δεν θέλει να έρθει πίσω; Είμαι φοβισμένος. Έτσι, τα άλλα τρία πράγματα ότι θα πάμε για να πάει πέρα ​​από είναι ανακατεύθυνση, file I / O, και στη συνέχεια, δείκτες και δυναμική μνήμη. Είμαι βέβαιος ότι είστε όλοι σούπερ ενθουσιασμένος για pointers-- αγαπημένο θέμα όλων μας, τόσο απλό να καταλάβει. Είμαι βέβαιος ότι εσείς όλοι ότι έχεις, σωστά; Έτσι, πρώτα πράγματα πρώτα, redirection-- Αυτό είναι βασικά ακριβώς ένας τρόπος να ελέγχουν πώς μπορείτε εισόδου τα πράγματα στο πρόγραμμά σας, πώς εξόδου πράγματα από το πρόγραμμά σας. Οι κύριοι τρόποι που μπορείτε παιδιά έχουν αλληλεπίδραση με το Είναι ακριβώς μέσα από τυποποιημένα με την εκτύπωση οθόνης σας εδώ. Αλλά υπάρχουν τρόποι να pipe-- όπως βλέπουμε εδώ είναι ένα από τα words-- είδους μας του σωλήνα που πληροφορίες ή ότι τα δεδομένα σε ένα αρχείο από ένα αρχείο. Είναι ακριβώς τους διαφορετικούς τρόπους να πάρει τα πράγματα στο πρόγραμμά σας και έξω από το πρόγραμμά σας, αντί της απλά να τους την εκτύπωση σε αυτήν την οθόνη ή εισάγοντας τα πράγματα από τη γραμμή εντολών. Έτσι, η πρώτη είναι ένα μικρό μεγαλύτερη από καρέ. Έτσι output-- τυπώνει μόνο την έξοδο σε ένα αρχείο αντί για την οθόνη σας. Έτσι, αν είχατε κάτι που εκτυπώνονται "Γεια σου, κόσμε!" στην οθόνη, αν το βάλετε αντί να output.text, ότι δημιουργεί αυτό το αρχείο ονομάζεται output.text. Και όταν το ανοίξετε, αυτό θα λένε "Γεια σου, κόσμε!" εκεί. Αυτό μπορεί να είναι εξαιρετικά χρήσιμη εάν έχετε έναν τόνο των λαθών στην πραγματικότητα, όπως βλέπουμε σε αυτό. Αν κάνουμε δύο καρέ, αυτό θα εκτυπώσετε τα μηνύματα λάθους. Έτσι, αν έχετε ένα πρόβλημα με το μεταγλώττισης, έχει πολλά λάθη και είστε βυθιστούμε στην προσπάθεια για να μετακινηθείτε στην γραμμή εντολών σας μέσα από όλα αυτά, μπορείτε να απλά να τα εκτυπώσετε σε ένα αρχείο, να ανοίξει το αρχείο, έτσι ώστε να να μετακινηθείτε μέσα από τους ευκολότερη. Εγώ πραγματικά χρησιμοποιήθηκε ότι μια πολύ όταν ήμουν debugging 181 psets μου για μηχανική μάθηση. Έτσι, μπορεί να είναι εξαιρετικά χρήσιμο αργότερα. Είναι επίσης χρήσιμο αν έχετε ένα πρόγραμμα ότι ίσως η δημιουργία μιας βιβλιοθήκης ή δημιουργώντας κάποια σετ του χορδές, και σας πρέπει να είναι σε θέση να δουν ότι αυτό είναι να παράγει σωστά. Αυτός είναι ο τρόπος για να το κάνουμε αυτό. Έτσι, αν τις εκτυπώσετε σε ένα αρχείο, μπορείτε μπορεί να εξετάσει τους πιο εύκολα, σωστά; Versus προσπαθώντας να μετακινηθείτε μέσω της γραμμής εντολών σας. Και τότε ένα πράγμα που πρέπει να σημειωθεί είναι ότι μόνο με το μεγαλύτερο από το καρέ, εάν γράφετε σε ένα αρχείο που ήδη exists-- Έτσι, όπως και αν τρέξαμε αυτό το πρώτο χρόνο, το βάζουμε να output.text, και στη συνέχεια είχαμε ένα δεύτερο πρόγραμμα ότι το έντυπο αυτό ως πρόγραμμα δύο και έκανε μια μεγαλύτερη από ό, τι σε output.text, που θα αντικαταστήσει that-- έτσι αντικαταστήσετε ό, τι ήταν ποτέ σε αυτό το αρχείο για να αρχίσει με. Έτσι, αν θέλετε να προσαρτήσετε σε ένα αρχείο, όπως βλέπουμε εδώ, μπορείτε απλά να κάνουμε δύο μεγαλύτερες από τα σημάδια. Και αυτό θα προσθέσει σε αυτό. Δεν θα το αντικαταστήσετε. Έτσι, αν πρέπει να εκτελέσετε πολλαπλές προγράμματα και το είδος του να κρατήσει κομμάτι του τι είναι όλα αυτά επιστρέφουν σε σας σε ένα αρχείο, ότι είναι ένας τρόπος για να το κάνουμε. Αν δεν με νοιάζει τι είναι το αρχείο σας και αυτό είναι που επιτρέπεται να αντικατασταθούν, μπορείτε να χρησιμοποιήσετε μόνο ένα ενιαίο μεγαλύτερο από ό, τι. Μήπως αυτό έχει νόημα για όλους; ΚΟΙΝΟ: Όπως dot κάθετος γεια μεγαλύτερη από το κείμενο dot εξόδου, όπως και δύο φορές, αυτό ακριβώς θα δείξει μόνο στην παραγωγή dot κείμενο μια δεύτερη time-- ΟΜΙΛΗΤΗΣ 1: Δεξιά. Έτσι θα ήταν ουσιαστικά μόνο εντελώς αντικαταστήσετε αυτό που ήταν εκεί για να αρχίσει με. Εάν αυτό το αρχείο εδώ, η output.text ήδη υπάρχει, βασικά ό, τι ονομάζουμε ότι και πάλι με ένα ενιαίο μεγαλύτερο από ό, τι μπορείτε να σκεφτείτε ακριβώς από αυτό ως σαν να αντικαταστήσει το αρχείο. Όπως όταν σώζετε μια λέξη έγγραφο και κάνετε αποθήκευση ως, και θα κρατήσει το ίδιο όνομα, και που αντικαθιστά it-- εντελώς Αυτό είναι το ίδιο είδος του πράγματος. Όποιος έχει απορίες σχετικά με απλά την έξοδο σε ένα αρχείο; Awesome. Έτσι, προφανώς, αν αντιστραφεί η την κατεύθυνση του βέλους, μπορεί να κάνει είσοδο. Έτσι, όταν τα παιδιά είχαν όπως Καίσαρα ή Visioneer και θα έπρεπε να κάτι εισόδου, είχατε ένα όρισμα της γραμμής εντολών ότι στην πραγματικότητα εισάγετε. Αυτός είναι ένας άλλος τρόπος για να το κάνουμε αυτό. Έτσι, αντί να περιμένουν για μια γραμμή εντολών, όπως όταν σας ζητηθεί για σας μήνυμα σε Καίσαρα ή Visioneer, αν είχατε ένα αρχείο κειμένου ότι είχε το μήνυμά σας, θα μπορούσατε απλά να πληκτρολογήσετε σε αυτό. Επομένως, εάν αυτό ήταν σαν κουκίδα κάθετο Καίσαρα 3 λιγότερο από το βέλος εισαγωγής κειμένου, το οποίο είναι το μήνυμά σας, ότι θα τρέχει μια χαρά. Όταν το πρόγραμμά σας Καίσαρα πραγματικότητα ζήτησε για είσοδο από το χρήστη, θα το έχετε ήδη, επειδή έχετε πληκτρολογήσει σε αυτό το αρχείο. Αυτός είναι απλά ένας άλλος τρόπος. Ακριβώς μια αντίστροφη της output-- απλά η είσοδος για τα δεδομένα σας. Και στη συνέχεια το τελευταίο είναι σωλήνα. Έτσι, αρκετά δροσερό αυτού του ατόμου. Επειδή σας δίνει τη δυνατότητα να λαμβάνει την έξοδο ενός πρόγραμμα και να το θέσω ως είσοδος σε ένα άλλο πρόγραμμα. Δεν ξέρω αν κάποιος από εσάς έπαιξε με το αποκρυπτογραφήσει ότι CS50 θα μπορούσε να έχει θα δοθεί, αλλά θα σας επιτρέπουν να πάρει κάποιο δείγμα αρχείο, πληκτρολογήστε στο κρυπτογράφησης, και στη συνέχεια από εκεί Τύπος ότι στην αποκρυπτογράφηση σας για να βεβαιωθείτε ότι αποδείχθηκε το ίδιο. Έτσι είναι το είδος του σαν τρεις-τρόπο βρόχου. Πηγαίνετε για αυτό. ΚΟΙΝΟ: Εάν ένα πρόγραμμα έχει πολλαπλές εισόδους, Είναι ένας τρόπος για να πει ποια είναι η συνεισφορά εκεί να χρησιμοποιήσετε το αρχείο κειμένου ή την έξοδο για; ΟΜΙΛΗΤΗΣ 1: Έχει πολλαπλές εισόδους. Ό, τι αρχείο input-- σας όταν είναι ζητώντας εισόδου που πρώτη φορά, είναι πρόκειται να αναλάβει, νομίζω, είναι πρόκειται να αγωγό σε ολόκληρο το αρχείο. Έτσι, εάν έχετε πολλαπλές εισόδους, είστε πρόκειται να σωληνώσεις σε πολλαπλά αρχεία. Έτσι, αν είστε ζητώντας μηνύματα τρεις φορές στον κώδικά σας, εσείς πρόκειται να πρέπει να θέτει σε τρία διαφορετικά αρχεία. Και αυτό γίνεται τρελό. Και εσείς δεν θα πρέπει να ανησυχείτε γι 'αυτό τώρα. Αλλά αυτή είναι η ιδέα. Οπότε ναι, σωλήνας είναι μόνο έξοδος ενός πρόγραμμα χρησιμοποιεί είσοδο μέσα στο άλλο. Όλοι καλά εκεί; Cool. ΟΚ. Πιθανότατα δεν θα έχει να κάνει πάρα πολύ με αυτό. Αλλά θα πρέπει να καταλάβουν τρόποι που μπορείτε να χρησιμοποιήσετε αυτό. Και υπάρχουν μερικές περιπτώσεις που ίσως να θέλετε να το χρησιμοποιήσετε. Έτσι file I / O-- ξέρω τι είστε saying-- έχουμε συνηθίσει να διαβάζει από και γράφοντας στην οθόνη μας εκεί, το οποίο είναι στάνταρ σε πρότυπο και έξω. Και αυτό είναι ό, τι σας παιδιά έχουν κάνει από την αρχή της κατηγορίας εδώ. Αλλά μπορείτε επίσης να διαβάσει και να γράψει αρχεία, το οποίο είναι το σύνολο αρχείο I / O-- έτσι αρχείο εισόδου, εξόδου είναι το μόνο που αντιπροσωπεύει. Έτσι, αυτό ουσιαστικά σημαίνει ότι μπορείτε να αποθηκεύσετε τα δεδομένα σας τώρα. Όταν απλά να εκτυπώσετε προς τα οθόνη, αυτό είναι βασικά φύγει, σωστά; Μόλις κάνετε "Γεια σας κόσμο "και τρέχει" Hello world " τυπώνει "Hello world" στην οθόνη. Αλλά δεν μπορείτε πραγματικά να κάνετε τίποτα με το από εκεί. Αν έχετε αποθηκεύσει σε ένα κείμενο αρχείο, στη συνέχεια, ξαφνικά έχετε αυτά τα στοιχεία που σας επιτρέπεται να χειραγωγήσουν ή να το βάλετε σε ένα αρχείο, ή να το βάλετε σε ένα πρόγραμμα αργότερα. Ένας από τους λόγους γιατί το κάνουμε αυτό είναι ακριβώς ως έναν τρόπο για την αποθήκευση δεδομένων για μεταγενέστερη χρήση. Έχω μια-δυο βήματα εδώ απλά περπατώντας μέσα πρότυπο I / O. Στο πρώτο βήμα, θα Πρέπει να δημιουργήσετε μια αναφορά στο αρχείο με όλα τα καπάκια Αρχείο αστέρων. Έτσι ώστε να δημιουργεί ένα δείκτη σε ένα αρχείο. Έτσι, τότε θα θέλετε να το ανοίξετε. Και λέτε, κυριολεκτικά, μόνο αρχείο ισούται με fopen. Και αυτό πρόκειται να επιστρέψει μια δείκτη στο αρχείο που μόλις άνοιξε. Είδα ένα ζευγάρι από εσάς παιδιά σε ώρες γραφείου. Αλλά ένα από τα πράγματα είναι remember-- δείκτες μπορεί να είναι κάποια διεύθυνση ή μηδενική, σωστά; Αν έχουμε ποτέ μια περίπτωση όπου κάτι που μπορεί να επιστρέψει null, τι πρέπει να κάνουμε πριν εμείς ποτέ να το χρησιμοποιήσω; Θα πρέπει να ελέγξετε αν είναι μηδενική ή όχι, σωστά; Επειδή κάποιοι από εσάς μπορεί να είχαν Το θέμα στο οποίο ανεξαρτήτως αντικειμένου είχε επιστρέψει στο ξεμπλοκάρισμα ήταν μηδενική. Προσπαθήσατε να εκτελέσετε κάποια λειτουργία σε αυτό. Και ο υπολογιστής site σας επικριθεί. Σωστά; Σίγουρα ένα ζευγάρι από εσάς μπορεί να είχε αυτό το θέμα. Έτσι, με fopen, fopen είτε θα επιστρέφει ένα δείκτη στο αρχείο, ή αν κάτι πάει στραβά, πρόκειται να επιστρέψει null. Έτσι, θα πρέπει πάντα να ελέγχετε ότι δεν έχει επιστρέψει null πριν επιχειρήσετε να κάνετε τίποτα άλλο. Αυτό είναι σαν ένα τυπικό παράδειγμα ότι θα πάμε να χρειάζονται εδώ. Αν υπάρχει πάντα μια πιθανότητα ότι κάτι που θα μπορούσε να επιστρέψει null, ελέγξτε για να βεβαιωθείτε ότι δεν πριν να συνεχίσετε. Διαφορετικά, θα πάμε να πάρετε υπέροχη σφάλματα ιστοσελίδα. Και κανείς δεν θέλει να ασχοληθεί με αυτά. Έτσι, όπως βλέπουμε εδώ, το πρώτο επιχείρημα είναι ακριβώς η διαδρομή προς το αρχείο. Αν αυτό το αρχείο δεν υπάρχει, πρόκειται να δημιουργήσει αυτό το αρχείο. Και είναι ακριβώς πρόκειται να είναι κενό. Και στη συνέχεια, το δεύτερο επιχείρημα είναι ο τρόπος που θέλετε. Μήπως θέλετε να διαβάσετε από αυτό το αρχείο; Θέλετε να γράψετε από αυτό; Θέλετε να προσαρτήσει; Έτσι, στην πραγματικότητα αυτό που μόλις said-- αν το αρχείο δεν υπάρχει και προσπαθείτε να διαβάσει από αυτό, πρόκειται να ρίξει ένα σφάλμα. Αν το αρχείο name-- αρέσει, αν file.text δεν υπάρχει ακόμη και θέλετε να γράψετε σε αυτό, θα δημιουργήσει ένα κενό αρχείο με όνομα file.text για εσάς. Και αν θέλετε να προσαρτήσετε, θα πρέπει να κάνουν το ίδιο πράγμα. Μήπως αυτό έχει νόημα; Αν προσπαθείτε να διαβάσει από ένα αρχείο που δεν υπάρχει ακόμα, αυτό θα ρίξει ένα σφάλμα. Διαφορετικά, θα δημιουργήσει το αρχείο για να κάνετε ό, τι θέλετε σε αυτό. Cool. Τώρα μπορούμε να διαβάσουμε από το αρχείο. Και αυτό είναι ακριβώς το είδος της μετάβασης μέσω των διαφόρων λειτουργιών ότι έχουμε για το αρχείο I / O. Αυτή η βούληση είναι αναγκαίο το chipset αυτής της εβδομάδας, αν θυμάμαι σωστά. Ναι, αυτό θα είναι απολύτως απαραίτητο το chipset αυτής της εβδομάδας. Έτσι fgetc επιστρέφει τον επόμενο χαρακτήρα. fgets απλά επιστρέφει μια γραμμή κειμένου. Θα επιστρέψει τίποτα μέχρι μια νέα γραμμή, και θα σπάσει. Έτσι fread διαβάζει ένα ορισμένο τον αριθμό των bytes και τα τοποθετεί σε μια σειρά, η οποία είναι κάτι που θα μπορούσε να θέλουν να κάνουν με την εκ νέου size-- μπορεί να είναι χρήσιμο. Πόσοι άνθρωποι έχουν διαβάσει το spec το chipset, από τον τρόπο; ΟΚ. [Δεν ακούγεται] ΟΜΙΛΗΤΗΣ 1: Εντάξει. Εντάξει. Σίγουρα διαβάσετε that-- είναι ένα διασκεδαστικό το chipset. Μπορείτε να πάρετε για να ανακτήσετε ένα διαγραμμένο μνήμη card-- πραγματικά συναρπαστικό όταν λειτουργεί. Αλλά σίγουρα, αρχίσει να διαβάζει αυτό. Ελάτε να μιλήσουμε για μένα, αν έχετε ερωτήσεις σχετικά με αυτό. Εντάξει, έτσι όπως έλεγα, fread διαβάζει ένα ορισμένο αριθμό bytes. Αυτό είναι κάποιο αυθαίρετο αριθμό ότι θα πάμε για να ρυθμίσετε. Και τότε fseek μόνο κινήσεις σε μια ορισμένη θέση. Έτσι, ίσως δεν με νοιάζει για τα επόμενα 10 bytes. Απλά θέλετε να προχωρήσετε. Δεν νοιάζονται για εκείνους. Θέλετε να διαβάσετε ξεκινώντας στο byte 11. fseek σας επιτρέπει να το κάνουμε αυτό. Γι 'αυτό σας επιτρέπει να είναι επιλεκτικό σχετικά με το τι διαβάζετε. Επειδή fgetc, fgets, και fread ανάγνωσης από μια συγκεκριμένη θέση στο αρχείο. Ένας τρόπος για να σκεφτούμε γι 'αυτό είναι, αν αυτό είναι το αρχείο μας, όταν ανοίγετε πρώτη φορά, έχετε αυτή τη θέση στο αρχείο που ξεκινά από την αρχή. Κάθε φορά που σας καλούν fgetc, fgetf, ή fread, πρόκειται να ξεκινήσει από ο δείκτης θέσης. Ας πούμε απλά θέλετε να διαβάσετε Αυτό το κομμάτι της μνήμης εδώ. Δεν μπορείτε απλά να καλέσετε. Θα πρέπει να αναζητήσει εδώ και στη συνέχεια διαβάζονται από εκεί ή να διαβάσετε, παίρνει, ή getc, ανάλογα με το τι θέλετε. Έτσι, αναζητούν απλά σας επιτρέπει να παραλείψτε τα τμήματα της μνήμης. Και αυτό είναι το μόνο τον τρόπο μπορείτε να παρακάμψετε τα πράγματα χωρίς την ανάγνωση τους σε ρυθμιστικό σας. Μήπως αυτό έχει νόημα για όλους; Προφανώς, υπάρχει μια πολλές παράλληλες here-- ανακατεύθυνση εξόδου ή εισόδου μας, έχετε διαβάσει και να γράψει. Έτσι fputc γράφει μόνο ένα χαρακτήρα στο αρχείο. fputs γράφει μια γραμμή. Fprintf εκτυπώνει μια μορφοποιημένη έξοδο. Έτσι, εάν έχετε καρτέλες, ή χώρο, ή οτιδήποτε. Και τότε fwrite γράφει κάποια πίνακα από bytes σε ένα αρχείο. Έτσι, αυτό είναι με τον ίδιο τρόπο fwrite και fread είναι ανάλογες opposites-- fgets, fputs, και Στη συνέχεια fputc και fgetc-- παρτίδες τρελά, γρήγορη πράγματα. Ακριβώς το είδος των διατηρήσει αυτό handy-- θα έχουν διαφορετικούς χρόνους όπου ίσως απλά θέλετε ένα χαρακτήρα τη φορά. Ίσως θέλετε μια ολόκληρη γραμμή. Με λεξικό pset-- σας η οποία είναι σε δύο psets, Πιστεύω, σας δίνουμε μια ολόκληρη λεξικό σε μορφή κειμένου που έχει κάθε λέξη διαχωρίζονται από μια γραμμή. Έτσι, αν θέλετε να διαβάσετε με μια λέξη σε μια στιγμή, τι θα μπορούσε να χρησιμοποιήσει, αν είστε ανάγνωση και που όλα αυτά χωρίζονται σε νέες γραμμές, και απλά θέλετε μία λέξη σε μια στιγμή; ΚΟΙΝΟ: fgets ΟΜΙΛΗΤΗΣ 1: Δεξιά. Fgets-- γιατί αυτό επιστρέφει ό, τι είναι σε μια γραμμή. Και αν κάθε λέξη είναι της τη δική του γραμμή, μπορούμε να χρησιμοποιήσουμε fgets. Cool. Μήπως αυτό έχει νόημα, ο καθένας; Cool; Ναι, θα πάμε για να φτάσετε στο το διασκεδαστικό μέρος με δείκτες πολύ σύντομα, όπου μπορείτε έχετε να κάνετε κάποια μαθηματικά. Και αυτό θα είναι μεγάλη. Τελευταία step-- κλείσει το αρχείο σας. Με τόσα πολλά πράγματα εδώ, ένα από τα παραδείγματα μας είναι αν μπορεί να επιστρέψει null, ελέγξτε για μηδενική. Εάν ανοίξετε κάτι, θέλετε να κλείσετε το καλύτερο. Εντάξει, έτσι δεν είστε γίνει μέχρι να είστε γίνει αν δεν έχω κλείσει. Κάτι σαν αυτό δεν είναι πάνω μέχρι το λίπος κυρία τραγουδά. Αυτό είναι σαν το κλείσιμο του αρχείου σας. Όπως λέει εδώ, απλά να επαναλάβω, πάντα ανοίξετε το αρχείο σας πριν είστε ανάγνωση ή την εγγραφή σε αυτό. Και πάντα να το κλείσετε, αν έχετε ανοίξει. Εντάξει; Cool. Έτσι, εδώ είναι ένα παράδειγμα. Έτσι tiny-- δεν ξέρω αν σας παιδιά μπορούν να δουν πολύ καλά. Εάν μόνο θα μπορούσαμε να αυξήσουμε η φωτεινότητα με κάποιο τρόπο. Επιτρέψτε μου να το κάνετε πραγματικά αυτό, αν μπορώ. Εντάξει, εσείς δεν μπορεί πραγματικά να δείτε ότι σε όλα, μπορεί να σας; Εντάξει, θα πάμε να το κάνουμε αυτό, τότε. [Δεν ακούγεται] Υποθέτω ότι αυτό είναι πολύ καλύτερο να δούμε. Μπορεί κανείς να δει όπου μου ποντίκι πήγε είναι η ερώτηση; Αχ, εκεί is-- τι αγωνίζεται! ΟΚ. Βασικά, εσείς θα πρέπει να έχουν το είδος μια ιδέα του τι είναι αυτό που κάνει. Δεν είναι τέλεια. Αλλά εγώ θα προτιμούσα να εξηγήσει το δαπανούν περισσότερο χρόνο προσπαθώντας να το διαμορφώσετε σωστά. Βασικά, όπως βλέπετε εδώ, αρχίζουμε με το αρχείο ανοιχτό. Και έχουμε κάποια αρχείο βάσης δεδομένων που είμαστε άνοιγμα που λέει ότι είναι μαθητές μας. Και θα πάμε να γράψει σε αυτό. Έτσι, φυσικά, να επιστρέψει null. Έτσι πρέπει να ελέγξετε για μηδενική. Και στη συνέχεια, αν δεν είναι null, πάμε μέσα. Και όπως βλέπετε, είμαστε looping μέσα εδώ. Υπάρχουν φοιτητές. Οι μαθητές είναι hash ορίζεται ως τρεις. Και αυτό που κάνουμε είναι είμαστε εκτύπωση σε αρχείο, σωστά; Λοιπόν, τι μπορούμε εκτύπωση σε αρχείο μας; ΚΟΙΝΟ: Οι βαθμολογίες που βρίσκονται στον πίνακα; ΟΜΙΛΗΤΗΣ 1: Ναι. Οι βαθμολογίες που βρίσκονται σε η array-- ακριβώς. Έτσι, ανοίγουμε αυτό αρχείο της βάσης δεδομένων, η οποία Υποθέτω ότι είναι κάποιο είδος των βαθμών της βάσης δεδομένων. Και εμείς απλά την εκτύπωση της βαθμολογίες του κάθε μαθητή σε αυτό το αρχείο. Cool; Καλή. Awesome. ΟΚ. Ας πάρει πίσω to-- ΚΟΙΝΟ: Έχω μια γρήγορη ερώτηση. Είναι η printf όχι η για βρόχο; Αυτό είναι ακριβώς το αν βρόχο; ΟΜΙΛΗΤΗΣ 1: Όχι, είναι στο βρόχο for. Δεν μπορώ να δω το ποντίκι μου πολύ καλά μέχρι εδώ. Έτσι είμαι αγωνίζονται να μορφή που σωστά. Ο βραχίονας αυτός πρέπει να φύγει. Θα πρέπει να είναι εδώ κάτω. Αυτό είναι ό, τι είναι σε σας για βρόχο. Εκεί. Τώρα είναι αρκετά. Έτσι, αυτό είναι το πώς θα πρέπει να be-- εκτός για το τελευταίο στήριγμα που απέρριψε. ΟΚ. Μήπως αυτό έχει νόημα για όλους; ΟΚ. Εμείς πάμε για να προχωρήσουμε στο επόμενο πράγμα then-- η οποία, στην πραγματικότητα, θα πάμε να πρέπει να δείτε τον κώδικα. Έτσι, είμαι απλώς πρόκειται να αντιγράψετε ότι πάνω από τώρα. ΟΚ. Έτσι, Πάω να σας δείξω παιδιά αυτός ο κώδικας. Και θέλω να δοκιμάσετε και το σχήμα από αυτό που θα έπρεπε να κάνει. Έτσι, δίνεται that-- πάρει ένα λεπτό ή έτσι. Δοκιμάστε και να καταλάβω τι συμβαίνει εδώ. Οποιεσδήποτε ιδέες; Γνωρίζουμε ότι έχουμε τουλάχιστον δύο τα επιχειρήματα της γραμμής εντολών, σωστά; Υποθέτω ένα από τα οποία πρόκειται να είναι ότι [δεν ακούγεται] του προγράμματος μας είναι και μετά κάτι άλλο. Διότι, αν [δεν ακούγεται] είναι λιγότερο από δύο, θα φωνάζω σε αυτούς. Σωστά; Και από τη χρήση, μοιάζει πρόκειται να είναι κάποιο είδος του αρχείου. Όλοι συμφωνούμε σε αυτό; Μέχρι τώρα, τι είναι ο βρόχος να κάνει; Τι είναι αυτό που πηγαίνει μέσα; ΚΟΙΝΟ: Όλα τα αρχεία. ΟΜΙΛΗΤΗΣ 1: Ακριβώς. Είναι να περάσει από όλα τα αρχεία που έχουμε είσοδο εκεί. Έτσι, για κάθε αρχείο, είναι ανοίγοντας κάποια χορδή εκεί. Είναι το άνοιγμα αυτού του αρχείου. Σωστά; Και είναι ανάγνωση από αυτό. Φυσικά, ελέγχοντας αν είναι άκυρη. Και τότε θα είναι η εκτύπωση. Αν είναι μηδενική, είναι ακριβώς μας λέει ότι αυτό δεν είναι ένα αρχείο που υπάρχει. Επειδή θυμάμαι, με διαβάστε το αρχείο μας πρέπει να υπάρχει. Σωστά; Με γράφουν και προσάρτησης, μπορείτε να πάρετε μακριά με αυτό. Αλλά με την ανάγνωση, το αρχείο μας πρέπει να υπάρχει. Και στη συνέχεια, εάν υπάρχει, τι κάνουμε εδώ; Ας ξεκινήσει εδώ. Τι είναι αυτό do-- αυτό το πρώτο χαρακτήρα. Τι κάνει; Παίρνει ένα χαρακτήρα, σωστά; Λοιπόν, τι είναι αυτό που κάνει; Είναι να πάρει τον πρώτο χαρακτήρα. Όποιος ξέρει ΕΟΦ; ΚΟΙΝΟ: Τέλος του αρχείου; ΟΜΙΛΗΤΗΣ 1: Τέλος του file-- ακριβώς. Έτσι, πρόκειται να περάσουν από ολόκληρο το αρχείο, σωστά; Και τότε θα πρόκειται για την ενημέρωση από να πάρει κάθε μεταγενέστερη χαρακτήρα. Σωστά; Και τι είναι αυτό που κάνει; ΚΟΙΝΟ: Κάνοντας ότι in-- ΟΜΙΛΗΤΗΣ 1: putchar εκτυπώσεις στην προφύλαξη οθόνης σας. [Δεν ακούγεται] ο χαρακτήρας. Και στη συνέχεια, όταν αυτό [δεν ακούγεται] Αυτό θα κλείσει το αρχείο. ΚΟΙΝΟ: Δεν χρειάζεστε ένα [; άλλο; ?] ΟΜΙΛΗΤΗΣ 1: Όχι απαραίτητα. Θέλω να πω, αυτό είναι το είδος της σιωπηρής σε αυτό. Επειδή αυτό επιστρέφει, όμως, εφ ' καθώς αυτό δεν πιάσει αυτό, είστε μια χαρά. Θέλω να πω ότι είναι μάλλον καλό πρακτική να κάνει ένα άλλο. Αλλά ένας άλλος δεν είναι πάντα απαραίτητα ειδικά αν έχετε κάτι σαν μια επιστροφή, η οποία σημαίνει ότι σε αυτή την περίπτωση, αν τα αλιεύματα αυτό, το πρόγραμμά σας θα τελειώσει και ποτέ δεν θα φτάσουμε σε αυτό. Είναι περισσότερο για την περίπτωση που είστε δεν είναι κατ 'ανάγκην επανέρχεται κάτι. Διότι, αν αυτό δεν ήταν επιστροφή τίποτα, αυτό θα σήμαινε ότι αν αυτό ήταν αλήθεια, το υπόλοιπο αυτό θα εξακολουθεί να τρέχει. Και σε αυτή την περίπτωση, μπορείτε Θα ήθελα μια ψευδή. Αν αυτό είναι που επιστρέφουν, και τέλος του προγράμματός σας, ένα άλλο, δεν είναι απαραίτητο όλα το χρόνο, ανάλογα με τα συμφραζόμενα. Ιακώβ, δεν έχετε μια ερώτηση; Κοινό: Ναι. Έτσι κάνει fgetc πάρει τον επόμενο χαρακτήρα; Πώς να αυξήσει το χαρακτήρα; ΟΜΙΛΗΤΗΣ 1: Ναι. Έτσι fgetc παίρνει τον επόμενο χαρακτήρα. Μπορείτε να σκεφτείτε από το όπως η C ++, κατά μία έννοια. ΚΟΙΝΟ: Λοιπόν, τι ήταν ΕΟΦ; ΟΜΙΛΗΤΗΣ 1: ΕΟΦ είναι το τέλος του αρχείου. Είναι απλά ένας δείκτης που σας επιτρέπει να γνωρίζετε ότι είστε στο τέλος του αρχείου σας. Έτσι, αυτό πρόκειται να εκτυπώσετε στο πρότυπο σας έξω. Και στη συνέχεια, πρόκειται να κλείσει το αρχείο όταν το κάνει. Και τότε ας πάει να το επόμενο αρχείο, σωστά; Έτσι, συνολικά, αυτό που κάνει αυτό το πρόγραμμα; [Δεν ακούγεται] ΟΜΙΛΗΤΗΣ 1: Ναι. Είναι απλά τυπώνει τα πάντα εκεί. Έτσι, αν εσείς έχετε χρησιμοποιήσει ποτέ CAT και στη συνέχεια το όνομα κάποιου file-- Δεν ξέρω αν κάποιος από εσάς έχει κάνει ποτέ ότι στο τερματικό σας. Αλλά αν χρησιμοποιείτε ποτέ το εντολή CAT-- Γ-Α-T-- και, στη συνέχεια, ανεξάρτητα από το αρχείο έχετε there-- το εκτυπώνει έξω στο τερματικό σας, η οποία μπορεί να είναι εξαιρετικά βολικό για κάποια πράγματα. Μου αρέσει πολύ να χρησιμοποιούν. Μήπως αυτό έχει νόημα για όλους; Cool; Εντάξει, έτσι το καθήκον σας now-- είτε από τον εαυτό σας ή με τους ανθρώπους γύρω you-- είναι να γράψετε μόνο ένα απλό πρόγραμμα ότι θα γράψω απλά "Hello, world!" έξω σε ένα αρχείο. [Δεν ακούγεται] [Δεν ακούγεται] ΟΜΙΛΗΤΗΣ 1: Ήμουν όπως, έκανε Το κάνω άσχημα την τελευταία εβδομάδα; Δεν νομίζω ότι ήταν τόσο κακό. Χαίρομαι που είστε όλοι εδώ. Είναι πραγματικά με κάνει ευτυχισμένη. Είμαι ένα κορίτσι από την απλή ευχαρίστηση. Μου αρέσει μόνο όταν το τμήμα μου φοιτά. Έτσι είμαι απλά να πάρει αυτό που ξεκίνησε για εσείς, έτσι ώστε να μπορούμε να κωδικοποιήσει μαζί. Δεν μου αρέσει βάζοντας ο καθένας για το σημείο αν θέλετε να είναι. ΚΟΙΝΟ: Για το κουίζ, κάνουμε πρέπει να γράψουμε ένα πρόγραμμα; ΟΜΙΛΗΤΗΣ 1: Μπορεί να σας ζητηθεί να γράφω ένα απλό και προγράμματα με το χέρι. Yup. ΚΟΙΝΟ: Το κουίζ είναι την επόμενη εβδομάδα, σωστά; ΟΜΙΛΗΤΗΣ 1: Το κουίζ είναι την επόμενη Τετάρτη. Αυτό σημαίνει ότι υπάρχει ένα υπέροχο [; ΧΑΚ;] ταξινόμησης γλέντι, το οποίο σημαίνει ότι θα έχετε τα αποτελέσματά σας πίσω που night-- σε ποια χρονική στιγμή; Ποιος ξέρει; Αλλά θα είναι εκείνο το βράδυ. Εντάξει. Πώς θέλουμε να αρχίσουμε αυτό; Θα σας δώσω ένα hint-- ξεκινά με αυτό. ΚΟΙΝΟ: Θα πρέπει να ανοίξετε ένα αρχείο. ΟΜΙΛΗΤΗΣ 1: Ναι. Έτσι, ό, τι θέλετε να καλέσετε αυτό; Μήπως απλά θέλετε να το ονομάσουμε "αρχείο"; Ας το κάνουμε εύκολο. Έτσι fopen-- τι μας δοκιμή εξόδου πρόκειται να είναι; Καλέστε το "Γεια σας." Και ποιος είναι ο τρόπος μας; Τι κάνουμε με αυτό το αρχείο; ΚΟΙΝΟ: Διαβάστε. Γράφοντας. ΟΜΙΛΗΤΗΣ 1: Σας γράφουμε για αυτό. Υπέροχο. Εντάξει, έτσι έχουμε αυτό το αρχείο τώρα. Τι πρέπει να κάνουμε; ΚΟΙΝΟ: Ελέγξτε αν είναι άκυρη. ΟΜΙΛΗΤΗΣ 1: Ελέγξτε αν είναι null-- ακριβώς. Αυτό είναι που μου αρέσει να ακούω. Αυτό θα πρέπει να είναι αυτόματη, ειδικά λίγο πολύ από αυτό το σημείο. Αν αρχίσετε segfaulting, ίσως δεν ελέγχει για μηδενική κάπου. Εννέα στις δέκα φορές, ότι είναι πρόκειται να είναι το σφάλμα σας. Έτσι, αν θα μπορούσατε να πάρετε μόνο στο συνήθεια, πάντα να ελέγχετε αν είναι μηδενική, η ζωή σας πρόκειται να είναι ωραία και easy-- ή ευκολότερη. Έτσι ελέγξτε για να δείτε αν είναι άκυρη. Έτσι, αν δεν είναι μηδενική, το οποίο είναι αυτό που ισούται με το κτύπημα means-- δεν null-- είναι έγκυρη. Τι θέλουμε να κάνουμε; Εμείς απλά θέλετε να εκτυπώσετε σε αυτό το αρχείο, σωστά; Λοιπόν, τι θα πάμε να χρησιμοποιήσετε; ΚΟΙΝΟ: fprintf ΟΜΙΛΗΤΗΣ 1: Fprintf-- υπέροχο. Και fprintf διαρκεί δύο arguments-- όπου πρόκειται και τι θέλουμε να εκτυπωθούν. Έτσι ποια είναι η πρώτη; Πού είναι αυτό που πηγαίνει; ΚΟΙΝΟ: Αρχείο. ΟΜΙΛΗΤΗΣ 1: Δεν πρόκειται να καταθέσει. Και τι θέλουμε τυπωμένο; "Γεια σου, κόσμε!" Εντάξει. Έχουμε μια τελευταία thing-- ένα άλλο μεγάλο παράδειγμα εδώ. ΚΟΙΝΟ: Κλείσιμο. ΟΜΙΛΗΤΗΣ 1: Κλείσιμο. Εκεί θα πάτε. ΚΟΙΝΟ: Είναι αυτό συμβαίνει αν το αρχείο είναι άκυρη; ΟΜΙΛΗΤΗΣ 1: Όχι, αυτό είναι, αν δεν είναι μηδενική. ΚΟΙΝΟ: Ω, αν είναι not-- ΟΚ. Για την fopen και στη συνέχεια το δύο επιχειρήματα που πάει μέσα, τι κάνει το πρώτο επιχείρημα σημαίνει πάλι; ΟΜΙΛΗΤΗΣ 1: Το επιχείρημα είναι ακριβώς όπως το όνομα του αρχείου ότι θέλετε να πάτε. Έτσι, μετά από αυτό τρέχει, τι θα κάνατε έχουν κάποιο αρχείο που ονομάζεται "γεια" ότι είχε "Hello, world" μέσα σε αυτό. Αυτό είναι όλο. Απλά το όνομα. ΚΟΙΝΟ: Και δεδομένου ότι είναι το γράψιμο, η το αρχείο δεν πρέπει να υπάρχει ήδη. Είναι ότι αυτό που είπατε; ΟΜΙΛΗΤΗΣ 1: Δεξιά. Ακριβώς. Αν το "Hello" ως ένα αρχείο δεν υπάρχει ακόμα, είναι πρόκειται να δημιουργήσει ένα αρχείο που ονομάζεται Γεια σας "και να γράψει σε αυτό για σας. ΚΟΙΝΟ: Όταν λέτε το πρόγραμμα για έγραψε στο αρχείο, γιατί γράφεις "αρχείο" αντί του το όνομα του αρχείου και fprintf-- ΟΜΙΛΗΤΗΣ 1: Επειδή σε αυτή την περίπτωση, έχουμε ότι οι μεγάλες FILE-- όλα σε caps-- αστέρι, αρχείο. Έτσι είναι ένας δείκτης για το αρχείο ότι είστε μιλάμε. Αυτός είναι ο τρόπος που θα αναφερθώ μόνο σε αυτό. Έτσι, σε αυτή την περίπτωση, μπορείτε μπορεί να σκεφτεί file-- AHA, μπορούμε να χρησιμοποιήσουμε this-- αρχείο εδώ αναφέρεται στο άνοιγμα του "Hello" και να αφήνει να γράψω. ΚΟΙΝΟ: Θα βάλουμε ένα "Γεια σας" αντί [; ακριβώς;] αρχείο f; ΟΜΙΛΗΤΗΣ 1: Όχι, επειδή "Γεια σας" πρέπει να είναι ανοικτή και επεξεργάσιμα. Φάκελος εδώ είναι σαν ένα ένδειξη που λέει εντάξει, εμείς έχουν αυτό το file-- hello-- ότι ψάχνουμε σε. Έχει ανοίξει. Και πρόκειται να γράψει σε αυτό. Εάν χρησιμοποιείτε μόνο "Γεια σας", που εγκλείεται σε αυτό. Έτσι πρόκειται να φρικάρεις. Θέλω να πω, θα μπορούσατε να έχετε ονομάσει. Θα μπορούσε να έχει κάνει το αρχείο, αστέρι, "Γεια σας", ισούται με αυτό. Αλλά το όλο θέμα είναι ότι σας χρειάζεται ένα δείκτη αστέρων αρχείο για να είναι σε θέση να χρησιμοποιήσετε αυτές τις λειτουργίες. ΚΟΙΝΟ: Θα μπορούσατε να κάνετε αρχείο, αστέρι, αρχείο, "Γεια σας" ή μήπως θα πρέπει να θέσει αρχείο αστέρων, αρχείο με αυτό; ΟΜΙΛΗΤΗΣ 1: Θα μπορούσε να κάνει το αρχείο, αστέρι, "Γεια σας." Μπορείτε να αλλάξετε αυτή να ανεξάρτητα από το όνομα που θέλετε. Είναι εντελώς αυθαίρετη τι όνομα είναι. Μπορείτε να το ονομάσετε τίποτα. Ονομάστε αυτό που φέρουν τα μακαρόνια, αν ήθελε. ΚΟΙΝΟ: Τι είναι το "W" σε εισαγωγικά για; ΟΜΙΛΗΤΗΣ 1: Το "W" είναι ακριβώς η κατάσταση. Έτσι γράφουμε σε αυτό το αρχείο. Όλοι καλό; Σαφή; Ναι. ΚΟΙΝΟ: Έτσι, όταν γράφει αυτό αρχείο, όπου εμείς στη συνέχεια να βρει αυτό το αρχείο; ΟΜΙΛΗΤΗΣ 1: Θα είναι στην ίδια κατάλογο που είστε σήμερα. Αν είστε σε το chipset τρία και τρέχετε αυτό, μέσα το chipset σας τρεις φάκελος πρόκειται να είναι Αυτό το αρχείο ονομάζεται "Γεια σας." Cool; Όλοι καλό; Νιώθω σαν να είστε όλοι να πάρει αυτό, το οποίο είναι μεγάλο. ΟΚ. Έτσι, πίσω στο show-- διαφανειών μου Λατρεύω όταν λειτουργούν τα πράγματα. Εντάξει, είναι pointers-- εσείς ενθουσιασμένοι; Δείκτες είναι μεγάλη. Παίρνουν λίγο να τυλίξτε το κεφάλι σας γύρω. Αυτή είναι η δεύτερη χρονιά μου διδασκαλίας δείκτες. Και νομίζω ότι τελικά το πήρα. Έτσι, αν αγωνίζονται, είναι εντάξει. Όπως είπα και πριν, αντλώντας εικόνες βοηθάει πολύ με πράγματα στο CS, όσο και πιστεύω ότι οι άνθρωποι τείνουν να σκέφτονται το OH, είμαστε σε έναν υπολογιστή. Εμείς πρέπει απλά κώδικα. No-- εικόνες σχεδίασης θα σας βοηθήσει πραγματικά. Και θέλω πραγματικά να σας ενθαρρύνω να αξιοποιήσει την πλευρά kindergartner σας και να αναδείξει κραγιόνια ή δείκτες και ισοπαλία. Επειδή αυτό θα σας βοηθήσει. Και αν με δείτε σε ώρες γραφείου, εγώ θα μεταφέρουν γύρω από στοίβες από χαρτί με στυλό αντλώντας τα πράγματα έξω. Έτσι, ιδιαίτερα με pointers-- ζωγραφίσουν. Και είμαι σίγουρος ότι είμαστε πραγματικά πρόκειται να αντλήσει μερικές φωτογραφίες εδώ. Έτσι, εσείς όλα τα πήρε για να δείτε Binky, αυτό το δροσερό πράγμα πλαστελίνης. Και πιστεύουμε ότι είναι πραγματικά αστείο όταν που εκρήγνυται σε ένα σωρό κομμάτια. Είναι κάποια κωμική ανακούφιση για την κατηγορία. Γ [δεν ακούγεται] αυτή η μεγάλη ικανότητα να είναι σε θέση να ελέγχουν τη μνήμη. Και αυτό είναι ένα από τα πράγματα που πραγματικά κάνει μια τέτοια ισχυρή γλώσσα. Αλλά έρχεται με μεγάλη δύναμη μεγάλη ευθύνη. Και τρελά πράγματα μπορούν να συμβούν εάν δεν είστε προσεκτικοί. Έτσι, όταν είστε με τη χρήση δείκτες, θέλετε να κάνετε βεβαιωθείτε ότι μπορείτε πραγματικά να καταλάβετε ακριβώς τι κάνετε. Ας ελπίσουμε ότι η επόμενη λίγο ώρα θα σας βοηθήσει να καταλάβετε πραγματικά δείκτες, πώς να τα χρησιμοποιούν, και πώς να τους χειριστούν. Έτσι memory-- Είμαι βέβαιος ότι έχουμε δει αυτό το διάγραμμα πριν. Έτσι, αυτό είναι μόνο ένα απλό διάγραμμα πώς τα πράγματα θα μπορούσαν να αποθηκευτούν μνήμη. Έτσι, έχετε βασικά αυτά τεράστιες συστοιχίες των μπλοκ ένα byte είναι ό, τι έχουμε here-- ελαφρά προσαυξήσεις κατά ένα κάθε φορά. Αυτό είναι το εξάγωνο [δεν ακούγεται] έτσι μπλοκ οκτώ-bit. Και κάθε μπλοκ συνδέεται με κάποιο δεκαεξαδικό διεύθυνση. Έτσι, αν ποτέ δείτε το 0x, αυτό είναι απλά notating ότι είναι μια διεύθυνση δεκαεξαδικό. Μπορείτε να υποθέσετε ότι αυτό σημαίνει κάποια διεύθυνση στη μνήμη. Μιλάμε για διευθύνσεις μνήμης κάθε φορά που θα δείτε δεκαεξαδικό. Έχουμε ints είναι μεταβλητές, πλωτήρες είναι μεταβλητές που αποθηκεύουν. Έτσι ints κατάστημα ints. Άρματα κατάστημα επιπλέει. Έτσι, έχουμε επίσης δείκτες ότι οι διευθύνσεις μνήμης κατάστημα. Αυτό είναι ένα είδος χαρτογράφησης. Δείκτες είναι αποκλειστικά για διευθύνσεις μνήμης. Έτσι, αυτό είναι σαν τον τύπο σας εκεί. Η συσκευή σας είναι 32-bit, το οποίο σημαίνει ότι η διεύθυνση της μνήμης σας είναι τέσσερα byte. Έτσι, κάθε δείκτης που έχετε Επίσης, πρόκειται να είναι τέσσερα byte. Ή αλλιώς αν είναι τέσσερα bytes, μνήμη είναι τέσσερα bytes. Δείκτες μνήμης κατάστημα. Ως εκ τούτου, είναι τέσσερα byte. Cool-- απλά θέλουν να ενισχύσουν αυτό. Θα πρέπει να πάρετε αυτό το κόμικ τώρα. Δεν ξέρω πόσοι από εσάς είναι xkcd οπαδούς, αλλά αγαπώ xkcd. Είναι μεγάλη. Εντάξει. Έτσι, δημιουργώντας pointers-- όπως είπα, είναι λίγο πολύ ακριβώς όπως οτιδήποτε άλλο. Έχετε έναν τύπο. Έχετε ένα όνομα. Σωστά; Αυτό είναι ό, τι έχουμε εκεί. [? Hex;] αστέρι σημαίνει ότι είναι ένας δείκτης, και στη συνέχεια ό, τι θέλετε να το ονομάσετε. Έτσι, ο τύπος αντιπροσωπεύει ό, τι μπορείτε να αποθηκεύσετε. Εντάξει; Με τον ίδιο τρόπο ότι αν το κάνουμε ints, ξέρουμε ότι την αποθήκευση ενός int εκεί. Με ένα δείκτη, το κατέχει μια διεύθυνση μνήμης. Αλλά τι σημαίνει είναι that-- εδώ είναι όπου ένα σχέδιο πρόκειται να έρθει σε πρακτικό. Έτσι, σε αυτή την περίπτωση, έχουμε μερικά value-- ας πούμε τέσσερα. Τέσσερις είναι σε μία διεύθυνση. Εντάξει; Αυτή η πρώτη εδώ σημαίνει ότι είναι ένας δείκτης 2x. Σωστά; Είναι μερικά δείκτη x. x μπορεί να είναι κάτι, οτιδήποτε. Όποια και αν είναι x is-- έστωχ είναι τέσσερα. Είναι πρόκειται να αποθηκεύσετε το διεύθυνση μνήμης εδώ. Έτσι, int, αστέρι, x-- αυτό είναι κάποια άλλη υποδοχή στο memory-- ποιος ξέρει τι είναι αυτό. Αλλά πρόκειται να αποθηκεύσετε μια διεύθυνση εδώ. Έτσι, αυτό θα ήταν like-- σε αυτή την περίπτωση, οτιδήποτε, αποθηκεύεται στους 0x1-- ό αποθηκεύεται στην διεύθυνση που ο δείκτης μας κατέχει, πρέπει να ταιριάζει με αυτό που έχουμε ορίσει. Έτσι σε 0x1, σε αυτή την περίπτωση, αυτό είναι x. Αυτό μπορεί πάντοτε να είναι μόνο ένα int, ενώ είμαστε χρησιμοποιώντας αυτό. Ομοίως, αν έχουμε άλλο 1ε, ανεξαρτήτως διεύθυνση αποθηκεύεται με μια ομάδα έχει να είναι ίδια char-- πράγμα με z. Κατά τον ίδιο τρόπο, κάθε φορά που προσπαθήσουμε και να κάνουμε intx ισούται με 0,4, πρόκειται να φωνάζω σε σας και να όπως όχι, είπατε ότι ήθελε έναν int. Αυτό υποτίθεται ότι είναι ένας int. Σταματήστε να προσπαθείτε να κάνετε ένα πλωτήρα. Οπότε αφήστε τα πράγματα να είναι αυτό που θέλουν να είναι. Αφήστε τα πράγματα να είναι οι ίδιοι. Τόσο μεγάλο πράγμα είναι απλά ανεξάρτητα από τον τύπο του δείκτη είναι, αυτό είναι το μόνο πράγμα που μπορεί να αποθηκεύσει εκεί. Εντάξει; Με την πρακτική, όπως με την περασμένη εβδομάδα, τα πάντα Φαίνεται πραγματικά το είδος της αφηρημένης. Εμείς πάμε να κάνουμε κάποια πρακτική. Θα πρέπει να έχει περισσότερο νόημα. Έτσι αναφορά και dereferencing-- είναι πραγματικά σημαντικό να πάρετε αυτά τα ίσια. Έχω ακόμα να ανανεώσετε κάθε τώρα και στη συνέχεια. Και είμαι σαν αναμονή, σε ποιον θέλω; Έτσι, το εμπορικό και πραγματικά θα δώσει σας η αναφορά ή η διεύθυνση του. Έτσι, επιστρέφει τη διεύθυνση στην μνήμη του οποίου μεταβλητής αποθηκεύεται. Έτσι, πρόκειται να επιστρέψει στην πραγματικότητα για εσάς ένα δεκαεξαδικό, ενώ εύρεση τιμών που είναι πραγματικά πρόκειται να σας δώσει τα δεδομένα που είναι αποθηκευμένα εκεί. Εντάξει; Έτσι θα πάμε να δούμε ένα παράδειγμα πολύ γρήγορα, ή στην πραγματικότητα μέχρι το επόμενο. ΟΚ. Γι 'αυτό και πρέπει να σκεφτούμε πραγματικά προσεκτικά για αυτό. Έτσι, εδώ έχουμε κάποια ακέραιος x. Πάω να προσπαθήσουμε και να σχεδιάσετε αυτό στο καλύτερο των δυνατοτήτων μου. Έτσι θα πάμε να έχουν αυτήν την υποδοχή x. Και αυτό είναι αποθήκευση πέντε. Η διεύθυνσή του είναι 0x4. Cool; Όλα καλά. Έτσι τώρα έχουμε αυτό το δείκτη. Ήταν εδώ. Και το εμπορικό και μας δίνει η διεύθυνση του κάτι. Έτσι, σε αυτή την περίπτωση, είναι η διεύθυνση του x. Ποια είναι η διεύθυνση του x; 04-- και αυτό το δείκτη είναι σε 0x08. Cool; Έτσι, μπορείτε να σκεφτείτε για αυτό δείκτη, 04, επισημαίνει ακριβώς εδώ. Και όπου και αν ονομάζεται δείκτες γιατί όπως έχουμε περισσότερο σε αυτό, θα πάμε να δούμε επισημαίνοντας τα πράγματα. Και ένα μπλοκ που δείχνουν προς ένα άλλο μπλοκ θα κάνει πολύ πιο λογικό. Έτσι, εδώ είναι δύο. Και τότε έχουμε κάποια αντίγραφο, το οποίο είναι what-- 0x0C. Και πρόκειται να dereference δείκτη μας. Έτσι, αυτό που λέει είναι Εντάξει, εδώ είναι δείκτης μας. Η αξία που αποθηκεύει είναι 0x04, Και τι αυτό λέει είναι να πάει σε αυτή τη διεύθυνση και να μου πείτε τι σημαίνει αυτό. Έτσι ώστε να είναι αποτελεσματικά τι είναι αυτό το βέλος κάνει. Μπορείτε να σκεφτείτε αυτό σαν αστέρι σας. Έτσι, εντάξει, όταν κάνουμε αστέρι, αυτό σημαίνει ακολουθήσουν. Πηγαίνετε σε αυτή τη διεύθυνση. Και αυτό είναι βασικά ακριβώς παρακάτω Αυτό το βέλος σε αυτό το κομμάτι της μνήμης. Και να μας δώσει ό, τι είναι σε αυτό, το οποίο είναι 5. Είναι γιατί το δικό μας αντίγραφο είναι ίσο με 5. Μήπως αυτό έχει νόημα; Μήπως κάποιος πρέπει να πάω μέσα ότι και πάλι, ή πιο αργά; Θα ήθελα να πάω μέσα από αυτό για μια ακόμη φορά; ΟΚ. Εμείς πάμε για να επανασχεδιάσει και πάλι. Όταν αρχίσουμε, συμφωνούμε όλοι έχουμε κάποια κομμάτι της μνήμης που είναι μια μεταβλητή x που θέτουμε ίση με 5. Εμείς δεν ελέγχει τις περιοχές όπου είναι στη μνήμη. Έτσι, αυτό το σημείο είναι ακριβώς αυθαίρετα. Καλή εκεί; ΟΚ. Στη συνέχεια, έχουμε προετοιμάσει ένα δείκτη σε int. Αυτός είναι ο λόγος που επιτρέπεται να επισημάνω x, επειδή έχουμε έναν int εδώ. Έχουμε ένα άλλο κομμάτι της μνήμη, διότι αυτό το δείκτη είναι μια μεταβλητή ακριβώς όπως και οτιδήποτε άλλο. Είναι αυθαίρετα κάποια χώρου στη μνήμη. Και αυτό που αποθηκεύει είναι η διεύθυνση του x. Ampersand σημαίνει ότι η διεύθυνση του x. Έτσι ποια είναι η διεύθυνση του x; ΚΟΙΝΟ: Είναι zero-- ΟΜΙΛΗΤΗΣ 1: 0x04. Έτσι then-- τελευταίο. Έχουμε και πάλι κάποια copy-- ακριβώς μια άλλη μεταβλητή. Οπότε ας αναθέσει κάποια αυθαίρετη θέση. Και εμείς dereference δείκτη μας. Το αστέρι σημαίνει ότι πάει για το διευθύνσεων που είναι αποθηκευμένα στο δείκτη μου. Πες μου τι είναι εκεί. Έτσι, η διεύθυνση αποθηκεύεται στο δείκτη μας είναι 0x04. Έτσι, πάμε σε αυτή τη διεύθυνση. Είναι δείχνοντας σε αυτή τη διεύθυνση. Τι είναι μέσα σε αυτό το μπλοκ μνήμης; Είναι ένα πέντε. Έτσι, αυτό είναι ό, τι έχουμε εκχωρήσει αντίγραφο μας. Όλοι καλό; Cool. Again-- εικόνες. Έτσι, η παρακολούθηση των τιμών here-- είμαι πρόκειται να αφήσει εσείς σκεφτείτε αυτό. Μπορούμε να συντάξει μια άλλη εικόνα. Θέλω, όμως, να δοκιμάσετε και το λόγο μέσα από αυτό για τη δική σας για ένα λεπτό. Δεδομένου ότι δεν δίνουν μας μια διεύθυνση παράδειγμα, Είμαι ακριβώς πρόκειται να κάνει εμπορικό και x-- το οποίο θα πρέπει να βοηθήσει να προωθηθεί το σπίτι. Ampersand σημαίνει διεύθυνση. Έτσι, στην πρώτη, ο καθένας πάει με την πρώτη γραμμή. Μερικά x σετ για five-- κάποια τυχαία υποδοχή στη μνήμη. Int αστέρων δείκτη είναι ίση στη διεύθυνση του x, σωστά; Int δείκτη αστέρι δημιουργεί Αυτό το μπλοκ, καλεί το δείκτη, και αναθέτει στην διεύθυνση του x. Είμαι τρομερά σε συμπλεκτικά σύμβολα. Τώρα, αυτό που κάνουμε είναι να πούμε Εντάξει, dereference δείκτη μας. Έτσι πάμε Εντάξει, τι είναι στο δείκτη μας; Είναι σύμβολο και x. Πηγαίνετε στο εμπορικό και το Χ και τον επαναπροσδιορισμό αυτό. Μέχρι τώρα, σύμβολο X θα είναι 35. Έτσι, βασικά, όταν είστε εύρεση τιμών, πηγαίνετε στο OK. Θα πάμε να την κατάρτιση εικόνες όπως αυτή. Θα πάμε να την κατάρτιση βέλη σας για το πού είναι. Έτσι, πηγαίνω σε αυτήν την υποδοχή στη μνήμη και είτε να μου δώσει ότι πίσω αξία, ή να την τροποποιήσει. Σε αυτήν την περίπτωση, επειδή είμαστε σε αυτό τιμή, είμαστε το εκχώρηση να είναι 35. Ενώ στην τελευταία ένα, αν παρατηρήσετε, θα είχαν την ανάθεση ό, τι ήταν εδώ σε κάτι άλλο. Έτσι, έχουν αυτό το φοβερό πίνακα. Δεν είναι τόσο άσχημα. Εσείς εργάζονται σε αυτό. Πάω να το σύρει έξω στο διοικητικό συμβούλιο. Εμείς πάμε για να το συμπληρώσετε μαζί, εντάξει; Έτσι αρπάξτε κάποιο χαρτί, πιάσε εταίρος, αρχίσουν να εργάζονται. Πάω να πάρει ένα μεγαλύτερο κομμάτι της κιμωλίας. Επειδή πρόκειται να είναι πολλά. ΟΚ. ΚΑΘΗΓΗΤΗΣ: Εντάξει. Ας ξεκινήσουμε με την πρώτη σειρά. Θα ξεκινήσουμε από εκεί, τότε εσείς μπορεί ίσως να λειτουργήσει μέσω κάποιου περισσότερο. ΟΚ. α ισούται β φορές γ ναι, ποια είναι; Δεν είναι μια ερώτηση τεχνάσματος, το υπόσχομαι. Φοιτητής: 4 φορές 5. ΚΑΘΗΓΗΤΗΣ: 4 φορές 5. 20. Έτσι τι είναι β; Φοιτητής: 4. ΚΑΘΗΓΗΤΗΣ: Και γ; Φοιτητής: 5. ΚΑΘΗΓΗΤΗΣ: 5. Και τότε αυτό είναι ακριβώς πρόκειται να να Ampersand ένα, σύμβολο β, ampersand C, σωστά; Δεν είναι κακό. Είναι αρκετά απλό. ΟΚ. Έτσι, το επόμενο. Α ισούται με μια φορές c, στην περίπτωση κάποιος ήταν εξοικειωμένοι με αυτό. Είναι όλοι εξοικειωμένοι με τους χρόνους ισούται; Εντάξει, όλα αυτά means-- αυτό είναι συντομογραφία για το α ισούται φορές γ. Μπορείτε επίσης να το κάνετε με διαίρεση, με την προσθήκη, με αφαίρεση. Μπορείτε να κάνετε το α ισούται με, ή ένα συν ισούται με c σημαίνει το α ισούται με ένα συν C, ένα μείον ίση γ θα ήταν το α ισούται με ένα μείον γ. Είναι απλά συντακτική ζάχαρη. Έτσι, στην περίπτωση αυτή, το α είναι ίσο με φορές c θα μας δώσει ό, τι; Και πάλι, δεν είναι μια ερώτηση παγίδα. Φοιτητής: 100. ΚΑΘΗΓΗΤΗΣ: 100. Μήπως κάτι άλλο να αλλάξει; Όχι. Ίσως τελικά θα πάρει καλύτερα σε συμπλεκτικά σύμβολα μου. Φοιτητής: Εντάξει, συγγνώμη, πώς το βρήκες 100; ΚΑΘΗΓΗΤΗΣ: Εντάξει. Έτσι, το α είναι ίσο με ένα c φορές, έτσι ώστε ένα χρόνοι C. Φοιτητής: Ω, είστε με τη χρήση α για την previous-- ΚΑΘΗΓΗΤΗΣ: Ναι. Έτσι, αυτές είναι οι πιο πρόσφατες τιμές μας. Αυτά είναι ό, τι πρέπει να είναι χρήση καθώς προχωράμε προς τα κάτω, ΟΚ. Έτσι, b είναι το μόνο πράγμα που αλλάζει, σωστά; Οπότε ας συμπληρώσετε ό, τι άλλο. Β Τι είναι β πρόκειται να είναι; Για να είναι ή να μην είναι. Λοιπόν, τι είναι αυτό που κάνει; Τι είναι το αστέρι pa κάνει; Φοιτητής: Κωδικός στη θέση του PA. Φοιτητής: Όχι, δεν είναι αρκετά. Έτσι, αυτό είναι ένα δ αναφοράς. Φοιτητής: Έτσι β παραδίδεται αξία της ετησίως. ΚΑΘΗΓΗΤΗΣ: Ναι, έτσι είναι pa η διεύθυνση του ένα, σωστά; Έτσι λέει να πάει εκεί όπου το α είναι αποθηκεύονται και να του δώσετε αυτή την τιμή. Έτσι τι είναι β; Φοιτητής: 100. ΚΑΘΗΓΗΤΗΣ: 100. Τέλεια. Εντάξει, έτσι PC είναι αυτό που αλλάζει. Όλα τα άλλα παραμένει το ίδιο. Τι είναι το PC θα είναι; Απλή ανάθεση. Pc είναι ίση με PA, και τι είναι pa; Φοιτητής: Ampersand ένα. ΚΑΘΗΓΗΤΗΣ: Τέλεια. Τώρα παίρνουμε ενδιαφέρουσα. Εντάξει, ας σπάσει αυτό το ένα κάτω. Κατ 'αρχάς, τι είναι β φορές γ, γιατί αυτό είναι το εύκολο μέρος του αυτό, σωστά; Φορές Β γ is-- Φοιτητής: 500. ΚΑΘΗΓΗΤΗΣ: Ναι, έτσι τι είναι αυτό που κάνει, Αν είναι PB αστέρων, τι αλλάζει; Φοιτητής: Τι the-- ΚΑΘΗΓΗΤΗΣ: Τι είναι το β; Φοιτητής: Τι στο χώρο ότι ο Pb δείχνοντας. ΚΑΘΗΓΗΤΗΣ: Και PB είναι στραμμένη to-- ΜΑΘΗΤΗ: Β ΚΑΘΗΓΗΤΗΣ: B. Έτσι, το μόνο πράγμα που αλλάζει είναι b, δεξιά. Έτσι, β φορές c, 500. Έτσι, αυτό είναι ό, τι αλλάζει τώρα. Cool. Υπέροχο. Είστε παιδιά κάνουν μεγάλη. Εντάξει, σπάζοντας αυτό το ένα κάτω. C αλλάζει, σωστά; Έτσι, μπορούμε να γεμίσουμε και σε οτιδήποτε άλλο. Ας δούμε. ΟΚ. Γνωρίζουμε ότι ο C είναι πρόκειται να είναι η γινόμενο δύο αριθμών, σωστά; Ποιοι είναι οι δυο αριθμοί, όμως; ΜΑΘΗΤΗ: Α και C; ΚΑΘΗΓΗΤΗΣ: Έτσι, ένα είναι δικαίωμα για την πρώτη. Έτσι είμαστε d αναφορά σ του ένα, σωστά; Ρ ενός σημεία για ένα, έτσι ξέρουμε ότι Αυτό πρόκειται να είναι 100 φορές μεγαλύτερο από αυτό; Times τι κάνει το σημείο pc με; Σημεία με ένα. Έτσι 100 φορές 100 είναι 10.000. Μήπως αυτό έχει νόημα; Cool. Αρχική τέντωμα, παιδιά, τελευταία σειρά. ΟΚ. Τι αλλάζει εδώ; ΜΑΘΗΤΗ: Α ΚΑΘΗΓΗΤΗΣ: Α Τέλεια, έτσι ό, τι άλλο μπορεί να παραμείνει το ίδιο. ΟΚ. Και τι είναι; Έτσι είναι μια στιγμή τι; Αυτό είναι pb αστέρων. Έτσι PB αστέρι σημαίνει εδώ PB, Pb σημεία να b. Φοιτητής: 500. ΚΑΘΗΓΗΤΗΣ: 500. Έτσι έχουμε 500 φορές 100. Αυτό είναι 50.000. Μπά! Κοίτα αυτό. Φοιτητής: Γιατί έχουμε ο & γ για την last-- ΚΑΘΗΓΗΤΗΣ: Συγγνώμη. Φοιτητής: Ω, εντάξει. ΚΑΘΗΓΗΤΗΣ: κακή μου. Πολλά γραφής. Όλοι καλό; Δεν είναι πάρα πολύ κακό, σωστά; Απλά χρειάζεται λίγο ενώ για να λειτουργήσει μέσα. Αν το σπάσει, καταλάβετε τι κάθε τμήμα αναφέρεται ως to-- με ό, τι είναι, yes-- το σπάσει στο μικρό προβλήματα και στη συνέχεια ανασυνδυάζονται, και μπορείτε να κάνετε μερικά τρομερά πράγματα. Υπάρχουν οι απαντήσεις, αλλά το κάναμε αυτό. Δείκτης αριθμητικής. Αχ. Τα χέρια μου είναι όλα αλευρώδη. Έτσι, προσθέτοντας ή αφαιρώντας int προσαρμόζει το δείκτη από το μέγεθος του τύπου του δείκτη. Θυμηθείτε πως κάθε τύπου έχει διαφορετικό μέγεθος; Έτσι, όπως ένα διπλό ή ένα μακρύ καιρό είναι οκτώ και int είναι τέσσερις, αλλά char είναι ένα. Έτσι, ό, τι θέλετε να κάνετε is-- ένα πράγμα που πρέπει να θυμάστε είναι ακριβώς ότι το πόσο σας τιμή δείκτη στην πραγματικότητα αλλάζει θα εξαρτηθεί από την τύπος του δείκτη είναι. Όλοι καλό με αυτό; Μπορώ να το διαγράψετε; Είμαστε καλά; Awesome. Έτσι, αν έχουμε κάποια δείκτη that-- αυτό πρόκειται να be-- είμαι πρόκειται να είναι ένας δείκτης int κάνουν. Αποθηκεύει αυτό. Αν ήταν να πω δείκτη συν ένα, τι πρόκειται να κάνουμε είναι ότι πρόκειται για την ενημέρωση αυτό από το μέγεθος ενός int γιατί αυτό είναι το τύπος του δείκτη είναι. Με C, τα πάντα είναι πολύ αυστηρή και οργανωμένη. Ο δείκτης int πρόκειται να ενημερωθεί από το ποσό του χώρου ένας int θα λάβουν. Ένας int είναι τέσσερα byte. Λοιπόν, τι θα ήταν αυτό να μετατραπεί σε? Είσαι απλά προσθέτοντας τέσσερις σε αυτό. Τώρα το δείκτη σας θα be-- ΟΚ. Έτσι, αν ήταν μια χαρα και κάναμε δείκτη συν ένα, ποιο θα ήταν αυτό τώρα; Αν started-- προσποιείται εμείς started-- αυτή τη στιγμή είναι 0x08. Ας πούμε τώρα ότι αυτό ήταν ένα char δείκτη, και προσθέσαμε ένα. Τι θα αλλάξει στην; Πόσα bytes είναι μια χαρα; ΚΟΙΝΟ: Ένα. ΟΜΙΛΗΤΗΣ 1: Ένα. ΚΟΙΝΟ: Έτσι 0x09. ΟΜΙΛΗΤΗΣ 1: Έτσι θα είναι εννέα. Έτσι απλά κάτι για να θυμόμαστε. Απλά, όταν προσθέτετε ένα, δεν είναι προσθέτοντας ένα εκτός αν είναι μια χαρα. Είναι προσθέτοντας πόσες bytes τον τύπο που είναι, η οποία είναι ο λόγος που έχουμε Αυτή η εξίσωση μέχρι εδώ. Έτσι είναι int φορές το μέγεθος του τύπου του δείκτη. Έτσι, έχουμε το παράδειγμα εδώ. y ανατέθηκε σε αυτή την τιμή, 0x4, όταν κάναμε y συν ισούται με ένα. Τι σημαίνει αυτό, τι είναι στο x, δεν αλλάζει. Τι σημαίνει η αλλαγή είναι αυτό που είναι στην ομάδα. Η διεύθυνση αποθηκεύεται σε y ενημερώθηκε από τέσσερις επειδή υπάρχουν τέσσερα bytes σε int και αυτό είναι ένα δείκτη int. Εντάξει. Έτσι τώρα έχουμε μια άλλη άσκηση. Έτσι, το ερώτημα είναι τι θα εκτυπώσετε. Οποιεσδήποτε ιδέες; ΚΟΙΝΟ: Ο αριθμός των χαρακτήρες ευτυχισμένη γάτα; ΟΜΙΛΗΤΗΣ 1: Ακριβώς. Έτσι, όπως με κορδόνι σας. Μήπως ο καθένας να πάρει αυτό; Θέλουμε να περπατήσετε μέσα από αυτό; Ναι, εντάξει. Έτσι, αυτό που έχουμε here-- μου όπως αυτό τόσο πολύ περισσότερα. Δεν έχω να [Δεν ακούγεται] γελοία. Έτσι έχουμε εγχόρδων μας εδώ, ευτυχισμένη γάτα. Υπέροχο. Έχουμε κάποιο μετρητή που Κρατάμε κομμάτι της. Έτσι έχουμε κάποια char * δείκτη ότι ακριβώς έχει οριστεί ίση με Str. Αυτό που κάνει είναι ότι είναι εκχώρηση κάποιο δείκτη στην αρχή της συμβολοσειράς σας. Επειδή είμαι βέβαιος ότι, όπως αναφέρθηκε στην ομιλία, σας έχω δώσει ρε παιδιά αυτό τύπος δεδομένων που ονομάζεται χορδή. Αλλά πραγματικά χορδές είναι ακριβώς μια σειρά of-- σαν char *. Είναι ένας δείκτης σε ένα μάτσο χαρακτήρες που είναι συνεχόμενα στη μνήμη. Έτσι, αυτό θέτει ακριβώς ίση με οποιαδήποτε συμβολοσειρά είναι που προσδιορίζονται από όπου πρώτος χαρακτήρας του είναι. Έτσι, αυτό είναι ακριβώς ρύθμιση κάποιο σημείο ίση με την αρχή της στοιχειοσειράς. Όλοι καλά εκεί; Cool. Έτσι, αυτό είναι η εύρεση τιμών δείκτη μας. Έτσι είναι πραγματικά πρόκειται να να μας δώσει κάποια αξία εδώ, το κορδόνι μας που μιλάμε. Και λέμε όσο δεν είναι μηδενική τερματισμού. Έτσι συνεχίστε μέχρι να φτάσετε στο τέλος του κορδονιού. Ενημερώστε το δείκτη σας από ένα. Έτσι, r, θα ενημερώσει πραγματικότητα από ένα κάθε χρόνο, επειδή αυτό είναι μια χαρα, το char *. Έτσι, πρόκειται να περάσουν. Πρόκειται να ενημερώσετε. Έτσι, την πρώτη φορά που αυτό τρέχει, πρόκειται να είναι εδώ σε ώρα. Πρόκειται να ενημερώσετε. Θα είναι ένα ένα. Θα είναι ένα ρ, γ, και ούτω καθεξής και ούτω καθεξής. Θα ενημερώσετε μετρητή. Όταν φτάσει στο τέλος της, απλά εκτυπώνει πόσο μακριά έχει πάρει. Ναι. ΚΟΙΝΟ: Έτσι Μετράει ο χώρος ως ένα, σωστά; ΟΚ. ΟΜΙΛΗΤΗΣ 1: Σκεφτείτε έτσι. Είναι ότι ένα question-- ΚΟΙΝΟ: [δεν ακούγεται]. ΟΜΙΛΗΤΗΣ 1: Δεν ανησυχεί. Αυτό το κάνω αυτό. Εντάξει, έτσι ένα πράγμα καταλάβουμε είναι ότι με μια σειρά, μπορείτε επίσης να την αντιμετωπίσουμε ως μια δείκτη επειδή συστοιχίες είναι ακριβώς συνεχείς κηλίδες της μνήμης. Έτσι, μπορείτε να την αντιμετωπίσουμε με τον ίδιο τρόπο. Μπορείτε να τους χειραγωγήσουν με δείκτες, πάρα πολύ. Έτσι, αντί να κάνουμε, σε αυτό το περίπτωση, η ανάλογη πράγμα θα είναι συστοιχία 0 ισούται με 1. Αλλά με τον ίδιο τρόπο ότι ένα string προσδιορίζεται από την έναρξη της όπου πρώτος χαρακτήρας του είναι, μια συστοιχία προσδιορίζεται από όπου το πρώτο στοιχείο του είναι. Επειδή γνωρίζουμε, είμαστε εγγυημένη, ότι αυτά πρόκειται να είναι συνεχής μπλοκ της μνήμης. Αυτό είναι που μας επιτρέπει να το κάνουμε αυτό. Ξέρουμε ότι είναι συνεχής μπλοκ της μνήμης. Έτσι, στην περίπτωση αυτή, με την εύρεση τιμών μόνο συστοιχία, η οποία μας λέει, Εντάξει, πάμε για την έναρξη του σειρά σας, η οποία είναι εδώ. Έτσι, μπορείτε να το ρυθμίσετε ίση με ένα. Και σε αυτή την περίπτωση, ανεξάρτητα από σειρά σας τύπος είναι, όταν μπορείτε να το ενημερώσετε με ένα, ότι είναι ακριβώς όπως την ενημέρωση στο επόμενο δείκτη. Μπορείτε να το κάνετε αυτό, επειδή σας ξέρετε τι είναι στην σειρά σας. Έτσι ξέρει πόσο να ενημερώσετε το δείκτη σας, ποια διεύθυνση να είναι σε τόσο ενημέρωση ότι είστε στην επόμενη υποδοχή. Έτσι, αυτό είναι απλώς ένα διαφορετικό τρόπο της γραφής συστοιχία 0 ισούται με 1, συστοιχία 1 ισούται με 2, συστοιχία βραχίονα 2 ισούται με 3. Είναι απλά ένας άλλος τρόπος για να το σκεφτώ. Επειδή είναι συνεχής μπλοκ στη μνήμη, μπορείτε να ανατρέξετε σε αυτά, είτε από τη συστοιχία notation-- το οποίο εγώ προσωπικά βρείτε easier-- αλλά ίσως θα πρέπει να το χειριστούν αυστηρά από τις διευθύνσεις μνήμης. Και αυτός είναι ο τρόπος που θα το κάνουμε αυτό. Είδος περισσότερο σαν ένα δροσερό πράγμα που θα μπορούσατε να κάνετε έναντι ίσως δεν είναι κάτι είστε στην πραγματικότητα πρόκειται για την εφαρμογή της. Μπορώ να το χρησιμοποιήσω σε 61. Εσείς μάλλον δεν χρειάζεται να ανησυχείτε γι 'αυτό πάρα πολύ. Αλλά αν σας ενδιαφέρει, λαμβάνουν 61 το επόμενο έτος. Είμαστε στα παιδιά τέντωμα στο σπίτι. Ξέρω, είναι μακρά. Δυναμική Μνήμη Allocation-- οπότε γνωρίζουμε ότι μια πράγματα όταν μιλήσαμε κατά τη διάρκεια της πρώτη μας ενότητα μαζί, κοιτάξαμε σε μια συμφωνία ανταλλαγής λειτουργία, όπου ήταν εκτός του πεδίου κύρια λειτουργία μας. Και ήμασταν περνώντας σε αυτές τις τιμές ότι ήταν αποτελεσματικά αντίγραφα. Και μόλις τελειώσει ανταλλαγής εκτέλεσης, μόλις άφησε ένα σωρό. Θυμηθείτε, έχουμε ένα στοίβα πλαίσιο για swap. Αφήνει και εκείνων τιμές αφήσει με αυτό. Και είχαν φύγει. Εμείς δεν μπορούσαμε να κάνουμε τίποτα μαζί τους και ήμασταν λυπημένοι γιατί δεν μπορούμε να ανταλλάξουν τις αξίες μας. Αλλά με C, όπως ανέφερα, σας έχουν πολλή δύναμη πάνω από τη μνήμη. Έτσι τι μπορείτε να κάνετε είναι να μπορείτε να κατανέμουν τα πράγματα στο σωρό εδώ ότι θα μείνουν εκεί μέχρι να τους πω αλλιώς. Είναι σαν καλά παιδιά. Θα μείνουν εκεί. Δεν αφήνουν. Θα μείνουν εκεί μέχρι να είστε όπως, εντάξει, μπορείτε να πάτε μακριά. Εκτιμώντας τα πράγματα στη στοίβα, who-- είναι σαν άτακτα παιδιά. Θα τρέξει μόνο μακριά όταν θέλετε να είναι εκεί και, στη συνέχεια, από όπου και αν πάει. Δεν μπορείτε να τους πάρει πίσω. Έτσι ο σωρός is-- θα πάμε να μιλάμε για malloc και δωρεάν, η οποία Είμαι βέβαιος ότι εσείς ακούσει για το διάλεξη. Και αυτό είναι βασικά ένας τρόπος να έχουν πολύ επίμονη δεδομένα. Έτσι, μπορείτε να κρατήσετε τα δεδομένα γύρω από όσο θέλετε. Mhm. ΚΟΙΝΟ: Μπορείτε να ορίσετε σωρού και στοίβα; Είναι αυτοί που τους αρέσουν τα μέρη για να βάλει τα πράγματα; ΟΜΙΛΗΤΗΣ 1: Έτσι είναι βασικά just-- ότι είναι ο τρόπος αναφερόμαστε μόνο στη μνήμη. Έτσι σωρός είναι απλά τοποθετεί όπου μνήμη κατανέμεται δυναμικά, λαμβάνοντας υπόψη ότι η στοίβα αναφέρεται περισσότερο για να στοιβάξετε τα πλαίσια που είναι πιο κεντρική σημασία για το λειτουργίες που εκτελούνται στην πραγματικότητα. Δεν έχετε πραγματικά τον έλεγχο. Η μεγάλη διαφορά, έχετε τον έλεγχο πάνω από το σωρό, αν θέλετε να. Έχετε λιγότερο έλεγχο πάνω στη στοίβα. Η στοίβα εξαρτάται από το λειτουργίες που εκτελούνται, και η σειρά με την οποία είναι τρέχει, και πώς τα πράγματα επιστρέφονται. Ότι, με το σωρό, όπως Θα δούμε, μπορείτε να πείτε, Εντάξει, θέλω αυτή η τιμή να είναι περίπου μέχρι να σας πω αλλιώς. Δεν επιτρέπεται να απαλλαγούμε από αυτό. Δεν σας επιτρέπεται να το παρακάμψετε. Θα πάμε για να το κρατήσει γύρω για όσο μπορώ να σας πω. Μπορείτε να πάρετε να είναι το αφεντικό στο σωρό, ενώ η stack-- ίσως αν όπως απατώ επιτήδεια το δρόμο σας μπορείτε να είστε το αφεντικό. Αλλά δεν είναι αρκετά. Και είναι πραγματικά ακριβώς τη μνήμη. Είναι απλά διαφορετικούς τρόπους του αναφερόμενος στην μνήμη. Cool. Έτσι, με αυτό, πώς να ελέγχει τη μνήμη σας. Είναι με malloc, η οποία εσείς πρόκειται να πάρετε για να χρησιμοποιήσετε. Έτσι είναι ακριβώς απότομα για την κατανομή της μνήμης. Αυτό είναι όλο. Υπάρχει ένα σωρό άλλα δροσερά λειτουργίες που έχουν alloc στο τέλος, και στέκονται για διαφορετικά πράγματα. Έτσι, όταν χρειάζεστε αποθήκευσης που χρειάζεται να ξεπεράσει την τρέχουσα λειτουργία σας έτσι ότι όταν το ρεύμα σας λειτουργία τρέχει μακριά, έχετε ακόμα τα δεδομένα που πήρε από αυτό, θέλετε να χρησιμοποιήσετε malloc. Αυτό θα γίνει η προετοιμασία για το σωρό. Και όπως είπα και κρατήστε λένε, θα το κρατήσει εκεί μέχρι να το πω αλλιώς, το οποίο είναι το σημαντικό πράγμα εδώ. Έτσι, ένα πράγμα που πρέπει να παρατηρήσετε, και αυτό είναι συνήθως πολύ σημαντικό, είναι ότι αυτό sizeof Είναι εξαιρετικά χρήσιμο να χρησιμοποιήσετε επειδή ανάλογα με τον τύπο της μηχανής τρέχετε, μπορεί να έχει ποικίλες ποσότητες της μνήμης που χρειάζεται. Έτσι, μπορείτε πάντα θέλουν να χρησιμοποιήσουν το μέγεθος του έτσι ότι δεν είσαι μηχανή εξαρτάται, έτσι ώστε ο κωδικός σας θα τρέξει σε οποιοδήποτε μηχάνημα. Και αυτό είναι μόνο μέρος της γραφής καλό κώδικα. Εάν λειτουργεί σε μια μηχανή, αλλά όχι οποιοδήποτε από τα άλλα, πόσο χρήσιμο ήταν το πρόγραμμά σας; Έτσι, θέλετε πάντα να βεβαιωθείτε ότι και να χρησιμοποιήσετε το sizeof. ΚΟΙΝΟ: Έτσι είναι ότι, όπως η μέγεθος 10 ίντσες [δεν ακούγεται]; ΟΜΙΛΗΤΗΣ 1: Αυτό είναι το μέγεθος των 10 ints. ναι. Έτσι, το μέγεθος των ints θα επιστρέψει πόσο κάνει ένα int πάρει. Ή το μέγεθος του char, πώς κοστίζει ένα λάβουν ΧΑΡ. Και τότε πόσα blocks του ότι θέλεις; Έτσι, στην περίπτωση αυτή, θέλουμε κάτι ότι μπορούμε να αποθηκεύσουμε 10 ints να. Και αυτό θα λειτουργήσει ανεξάρτητα του μηχανήματος, το οποίο είναι δροσερό. Πόσα bytes Έτσι θα που πραγματικά σας δίνουν; Γρήγορη μαθηματικά. ΚΟΙΝΟ: 40. ΟΜΙΛΗΤΗΣ 1: 40. Ακριβώς. Έτσι, ένα άλλο μεγάλο πράγμα. Pointer ή malloc μπορεί να επιστρέψει null. Έτσι και πάλι, πάντα να ελέγχετε δείτε αν επιστρέψει null πριν να προσπαθήσετε και να κάνετε τίποτα με αυτό. Αν προσπαθήσετε και dereference Αυτός ο δείκτης τώρα, είναι ακριβώς πρόκειται να segfault γιατί πήγε και προσπάθησε να αγγίξει null όταν δεν θα πρέπει να έχουν. Έτσι, ελέγχετε πάντα για μηδενική. Και πάλι, το μόνο που έχετε να κάνετε. Θα μπορούσε να επιστρέψει null. Θα επιστρέψει null αν είστε είτε εκτός του χώρου, ή για οποιονδήποτε λόγο έτρεξε σε κάποιο σφάλμα μνήμης. Είναι μερικές φορές απλά επιστρέφει null. Έτσι, απλά πρέπει να ελέγξετε για αυτό. Αυτό είναι όλο αυτό το slide λέει. Και τότε αυτό που έχουμε εδώ είναι μια πρόσκληση για να ελευθερώσετε. Έτσι, με τον ίδιο τρόπο που αν να ανοίξετε ένα αρχείο θα πρέπει να κλείσετε ένα αρχείο, αν malloc μνήμης, μπορείτε πρέπει να ελευθερώσετε ότι η μνήμη. Και εσείς θα πάρετε να κάνουν πραγματικά δροσερή ουσία. Και υπάρχει ένα πρόγραμμα που μπορείτε να εκτελέσετε για να δείτε αν είστε ποτέ διαρροή μνήμης. Αλλά δεν θέλετε να διαρρεύσει μνήμη. Είναι πραγματικά κακό. Απλά χάλια τα πράγματα. Είναι κακό να κάνουμε ακριβώς όπως τον προγραμματισμό σοφός για την αποτελεσματικότητα του σχεδιασμού. Αλλά είναι επίσης ακριβώς το είδος κακή για τον υπολογιστή σας. Έτσι απλά δωρεάν πράγματα όταν τους malloc. Εσείς βλέπετε τις συμμετρίες εδώ. Σούπερ απλή. Απλά δωρεάν και, στη συνέχεια, ανεξάρτητα από το δείκτη σας, όποια και αν είναι η ονομασία της δείκτης σας είναι, και θα φροντίσει για την απελευθέρωση για σας. Cool. Τότε έχουμε αυτό. Έτσι, είμαστε ακριβώς πρόκειται να με τα πόδια μέσα από αυτό το πρόγραμμα. Και τότε εσείς κάνει. Έτσι, [δεν ακούγεται] μόλις κύριο. Έτσι έχουμε κάποια int * δείκτη. Έτσι έχουμε ένα δείκτη ότι πρόκειται να κρατήσει ints. Και πόσα ints είναι αυτό πρόκειται να κρατήσει; Μόνο ένα. Μέγεθος ενός int. Ελέγχουμε να δούμε αν δείκτη είναι μηδενική, διότι είναι, θέλουμε να πούμε δεν κάνουν τίποτα. Είναι κακό. Γι 'αυτό και εκτυπώσετε κάποιο σφάλμα από τη μνήμη, τις περισσότερες φορές επιστρέφουν 1, όπως εσείς συνηθίσει. Και τότε έχουμε εδώ, εμείς dereference δείκτη μας. Έτσι, αυτό σημαίνει ότι θα πάμε για να αποθηκεύσετε κάτι στη θέση που μας δόθηκαν. Int * δείκτη, ή malloc, επιστρέφει το διεύθυνση όπου αναιρέσει αυτό μνήμη για εσάς. Έτσι είναι βασικά δίνοντάς σας like-- αν σκεφτείτε ένα μάτσο σπίτια σε μια γειτονιά ότι θέλετε να βάλετε σας έπιπλα, malloc είναι σαν ΟΚ, μπορείτε να πάρετε να πάει στο σπίτι τριών. Και αυτό σας το δίνει διεύθυνση του σπιτιού τρεις. Έτσι αυτή τη στιγμή, αυτό δείκτης αποθηκεύει μια διεύθυνση, αποθηκεύει τη διεύθυνση του σπιτιού σας. * Ptr μέσα, εντάξει, είμαι στο σπίτι μου. Cool. Πρέπει να πάρετε κάποια ακέραιο. Έτσι είστε ζητώντας κάποιον να σας δώσει τα έπιπλα τώρα. Έτσι, μπορείτε να πάρετε κάποια int. Και βάζει στο δείκτη σας όπου αυτό είναι δείχνοντας. Και τότε ακριβώς εκτυπώσεις έξω, έχετε εισέλθει οπουδήποτε. Και πάλι, η αναφορά. Έτσι, αυτό είναι σαν να πήγε σε αυτό αντιμετώπιση και είδατε τι ήταν εκεί. Cool; Και τότε φυσικά θα απελευθερώσει δείκτη μας. Μην ξεχάσετε να ελευθερώσετε το δείκτη σας. Μην ξεχάσετε να ελέγξετε για μηδενική. Μην ξεχάσετε να ελευθερώσετε το δείκτη σας. Έχετε δύο πράγματα που θυμάμαι από αυτό, ή ότι θα πρέπει να θυμάστε. Ναι. ΚΟΙΝΟ: [δεν ακούγεται] πράγματα όπως ότι, το char * s. Πώς έρχονται δεν μπορούμε ποτέ ελευθερώσουν τους; ΟΜΙΛΗΤΗΣ 1: Χμ; ΚΟΙΝΟ: Είναι εκείνοι σαν χορδές; Είπατε χορδές είναι ακριβώς όπως char * s, σωστά; Γιατί λοιπόν να μην έχουμε απελευθερώσει χορδές; ΟΜΙΛΗΤΗΣ 1: Μπορείτε μόνο να δωρεάν, αν είστε mallocing. ΚΟΙΝΟ: Ω, αν είστε mallocing. ΟΜΙΛΗΤΗΣ 1: Έτσι malloc και δωρεάν είναι δύο πράγματα ότι θα πρέπει να έχετε πάντα μαζί. στ ανοιχτά, στ κοντά, δύο πράγματα θα πρέπει να έχετε μαζί. Σε αμφότερες τις περιπτώσεις, ελέγξτε για μηδενική. Ναι. ΚΟΙΝΟ: Έτσι είναι ελεύθερη μόνο επιτρέποντας κάτι άλλο να αποθηκεύονται εκεί μετά Αυτό το πρόγραμμα έχει χρησιμοποιήσει; ΟΜΙΛΗΤΗΣ 1: Είναι απλά λέγοντας, Εντάξει, είμαι γίνει με αυτό. Δεν χρειάζεται να το κρατήσει περίπου. Διαφορετικά, ο υπολογιστής σας θα Ακριβώς όπως και να προσπαθήσουμε και να κρατήσει εκεί. Και τότε θα can't-- τρέχει σε θέματα μνήμης αργότερα. Μπορείτε πάντα να θέλουν να το ελευθερώσει, γιατί λέει ο υπολογιστής σας, εντάξει, είμαι γίνεται με αυτό το σημείο της μνήμης. Μπορείτε να το έχετε πίσω για μένα να χρησιμοποιήσετε αργότερα. Cool; Ναι. ΚΟΙΝΟ: Γι 'αυτό χρησιμοποιείται το% d μόνο επειδή ένα διπλό που έρχεται πίσω, ή γιατί is-- [δεν ακούγεται]. ΚΟΙΝΟ: Μπορείτε να χρησιμοποιήσετε το% i; ΟΜΙΛΗΤΗΣ 1: Μπορείτε να χρησιμοποιήσετε το% i. Όλες οι τελευταίες ερωτήσεις λεπτό; Προχωρήστε. ΚΟΙΝΟ: Έχω μόνο μια γρήγορη ερώτηση. Έτσι, η μεταβλητή ptr, that's-- όπως, με την int * ptr = malloc, ότι είναι απλά λέγοντας ότι είναι δείχνουν προς μια θέση στην memory-- ΟΜΙΛΗΤΗΣ 1: Θέλετε [δεν ακούγεται]; ΚΟΙΝΟ: --that είναι η μέγεθος of-- όχι, δεν πειράζει. Αλλά αυτό είναι ακριβώς που δείχνουν προς μια θέση στην μνήμη που είναι ακριβώς όπως τέσσερα bytes. ΟΜΙΛΗΤΗΣ 1: Δεξιά. Έτσι malloc το μέγεθος του int λέει, Εντάξει, Πάω να πάει να τρέξει, βρείτε τέσσερα bytes της μνήμης για σας. Όταν διαπιστώσει ότι τέσσερις bytes της μνήμης που, σας δίνει υποστηρίξει τη διεύθυνση από όπου ξεκινά, και αυτό είναι που αποθηκεύονται στο δείκτη, ή PTR. Καλή. Εσείς φαίνονται λιγότερο σύγχυση από ό, τι οι περισσότεροι οι άνθρωποι, όταν μιλάω για το δείκτη, έτσι αισθάνομαι πολύ καλά τώρα. Εντάξει. Όπως πάντα, εσείς θα πρέπει να έχουν όλοι πάρει βαθμούς pset2 σας από τώρα. Ξέρω ότι υπήρξαν κάποια ξεχαρβαλωμένος τα πράγματα εκεί που λέει, τύπος δεν είναι έγκυρη ή κάτι τέτοιο. Εάν παίρνετε ότι, το σύνολο των οι βαθμοί σας είναι έγκυρη από την πλευρά μου. Έτσι μπορώ να σας στείλω στιγμιότυπα των βαθμών σας. Απλά επιτρέψτε μου να ξέρω, καθώς και αν είστε λείπουν κάθε βαθμών ή κάτι δεν φαίνεται να έχει νόημα. Έλα σε μένα. Έχω πάει σούπερ περήφανοι για σένα παιδιά ήδη, έτσι ώστε να συμβαδίσει. Και έχουν ένα καλό υπόλοιπο της εβδομάδας σας. Είμαι σίγουρος ότι θα δούμε κάποια σας σε ώρες γραφείου.