1 00:00:00,000 --> 00:00:06,180 2 00:00:06,180 --> 00:00:07,820 >> JASON Hirschhorn: Welcome σε Α5, ο καθένας. 3 00:00:07,820 --> 00:00:11,270 Έχουμε μια συναρπαστική εβδομάδα μπροστά μας, κυρίως επειδή υπάρχουν τόσα πολλά νέα 4 00:00:11,270 --> 00:00:12,350 αντιμετωπίζει σε αυτό το δωμάτιο. 5 00:00:12,350 --> 00:00:12,920 Είναι υπέροχο. 6 00:00:12,920 --> 00:00:15,740 Πολλοί από εσάς εδώ κατά λάθος, το οποίο είναι ακόμα καλύτερο. 7 00:00:15,740 --> 00:00:18,220 Έτσι, ελπίζουμε ότι θα κρατήσει την ένταξή μας. 8 00:00:18,220 --> 00:00:20,220 >> Αυτή την εβδομάδα θα πάμε να περάσουν το μεγαλύτερο μέρος του τμήματος 9 00:00:20,220 --> 00:00:21,870 προετοιμασία για το κουίζ. 10 00:00:21,870 --> 00:00:26,580 Έτσι ημερήσια διάταξή μας, θα πάμε να μιλήσουμε ένα κομμάτι σχετικά με πόρους για την τάξη, 11 00:00:26,580 --> 00:00:30,350 αλλά επίσης και για το κουίζ και, στη συνέχεια, και πάλι, περνούν το μεγαλύτερο μέρος της κατηγορίας μιλάμε 12 00:00:30,350 --> 00:00:31,390 για τις ερωτήσεις. 13 00:00:31,390 --> 00:00:33,900 Μόλις τελειώσαμε την απάντηση σας ερωτήσεις, ή εάν οι ερωτήσεις σας 14 00:00:33,900 --> 00:00:39,010 φυσικά να μας οδηγήσει σε κάποια κωδικοποίηση, I έχουν προβλήματα δείγμα από εξετάσεις προόδου 15 00:00:39,010 --> 00:00:43,180 παρελθόν που θα κωδικοποιήσει ζωντανά στο τμήμα μαζί που να φέρει στην επιφάνεια κάποια άλλη 16 00:00:43,180 --> 00:00:45,420 καλή θεμάτων που θα καλυφθούν. 17 00:00:45,420 --> 00:00:48,280 >> Έτσι, η πρώτη, όπως έχουμε περάσει για την τελευταίες δύο εβδομάδες για να σας υπενθυμίσω 18 00:00:48,280 --> 00:00:51,700 παιδιά, υπάρχει ένας τόνος των πόρων διαθέσιμα για αυτό το μάθημα. 19 00:00:51,700 --> 00:00:55,020 Πολλοί από αυτούς θα είναι εξαιρετικά χρήσιμες για να σας όπως μπορείτε να συνεχίσετε να 20 00:00:55,020 --> 00:00:57,280 μελέτη για το κουίζ 0, διότι Είναι το απόγευμα της Τρίτης. 21 00:00:57,280 --> 00:00:59,630 Έτσι, όλοι θα έχουν μελετώντας για λίγο. 22 00:00:59,630 --> 00:01:02,640 >> Υπάρχουν σημειώσεις από τις διαλέξεις και την πηγή κώδικα που θα πρέπει να 23 00:01:02,640 --> 00:01:04,050 σίγουρα να ελέγξετε έξω. 24 00:01:04,050 --> 00:01:05,019 Παρακολουθήστε τα σορτς. 25 00:01:05,019 --> 00:01:07,470 Αναχώρηση study.cs50.net. 26 00:01:07,470 --> 00:01:11,770 Και στη συνέχεια, παρατίθενται παρακάτω, ένας αριθμός άλλων πόρων. 27 00:01:11,770 --> 00:01:14,020 >> Και πάλι, κουίζ 0 αύριο σε μία. 28 00:01:14,020 --> 00:01:18,230 Αν δεν το έχετε κάνει ήδη, ελέγξτε έξω από το About Quiz 0 έγγραφο σχετικά με την 29 00:01:18,230 --> 00:01:21,370 αρχική σελίδα μαθήματος να καταλάβω όπου παίρνετε το κουίζ. 30 00:01:21,370 --> 00:01:25,770 Το κουίζ ξεκινά στις 1:10 και άκρα 70 λεπτά αργότερα. 31 00:01:25,770 --> 00:01:29,610 Έτσι, εάν εμφανιστεί μετά 1:10, είστε πρόκειται να πάρει ότι πολύ λιγότερα λεπτά 32 00:01:29,610 --> 00:01:30,940 από 70 έως λάβει τα κουίζ. 33 00:01:30,940 --> 00:01:33,570 Έτσι, βεβαιωθείτε ότι είστε εκεί στην ώρα τους. 34 00:01:33,570 --> 00:01:38,690 Αν είστε φοιτητής επέκταση ή έχουν κάποιες άλλες σκέψεις δοκιμές, 35 00:01:38,690 --> 00:01:40,400 μπορεί να μην είναι σε μία αύριο. 36 00:01:40,400 --> 00:01:43,540 Αλλά και πάλι, ελέγξτε το για Quiz 0 τεκμηρίωση για να βεβαιωθείτε ότι γνωρίζετε πότε 37 00:01:43,540 --> 00:01:44,760 παίρνετε το κουίζ. 38 00:01:44,760 --> 00:01:46,440 Έγραψα 75 λεπτά μέχρι εδώ. 39 00:01:46,440 --> 00:01:48,580 Νομίζω ότι είναι σωστό, όχι 70. 40 00:01:48,580 --> 00:01:53,420 >> Καλύπτει το σύνολο του υλικού από μια εβδομάδα 0 σε ομιλία της περασμένης εβδομάδας, την Τετάρτη. 41 00:01:53,420 --> 00:01:59,350 Και πάλι, για αυτό το κουίζ, ανά που έγγραφο, μπορείτε να πάρετε ένα διπλής όψης και 8 42 00:01:59,350 --> 00:02:03,770 1/2 από 11 φύλλο χαρτιού που έχετε να χρησιμοποιήσετε ως σημειώσεις κατά τη διάρκεια του κουίζ. 43 00:02:03,770 --> 00:02:08,570 Πολλοί άνθρωποι, αν όχι οι περισσότεροι άνθρωποι, έχουν διαπίστωσε ότι το πιο χρήσιμο τρόπο 44 00:02:08,570 --> 00:02:11,970 να μελετήσει για το κουίζ είναι να κάνει ένα φύλλο μελέτη, 45 00:02:11,970 --> 00:02:13,730 ένα sider, από τη δική τους. 46 00:02:13,730 --> 00:02:17,710 Έτσι, μια ματιά στο παρελθόν, αν αυτά έχετε δει παρελθόντος. 47 00:02:17,710 --> 00:02:19,960 Απευθυνθείτε σε φίλους για να δούμε τι βάζουν τις δικές τους. 48 00:02:19,960 --> 00:02:23,610 >> Αλλά τα χέρια προς τα κάτω, ο καλύτερος τρόπος που μπορείτε μελέτης είναι να περάσει τα πάντα και 49 00:02:23,610 --> 00:02:26,530 περιοριστούν τα κάτω σε ό, τι πρέπει ή δεν ανήκουν σε αυτό το φύλλο 50 00:02:26,530 --> 00:02:30,570 χαρτί, γιατί αυτό είναι ακριβώς μια πραγματικά χρήσιμο τρόπο για να βεβαιωθείτε ότι 51 00:02:30,570 --> 00:02:33,620 θα πάμε μέσα από τα πάντα και έχουν κάποια εξοικείωση με αυτό. 52 00:02:33,620 --> 00:02:36,690 Οι περισσότεροι άνθρωποι, βρίσκουμε, ακόμα κι αν έχουν το φύλλο του χαρτιού που κάθεται δεξιά 53 00:02:36,690 --> 00:02:39,840 δίπλα τους στο κουίζ, δεν τη σειρά σε αυτό, γιατί, και πάλι, ότι πολύ 54 00:02:39,840 --> 00:02:43,290 διαδικασία να περάσει από τις πληροφορίες βοήθησε να το μάθουν. 55 00:02:43,290 --> 00:02:45,370 >> Μήπως κάποιος έχει απορίες για κουίζ 0; 56 00:02:45,370 --> 00:02:50,120 57 00:02:50,120 --> 00:02:51,450 Έχει όλους - 58 00:02:51,450 --> 00:02:53,230 Είμαι δεν πρόκειται να κάνει μια επίδειξη των χεριών. 59 00:02:53,230 --> 00:02:53,550 Δεν πειράζει. 60 00:02:53,550 --> 00:02:54,790 Ήμουν έτοιμος να ρωτήσω ποιος άρχισε να μελετά. 61 00:02:54,790 --> 00:02:58,360 Αλλά δεν θέλω να σας κάνει όλα δεν σηκώστε τα χέρια σας. 62 00:02:58,360 --> 00:03:01,290 Έτσι, όπως είπα - Ναι, Avi, προχωρήστε. 63 00:03:01,290 --> 00:03:04,205 >> AVI: Ποια θα ήταν ένα χρήσιμο πράγμα να βάλει στο ένα μπίπερ; 64 00:03:04,205 --> 00:03:05,875 >> ΦΟΙΤΗΤΗΣ: Αυτό είναι στο χέρι σας. 65 00:03:05,875 --> 00:03:08,210 >> JASON Hirschhorn: Παίρνετε να χρησιμοποιήσετε την κρίση σας. 66 00:03:08,210 --> 00:03:13,220 Χρήσιμα πράγματα που πρέπει να βάλει στο ένα μπίπερ, αν βρίσκονται σε σύγχυση για το μεγάλο Ο 67 00:03:13,220 --> 00:03:17,510 εκτέλεσης των διαφόρων τύπων των αναζητήσεων και τα είδη, βάλτε το εκεί σε μια 68 00:03:17,510 --> 00:03:18,760 εύχρηστο δανδής διάγραμμα. 69 00:03:18,760 --> 00:03:22,250 Με αυτόν τον τρόπο, αν σας ζητηθεί ότι για το κουίζ, δεν χρειάζεται να προσπαθήσουμε και σχήμα 70 00:03:22,250 --> 00:03:23,560 έξω ή λόγο μέσω της εκτέλεσης. 71 00:03:23,560 --> 00:03:24,730 Μπορείτε απλά να αντιγράψετε τα κάτω. 72 00:03:24,730 --> 00:03:28,320 Αν κοιτάξετε κουίζ παρελθόν, πολλά φορές, υπάρχει τρέχει ερωτήσεις χρόνο. 73 00:03:28,320 --> 00:03:34,150 Έτσι ώστε θα ήταν ένα παράδειγμα μιας καλής πράγμα που πρέπει να θέσει σε σας ένα μπίπερ. 74 00:03:34,150 --> 00:03:37,450 >> Άλλα καλά πράγματα να θέσει σε, αν είστε σύγχυση για το πώς να κηρύξει 75 00:03:37,450 --> 00:03:40,570 λειτουργία ή ό, τι τα διάφορα μέρη του η δήλωση της συνάρτησης είναι, γράφουν 76 00:03:40,570 --> 00:03:43,400 ότι εκεί, μια γενική έκδοση και τότε ίσως ένα παράδειγμα. 77 00:03:43,400 --> 00:03:47,290 Αν είστε σε σύγχυση σχετικά με τους δείκτες, ένα διάγραμμα του τρόπου εργασίας είναι δείκτες 78 00:03:47,290 --> 00:03:48,660 ίσως πραγματικά χρήσιμη. 79 00:03:48,660 --> 00:03:52,440 Αν είστε σύγχυση σχετικά με αναδρομή, μια δείγμα αναδρομική συνάρτηση εκεί 80 00:03:52,440 --> 00:03:54,980 θα μπορούσε επίσης να αποδειχθεί πολύ χρήσιμη. 81 00:03:54,980 --> 00:03:57,290 Μήπως αυτό σας δώσει μερικές ιδέες; 82 00:03:57,290 --> 00:04:01,820 >> AVI: Πρέπει να καταλάβετε το Ολόκληρη η διαδικασία μεταγλώττισης, όπως 83 00:04:01,820 --> 00:04:03,220 πώς αυτό όλες οι εργασίες; 84 00:04:03,220 --> 00:04:06,620 >> JASON Hirschhorn: Όλα ότι έχει καλυφθεί μπορούσε 85 00:04:06,620 --> 00:04:08,060 εμφανιστούν στο κουίζ. 86 00:04:08,060 --> 00:04:08,930 Ερωτήσεις - 87 00:04:08,930 --> 00:04:11,300 αλλά και πάλι, κάποια πράγματα θα είναι σταθμισμένη σε μεγάλο βαθμό από τους άλλους. 88 00:04:11,300 --> 00:04:14,330 Κάποια πράγματα έχουν καταλήξει και πάλι και πάλι στην τάξη, 89 00:04:14,330 --> 00:04:15,590 διάλεξη, και το τμήμα. 90 00:04:15,590 --> 00:04:17,220 Άλλα πράγματα που δεν έχουν καταλήξει ότι συχνά. 91 00:04:17,220 --> 00:04:22,900 >> Έχουμε μιλήσει πολύ για # περιλαμβάνουν και -L κάτι και τι σημαίνουν σε εκείνες 92 00:04:22,900 --> 00:04:24,390 η διαδικασία κατάρτισης. 93 00:04:24,390 --> 00:04:29,120 Έχουμε μιλήσει πολύ για GDB, προσκολλώνται, αυτές οι διαφορετικές σημαίες που χρησιμοποιούμε όταν 94 00:04:29,120 --> 00:04:33,100 συγκεντρώνουμε κάτι, και τι make15, για παράδειγμα, πραγματικά 95 00:04:33,100 --> 00:04:34,510 μέσα και πραγματικά κάνει. 96 00:04:34,510 --> 00:04:38,110 Δεν έχουμε μιλήσει τόσο πολύ για κάθε βήμα 97 00:04:38,110 --> 00:04:39,240 η διαδικασία κατάρτισης. 98 00:04:39,240 --> 00:04:40,410 Έχουμε ακόμα μιλήσει γι 'αυτό. 99 00:04:40,410 --> 00:04:42,550 Έτσι, είναι ακόμα κάτι που θα πρέπει να είναι εξοικειωμένοι με. 100 00:04:42,550 --> 00:04:44,610 Αλλά και πάλι, εμείς δεν πρόκειται να είναι - 101 00:04:44,610 --> 00:04:49,140 πράγματα που έρχονται πιο συχνά στην τάξη είναι πιο πιθανό να καταλήξει περισσότερο 102 00:04:49,140 --> 00:04:52,495 συχνά και να είναι πιο έντονα σταθμισμένο με κουίζ. 103 00:04:52,495 --> 00:04:53,280 >> Cool. 104 00:04:53,280 --> 00:04:54,580 Οποιεσδήποτε άλλες ερωτήσεις σχετικά με το κουίζ 0; 105 00:04:54,580 --> 00:04:57,660 106 00:04:57,660 --> 00:05:00,050 >> Εντάξει, έτσι έβαλα μια λίστα θέματα σχετικά με το διοικητικό συμβούλιο. 107 00:05:00,050 --> 00:05:01,550 Πήγα μέσα από τη διδακτέα ύλη. 108 00:05:01,550 --> 00:05:07,340 Πήγα μέσω του τμήματος αναθεώρηση από χθες το βράδυ και οι διαφάνειες να καταλήξει 109 00:05:07,340 --> 00:05:13,710 με ένα μη εξαντλητικό κατάλογο των θεμάτων ότι έχουμε καλύψει μέχρι στιγμής στο CS50 110 00:05:13,710 --> 00:05:16,800 και τα πράγματα που θα μπορούσαν να εμφανίζονται στο κουίζ. 111 00:05:16,800 --> 00:05:19,900 Γι 'αυτό και δεν πρόκειται να περάσουν κάθε ένα από αυτά. 112 00:05:19,900 --> 00:05:22,370 Αυτό θα χρειαζόταν πολύ περισσότερος χρόνο από ό, τι έχουμε τώρα. 113 00:05:22,370 --> 00:05:26,880 Αλλά έβαλα αυτό εδώ για να ελπίζουμε jog μνήμη σας ως προς τα πράγματα που μπορούν να 114 00:05:26,880 --> 00:05:28,420 ή μπορεί να μην είναι τόσο εξοικειωμένοι με σας. 115 00:05:28,420 --> 00:05:32,850 >> Και θα ήθελα πολύ να περάσουν το μεγαλύτερο μέρος των τμήμα απαντήσω στις ερωτήσεις σας σχετικά με 116 00:05:32,850 --> 00:05:35,130 αυτά τα θέματα, τα θέματα που δεν καλύπτονται εδώ. 117 00:05:35,130 --> 00:05:36,130 Μπορούμε να γράψετε ψευδοκώδικα. 118 00:05:36,130 --> 00:05:40,010 Μπορούμε να γράψουμε πραγματικό κώδικα για να βεβαιωθείτε ότι έχετε - 119 00:05:40,010 --> 00:05:44,280 Μπορώ να απαντήσω στην ερώτησή σας και να βοηθήσει όλοι ουσιαστικά καταλάβουμε 120 00:05:44,280 --> 00:05:48,330 πολλά από αυτά τα θέματα, έτσι θα αισθανθείτε προετοιμασμένοι και άνετα να υπεισέλθω σε 121 00:05:48,330 --> 00:05:50,150 το αύριο κουίζ. 122 00:05:50,150 --> 00:05:52,300 Έτσι, διαβάστε πάνω από τη λίστα. 123 00:05:52,300 --> 00:05:54,780 Μπορείτε ελπίζουμε ότι έχουν έρθει στην ενότητα με ορισμένες ερωτήσεις, καθώς και. 124 00:05:54,780 --> 00:05:58,480 Όταν είστε έτοιμοι, σηκώστε το χέρι σας και εμείς θα ξεκινήσουμε. 125 00:05:58,480 --> 00:06:01,590 126 00:06:01,590 --> 00:06:05,200 >> Λάβετε υπόψη σας, οι ερωτήσεις που έχετε, δεν υπάρχουν ηλίθιες ερωτήσεις. 127 00:06:05,200 --> 00:06:06,250 Έχουμε ακούσει ότι πολλά. 128 00:06:06,250 --> 00:06:09,490 Και οι ερωτήσεις που έχετε, είμαι πρόθυμος να στοιχηματίσετε, πολλοί άλλοι άνθρωποι, τόσο 129 00:06:09,490 --> 00:06:11,740 κάθονται εδώ και βλέποντας έχουν απευθείας σύνδεση, καθώς και. 130 00:06:11,740 --> 00:06:13,770 Έτσι, μπορείτε να βοηθήσετε μόνο άνθρωποι από τις ερωτήσεις. 131 00:06:13,770 --> 00:06:15,070 Μάρκους. 132 00:06:15,070 --> 00:06:18,040 >> ΜΑΡΚΟΣ: Μεταξύ της στοίβας και το σωρού, είναι ένα προ-διατεθεί εκεί 133 00:06:18,040 --> 00:06:22,880 το ποσοστό της μνήμης που έχει προσδιοριστεί ως αυτό είναι για τη στοίβα ή για την σωρού; 134 00:06:22,880 --> 00:06:25,010 Ή πώς γίνεται αυτό, ακριβώς; 135 00:06:25,010 --> 00:06:26,230 >> JASON Hirschhorn: Μεγάλη ερώτηση. 136 00:06:26,230 --> 00:06:28,640 Πάω να υποστηρίξει τον εντοπισμό λίγο. 137 00:06:28,640 --> 00:06:30,910 Μήπως όλοι - 138 00:06:30,910 --> 00:06:31,660 παρακαλούμε να είμαι ειλικρινής εδώ. 139 00:06:31,660 --> 00:06:34,130 Ξέρω ότι είμαι ζητώντας σας να αυξήσει σας το χέρι μπροστά από τους συμμαθητές σας. 140 00:06:34,130 --> 00:06:38,510 Αλλά οι άνθρωποι που αισθάνονται εκεί άβολα με τη στοίβα και σωρού 141 00:06:38,510 --> 00:06:42,980 και θα ήθελα να επαναλάβω ότι και τι σημαίνουν αυτά; 142 00:06:42,980 --> 00:06:43,880 Σηκώστε το χέρι σας αν - 143 00:06:43,880 --> 00:06:44,420 OK. 144 00:06:44,420 --> 00:06:45,120 Σας ευχαριστώ. 145 00:06:45,120 --> 00:06:48,420 Έτσι θα πάμε να πάει πέρα ​​από το σωρό και ο σωρός πραγματικά γρήγορα και στη συνέχεια 146 00:06:48,420 --> 00:06:50,370 προχωρήσουμε σε απάντηση στην ερώτησή σας. 147 00:06:50,370 --> 00:06:58,250 >> Έτσι, αν έχουμε συντάξει ένα κουτί για να εκπροσωπήσει μνήμη του υπολογιστή σας, ποια είναι μερικά 148 00:06:58,250 --> 00:07:02,160 πράγματα που πηγαίνουν σε αυτό το πλαίσιο; 149 00:07:02,160 --> 00:07:03,630 Κύριο. 150 00:07:03,630 --> 00:07:04,020 Μια κύρια λειτουργία. 151 00:07:04,020 --> 00:07:05,890 Πού κύρια πάτε; 152 00:07:05,890 --> 00:07:08,090 >> ΦΟΙΤΗΤΗΣ: [δεν ακούγεται]. 153 00:07:08,090 --> 00:07:09,390 >> JASON Hirschhorn: έτσι θα θέσει κύρια εδώ κάτω. 154 00:07:09,390 --> 00:07:12,180 155 00:07:12,180 --> 00:07:13,430 Τι άλλο πηγαίνει σε αυτό το πλαίσιο; 156 00:07:13,430 --> 00:07:16,000 157 00:07:16,000 --> 00:07:18,140 >> ΦΟΙΤΗΤΗΣ: Οι λειτουργίες που σας καλούν. 158 00:07:18,140 --> 00:07:19,020 >> JASON Hirschhorn: Οι λειτουργίες ότι λέμε. 159 00:07:19,020 --> 00:07:20,440 Και πού πάνε; 160 00:07:20,440 --> 00:07:21,300 >> ΦΟΙΤΗΤΗΣ: Στο στοίβα. 161 00:07:21,300 --> 00:07:22,380 >> JASON Hirschhorn: Μπορούν πάνε στη στοίβα. 162 00:07:22,380 --> 00:07:27,350 Έτσι θα πάμε για να καλέσετε αυτό το πράγμα εδώ κάτω στη στοίβα. 163 00:07:27,350 --> 00:07:31,880 Και επάνω στην κορυφή, έχουμε το σωρό. 164 00:07:31,880 --> 00:07:35,450 Έτσι, η μνήμη δεν είναι ένα κουτί σαν αυτό. 165 00:07:35,450 --> 00:07:37,330 Αλλά στην πραγματικότητα είναι αρκετά παρόμοια. 166 00:07:37,330 --> 00:07:40,840 Είναι πρόκειται να είναι μια πολλά κουτιά πάνω και άνω, ανάλογα με το πόσο μεγάλο σας 167 00:07:40,840 --> 00:07:43,730 υπολογιστής είναι ή πόσο μεγάλη είναι η μνήμη σας είναι. 168 00:07:43,730 --> 00:07:46,950 >> Στο απόσπασμα-unquote "κάτω" είναι η στοίβα. 169 00:07:46,950 --> 00:07:50,880 Και υπάρχουν πολλά πράγματα που πηγαίνουν στη στοίβα. 170 00:07:50,880 --> 00:07:53,840 Και αυτά εξαρτώνται από τις λειτουργίες έχετε στον κώδικά σας. 171 00:07:53,840 --> 00:07:57,780 Έχετε πάντα μια λειτουργία που σου κώδικα που ονομάζεται κύρια, έτσι υπάρχει πάντα ένα 172 00:07:57,780 --> 00:08:00,480 τμήμα εδώ κάτω στην στοίβα αφιερωμένο στο κύριο. 173 00:08:00,480 --> 00:08:03,980 >> Τα τμήματα αυτά στη στοίβα ονομάζονται πλαίσια στοίβα. 174 00:08:03,980 --> 00:08:09,580 Όταν καλείτε μια άλλη λειτουργία, αναφέρουν ότι ο βασικός καλεί μια δυαδική λειτουργία αναζήτησης, 175 00:08:09,580 --> 00:08:11,075 βάζουμε ένα άλλο πλαίσιο στη στοίβα. 176 00:08:11,075 --> 00:08:13,830 177 00:08:13,830 --> 00:08:17,320 Πιο συγκεκριμένα, πρόκειται να δωρίσει ένα κομμάτι της μνήμης μας 178 00:08:17,320 --> 00:08:22,960 υπολογιστή για να αποθηκεύουν δυαδικά αναζήτησης τοπικής μεταβλητές και να τρέξει το δυαδικό 179 00:08:22,960 --> 00:08:24,150 Κωδικός αναζήτησης. 180 00:08:24,150 --> 00:08:26,810 >> Έτσι καλούμε δυαδική αναζήτηση. 181 00:08:26,810 --> 00:08:30,440 182 00:08:30,440 --> 00:08:33,340 Σε αυτό το κομμάτι της μνήμης, θα πάμε για να αποθηκεύσετε τις τοπικές μεταβλητές. 183 00:08:33,340 --> 00:08:35,270 Εμείς πάμε για να αποθηκεύσετε printf κλήσεις του. 184 00:08:35,270 --> 00:08:38,159 Ό, τι συμβαίνει, αυτή η λειτουργία είναι πρόκειται να αποθηκευτεί εκεί. 185 00:08:38,159 --> 00:08:40,350 Δυαδική αναζήτηση πρόκειται να εκτελέσει. 186 00:08:40,350 --> 00:08:42,210 Είναι πρόκειται να ολοκληρώσει την εκτέλεση. 187 00:08:42,210 --> 00:08:47,450 Ποια είναι η λέξη που σημαίνει C ότι μια συνάρτηση πρέπει να 188 00:08:47,450 --> 00:08:49,306 την ολοκλήρωση της εκτέλεσης του; 189 00:08:49,306 --> 00:08:50,040 >> ΣΠΟΥΔΑΣΤΩΝ: Επιστροφή. 190 00:08:50,040 --> 00:08:50,870 >> JASON Hirschhorn: Επιστροφή. 191 00:08:50,870 --> 00:08:53,230 Έτσι, κάθε φορά που βλέπετε μια δήλωση επιστροφής, τα άκρα λειτουργία 192 00:08:53,230 --> 00:08:54,350 όταν χτυπά αυτό. 193 00:08:54,350 --> 00:08:56,740 Έτσι, δυαδική αναζήτηση θα χτυπήσει την επιστροφή του. 194 00:08:56,740 --> 00:09:01,360 Αυτό το μέρος της μνήμης ουσιαστικά θα να ελευθερωθεί. 195 00:09:01,360 --> 00:09:03,510 Και κύρια θα πάει πίσω στην εκτέλεση. 196 00:09:03,510 --> 00:09:07,240 Έτσι, κύρια θα σταματήσει όπου ήταν, κλήση δυαδική αναζήτηση, να πάρετε κάποια τιμή επιστροφής, 197 00:09:07,240 --> 00:09:08,700 και να συνεχίσει την εκτέλεση. 198 00:09:08,700 --> 00:09:10,840 Αυτό το πλαίσιο στοίβας θα πάει μακριά. 199 00:09:10,840 --> 00:09:14,810 >> Αν καλέσετε μια αναδρομική συνάρτηση, η οποία είναι μια συνάρτηση που καλεί τον εαυτό της πάνω 200 00:09:14,810 --> 00:09:18,480 και άνω, θα μπορούσε να πάρει - λέμε έκανε δυαδική αναζήτηση αναδρομικά. 201 00:09:18,480 --> 00:09:21,520 Εμείς μπορεί να πάρει δυαδική αναζήτηση μία εκδοχή, δυαδική αναζήτηση δύο, δυαδική αναζήτηση 202 00:09:21,520 --> 00:09:24,090 τρεις, τέσσερις δυαδική αναζήτηση, δυαδική αναζήτηση πέντε. 203 00:09:24,090 --> 00:09:27,950 Και τότε αυτή η τελική δυαδική αναζήτηση πέντε θα χτυπήσει τη βασική περίπτωση, και τη στοίβα 204 00:09:27,950 --> 00:09:31,010 πλαίσια θα πάει πίσω και να κρατήσει το κλείσιμο μέχρι να φτάσουμε πίσω στο κύριο. 205 00:09:31,010 --> 00:09:32,530 Μπορούμε να πάμε πέρα ​​αναδρομή σε λίγο. 206 00:09:32,530 --> 00:09:35,530 Αλλά όλα αυτά είναι για να πει, αν είστε καλώντας πολλαπλές λειτουργίες ταυτόχρονα, 207 00:09:35,530 --> 00:09:39,250 Θα υπάρξουν πολλαπλές στοίβα πλαισίων στη στοίβα. 208 00:09:39,250 --> 00:09:42,900 >> Ο σωρός, από την άλλη πλευρά, μέχρι εδώ, δεν είναι για τις λειτουργίες, 209 00:09:42,900 --> 00:09:44,380 όχι για τις τοπικές μεταβλητές. 210 00:09:44,380 --> 00:09:48,920 Είναι για κατανέμεται δυναμικά μεταβλητών. 211 00:09:48,920 --> 00:09:57,210 Έτσι, αυτά είναι μεταβλητές που μπορεί να είναι αρχικοποιηθεί είτε κύρια ή 212 00:09:57,210 --> 00:09:58,640 λειτουργούν ότι κύρια κλήσεις. 213 00:09:58,640 --> 00:10:00,790 Οπουδήποτε στον κώδικά σας, μπορεί να προετοιμαστεί. 214 00:10:00,790 --> 00:10:04,360 Και για να προετοιμαστεί μια δυναμικά κατανέμεται μεταβλητά. 215 00:10:04,360 --> 00:10:06,970 Ποιά ήταν η λειτουργία σε C χρησιμοποιούμε; 216 00:10:06,970 --> 00:10:07,600 >> ΣΠΟΥΔΑΣΤΩΝ: Malloc. 217 00:10:07,600 --> 00:10:09,240 >> JASON Hirschhorn: Malloc. 218 00:10:09,240 --> 00:10:10,800 Θα καλέσετε malloc. 219 00:10:10,800 --> 00:10:12,260 Μπορείτε να πάρετε ένα χώρο μνήμης. 220 00:10:12,260 --> 00:10:15,020 Και αυτός ο χώρος της μνήμης είναι στο σωρό. 221 00:10:15,020 --> 00:10:18,840 Και αυτός ο χώρος μνήμης μένει εκεί μέχρι να καλέστε δωρεάν. 222 00:10:18,840 --> 00:10:22,670 >> Έτσι, κατανέμεται δυναμικά μεταβλητές σωρός θα υπάρχει για όσο χρονικό διάστημα 223 00:10:22,670 --> 00:10:25,250 θέλουν να υπάρχουν, και δεν θα πάει μακριά έως ότου ρητά 224 00:10:25,250 --> 00:10:26,760 πείτε τους να πάνε μακριά. 225 00:10:26,760 --> 00:10:29,670 Μπορείτε να τα δημιουργήσετε σε μια λειτουργία. 226 00:10:29,670 --> 00:10:31,930 Στοίβα ότι η λειτουργία του πλαίσιο θα πάει μακριά. 227 00:10:31,930 --> 00:10:35,490 Αλλά αυτή η μεταβλητή θα εξακολουθούν να υπάρχουν στο σωρό μέχρι να απελευθερωθεί, 228 00:10:35,490 --> 00:10:39,650 ενδεχομένως με τη συνάρτηση που ονομάζεται δυαδική αναζήτηση ή οτιδήποτε άλλο. 229 00:10:39,650 --> 00:10:42,580 >> Έτσι, αυτές οι μεταβλητές σωρό μείνει εκεί για όσο χρονικό διάστημα θέλετε 230 00:10:42,580 --> 00:10:43,490 να μείνουν εκεί. 231 00:10:43,490 --> 00:10:46,090 Και παίρνουν θέσει εδώ. 232 00:10:46,090 --> 00:10:47,450 Και τότε η επόμενη παίρνει τεθεί εκεί. 233 00:10:47,450 --> 00:10:50,210 Θα συνεχίζω να συμπληρωθεί, και μείνετε εκεί μέχρι να καλέστε δωρεάν. 234 00:10:50,210 --> 00:10:52,870 >> Και, κατ 'ουσίαν, ο σωρός και η στοίβα, να πάρει στην ερώτηση Μάρκους, 235 00:10:52,870 --> 00:10:54,500 μεγαλώνουν προς το άλλο. 236 00:10:54,500 --> 00:10:57,730 Και αν τρέξει σε ένα άλλο, έχετε εξαντλήσει όλες τις δυνατότητες μνήμης σας 237 00:10:57,730 --> 00:11:01,330 υπολογιστή και το πρόγραμμα σας θα σταματήσουν γιατί δεν έχετε καμία περισσότερη μνήμη 238 00:11:01,330 --> 00:11:02,420 αφήνεται να χρησιμοποιήσει. 239 00:11:02,420 --> 00:11:07,290 Σε μεταξύ τους, υπάρχουν ενδεχομένως άλλα πράγματα. 240 00:11:07,290 --> 00:11:10,980 Αλλά για το πεδίο εφαρμογής αυτού του μαθήματος, θα Δεν χρειάζεται να ανησυχείτε για αυτό. 241 00:11:10,980 --> 00:11:12,020 >> Έτσι, αυτό ήταν η απάντηση στην ερώτησή σας. 242 00:11:12,020 --> 00:11:13,520 Μην ανησυχείτε για αυτό. 243 00:11:13,520 --> 00:11:15,550 Αλλά αυτό ήταν η μεγάλη απάντηση. 244 00:11:15,550 --> 00:11:17,800 Όλα όσα πρέπει να ξέρετε είναι η σωρού και η στοίβα θα - 245 00:11:17,800 --> 00:11:18,900 ένα ξεκινά στο κάτω μέρος. 246 00:11:18,900 --> 00:11:19,570 Η στοίβα κάνει. 247 00:11:19,570 --> 00:11:20,790 Ο σωρός είναι εκεί. 248 00:11:20,790 --> 00:11:21,990 Θα έρθουν πιο κοντά ο ένας στον άλλο. 249 00:11:21,990 --> 00:11:23,110 >> Και αν αγγίξει, αυτό είναι ένα πρόβλημα. 250 00:11:23,110 --> 00:11:24,500 Θα ξέμεινε από μνήμη. 251 00:11:24,500 --> 00:11:28,760 Αλλά επίσης, εκτός από την γνωρίζουν πού είναι, αυτό που είναι αποθηκευμένα τόσο στην 252 00:11:28,760 --> 00:11:30,512 στοίβα και να σωρού. 253 00:11:30,512 --> 00:11:31,410 Curtis. 254 00:11:31,410 --> 00:11:33,570 >> CURTIS: Όταν συγκρούονται, είναι ότι μια υπερχείλιση στοίβας; 255 00:11:33,570 --> 00:11:35,670 >> JASON Hirschhorn: Όταν συγκρούονται, αυτό δεν είναι μια υπερχείλιση στοίβας. 256 00:11:35,670 --> 00:11:38,340 Η υπερχείλιση της στοίβας είναι μια διαφορετική περιοχή ότι μπορούμε να πάμε πέρα, αν θέλετε να. 257 00:11:38,340 --> 00:11:40,020 Εντάξει, θα επανέλθω στο θέμα αυτό σε λίγο. 258 00:11:40,020 --> 00:11:42,730 >> ΦΟΙΤΗΤΗΣ: Ποια είναι η λέξη που ονομάζεται όταν χτυπούν ο ένας τον άλλο, η 259 00:11:42,730 --> 00:11:44,450 στοίβα και ο σωρός; 260 00:11:44,450 --> 00:11:46,640 >> JASON Hirschhorn: Προς το παρόν, μην ανησυχείτε. 261 00:11:46,640 --> 00:11:47,750 Απλά ξέρω - 262 00:11:47,750 --> 00:11:50,530 Θα απαντήσω αυτή την ερώτηση μετά το μάθημα. 263 00:11:50,530 --> 00:11:52,680 Αν τρέχουν σε κάθε άλλη, έτρεξε έξω της μνήμης, γιατί δεν υπάρχει πια 264 00:11:52,680 --> 00:11:53,330 χώρο εκεί. 265 00:11:53,330 --> 00:11:55,450 >> ΦΟΙΤΗΤΗΣ: Συγγνώμη, αυτό είναι ένα σφάλμα seg; 266 00:11:55,450 --> 00:11:58,710 >> JASON Hirschhorn: Ένα τμήμα σφάλμα μπορεί να κληθεί για - 267 00:11:58,710 --> 00:12:02,240 Εξαρτάται γιατί ονομάζεται η βλάβη του seg. 268 00:12:02,240 --> 00:12:06,260 Μερικές φορές, υπερχείλιση σας, θα λένε seg fault ως σφάλμα. 269 00:12:06,260 --> 00:12:08,180 >> ΦΟΙΤΗΤΗΣ: Τι γίνεται με dereferencing μια μηδενική μεταβλητή; 270 00:12:08,180 --> 00:12:10,040 Είναι αυτό ένα σφάλμα seg; 271 00:12:10,040 --> 00:12:11,480 >> JASON Hirschhorn: Έμμεση αναφορά ένα μηδενικό δείκτη - 272 00:12:11,480 --> 00:12:17,850 ΕΝΤΑΞΕΙ, έτσι εάν έχετε ένα δείκτη που τίθεται ίση με null, δείκτες, ανάκληση, 273 00:12:17,850 --> 00:12:20,270 διευθύνσεις μνήμης κατάστημα και τις τιμές τους. 274 00:12:20,270 --> 00:12:23,660 Και ένα μηδενικό δείκτη είναι ουσιαστικά αποθήκευση 0, το 0-ου 275 00:12:23,660 --> 00:12:26,670 την αντιμετώπιση της συγκεκριμένης μεταβλητής. 276 00:12:26,670 --> 00:12:30,010 Έτσι 0x, 0, 0, 0, 0, κ.λπ.. 277 00:12:30,010 --> 00:12:35,030 Αυτό 0-ου διεύθυνση μνήμης που δεν είναι στην εικόνα μας, αυτό είναι εκεί 278 00:12:35,030 --> 00:12:38,800 κάπου, ότι είναι αποκλειστικά για τον υπολογιστή. 279 00:12:38,800 --> 00:12:40,130 Εμείς δεν επιτρέπεται να το αγγίξει. 280 00:12:40,130 --> 00:12:44,680 >> Έτσι, όταν το πρόγραμμά σας είναι εκτέλεσης, εάν κάτι που προσπαθεί να πάει στη μνήμη 281 00:12:44,680 --> 00:12:48,990 διεύθυνση 0, γνωρίζει ότι ότι είναι μια κενή τιμή. 282 00:12:48,990 --> 00:12:50,820 Δεν ξέρει τίποτα δεν θα πρέπει να είναι εκεί. 283 00:12:50,820 --> 00:12:53,420 Έτσι, αν προσπαθήσετε να το χρησιμοποιήσετε κάτι εκεί και τη θεραπεία κάτι σαν να υπάρχει ή 284 00:12:53,420 --> 00:12:58,355 προσπαθεί να πάει σε αυτήν τη θέση, είστε πρόκειται να πάρει ένα σφάλμα seg ή σφάλμα. 285 00:12:58,355 --> 00:13:00,520 Μήπως αυτό απαντήσω στην ερώτησή σας; 286 00:13:00,520 --> 00:13:03,170 >> Και τώρα θα πάμε πίσω να τακτοποιήσουν υπερχείλιση. 287 00:13:03,170 --> 00:13:09,560 Τα πράγματα στη στοίβα, όπως εσείς έχετε ξαναδεί, σε - ας συντάξει μια στενή 288 00:13:09,560 --> 00:13:11,966 από ένα πλαίσιο στοίβας. 289 00:13:11,966 --> 00:13:15,050 Μπορεί ο καθένας να δει αυτό; 290 00:13:15,050 --> 00:13:16,650 Έτσι έχουμε στοίβα πλαίσιο μας. 291 00:13:16,650 --> 00:13:23,260 Σώζουμε σε μια σειρά ως ένα τοπικό μεταβλητή σε αυτή τη λειτουργία. 292 00:13:23,260 --> 00:13:29,510 Έτσι λένε σειρά μας έχει πέντε σημεία. 293 00:13:29,510 --> 00:13:33,230 Και τα πέντε από αυτά θα αποθηκεύονται σε αυτό το πλαίσιο στοίβας. 294 00:13:33,230 --> 00:13:37,540 >> Αν αρχίσετε να γράφετε πέρα ​​από το όρια αυτού του πίνακα - 295 00:13:37,540 --> 00:13:43,990 οπότε αν αρχίσετε να γράφετε σε, ας πούμε ότι είναι 0. 296 00:13:43,990 --> 00:13:46,800 Αυτοί είναι οι πέντε δείκτες του πίνακα μας. 297 00:13:46,800 --> 00:13:50,980 Αν αρχίσετε να γράφετε στο δείκτη 5, το οποίο δεν έχουμε όταν έχουμε ένα 298 00:13:50,980 --> 00:13:55,900 πίνακα μεγέθους 5, θα αρχίσετε να γράφετε σε Δείκτης 6, 7, 8, 9, μπορούμε να πάρουμε μια στοίβα 299 00:13:55,900 --> 00:13:57,960 Υπερχείλιση σφάλμα. 300 00:13:57,960 --> 00:14:00,510 >> Σε γενικές γραμμές δεν είναι - 301 00:14:00,510 --> 00:14:04,910 μάλλον θα μπει σε μπελάδες αν πας πάνω από ένα. 302 00:14:04,910 --> 00:14:08,640 Αλλά γενικά, θα μπει στο μεγαλύτερο πρόβλημα αν πάει πάνω από μια παρτίδα 303 00:14:08,640 --> 00:14:12,770 και να πάτε μέχρι στιγμής πάνω από αυτό που γράφετε πάνω από τη διεύθυνση επιστροφής που 304 00:14:12,770 --> 00:14:16,080 λειτουργία, η οποία βρίσκεται κατά τη κάτω μέρος του πλαισίου στοίβας. 305 00:14:16,080 --> 00:14:16,520 >> Διότι, έτσι δεν είναι; 306 00:14:16,520 --> 00:14:17,670 Μπορείτε - στο - συγνώμη. 307 00:14:17,670 --> 00:14:18,550 Όχι ", διότι το δικαίωμα." 308 00:14:18,550 --> 00:14:20,470 >> Στο πλαίσιο στοίβας, έχετε τοπικές μεταβλητές σας. 309 00:14:20,470 --> 00:14:27,090 Στο κάτω μέρος της στοίβας πλαίσιο είναι η διεύθυνση του αποστολέα. 310 00:14:27,090 --> 00:14:28,790 Αυτός είναι όπου η συνάρτηση πηγαίνει όταν είναι πάνω. 311 00:14:28,790 --> 00:14:33,750 Και αν αντικαταστήσετε ότι η επιστροφή διεύθυνση, τότε όταν αυτό το πλαίσιο στοίβας, 312 00:14:33,750 --> 00:14:36,680 όταν περνάτε μέσα από τη στοίβα το πλαίσιο και την εκτέλεση κάθε γραμμή, είστε 313 00:14:36,680 --> 00:14:40,350 πρόκειται να πάει στη νέα διεύθυνση επιστροφής σας ότι είναι γραμμένο εκεί, αντί της 314 00:14:40,350 --> 00:14:40,910 πραγματική. 315 00:14:40,910 --> 00:14:45,050 Και αυτό είναι το πώς έχουμε δει ορισμένες παραβιάσεις της ασφάλειας 316 00:14:45,050 --> 00:14:46,780 μπορεί να συμβεί με τους υπολογιστές. 317 00:14:46,780 --> 00:14:52,760 >> Έτσι υπερχείλιση, με λίγα λόγια, είναι όταν μπορείτε να αντικαταστήσετε το μέρος του stack 318 00:14:52,760 --> 00:14:55,440 είστε υποτίθεται για να χρησιμοποιήσετε, την τοπική μεταβλητή που υποτίθεται ότι πρέπει να χρησιμοποιήσετε, και 319 00:14:55,440 --> 00:14:58,070 ιδίως όταν ξεκινάτε την αντικατάσταση σημαντικά πράγματα, όπως η 320 00:14:58,070 --> 00:14:59,100 διεύθυνση επιστρέψει. 321 00:14:59,100 --> 00:15:00,090 Και αυτό είναι όπου θα πάρετε ένα λάθος. 322 00:15:00,090 --> 00:15:03,980 Ή ίσως ακόμη και θα μπορούσε να αρχίσει ακόμη και εγγράφως σε - 323 00:15:03,980 --> 00:15:05,370 λένε δυαδική αναζήτηση ήταν δεξιά πάνω από την κύρια. 324 00:15:05,370 --> 00:15:07,790 Αν διέγραφε πολύ, θα μπορούσε να γράψει σε κύρια. 325 00:15:07,790 --> 00:15:10,230 Αλλά γενικά, μπορείτε να πάρετε ένα λάθος πριν τότε, επειδή ο υπολογιστής γνωρίζει 326 00:15:10,230 --> 00:15:12,270 κάνεις κάτι που Δεν πρέπει να κάνουμε. 327 00:15:12,270 --> 00:15:12,560 Ναι. 328 00:15:12,560 --> 00:15:13,910 >> ΦΟΙΤΗΤΗΣ: Ποια είναι η διαφορά μεταξύ υπερχείλιση στοίβας 329 00:15:13,910 --> 00:15:16,940 και υπερχείλιση του buffer; 330 00:15:16,940 --> 00:15:19,420 >> JASON Hirschhorn: Υπερχείλιση είναι μια πιο γενική τύπο 331 00:15:19,420 --> 00:15:20,395 αυτό που μόλις περιέγραψα. 332 00:15:20,395 --> 00:15:22,610 >> ΦΟΙΤΗΤΗΣ: Έτσι, μια υπερχείλιση στοίβας είναι ένα παράδειγμα της υπερχείλισης buffer. 333 00:15:22,610 --> 00:15:23,420 >> JASON Hirschhorn: Ακριβώς. 334 00:15:23,420 --> 00:15:28,700 Αυτό είναι ένας πίνακας που μπορούμε να σκεφτούμε ως buffer, ένα χώρο για να πάνε τα πράγματα μέσα 335 00:15:28,700 --> 00:15:30,600 Αυτό είναι ένα buffer υπερχείλιση στοίβας. 336 00:15:30,600 --> 00:15:33,210 Θα μπορούσαμε να έχουμε ένα σωρό υπερχείλιση buffer. 337 00:15:33,210 --> 00:15:36,870 Αν υπήρχε ένα ρυθμιστικό διάλυμα, το οποίο συχνά υπάρχει είναι ένας πίνακας ο σωρός, και εμείς 338 00:15:36,870 --> 00:15:40,600 σβήσατε κάποιες από τις όρια, τότε θα πρέπει, έχουν ένα σωρό buffer υπερχείλιση. 339 00:15:40,600 --> 00:15:44,870 >> Και πέρα ​​από το πεδίο αυτού του μαθήματος, από όπου και αν εντοπιστεί λίγο διαφορετικά. 340 00:15:44,870 --> 00:15:48,040 Ο compiler έχει ιδιαίτερη τρόποι ανίχνευσης κάθε μία. 341 00:15:48,040 --> 00:15:50,660 Αλλά υπερχείλιση του buffer είναι μια πιο γενική τύπου από αυτά που περιγράφονται, 342 00:15:50,660 --> 00:15:54,090 η οποία ήταν ένα buffer υπερχείλιση στοίβας. 343 00:15:54,090 --> 00:15:56,240 Μήπως ότι απαντήσω στην ερώτησή σας; 344 00:15:56,240 --> 00:15:57,910 Sweet. 345 00:15:57,910 --> 00:16:01,850 >> Υπήρχαν άλλες ερωτήσεις σχετικές στη στοίβα ή σωρού; 346 00:16:01,850 --> 00:16:04,920 347 00:16:04,920 --> 00:16:05,510 Ναι. 348 00:16:05,510 --> 00:16:08,220 >> ΦΟΙΤΗΤΗΣ: Ξέρω ότι έχετε την ελεύθερη χορδές επειδή είναι στο σωρό 349 00:16:08,220 --> 00:16:09,305 και δεν θέλετε να διαρρεύσει μνήμη. 350 00:16:09,305 --> 00:16:12,240 Αλλά δεν θα πρέπει να ελευθερώσετε καθολικές μεταβλητές και τέτοια πράγματα; 351 00:16:12,240 --> 00:16:14,335 Ή είναι αυτοί απελευθερώθηκαν αυτόματα; 352 00:16:14,335 --> 00:16:15,700 >> JASON Hirschhorn: Καλή ερώτηση. 353 00:16:15,700 --> 00:16:22,340 Έτσι, CS50.H, έχουμε δημιουργήσει αυτό το πράγμα για σας που ονομάζεται ένα string. 354 00:16:22,340 --> 00:16:23,800 Ένα string είναι πραγματικά αυτό; 355 00:16:23,800 --> 00:16:24,810 >> ΦΟΙΤΗΤΗΣ: Χαρ αστέρι. 356 00:16:24,810 --> 00:16:29,180 >> JASON Hirschhorn: Ένα αστέρι char, ένας δείκτης σε ένα χαρακτήρα, ένα δείκτη για να 357 00:16:29,180 --> 00:16:30,650 μια σειρά χαρακτήρων. 358 00:16:30,650 --> 00:16:32,210 Αυτό είναι ό, τι η σειρά είναι. 359 00:16:32,210 --> 00:16:36,050 Γι 'αυτό και πρέπει να το ελευθερώσει, γιατί GetString, την οποία χρησιμοποιήσαμε πολλά - 360 00:16:36,050 --> 00:16:38,370 συμβολοσειρά ονόματος ισούται GetString - 361 00:16:38,370 --> 00:16:43,560 ότι mallocs για μας κάποια μνήμη για την σωρό και στη συνέχεια επιστρέφει ένα δείκτη προς το 362 00:16:43,560 --> 00:16:47,230 πρώτος χαρακτήρας του εν λόγω εγχόρδων, ένα αστέρι char. 363 00:16:47,230 --> 00:16:52,760 >> Έτσι, δήθεν, αν δεν έχουν γραπτώς δωρεάν σε οποιοδήποτε από χορδές σας 364 00:16:52,760 --> 00:16:55,600 ότι έχετε ονομάζεται μέχρι σήμερα, έχετε έχουν κάποια διαρροή μνήμης. 365 00:16:55,600 --> 00:16:57,430 Φυσικά δεν έχουμε μιλήσει για αυτό, έτσι ώστε κανείς δεν πάρει το 366 00:16:57,430 --> 00:16:58,520 πρόβλημα για να γίνει αυτό. 367 00:16:58,520 --> 00:16:59,980 Αλλά να πάμε μπροστά, ναι. 368 00:16:59,980 --> 00:17:03,990 Όταν καλείτε GetString, είστε mallocing λίγο χώρο στο σωρό. 369 00:17:03,990 --> 00:17:07,640 Και αν δεν καλέσετε δωρεάν αργότερα ότι string, θα έχετε μια διαρροή μνήμης. 370 00:17:07,640 --> 00:17:09,440 Αυτό απαντήσω στην ερώτησή σας; 371 00:17:09,440 --> 00:17:10,606 >> Ναι 372 00:17:10,606 --> 00:17:15,020 >> ΦΟΙΤΗΤΗΣ: Έτσι για να το κάνουμε αυτό, χρησιμοποιούμε Το δικαίωμα ελεύθερης πριν από την επιστροφή; 373 00:17:15,020 --> 00:17:18,510 Όπως, εντός του πεδίου εφαρμογής του, υποθέτω, αν λέμε, όπως, int main, στο πλαίσιο της 374 00:17:18,510 --> 00:17:24,410 πεδίο εφαρμογής του κώδικα που είναι σε εκείνες αγκύλες, ακριβώς πριν - 375 00:17:24,410 --> 00:17:26,140 ξέρετε πού θα έπαιρνα συνήθως τίθεται επιστροφή. 376 00:17:26,140 --> 00:17:27,950 Μην βάζετε δωρεάν πριν από αυτό; 377 00:17:27,950 --> 00:17:31,000 >> JASON Hirschhorn: Έτσι μπορείτε να βάλετε δωρεάν όπου θέλετε να βάλετε δωρεάν. 378 00:17:31,000 --> 00:17:33,810 Επειδή αυτά διατίθενται δυναμικά μεταβλητές, επειδή μπορούν να 379 00:17:33,810 --> 00:17:39,170 ζουν πέρα ​​από το πεδίο εφαρμογής του συγκεκριμένου λειτουργία, εάν καλέσετε malloc σε ένα 380 00:17:39,170 --> 00:17:44,140 ξεχωριστή λειτουργία, για παράδειγμα, GetString, μπορείτε να καλέσετε δωρεάν στο κεντρικό. 381 00:17:44,140 --> 00:17:46,050 Δεν χρειάζεται να το ονομάσουμε στη συγκεκριμένη λειτουργία 382 00:17:46,050 --> 00:17:47,570 malloc όπου λέγεται. 383 00:17:47,570 --> 00:17:50,340 Αλλά χρειάζεται να το ονομάσουμε πριν από τα κύρια αποδόσεις. 384 00:17:50,340 --> 00:17:51,120 >> Και αυτό εξαρτάται πραγματικά. 385 00:17:51,120 --> 00:17:54,960 Εξαρτάται από το γιατί malloced ότι χώρο στην πρώτη θέση. 386 00:17:54,960 --> 00:17:57,320 Μερικοί άνθρωποι θα καλέσει ελευθερώσει αρκετά γρήγορα. 387 00:17:57,320 --> 00:17:59,220 Μερικοί άνθρωποι δεν θα καλέσετε δωρεάν μέχρι το τέλος του προγράμματος τους. 388 00:17:59,220 --> 00:18:00,660 Και θα περάσουν και όλα δωρεάν. 389 00:18:00,660 --> 00:18:03,597 Εξαρτάται από το γιατί ονομάζεται malloc. 390 00:18:03,597 --> 00:18:11,270 >> ΦΟΙΤΗΤΗΣ: Και τι θα λέγατε αν σας κάλεσε χρήση GetString; 391 00:18:11,270 --> 00:18:13,320 Θα έλεγα ότι χωρίς αυτό; 392 00:18:13,320 --> 00:18:20,040 >> JASON Hirschhorn: Έτσι, η σύνταξη για δωρεάν είναι απλά ελεύθερη, ανοικτή paren, κοντά 393 00:18:20,040 --> 00:18:22,130 paren, και το όνομα του δείκτη. 394 00:18:22,130 --> 00:18:26,410 Έτσι, αν έχετε γράψει το όνομα συμβολοσειράς ισούται GetString, βάζετε το όνομα εδώ. 395 00:18:26,410 --> 00:18:27,760 Αυτό είναι το όνομα του δείκτη. 396 00:18:27,760 --> 00:18:30,570 Και ξέρει να ελευθερώσει εκείνη την μνήμη. 397 00:18:30,570 --> 00:18:33,920 >> ΦΟΙΤΗΤΗΣ: Έτσι, όταν ελευθερώνει ότι η μνήμη, ο δείκτης εξακολουθεί να παραπέμπει σε αυτό το μέρος 398 00:18:33,920 --> 00:18:34,970 στη μνήμη; 399 00:18:34,970 --> 00:18:39,020 Ή είναι ο δείκτης επίσης αδειάσει από η διεύθυνση που δείχνει. 400 00:18:39,020 --> 00:18:40,290 >> JASON Hirschhorn: Θα πρέπει να προσπαθήσουμε αυτό. 401 00:18:40,290 --> 00:18:41,430 Θα πρέπει να προγραμματίσετε εκείνο. 402 00:18:41,430 --> 00:18:43,880 Ας επανέλθουμε όταν έχουμε την ευκαιρία να κωδικοποίησης, και ας προγραμματίσετε εκείνο. 403 00:18:43,880 --> 00:18:46,000 Και αν θέλετε να υπολογίσετε την απάντηση με αυτό, μπορείτε επίσης να κώδικα που 404 00:18:46,000 --> 00:18:46,690 εν τω μεταξύ. 405 00:18:46,690 --> 00:18:49,100 Αλλά αυτό είναι ένα μεγάλο ερώτημα. 406 00:18:49,100 --> 00:18:53,480 >> ΦΟΙΤΗΤΗΣ: Είναι δυνατόν να ελεύθερο κάτι πάρα πολύ σύντομα; 407 00:18:53,480 --> 00:18:58,530 Έτσι χρειάζεστε ακόμα για το πρόγραμμά σας, και θα απελευθερωθεί αυτό το χώρο μνήμης; 408 00:18:58,530 --> 00:18:59,200 >> JASON Hirschhorn: Ναι. 409 00:18:59,200 --> 00:19:03,020 Είναι δυνατό, αν έχετε κάτι ελεύθερο και στη συνέχεια να το χρησιμοποιήσετε ξανά, θα σας 410 00:19:03,020 --> 00:19:06,890 τρέχει σε ένα σφάλμα. 411 00:19:06,890 --> 00:19:10,810 Αλλά αυτό είναι για σας, γιατί απελευθέρωσε κάτι και στη συνέχεια κάλεσε αργότερα. 412 00:19:10,810 --> 00:19:13,940 Έτσι, αυτό ήταν το λάθος ενός προγραμματιστή. 413 00:19:13,940 --> 00:19:14,780 Αλλά ναι. 414 00:19:14,780 --> 00:19:17,760 Θα μπορούσατε να γράψετε αυτό. 415 00:19:17,760 --> 00:19:19,240 >> Οποιεσδήποτε ερωτήσεις σχετικά με - 416 00:19:19,240 --> 00:19:19,760 Ναι. 417 00:19:19,760 --> 00:19:22,820 >> ΦΟΙΤΗΤΗΣ: Έτσι, εάν είστε υποτίθεται για να απλά ελευθερώσετε το σε γενικές γραμμές πριν από την 418 00:19:22,820 --> 00:19:25,490 λήξη του προγράμματος, αυτό σημαίνει ότι αν η λήξη του προγράμματος και να μην το ελεύθερο, 419 00:19:25,490 --> 00:19:27,580 ότι η μνήμη είναι ακόμα διατεθεί; 420 00:19:27,580 --> 00:19:31,330 >> JASON Hirschhorn: Εάν το πρόγραμμά σας τελειώνει και ξεχάσετε να απελευθερώσει κάτι, τότε 421 00:19:31,330 --> 00:19:34,390 ότι η μνήμη διατέθηκε σε όλη την η διάρκεια ζωής του προγράμματός σας. 422 00:19:34,390 --> 00:19:37,670 Όταν ένα πρόγραμμα κλείνει εντελώς, ότι η μνήμη δεν πρόκειται 423 00:19:37,670 --> 00:19:39,490 να μείνει εκεί για πάντα. 424 00:19:39,490 --> 00:19:42,080 Ο υπολογιστής είναι αρκετά έξυπνος για να ξέρω ότι όταν το πρόγραμμα κλείνει, αυτό 425 00:19:42,080 --> 00:19:46,440 πρέπει να απαλλαγούμε από όλες της μνήμης που συνδέθηκε με αυτό το πρόγραμμα. 426 00:19:46,440 --> 00:19:51,240 >> Ωστόσο, υπάρχουν εργαλεία που μπορείτε να εκτελέσετε σε ένα πρόγραμμα για να ανιχνεύσει αν, όταν η 427 00:19:51,240 --> 00:19:54,720 το πρόγραμμα τελείωσε, έχετε ξεχάσει να ελευθερώσετε λίγη μνήμη. 428 00:19:54,720 --> 00:19:57,960 Και για το επόμενο πρόβλημα που σας όπου θα χρησιμοποιείτε malloc και χρησιμοποιώντας 429 00:19:57,960 --> 00:20:02,610 δείκτες, θα τρέχετε αυτό προγραμματίσετε το πρόγραμμά σας για να δείτε εάν, 430 00:20:02,610 --> 00:20:06,530 όταν ο κύριος επιστρέφει, είχατε κάποια πράγματα που έμειναν unfreed. 431 00:20:06,530 --> 00:20:09,130 >> Έτσι, δεν πρόκειται να μείνει malloced πάντα στον υπολογιστή σας. 432 00:20:09,130 --> 00:20:11,720 Αυτό θα ήταν σπατάλη, διότι πολύ γρήγορα, υπολογιστές 433 00:20:11,720 --> 00:20:12,960 θα ξεμείνει από μνήμη. 434 00:20:12,960 --> 00:20:16,450 Αλλά αν διαρκέσει μέχρι το τέλος του σας προγραμματίσετε και δεν είστε απελευθερωθεί και σας 435 00:20:16,450 --> 00:20:20,260 πρόγραμμα βγαίνει, αυτό είναι ακόμα ένα πρόβλημα ότι το εργαλείο αυτό θα σας βοηθήσει να αντιμετωπίσει. 436 00:20:20,260 --> 00:20:21,520 >> ΦΟΙΤΗΤΗΣ: Είναι αυτό Valgrind; 437 00:20:21,520 --> 00:20:22,910 >> JASON Hirschhorn: Είναι ονομάζεται Valgrind. 438 00:20:22,910 --> 00:20:23,520 Και θα είναι - 439 00:20:23,520 --> 00:20:25,780 >> ΦΟΙΤΗΤΗΣ: Αλλά εμείς δεν πρέπει να γνωρίζουμε ότι για το κουίζ, όμως; 440 00:20:25,780 --> 00:20:27,600 Θέλω να πω, ήταν κάτι που συζητιόταν λίγο στη διάλεξη. 441 00:20:27,600 --> 00:20:33,600 >> JASON Hirschhorn: Έτσι Valgrind είναι το όνομα του εν λόγω εργαλείου. 442 00:20:33,600 --> 00:20:37,180 Γνωρίζοντας αυτό που κάνει είναι αρκετό για το κουίζ. 443 00:20:37,180 --> 00:20:40,200 Αλλά δεν έχουν ακόμη χρησιμοποιηθεί σε σας πρόβλημα που, επειδή δεν είχαμε ένα 444 00:20:40,200 --> 00:20:43,520 πρόβλημα σύνολο που έχει ασχοληθεί ρητά με malloc ή χρησιμοποιείτε malloc. 445 00:20:43,520 --> 00:20:45,330 Έτσι, δεν έχετε χρησιμοποιήσει Valgrind ακόμα. 446 00:20:45,330 --> 00:20:47,760 Αλλά θα το χρησιμοποιήσει νωρίτερα παρά αργότερα. 447 00:20:47,760 --> 00:20:48,710 >> ΦΟΙΤΗΤΗΣ: Μπορείτε να επαναλάβετε τι Valgrind είναι; 448 00:20:48,710 --> 00:20:49,190 >> JASON Hirschhorn: Συγγνώμη; 449 00:20:49,190 --> 00:20:51,240 >> ΦΟΙΤΗΤΗΣ: Μπορείτε να το επαναλάβετε αυτό ο σκοπός του Valgring είναι; 450 00:20:51,240 --> 00:20:53,100 >> JASON Hirschhorn: Valgrind είναι το όνομα - 451 00:20:53,100 --> 00:20:59,890 όπως GDB σας βοηθά να debug το πρόγραμμά σας, Valgrind σας βοηθά να καταλάβουμε αν 452 00:20:59,890 --> 00:21:03,210 τα πράγματα δεν έχουν ελευθερωθεί όταν το πρόγραμμα σας κλείνει. 453 00:21:03,210 --> 00:21:05,110 Έτσι θα το τρέξει το πρόγραμμά σας. 454 00:21:05,110 --> 00:21:09,230 Και το πρόγραμμά σας βγαίνει, και θα πω το πρόγραμμά σας ονομάζεται malloc αυτό πολλές 455 00:21:09,230 --> 00:21:13,670 φορές για αυτό πολλές bytes, και μόνο που ονομάζονται ελεύθερες αυτό πολλές φορές. 456 00:21:13,670 --> 00:21:16,520 Και έτσι θα αφήσει αυτά τα πολλά bytes χωρίς την απελευθέρωσή τους. 457 00:21:16,520 --> 00:21:18,050 Ή θα πούμε ότι έχετε απελευθερωθεί πάντα. 458 00:21:18,050 --> 00:21:19,070 Καλή δουλειά. 459 00:21:19,070 --> 00:21:19,480 >> ΣΠΟΥΔΑΣΤΩΝ: OK. 460 00:21:19,480 --> 00:21:21,060 Και αυτό λέγεται Valgring; 461 00:21:21,060 --> 00:21:24,940 >> JASON Hirschhorn: V-Α-Ε-G-R-Ι-Ν-ϋ. 462 00:21:24,940 --> 00:21:25,970 >> ΦΟΙΤΗΤΗΣ: Μια ερώτηση σχετικά με τους δείκτες. 463 00:21:25,970 --> 00:21:30,080 Έτσι λένε έχετε ν αστέρων x ισούται με κάτι. 464 00:21:30,080 --> 00:21:33,330 Αυτό ισοδυναμεί, ό, τι βάζετε εκεί, είναι ότι αυτό που είναι να τεθούν στο εσωτερικό 465 00:21:33,330 --> 00:21:36,120 Τι είναι το Χ επισημαίνοντας, ή ο δείκτης του x; 466 00:21:36,120 --> 00:21:37,690 >> JASON Hirschhorn: Μπορείς επαναλάβω την ερώτηση; 467 00:21:37,690 --> 00:21:39,340 Μπορούμε να αντλήσει, ενώ μπορείτε να το πω; 468 00:21:39,340 --> 00:21:42,710 >> ΦΟΙΤΗΤΗΣ: Στο κουίζ, στην πραγματικότητα, η αυτό που μας έστειλε, ήταν σαν, char 469 00:21:42,710 --> 00:21:46,520 αλήθεια αστέρι ισοδυναμεί βράχια CS50, σωστά; 470 00:21:46,520 --> 00:21:52,190 Έτσι, αυτό σημαίνει ότι η εν λόγω πετρώματα CS50 είναι ποια είναι η αλήθεια δείχνει να; 471 00:21:52,190 --> 00:21:55,810 >> JASON Hirschhorn: Δηλαδή μιλάς σχετικά με ένα αστέρι char σε μια σειρά, πώς 472 00:21:55,810 --> 00:21:56,460 που λειτουργεί; 473 00:21:56,460 --> 00:21:56,890 Ναι. 474 00:21:56,890 --> 00:21:57,700 OK. 475 00:21:57,700 --> 00:21:59,140 Ας συντάξει αυτό εδώ. 476 00:21:59,140 --> 00:22:07,100 >> [SIDE CONVERSATION] 477 00:22:07,100 --> 00:22:11,130 >> JASON Hirschhorn: Έτσι, αυτή η μεταβλητή πρόκειται να είναι του τύπου αστέρι char. 478 00:22:11,130 --> 00:22:14,580 Πόσο μεγάλη είναι μια μεταβλητή τύπου char αστέρι; 479 00:22:14,580 --> 00:22:15,510 Πόσα bytes; 480 00:22:15,510 --> 00:22:16,450 >> ΜΑΘΗΤΕΣ: Four. 481 00:22:16,450 --> 00:22:18,210 >> JASON Hirschhorn: Είναι τεσσάρων bytes. 482 00:22:18,210 --> 00:22:21,420 Πόσα δικαιώματα είναι μια μεταβλητή τύπου int αστέρι; 483 00:22:21,420 --> 00:22:22,210 >> ΜΑΘΗΤΕΣ: Four. 484 00:22:22,210 --> 00:22:24,910 >> JASON Hirschhorn: Τέσσερα bytes. 485 00:22:24,910 --> 00:22:28,280 Αν είναι ένας δείκτης, τότε είναι πάντα τέσσερα bytes, επειδή δείκτες, τους 486 00:22:28,280 --> 00:22:30,070 αξία είναι μια διεύθυνση μνήμης. 487 00:22:30,070 --> 00:22:35,160 Και διευθύνσεις μνήμης για το CS50 συσκευής είναι τέσσερα bytes. 488 00:22:35,160 --> 00:22:42,900 Έτσι, όταν λέμε GetString, ή όταν ας πούμε, stringname ισούται με, και στη συνέχεια, 489 00:22:42,900 --> 00:22:46,140 διπλά εισαγωγικά θέσει μια σειρά, θέτουμε - 490 00:22:46,140 --> 00:22:46,920 καλά, αυτό είναι λίγο διαφορετικό. 491 00:22:46,920 --> 00:22:48,630 Θα κάνει GetString ως παράδειγμα. 492 00:22:48,630 --> 00:22:52,150 Ή κάτι char αστέρων ισούται με το string. 493 00:22:52,150 --> 00:22:54,360 Συγνώμη, να μου δώσει το παράδειγμα ότι έχετε διαβάσει; 494 00:22:54,360 --> 00:22:57,590 >> ΦΟΙΤΗΤΗΣ: char αλήθεια αστέρι ισούται «Οι βράχοι CS50" σε διπλά εισαγωγικά. 495 00:22:57,590 --> 00:23:02,260 >> JASON Hirschhorn: Έτσι, αυτό το αστέρι, αυτό θα καλέσει αυτήν τη μεταβλητή x για μας 496 00:23:02,260 --> 00:23:04,060 γενικής σκοπούς. 497 00:23:04,060 --> 00:23:05,970 Έχουμε δημιουργήσει μια μεταβλητή που ονομάζεται x. 498 00:23:05,970 --> 00:23:07,610 Είναι τύπου αστέρι char. 499 00:23:07,610 --> 00:23:10,950 Είναι ένας δείκτης σε μια σειρά των χαρακτήρων. 500 00:23:10,950 --> 00:23:12,200 Έτσι, εδώ κάτω - 501 00:23:12,200 --> 00:23:23,710 502 00:23:23,710 --> 00:23:25,890 >> Έτσι, αυτό είναι το πώς αυτό θα εργάζονται στη μνήμη. 503 00:23:25,890 --> 00:23:27,410 Αυτό θα αποθηκεύσει μια διεύθυνση μνήμης. 504 00:23:27,410 --> 00:23:31,770 Θα αποθηκεύσετε τη διεύθυνση μνήμης του ο πρώτος χαρακτήρας στη συστοιχία. 505 00:23:31,770 --> 00:23:33,830 Και στη συνέχεια, όταν έχετε ακολουθήσει ο δείκτης, θα κάνατε 506 00:23:33,830 --> 00:23:35,200 να πάρει τον πρώτο χαρακτήρα. 507 00:23:35,200 --> 00:23:38,780 >> Και αν είστε ανάγνωση αυτό το πράγμα, όπως μια σειρά, ο υπολογιστής σας είναι έξυπνη 508 00:23:38,780 --> 00:23:42,930 αρκετά για να γνωρίζουμε, να διαβάσετε όλο αυτό το πράγμα μέχρι να φτάσει σε μια σπασμωδική κίνηση 0. 509 00:23:42,930 --> 00:23:45,530 Αλλά αν είστε ανάγνωση ενός χαρακτήρα σε ένα χρόνο, ώστε να είστε επανάληψη μέσα 510 00:23:45,530 --> 00:23:49,910 αυτή η σειρά, τότε θα διαβάσει μόνο ένα χαρακτήρα κάθε φορά μέχρι να φτάσετε στο 511 00:23:49,910 --> 00:23:50,850 backslash 0. 512 00:23:50,850 --> 00:23:52,335 Αυτό δεν μπορεί να απαντήσει σας ερώτημα, όμως. 513 00:23:52,335 --> 00:23:55,610 >> ΦΟΙΤΗΤΗΣ: Ναι, αλλά δεν έχετε malloced ότι ο χώρος 514 00:23:55,610 --> 00:23:58,400 ακόμη για αυτό το δείκτη. 515 00:23:58,400 --> 00:24:02,510 >> JASON Hirschhorn: Γι 'αυτό δεν είμαι σίγουρος ακριβώς αυτό που ψάχνετε σε, 516 00:24:02,510 --> 00:24:03,640 επειδή δεν είχα κάνει αυτό το κουίζ. 517 00:24:03,640 --> 00:24:06,370 Αυτό υποτίθεται ότι είναι ένα χρήσιμο πόρων από άλλο TF. 518 00:24:06,370 --> 00:24:11,380 Εάν δημιουργείτε μια σειρά σχετικά με την στοίβα ή ως μια τοπική μεταβλητή, αυτό θα 519 00:24:11,380 --> 00:24:16,920 απλά να είναι σειρά των τελών και όχι γενικά ένα αστέρι char επισημαίνοντας 520 00:24:16,920 --> 00:24:18,600 μια άλλη σειρά. 521 00:24:18,600 --> 00:24:20,550 Αλλά δεν ξέρω. 522 00:24:20,550 --> 00:24:25,065 Αυτό θα μπορούσε να είναι ένας δείκτης σε ένα άλλο σειρά στη στοίβα, καθώς και. 523 00:24:25,065 --> 00:24:27,240 Ναι. 524 00:24:27,240 --> 00:24:31,116 >> ΦΟΙΤΗΤΗΣ: Ξέρω ότι θα πρέπει να εκχώρηση μνήμης, αν ο δείκτης είναι 525 00:24:31,116 --> 00:24:33,360 να πάρει δηλώνονται μέσα από μια άλλη λειτουργία. 526 00:24:33,360 --> 00:24:36,740 Μήπως θα πρέπει να κάνουν το ίδιο πράγμα, αν είναι που δηλώνονται μέσα από τις κύριες, 527 00:24:36,740 --> 00:24:39,570 αν το χρησιμοποιείτε στο εσωτερικό των κύριων; 528 00:24:39,570 --> 00:24:43,590 >> JASON Hirschhorn: Ναι λοιπόν. 529 00:24:43,590 --> 00:24:46,670 Μπορείτε να δηλώσετε ένα δείκτη σε οποιαδήποτε διεύθυνση μνήμης στη μνήμη. 530 00:24:46,670 --> 00:24:51,440 Μπορεί να είναι η διεύθυνση της μνήμης ενός τοπικού μεταβλητή, αν και πολλές φορές, 531 00:24:51,440 --> 00:24:55,760 οι άνθρωποι δεν δηλώνουν διευθύνσεις μνήμης με τις τοπικές μεταβλητές επειδή πηγαίνουν 532 00:24:55,760 --> 00:24:59,890 μακριά από τη στιγμή που η συνάρτηση επιστρέφει, η οποία Γι 'αυτό malloc γενικά πράγματα. 533 00:24:59,890 --> 00:25:04,630 Αλλά ναι, θα μπορούσε να κηρύξει ένα δείκτη σε μια άλλη τοπική μεταβλητή. 534 00:25:04,630 --> 00:25:06,360 Είναι απλά γενικά δεν γίνεται. 535 00:25:06,360 --> 00:25:09,480 Αλλά μπορώ να ρίξετε μια ματιά σε αυτό συγκεκριμένο πράγμα μετά το μάθημα. 536 00:25:09,480 --> 00:25:10,650 Ναι. 537 00:25:10,650 --> 00:25:12,350 >> ΦΟΙΤΗΤΗΣ: Νομίζω ότι αυτό είναι το είδος από ό, τι του έχει ζητηθεί. 538 00:25:12,350 --> 00:25:16,930 Φαίνεται παράξενο να αρχικοποίηση ένας δείκτης όχι ως 539 00:25:16,930 --> 00:25:20,760 διεύθυνση, αλλά ως αυτό Φαίνεται σαν μια αξία. 540 00:25:20,760 --> 00:25:25,970 Φαίνεται σαν ο CS50 είναι ό, τι είναι μέσα το πράγμα που επεσήμανε και 541 00:25:25,970 --> 00:25:28,820 δεν είναι η πραγματική διεύθυνση, έτσι δεν είναι; 542 00:25:28,820 --> 00:25:30,520 >> JASON Hirschhorn: Έτσι ώστε να είναι Δεν συμβαίνει, όμως. 543 00:25:30,520 --> 00:25:32,470 Αυτό δεν είναι ό, τι συμβαίνει. 544 00:25:32,470 --> 00:25:35,910 Όταν δηλώνετε ένα αστέρι char, είναι μια διεύθυνση μνήμης. 545 00:25:35,910 --> 00:25:38,860 Οι δείκτες είναι όλες οι διευθύνσεις μνήμης που δείχνουν προς κάτι άλλο. 546 00:25:38,860 --> 00:25:41,480 Αυτό το κάτι άλλο θα μπορούσε να είναι η στοίβα, αλλά σχεδόν πάντα είναι σχετικά με την 547 00:25:41,480 --> 00:25:43,440 σωρού με τον τρόπο που θα δούμε να χρησιμοποιηθεί. 548 00:25:43,440 --> 00:25:46,860 549 00:25:46,860 --> 00:25:53,500 Αλλά stringname ισούται με διπλά εισαγωγικά "GetString," μπορούμε να δούμε ότι και εμείς 550 00:25:53,500 --> 00:25:55,010 μπορεί να κοιτάξει μέσα από αυτό και να προγραμματίσετε εκείνο. 551 00:25:55,010 --> 00:26:01,190 GetString χορδών δεν αποθηκεύονται στο ότι η μεταβλητή, ή ό, τι το string 552 00:26:01,190 --> 00:26:04,580 όνομα δεν αποθηκεύονται στο ότι μεταβλητή, όχι επειδή αυτό είναι το πώς 553 00:26:04,580 --> 00:26:06,070 δείκτες λειτουργούν. 554 00:26:06,070 --> 00:26:06,770 Μήπως αυτό έχει νόημα; 555 00:26:06,770 --> 00:26:07,170 >> ΦΟΙΤΗΤΗΣ: Ναι. 556 00:26:07,170 --> 00:26:08,570 >> JASON Hirschhorn: OK. 557 00:26:08,570 --> 00:26:11,690 Ας ελπίσουμε, ότι δεν ήταν συγχέοντας για κανέναν. 558 00:26:11,690 --> 00:26:15,732 Αλλά αν ήταν, μπορούμε να εξετάσουμε ξανά σε ένα κομμάτι, γιατί είμαστε στην πραγματικότητα θα 559 00:26:15,732 --> 00:26:19,240 να κωδικοποιήσει κάτι που ελπίζουμε ότι θα συνεργαστεί με χορδές και να σας βοηθήσουν να αισθανθείτε 560 00:26:19,240 --> 00:26:22,170 πιο άνετα μαζί τους. 561 00:26:22,170 --> 00:26:24,869 >> Τυχόν άλλα ζητήματα που σχετίζονται με αυτές θέματα ή άλλα θέματα που 562 00:26:24,869 --> 00:26:26,119 Θα βάλω back up; 563 00:26:26,119 --> 00:26:32,280 564 00:26:32,280 --> 00:26:34,840 Και - 565 00:26:34,840 --> 00:26:36,310 τώρα. 566 00:26:36,310 --> 00:26:37,630 Ναι, Alden. 567 00:26:37,630 --> 00:26:39,860 >> ALDEN: Έτσι, αυτό είναι εντελώς άσχετες, αλλά μπορούμε να πήγαινε πάνω 568 00:26:39,860 --> 00:26:42,760 πολύ γρήγορα τι πρέπει να ξέρετε σχετικά με τη διαφορά μεταξύ του 32 και 569 00:26:42,760 --> 00:26:46,345 Μηχανή 64-bit; 570 00:26:46,345 --> 00:26:47,740 >> JASON Hirschhorn: Ναι. 571 00:26:47,740 --> 00:26:52,111 Έτσι, 32 bits είναι πόσα bytes; 572 00:26:52,111 --> 00:26:53,060 >> ALDEN: Είναι τεσσάρων bytes. 573 00:26:53,060 --> 00:26:54,360 >> JASON Hirschhorn: Είναι τεσσάρων bytes. 574 00:26:54,360 --> 00:26:58,420 Και 64 bits είναι πόσα bytes; 575 00:26:58,420 --> 00:26:59,112 >> ΣΠΟΥΔΑΣΤΩΝ: Οκτώ. 576 00:26:59,112 --> 00:27:00,610 >> JASON Hirschhorn: Οκτώ bytes. 577 00:27:00,610 --> 00:27:03,980 Έτσι και πάλι, οκτώ bit είναι ένα byte. 578 00:27:03,980 --> 00:27:08,340 Συσκευή CS50 σας είναι μια μηχανή 32-bit. 579 00:27:08,340 --> 00:27:13,650 Έτσι, οι διευθύνσεις μνήμης είναι τεσσάρων bytes. 580 00:27:13,650 --> 00:27:17,460 Υπάρχουν 2 στο 32 διευθύνσεις μνήμης. 581 00:27:17,460 --> 00:27:21,310 0 έως 2 στο 32 μείον 1. 582 00:27:21,310 --> 00:27:27,630 Και δεν είμαι θετικός, αλλά αυτό είναι ίσως η έκταση που θα πρέπει να 583 00:27:27,630 --> 00:27:35,230 γνωρίζουν για μία μηχανή 32-bit, ότι η μνήμη διευθύνσεις είναι, και πάλι, πολύ τέσσερα bytes, 584 00:27:35,230 --> 00:27:39,620 και αυτό είναι το μέγιστο ποσό διευθύνσεων μνήμης. 585 00:27:39,620 --> 00:27:41,680 >> Επίσης, οι τύποι δεδομένων - 586 00:27:41,680 --> 00:27:45,020 αυτό θα μπορούσε να είναι κάτι τόσο και αυτό είναι που αξίζει να σημειωθεί. 587 00:27:45,020 --> 00:27:49,610 Το μέγεθος ενός τύπου δεδομένων εξαρτάται το μηχάνημα που εργάζεστε με. 588 00:27:49,610 --> 00:27:56,760 Έτσι, μια χαρα, ένα ενιαίο χαρακτήρα, είναι το πώς πολλά bytes στην συσκευή CS50 μας; 589 00:27:56,760 --> 00:27:57,980 Ένα byte. 590 00:27:57,980 --> 00:28:02,310 Και είναι πραγματικά ένα byte, όπως καλά σε μια μηχανή 64-bit. 591 00:28:02,310 --> 00:28:05,920 >> Και οι περισσότεροι τύποι δεδομένων είναι ο ίδιος αριθμός των bytes και στα δύο μηχανήματα. 592 00:28:05,920 --> 00:28:11,620 Αλλά μερικά είδη δεδομένων θα είναι διαφορετικό και στα δύο μηχανήματα. 593 00:28:11,620 --> 00:28:14,590 Έτσι, αυτό θα ήταν ενδεχομένως η μόνο πράγμα που πρέπει να ξέρετε. 594 00:28:14,590 --> 00:28:16,710 >> Αλλά ακόμα και αυτό, νομίζω, είναι πέρα ​​από τα όρια - 595 00:28:16,710 --> 00:28:20,990 Είμαι σχεδόν σίγουρος, αν κοιτάξετε πίσω στο παλιό κουίζ, λέει, να αναλάβει για 596 00:28:20,990 --> 00:28:24,090 κωδικοποίηση των προβλημάτων που χρησιμοποιείτε μια μηχανή 32-bit. 597 00:28:24,090 --> 00:28:26,620 598 00:28:26,620 --> 00:28:30,620 Αλλά υπάρχουν, για να πάει μαζί με αυτό το περίπτωση που σας ενδιαφέρει, υπάρχουν 599 00:28:30,620 --> 00:28:35,920 τύπους δεδομένων που είναι τα ίδια μέγεθος σε όλα τα μηχανήματα. 600 00:28:35,920 --> 00:28:42,670 >> Αν έχετε δει κάτι σαν uint32_t, μπορεί να είναι ή μπορεί να 601 00:28:42,670 --> 00:28:43,260 Δεν έχω δει αυτό. 602 00:28:43,260 --> 00:28:44,290 Αυτό είναι ένα είδος δεδομένων. 603 00:28:44,290 --> 00:28:47,570 Αυτό που λέει, είναι 32 bit δεν έχει σημασία τι το μηχάνημα αυτό είναι. 604 00:28:47,570 --> 00:28:50,350 Έτσι, όταν οι άνθρωποι γράφουν φορητές κώδικα, πιθανότατα δεν θα χρησιμοποιήσει ints. 605 00:28:50,350 --> 00:28:53,260 Θα χρησιμοποιήσετε αντί για αυτά τα άλλα δεδομένα τύποι που ξέρουν ότι θα είναι το ίδιο 606 00:28:53,260 --> 00:28:54,780 μέγεθος για κάθε μηχάνημα. 607 00:28:54,780 --> 00:28:58,080 608 00:28:58,080 --> 00:28:58,250 Madhu. 609 00:28:58,250 --> 00:29:00,150 >> MADHU: Είχα μια ερώτηση σχετικά με η διαδικασία κατάρτισης. 610 00:29:00,150 --> 00:29:04,110 Έτσι, εάν είστε σύνταξη ενός προγράμματος που χρησιμοποιεί μια βιβλιοθήκη όπως CS50 ή κάτι 611 00:29:04,110 --> 00:29:06,840 όπως αυτό, ξέρω ότι η βιβλιοθήκη έχει να, σε κάποιο σημείο, είναι 612 00:29:06,840 --> 00:29:08,590 συγκεντρώνονται και συνδέονται μέσα 613 00:29:08,590 --> 00:29:13,380 Αλλά πόσο από αυτό συμβαίνει κατά τη διάρκεια η κατάρτιση του προγράμματός σας; 614 00:29:13,380 --> 00:29:15,880 Ποιο μέρος αυτής της διαδικασίας βιβλιοθήκης εμφανίζεται όταν είστε 615 00:29:15,880 --> 00:29:18,560 καταρτίζει το δικό σας πρόγραμμα; 616 00:29:18,560 --> 00:29:24,020 >> JASON Hirschhorn: Οπότε ας πάμε πάνω γενικά τα στάδια αυτής της διαδικασίας. 617 00:29:24,020 --> 00:29:26,280 Μπορείτε να γράψετε σας. C αρχείο. 618 00:29:26,280 --> 00:29:33,530 Σε σας. C αρχείο, # include σας βιβλιοθήκες κεφαλίδα, για παράδειγμα, cs50.h. 619 00:29:33,530 --> 00:29:39,480 Τι σημαίνει ότι η απότομη περιλαμβάνουν γραμμή να κάνω για να το πρόγραμμά σας; 620 00:29:39,480 --> 00:29:40,525 Akchar. 621 00:29:40,525 --> 00:29:43,350 >> AKCHAR: Προσθέτει τα πρωτότυπα των οι λειτουργίες από την επικεφαλίδα 622 00:29:43,350 --> 00:29:45,120 αρχείων στις βιβλιοθήκες. 623 00:29:45,120 --> 00:29:45,600 >> JASON Hirschhorn: Ακριβώς. 624 00:29:45,600 --> 00:29:49,870 Προσθέτει αυτά τα πρωτότυπα συναρτήσεων με τον κωδικό σας. 625 00:29:49,870 --> 00:29:55,230 Έτσι, όταν ο κώδικας σας είναι να καταρτίζονται τα πρώτα στάδια, ο compiler γνωρίζει 626 00:29:55,230 --> 00:29:59,250 ότι υπάρχουν πραγματικά αυτές οι λειτουργίες, και ότι κάπου έχουν καθοριστεί. 627 00:29:59,250 --> 00:30:02,460 Τα αρχεία. H δεν περιλαμβάνουν το ορισμούς για αυτές τις λειτουργίες ή τον τρόπο 628 00:30:02,460 --> 00:30:03,950 εργάζονται πραγματικά. 629 00:30:03,950 --> 00:30:07,960 Cs50.h περιλαμβάνει απλά κάτι που λέει GetString είναι ένα πραγματικό πράγμα που 630 00:30:07,960 --> 00:30:09,270 μπορεί να συμβεί. 631 00:30:09,270 --> 00:30:14,240 Και standardio.h λέει printf είναι ένα πραγματικό πράγμα που μπορεί να συμβεί. 632 00:30:14,240 --> 00:30:23,190 >> Έτσι γ σας γλώσσα με αυτό. Header το αρχείο παίρνει μετατραπεί σε κάποια 633 00:30:23,190 --> 00:30:27,750 αναγνώσιμα από μηχάνημα κώδικα, η οποία τελικά παίρνει μετατραπεί σε δυαδικό 634 00:30:27,750 --> 00:30:30,030 κώδικα, 0 και 1 του. 635 00:30:30,030 --> 00:30:33,590 Και αυτός είναι ο κώδικας που, τελικά, εκτελείται. 636 00:30:33,590 --> 00:30:38,550 Η γραμμή l-CS50 - για παράδειγμα, όταν είστε γραπτώς Clang - 637 00:30:38,550 --> 00:30:41,830 και τότε θα περιλαμβάνουν l-CS50, πληκτρολογείτε ότι μέσα 638 00:30:41,830 --> 00:30:42,180 Και θα δείτε ότι. 639 00:30:42,180 --> 00:30:43,890 Όταν γράφετε κάνετε, θα είστε δείτε αυτή τη γραμμή εδώ. 640 00:30:43,890 --> 00:30:47,740 Και θα δούμε ότι σε ένα δεύτερο, όταν κωδικοποιούμε ή αργότερα όταν θα κώδικα. 641 00:30:47,740 --> 00:30:50,390 >> Αλλά αυτό-γραμμή l CS50 κάνει κάτι λίγο διαφορετική από ό, τι 642 00:30:50,390 --> 00:30:52,440 τα # include cs50.h. 643 00:30:52,440 --> 00:30:56,300 Τι σημαίνει αυτό-line l CS50 κάνω; 644 00:30:56,300 --> 00:30:56,820 AVI; 645 00:30:56,820 --> 00:31:00,310 >> AVI: Θέλω να πω ότι συνδέει η βιβλιοθήκη στη λειτουργία 646 00:31:00,310 --> 00:31:02,710 καλέσει, όπως και τα o αρχεία.. 647 00:31:02,710 --> 00:31:08,200 >> JASON Hirschhorn: Έτσι είναι πολύ κοντά, αν όχι spot-on. 648 00:31:08,200 --> 00:31:16,220 Η l-CS50 παίρνει το δυαδικό αρχείο και συγχωνεύεται με δυαδικό αρχείο σας. 649 00:31:16,220 --> 00:31:21,410 Έτσι cs50.h, δεν υπάρχει κανένα σημείο στη στροφή cs50.h από τη γλώσσα C σε δυαδικό κάθε 650 00:31:21,410 --> 00:31:23,130 φορά που είναι να χρησιμοποιηθεί. 651 00:31:23,130 --> 00:31:26,650 Αυτό θα ήταν ανόητο, γιατί αυτό θα χάνουμε πολύ χρόνο. 652 00:31:26,650 --> 00:31:30,420 Γι 'αυτό έχει ήδη καταρτιστεί και να μετατραπεί σε ένα εκτελέσιμο. 653 00:31:30,420 --> 00:31:35,430 Και τώρα πρόκειται να συγχωνευθεί με το αρχείο σας στο τέλος. 654 00:31:35,430 --> 00:31:38,370 Έτσι, οι εν λόγω είναι 1 και 0 θα να συγχωνευθεί με αυτούς σας 655 00:31:38,370 --> 00:31:39,150 και 0 στο τέλος. 656 00:31:39,150 --> 00:31:43,670 Έτσι τώρα θα έχετε στην πραγματικότητα η πραγματική 1 και 0 που καθορίζουν τον τρόπο GetString, 657 00:31:43,670 --> 00:31:47,890 για παράδειγμα, τα έργα, ή πώς printf, για παράδειγμα, λειτουργεί. 658 00:31:47,890 --> 00:31:52,750 >> Και για περισσότερες πληροφορίες, υπάρχει μια σύντομο compilers που δίνει Nate ότι 659 00:31:52,750 --> 00:31:55,410 θα πρέπει να ελέγξετε ότι πηγαίνει μέσω αυτών των βημάτων. 660 00:31:55,410 --> 00:31:56,050 Αλλά - 661 00:31:56,050 --> 00:31:56,560 Ναι. 662 00:31:56,560 --> 00:32:01,700 >> ΦΟΙΤΗΤΗΣ: Είναι πάντα o αρχεία. όταν είναι με τη μορφή της βιβλιοθήκης, 663 00:32:01,700 --> 00:32:06,764 έτοιμο να συγχωνευθούν, συνδέονται - όπως θα είστε σε δυαδικό κώδικα; 664 00:32:06,764 --> 00:32:07,600 >> JASON Hirschhorn: OK. 665 00:32:07,600 --> 00:32:08,420 Τι - 666 00:32:08,420 --> 00:32:11,780 >> ΦΟΙΤΗΤΗΣ: Είναι πάντα η περίπτωση για οι βιβλιοθήκες όταν τους συνδέουν; 667 00:32:11,780 --> 00:32:12,500 >> JASON Hirschhorn: Ναι. 668 00:32:12,500 --> 00:32:17,300 Έτσι, υπάρχει. S αρχεία, τα οποία θα είναι κώδικα μηχανής, η οποία θα είναι επίσης 669 00:32:17,300 --> 00:32:17,975 αινιγματικά για εσάς. 670 00:32:17,975 --> 00:32:19,410 Δεν χρειάζεται να ανησυχείτε γι 'αυτούς. 671 00:32:19,410 --> 00:32:24,930 Αλλά γενικά, ναι, αυτοί θα να. o αρχεία είναι έτοιμα να ξεκινήσουν. 672 00:32:24,930 --> 00:32:27,170 >> ΦΟΙΤΗΤΗΣ: Έτσι, όταν στέλνετε στο βιβλιοθήκη, εσείς μόνο πλοίο 673 00:32:27,170 --> 00:32:28,880 η. h και το. o; 674 00:32:28,880 --> 00:32:32,210 Δεν στέλνουμε την. C ή το. S. 675 00:32:32,210 --> 00:32:33,070 >> JASON Hirschhorn: Έτσι - 676 00:32:33,070 --> 00:32:36,260 και αυτό είναι σε αυτό το σύντομο, καθώς, αν η πληροφορία αυτή φαίνεται να έρχεται ένα 677 00:32:36,260 --> 00:32:36,700 λίγο γρήγορα. 678 00:32:36,700 --> 00:32:39,870 Όμως, η μικρή σε compilers συνομιλίες για το θέμα αυτό, καθώς και. 679 00:32:39,870 --> 00:32:43,290 Όταν σας στείλουμε μια βιβλιοθήκη, εάν αποστέλλετε η. h, το αρχείο κεφαλίδας, εκείνες 680 00:32:43,290 --> 00:32:46,290 πρωτότυπα συναρτήσεων, και το 1 και 0, αυτό είναι το μόνο που χρειάζεται να δώσει. 681 00:32:46,290 --> 00:32:50,640 Δεν χρειάζεται να δώσουν το πώς η λειτουργία του εργοστασίου, το γ αρχείο.. 682 00:32:50,640 --> 00:32:56,360 Επειδή το σημείο της αφαίρεσης, ή η σημείο APIs, το σημείο σε αυτό το SPL, 683 00:32:56,360 --> 00:32:59,650 το Stanford φορητή βιβλιοθήκη, είναι για να μην ανησυχείτε για το πώς οι νέες 684 00:32:59,650 --> 00:33:04,220 GRect λειτουργεί, ή πώς κινούνται τα έργα, ή πώς να προσθέσετε έργων. 685 00:33:04,220 --> 00:33:06,520 Όλα όσα πρέπει να ξέρετε είναι ότι το πρόσθετο είναι μια λειτουργία που μπορείτε να 686 00:33:06,520 --> 00:33:08,880 χρήση, και το κάνει αυτό. 687 00:33:08,880 --> 00:33:12,760 Έτσι, μπορείτε πραγματικά δεν χρειάζεται να γνωρίζουν πώς είναι γραμμένο σε C. Απλά πρέπει να 688 00:33:12,760 --> 00:33:15,460 Ξέρετε, εδώ είναι οι λειτουργίες, τι κάνει, και εδώ είναι οι του 1 και 0 689 00:33:15,460 --> 00:33:18,870 όταν πραγματικά θέλετε να τα χρησιμοποιήσετε. 690 00:33:18,870 --> 00:33:19,530 >> Cool. 691 00:33:19,530 --> 00:33:26,980 Οποιεσδήποτε ερωτήσεις σχετικά με compilers ή άλλα θέματα στο διοικητικό συμβούλιο; 692 00:33:26,980 --> 00:33:30,300 >> ΦΟΙΤΗΤΗΣ: Έχω μια ερώτηση του την εφαρμογή αναδρομικές συναρτήσεις. 693 00:33:30,300 --> 00:33:31,170 Μια ερώτηση σχετικά με αναδρομή. 694 00:33:31,170 --> 00:33:33,030 Είχα την αίσθηση ότι θα καταλήξουμε. 695 00:33:33,030 --> 00:33:38,310 Οπότε ας πάμε γρήγορα μέσα αναδρομή με ένα συγκεκριμένο 696 00:33:38,310 --> 00:33:40,690 παράδειγμα, ένα παραγοντικό λειτουργία. 697 00:33:40,690 --> 00:33:44,920 Επειδή αυτό είναι ένα παράδειγμα ότι έρχεται συχνά επάνω ή χρησιμοποιείται 698 00:33:44,920 --> 00:33:46,170 για να τονίσει αναδρομή. 699 00:33:46,170 --> 00:33:52,390 700 00:33:52,390 --> 00:33:56,410 >> Έτσι, το "4" διαβάζεται ως 4 παραγοντικό. 701 00:33:56,410 --> 00:33:59,120 Και τι σημαίνει 4 παραγοντικό σημαίνει; 702 00:33:59,120 --> 00:34:00,696 Τι σημαίνει ότι κάνει; 703 00:34:00,696 --> 00:34:02,235 Πώς μπορείτε να υπολογίσετε 4 παραγοντικό; 704 00:34:02,235 --> 00:34:05,250 705 00:34:05,250 --> 00:34:07,960 4 φορές 3 φορές 2 φορές 1. 706 00:34:07,960 --> 00:34:11,889 >> Έτσι, ένας άλλος τρόπος για να γράψει 4 παραγοντικό είναι να γράψω αυτό. 707 00:34:11,889 --> 00:34:16,780 708 00:34:16,780 --> 00:34:19,022 4 φορές 3 παραγοντικό. 709 00:34:19,022 --> 00:34:22,080 Επειδή 3 παραγοντικό είναι 3 φορές 2 φορές 1. 710 00:34:22,080 --> 00:34:27,580 Έτσι 4 φορές 3 παραγοντικό είναι 4 φορές 3 φορές 2 φορές 1. 711 00:34:27,580 --> 00:34:32,679 Αυτός είναι ο λόγος παραγοντικό είναι μια μεγάλη υποψήφιος για την αναδρομή, γιατί είναι 712 00:34:32,679 --> 00:34:36,630 σαφές ότι υπάρχει κάτι που συμβαίνει ξανά και ξανά και ξανά για μια 713 00:34:36,630 --> 00:34:39,820 μικρότερο αριθμό πράγματα μέχρι φτάσετε στο τέλος. 714 00:34:39,820 --> 00:34:42,570 Όταν φθάσει το 1, 1 παραγοντικό είναι 1. 715 00:34:42,570 --> 00:34:43,719 Δεν μπορεί να πάει πολύ πιο πέρα. 716 00:34:43,719 --> 00:34:47,219 0 παραγοντικό είναι επίσης ορίζεται ως 1. 717 00:34:47,219 --> 00:34:50,679 Έτσι, όταν φτάσετε σε 1 ή 0, είστε στο τέλος, και μπορείτε να 718 00:34:50,679 --> 00:34:53,219 αρχίσει να πηγαίνει πίσω επάνω. 719 00:34:53,219 --> 00:34:59,540 Έτσι, αν θέλαμε να γράψω ένα αναδρομικό συνάρτηση για να υπολογίσει ένα παραγοντικό, 720 00:34:59,540 --> 00:35:02,170 θα πάμε να γράψει μερικά ψευδοκώδικα για το τώρα. 721 00:35:02,170 --> 00:35:03,300 Πριν γράψω αυτό το ψευδοκώδικα - 722 00:35:03,300 --> 00:35:05,660 Θα σας δώσω εσείς μερικά λεπτά να γράψει τον κώδικα ψευδο ή απλά σκεφτείτε 723 00:35:05,660 --> 00:35:09,600 γι 'αυτό - υπάρχουν δύο πράγματα που κάθε αναδρομική συνάρτηση χρειάζεται. 724 00:35:09,600 --> 00:35:12,530 Ποια είναι αυτά τα δύο πράγματα; 725 00:35:12,530 --> 00:35:13,220 >> JACK: Πρέπει να αυτοαποκαλείται. 726 00:35:13,220 --> 00:35:13,680 >> JASON Hirschhorn: Νώε; 727 00:35:13,680 --> 00:35:14,460 Ω, Τζακ. 728 00:35:14,460 --> 00:35:15,100 Προχωρήστε. 729 00:35:15,100 --> 00:35:16,640 >> JACK: Πρέπει να αυτοαποκαλείται. 730 00:35:16,640 --> 00:35:19,220 >> JASON Hirschhorn: Έτσι, μια αναδρομική λειτουργία χρειάζεται μια αναδρομική κλήση, ένα 731 00:35:19,220 --> 00:35:20,220 κλήση στον εαυτό του. 732 00:35:20,220 --> 00:35:20,770 Αυτό είναι ένα. 733 00:35:20,770 --> 00:35:21,510 Και τι είναι το άλλο; 734 00:35:21,510 --> 00:35:22,250 >> JACK: Μια βασική περίπτωση. 735 00:35:22,250 --> 00:35:23,780 >> JASON Hirschhorn: Μια βασική περίπτωση. 736 00:35:23,780 --> 00:35:26,940 Μια βασική περίπτωση είναι, εδώ είναι όταν θα σταματήσουμε. 737 00:35:26,940 --> 00:35:29,510 Έτσι, η λειτουργία σας παίρνει ονομάζεται. 738 00:35:29,510 --> 00:35:31,410 Η βασική περίπτωση έρχεται πρώτη. 739 00:35:31,410 --> 00:35:33,710 Θέλετε να ξέρετε εάν είστε στο τέλος. 740 00:35:33,710 --> 00:35:37,110 Και αν δεν είστε στο τέλος, θα κάνουν αναδρομική κλήση σας. 741 00:35:37,110 --> 00:35:39,880 Και θα περάσουν από αυτή τη λειτουργία και πάλι, ελέγξτε και πάλι την περίπτωση βάσης σας. 742 00:35:39,880 --> 00:35:42,575 Εάν δεν είστε το τέλος, να κάνετε μια άλλη αναδρομική κλήση, 743 00:35:42,575 --> 00:35:44,130 κ.λπ., κ.λπ.. 744 00:35:44,130 --> 00:35:47,110 >> Γι 'αυτό πάντα αναδρομικές συναρτήσεις χρειάζονται αυτές τις περιπτώσεις βάσης και εκείνων 745 00:35:47,110 --> 00:35:48,210 αναδρομικές κλήσεις. 746 00:35:48,210 --> 00:35:51,280 Εάν δεν έχετε μια αναδρομική κλήση, το δεν θα ήταν μια αναδρομική συνάρτηση. 747 00:35:51,280 --> 00:35:53,210 Εάν δεν έχετε μια βασική περίπτωση, θα πάει για πάντα και 748 00:35:53,210 --> 00:35:54,780 θα υπήρχε κατάληξη. 749 00:35:54,780 --> 00:35:57,870 Και το βασικό σενάριο έρχεται πάντα πρώτη, γιατί πάντα θα θέλετε να ελέγξετε 750 00:35:57,870 --> 00:36:00,420 αν είστε στο τέλος πρώτα. 751 00:36:00,420 --> 00:36:04,770 Έτσι, πριν κάνουμε κάποια ψευδοκώδικα, γιατί Δεν παίρνετε ένα λεπτό για να σκεφτούμε 752 00:36:04,770 --> 00:36:09,360 πώς μια αναδρομική συνάρτηση παραγοντικό θα γράψει; 753 00:36:09,360 --> 00:36:23,340 754 00:36:23,340 --> 00:36:26,010 >> Επίσης, όσες κάνετε, το γράψιμο έξω σε ένα φύλλο χαρτιού είναι 755 00:36:26,010 --> 00:36:27,960 τι πρόκειται να πρέπει να κάνουμε στο κουίζ αύριο. 756 00:36:27,960 --> 00:36:32,160 Έτσι, μάλλον καλή πρακτική να κάνει βεβαιωθείτε ότι ο κώδικας που γράφουμε 757 00:36:32,160 --> 00:36:34,420 κάτω σε φύλλο χαρτιού - 758 00:36:34,420 --> 00:36:35,160 ή μπορείτε να το κάνετε αυτό. 759 00:36:35,160 --> 00:36:36,710 Ξέρεις πού είναι τα ερωτηματικά. 760 00:36:36,710 --> 00:36:37,660 Θυμάστε τη σύνταξη. 761 00:36:37,660 --> 00:36:40,400 Επειδή δεν είστε σε θέση να έχουν μια compiler πείτε έχετε κάνει λάθος. 762 00:36:40,400 --> 00:37:02,356 763 00:37:02,356 --> 00:37:07,240 >> Επίσης, κατά μήκος αυτών των γραμμών, αύριο, όταν έχετε προβλήματα κωδικοποίησης, αν 764 00:37:07,240 --> 00:37:11,490 Οι έσπευσαν για το χρόνο, ή αν είστε πολύ σύγχυση ως προς το πώς είστε υποτίθεται για να 765 00:37:11,490 --> 00:37:16,030 γράψει το συγκεκριμένο πράγμα στο γ, το θα behoove να γράψετε ψευδοκώδικα 766 00:37:16,030 --> 00:37:18,160 ή να γράψουν ένα σχόλιο σε επίσης. 767 00:37:18,160 --> 00:37:21,940 Επειδή υπάρχει μερική πίστωση για ένα Πολλά από τα ερωτήματα σχετικά με το κουίζ. 768 00:37:21,940 --> 00:37:24,840 Έτσι, ίσως να έσπευσε, ή θα μπορούσε απλώς να συγχέονται. 769 00:37:24,840 --> 00:37:28,030 Γράφοντας σε σχόλια ή ψευδο-κώδικα είναι συχνά τρόπους που μπορείτε 770 00:37:28,030 --> 00:37:29,360 μπορούν να πάρουν μερική πίστωση. 771 00:37:29,360 --> 00:37:31,440 >> Γι 'αυτό μην αφήνετε κάτι κενό στο κουίζ. 772 00:37:31,440 --> 00:37:33,490 Δεν υπάρχει καμία ποινική ρήτρα για να βάλουμε τα πράγματα μέσα 773 00:37:33,490 --> 00:37:37,650 Στην πραγματικότητα, θέτοντας σε ψευδο-κώδικα ή Δείτε τα σχόλια του πρόκειται να βοηθήσει το γκρέιντερ 774 00:37:37,650 --> 00:37:40,410 καταλάβω αν πραγματικά ξέρετε τι μιλάς, και ίσως το βραβείο 775 00:37:40,410 --> 00:37:42,030 σας κάποια μερική πίστωση γι 'αυτό. 776 00:37:42,030 --> 00:37:44,510 >> Επίσης, κατά μήκος αυτών των γραμμών, γράφει ξεκάθαρα. 777 00:37:44,510 --> 00:37:47,650 Αν δεν μπορούμε πραγματικά τι γράφετε, εμείς δεν πρόκειται να σας καλέσει 778 00:37:47,650 --> 00:37:49,900 στο αύριο τα μεσάνυχτα με το σχήμα από ό, τι έγραψε. 779 00:37:49,900 --> 00:37:51,520 Εμείς απλά θα απογειωθεί σημεία. 780 00:37:51,520 --> 00:37:56,570 Γράψτε με σαφήνεια ώστε να μπορούμε να ακούσουμε, ή μάλλον, μπορούμε να διαβάσουμε τι έγραψε. 781 00:37:56,570 --> 00:38:00,230 >> Και αν λέει δύο προτάσεις, δεν γράφουν μια παράγραφο. 782 00:38:00,230 --> 00:38:02,280 Ακολουθήστε τις οδηγίες. 783 00:38:02,280 --> 00:38:03,500 Γράψτε καθαρά. 784 00:38:03,500 --> 00:38:07,720 Και να γράφουν τις παρατηρήσεις αυτές ή ψευδοκώδικα για τις ερωτήσεις που θα μπορούσαν να 785 00:38:07,720 --> 00:38:10,270 βραβείο μερική πίστωση. 786 00:38:10,270 --> 00:38:12,520 >> Εντάξει, ας πάμε να παραγοντικού. 787 00:38:12,520 --> 00:38:15,000 Έτσι έχουμε ένα παραγοντικό λειτουργία. 788 00:38:15,000 --> 00:38:18,400 789 00:38:18,400 --> 00:38:21,550 Αν ήθελα να γράψω πραγματικά αυτό σε C, τι πρέπει να κάνω για να θέσει πριν από το όνομα 790 00:38:21,550 --> 00:38:22,800 της συνάρτησης; 791 00:38:22,800 --> 00:38:24,880 792 00:38:24,880 --> 00:38:30,060 Ο τύπος επιστροφής, η οποία, σε αυτό το περίπτωση, θα δώσει int. 793 00:38:30,060 --> 00:38:35,450 Και τότε μέσα στα άγκιστρα, είναι τι συμβαίνει στο εσωτερικό των αγκυλών 794 00:38:35,450 --> 00:38:36,850 μια συνάρτηση; 795 00:38:36,850 --> 00:38:37,950 >> ΜΑΘΗΤΕΣ: Επιχείρημα τύπου. 796 00:38:37,950 --> 00:38:39,150 >> JASON Hirschhorn: Τα επιχειρήματά του. 797 00:38:39,150 --> 00:38:42,680 Έτσι, μάλλον θα παραγοντικό να λάβει ένα επιχείρημα. 798 00:38:42,680 --> 00:38:44,500 Αυτό κατά πάσα πιθανότητα θα πάρει μόνο ένα επιχείρημα. 799 00:38:44,500 --> 00:38:49,450 Και εμείς θα πούμε ότι θα λάβει ακέραιος αριθμός που ονομάζεται x. 800 00:38:49,450 --> 00:38:52,770 Και πάλι, κατά τη σύνταξη του πρωτοτύπου της μια λειτουργία ή γράφοντας τη λειτουργία 801 00:38:52,770 --> 00:38:57,110 στον κώδικά σας πριν από τον καθορισμό αυτό, γράψετε τον τύπο δεδομένων και το όνομα του 802 00:38:57,110 --> 00:39:01,370 ότι η μεταβλητή μόνο για την εν λόγω λειτουργία. 803 00:39:01,370 --> 00:39:06,350 Έτσι, μπορείτε να περάσετε κάποιο αριθμό σε αυτό λειτουργία, θα πρέπει να αναφέρονται ως x 804 00:39:06,350 --> 00:39:07,340 εσωτερικά. 805 00:39:07,340 --> 00:39:08,755 >> Έχουμε παραγοντικό λειτουργία μας. 806 00:39:08,755 --> 00:39:12,030 807 00:39:12,030 --> 00:39:15,850 Χρειαζόμαστε δύο πράγματα, ένα base case και μια αναδρομική κλήση. 808 00:39:15,850 --> 00:39:20,900 Ποια είναι η βασική περίπτωση για παραγοντικό; 809 00:39:20,900 --> 00:39:24,850 Κάποιος που το έγραψε και ποιος δεν έχει μιλήσει ακόμη, ποια είναι η βάση 810 00:39:24,850 --> 00:39:26,100 περίπτωση παραγοντικό; 811 00:39:26,100 --> 00:39:28,400 812 00:39:28,400 --> 00:39:30,930 >> ΦΟΙΤΗΤΗΣ: Αν το n είναι μικρότερο από 2, επιστροφή 1. 813 00:39:30,930 --> 00:39:33,520 >> JASON Hirschhorn: Αν ο n είναι λιγότερο από 2, επιστρέφει 1. 814 00:39:33,520 --> 00:39:37,216 Μ 'αρέσει αυτό, γιατί αυτό φροντίζει 0 και 1. 815 00:39:37,216 --> 00:39:45,290 Έτσι θα κάνουμε x <2, επιστροφή 1. 816 00:39:45,290 --> 00:39:47,870 Αν πάρετε περάσει 0, αν έχουμε πέρασε 1, η λειτουργία αυτή θα 817 00:39:47,870 --> 00:39:49,790 επιστρέψει αμέσως 1. 818 00:39:49,790 --> 00:39:54,020 Αν πάρετε περάσει κάποια αριθμός μεγαλύτερος ή ίση με 2, θα πάμε να 819 00:39:54,020 --> 00:39:55,370 έχουν αναδρομική κλήση μας. 820 00:39:55,370 --> 00:39:57,855 >> Και ναι, πώς είναι ότι πρόκειται να λειτουργήσει; 821 00:39:57,855 --> 00:40:01,070 Μπορεί κάποιος άλλος που εργάστηκαν για αυτό το που δεν έχει μιλήσει ακόμα να μου δώσει το 822 00:40:01,070 --> 00:40:07,380 αναδρομική κλήση για αυτή τη λειτουργία σε ψευδοκώδικα; 823 00:40:07,380 --> 00:40:10,770 Αν πάρετε περάσει σε έναν αριθμό x και είναι μεγαλύτερος από 2, τι 824 00:40:10,770 --> 00:40:13,370 θέλουμε να κάνουμε; 825 00:40:13,370 --> 00:40:17,930 Έχουμε επίσης ένα παράδειγμα γραμμένο σχετικά με την πλευρά που μπορεί να σας δώσει μια υπόδειξη. 826 00:40:17,930 --> 00:40:20,770 >> ΦΟΙΤΗΤΗΣ: Καλέστε x φορές το παραγοντικό x μείον 1; 827 00:40:20,770 --> 00:40:22,020 >> JASON Hirschhorn: Ακριβώς δεξιά. 828 00:40:22,020 --> 00:40:24,610 829 00:40:24,610 --> 00:40:37,750 Εμείς πάμε για να επιστρέψει x φορές το παραγοντικό του x μείον 1. 830 00:40:37,750 --> 00:40:41,810 Και αυτό, παρόλο που έγραψα επάνω, Βασικά, αυτό που είπατε στα αγγλικά, 831 00:40:41,810 --> 00:40:44,580 αυτή η συνάρτηση παραγοντικό θα πάρει κάλεσε και πάλι. 832 00:40:44,580 --> 00:40:46,320 Θα εκτελέσει για x μείον 1. 833 00:40:46,320 --> 00:40:49,320 Θα επιστρέψει με κάποιον ακέραιο, και τότε θα πολλαπλασιάσει αυτά τα δύο 834 00:40:49,320 --> 00:40:52,050 μαζί, και αυτή η τιμή θα είναι επέστρεψε σε ό, τι ονομάζεται αυτό 835 00:40:52,050 --> 00:40:55,010 παραγοντικό λειτουργία, η οποία θα μπορούσε είναι ένα άλλο παράδειγμα της 836 00:40:55,010 --> 00:40:58,420 αυτή η συνάρτηση παραγοντικό. 837 00:40:58,420 --> 00:41:01,360 >> Έτσι ώστε είναι ένα παράδειγμα ενός αναδρομικού τη λειτουργία, ένα πολύ 838 00:41:01,360 --> 00:41:02,530 απλή αναδρομική συνάρτηση. 839 00:41:02,530 --> 00:41:04,530 Αλλά οι περισσότεροι από αυτούς θα είναι σαν αυτό. 840 00:41:04,530 --> 00:41:11,170 Αν θα θέλατε μια καλή αναδρομική πρόκληση για το κουίζ, δοκιμάστε κωδικοποίησης 841 00:41:11,170 --> 00:41:13,230 δυαδική αναζήτηση αναδρομικά. 842 00:41:13,230 --> 00:41:18,950 Γιατί αν δυαδική αναζήτηση πρόβλημα που τρεις, ίσως το έκανε 843 00:41:18,950 --> 00:41:21,730 επαναληπτικά σε ένα βρόχο while. 844 00:41:21,730 --> 00:41:23,700 >> Αλλά μπορεί επίσης να γραφτεί αναδρομικά. 845 00:41:23,700 --> 00:41:26,310 Θα πάμε να πρέπει να γράψετε τη δική σας ξεχωριστή λειτουργία που λαμβάνει κάποια 846 00:41:26,310 --> 00:41:29,020 διαφορετικά επιχειρήματα της γραμμής εντολών - ή Δεν τα επιχειρήματα της γραμμής εντολών, ορισμένοι 847 00:41:29,020 --> 00:41:30,910 διαφορετικές ακριβώς τακτική επιχειρήματα. 848 00:41:30,910 --> 00:41:33,870 Αλλά θα μπορούσατε να γράψετε δυαδική αναζήτηση αναδρομικά, καθώς και. 849 00:41:33,870 --> 00:41:36,190 >> ΦΟΙΤΗΤΗΣ: Έτσι, θα μπορούσε να έχει γράψει, αντί x μείον 1, θα 850 00:41:36,190 --> 00:41:39,502 θα μπορούσε επίσης να γραφτεί x μείον μείον, ή θα μπορούσατε να έχετε 851 00:41:39,502 --> 00:41:40,830 γραπτή μείον μείον x. 852 00:41:40,830 --> 00:41:44,740 Μπορείς να εξηγήσει πραγματικά γρήγορα γιατί αυτά θα ήταν διαφορετικά τα πράγματα, 853 00:41:44,740 --> 00:41:49,510 όπως ποια είναι η διαφορά μεταξύ x μείον μείον και μείον μείον x; 854 00:41:49,510 --> 00:41:51,320 >> JASON Hirschhorn: Όχι, δεν είμαι πρόκειται να υπεισέλθω σε αυτό. 855 00:41:51,320 --> 00:41:55,500 Αλλά εγώ θα σας μιλήσω γι 'αυτό μετά τάξη. x μείον μείον, μείον μείον x 856 00:41:55,500 --> 00:41:57,780 μειώσετε x κατά 1. 857 00:41:57,780 --> 00:41:59,090 Αλλά το κάνουν λίγο διαφορετικά. 858 00:41:59,090 --> 00:42:00,340 Αλλά δεν θέλω να υπεισέλθω σε αυτό. 859 00:42:00,340 --> 00:42:04,330 860 00:42:04,330 --> 00:42:09,090 Άλλα ερωτήματα σχετικά με αναδρομή ή αυτή η λειτουργία; 861 00:42:09,090 --> 00:42:10,140 Αυτό δεν είναι πραγματικά ακόμη και ψευδοκώδικα. 862 00:42:10,140 --> 00:42:15,060 Αυτό είναι βασικά ο κώδικας στο C θα γράψω γι 'αυτό. 863 00:42:15,060 --> 00:42:19,393 >> OK, οποιαδήποτε άλλα ζητήματα για θέματα εδώ; 864 00:42:19,393 --> 00:42:19,864 Ναι. 865 00:42:19,864 --> 00:42:23,130 >> ΦΟΙΤΗΤΗΣ: Έχω μια γρήγορη μείωση των κινητής υποδιαστολής και ακρίβεια. 866 00:42:23,130 --> 00:42:24,260 >> JASON Hirschhorn: Κυμαινόμενο σημείο και ακρίβεια. 867 00:42:24,260 --> 00:42:26,920 Μπορεί κάποιος πολύ γρήγορα να μου δώσει μια περίληψη των 868 00:42:26,920 --> 00:42:28,210 κινητής υποδιαστολής και ακρίβεια; 869 00:42:28,210 --> 00:42:30,420 Θα έπρεπε όλοι να κάνουμε αυτό για σας πρόβλημα που, έτσι είστε όλοι 870 00:42:30,420 --> 00:42:31,700 εξοικειωμένοι με αυτό. 871 00:42:31,700 --> 00:42:35,090 Ή ίσως όχι όλοι σας. 872 00:42:35,090 --> 00:42:36,602 Όποιος; 873 00:42:36,602 --> 00:42:39,530 Δώσε μου ένα σημείο που ξεκίνησε. 874 00:42:39,530 --> 00:42:40,750 Κινητής υποδιαστολής και ακρίβεια. 875 00:42:40,750 --> 00:42:42,380 Ποιο είναι το πρόβλημα; 876 00:42:42,380 --> 00:42:42,960 Ναι. 877 00:42:42,960 --> 00:42:43,680 Victoria; 878 00:42:43,680 --> 00:42:44,480 >> VANESSA: Vanessa. 879 00:42:44,480 --> 00:42:45,285 >> JASON Hirschhorn: Vanessa. 880 00:42:45,285 --> 00:42:45,680 Λυπάμαι. 881 00:42:45,680 --> 00:42:51,550 >> VANESSA: Υπάρχει μόνο ένας πεπερασμένος αριθμός των αριθμών που μπορούν να αναπαρασταθούν 882 00:42:51,550 --> 00:42:57,930 επειδή είστε σε ένα, σε μας περίπτωση, ένα σύστημα 32-bit. 883 00:42:57,930 --> 00:43:03,080 Έτσι κατά κάποιο τρόπο πρέπει να αποτελούν μερικούς αριθμούς. 884 00:43:03,080 --> 00:43:03,910 >> JASON Hirschhorn: Έτσι ώστε να είναι ακριβώς δεξιά. 885 00:43:03,910 --> 00:43:08,110 Υπάρχουν μόνο ένα ορισμένο ποσό αριθμών που μπορούν να αναπαρασταθούν. 886 00:43:08,110 --> 00:43:11,770 Αν πολλαπλασιάσουμε δύο πολύ μεγάλους αριθμούς, μπορεί να υπερχειλίσει το ποσό 887 00:43:11,770 --> 00:43:13,950 των χώρων θα πρέπει να εκπροσωπεί ένας ακέραιος. 888 00:43:13,950 --> 00:43:17,930 Γι 'αυτό μερικές φορές χρησιμοποιούμε μια πολύ καιρό αντί int. 889 00:43:17,930 --> 00:43:19,210 Αυτό έχει περισσότερους χώρους. 890 00:43:19,210 --> 00:43:21,210 Αυτό μπορεί να κρατήσει έναν μεγαλύτερο αριθμό. 891 00:43:21,210 --> 00:43:24,310 >> Κινητής υποδιαστολής ακρίβειας έχει να κάνει με ότι, αλλά επίσης έχει να κάνει με τη 892 00:43:24,310 --> 00:43:29,300 γεγονός ότι οι δεκαδικοί αριθμοί είναι δεν εκπροσωπείται πάντοτε. 893 00:43:29,300 --> 00:43:29,540 Λυπάμαι. 894 00:43:29,540 --> 00:43:31,280 Επιτρέψτε μου να θέσω αυτό το back up. 895 00:43:31,280 --> 00:43:36,610 Ο δεκαδικός αριθμός 1.0, δεν είναι πάντα αντιπροσωπεύονται όπως θα περιμένατε, 896 00:43:36,610 --> 00:43:40,770 1.000000000. 897 00:43:40,770 --> 00:43:50,360 Είναι μερικές φορές εκπροσωπήθηκαν ως 1,000000001 0,999999999 ή. 898 00:43:50,360 --> 00:43:52,780 Θα μπορούσε να είναι ακόμη και 89 ρίχνονται κάπου εκεί. 899 00:43:52,780 --> 00:43:56,560 Έτσι, αυτοί οι δεκαδικοί αριθμοί δεν είναι αντιπροσώπευε ακριβώς όπως θα κάνατε 900 00:43:56,560 --> 00:43:58,430 αναμένουμε από αυτούς να εκπροσωπούνται. 901 00:43:58,430 --> 00:44:00,010 >> Έτσι, το πρόβλημα που - 902 00:44:00,010 --> 00:44:00,860 ήταν δύο; - 903 00:44:00,860 --> 00:44:05,290 πρόβλημα που δύο, όπου ασχοληθήκαμε με αριθμοί κινητής υποδιαστολής, όταν θέλαμε 904 00:44:05,290 --> 00:44:08,690 να εκπροσωπεί ακριβώς αυτό που θέλαμε εκπροσωπούν τους, ο αριθμός 905 00:44:08,690 --> 00:44:12,860 πένες, ή ο αριθμός των λεπτών, θα τις πολλαπλασιάζει με 100. 906 00:44:12,860 --> 00:44:14,750 Τους στρογγυλεμένες. 907 00:44:14,750 --> 00:44:18,660 Και τότε θα κόψει τα πάντα πίσω από την υποδιαστολή. 908 00:44:18,660 --> 00:44:22,020 Αυτό ήταν για να εξασφαλιστεί ότι θα πραγματικά ίση ακριβώς αυτό που θέλαμε 909 00:44:22,020 --> 00:44:22,410 να είναι ίσα. 910 00:44:22,410 --> 00:44:26,870 >> Διότι όταν παίρνετε κάτι που είναι α επιπλέουν και να το μετατρέψει σε έναν int, θα 911 00:44:26,870 --> 00:44:29,860 κόψει τα πάντα προς τα δεξιά από την υποδιαστολή. 912 00:44:29,860 --> 00:44:33,900 Επειδή υπάρχει κάποια κινητής υποδιαστολής ανακρίβεια, 100.000 μπορεί να είναι 913 00:44:33,900 --> 00:44:37,440 εκπροσωπήθηκαν ως 99.999999999. 914 00:44:37,440 --> 00:44:40,350 Και αν απλά διακόπτει τα πάντα για να το δικαίωμα το δικαίωμα μακριά, θα πάμε να 915 00:44:40,350 --> 00:44:41,600 να πάρει το λάθος αριθμό. 916 00:44:41,600 --> 00:44:44,050 917 00:44:44,050 --> 00:44:44,180 Ναι. 918 00:44:44,180 --> 00:44:45,290 >> ΦΟΙΤΗΤΗΣ: Είχα μια ερώτηση για τη ρίψη. 919 00:44:45,290 --> 00:44:47,500 Τι προκειμένου συμβαίνει και σε? 920 00:44:47,500 --> 00:44:54,480 Αν θέλετε να κάνετε float, παρένθεση, 1 χωρίζεται από 10, δεν το κάνουν 1 διαιρείται με 10, 921 00:44:54,480 --> 00:44:58,910 στη συνέχεια να πάρει 0.1, στη συνέχεια, ενεργοποιήστε το σε ένα πλωτήρα; 922 00:44:58,910 --> 00:45:01,470 >> JASON Hirschhorn: Αν το κάνετε επιπλέουν 1 διαιρείται με 10 - 923 00:45:01,470 --> 00:45:02,550 >> ΦΟΙΤΗΤΗΣ: Ναι, και τότε ισούται - 924 00:45:02,550 --> 00:45:04,240 καλά, θα έπρεπε κανονικά έχουν το ίσο με - 925 00:45:04,240 --> 00:45:04,690 Ναι. 926 00:45:04,690 --> 00:45:06,760 Θέλετε να κάνετε μια float, σωστά; 927 00:45:06,760 --> 00:45:12,790 >> JASON Hirschhorn: Εντάξει, έτσι θα πάμε να χρησιμοποιήσουμε για να segue σε αναφέρονται 928 00:45:12,790 --> 00:45:15,390 οι απαντήσεις σε αυτά τα ερωτήματα μέσω της κωδικοποίησης. 929 00:45:15,390 --> 00:45:18,180 Επειδή θα έχετε πιθανώς πολλές αυτά τα ερωτήματα λεπτό, και ένας καλός τρόπος 930 00:45:18,180 --> 00:45:19,100 για την επίλυσή τους είναι μέσω κωδικοποίησης. 931 00:45:19,100 --> 00:45:21,320 Έτσι θα πάμε για να κωδικοποιήσει αυτή τη στιγμή, και στη συνέχεια θα πάμε για να πάει πίσω και να 932 00:45:21,320 --> 00:45:24,020 κωδικοποιεί την ερώτηση που είχε. 933 00:45:24,020 --> 00:45:24,950 >> Έτσι, η πρώτη γραμμή - 934 00:45:24,950 --> 00:45:29,390 Δεν έπρεπε να γράψει - τι είναι το πρώτο πράγμα που θέλουμε να κάνουμε όταν 935 00:45:29,390 --> 00:45:32,250 ανοίξει ένα νέο αρχείο στο gedit; 936 00:45:32,250 --> 00:45:34,190 >> ΣΠΟΥΔΑΣΤΩΝ: Να συμπεριληφθούν. 937 00:45:34,190 --> 00:45:35,920 >> JASON Hirschhorn: Συμπεριλάβετε τι; 938 00:45:35,920 --> 00:45:37,952 >> ΦΟΙΤΗΤΗΣ: βιβλιοθήκη CS50. 939 00:45:37,952 --> 00:45:39,920 >> JASON Hirschhorn: OK. 940 00:45:39,920 --> 00:45:42,590 Τι άλλο θα πρέπει να περιλαμβάνει; 941 00:45:42,590 --> 00:45:46,820 Εμείς απλά θα ελέγξει τι συμβαίνει όταν ρίχνει κάτι σε έναν πλωτήρα. 942 00:45:46,820 --> 00:45:48,605 Αλλά τι πρέπει να περιλαμβάνει αν είμαστε πρόκειται να γράψει ένα πρόγραμμα σε C; 943 00:45:48,605 --> 00:45:49,300 >> ΦΟΙΤΗΤΗΣ: Standard I / O. 944 00:45:49,300 --> 00:45:50,625 >> JASON Hirschhorn: stdio.h. 945 00:45:50,625 --> 00:45:54,880 Εμείς πραγματικά δεν χρειάζεται, γι 'αυτό προγράμματος, cs50.h, ακόμα κι αν είναι 946 00:45:54,880 --> 00:45:55,920 πάντα χρήσιμο να το συμπεριλάβουμε. 947 00:45:55,920 --> 00:45:58,260 Αλλά χρειάζεται πάντα stdio.h. 948 00:45:58,260 --> 00:45:59,660 >> ΦΟΙΤΗΤΗΣ: Κατά την κωδικοποίηση σε C; 949 00:45:59,660 --> 00:46:15,770 >> JASON Hirschhorn: Κατά την κωδικοποίηση σε C. 950 00:46:15,770 --> 00:46:17,090 >> Γι 'αυτό και να το αποθηκεύσετε ως αυτού. Γ. το αρχείο. 951 00:46:17,090 --> 00:46:18,590 Θα πάρετε κάποια ωραία επισήμανση σύνταξης. 952 00:46:18,590 --> 00:46:22,890 Έγραψα κενό μέσα στον κεντρικό. 953 00:46:22,890 --> 00:46:24,792 Τι σημαίνει κενό σημαίνει; 954 00:46:24,792 --> 00:46:26,740 >> ΦΟΙΤΗΤΗΣ: Δεν παίρνει καμία τα επιχειρήματα της γραμμής εντολών. 955 00:46:26,740 --> 00:46:28,900 >> JASON Hirschhorn: Void μέσα, σε αυτό το περίπτωση, το κύριο δεν λαμβάνει καμία 956 00:46:28,900 --> 00:46:29,700 τα επιχειρήματα της γραμμής εντολών. 957 00:46:29,700 --> 00:46:32,720 Σε άλλες περιπτώσεις, αυτό σημαίνει ότι η λειτουργία δεν λαμβάνει τα επιχειρήματα της γραμμής εντολών. 958 00:46:32,720 --> 00:46:36,560 Ή η λειτουργία, εάν επρόκειτο να γράψει κενό main (void), που θα αναφέρουν ότι ο βασικός του 959 00:46:36,560 --> 00:46:38,460 δεν επιστρέφουν τίποτα. 960 00:46:38,460 --> 00:46:39,960 Έτσι, οι void ακριβώς σημαίνει τίποτα. 961 00:46:39,960 --> 00:46:42,510 Τι θα γράψω αν μου ήταν να λαμβάνουν τα επιχειρήματα της γραμμής εντολών; 962 00:46:42,510 --> 00:46:45,250 963 00:46:45,250 --> 00:46:47,150 >> ΦΟΙΤΗΤΗΣ: int c τόξο χορδή τόξου κατά 964 00:46:47,150 --> 00:46:49,055 >> JASON Hirschhorn: int argc argv εγχόρδων. 965 00:46:49,055 --> 00:46:54,050 966 00:46:54,050 --> 00:46:55,572 Είναι σωστό αυτό; 967 00:46:55,572 --> 00:46:58,720 >> ΦΟΙΤΗΤΗΣ: Είναι char παρένθεση argv αστέρι. 968 00:46:58,720 --> 00:47:01,730 >> JASON Hirschhorn: Έτσι θα μπορούσα να γράψω παρένθεση εγχόρδων argv ή argv char αστέρων 969 00:47:01,730 --> 00:47:03,710 παρένθεση, αλλά θα πρέπει να έχετε τις αγκύλες. 970 00:47:03,710 --> 00:47:06,290 Επειδή argv είναι ένας πίνακας χορδές, θυμάται. 971 00:47:06,290 --> 00:47:07,360 Δεν είναι μόνο μία χορδή. 972 00:47:07,360 --> 00:47:10,350 Έτσι εγχόρδων argv είναι, είναι εδώ μια σειρά που ονομάζεται argv. 973 00:47:10,350 --> 00:47:13,630 Παρένθεση String argv είναι, είναι εδώ μια σειρά από χορδές. 974 00:47:13,630 --> 00:47:17,865 Έτσι, int argc argv παρένθεση κορδόνι θα ήταν κάτι που θα 975 00:47:17,865 --> 00:47:18,810 θα μπορούσε πιθανότατα να γράψω. 976 00:47:18,810 --> 00:47:23,050 >> Έτσι ήθελε να σώσει έναν ακέραιο; 977 00:47:23,050 --> 00:47:24,285 >> ΦΟΙΤΗΤΗΣ: Ναι, ακέραιος. 978 00:47:24,285 --> 00:47:25,840 Ή σε μια float. 979 00:47:25,840 --> 00:47:26,710 >> JASON Hirschhorn: Σε ένα πλωτήρα; 980 00:47:26,710 --> 00:47:30,790 Όπως, float x ισούται με 1 διαιρείται με το 10. 981 00:47:30,790 --> 00:47:32,040 >> JASON Hirschhorn: OK. 982 00:47:32,040 --> 00:47:40,160 983 00:47:40,160 --> 00:47:42,240 Πώς μπορώ να εκτυπώσω ένα πλωτήρα στην printf; 984 00:47:42,240 --> 00:47:45,100 985 00:47:45,100 --> 00:47:46,714 Τι; 986 00:47:46,714 --> 00:47:47,560 >> ΦΟΙΤΗΤΗΣ:% f. 987 00:47:47,560 --> 00:47:48,300 >> JASON Hirschhorn:% f. 988 00:47:48,300 --> 00:47:50,810 Τι είναι ένας ακέραιος; 989 00:47:50,810 --> 00:47:52,110 d ή i. 990 00:47:52,110 --> 00:47:53,000 Τι είναι ένα string; 991 00:47:53,000 --> 00:47:54,240 >> ΣΠΟΥΔΑΣΤΩΝ: s. 992 00:47:54,240 --> 00:47:56,140 >> JASON Hirschhorn: s. 993 00:47:56,140 --> 00:47:57,550 Πώς μπορώ να αποκτήσω μια νέα γραμμή; 994 00:47:57,550 --> 00:47:58,800 >> ΦΟΙΤΗΤΗΣ: κάθετος n. 995 00:47:58,800 --> 00:48:04,610 996 00:48:04,610 --> 00:48:07,100 >> JASON Hirschhorn: Τι μπορώ να επιστρέψει αν η κύρια τρέχει σωστά; 997 00:48:07,100 --> 00:48:08,360 >> ΣΠΟΥΔΑΣΤΩΝ: 0. 998 00:48:08,360 --> 00:48:09,430 Μήπως πρέπει να γράψω αυτή τη γραμμή, όμως; 999 00:48:09,430 --> 00:48:10,170 >> ΦΟΙΤΗΤΗΣ: Όχι. 1000 00:48:10,170 --> 00:48:11,513 Εντάξει, δεν θα το γράψω, τότε. 1001 00:48:11,513 --> 00:48:16,450 1002 00:48:16,450 --> 00:48:17,190 Μπορεί ο καθένας να διαβάσει αυτό; 1003 00:48:17,190 --> 00:48:18,485 Μοιάζει λίγο μικρό. 1004 00:48:18,485 --> 00:48:20,160 Μπορεί ο καθένας να δει, ή θα πρέπει να Θα το κάνει μεγαλύτερο; 1005 00:48:20,160 --> 00:48:23,480 1006 00:48:23,480 --> 00:48:25,100 Νομίζω ότι για την κάμερα, θα κάνουμε είναι λίγο μεγαλύτερο, όμως. 1007 00:48:25,100 --> 00:48:35,750 1008 00:48:35,750 --> 00:48:38,410 >> JASON Hirschhorn: Αν θέλετε να το κάνετε . C αρχείο σε ένα εκτελέσιμο, τι 1009 00:48:38,410 --> 00:48:39,260 μπορώ να γράψω; 1010 00:48:39,260 --> 00:48:41,610 >> ΦΟΙΤΗΤΗΣ: Κάνετε δοκιμή. 1011 00:48:41,610 --> 00:48:42,080 >> JASON Hirschhorn: Συγγνώμη; 1012 00:48:42,080 --> 00:48:42,790 >> ΦΟΙΤΗΤΗΣ: Κάνετε δοκιμή. 1013 00:48:42,790 --> 00:48:44,040 >> JASON Hirschhorn: Κάντε τεστ. 1014 00:48:44,040 --> 00:48:46,700 1015 00:48:46,700 --> 00:48:48,410 Μιλούσαμε για αυτή η γραμμή νωρίτερα. 1016 00:48:48,410 --> 00:48:49,140 Κλαγγή. 1017 00:48:49,140 --> 00:48:51,270 Τι είναι κλαγγή; 1018 00:48:51,270 --> 00:48:52,200 Το όνομα του compiler. 1019 00:48:52,200 --> 00:48:53,920 Τι είναι αυτή η γραμμή; 1020 00:48:53,920 --> 00:48:55,580 >> ΦΟΙΤΗΤΗΣ: Ορίζει ότι για τη χρήση του GDB. 1021 00:48:55,580 --> 00:48:59,230 >> JASON Hirschhorn: Σετ αυτό, για τη χρήση του GDB. 1022 00:48:59,230 --> 00:49:02,338 Αυτή η γραμμή, τι είναι αυτό; 1023 00:49:02,338 --> 00:49:03,290 >> ΦΟΙΤΗΤΗΣ: Ο πηγαίος κώδικας. 1024 00:49:03,290 --> 00:49:06,010 >> JASON Hirschhorn: Αυτή είναι η αρχείο προέλευσης, το γ αρχείο.. 1025 00:49:06,010 --> 00:49:08,150 Τι σημαίνουν αυτές οι δύο γραμμές να κάνω; 1026 00:49:08,150 --> 00:49:10,245 Ή αυτά τα δύο δεν γραμμές. 1027 00:49:10,245 --> 00:49:12,300 >> ΦΟΙΤΗΤΗΣ: Είναι τα ονόματα να το δοκιμάσετε. 1028 00:49:12,300 --> 00:49:15,410 >> JASON Hirschhorn: Έτσι, το ταμπλό o λέει, ονομάστε τον κάτι διαφορετικό. 1029 00:49:15,410 --> 00:49:16,790 Και εδώ είστε καλώντας το τεστ. 1030 00:49:16,790 --> 00:49:18,900 Αν δεν είχα ότι, τι θα το όνομα αυτό; 1031 00:49:18,900 --> 00:49:20,260 >> ΣΠΟΥΔΑΣΤΩΝ: a.out. 1032 00:49:20,260 --> 00:49:22,340 >> JASON Hirschhorn: a.out. 1033 00:49:22,340 --> 00:49:25,366 Τι κάνει αυτό το κάνει; 1034 00:49:25,366 --> 00:49:27,670 >> ΦΟΙΤΗΤΗΣ: Σύνδεσμοι βιβλιοθήκη μαθηματικών. 1035 00:49:27,670 --> 00:49:29,550 >> JASON Hirschhorn: Συνδέει στη βιβλιοθήκη μαθηματικά. 1036 00:49:29,550 --> 00:49:32,880 Δεν περιλαμβάνει τη βιβλιοθήκη μαθηματικά, αλλά δεδομένου ότι αυτό είναι τόσο συχνές, που έχουν 1037 00:49:32,880 --> 00:49:35,780 γραπτή κάνουν να συμπεριλαμβάνεται πάντα η βιβλιοθήκη μαθηματικά. 1038 00:49:35,780 --> 00:49:39,050 Και επίσης, αυτό περιλαμβάνει η βιβλιοθήκη CS50. 1039 00:49:39,050 --> 00:49:43,010 >> Εντάξει, οπότε αν έχουμε λίστα, έχουμε τώρα ένα εκτελέσιμο που ονομάζεται δοκιμασία. 1040 00:49:43,010 --> 00:49:45,150 Για να το εκτελέσετε, γράφω δοκιμή. 1041 00:49:45,150 --> 00:49:48,330 Βλέπω ότι κινητής υποδιαστολής μου, όπως αναμενόταν, ισούται με μηδέν. 1042 00:49:48,330 --> 00:49:50,890 1043 00:49:50,890 --> 00:49:51,590 Μήπως αυτό - 1044 00:49:51,590 --> 00:49:52,060 έτσι - 1045 00:49:52,060 --> 00:49:55,210 >> ΦΟΙΤΗΤΗΣ: Στη συνέχεια, αν βάλετε επιπλέουν τώρα, σαν να ρίχνει ως float - 1046 00:49:55,210 --> 00:49:56,870 >> JASON Hirschhorn: Πρωταγωνιστές το 1 με ένα φλοτέρ; 1047 00:49:56,870 --> 00:49:59,180 >> ΦΟΙΤΗΤΗΣ: Όχι, ρίχνει όλο το πράγμα - 1048 00:49:59,180 --> 00:49:59,500 ναι. 1049 00:49:59,500 --> 00:50:02,460 Αν απλά έκανα αυτό, θα που το καθιστούν 0.1; 1050 00:50:02,460 --> 00:50:07,170 >> JASON Hirschhorn: Εντάξει, έτσι πολύ γρήγορα, 1 διαιρούμενο με 10, αυτά είναι 1051 00:50:07,170 --> 00:50:08,690 ακεραίων διαιρείται. 1052 00:50:08,690 --> 00:50:13,580 Έτσι, όταν χωρίζουν ακέραιοι, είναι 0, και σώζετε ότι 0 σε ένα 1053 00:50:13,580 --> 00:50:17,170 επιπλέουν, επειδή ο κάθετος είναι μόνο ακέραιος διαίρεσης. 1054 00:50:17,170 --> 00:50:19,180 Έτσι τώρα είμαστε στροφή κάτι σε ένα πλωτήρα. 1055 00:50:19,180 --> 00:50:21,650 >> Ας δούμε τι θα συμβεί. 1056 00:50:21,650 --> 00:50:22,900 Θα κάνουμε τεστ. 1057 00:50:22,900 --> 00:50:25,870 1058 00:50:25,870 --> 00:50:31,090 Έτσι τώρα θα δούμε ότι αυτό δεν ήταν κάθετος διαίρεσης, που επέπλεε 1059 00:50:31,090 --> 00:50:32,640 σημείο διαχωρισμού. 1060 00:50:32,640 --> 00:50:35,700 Επειδή ένα από τα επιχειρήματα της ερρίφθη σε ένα πλωτήρα. 1061 00:50:35,700 --> 00:50:38,380 Έτσι, τώρα είναι έλεγε, την αντιμετώπιση αυτού διαίρεση, όπως έχουμε να κάνουμε με 1062 00:50:38,380 --> 00:50:40,140 πλωτά σημεία, όχι με ακέραιους. 1063 00:50:40,140 --> 00:50:42,760 Και έτσι παίρνουμε την απάντηση περιμένουμε. 1064 00:50:42,760 --> 00:50:44,620 >> Ας δούμε τι θα συμβεί - 1065 00:50:44,620 --> 00:50:47,103 ουπς. 1066 00:50:47,103 --> 00:50:51,646 Αν ήθελα να εκτυπώσετε περισσότερα δεκαδικά κηλίδες, πώς θα μπορούσα να κάνω αυτό; 1067 00:50:51,646 --> 00:50:55,550 >> ΦΟΙΤΗΤΗΣ: Point dot f, ή όπως πολλοί δεκαδικά ψηφία, όπως θέλετε. 1068 00:50:55,550 --> 00:51:02,280 1069 00:51:02,280 --> 00:51:04,440 >> JASON Hirschhorn: Οπότε μπορώ να εκτυπώσω 10 δεκαδικά σημεία. 1070 00:51:04,440 --> 00:51:06,610 Και βλέπουμε τώρα παίρνουμε κάποια περίεργα πράγματα. 1071 00:51:06,610 --> 00:51:09,650 Και αυτό πηγαίνει πίσω στην ερώτησή σας για κινητής υποδιαστολής ανακρίβεια. 1072 00:51:09,650 --> 00:51:10,950 Υπάρχουν περίεργα πράγματα είναι αποθηκευμένα εδώ. 1073 00:51:10,950 --> 00:51:13,650 1074 00:51:13,650 --> 00:51:15,275 >> Εντάξει, μήπως αυτό απαντήσω στην ερώτησή σας; 1075 00:51:15,275 --> 00:51:18,550 1076 00:51:18,550 --> 00:51:20,200 Τι άλλο ήθελες να κώδικα γρήγορα; 1077 00:51:20,200 --> 00:51:25,470 >> ΦΟΙΤΗΤΗΣ: Ήθελα απλώς να δείτε αν όχι, αν ελευθερωθεί κάποιο δείκτη, 1078 00:51:25,470 --> 00:51:30,410 αν η εν λόγω δείκτης είχε ακόμη αποθηκευμένα σε είναι η διεύθυνση του ό, τι είχε 1079 00:51:30,410 --> 00:51:32,170 δείχνουν προς προηγουμένως. 1080 00:51:32,170 --> 00:51:34,100 >> JASON Hirschhorn: OK, οπότε ας το κάνουμε αυτό. 1081 00:51:34,100 --> 00:51:38,030 Char ptr αστέρι, αυτό δημιουργεί μια μεταβλητή ονομάζεται ptr τύπου αστέρι char. 1082 00:51:38,030 --> 00:51:39,280 Πώς μπορώ να γράψω malloc; 1083 00:51:39,280 --> 00:51:40,550 Alden; 1084 00:51:40,550 --> 00:51:41,800 >> ALDEN: Just malloc. 1085 00:51:41,800 --> 00:51:44,820 1086 00:51:44,820 --> 00:51:51,040 Αλλά τότε θα πρέπει να είναι το μέγεθος της, και σε αυτή την περίπτωση, υποθέτω ότι θα έπαιρνα 1087 00:51:51,040 --> 00:51:52,465 πρέπει να δείχνουν προς char. 1088 00:51:52,465 --> 00:51:54,450 Έτσι θα ήθελα να είναι char. 1089 00:51:54,450 --> 00:51:57,520 >> JASON Hirschhorn: Εντάξει, έτσι ώστε περισσότερα γενικά, Inside - 1090 00:51:57,520 --> 00:51:58,770 ας επεξεργαστείτε. 1091 00:51:58,770 --> 00:52:05,100 1092 00:52:05,100 --> 00:52:09,260 Μέσα malloc, θέλετε τον αριθμό των bytes στο σωρό. 1093 00:52:09,260 --> 00:52:12,320 Σε γενικές γραμμές, αυτό που έχουμε δει ότι είμαστε κάνουμε είναι να πάμε να malloc 1094 00:52:12,320 --> 00:52:14,940 χορδές, για παράδειγμα, ή συστοιχίες των ακεραίων. 1095 00:52:14,940 --> 00:52:21,600 Έτσι, αν θέλουμε 10 ακέραιοι αριθμοί, ή 10 χαρακτήρες, 10 θα μας δώσει 10. 1096 00:52:21,600 --> 00:52:24,370 Και τότε το μέγεθος των χαρακτήρων που θα δώσει μας ότι το μέγεθος των χαρακτήρων, η οποία σε 1097 00:52:24,370 --> 00:52:25,120 αυτή την περίπτωση είναι 1 byte. 1098 00:52:25,120 --> 00:52:26,250 Παίρνουμε 10 bytes. 1099 00:52:26,250 --> 00:52:28,540 Εάν επρόκειτο να γράψετε το μέγεθος του int, που θα μας δώσει 40 bytes. 1100 00:52:28,540 --> 00:52:31,520 >> Έτσι, πιο γενικά, μέσα από malloc είναι ο αριθμός των bytes που θέλετε. 1101 00:52:31,520 --> 00:52:34,620 Σε αυτή την περίπτωση, παίρνουμε 1 byte. 1102 00:52:34,620 --> 00:52:36,900 Ποια φαίνεται σαν μια περίεργη χρήση της malloc, αλλά και για μας 1103 00:52:36,900 --> 00:52:38,470 σκοπούς νόημα. 1104 00:52:38,470 --> 00:52:40,420 Έτσι υπάρχει αυτό. 1105 00:52:40,420 --> 00:52:43,420 >> Εμείς πάμε για να καλέσετε δωρεάν. 1106 00:52:43,420 --> 00:52:47,040 Έχουμε να απαλλαγούμε από αυτό και χρησιμοποιούμε πάλι ptr. 1107 00:52:47,040 --> 00:52:48,750 Και τι θέλετε να ελέγξετε; 1108 00:52:48,750 --> 00:52:50,550 >> ΦΟΙΤΗΤΗΣ: Ήθελα απλώς να ελέγξει κατά πόσον ή δεν υπήρχε τίποτα 1109 00:52:50,550 --> 00:52:51,900 στο εσωτερικό του. 1110 00:52:51,900 --> 00:52:53,050 >> JASON Hirschhorn: Έτσι, αν επισήμανε σε τίποτα; 1111 00:52:53,050 --> 00:52:57,740 >> ΦΟΙΤΗΤΗΣ: Ναι, ακριβώς, αν είχε ακόμη μια διεύθυνση μνήμης. 1112 00:52:57,740 --> 00:53:02,220 >> JASON Hirschhorn: Έτσι θέλετε για να ελέγξετε την αξία του ptr; 1113 00:53:02,220 --> 00:53:03,470 >> ΦΟΙΤΗΤΗΣ: Ναι, ακριβώς. 1114 00:53:03,470 --> 00:53:07,940 1115 00:53:07,940 --> 00:53:10,160 >> JASON Hirschhorn: Τι μπορώ να γράψω εδώ αν θέλετε να ελέγξετε την αξία του 1116 00:53:10,160 --> 00:53:11,880 σημείο - τι είναι, Ιορδανία είπε, η αξία; 1117 00:53:11,880 --> 00:53:13,720 Ή αυτό που είναι αποθηκευμένα στο εσωτερικό του ptr; 1118 00:53:13,720 --> 00:53:14,620 >> ΣΠΟΥΔΑΣΤΩΝ: Η διεύθυνση της μνήμης. 1119 00:53:14,620 --> 00:53:16,330 >> JASON Hirschhorn: Η διεύθυνση της μνήμης. 1120 00:53:16,330 --> 00:53:20,520 Έτσι, αν γράφω μόνο αυτό, θα δώσε μου την αξία της ptr. 1121 00:53:20,520 --> 00:53:22,800 Και πώς μπορώ να εκτυπώσετε μια διεύθυνση μνήμης; 1122 00:53:22,800 --> 00:53:26,470 Ποια είναι η συμβολοσειρά μορφοποίησης για μια διεύθυνση μνήμης; 1123 00:53:26,470 --> 00:53:27,430 >> ΦΟΙΤΗΤΗΣ: p%. 1124 00:53:27,430 --> 00:53:28,050 >> JASON Hirschhorn: p%. 1125 00:53:28,050 --> 00:53:29,500 % S είναι ένα string. 1126 00:53:29,500 --> 00:53:30,750 P% για το δείκτη. 1127 00:53:30,750 --> 00:53:40,820 1128 00:53:40,820 --> 00:53:43,540 Είναι σωστό αυτό; 1129 00:53:43,540 --> 00:53:44,790 Αυτό είναι σωστό. 1130 00:53:44,790 --> 00:53:49,450 1131 00:53:49,450 --> 00:53:51,040 Έτσι ptr ισούται με - 1132 00:53:51,040 --> 00:53:53,350 εξακολουθεί να έχει κάτι σε αυτό. 1133 00:53:53,350 --> 00:53:56,110 1134 00:53:56,110 --> 00:53:57,645 Αυτό είναι πιθανώς μια πιο ενδιαφέρουσα ερώτηση. 1135 00:53:57,645 --> 00:53:59,198 Τι σημαίνει ότι η γραμμή κάνει; 1136 00:53:59,198 --> 00:54:00,830 >> ΦΟΙΤΗΤΗΣ: σφάλματα Δευτερόλεπτο. 1137 00:54:00,830 --> 00:54:01,310 >> JASON Hirschhorn: Τι; 1138 00:54:01,310 --> 00:54:02,678 >> ΦΟΙΤΗΤΗΣ: Νομίζω ότι SEG σφάλματα. 1139 00:54:02,678 --> 00:54:03,574 >> JASON Hirschhorn: Χμ; 1140 00:54:03,574 --> 00:54:04,920 >> ΦΟΙΤΗΤΗΣ: Νομίζω ότι θα SEG σφάλμα. 1141 00:54:04,920 --> 00:54:08,265 >> JASON Hirschhorn: Έτσι, αυτή η γραμμή της ptr κώδικα, αστέρι, τι 1142 00:54:08,265 --> 00:54:10,152 δεν το αστέρι σημαίνει; 1143 00:54:10,152 --> 00:54:11,240 >> ΦΟΙΤΗΤΗΣ: Περιεχόμενο. 1144 00:54:11,240 --> 00:54:11,560 >> JASON Hirschhorn: Ναι. 1145 00:54:11,560 --> 00:54:13,910 Πηγαίνετε να πάρει το περιεχόμενο του. 1146 00:54:13,910 --> 00:54:16,830 Έτσι, αυτό πρόκειται να πάει στη μνήμη αντιμετωπίσουν εκεί και να μου δώσει αυτό. 1147 00:54:16,830 --> 00:54:21,030 Συνήθιζα% γ εδώ γιατί εκεί Οι χαρακτήρες που είναι αποθηκευμένα εκεί. 1148 00:54:21,030 --> 00:54:23,390 Έτσι θα πάμε για να πάει στο ότι εμείς διεύθυνση Μόλις είδα - ή κατά πάσα πιθανότητα θα είναι μια 1149 00:54:23,390 --> 00:54:25,190 λίγο διαφορετικά αυτή φορά που θα τρέξει το πρόγραμμα. 1150 00:54:25,190 --> 00:54:28,010 Αλλά θα πάμε σε αυτή τη διεύθυνση η οποία γνωρίζουμε ότι εξακολουθεί να υπάρχει 1151 00:54:28,010 --> 00:54:29,260 και να δούμε τι υπάρχει εκεί. 1152 00:54:29,260 --> 00:54:35,640 1153 00:54:35,640 --> 00:54:37,110 >> Γι 'αυτό δεν SEG σφάλμα. 1154 00:54:37,110 --> 00:54:38,970 Απλά δεν μας δίνουν τίποτα. 1155 00:54:38,970 --> 00:54:43,350 Θα μπορούσε να δώσει πραγματικά μας κάτι, απλά δεν μπορούμε να το δούμε. 1156 00:54:43,350 --> 00:54:45,110 Και αυτό πηγαίνει πίσω στην ιδέα - 1157 00:54:45,110 --> 00:54:47,270 και εμείς δεν πρόκειται να πάρει πάρα πολύ σε αυτό, γιατί αυτό είναι πέρα ​​από το 1158 00:54:47,270 --> 00:54:48,460 σκοπός του μαθήματος. 1159 00:54:48,460 --> 00:54:51,260 Αλλά μιλήσαμε για το δικαίωμα εδώ, αν υπερέβη τα όρια του πίνακα με 1160 00:54:51,260 --> 00:54:54,890 1, ίσως να μην πάρει στο πρόβλημα. 1161 00:54:54,890 --> 00:54:58,550 >> Μερικές φορές, όταν απλά να πάει μακριά με 1, κάνεις κάτι λάθος, και θα 1162 00:54:58,550 --> 00:54:59,220 θα μπορούσε να πάρει στο πρόβλημα. 1163 00:54:59,220 --> 00:55:00,820 Αλλά δεν χρειάζεται πάντα να πάρει στο πρόβλημα. 1164 00:55:00,820 --> 00:55:05,170 Εξαρτάται από το πόσο κακό πράγμα που το κάνετε, θα πάμε για να πάρει στο πρόβλημα. 1165 00:55:05,170 --> 00:55:07,790 Ποια είναι για να μην πω, είναι ατημέλητη με τον κωδικό σας. 1166 00:55:07,790 --> 00:55:12,080 Αλλά πρέπει να πω, το πρόγραμμα δεν θα πάντα σταματήσουν το κάπνισμα, ακόμα και αν πάτε κάπου 1167 00:55:12,080 --> 00:55:14,130 δεν είστε υποτίθεται για να πάει. 1168 00:55:14,130 --> 00:55:18,170 >> Ένα καλό παράδειγμα αυτού είναι, πολλά άνθρωποι στην πρόβλημά τους set 3, η οποία 1169 00:55:18,170 --> 00:55:22,350 ήταν 15, δεν ελέγχει την όρια του διοικητικού συμβουλίου. 1170 00:55:22,350 --> 00:55:25,860 Έτσι κοίταξε αριστερά, κοίταξε προς το δεξιά, κοίταξε προς την κορυφή, κοίταξε 1171 00:55:25,860 --> 00:55:27,000 προς τα κάτω. 1172 00:55:27,000 --> 00:55:31,540 Αλλά δεν ελέγξτε για να δείτε εάν η κορυφή ήταν πραγματικά πρόκειται να είναι στο διοικητικό συμβούλιο. 1173 00:55:31,540 --> 00:55:35,220 Και πολλοί άνθρωποι που το έκαναν αυτό και αποδείχθηκε ότι, το πρόγραμμά τους εργάστηκαν 1174 00:55:35,220 --> 00:55:38,960 τέλεια, γιατί όταν το πλοίο ήταν αποθηκευμένα στη μνήμη, αν πήγε ένα 1175 00:55:38,960 --> 00:55:42,300 πάνω από αυτό ή να ελέγχεται ότι η μνήμη διεύθυνση, δεν υπήρχε τίποτα 1176 00:55:42,300 --> 00:55:44,870 ιδιαίτερα φρικτό γι 'αυτό, ώστε το πρόγραμμά σας δεν ήταν 1177 00:55:44,870 --> 00:55:45,970 πρόκειται να φωνάζω σε σας. 1178 00:55:45,970 --> 00:55:48,870 >> Αλλά θα εξακολουθούν να απογειωθεί σημεία, αν δεν έχετε ελέγξει ότι, επειδή 1179 00:55:48,870 --> 00:55:50,850 έκαναν κάτι που δεν ήταν έπρεπε να κάνω, και θα μπορούσε να έχει 1180 00:55:50,850 --> 00:55:51,860 πάρει στο πρόβλημα. 1181 00:55:51,860 --> 00:55:54,040 Οι πιθανότητες είναι, όμως, τότε μάλλον δεν το έκανε. 1182 00:55:54,040 --> 00:55:57,790 Έτσι, αυτό είναι να δείξει ότι, ναι, μπορούμε ακόμα να πάμε σε αυτό. 1183 00:55:57,790 --> 00:55:59,010 Και δεν είμαστε πάρει το πρόβλημα σε αυτή την περίπτωση. 1184 00:55:59,010 --> 00:56:04,000 Αν προσπαθούσαμε να κάνουμε διαβάστε το επόμενα 100 χαρακτήρες, θα έπαιρνα 1185 00:56:04,000 --> 00:56:06,000 πιθανόν να έρθετε σε μπελάδες. 1186 00:56:06,000 --> 00:56:09,400 Και τότε μπορείτε να προγραμματίσετε την ανάγνωση της επόμενης 100 χαρακτήρες, αν θέλετε, να κάνει κάποια 1187 00:56:09,400 --> 00:56:10,110 είδος για το βρόχο. 1188 00:56:10,110 --> 00:56:10,850 Ναι. 1189 00:56:10,850 --> 00:56:16,250 >> ΦΟΙΤΗΤΗΣ: Από τότε που αποδίδεται ότι χώρο μια πραγματική αξία, δεν θα 1190 00:56:16,250 --> 00:56:17,050 είναι πράγματι σε θέση να δείτε τίποτα. 1191 00:56:17,050 --> 00:56:21,740 Θα πρέπει να το δοκιμάσετε με ρύθμιση που ίση με c αρέσει ή κάτι άλλο; 1192 00:56:21,740 --> 00:56:22,640 >> JASON Hirschhorn: Μεγάλη ερώτηση. 1193 00:56:22,640 --> 00:56:25,340 Πώς μπορώ να ορίσω την τιμή αυτή - 1194 00:56:25,340 --> 00:56:28,980 ποια γραμμή κώδικα μπορώ να γράψω on line επτά για να κάνει ό, τι είπατε; 1195 00:56:28,980 --> 00:56:34,040 >> ΦΟΙΤΗΤΗΣ: Star ptr ισούται με ενιαίο quote c τέλος μόνη προσφορά. 1196 00:56:34,040 --> 00:56:36,970 >> JASON Hirschhorn: Έτσι ώστε να είναι βάζοντας ένα χαρακτήρα, γ, σε αυτή τη θέση, 1197 00:56:36,970 --> 00:56:40,200 γιατί και πάλι, ότι αστέρι σημαίνει να πάει εκεί. 1198 00:56:40,200 --> 00:56:43,320 Και όταν χρησιμοποιείται στην αριστερή πλευρά ένας φορέας ανάθεσης, που ισούται με 1199 00:56:43,320 --> 00:56:47,270 υπογράψει, εμείς δεν πρόκειται να πάρει ότι αξία τόσο πολύ που αυτή η τιμή. 1200 00:56:47,270 --> 00:56:48,520 Τώρα, ας δούμε τι θα συμβεί. 1201 00:56:48,520 --> 00:56:54,700 1202 00:56:54,700 --> 00:56:56,770 >> Βάζουμε κάτι εκεί και ήταν εκεί. 1203 00:56:56,770 --> 00:56:58,000 Ζητήσαμε δωρεάν. 1204 00:56:58,000 --> 00:57:00,100 Μερικά πράγματα ίσως συνέβη στο σωρό. 1205 00:57:00,100 --> 00:57:01,890 Έτσι δεν είναι πια εκεί. 1206 00:57:01,890 --> 00:57:07,440 Αλλά και πάλι, δεν είμαστε πάρει στο πρόβλημα για να πάει εκεί. 1207 00:57:07,440 --> 00:57:10,260 >> Κάνω αυτό σε κώδικα για να απεικονίσουν ότι πολλά από αυτά 1208 00:57:10,260 --> 00:57:12,410 ερωτήσεις που έχετε, είναι πραγματικά ενδιαφέρον 1209 00:57:12,410 --> 00:57:13,650 απαντά πολύ χρόνο. 1210 00:57:13,650 --> 00:57:15,260 Και είναι πραγματικά καλές ερωτήσεις. 1211 00:57:15,260 --> 00:57:19,010 Και μπορείτε να τα καταλάβω σε το δικό σας αν, για παράδειγμα, 1212 00:57:19,010 --> 00:57:19,990 Δεν είμαστε στο τμήμα. 1213 00:57:19,990 --> 00:57:20,940 Ναι. 1214 00:57:20,940 --> 00:57:24,430 >> ΦΟΙΤΗΤΗΣ: Επειδή δεν είστε αποστολή της pointer οπουδήποτε, δεν θα πρέπει να 1215 00:57:24,430 --> 00:57:26,530 χρησιμοποιήσετε malloc; 1216 00:57:26,530 --> 00:57:28,400 >> JASON Hirschhorn: Έτσι, αυτό πηγαίνει πίσω στην αρχική ερώτηση σας. 1217 00:57:28,400 --> 00:57:28,620 [? ?] 1218 00:57:28,620 --> 00:57:29,980 Είναι απλά μια τοπική μεταβλητή; 1219 00:57:29,980 --> 00:57:32,280 Malloc εδώ δεν είναι τόσο συναρπαστικό. 1220 00:57:32,280 --> 00:57:35,260 Η χρήση της malloc εδώ δεν είναι ότι συναρπαστικό γιατί είναι 1221 00:57:35,260 --> 00:57:36,500 απλά μια τοπική μεταβλητή. 1222 00:57:36,500 --> 00:57:40,970 >> ΦΟΙΤΗΤΗΣ: Έτσι θα μπορούσατε να κάνετε char ptr αστέρι ισούται με γεια; 1223 00:57:40,970 --> 00:57:41,400 >> JASON Hirschhorn: Αχ. 1224 00:57:41,400 --> 00:57:43,300 Έτσι θα πάμε για να πάρει τώρα πίσω στην αρχική ερώτηση σας. 1225 00:57:43,300 --> 00:57:46,885 Νομίζω ότι δεν ήταν ικανοποιημένοι με την απάντησή μου. 1226 00:57:46,885 --> 00:57:48,220 Εντάξει; 1227 00:57:48,220 --> 00:57:49,226 Όπως αυτό; 1228 00:57:49,226 --> 00:57:49,682 >> ΦΟΙΤΗΤΗΣ: Ναι. 1229 00:57:49,682 --> 00:57:50,932 Περιμένετε. 1230 00:57:50,932 --> 00:57:54,090 1231 00:57:54,090 --> 00:57:57,850 >> JASON Hirschhorn: Και πού θέλετε να εκτυπώσετε; 1232 00:57:57,850 --> 00:58:00,026 Έτσι θα εκτυπώσετε μια σειρά σαν αυτό; 1233 00:58:00,026 --> 00:58:06,380 1234 00:58:06,380 --> 00:58:07,630 >> ΣΠΟΥΔΑΣΤΩΝ: Ενδιαφέρον. 1235 00:58:07,630 --> 00:58:09,900 1236 00:58:09,900 --> 00:58:14,285 >> JASON Hirschhorn: Έτσι, αυτό λέει αυτό επιχείρημα το είδος του χαρακτήρα. 1237 00:58:14,285 --> 00:58:17,200 1238 00:58:17,200 --> 00:58:18,620 Έτσι, αυτό θα πρέπει να είναι ένας χαρακτήρας. 1239 00:58:18,620 --> 00:58:25,170 1240 00:58:25,170 --> 00:58:26,280 >> ΦΟΙΤΗΤΗΣ: παίρνει μόνο το πρώτο. 1241 00:58:26,280 --> 00:58:28,610 >> JASON Hirschhorn: Έτσι, αυτό Είναι αυτό που είπα πριν. 1242 00:58:28,610 --> 00:58:34,240 Όπως είπα, δεν είναι η αποθήκευση σπάγκο μέσα μεταβλητού δείκτη. 1243 00:58:34,240 --> 00:58:35,120 Είναι αποθήκευση - 1244 00:58:35,120 --> 00:58:36,350 >> ΣΠΟΥΔΑΣΤΩΝ: Η πρώτη τιμή του string. 1245 00:58:36,350 --> 00:58:40,810 >> JASON Hirschhorn: Η διεύθυνση του η πρώτη τιμή της συμβολοσειράς. 1246 00:58:40,810 --> 00:58:46,940 Αν ήταν να εκτυπώσετε αυτό, είμαστε να πάρει την αξία εσωτερικό δείκτη. 1247 00:58:46,940 --> 00:58:51,005 Και θα δείτε ότι είναι, πράγματι, μια διεύθυνση μνήμης. 1248 00:58:51,005 --> 00:58:53,595 1249 00:58:53,595 --> 00:58:56,440 >> Μήπως αυτό έχει νόημα; 1250 00:58:56,440 --> 00:58:56,940 Λυπάμαι. 1251 00:58:56,940 --> 00:58:58,996 Περιμένετε, έχει απαντήσει ότι σας ερώτημα, όμως; 1252 00:58:58,996 --> 00:58:59,790 >> ΦΟΙΤΗΤΗΣ: Ναι. 1253 00:58:59,790 --> 00:59:05,830 >> JASON Hirschhorn: Αυτή η γραμμή κώδικα είναι δημιουργώντας μια σειρά και, στη συνέχεια, ένα άλλο 1254 00:59:05,830 --> 00:59:09,115 μεταβλητή δείκτη που να υποδεικνύουν στην εν λόγω σειρά, η σειρά. 1255 00:59:09,115 --> 00:59:14,320 1256 00:59:14,320 --> 00:59:14,980 Ναι. 1257 00:59:14,980 --> 00:59:19,200 >> ΦΟΙΤΗΤΗΣ: Έτσι, αν πήγαμε μία μνήμη την περαιτέρω αντιμετώπιση, θα έχουμε την ώρα; 1258 00:59:19,200 --> 00:59:21,990 1259 00:59:21,990 --> 00:59:23,150 Μήπως έχει αποθηκευτεί ως ένα string; 1260 00:59:23,150 --> 00:59:24,400 >> JASON Hirschhorn: Όπως, κάναμε - 1261 00:59:24,400 --> 00:59:28,540 1262 00:59:28,540 --> 00:59:30,790 έτσι αυτό είναι πολύτιμο για να το κάνετε. 1263 00:59:30,790 --> 00:59:33,780 Αυτό είναι το σημείο αριθμητική, την οποία εσείς έχουν δει στο παρελθόν και θα πρέπει να 1264 00:59:33,780 --> 00:59:35,550 σχετικά άνετα. 1265 00:59:35,550 --> 00:59:36,905 Αυτό είναι σαν να γράφει - 1266 00:59:36,905 --> 00:59:41,980 1267 00:59:41,980 --> 00:59:46,350 αν ήταν να γράψω αυτήν τη γραμμή κώδικα, έχουμε δει σημειογραφία πίνακα πριν. 1268 00:59:46,350 --> 00:59:55,900 Αυτό θα πρέπει να μας δώσει το δεύτερο αξία σε αυτήν την συστοιχία, h. 1269 00:59:55,900 --> 01:00:05,010 >> Αν το κάναμε αυτό, θα πρέπει επίσης να δώσει μας η δεύτερη αξία σε αυτόν τον πίνακα. 1270 01:00:05,010 --> 01:00:08,320 Επειδή δεν πρόκειται για τη μνήμη διεύθυνση από το πρώτο πράγμα, αλλά η 1271 01:00:08,320 --> 01:00:10,530 διεύθυνση μνήμης του ένα πράγμα πάνω. 1272 01:00:10,530 --> 01:00:14,360 Και τότε οι dereferences φορέα αστέρων ότι δείκτη. 1273 01:00:14,360 --> 01:00:16,940 Και πάλι, ας δούμε. 1274 01:00:16,940 --> 01:00:18,664 Παίρνουμε πάλι h. 1275 01:00:18,664 --> 01:00:20,980 >> ΦΟΙΤΗΤΗΣ: Τι ακριβώς κάνει Αποαναφορά σημαίνει; 1276 01:00:20,980 --> 01:00:23,650 >> JASON Hirschhorn: Αποαναφορά είναι μια φανταχτερή λέξη για να πάει να. 1277 01:00:23,650 --> 01:00:26,390 Πηγαίνετε σε αυτό και να πάρει ό, τι υπάρχει είναι να dereference ένα δείκτη. 1278 01:00:26,390 --> 01:00:28,240 Είναι απλά μια φανταχτερή λέξη για αυτό. 1279 01:00:28,240 --> 01:00:29,986 >> ΦΟΙΤΗΤΗΣ: Αν θέλαμε να εκτυπώσετε όλο το κείμενο, θα μπορούσαμε 1280 01:00:29,986 --> 01:00:31,930 κάνει εμπορικό δείκτη; 1281 01:00:31,930 --> 01:00:33,490 >> JASON Hirschhorn: Εντάξει, είμαστε Θα σταματήσω εδώ. 1282 01:00:33,490 --> 01:00:35,480 Εμείς πρόκειται να τελειώσει εδώ. 1283 01:00:35,480 --> 01:00:41,760 Εμπορικό και σας δίνει τη διεύθυνση μιας θέση, έτσι ώστε όταν κάνετε εμπορικό του 1284 01:00:41,760 --> 01:00:44,080 μια μεταβλητή, σας δίνει τη διεύθυνση όπου είναι αποθηκευμένη η μεταβλητή. 1285 01:00:44,080 --> 01:00:48,580 Ampersand δείκτης θα σας το δώσει διεύθυνση ptr όπου ptr είναι στη μνήμη. 1286 01:00:48,580 --> 01:00:50,140 >> Εμείς δεν πρόκειται να πάει για με αυτό το παράδειγμα. 1287 01:00:50,140 --> 01:00:52,640 Μπορείτε να καταλάβω αυτά πράγματα για τη δική σας. 1288 01:00:52,640 --> 01:00:55,740 Αλλά και πάλι, αυτό θα μπορούσε ακόμη και να αγγίζει τα όρια ενός λίγο πέρα ​​από ό, τι πρέπει να ξέρετε για 1289 01:00:55,740 --> 01:00:58,000 το πεδίο εφαρμογής της παρούσας ενδιάμεσης - 1290 01:00:58,000 --> 01:00:59,070 ή αυτό το κουίζ, μάλλον. 1291 01:00:59,070 --> 01:01:00,270 Λυπάμαι. 1292 01:01:00,270 --> 01:01:03,770 >> Θα προχωρήσουμε, γιατί θα ήθελα να κάνω ένα πρόβλημα κωδικοποίησης 1293 01:01:03,770 --> 01:01:05,100 πριν την ώρα είναι επάνω. 1294 01:01:05,100 --> 01:01:09,340 Και πρόκειται να κωδικοποιήσει αυτό που νομίζω είναι το πιο συναρπαστικό από αυτές 1295 01:01:09,340 --> 01:01:11,020 παραδείγματα, atoi. 1296 01:01:11,020 --> 01:01:14,520 Έτσι, αυτό ήταν ένα ζήτημα για ένα κουίζ πριν από δύο χρόνια. 1297 01:01:14,520 --> 01:01:17,810 Και έχω στον πίνακα εδώ. 1298 01:01:17,810 --> 01:01:20,680 >> Οι άνθρωποι κλήθηκαν στο κουίζ - 1299 01:01:20,680 --> 01:01:23,640 τους δόθηκε λίγο περισσότερο tesxt σε η ερώτηση, αλλά εγώ εξαλειφθεί η 1300 01:01:23,640 --> 01:01:26,640 κειμένου, ότι ήταν αχρείαστο για τους σκοπούς μας τώρα. 1301 01:01:26,640 --> 01:01:29,180 Ήταν απλά κάποιο υπόβαθρο σε ποια atoi έκανε. 1302 01:01:29,180 --> 01:01:31,425 Αλλά όλοι γνωρίζουν και είναι πολύ εξοικειωμένοι με atoi. 1303 01:01:31,425 --> 01:01:35,620 >> Σας προτείνω να κωδικοποιήσει αυτό σε ένα φύλλο χαρτιού. 1304 01:01:35,620 --> 01:01:39,310 Προτείνω επίσης να χρησιμοποιήσετε τη στρατηγική ότι έχουμε περάσει πάνω 1305 01:01:39,310 --> 01:01:41,040 πολλά στο τμήμα μας. 1306 01:01:41,040 --> 01:01:44,130 Πρώτον, βεβαιωθείτε ότι έχετε κατανοήσει τι κάνει ο atoi. 1307 01:01:44,130 --> 01:01:47,580 Σχεδιάστε μια εικόνα ή να καταλήξει σε ορισμένα νοητική εικόνα του στο κεφάλι σας. 1308 01:01:47,580 --> 01:01:51,120 Στη συνέχεια, γράψτε ψευδοκώδικας για αυτό. 1309 01:01:51,120 --> 01:01:53,120 Στο κουίζ, αν το μόνο που έχετε είναι ψευδοκώδικα, τουλάχιστον θα 1310 01:01:53,120 --> 01:01:54,550 βάλει κάτι κάτω. 1311 01:01:54,550 --> 01:02:00,070 Και στη συνέχεια χάρτη που ψευδοκώδικα σε Γ. Αν έχετε μια επιταγή σε σας 1312 01:02:00,070 --> 01:02:03,760 ψευδοκώδικα, όπως και ελέγξτε αν κάτι είναι 1, δηλαδή χάρτες σε μία περίπτωση 1313 01:02:03,760 --> 01:02:05,750 κατάσταση και ούτω καθεξής. 1314 01:02:05,750 --> 01:02:07,850 Και τέλος, την κωδικοποίηση του προγράμματος σε C. 1315 01:02:07,850 --> 01:02:15,000 >> Έτσι, πηγαίνετε πίσω στο atoi και πέντε λεπτά να κωδικοποιήσει αυτό σε ένα φύλλο 1316 01:02:15,000 --> 01:02:19,480 χαρτί, το οποίο είναι πιθανώς περίπου το χρονικό διάστημα που θα αναλάβει την 1317 01:02:19,480 --> 01:02:21,260 κουίζ για atoi κώδικα. 1318 01:02:21,260 --> 01:02:27,060 Πέντε έως 15 λεπτά, πέντε έως 12, πέντε έως 10 λεπτά, είναι για το ποσό των 1319 01:02:27,060 --> 01:02:30,150 χρόνος που θα περάσετε σε αυτό ερώτηση στο κουίζ. 1320 01:02:30,150 --> 01:02:31,670 Έτσι χρειαστούν πέντε λεπτά τώρα, παρακαλώ. 1321 01:02:31,670 --> 01:02:35,957 Και εάν έχετε οποιεσδήποτε ερωτήσεις, να εκφράσουν το χέρι σας και θα έρθει γύρω. 1322 01:02:35,957 --> 01:06:39,570 1323 01:06:39,570 --> 01:06:41,066 >> [ΣΥΝΟΜΙΛΙΕΣ SIDE] 1324 01:06:41,066 --> 01:08:35,279 1325 01:08:35,279 --> 01:08:37,580 >> JASON Hirschhorn: Εντάξει, έτσι ώστε ότι ήταν πέντε λεπτά. 1326 01:08:37,580 --> 01:08:39,880 Αυτό ήταν κατά πάσα πιθανότητα για το ποσό των χρόνος που θα περάσετε σε ότι σε ένα κουίζ, 1327 01:08:39,880 --> 01:08:42,120 ίσως το χαμηλό τέλος εκείνου του χρόνου. 1328 01:08:42,120 --> 01:08:44,010 Θα ανακεφαλαιώσουμε σε λίγο. 1329 01:08:44,010 --> 01:08:45,740 Ας την έναρξη της κωδικοποίησης αυτό. 1330 01:08:45,740 --> 01:08:49,479 Και αν δεν πάρει όλος ο τρόπος μέσω, οι απαντήσεις σε αυτό και αυτό 1331 01:08:49,479 --> 01:08:54,189 ερώτηση κουίζ είναι διαθέσιμα, και πάλι, Φθινόπωρο 2011 είναι όταν αυτή η ερώτηση 1332 01:08:54,189 --> 01:08:54,913 εμφανίστηκε στο κουίζ. 1333 01:08:54,913 --> 01:08:57,830 >> Και άξιζε οκτώ σημεία στο κουίζ τότε. 1334 01:08:57,830 --> 01:09:01,140 Οκτώ σημεία είναι το υψηλό τέλος της ποσό των πόντων κάτι που αξίζει. 1335 01:09:01,140 --> 01:09:04,790 Οι περισσότερες ερωτήσεις είναι στην περιοχή ενός έως έξι μονάδες. 1336 01:09:04,790 --> 01:09:08,500 Έτσι, αυτό είναι ένα πιο δύσκολο ερώτημα, αυτό είναι σίγουρο. 1337 01:09:08,500 --> 01:09:09,750 Μπορεί κάποιος να μου ξεκίνησε; 1338 01:09:09,750 --> 01:09:13,260 1339 01:09:13,260 --> 01:09:15,380 >> Σε γενικές γραμμές, τι θα να θέλετε να κάνετε με αυτό 1340 01:09:15,380 --> 01:09:17,550 λειτουργούν atoi, λογικά; 1341 01:09:17,550 --> 01:09:19,569 Τι θέλουμε να κάνουμε; 1342 01:09:19,569 --> 01:09:22,279 Έτσι θα πάμε για να γράψει κάποια ψευδοκώδικα. 1343 01:09:22,279 --> 01:09:24,090 >> ΦΟΙΤΗΤΗΣ: Μετατροπή χαρακτήρες σε ακέραιους αριθμούς. 1344 01:09:24,090 --> 01:09:26,700 >> JASON Hirschhorn: Μετατροπή χαρακτήρες σε ακέραιους αριθμούς. 1345 01:09:26,700 --> 01:09:27,479 OK. 1346 01:09:27,479 --> 01:09:30,870 Έτσι, πόσους χαρακτήρες είμαστε Θα χρειαστεί να περάσουν; 1347 01:09:30,870 --> 01:09:32,295 >> ΦΟΙΤΗΤΗΣ: Όλοι τους. 1348 01:09:32,295 --> 01:09:34,100 >> ΦΟΙΤΗΤΗΣ: Όλοι οι χαρακτήρες στη συμβολοσειρά. 1349 01:09:34,100 --> 01:09:35,540 >> JASON Hirschhorn: Όλα τα χαρακτήρες στη συμβολοσειρά. 1350 01:09:35,540 --> 01:09:42,180 Έτσι, αν θέλαμε να πάμε μέσα από κάθε χαρακτήρα σε μια σειρά, αυτό είναι ένα πράγμα 1351 01:09:42,180 --> 01:09:44,560 σε C έχουμε δει ότι επέτρεψε μας επιτρέψει να περάσουν κάθε 1352 01:09:44,560 --> 01:09:45,939 χαρακτήρα σε μια σειρά; 1353 01:09:45,939 --> 01:09:46,819 >> ΦΟΙΤΗΤΕΣ: A για το βρόχο. 1354 01:09:46,819 --> 01:09:48,069 >> JASON Hirschhorn: Α για το βρόχο. 1355 01:09:48,069 --> 01:09:52,020 1356 01:09:52,020 --> 01:09:55,330 Έτσι θα πάμε να βρόχο μέσω κάθε χαρακτήρα s. 1357 01:09:55,330 --> 01:10:00,940 >> Τότε τι θα πάμε να θέλουν να κάνουν όταν παίρνουμε ένα συγκεκριμένο χαρακτήρα; 1358 01:10:00,940 --> 01:10:02,480 Ας πούμε ότι είστε για να περάσει ένα 90. 1359 01:10:02,480 --> 01:10:03,460 Έχουμε πάρει το 9. 1360 01:10:03,460 --> 01:10:04,240 Είναι ένας χαρακτήρας. 1361 01:10:04,240 --> 01:10:07,440 Τι θέλουμε να κάνουμε με ότι ο χαρακτήρας 9; 1362 01:10:07,440 --> 01:10:10,082 >> ΦΟΙΤΗΤΗΣ: Αφαίρεσε από τον χαρακτήρα 0; 1363 01:10:10,082 --> 01:10:11,860 >> ΦΟΙΤΗΤΗΣ: Προσθήκη 0; 1364 01:10:11,860 --> 01:10:13,350 >> JASON Hirschhorn: Αφαιρείται το από το χαρακτήρα 0; 1365 01:10:13,350 --> 01:10:13,800 >> ΦΟΙΤΗΤΗΣ: Ναι. 1366 01:10:13,800 --> 01:10:15,573 >> JASON Hirschhorn: Γιατί θέλετε να το κάνετε αυτό; 1367 01:10:15,573 --> 01:10:16,560 >> ΦΟΙΤΗΤΗΣ: [δεν ακούγεται] 1368 01:10:16,560 --> 01:10:17,010 αξία. 1369 01:10:17,010 --> 01:10:18,380 Int αξία του. 1370 01:10:18,380 --> 01:10:21,580 >> JASON Hirschhorn: Εντάξει, έτσι ώστε να πάρουμε το χαρακτήρα 9, το αφαιρέσουμε από 1371 01:10:21,580 --> 01:10:25,820 0 χαρακτήρας για να πάρετε μια πραγματική ακέραιος 9. 1372 01:10:25,820 --> 01:10:27,070 Sweet. 1373 01:10:27,070 --> 01:10:31,255 1374 01:10:31,255 --> 01:10:37,000 Και πώς ξέρεις ότι ο χαρακτήρας 9 μείον 0 χαρακτήρας είναι 9; 1375 01:10:37,000 --> 01:10:39,222 Τι διάγραμμα δεν κοιτάς; 1376 01:10:39,222 --> 01:10:43,130 >> ΦΟΙΤΗΤΗΣ: Υπάρχουν λογικά εννέα θέσεις μεταξύ 9 και 0. 1377 01:10:43,130 --> 01:10:44,620 Ή θα μπορούσατε να δείτε στο τραπέζι ASCII. 1378 01:10:44,620 --> 01:10:45,120 >> JASON Hirschhorn: ASCII πίνακα. 1379 01:10:45,120 --> 01:10:46,490 Αλλά ναι, είστε σωστοί, καθώς και. 1380 01:10:46,490 --> 01:10:47,780 Έτσι αφαιρέσουμε 0. 1381 01:10:47,780 --> 01:10:49,010 Έτσι τώρα έχουμε τον ακέραιο 9. 1382 01:10:49,010 --> 01:10:49,970 Και τι θέλουμε να κάνουμε με αυτό; 1383 01:10:49,970 --> 01:10:54,970 Αν έχουμε 90, είναι ο πρώτος ακέραιος έχουμε, τι θέλουμε να κάνουμε; 1384 01:10:54,970 --> 01:10:58,180 >> ΦΟΙΤΗΤΗΣ: Θα έβαζα σε μια προσωρινή ακέραιο σειρά, στη συνέχεια, κάντε τα μαθηματικά για να το 1385 01:10:58,180 --> 01:11:02,088 αργότερα να το κάνει σε ένα τέλος. 1386 01:11:02,088 --> 01:11:03,020 >> JASON Hirschhorn: OK. 1387 01:11:03,020 --> 01:11:06,990 >> ΦΟΙΤΗΤΗΣ: Μπορείτε να αρχίσει στο τέλος του η σειρά και στη συνέχεια να κινηθεί προς τα εμπρός, ώστε 1388 01:11:06,990 --> 01:11:10,350 ότι κάθε φορά που κινείστε προς τα εμπρός, πολλαπλασιάζουμε με το 10. 1389 01:11:10,350 --> 01:11:10,830 >> JASON Hirschhorn: OK. 1390 01:11:10,830 --> 01:11:12,250 Αυτό ακούγεται σαν μια πολύ συναρπαστικό ιδέα. 1391 01:11:12,250 --> 01:11:16,040 Μπορούμε να ξεκινήσουν στο τέλος του πίνακα μας, και μπορούμε να χρησιμοποιήσουμε strleng. 1392 01:11:16,040 --> 01:11:17,030 Μπορούμε να χρησιμοποιήσουμε strleng εδώ. 1393 01:11:17,030 --> 01:11:18,870 Θα πάρει το μήκος της συμβολοσειράς μας. 1394 01:11:18,870 --> 01:11:20,100 Ξεκινάμε στο τέλος. 1395 01:11:20,100 --> 01:11:29,170 Και + το πρώτο, παίρνουμε μόνο ότι ακέραιος, και ίσως έχουμε δημιουργήσει σαν 1396 01:11:29,170 --> 01:11:32,270 νέα ακέραια μεταβλητή επάνω στην κορυφή, όπου είμαστε αποθήκευση πάντα. 1397 01:11:32,270 --> 01:11:37,340 Γι 'αυτό βρόχο μέσα από κάθε χαρακτήρα μέσα από την s πίσω προς τα εμπρός, τότε αφαιρούμε 0, και 1398 01:11:37,340 --> 01:11:42,790 τότε θα το πάρετε, και ανάλογα με όπου είναι, μπορούμε να πολλαπλασιάσουμε 1399 01:11:42,790 --> 01:11:45,860 από μια δύναμη του 10. 1400 01:11:45,860 --> 01:11:50,644 Επειδή το πρώτο, τι κάνουμε εμείς πολλαπλασιάστε το δεξιότερο χαρακτήρα; 1401 01:11:50,644 --> 01:11:51,440 >> ΦΟΙΤΗΤΗΣ: 10 στο 0. 1402 01:11:51,440 --> 01:11:53,170 >> JASON Hirschhorn: 10 στο 0. 1403 01:11:53,170 --> 01:11:56,010 Τι πολλαπλασιάζουμε το δεύτερο δεξιότερο χαρακτήρα; 1404 01:11:56,010 --> 01:11:57,450 >> ΦΟΙΤΗΤΗΣ: [δεν ακούγεται]. 1405 01:11:57,450 --> 01:11:57,960 >> JASON Hirschhorn: Τι; 1406 01:11:57,960 --> 01:11:59,150 >> ΦΟΙΤΗΤΗΣ: 10 στο 1. 1407 01:11:59,150 --> 01:12:00,420 >> JASON Hirschhorn: 10 στο 1. 1408 01:12:00,420 --> 01:12:03,754 Ο χαρακτήρας τρίτων δεξιά; 1409 01:12:03,754 --> 01:12:04,580 >> ΦΟΙΤΗΤΗΣ: 10 2. 1410 01:12:04,580 --> 01:12:05,350 >> JASON Hirschhorn: 10 2. 1411 01:12:05,350 --> 01:12:07,200 >> ΦΟΙΤΗΤΗΣ: Συγγνώμη, δεν καταλαβαίνω τι κάνουμε εδώ. 1412 01:12:07,200 --> 01:12:08,640 >> JASON Hirschhorn: OK, ας πάμε πίσω, τότε. 1413 01:12:08,640 --> 01:12:12,500 Έτσι θα πάμε για να πάρει πέρασε σε μια σειρά. 1414 01:12:12,500 --> 01:12:14,470 Επειδή γράφουμε atoi. 1415 01:12:14,470 --> 01:12:15,260 Έτσι, θα έχουμε περάσει σε μια σειρά. 1416 01:12:15,260 --> 01:12:17,640 Ας πούμε ότι είστε για να περάσει στη συμβολοσειρά 90. 1417 01:12:17,640 --> 01:12:19,930 >> Το πρώτο πράγμα που πρόκειται να κάνετε είναι να ορίσετε μια νέα ακέραια μεταβλητή που είμαστε 1418 01:12:19,930 --> 01:12:22,150 ακριβώς πρόκειται να δημιουργήσει ως νέα μας ακέραιο. 1419 01:12:22,150 --> 01:12:24,630 Γι 'αυτό θα πάμε να επιστρέψει στο τέλος. 1420 01:12:24,630 --> 01:12:30,110 Πρέπει να περάσει από κάθε χαρακτήρα η χορδών, γιατί έχουμε καθορίσει 1421 01:12:30,110 --> 01:12:34,430 ότι πρέπει να αγγίξει κάθε μία και στη συνέχεια προσθέστε το νέο μας ακέραιο. 1422 01:12:34,430 --> 01:12:36,330 >> Αλλά δεν μπορούμε απλά να το προσθέσετε ως αριθμός. 1423 01:12:36,330 --> 01:12:38,270 Δεν μπορείτε να πάρετε μόνο 9 και προσθήκη 9 σε ακέραιο μας. 1424 01:12:38,270 --> 01:12:40,560 Εξαρτάται από το ποια θέση είναι στη συμβολοσειρά. 1425 01:12:40,560 --> 01:12:42,960 Εμείς πάμε να πρέπει να πολλαπλασιάσετε αυτό από μια δύναμη του 10. 1426 01:12:42,960 --> 01:12:45,580 Επειδή αυτό είναι το πώς βάσης 10 έργα. 1427 01:12:45,580 --> 01:12:49,050 >> Έτσι θα πάμε για να πάρει την πραγματική χαρακτήρα, ή ο πραγματικός ακέραιος 1428 01:12:49,050 --> 01:12:53,860 τον αριθμό, αφαιρώντας χαρακτήρα 0 από τον χαρακτήρα 9 όπως κάναμε με 1429 01:12:53,860 --> 01:12:57,560 αφαιρώντας χαρακτήρα του κεφαλαίου Α από ό, τι χαρακτήρα που είχαμε σε ένα από τα 1430 01:12:57,560 --> 01:12:58,120 αυτά τα προβλήματα. 1431 01:12:58,120 --> 01:13:04,190 Γι 'αυτό και θα πάρετε στην πραγματικότητα μια σειρά από 0 έως 9 αποθηκεύεται ως ένα πραγματικό αριθμό, και θα 1432 01:13:04,190 --> 01:13:07,590 το πολλαπλασιάζουμε με μία δύναμη του 10, ανάλογα για το πού βρισκόμαστε στη συμβολοσειρά. 1433 01:13:07,590 --> 01:13:19,430 1434 01:13:19,430 --> 01:13:22,575 Και μετά θα πάμε για να το προσθέσετε ξανά σε νέες ακέραια μεταβλητή μας. 1435 01:13:22,575 --> 01:13:32,840 1436 01:13:32,840 --> 01:13:37,890 >> Έτσι αυτό θα μοιάζει θα να - θα συντάξει εδώ. 1437 01:13:37,890 --> 01:13:40,086 Αν πάρετε περάσει στη σειρά 90 - 1438 01:13:40,086 --> 01:13:41,336 >> ΦΟΙΤΗΤΗΣ: [δεν ακούγεται]. 1439 01:13:41,336 --> 01:13:43,190 1440 01:13:43,190 --> 01:13:45,540 >> JASON Hirschhorn: Μα atoi παίρνει ένα string. 1441 01:13:45,540 --> 01:13:46,350 Έτσι θα πάμε για να περάσει η εκμετάλλευση. 1442 01:13:46,350 --> 01:13:49,900 Θα πάρει περάσει το 90. 1443 01:13:49,900 --> 01:13:51,540 Εμείς πάμε από πίσω προς τα εμπρός. 1444 01:13:51,540 --> 01:13:53,920 Παίρνουμε το 0. 1445 01:13:53,920 --> 01:13:55,080 >> ΦΟΙΤΗΤΗΣ: Λυπάμαι. 1446 01:13:55,080 --> 01:13:55,880 Ίσως αυτό είναι ηλίθιο. 1447 01:13:55,880 --> 01:13:59,440 Αν θέλουμε να είμαστε πάρει περάσει σε μια σειρά, γιατί είναι 90 τι είμαστε 1448 01:13:59,440 --> 01:14:00,260 να πάρει περάσει μέσα; 1449 01:14:00,260 --> 01:14:03,160 Επειδή το 90 είναι ένας ακέραιος. 1450 01:14:03,160 --> 01:14:06,820 >> JASON Hirschhorn: Επειδή atoi παίρνει μια string και το μετατρέπει στο ακέραιο 1451 01:14:06,820 --> 01:14:08,320 αναπαράσταση αυτής της πετονιάς. 1452 01:14:08,320 --> 01:14:13,650 Αλλά το κορδόνι 90 δεν είναι ο ακέραιος 90 ή ο αριθμός 90. 1453 01:14:13,650 --> 01:14:17,920 Η συμβολοσειρά 90 είναι μια σειρά από δύο ή τρεις χαρακτήρες, μάλλον, το 9 1454 01:14:17,920 --> 01:14:22,740 χαρακτήρα, ο χαρακτήρας 0, και το backslash 0 χαρακτήρα. 1455 01:14:22,740 --> 01:14:26,260 >> Και γράφουμε atoi διότι, για παράδειγμα, όταν παίρνετε την εντολή 1456 01:14:26,260 --> 01:14:30,230 όρισμα της γραμμής, και είναι αποθηκευμένο σε argv, αυτό αποθηκεύεται ως ένα string. 1457 01:14:30,230 --> 01:14:32,940 Αλλά αν θέλετε να την αντιμετωπίσουμε ως έναν αριθμό, θα πρέπει να το μετατρέψετε σε ένα 1458 01:14:32,940 --> 01:14:34,700 πραγματική ακέραιο. 1459 01:14:34,700 --> 01:14:37,210 Που κάναμε ένα πρόβλημα σύνολα μας. 1460 01:14:37,210 --> 01:14:38,800 Ποια κάναμε σε μια σειρά του προβλήματος σετ μας. 1461 01:14:38,800 --> 01:14:41,690 Ο καθένας που πήρε έναν ακέραιο ως όρισμα γραμμής εντολών. 1462 01:14:41,690 --> 01:14:46,490 Έτσι, γι 'αυτό και η λειτουργία atoi μας παίρνει ένα string. 1463 01:14:46,490 --> 01:14:51,910 >> Έτσι και πάλι, στο παράδειγμά μας εδώ, είμαστε πρόκειται να πάρει το τελευταίο. 1464 01:14:51,910 --> 01:14:55,050 Εμείς πάμε για να αφαιρέσουμε το χαρακτήρα 0 από αυτό, επειδή οι χαρακτήρες 0 1465 01:14:55,050 --> 01:14:58,810 αφαιρείται από το χαρακτήρα σας δίνει 0 ο πραγματικός αριθμός 0, σύμφωνα με την 1466 01:14:58,810 --> 01:15:00,950 τα μαθηματικά ASCII που κάνουμε. 1467 01:15:00,950 --> 01:15:04,870 >> Επειδή οι χαρακτήρες εκπροσωπήθηκαν ως διαφορετική από την πραγματική τους - η 1468 01:15:04,870 --> 01:15:08,830 Χαρακτήρας α, για παράδειγμα, πεζά a είναι 97. 1469 01:15:08,830 --> 01:15:10,260 Δεν είναι - ουπς! 1470 01:15:10,260 --> 01:15:13,290 Δεν είναι ό, τι θα περίμενε κανείς να είναι, μηδέν, για παράδειγμα. 1471 01:15:13,290 --> 01:15:16,200 Έτσι, θα πρέπει να αφαιρέσετε το χαρακτήρα για να πάρει ένα 0. 1472 01:15:16,200 --> 01:15:18,950 >> Έτσι θα πάμε να το κάνουμε αυτό εδώ για να πάρει τον πραγματικό αριθμό. 1473 01:15:18,950 --> 01:15:22,560 Και τότε θα έχετε την ευκαιρία να το πολλαπλασιάσετε επί μια δύναμη του 10, ανάλογα με το πού 1474 01:15:22,560 --> 01:15:27,030 είναι στη σειρά, και στη συνέχεια να λάβει ότι και να το προσθέσετε στο κάτοχο τόπο μας 1475 01:15:27,030 --> 01:15:32,520 μεταβλητή ώστε να μπορούμε να καταλήξουμε σε τελική νέο ακέραιος μας. 1476 01:15:32,520 --> 01:15:35,080 Μήπως αυτό έχει νόημα για όλους; 1477 01:15:35,080 --> 01:15:37,730 >> Γι 'αυτό και δεν πρόκειται να κωδικοποιήσει αυτό τώρα, επειδή είμαστε 1478 01:15:37,730 --> 01:15:38,830 να πάρει πολύ χρόνο. 1479 01:15:38,830 --> 01:15:40,860 Ζητώ συγγνώμη για το χρόνο αυτό. 1480 01:15:40,860 --> 01:15:44,620 Αλλά αυτό είναι ό, τι, ας ελπίσουμε, θα κάνατε να είναι σε θέση να κάνει το κουίζ - κατά τη 1481 01:15:44,620 --> 01:15:47,710 πολύ λιγότερο, να πάρει αυτό το ψευδοκώδικα ολογράφως. 1482 01:15:47,710 --> 01:15:50,840 >> Και τότε, αν επρόκειτο να γράψει το ψευδοκώδικας, στην πραγματικότητα, θα μπορούσαμε να το κάνουμε αυτό 1483 01:15:50,840 --> 01:15:51,490 αρκετά γρήγορα. 1484 01:15:51,490 --> 01:15:55,230 Κάθε γραμμή των σχολίων που γράψαμε εδώ μεταφράζεται σε περίπου 1485 01:15:55,230 --> 01:15:56,970 μία γραμμή κώδικα C. 1486 01:15:56,970 --> 01:16:01,780 Δηλώνοντας μια νέα μεταβλητή, γράφοντας ένας βρόχος, κάποια αφαίρεση, μερικές 1487 01:16:01,780 --> 01:16:07,070 πολλαπλασιασμό, και κάποια εργασία. 1488 01:16:07,070 --> 01:16:09,020 Μάλλον θα θέλουν επίσης να γράψει μια γραμμή επιστροφής. 1489 01:16:09,020 --> 01:16:12,040 Θα μπορούσαμε επίσης να θέλετε να βάλετε μερικοί έλεγχοι εδώ. 1490 01:16:12,040 --> 01:16:12,655 Ναι. 1491 01:16:12,655 --> 01:16:15,720 >> ΦΟΙΤΗΤΗΣ: Έτσι μπορούμε να τη θεραπεία s, όπως η πραγματική σειρά; 1492 01:16:15,720 --> 01:16:18,730 Επειδή ξέρω ότι είναι απλώς μια διεύθυνση. 1493 01:16:18,730 --> 01:16:22,090 Όπως, πώς θα πάρει το μήκος της το κορδόνι που περνάει μέσα; 1494 01:16:22,090 --> 01:16:25,310 >> JASON Hirschhorn: Λοιπόν, πώς έκανε το μήκος μιας συμβολοσειράς; 1495 01:16:25,310 --> 01:16:25,830 Strlen. 1496 01:16:25,830 --> 01:16:26,660 >> ΦΟΙΤΗΤΗΣ: strlen, ναι. 1497 01:16:26,660 --> 01:16:30,550 Αλλά μπορεί να σας βάλει s, όπως η επιχείρημα γι 'αυτό; 1498 01:16:30,550 --> 01:16:34,620 >> JASON Hirschhorn: Έτσι strlen παίρνει ένα αστέρι char. 1499 01:16:34,620 --> 01:16:38,090 Και συνάγεται ότι αστέρι char, και συνεχίζει να μετρούν μέχρι να φτάσει στο ένα 1500 01:16:38,090 --> 01:16:41,865 backslash 0. strlen ήταν στην πραγματικότητα ένα από τα άλλα προγράμματα που 1501 01:16:41,865 --> 01:16:42,850 επρόκειτο να κώδικα. 1502 01:16:42,850 --> 01:16:44,560 Αυτό είναι άλλο ένα καλό αποτέλεσμα για να κώδικα. 1503 01:16:44,560 --> 01:16:47,270 Αυτό και μόνο είναι λίγο πιο εύκολο, γιατί αν θα πάμε να σκεφτούμε ότι 1504 01:16:47,270 --> 01:16:47,830 εννοιολογικά - 1505 01:16:47,830 --> 01:16:51,620 Μόλις το είπε φωναχτά - strlen εξής ένας δείκτης και συνεχίζει και 1506 01:16:51,620 --> 01:16:54,210 καταμέτρηση και παρακολούθηση μέχρις ότου φτάσετε σε ένα backslash 0. 1507 01:16:54,210 --> 01:16:56,530 >> ΦΟΙΤΗΤΗΣ: Εντάξει, το κατάλαβα. 1508 01:16:56,530 --> 01:17:00,200 >> JASON Hirschhorn: Έτσι, ο καλύτερος του τύχη σε ένα κουίζ 0 αύριο. 1509 01:17:00,200 --> 01:17:03,170 Εάν έχετε οποιεσδήποτε ερωτήσεις, εγώ θα είναι έξω μετά από αυτό. 1510 01:17:03,170 --> 01:17:05,610 Μη διστάσετε να μου στείλετε email. 1511 01:17:05,610 --> 01:17:08,480 Προσπαθήστε να προσεγγίσετε το δικό σας TF αν είστε όχι στο τμήμα μου, ή να πάρετε μου 1512 01:17:08,480 --> 01:17:10,005 e-mail, αν θέλετε. 1513 01:17:10,005 --> 01:17:13,140 >> Αν θέλετε να φρικάρεις και απλά να στείλετε μου ένα email, ένα email freakout, εγώ θα 1514 01:17:13,140 --> 01:17:16,710 σας στείλει πίσω, όπως, ένα χαμογελαστό πρόσωπο, ή, όπως, ένα αστείο ή κάτι τέτοιο. 1515 01:17:16,710 --> 01:17:18,190 Έτσι, μη διστάσετε να το κάνετε αυτό επίσης. 1516 01:17:18,190 --> 01:17:20,750 Καλή τύχη και πάλι, και εγώ θα βλέπετε όλα την επόμενη εβδομάδα. 1517 01:17:20,750 --> 01:17:23,435