1 00:00:00,000 --> 00:00:02,742 2 00:00:02,742 --> 00:00:05,680 >> ΟΜΙΛΗΤΗΣ 1: Γεια σε όλους. 3 00:00:05,680 --> 00:00:07,530 Εμείς πρόκειται να ξεκινήσετε. 4 00:00:07,530 --> 00:00:09,330 Νομίζω ότι οι άνθρωποι εξακολουθούν να πηγαίνουν να είναι το φιλτράρισμα σε. 5 00:00:09,330 --> 00:00:12,840 Όμως, προς το συμφέρον του χρόνου, ώστε να μπορούμε να πάρετε εσείς από εδώ στην ώρα τους, 6 00:00:12,840 --> 00:00:14,110 θα πάμε για να ξεκινήσει. 7 00:00:14,110 --> 00:00:18,780 Έτσι καλωσορίζουμε στην CS50 Quiz 0 κριτική. 8 00:00:18,780 --> 00:00:23,020 Για όσους από εσάς δεν έχουν συνειδητοποιήσει όμως, έχετε μια ερώτηση την Τετάρτη. 9 00:00:23,020 --> 00:00:25,700 Woo-hoo. 10 00:00:25,700 --> 00:00:29,780 >> Αν δεν έχουν αρχίσει ακόμα τις σπουδές ή Δεν έχουν συνειδητοποιήσει ότι αυτό υπάρχει ακόμα, 11 00:00:29,780 --> 00:00:34,070 παρελθόν κουίζ και όλες οι πληροφορίες σχετικά με κουίζ σας είναι για cs50.net/quizzes. 12 00:00:34,070 --> 00:00:38,090 Υπάρχει κάποια πολύ καλά πράγματα εκεί, παρελθόν κουίζ από την τελευταία 10 13 00:00:38,090 --> 00:00:43,760 χρόνου καθώς και πληροφορίες σχετικά με αυτό το κουίζ και θέματα 14 00:00:43,760 --> 00:00:46,250 ότι θα πρέπει να καλυφθούν. 15 00:00:46,250 --> 00:00:48,980 Οπότε ας ξεκινήσουμε. 16 00:00:48,980 --> 00:00:54,240 >> Έτσι, εσείς να θυμάστε, η πρώτη ημέρα της κατηγορίας David είχε αυτές τις λάμπες για. 17 00:00:54,240 --> 00:00:59,650 Έτσι, κατ 'ουσίαν, τα πάντα που πηγαίνει κάτω από την κουκούλα ενός υπολογιστή είναι 18 00:00:59,650 --> 00:01:00,860 γίνεται σε δυαδικό. 19 00:01:00,860 --> 00:01:04,080 Binary σημαίνει ό, τι ακούγεται όπως, 0 και 1 του. 20 00:01:04,080 --> 00:01:09,290 Έχει δύο αξίες που μπορεί να εκπροσωπείται. 21 00:01:09,290 --> 00:01:14,675 >> Έτσι ακριβώς όπως και στην πρώτη μέρα του τμήματος όταν ο David άναψε ένα φως 22 00:01:14,675 --> 00:01:21,990 λάμπα για να εκπροσωπεί την, ή 1, ο υπολογιστής μας αντιλαμβάνεται ως δυαδικό 0 και 23 00:01:21,990 --> 00:01:24,110 1, η ενεργοποίηση ή απενεργοποίηση. 24 00:01:24,110 --> 00:01:25,360 Βασικά στοιχεία της Binary. 25 00:01:25,360 --> 00:01:29,440 26 00:01:29,440 --> 00:01:32,470 Κάθε χώρα εκπροσωπείται στη βάση δύο. 27 00:01:32,470 --> 00:01:36,260 Έτσι, μπορείτε να προσθέσετε 2 στο 0 για το 1 έως το 2 σε όλη τη διαδρομή επάνω. 28 00:01:36,260 --> 00:01:41,970 >> Για να υπολογίσετε τι δυαδικό σας είναι να δεκαδικό, απλά ακολουθήστε αυτή την εξίσωση 29 00:01:41,970 --> 00:01:42,840 τύπου πράγμα. 30 00:01:42,840 --> 00:01:49,510 Εάν έχετε ένα 1 σε οποιοδήποτε από αυτά τα μέρη, πολλαπλασιάζουμε με το ανεξάρτητα από 31 00:01:49,510 --> 00:01:53,820 βασίζουν είναι σε, θα προσθέσει επάνω, και μπορείτε να πάρετε το δεκαδικό. 32 00:01:53,820 --> 00:01:57,930 Έτσι, αυτό είναι το πώς μετράνε 5 σε δυαδικό. 33 00:01:57,930 --> 00:02:01,400 Ακριβώς όπως αυτό που κάναμε για το τελευταία διαφάνεια, αυτό είναι το πώς θα κάνατε 34 00:02:01,400 --> 00:02:02,650 αντιπροσωπεύουν 1 μέσω 5. 35 00:02:02,650 --> 00:02:05,320 36 00:02:05,320 --> 00:02:09,660 >> Ομοίως, ακριβώς όπως μπορείτε να προσθέσετε και αφαιρέσουμε το δεκαδικό ή να βασίσετε 10, ή 37 00:02:09,660 --> 00:02:13,040 πραγματικά καμία βάση, για να προσθέσετε και αφαιρούμε το δυαδικό. 38 00:02:13,040 --> 00:02:18,400 Ακριβώς αυτό που θα περίμενε κανείς όταν προσθέστε το δύο μέχρι, αν ισούται με μεγαλύτερη 39 00:02:18,400 --> 00:02:24,220 από 1, θα φέρει ένα 1, αυτό το 0 να κάνει, και να κάνει την προσθήκη με αυτόν τον τρόπο, απλά 40 00:02:24,220 --> 00:02:29,910 όπως θα περίμενε κανείς με την τακτική δεκαδικό ή οποιαδήποτε άλλη βάση. 41 00:02:29,910 --> 00:02:30,970 Cool. 42 00:02:30,970 --> 00:02:35,140 >> Έτσι, όπως είπα και πριν, τα πάντα ότι συνεχίζεται κάτω από την κουκούλα του υπολογιστή μας 43 00:02:35,140 --> 00:02:37,560 γίνεται σε 0 και 1, το ή δυαδικά. 44 00:02:37,560 --> 00:02:43,470 Επομένως, πώς θα εκφράσουν, για παράδειγμα, γράμματα ή αριθμούς ή χαρακτήρες; 45 00:02:43,470 --> 00:02:45,560 Και η απάντηση σε αυτό είναι ASCII. 46 00:02:45,560 --> 00:02:49,380 >> ASCII είναι μια χαρτογράφηση μεταξύ των χαρακτήρων ότι θα βλέπαμε κανονικά στο 47 00:02:49,380 --> 00:02:53,360 Αγγλική γλώσσα, όπως Α, Β, Γ, υπογραμμίζουν, παύλες, και 48 00:02:53,360 --> 00:02:54,910 κάτι τέτοιο. 49 00:02:54,910 --> 00:02:57,260 Και αυτό χαρτογραφεί ότι σε μια τιμή ASCII. 50 00:02:57,260 --> 00:03:03,080 Μια τιμή ASCII είναι απλά ένας αριθμός που μπορεί να γίνει κατανοητή από τον υπολογιστή σας. 51 00:03:03,080 --> 00:03:07,430 Και όπως μπορείτε να κάνετε προσθήκη και αφαίρεση με αριθμούς, μπορείτε να κάνετε 52 00:03:07,430 --> 00:03:10,890 τους με τις τιμές ASCII. 53 00:03:10,890 --> 00:03:14,050 >> Έτσι σε αυτό το παράδειγμα, τι αυτό θα εκτυπώσετε; 54 00:03:14,050 --> 00:03:26,790 55 00:03:26,790 --> 00:03:35,480 Ναι, έτσι ακριβώς Ένας χώρος Β space space C Δ Πού πήγε το ποντίκι μου; 56 00:03:35,480 --> 00:03:39,200 57 00:03:39,200 --> 00:03:43,380 Παρατηρήστε μπορείτε να ορίσετε έναν int 65. 58 00:03:43,380 --> 00:03:47,080 Και όταν εκτυπώνετε ότι χρησιμοποιώντας τοις εκατό C, θα ερμηνεύσει ότι ως 59 00:03:47,080 --> 00:03:49,330 χαρακτήρα και θα εκτυπώσετε A. 60 00:03:49,330 --> 00:03:52,800 >> Ομοίως, μπορείτε να δηλώσετε ως μια χαρα. 61 00:03:52,800 --> 00:03:56,860 Και όταν το εκτυπώσετε χρησιμοποιώντας τοις εκατό C, θα ερμηνεύσει ότι ως 62 00:03:56,860 --> 00:04:05,240 τοις εκατό D. Και ακριβώς όπως μπορείτε να προσθέσετε μια τον αριθμό, μπορείτε να προσθέσετε χαρακτήρες 63 00:04:05,240 --> 00:04:06,878 Τιμές ASCII, σε αυτή την περίπτωση. 64 00:04:06,878 --> 00:04:11,370 65 00:04:11,370 --> 00:04:16,130 >> Έτσι, ένα μικρό δείκτη για όλους. 66 00:04:16,130 --> 00:04:19,610 5, όπως ένα κορδόνι, δεν στην πραγματικότητα είναι ίση με 5. 67 00:04:19,610 --> 00:04:26,610 Λοιπόν, πώς θα μπορούσαμε να μετατρέψει το κορδόνι 5 στον ακέραιο 5; 68 00:04:26,610 --> 00:04:28,930 Οποιεσδήποτε ιδέες; 69 00:04:28,930 --> 00:04:31,630 Ναι. 70 00:04:31,630 --> 00:04:36,720 >> Έτσι, αν έχουμε 5 ως ένα string, μπορούμε να αφαιρέσουμε 0. 71 00:04:36,720 --> 00:04:37,820 Και αυτό θα μας δώσει 5. 72 00:04:37,820 --> 00:04:41,670 Και ομοίως, αν έχουμε 5 ως ακέραιος, να προσθέσω ότι το κορδόνι 0. 73 00:04:41,670 --> 00:04:43,112 Και αυτό μας δίνει το string 5. 74 00:04:43,112 --> 00:04:46,350 75 00:04:46,350 --> 00:04:48,350 Cool. 76 00:04:48,350 --> 00:04:52,940 >> Τώρα, ας θυμηθούμε πάλι να μιλήσει εκείνη όπου μιλήσαμε για αλγόριθμους. 77 00:04:52,940 --> 00:04:57,260 Λοιπόν, πώς μπορούμε πραγματικά θέλουν έναν υπολογιστή για να κάνει ενδιαφέροντα πράγματα; 78 00:04:57,260 --> 00:05:00,460 Ξέρεις, απλά προσθέτοντας και αφαιρώντας αριθμούς και εκτύπωση τα πράγματα δεν είναι 79 00:05:00,460 --> 00:05:01,730 ότι συναρπαστικό. 80 00:05:01,730 --> 00:05:04,620 Συνήθως, θέλουμε ο υπολογιστής μας να εκτελέσει κάποια είδος του αλγορίθμου. 81 00:05:04,620 --> 00:05:07,820 Κάτι λίγο πιο περίπλοκη από την απλή αριθμητική. 82 00:05:07,820 --> 00:05:11,930 >> Ένας αλγόριθμος είναι απλά ένα βήμα προς βήμα σετ οδηγίες για το πώς να εκτελέσει 83 00:05:11,930 --> 00:05:14,640 ένα ορισμένο task-- 84 00:05:14,640 --> 00:05:15,660 ήθελα απλά μια συνταγή. 85 00:05:15,660 --> 00:05:19,990 Ίσως να θυμάστε την πρώτη ημέρα του κατηγορία όπου ο David μας είχε μετρήσει ένα δωμάτιο 86 00:05:19,990 --> 00:05:22,550 των ανθρώπων και πόσοι άνθρωποι ήταν στο δωμάτιο. 87 00:05:22,550 --> 00:05:24,480 Μπορεί να χρησιμοποιηθεί για την καταμέτρηση ένα προς ένα. 88 00:05:24,480 --> 00:05:25,860 1, 2, 3, 4. 89 00:05:25,860 --> 00:05:28,010 Στην περίπτωση αυτή, ένας γραμμικός αλγόριθμος χρόνου. 90 00:05:28,010 --> 00:05:31,710 >> Αλλά ο David εισήγαγε έναν αλγόριθμο για μπορείτε να μετρήσετε τους ανθρώπους στο δωμάτιο 91 00:05:31,710 --> 00:05:37,340 όπου ο καθένας σηκώνεται, λέτε σας αριθμό σε άλλο πρόσωπο, να προσθέσω ότι 92 00:05:37,340 --> 00:05:39,200 αριθμό μέχρι και ένα άτομο κάθεται κάτω. 93 00:05:39,200 --> 00:05:40,410 Και σας επαναλαμβάνω ότι. 94 00:05:40,410 --> 00:05:42,910 Αυτό είναι ένα είδος του αλγορίθμου. 95 00:05:42,910 --> 00:05:47,520 Μπορούμε να αναλύσουμε το πόσο αποδοτικό είναι ένα αλγόριθμος βασίζεται σε αυτό είναι το χρόνο εκτέλεσης. 96 00:05:47,520 --> 00:05:49,680 Αλλά θα μιλήσουμε λίγο περισσότερα για αυτό αργότερα. 97 00:05:49,680 --> 00:05:52,740 98 00:05:52,740 --> 00:05:57,090 >> Έτσι, όλοι οι αλγόριθμοι μπορούν επίσης να είναι γραμμένο σε ψευδοκώδικα. 99 00:05:57,090 --> 00:06:01,120 Ψευδοκώδικας είναι απλά μια αγγλική, όπως σύνταξη χρησιμοποιούνται για να αντιπροσωπεύουν 100 00:06:01,120 --> 00:06:02,420 μια γλώσσα προγραμματισμού. 101 00:06:02,420 --> 00:06:06,070 Για παράδειγμα, αν θέλαμε να ζητούν από τον χρήστη να μαντέψει το αγαπημένο μου αριθμός, εμείς 102 00:06:06,070 --> 00:06:08,390 θα μπορούσε να έχει ψευδοκώδικα ως τέτοια. 103 00:06:08,390 --> 00:06:09,850 >> Get a χρήστες υποθέτω. 104 00:06:09,850 --> 00:06:13,570 Αν η εικασία είναι σωστή, πείτε τους ότι είναι σωστό, αλλιώς πείτε τους 105 00:06:13,570 --> 00:06:15,560 δεν είναι σωστή. 106 00:06:15,560 --> 00:06:22,530 Και pseudocode είναι ένας τρόπος εύκολα αντιπροσωπεύει μια ιδέα ή έναν αλγόριθμο. 107 00:06:22,530 --> 00:06:26,910 Μέχρι τώρα ίσως να θέλετε να γράψετε πραγματικά Αυτό στη γλώσσα που ο υπολογιστής 108 00:06:26,910 --> 00:06:27,980 θα μπορούσε κατανόηση. 109 00:06:27,980 --> 00:06:35,660 Έτσι, θα μπορούσαμε να γράψουμε pseudocode μας και ερμηνεύσει ότι σε πηγαίο κώδικα. 110 00:06:35,660 --> 00:06:41,320 >> Μέχρι στιγμής, πηγαίου κώδικα πρέπει να τηρούν σε μια ορισμένη σύνταξη του 111 00:06:41,320 --> 00:06:42,490 μια γλώσσα προγραμματισμού. 112 00:06:42,490 --> 00:06:45,430 Και μέχρι στιγμής, σε CS50, έχουμε χρησιμοποιούν ως επί το πλείστον c. 113 00:06:45,430 --> 00:06:48,320 Έτσι αυτό θα μπορούσε να είναι πηγαίο κώδικα για c. 114 00:06:48,320 --> 00:06:51,440 Αργότερα, κατά τη διάρκεια, σας νύχτα έρχεται σε επαφή με άλλα προγράμματα 115 00:06:51,440 --> 00:06:52,480 γλώσσες όπως η PHP. 116 00:06:52,480 --> 00:06:57,540 Ή αν έχετε πάρει ακόμα άλλες κατηγορίες, μπορείτε θα μπορούσε να κάνει Java, Python, ή ακόμα και OCML. 117 00:06:57,540 --> 00:07:01,570 Αλλά σε μας γλώσσα γ πρόγραμμα, αυτό είναι πώς μπορούμε να γράψει τον κώδικα για 118 00:07:01,570 --> 00:07:04,760 ο αλγόριθμος pseudocode ότι Που μόλις περιέγραψα νωρίτερα. 119 00:07:04,760 --> 00:07:08,630 120 00:07:08,630 --> 00:07:11,430 >> Λοιπόν, πώς κάνει τον υπολογιστή σας στην πραγματικότητα καταλαβαίνεις; 121 00:07:11,430 --> 00:07:14,490 Όπως είπα και πριν, το μόνο που πραγματικά κατανοεί μηδενικά και μονάδες. 122 00:07:14,490 --> 00:07:17,880 Έτσι, πώς να το πάρει από την πηγή κώδικα σε κάτι που μπορεί να είναι 123 00:07:17,880 --> 00:07:18,960 κατανοητό; 124 00:07:18,960 --> 00:07:22,920 Λοιπόν, έχουμε κάτι ονομάζεται compiler. 125 00:07:22,920 --> 00:07:28,450 >> Αν θυμάστε πίσω στα περισσότερα από σας psets, είχατε κάποιο είδος του προγράμματος 126 00:07:28,450 --> 00:07:30,370 γραμμένο σε ένα αρχείο dot c. 127 00:07:30,370 --> 00:07:32,550 Και τότε θα πρέπει να πληκτρολογήσετε make. 128 00:07:32,550 --> 00:07:35,970 Έτσι, αυτό που κάνει κάνει; 129 00:07:35,970 --> 00:07:39,970 >> Μπορείτε να πληκτρολογήσετε make για τη μεταγλώττιση σας πρόγραμμα, διότι someone-- 130 00:07:39,970 --> 00:07:42,730 όποιος έγραψε σύνολο p σας? πιθανώς David-- 131 00:07:42,730 --> 00:07:44,190 δημιουργήσει ένα αρχείο make. 132 00:07:44,190 --> 00:07:51,320 Και αυτό λέει κάνουν να ξέρετε για να τρέξει σας compiler, που ονομάζεται κλαγγή, ότι η βούληση 133 00:07:51,320 --> 00:07:55,560 Στη συνέχεια καταρτίζουν τον πηγαίο κώδικα σας για να αντιταχθούν κώδικα, το οποίο είναι μηδενικά και μονάδες 134 00:07:55,560 --> 00:07:57,720 ότι ο υπολογιστής σας καταλαβαίνει. 135 00:07:57,720 --> 00:08:01,610 Αλλά λίγο αργότερα, θα πάμε περισσότερο σε βάθος περίπου compilers. 136 00:08:01,610 --> 00:08:05,640 137 00:08:05,640 --> 00:08:10,800 >> Έτσι, υπενθυμίζουν το chipset 0, where-- ναι, Έχετε μια ερώτηση; 138 00:08:10,800 --> 00:08:11,620 >> ΚΟΙΝΟ: [δεν ακούγεται]; 139 00:08:11,620 --> 00:08:12,490 >> ΟΜΙΛΗΤΗΣ 1: Ναι. 140 00:08:12,490 --> 00:08:14,960 I σκέφτονται πραγματικά θα πρέπει να είναι σε απευθείας σύνδεση. 141 00:08:14,960 --> 00:08:15,120 Ναι. 142 00:08:15,120 --> 00:08:16,572 >> ΚΟΙΝΟ: Είναι σαν [δεν ακούγεται]; 143 00:08:16,572 --> 00:08:19,476 144 00:08:19,476 --> 00:08:20,830 >> ΟΜΙΛΗΤΗΣ 1: Δεν είναι. 145 00:08:20,830 --> 00:08:25,810 Το βρίσκονται σε cs50.net/quizzes. 146 00:08:25,810 --> 00:08:32,900 >> ΚΟΙΝΟ: κουίζ Slash, κάθετος 2013, κάθετο 0, και απλά κάντε κλικ μέσα 147 00:08:32,900 --> 00:08:35,956 κουίζ 2013 και κουίζ 0, αναθεωρήσει το τμήμα διαφάνειες. 148 00:08:35,956 --> 00:08:40,380 >> ΟΜΙΛΗΤΗΣ 1: Ναι, έτσι αν εσείς θέλετε να τραβήξτε προς τα επάνω και να κοιτάξουμε αυτό για σας 149 00:08:40,380 --> 00:08:42,740 δικό του υπολογιστή, αυτό είναι πάρα πολύ ωραία. 150 00:08:42,740 --> 00:08:43,130 Ας πούμε ότι και πάλι. 151 00:08:43,130 --> 00:08:44,546 >> ΚΟΙΝΟ: [δεν ακούγεται]. 152 00:08:44,546 --> 00:08:48,780 >> ΟΜΙΛΗΤΗΣ 1: Ναι, [δεν ακούγεται] είναι η ψευδομεταβλητή. 153 00:08:48,780 --> 00:08:49,644 Ω, ναι; 154 00:08:49,644 --> 00:08:51,372 >> ΚΟΙΝΟ: [δεν ακούγεται]; 155 00:08:51,372 --> 00:08:54,300 >> ΟΜΙΛΗΤΗΣ 1: Όχι, απεργίες Δεν είναι για τις εξετάσεις. 156 00:08:54,300 --> 00:08:55,950 Συγνώμη, η ερώτησή της ήταν, ήταν απεργίες για τις εξετάσεις. 157 00:08:55,950 --> 00:08:59,530 Και αυτό δεν είναι. 158 00:08:59,530 --> 00:09:05,780 Έτσι, το chipset 0, εσείς θα πρέπει να έχουν όλα τα υλοποιηθεί κάτι χρησιμοποιώντας το μηδέν. 159 00:09:05,780 --> 00:09:13,100 Και μάθαμε κάποιες βασικές προγραμματισμού δομικά στοιχεία, χρησιμοποιώντας το μηδέν. 160 00:09:13,100 --> 00:09:15,590 >> Έτσι, ας ρίξουμε μια ματιά σε μερικά αυτών των δομικών μπλοκ 161 00:09:15,590 --> 00:09:18,170 που συνθέτουν ένα πρόγραμμα. 162 00:09:18,170 --> 00:09:20,570 Πρώτη είναι Boolean έκφραση. 163 00:09:20,570 --> 00:09:24,540 Boolean εκφράσεις είναι αυτές και 0 ή οτιδήποτε που έχει 164 00:09:24,540 --> 00:09:25,700 δύο πιθανές τιμές. 165 00:09:25,700 --> 00:09:30,320 Στην περίπτωση αυτή, αληθής ή ψευδής, ενεργοποίηση ή απενεργοποίηση, και ναι ή όχι. 166 00:09:30,320 --> 00:09:35,390 Ένα παράδειγμα από ένα απλό, πολύ απλό, πρόγραμμα που χρησιμοποιεί μια Boolean 167 00:09:35,390 --> 00:09:39,140 έκφραση εδώ. 168 00:09:39,140 --> 00:09:43,220 >> Έτσι, προκειμένου για Boolean εκφράσεις για να είναι χρήσιμο, έχουμε λογικούς τελεστές. 169 00:09:43,220 --> 00:09:48,920 Αυτές είναι φορείς που μπορούν να χρησιμοποιηθούν να συγκρίνει ορισμένες τιμές. 170 00:09:48,920 --> 00:09:52,820 Έτσι έχουμε και ή δεν είναι ίση με, μικρότερη από ή ίση με, ή μεγαλύτερη από 171 00:09:52,820 --> 00:09:55,130 ίσο προς, και λιγότερο από ή μεγαλύτερη από ό, τι. 172 00:09:55,130 --> 00:09:59,060 Αλλά αυτοί οι φορείς δεν είναι πολύ χρήσιμο αν μπορούμε να τα συνδυάσετε σε 173 00:09:59,060 --> 00:10:00,320 συνθήκες. 174 00:10:00,320 --> 00:10:04,370 >> Έτσι, εσείς μπορεί να θυμάστε από το μηδέν και από την p σας ορίζει ότι 175 00:10:04,370 --> 00:10:05,400 είχε όρους. 176 00:10:05,400 --> 00:10:09,710 Πρόκειται, ουσιαστικά, όπως πιρούνια σε η λογική του προγράμματος σας ότι 177 00:10:09,710 --> 00:10:12,670 εκτελεί ανάλογα με το αν η προϋπόθεση αυτή πληρούται. 178 00:10:12,670 --> 00:10:18,150 Έτσι, μία από τις προϋποθέσεις που είχαμε χρησιμοποιούνται πολλές φορές σε αυτή την πορεία είναι η 179 00:10:18,150 --> 00:10:21,470 if, else, αν και άλλος συνθήκες. 180 00:10:21,470 --> 00:10:24,060 >> Εδώ είναι ένα παράδειγμα του πώς μπορείτε να χρησιμοποιήσετε αυτό. 181 00:10:24,060 --> 00:10:28,430 Ξέρει κανείς τη διαφορά μεταξύ χρησιμοποιώντας μόνο αν δηλώσεις όλων 182 00:10:28,430 --> 00:10:32,530 ο τρόπος κάτω στίχους if, else, αν, και άλλο συνδυασμό; 183 00:10:32,530 --> 00:10:33,013 Ναι; 184 00:10:33,013 --> 00:10:34,263 >> ΚΟΙΝΟ: [δεν ακούγεται]. 185 00:10:34,263 --> 00:10:40,741 186 00:10:40,741 --> 00:10:42,160 >> ΟΜΙΛΗΤΗΣ 1: Ακριβώς. 187 00:10:42,160 --> 00:10:50,210 Έτσι, αν είχα, αν όλος ο τρόπος κάτω αυτό τρόπο, ακόμη και αν ο όρος αυτός επιστρέφει 188 00:10:50,210 --> 00:10:52,800 αλήθεια, θα εξακολουθούν τις δοκιμές της επόμενης δύο. 189 00:10:52,800 --> 00:11:00,120 Ότι, με ένα άλλο-αν, ένα άλλο Προσωπικά, αν ο ένας επιστρέφει true, 190 00:11:00,120 --> 00:11:02,640 οι άλλοι δεν έχουν δοκιμαστεί. 191 00:11:02,640 --> 00:11:05,955 Οποιεσδήποτε ερωτήσεις σχετικά με αυτό; 192 00:11:05,955 --> 00:11:06,890 Cool. 193 00:11:06,890 --> 00:11:12,240 >> Έτσι, μπορείτε να χρησιμοποιήσετε ένα if-else από ένα άλλο Προσωπικά, αν γνωρίζετε ότι το μόνο που μπορεί 194 00:11:12,240 --> 00:11:14,470 είναι μία από αυτές τις περιπτώσεις. 195 00:11:14,470 --> 00:11:21,550 Έτσι γνωρίζουμε αν το x είναι μικρότερο από 0, είναι σίγουρα δεν πρόκειται να είναι 196 00:11:21,550 --> 00:11:22,890 μεγαλύτερη από μηδέν. 197 00:11:22,890 --> 00:11:26,940 198 00:11:26,940 --> 00:11:31,480 >> Στη συνέχεια, ένα άλλο δομικό ότι μάθαμε είναι βρόχους. 199 00:11:31,480 --> 00:11:33,310 Έχουμε τρία είδη βρόχων. 200 00:11:33,310 --> 00:11:35,830 Για βρόχους, ενώ βρόχους, και να κάνει, ενώ βρόχους. 201 00:11:35,830 --> 00:11:38,730 Και γενικά, όταν κάθεστε να γράψω κάτι, θα πρέπει να αποφασίσει 202 00:11:38,730 --> 00:11:40,060 η οποία από τις τρεις που θέλετε να χρησιμοποιήσετε. 203 00:11:40,060 --> 00:11:41,900 Επομένως, πώς θα αποφασίσει ποια; 204 00:11:41,900 --> 00:11:44,920 205 00:11:44,920 --> 00:11:48,790 >> Εμείς συνήθως χρησιμοποιούν ένα βρόχο αν γνωρίζουμε πόσες φορές θέλουμε να επαναλάβει 206 00:11:48,790 --> 00:11:53,650 μέσα από κάτι ή πόσες φορές θέλουμε να εκτελέσει μια εργασία. 207 00:11:53,650 --> 00:11:58,830 Χρησιμοποιούμε ενώ βρόχους αν χρειαζόμαστε κάποια προϋπόθεση για να είναι αληθινό για να συνεχίσει να τρέχει. 208 00:11:58,830 --> 00:12:03,730 Και χρησιμοποιούμε κάνουν, ενώ πολύ παρόμοια με ενώ, αλλά θέλουμε κωδικό μας να τρέξει σε 209 00:12:03,730 --> 00:12:04,880 τουλάχιστον μία φορά. 210 00:12:04,880 --> 00:12:09,410 >> Έτσι κάνει, ενώ, ό, τι είναι στην do θα τρέχει πάντα τουλάχιστον μία φορά. 211 00:12:09,410 --> 00:12:13,120 Ότι, με τον καιρό, αυτό Δεν μπορεί να τρέξει σε όλα, αν η 212 00:12:13,120 --> 00:12:15,490 κατάσταση δεν είναι ικανοποιημένος. 213 00:12:15,490 --> 00:12:16,740 Οποιεσδήποτε ερωτήσεις με αυτό; 214 00:12:16,740 --> 00:12:20,480 215 00:12:20,480 --> 00:12:22,860 >> Έτσι δομή ενός βρόχου for. 216 00:12:22,860 --> 00:12:23,620 Εσείς έχετε δει όλοι αυτό. 217 00:12:23,620 --> 00:12:25,320 Μπορείτε να προετοιμαστεί. 218 00:12:25,320 --> 00:12:26,600 Έχετε κάποιο είδος της κατάστασης. 219 00:12:26,600 --> 00:12:32,340 Έτσι, για παράδειγμα, θα μπορούσαμε να προετοιμαστεί όπως για i ισούται με 0. 220 00:12:32,340 --> 00:12:34,040 i είναι μικρότερο από 10. 221 00:12:34,040 --> 00:12:35,442 Και εγώ ++. 222 00:12:35,442 --> 00:12:39,010 Πολύ απλά αυτό που έχουμε κάνει. 223 00:12:39,010 --> 00:12:42,210 >> Για ένα βρόχο, ενώ, ομοίως, έχετε να έχουν κάποιο είδος της προετοιμασίας, 224 00:12:42,210 --> 00:12:44,980 κάποιο είδος της κατάστασης, και κάποια ενημέρωση. 225 00:12:44,980 --> 00:12:51,990 Έτσι, μπορούμε να εφαρμόσουμε μας για βρόχο και ως ένα βρόχο while χρησιμοποιώντας αυτό. 226 00:12:51,990 --> 00:12:56,000 Και ομοίως με ένα do while loop, μπορεί να έχουμε κάποια προετοιμασία, 227 00:12:56,000 --> 00:12:58,640 εκτελέσει κάτι, ενημερώνει, και Στη συνέχεια ελέγξτε την κατάσταση. 228 00:12:58,640 --> 00:13:03,500 229 00:13:03,500 --> 00:13:05,140 >> Μέχρι τώρα λειτουργεί. 230 00:13:05,140 --> 00:13:06,460 Βάζουμε όλα μαζί. 231 00:13:06,460 --> 00:13:10,140 Μπορούμε ίσως να θέλετε να γράψετε κάποια το είδος της λειτουργίας. 232 00:13:10,140 --> 00:13:12,790 Κοινή λειτουργία που μπορεί να έχουν δει ήδη είναι κύρια. 233 00:13:12,790 --> 00:13:13,770 Main είναι μια λειτουργία. 234 00:13:13,770 --> 00:13:16,160 Έχει ένα είδος επιστροφής, int. 235 00:13:16,160 --> 00:13:18,470 Έχει ένα όνομα συνάρτησης, κύρια. 236 00:13:18,470 --> 00:13:20,810 Και αυτό έχει επιχειρήματα, argc και argv. 237 00:13:20,810 --> 00:13:24,040 Έτσι κύριος είναι απλά μια λειτουργία. 238 00:13:24,040 --> 00:13:27,230 >> Άλλες λειτουργίες που μπορεί να χρησιμοποιηθεί, printf-- printf είναι μια function-- 239 00:13:27,230 --> 00:13:29,330 GetInt, toupper. 240 00:13:29,330 --> 00:13:32,010 Αλλά αυτά τυχαίνει να έχουν εφαρμοστεί για μας 241 00:13:32,010 --> 00:13:33,270 κάποιο είδος της βιβλιοθήκης. 242 00:13:33,270 --> 00:13:37,400 Αν εσείς θυμάστε συμπεριλαμβανομένου αυτή η βιβλιοθήκη CS50.h ή η 243 00:13:37,400 --> 00:13:38,510 πρότυπο I / O βιβλιοθήκη. 244 00:13:38,510 --> 00:13:39,200 Ναι, ερώτηση; 245 00:13:39,200 --> 00:13:41,610 >> ΚΟΙΝΟ: Είναι η κύρια σύμφυτη σε c; 246 00:13:41,610 --> 00:13:44,740 Μήπως αυτό ακριβώς το είδος του [δεν ακούγεται]; 247 00:13:44,740 --> 00:13:47,370 >> ΟΜΙΛΗΤΗΣ 1: Το ερώτημα είναι αν ο κύριος είναι εγγενής στο γ. 248 00:13:47,370 --> 00:13:51,460 Και ναι, όλες οι λειτουργίες έχουν μια κύρια λειτουργία. 249 00:13:51,460 --> 00:13:55,290 Είναι το είδος των αναγκαίων για τον υπολογιστή να γνωρίζει από πού να αρχίσω 250 00:13:55,290 --> 00:13:55,993 εκτέλεση του κώδικα. 251 00:13:55,993 --> 00:13:58,108 >> ΚΟΙΝΟ: Έτσι δεν θα [δεν ακούγεται]; 252 00:13:58,108 --> 00:13:59,480 >> ΟΜΙΛΗΤΗΣ 1: Όχι 253 00:13:59,480 --> 00:14:00,760 Οποιεσδήποτε άλλες ερωτήσεις; 254 00:14:00,760 --> 00:14:03,430 255 00:14:03,430 --> 00:14:04,770 Cool. 256 00:14:04,770 --> 00:14:08,050 Έτσι ακριβώς όπως μπορείτε να χρησιμοποιήσετε μια λειτουργία ότι είναι γραμμένο για σας, μπορείτε επίσης να 257 00:14:08,050 --> 00:14:10,380 γράψε τη δική σου λειτουργία. 258 00:14:10,380 --> 00:14:17,050 Αυτή είναι μια λειτουργία που κάποιος θα μπορούσε έχουν γράψει για τον υπολογισμό του όγκου 259 00:14:17,050 --> 00:14:18,395 ενός q, για παράδειγμα. 260 00:14:18,395 --> 00:14:21,300 261 00:14:21,300 --> 00:14:29,500 Υπάρχει ένα είδος επιστροφής εδώ, σε αυτή την περίπτωση int, μας όνομα της συνάρτησης q και μας 262 00:14:29,500 --> 00:14:31,360 Κατάλογος των παραμέτρων. 263 00:14:31,360 --> 00:14:34,550 >> Και σημειώστε ότι θα πρέπει να γράψετε τα δεδομένα τύπο της παραμέτρου που θέλετε να 264 00:14:34,550 --> 00:14:38,660 χρησιμοποιούν ή αλλιώς η λειτουργία δεν γνωρίζουν τι είδους 265 00:14:38,660 --> 00:14:41,650 παράμετρος θα πρέπει να είμαι αποδοχή. 266 00:14:41,650 --> 00:14:48,110 Έτσι, σε αυτή την περίπτωση, θέλουμε ένας ακέραιος ως συμβολή μας. 267 00:14:48,110 --> 00:14:50,390 Επομένως, γιατί θα μπορούσαμε να θέλετε να χρησιμοποιήσετε τις λειτουργίες; 268 00:14:50,390 --> 00:14:52,800 >> Πρώτα απ 'όλα, μεγάλη για την οργάνωση. 269 00:14:52,800 --> 00:14:56,350 Βοηθούν σπάσει τον κωδικό σας σε πιο οργανωμένη κομμάτια και να κάνουν 270 00:14:56,350 --> 00:14:57,960 ευκολότερο να διαβάσει. 271 00:14:57,960 --> 00:14:59,760 Απλούστευση. 272 00:14:59,760 --> 00:15:01,740 Αυτό είναι καλό για το σχεδιασμό. 273 00:15:01,740 --> 00:15:04,570 Όταν διαβάζετε ένα κομμάτι κώδικα και η κύρια λειτουργία του είναι πραγματικά, 274 00:15:04,570 --> 00:15:07,750 πολύ καιρό, θα μπορούσε να είναι πιο δύσκολο να λόγο για το τι συμβαίνει. 275 00:15:07,750 --> 00:15:11,710 Έτσι, αν το σπάσει σε λειτουργίες, θα μπορούσε να είναι πιο εύκολο να διαβάσει. 276 00:15:11,710 --> 00:15:12,750 Και επαναχρησιμοποίηση-ικανότητα. 277 00:15:12,750 --> 00:15:16,940 Εάν έχετε ένα κομμάτι του κώδικα που έχει να καλείται ή να τρέξει πολλές φορές, 278 00:15:16,940 --> 00:15:20,690 αντί της επανεγγραφής ότι ο κωδικός 10 φορές στην κύρια λειτουργία σας, ίσως 279 00:15:20,690 --> 00:15:21,440 θέλετε να το χρησιμοποιήσετε ξανά. 280 00:15:21,440 --> 00:15:25,740 Και στη συνέχεια, κάθε φορά που θα χρειαστεί να χρησιμοποιήσετε ότι κομμάτι του κώδικα, καλέστε τη λειτουργία. 281 00:15:25,740 --> 00:15:30,550 282 00:15:30,550 --> 00:15:35,380 >> Έτσι τώρα, αν θυμηθούμε πίσω στο μηδέν, Μιλήσαμε επίσης για μερικές έννοιες, 283 00:15:35,380 --> 00:15:37,680 ένα από τα οποία είναι σπειρωμάτων. 284 00:15:37,680 --> 00:15:41,120 Το θέμα είναι η έννοια των πολλαπλών αλληλουχίες κωδικού 285 00:15:41,120 --> 00:15:43,040 εκτέλεσης κατά την ίδια στιγμή. 286 00:15:43,040 --> 00:15:47,490 Έτσι, σκεφτείτε την ημέρα εκείνη όπου ο David είχε εσείς υπολογίζει τον αριθμό των 287 00:15:47,490 --> 00:15:48,440 άνθρωποι στο δωμάτιο. 288 00:15:48,440 --> 00:15:50,550 >> Ουσιαστικά, τι συνέβαινε για είναι όλοι ήσασταν 289 00:15:50,550 --> 00:15:52,370 τρέχει ξεχωριστά νήματα. 290 00:15:52,370 --> 00:15:55,540 Και αυτά τα θέματα που έρχονταν μαζί να πάρει κάποιο είδος απάντησης. 291 00:15:55,540 --> 00:15:58,890 Ομοίως, στο Ξυστό, όταν έχετε πολλαπλές ξωτικά, ίσως 292 00:15:58,890 --> 00:16:01,070 έχουν μια γάτα και έναν σκύλο. 293 00:16:01,070 --> 00:16:08,770 Και θα είναι ταυτόχρονα τη λειτουργία των δικών τους σενάρια. 294 00:16:08,770 --> 00:16:10,020 Αυτό είναι ένα παράδειγμα του σπειρώματος. 295 00:16:10,020 --> 00:16:12,860 296 00:16:12,860 --> 00:16:18,000 >> Και η άλλη έννοια που ήταν εισήχθη στο μηδέν ήταν τα γεγονότα. 297 00:16:18,000 --> 00:16:22,550 Και τα γεγονότα είναι όταν πολλά μέρη της κωδικό σας επικοινωνούν μεταξύ τους. 298 00:16:22,550 --> 00:16:26,840 Στο Scratch, αυτό ήταν όταν χρησιμοποιείται η ελέγχου εκπομπής και η Όταν 299 00:16:26,840 --> 00:16:29,500 Λήψη μπλοκ. 300 00:16:29,500 --> 00:16:35,170 >> Και, επίσης, στο πρόβλημα Set 4, είδαμε ένα μικρό κομμάτι των εκδηλώσεων, καθώς και. 301 00:16:35,170 --> 00:16:38,250 Εσείς θα μπορούσε να χρησιμοποιηθεί η βιβλιοθήκη Gevent. 302 00:16:38,250 --> 00:16:42,450 Και υπήρχε μια λειτουργία waitForClick στην οποία περίμενες 303 00:16:42,450 --> 00:16:44,300 για το χρήστη να κάνει κλικ. 304 00:16:44,300 --> 00:16:47,870 Και σας κλικ, στην περίπτωση αυτή, θα ήταν το γεγονός και περιμένουμε κλικ είναι σας 305 00:16:47,870 --> 00:16:49,120 χειρισμού συμβάντων. 306 00:16:49,120 --> 00:16:53,690 307 00:16:53,690 --> 00:16:58,630 >> Και, επίσης, καθ 'όλη τη λειτουργία psets σας και εργάζονται σε psets σας, 308 00:16:58,630 --> 00:17:01,920 μπορεί να έχουν έρθει σε επαφή με ορισμένες από αυτές τις εντολές. 309 00:17:01,920 --> 00:17:05,579 Αυτό είναι ό, τι έχετε πληκτρολογήσει σε σας τερματικό παράθυρο ή οτιδήποτε παράθυρο 310 00:17:05,579 --> 00:17:12,119 που εμφανίζεται στην g edit σας, κατ 'ουσίαν, την πλοήγηση του υπολογιστή σας. 311 00:17:12,119 --> 00:17:19,440 >> Έτσι, για παράδειγμα, LS παραθέτει η περιεχόμενα ενός καταλόγου. 312 00:17:19,440 --> 00:17:22,510 Κάντε κατάλογο δημιουργεί ένα νέο φάκελο. 313 00:17:22,510 --> 00:17:24,819 CD, κατάλογο αλλαγή. 314 00:17:24,819 --> 00:17:28,400 RM, αφαίρεση, διαγράφει ένα αρχείο ή κάποιο κατάλογο. 315 00:17:28,400 --> 00:17:31,050 Και στη συνέχεια, αφαιρέστε τον κατάλογο Καταργεί έναν κατάλογο. 316 00:17:31,050 --> 00:17:32,300 >> ΚΟΙΝΟ: [δεν ακούγεται]; 317 00:17:32,300 --> 00:17:36,978 318 00:17:36,978 --> 00:17:38,370 >> ΟΜΙΛΗΤΗΣ 1: Ναι, σίγουρα. 319 00:17:38,370 --> 00:17:42,530 320 00:17:42,530 --> 00:17:46,040 Δυστυχώς, η ερώτηση ήταν αν Θα πρότεινα αυτό το 321 00:17:46,040 --> 00:17:48,840 για το σκονάκι. 322 00:17:48,840 --> 00:17:49,440 Θα μπορούσε να βοηθήσει. 323 00:17:49,440 --> 00:17:51,490 Αν έχετε χώρο, μπορείτε να το βάλετε σε. 324 00:17:51,490 --> 00:17:56,170 Είναι, επίσης, απλά σε γενικές γραμμές αρκετά καλό να θυμάστε γιατί όταν το χρησιμοποιείτε 325 00:17:56,170 --> 00:17:59,060 ίσως να θέλετε απλά να έχουν απομνημονεύσει. 326 00:17:59,060 --> 00:18:02,750 Αυτό θα κάνει τη ζωή σας πολύ ευκολότερη. 327 00:18:02,750 --> 00:18:04,000 Μήπως μπορώ να απαντήσω στην ερώτησή σας; 328 00:18:04,000 --> 00:18:10,528 329 00:18:10,528 --> 00:18:14,290 >> Μέχρι τώρα, μιλήσαμε λίγο εν συντομία σχετικά με τις βιβλιοθήκες. 330 00:18:14,290 --> 00:18:18,570 Αλλά τα δύο κύρια αυτά που έχουμε πάει χρησιμοποιώντας μέχρι στιγμής στην πορεία είναι 331 00:18:18,570 --> 00:18:20,860 πρότυπο I / O και CS50. 332 00:18:20,860 --> 00:18:25,410 Τι είδους πράγματα συμπεριλαμβάνονται στο πρότυπο / O βιβλιοθήκη μου; 333 00:18:25,410 --> 00:18:28,410 >> Ναι, μέχρι στιγμής έχουμε χρησιμοποιήσει printf. 334 00:18:28,410 --> 00:18:31,150 Σε CS50, έχουμε χρησιμοποιήσει GetInt και GetString. 335 00:18:31,150 --> 00:18:37,200 Και η σειρά τύπου δεδομένων συμβαίνει επίσης πρέπει να δηλώνονται σε αυτή τη βιβλιοθήκη CS50. 336 00:18:37,200 --> 00:18:40,250 Θα μιλήσουμε λίγο περισσότερο σε βάθος περίπου πώς οι βιβλιοθήκες λειτουργούν και πώς 337 00:18:40,250 --> 00:18:41,870 αλληλεπιδρούν με το υπόλοιπο του κωδικού σας. 338 00:18:41,870 --> 00:18:46,220 Αλλά αυτές είναι οι δύο κυριότερες ότι εμείς έχουν έρθει σε επαφή με το βαθμό στον 339 00:18:46,220 --> 00:18:48,430 το μάθημα. 340 00:18:48,430 --> 00:18:50,050 >> Τύποι. 341 00:18:50,050 --> 00:18:58,120 Αυτά είναι καλό να θυμόμαστε πόσο κάθε τύπος αντιπροσωπεύεται από ή πώς 342 00:18:58,120 --> 00:19:02,840 πολλά bytes το καθένα τύπου requires-- 343 00:19:02,840 --> 00:19:04,990 int, 4 bytes? char, 1 byte. 344 00:19:04,990 --> 00:19:06,550 Float είναι 4 bytes. 345 00:19:06,550 --> 00:19:07,782 Τι είναι ένα διπλό; 346 00:19:07,782 --> 00:19:09,032 >> ΚΟΙΝΟ: [δεν ακούγεται]. 347 00:19:09,032 --> 00:19:11,398 348 00:19:11,398 --> 00:19:16,240 >> ΟΜΙΛΗΤΗΣ 1: Ναι, έτσι, ένα πλωτήρα αλλά διπλασιάσει το μέγεθος. 349 00:19:16,240 --> 00:19:17,150 Τι θα γίνει με ένα μεγάλο χρονικό διάστημα; 350 00:19:17,150 --> 00:19:18,400 >> ΚΟΙΝΟ: [δεν ακούγεται]. 351 00:19:18,400 --> 00:19:21,614 352 00:19:21,614 --> 00:19:24,680 >> ΟΜΙΛΗΤΗΣ 1: OK. 353 00:19:24,680 --> 00:19:25,410 Αυτό είναι ένα μεγάλο χρονικό διάστημα; 354 00:19:25,410 --> 00:19:26,660 >> ΚΟΙΝΟ: [δεν ακούγεται]. 355 00:19:26,660 --> 00:19:29,400 356 00:19:29,400 --> 00:19:31,450 >> ΟΜΙΛΗΤΗΣ 1: Ναι, να διπλασιάσει int. 357 00:19:31,450 --> 00:19:34,240 358 00:19:34,240 --> 00:19:34,705 Ναι. 359 00:19:34,705 --> 00:19:36,100 >> ΚΟΙΝΟ: [δεν ακούγεται]. 360 00:19:36,100 --> 00:19:38,030 >> ΟΜΙΛΗΤΗΣ 1: Long [δεν ακούγεται]. 361 00:19:38,030 --> 00:19:41,860 Και στη συνέχεια μια μακρά μακρά είναι διπλάσιο από αυτό. 362 00:19:41,860 --> 00:19:42,814 >> ΚΟΙΝΟ: Όχι, όχι. 363 00:19:42,814 --> 00:19:47,107 Μια μεγάλη είναι απλά ένας int. 364 00:19:47,107 --> 00:19:50,910 Εξαρτάται από την αρχιτεκτονική πριν το [δεν ακούγεται] 365 00:19:50,910 --> 00:19:52,922 και int έχουν το ίδιο μέγεθος. 366 00:19:52,922 --> 00:19:54,172 [Δεν ακούγεται]. 367 00:19:54,172 --> 00:19:58,841 368 00:19:58,841 --> 00:20:00,920 >> ΟΜΙΛΗΤΗΣ 1: Έτσι, μια μακρά και ένας int είναι το ίδιο. 369 00:20:00,920 --> 00:20:02,943 Και στη συνέχεια μια μακρά μακρά είναι διπλάσιο από το int. 370 00:20:02,943 --> 00:20:03,910 Cool. 371 00:20:03,910 --> 00:20:05,550 Και τότε, αυτό είναι το τελευταίο είδος; 372 00:20:05,550 --> 00:20:06,510 >> ΚΟΙΝΟ: Pointer. 373 00:20:06,510 --> 00:20:10,350 >> ΟΜΙΛΗΤΗΣ 1: Ναι, έτσι μάθαμε λίγο σχετικά με τους δείκτες. 374 00:20:10,350 --> 00:20:14,015 Και ανεξάρτητα από το τι είναι ένας δείκτης δείχνοντας να-- θα μπορούσε να είναι ένα αστέρι char 375 00:20:14,015 --> 00:20:15,880 ή int star-- 376 00:20:15,880 --> 00:20:20,530 Είναι πάντα 4 bytes για ένα δείκτη. 377 00:20:20,530 --> 00:20:21,633 Ερωτήσεις σχετικά με αυτό; 378 00:20:21,633 --> 00:20:22,116 Ναι; 379 00:20:22,116 --> 00:20:24,531 >> ΚΟΙΝΟ: [δεν ακούγεται]; 380 00:20:24,531 --> 00:20:29,530 >> ΟΜΙΛΗΤΗΣ 1: Έτσι, μια μεγάλη και μια int είναι η ίδια σε αυτή τη συσκευή CS50. 381 00:20:29,530 --> 00:20:32,302 >> ΚΟΙΝΟ: Η συσκευή είναι πλήρως εναλλάξιμα. 382 00:20:32,302 --> 00:20:33,510 >> ΟΜΙΛΗΤΗΣ 1: Ναι. 383 00:20:33,510 --> 00:20:36,610 Μέχρι τότε μια μακρά μακρά είναι διπλή η int. 384 00:20:36,610 --> 00:20:39,250 >> ΚΟΙΝΟ: Αυτή είναι η 32 bit; 385 00:20:39,250 --> 00:20:40,620 >> ΟΜΙΛΗΤΗΣ 1: 32 bit, ναι. 386 00:20:40,620 --> 00:20:43,572 >> ΚΟΙΝΟ: Έτσι [δεν ακούγεται]; 387 00:20:43,572 --> 00:20:46,790 >> ΟΜΙΛΗΤΗΣ 1: Ναι, αν δεν το κάνει λένε ρητά, σας 388 00:20:46,790 --> 00:20:47,870 πρέπει να αναλάβει ένα 32 bit. 389 00:20:47,870 --> 00:20:50,040 >> ΚΟΙΝΟ: Θα πω κάτι όπως και υποθέτοντας μια 390 00:20:50,040 --> 00:20:51,498 αρχιτεκτονική σαν τη συσκευή. 391 00:20:51,498 --> 00:20:58,800 392 00:20:58,800 --> 00:21:01,710 Για 64 bit, τα μόνα πράγματα που αλλαγή είναι λονγκ και δείκτες. 393 00:21:01,710 --> 00:21:05,614 Και οι δύο [δεν ακούγεται]. 394 00:21:05,614 --> 00:21:06,590 >> ΟΜΙΛΗΤΗΣ 1: Ναι; 395 00:21:06,590 --> 00:21:07,566 >> ΚΟΙΝΟ: Ερώτηση. 396 00:21:07,566 --> 00:21:10,982 Έτσι, σε ένα από τα κουίζ πρακτική, ζητά για μια unsigned int. 397 00:21:10,982 --> 00:21:15,374 Λοιπόν, πώς θα ήταν αυτό να προσδιορίζεται από έναν int [δεν ακούγεται]; 398 00:21:15,374 --> 00:21:18,140 >> ΟΜΙΛΗΤΗΣ 1: Μια ανυπόγραφη σε επίσης 4 bytes. 399 00:21:18,140 --> 00:21:21,172 Αλλά αυτό είναι διαφορετικό για μια υπογεγραμμένη int και ένα ανυπόγραφο int; 400 00:21:21,172 --> 00:21:22,422 >> ΚΟΙΝΟ: [δεν ακούγεται]. 401 00:21:22,422 --> 00:21:24,868 402 00:21:24,868 --> 00:21:25,630 >> ΟΜΙΛΗΤΗΣ 1: Δεξιά. 403 00:21:25,630 --> 00:21:27,570 Κάποιος μπορεί να αντιπροσωπεύουν αρνητικές τιμές. 404 00:21:27,570 --> 00:21:28,580 Αλλά πώς το κάνει αυτό; 405 00:21:28,580 --> 00:21:30,536 >> ΚΟΙΝΟ: [δεν ακούγεται]. 406 00:21:30,536 --> 00:21:36,370 >> ΟΜΙΛΗΤΗΣ 1: Ναι, εξοικονομεί 1 bit για την αναπαράσταση σημάδι. 407 00:21:36,370 --> 00:21:40,910 408 00:21:40,910 --> 00:21:45,040 Η υπογεγραμμένη έχει ένα bit που αντιπροσωπεύει το σημάδι. 409 00:21:45,040 --> 00:21:48,886 Και ανυπόγραφο ακριβώς είναι όλα θετικά. 410 00:21:48,886 --> 00:21:50,365 >> ΚΟΙΝΟ: OK. 411 00:21:50,365 --> 00:21:54,230 Οπότε λέτε ότι είναι ένα διπλό δύο φορές το μέγεθος του πλωτήρα; 412 00:21:54,230 --> 00:21:58,202 >> ΟΜΙΛΗΤΗΣ 1: Διπλή είναι δύο φορές το μέγεθος του πλωτήρα, ναι. 413 00:21:58,202 --> 00:22:01,639 >> ΚΟΙΝΟ: Πώς ένα δείκτη σε μια μακρά μακρά [δεν ακούγεται]; 414 00:22:01,639 --> 00:22:06,058 415 00:22:06,058 --> 00:22:10,870 >> ΟΜΙΛΗΤΗΣ 1: Έτσι, το ερώτημα είναι πώς ο δείκτης για μια μακρά long-- 416 00:22:10,870 --> 00:22:13,800 πώς είναι ότι μόνο τέσσερα bytes όταν μια μακρά μακρά 8 bytes του. 417 00:22:13,800 --> 00:22:17,310 Έτσι, να θυμάστε τι είναι ένας δείκτης, ουσιαστικά, στην ίδια τιμή βάσης. 418 00:22:17,310 --> 00:22:19,046 >> ΚΟΙΝΟ: [δεν ακούγεται]. 419 00:22:19,046 --> 00:22:22,670 >> ΟΜΙΛΗΤΗΣ 1: Ναι, έτσι, ένα δείκτη είναι απλά μια θέση μνήμης. 420 00:22:22,670 --> 00:22:28,040 Έτσι, δεν έχει σημασία πόσο διάστημα ότι ο δείκτης δείχνει να. 421 00:22:28,040 --> 00:22:32,060 Χρειάζεται μόνο 4 bytes να παρακολουθείτε από αυτή τη θέση μνήμης. 422 00:22:32,060 --> 00:22:34,760 423 00:22:34,760 --> 00:22:36,010 Οποιεσδήποτε άλλες ερωτήσεις; 424 00:22:36,010 --> 00:22:39,800 425 00:22:39,800 --> 00:22:41,050 Cool. 426 00:22:41,050 --> 00:22:42,920 427 00:22:42,920 --> 00:22:47,460 >> Έτσι το τελευταίο πράγμα που έχω είναι τυπική έξοδο. 428 00:22:47,460 --> 00:22:51,020 Θα πρέπει να χρησιμοποιείτε συχνά αρκεί το γεγονός ότι μπορείτε να θυμηθείτε. 429 00:22:51,020 --> 00:22:54,800 Αλλά αυτό είναι όταν χρησιμοποιούμε printf, για παράδειγμα. 430 00:22:54,800 --> 00:22:59,260 Και έχουμε αυτά τα σύμβολα κράτησης θέσης ότι κλήθηκαν κωδικούς μορφή. 431 00:22:59,260 --> 00:23:03,910 >> Έτσι τοις εκατό γ char, τοις εκατό i για int, και μπορούμε επίσης να χρησιμοποιήσετε τοις εκατό d. 432 00:23:03,910 --> 00:23:05,130 Είναι το ίδιο πράγμα. 433 00:23:05,130 --> 00:23:08,200 Αλλά, σε γενικές γραμμές, σε CS50 μας προσπαθήστε να χρησιμοποιήσετε τοις εκατό i. 434 00:23:08,200 --> 00:23:09,860 Ποσοστό f για float. 435 00:23:09,860 --> 00:23:15,620 Ποσοστό ld για πολύ καιρό και s τοις εκατό για κορδόνι. 436 00:23:15,620 --> 00:23:18,550 >> Ομοίως, έχουμε χρησιμοποιήσει μερικά από αυτές τις αλληλουχίες διαφυγής. 437 00:23:18,550 --> 00:23:22,431 Για παράδειγμα, backslash n για τη νέα γραμμή. 438 00:23:22,431 --> 00:23:26,910 Αυτό είναι μόνο για όταν είστε μορφοποίηση κωδικό σας για εκτύπωση f. 439 00:23:26,910 --> 00:23:27,260 Ναι; 440 00:23:27,260 --> 00:23:28,906 >> ΚΟΙΝΟ: Τι είναι τοις εκατό d για; 441 00:23:28,906 --> 00:23:31,850 >> ΟΜΙΛΗΤΗΣ 1: Έτσι, το ερώτημα είναι ό, τι είναι τοις εκατό d για; 442 00:23:31,850 --> 00:23:33,270 Ποσοστό d είναι για ints. 443 00:23:33,270 --> 00:23:37,392 Τοις εκατό τοις εκατό d και Ι είναι τα ίδια. 444 00:23:37,392 --> 00:23:41,130 >> ΚΟΙΝΟ: Ποια είναι η διαφορά μεταξύ backslash n και backslash r; 445 00:23:41,130 --> 00:23:45,300 >> ΟΜΙΛΗΤΗΣ 1: Έτσι, το ερώτημα είναι ποια είναι η διαφορά μεταξύ αντίδραση n και 446 00:23:45,300 --> 00:23:48,615 σπασμωδική κίνηση r; 447 00:23:48,615 --> 00:23:50,906 Νομίζω backslash r is-- 448 00:23:50,906 --> 00:23:54,340 >> ΚΟΙΝΟ: Έτσι backslash r συνεπάγεται μόνο επιστρέφει στην αρχή της γραμμής 449 00:23:54,340 --> 00:23:56,670 χωρίς στην πραγματικότητα πρόκειται για μια νέα γραμμή. 450 00:23:56,670 --> 00:24:01,000 Έτσι, αν εκτυπώσετε ένα backslash r και να επιστρέψετε στην αρχή της γραμμής 451 00:24:01,000 --> 00:24:04,005 Στη συνέχεια μπορείτε να εκτυπώσετε περισσότερα πράγματα, μπορείτε να αντικαταστήσετε τα πράγματα που είναι ήδη σε 452 00:24:04,005 --> 00:24:04,390 [Δεν ακούγεται]. 453 00:24:04,390 --> 00:24:06,725 Ότι, η πραγματικότητα πηγαίνει σε ένα νέο γραμμή και πηγαίνει σε [δεν ακούγεται]. 454 00:24:06,725 --> 00:24:10,525 455 00:24:10,525 --> 00:24:13,915 >> ΟΜΙΛΗΤΗΣ 1: Λοιπόν, οποιεσδήποτε άλλες ερωτήσεις; 456 00:24:13,915 --> 00:24:15,430 Εντάξει. 457 00:24:15,430 --> 00:24:18,617 Πάω να το χέρι μακριά για να Dan που θα συνεχιστεί. 458 00:24:18,617 --> 00:24:25,078 >> [Χειροκρότημα] 459 00:24:25,078 --> 00:25:08,814 460 00:25:08,814 --> 00:25:09,720 >> DAN: Εντάξει. 461 00:25:09,720 --> 00:25:18,590 Γι 'αυτό θα πρέπει να μιλάμε για μια άλλη μεγάλη εύρος των ιδεών από την τάξη που είναι 462 00:25:18,590 --> 00:25:23,220 περίπου εκπρόσωπος των δύο εβδομάδων και η έναρξη των τριών εβδομάδων ξεκινώντας 463 00:25:23,220 --> 00:25:28,690 με χύτευση, η οποία είναι απλά ένας τρόπος για να κατεργασία μιας αξίας ενός ορισμένου τύπου ως 464 00:25:28,690 --> 00:25:30,830 μια αξία ενός διαφορετικού τύπου. 465 00:25:30,830 --> 00:25:34,110 Έτσι, μπορούμε να το κάνουμε αυτό με χαρακτήρες σε ints, επιπλέει σε ακέραιο, και 466 00:25:34,110 --> 00:25:35,360 μεγάλη λαχταρά να διπλασιαστεί. 467 00:25:35,360 --> 00:25:38,170 468 00:25:38,170 --> 00:25:44,500 >> Όλα αυτά τα πράγματα μπορούν να χρησιμοποιηθούν ως τρόπους θεραπείας κάποια αριθμητική τιμή 469 00:25:44,500 --> 00:25:48,370 μείον char όπως κάποια άλλα αριθμητική τιμή. 470 00:25:48,370 --> 00:25:54,480 Έτσι, υπάρχουν ορισμένα ζητήματα με αυτό, του Φυσικά, το οποίο έρχεται όταν ρίχνει 471 00:25:54,480 --> 00:25:57,860 πράγματα όπως float σε ακέραιο. 472 00:25:57,860 --> 00:26:00,500 Έτσι, αυτό είναι λίγο περίεργο. 473 00:26:00,500 --> 00:26:03,170 Έχουμε έναν πλωτήρα που είναι 1.31. 474 00:26:03,170 --> 00:26:05,220 Εμείς το πολλαπλασιάζουμε με 10.000. 475 00:26:05,220 --> 00:26:08,380 Και τότε μπορούμε να το εκτυπώσετε ως int. 476 00:26:08,380 --> 00:26:09,630 Τι κάνει αυτή η παραγωγή; 477 00:26:09,630 --> 00:26:11,600 478 00:26:11,600 --> 00:26:14,020 10.000 φορές 1.31. 479 00:26:14,020 --> 00:26:18,761 Έτσι 13.000, είναι ότι η εικασία; 480 00:26:18,761 --> 00:26:20,685 >> ΚΟΙΝΟ: Νομίζω ότι είναι 10.000. 481 00:26:20,685 --> 00:26:24,234 >> DAN: Έτσι είμαι το πολλαπλασιάζοντας από 10.000 πριν είμαι το casting. 482 00:26:24,234 --> 00:26:25,202 >> ΚΟΙΝΟ: Αχ. 483 00:26:25,202 --> 00:26:27,622 Δεν θα υπάρξει ένα 9 και μερικοί 0 αριθμούς; 484 00:26:27,622 --> 00:26:29,270 >> DAN: Μπορείτε να έχετε μερικά περίεργα ψηφία. 485 00:26:29,270 --> 00:26:32,410 486 00:26:32,410 --> 00:26:37,670 Έτσι ακριβώς, είναι 1,3 φορές 10,000. 487 00:26:37,670 --> 00:26:40,040 Έτσι, αυτό είναι 13.000. 488 00:26:40,040 --> 00:26:41,313 Και αυτή η επιπλέον weird-- 489 00:26:41,313 --> 00:26:42,160 >> ΚΟΙΝΟ: 13,100. 490 00:26:42,160 --> 00:26:42,650 >> DAN: 13,100. 491 00:26:42,650 --> 00:26:44,910 Σας ευχαριστώ, Rob. 492 00:26:44,910 --> 00:26:46,610 Και αυτή η επιπλέον weirdness-- 493 00:26:46,610 --> 00:26:48,060 Αυτό 9,9-- 494 00:26:48,060 --> 00:26:53,860 Είναι απλώς και μόνο επειδή αυτή χύτευση καταλήξαμε στρογγυλοποίηση προς τα κάτω, όπου 495 00:26:53,860 --> 00:26:55,394 αυτό δεν θα πρέπει να έχουν. 496 00:26:55,394 --> 00:26:55,871 Ναι. 497 00:26:55,871 --> 00:26:58,256 >> ΚΟΙΝΟ: Η χύτευση γίνεται μετά από οτιδήποτε άλλο; 498 00:26:58,256 --> 00:27:03,865 >> DAN: Έτσι, γιατί έχω αυτό σε έντυπη μορφή, το κάνει αυτό πολλαπλασιασμό πριν 499 00:27:03,865 --> 00:27:05,230 κάνει αυτό το casting. 500 00:27:05,230 --> 00:27:06,140 >> ΚΟΙΝΟ: [δεν ακούγεται]. 501 00:27:06,140 --> 00:27:11,350 >> DAN: Νομίζω ότι θα ρίξει το πρώτο, ναι, ποια θα είναι 10.000. 502 00:27:11,350 --> 00:27:12,610 Οτιδήποτε άλλο; 503 00:27:12,610 --> 00:27:13,330 Cool. 504 00:27:13,330 --> 00:27:16,344 Έτσι, αυτό είναι 13.099. 505 00:27:16,344 --> 00:27:17,840 Γιατί συμβαίνει αυτό; 506 00:27:17,840 --> 00:27:18,900 Η ανακρίβεια. 507 00:27:18,900 --> 00:27:21,020 >> Πλωτήρες δεν είναι τέλεια. 508 00:27:21,020 --> 00:27:27,550 Μπορούν να αντιπροσωπεύουν μόνο τους αριθμούς σε μια ορισμένα σημαντικά στοιχεία. 509 00:27:27,550 --> 00:27:35,120 Έτσι, αν θέλουμε να εκτυπώσετε 8 σύκα sig στις Αυτό float, έχουμε ένα είδος 510 00:27:35,120 --> 00:27:36,800 άσχημο αριθμό ψάχνετε. 511 00:27:36,800 --> 00:27:45,580 Και αυτό γιατί 1.31 δεν μπορεί με ακρίβεια να αντιπροσωπεύεται από απλή 512 00:27:45,580 --> 00:27:49,000 αρμοδιότητες των δύο στο μηχάνημα. 513 00:27:49,000 --> 00:27:53,530 Έτσι, καταλήγει να λαμβάνει το πλησιέστερο Υποθέτω, η οποία καταλήγει 514 00:27:53,530 --> 00:27:55,710 είναι λίγο χαμηλή. 515 00:27:55,710 --> 00:27:57,730 Νόημα; 516 00:27:57,730 --> 00:27:59,110 OK. 517 00:27:59,110 --> 00:28:05,840 >> Τώρα, ενεργοποιημένο είναι ένας διαφορετικός τρόπος κάνει δηλώσεις υπό όρους, όπου όλα τα 518 00:28:05,840 --> 00:28:09,900 νοιαζόμαστε είναι μια μόνο μεταβλητή. 519 00:28:09,900 --> 00:28:16,570 Έτσι, σε αυτό το συγκεκριμένο παράδειγμα, είμαστε πάρει έναν ακέραιο από το χρήστη. 520 00:28:16,570 --> 00:28:21,070 Και τότε ψάχνουμε τι είναι ακέραιος. 521 00:28:21,070 --> 00:28:23,500 Προφανώς, αυτό είναι ο αριθμός μεταξύ ενός και τεσσάρων. 522 00:28:23,500 --> 00:28:24,800 Γι 'αυτό ζητάμε. 523 00:28:24,800 --> 00:28:28,450 >> Έτσι κάνετε μια αλλαγή της το όνομα της μεταβλητής. 524 00:28:28,450 --> 00:28:34,290 Στη συνέχεια, θα δημιουργήσει τις περιπτώσεις πιθανών εκτιμά ότι θα μπορούσε να είναι. 525 00:28:34,290 --> 00:28:37,730 Έτσι μία περίπτωση, λένε ότι είναι χαμηλή. 526 00:28:37,730 --> 00:28:41,080 Και τότε θα σπάσει για να βγούμε της κατάστασης του διακόπτη έτσι 527 00:28:41,080 --> 00:28:43,270 δεν συνεχίζω. 528 00:28:43,270 --> 00:28:44,830 >> Στην επόμενη case-- 529 00:28:44,830 --> 00:28:46,940 έτσι περίπτωση δύο και περίπτωση three-- 530 00:28:46,940 --> 00:28:51,920 αν είναι υπόθεση δύο πέφτει ακριβώς κάτω η πρώτη γραμμή του κώδικα που βλέπει όπως με 531 00:28:51,920 --> 00:28:55,400 διάκριση των τριών ετών μέχρι βλέπει ένα διάλειμμα. 532 00:28:55,400 --> 00:29:00,430 Έτσι, ο λόγος για να πάρετε μία περίπτωση να μόνο χαμηλή εκτύπωσης είναι γιατί 533 00:29:00,430 --> 00:29:01,890 έχουν αυτό το διάλειμμα εδώ. 534 00:29:01,890 --> 00:29:05,360 Αν, ας πούμε, αγνόησε αυτό break-- αν μου πέταξε αυτό breakaway-- 535 00:29:05,360 --> 00:29:09,740 θα εκτυπώσει χαμηλή, και, στη συνέχεια, θα ήταν εκτύπωση μέση, και τότε θα σπάσει. 536 00:29:09,740 --> 00:29:12,200 >> Έτσι, τα διαλείμματα είναι ένα σημαντικό μέρος εναλλαγή των όρων και 537 00:29:12,200 --> 00:29:14,340 θα πρέπει να είναι εκεί. 538 00:29:14,340 --> 00:29:20,070 Τυχόν περιπτώσεις που δεν αναφέρονται ρητά αντιμετωπίζονται από την προεπιλογή 539 00:29:20,070 --> 00:29:26,645 περίπτωση στο διακόπτη και θα πρέπει να πεταχτεί. 540 00:29:26,645 --> 00:29:31,363 >> ΚΟΙΝΟ: So 1, 2, 3, και 4 θα ήταν ν? 541 00:29:31,363 --> 00:29:33,310 >> DAN: Αξίες που n μπορεί να είναι. 542 00:29:33,310 --> 00:29:34,654 Ναι. 543 00:29:34,654 --> 00:29:35,146 Ναι; 544 00:29:35,146 --> 00:29:37,606 >> ΚΟΙΝΟ: Έτσι, όταν έχετε ότι [δεν ακούγεται]; 545 00:29:37,606 --> 00:29:44,002 546 00:29:44,002 --> 00:29:46,830 >> DAN: Μπορείτε να εκτυπώσετε χαμηλά, και, στη συνέχεια, θα εκτυπώσετε μέση, και 547 00:29:46,830 --> 00:29:47,400 τότε θα σπάσει. 548 00:29:47,400 --> 00:29:50,244 >> ΚΟΙΝΟ: Γιατί να το εκτυπώσετε μέση αν [δεν ακούγεται]; 549 00:29:50,244 --> 00:29:54,036 550 00:29:54,036 --> 00:30:00,550 >> DAN: Έτσι τα πάντα κάτω από μια υπόθεση πριν από ένα διάλειμμα πέφτει κάτω. 551 00:30:00,550 --> 00:30:09,390 Έτσι, μία περίπτωση εκτύπωσης είναι κάτω περίπτωση ένα όπως είναι αυτό ακόλουθα εκτύπωσης. 552 00:30:09,390 --> 00:30:09,890 Ναι; 553 00:30:09,890 --> 00:30:11,140 >> ΚΟΙΝΟ: [δεν ακούγεται]; 554 00:30:11,140 --> 00:30:15,890 555 00:30:15,890 --> 00:30:22,170 >> DAN: Λοιπόν αυτός ο αριθμός είναι μόνο ένα συγκεκριμένο αξία που αυτή η μεταβλητή 556 00:30:22,170 --> 00:30:23,420 μπορεί να πάρει, σωστά; 557 00:30:23,420 --> 00:30:26,740 558 00:30:26,740 --> 00:30:28,490 Μήπως αυτό έχει νόημα; 559 00:30:28,490 --> 00:30:28,990 Ναι. 560 00:30:28,990 --> 00:30:31,490 >> ΚΟΙΝΟ: [δεν ακούγεται]; 561 00:30:31,490 --> 00:30:34,130 >> DAN: Ναι, περίπτωση δύο θα εκτυπώσετε μεσαία και στη συνέχεια να σπάσει. 562 00:30:34,130 --> 00:30:35,380 >> ΚΟΙΝΟ: [δεν ακούγεται]; 563 00:30:35,380 --> 00:30:37,954 564 00:30:37,954 --> 00:30:40,050 >> DAN: Νομίζω ότι οποιοσδήποτε; 565 00:30:40,050 --> 00:30:43,855 Ποια άλλα είδη δεδομένων μπορείτε να αλλάξετε πάνω; 566 00:30:43,855 --> 00:30:46,320 >> ΚΟΙΝΟ: Μπορείτε να αλλάξετε πάνω από οποιοδήποτε τύπο δεδομένων. 567 00:30:46,320 --> 00:30:50,905 Αλλά αυτό σημαίνει μόνο κάτι πάνω χαρακτήρες και ints και τέτοια πράγματα, γιατί 568 00:30:50,905 --> 00:30:55,600 αν είστε μετάβαση ενός δείκτη ότι δεν έχει νόημα, 569 00:30:55,600 --> 00:30:59,555 μετάβαση φορτία, αν αφήσει ακόμη και το να το κάνετε αυτό, λόγω της κινητής υποδιαστολής 570 00:30:59,555 --> 00:31:02,840 στην ακρίβεια, δεν θα ήταν πραγματικά θέλω να το κάνω έτσι κι αλλιώς. 571 00:31:02,840 --> 00:31:07,320 Έτσι, λίγο πολύ, απλά ints και χαρακτήρες και τα πράγματα όπως αυτό. 572 00:31:07,320 --> 00:31:12,360 >> DAN: Ναι, αυτό είναι όταν έχετε ρητή αξίες που ξέρετε, νομίζω, μπορεί να είναι 573 00:31:12,360 --> 00:31:14,250 ότι ένας διακόπτης είναι πραγματικά χρήσιμο. 574 00:31:14,250 --> 00:31:17,094 575 00:31:17,094 --> 00:31:18,990 Καλή; 576 00:31:18,990 --> 00:31:21,370 OK. 577 00:31:21,370 --> 00:31:26,180 >> Πεδίο εφαρμογής είναι η περιοχή που διακηρυγμένο μεταβλητής επεκτείνεται. 578 00:31:26,180 --> 00:31:32,190 Έτσι, σε αυτό το μικρό κομμάτι του κώδικα που έχω, θα ήταν γεμάτη από σφάλματα. 579 00:31:32,190 --> 00:31:41,450 Και ο λόγος είναι ότι δηλώσει αυτό το int i εντός του πεδίου για αυτό βρόχου. 580 00:31:41,450 --> 00:31:46,390 Και τότε εγώ προσπαθώ να αναφέρονται ότι i έξω από αυτό για το πεδίο βρόχου. 581 00:31:46,390 --> 00:31:50,330 >> Έτσι, βασικά, μπορείτε να σκεφτείτε για το πεδίο εφαρμογής ως κάτι που δηλώνετε 582 00:31:50,330 --> 00:31:59,750 με μέσα σε ένα σύνολο από αγκύλες μόνο υπάρχει μέσα σε αυτές τις αγκύλες. 583 00:31:59,750 --> 00:32:04,990 Και αν προσπαθήσετε και να χρησιμοποιεί το εν λόγω μεταβλητή εκτός από τις αγκύλες, εσείς θα 584 00:32:04,990 --> 00:32:08,356 πάρετε ένα λάθος από τον compiler. 585 00:32:08,356 --> 00:32:08,812 Ναι; 586 00:32:08,812 --> 00:32:09,724 >> ΚΟΙΝΟ: Έτσι, αυτό δεν λειτουργεί; 587 00:32:09,724 --> 00:32:11,790 >> DAN: Αυτό δεν λειτουργεί, ναι. 588 00:32:11,790 --> 00:32:17,190 589 00:32:17,190 --> 00:32:18,660 Strings. 590 00:32:18,660 --> 00:32:19,780 String ένα char *. 591 00:32:19,780 --> 00:32:22,250 Είναι ακριβώς το ίδιο. 592 00:32:22,250 --> 00:32:25,540 Είναι απλά Δείκτες στους χαρακτήρες. 593 00:32:25,540 --> 00:32:33,000 Και όλα τα έγχορδα που έχετε θα πρέπει να τελειώσει με backslash μηδέν, το οποίο είναι ακριβώς 594 00:32:33,000 --> 00:32:34,410 ένα γ σύμβαση. 595 00:32:34,410 --> 00:32:36,680 >> Καλείται το NULL τερματισμού. 596 00:32:36,680 --> 00:32:39,050 Και NULL-- 597 00:32:39,050 --> 00:32:41,670 κεφάλαιο Β, κεφάλαιο U, κεφάλαιο L, πρωτεύουσα εγώ-- 598 00:32:41,670 --> 00:32:44,290 δεν είναι η ίδια με την NULL τερματιστή. 599 00:32:44,290 --> 00:32:46,640 Αυτός είναι ένας δείκτης. 600 00:32:46,640 --> 00:32:48,280 Αυτό είναι ένας χαρακτήρας. 601 00:32:48,280 --> 00:32:49,530 Είναι πολύ διακριτές. 602 00:32:49,530 --> 00:32:50,200 Θυμηθείτε αυτό. 603 00:32:50,200 --> 00:32:52,320 Θα είναι στο κουίζ, μάλλον. 604 00:32:52,320 --> 00:32:54,040 Δεν έχω δει το κουίζ. 605 00:32:54,040 --> 00:32:57,880 606 00:32:57,880 --> 00:32:58,840 Ναι; 607 00:32:58,840 --> 00:33:01,232 >> ΚΟΙΝΟ: Έτσι NULL είναι, ας πούμε, ο δείκτης; 608 00:33:01,232 --> 00:33:01,995 >> DAN: Ναι. 609 00:33:01,995 --> 00:33:05,170 >> ΚΟΙΝΟ: Τι κάνει [δεν ακούγεται]; 610 00:33:05,170 --> 00:33:10,050 >> DAN: Αν, ας πούμε, malloc καλείται όταν δεν έχουν αρκετή μνήμη για να 611 00:33:10,050 --> 00:33:14,400 ανεξάρτητα από το μέγεθος που ζητάς, malloc θα επιστρέψει NULL. 612 00:33:14,400 --> 00:33:19,550 Είναι, ουσιαστικά, κάθε φορά που μια λειτουργία είναι υποτίθεται ότι θα επιστρέψει ένα δείκτη, μπορείτε 613 00:33:19,550 --> 00:33:22,600 πρέπει να ελέγξετε κατά NULL επειδή NULL είναι ένα όμορφο good-- 614 00:33:22,600 --> 00:33:25,260 Είναι, είδος, η αξία σκουπίδια. 615 00:33:25,260 --> 00:33:27,050 Είναι ένα μηδενικό όσο δείκτες πάει. 616 00:33:27,050 --> 00:33:29,630 617 00:33:29,630 --> 00:33:32,250 >> Όποτε μπορείτε να καλέσετε μια συνάρτηση, ότι επιστρέφει ένα δείκτη. 618 00:33:32,250 --> 00:33:35,960 Θα πάμε να θέλετε να ελέγξετε για να βεβαιωθείτε ότι δεν είναι δείκτης NULL 619 00:33:35,960 --> 00:33:37,760 επειδή NULL είναι πολύ κοινή. 620 00:33:37,760 --> 00:33:40,160 Είναι ένα είδος επιστροφής σκουπίδια. 621 00:33:40,160 --> 00:33:44,902 Έτσι, αν κάτι δεν πάει σωστά, μόλις επιστρέψει NULL αντ 'αυτού. 622 00:33:44,902 --> 00:33:45,898 >> ΚΟΙΝΟ: [δεν ακούγεται]; 623 00:33:45,898 --> 00:33:48,922 >> DAN: Ναι, και αυτό είναι αυτό. 624 00:33:48,922 --> 00:33:51,750 >> ΚΟΙΝΟ: [δεν ακούγεται]; 625 00:33:51,750 --> 00:33:52,800 >> DAN: το Spell σαν αυτό. 626 00:33:52,800 --> 00:33:54,150 Είναι η τερματισμού NULL. 627 00:33:54,150 --> 00:33:56,560 Είναι πεζά Ν-U-L-L εάν θα φαινόταν ότι ορθογραφία. 628 00:33:56,560 --> 00:33:59,860 >> ΚΟΙΝΟ: Και εγώ απλά πήγε πίσω και να δοκιμαστεί. 629 00:33:59,860 --> 00:34:03,010 Και αν προσπαθήσετε να βάλετε ένα πλωτό σημείο αξία σε ένα διακόπτη, θα φωνάζω σε σας 630 00:34:03,010 --> 00:34:05,916 λέγοντας, ανακοίνωση απαιτεί την έκφραση του ακεραίου τύπου. 631 00:34:05,916 --> 00:34:07,166 >> DAN: Εκεί θα πάτε. 632 00:34:07,166 --> 00:34:09,639 633 00:34:09,639 --> 00:34:12,246 Αλλά ναι, ποια ήταν η ερώτηση πάλι; 634 00:34:12,246 --> 00:34:13,496 >> ΚΟΙΝΟ: [δεν ακούγεται]; 635 00:34:13,496 --> 00:34:16,150 636 00:34:16,150 --> 00:34:23,679 >> DAN: Έτσι κεφάλαιο Β, κεφάλαιο U, κεφάλαιο L, πρωτεύουσα L είναι μια πραγματική γ πράγμα. 637 00:34:23,679 --> 00:34:29,719 Είναι ο δείκτης NULL και θα να αντιμετωπίζονται ως τέτοια. 638 00:34:29,719 --> 00:34:33,530 Δεν πρόκειται ποτέ να προσπαθήσουμε και να σημάνει το NULL χαρακτήρα και δείτε κάθε 639 00:34:33,530 --> 00:34:35,630 άλλο τρόπο από αυτό. 640 00:34:35,630 --> 00:34:36,610 Ναι; 641 00:34:36,610 --> 00:34:42,490 >> ΚΟΙΝΟ: Έτσι επιστρέφουν στην char max ή κάτι στις σημειώσεις, θα είναι 642 00:34:42,490 --> 00:34:43,960 ενσαρκώνουν την ίδια λειτουργία όπως [δεν ακούγεται]; 643 00:34:43,960 --> 00:34:50,655 644 00:34:50,655 --> 00:34:54,949 >> ΚΟΙΝΟ: Έτσι αναφέρεσαι επιστρέφει char max από getchar, ή 645 00:34:54,949 --> 00:34:55,444 ό, τι είναι; 646 00:34:55,444 --> 00:34:55,940 >> ΚΟΙΝΟ: Ναι. 647 00:34:55,940 --> 00:34:58,620 >> ΚΟΙΝΟ: Ναι, έτσι το γενικό όρος για όλα αυτά τα πράγματα 648 00:34:58,620 --> 00:34:59,920 είναι δείκτες τιμών. 649 00:34:59,920 --> 00:35:03,640 Έτσι όπως την επιστροφή int max από GetInt και char max από getchar, είναι 650 00:35:03,640 --> 00:35:06,010 υποτίθεται ότι είναι σαν, εντάξει, αν αυτά τα πράγματα επιστρέφουν σε μας, 651 00:35:06,010 --> 00:35:07,210 κάτι πήγε στραβά. 652 00:35:07,210 --> 00:35:09,950 >> Για δείκτες, εμείς απλώς τυχαίνει να έχουν αυτή η τιμή φρουρού ότι ο καθένας 653 00:35:09,950 --> 00:35:10,750 συμφωνεί μετά. 654 00:35:10,750 --> 00:35:13,210 Και αυτό είναι το πράγμα που επιστρέφουν όταν τα πράγματα πάνε στραβά. 655 00:35:13,210 --> 00:35:15,910 Έτσι char max είναι αυτό που είμαστε χρησιμοποιώντας να αντιπροσωπεύουν κάτι 656 00:35:15,910 --> 00:35:18,100 όπως NULL ή getchar. 657 00:35:18,100 --> 00:35:23,420 >> ΚΟΙΝΟ: Έτσι, αν είστε δοκιμή getchar, θα μπορούσε απλά βάζετε NULL; 658 00:35:23,420 --> 00:35:23,910 Αυτός θα κάνει τη διαφορά; 659 00:35:23,910 --> 00:35:25,400 >> DAN: Μπορείτε δεν θα μπορούσε απλά ελέγξτε NULL. 660 00:35:25,400 --> 00:35:30,130 Θα έπρεπε να ελέγχει char max, διότι η τιμή επιστροφής από τη λειτουργία 661 00:35:30,130 --> 00:35:35,416 ένας χαρακτήρας δεν είναι ένας δείκτης. 662 00:35:35,416 --> 00:35:35,888 Ναι; 663 00:35:35,888 --> 00:35:38,248 >> ΚΟΙΝΟ: Αυτή η ερώτηση ζητά για το μήκος συμβολοσειράς. 664 00:35:38,248 --> 00:35:40,136 Μήπως αυτό περιλαμβάνει την NULL χαρακτήρα; 665 00:35:40,136 --> 00:35:41,000 >> DAN: Όχι 666 00:35:41,000 --> 00:35:45,930 Και αυτό είναι στην πραγματικότητα το πώς μήκος συμβολοσειράς ξέρει να σταματήσει γιατί περνά μέσα από 667 00:35:45,930 --> 00:35:49,070 σειρά σας χαρακτήρες μέχρι βλέπει ένα χαρακτήρα NULL. 668 00:35:49,070 --> 00:35:51,030 Και τότε είναι σαν όλα Εντάξει, τελείωσα. 669 00:35:51,030 --> 00:35:52,130 >> ΚΟΙΝΟ: [δεν ακούγεται] πέντε; 670 00:35:52,130 --> 00:35:53,990 >> DAN: Γεια σας θα είναι πέντε. 671 00:35:53,990 --> 00:35:55,240 Ναι. 672 00:35:55,240 --> 00:35:59,580 673 00:35:59,580 --> 00:36:02,880 Έτσι συστοιχίες είναι συνεχής μπλοκ της μνήμης. 674 00:36:02,880 --> 00:36:08,480 Έχουν άμεση πρόσβαση λέγοντας το το όνομα του πίνακα και, στη συνέχεια, σε σγουρά 675 00:36:08,480 --> 00:36:16,720 τιράντες, ό, τι ευρετήριο που θέλετε να πάτε να, από όπου και αν αναπροσαρμόζονται από μηδέν έως 676 00:36:16,720 --> 00:36:20,100 το μήκος της συστοιχίας μείον 1. 677 00:36:20,100 --> 00:36:23,070 >> Και όπου και αν δηλωθεί από τον τύπο της πράγμα που είστε αποθήκευση στο 678 00:36:23,070 --> 00:36:29,750 συστοιχία, το όνομα του πίνακα, και έπειτα ανεξάρτητα από το μέγεθος είναι της εν λόγω συστοιχίας. 679 00:36:29,750 --> 00:36:36,660 Έτσι, αυτό είναι ένα char array μήκους έξι που έχει αυτές τις τιμές. 680 00:36:36,660 --> 00:36:42,050 681 00:36:42,050 --> 00:36:42,700 Ναι; 682 00:36:42,700 --> 00:36:43,950 >> ΚΟΙΝΟ: [δεν ακούγεται]; 683 00:36:43,950 --> 00:36:47,980 684 00:36:47,980 --> 00:36:48,460 >> DAN: Ναι. 685 00:36:48,460 --> 00:36:51,340 >> ΚΟΙΝΟ: [δεν ακούγεται]; 686 00:36:51,340 --> 00:36:56,700 >> DAN: Αν έχετε τι συμβαίνει στον πίνακα που έχει ήδη σημειωθεί. 687 00:36:56,700 --> 00:37:02,260 Έτσι, μπορείτε να ορίσετε αυτό αντί ως, ας πούμε, char, ανεξάρτητα από το όνομα του σας 688 00:37:02,260 --> 00:37:12,200 array είναι κενό παρένθεση ισούται με σγουρά Προετοιμαστείτε H κόμμα E κόμμα L κόμμα L κόμμα 689 00:37:12,200 --> 00:37:16,290 O κόμμα NULL χαρακτήρα και σγουρά κηδεμόνα. 690 00:37:16,290 --> 00:37:18,180 Αυτό θα μπορούσε να λειτουργήσει και ως μια δήλωση. 691 00:37:18,180 --> 00:37:20,886 >> ΚΟΙΝΟ: [δεν ακούγεται]; 692 00:37:20,886 --> 00:37:23,110 >> DAN: Στη συνέχεια θα πρέπει να έχουν το μέγεθος που έχει ήδη σημειωθεί. 693 00:37:23,110 --> 00:37:23,896 >> ΚΟΙΝΟ: [δεν ακούγεται]; 694 00:37:23,896 --> 00:37:25,146 >> DAN: Ναι. 695 00:37:25,146 --> 00:37:30,114 696 00:37:30,114 --> 00:37:32,420 Εντάξει. 697 00:37:32,420 --> 00:37:36,430 Τα επιχειρήματα της γραμμής εντολών είναι ένας τρόπος να πάρει είσοδο από το χρήστη, όπως 698 00:37:36,430 --> 00:37:39,380 επιχειρήματα για την κύρια. 699 00:37:39,380 --> 00:37:40,600 Κύρια παίρνει δύο επιχειρήματα. 700 00:37:40,600 --> 00:37:47,680 Ο αριθμός των επιχειρημάτων που είναι πέρασε κατά μήκος της γραμμής εντολών και 701 00:37:47,680 --> 00:37:55,340 διάνυσμα σειράς ή μια σειρά εγχόρδων από όλα τα επιχειρήματα. 702 00:37:55,340 --> 00:38:07,840 >> Έτσι, αν, ας πούμε, που ονομάζεται μια λειτουργία, όπως μια τελεία από 1 χώρος, 2 χώρο, τρία, 703 00:38:07,840 --> 00:38:10,110 argc θα είναι 4. 704 00:38:10,110 --> 00:38:17,370 Και το argv 0 θα ήταν μια τελεία έξω. 705 00:38:17,370 --> 00:38:19,130 Argv1 θα είναι 1. 706 00:38:19,130 --> 00:38:23,030 argv2 θα είναι 2 argv3 θα είναι 3, σε αυτή τη συγκεκριμένη περίπτωση. 707 00:38:23,030 --> 00:38:23,310 Ναι; 708 00:38:23,310 --> 00:38:25,400 >> ΚΟΙΝΟ: [δεν ακούγεται]; 709 00:38:25,400 --> 00:38:34,010 >> DAN: Το τελευταίο στοιχείο του πίνακα γιατί η σειρά είναι το μήκος argc συν 710 00:38:34,010 --> 00:38:41,050 ένα από argB, το τελευταίο στοιχείο είναι ο δείκτης NULL. 711 00:38:41,050 --> 00:38:42,580 Είναι argc συν 1. 712 00:38:42,580 --> 00:38:46,210 713 00:38:46,210 --> 00:38:52,150 Έτσι, στην περίπτωση που μόλις είπα, είναι θα argv 0 είναι μια κουκίδα έξω. 714 00:38:52,150 --> 00:38:56,330 argv 1 είναι 1 argv2 είναι 2 argv 3 είναι 3. 715 00:38:56,330 --> 00:39:03,490 argv 4, το οποίο είναι ένα μεγαλύτερο από argc θα είναι NULL. 716 00:39:03,490 --> 00:39:04,870 >> Και αυτό είναι το NULL δείκτη. 717 00:39:04,870 --> 00:39:06,590 Ναι. 718 00:39:06,590 --> 00:39:11,250 Και αυτό γιατί string είναι ένα αστέρι char είναι ένας δείκτης. 719 00:39:11,250 --> 00:39:14,102 Έτσι πρέπει να είναι του ίδιου τύπου. 720 00:39:14,102 --> 00:39:14,595 Ναι; 721 00:39:14,595 --> 00:39:16,074 >> ΚΟΙΝΟ: Δύο ερωτήσεις. 722 00:39:16,074 --> 00:39:21,004 Έτσι ένα, ποια είναι η διαφορά μεταξύ αυτό και GetString εκτός από ένα τύπο 723 00:39:21,004 --> 00:39:22,483 στον κινητήρα χρήστη; 724 00:39:22,483 --> 00:39:25,934 Και τα δύο, είναι να αποθηκεύονται μέσα πρόσφατη μνήμη σας; 725 00:39:25,934 --> 00:39:28,399 Έτσι, όπως, GetString θα είναι [δεν ακούγεται]; 726 00:39:28,399 --> 00:39:31,357 727 00:39:31,357 --> 00:39:33,650 >> DAN: Πού είναι αποθηκευμένα; 728 00:39:33,650 --> 00:39:34,905 Δεν ξέρω πού είναι αποθηκευμένο. 729 00:39:34,905 --> 00:39:40,000 >> ΚΟΙΝΟ: Έτσι, στην πραγματικότητα, ξέρετε πώς κάποια λειτουργούν καλείτε είναι επιχειρήματα 730 00:39:40,000 --> 00:39:42,170 αποθηκεύονται στη στοίβα; 731 00:39:42,170 --> 00:39:46,610 Έτσι argc και argv είναι τα επιχειρήματα για κύρια και βρίσκονται στη στοίβα, ή πραγματικά 732 00:39:46,610 --> 00:39:49,131 ακριβώς πάνω από ό, τι νομίζετε, όπως η έναρξη της στοίβας. 733 00:39:49,131 --> 00:39:53,490 Ποιο ήταν το άλλο μέρος από την ερώτηση; 734 00:39:53,490 --> 00:39:56,821 >> ΚΟΙΝΟ: Έτσι ποια είναι η [δεν ακούγεται]; 735 00:39:56,821 --> 00:40:00,990 >> DAN: Ναι, αυτό είναι απλά ένα διαφορετικό τρόπο να πάρει είσοδο από το χρήστη. 736 00:40:00,990 --> 00:40:06,030 Ελαφρώς πιο αποτελεσματική και αυτό είναι είναι πιο εύχρηστος για σενάρια, γιατί 737 00:40:06,030 --> 00:40:10,070 μπορούν να περάσουν μόνο τα επιχειρήματα με κύρια σας λειτουργία, αντί να χρειάζεται να περιμένουν 738 00:40:10,070 --> 00:40:13,400 για τους χρήστες, αν δεν έχετε καμία χρήστες. 739 00:40:13,400 --> 00:40:16,280 >> ΚΟΙΝΟ: Και ναι, να πάρει χορδές θα είναι [δεν ακούγεται]. 740 00:40:16,280 --> 00:40:17,922 Θα αποθηκεύουν τα πράγματα που χρειάζεστε. 741 00:40:17,922 --> 00:40:18,834 >> DAN: Ναι; 742 00:40:18,834 --> 00:40:21,114 >> ΚΟΙΝΟ: [δεν ακούγεται]; 743 00:40:21,114 --> 00:40:27,545 >> DAN: Ναι, argv 0 περιλαμβάνει πάντα το dot κάθετο της κλήσης λειτουργίας. 744 00:40:27,545 --> 00:40:28,042 Ναι; 745 00:40:28,042 --> 00:40:29,292 >> ΚΟΙΝΟ: [δεν ακούγεται]; 746 00:40:29,292 --> 00:40:33,509 747 00:40:33,509 --> 00:40:37,310 >> DAN: Ναι, κάθε ένα από τα επιχειρήματα είναι έληξε χαρακτήρα NULL επειδή 748 00:40:37,310 --> 00:40:38,310 είναι χορδές. 749 00:40:38,310 --> 00:40:40,892 >> ΚΟΙΝΟ: [δεν ακούγεται]; 750 00:40:40,892 --> 00:40:44,116 >> DAN: Ναι, argv argc είναι ένας δείκτης NULL. 751 00:40:44,116 --> 00:40:45,112 >> ΚΟΙΝΟ: [δεν ακούγεται]; 752 00:40:45,112 --> 00:40:47,104 >> DAN: Ω ναι. 753 00:40:47,104 --> 00:40:48,100 Ναι, συγνώμη. 754 00:40:48,100 --> 00:40:49,594 >> ΚΟΙΝΟ: Έτσι [δεν ακούγεται]; 755 00:40:49,594 --> 00:41:08,518 756 00:41:08,518 --> 00:41:16,340 >> DAN: Έτσι, το ερώτημα είναι αν είχατε το γραμμή εντολών dot κάθετο μια τελεία από 1, 2, 757 00:41:16,340 --> 00:41:20,410 θα ήταν ο αριθμός της γραμμής εντολών επιχειρήματα είναι δύο ή θα είναι τρεις; 758 00:41:20,410 --> 00:41:24,420 759 00:41:24,420 --> 00:41:28,240 >> ΚΟΙΝΟ: Νομίζω ότι δεν πραγματικά έχει σημασία. 760 00:41:28,240 --> 00:41:31,370 Τείνω να πω, αχ, δεν έχετε περάσει οποιαδήποτε επιχειρήματα της γραμμής εντολών, όταν, 761 00:41:31,370 --> 00:41:32,730 Προφανώς, σας κάλεσε τη λειτουργία. 762 00:41:32,730 --> 00:41:37,950 Έχω λοιπόν την τάση να αποκλείουν φωνητικά η λειτουργία από τη γραμμή εντολών 763 00:41:37,950 --> 00:41:40,350 επιχειρήματα, ακόμη κι αν είναι περιλαμβάνονται στο argv. 764 00:41:40,350 --> 00:41:42,600 >> DAN: Αλλά αν ήταν στο test-- 765 00:41:42,600 --> 00:41:46,550 yeah-- και αν πω κάτι όπως argc ισούται με 3, 766 00:41:46,550 --> 00:41:48,512 είστε σε ασφαλή κατάσταση. 767 00:41:48,512 --> 00:41:49,416 Ναι; 768 00:41:49,416 --> 00:41:50,666 >> ΚΟΙΝΟ: [δεν ακούγεται]; 769 00:41:50,666 --> 00:42:00,990 770 00:42:00,990 --> 00:42:09,510 >> DAN: Νομίζω ότι αν αντί για την κλήση αυτή στο argc και κορδόνι παρένθεση argv 771 00:42:09,510 --> 00:42:14,350 αλλά κράτησε τους ίδιους τύπους και απλά καλείται τους κάτι διαφορετικό, όπως ένα 772 00:42:14,350 --> 00:42:16,640 και b, θα εξακολουθεί να λειτουργεί; 773 00:42:16,640 --> 00:42:18,790 Και θα εξακολουθούν να εργάζονται, θα μόνο-- 774 00:42:18,790 --> 00:42:21,520 αντί της χρησιμοποίησης argc-- θέλετε να χρησιμοποιήσετε a και b. 775 00:42:21,520 --> 00:42:24,436 776 00:42:24,436 --> 00:42:25,408 Ναι; 777 00:42:25,408 --> 00:42:26,658 >> ΚΟΙΝΟ: [δεν ακούγεται]; 778 00:42:26,658 --> 00:42:34,642 779 00:42:34,642 --> 00:42:38,850 >> DAN: Έτσι, το ερώτημα είναι GetString είναι πρόκειται να αποθηκεύσετε μνήμη στο σωρό 780 00:42:38,850 --> 00:42:42,280 επειδή GetString είναι char *. 781 00:42:42,280 --> 00:42:47,530 Αποθηκεύει μνήμη στο σωρό, διότι καλεί τώρα malloc στο πραγματικό 782 00:42:47,530 --> 00:42:49,258 εφαρμογή του GetString. 783 00:42:49,258 --> 00:42:53,210 784 00:42:53,210 --> 00:42:55,090 Εντάξει, κινείται. 785 00:42:55,090 --> 00:42:55,950 >> Ασφάλεια. 786 00:42:55,950 --> 00:43:01,090 Έτσι, για να είναι πραγματικά ασφαλές, θα βασίζονται σε καμία μια και θα επιτρέψει σε κανέναν την πρόσβαση σε οποιοδήποτε 787 00:43:01,090 --> 00:43:04,540 των πληροφοριών σας, η οποία είναι ο λόγος ο καθένας χτίζει τις δικές τους μηχανές, 788 00:43:04,540 --> 00:43:09,580 τα δικά τους λειτουργικά συστήματα, όλους τους προγράμματα από το μηδέν, και προφανώς 789 00:43:09,580 --> 00:43:13,410 δεν συνδεθεί με οποιαδήποτε άλλα μηχανήματα μέσω του διαδικτύου. 790 00:43:13,410 --> 00:43:17,350 Έτσι, οι υπολογιστές είναι ανασφαλής. 791 00:43:17,350 --> 00:43:19,200 Είναι πραγματικά είναι. 792 00:43:19,200 --> 00:43:20,940 Πρέπει να εμπιστευόμαστε τους άλλους ανθρώπους. 793 00:43:20,940 --> 00:43:26,500 >> Και η ιδέα της ασφάλειας είναι ότι είστε προσπαθούν να περιορίσουν την ποσότητα του 794 00:43:26,500 --> 00:43:27,540 την εμπιστοσύνη που χρειάζεστε. 795 00:43:27,540 --> 00:43:32,080 Και ένα από τα μέσα για να το κάνεις αυτό είναι μέσω της κρυπτογραφίας. 796 00:43:32,080 --> 00:43:34,950 Η κρυπτογραφία είναι, κατ 'ουσίαν, έχουμε μυστικά. 797 00:43:34,950 --> 00:43:38,880 >> Μερικές φορές πρέπει να περάσουν τα μυστικά μας μαζί με, ας πούμε, το διαδίκτυο ή 798 00:43:38,880 --> 00:43:39,980 άλλα πράγματα. 799 00:43:39,980 --> 00:43:43,180 Και δεν θέλουμε ανθρώπους να γνωρίζουν αυτά τα μυστικά. 800 00:43:43,180 --> 00:43:50,100 Έτσι μπορούμε να κρυπτογραφήσετε τα μυστικά μας σε έναν τρόπο που ελπίζουμε ότι κανείς δεν μπορεί να καταλάβει. 801 00:43:50,100 --> 00:43:51,600 >> Γι 'αυτό και used-- 802 00:43:51,600 --> 00:43:54,340 μέσα από την πορεία αυτής της class-- 803 00:43:54,340 --> 00:44:00,750 πράγματα όπως το Caesar cipher και [Δεν ακούγεται], η οποία είναι τόσο πολύ, πολύ 804 00:44:00,750 --> 00:44:03,200 ανασφαλής τρόπους κρυπτογράφηση πράγματα. 805 00:44:03,200 --> 00:44:07,930 Είναι εύκολο να καταλάβω τι είναι και ποια είναι τα μυστικά σας. 806 00:44:07,930 --> 00:44:12,130 Ο πραγματικός κόσμος χρησιμοποιεί πολύ περισσότερα περίπλοκη συστήματα κρυπτογράφησης. 807 00:44:12,130 --> 00:44:13,880 Και εμείς δεν θα μπει πολύ περισσότερο από αυτό. 808 00:44:13,880 --> 00:44:18,280 809 00:44:18,280 --> 00:44:19,430 >> Εντοπισμού σφαλμάτων. 810 00:44:19,430 --> 00:44:20,785 GDB είναι το καλύτερο. 811 00:44:20,785 --> 00:44:24,014 812 00:44:24,014 --> 00:44:25,810 Πάω να το τονίσω και πάλι. 813 00:44:25,810 --> 00:44:30,920 Χρησιμοποιήστε GDB όλη την ώρα κάθε φορά που έχετε ένα πρόβλημα. 814 00:44:30,920 --> 00:44:36,030 Εντολές που είναι χρήσιμα στην GDB είναι σπάσει, η οποία θα περάσει ούτε μια γραμμή 815 00:44:36,030 --> 00:44:41,330 αριθμό, ένα όνομα συνάρτησης, κατ 'ουσίαν όπου το κωδικό σας θέλετε να σταματήσετε, 816 00:44:41,330 --> 00:44:45,600 και να είναι σε θέση να αναλάβει τον έλεγχο. 817 00:44:45,600 --> 00:44:54,140 >> Εκτύπωση παίρνει μια μεταβλητή και εκτυπώνει ό, τι η μεταβλητή είναι στο ότι 818 00:44:54,140 --> 00:44:55,990 σημείο στην εκτέλεση σας. 819 00:44:55,990 --> 00:45:00,130 Στη συνέχεια κινείται εκτέλεση σας κατά μήκος ένα βήμα. 820 00:45:00,130 --> 00:45:05,050 Και βήμα βήματα μέσα σε μια συνάρτηση σε εκτέλεση σας. 821 00:45:05,050 --> 00:45:10,480 >> Άλλα πράγματα τρέχουν, το οποίο είναι το πώς τρέχετε πραγματικά τον κωδικό σας. 822 00:45:10,480 --> 00:45:16,630 Συνεχίστε να λαμβάνει όλα τα μέτρα που απαιτούνται για να πάρει στο επόμενο σημείο καμπής. 823 00:45:16,630 --> 00:45:18,300 Και υπάρχουν πολλοί, πολλοί άλλοι. 824 00:45:18,300 --> 00:45:19,040 Κοιτάξτε τους επάνω. 825 00:45:19,040 --> 00:45:19,901 Είναι μεγάλη. 826 00:45:19,901 --> 00:45:20,863 Ναι; 827 00:45:20,863 --> 00:45:22,113 >> ΚΟΙΝΟ: [δεν ακούγεται]; 828 00:45:22,113 --> 00:45:26,635 829 00:45:26,635 --> 00:45:28,200 >> DAN: Ναι, το οποίο είναι ένα πρόγραμμα εντοπισμού σφαλμάτων. 830 00:45:28,200 --> 00:45:34,230 Έτσι, ένα πρόγραμμα εντοπισμού σφαλμάτων είναι ένα πρόγραμμα το οποίο σας επιτρέπει να διορθώσετε το πρόγραμμά σας. 831 00:45:34,230 --> 00:45:39,931 Δεν είναι ένα πρόγραμμα που βρίσκει σφάλματα για σας, αν και αυτό θα ήταν μεγάλη. 832 00:45:39,931 --> 00:45:43,020 833 00:45:43,020 --> 00:45:46,040 >> Και το τελευταίο για μένα είναι η αναζήτηση. 834 00:45:46,040 --> 00:45:51,470 Έτσι, τα είδη της αναζήτησης που μιλήσαμε περίπου σε αυτή την κατηγορία είναι γραμμική αναζήτηση, 835 00:45:51,470 --> 00:45:55,960 το οποίο είναι ακριβώς ότι ψάχνετε μέσα από κάθε στοιχείο του χώρου αναζήτησης, ένας 836 00:45:55,960 --> 00:46:00,410 στοιχείο κάθε φορά, μέχρι να βρείτε αυτό που ψάχνετε ή μέχρι να φτάσετε 837 00:46:00,410 --> 00:46:03,350 το τέλος του χώρου αναζήτησης στην οποία σημείο λέτε ότι δεν μπορούσε να βρει 838 00:46:03,350 --> 00:46:06,360 το στοιχείο που ψάχνατε. 839 00:46:06,360 --> 00:46:13,450 Και αυτό παίρνει στην καλύτερη σταθερό χρόνο, η οποία είναι 0 από 1 και στη χειρότερη γραμμική 840 00:46:13,450 --> 00:46:16,070 φορά, η οποία είναι 0 από n. 841 00:46:16,070 --> 00:46:19,250 >> Δυαδική αναζήτηση, η οποία χρειάζεται άθλιες στοιχεία. 842 00:46:19,250 --> 00:46:24,230 Μπορείτε να πάτε στο κέντρο των στοιχείων σας, δείτε εάν το στοιχείο που αναζητάτε 843 00:46:24,230 --> 00:46:30,120 είναι μεγαλύτερο ή μικρότερο από το στοιχείο ότι είστε στη μέση. 844 00:46:30,120 --> 00:46:36,510 Θα είναι μεγαλύτερο, λέτε ότι το κάτω μέρος της αναζήτησής σας χώρο είναι σας 845 00:46:36,510 --> 00:46:41,550 τρέχουσα θέση, στη μέση, και την επανεκκίνηση της διαδικασίας. 846 00:46:41,550 --> 00:46:46,150 Αν είναι μικρότερο, θα δούμε να πω ότι στο-- ναι, τι συμβαίνει; 847 00:46:46,150 --> 00:46:47,400 >> ΚΟΙΝΟ: [δεν ακούγεται]; 848 00:46:47,400 --> 00:46:51,000 849 00:46:51,000 --> 00:46:54,260 >> DAN: Ναι. 850 00:46:54,260 --> 00:46:58,360 Κάθε είδος του είδους που έχει διδαχθεί σε η κατηγορία είναι δίκαιο παιχνίδι για τη δοκιμή. 851 00:46:58,360 --> 00:47:01,504 852 00:47:01,504 --> 00:47:04,920 >> [Γέλια] 853 00:47:04,920 --> 00:47:10,260 >> DAN: Και το γεγονός ότι δεν είχατε να το κάνει για ένα σύνολο το πρόβλημα, είναι δίκαιο 854 00:47:10,260 --> 00:47:12,420 παιχνίδι για τη δοκιμή. 855 00:47:12,420 --> 00:47:15,186 >> ΚΟΙΝΟ: Μπορούμε να πάμε πέρα ​​από το πώς να-- 856 00:47:15,186 --> 00:47:17,052 >> DAN: Θα περάσει πάνω. 857 00:47:17,052 --> 00:47:20,496 >> ΟΜΙΛΗΤΗΣ 2: Το πραγματικό κώδικα για [Δεν ακούγεται] είναι σε study.cs50.net. 858 00:47:20,496 --> 00:47:25,910 859 00:47:25,910 --> 00:47:32,680 Έτσι, αν κοιτάξουμε το πρόβλημα πρακτική στη σελίδα συγχώνευση είδος της 860 00:47:32,680 --> 00:47:35,880 study.cs50.net, υπάρχει ο κώδικας για την εφαρμογή συγχώνευση ταξινόμησης. 861 00:47:35,880 --> 00:47:38,550 Έτσι, δεν έχετε να εφαρμόσουν τον εαυτό σας απόψε. 862 00:47:38,550 --> 00:47:42,090 Αλλά βεβαιωθείτε ότι έχετε κατανοήσει μάλλον ό, τι ακριβώς απομνημόνευση. 863 00:47:42,090 --> 00:47:45,035 >> ΚΟΙΝΟ: [δεν ακούγεται]; 864 00:47:45,035 --> 00:47:49,720 >> ΟΜΙΛΗΤΗΣ 2: Η σελίδα συγχώνευση ταξινόμησης για study.cs50.net, υπάρχει μια πρακτική 865 00:47:49,720 --> 00:47:53,570 πρόβλημα που, αν κάνετε κλικ μέσα από το πρόβλημα, στο τέλος υπάρχει ένα 866 00:47:53,570 --> 00:47:56,280 λύση, η οποία είναι η συγχώνευση εφαρμογή ταξινόμησης. 867 00:47:56,280 --> 00:47:58,510 Αλλά βεβαιωθείτε ότι έχετε κατανοήσει και όχι μόνο αυτό απομνημόνευση 868 00:47:58,510 --> 00:47:59,760 ή αντιγράφοντας τα κάτω. 869 00:47:59,760 --> 00:48:02,870 870 00:48:02,870 --> 00:48:06,340 >> ΚΟΙΝΟ: Και μια απολύτως έγκυρη πρόβλημα για τις εξετάσεις θα είναι 871 00:48:06,340 --> 00:48:07,990 κάτι σαν εδώ είναι μια λίστα. 872 00:48:07,990 --> 00:48:12,100 Τι σημαίνει αυτή η λίστα μοιάζει μετά ένα βήμα από τις επιλογές ταξινόμησης ή 873 00:48:12,100 --> 00:48:13,330 ταξινόμηση με εισαγωγή ή οτιδήποτε άλλο. 874 00:48:13,330 --> 00:48:14,940 Μια πλήρης επανάληψη του καταλόγου. 875 00:48:14,940 --> 00:48:18,530 Έτσι, ακόμη και αν δεν καταλήξετε να χρειάζεται να κώδικα για αυτό, θα πρέπει να το καταλάβουν 876 00:48:18,530 --> 00:48:20,440 αρκεί να ξέρετε πώς πρόκειται να τροποποιηθεί αυτό το array. 877 00:48:20,440 --> 00:48:24,144 878 00:48:24,144 --> 00:48:25,394 >> DAN: Αυτό είναι για μένα. 879 00:48:25,394 --> 00:48:30,604 880 00:48:30,604 --> 00:48:32,588 >> [Χειροκρότημα] 881 00:48:32,588 --> 00:49:06,316 882 00:49:06,316 --> 00:49:07,410 >> LUCAS: Γεια σε όλους. 883 00:49:07,410 --> 00:49:08,390 Το όνομά μου είναι Lucas. 884 00:49:08,390 --> 00:49:16,840 Πάω να μιλήσω για αναδρομή, όλα τα είδη που έχουμε μάθει, και 885 00:49:16,840 --> 00:49:18,050 λίγο από όλους τους δείκτες. 886 00:49:18,050 --> 00:49:18,740 Εντάξει; 887 00:49:18,740 --> 00:49:20,340 Έτσι, πρώτα απ 'όλα, αναδρομή. 888 00:49:20,340 --> 00:49:22,951 Τι σημαίνει να πούμε ότι μια λειτουργία έχει επαναληπτικό; 889 00:49:22,951 --> 00:49:24,675 >> ΚΟΙΝΟ: το ίδιο κλήσεις. 890 00:49:24,675 --> 00:49:26,500 >> LUCAS: OK, καλεί τον εαυτό της, ναι. 891 00:49:26,500 --> 00:49:27,700 Έτσι, όπως αυτή την εικόνα, για παράδειγμα. 892 00:49:27,700 --> 00:49:30,280 Είναι σαν την εικόνα μέσα από μια εικόνα και ούτω καθεξής. 893 00:49:30,280 --> 00:49:35,740 Έτσι, για παράδειγμα, μπορείτε να have-- ως Dan που μιλούσε για δυαδική αναζήτηση. 894 00:49:35,740 --> 00:49:41,840 Ένας τρόπος με τον οποίο είναι δυαδική αναζήτηση αναδρομικές είναι το γεγονός ότι είστε 895 00:49:41,840 --> 00:49:43,130 προσπαθώντας να βρει έναν αριθμό. 896 00:49:43,130 --> 00:49:44,250 Έτσι, πηγαίνετε στη μέση. 897 00:49:44,250 --> 00:49:47,130 Και τότε θα ελέγξει αν οι αριθμοί δεν στην αριστερή και στη δεξιά. 898 00:49:47,130 --> 00:49:49,650 >> Και στη συνέχεια, αν μπορείτε να μάθετε ο αριθμός είναι πρόκειται να είναι στα αριστερά, είναι το ίδιο 899 00:49:49,650 --> 00:49:53,340 πράγμα όπως κάνει και πάλι την έρευνα, αλλά ακριβώς στο αριστερό μέρος της λίστας. 900 00:49:53,340 --> 00:49:57,350 Έτσι, αυτό είναι το πώς ακούγεται σαν να είναι αναδρομική. 901 00:49:57,350 --> 00:50:01,870 Έτσι, γι 'αυτό εσείς έχετε αναδρομικές λύση για τη συγχώνευση ταξινόμησης. 902 00:50:01,870 --> 00:50:04,270 >> Εντάξει, τόσο εδώ είναι ένα παράδειγμα. 903 00:50:04,270 --> 00:50:07,280 Ας πούμε ότι θέλω να επιλέγουν όλοι οι αριθμοί από 1 έως n. 904 00:50:07,280 --> 00:50:13,790 Μπορώ να συνειδητοποιήσουμε ότι το άθροισμα των n αριθμός n είναι συν η πλην 1 έως 1. 905 00:50:13,790 --> 00:50:17,810 Στη συνέχεια, όμως, αν κοιτάξουμε n μείον 1 συν n μείον 2 συν 1, που είναι η ίδια 906 00:50:17,810 --> 00:50:20,680 πράγμα ως αθροίζοντας τους αριθμούς έως n μείον 1. 907 00:50:20,680 --> 00:50:25,890 Έτσι μπορώ να πω ότι το ποσό το ποσό του ενός ισούται με n συν το άθροισμα των n μείον 1. 908 00:50:25,890 --> 00:50:28,010 Μήπως αυτό έχει νόημα; 909 00:50:28,010 --> 00:50:32,630 >> Και εγώ, επίσης, θα έχουν κάτι άλλο ονομάζεται η περίπτωση βάση, η οποία είναι ότι 910 00:50:32,630 --> 00:50:37,440 το άθροισμα των αριθμών μέχρι στο μηδέν θα είναι μηδενική. 911 00:50:37,440 --> 00:50:42,770 Έτσι, μόλις παίρνω τον αριθμό μηδέν, θα σταματήσει την καταμέτρηση. 912 00:50:42,770 --> 00:50:45,330 Μήπως αυτό έχει νόημα; 913 00:50:45,330 --> 00:50:48,120 >> Έτσι, εδώ είναι ένα παράδειγμα του πώς Μπορώ να εφαρμόσουν αυτό. 914 00:50:48,120 --> 00:50:49,860 Έτσι, δεν έχω αυτή τη λειτουργία σε ορισμένες. 915 00:50:49,860 --> 00:50:51,700 Αυτό παίρνει έναν ακέραιο n. 916 00:50:51,700 --> 00:50:56,300 Εδώ, λοιπόν, ελέγξτε πρώτα αν το n είναι μικρότερο ή ίσο με μηδέν. 917 00:50:56,300 --> 00:51:00,310 Έτσι, αν είναι μικρότερο ή ίσο με το μηδέν, I επιστρέψει το μηδέν, η οποία είναι βασική μας υπόθεση. 918 00:51:00,310 --> 00:51:05,690 Διαφορετικά, μπορώ να επιστρέψω μόνο n συν το άθροισμα των αριθμών από 919 00:51:05,690 --> 00:51:07,190 ένα έως n μείον ένα. 920 00:51:07,190 --> 00:51:09,360 Νόημα; 921 00:51:09,360 --> 00:51:10,100 OK. 922 00:51:10,100 --> 00:51:11,610 >> Έτσι, εδώ είναι ό, τι μοιάζει. 923 00:51:11,610 --> 00:51:15,260 Έχετε άθροισμα των 2 ίσον 2 συν το ποσό των 1. 924 00:51:15,260 --> 00:51:18,930 Και μερικά από 1 είναι 1 συν το άθροισμα των 0, η οποία είναι 0. 925 00:51:18,930 --> 00:51:20,216 Νόημα; 926 00:51:20,216 --> 00:51:25,342 Έτσι, αν κοιτάξουμε τη στοίβα σας πρόγραμμα, αυτό είναι ό, τι μοιάζει. 927 00:51:25,342 --> 00:51:26,820 >> Πρώτον, έχουμε την κύρια λειτουργία. 928 00:51:26,820 --> 00:51:30,320 Και στη συνέχεια η κύρια λειτουργία που ονομάζεται άθροισμα 2. 929 00:51:30,320 --> 00:51:36,690 Και στη συνέχεια, ποσό 2 πρόκειται να πει, OH, ποσό 2 ισούται με 2 συν το ποσό του ενός. 930 00:51:36,690 --> 00:51:39,460 Γι 'αυτό προσθέστε άθροισμα των 1 στη στοίβα. 931 00:51:39,460 --> 00:51:43,860 Και το άθροισμα των 1 πρόκειται να καλέσει άθροισμα των 0, η οποία είναι, επίσης, θα πρέπει να προστεθούν 932 00:51:43,860 --> 00:51:44,630 στη στοίβα. 933 00:51:44,630 --> 00:51:49,240 Και, στη συνέχεια, κάθε μία από αυτές εκείνες που είναι πάνω από την άλλη πρέπει να επιστρέψει 934 00:51:49,240 --> 00:51:52,020 πριν από τα άλλα αυτοί να συνεχίσω. 935 00:51:52,020 --> 00:51:56,240 >> Έτσι, για παράδειγμα, εδώ, άθροισμα από 0, πρώτη, πρόκειται να επιστρέψει 0. 936 00:51:56,240 --> 00:51:58,320 Και στη συνέχεια, επιλέξτε ποσό των 1. 937 00:51:58,320 --> 00:52:00,850 Στη συνέχεια άθροισμα των 1 πρόκειται να επιστροφή 1 με το άθροισμα του 2. 938 00:52:00,850 --> 00:52:03,900 Και τελικά, το ποσό των 2 θα για να επιστρέψετε στο κύριο 3. 939 00:52:03,900 --> 00:52:05,320 Μήπως αυτό έχει νόημα; 940 00:52:05,320 --> 00:52:09,496 >> Είναι πολύ σημαντικό να κατανοήσουμε πώς η στοίβα εργάζεται και να προσπαθήσουμε να 941 00:52:09,496 --> 00:52:11,980 να δούμε αν έχει νόημα. 942 00:52:11,980 --> 00:52:13,260 Εντάξει, έτσι η διαλογή. 943 00:52:13,260 --> 00:52:16,170 Έτσι, γιατί είναι σημαντικό διαλογή, πρώτα απ 'όλα; 944 00:52:16,170 --> 00:52:18,260 Γιατί πρέπει να μας νοιάζει; 945 00:52:18,260 --> 00:52:20,310 Όποιος; 946 00:52:20,310 --> 00:52:20,695 Δώσε μου ένα παράδειγμα; 947 00:52:20,695 --> 00:52:21,040 Ναι; 948 00:52:21,040 --> 00:52:22,968 >> ΚΟΙΝΟ: [δεν ακούγεται]. 949 00:52:22,968 --> 00:52:24,700 >> LUCAS: Ναι, εντάξει. 950 00:52:24,700 --> 00:52:26,090 Έτσι, μπορείτε να ψάξετε πιο αποτελεσματικά. 951 00:52:26,090 --> 00:52:28,580 Αυτός είναι ένας καλός τρόπος. 952 00:52:28,580 --> 00:52:32,462 Έτσι, για παράδειγμα, έχουμε πολλά τα πράγματα, στην πραγματικότητα, στη ζωή μας, ότι 953 00:52:32,462 --> 00:52:32,920 κατατάσσονται. 954 00:52:32,920 --> 00:52:34,830 Για παράδειγμα, λεξικά. 955 00:52:34,830 --> 00:52:39,210 >> Είναι πολύ σημαντικό να έχουν όλα τα λέξεις σε κάποιο είδος της διαδικασίας που θα 956 00:52:39,210 --> 00:52:41,970 μπορούν να έχουν πρόσβαση εύκολα. 957 00:52:41,970 --> 00:52:43,280 Έτσι, αυτό είναι ό, τι έλεγε. 958 00:52:43,280 --> 00:52:45,530 Μπορείτε να ψάξετε πιο αποτελεσματικά. 959 00:52:45,530 --> 00:52:48,740 Σκεφτείτε πόσο δύσκολο θα ήταν να έχουμε ένα λεξικό στο οποίο οι λέξεις είναι σε 960 00:52:48,740 --> 00:52:49,500 τυχαία σειρά. 961 00:52:49,500 --> 00:52:53,120 Θα πρέπει να δούμε, λίγο πολύ, κάθε λέξη, μέχρι να βρείτε το 962 00:52:53,120 --> 00:52:54,720 λέξη που ψάχνετε. 963 00:52:54,720 --> 00:52:58,710 >> Αν χρησιμοποιείτε το Facebook, επίσης, όταν ψάχνετε σε φίλους σας, είστε 964 00:52:58,710 --> 00:53:03,540 Θα δείτε ότι το Facebook που σας πιο κοντά ο φίλος είναι πάνω από αυτές 965 00:53:03,540 --> 00:53:05,470 ότι δεν μιλάμε για τόσο πολύ. 966 00:53:05,470 --> 00:53:08,080 Αν πάτε σε όλη τη διαδρομή προς τα κάτω της λίστα των φίλων σας, θα πάμε να δούμε 967 00:53:08,080 --> 00:53:11,250 ανθρώπους που ίσως δεν χρειάζεται καν να θυμάστε ότι είστε φίλοι με. 968 00:53:11,250 --> 00:53:14,590 Και αυτό γιατί το Facebook είδη τους φίλους σας με βάση τον τρόπο 969 00:53:14,590 --> 00:53:16,472 κοντά βρίσκεστε σε αυτά. 970 00:53:16,472 --> 00:53:17,930 >> Έτσι, την οργάνωση των δεδομένων. 971 00:53:17,930 --> 00:53:18,450 Επίσης Pokemon. 972 00:53:18,450 --> 00:53:21,400 Έτσι, θα δείτε ότι όλα τα Pokemons έχουν αριθμούς. 973 00:53:21,400 --> 00:53:27,210 Και αυτό είναι σαν μια εύκολη τρόπος πρόσβασης στα δεδομένα. 974 00:53:27,210 --> 00:53:29,050 >> ΚΟΙΝΟ: Πρόσβαση Pokemon. 975 00:53:29,050 --> 00:53:29,890 >> LUCAS: Ναι. 976 00:53:29,890 --> 00:53:32,395 >> ΚΟΙΝΟ: [δεν ακούγεται]. 977 00:53:32,395 --> 00:53:33,460 >> LUCAS: Ναι. 978 00:53:33,460 --> 00:53:35,140 Εντάξει, έτσι το είδος επιλογής. 979 00:53:35,140 --> 00:53:41,610 Είδος επιλογής πρόκειται να επιλέξετε το μικρότερη αδιαχώριστα αξία του καταλόγου κάθε 980 00:53:41,610 --> 00:53:43,300 φορά σε κάθε επανάληψη. 981 00:53:43,300 --> 00:53:46,800 Είναι κάτι σαν το είδος που σας κάνει στο κεφάλι σας όταν προσπαθείτε να 982 00:53:46,800 --> 00:53:48,430 ταξινομήσετε μια λίστα στο χέρι. 983 00:53:48,430 --> 00:53:51,990 >> Βασικά, το μόνο που έχετε να κάνετε είναι να δούμε για το μικρότερο αριθμό. 984 00:53:51,990 --> 00:53:54,280 Μπορείτε να το βάλετε στην ταξινομημένη λίστα. 985 00:53:54,280 --> 00:53:56,230 Και τότε θα δούμε για το αμέσως μικρότερο αριθμό. 986 00:53:56,230 --> 00:54:00,080 Και τότε θα συνεχίσουμε να κάνουμε ότι και ούτω καθεξής. 987 00:54:00,080 --> 00:54:04,600 >> Έτσι, το είδος επιλογής είναι βασικά σας επιλέγετε κάθε φορά το μικρότερο 988 00:54:04,600 --> 00:54:05,750 αδιαχώριστα αξία. 989 00:54:05,750 --> 00:54:10,840 Βάλτε στο τέλος του ταξινομούνται μέρος της λίστας. 990 00:54:10,840 --> 00:54:12,370 Και να κρατήσει το κάνουμε αυτό. 991 00:54:12,370 --> 00:54:15,890 Έτσι, ας δούμε γρήγορα τι Αυτό μοιάζει. 992 00:54:15,890 --> 00:54:19,340 Έτσι, εδώ είναι η ταξινόμηση και μικτές λίστα. 993 00:54:19,340 --> 00:54:23,350 >> Έτσι, για την ταξινόμηση της λίστας, είναι αρχικά κενή. 994 00:54:23,350 --> 00:54:26,760 Και στη συνέχεια, Πάω να επιλέξετε το μικρότερο αριθμό εδώ, η οποία είναι 2. 995 00:54:26,760 --> 00:54:30,650 Έτσι παίρνω τον αριθμό 2 και έβαλα στο μπροστινό μέρος της λίστας. 996 00:54:30,650 --> 00:54:34,910 Και τότε θα δούμε για την επόμενη μικρότερη στοιχείο, η οποία είναι 3. 997 00:54:34,910 --> 00:54:37,050 Έτσι έβαλα στο τέλος από την ταξινομημένη λίστα. 998 00:54:37,050 --> 00:54:38,140 Και τότε θα συνεχίσω να το κάνω αυτό. 999 00:54:38,140 --> 00:54:40,040 Θεωρώ 4 και το βάζουμε στο τέλος. 1000 00:54:40,040 --> 00:54:41,360 Βρείτε 5 και το βάζουμε στο τέλος. 1001 00:54:41,360 --> 00:54:44,830 >> Και κοιτάξτε πώς όλες εκείνες τις φορές που Λέω να το βάλετε στο τέλος είναι, 1002 00:54:44,830 --> 00:54:46,850 βασικά, swapping δύο τιμές. 1003 00:54:46,850 --> 00:54:48,100 Εντάξει; 1004 00:54:48,100 --> 00:54:50,140 1005 00:54:50,140 --> 00:54:52,825 Και τότε η τελευταία, απλά έχουμε ένα ακόμη στοιχείο. 1006 00:54:52,825 --> 00:54:55,870 Έτσι είναι ήδη ταξινομημένα. 1007 00:54:55,870 --> 00:54:57,800 >> Εντάξει, έτσι το είδος εισαγωγής. 1008 00:54:57,800 --> 00:55:03,180 Εισαγωγή είδος που πρόκειται να έχουν, επίσης, αυτό το πράγμα ότι έχει μια ταξινόμηση και 1009 00:55:03,180 --> 00:55:04,690 ένα μη ταξινομημένα λίστα. 1010 00:55:04,690 --> 00:55:14,540 Το μόνο πράγμα που είναι ότι κάθε φορά που μπορείτε να προσθέσετε ένα στοιχείο για την ταξινόμηση 1011 00:55:14,540 --> 00:55:18,170 λίστα, μπορείτε να επιλέξετε μόνο το στοιχείο ότι Είναι μπροστά από το αδιαχώριστα λίστα. 1012 00:55:18,170 --> 00:55:20,880 Και τότε θα πάμε να βρούμε τι θέση θα πρέπει να είναι στην ταξινομημένη 1013 00:55:20,880 --> 00:55:22,300 μέρος της λίστας. 1014 00:55:22,300 --> 00:55:25,840 >> Ας δούμε τι είναι αυτό τόσο αυτό έχει περισσότερο νόημα. 1015 00:55:25,840 --> 00:55:29,360 Αρχικά, λοιπόν, για παράδειγμα, προσπαθώ για να εισάγετε τον αριθμό τρία στο 1016 00:55:29,360 --> 00:55:30,680 ταξινομημένη μέρος της λίστας. 1017 00:55:30,680 --> 00:55:31,800 Έτσι, ο κατάλογος δεν έχει τίποτα. 1018 00:55:31,800 --> 00:55:34,160 Έτσι, μπορώ να βάλω μόνο τον αριθμό 3. 1019 00:55:34,160 --> 00:55:37,480 >> Τώρα, θέλω να προσθέσω τον αριθμό 5 στο η ταξινομημένη μέρος της λίστας. 1020 00:55:37,480 --> 00:55:38,900 Έτσι κοιτάζω τον αριθμό 5. 1021 00:55:38,900 --> 00:55:40,450 Θα παρατηρήσετε ότι είναι μεγαλύτερη από 3. 1022 00:55:40,450 --> 00:55:41,980 Έτσι ξέρω ότι πρέπει να είναι μετά από 3. 1023 00:55:41,980 --> 00:55:44,100 Έτσι έβαλα 3 και 5. 1024 00:55:44,100 --> 00:55:45,940 >> Στη συνέχεια, θέλω να εισάγετε τον αριθμό 2. 1025 00:55:45,940 --> 00:55:51,630 Θα παρατηρήσετε ότι ο αριθμός 2 είναι στην πραγματικότητα διαρκούν τότε τόσο 3 και 5. 1026 00:55:51,630 --> 00:55:54,580 Γι 'αυτό και πραγματικά πρέπει να βάλετε όλα τα τρόπο στην αρχή της λίστας. 1027 00:55:54,580 --> 00:55:59,030 Έτσι έχω να, το είδος του, να επιρρίψουν όλα τα στοιχεία στην ταξινομημένη λίστα ώστε να μπορώ να 1028 00:55:59,030 --> 00:56:01,970 κάνει χώρο για τον αριθμό 2. 1029 00:56:01,970 --> 00:56:03,160 >> Τότε θα δείτε τον αριθμό 6. 1030 00:56:03,160 --> 00:56:05,450 Βλέπω ότι θα πρέπει να είναι μετά από 5. 1031 00:56:05,450 --> 00:56:06,240 Έτσι έβαλα εκεί. 1032 00:56:06,240 --> 00:56:07,965 Και τέλος, κοιτάζω τον αριθμό 4. 1033 00:56:07,965 --> 00:56:11,030 Και παρατηρώ ότι πρέπει να να είναι μεταξύ 3 και 5. 1034 00:56:11,030 --> 00:56:14,870 Και τότε έβαλα εκεί και μετατόπιση όλα τα άλλα στοιχεία. 1035 00:56:14,870 --> 00:56:16,120 Νόημα; 1036 00:56:16,120 --> 00:56:17,880 1037 00:56:17,880 --> 00:56:19,150 >> Bubble Sort. 1038 00:56:19,150 --> 00:56:25,730 Έτσι bubble sort είναι βασικά αυτό που είσαι πρόκειται να do-- καλούμε φούσκα 1039 00:56:25,730 --> 00:56:30,113 είδος γιατί θα πάτε μέσω της list-- Είναι πραγματικά καλύτερα αν απλά δείχνουν 1040 00:56:30,113 --> 00:56:32,300 Σας αρέσει αυτό-- 1041 00:56:32,300 --> 00:56:35,030 και θα πάμε για να συγκρίνετε γειτονικούς αριθμούς. 1042 00:56:35,030 --> 00:56:38,410 Και θα πάμε να ανταλλάξουν τους θέσεις αν δεν είστε 1043 00:56:38,410 --> 00:56:39,190 με τη σωστή σειρά. 1044 00:56:39,190 --> 00:56:42,570 >> Έτσι, βασικά, αυτό που πρόκειται να συμβεί είναι εδώ, για παράδειγμα, 1045 00:56:42,570 --> 00:56:44,160 έχετε 8 και 6. 1046 00:56:44,160 --> 00:56:47,270 Γνωρίζετε ότι η σειρά ταξινόμησης θα στην πραγματικότητα είναι 6 και 5, δεξιά; 1047 00:56:47,270 --> 00:56:49,540 Έτσι θα πάμε για να ανταλλάξουν τις παραγγελίες. 1048 00:56:49,540 --> 00:56:51,370 Τότε βλέπω 8 και 4 εδώ. 1049 00:56:51,370 --> 00:56:52,250 Και να κάνω το ίδιο πράγμα. 1050 00:56:52,250 --> 00:56:53,400 Θα ανταλλάξουν και πάλι. 1051 00:56:53,400 --> 00:56:55,070 Και, τέλος, 2 και 8. 1052 00:56:55,070 --> 00:56:56,670 Τους ανταλλάξουν επίσης. 1053 00:56:56,670 --> 00:57:01,690 >> Αυτό λέγεται Bubble Sort γιατί μετά καθεμία από αυτές τις επαναλήψεις, πράγματι, 1054 00:57:01,690 --> 00:57:05,910 ο μεγαλύτερος αριθμός στη λίστα παίρνει όλα ο τρόπος στο τέλος της λίστας. 1055 00:57:05,910 --> 00:57:06,940 Μήπως αυτό έχει νόημα; 1056 00:57:06,940 --> 00:57:11,880 Επειδή κρατά εναλλαγή αυτή και να κινείται προς τα δεξιά. 1057 00:57:11,880 --> 00:57:14,440 >> Εντάξει, έτσι αυτό είναι η δεύτερη επανάληψη. 1058 00:57:14,440 --> 00:57:17,200 Θα ήταν το ίδιο πράγμα. 1059 00:57:17,200 --> 00:57:20,190 Θα κάνω μια συμφωνία ανταλλαγής και τότε το τελευταίο. 1060 00:57:20,190 --> 00:57:23,290 I ότι δεν υπάρχουν swaps και η λίστα είναι ταξινομημένη. 1061 00:57:23,290 --> 00:57:27,460 Έτσι, σε Bubble Sort, εμείς ουσιαστικά να κρατήσει διέρχεται από τη λίστα και εναλλαγή 1062 00:57:27,460 --> 00:57:32,310 τα πράγματα μέχρι να παρατηρήσετε ότι δεν έκανα τυχόν ανταλλαγές κάνει ότι επανάληψη, η οποία 1063 00:57:32,310 --> 00:57:34,270 σημαίνει ότι η λίστα έχει ήδη ταξινομηθεί. 1064 00:57:34,270 --> 00:57:35,520 Νόημα; 1065 00:57:35,520 --> 00:57:38,400 1066 00:57:38,400 --> 00:57:40,870 >> Ας μιλήσουμε λίγο περίπου χρόνο λειτουργίας. 1067 00:57:40,870 --> 00:57:45,165 Έτσι εσείς παιδιά θυμάστε Big O, Omega, και Theta; 1068 00:57:45,165 --> 00:57:49,290 1069 00:57:49,290 --> 00:57:50,990 Ναι; 1070 00:57:50,990 --> 00:57:53,070 Εντάξει, τι είναι Big O, πρώτα απ 'όλα; 1071 00:57:53,070 --> 00:57:54,315 >> ΚΟΙΝΟ: [δεν ακούγεται]. 1072 00:57:54,315 --> 00:57:59,070 >> LUCAS: Ναι, αυτό λέγεται χειρότερη περίπτωση εκτέλεσης, η οποία απλά σημαίνει ότι είναι 1073 00:57:59,070 --> 00:58:03,470 πόσο θα περιμένουμε το πρόγραμμα να αναλάβει να τρέξει. 1074 00:58:03,470 --> 00:58:04,910 Όπως, όσον αφορά of-- 1075 00:58:04,910 --> 00:58:06,660 σε αυτό το case-- n. 1076 00:58:06,660 --> 00:58:09,150 Ο αριθμός των στοιχείων στη κατάλογος, στη χειρότερη περίπτωση. 1077 00:58:09,150 --> 00:58:12,520 Όπως, στη χειρότερη δυνατή περίπτωση. 1078 00:58:12,520 --> 00:58:17,100 >> Έτσι, για Bubble Sort, για παράδειγμα, έχουμε Big O ν πλατεία. 1079 00:58:17,100 --> 00:58:20,580 Γιατί έχουμε αυτό; 1080 00:58:20,580 --> 00:58:24,716 Γιατί είναι Bubble Sort Big πλατεία O n; 1081 00:58:24,716 --> 00:58:27,614 >> ΚΟΙΝΟ: [δεν ακούγεται]. 1082 00:58:27,614 --> 00:58:35,670 >> LUCAS: Ναι, έτσι η χειρότερη περίπτωση θα είναι ότι θα πρέπει να κάνουμε n επαναλήψεις. 1083 00:58:35,670 --> 00:58:39,260 Έτσι κάθε μία από τις επαναλήψεις πρόκειται να φέρει το μεγαλύτερο στοιχείο στο τέλος 1084 00:58:39,260 --> 00:58:40,290 του καταλόγου. 1085 00:58:40,290 --> 00:58:44,230 Έτσι, η χειρότερη περίπτωση είναι ότι έχω να κάνει αυτό το πράγμα n φορές. 1086 00:58:44,230 --> 00:58:48,550 Και για κάθε μία από αυτές τις φορές, έχω να κάνει n swaps, γιατί έχω να συγκρίνετε 1087 00:58:48,550 --> 00:58:49,870 κάθε δύο στοιχεία. 1088 00:58:49,870 --> 00:58:53,730 Έτσι, γι 'αυτό είναι n τετράγωνο επειδή είναι n n φορές. 1089 00:58:53,730 --> 00:59:00,120 >> Στη συνέχεια, η επιλογή του είδους είναι επίσης η πλατεία επειδή, για κάθε επανάληψη, έχω να 1090 00:59:00,120 --> 00:59:02,650 εξετάσουμε κάθε στοιχείο στη λίστα. 1091 00:59:02,650 --> 00:59:04,980 Και στη συνέχεια να βρει το μικρότερο, πράγμα που σημαίνει ότι πρέπει να 1092 00:59:04,980 --> 00:59:06,130 κοιτάξετε μέσα από n στοιχεία. 1093 00:59:06,130 --> 00:59:11,750 Και έχω να κάνω ότι n φορές, επειδή Θα πρέπει να επιλέξετε όλα τα n στοιχεία. 1094 00:59:11,750 --> 00:59:18,273 >> Μια τέτοια εισαγωγή είναι επίσης η πλατεία επειδή το χειρότερο σενάριο θα 1095 00:59:18,273 --> 00:59:20,950 να, ένα, έχω να εισάγετε n αριθμών, σωστά; 1096 00:59:20,950 --> 00:59:22,765 Γι 'αυτό και ήδη γνωρίζουμε ότι θα πάω να έχουν n επαναλήψεις. 1097 00:59:22,765 --> 00:59:25,466 1098 00:59:25,466 --> 00:59:29,840 Αλλά για κάθε έναν από αυτούς τους αριθμούς, αν είχα για να δούμε όλους τους αριθμούς σε 1099 00:59:29,840 --> 00:59:34,380 η ταξινομημένη λίστα και το βάζουμε σε όλη τη διαδρομή στο μπροστινό μέρος, που θα είναι η πλατεία 1100 00:59:34,380 --> 00:59:36,230 γιατί θα είναι n n φορές και πάλι. 1101 00:59:36,230 --> 00:59:38,280 Νόημα; 1102 00:59:38,280 --> 00:59:41,512 Τι γίνεται με το ωμέγα; 1103 00:59:41,512 --> 00:59:42,886 >> ΚΟΙΝΟ: [δεν ακούγεται]. 1104 00:59:42,886 --> 00:59:44,620 >> LUCAS: Είναι το καλύτερο σενάριο. 1105 00:59:44,620 --> 00:59:48,810 Έτσι είναι όπως, σε πολλές φορές για διαλογή, το καλύτερο σενάριο είναι 1106 00:59:48,810 --> 00:59:50,660 όταν η λίστα έχει ήδη ταξινομηθεί. 1107 00:59:50,660 --> 00:59:52,670 Έτσι, δεν έχετε πραγματικά να κάνει τίποτα. 1108 00:59:52,670 --> 00:59:56,290 Bubble Sort έχει την καλύτερη σενάριο του n. 1109 00:59:56,290 --> 00:59:58,820 Μήπως εσείς ξέρετε γιατί; 1110 00:59:58,820 --> 01:00:00,620 >> ΚΟΙΝΟ: [δεν ακούγεται]. 1111 01:00:00,620 --> 01:00:05,640 >> LUCAS: Ναι, αν μπορείτε να παρακολουθείτε αν σιτηρέσιο των δεδομένων είχε κανένα swaps ή 1112 01:00:05,640 --> 01:00:10,533 όχι, αν έχετε κάτι που να αληθές αν υπήρχε μια επανάληψη, εάν ο 1113 01:00:10,533 --> 01:00:15,140 κατάλογος έχει ήδη ταξινομηθεί, ουσιαστικά, τι πρόκειται να συμβεί είναι Πάω να 1114 01:00:15,140 --> 01:00:17,890 προσπαθήστε να ανταλλάξουν κάθε δύο γειτονικών στοιχείων. 1115 01:00:17,890 --> 01:00:19,920 Πάω να δω ότι δεν υπάρχουν ανταλλαγές. 1116 01:00:19,920 --> 01:00:21,230 Και εγώ μόλις επιστρέψει αμέσως. 1117 01:00:21,230 --> 01:00:24,240 >> Έτσι, αυτό σημαίνει ότι απλά έπρεπε να περάσουν από τον κατάλογο ένα χρόνο. 1118 01:00:24,240 --> 01:00:28,990 Έτσι είναι n, επειδή φαίνομαι σε n στοιχεία. 1119 01:00:28,990 --> 01:00:30,930 Γιατί η επιλογή του είδους n τετράγωνο; 1120 01:00:30,930 --> 01:00:35,150 1121 01:00:35,150 --> 01:00:45,520 >> Ναι, ακόμη και αν η λίστα είναι ταξινομημένη, για κάθε επανάληψη του είδους επιλογή, I 1122 01:00:45,520 --> 01:00:47,590 Πρέπει να επιλέξετε το ελάχιστο στοιχείο. 1123 01:00:47,590 --> 01:00:49,980 Έτσι, αυτό σημαίνει ότι έχω έξω για να δούμε σε όλα τα στοιχεία της μη ταξινομημένα 1124 01:00:49,980 --> 01:00:53,350 λίστα και να βρείτε την ελάχιστη για κάθε επανάληψη. 1125 01:00:53,350 --> 01:00:54,600 Μήπως αυτό έχει νόημα; 1126 01:00:54,600 --> 01:00:56,880 1127 01:00:56,880 --> 01:01:04,690 >> Και το σπαθί εισαγωγής είναι n γιατί η περίπτωση που προσπαθώ να εισάγετε το 1128 01:01:04,690 --> 01:01:09,320 αριθμούς και όλους τους αριθμούς, όταν Ι προσπαθήστε να τους τοποθετήσετε, βλέπω ότι 1129 01:01:09,320 --> 01:01:10,510 είναι στη σωστή θέση. 1130 01:01:10,510 --> 01:01:15,120 Δεν έχω να πάω να δω όλα τα άλλα αριθμοί στο αδιαχώριστα λίστα. 1131 01:01:15,120 --> 01:01:17,170 Έτσι, γι 'αυτό θα είναι n. 1132 01:01:17,170 --> 01:01:19,480 Νόημα; 1133 01:01:19,480 --> 01:01:21,035 Και τι είναι θήτα; 1134 01:01:21,035 --> 01:01:23,410 >> ΚΟΙΝΟ: [δεν ακούγεται]. 1135 01:01:23,410 --> 01:01:24,380 >> LUCAS: Τι, συγγνώμη; 1136 01:01:24,380 --> 01:01:24,960 Πες το ξανά. 1137 01:01:24,960 --> 01:01:25,666 >> ΚΟΙΝΟ: [δεν ακούγεται]. 1138 01:01:25,666 --> 01:01:26,490 >> LUCAS: Ακριβώς. 1139 01:01:26,490 --> 01:01:31,280 Έτσι μπορείτε να δείτε ότι η μόνη επιλογή αποθηκεύονται σε Merge sort έχουν thetas. 1140 01:01:31,280 --> 01:01:39,920 Και αυτό επειδή έχετε μόνο θήτα αν τα δύο Big O και το Ωμέγα είναι το ίδιο. 1141 01:01:39,920 --> 01:01:41,520 OK. 1142 01:01:41,520 --> 01:01:44,210 Και, τέλος, η συγχώνευση ταξινόμησης έχει στο ημερολόγιο n. 1143 01:01:44,210 --> 01:01:48,910 >> Και τότε, όπως έλεγε ο Dan, Συγχώνευση είδος Είναι κάτι σαν τον ίδιο τρόπο που 1144 01:01:48,910 --> 01:01:50,320 κάνετε δυαδική αναζήτηση. 1145 01:01:50,320 --> 01:01:53,530 Έτσι, μπορείτε να πάρετε τη λίστα. 1146 01:01:53,530 --> 01:01:55,170 Και θα πάμε να μειωθεί κατά το ήμισυ. 1147 01:01:55,170 --> 01:02:00,580 Και τότε θα τους κόψει σε μικρότερα μέρη. 1148 01:02:00,580 --> 01:02:01,730 Και τότε μπορείτε να συγχωνεύσετε. 1149 01:02:01,730 --> 01:02:02,960 Εσείς θυμάστε ότι, σωστά; 1150 01:02:02,960 --> 01:02:04,960 OK, όπως έλεγε. 1151 01:02:04,960 --> 01:02:08,330 >> OK, Δείκτες. 1152 01:02:08,330 --> 01:02:11,078 Έτσι τι είναι ένας δείκτης; 1153 01:02:11,078 --> 01:02:12,050 >> ΚΟΙΝΟ: [δεν ακούγεται]. 1154 01:02:12,050 --> 01:02:12,820 >> LUCAS: Μια διεύθυνση. 1155 01:02:12,820 --> 01:02:13,720 OK. 1156 01:02:13,720 --> 01:02:18,530 Γνωρίζω ότι ο David δείχνει ένα μάτσο βίντεο από binky και τα πράγματα δείχνουν 1157 01:02:18,530 --> 01:02:19,080 κάθε άλλο. 1158 01:02:19,080 --> 01:02:22,960 Αλλά μου αρέσει να σκέφτομαι δείκτες ως απλώς μια διεύθυνση. 1159 01:02:22,960 --> 01:02:26,110 Έτσι είναι μια μεταβλητή που πρόκειται για να αποθηκεύσετε μια διεύθυνση. 1160 01:02:26,110 --> 01:02:31,940 >> Έτσι είναι ακριβώς αυτή η ειδική μεταβλητή ότι είναι μεγάλη τέσσερα bytes. 1161 01:02:31,940 --> 01:02:36,550 Να θυμάστε, ότι δείκτης για οτιδήποτε είναι πάντα τέσσερα bytes καιρό για 32-bit μας 1162 01:02:36,550 --> 01:02:39,370 μηχανή έτσι ώστε η περίπτωση με η συσκευή. 1163 01:02:39,370 --> 01:02:41,920 1164 01:02:41,920 --> 01:02:47,050 Και αυτό έχει ακριβώς την τοποθεσία μιας μεταβλητής μέσα από αυτό. 1165 01:02:47,050 --> 01:02:50,240 >> Εντάξει, έτσι δεν υπάρχει αυτή η μνήμη, βασικά. 1166 01:02:50,240 --> 01:02:57,420 Έτσι, κάθε μπλοκ μνήμης έχει στην πραγματικότητα μια ετικέτα, η οποία είναι η διεύθυνση της 1167 01:02:57,420 --> 01:02:58,890 slotty μνήμη. 1168 01:02:58,890 --> 01:03:02,370 Έτσι, αυτό σημαίνει ότι μπορώ να έχω ένας δείκτης που δείχνει προς 1169 01:03:02,370 --> 01:03:03,380 οποιαδήποτε από αυτές τις διευθύνσεις. 1170 01:03:03,380 --> 01:03:09,930 Έτσι, ο λόγος για τον οποίο θα χρησιμοποιήσει δείκτες είναι αν έχω να θυμάμαι την τοποθεσία 1171 01:03:09,930 --> 01:03:12,300 ότι μια συγκεκριμένη μεταβλητή είναι μια μνήμη. 1172 01:03:12,300 --> 01:03:16,560 >> Και εσείς να θυμάστε ότι ένας από τους περιπτώσεις ήταν αν έχω μια λειτουργία 1173 01:03:16,560 --> 01:03:20,820 αν έχω πραγματικά θέλετε να ανταλλαγής για ρεάλια, εγώ πραγματικά 1174 01:03:20,820 --> 01:03:22,110 Πρέπει να στείλουμε ένα δείκτη. 1175 01:03:22,110 --> 01:03:23,460 Δεν είναι η μεταβλητή. 1176 01:03:23,460 --> 01:03:25,200 Μήπως εσείς θυμάστε αυτό; 1177 01:03:25,200 --> 01:03:26,450 Η διαφορά between-- 1178 01:03:26,450 --> 01:03:33,350 1179 01:03:33,350 --> 01:03:34,120 τι είναι το όνομα; 1180 01:03:34,120 --> 01:03:36,010 Κλήση με την αξία και καλώντας με αναφορά, σωστά; 1181 01:03:36,010 --> 01:03:36,840 >> Εντάξει, ναι. 1182 01:03:36,840 --> 01:03:38,330 Έτσι καλέστε με βάση την αξία. 1183 01:03:38,330 --> 01:03:43,570 Όταν απλά να στείλετε μια μεταβλητή λειτουργήσουν είστε απλά στέλνοντας μια αξία. 1184 01:03:43,570 --> 01:03:45,610 Έτσι, είστε πραγματικά αποστολής ένα αντίγραφο της μεταβλητής. 1185 01:03:45,610 --> 01:03:49,720 Και το πρόγραμμά σας δεν θα μπορούσε φροντίδα λιγότερο περίπου, εάν η ίδια μεταβλητή πράγματι 1186 01:03:49,720 --> 01:03:51,650 κάνει ένα αντίγραφο. 1187 01:03:51,650 --> 01:03:56,330 >> Και ζητά από σημαίνει ότι η αναφορά Είμαι πραγματικά την αποστολή αντιγράφου της 1188 01:03:56,330 --> 01:03:57,550 δείκτη σε αυτή τη μεταβλητή. 1189 01:03:57,550 --> 01:04:00,970 Έτσι, αυτό σημαίνει ότι Στέλνω το θέση της μεταβλητής. 1190 01:04:00,970 --> 01:04:04,440 Έτσι την αίσθηση έχω τη θέση του μεταβλητή, όταν καλείτε τη λειτουργία 1191 01:04:04,440 --> 01:04:09,700 με δείκτες, είμαι σε θέση να πραγματικά αλλάξετε τα στοιχεία που ήταν σε κύρια. 1192 01:04:09,700 --> 01:04:12,050 Νόημα; 1193 01:04:12,050 --> 01:04:17,560 >> Παρά το γεγονός ότι, ο δείκτης είναι ένα αντίγραφο, το δείκτης εξακολουθεί να έχει την πραγματική διεύθυνση της 1194 01:04:17,560 --> 01:04:20,090 η μεταβλητή που θέλετε να αλλάξετε. 1195 01:04:20,090 --> 01:04:21,920 Νόημα; 1196 01:04:21,920 --> 01:04:24,290 >> Έτσι, δημιουργώντας δείκτες. 1197 01:04:24,290 --> 01:04:28,410 Θυμηθείτε, το δείκτη να έχει πάντα ο τύπος που να υποδεικνύουν 1198 01:04:28,410 --> 01:04:29,890 και στη συνέχεια ένα αστέρι. 1199 01:04:29,890 --> 01:04:31,030 Και στη συνέχεια, βάζετε το όνομα. 1200 01:04:31,030 --> 01:04:35,765 Έτσι, να θυμάστε ότι κάθε φορά που έχετε Όποια και αν είναι αστέρι, είναι σαν ένα δείκτη για να 1201 01:04:35,765 --> 01:04:38,990 πως ό, τι μεταβλητή πληκτρολογήστε ότι είχατε. 1202 01:04:38,990 --> 01:04:42,850 >> Έτσι, εδώ στο αστέρι, για παράδειγμα, είναι ένας δείκτης και ένας ακέραιος αριθμός. 1203 01:04:42,850 --> 01:04:47,680 Και τότε char αστέρι είναι ένας δείκτης char αστέρι και ούτω καθεξής. 1204 01:04:47,680 --> 01:04:47,960 Ναι; 1205 01:04:47,960 --> 01:04:52,710 >> ΚΟΙΝΟ: Τι θα συμβεί αν έχουμε ένα δείκτη για ν να πρωταγωνιστήσει x. 1206 01:04:52,710 --> 01:04:55,255 Ξέρω ότι δημιουργεί ένα δείκτη προς x. 1207 01:04:55,255 --> 01:04:59,432 Έχει επίσης δηλώσει x ακέραιος; 1208 01:04:59,432 --> 01:05:05,170 >> LUCAS: Εντάξει, έτσι όταν λένε n αστέρι x, δεν είστε δημιουργία ενός δείκτη προς μία 1209 01:05:05,170 --> 01:05:06,000 μεταβλητή x. 1210 01:05:06,000 --> 01:05:08,170 Είσαι δημιουργώντας ένα δείκτη που ονομάζεται x. 1211 01:05:08,170 --> 01:05:09,396 >> ΚΟΙΝΟ: [δεν ακούγεται]. 1212 01:05:09,396 --> 01:05:14,250 >> LUCAS: Οπότε, όταν λέω n αστέρι x, είμαι λέγοντας, hey, στη μνήμη, Πάω να 1213 01:05:14,250 --> 01:05:16,390 να πάρει ένα από αυτά τα τρία κουτιά. 1214 01:05:16,390 --> 01:05:20,750 Και Πάω να πω ότι πρόκειται να είναι Χ, το οποίο είναι 1215 01:05:20,750 --> 01:05:22,000 πρόκειται να είναι ένας δείκτης. 1216 01:05:22,000 --> 01:05:26,860 1217 01:05:26,860 --> 01:05:30,640 Και κάτι ενδιαφέρον για τους δείκτες είναι ότι μπορούμε να πούμε ότι έχουν 1218 01:05:30,640 --> 01:05:32,620 4 bytes για μια μηχανή 32-bit. 1219 01:05:32,620 --> 01:05:36,320 Και ο λόγος για αυτό είναι επειδή 4 bytes είναι 32-bits. 1220 01:05:36,320 --> 01:05:40,490 >> Και μηχανές που είναι 64 bits πραγματικότητα έχουν δείκτες διευθύνσεις 1221 01:05:40,490 --> 01:05:43,480 που έχουν μακρά 64 bits. 1222 01:05:43,480 --> 01:05:49,820 Έτσι, αυτό σημαίνει απλώς ότι το μέγεθος της διευθύνσεις στο μηχάνημα είναι διαφορετική. 1223 01:05:49,820 --> 01:05:52,270 >> Έτσι Η αναφορά και Καταργώντας την αναφορά. 1224 01:05:52,270 --> 01:05:54,310 Υπάρχουν δύο φορείς εκμετάλλευσης ότι εσείς πρέπει να θυμόμαστε. 1225 01:05:54,310 --> 01:05:55,450 Το πρώτο είναι ampersand. 1226 01:05:55,450 --> 01:05:56,810 Το δεύτερο είναι αστέρι. 1227 01:05:56,810 --> 01:06:05,060 Μην μπερδευτείτε από αυτό το αστέρι και αυτό Αστέρι επειδή θυμούνται ότι, σε 1228 01:06:05,060 --> 01:06:06,950 αυτή την περίπτωση, θα πρέπει ν αστέρων. 1229 01:06:06,950 --> 01:06:08,700 >> Είναι σαν ένα όλο θέμα μαζί. 1230 01:06:08,700 --> 01:06:10,720 Δεν υπάρχει χώρος n αστέρι. 1231 01:06:10,720 --> 01:06:12,070 Έτσι αυτό σημαίνει ότι είναι ο τύπος. 1232 01:06:12,070 --> 01:06:14,870 Να θυμάστε, ότι όταν έχετε το μεταβλητό αστέρι, είστε 1233 01:06:14,870 --> 01:06:16,230 μιλάμε για το είδος. 1234 01:06:16,230 --> 01:06:20,540 >> Όταν έχετε μόνο αστέρι και στη συνέχεια η όνομα της μεταβλητής, αυτό σημαίνει ότι 1235 01:06:20,540 --> 01:06:24,100 είστε dereferencing το δείκτη, η οποία σημαίνει ότι κοιτάτε το 1236 01:06:24,100 --> 01:06:28,290 pointer, εύρεση της διεύθυνσης είναι επισημαίνοντας, πηγαίνει σε αυτήν τη διεύθυνση, 1237 01:06:28,290 --> 01:06:30,850 και κοιτάζοντας όποτε έχετε εκεί. 1238 01:06:30,850 --> 01:06:34,310 Έτσι λέω στους μαθητές μου ότι όταν έχετε αστέρι, θα πρέπει να σκεφτείτε ότι είναι 1239 01:06:34,310 --> 01:06:36,850 η συντομογραφία του περιεχομένου της. 1240 01:06:36,850 --> 01:06:39,770 >> Έτσι, εάν έχετε ένα δείκτη και κάνει αστέρι δείκτη, είναι η 1241 01:06:39,770 --> 01:06:41,720 περιεχόμενο του δείκτη. 1242 01:06:41,720 --> 01:06:44,580 Έτσι, πηγαίνετε σε ό, τι είναι επισημαίνοντας και να δούμε τη συνεχή περιεχόμενο. 1243 01:06:44,580 --> 01:06:47,730 Και το εμπορικό και είναι η ίδια πράγμα ως διεύθυνση. 1244 01:06:47,730 --> 01:06:52,560 >> Έτσι, αν έχω μια μεταβλητή μια-- όπως, ας να πω ότι έκανα int a ισούται 3-- 1245 01:06:52,560 --> 01:06:56,900 αν θέλετε να βρείτε τη διεύθυνση που μεταβλητή μνήμη, μπορώ να κάνω μόνο 1246 01:06:56,900 --> 01:06:58,240 Εμπορικό και ένα. 1247 01:06:58,240 --> 01:07:00,280 Έτσι είναι η διεύθυνση ενός. 1248 01:07:00,280 --> 01:07:01,530 Νόημα; 1249 01:07:01,530 --> 01:07:03,790 1250 01:07:03,790 --> 01:07:05,040 >> Έτσι, εδώ είναι ένα παράδειγμα. 1251 01:07:05,040 --> 01:07:08,370 1252 01:07:08,370 --> 01:07:11,530 Αυτό λείπει int b και int c. 1253 01:07:11,530 --> 01:07:16,520 Έτσι int a ισούται με 3 σημαίνει ότι Πάω να πάει στη μνήμη. 1254 01:07:16,520 --> 01:07:19,870 Και Πάω να βρουν μια σχισμή και να θέσει τον αριθμό 3 εδώ. 1255 01:07:19,870 --> 01:07:22,200 >> Και στη συνέχεια, int b ισούται με 4. 1256 01:07:22,200 --> 01:07:23,100 Πάω να κάνω το ίδιο πράγμα. 1257 01:07:23,100 --> 01:07:25,840 Πηγαίνετε στη μνήμη και να θέσει έναν αριθμό 4 σε ένα από τα κουτιά. 1258 01:07:25,840 --> 01:07:27,100 Και int ισούται με 5. 1259 01:07:27,100 --> 01:07:29,740 Βρείτε ένα άλλο πλαίσιο και να θέσει έναν αριθμό 5. 1260 01:07:29,740 --> 01:07:36,160 >> Έτσι τι είναι αυτή η γραμμή κάνει έξω; pa n αστέρι ισούται με ένα ampersand. 1261 01:07:36,160 --> 01:07:37,800 Έτσι, πρώτα απ 'όλα, n pa αστέρι. 1262 01:07:37,800 --> 01:07:39,050 Τι είναι αυτό που κάνει; 1263 01:07:39,050 --> 01:07:40,930 1264 01:07:40,930 --> 01:07:42,298 >> ΚΟΙΝΟ: [δεν ακούγεται]. 1265 01:07:42,298 --> 01:07:47,890 >> LUCAS: Ναι, έτσι n αστέρι ετησίως, κατ 'αρχάς, δηλώνει ένα δείκτη που ονομάζεται ετησίως. 1266 01:07:47,890 --> 01:07:53,720 Και τότε είναι ανάθεση της αξίας των ότι το δείκτη να είναι η διεύθυνση της a. 1267 01:07:53,720 --> 01:07:55,790 Έτσι, εμπορικό και ένα. 1268 01:07:55,790 --> 01:07:58,510 Στη συνέχεια, αν δεν κάνω pb αστέρι, τι είναι ένα pb αστέρι; 1269 01:07:58,510 --> 01:08:02,418 1270 01:08:02,418 --> 01:08:03,150 >> Ω, συγγνώμη. 1271 01:08:03,150 --> 01:08:06,330 Αυτό είναι επίσης λείπει. n pb αστέρι. 1272 01:08:06,330 --> 01:08:07,905 Εννοώ pc αστέρι. 1273 01:08:07,905 --> 01:08:11,200 Λυπάμαι πολύ. 1274 01:08:11,200 --> 01:08:11,940 Είναι το ίδιο πράγμα. 1275 01:08:11,940 --> 01:08:16,408 Αλλά τώρα είμαι καλά ar δημιουργία ενός δείκτη to b και, στη συνέχεια, ένα δείκτη για να γ. 1276 01:08:16,408 --> 01:08:16,886 Ναι; 1277 01:08:16,886 --> 01:08:18,136 >> ΚΟΙΝΟ: [δεν ακούγεται]; 1278 01:08:18,136 --> 01:08:25,490 1279 01:08:25,490 --> 01:08:26,670 >> LUCAS: Ναι. 1280 01:08:26,670 --> 01:08:32,630 Έτσι, αν πάτε στη μνήμη και θα πάμε να το κουτί που είναι ένδειξη για pa, 1281 01:08:32,630 --> 01:08:37,149 είστε πραγματικά πρόκειται να δείτε μια διεύθυνση ενός. 1282 01:08:37,149 --> 01:08:38,399 Εντάξει; 1283 01:08:38,399 --> 01:08:42,970 1284 01:08:42,970 --> 01:08:43,300 Ναι; 1285 01:08:43,300 --> 01:08:45,605 >> ΚΟΙΝΟ: [δεν ακούγεται]; 1286 01:08:45,605 --> 01:08:49,260 >> LUCAS: Ναι, δείκτης είναι μια διεύθυνση. 1287 01:08:49,260 --> 01:08:50,120 Ποτέ μην ξεχνάτε ότι. 1288 01:08:50,120 --> 01:08:52,800 Είναι σαν το πιο σημαντικό μέρος για δείκτες. 1289 01:08:52,800 --> 01:08:56,180 Υπάρχει αποθήκευση και τη διεύθυνση σε κάποια μεταβλητή. 1290 01:08:56,180 --> 01:08:56,890 Οτιδήποτε άλλο; 1291 01:08:56,890 --> 01:08:58,370 Οποιεσδήποτε άλλες ερωτήσεις; 1292 01:08:58,370 --> 01:08:59,189 OK. 1293 01:08:59,189 --> 01:09:00,399 >> Έτσι Δείκτες και πίνακες. 1294 01:09:00,399 --> 01:09:08,189 Να θυμάστε ότι όταν κάνω int array 3, Βασικά, αυτό που κάνω είναι ότι είμαι, το είδος 1295 01:09:08,189 --> 01:09:12,779 του, δηλώνοντας σε ένα δείκτη. 1296 01:09:12,779 --> 01:09:18,960 Έτσι σειρά είναι το είδος του σαν ένα δείκτη προς μία συγκεκριμένο χώρο στη μνήμη στην οποία 1297 01:09:18,960 --> 01:09:21,999 διατίθενται τρεις υποδοχές για ακέραιους αριθμούς. 1298 01:09:21,999 --> 01:09:23,430 Μήπως αυτό έχει νόημα; 1299 01:09:23,430 --> 01:09:30,250 >> Έτσι, όταν κάνω int array 3, τι είμαι κάνει, βασικά, είναι η δημιουργία τριών 1300 01:09:30,250 --> 01:09:31,479 υποδοχές στη μνήμη. 1301 01:09:31,479 --> 01:09:33,899 Γι 'αυτό ακριβώς βρείτε τρεις υποδοχές μνήμης. 1302 01:09:33,899 --> 01:09:38,810 Έτσι, αν το κάνω, τότε, μια σειρά αστέρι, το σημαίνει ουσιαστικά το περιεχόμενο του πίνακα, 1303 01:09:38,810 --> 01:09:46,180 που σημαίνει σβήνω το δείκτη, πάω σε αυτό το μέρος που είναι επισημαίνοντας, 1304 01:09:46,180 --> 01:09:47,939 και έβαλα το νούμερο ένα. 1305 01:09:47,939 --> 01:09:53,729 >> Και τότε, αν κάνω σειρά αστέρι συν 1, ότι είναι το ίδιο πράγμα με κάνει array 1306 01:09:53,729 --> 01:09:59,690 παρένθεση ένα, πράγμα που σημαίνει απλά πάω να ο τόπος που να υποδεικνύουν. 1307 01:09:59,690 --> 01:10:03,000 Και τότε οι μάρκες συν 1 με μετατόπιση κατά μία θέση. 1308 01:10:03,000 --> 01:10:06,510 Πηγαίνω λοιπόν σε αυτή τη θέση, στην πραγματικότητα, και να θέσει τον αριθμό δύο. 1309 01:10:06,510 --> 01:10:10,900 >> Και τότε, επιτέλους, όταν κάνω array συν 2, πάω όπου 1310 01:10:10,900 --> 01:10:11,825 κατάδειξης συστοιχίας σε. 1311 01:10:11,825 --> 01:10:14,690 Και τότε θα προχωρήσουμε σε μπλοκ μνήμης. 1312 01:10:14,690 --> 01:10:16,240 Και τότε έβαλα τον αριθμό τρία εδώ. 1313 01:10:16,240 --> 01:10:16,600 Ναι; 1314 01:10:16,600 --> 01:10:21,400 >> ΚΟΙΝΟ: Έτσι αστέρι πίνακας είναι απλά λέγοντας ότι το πρώτο σημείο. 1315 01:10:21,400 --> 01:10:25,090 Και μπορείτε να προσθέσετε 1, μόνο και μόνο επειδή είμαστε μόνο πραγματικά 1316 01:10:25,090 --> 01:10:27,295 αναφορά ότι η πρώτη διεύθυνση. 1317 01:10:27,295 --> 01:10:28,545 >> LUCAS: Ναι. 1318 01:10:28,545 --> 01:10:32,720 1319 01:10:32,720 --> 01:10:36,020 Γιατί, για παράδειγμα, να πω σειρά 0, πίνακας 1 και πίνακας 2; 1320 01:10:36,020 --> 01:10:38,970 1321 01:10:38,970 --> 01:10:42,790 Λέω, γιατί το κάνεις 0, 1, 2, 3 αντί του 1, 2, 3; 1322 01:10:42,790 --> 01:10:46,550 Ένας από τους λόγους είναι, το ένα, ο υπολογιστής προγραμματιστές προτιμούν να ξεκινήσετε 1323 01:10:46,550 --> 01:10:47,750 ξεκινώντας από το 0. 1324 01:10:47,750 --> 01:10:52,370 Δύο είναι επειδή όταν κάνεις σειρά 0, Είναι το ίδιο πράγμα με κάνει array 1325 01:10:52,370 --> 01:10:56,330 συν 0, που σημαίνει ότι θα πάω να ότι η θέση, και δεν το κάνω 1326 01:10:56,330 --> 01:10:59,320 παραλείψετε κανένα μπλοκ μνήμης. 1327 01:10:59,320 --> 01:11:01,750 Γι 'αυτό και δεν κινούνται κάθε μπλοκ μνήμης. 1328 01:11:01,750 --> 01:11:02,015 Ναι; 1329 01:11:02,015 --> 01:11:03,265 >> ΚΟΙΝΟ: [δεν ακούγεται]; 1330 01:11:03,265 --> 01:11:05,928 1331 01:11:05,928 --> 01:11:12,670 >> LUCAS: Έτσι που ρωτάει τι είναι η διαφορά μεταξύ κάνει 1332 01:11:12,670 --> 01:11:14,000 αυτό ή να κάνει malloc. 1333 01:11:14,000 --> 01:11:17,550 Μία από τις διαφορές είναι ότι int array 3 είναι η δημιουργία ενός 1334 01:11:17,550 --> 01:11:19,260 συστοιχία στη στοίβα. 1335 01:11:19,260 --> 01:11:23,080 Και όταν το κάνω malloc αυτό, δημιουργεί στο σωρό. 1336 01:11:23,080 --> 01:11:25,250 Μήπως αυτό έχει νόημα; 1337 01:11:25,250 --> 01:11:28,870 >> Και πώς malloc λειτουργούν πραγματικά; 1338 01:11:28,870 --> 01:11:32,245 Έτσι, γιατί χρειαζόμαστε ακόμα να χρησιμοποιήσετε malloc; 1339 01:11:32,245 --> 01:11:35,730 1340 01:11:35,730 --> 01:11:39,700 Είδος compiler σας από τα στοιχεία από όλα τα οι μεταβλητές που δηλώνονται. 1341 01:11:39,700 --> 01:11:44,040 Και ο ίδιος δημιουργεί χώρο για όλους Από αυτούς στη στοίβα. 1342 01:11:44,040 --> 01:11:47,180 Έτσι, το σύνολο των μεταβλητών σας θα να είναι κάπου στη στοίβα. 1343 01:11:47,180 --> 01:11:49,460 Έτσι, εδώ είναι οι μεταβλητές περιβάλλοντος. 1344 01:11:49,460 --> 01:11:53,850 >> Έτσι, βασικά, χώρος για αυτές τις μεταβλητές στη μνήμη κατανέμεται σε 1345 01:11:53,850 --> 01:11:55,080 τη διάρκεια της μεταγλώττισης. 1346 01:11:55,080 --> 01:11:58,790 Έτσι, αυτό σημαίνει ότι ο υπολογιστής σας έχει να γνωρίζει όλες αυτές τις μεταβλητές 1347 01:11:58,790 --> 01:11:59,790 εκ των προτέρων. 1348 01:11:59,790 --> 01:12:02,500 Δεν χρειάζεται να γνωρίζουν τι αξία θα πάμε να θέσει σε αυτά. 1349 01:12:02,500 --> 01:12:05,490 Αλλά πρέπει να γνωρίζει πώς το μέγεθος της μνήμης που χρειάζεστε. 1350 01:12:05,490 --> 01:12:09,380 >> Αλλά τώρα ας πούμε ότι, για παράδειγμα, είστε δημιουργώντας μια σειρά ή τη λήψη ενός 1351 01:12:09,380 --> 01:12:13,430 κορδόνι που παίρνετε από τον χρήστη. 1352 01:12:13,430 --> 01:12:17,300 Δεν ξέρω πόσο καιρό το string πρόκειται να είναι, για παράδειγμα. 1353 01:12:17,300 --> 01:12:20,600 Έτσι, δεν ξέρω ακριβώς πόσες μπλοκ μνήμης που διαθέτει, σωστά; 1354 01:12:20,600 --> 01:12:24,120 >> Γι 'αυτό δεν έχει νόημα για μπορείτε να πείτε βάλει 100 χαρακτήρες. 1355 01:12:24,120 --> 01:12:26,420 Και τότε τι θα γινόταν αν ο χρήστης γράφει 150; 1356 01:12:26,420 --> 01:12:27,670 Θα πάμε να βιδωθεί. 1357 01:12:27,670 --> 01:12:30,160 1358 01:12:30,160 --> 01:12:34,620 >> Έτσι, βασικά, δεν μπορείς να είσαι σίγουρος για το πώς πόση μνήμη πρέπει να διαθέσετε 1359 01:12:34,620 --> 01:12:35,960 κατά τη μεταγλώττιση του προγράμματος. 1360 01:12:35,960 --> 01:12:38,240 Μπορείτε απλά να ξέρετε ότι για το χρόνο εκτέλεσης. 1361 01:12:38,240 --> 01:12:39,950 Έτσι, γι 'αυτό έχετε το σωρό. 1362 01:12:39,950 --> 01:12:47,610 Έτσι, ο σωρός πρόκειται να έχουν μνήμη ότι είστε κατανομή κατά τη διάρκεια της 1363 01:12:47,610 --> 01:12:50,810 διάρκεια του προγράμματος λειτουργίας. 1364 01:12:50,810 --> 01:12:55,780 >> Έτσι, βασικά, όταν κάνεις malloc, τι κάνεις είναι κατανομή μνήμης 1365 01:12:55,780 --> 01:13:00,160 runtime, το οποίο σημαίνει ότι είστε αποφασίσει ακριβώς εκείνη τη στιγμή που εσείς 1366 01:13:00,160 --> 01:13:02,670 θα πρέπει να έχουν εκείνη την μνήμη. 1367 01:13:02,670 --> 01:13:04,210 Έτσι ώστε να είναι όταν για τη χορήγησή της. 1368 01:13:04,210 --> 01:13:06,430 Μήπως αυτό έχει νόημα; 1369 01:13:06,430 --> 01:13:11,690 >> Έτσι θυμηθείτε, η στοίβα έχει μεταβλητές που δημιουργούνται για τη μεταγλώττιση. 1370 01:13:11,690 --> 01:13:14,560 Και τότε ο σωρός έχει μεταβλητές που δημιουργούνται καθώς πηγαίνετε 1371 01:13:14,560 --> 01:13:15,600 με malloc, για παράδειγμα. 1372 01:13:15,600 --> 01:13:16,850 >> ΚΟΙΝΟ: [δεν ακούγεται]; 1373 01:13:16,850 --> 01:13:19,179 1374 01:13:19,179 --> 01:13:24,340 >> LUCAS: Έτσι GetString είναι πρόκειται να καλέσει malloc. 1375 01:13:24,340 --> 01:13:26,710 Επιτρέψτε μου να μιλήσω για malloc, και Θα εξηγήσω GetString. 1376 01:13:26,710 --> 01:13:32,000 Έτσι malloc είναι το ίδιο πράγμα η κατανομή της μνήμης. 1377 01:13:32,000 --> 01:13:34,600 Έτσι, πρόκειται να διαθέσει μνήμη στο σωρό. 1378 01:13:34,600 --> 01:13:40,010 Και πρόκειται να επιστρέφει ένα δείκτη στο όπου η μνήμη είχε αποδοθεί κατά. 1379 01:13:40,010 --> 01:13:43,090 >> Έτσι, όταν do-- 1380 01:13:43,090 --> 01:13:44,910 εδώ για example-- 1381 01:13:44,910 --> 01:13:45,830 n δείκτη αστέρι. 1382 01:13:45,830 --> 01:13:50,520 Και τότε δείκτης ισούται με malloc το μέγεθος των φορές ιντσών 10. 1383 01:13:50,520 --> 01:13:52,110 Είμαι δημιουργία ενός δείκτη. 1384 01:13:52,110 --> 01:13:59,020 Και τότε είμαι ανάθεση αυτή δείκτης για την η τιμή του δείκτη που malloc 1385 01:13:59,020 --> 01:13:59,680 μου δίνει. 1386 01:13:59,680 --> 01:14:04,150 >> Ρωτάω λοιπόν malloc μπορεί να σας διαθέσει χώρος για 10 ακέραιοι. 1387 01:14:04,150 --> 01:14:05,390 Αυτό είναι ό, τι λέει. 1388 01:14:05,390 --> 01:14:09,020 Και malloc μου δίνει πίσω ένα δείκτη σε αυτή τη θέση. 1389 01:14:09,020 --> 01:14:11,460 Νόημα; 1390 01:14:11,460 --> 01:14:12,270 OK. 1391 01:14:12,270 --> 01:14:17,940 I Και GetString είναι, ουσιαστικά, να κάνει μια καλέστε στο malloc, έτσι ώστε να μπορεί να διαθέσει 1392 01:14:17,940 --> 01:14:21,680 μνήμη κατά τη διάρκεια της εκτέλεσης. 1393 01:14:21,680 --> 01:14:26,460 >> Πάντα να θυμάστε να ελέγχετε για null επειδή malloc πρόκειται να επιστρέψει null 1394 01:14:26,460 --> 01:14:28,200 αν δεν μπορεί να εκχωρήσει μνήμη. 1395 01:14:28,200 --> 01:14:31,660 Ας πούμε ότι σας ρωτήσω για ένα γελοίο ποσό της μνήμης. 1396 01:14:31,660 --> 01:14:33,950 Ο υπολογιστής σας δεν πρόκειται να είναι είναι σε θέση να διαθέσει τόσο πολύ. 1397 01:14:33,950 --> 01:14:36,410 >> Έτσι malloc είναι ακριβώς πρόκειται να επιστρέψει null. 1398 01:14:36,410 --> 01:14:42,210 Έτσι, να θυμάστε πάντα να ελέγχετε αν η δείκτη που πήρατε από malloc είναι 1399 01:14:42,210 --> 01:14:45,640 null ή όχι, διότι, αν είναι, ίσως να dereferencing ένα δείκτη και 1400 01:14:45,640 --> 01:14:48,340 προκαλώντας την πλευρά σφάλματα. 1401 01:14:48,340 --> 01:14:50,930 Και τέλος, μην ξεχνάτε ελεύθερη μνήμη σας. 1402 01:14:50,930 --> 01:14:57,800 1403 01:14:57,800 --> 01:15:00,560 >> Malloc δημιουργεί μνήμη στο σωρό. 1404 01:15:00,560 --> 01:15:03,436 Και θα πρέπει να ελευθερώσετε τη μνήμη πριν από τη λήξη του προγράμματος. 1405 01:15:03,436 --> 01:15:05,370 Εντάξει, αυτό είναι όλο για μένα. 1406 01:15:05,370 --> 01:15:07,900 Λυπούμαστε, Rob. 1407 01:15:07,900 --> 01:15:07,950 Ευχαριστώ. 1408 01:15:07,950 --> 01:15:09,878 >> [Χειροκρότημα] 1409 01:15:09,878 --> 01:15:12,679 >> LUCAS: Οποιεσδήποτε τελευταίες ερωτήσεις πριν Rob έρχεται; 1410 01:15:12,679 --> 01:15:13,138 Όχι; 1411 01:15:13,138 --> 01:15:13,597 Ναι; 1412 01:15:13,597 --> 01:15:15,892 >> ΚΟΙΝΟ: Δεν είδα αυτό σε απευθείας σύνδεση. 1413 01:15:15,892 --> 01:15:17,269 Έχετε ανεβάσει ακόμα; 1414 01:15:17,269 --> 01:15:19,106 >> LUCAS: Νομίζω ότι ο Dave είναι μεταφόρτωση σύντομα. 1415 01:15:19,106 --> 01:15:19,880 >> DAVE: Θα πρέπει να αναρτηθεί. 1416 01:15:19,880 --> 01:15:20,310 >> LUCAS: Θα είναι σε απευθείας σύνδεση. 1417 01:15:20,310 --> 01:15:21,175 >> ΚΟΙΝΟ: Είναι στο χέρι. 1418 01:15:21,175 --> 01:15:22,090 >> LUCAS: Είναι στο χέρι; 1419 01:15:22,090 --> 01:15:23,157 OK. 1420 01:15:23,157 --> 01:15:23,644 Ναι; 1421 01:15:23,644 --> 01:15:27,053 >> ΚΟΙΝΟ: [δεν ακούγεται]; 1422 01:15:27,053 --> 01:15:30,285 >> LUCAS: Ναι, θα πρέπει να απελευθερώσει όλες τις μνήμης που τίθεται στο σωρό. 1423 01:15:30,285 --> 01:15:31,535 >> ΚΟΙΝΟ: [δεν ακούγεται]; 1424 01:15:31,535 --> 01:15:34,518 1425 01:15:34,518 --> 01:15:36,160 >> LUCAS: Ναι. 1426 01:15:36,160 --> 01:15:39,980 Κάθε φορά που έχετε μια malloc πολιτισμό, θα πρέπει να έχετε μια κουλτούρα δωρεάν 1427 01:15:39,980 --> 01:15:42,640 αφού σταματήσετε να χρησιμοποιείτε αυτήν τη μεταβλητή. 1428 01:15:42,640 --> 01:15:44,800 Έτσι malloc και δωρεάν είναι πάντα μαζί. 1429 01:15:44,800 --> 01:15:45,410 Καλύτεροι φίλοι τους. 1430 01:15:45,410 --> 01:15:46,720 Ναι. 1431 01:15:46,720 --> 01:15:47,970 Rob; 1432 01:15:47,970 --> 01:15:55,595 1433 01:15:55,595 --> 01:15:56,850 >> ROB: Θα πάω γρήγορα. 1434 01:15:56,850 --> 01:16:00,466 Και, επίσης, το βίντεο θα είναι συσκευασμένα. 1435 01:16:00,466 --> 01:16:01,716 Έχω το μικρόφωνο για. 1436 01:16:01,716 --> 01:16:24,060 1437 01:16:24,060 --> 01:16:26,230 >> Εντάξει, έτσι εβδομάδα πέντε πράγματα. 1438 01:16:26,230 --> 01:16:27,970 Το πρώτο πράγμα που έχουμε είναι η στοίβα. 1439 01:16:27,970 --> 01:16:33,390 Έτσι, να θυμάστε ότι υπάρχει μόνο μία στοίβα καρέ ανά ενεργή κλήση της συνάρτησης. 1440 01:16:33,390 --> 01:16:34,710 Θα δούμε ότι σε μια δεύτερη. 1441 01:16:34,710 --> 01:16:37,850 Και επίσης να θυμάστε τι συμβαίνει στην πραγματικότητα σε κάθε πλαίσιο στοίβας πρόκειται να είναι 1442 01:16:37,850 --> 01:16:41,880 οι τοπικές μεταβλητές των λειτουργιών μας, τα επιχειρήματα που έχουν περάσει σε μας 1443 01:16:41,880 --> 01:16:43,880 λειτουργίες, μαζί με ένα ζευγάρι άλλα πράγματα που δεν κάνουμε πραγματικά 1444 01:16:43,880 --> 01:16:45,260 πρέπει να ανησυχούν. 1445 01:16:45,260 --> 01:16:50,950 >> Έτσι, εδώ είναι ένα παράδειγμα προγράμματος, όπου, ανακοίνωση, κύριο είναι printfing την επιστροφή 1446 01:16:50,950 --> 01:16:52,830 αξία των foo 4. 1447 01:16:52,830 --> 01:16:57,930 foo είναι ακριβώς πρόκειται να επιστρέψει το αξία των 4 bar κόμμα 6. 1448 01:16:57,930 --> 01:17:02,380 Και bar πρόκειται να θέσει κάποια τοπική μεταβλητή η ίσο με 4 φορές 6. 1449 01:17:02,380 --> 01:17:03,920 Και στη συνέχεια επιστρέφουν n. 1450 01:17:03,920 --> 01:17:09,130 >> Έτσι, ας ρίξουμε μια ματιά στο stack σε όλη την η πραγματική επανάληψη του προγράμματος αυτού. 1451 01:17:09,130 --> 01:17:10,500 Έτσι, υπάρχει το κάτω μέρος του stack μας. 1452 01:17:10,500 --> 01:17:12,620 Θυμηθείτε ότι η στοίβα μεγαλώνει. 1453 01:17:12,620 --> 01:17:15,370 Έτσι στο κάτω μέρος της στοίβας μας, εμείς έχουν ένα πλαίσιο στοίβας για την κύρια. 1454 01:17:15,370 --> 01:17:17,000 Όταν ξεκινήσει το πρόγραμμα, κύρια είναι πάντα πρόκειται να είναι σε η 1455 01:17:17,000 --> 01:17:18,560 κάτω μέρος του stack μας. 1456 01:17:18,560 --> 01:17:20,880 >> Και τι είναι μέσα μας στοίβα πλαίσιο για την κύρια; 1457 01:17:20,880 --> 01:17:23,810 Έτσι, ακόμα κι αν δεν υπάρχουν τοπικές μεταβλητές σε κύριες, όπως είπα και πριν, 1458 01:17:23,810 --> 01:17:29,670 έχουμε argc και rgv ανάληψη χώρο εσωτερικό του κύριου πλαισίου στοίβας. 1459 01:17:29,670 --> 01:17:33,260 Έτσι, κύρια τώρα πρόκειται να καλέστε τη συνάρτηση foo. 1460 01:17:33,260 --> 01:17:35,125 Και αυτό σημαίνει ότι foo πρόκειται να να πάρει τη δική πλαίσιο στοίβας του. 1461 01:17:35,125 --> 01:17:36,970 >> Μέχρι τώρα είμαστε στο εσωτερικό της η συνάρτηση foo. 1462 01:17:36,970 --> 01:17:38,610 Και ό, τι χρειάζεται για να πάει στο πλαίσιο στοίβας foo του; 1463 01:17:38,610 --> 01:17:41,100 Λοιπόν, foo έχει ένα επιχείρημα n. 1464 01:17:41,100 --> 01:17:45,440 Και n είναι ίσο με 4 δεδομένου ότι αυτό είναι ό, τι κύρια περνά ως επιχείρημα foo του. 1465 01:17:45,440 --> 01:17:48,490 >> Μέχρι τώρα foo πρόκειται να καλέσετε το μπαρ. 1466 01:17:48,490 --> 01:17:52,070 Τι είναι το μπαρ θα έχει μέσα του «πλαισίου στοίβας του; 1467 01:17:52,070 --> 01:17:55,610 Έχει x ίσο με 4 y ισούται με έξι. 1468 01:17:55,610 --> 01:17:58,540 Αυτό δεν είναι το μόνο που θα πάμε να έχουν στο πλαίσιο στοίβας επειδή μπαρ 1469 01:17:58,540 --> 01:18:00,580 έχει επίσης μια τοπική μεταβλητή n. 1470 01:18:00,580 --> 01:18:03,370 Και n θα πάμε να τίθεται ίσο με 24. 1471 01:18:03,370 --> 01:18:05,750 >> Μέχρι τώρα bar πρόκειται να επιστρέψει n. 1472 01:18:05,750 --> 01:18:09,300 Έτσι, μπαρ επιστρέφει 24 έως η foo πλαίσιο στοίβας. 1473 01:18:09,300 --> 01:18:12,560 Και επειδή bar επανέρχεται τώρα, ότι σημαίνει ότι είμαστε σκάει το πλαίσιο στοίβας 1474 01:18:12,560 --> 01:18:14,250 για μπαρ στα ανοικτά της στοίβας. 1475 01:18:14,250 --> 01:18:18,430 Έτσι, όλη η μνήμη ότι η γραμμή ήταν χρήση είναι τώρα από τη στοίβα. 1476 01:18:18,430 --> 01:18:21,550 >> Τώρα, foo πρόκειται επίσης για να επιστρέψετε στο κύριο 24. 1477 01:18:21,550 --> 01:18:25,470 Έτσι τώρα που foo επιστρέφει, τη μνήμη ότι foo χρησιμοποιούσε στο 'του 1478 01:18:25,470 --> 01:18:27,550 πλαίσιο στοίβας είναι επίσης φύγει. 1479 01:18:27,550 --> 01:18:29,660 Και τώρα, κύριος πρόκειται να καλέσετε printf. 1480 01:18:29,660 --> 01:18:31,660 Έτσι printf είναι απλά μια άλλη λειτουργία. 1481 01:18:31,660 --> 01:18:35,320 Όταν λέμε printf, πρόκειται να ένα άλλο πλαίσιο στοίβας για την printf 1482 01:18:35,320 --> 01:18:36,470 κλήση της συνάρτησης. 1483 01:18:36,470 --> 01:18:37,990 >> Τι περνάμε printf; 1484 01:18:37,990 --> 01:18:40,090 Αυτό είναι ό, τι πρόκειται να πάει επί του πλαισίου στοίβας του. 1485 01:18:40,090 --> 01:18:44,970 Τουλάχιστον, θα περνάτε ότι το ποσοστό i backslash n και 1486 01:18:44,970 --> 01:18:47,180 το επιχείρημα 24. 1487 01:18:47,180 --> 01:18:50,370 Θα μπορούσε να έχει περισσότερο είναι το πλαίσιο στοίβας αν printf συμβαίνει να χρησιμοποιούν κάποια 1488 01:18:50,370 --> 01:18:51,200 τοπικές μεταβλητές. 1489 01:18:51,200 --> 01:18:51,920 Δεν ξέρουμε. 1490 01:18:51,920 --> 01:18:53,810 >> Αλλά όλα αυτά πηγαίνει στην printf του stack frame. 1491 01:18:53,810 --> 01:18:55,740 Είναι πρόκειται να εκτελέσει την printf. 1492 01:18:55,740 --> 01:18:56,830 Στη συνέχεια printf κάνει. 1493 01:18:56,830 --> 01:18:57,820 Θα επιστρέψει. 1494 01:18:57,820 --> 01:18:58,960 Τέλος, κύριο γίνεται. 1495 01:18:58,960 --> 01:18:59,860 Main θα επιστρέψει. 1496 01:18:59,860 --> 01:19:02,020 Και τότε το πρόγραμμά μας γίνεται. 1497 01:19:02,020 --> 01:19:02,480 Ναι; 1498 01:19:02,480 --> 01:19:04,505 >> ΚΟΙΝΟ: Είστε βλέποντας [δεν ακούγεται] 1499 01:19:04,505 --> 01:19:05,900 επιχειρήματα [δεν ακούγεται] 1500 01:19:05,900 --> 01:19:06,830 παραμέτρους; 1501 01:19:06,830 --> 01:19:09,970 >> ROB: Έτσι, υπάρχει μια λεπτή διαφορά μεταξύ των επιχειρημάτων και των παραμέτρων. 1502 01:19:09,970 --> 01:19:14,400 Και πραγματικά, σε κοινή μιλούν, οι άνθρωποι τείνουν να τα ανακατεύουμε ακριβώς επάνω όλη την ώρα. 1503 01:19:14,400 --> 01:19:17,550 Όμως, οι παράμετροι είναι η επίσημη αναφέρουμε τα πράγματα. 1504 01:19:17,550 --> 01:19:20,180 >> Έτσι argc και argv είναι το παραμέτρους για την κύρια. 1505 01:19:20,180 --> 01:19:23,440 Επιχειρήματα είναι αυτό που πραγματικά περάσει σε όσο αυτές παραμέτρους. 1506 01:19:23,440 --> 01:19:28,340 Έτσι εκεί όταν καλώ foo των 4, 4 είναι το επιχείρημα που περνάω σε. 1507 01:19:28,340 --> 01:19:31,460 Και η παράμετρος n, μέσα από foo, παίρνει την τιμή 4 1508 01:19:31,460 --> 01:19:32,880 από το 4 ήταν το επιχείρημα. 1509 01:19:32,880 --> 01:19:35,826 >> ΚΟΙΝΟ: [δεν ακούγεται]; 1510 01:19:35,826 --> 01:19:37,880 >> ROB: n είναι μια τοπική μεταβλητή με μπαρ. 1511 01:19:37,880 --> 01:19:41,420 1512 01:19:41,420 --> 01:19:44,960 n εξακολουθεί να είναι το τοπικό έως το foo, αλλά Είναι μια παράμετρος για την foo. 1513 01:19:44,960 --> 01:19:48,190 Δεν είναι μια τοπική μεταβλητή. 1514 01:19:48,190 --> 01:19:48,546 Ναι; 1515 01:19:48,546 --> 01:19:51,180 >> ΚΟΙΝΟ: [δεν ακούγεται]; 1516 01:19:51,180 --> 01:19:55,400 >> ROB: foo είναι απλά καλώντας μπαρ και επιστροφή όποιες αποδόσεις μπαρ. 1517 01:19:55,400 --> 01:19:56,786 >> ΚΟΙΝΟ: [δεν ακούγεται]; 1518 01:19:56,786 --> 01:19:59,591 >> ROB: Ναι, ακριβώς για να δούμε πολλαπλές στοίβα καρέ. 1519 01:19:59,591 --> 01:20:00,082 Ναι; 1520 01:20:00,082 --> 01:20:03,519 >> ΚΟΙΝΟ: Γιατί ήταν foo ονομάζεται πριν printf; 1521 01:20:03,519 --> 01:20:05,920 >> ROB: Γιατί ήταν foo ονομάζεται πριν printf; 1522 01:20:05,920 --> 01:20:10,740 Γι 'αυτό και θα μπορούσε να έχει, αντ' αυτού, κάνει κάτι όπως int x ισούται με foo από 4 1523 01:20:10,740 --> 01:20:12,980 και στη συνέχεια εκτυπώνεται x. 1524 01:20:12,980 --> 01:20:17,900 Αλλά αντ 'αυτού, θα συνδυάζεται η λειτουργία καλέστε στο επιχείρημα printf. 1525 01:20:17,900 --> 01:20:23,670 >> Να σημειωθεί όμως ότι δεν μπορούμε στην πραγματικότητα εκτελέσει την κλήση με τις printf μέχρι να 1526 01:20:23,670 --> 01:20:25,610 καταλάβω τι foo 4 είναι. 1527 01:20:25,610 --> 01:20:27,480 Έτσι θα πάμε να την αξιολογήσει. 1528 01:20:27,480 --> 01:20:32,504 Και μόνο όταν γίνει αυτό θα για να έρθει πίσω και να αξιολογούν αυτό. 1529 01:20:32,504 --> 01:20:32,990 Ναι; 1530 01:20:32,990 --> 01:20:37,364 >> ΚΟΙΝΟ: Από δύο μπαρ [δεν ακούγεται] 1531 01:20:37,364 --> 01:20:41,738 αξία, γιατί δεν έχουμε [δεν ακούγεται]; 1532 01:20:41,738 --> 01:20:44,400 >> ROB: Θα πρέπει να είναι απόλυτα int. 1533 01:20:44,400 --> 01:20:46,260 Αυτό δεν πιάστηκε πάνω πολλαπλά περάσματα. 1534 01:20:46,260 --> 01:20:49,010 Γι 'αυτό θα πρέπει να είναι int bar και int foo αφού και οι δύο από αυτούς 1535 01:20:49,010 --> 01:20:50,460 επιστρέφουν ακέραιοι. 1536 01:20:50,460 --> 01:20:54,214 Void είναι μόνο εάν δεν πρόκειται να επιστρέψει πραγματικές τιμές. 1537 01:20:54,214 --> 01:20:54,692 Ναι; 1538 01:20:54,692 --> 01:20:58,038 >> ΚΟΙΝΟ: Αν είχατε μια γραμμή πάνω η απόδοση, [δεν ακούγεται]; 1539 01:20:58,038 --> 01:21:01,862 1540 01:21:01,862 --> 01:21:03,730 >> ROB: Μια γραμμή πάνω από την απόδοση; 1541 01:21:03,730 --> 01:21:04,410 >> ΚΟΙΝΟ: Ναι. 1542 01:21:04,410 --> 01:21:10,780 Όπως και αν κάνατε printf και [δεν ακούγεται], θα το εκτυπώσετε δύο φορές; 1543 01:21:10,780 --> 01:21:12,992 >> ROB: Έτσι, μέσα από την foo; 1544 01:21:12,992 --> 01:21:15,945 Αν είχαμε μια printf εδώ; 1545 01:21:15,945 --> 01:21:16,750 >> ΚΟΙΝΟ: Ναι. 1546 01:21:16,750 --> 01:21:19,510 >> ROB: Έτσι, αν είχαμε το δικαίωμα printf Εδώ, θα εκτυπώσετε μια φορά. 1547 01:21:19,510 --> 01:21:23,400 Από ζητούμε foo φορά σωστά εδώ, τότε θα χτυπήσει την printf. 1548 01:21:23,400 --> 01:21:24,620 Στη συνέχεια θα καλέσει μπαρ. 1549 01:21:24,620 --> 01:21:25,710 Και τότε foo θα επιστρέψει. 1550 01:21:25,710 --> 01:21:26,275 Και αυτό είναι όλο. 1551 01:21:26,275 --> 01:21:30,985 Συναντούμε μόνο ποτέ η printf φορά. 1552 01:21:30,985 --> 01:21:31,482 Ναι; 1553 01:21:31,482 --> 01:21:32,973 >> ΚΟΙΝΟ: [δεν ακούγεται] 1554 01:21:32,973 --> 01:21:37,950 printf καλώντας foo γιατί είμαστε οι πρώτοι καλώντας printf και τότε θα περνάτε 1555 01:21:37,950 --> 01:21:38,580 τα επιχειρήματα. 1556 01:21:38,580 --> 01:21:40,960 >> ROB: Έτσι, θεωρητικά, δεν είναι printf καλώντας foo; 1557 01:21:40,960 --> 01:21:42,220 Έτσι, δεν υπάρχει. 1558 01:21:42,220 --> 01:21:47,360 Απλά η σειρά που γ πρόκειται να εκτελέσει αυτά τα πράγματα είναι, πριν μπορούμε 1559 01:21:47,360 --> 01:21:49,800 καλέσετε μια συνάρτηση, όλα τα επιχειρήματα με τη λειτουργία πρέπει να 1560 01:21:49,800 --> 01:21:51,600 να αξιολογηθούν πλήρως. 1561 01:21:51,600 --> 01:21:53,540 Έτσι είναι αυτή αξιολογείται εντελώς; 1562 01:21:53,540 --> 01:21:54,610 Ναι, αυτό είναι μόνο ένα string. 1563 01:21:54,610 --> 01:21:55,480 Είναι ακριβώς μια τιμή. 1564 01:21:55,480 --> 01:21:57,200 >> Στη συνέχεια έχουμε την πλήρη αξιολογήσει αυτό. 1565 01:21:57,200 --> 01:21:59,720 Μόλις αυτό γίνει, τώρα όλα Τα επιχειρήματα της αξιολογούνται. 1566 01:21:59,720 --> 01:22:01,982 Και τώρα μπορούμε να κάνουμε το καλέστε στο printf. 1567 01:22:01,982 --> 01:22:02,478 Ναι; 1568 01:22:02,478 --> 01:22:03,966 >> ΚΟΙΝΟ: Μια ερώτηση. 1569 01:22:03,966 --> 01:22:06,942 Εάν έχετε μια συνάρτηση κενό, πρέπει να έχετε ερωτηματικό επιστροφή; 1570 01:22:06,942 --> 01:22:09,910 >> ROB: Δεν κάνετε ένα ερωτηματικό επιστροφή αν έχετε μια συνάρτηση κενό. 1571 01:22:09,910 --> 01:22:13,370 1572 01:22:13,370 --> 01:22:14,780 OK. 1573 01:22:14,780 --> 01:22:15,830 Μέχρι τώρα κάποια πράγματα σωρού. 1574 01:22:15,830 --> 01:22:19,640 Έτσι σωρός είναι το πώς θα πάμε να αντιμετωπίσουμε με δυναμική διαχείριση μνήμης. 1575 01:22:19,640 --> 01:22:23,100 Και αυτό έρχεται σε άμεση επαφή με το stack που θα ονομάζαμε αυτόματη 1576 01:22:23,100 --> 01:22:24,100 διαχείριση μνήμης. 1577 01:22:24,100 --> 01:22:27,140 >> Έτσι, στη στοίβα, δεν έχετε πραγματικά να ασχοληθεί με το πώς οι τοπικές μεταβλητές 1578 01:22:27,140 --> 01:22:30,400 ωθούνται και πετάχτηκε μακριά όλα αυτά τα πλαίσια στοίβα και όλα αυτά τα πράγματα. 1579 01:22:30,400 --> 01:22:31,070 Δεν χρειάζεται να ανησυχείτε γι 'αυτό. 1580 01:22:31,070 --> 01:22:32,070 Είναι αυτόματο. 1581 01:22:32,070 --> 01:22:36,990 Έτσι, ο σωρός είναι χειροκίνητη. 1582 01:22:36,990 --> 01:22:38,070 Και η [δεν ακούγεται] 1583 01:22:38,070 --> 01:22:41,260 προέρχεται από αυτές τις λειτουργίες malloc και δωρεάν. 1584 01:22:41,260 --> 01:22:43,550 >> Έτσι, εδώ είναι ένα άλλο πρόγραμμα. 1585 01:22:43,550 --> 01:22:47,145 Όλοι κάνουμε είναι mallocing ένας ακέραιος. 1586 01:22:47,145 --> 01:22:49,360 Είμαστε το αποθηκεύει στο αστέρι x. 1587 01:22:49,360 --> 01:22:52,520 Φυσικά, θα πρέπει να ελέγξετε για να δούμε αν το x είναι μηδενική. 1588 01:22:52,520 --> 01:22:56,400 Στη συνέχεια θα πάμε να ορίσετε ακριβώς τι x είναι στραμμένη προς το 50. 1589 01:22:56,400 --> 01:23:00,350 1590 01:23:00,350 --> 01:23:03,260 Εκτύπωση ποια x είναι επισημαίνοντας, print x, και στη συνέχεια ελεύθερη x. 1591 01:23:03,260 --> 01:23:08,920 >> Λοιπόν, πώς είναι αυτό πραγματικά πρόκειται να δούμε αν κοιτάξουμε στοίβα και σωρός μας; 1592 01:23:08,920 --> 01:23:10,950 Έτσι, θα αρχίσουμε πάλι. 1593 01:23:10,950 --> 01:23:12,580 Το κάτω μέρος της στοίβας μας όπως και πριν. 1594 01:23:12,580 --> 01:23:15,930 Να θυμάστε ότι σου σωρό άμεσα αντιτίθεται στη στοίβα; 1595 01:23:15,930 --> 01:23:18,850 Έτσι θα πάμε να έχουν το κορυφή του σωρού μας μέχρι εκεί. 1596 01:23:18,850 --> 01:23:22,590 >> Ώστε το κάτω μέρος της στοίβας μας, έχουμε πλαίσιο stack μας για τις κύριες. 1597 01:23:22,590 --> 01:23:28,000 Έχει το χώρο για argc, argv, και εμείς τώρα έχουν μια τοπική μεταβλητή x, η οποία 1598 01:23:28,000 --> 01:23:30,030 είναι ένα αστέρι int. 1599 01:23:30,030 --> 01:23:32,240 Έτσι θα πάμε να επαναλάβει μέσω αυτού του προγράμματος. 1600 01:23:32,240 --> 01:23:34,420 Το πρώτο πράγμα που έχουμε είναι μια πρόσκληση για malloc. 1601 01:23:34,420 --> 01:23:36,250 >> Έτσι είμαστε κάνει μια κλήση με malloc. 1602 01:23:36,250 --> 01:23:37,100 Malloc είναι μια λειτουργία. 1603 01:23:37,100 --> 01:23:38,770 Είναι πρόκειται να πάρει ένα πλαίσιο στοίβας. 1604 01:23:38,770 --> 01:23:40,180 Τι μπορούμε να περάσουμε σε malloc; 1605 01:23:40,180 --> 01:23:41,610 Αυτό πρόκειται να πάει μέσα του πλαισίου στοίβας. 1606 01:23:41,610 --> 01:23:45,130 Είμαστε περνώντας το μέγεθος του n, η οποία είναι 4. 1607 01:23:45,130 --> 01:23:49,700 Έτσι ώστε να περνά στην malloc. 1608 01:23:49,700 --> 01:23:50,910 >> Τι κάνει malloc κάνει; 1609 01:23:50,910 --> 01:23:53,820 Μας πιάνει λίγο χώρο στο σωρό. 1610 01:23:53,820 --> 01:23:55,320 Έτσι θα πάμε για να πάει στο σωρό. 1611 01:23:55,320 --> 01:23:57,990 Και θα πάμε για να αρπάξει 4 bytes από το σωρό. 1612 01:23:57,990 --> 01:24:01,500 Οπότε ας δώσουμε ότι μια αυθαίρετη διεύθυνση. 1613 01:24:01,500 --> 01:24:06,680 0x123 Απλά προσποιηθείτε ότι είναι ένα διεύθυνση που βρίσκεται στο σωρό. 1614 01:24:06,680 --> 01:24:12,300 >> Έτσι, ό, τι είναι στην πραγματικότητα μέσα από αυτό περιοχή της μνήμης στη διεύθυνση Ox123; 1615 01:24:12,300 --> 01:24:13,080 Σκουπίδια. 1616 01:24:13,080 --> 01:24:15,270 Γι 'αυτό και δεν έχετε αποθηκεύσει τίποτα σε αυτό. 1617 01:24:15,270 --> 01:24:18,830 Έτσι, όσο γνωρίζουμε, αυτό θα μπορούσε να είναι οτιδήποτε. 1618 01:24:18,830 --> 01:24:20,560 Δεν πρέπει να υποθέσουμε ότι είναι μηδέν. 1619 01:24:20,560 --> 01:24:23,870 Είναι πιο πιθανό να μην το μηδέν. 1620 01:24:23,870 --> 01:24:26,260 >> Μέχρι τώρα malloc επιστρέφει. 1621 01:24:26,260 --> 01:24:28,020 Και τι κάνουμε όταν επιστρέφει malloc; 1622 01:24:28,020 --> 01:24:29,800 Θέσαμε αυτό επιστρέφει. 1623 01:24:29,800 --> 01:24:32,290 Θέτουμε x ίσο με αυτό να επιστρέφει. 1624 01:24:32,290 --> 01:24:33,690 Έτσι τι είναι αυτό που επιστρέφει; 1625 01:24:33,690 --> 01:24:38,150 Είναι επιστροφή 0x123 δεδομένου ότι είναι η διεύθυνση του μπλοκ της μνήμης που 1626 01:24:38,150 --> 01:24:40,850 μόλις διατεθεί στο σωρό. 1627 01:24:40,850 --> 01:24:47,160 >> Έτσι επιστρέφουν 0x123 x είναι τώρα πρόκειται να οριστεί ίση με 0x123 οποία, εικαστικά, 1628 01:24:47,160 --> 01:24:52,940 εμείς συχνά επιστήσει ως x έχει αποκτημένο βέλος που δείχνει σε αυτό το μπλοκ. 1629 01:24:52,940 --> 01:24:55,820 Αλλά το x είναι ακριβώς αποθήκευση αυτή τη διεύθυνση. 1630 01:24:55,820 --> 01:24:58,670 Έτσι τώρα θα πρέπει να ελέγξετε αν το x είναι μηδενική. 1631 01:24:58,670 --> 01:24:59,120 Δεν είναι null. 1632 01:24:59,120 --> 01:25:02,170 Εμείς προσποιούμαστε ότι malloc πέτυχε. 1633 01:25:02,170 --> 01:25:04,950 >> Μέχρι τώρα αστέρι x ισούται με 50. 1634 01:25:04,950 --> 01:25:08,450 Έτσι αστέρι θυμάται αυτό σημαίνει πηγαίνετε σε αυτή τη διεύθυνση. 1635 01:25:08,450 --> 01:25:12,700 Έτσι 0x123 Εμείς πάμε για να πηγαίνετε σε αυτή τη διεύθυνση. 1636 01:25:12,700 --> 01:25:14,660 Και αυτό μας φέρνει μέχρι εκεί. 1637 01:25:14,660 --> 01:25:16,310 Τι κάνουμε σε αυτή τη διεύθυνση; 1638 01:25:16,310 --> 01:25:19,020 Είμαστε αποθήκευση 50. 1639 01:25:19,020 --> 01:25:22,500 >> Έτσι, μετά από αυτή τη γραμμή, αυτό είναι ό, τι Τα πράγματα πρόκειται να μοιάσει. 1640 01:25:22,500 --> 01:25:24,640 Μέχρι τώρα δεν είναι πλέον σκουπίδια εκεί. 1641 01:25:24,640 --> 01:25:28,910 Τώρα γνωρίζουμε ότι το 50 είναι το ότι συγκεκριμένη διεύθυνση, επειδή 1642 01:25:28,910 --> 01:25:32,410 εμείς θα οριστεί σε αυτό. 1643 01:25:32,410 --> 01:25:32,790 Εντάξει; 1644 01:25:32,790 --> 01:25:34,370 Έτσι τώρα θα πάμε για να εκτυπώσετε f. 1645 01:25:34,370 --> 01:25:38,490 >> Έτσι, πρώτα θα πάμε για να εκτυπώσετε αστέρι x. 1646 01:25:38,490 --> 01:25:39,640 Έτσι τι είναι αστέρι x; 1647 01:25:39,640 --> 01:25:44,300 Και πάλι, αστέρι x σημαίνει να πάει να το πράγμα που x είναι στραμμένη στο. 1648 01:25:44,300 --> 01:25:47,140 Έτσι, x είναι η αποθήκευση 0x123 Μετάβαση σε αυτό. 1649 01:25:47,140 --> 01:25:48,490 Παίρνουμε 50. 1650 01:25:48,490 --> 01:25:50,540 Έτσι εκτυπώσετε στ αυτό. 1651 01:25:50,540 --> 01:25:54,900 Και αυτό σημαίνει ότι πρόκειται να εκτυπώσετε 50. 1652 01:25:54,900 --> 01:25:56,850 Και στη συνέχεια, που επιστρέφει. 1653 01:25:56,850 --> 01:25:58,340 >> Και στη συνέχεια, έχουμε τη δεύτερη printf. 1654 01:25:58,340 --> 01:25:59,370 Είμαστε πλέον τοις εκατό p. 1655 01:25:59,370 --> 01:26:01,680 Αν δεν το έχετε δει, ότι είναι ακριβώς πώς μπορείτε να εκτυπώσετε ένα δείκτη. 1656 01:26:01,680 --> 01:26:04,960 Έτσι έχουμε τοις εκατό i, τοις εκατό f, και όλα αυτά που έχουν ήδη. 1657 01:26:04,960 --> 01:26:07,160 Έτσι τοις εκατό p, εκτυπώστε ένα δείκτη. 1658 01:26:07,160 --> 01:26:08,920 >> Έτσι, x είναι ένας δείκτης. 1659 01:26:08,920 --> 01:26:13,440 Έτσι, αν πρόκειται να εκτυπώσετε x ίδιο, είμαστε εκτυπώνετε ό, τι είναι στην πραγματικότητα μέσα 1660 01:26:13,440 --> 01:26:19,220 Χ, το οποίο είναι 0x123 Έτσι, η πρώτη print f πρόκειται να εκτυπώσετε 50. 1661 01:26:19,220 --> 01:26:23,620 Η δεύτερη εκτύπωση f πρόκειται να εκτυπώσετε 0x123 Ναι; 1662 01:26:23,620 --> 01:26:27,460 >> ΚΟΙΝΟ: Χρησιμοποιείτε τοις εκατό x για να εκτυπώσετε ένα δείκτη; 1663 01:26:27,460 --> 01:26:31,200 >> ROB: Έτσι δεν μπορείτε να χρησιμοποιήσετε τοις εκατό x για να εκτυπώσετε ένα δείκτη; 1664 01:26:31,200 --> 01:26:38,350 Έτσι, μπορείτε, αλλά τοις εκατό x είναι απλά, γενικά, για όπως εάν έχετε κάποια 1665 01:26:38,350 --> 01:26:40,325 ακέραιο και θέλετε να εκτυπώσετε ως ένα δεκαεξαδικό. 1666 01:26:40,325 --> 01:26:43,250 1667 01:26:43,250 --> 01:26:44,880 Αυτό είναι ακριβώς το πώς θα το κάνουμε αυτό. 1668 01:26:44,880 --> 01:26:47,160 >> Ότι, τοις εκατό d θα εκτύπωση ως δεκαδικά. 1669 01:26:47,160 --> 01:26:50,310 Αυτό ήταν παίρνουμε τοις εκατό d. i είναι μόνο ακέραιος. 1670 01:26:50,310 --> 01:26:52,690 τοις εκατό p είναι ειδικά για τους δείκτες. 1671 01:26:52,690 --> 01:26:54,060 >> Έτσι, x είναι ένας δείκτης. 1672 01:26:54,060 --> 01:26:56,360 Θέλουμε να χρησιμοποιήσετε τοις εκατό p. 1673 01:26:56,360 --> 01:26:57,937 Αλλά τοις εκατό x θα μπορούσε να λειτουργήσει. 1674 01:26:57,937 --> 01:26:58,414 Ναι; 1675 01:26:58,414 --> 01:26:59,664 >> ΚΟΙΝΟ: [δεν ακούγεται]; 1676 01:26:59,664 --> 01:27:04,138 1677 01:27:04,138 --> 01:27:05,388 >> ROB: Ναι. 1678 01:27:05,388 --> 01:27:07,870 1679 01:27:07,870 --> 01:27:13,440 Τουλάχιστον για αυτό call-- έτσι δεν θα περιλαμβάνουν το εδώ. 1680 01:27:13,440 --> 01:27:19,850 Αλλά αυτά τα δύο επιχειρήματα είναι απαραίτητα μέσα από αυτό το πλαίσιο στοίβας 1681 01:27:19,850 --> 01:27:23,040 μαζί με τυχόν τοπικές μεταβλητές printf συμβαίνει να χρησιμοποιούν. 1682 01:27:23,040 --> 01:27:27,020 Και τότε η επόμενη κλήση να printf τώρα στο εσωτερικό της printf πλαίσιο στοίβας είναι 1683 01:27:27,020 --> 01:27:33,960 τοις εκατό σ backslash n και ανεξάρτητα από το τιμή του χ είναι, το οποίο είναι 0x123. 1684 01:27:33,960 --> 01:27:34,425 Ναι; 1685 01:27:34,425 --> 01:27:35,675 >> ΚΟΙΝΟ: [δεν ακούγεται]; 1686 01:27:35,675 --> 01:27:38,145 1687 01:27:38,145 --> 01:27:40,880 >> ROB: Θα εκτυπώσετε κάτι που μοιάζει με αυτό. 1688 01:27:40,880 --> 01:27:41,846 >> ΚΟΙΝΟ: [δεν ακούγεται]. 1689 01:27:41,846 --> 01:27:44,510 >> ROB: Έτσι τυπώνει σε μορφή διεύθυνσης. 1690 01:27:44,510 --> 01:27:47,003 Μοιάζει με μια διεύθυνση. 1691 01:27:47,003 --> 01:27:47,494 Ναι; 1692 01:27:47,494 --> 01:27:49,458 >> ΚΟΙΝΟ: [δεν ακούγεται]; 1693 01:27:49,458 --> 01:27:51,075 >> ROB: Γιατί είναι αυτό; 1694 01:27:51,075 --> 01:27:52,920 >> ΚΟΙΝΟ: [δεν ακούγεται]; 1695 01:27:52,920 --> 01:27:55,240 >> ROB: Γιατί είναι αυτό το δείκτη 4 bytes; 1696 01:27:55,240 --> 01:27:58,500 Έτσι, υπάρχουν ένα σωρό από 0 μπροστά από αυτό. 1697 01:27:58,500 --> 01:28:03,740 Έτσι, είναι πραγματικά 0x0000000123. 1698 01:28:03,740 --> 01:28:06,510 Σε ένα σύστημα 64-bit, θα υπάρξουν ένα σωρό περισσότερα μηδενικά. 1699 01:28:06,510 --> 01:28:11,410 1700 01:28:11,410 --> 01:28:11,900 Ναι; 1701 01:28:11,900 --> 01:28:13,150 >> ΚΟΙΝΟ: [δεν ακούγεται]. 1702 01:28:13,150 --> 01:28:17,290 1703 01:28:17,290 --> 01:28:21,130 >> ROB: Έτσι, η πρώτη printf πρόκειται να print-- 1704 01:28:21,130 --> 01:28:21,980 >> ΚΟΙΝΟ: [δεν ακούγεται]. 1705 01:28:21,980 --> 01:28:24,420 >> ROB: Ναι, πρόκειται για την εκτύπωση ποια x είναι στραμμένη προς. 1706 01:28:24,420 --> 01:28:27,030 1707 01:28:27,030 --> 01:28:29,070 Κατηγορία λέει τι είναι αυτό πράγμα που δείχνει να. 1708 01:28:29,070 --> 01:28:30,300 Πιάσε αυτό. 1709 01:28:30,300 --> 01:28:31,455 Έτσι τι είναι αυτό που δείχνει να; 1710 01:28:31,455 --> 01:28:31,850 50. 1711 01:28:31,850 --> 01:28:32,410 Πιάσε αυτό. 1712 01:28:32,410 --> 01:28:33,390 Γι 'αυτό θα πάμε να εκτυπώσετε. 1713 01:28:33,390 --> 01:28:37,020 Ότι, το επόμενο, είμαστε Απλά εκτύπωση x ίδιο. 1714 01:28:37,020 --> 01:28:38,850 Τι είναι το εσωτερικό της f; 1715 01:28:38,850 --> 01:28:43,710 0x123. 1716 01:28:43,710 --> 01:28:44,500 OK. 1717 01:28:44,500 --> 01:28:46,620 >> Και τότε, επιτέλους, έχουμε την ελεύθερη. 1718 01:28:46,620 --> 01:28:48,040 Τι περνάμε να ελευθερώσει; 1719 01:28:48,040 --> 01:28:49,470 Είμαστε περνώντας x. 1720 01:28:49,470 --> 01:28:52,380 Εκείνη την εποχή εγώ πραγματικά εμφανίζεται αυτό το πλαίσιο στοίβας. 1721 01:28:52,380 --> 01:28:56,370 >> Έτσι είμαστε περνώντας την τιμή 0x123 να ελευθερώσει. 1722 01:28:56,370 --> 01:28:59,070 Μέχρι τώρα δωρεάν ξέρει, εντάξει, Θα πρέπει να ανεβείτε στο σωρό 1723 01:28:59,070 --> 01:29:00,050 και χωρίς αυτή η μνήμη. 1724 01:29:00,050 --> 01:29:03,920 Είναι πλέον χρησιμοποιώντας αυτό βρίσκεται στη διεύθυνση 0x123. 1725 01:29:03,920 --> 01:29:07,010 >> Έτσι, χωρίς πρόκειται να κυκλοφορήσει ότι από το σωρό. 1726 01:29:07,010 --> 01:29:09,490 Τώρα σωρό μας είναι και πάλι άδειο. 1727 01:29:09,490 --> 01:29:11,120 Δεν έχουμε διαρροές μνήμης. 1728 01:29:11,120 --> 01:29:12,940 Τώρα δωρεάν θα επιστρέψει. 1729 01:29:12,940 --> 01:29:16,130 Παρατηρήστε ότι το x είναι ακόμα 0x123. 1730 01:29:16,130 --> 01:29:18,240 Αλλά αυτό δεν είναι πλέον έγκυρη μνήμη. 1731 01:29:18,240 --> 01:29:21,220 1732 01:29:21,220 --> 01:29:23,986 Θα πρέπει πλέον να dereference x. 1733 01:29:23,986 --> 01:29:24,440 Ναι; 1734 01:29:24,440 --> 01:29:27,240 >> ΚΟΙΝΟ: Είναι επιστρέψει 0 περιττή; 1735 01:29:27,240 --> 01:29:28,290 >> ROB: Είναι returen 0 περιττή; 1736 01:29:28,290 --> 01:29:31,110 Ναι. 1737 01:29:31,110 --> 01:29:33,950 Εμείς απλά βάλτε ότι υπάρχει, διότι έχουμε μια επιστροφή ένας για τον αέρα. 1738 01:29:33,950 --> 01:29:36,830 Έτσι είναι όπως, ναι, αφήνει περιλαμβάνουν την επιστροφή 0. 1739 01:29:36,830 --> 01:29:37,310 Ναι; 1740 01:29:37,310 --> 01:29:38,560 >> ΚΟΙΝΟ: [δεν ακούγεται]; 1741 01:29:38,560 --> 01:29:42,110 1742 01:29:42,110 --> 01:29:45,580 >> ROB: Έτσι, μετά από ελεύθερη x, τι θα συμβεί αν προσπαθούμε να dereference το δείκτη; 1743 01:29:45,580 --> 01:29:47,240 Είναι πιθανό ότι τίποτα δεν πάει στραβά. 1744 01:29:47,240 --> 01:29:49,330 Είναι πιθανό ότι θα πάρει ακόμα 50. 1745 01:29:49,330 --> 01:29:53,590 >> Είναι δυνατόν, επίσης, ότι η μνήμη είναι τώρα χρησιμοποιείται για κάτι άλλο. 1746 01:29:53,590 --> 01:29:57,140 Έτσι είναι απροσδιόριστη συμπεριφορά. 1747 01:29:57,140 --> 01:30:00,772 Και απροσδιόριστη σημαίνει τίποτα μπορεί να συμβεί. 1748 01:30:00,772 --> 01:30:01,250 Ναι; 1749 01:30:01,250 --> 01:30:02,500 >> ΚΟΙΝΟ: [δεν ακούγεται]; 1750 01:30:02,500 --> 01:30:07,942 1751 01:30:07,942 --> 01:30:10,830 >> ROB: Όχι, οπότε αν έχετε αναθέσει x σε κάτι άλλο. 1752 01:30:10,830 --> 01:30:15,870 Έτσι, αν εδώ είπαμε x ισούται με malloc κάτι else-- 1753 01:30:15,870 --> 01:30:17,100 malloc μέγεθος event-- 1754 01:30:17,100 --> 01:30:20,180 στη συνέχεια, ότι το αρχικό μπλοκ της μνήμης δεν έχει απελευθερωθεί. 1755 01:30:20,180 --> 01:30:21,490 Και έχουμε χάσει επίσημα. 1756 01:30:21,490 --> 01:30:23,150 Αυτό είναι μια διαρροή μνήμης. 1757 01:30:23,150 --> 01:30:25,090 Χάσαμε όλες τις αναφορές στο εν λόγω μπλοκ μνήμης. 1758 01:30:25,090 --> 01:30:26,827 Έτσι, δεν υπάρχει κανένας τρόπος που μπορούμε να το απελευθερώσει ποτέ. 1759 01:30:26,827 --> 01:30:32,074 1760 01:30:32,074 --> 01:30:36,630 Εντάξει, έτσι ώστε στη συνέχεια να επιστρέψει 0 μέσα γίνεται. 1761 01:30:36,630 --> 01:30:37,900 >> Εντάξει, έτσι υπερχείλισης στοίβας. 1762 01:30:37,900 --> 01:30:39,320 Ποια είναι η ιδέα εδώ; 1763 01:30:39,320 --> 01:30:41,210 Έτσι θυμηθείτε, σωρός πηγαίνει προς τα κάτω. 1764 01:30:41,210 --> 01:30:43,480 Stack ανεβαίνει. 1765 01:30:43,480 --> 01:30:48,000 Έτσι, αυτό ήταν το παράδειγμα από τη διάλεξη, Νομίζω ότι, όταν ο κύριος είναι ακριβώς πρόκειται να 1766 01:30:48,000 --> 01:30:51,380 ονομάζουμε συνάρτηση foo, ο οποίος θα να αυτοαποκαλείται αναδρομικά πάνω και 1767 01:30:51,380 --> 01:30:52,320 ξανά. 1768 01:30:52,320 --> 01:30:55,370 >> Έτσι στοίβα τα πλαίσια πρόκειται να λειτουργούν ακριβώς το ίδιο. 1769 01:30:55,370 --> 01:30:58,130 Έτσι θα πάμε για να ξεκινήσει με την κύρια ως το κάτω πλαίσιο στοίβας. 1770 01:30:58,130 --> 01:31:02,000 Στη συνέχεια, κύρια πρόκειται να καλέσετε foo, ο οποίος πρόκειται να πάρει ένα πλαίσιο στοίβας. 1771 01:31:02,000 --> 01:31:04,260 >> Στη συνέχεια foo πρόκειται να καλέσετε foo και πάλι, η οποία πρόκειται να πάρει 1772 01:31:04,260 --> 01:31:05,500 ένα άλλο πλαίσιο στοίβας. 1773 01:31:05,500 --> 01:31:08,270 Και στη συνέχεια ξανά, και ξανά, και ξανά, και ξανά έως ότου, τελικά, τρέχουμε 1774 01:31:08,270 --> 01:31:09,190 εντός του σωρού. 1775 01:31:09,190 --> 01:31:11,990 Έτσι, αυτό είναι το πώς θα πάρετε υπερχείλιση στοίβας. 1776 01:31:11,990 --> 01:31:14,910 Και σε αυτό το σημείο, μπορείτε SEG σφάλμα. 1777 01:31:14,910 --> 01:31:17,335 Ή θέλετε πραγματικά seg fault πριν αυτό το σημείο, αλλά ναι. 1778 01:31:17,335 --> 01:31:19,660 >> ΚΟΙΝΟ: Είναι πυρήνα χωματερή η ίδια όπως seg σφάλμα; 1779 01:31:19,660 --> 01:31:26,140 >> ROB: Έτσι θα δείτε κατάτμηση πυρήνα βλάβης που αποτελούν αντικείμενο ντάμπινγκ. 1780 01:31:26,140 --> 01:31:28,760 Μπορείτε να πάρετε μια χωματερή πυρήνα όταν Σας SEG σφάλμα. 1781 01:31:28,760 --> 01:31:32,580 Και είναι σαν μια χωματερή από όλα τα περιεχόμενο της τρέχουσας μνήμης σας, έτσι ώστε 1782 01:31:32,580 --> 01:31:36,670 ότι μπορείτε να δοκιμάσετε και να προσδιορίσει γιατί SEG επικριθεί. 1783 01:31:36,670 --> 01:31:37,135 Ναι; 1784 01:31:37,135 --> 01:31:38,385 >> ΚΟΙΝΟ: [δεν ακούγεται]; 1785 01:31:38,385 --> 01:31:40,855 1786 01:31:40,855 --> 01:31:45,460 >> ROB: Έτσι, ένα μέσο σφάλμα κατάτμησης υπάρχει μια υπερχείλιση στοίβας. 1787 01:31:45,460 --> 01:31:47,060 Έτσι, δεν είναι απαραίτητα. 1788 01:31:47,060 --> 01:31:49,880 Ένα σφάλμα κατάτμησης σημαίνει ότι είστε αγγίζοντας μνήμη με έναν τρόπο 1789 01:31:49,880 --> 01:31:50,880 δεν πρέπει να είναι. 1790 01:31:50,880 --> 01:31:54,750 Έτσι, ένας τρόπος για να συμβεί αυτό είναι, όταν μπορείτε στοίβα υπερχείλιση, αρχίζουμε συγκινητικό 1791 01:31:54,750 --> 01:31:58,736 μνήμη με έναν τρόπο που δεν θα έπρεπε να είναι. 1792 01:31:58,736 --> 01:31:59,208 Ναι; 1793 01:31:59,208 --> 01:32:00,458 >> ΚΟΙΝΟ: [δεν ακούγεται]; 1794 01:32:00,458 --> 01:32:03,456 1795 01:32:03,456 --> 01:32:05,830 >> ROB: Έτσι, μέσα από ένα άπειρο βρόχο. 1796 01:32:05,830 --> 01:32:08,770 Όπως, αυτό είναι σαν ένα αναδρομικό άπειρο βρόχου και έτσι έχουμε ένα άλλο 1797 01:32:08,770 --> 01:32:09,770 στοίβα καρέ κάθε φορά. 1798 01:32:09,770 --> 01:32:13,540 Αλλά ακριβώς μέσα από ένα κανονικό άπειρο, ενώ ένα-- 1799 01:32:13,540 --> 01:32:16,390 καλά, ας μην ακόμη και να εκτυπώσετε F-- 1800 01:32:16,390 --> 01:32:17,040 κάνει κάτι. 1801 01:32:17,040 --> 01:32:18,390 Όποια και αν είναι. 1802 01:32:18,390 --> 01:32:20,610 >> Εμείς δεν πρόκειται να πάρει ένα άλλο πλαίσιο στοίβας. 1803 01:32:20,610 --> 01:32:22,530 Εμείς απλά θα κρατήσει looping πάνω από αυτή την απλή εντολή. 1804 01:32:22,530 --> 01:32:23,920 Η στοίβα δεν αυξάνεται. 1805 01:32:23,920 --> 01:32:27,290 Είναι το γεγονός ότι κάθε αναδρομικό κλήση μας δίνει ένα πλαίσιο στοίβας. 1806 01:32:27,290 --> 01:32:31,231 Αυτός είναι ο λόγος για τον οποίο έχουμε μια υπερχείλιση στοίβας. 1807 01:32:31,231 --> 01:32:31,728 Ναι; 1808 01:32:31,728 --> 01:32:38,189 >> ΚΟΙΝΟ: Έτσι, αν είπε να πάρει το while loop και στη συνέχεια [δεν ακούγεται]; 1809 01:32:38,189 --> 01:32:42,000 >> ROB: Έτσι, αν στο εσωτερικό του βρόχου while υπήρχε μια printf, μπορείτε ακόμα θα 1810 01:32:42,000 --> 01:32:42,790 Δεν seg σφάλμα. 1811 01:32:42,790 --> 01:32:46,090 Απλά δεν θέλουν να συγχέουμε τα πράγματα. 1812 01:32:46,090 --> 01:32:46,610 Θα ήταν βρόχο. 1813 01:32:46,610 --> 01:32:48,225 Εσείς προτίθεστε να πάρετε μια ενιαία στοίβα το πλαίσιο για την printf. 1814 01:32:48,225 --> 01:32:49,580 >> Στη συνέχεια printf θα επιστρέψει. 1815 01:32:49,580 --> 01:32:50,280 Στη συνέχεια, θα έπαιρνα και πάλι βρόχο. 1816 01:32:50,280 --> 01:32:51,460 Εσείς προτίθεστε να πάρετε μια ενιαία στοίβα το πλαίσιο για την printf. 1817 01:32:51,460 --> 01:32:52,850 Θα επιστρέψει. 1818 01:32:52,850 --> 01:32:54,060 Ενιαίο πλαίσιο στοίβας. 1819 01:32:54,060 --> 01:33:00,215 Έτσι, δεν έχετε πάρει αυτό το άπειρο συσσωρεύονται πλαίσια στοίβα. 1820 01:33:00,215 --> 01:33:03,185 >> ΚΟΙΝΟ: [δεν ακούγεται]; 1821 01:33:03,185 --> 01:33:04,040 >> ROB: Ναι. 1822 01:33:04,040 --> 01:33:09,360 Έτσι, αυτή η υπερχείλιση στοίβας συμβαίνει γιατί κανένα από αυτά 1823 01:33:09,360 --> 01:33:11,600 Οι κλήσεις για την foo επιστροφή. 1824 01:33:11,600 --> 01:33:15,250 Έτσι, αν επιστρέψει, τότε θα αρχίσει να χάσουν πλαίσια στοίβα. 1825 01:33:15,250 --> 01:33:17,870 Και τότε δεν θα στοίβα υπερχείλιση. 1826 01:33:17,870 --> 01:33:20,070 Και γι 'αυτό θα πρέπει να έχετε μια βασική περίπτωση για την προσωπική σας λειτουργίες. 1827 01:33:20,070 --> 01:33:22,992 1828 01:33:22,992 --> 01:33:23,479 Ναι; 1829 01:33:23,479 --> 01:33:27,375 >> ΚΟΙΝΟ: Είναι το δυνητικό μέγεθος και η στοίβα για το σωρό το ίδιο για 1830 01:33:27,375 --> 01:33:29,880 όλα τα προγράμματα; 1831 01:33:29,880 --> 01:33:31,910 >> ROB: Περίπου. 1832 01:33:31,910 --> 01:33:35,090 Είναι η δυνητική μέγεθος της στοίβας και ο σωρός το ίδιο για όλα τα προγράμματα; 1833 01:33:35,090 --> 01:33:37,180 Περίπου. 1834 01:33:37,180 --> 01:33:40,080 Υπάρχει κάποια τυχαιοποίηση προς όπου ξεκινά η στοίβα και 1835 01:33:40,080 --> 01:33:42,400 όπου ο σωρός αρχίζει. 1836 01:33:42,400 --> 01:33:45,870 Αν συμβαίνει να έχουν ένα σωρό καθολικές μεταβλητές και τα πράγματα, ίσως 1837 01:33:45,870 --> 01:33:49,520 πάρει από κάποιο διάστημα για το σωρό σας. 1838 01:33:49,520 --> 01:33:54,060 >> Σε ένα σύστημα 64-bit, μπορείτε σχεδόν έχει άπειρη μνήμη. 1839 01:33:54,060 --> 01:33:55,820 Υπάρχει μόνο τόσο πολύ. 1840 01:33:55,820 --> 01:33:59,250 Μεταξύ 32 bits και 64 bits, ότι είναι μια σημαντική διαφορά. 1841 01:33:59,250 --> 01:34:02,350 >> Θα πάμε για να πάρει ένα σωρό άλλα στοίβα και χώρου σωρού σε μια έκδοση 64-bit 1842 01:34:02,350 --> 01:34:05,810 συστήματος, επειδή υπάρχει μόνο περισσότερα διευθύνσεις που μπορούν να χρησιμοποιήσουν. 1843 01:34:05,810 --> 01:34:09,360 Αλλά για ένα μεμονωμένο σύστημα, αυτό θα να είναι περίπου το ίδιο ποσό της στοίβας 1844 01:34:09,360 --> 01:34:10,785 και χώρο σωρού. 1845 01:34:10,785 --> 01:34:13,635 1846 01:34:13,635 --> 01:34:15,530 Εντάξει. 1847 01:34:15,530 --> 01:34:18,220 >> Έτσι το τελευταίο πράγμα είναι συλλογή. 1848 01:34:18,220 --> 01:34:19,810 Έτσι, θα πρέπει να γνωρίζετε αυτή τη διαδικασία. 1849 01:34:19,810 --> 01:34:22,240 Υπάρχουν τέσσερα μεγάλα βήματα. 1850 01:34:22,240 --> 01:34:24,400 Έτσι, η πρώτη θα πρέπει να είναι εύκολο να θυμάστε. 1851 01:34:24,400 --> 01:34:25,085 Προ-επεξεργασία. 1852 01:34:25,085 --> 01:34:28,390 Έχει το πρόθεμα προ σε αυτό. 1853 01:34:28,390 --> 01:34:32,080 Γι 'αυτό έρχεται πριν από οτιδήποτε άλλο. 1854 01:34:32,080 --> 01:34:34,000 >> Το πράγμα που πρέπει να θυμάστε είναι το hash. 1855 01:34:34,000 --> 01:34:37,250 Έτσι hash καθορίζει και κατακερματισμού περιλαμβάνει σε όλα αυτά. 1856 01:34:37,250 --> 01:34:39,560 Αυτά είναι όλα τα προ-επεξεργαστή οδηγιών. 1857 01:34:39,560 --> 01:34:42,030 Αυτά είναι τα πράγματα που οι προ-επεξεργαστής φροντίζει. 1858 01:34:42,030 --> 01:34:43,680 >> Έτσι, αυτό που κάνει ο προ-επεξεργαστής κάνει; 1859 01:34:43,680 --> 01:34:44,850 Είναι μια πραγματικά χαζή πράγμα. 1860 01:34:44,850 --> 01:34:49,380 Όλα είναι ικανά να είναι όλα αυτά αντιγραφής και κομμένα και επικόλληση λειτουργίες. 1861 01:34:49,380 --> 01:34:51,790 >> Έτσι hash περιλαμβάνει πρότυπο i0 dot h. 1862 01:34:51,790 --> 01:34:52,990 Τι είναι αυτό που κάνει; 1863 01:34:52,990 --> 01:34:56,610 Αρπάζουν το πρότυπο i0 dot h αρχείο και να επικολλήσετε στην κορυφή 1864 01:34:56,610 --> 01:34:58,960 όπου λέει hash περιλαμβάνει πρότυπο i0 dot h. 1865 01:34:58,960 --> 01:35:02,480 >> Και κάθε hash ορίζουν ότι έχουμε δει, τι είναι αυτό που κάνει; 1866 01:35:02,480 --> 01:35:06,730 Του αντιγράφοντας την αξία ότι η hash καθορισμένοι ορίζεται όπως και επικόλληση ότι 1867 01:35:06,730 --> 01:35:08,500 όπου κι αν χρησιμοποιείτε την αξία. 1868 01:35:08,500 --> 01:35:13,400 Έτσι, η προεπεξεργαστή κάνει ακριβώς πραγματικά απλό κείμενο βασίζεται επιχειρήσεις. 1869 01:35:13,400 --> 01:35:15,870 Κάνει τίποτα έξυπνο. 1870 01:35:15,870 --> 01:35:18,920 Έτσι, όλα τα άλλα είναι πιο περίπλοκη. 1871 01:35:18,920 --> 01:35:22,970 >> Έτσι, τώρα που προεπεξεργαστή είναι στην πράξη, στην πραγματικότητα συγκεντρώνουν. 1872 01:35:22,970 --> 01:35:24,320 Έτσι τι σημαίνει σύνταξη; 1873 01:35:24,320 --> 01:35:27,310 Είμαστε τώρα πηγαίνει από c κώδικα σε κώδικα assembly. 1874 01:35:27,310 --> 01:35:27,570 Ναι; 1875 01:35:27,570 --> 01:35:28,820 >> ΚΟΙΝΟ: [δεν ακούγεται]; 1876 01:35:28,820 --> 01:35:32,390 1877 01:35:32,390 --> 01:35:34,220 >> ROB: Ναι, πιάσαμε αυτό. 1878 01:35:34,220 --> 01:35:36,880 1879 01:35:36,880 --> 01:35:38,660 Έτσι κατάρτιση. 1880 01:35:38,660 --> 01:35:40,310 Εμείς πάμε από το γ του συνέρχεσθαι. 1881 01:35:40,310 --> 01:35:42,470 Έτσι, αυτό είναι μια πραγματική αλλαγή γλώσσας. 1882 01:35:42,470 --> 01:35:45,240 Συγκέντρωση ίδια σημαίνει να πάμε από μια γλώσσα υψηλού επιπέδου σε 1883 01:35:45,240 --> 01:35:47,340 ένα χαμηλότερο επίπεδο γλώσσας. 1884 01:35:47,340 --> 01:35:50,720 >> Και γ είναι μια γλώσσα υψηλού επιπέδου σε σύγκριση με τη συναρμολόγηση. 1885 01:35:50,720 --> 01:35:52,320 Τι είναι η συνέλευση; 1886 01:35:52,320 --> 01:35:56,440 Οδηγίες του που είναι, αρκετά πολύ, που για τον επεξεργαστή σας. 1887 01:35:56,440 --> 01:35:59,130 Αλλά ο υπολογιστής σας εξακολουθεί να κάνει Δεν καταλαβαίνω τη συναρμολόγηση. 1888 01:35:59,130 --> 01:36:01,570 Κατανοεί μόνο μονάδες και μηδενικά. 1889 01:36:01,570 --> 01:36:06,160 Έτσι, το επόμενο βήμα είναι η συναρμολόγηση, η οποία μας φέρνει από τις οδηγίες αυτές ότι 1890 01:36:06,160 --> 01:36:08,760 CPU σας καταλαβαίνει και πραγματικότητα μεταφράζει τους, να 1891 01:36:08,760 --> 01:36:10,820 οι μονάδες και μηδενικά. 1892 01:36:10,820 --> 01:36:13,570 >> Έτσι C για συναρμολόγηση σε δυαδικό. 1893 01:36:13,570 --> 01:36:15,870 Αλλά δεν έχω ακόμη ένα εκτελέσιμο. 1894 01:36:15,870 --> 01:36:19,550 Έτσι σκέφτονται τη βιβλιοθήκη CS50. 1895 01:36:19,550 --> 01:36:23,070 Πρέπει να παρέχεται με ένα δυαδικό Αυτή η βιβλιοθήκη CS50, η οποία έχει GetString 1896 01:36:23,070 --> 01:36:24,400 και GetInt και όλα αυτά. 1897 01:36:24,400 --> 01:36:25,700 >> Αλλά το CS50 library-- 1898 01:36:25,700 --> 01:36:27,650 σε και από itself-- δεν είναι εκτελέσιμο. 1899 01:36:27,650 --> 01:36:29,570 Αυτό δεν έχει μια κύρια λειτουργία. 1900 01:36:29,570 --> 01:36:32,230 Είναι απλά ένα μάτσο δυαδικό που μπορείτε να χρησιμοποιήσετε. 1901 01:36:32,230 --> 01:36:41,730 Έτσι σύνδεση είναι το πώς θα φέρει σε επαφή όλους από αυτά τα διαφορετικά δυαδικά αρχεία 1902 01:36:41,730 --> 01:36:43,110 σε ένα πραγματικό εκτελέσιμο. 1903 01:36:43,110 --> 01:36:45,900 Ένας που μπορείτε να πληκτρολογήσετε dot slash μια τελεία έξω. 1904 01:36:45,900 --> 01:36:51,660 >> Έτσι, αυτό είναι σαν το αρχείο που έγραψε, - ανεξάρτητα από το πρόγραμμά σας is-- 1905 01:36:51,660 --> 01:36:53,620 Ceaser dot c. 1906 01:36:53,620 --> 01:36:55,100 Αλλά τώρα έχει συνταχθεί κάτω στο δυαδικό. 1907 01:36:55,100 --> 01:36:56,480 Έτσι Ceaser dot o. 1908 01:36:56,480 --> 01:36:59,620 Και αυτό είναι CS50 μας βιβλιοθήκες δυαδικό. 1909 01:36:59,620 --> 01:37:02,284 Και όπου και αν συνδυάζονται σε ένα ενιαίο εκτελέσιμο. 1910 01:37:02,284 --> 01:37:02,758 Ναι; 1911 01:37:02,758 --> 01:37:04,008 >> ΚΟΙΝΟ: [δεν ακούγεται]; 1912 01:37:04,008 --> 01:37:08,800 1913 01:37:08,800 --> 01:37:12,710 >> ROB: Έτσι το πρώτο περιλαμβάνει, θυμηθείτε, το hash περιλαμβάνουν είναι στην πραγματικότητα μια 1914 01:37:12,710 --> 01:37:13,810 βήμα προ-επεξεργασίας. 1915 01:37:13,810 --> 01:37:14,750 Αλλά αυτό είναι ξεχωριστό. 1916 01:37:14,750 --> 01:37:20,730 Αν δεν είστε χρησιμοποιώντας οποιαδήποτε λειτουργίες που είναι έξω από ενιαίο αρχείο σας, τότε, 1917 01:37:20,730 --> 01:37:26,100 Όχι, δεν χρειάζεται να συνδέσετε τίποτα δεδομένου ότι έχετε τα πάντα. 1918 01:37:26,100 --> 01:37:30,310 >> Τούτου λεχθέντος, printf είναι ότι συνδέεται με. 1919 01:37:30,310 --> 01:37:32,820 Αν χρησιμοποιείτε ποτέ printf, αυτό είναι κάτι ότι θα πρέπει να συνδέονται σε 1920 01:37:32,820 --> 01:37:35,740 γιατί δεν γράφουν ότι. 1921 01:37:35,740 --> 01:37:39,530 Και, στην πραγματικότητα, είναι αυτομάτως printf συνδέονται. 1922 01:37:39,530 --> 01:37:42,760 Ξέρετε πώς στη γραμμή εντολών ή όταν Πληκτρολογείτε κάνει, θα δείτε ότι έχετε 1923 01:37:42,760 --> 01:37:46,690 παύλα l CS50, ο οποίος έχει σύνδεση στη βιβλιοθήκη CS50; 1924 01:37:46,690 --> 01:37:49,070 Printf, και τέτοια πράγματα, πρόκειται να συνδέεται αυτόματα. 1925 01:37:49,070 --> 01:37:51,730 1926 01:37:51,730 --> 01:37:53,930 Οποιεσδήποτε άλλες ερωτήσεις σχετικά με τίποτα; 1927 01:37:53,930 --> 01:37:56,280 >> ΚΟΙΝΟ: [δεν ακούγεται]; 1928 01:37:56,280 --> 01:37:58,300 >> ROB: Η σύνδεση; 1929 01:37:58,300 --> 01:38:03,450 Έχουμε ένα σωρό διαφορετικά δυαδικά αρχεία. 1930 01:38:03,450 --> 01:38:06,410 Αυτή είναι η κανονική παράδειγμα που χρησιμοποιούμε είναι βιβλιοθήκη CS50. 1931 01:38:06,410 --> 01:38:09,960 Έχουμε καταρτίσει και θα σας δοθεί η δυαδικό για αυτήν τη βιβλιοθήκη CS50. 1932 01:38:09,960 --> 01:38:12,410 >> Θέλετε να χρησιμοποιήσετε GetString στο πρόγραμμά σας. 1933 01:38:12,410 --> 01:38:14,750 Έτσι, πηγαίνετε και να χρησιμοποιήσετε GetString. 1934 01:38:14,750 --> 01:38:19,700 Αλλά χωρίς δυαδικό κώδικα μου GetString, όταν καταρτίζουν τον κωδικό σας 1935 01:38:19,700 --> 01:38:23,140 προς τα κάτω, δεν μπορείτε πραγματικά να τρέξει σας πρόγραμμα, επειδή GetString String είναι 1936 01:38:23,140 --> 01:38:25,080 δεν έχει ακόμη καθοριστεί πλήρως. 1937 01:38:25,080 --> 01:38:29,220 >> Είναι μόνο όταν έχετε σύνδεση στο δυαδικό μου που περιέχει GetString ότι τώρα, όλα 1938 01:38:29,220 --> 01:38:31,130 Εντάξει, μπορώ πραγματικά εκτελέσει GetString. 1939 01:38:31,130 --> 01:38:32,330 Το αρχείο μου είναι πλήρης. 1940 01:38:32,330 --> 01:38:34,208 Και μπορώ να τρέξει αυτό. 1941 01:38:34,208 --> 01:38:34,697 Ναι; 1942 01:38:34,697 --> 01:38:37,631 >> ΚΟΙΝΟ: Μήπως συνδέοντας την μετατροπή η δυαδική εκτελέσιμα; 1943 01:38:37,631 --> 01:38:42,032 Έτσι, ακόμη και αν δεν έχετε άλλα βιβλιοθήκες, δεν θα εξακολουθήσει να είναι 1944 01:38:42,032 --> 01:38:44,477 απαραίτητο να μεταφράσει η [δεν ακούγεται]; 1945 01:38:44,477 --> 01:38:48,640 >> ROB: Έτσι, ένα εκτελέσιμο είναι ακόμα σε δυαδικό. 1946 01:38:48,640 --> 01:38:51,750 Είναι απλά συνδυάζοντας μια ολόκληρη μάτσο εκτελέσιμα. 1947 01:38:51,750 --> 01:38:55,124 1948 01:38:55,124 --> 01:38:56,591 >> ΚΟΙΝΟ: Σας ευχαριστώ πολύ. 1949 01:38:56,591 --> 01:38:58,560 >> ROB: Δεν υπάρχει πρόβλημα. 1950 01:38:58,560 --> 01:38:59,540 Οποιεσδήποτε άλλες ερωτήσεις; 1951 01:38:59,540 --> 01:39:02,001 Σε αντίθετη περίπτωση, είμαστε έτοιμοι. 1952 01:39:02,001 --> 01:39:02,690 Εντάξει. 1953 01:39:02,690 --> 01:39:02,990 Ευχαριστώ. 1954 01:39:02,990 --> 01:39:03,590 >> [Χειροκρότημα] 1955 01:39:03,590 --> 01:39:04,490 >> ΚΟΙΝΟ: Σας ευχαριστώ. 1956 01:39:04,490 --> 01:39:05,740 >> ROB: Ναι. 1957 01:39:05,740 --> 01:39:06,582