>> JASON Hirschhorn: Welcome στην τέταρτη εβδομάδα, κάθε μία.
Έχουμε μια γεμάτη εβδομάδα μπροστά μας.
Τη Δευτέρα αυτή την εβδομάδα και την Τετάρτη την περασμένη εβδομάδα, έχετε εισαχθεί στο
δείκτες, και έτσι ελπίζουμε ότι έχει καεί το μυαλό σας, αλλά ελπίζουμε ότι δεν
σας έκανε να είναι πολύ συγκεχυμένη.
Αν έχει, θα πάμε πάνω από ότι σε τμήμα σήμερα, καθώς και πάμε
να κάνουν υποδείξεις.
Εμείς πάμε για να πάει πέρα ​​από τη στοίβα, η οποία έχουμε μιλήσει σε διάλεξη
ήδη, και θα πάμε να υπαινίσσονται πράγματα για να έρθει την Τετάρτη και πέρα
όσον αφορά τη διαχείριση μνήμης.
Και τέλος, θα πάμε να μιλήσουμε λίγο σχετικά με το Stanford Portable Γλώσσα,
που είναι η βιβλιοθήκη εσείς είστε χρησιμοποιώντας αυτή την εβδομάδα για την εφαρμογή της
πρόβλημα που τίθεται.
>> Όπως σας έδειξε όλα την περασμένη εβδομάδα -
Ήθελα να θέσει και πάλι αυτήν τη διαφάνεια, γιατί αυτή είναι μια λίστα με τα
πόρους που είναι διαθέσιμοι να σας CS50.
Αυτές είναι αυτό που δίνετε έξω από το box, και αυτά είναι απίστευτα
σημαντικό για ό, τι η την επόμενη διαφάνεια θα δείξει.
Αλλά πριν φτάσουμε στην επόμενη διαφάνεια, Θέλω να πάω πάνω από αυτά και πάλι.
>> Για κάθε διάλεξη, υπάρχουν σημειώσεις που λαμβάνονται.
Είναι ένα πέψης της διάλεξης, αλλά Έχει, επίσης, της δημιουργίας ενός κώδικα και εξυπηρετικό
συμβουλές και κόλπα.
Έτσι, εάν θέλετε να αναθεωρήσετε διάλεξη - ελπίζουμε ότι δεν έχετε χάσει διάλεξη, αλλά
αν το κάνατε, θα πρέπει να rewatch - αλλά όταν θέλετε να αναθεωρήσετε διάλεξη,
σίγουρα να ελέγξετε έξω εκείνες σημειώσεις διαλέξεων.
Υπάρχει, επίσης, τον πηγαίο κώδικα σε απευθείας σύνδεση από κάθε διάλεξη.
>> cs50.net/shorts είναι σύντομες, 6 έως 12 λεπτά βίντεο.
Εσείς έχετε δει πολλά από αυτά.
Υπάρχουν επίσης τα βίντεο που δεν αναθέτουν σε εσάς, αλλά καλύπτουν θέματα που είναι
καλύπτεται σε διάλεξη σε αυτό το μάθημα.
Έτσι, εάν θέλετε να ανανεώσετε σε εκείνους θέματα, κάνετε check out αυτά τα σορτς.
>> study.cs50.net έχει εναύσματα σε έναν τόνο των θεμάτων.
Έχει βίντεο.
Έχει προβλήματα πρακτικής.
Είναι ένας φανταστικός πόρος.
Ελάτε οποιεσδήποτε ερωτήσεις, αλλά κουίζ επίσης το χρόνο.
>> Ένα ζευγάρι περισσότερους πόρους.
Υπάρχει η εντολή man στο τερματικό που σας δίνει μερικές
πληροφορίες σχετικά με ένα συγκεκριμένο λειτουργία ή εντολή.
Υπάρχει το Google, το αγαπημένο μου πόρο - ένα από τα αγαπημένα μου πόρους.
Το αγαπημένο των πόρων μου είναι η τελευταία, το οποίο θα φτάσουμε σε ένα δευτερόλεπτο.
Υπάρχει cs50.net/discuss.
Αυτό είναι το forum τάξεις μας.
Υπάρχουν ώρες γραφείου Δευτέρα έως Πέμπτη 8:00 έως τις 11:00.
Υπάρχουν επίσης σε απευθείας σύνδεση ώρες γραφείου για φοιτητές επέκτασης.
>> Και τέλος, αν χρειαστείς κάτι, έχετε οποιεσδήποτε απορίες, σχόλια ή
ανησυχίες, έχετε μου στοιχεία επικοινωνίας.
Ελάτε σε επαφή μαζί μου, παρακαλώ.
>> Έτσι όπως υπαινίχθηκε, την επόμενη Τετάρτη, μια εβδομάδα από αύριο, είναι η πρώτη σας
κουίζ, κουίζ μηδενική, γιατί στον υπολογιστή επιστήμη, αρχίζουν να μετρούν από το μηδέν.
Περισσότερες πληροφορίες θα πρέπει να παρέχονται διάλεξη αύριο, και ένα χέρι που θα
να τοποθετηθούν τελικά σε απευθείας σύνδεση με περισσότερους συγκεκριμένες λεπτομέρειες, ιδίως την
θέση του κουίζ μηδέν.
Αλλά θα πραγματοποιηθεί την επόμενη Τετάρτη αντί της διάλεξης.
Δεν υπάρχει καμία διάλεξη την ερχόμενη Δευτέρα επειδή είναι αργία.
>> Το κουίζ θα καλύψει όλα τα υλικά από την εβδομάδα μηδέν έως πέντε την εβδομάδα,
έτσι ώστε μέσα από αυτή την εβδομάδα, μέσω της διάλεξη αύριο.
Υλικό περιλαμβάνει τις διαλέξεις.
Υλικό περιλαμβάνει τμήματα.
Υλικό περιλαμβάνει τα σύνολα πρόβλημα, και ειδικά εκείνοι που αρχίζουν μέρη
του προβλήματος σετ όπου είστε περπάτησε μέσα από κάποιες βασικές πληροφορίες σχετικά με
τι είστε έτοιμος να καλύψει.
Μην κοιτάξετε μέσα από αυτές τις προβληματικές σύνολα.
>> Για να σας βοηθήσουμε με όλα τα κουίζ, το επόμενο Δευτέρα παρόλο που είναι αργία,
το μάθημα θα φιλοξενήσει μια Φυσικά σε επίπεδο συνόδου κριτική.
Βίντεο της συνεδρίασης ανασκόπηση πορεία επίπεδο θα δημοσιεύονται στο διαδίκτυο, αν
δεν είναι σε θέση να το κάνει.
Επιπλέον, την επόμενη Τρίτη στην ενότητα θα πάμε να κάνει έναν τόνο της κουίζ
αναθεώρηση και ελπίζουμε παίζοντας μερικά κίνδυνο, καθώς, αλλά θα πάμε να
να πηγαίνει πέρα ​​από την απάντηση σε όλες σας ερωτήματα, αλλά Πάω να έρθει με
πολλές χρήσιμες ερωτήσεις και τις πληροφορίες που βασίζονται
για 10 χρόνια κουίζ.
Έχω μια αρκετά καλή ιδέα για το τι είναι πρόκειται να εμφανιστούν και πως οι ερωτήσεις είναι
πρόκειται να ζητήσει, έτσι θα πάμε πάνω εκείνες στο τμήμα την επόμενη Τρίτη.
>> Επιπλέον, δεν είχα βάλει αυτήν τη διαφάνεια την περασμένη εβδομάδα, αλλά αυτό είναι κάτι που
έκανε την περασμένη εβδομάδα.
Αυτό είναι το πώς θα προσεγγίσει πολύ από τα προβλήματα κωδικοποίησης κάναμε.
Ήθελα να αποστάξει την προσέγγισή μας σε μερικά απλά βήματα που μπορούν να βοηθήσουν
σας με την επίλυση ενός προβλήματος κωδικοποίησης.
>> Θυμηθείτε την περασμένη εβδομάδα, κωδικοποιημένη δυαδική αναζήτησης, και το πρώτο πράγμα που κάναμε
όταν θέλαμε να κωδικοποιήσει δυαδική αναζήτηση είναι σκεφτόμασταν σε μας
επικεφαλής πώς λειτούργησε.
Εμείς δεν τραβάει μια εικόνα στην τάξη, αλλά Ζήτησα από όλους να παρακολουθήσουμε τη σύντομη
βίντεο, το οποίο είχε μια εικόνα αναπαράσταση του πώς
δυαδική αναζήτηση εργασίας.
Το πρώτο και θέλαμε πραγματικά να κάνουμε να καταλάβουμε κάτι σχεδιάσετε ένα
εικόνα να κατανοήσει τη λογική του, για να βεβαιωθείτε ότι γνωρίζουμε
πώς λειτουργεί αυτό το πράγμα.
>> Το επόμενο πράγμα που κάνατε στο τμήμα την περασμένη εβδομάδα πήραμε την ψυχική μας
μοντέλο, και το μετατρέψαμε σε κάποια ψευδοκώδικα.
Ψευδοκώδικα, και πάλι, τον προγραμματισμό, όπως σύνταξη στα λόγια, αλλά όχι κώδικα C.
Ούτε καν ειδικά για C. Πήραμε μας ιδέες και πήρε την αγγλική χρησιμοποιήσαμε
για να το εκφράσω, και έγραψε στο κάποιο είδος προγράμματος-αναζητούν τρόπο.
Έτσι, αυτό είναι μόνο η λογική μέρος.
Πήραμε τη φροντίδα της λογικής μας πρώτα.
Χωρίσαμε αυτό το σκληρό προγραμματισμού πρόβλημα σε δύο μέρη, και πήραμε
φροντίδα της λογικής πρώτου μέρους.
>> Και τότε πλησιάσαμε το τμήμα σύνταξης.
Θυμηθείτε αφού συνέταξε η ψευδοκώδικα, διαλέξαμε μέρη του
ψευδοκώδικα που ξέραμε χαρτογραφηθεί επάνω ειδικά στοιχεία στη C. Για παράδειγμα,
για βρόχους, εάν οι συνθήκες, ή μεγαλύτερη ή ίση με φορείς.
Και τέλος, το τελευταίο πράγμα που κάναμε, το τελευταίο πράγμα που κάναμε, ήταν
πραγματικά κωδικοποιήσει αυτό το πρόγραμμα σε C.
>> Εμείς πάμε για να περάσει μέσα από αυτή τη διαδικασία και πάλι σήμερα σε μια σχετικά μεγάλη
κωδικοποίησης πρόβλημα που θα αναλάβει το μεγαλύτερο μέρος του δεύτερου μισού του τμήματος,
αλλά ήθελα να θέσει αυτό το πλαίσιο εδώ για σας παιδιά.
Είναι το πώς έχουμε πλησιάζει προβλήματα στην τάξη, και πόσο μάλλον
έχετε πλησιάζει αυτά τα προβλήματα για τη δική σας έξω από το τμήμα.
Έτσι, Πάω να αφήσουμε αυτό εδώ, και θα αναφερθώ σε αυτό, όταν
είμαστε κωδικοποίησης αργότερα σήμερα και να πάει συστηματικά μέσω αυτών των βημάτων.
>> Τέλος, η ανατροφοδότηση.
Αν έχετε οποιαδήποτε σχόλια για μένα, η ιστοσελίδα είναι στην κορυφή αυτής της διαφάνειας,
sayat.me/cs50.
Δώσε μου κάποια ανατροφοδότηση.
Πήρα μερικές φανταστικές ανατροφοδότηση από τα παιδιά σας την περασμένη εβδομάδα.
Είπατε ότι άρεσε πολύ η pseudocoding και κωδικοποίησης κάναμε.
Επίσης, κάποιος μου έδωσε ένα σύνδεσμο σε μια μελέτη ότι έχει δείξει ότι περιμένει
επτά παρα τρία δευτερόλεπτα μετά ρωτώντας εάν κάποιος έχει ερωτήσεις είναι η βέλτιστη
χρόνο για να περιμένουν.
Έτσι, εάν έχετε τα χρονόμετρα σας έξω, Σήμερα Πάω να προσπαθήσουμε και να περιμένει επτά
δευτερόλεπτα αφού ρωτήσω αν κάποιος έχει οποιεσδήποτε ερωτήσεις πριν από τη μετάβαση.
>> Έτσι, πριν προχωρήσουμε, κάνει κανείς έχετε οποιεσδήποτε ερωτήσεις μέχρι τώρα;
>> Αίθουσα ελέγχου μου έδωσε επτά δευτερόλεπτα.
Εντάξει, κανείς δεν είχε οποιεσδήποτε ερωτήσεις, αλλά διστάσετε να τους ρωτήσετε αν το κάνετε.
>> Κατ 'αρχάς, αυτή την εβδομάδα πρόκειται να καλύψει δείκτες, όπως υπαινίχθηκε κατά τη
ημερήσια διάταξη κατά την έναρξη του μαθήματος.
Δείκτες που έχετε δει στη διάλεξη.
Έχουν πιθανώς λιώσει το μυαλό σας.
Αυτό είναι εντάξει, αυτό είναι ό, τι έχουν κάνει για να εκατοντάδες CS50 φοιτητές πριν από εσάς.
Έτσι, κατά τη διάρκεια των επόμενων 10 έως 30 λεπτά, θα πρόκειται να περάσει μέσα από αυτούς τους δείκτες
σιγά-σιγά και συστηματικά.
Εάν σε οποιοδήποτε σημείο έχετε οποιαδήποτε ερωτήσεις, παρακαλώ με ρωτήστε.
Εγγυώμαι ότι τους συμμαθητές σας σε αυτό το τμήμα και βλέποντας στο σπίτι τους έχουν την
ίδια ακριβώς ερωτήματα.
>> Ας μιλήσουμε γενικά πρώτα, πριν βουτήξει δείκτες, σχετικά με τις μεταβλητές
και τα δεδομένα, που έχουμε έχουν χρησιμοποιήσει πριν.
Πέραν του ότι έχει αυτά τα πράγματα επάνω σε μια διαφάνεια, Πάω
να συντάξει αυτά τα έξω.
>> Όπως λέει αυτή η διαφάνεια, τα δεδομένα στη μνήμη έχει και μια τιμή και μια διεύθυνση, έτσι είμαστε
πρόκειται να αντιπροσωπεύει κάτι στη μνήμη.
Θυμηθείτε την περασμένη εβδομάδα ή όταν έχετε δει συστοιχίες στο στάδιο της επεξεργασίας, γενικά συντάξει
τους ως σειρά από κουτιά, οπότε θα Απλά επιστήσω μία μεταβλητή ως ένα κουτί
κάπου στη μνήμη.
Αυτό το πλαίσιο σε αυτό το παράδειγμα, θα αποκαλούν x, και έχει μια τιμή.
Σε αυτή την περίπτωση, είμαστε αρχικοποίηση η μεταβλητή σε μία τιμή 50.
>> Θα παρατηρήσετε επίσης ότι εκτός από την μόνο η τιμή, η μεταβλητή x έχει
θέση στη μνήμη.
Πράγματι, όπως θα είναι πιθανώς κάπως γνωρίζουν, η μνήμη έχει
πεπερασμένο ποσό των χώρων.
Υπάρχει μόνο τόσα πολλά κουτιά μέσα σας υπολογιστή, όπου μπορείτε να αποθηκεύσετε τα πράγματα.
Και ακόμα καλύτερα, έτσι ώστε να ξέρετε όπου τα πράγματα αποθηκεύονται, κάθε κουτί έχει
συγκεκριμένη διεύθυνση, ένας συγκεκριμένος αριθμός όπου μπορείτε να το βρείτε.
Ακριβώς όπως όλοι οι πρωτοετείς έχουν τους ταχυδρομική διεύθυνση στο Κέντρο Διάδοσης Επιστημών,
Κάθε κουτί έχει στη μνήμη μια συγκεκριμένη διεύθυνση.
Όταν πηγαίνετε σε αυτήν τη διεύθυνση, μπορείτε μπορεί να πάρει ό, τι βρίσκεται εκεί.
>> Πάω να είναι εντελώς αυθαίρετη με η διεύθυνση αυτής της μεταβλητής, αλλά είμαι
πρόκειται να πω η διεύθυνση είναι 123.
Τώρα, εγώ δεν γράφουν μόνο 1-2-3.
Έγραψα 0x123.
Το τμήμα 0x σημαίνει ότι αυτό είναι ένας δεκαεξαδικός αριθμός.
Και δεν πρόκειται να μιλήσω για δεκαεξαδικό πολλά σήμερα, αλλά διαπιστώνουν ότι
όταν αναφερόμαστε σε διευθύνσεις μνήμης, αναφερόμαστε σε αυτά δεκαεξαδικό.
Έτσι, κάθε φορά που μιλώ για μια διεύθυνση, θα βάλω αυτό το 0x, και αυτό είναι
Απλά λέγοντας 123 είναι ένα δεκαεξαδικό αριθμό.
Είναι με βάση το 16.
Δεν είναι στη βάση 10.
>> Πιστεύει κανείς να έχει οποιαδήποτε ερωτήσεις μέχρι τώρα;
>> Τέλεια.
Έτσι, αυτό είναι μια μεταβλητή.
Το έχουμε δει αυτό πριν, αλλά τώρα είμαστε αρχίζουν να πάει κάτω από την κουκούλα και να δούμε
τι πραγματικά συμβαίνει.
>> Έτσι, δείκτες.
Το δροσερό πράγμα για τους pointers είναι ότι σε αντίθεση με μια κανονική μεταβλητή που έχουν
κάποια αξία, κάποια ακέραιος αριθμός, μερικές χαρακτήρα, ίσως μια σειρά από
χαρακτήρες, αν μιλάμε για μια σειρά, η αξία που έχει ένα δείκτη είναι
μια διεύθυνση.
Πάνω στην οθόνη, έχουμε το int x ισούται με 50 που δημιουργήσαμε πριν.
Έχω ήδη καταλήξει σε αυτό το πλαίσιο.
>> Ας υποθέσουμε επίσης να σχεδιάσετε ένα πλαίσιο.
Αυτό πρόκειται να είναι - ω, Θεέ μου.
Χρειαζόμαστε ένα νέο δείκτη.
Δεν είναι πολύ καλύτερα.
>> Αλλά θα πάμε για να καλέσετε αυτό το πλαίσιο - αυτό είναι η μεταβλητή που ονομάζεται δείκτης.
Ο δείκτης έχει επίσης μια διεύθυνση.
Είναι σε μια διαφορετική διεύθυνση.
Είναι μια διαφορετική μεταβλητή.
Δεν πρόκειται να είναι σε κορυφή του πρώτου.
Μπορείτε δεν μπορεί να βάλει δύο πράγματα μέσα από ένα γραμματοκιβώτιο.
Δεν μπορείτε να αντικαταστήσετε το αρχικό ένα, έτσι θα πάμε στο
διαφορετική διεύθυνση εδώ.
Θα δώσει τη διεύθυνση 456.
Αλλά η αξία του δείκτη είναι πρόκειται να είναι μια διεύθυνση, και στην περίπτωση αυτή, πρόκειται
που πρέπει να αντιμετωπιστούν από τη μεταβλητή x.
Έτσι, μέσα στο δείκτη, είμαστε αποθήκευση η διεύθυνση 123.
>> Και η σύνταξη μπορώ να χρησιμοποιήσω για να το γράψω - είμαστε πρόκειται να πάει πέρα ​​από τη σύνταξη της α
δεύτερη, αλλά να ξέρετε ότι η σύνταξη σε αυτό slide είναι η σύνταξη που θα χρησιμοποιήσετε
για να ρυθμίσετε την κατάσταση αυτή μέχρι -
πριν φτάσουμε στο συντακτικό, όμως, θέλω να καταστήσω σαφές σε όλους και
βεβαιωθείτε ότι όλοι καταλαβαίνουν ότι δείκτες, όπως διακρίνεται από μεταβλητές
έχουν μια διεύθυνση ως αξία τους, δεν είναι ακέραιος ή char.
>> So far so good;
>> Σε γενικές γραμμές, επίσης, όταν είμαστε κατάρτιση αυτών τα πράγματα, δεν είμαι απλώς πρόκειται να
επιστήσει την διεύθυνση εδώ.
Πάω να πάρετε ένα βέλος από αυτό box στο άλλο μεταβλητή ότι είναι
δείχνοντας για να δώσει την αίσθηση ότι αν ήταν να δούμε στη διεύθυνση 123, αν
Θα έπρεπε να χρησιμοποιήσετε αυτό το δείκτη για να βρείτε ό, τι είναι επισημαίνοντας, θα έπαιρνα
αυτό το πλαίσιο εδώ.
Θα ήθελα να πάρει τον αριθμό 50.
>> Ναι, ερώτηση;
>> ΦΟΙΤΗΤΗΣ: Αν δείκτης αποθηκεύει μια διεύθυνση, τότε πώς θα επιλέξει συστοιχίες, και int
αστέρι, ή σαν μια χαρα αστέρι, ή οτιδήποτε άλλο;
>> JASON Hirschhorn: Μπορείς επαναλάβετε το μεσαίο τμήμα;
Σε έχασα.
>> ΦΟΙΤΗΤΗΣ: Πώς επιλέγετε τους πίνακες, σαν ένα αστέρι int ή char αστέρι, ή
οτιδήποτε άλλο, εάν πάντα αποθηκεύει μια διεύθυνση;
>> JASON Hirschhorn: Καλή ερώτηση.
Πώς μπορούμε να επιλέξετε αυτό που είναι πραγματικά επισημαίνοντας εάν
αποθηκεύει πάντα μια διεύθυνση;
Αν αντί για δεξιά γραφής int αστέρων εδώ, έγραψα char αστέρι, θα ήταν
επισημαίνοντας -
αυτό είναι αυτό που θα γράψω, αν θέλαμε να επισημάνω ένα χαρακτήρα.
Βαθιά, βαθιά στο μηδέν και κόσμο, η int, char ότι, δεν
πραγματικά έχουν σημασία.
Αλλά από την άποψη της C, δεν θέλουν να είναι αρκετά συγκεκριμένη άποψη της
είδος των πράγμα είστε δείχνοντας.
Στο επίπεδο στο οποίο είμαστε προγραμματισμού, θα πάμε για να γράψει το
είδος των πράγμα είμαστε σε σημείο ακόμα κι αν είναι πάντα ένα
αντιμετωπίσει μέσα σε αυτό το κουτί.
Μήπως έχετε κάποια ερώτηση;
OK.
>> Τώρα θα πάμε να δούμε κάποια σύνταξη για τους δείκτες.
Η πρώτη γραμμή σε αυτή τη διαφάνεια -
int αστέρι, διάστημα, δείκτης -
προετοιμάζει και δημιουργεί -
Δεν προετοιμάζει, μάλλον.
Δεν είναι ίσο με κάτι που, αλλά δημιουργεί αυτό το δείκτη.
Έτσι, από την άποψη του διαγράμματος μου -
ας πάμε σε αυτήν την πλευρά -
ότι η πρώτη γραμμή, int αστέρων δείκτη, δημιουργεί ένα κουτί.
Η θέση αυτή είναι η μεταβλητή δείκτη, και είναι σε μια διεύθυνση.
Θα του δώσει ένα διαφορετικό διεύθυνση, 999.
>> Αυτό είναι το μόνο που κάνει γραμμή.
Το έχουμε δει αυτό πριν.
Αυτό είναι σαν οποιαδήποτε στιγμή, αν ήταν απλά γράψτε int x εκεί, θα κάνουμε
ακριβώς το ίδιο πράγμα, δημιουργούν ένα κουτί που ονομάζεται x.
Σε αυτή την περίπτωση, δίνουμε είναι ένας διαφορετικός τύπος.
Γι 'αυτό δεν πρόκειται να είναι ένα int.
Είναι πρόκειται να είναι ένα αστέρι int, και έτσι ώστε αυτό το πλαίσιο θα είναι λίγο
διαφορετική από ό, τι αν ήταν απλώς να είναι ένα char, για παράδειγμα.
>> Επειδή οι χαρακτήρες, ανάκληση, είναι μόνο ένα byte στη μνήμη.
Οι δείκτες είναι τεσσάρων bytes.
Έτσι, αυτό το πλαίσιο θα κοιτάξουμε λίγο διαφορετικά αν γράψουμε int αστέρι ως
σε αντίθεση με char.
Αλλά εκτός από αυτό, δημιουργούμε ένα box, και είναι σε μια συγκεκριμένη διεύθυνση.
Αυτό είναι το μόνο που κάνει πρώτη γραμμή.
>> Η δεύτερη γραμμή του κώδικα, int x ισούται με 50, δημιουργεί και πάλι ένα άλλο πλαίσιο x σε μια
διαφορετική θέση.
Θα δώσουμε εξάρθρωση 111.
Και αυτό είναι στην πραγματικότητα αρχικοποίηση ο δείκτης πέραν
δημιουργώντας το πλαίσιο.
Βάζουμε 50 μέσα σε αυτό το κουτί.
>> Η τρίτη γραμμή του κώδικα, δείκτη ισούται με τη διεύθυνση x.
Αυτό σημαίνει τελεστής διεύθυνσης ένα πολύ συγκεκριμένο πράγμα.
Κάθε φορά που βάζουμε το εμπορικό μπροστά από το όνομα μιας μεταβλητής, λέμε δώσει
με τη διεύθυνση του εν λόγω μεταβλητή.
Έτσι, όταν γράφω εμπορικό x, που είναι λέγοντας να μου δώσει την διεύθυνση του x, σε
Στην περίπτωση αυτή, 111.
>> Ναι;
>> ΦΟΙΤΗΤΗΣ: Θα ήταν αποδεκτό αν Τυχαίνει να γνωρίζω τη διεύθυνση αυτή
συγκεκριμένη μεταβλητή σε μόλις λένε δείκτη ισούται με 0x111;
>> JASON Hirschhorn: Έτσι, αν γνώριζε ότι Αυτό ήταν στο 111, θα μπορούσατε να γράψετε
δείκτη x ισούται με αυτό το δεκαεξαδικό αριθμό, αλλά δεν μπορώ να δω έναν τρόπο που
δεν θα μάθει ποτέ τι είναι αυτό, έτσι ώστε να είναι Γι 'αυτό χρησιμοποιούμε την εξής σύνταξη.
Αλλά και πάλι, ότι το εμπορικό x, σύμβολο λέει δώσε μου τη διεύθυνση αυτού του
μεταβλητή, και ακριβώς όπως οποιοδήποτε ίση σημάδι κάνει, αυτό είναι ότι η αποθήκευση
αξίας στο εσωτερικό δείκτη.
>> Έτσι, κάθε φορά που θα δείτε αυτό το σύμβολο, ότι αυτό είναι που μου δίνετε τη διεύθυνση του
αυτό το πράγμα.
Εμπορικό x μου δίνει το διεύθυνση του x box.
Και πάλι, αν το κάναμε εμπορικό δείκτη, τι θα πάρω;
>> ΦΟΙΤΗΤΗΣ: Διεύθυνση του δείκτη.
>> JASON Hirschhorn: Η διεύθυνση του δείκτη.
Τι ακριβώς;
>> ΣΠΟΥΔΑΣΤΩΝ: 0x999.
>> JASON Hirschhorn: 999.
Ampersand δείκτης θα δώσει me 999 σε αυτήν την περίπτωση.
Ampersand μπροστά από κάθε μεταβλητή που δίνει το
διεύθυνση του εν λόγω μεταβλητή.
Φυσικά, εγώ δεν ενδιαφέρονται πραγματικά για η διεύθυνση αυτού του δείκτη.
Νοιάζομαι πολύ περισσότερα για το διεύθυνση της μεταβλητής αυτής.
>> Τέλος, το τελευταίο σύμβολο θα πάμε να δούμε είναι στην πραγματικότητα το ίδιο σύμβολο,
ότι αστερίσκο.
Αλλά σε αυτή την τελική γραμμή, είναι χρησιμοποιείται λίγο διαφορετικά.
Παρατηρήστε πως σε αυτήν την τελευταία γραμμή Είναι δίπλα στην μεταβλητή.
Όπως και πριν ήταν δίπλα στον τύπο, ήταν μέρος αυτού του τύπου, δημιουργούμε
Αυτός ο δείκτης ακέραιος τύπος, τώρα το αστέρι σημαίνει κάτι
λίγο διαφορετικό.
Αυτό σημαίνει ότι πάει θεωρεί την κανονική αξία -
int pointer -
θεωρεί την κανονική αξία σε αυτή τη μεταβλητή, όπως μια διεύθυνση, πηγαίνετε σε αυτήν τη διεύθυνση, και
να μου δώσει αυτή την τιμή.
>> Έτσι, το αστέρι σημαίνει, και πάλι, η θεραπεία αξία και ο δείκτης ως μια διεύθυνση, πηγαίνετε στο
ότι η διεύθυνση, και να επιστρέψει αυτή την τιμή.
Στην περίπτωση αυτή, η τιμή αυτή είναι 50, έτσι ώστε η γραμμή αυτή θα printf 50.
Ναι;
>> ΦΟΙΤΗΤΗΣ: Έτσι, αν προσπαθήσαμε να κάνουμε ότι στις κάτι που δεν είχε δηλωθεί ως
δείκτη, όπως και επί του x, και η τιμή είναι 50, Θα το προσπαθήσουμε να πάμε να αντιμετωπίσει 50,
ή θα ήταν απλά να μας δώσει ένα λάθος;
>> JASON Hirschhorn: Αν κάναμε αστέρι x, και προσπάθησε να printf ότι, ό, τι η
compiler θα κάνει, ή ό, τι το πρόγραμμα θα κάνει, όταν έτρεχε, είναι
θα αντιμετωπίσει 50, όπως μια διεύθυνση και να πάει σε αντιμετώπιση αριθμό 50 στο πρόγραμμά σας.
Σε γενικές γραμμές, όταν θα πάμε σε αυτά τυχαίες διευθύνσεις, εσείς δεν πρόκειται να
πηγαίνετε σε μια διεύθυνση όπου κάτι είναι ωραία εκεί.
Θα πάμε για να πάει σε μια πραγματικά κακή αντιμετωπίσει ότι δεν είστε υποτίθεται για να πάει
να, και το πρόγραμμα σας πρόκειται να συντρίψει.
>> Οπότε ναι, έχετε απόλυτο δίκιο.
Θα κάνουμε ακριβώς το ίδιο πράγμα, αλλά όταν προσπαθούμε να πάμε σε διευθύνσεις που έχουμε
δεν έχουν ζητήσει ή δεν έχουμε δηλώνεται, ή που είναι απλώς τυχαία
διευθύνσεις, έχουμε σχεδόν πάντα στο πρόβλημα και κολλάει το πρόγραμμα μας.
>> Μήπως ότι απαντήσω στην ερώτησή σας;
>> ΦΟΙΤΗΤΗΣ: Ναι, υποθέτω Έχω ένα άλλο.
Έτσι, αν κρύο κάνει ακριβώς αυτό και θα μεταβεί στη συγκεκριμένη διεύθυνση, ποια είναι η
σημείο δηλώνοντας ένα δείκτη ως pointer αν θα μπορούσαμε απλά να πούμε ένα δείκτη
ισούται με εμπορικό πράγμα;
Και τότε θα είναι σαν μια ουσιαστική διεύθυνση, και θα μπορούσαμε να πάμε εκεί, σωστά;
>> JASON Hirschhorn: Μπορείς επαναλάβω την ερώτηση;
>> ΦΟΙΤΗΤΗΣ: Γιατί πρέπει να κηρύξει την pointer ως ένα αστέρι int αν θα
εργαστούμε για να δηλώσει ακριβώς όπως σαν ένα τακτική int, γιατί ακόμα θα ήταν
έχουν ένα πράγμα που θα μπορούσε να Στη συνέχεια αναχθούν, σωστά;
>> JASON Hirschhorn: Τότε γιατί είμαστε δηλώνοντας ότι ως αστέρι int και όχι
όχι μόνο σαν ένα ακέραιο και αποθήκευση αυτού του αριθμού σε αυτό;
>> ΦΟΙΤΗΤΗΣ: Ναι.
>> JASON Hirschhorn: Επειδή όταν χρησιμοποιούμε τα πράγματα -
μεγάλο ερώτημα -
όταν χρησιμοποιούμε τα πράγματα, κάθε φορά που χρησιμοποιείτε ένας δείκτης και θα πάμε να
θεραπεία κάτι σαν δείκτες, άλλα Τα πράγματα συμβαίνουν ότι δεν πρόκειται
να πάει στο τώρα ότι βοηθά Εάν το πρόγραμμα γνωρίζει ότι
αυτό το πράγμα είναι ένας δείκτης.
Θα το αντιμετωπίσουμε με διαφορετικό τρόπο σε ορισμένες άλλους τρόπους που έχει σημασία για εμάς,
αλλά πρόκειται να το χρησιμοποιήσετε σαν ένα δείκτη, θα πρέπει να πούμε ότι πάμε να
να χρησιμοποιούν αυτό ως δείκτη.
>> Έτσι ώστε να είναι ουσιαστικά πώς λειτουργούν οι δείκτες.
Δεν είναι πολύ πιο περίπλοκη από ό, τι αυτό, αλλά, δυστυχώς, γίνεται μια
πολύ πιο περίπλοκη, όταν το βάζουμε σε πράξη.
>> Στη συνέχεια, θέλουμε να κάνουμε κάτι πολύ μεγάλο.
Αντί να ρίχνουν μόνο ένα ζευγάρι γραμμές κώδικα σε απευθείας σύνδεση, έβαλα επάνω 4, 5,
6, 7, 8 9, 10 γραμμές κώδικα.
Και παρά την κωδικοποίηση αυτοί έξω από σας υπολογιστή ή την εκτέλεση αυτού του προγράμματος
στον υπολογιστή σας, σας θέλω για να πάρουν ένα φύλλο χαρτί και ένα μολύβι ή ένα
στυλό, και να καταλάβω τι κάθε ένα από οι γραμμές των κωδικών αυτών κάνουν.
Ξεκινήστε με την αριστερή στήλη, που εργάζονται από το πάνω προς τα κάτω, η οποία αρχικοποιεί
υπάρχει πολύ από αυτές τις μεταβλητές, και Στη συνέχεια περνούν κάθε γραμμή κώδικα στο
η δεξιά στήλη και το σχήμα τι συμβαίνει.
Θα δώσω σε όλους τρία λεπτά για να ξεκινήσετε αυτό για τη δική σας, και στη συνέχεια θα
πάει πέρα ​​από αυτό ως ομάδα.
>> Ας ξεκινήσουμε θα πάνω από αυτό ως ομάδα.
Είναι εντάξει, αν δεν έχουν τελειώσει.
Πάω να ξεκινήσω με το αριστερό χέρι πλευρά της στήλης, και στη συνέχεια θα πάω
να καλέσει εσείς εδώ, ο γενναίος σας μεταξύ σας μέχρι εδώ, για να εκτελέσει
μία γραμμή κώδικα στη δεξιά πλευρά η στήλη, και στη συνέχεια θα δουλέψουμε
δρόμο μας μέσα.
>> Έτσι, η πρώτη, η πρώτη γραμμή του κώδικα, int x ισούται με 2 κόμμα y ισούται με 8 κόμμα z
ισούται με 12, δημιουργεί τρεις μεταβλητές.
Έκανα όλα σε μία γραμμή.
Αυτό είναι ένα εύχρηστο σύνταξη για τη δημιουργία πολλαπλές πράγματα της
ίδιο τύπο σε μία γραμμή.
>> Έτσι, έχουμε τρία κουτιά.
Μπορεί ο καθένας να δει αυτά τα τρία, ή ότι είναι πολύ χαμηλή;
OK.
>> Έχουμε x, y, z.
Και στο x, παίρνουμε 2.
Σε y, παίρνουμε 8.
και z, παίρνουμε 12.
Αρκετά πρότυπο μέχρι στιγμής.
>> Στη συνέχεια, δημιουργούμε ένα άλλο πλαίσιο, μια άλλη μεταβλητή.
Αυτό είναι ένα δείκτης int.
Λέγεται δείκτη x.
Θα συντάξει ότι πάνω από εδώ.
>> Και τι αποθήκευση εσωτερικό δείκτη x;
>> ΣΠΟΥΔΑΣΤΩΝ: Η διεύθυνση του x.
>> JASON Hirschhorn: Η διεύθυνση του x.
Σε αυτή την περίπτωση, δεν ξέρω η διεύθυνση του x.
Θα μπορούσε να είναι οτιδήποτε, αλλά Πάω να κάνει κάτι μέχρι τώρα να το κάνει
πιο εύκολο για εμάς.
Θα βάλει Χ σε 111.
Έτσι, αυτό παίρνει 0x111, και θα σας δώσουμε ένα ωραίο βέλος για να δηλώσουν
αυτό είναι που δείχνουν προς x.
>> Επίσης, έχω δείκτη y και ο δείκτης z.
Παίρνουν τιμές.
Θα δώσει σε αυτό 0x222, 0x333.
>> Αυτό είναι το αρχικό setup μας για την αριστερή πλευρά της στήλης.
Δημιουργήσαμε τρεις ακέραιοι, και δημιουργήσαμε τρίποντα.
Μέσα σε κάθε δείκτη, σώζουμε τη διεύθυνση από μία από τις τρεις αρχικές
μεταβλητές που δημιουργήσαμε.
>> Τώρα, στη δεξιά πλευρά της στήλη, είμαστε χρησιμοποιώντας αυτό αστερίσκο
σύμβολο σε ένα αριθμό διαφορετικών τρόπων, δεν είναι όλοι εκ των οποίων είναι να το χρησιμοποιήσετε για να
dereference κάτι ή να πάει με μια συγκεκριμένη διεύθυνση και
επιστρέφει την τιμή εκεί.
>> Μπορεί κάποιος να μου πει ποια είναι η πρώτη γραμμή του κώδικα κάνει;
Κάποιος να σηκώσει το χέρι τους που δεν έχει μιλήσει ακόμη.
Μπορείτε;
>> ΦΟΙΤΗΤΗΣ: Ρυθμίστε z 16.
>> JASON Hirschhorn: Είναι που z 16.
Έτσι, z ισούται με x φορές y.
Σε αυτή την περίπτωση, είναι απλά ο πολλαπλασιασμός κάνουμε.
Έτσι, z ισούται με x φορές y, 2 φορές 8 είναι 16.
Τέλεια.
Έτσι, θα σας ενημερώσουμε αυτό.
z ισούται με 16.
>> Αυτή η δεύτερη γραμμή του κώδικα x χώρου αστέρι ισούται χώρο y.
Τι σημαίνει ότι η γραμμή κώδικα να κάνω;
Jeff.
>> ΦΟΙΤΗΤΗΣ: x ισούται με x φορές y;
>> JASON Hirschhorn: Ακριβώς δεξιά.
Αυτό είναι σημειογραφία στενογραφία για το x ισούται με x φορές y.
Έχετε δει πιθανώς τα πράγματα όπως το x συν ισούται με y;
Αυτό είναι το x ισούται με x συν y.
Στην περίπτωση αυτή, κάνουμε κάτι λίγο διαφορετική, το x ισούται με x φορές y.
>> Τότε τι πρέπει να κάνω για να ενημερώσετε εδώ;
>> ΦΟΙΤΗΤΗΣ: x είναι 16.
>> JASON Hirschhorn: x είναι 16.
>> Αλλαγές στο πράσινο είναι αυτό που έχουμε κάνει μέχρι τώρα.
Στη συνέχεια, έχουμε y ίση αστέρι δείκτη x.
Μπορεί κάποιος με τα πόδια μου μέσα από αυτό αυτή η γραμμή κώδικα κάνει;
Τι σημαίνει αυτή η γραμμή κώδικα να κάνω;
Περπατήστε μέσα μου από την αρχή.
>> ΦΟΙΤΗΤΗΣ: Παίρνει ό, τι δείκτη x είναι επισημαίνοντας, η αξία που είναι να
επισήμανε από αυτό, και το αποθηκεύει στο y.
>> JASON Hirschhorn: Εξαιρετική.
Πάω να επαναλάβω ότι και πάλι.
Κάνατε μια υπέροχη δουλειά, αλλά έτσι μπορούμε τονίσω αυτό, ότι το άστρο σημαίνει θεραπεία
το πράγμα σε αυτή τη μεταβλητή, όπως μια διεύθυνση και να πάει σε αυτό.
Έτσι, αντιμετωπίζουν το πράγμα στο δείκτη x, όπως ένα διεύθυνση, πηγαίνετε σε αυτό, να λάβει αυτήν την τιμή
16, και στη συνέχεια να είμαστε απλά εξοικονόμηση στην μεταβλητή y.
Έτσι τώρα y παίρνει αντικατασταθούν, και τώρα είναι 16.
>> Η επόμενη γραμμή κώδικα, δείκτη αστέρι υπογραμμίζουν x ισούται με x φορές y.
Τι σημαίνει ότι η γραμμή κώδικα να κάνω;
Και πάλι, αν είστε λίγο έχασε εδώ, αξιολογήσουν από δεξιά προς τα αριστερά.
Έτσι Mondo, τι κάνει το σωστό πλευρά της κάνει;
>> ΣΠΟΥΔΑΣΤΩΝ: Η δεξιά πλευρά μόνο πολλαπλασιάζει ό, τι είναι στην
κουτί είναι x και y.
>> JASON Hirschhorn: Και αυτό είναι 16 και 16, οπότε τι είναι αυτό ίσοι;
>> ΣΠΟΥΔΑΣΤΩΝ: 256.
>> JASON Hirschhorn: 256.
Και πού είμαστε εξοικονόμηση 256;
>> ΦΟΙΤΗΤΗΣ: Είσαι το αποθηκεύετε σε ό, τι δείκτη x δείχνει προς,
που είναι το κουτί x.
Έτσι τώρα γίνεται x 256.
>> JASON Hirschhorn: Έτσι, το αστέρι, και πάλι, σημαίνει πάτε.
Εμείς πάμε για ό, τι δείκτη x είναι στραμμένη στο.
Είναι που δείχνουν προς x, και εκεί σώζουμε την τιμή 256.
>> Οποιεσδήποτε ερωτήσεις σχετικά με το συγκεκριμένο ένα;
Δεν έχουμε δει το αστέρι που χρησιμοποιείται για η αριστερή πλευρά, όμως, των
ένας φορέας ανάθεσης.
>> Έτσι, αυτή είναι η τέταρτη γραμμή κώδικα.
Η πέμπτη γραμμή του κώδικα, μπορεί κάποιος να που δεν έχει μιλήσει ακόμα να μου δώσει το
πέμπτη γραμμή του κώδικα, ή με τα πόδια μέσα από αυτό με μένα;
Annie, τι είναι αυτό που κάνει;
>> ΦΟΙΤΗΤΗΣ: Αλλάξτε την τιμή του δείκτη x με την αξία του δείκτη y.
>> JASON Hirschhorn: Αυτό είναι ακριβώς δεξιά.
Η τιμή του δείκτη y είναι αυτή η διεύθυνση εδώ, και είμαστε αποθήκευση ότι
η μεταβλητή δείκτη x.
Έτσι, αυτό γίνεται 222.
Και Πάω να μετακινήσετε το βέλος, πάρα πολύ, για να δηλώσει ότι τώρα
έχει μια διαφορετική διεύθυνση.
>> Έτσι τώρα δείκτης υπογράμμισης x και ο δείκτης υπογράμμισης y
έχουν την ίδια αξία.
Αυτό είναι ό, τι κάνει αυτή τη γραμμή.
Έτσι, ουσιαστικά, είναι τόσο που δείχνουν προς y.
Αν είχαμε μόνο δείκτες μας, και εμείς δεν γνωρίζουν πραγματικά τις μεταβλητές,
Θα έχουν χάσει x.
Αλλά ευτυχώς, έχουμε x σωθεί σε αυτή τη λειτουργία, έτσι ώστε να εξακολουθεί να
ξέρετε όπου x είναι.
Αλλά θα δούμε ότι το πρόβλημα έρχεται αργότερα, ότι αν χάσουμε ένα δείκτη για
κάτι, ίσως να μην γνωρίζουν πραγματικά πού βρίσκεται ή να είναι σε θέση να τον ανακτήσει.
Αλλά αυτό είναι για το μέλλον.
Έτσι, για τώρα, αυτό είναι ακριβώς δεξιά, Annie.
>> Και, τέλος, ότι η τελευταία γραμμή του κώδικα.
Μπορεί κάποιος να μου δώσει ό, τι η τελευταία γραμμή του κώδικα κάνει;
Ναι;
>> ΦΟΙΤΗΤΗΣ: Πολλαπλασιάζει τι είναι δείκτη y, έτσι 16 φορές 16 -
>> JASON Hirschhorn: 16 είναι όχι στο δείκτη y.
>> ΦΟΙΤΗΤΗΣ: Λοιπόν, πηγαίνει σε αυτήν τη διεύθυνση, βρίσκει, και στη συνέχεια πολλαπλασιάζει
ότι με το ίδιο πράγμα - κάνει το ίδιο πράγμα με το δείκτη z, πολλαπλασιάζει
τις αξίες, και τις αποθηκεύει στο x.
>> JASON Hirschhorn: Ακριβώς δεξιά.
Λοιπόν, τι πρέπει να κάνω για να ενημερώσετε;
Τι θα πρέπει να είναι x;
>> ΣΠΟΥΔΑΣΤΩΝ: Η επάνω αριστερή, 256.
>> JASON Hirschhorn: Και τι μπορώ να το αλλάξετε;
Δυστυχώς, εμείς θα πάμε πίσω επάνω.
>> ΦΟΙΤΗΤΗΣ: Θα πρέπει να συνεχίσει να είναι το ίδιο.
>> JASON Hirschhorn: Ναι, στην πραγματικότητα εξακολουθεί να ισούται με 256.
Αλλά αυτό είναι ακριβώς σωστό.
Ας σπάσει αυτό κάτω.
Θα δούμε εδώ, αυτό το πράγμα παρενθέσεις, αστέρι δείκτη y, ότι
αντιμετωπίζει ό, τι είναι στο δείκτη y ως μια διεύθυνση, πηγαίνει στο ότι
διεύθυνση, λαμβάνει το 16.
Έτσι τώρα έχουμε ένα 16, και είμαστε πολλαπλασιάζοντας ότι από το
ίδιο πράγμα σε z.
Πηγαίνοντας σε αυτή τη διεύθυνση, τη λήψη 16.
16 φορές 16 είναι 256, και είμαστε αποθήκευση ότι μέσα από τους x. x συμβαίνει ήδη σε
ίση 256, οπότε δεν είμαστε πρόκειται να κάνουν την αλλαγή.
>> Δεν έχετε αυτό το αρχείο τώρα, αλλά στον πηγαίο κώδικα για αυτό
τμήμα το οποίο θα αναρτηθεί στην ηλεκτρονική διεύθυνση cs50.net/sections, έχω γράψει όλα
από αυτό επάνω, ακριβώς κάναμε.
Και εγώ πραγματικά περιλαμβάνονται κάποια άλλη πληροφορίες εδώ, το οποίο είμαστε
πρόκειται να πάει μέσα σε ένα δευτερόλεπτο.
>> Κάνουμε αυτές τις λειτουργίες, όπως μπορείτε να δείτε ακριβώς εδώ, και στη συνέχεια να εκτυπώσετε το
προκύπτουσα τιμή της ειδικής μεταβλητής ότι έχει αλλάξει.
Αυτός ο κωδικός είναι ήδη γραφτεί.
Πάω να εκτελέσετε αυτόν τον κώδικα.
>> Και τώρα ας περπατήσει μέσω της εξόδου.
Ας αρχίσουμε από την αρχή.
Αξία του x ισούται είναι 2.
Αυτό θα πρέπει να έχει νόημα.
Αυτό ήταν αυτό που αρχικά προετοιμαστεί να.
>> Διεύθυνση του x είναι αυτό το τρελό πράγμα.
Πάλι, βλέπουμε, ωστόσο, ακόμη και αν μοιάζει λίγο τρελό κατά την πρώτη
επιθεώρησης, βλέπουμε ότι 0x εκεί.
Αυτό είναι ένα δεκαεξαδικός αριθμός.
>> Και τότε θα δείτε όλα Αυτό τρελά πράγματα.
Υπάρχει α β και στ, και επίσης C εκεί μέσα.
Κανένα από αυτά είναι κανονικά μηδέν έως εννέα ψηφία, αλλά επειδή δεκαεξαδικό
είναι η βάση 16, που πραγματικά χρειάζεστε ένα ζευγάρι των άλλων συμβόλων
αντιπροσωπεύουν κάθε ψηφίο.
Έτσι και πάλι, εμείς δεν πρόκειται να μιλήσω για δεκαεξαδικό πάρα πολύ, αλλά ξέρω
ότι όταν είστε γραπτώς δεκαεξαδικό αριθμούς, θα δείτε κάτι από το μηδέν
έως 9 συν πράγματα από ένα έως f.
Έτσι, ακόμη κι αν δεν είναι όλα μηδέν μέσω εννέα αριθμούς, αυτό είναι ένα
αριθμός, αυτό είναι μια διεύθυνση.
Και θα μπορούσε να εκφράζεται σε με βάση το 10, αν θέλαμε να.
>> Η τιμή του δείκτη x εδώ είναι Επίσης, ένας δεκαεξαδικός αριθμός, και ό, τι είναι
είναι το ίδιο του;
Τι είναι αυτός ο αριθμός το ίδιο;
>> Διεύθυνση του x, έτσι δεν είναι;
Η γραμμή ακριβώς από πάνω, τα δύο αυτά διευθύνσεις είναι ταυτόσημα, και αυτό είναι
τι περιμένουμε.
Η διεύθυνση του x είναι η αξία του δείκτη στο x.
>> Στη συνέχεια, έχουμε τη διεύθυνση του δείκτη Χ, και ότι είναι,
και πάλι, κάποιο τυχαίο αριθμό.
Αν πρόκειται να το επιθεωρήσει, παρατηρούμε ότι συμμερίζεται πολλά από τα
ίδιους αριθμούς όπως τα άλλα.
Είναι διαφορετικό, αλλά συμμερίζεται πολλοί από τους ίδιους αριθμούς.
Αναπολώ μιλάμε για ρυθμιστικό σφάλματα υπερχείλισης;
Όταν μπορείτε να γράψετε πάνω από τα πράγματα που είναι κοντά σας στη μνήμη, αν πάτε
πέρα από τα όρια ενός πίνακα.
Και πάλι, εμείς δεν πρόκειται να μιλήσω για ότι αυτή τη στιγμή, αλλά για όσους από εσάς
περίεργος, αυτά τα πράγματα είναι πραγματικά πολύ κοντά το ένα στο άλλο.
Αυτά τα κουτιά είναι πολύ κοντά το ένα στο άλλο στη μνήμη.
>> Και τέλος, ο δείκτης x σημεία στην αξία, και φυσικά, είναι 2.
Έκανα αυτό το αστέρι.
Ακολουθήσαμε τη διεύθυνση στο δείκτη χ αρχικά, και αυτό
επέστρεψε την τιμή του x.
>> Τέλος, βλέπουμε ακριβώς αυτό που μόλις έκανε.
Πρώτη z είναι 16, τότε το x είναι 16, τότε y είναι 16.
x γίνεται τελικά 256 εδώ.
Και πάλι, το Χ δεν έχει αλλάξει από την τελευταία γραμμή του κώδικα.
Παραμένει ένα 256.
>> Εάν θέλετε να επαναλάβετε αυτό για τη δική σας για άλλη μια φορά, ή να περάσει μέσα από αυτό, ή
αλλάξετε κάποιες από αυτές τις αξίες πάνω, έχω ήδη γράψει αυτός ο κωδικός.
Μπορείτε να κάνετε τις αλλαγές στον κώδικα και να δούμε πώς οι αλλαγές αυτές στην πραγματικότητα
παίζουν έξω στην πραγματική ζωή.
>> Πριν προχωρήσουμε με δείκτες, κάνει κάποιος έχει απορίες;
>> OK.
Μπορεί ο καθένας να πάρει το ένα χέρι, και βάζουμε στον αέρα, και -
κλείστε τα μάτια σας -
ακουμπήστε το χέρι σας επάνω στον αέρα, όπως ένα γροθιά, και να μου δώσει ένα μπράβο, μπράβο
προς τα κάτω, αντίχειρες μέση, πόσο άνετα είστε με δείκτες μέχρι στιγμής.
Κλείστε τα μάτια σας.
>> OK.
Μπορείτε να βάλετε τα χέρια σας κάτω και ανοίξτε τα μάτια σας.
Σας ευχαριστώ.
>> Εμείς πάμε για να προχωρήσουμε.
Εμείς πάμε για να κρατήσει μιλάμε για δείκτες, αλλά θα πάμε να μιλήσουμε
γι 'αυτούς σε λίγο από ένα διαφορετικό πλαίσιο.
Εμείς πάμε για να μιλήσουμε για πίνακες και δείκτες.
Και να θυμάστε την περασμένη εβδομάδα I ανατίναξε το μυαλό σας;
Μυαλά κάποιου, έφυγαν αυτούς εδώ στο πάτωμα.
Ήμουν πολύ σίγουρος ότι φύσηξε το μυαλό του ατόμου.
Αυτό ήταν ένα κακόγουστο αστείο.
>> [Γέλια]
>> JASON Hirschhorn: Πάω να εργαστούν για αυτό.
Αλλά έτσι κι αλλιώς, χορδές βρήκαμε έξω ήταν συστοιχίες.
Οι πίνακες είναι πραγματικά δείκτες.
>> Τι εννοώ με αυτό;
Λοιπόν, αν δημιουργήσουμε μια σειρά από έξι χαρακτήρες, η οποία αυτή τη γραμμή κώδικα
κάνει ακριβώς εδώ -
char, array, ανοιχτό βραχίονα, έξι, κοντά βραχίονα, τελεία - και πάλι, δημιουργεί ένα
συστοιχία έξι χαρακτήρων.
Γεμίστε το.
>> Έχω μια εικόνα από αυτό ακριβώς εδώ.
Αυτά τα κουτιά, βλέπουμε ότι συμπληρώθηκε με κάποιες χαρακτήρες και η μηδενική
τερματισμού στο τέλος.
Και κάτω, αυτό είναι που θα ήθελα μπορείτε να κατευθύνετε την προσοχή σας.
Το πρώτο κουτί -
το έχουμε κάνει αυτό πριν.
Έχουμε κάνει πραγματικά αυτό σε κάθε πρόβλημα που.
Μπορώ να αναφέρω την πρώτη κουτί αυτή η διάταξη ως στήριγμα array μηδέν.
Έχουμε κάνει ότι ένα εκατομμύριο φορές.
>> Μπορώ πραγματικά να αφορούν το ίδιο κιβώτιο άλλο τρόπο.
Μπορώ να αναφέρονται σε αυτήν ως array αστέρι.
Επειδή η σειρά, αν ήμασταν στην πραγματικότητα να εκτυπώσετε με τι ισούται πίνακας, πίνακας είναι
μια διεύθυνση, και είναι μια διεύθυνση η πρώτη θέση σε αυτόν τον πίνακα.
Έτσι ώστε ο χρήστης αστέρι αντιμετωπίζει ό, τι είναι αποθηκεύονται στον πίνακα, όπως μια διεύθυνση, πηγαίνει στο
ότι η διεύθυνση, και επιστρέφει η αξία εκεί.
Σειρά Star θα επιστρέψει στ ακριβώς όπως βραχίονα σειρά επιστρέφει μηδέν f.
>> Και πάλι, παντού έχουμε γράψει βραχίονα σειρά μηδέν, array αστέρι θα
έχουν κάνει το ίδιο ακριβώς πράγμα.
Στην πραγματικότητα, βραχίονα συστοιχία μηδέν είναι Απλά επίστρωση ζάχαρης μας
τι πραγματικά συνέβη.
Είναι πραγματικά αστέρι πίνακας είναι το πιο σωστό τρόπο, εάν υπάρχει μία σωστή
τρόπο, να σκεφτώ τι είναι πραγματικά συμβαίνει.
>> Έτσι ώστε να είναι όλα ωραία και καλά, αλλά εδώ είναι όπου παίρνει φανταστική.
Πάμε στο δεύτερο χαρακτήρα εδώ, αυτό το μηδέν.
Θα πρέπει να αποτελεί O, αλλά θα δώσει ένα μηδέν.
Είμαστε αναφέρεται ότι πριν, η δεύτερο πλαίσιο σε μια σειρά, όπως array
βραχίονα ένα όποτε έχουμε επαναλαμβάνεται μέσω μιας συστοιχίας.
>> Υπάρχει ένας άλλος τρόπος για να αναφερθώ , και ότι είναι κάτω.
Αυτό το αστέρι, ανοιχτή paren, array συν 1, κλειστά paren.
Έτσι, επειδή οι πίνακες που ορίζονται - αυτά κουτιά είναι όλα το ένα δίπλα στο άλλο
στη μνήμη -
συστοιχία αστέρι πηγαίνει στο πρώτο.
Έτσι, αν πρόκειται να λάβει σειρά που διεύθυνση, προσθέστε 1 σε αυτό, και στη συνέχεια πηγαίνετε στο
ότι η νέα διεύθυνση, που πρόκειται να είναι το πράγμα ακριβώς δίπλα στο
η αρχική διεύθυνση.
>> Ναι;
>> ΦΟΙΤΗΤΗΣ: Έτσι, αν συστοιχία ήταν, αντί είναι χαρακτήρες, θα ήταν ints, στη συνέχεια,
που θα πρέπει να αυξήσουμε κατά 4 κάθε φορά;
>> JASON Hirschhorn: αυτό είναι ένα μεγάλο ερώτημα.
Επιτρέψτε μου να επιστήσω κάτι πρώτα, τότε είμαι πρόκειται να απαντήσω στην ερώτησή σας.
>> Για να σχεδιάσετε αυτό επάνω στην οθόνη πραγματικά γρήγορα, πριν πάρει στο σας
ερώτηση, έχουμε σειρά μας -
και συνεχίζει, αλλά είμαι μόνο πρόκειται να επικεντρωθεί στα πρώτα δυο αυτά.
Στη μνήμη, υπάρχει ένα κουτί ότι δημιουργείται όταν
προετοιμαστεί αυτό το array.
Αυτή είναι η μεταβλητή πίνακα, και είναι μια διεύθυνση.
Είναι, στην πραγματικότητα, η διεύθυνση της το πρώτο πράγμα, το πρώτο κουτί.
Έτσι, η θέση αυτή είναι κάπου.
Αυτά τα έξι κουτιά είναι κάπου αλλού.
>> Όταν κάνουμε στήριγμα συστοιχία μηδέν, είμαστε πρόκειται να πάρει το πρώτο πράγμα εδώ.
Και όταν το κάνουμε συστοιχία αστέρων, θα πάμε για να πάρει ακριβώς το ίδιο πράγμα, η αξία
ότι η σειρά είναι στραμμένη στο.
>> Όταν κάνουμε στήριγμα σειρά 1, θα πάμε για να πάρει το δεύτερο πλαίσιο, αλλά επίσης,
καθώς ο δείκτης βρίσκεται εκτός εκείνων παρενθέσεις, πρώτα θα πάμε για να προσθέσετε
1 σε αυτή τη διεύθυνση, και στη συνέχεια θα πάμε να ακολουθήσει ότι και να μας δώσει την
δεύτερο πλαίσιο.
Και ούτω καθεξής και ούτω καθεξής.
>> Array συν 2 πρόκειται να προσθέσει 2 του παρόντος αντιμετωπίσει εδώ, γιατί και πάλι, διευθύνσεις
είναι απλά αριθμοί αναπαρίστανται ως δεκαεξαδικό, συχνά.
Έτσι, προσθέστε 2 σε αυτό, και να ακολουθήσει ότι με την τρίτο πλαίσιο, η οποία συμβαίνει να είναι, όπως σας
μπορεί να δει, δύο θέσεις μακριά από την πρώτη θέση.
>> Ας ελπίσουμε, ότι κατέστησε λιγότερο σύγχυση όχι μεγαλύτερη σύγχυση.
Αλλά αυτό δεν κάνει περισσότερο σύγχυση;
Και πάλι, είμαι πρόκειται να πάρει για να σας ερώτημα σε ένα δευτερόλεπτο.
Μήπως αυτό να γίνει πιο συγκεχυμένη για κανέναν, ή μήπως κάποιος έχει οποιαδήποτε
ερωτήσεις σχετικά με αυτή την ιδέα από πίνακες ως δείκτες;
>> Fantastic.
Επίσης, θα ήθελα να είναι φανταστική αν είχαν απορίες.
Αλλά κινείται στην ερώτησή σας.
>> Το ερώτημα ήταν ακέραιοι στη μνήμη καταλαμβάνουν τέσσερα bytes, έτσι τέσσερα κουτιά.
Αν σκεφτούμε ένα κουτιά ως ένα byte, ακέραιοι καταλαμβάνουν τέσσερα κουτιά.
>> Έτσι λένε αυτοί είναι ακέραιοι τώρα.
Αυτό είναι ένας πίνακας int εδώ.
Πάω να αποτελούν μερικές τυχαίες διευθύνσεις.
Έτσι, αν αυτό ήταν ένα συστοιχία int, ο πρώτο θα μπορούσε να είναι ένα 10.
Τέσσερα κουτιά της επόμενης κάποιου πάνω, επειδή ακέραιοι αριθμοί είναι τέσσερα κιβώτια μεγάλο.
Είναι να υπάρχουν 10, 11, 12, 13, έτσι Αυτό θα ήταν ένα 14.
Αυτό και μόνο θα ήταν 18.
Αυτός θα ήταν ένας 22, και ούτω καθεξής.
>> Έτσι και πάλι, χαρακτήρες είναι ένα byte.
Είναι ακριβώς δίπλα στο άλλο, έτσι ώστε αυτός ο χάρτης μιλούσαμε
πριν δουλεύει τέλεια.
>> Αλλά μόλις μεγαλώσει η περίπτωση των ακεραίων.
Λοιπόν, αν έχω προσθέσει 1 του παρόντος, θα πάει στο 11.
Θα ήθελα να είναι στη μέση αυτής της int αν ακολούθησε πραγματικά
Συγκεκριμένα, όπως αυτό.
Ήμουν πράγματι θα box με κουτί στη μνήμη.
>> Το δροσερό πράγμα για αυτόν τον τύπο αριθμητικής δεικτών είναι το πρόγραμμα
αρκετά έξυπνος για να ξέρω τι εννοείς.
Όταν είστε προσθέτοντας 1 μνήμη διεύθυνση που δείχνουν προς ένα
ακέραιος, δεν είναι πραγματικά πρόκειται για να προσθέσετε ένα μπλοκ πάνω.
Είναι πρόκειται να προσθέσει τέσσερα μπλοκ πάνω.
Είναι πρόκειται να αναβαθμίσουν τον αριθμό για να αγοράσετε το μέγεθος.
>> Και αυτό πηγαίνει πίσω στο θέμα του Κέρτις, γιατί κάνουμε int αστέρων και όχι
από char αστέρι;
Ήταν ότι η ερώτησή σας;
Κάποιος ρώτησε ότι νωρίτερα, έτσι δεν είναι;
Γιατί κάνουμε int αστέρων και όχι char πρωταγωνιστήσει αν πρόκειται να αντιμετωπίσει κανένα
σημασία τι;
Και αυτό είναι για να μας βοηθήσει με αυτό τον τύπο του δείκτη αριθμητικής.
Αν δηλώνουμε κάτι σαν ένα αστέρι χαρα αλλά είναι πραγματικά περνάει
ακεραίων, όταν προστίθεται 1, θα ήταν μόνο μετακινήσετε ένα παράθυρο πάνω και όχι το
τέσσερα λογικά θα έπρεπε να αναμένουμε να κινηθεί πάνω.
>> Έτσι και πάλι, στο δείκτη αριθμητική, όταν προσπαθούμε να γιατρέψουμε αυτά τα πράγματα, όπως
διευθύνσεις, στη συνέχεια προσθέτοντας ή αφαιρώντας σε αυτούς και στη συνέχεια, μετά τους να
καταλάβω τι συμβαίνει στη μνήμη, ο αριθμός προσθέσουμε σε αυτά παίρνει κλίμακα
από το μέγεθος του τύπου της πράγμα από όπου και αν δείχνουν να.
>> Έτσι, αν είστε που δείχνουν προς ένα ακέραιο -
Ξέρω ότι επαναλαμβάνομαι -
αλλά αν είστε ένας ακέραιος, είστε στην πραγματικότητα πρόκειται να μετακινηθούν τέσσερις
κουτιά πάνω από κάθε φορά.
Αν είστε ένας char, είστε πρόκειται να κινηθεί ένα κουτί.
Αν είναι ένα πολύ μακρύ, το οποίο είναι οκτώ bytes, θα πάμε να μετακινήσετε
οκτώ κουτιά πάνω.
Όποια και αν είναι το μέγεθος της τύπο δεδομένων, ποιος ξέρει;
Δεν έχει τόση σημασία για τους σκοπούς μας.
Το μόνο που πρέπει να γνωρίζουμε είναι στην πραγματικότητα, αυτά τα μαθηματικά εδώ, προσθέτοντας μόλις 1
θα μας πάρουν με το δεύτερο πλαίσιο, ανεξάρτητα από το είδος του πράγματος είναι
ότι το δεύτερο κουτί.
>> Ελπίζω να υπάρχει κάποιο είδος των ερωτήσεων εδώ, διότι αυτό ήταν μια πολύ, και εγώ
δεν θα μπορούσε να κάνει ένα τέλειο δουλειά στο εξηγώντας ότι.
Αλήθεια;
Δεν υπάρχουν ερωτήσεις;
Για το κοινό στο σπίτι - εκεί πάμε.
>> ΦΟΙΤΗΤΗΣ: Εάν επρόκειτο να κάνει μια σειρά σε λειτουργία, και θέλετε να
επιστρέψει αυτό το array σε κάτι άλλο, πώς θα το επιστρέψω;
>> JASON Hirschhorn: Εξαιρετική ερώτηση.
Έτσι, αν θέλετε να κάνετε μια σειρά σε ένα λειτουργία, και στη συνέχεια επιστρέψτε το array -
έτσι θα πούμε ότι θα κάνει μια σειρά σε μια λειτουργία που ονομάζεται από τους κύριους.
Κύρια καλεί αυτή τη λειτουργία, και αυτό λειτουργία δημιουργεί τον πίνακα, τότε
επιστρέφει στο κύριο.
>> Τώρα που έχουμε δει κάτι παρόμοιο με αυτό πριν.
Που το έχουμε δει κάτι παρόμοιο όπου το κύριο δημιουργεί τον πίνακα, και στη συνέχεια
η λειτουργία που χειρίζεται;
Τι έχουμε γράψει πριν ότι το κάνει αυτό;
>> ΦΟΙΤΗΤΗΣ: Διαλογή;
>> JASON Hirschhorn: Διαλογή έχει κάνει αυτό.
Game of 15 έχει επίσης κάνει αυτό.
Κατά τη διαλογή, περάσαμε στη συστοιχία, η άχυρα, και στη συνέχεια να κατατάσσονται σύμφωνα με τη
καταστροφικά ενημέρωση διαφορετικές μέρη σε αυτόν τον πίνακα.
Γι 'αυτό και πήρε την αρχική σειρά μας - θυμηθείτε, μία από τις παραμέτρους για την
διαλογή λειτουργία ήταν σειρά -
>> ΦΟΙΤΗΤΗΣ: Δεν είναι ότι μια παγκόσμια σειρά;
>> JASON Hirschhorn: Σωστά.
Ναι, θα πάμε για να πάρει πίσω εκεί.
Αλλά αν είχε δημιουργηθεί -
ήταν μια παγκόσμια, ή ήταν δημιουργείται στη λειτουργία;
Ας ρίξουμε μια ματιά.
Μπορούμε να απαντήσετε σε αυτό.
>> Φαίνεται σαν να μην είναι μια παγκόσμια σειρά.
Έχει δημιουργηθεί εδώ σε αυτή την γραμμή μια σειρά ακεραίων, και τότε είναι
πέρασε σε λειτουργία ταξινόμησης μας.
Έτσι δεν είναι μια παγκόσμια συστοιχία.
Είναι δημιουργήθηκε στην κεντρική, πέρασε διαλογής λειτουργίας μας.
Διαλογή μας λειτουργία καταστροφικά ενημερώσεις αυτό, και το επιστρέφει.
Όπως μπορούμε να δούμε μέχρι και στην κορυφή, το είδος -
Ω, Θεέ μου, συγνώμη.
>> ΦΟΙΤΗΤΗΣ: Ταξινόμηση επιστρέφει μόνο αν ή δεν το βρήκε;
>> JASON Hirschhorn: Σωστά.
Λυπάμαι.
Ταξινόμηση πραγματικότητα - ας ανοίξουμε το επάνω.
Ταξινόμηση είναι άκυρη.
Ταξινόμηση δεν επιστρέφει τίποτα, γιατί είδους καταστροφικά ενημερώνει η σειρά,
η αρχική διάταξη.
>> Έτσι, αυτό είναι ό, τι έχουμε δει στο παρελθόν, αλλά ερώτησή σας ήταν ό, τι αν το είδος
δημιουργεί στην πραγματικότητα η σειρά;
>> ΦΟΙΤΗΤΗΣ: Ανατρέξτε επιστρέφει το επικαιροποιημένο array, ή κάτι τέτοιο.
>> JASON Hirschhorn: Ένα άλλο πράγμα που θα μπορούσε να γίνει η κύρια ονομάζεται
η λειτουργία.
Εργασίας ότι η λειτουργία του είναι να δημιουργήσει ένα σειρά από κάτι, μια σειρά από
ακέραιοι, και στη συνέχεια επιστρέφουν ότι σειρά που δημιούργησε στο κύριο.
>> Έτσι, όπως έχουμε δει στο παρελθόν, όταν μιλάμε σχετικά με τη στοίβα, η οποία πρόκειται να
μιλάμε για μια λίγο αργότερα σήμερα, μια φορά επιστρέφει λειτουργία, ό, τι ήταν
δημιουργούνται στην εν λόγω λειτουργία, όλοι τις τοπικές μεταβλητές, να πάει μακριά.
Έχουμε δει ότι η ιδέα του πεδίου πριν.
Γι 'αυτό έχουμε δημιουργήσει παγκόσμια μεταβλητές κάποια στιγμή, να ξεφύγουν από αυτό το
πρόβλημα των πραγμάτων πηγαίνει μακριά όταν καθήκοντά τους επιστρέφουν.
>> Τι θα κάνατε σε αυτή την περίπτωση είναι η λειτουργία θα μπορούσε να δημιουργήσει τον πίνακα και όχι ως
μια τοπική μεταβλητή στη στοίβα.
Δεν θα το δημιουργήσει σε ένα διαφορετικό μέρος της μνήμης που επιτρέπει τα πράγματα να είναι
αποθηκευμένες, ακόμη και όταν οι λειτουργίες έχουν επιστρέψει και το πλαίσιο λειτουργίας, ο
στοίβα το πλαίσιο, έχει αφήσει τη στοίβα.
>> Πάω να χρησιμοποιήσετε κάποια ορολογία εδώ.
Δεν πρόκειται να ακούσετε γι 'αυτό μέχρι αύριο, αλλά εκείνη την περιοχή του
μνήμης ονομάζεται ο σωρός, και Δεν θέλω να υπεισέλθω σε αυτό.
Αλλά τι αυτή η λειτουργία θα μπορούσε να κάνει, και πάλι υπεραπλουστεύσω δυνητικά, είναι να δημιουργήσετε
ότι η σειρά σε ένα διαφορετικό χώρο στην μνήμης που πραγματικά μένει εκεί για
εφ 'όσον θέλετε να μείνετε εκεί, και θα περάσει πίσω στο κύριο δείκτης
στην εν λόγω σειρά αποθηκεύονται σε ότι άλλο μέρος της μνήμης.
Γι 'αυτό κάνει μερικά κουτιά κάπου αλλού ότι δεν καταστρέφονται όταν η
συνάρτηση επιστρέφει και περνά πίσω στην κύρια μια διεύθυνση σε αυτό το σύνολο των κιβωτίων.
>> Αυτό είναι πιθανώς δεν είναι επαρκές απαντήσω στην ερώτησή σας, αλλά
ότι θα πρέπει να διερευνηθούν περισσότερο αύριο όταν εσείς μιλήσετε
σχετικά με το σωρό στη διάλεξη.
>> Ας προχωρήσουμε - Ω, Θεέ μου!
Αυτό είναι ένα δελφίνι!
Πώς αξιολάτρευτο είναι αυτό;
Θεέ μου!
Είναι το αγαπημένο μου ζώο, έτσι είναι όντως αξιολάτρευτο.
Έχω τρεις δελφίνι ταριχευμένα ζώα.
Αλλά αρκετά για μένα.
>> Έχετε όλοι τους υπολογιστές σας ανοίγει μπροστά σας.
Εδώ είναι που κωδικοποιεί την αποστολή σας.
Εμείς πάμε για να ξεκινήσει με ψευδοκώδικα, όμως, έτσι δεν παίρνουν πάρα πολύ συγκινημένος.
>> Θα χρειαστεί να γράψετε ένα πρόγραμμα που θα λαμβάνει μία και μόνο μία γραμμή εντολών
επιχείρημα, και αυτός είναι ο αριθμός των δελφινιών να εκπαιδευτεί.
Ότι ο αριθμός θα πρέπει να είναι μεγαλύτερος από 0.
>> Στη συνέχεια θα πάμε να επιτρέψει την εκπαιδευτή να εισάγετε ηλικία για
καθένα από αυτά τα δελφίνια.
Κάθε ηλικία, και πάλι, θα πρέπει να είναι μεγαλύτερη από μηδέν.
Και όλες αυτές οι ηλικίες θα πρέπει να να αποθηκεύονται σε έναν πίνακα.
>> Για να πάρετε μια εποχή, ωστόσο, θα πρέπει να καλέσετε μια συνάρτηση με το ακόλουθο
πρωτότυπο -
int αστέρι, διάστημα, getAge, παρενθέσεις, άκυρη, κοντά παρένθεση, τελεία.
>> Τέλος, θέλω να εκτυπώσετε η ηλικία του παλιότερου δελφίνι.
Έτσι και πάλι, πριν αρχίσετε να γράφετε στο κώδικα, έχουν ένα φύλλο χαρτιού ή έχουν
gedit ανοιχτό, αν θέλετε, και να γράφουν από κάποια ψευδοκώδικα για αυτό.
Σε τρία λεπτά, θα πάμε για να πάει πέρα ​​από το ψευδοκώδικα.
Θα έχετε άλλα τρία λεπτά για να αυτό τον κωδικό, και στη συνέχεια θα πάμε πέρα ​​από την κωδικοποίηση
μαζί.
>> Και αν έχετε οποιαδήποτε απορία, επειδή αυτό δεν είναι σαφές, σηκώστε το χέρι σας και
Θα έρθει γύρω, και είμαι χαρούμενος για να απαντήσω στην ερώτησή σας.
Αλλά για να ξεκινήσετε, πάρτε τρία λεπτά για να γράψετε ψευδοκώδικα για να βεβαιωθείτε ότι έχετε
κατανοήσουν τη λογική αυτού του προβλήματος.
>> Ας ρίξουμε μια μαχαιριά κατά τη pseudocode ως ομάδα.
Πάω να γράψω αυτό στον πίνακα όπως μπορείτε να μου δώσετε το ψευδοκώδικα.
Ποιος θα ήθελε να δώσει Θέλω η πρώτη γραμμή;
Πρώτη γραμμή είναι ίσως το πιο εύκολο, οπότε αν δεν έχετε
Συμμετείχε ακόμα, ξεκινήστε από εδώ.
Ποια είναι η πρώτη γραμμή του ψευδοκώδικα.
>> ΦΟΙΤΗΤΗΣ: Πρώτη γραμμή είναι να ελέγξει για την αριθμό των επιχειρημάτων που παίρνετε.
>> JASON Hirschhorn: Ακριβώς δεξιά.
Ελέγξτε τον αριθμό των επιχειρημάτων, το πρώτο πράγμα που πρέπει να κάνουμε.
Το επόμενο βήμα;
>> ΦΟΙΤΗΤΗΣ: Βεβαιωθείτε ότι η εντολή, η Το πρώτο επιχείρημα, είναι μεγαλύτερη από το 0;
>> JASON Hirschhorn: Ελέγξτε ότι το πρώτο επιχείρημα είναι μεγαλύτερη από 0, ναι.
Επόμενη γραμμή, προχωρήστε.
>> ΦΟΙΤΗΤΗΣ: Τότε μάλλον, θα θέλατε να αποθηκεύσετε το επιχείρημα της γραμμής εντολών σε
μια μεταβλητή, ή θα μπορούσατε απλά προχωρήστε στο επόμενο βήμα.
>> JASON Hirschhorn: Ναι, και πάλι, θα έχουν μια σειρά εδώ, αλλά θέλουμε μια
ακέραιος επειδή είναι ένας αριθμός, έτσι πρέπει να κάνει το
string σε έναν ακέραιο.
>> ΦΟΙΤΗΤΗΣ: x, y.
>> JASON Hirschhorn: Αυτό είναι σωστό.
Έτσι, θα γράψουμε αυτό.
String - ώπα, κοίτα αυτό το δείκτη.
Αυτό είναι το δεύτερο πράγμα που χρειαζόμαστε να κάνει, να λάβει το string και
μετατρέποντάς το σε έναν int.
Ποιο είναι το επόμενο;
>> ΦΟΙΤΗΤΗΣ: Δημιουργήστε μια σειρά από ints με το μέγεθος της πρώτης γραμμής εντολών
επιχείρημα ότι δεν είναι προγραμματισμένο;
>> JASON Hirschhorn: Συγγνώμη;
>> ΦΟΙΤΗΤΗΣ: Απλά δημιουργήσει μια σειρά ακεραίων, και το μέγεθος της εντολής κάνουν
επιχείρημα γραμμή που έχεις.
>> JASON Hirschhorn: Δημιουργία πίνακας μεγέθους -
θα κάνουμε arg, ανεξαρτήτως το επιχείρημα αυτό ήταν.
Εντάξει;
Ποιο είναι το επόμενο;
>> Έτσι έχουμε τον πίνακα, επιτρέπουν ο εκπαιδευτής για να εισάγετε ένα
όριο ηλικίας για κάθε δελφίνι.
Για να πάρετε μια ηλικία, να καλέσετε μια συνάρτηση με την ακόλουθη πρωτότυπο.
Έτσι, έχουμε σειρά μας.
Τι πρέπει να κάνουμε;
>> ΦΟΙΤΗΤΗΣ: Για n δελφίνια;
>> JASON Hirschhorn: OK.
Πάω να γράψω για το καθένα.
Για κάθε δελφίνι, τι Δεν πρέπει να κάνουμε;
Εμπρός;
>> ΦΟΙΤΗΤΗΣ: Καλέστε τη λειτουργία.
>> JASON Hirschhorn: Call η λειτουργία, OK.
>> ΦΟΙΤΗΤΗΣ: Σε pseudocoding, θα πρέπει να έχετε καθορίζουν λειτουργίες όπως σε ένα ξεχωριστό
μπλοκ ψευδοκώδικα;
>> JASON Hirschhorn: Λοιπόν, ναι.
Ας κάνουμε ένα ξεχωριστό κουτί του ψευδοκώδικα εδώ, ψευδοκώδικας για getAge.
Έτσι, αυτή η λειτουργία, για κάθε δελφίνι καλούμε getAge, και
getAge επιστρέφει κάτι.
Έτσι, όταν θα πρέπει να βάλουμε το πράγμα που γυρίζουμε;
Επιστρέφει ένα δείκτη int, έτσι δεν είναι;
Αυτός είναι ο τύπος επιστροφής, σύμφωνα με σε αυτό το πρωτότυπο της συνάρτησης.
Έτσι, όταν είμαστε βάζοντας ότι δείκτη int.
>> ΦΟΙΤΗΤΗΣ: Μέσα στο πίνακα.
>> JASON Hirschhorn: Μέσα στο πίνακα.
Αυτό ακούγεται μεγάλη.
Καλέστε getAge, βάλτε επιστροφή τιμή σε array.
>> Ας παύση getAge για ένα δευτερόλεπτο.
Θα επανέλθω στο θέμα αυτό.
Και εγώ θα σας αφήσει να ξεκινήσετε μου σε αυτό, Μάρκους.
Αλλά έχουμε πάρει κάθε ηλικίας.
Έχουμε τα βάζουμε όλα στη σειρά.
Τι θα κάνουμε στο τέλος;
Πώς μπορούμε να τελειώσουμε κύριο;
Ποιο είναι το τελευταίο πράγμα που πρέπει να κάνουμε;
Alden;
>> ΦΟΙΤΗΤΗΣ: Θα μπορούσαμε να τα ταξινομήσετε, και στη συνέχεια να εκτυπώσετε το μεγαλύτερο εύρημα.
>> JASON Hirschhorn: Θα μπορούσαμε ταξινομήσετε τους, ναι.
Επομένως, πώς θα λύσουμε;
>> ΦΟΙΤΗΤΗΣ: Θα μπορούσε να αρέσει μόνο -
>> JASON Hirschhorn: Χρειαζόμαστε να ταξινομήσετε εδώ, όμως;
>> ΦΟΙΤΗΤΗΣ: Υποθέτω πως όχι.
>> JASON Hirschhorn: OK.
Εσύ το έκανες αυτό πριν.
Ποιο ήταν το πρώτο τρόπο γράψατε αναζήτηση;
>> ΦΟΙΤΗΤΗΣ: Θα μπορούσαμε να ελέγξει κάθε ένας ενάντια στον άλλο ένα.
>> JASON Hirschhorn: Ας το κάνουμε αυτό.
Ας ψάξετε μέσα από κάθε ένα και μόνο να παρακολουθείτε τα παλαιότερα ηλικία.
Αναζήτηση για παλαιότερα, και τότε τι κάνουμε πρέπει να κάνουμε με την παλαιότερη;
>> ΦΟΙΤΗΤΗΣ: Επιστρέψτε.
Εκτυπώστε το έξω, συγγνώμη.
>> JASON Hirschhorn: Εκεί πάμε.
Ακριβώς δεξιά.
Εκτυπώστε παλαιότερα.
>> OK.
Μάρκους;
>> ΦΟΙΤΗΤΗΣ: Παρακολουθήστε το παλαιότερο, όπως μπορείτε να τα προσθέσετε;
>> JASON Hirschhorn: OK, αναζήτηση για παλαιότερα.
Έτσι θα μπορούσαμε να παρακολουθείτε τα παλαιότερα όπως τα προσθέσετε μέχρι εκεί.
Καλέστε getAge, βάλτε τιμή επιστροφής στην σειρά, και στη συνέχεια να δούμε αν αυτό είναι το
τρέχουσα παλαιότερο, ίσως να αποθηκεύσετε το σε μια διαφορετική μεταβλητή;
Αυτό θα μπορούσε να λειτουργήσει, καθώς και.
Αυτό θα μπορούσε να σώσει πραγματικά μας ένα ταξίδι, αλλά αυτό είναι φανταστικό.
Πάω να αφήσουμε αυτό εδώ για τώρα.
Αλλά αν θέλετε να σας το εφαρμογή το κάνουμε αυτό το βήμα
επιπλέον, αυτό θα ήταν μεγάλη.
>> Μάρκους;
Ας το κάνουμε getAge εδώ.
>> ΜΑΡΚΟΣ: OK.
Ζητήστε από το χρήστη για μια εποχή.
>> JASON Hirschhorn: Ρωτήστε ο χρήστης για μια εποχή.
OK.
Μπορεί ο καθένας να δει αυτό;
Πάνω από εδώ;
Εντάξει, να ζητήσει από το χρήστη για μια εποχή.
Συνεχίστε, έχεις αυτό.
>> ΜΑΡΚΟΣ: Υποθέτω ότι εγώ πραγματικά δεν καταλαβαίνω γιατί είναι καλύτερα να επιστρέψει ένα αστέρι από int
απλά μια int, όπως και τότε ακριβώς επιστρέψει την ηλικία για να το αποθηκεύσετε.
>> JASON Hirschhorn: Δεν είναι κατ 'ανάγκην καλύτερα να επιστρέψει.
Αυτό θα μπορούσε να λειτουργήσει εξίσου καλά επιστρέφουν στο, αλλά θέλω να επιστρέψουν int αστέρι.
>> ΜΑΡΚΟΣ: OK.
Πραγματικά, δεν ξέρω τι -
>> JASON Hirschhorn: OK.
Μήπως κάποιος έχει οποιεσδήποτε σκέψεις;
Ζητούμε χρήστη για μια εποχή.
Παίρνουμε έναν ακέραιο.
>> OK.
Έτσι, γιατί δεν σταματάμε εδώ.
Εμείς πάμε για να πάει στο επόμενο βήμα μας η λογική, χάρτης αυτά τα πράγματα για να δούμε,
και τότε εσείς θα κωδικοποιήσει ότι η πρώτη μέρος, και καλά κωδικό όλα αυτά
μαζί, αλλά μια συγκεκριμένη getAge.
Και εμείς θα καταλάβουμε τι συμβαίνει σχετικά με αυτό το αστέρι με int.
>> Αλλά πριν το κάνουμε αυτό, πριν άλμα σε κώδικα C, μπορεί κάποιος να επισημάνω
μερικά πράγματα που βλέπουν σε ψευδοκώδικα μας ότι να ενταχθούν στο κανονικό κωδικό;
Στο C;
Έτσι, κάποια πράγματα σε ψευδοκώδικα, κάποιες λέξεις βλέπετε, κάποια εσοχή σας
Βλέπετε, κάποια πράγματα που σας δίνουν κάποια συμβουλές για το πώς να κώδικα αυτό σε C;
>> ΦΟΙΤΗΤΗΣ: Για την μέθοδο loop.
>> JASON Hirschhorn: Πού;
>> ΣΠΟΥΔΑΣΤΩΝ:. Για "για κάθε" δελφίνι "
>> JASON Hirschhorn: OK.
Εκεί πάμε.
Έχουμε μια θηλιά εκεί.
Τι άλλο;
Κόσμος;
>> ΣΠΟΥΔΑΣΤΩΝ: Η σειρά σε int πράγμα που θα ήταν σε i
>> JASON Hirschhorn: OK.
Έτσι έχουμε δει αυτή τη λειτουργία πριν.
Άλλα πράγματα που βλέπουμε;
>> ΣΠΟΥΔΑΣΤΩΝ: Printf.
>> JASON Hirschhorn: Ακριβώς.
Όχι βέβαια, αλλά ελπίζουμε ότι έχουμε κάποια εξοικείωση τώρα με printf.
Τι άλλο;
Ναι;
>> ΦΟΙΤΗΤΗΣ: Διαβάζοντας μια σειρά είναι απλά δηλώνοντας μια σειρά;
>> JASON Hirschhorn: OK.
Έτσι, το μέγεθος arg.
Αυτό είναι σωστό.
Δεν ξέρω τι να γράψω ότι όπως, αλλά ναι, δηλώνοντας ένα.
Μια άλλη λέξη για τη δημιουργία του.
Οποιαδήποτε άλλα πράγματα που βλέπουμε εδώ;
Δομές ξέρουμε;
Τι γίνεται με αυτή τη γραμμή "αναζήτηση για παλαιότερα; "Τι είδους
δομή θα μπορούσε να χρησιμοποιήσει αυτό;
Alden, μπορείτε να το κάνετε.
>> ΦΟΙΤΗΤΗΣ: Απλά αναζήτηση.
έτσι ακριβώς όπως ένα βρόγχο.
>> JASON Hirschhorn: Ένας βρόχος.
Έτσι, ψάχνουν.
Είστε πιθανώς μιλάμε για γραμμικές αναζήτηση εδώ, άρα μάλλον δεν υπάρχει
απλά χρησιμοποιώντας ένα τυπικό κύκλωμα διέρχεται τα πάντα, αυτός είναι ο λόγος
Curtis πρότεινε ότι θα μπορούσε να θέσει αυτό στο προηγούμενο βρόχο.
>> Οποιαδήποτε άλλα πράγματα που βλέπουμε;
Ελέγξτε τον αριθμό των args.
Πώς μπορούμε να ελέγξω κάτι;
>> ΦΟΙΤΗΤΗΣ: Αν καταστάσεις.
Και
>> JASON Hirschhorn: Αυτό είναι η αν η κατάσταση.
>> Έτσι, γιατί δεν μπορείτε να ξεκινήσετε κωδικοποίηση του εν λόγω προγράμματος.
Έχετε την ψευδοκώδικα εδώ.
Ξεκινήστε τη σύνταξη και στον κώδικα C.
Και πάλι, θα πάμε να καταλάβουμε τι είναι συμβαίνει με αυτό το αστέρι και int
πώς μπορούμε να γράψουμε στην πραγματικότητα αυτό το πρόγραμμα έτσι ώστε να συμμορφώνεται με το
προδιαγραφή που σας έχω δώσει.
Αν θέλετε, όμως, να αρχίσει με μόλις int πάρει άκυρη.
Επιστρέφει ακριβώς έναν ακέραιο.
>> Αυτό σας βοηθά να πάρετε τη μετάβαση.
Απλά προγραμματίσετε εκείνο.
Κώδικα, όπως ακριβώς το είδος επιστροφής ως int, όχι ως ένα αστέρι int.
Στη συνέχεια, όμως θέλουμε να το μετατρέψει σε int αστέρι και πάλι, ώστε να μπορούμε να συμμορφώνονται με
η προδιαγραφή.
Επίσης, να διερευνήσει πώς θα μπορούσε κανείς πραγματικά πάρετε σε ό, τι Jeff ήταν
μίλησα προηγουμένως.
Έτσι πάρτε τρία έως πέντε λεπτά με τον κωδικό αυτό.
>> Θα περάσουν αυτός ο κώδικας μαζί.
Ζητώ συγγνώμη αν υπήρχε έλλειψη σαφήνεια σε ορισμένα μέρη αυτής.
Αλλά αυτό που πάμε να δούμε στα δεξιά τώρα είναι που έχω ήδη πληκτρολογήσει όλα τα
κωδικός για το τι θα μοιάζει αν είμαστε απλά μια επιστροφή
ακέραιος με getAge.
Και θα πάμε μέσω αυτού του κώδικα, και τότε θα καταλάβουμε πώς μπορούμε να
πραγματικά να πάρει να ευθυγραμμιστεί με ό, τι ήταν μας ζήτησε να επιστρέψει ένα αστέρι int.
>> Εδώ είναι ο κώδικας.
Και πάλι, ζητώ συγνώμη που δεν μπορούμε κωδικοποιήσει αυτό έξω ως ομάδα, αλλά θέλω
για να βεβαιωθείτε ότι θα πάρετε μέσα από αυτό.
>> Για την κορυφή, έχουμε τη λειτουργία μας πρωτότυπο, getAge.
Έχουμε δει ότι πριν.
Επιστροφή πρώτου τύπου, τότε όνομα, τότε οι παράμετροι.
>> Μέχρι εδώ, είμαστε συμπεριλαμβανομένων τρεις βιβλιοθήκες.
Μπορεί κάποιος να μου πει τι αυτή η γραμμή 12 κάνει;
Sharp περιλαμβάνει τις τυποποιημένες live.h;
Τι σημαίνει ότι η γραμμή κάνει;
Αν ήθελα να σας ρωτήσω το εξής σε ένα κουίζ, και Σου ζήτησα να μου δώσει την απάντηση σε
δύο προτάσεις, τι θα λέγατε;
>> ΦΟΙΤΗΤΗΣ: [δεν ακούγεται]
σας επιτρέπει να χρησιμοποιείτε όλες τις λειτουργίες αποθηκεύονται σε αυτό το αρχείο.
>> JASON Hirschhorn: Αυτό είναι μια καλή απάντηση.
Είναι η λειτουργία κεφαλίδας που έχει η πρωτότυπα από έναν αριθμό λειτουργιών,
και εάν πρόκειται να χρησιμοποιήσετε αυτές βιβλιοθήκη σας, αυτό λέει αυτά
Υπάρχουν λειτουργίες.
Τι άλλο χρειάζεται να κάνω αν είμαι συμπεριλαμβανομένων, για παράδειγμα, τη βιβλιοθήκη CS50;
Τι άλλο χρειάζεται να κάνει όταν Έχω καταρτίσει το πρόγραμμά μου;
>> ΦΟΙΤΗΤΗΣ: [δεν ακούγεται] περιλαμβάνουν χρησιμοποιώντας την παύλα l.
Γι 'αυτό και πρέπει να συνδεθούν σε αυτά βιβλιοθήκη CS50 με παύλα l στέκεται για τη σύνδεση.
συνδέσεις παύλα l CS50 στην πραγματική αυτά και μηδενικά, η πραγματική εφαρμογή
των, ας πούμε, να πάρει σειρά ή να πάρετε int.
>> Έτσι, τότε είμαστε στο κεντρικό.
Βεβαιωθείτε χρήστης εισέλθει σε ένα και μόνο ένα όρισμα γραμμής εντολών.
Ακριβώς όπως ψευδοκώδικα μας, έχουμε ότι αν η κατάσταση εδώ.
Ας ελπίσουμε ότι, εσείς είστε αρκετά εξοικειωμένοι με αυτή τη γραμμή και είναι σε θέση να
γράψτε τον κωδικό αυτό αρκετά γρήγορα, έλεγχο argc.
>> Στη συνέχεια, κάνουμε ότι για i γραμμή.
Και πάλι, έχετε δει ότι πριν.
Αυτό είναι μετατροπή ένα string σε ακέραιο.
>> Το επόμενο πράγμα που κάνω είναι να έχω άλλο αν η κατάσταση.
Κάνω σίγουρος ότι εισέλθει σε μια θετική αριθμός των δελφινιών ανά την
προδιαγραφές, ελέγχοντας αν δελφίνια είναι μικρότερη από 1.
Έτσι και πάλι, αυτό το πρώτο μέρος της κώδικα, αυτά τα τρία πράγματα -
ελέγξετε τον αριθμό των args, αν n είναι μεγαλύτερη από το μηδέν -
έχετε γράψει αυτό το κωδικό πολλά, επικύρωση εισόδου του χρήστη.
Θα πρέπει να είναι αρκετά εξοικειωμένοι με γράφει αυτόν τον κώδικα και να είναι σε θέση να
γράψω αρκετά γρήγορα.
>> Στη συνέχεια, εμείς την προετοιμασία ένα νέο πίνακα.
Τι είδους πράγματα είμαστε βάζοντας σε αυτήν την σειρά;
Ακέραιοι ανά την πρώτη αυτή τρεις χαρακτήρες.
>> Στη συνέχεια, παίρνουμε τις ηλικίες, και ένα κανονικό για το βρόχο επανάληψης σε μια σειρά,
και εμείς την αποκαλούμε αυτό getAge λειτουργία, αποθηκεύοντας την τιμή επιστροφής της
getAge στη συστοιχία.
Και πάλι, έχετε γράψει κώδικα, όπως αυτό πολύ πριν, πάρα πολύ.
Ένα πράγμα που ελπίζουμε ότι θα μαζέψει από το να περάσει το παρελθόν σας
προβλήματα για αυτό το κουίζ είναι ότι πολλοί τι πρόκειται να συνεχίσει να κάνει
είναι πράγματα που έχετε ήδη κάνει.
Είναι πολύ σημαντικό να δούμε εκείνες πρότυπα, ώστε να είστε δεν πρόκειται να
κάνουν τη δουλειά σας εξαιρετικά δύσκολο για εσάς στο μέλλον με τη σκέψη έχω κάνει ποτέ
αυτό πριν.
Έχετε κάνει όλα αυτά τα πράγματα πριν.
>> Στη συνέχεια, οι τελικές γραμμές μας κώδικα.
Κρατάμε κομμάτι της μεγαλύτερης ηλικίας, που διέρχεται από κάθε ηλικία, ακριβώς όπως σας
προταθεί, Alden.
Και εφόσον η ηλικία του τρέχοντος πράγμα είμαστε επανάληψη μέσα είναι μεγαλύτερη
από το παλαιότερο αριθμό που έχετε αποθηκεύσει, θα ενημερώσει το παλαιότερο αριθμό.
>> Και τέλος, στο τέλος, θα εκτυπώσετε έξω από το παλαιότερο αριθμό.
Και πάλι, έχετε κάνει αυτό πριν.
Στην πραγματικότητα έχετε γράψει γραμμική αναζήτηση.
Έχετε γράψει αυτό.
Ήταν λίγο διαφορετικό.
Μπορείτε έψαχναν για ένα συγκεκριμένο αριθμό, όχι το μεγαλύτερο, αλλά
έχετε γράψει αυτόν τον κώδικα πριν.
>> Και τέλος, στο int getAge, έχετε δει αυτό πριν.
Έχουμε ένα βρόχο do-ζητώντας παράλληλα για την είσοδο του χρήστη έως ότου
πληροί ένα συγκεκριμένο όρο.
Και τέλος, είμαστε απλά επιστροφή ότι ακέραιος.
>> Έτσι, όλα αυτού του κώδικα που έχετε δει πριν και γραμμένο πριν.
Τίποτα δεν είναι νέο εδώ.
Φυσικά, έχω παρουσιάζονται σε μια διαφορετικό τρόπο, και ίσως ήταν πολύ
σύγχυση με τις οδηγίες μου, αλλά έχετε δει αυτό πριν.
Αυτή η λογική είστε 100% ικανό.
Και αν τρέξουμε αυτό το πρόγραμμα πολύ γρήγορα -
Έχω κάνει ήδη, έτσι θα τρέξει. / εκπαιδευτή.
>> Τι συνέβη;
>> ΦΟΙΤΗΤΗΣ: [δεν ακούγεται].
>> JASON Hirschhorn: δεν το έκανα δώσει κανένα επιχείρημα.
Ας εκπαιδεύσει πέντε δελφίνια.
Αυτό θα ήταν ένα δύο, τρία, τέσσερα, πέντε ετών.
Και όπως μπορείτε να δείτε εδώ, το εκτυπωθεί το παλαιότερο ηλικία.
Οπότε ας πάμε πίσω στο gedit.
>> Αλλά φυσικά, αυτό δεν ήταν ό, τι το προδιαγραφές ζητούσε.
Ήταν ζητώντας από το πρωτότυπο.
Δεν είναι οι αποδόσεις σε ακέραιο, αλλά οι αποδόσεις σε int αστέρι.
Έτσι, αν Πάω να το αλλάξετε μέχρι εκεί στο πρωτότυπο Ι καλύτερη
αλλάξει εδώ κάτω.
>> Και τώρα ας εργαστούν μέσω Αυτό, ακριβώς εδώ.
Ας ξεκινήσουμε από το τέλος.
Η ηλικία δεν είναι ένα αστέρι int.
Η ηλικία είναι το είδος της μεταβλητής;
>> ΦΟΙΤΗΤΗΣ: Ένας ακέραιος.
>> JASON Hirschhorn: Έτσι γραμμή 63, την ηλικία δεν θα πρέπει να είναι ακέραιος αριθμός.
Θα πρέπει να είναι ένα αστέρι int.
Πώς μπορώ να το ένα αστέρι int κάνουν;
>> ΦΟΙΤΗΤΗΣ: [δεν ακούγεται].
>> JASON Hirschhorn: Βάλτε ένα αστέρι εκεί.
Και τώρα ας δούμε εδώ κάτω.
67, getInt επιστρέφει έναν ακέραιο, και είμαστε αποθηκεύοντας την ακέραιος σε ηλικία.
Αλλά αν είμαστε θεραπεία ηλικία ως pointer τώρα, πώς θα πρέπει να
για να ενημερώσετε αυτή τη γραμμή;
>> ΦΟΙΤΗΤΗΣ: Βάλτε ένα αστέρι.
>> JASON Hirschhorn: Βάλτε ένα αστέρι πριν από την ηλικία.
Είναι αυτό που είπε;
>> ΦΟΙΤΗΤΗΣ: Ναι.
>> JASON Hirschhorn: Σωστά.
Επειδή getInt επιστρέφει έναν ακέραιο.
Θέλουμε να πάμε στη θέση δίνεται σε μας ηλικία και να υπάρχει ένας ακέραιος.
Αν κάναμε αυτήν τη γραμμή κώδικα, θα πηγαίναμε πίσω σε ό, τι Curtis μιλούσε για
νωρίτερα, εξοικονομώντας μια εποχή, κάποια τρελή ακέραιος, ίσως ο ακέραιος 5.
Τελικά προσπαθούμε να πάμε στη θέση 5 στη μνήμη, και έχουμε σε πολλά
πρόβλημα γι 'αυτό.
>> Έτσι χρειαζόμαστε αυτή αστέρων εκεί, και η γραμμή 69;
Και πάλι, η ηλικία, είναι στη μνήμη αντιμετωπίσει εδώ.
Επομένως, πώς θα πρέπει να ενημερώσετε αυτή τη γραμμή;
Κάποιος άλλος;
Πώς θα πρέπει να ενημερώσετε αυτή τη γραμμή;
>> ΦΟΙΤΗΤΗΣ: Βάλτε έναν αστερίσκο εκεί.
>> JASON Hirschhorn: Ακριβώς δεξιά.
Προσθέστε ένα μικρό αστέρι εκεί.
Τώρα παίρνουμε την τιμή επισήμανε με την ηλικία και όχι την ηλικία.
>> Έτσι και πάλι, είδαμε αυτός ο κώδικας πάει από ακέραιο μέχρι το τέλος σημείο.
Αρκετά παρόμοια.
Εμείς πρέπει να κοιτάξουμε για όλα αυτά τα μέρη που είχε ηλικία, και πρέπει να τους αλλάξει
λίγο, γιατί δεν θέλουμε να κουτί ηλικίας αλλαγή τόσο, όσο ποια ηλικία
Είναι δείχνοντας.
>> Και επιστρέφοντας την ηλικία, είναι ότι η σωστή;
Αυτό είναι σωστό, διότι ηλικίας αποτελεί δείκτη int.
Ναι, ερώτηση;
>> ΦΟΙΤΗΤΗΣ: Μπορούμε να κρατήσουμε την ηλικία int όλη, και στη συνέχεια στο τέλος, να θέσει
ένα εμπορικό μπροστά από την ηλικία;
>> JASON Hirschhorn: Και διεύθυνση επιστροφής του;
Αυτή είναι μια εξαιρετική ερώτηση.
Θα μπορούσατε να το κάνετε αυτό, αλλά ας πάμε στην ότι σε μια δεύτερη και την απάντηση που
ερώτηση σε ένα δευτερόλεπτο.
Fantastic ερώτηση.
>> Μέχρι εδώ, αν είστε μετατρέποντας ένα int δείκτη, το είδος των πραγμάτων είναι
ηλικιών δελφίνι αποθήκευση σε αυτό;
Αν θέλουμε να είμαστε επιστρέφοντας ένα δείκτη int δικαίωμα εδώ, τι είδους πράγμα είναι
ηλικιών δελφίνι αποθήκευση σε αυτό;
Int δείκτες, τόσο της γραμμής 37 θα πρέπει να είναι int αστέρι.
Αυτό είναι το είδος αυτού του πίνακα.
Δεν είναι πια αποθήκευση ακεραίων.
Είναι αποθήκευση int δείκτες.
>> Και τέλος, εδώ κάτω, ηλικίας δελφίνι i βραχίονα, που πρόκειται να μας δώσει,
πάλι, και δείκτη int.
Δεν θέλουμε ένα δείκτη int.
Θέλουμε η αξία επισήμανε για το εν λόγω int.
Έτσι Hassan, πώς μπορούμε να αλλάξετε αυτή τη γραμμή;
>> ΦΟΙΤΗΤΗΣ: Βάλτε ένα αστέρι;
>> JASON Hirschhorn: Ακριβώς δεξιά, θέσει ένα αστέρι εκεί.
Αυτό θα μας δώσει μια τιμή.
Τι γίνεται με γραμμή 51;
>> ΦΟΙΤΗΤΗΣ: Ένα άλλο αστέρι.
>> JASON Hirschhorn: Ένα άλλο αστέρι.
Αυτό είναι ακριβώς σωστό.
Έτσι είμαστε θεραπεία, και πάλι τώρα, αυτά τα πράγματα όπως int δείκτες.
>> ΦΟΙΤΗΤΗΣ: Είναι ένα πρόβλημα σε όλα αυτά σε getAge, ηλικίας int αστέρι δεν είναι ποτέ δεδομένη
ε θέση;
>> JASON Hirschhorn: Είναι ένα πρόβλημα που ηλικία int αστέρι δεν δίνεται ποτέ μια
θέση, και πρόκειται να είναι μια παρόμοια πρόβλημα σε ό, τι ήταν
μιλάμε μόνο με την επιστροφή ηλικία εμπορικό και
διατηρώντας το ως int.
Αλλά θέλω να εκτελέσετε αυτόν τον κώδικα πρώτα και να δούμε τι θα συμβεί.
>> OK.
Έτσι μεταβλητή ηλικία unitialized όταν χρησιμοποιείται εδώ.
Γι 'αυτό, λέει, «προετοιμάστε τη μεταβλητή «Ηλικία», για να φιμώσουν την προειδοποίηση αυτή, "και
προτείνει να δοθεί το null.
Ας δώσουμε null.
Γι 'αυτό και πρέπει να απαλλαγούμε από tha προειδοποίησης.
Θα πρέπει να είναι σε θέση να συγκεντρώσει.
>> Πόσο χρονών είναι το δελφίνι;
Ας πούμε, 1.
Ακολ σφάλμα.
>> Θα ήθελα λοιπόν να περάσουν από GDB τώρα, και εγώ Σας ενθαρρύνουμε να περάσουν GDB για
τα δικά σας να καταλάβω γιατί αυτό το πρόγραμμα μόνο SEG επικριθεί.
Είμαι δεν πρόκειται να αφήσει αυτό ως δραματική στιγμή, όμως, και θα πάω να
να ανοίξει αυτή τη λειτουργία.
Εμείς πάμε για να καταλάβετε γιατί αυτό το πρόγραμμα seg επικριθεί.
Έτσι, όπως όλοι στη στοίβα, όταν ένας συνάρτηση καλείται, ένας δίσκος προστίθεται
η παροιμιώδης στοίβα όπου η τοπική Οι μεταβλητές που αποθηκεύονται.
Όταν μια συνάρτηση επιστρέφει, ο δίσκος αυτός πηγαίνει μακριά.
Αυτές οι τοπικές μεταβλητές πάει μακριά, καθώς και.
>> Ηλικία int αστέρι ισούται με null είναι ένα τοπικό μεταβλητή αποθηκεύεται σε αυτό το πλαίσιο στοίβας.
Όταν αυτή η λειτουργία πηγαίνει μακριά, αυτό μεταβλητή πηγαίνει μακριά, καθώς και.
Έτσι περάσαμε στην διεύθυνση από οτιδήποτε άλλο.
Έχουμε περάσει την ηλικία.
Είναι μια διεύθυνση, περάσαμε ότι στις.
Αλλά τελικά, εμείς -
>> Συγγνώμη, παίρνω μπροστά από τον εαυτό μου.
Γιατί αυτό το πρόγραμμα πραγματικά SEG προσαφθεί στην αυτή η υπόθεση ήταν επειδή η ηλικία έδειχνε
σε null, η οποία είναι μια συγκεκριμένη θέση, null και είναι μια θέση που δεν είστε
επιτρέπεται να αγγίξει.
Και έτσι όταν προσπάθησα να γράψω αυτή τη γραμμή του κώδικα, πρόκειται να μεγαλώνουμε και να κάνει
κάτι εκεί, πήραμε σε μπελάδες, και αυτό είναι όπου SEG παραβιασμένη.
Επειδή η ηλικία αστέρι, την ηλικία και πάλι Είναι επισημαίνοντας null.
Θέλουμε να null, η οποία είναι μια κακή περιοχή.
Προσπαθήσαμε να getInt εκεί, 1 στην περίπτωσή μας, και αυτό είναι όπου SEG παραβιασμένη.
>> Αλλά να πούμε ότι είναι μια περίπτωση του opt-in, να πω ότι εμείς είχε δώσει αυτό μια νόμιμη διεύθυνση
εδώ, όπως bf4ac, κάτι είδαμε πριν.
Ακόμα κι έτσι, όταν επέστρεψε το πρόγραμμα αυτό, θα τρέξει σε ένα πρόβλημα, διότι
ότι η διεύθυνση θα πάει μακριά.
Η τοπική μεταβλητή διεύθυνση θα πάει μακριά.
Όποια και αν είναι η ηλικία τονίστηκε ότι δεν θα υπήρχε πια.
>> Ο τρόπος που καθορίζουν ότι είναι κάτι που έχετε δει
πριν, η συνάρτηση malloc.
Και έχετε εισαχθεί στο ότι η λειτουργία malloc πριν.
Έχετε δει αυτό;
Malloc σας δίνει κάποια μνήμη που δεν πάει μακριά, όταν η
στοίβα πλαίσιο πηγαίνει μακριά.
Έτσι, γράφοντας αυτήν τη γραμμή κώδικα -
και είμαι πρόκειται να δώσει να σας για τώρα -
malloc.
Και επειδή είμαστε αποθήκευση ενός int, είμαστε πρόκειται να malloc αρκετό χώρο.
Εμείς πάμε για να πω δώσει με ένα κουτί το μέγεθος int.
Malloc επιστρέφει μια διεύθυνση, και είμαστε εξοικονόμηση αυτή τη διεύθυνση σε ηλικία.
>> Τώρα, όταν θα εκτελέσετε αυτό το πρόγραμμα -
εμείς δεν πρόκειται να SEG σφάλμα, επειδή αυτά τα τμήματα της μνήμης πήραμε μέσα
malloc δεν εξαφανίζονται όταν η στοίβα πλαίσιο εξαφανίζεται.
Ζουν μέχρι θέλουμε να απαλλαγούμε από αυτά.
>> Και αυτό πηγαίνει πίσω στην ερώτησή σας, Jeff, από τις προηγούμενες.
Πώς μπορώ να δημιουργήσω πράγματα μέσα μου λειτουργίες που θέλετε να χρησιμοποιήσετε αργότερα
στην κύρια ή σε διαφορετικές λειτουργίες;
Μπορώ να χρησιμοποιήσω malloc, και περνώ διευθύνσεις τους γύρω.
>> Αυτό ήταν πολύ, ομολογουμένως, για την κάλυψη μόλις τώρα.
Επομένως, σας παρακαλώ, αν έχετε κάποιο ερωτήσεις, να ζητήσει από μακριά.
>> ΦΟΙΤΗΤΗΣ: Έτσι malloc δεν είναι σε η στοίβα πια, τότε;
>> JASON Hirschhorn: Αυτό είναι ακριβώς δεξιά.
Το κουτί malloc σας δίνει δεν είναι στη στοίβα.
Είναι το δίνει σε σας σε αυτό το άλλο μέρος της μνήμης που θα πάμε να
μιλήσουμε για το διάλεξη την Τετάρτη.
Το όνομα είναι το σωρό, αλλά δεν θέλω να μιλάμε πάρα πολύ για αυτό, εκτός από
Είναι αυτή η άλλη θέση που δεν παίρνει διαγράφονται όταν η λειτουργία πηγαίνει μακριά.
>> Οποιεσδήποτε άλλες ερωτήσεις;
>> ΦΟΙΤΗΤΗΣ: Νομίζω ότι αν δεν χρησιμοποιείτε μια ξεχωριστή λειτουργία και να βάλετε όλα αυτά
κώδικα σε κύριες, θα μπορείτε ακόμα πρέπει να χρησιμοποιήσετε malloc;
>> JASON Hirschhorn: Μεγάλη ερώτηση.
Αυτό δεν είναι πιθανώς ο πιο αποτελεσματικός τρόπο γραφής αυτού του προγράμματος.
Θα μπορούσε να γίνει εύκολα αυτό το do-ενώ βρόχο σε κύρια και αποθηκεύονται
τον εαυτό σας ένα σωρό προβλήματα.
Ο λόγος για τον οποίο ήθελα να το κάνω έτσι Αυτό είναι επειδή ήθελα όλους να
να είναι σε θέση να δούμε πώς το κύριο, μπορούμε να δημιουργήσουμε μια σειρά από
δείκτες, δείκτες int.
Μπορούμε να προετοιμαστεί εν λόγω δείκτες κάπου αλλού, βάλτε τους σε αυτό το άλλο
περιοχή της μνήμης που παραμένει για όσο χρονικό διάστημα θέλουμε να μείνει, και τότε μπορούμε να
πρόσβαση σε αυτά αργότερα.
>> Για παράδειγμα, εδώ ψάξαμε μέσω αυτών.
Θα μπορούσαμε να έχουμε κάνει άλλες τα πράγματα γι 'αυτούς.
Θα μπορούσαμε να τους πάρει και διαπίστωσε ότι το μέσο.
Θα μπορούσαμε να είχαμε κάνει πολλά πράγματα.
Το θέμα είναι ότι μπορείτε να παρακολουθείτε κάποια πράγματα στην κύρια μέσα
μια σειρά, να δημιουργήσει αυτά τα πράγματα κάπου άλλο, και στη συνέχεια να εξακολουθούν να χρησιμοποιούν
τους αργότερα.
>> Και αυτή η ιδέα, τι κάνουμε τώρα, πρόκειται να καταλήξουμε πολύ στο μέλλον
P-σύνολα και τα προβλήματα που θέλετε να λύσει.
Γι 'αυτό το κάναμε σαν αυτό, ακόμη και αν και ομολογουμένως είναι περίπλοκη μια
bit σε αυτό το πλαίσιο.
>> ΦΟΙΤΗΤΗΣ: [δεν ακούγεται]
αν μπορείτε να κρατήσετε όλες τις ηλικίες, όπως int πραγματικές τιμές, σε αντίθεση με δείκτες,
θα μπορούσατε να χρησιμοποιήσετε την ηλικία εμπορικό και τώρα;
>> JASON Hirschhorn: Συγγνώμη;
>> ΦΟΙΤΗΤΗΣ: Αν πήρε τα αστέρια όλες οι ηλικίες, και μόλις έκανε την επιστροφή
ampersand ηλικία, στο τέλος, θα ήταν αυτό το έργο;
>> JASON Hirschhorn: Έτσι malloc επιστρέφει μια διεύθυνση.
>> ΦΟΙΤΗΤΗΣ: Εντάξει, εντάξει.
>> JASON Hirschhorn: Επιστρέφει μια διεύθυνση, έτσι ώστε η ηλικία πρέπει να είναι ένα int
δείκτη, επειδή πρόκειται για να αποθηκεύονται σε μια διεύθυνση.
>> Έχουμε έξι λεπτά που απομένουν.
Πάω να παραλείψετε να μιλάμε για τη στοίβα για τώρα.
Πάω να πάει σε τρία λεπτά εν συντομία στην SPL, το πιο σημαντικό
πράγματα που νομίζω ότι θα πρέπει να γνωρίζουν για το σύνολο του προβλήματος.
>> Ωστόσο, πριν φτάσουμε εδώ, γιατί αυτό είναι αυτό που θα πάμε να τελειώσει επάνω,
δύο τελικές υπενθυμίσεις.
Ένα ομολογουμένως περάσαμε τα πράγματα αρκετά γρήγορα σε αυτή την ενότητα.
Ζητώ συγγνώμη για αυτό το ρυθμό.
Εάν έχετε οποιαδήποτε απορία σχετικά με κάτι που πήγε πάνω, γιατί κάτι
εργαστεί με τον τρόπο που το έκανε, ή κάτι που δεν εξηγούν τόσο καθαρά όσο θα μπορούσα
έχουν, παρακαλώ πυροβολούν ένα email ή να μιλήσει για μένα μετά το μάθημα, και θα είμαι ευτυχής
να σας το εξηγήσω περισσότερο σε βάθος.
Επομένως, σας παρακαλώ να φτάσει αν έχετε ερωτήσεις.
>> Και πάλι, η ιστοσελίδα ανατροφοδότηση, καθώς και.
Πάρτε κάποιο χρόνο μετά το μάθημα, αν έχετε και να μου δώσει κάποιες πληροφορίες.
Το εκτιμώ πολύ.
Όπως είδατε στην αρχή της κατηγορίας, Διάβασα μέσω αυτών, να ανταποκριθούν σε αυτές
αν θέλετε μια απάντηση, και εγώ παίρνετε ότι με την καρδιά.
Αυτό σημαίνει πολλά για μένα.
>> Ας τελειώσουμε τάξη μιλώντας για η βιβλιοθήκη θα πάμε να
πρέπει να χρησιμοποιούν αυτή την εβδομάδα.
Έχετε δει πιθανώς κώδικα, όπως αυτό που έχουν στην οθόνη πριν, GRect
κουπί ισούται newGRect, (x, y, πλάτος, ύψος).
Εσείς έχετε πιθανώς μέσω της ανάγνωσης μέσα από το spec αισθάνθηκε αρκετά
άνετα με αυτό, αλλά για εκείνους που ήταν λιγότερο άνετα, για σας
παιδιά, καθώς, θέλω να ξανά πάει πέρα ​​από αυτό γραμμή και να δούμε πώς θα είναι παρόμοια με
αυτό που έχουμε χρησιμοποιήσει στο παρελθόν.
>> Ακριβώς όπως και με κάθε μεταβλητή -
αυτό είναι ένα αντικείμενο, αλλά ακριβώς όπως με οποιαδήποτε μεταβλητή, έχουμε τον τύπο πρώτα
και πάνω από όλα εδώ, GRect.
>> Στη συνέχεια έχουμε το όνομα του αντικειμένου, και Τέλος έχουμε την λειτουργία που
προετοιμάζει αυτό, μας δίνει το κουπί που θέλουμε.
Μερικές φορές γράφουμε int x ισούται με 5, και έχουμε προετοιμαστεί κάτι άμεσα.
Μερικές φορές γράφουμε κορδόνι Το όνομά ισούται πάρει σειρά.
Χρησιμοποιούμε μια λειτουργία για να πάρει κάτι, και παίρνουμε την αξία της επιστροφής, και
αυτό είναι νέο αξία μας.
>> Έτσι έχουμε δει αυτή την ιδέα πριν, όπου λειτουργίες που μπορεί ή δεν μπορεί να χρειαστεί
εισόδου πραγματικά να δημιουργήσει το πράγμα για μας, αντί
εμάς δημιουργώντας άμεσα.
Έτσι έχουμε δει αυτόν τον κώδικα πριν.
Ελπίζουμε, αυτή η ιδέα ενός αντικειμένου, ή τουλάχιστον δημιουργώντας ένα αντικείμενο, δεν είναι τόσο
συντριπτική αν μπορείτε να συλλάβουμε ως απλά πολύ παρόμοια με τα πράγματα
έχουμε δει στο παρελθόν.
>> Ωστόσο, το δροσερό πράγμα για αντικείμενα όπως διαφορετική από τις μεταβλητές είναι ότι
μπορεί να κάνει τα πράγματα με αυτούς.
Δεν μπορείτε να αλλάξετε το χρώμα ενός μεταβλητή, αλλά μπορείτε πράγματι αλλαγή
το χρώμα ενός αντικειμένου, ή τουλάχιστον στην SPL μπορείτε να αλλάξετε το
το χρώμα των αντικειμένων σας.
>> Δεν μπορείτε να μετακινήσετε σε μια μεταβλητή ένα παράθυρο, αλλά μπορείτε να μετακινήσετε
ένα αντικείμενο σε ένα παράθυρο.
Μπορείτε να πάρετε θέση ενός αντικειμένου.
Δεν μπορεί πραγματικά να πάρει μια θέση μεταβλητής.
Αυτό είναι το δροσερό πράγμα για αντικείμενα σε αυτή τη βιβλιοθήκη.
>> Ωστόσο, αυτές οι λειτουργίες μπορούν να να είδος σύγχυσης.
Δεν έχουμε πραγματικά χρησιμοποιούνται λειτουργίες ή αντικείμενα πριν, έτσι ένιωσα ότι ήταν
χρήσιμο να κατανοήσουμε μια γενική τρόπος για να ρητή ή να κάνουμε τα πράγματα με τα αντικείμενα, ή
κατανοούν αντικείμενα.
Και όπως θα παρατηρήσετε, έχω δύο λειτουργίες γράψει εδώ, λειτουργίες
έχετε ξαναδεί - προσθήκη, παράθυρο κόμμα κουπί, και να ορίσετε το χρώμα
κουπί κόμμα μαύρο.
Σε αμφότερες τις περιπτώσεις, έχουμε μία συνάρτηση που παίρνει δύο επιχειρήματα και
κάνει κάτι.
>> Τώρα πιο γενικά, όλα αυτά λειτουργίες που πρόκειται να γράψετε ότι
πρέπει να ασχοληθεί με τα αντικείμενα να λάβει, όπου και ό, τι.
Α, όπου είναι το αντικείμενο που θέλετε να κάνουμε κάτι για να σε αυτό
περίπτωση, ένα παράθυρο ή πίνακα.
Και το τι είναι αυτό που θέλετε να το κάνει ή να δώσει σε αυτό.
>> Όταν είστε ρύθμιση το χρώμα κάτι, όπου
ρύθμιση που το χρώμα;
Με το αντικείμενο κουπί.
Και τι χρώμα είσαι ρύθμιση;
Μαύρο.
Με τη λειτουργία add, όπου κάνεις κάτι;
Με το αντικείμενο του παραθύρου.
Και τι δίνει σε αυτό;
Είστε δίνοντας το κουπί.
>> Θα παρατηρήσετε ότι οι λειτουργίες που χρήση, που το χρώμα, που τοποθεσία, et
κ.λπ., κ.λπ., όλα ακολουθούν αυτό το μοτίβο.
Παίρνουν κάτι που θέλετε να κάνετε κάτι, το αντικείμενο που θέλετε να
Κάντε κάτι για να, και τι θέλετε να κάνει με αυτό, ή ό, τι θέλετε να έχετε
αλλάξει, ή ό, τι θέλετε να έχετε προστεθεί, ή το συγκεκριμένο χρώμα
θέλετε να είναι.
Ή αν δεν είναι γεμάτο, δεν θέλετε να να είναι γεμάτο, κ.λπ., κ.λπ..
>> Βεβαίως, μια πολύ σύντομη συζήτηση του Στάνφορντ -
τι είναι αυτό;
Stanford Προγραμματισμός Βιβλιοθήκη;
Φορητό Βιβλιοθήκη, αυτό είναι σωστό!
Σας ευχαριστώ, τάξη.
Stanford Portable Βιβλιοθήκη.
Αλλά και πάλι, πολύ περισσότερες πληροφορίες δίνεται στο πρόβλημα που spec, αλλά
Ας ελπίσουμε ότι αυτό το λίγο κάνει ευκολότερο να κατανοήσουν το αντικείμενο,
ιδίως δεδομένου ότι έχουν σχετικά με πράγματα που έχουμε δει και στο παρελθόν.
>> Έτσι, με αυτό, ότι είναι την τέταρτη εβδομάδα.
Απολαύστε την εκμάθηση για το αύριο σωρού.
Καλή τύχη σε ένα κουίζ σας την επόμενη εβδομάδα, αλλά Φυσικά, θα δω πριν από τότε,
ελπίζουμε στο τμήμα την επόμενη Τρίτη.
Αλλά και εάν έχετε οποιεσδήποτε ερωτήσεις, σχόλια, προβληματισμούς, μη διστάσετε
να φτάσει.
Και μετά το μάθημα, θα βγείτε έξω, αν Θέλετε να μιλήσουμε για το πρόβλημά σας
ορίσετε ή να έχετε κάποιες ερωτήσεις.