1 00:00:00,000 --> 00:00:11,320 2 00:00:11,320 --> 00:00:13,260 >> DAVID MALAN: Γεια σας και καλωσορίσω πίσω στο CS50. 3 00:00:13,260 --> 00:00:14,860 Έτσι, αυτό είναι το τέλος των τεσσάρων εβδομάδων. 4 00:00:14,860 --> 00:00:16,680 Μόλις μία ανακοίνωση πρώτα. 5 00:00:16,680 --> 00:00:19,600 Έτσι, η λεγόμενη πέμπτη Δευτέρα είναι έρχεται την προσεχή Δευτέρα. 6 00:00:19,600 --> 00:00:22,800 Αυτή είναι η ευκαιρία να αλλάξει από SAT / ακόρεστων σε ένα γράμμα βαθμού ή από 7 00:00:22,800 --> 00:00:24,130 γράμμα βαθμού SAT / ακόρεστων. 8 00:00:24,130 --> 00:00:27,130 Ενοχλητικά, αυτή η διαδικασία απαιτεί μια υπογραφή, γιατί θα πρέπει να συμπληρώσετε 9 00:00:27,130 --> 00:00:28,770 , μια από τις ροζ add / drop μορφές. 10 00:00:28,770 --> 00:00:31,680 >> Επειδή από τεχνική άποψη, η SAT / ακόρεστων έκδοση και η έκδοση γράμμα βαθμού 11 00:00:31,680 --> 00:00:33,320 έχουν διαφορετικές αριθμούς καταλόγου. 12 00:00:33,320 --> 00:00:34,240 Αλλά δεν είναι μεγάλη υπόθεση. 13 00:00:34,240 --> 00:00:36,620 Μόλις έρθει σε μένα ή στον Rob ή σε Lauren σε οποιοδήποτε σημείο. 14 00:00:36,620 --> 00:00:39,550 Ή στείλτε μας email, αν δεν έχετε το είδος των εγγράφων που χρειάζεστε σήμερα, και εμείς 15 00:00:39,550 --> 00:00:43,410 θα είναι σίγουρος για να σας βοηθήσει να πάρετε φροντίδα του ότι πριν από τη Δευτέρα. 16 00:00:43,410 --> 00:00:45,780 >> Εντάξει, έτσι και σήμερα - 17 00:00:45,780 --> 00:00:47,630 στην πραγματικότητα, υπάρχει ένα κομμάτι της ηχούς. 18 00:00:47,630 --> 00:00:51,070 Μπορούμε να τον τόνο μου κάτω από ένα κομμάτι; 19 00:00:51,070 --> 00:00:51,730 OK. 20 00:00:51,730 --> 00:00:54,850 Έτσι, σήμερα, έχουμε εισαγάγει ένα θέμα γνωστή ως δείκτες. 21 00:00:54,850 --> 00:00:57,770 Και εγώ θα παραδεχτώ ότι αυτό είναι ένα από τα πιο πολύπλοκα θέματα που έχουμε την τάση να 22 00:00:57,770 --> 00:01:00,960 καλύπτουν σε αυτή την κατηγορία, πραγματικά ή οποιαδήποτε εισαγωγικό μάθημα που χρησιμοποιεί C. 23 00:01:00,960 --> 00:01:05,510 >> Αλλά πάρτε τη λέξη μου για αυτό, ιδιαίτερα Αν το μυαλό σας αισθάνεται λίγο πιο λυγισμένο 24 00:01:05,510 --> 00:01:07,100 σήμερα και τις επόμενες εβδομάδες. 25 00:01:07,100 --> 00:01:10,340 Δεν είναι αντιπροσωπευτική της να πάρει χειρότερη σε αυτό, σημαίνει απλά ότι 26 00:01:10,340 --> 00:01:13,360 είναι ένα ιδιαίτερα εξελιγμένο θέμα που υπόσχομαι, λίγες εβδομάδες 27 00:01:13,360 --> 00:01:17,610 Ως εκ τούτου, θα φαίνονται όλα πολύ εντυπωσιακά απλή εκ των υστέρων. 28 00:01:17,610 --> 00:01:18,720 >> Θυμάμαι ακόμα σε αυτήν την ημέρα. 29 00:01:18,720 --> 00:01:22,190 Καθόμουν στο Elliott Dining Hall, κάθεται δίπλα TF μου Nishat Mehta, 30 00:01:22,190 --> 00:01:24,070 ο οποίος ήταν κάτοικος του Elliott σπίτι. 31 00:01:24,070 --> 00:01:26,340 Και για κάποιο λόγο, η παρούσα θέμα χτυπά ακριβώς. 32 00:01:26,340 --> 00:01:29,430 Ποια είναι να πω ότι και εγώ αγωνίστηκα με αυτό για κάποιο χρονικό διάστημα, αλλά 33 00:01:29,430 --> 00:01:33,610 θα κάνω το καλύτερό μου για να βοηθήσει να αποφύγει οποιαδήποτε τέτοια αγώνα με ένα θέμα που τελικά 34 00:01:33,610 --> 00:01:34,580 είναι αρκετά ισχυρό. 35 00:01:34,580 --> 00:01:37,350 >> Στην πραγματικότητα, ένα από τα θέματα που θα συζητήσουμε στις επόμενες εβδομάδες είναι ότι 36 00:01:37,350 --> 00:01:41,130 της ασφάλειας, και πώς μπορείτε πραγματικά να εκμεταλλεύονται μηχανές με τρόπους 37 00:01:41,130 --> 00:01:42,320 Όμως, δεν είχαν ως στόχο. 38 00:01:42,320 --> 00:01:45,850 Και αυτές οι εκμεταλλεύσεις είναι τυπικά το αποτέλεσμα των λαθών σφάλματα, ότι εμείς 39 00:01:45,850 --> 00:01:49,740 οι άνθρωποι κάνουν με το να μην την κατανόηση ορισμένων του υποκείμενου υλοποίησης 40 00:01:49,740 --> 00:01:52,250 στοιχεία μέσω των οποίων τα προγράμματα γίνονται. 41 00:01:52,250 --> 00:01:55,410 >> Τώρα, για να κάνουν αυτό φαίνεται όλο και περισσότερο στον χρήστη φιλικό, σκέφτηκα ότι θα παίξει 10 42 00:01:55,410 --> 00:01:59,680 δεύτερη προεπισκόπηση λίγο πλαστελίνης φιγούρα που ονομάζεται Binky που έφερε στο 43 00:01:59,680 --> 00:02:03,020 ζωή από έναν φίλο μας στο Πανεπιστήμιο του Στάνφορντ, καθηγητής Nick Parlante. 44 00:02:03,020 --> 00:02:06,753 Έτσι, επιτρέψτε μου να σας δώσω αυτό teaser της Binky εδώ. 45 00:02:06,753 --> 00:02:09,520 >> [PLAYBACK VIDEO] 46 00:02:09,520 --> 00:02:10,380 >> -Γεια σου, Μπίνκι. 47 00:02:10,380 --> 00:02:11,050 Ξυπνήστε. 48 00:02:11,050 --> 00:02:13,610 Ήρθε η ώρα για διασκέδαση δείκτη. 49 00:02:13,610 --> 00:02:14,741 >> -Τι είναι αυτό; 50 00:02:14,741 --> 00:02:16,440 Μάθετε για δείκτες; 51 00:02:16,440 --> 00:02:17,928 Ω, goodie. 52 00:02:17,928 --> 00:02:18,920 >> [PLAYBACK VIDEO END] 53 00:02:18,920 --> 00:02:20,670 >> DAVID MALAN: Αυτό είναι Stanford επιστήμη των υπολογιστών. 54 00:02:20,670 --> 00:02:23,194 Έτσι, περισσότερα για αυτό να έρθει. 55 00:02:23,194 --> 00:02:24,930 >> [Χειροκρότημα] 56 00:02:24,930 --> 00:02:26,660 >> DAVID MALAN: Συγγνώμη, Νικ. 57 00:02:26,660 --> 00:02:30,680 >> Έτσι, υπενθυμίζουν ότι η τελευταία φορά που έληξε στις Αυτό πραγματικά συναρπαστικό δραματική στιγμή 58 00:02:30,680 --> 00:02:32,960 σύμφωνα με την οποία αυτή η λειτουργία απλά δεν δούλεψε. 59 00:02:32,960 --> 00:02:34,960 Τουλάχιστον διαισθητικά, αισθάνθηκε όπως θα πρέπει να λειτουργεί. 60 00:02:34,960 --> 00:02:37,600 Απλά αλλάζουν τις τιμές δύο ακεραίων. 61 00:02:37,600 --> 00:02:40,915 Αλλά να θυμόμαστε ότι όταν θα εκτυπωθεί η αρχικές τιμές σε βασικά, μιας και 62 00:02:40,915 --> 00:02:44,210 δύο, ήταν ακόμα ένα και δύο και όχι μία και δύο. 63 00:02:44,210 --> 00:02:46,070 >> Επιτρέψτε μου λοιπόν να στραφούν στην πραγματικότητα πάνω στη συσκευή. 64 00:02:46,070 --> 00:02:50,180 Και έγραψα ένα κομμάτι του σκελετικού κώδικα εκ των προτέρων εδώ, όπου ισχυρίζονται ότι x 65 00:02:50,180 --> 00:02:52,500 θα είναι 1, y θα είναι 2. 66 00:02:52,500 --> 00:02:54,810 Στη συνέχεια εκτυπώνει δύο τους τιμές με f εκτύπωσης. 67 00:02:54,810 --> 00:02:57,540 >> Στη συνέχεια υποστηρίζουν ότι εδώ κάτω θα πάμε να τους swap. 68 00:02:57,540 --> 00:03:00,800 Άφησα ένα κενό σημείο εδώ για μας να συμπληρώστε σήμερα ακριβώς σε μια στιγμή. 69 00:03:00,800 --> 00:03:03,380 Στη συνέχεια, Πάω να ισχυρίζονται ότι η Οι δύο μεταβλητές που έχουν ανταλλαχθεί. 70 00:03:03,380 --> 00:03:04,770 Στη συνέχεια, Πάω να εκτυπώσετε τα έξω και πάλι. 71 00:03:04,770 --> 00:03:07,090 Και έτσι ελπίζω, θα πρέπει να βλέπετε 1, 2. 72 00:03:07,090 --> 00:03:07,380 2, 1. 73 00:03:07,380 --> 00:03:09,830 Αυτό είναι το εξαιρετικά απλό Στόχος τώρα. 74 00:03:09,830 --> 00:03:12,430 >> Επομένως, πώς θα πάει για εναλλαγή δύο μεταβλητές; 75 00:03:12,430 --> 00:03:17,220 Λοιπόν, αν προτείνω εδώ ότι αυτά τα κύπελλα μπορεί να αντιπροσωπεύει τη μνήμη σε έναν υπολογιστή. 76 00:03:17,220 --> 00:03:19,070 Αυτό είναι μερικές δαγκώματα, αυτό είναι ένα άλλο μερικά τσιμπήματα. 77 00:03:19,070 --> 00:03:23,260 Θα μπορούσαμε να είχαμε εθελοντής έλα και αναμειγνύεται μας μερικά ποτά, αν γνωρίζει; 78 00:03:23,260 --> 00:03:23,920 Ανέβα. 79 00:03:23,920 --> 00:03:24,815 Ποιο είναι το όνομά σου; 80 00:03:24,815 --> 00:03:25,260 >> JESS: Jess. 81 00:03:25,260 --> 00:03:25,690 >> DAVID MALAN: Jess; 82 00:03:25,690 --> 00:03:26,540 Έλα πάνω, Τζες. 83 00:03:26,540 --> 00:03:29,180 Αν δεν σας πειράζει, θα πρέπει να θέσει το Google Glass σε σας ώστε να μπορούμε να 84 00:03:29,180 --> 00:03:30,430 απαθανατίσουν αυτό. 85 00:03:30,430 --> 00:03:32,800 86 00:03:32,800 --> 00:03:34,670 OK, γυαλί. 87 00:03:34,670 --> 00:03:37,250 Καταγράψτε ένα βίντεο. 88 00:03:37,250 --> 00:03:43,103 Και Εντάξει, είναι καλό να πάει με Jess εδώ. 89 00:03:43,103 --> 00:03:43,810 Εντάξει. 90 00:03:43,810 --> 00:03:45,120 Χάρηκα για τη γνωριμία. 91 00:03:45,120 --> 00:03:47,720 >> Έτσι, αυτό που θα ήθελα να κάνω εδώ - αν μπορούσε, πολύ γρήγορα - 92 00:03:47,720 --> 00:03:51,040 απλά χύνει μας μισό ποτήρι πορτοκάλι χυμών και μισό ποτήρι γάλα, 93 00:03:51,040 --> 00:03:55,710 αντιπροσωπεύουν αποτελεσματικά τους αριθμούς 1 σε ένα φλιτζάνι και 2 στο άλλο κύπελλο. 94 00:03:55,710 --> 00:04:01,380 95 00:04:01,380 --> 00:04:02,630 >> Αυτό πρόκειται να είναι καλές σκηνές. 96 00:04:02,630 --> 00:04:04,910 97 00:04:04,910 --> 00:04:05,860 >> JESS: Συγγνώμη. 98 00:04:05,860 --> 00:04:06,330 >> DAVID MALAN: Όχι, όχι. 99 00:04:06,330 --> 00:04:08,703 Είναι εντάξει. 100 00:04:08,703 --> 00:04:10,120 Νίκαια. 101 00:04:10,120 --> 00:04:12,950 Εντάξει, έτσι έχουμε τέσσερα bytes Αξίζει χυμό πορτοκαλιού. 102 00:04:12,950 --> 00:04:14,460 Θα αποκάλεσε την τιμή 1. 103 00:04:14,460 --> 00:04:16,579 Τώρα, άλλα τέσσερα bytes αξίας του γάλακτος. 104 00:04:16,579 --> 00:04:18,519 Θα το ονομάσουμε τιμή 2. 105 00:04:18,519 --> 00:04:20,440 Έτσι, τα Χ και Υ, αντίστοιχα. 106 00:04:20,440 --> 00:04:23,450 >> Εντάξει, τώρα αν το έργο στο χέρι - για σας, Jess, μπροστά σε όλους 107 00:04:23,450 --> 00:04:24,270 από τους συμμαθητές σας - 108 00:04:24,270 --> 00:04:28,510 είναι να ανταλλάξουν τις τιμές των x και y, όπως ότι θέλουμε το χυμό πορτοκαλιού με το 109 00:04:28,510 --> 00:04:32,070 άλλο κύπελλο και το γάλα σε αυτό το κύπελλο, πώς μπορεί να σας - πριν να κάνετε 110 00:04:32,070 --> 00:04:34,020 αυτό - πάει για να κάνει αυτό; 111 00:04:34,020 --> 00:04:35,220 >> OK, σοφή απόφαση. 112 00:04:35,220 --> 00:04:36,340 Έτσι, θα πρέπει να έχετε λίγο περισσότερη μνήμη. 113 00:04:36,340 --> 00:04:38,190 Ας διαθέσει ένα προσωρινό κύπελλο, αν θέλετε. 114 00:04:38,190 --> 00:04:40,540 Και τώρα να προχωρήσει για να ανταλλάξουν x και y. 115 00:04:40,540 --> 00:04:52,950 116 00:04:52,950 --> 00:04:53,530 >> Εξαιρετικό. 117 00:04:53,530 --> 00:04:54,420 Έτσι, πολύ καλά κάνει. 118 00:04:54,420 --> 00:04:55,670 Σας ευχαριστώ πολύ, Τζες. 119 00:04:55,670 --> 00:04:59,520 120 00:04:59,520 --> 00:05:00,020 Ορίστε. 121 00:05:00,020 --> 00:05:01,950 Ένα μικρό ενθύμιο. 122 00:05:01,950 --> 00:05:04,350 >> Εντάξει, οπότε προφανώς, εξαιρετικά απλή ιδέα. 123 00:05:04,350 --> 00:05:07,500 Εντελώς διαισθητικά ότι χρειαζόμαστε λίγο περισσότερο χώρο αποθήκευσης - σε αυτή τη μορφή, 124 00:05:07,500 --> 00:05:09,750 ένα φλιτζάνι - εάν θέλουμε πραγματικά να ανταλλάξουν αυτές τις δύο μεταβλητές. 125 00:05:09,750 --> 00:05:11,110 Οπότε ας κάνουμε ακριβώς αυτό. 126 00:05:11,110 --> 00:05:14,330 Μέχρι εδώ στο μεταξύ εκεί που ισχυρίζονται ότι είμαι πρόκειται να κάνει κάποια εναλλαγή, εγώ θα 127 00:05:14,330 --> 00:05:15,720 να προχωρήσει και να κηρύξει temp. 128 00:05:15,720 --> 00:05:17,980 Και εγώ θα το θέσει ίσο με, ας πούμε, x. 129 00:05:17,980 --> 00:05:21,110 >> Στη συνέχεια, Πάω να αλλάξετε την τιμή της x όπως ακριβώς Jess έκανε εδώ με το 130 00:05:21,110 --> 00:05:23,200 γάλα και χυμό πορτοκάλι να είναι ίσο με το y. 131 00:05:23,200 --> 00:05:27,460 Και Πάω να αλλάξει y είναι ίση να μην x, γιατί τώρα θα ήμασταν 132 00:05:27,460 --> 00:05:29,530 κολλήσει σε ένα κύκλο, αλλά μάλλον Temp. 133 00:05:29,530 --> 00:05:33,170 Εκεί που προσωρινά - ή όταν Jess τεθεί προσωρινά το χυμό πορτοκαλιού 134 00:05:33,170 --> 00:05:35,460 πριν clobbering ότι κύπελλο με το γάλα. 135 00:05:35,460 --> 00:05:37,250 >> Έτσι, επιτρέψτε μου να πάει μπροστά τώρα και να κάνουν αυτό. 136 00:05:37,250 --> 00:05:39,210 Λέγεται noswap.c. 137 00:05:39,210 --> 00:05:41,190 Και τώρα επιτρέψτε μου να τρέξει χωρίς swap. 138 00:05:41,190 --> 00:05:43,910 Και πράγματι βλέπω, αν μπορώ να επεκτείνουν το παράθυρο λίγο, ότι 139 00:05:43,910 --> 00:05:45,160 το χ είναι 1, το Υ είναι 2. 140 00:05:45,160 --> 00:05:47,230 Και τότε το χ είναι 2, το γ είναι 1. 141 00:05:47,230 --> 00:05:51,910 >> Αλλά υπενθυμίζουν ότι τη Δευτέρα κάναμε τα πράγματα λίγο διαφορετικά με την οποία θα 142 00:05:51,910 --> 00:05:56,760 αντί να εφαρμόσει μια λειτουργία βοηθός, αν θέλετε, αυτό ήταν στην πραγματικότητα άκυρη. 143 00:05:56,760 --> 00:05:58,010 Κάλεσα το swap. 144 00:05:58,010 --> 00:06:01,600 Έδωσα δύο παραμέτρους, και κάλεσα τους μια και κάλεσα τους b. 145 00:06:01,600 --> 00:06:04,380 >> Ειλικρινά, θα μπορούσα να τους αποκαλούν x και y. 146 00:06:04,380 --> 00:06:06,040 Δεν υπάρχει τίποτα να σταματήσει μου να το κάνει. 147 00:06:06,040 --> 00:06:08,140 Αλλά θα έλεγα ότι είναι συνέχεια λίγο ασαφής. 148 00:06:08,140 --> 00:06:11,910 Επειδή η ανάκληση για τη Δευτέρα ότι ισχυρίστηκε ότι αυτές οι παράμετροι είχαν 149 00:06:11,910 --> 00:06:13,650 αντίγραφα των αξιών πέρασαν μέσα 150 00:06:13,650 --> 00:06:15,640 Γι 'αυτό ακριβώς βάζει με σας νου, νομίζω ότι, αν χρησιμοποιείτε 151 00:06:15,640 --> 00:06:17,370 ακριβώς τις ίδιες μεταβλητές. 152 00:06:17,370 --> 00:06:20,150 >> Γι 'αυτό θα αντί να καλέσει τους ένα και Β, μόνο για λόγους σαφήνειας. 153 00:06:20,150 --> 00:06:21,840 Αλλά θα μπορούσαμε να τους αποκαλούν οι περισσότεροι ό, τι θέλουμε. 154 00:06:21,840 --> 00:06:26,280 Και Πάω να αντιγράψετε και να επικολλήσετε αποτελεσματικά αυτός ο κώδικας από εκεί ψηλά 155 00:06:26,280 --> 00:06:27,170 κάτω στο εδώ. 156 00:06:27,170 --> 00:06:29,110 Επειδή μόλις είδα ότι λειτουργεί. 157 00:06:29,110 --> 00:06:30,790 Έτσι ώστε να είναι σε αρκετά καλή κατάσταση. 158 00:06:30,790 --> 00:06:37,390 Και θα αλλάξει x μου σε ένα, x μου με a, y μου να β και γ μου σε b. 159 00:06:37,390 --> 00:06:39,130 >> Έτσι, με άλλα λόγια, ακριβώς την ίδια λογική. 160 00:06:39,130 --> 00:06:40,850 Το ίδιο ακριβώς πράγμα που Jess έκανε. 161 00:06:40,850 --> 00:06:44,350 Και τότε το μόνο πράγμα που έχω να κάνω μέχρι Εδώ, βέβαια, είναι να επικαλεστεί τώρα αυτό 162 00:06:44,350 --> 00:06:45,990 λειτουργία, ή να καλέσετε τη συνάρτηση αυτή. 163 00:06:45,990 --> 00:06:50,430 Γι 'αυτό και θα καλέσει αυτή τη λειτουργία με δύο εισόδους, x και y, και το χτύπημα Αποθήκευση. 164 00:06:50,430 --> 00:06:52,300 >> Εντάξει, τόσο θεμελιωδώς το ίδιο πράγμα. 165 00:06:52,300 --> 00:06:55,570 Στην πραγματικότητα, έχω κάνει πιθανώς το πρόγραμμα άσκοπα περίπλοκες από 166 00:06:55,570 --> 00:07:00,820 γράφοντας μια λειτουργία που είναι απλώς πιάνουν περίπου έξι γραμμές κώδικα, ενώ εγώ 167 00:07:00,820 --> 00:07:02,970 στο παρελθόν είχε εφαρμόσει αυτό σε μόλις τρεις. 168 00:07:02,970 --> 00:07:06,230 >> Επιτρέψτε μου λοιπόν να προχωρήσει τώρα και remake αυτό, δεν κάνουν swap. 169 00:07:06,230 --> 00:07:07,920 Εντάξει, έχω μαντάρα εδώ. 170 00:07:07,920 --> 00:07:11,290 Αυτό πρέπει να είναι ένα λάθος που ίσως δείτε όλο συνήθως ως σας 171 00:07:11,290 --> 00:07:12,380 προγράμματα γίνονται πιο πολύπλοκα. 172 00:07:12,380 --> 00:07:13,470 Αλλά υπάρχει μια εύκολη λύση. 173 00:07:13,470 --> 00:07:15,650 Επιτρέψτε μου να μετακινηθείτε προς τα πίσω μέχρι εδώ. 174 00:07:15,650 --> 00:07:18,190 >> Και ποιο είναι το πρώτο λάθος που βλέπω; 175 00:07:18,190 --> 00:07:19,520 Σιωπηρή δήλωση. 176 00:07:19,520 --> 00:07:21,466 Τι σημαίνει ότι συνήθως υποδηλώνει; 177 00:07:21,466 --> 00:07:22,830 Α, ξέχασα το πρωτότυπο. 178 00:07:22,830 --> 00:07:26,900 Ξέχασα να διδάξει τον compiler ότι η ανταλλαγή πρόκειται να υφίστανται έστω και αν ο ίδιος 179 00:07:26,900 --> 00:07:28,920 δεν υπάρχει στην αρχή του προγράμματος. 180 00:07:28,920 --> 00:07:35,780 Έτσι, είμαι απλώς πρόκειται να πω άκυρη, swap, int, ένας int b, τελεία. 181 00:07:35,780 --> 00:07:37,280 >> Έτσι, δεν είμαι πρόκειται να το Νέα υλοποίηση. 182 00:07:37,280 --> 00:07:39,140 Αλλά τώρα ταιριάζει με αυτό που είναι εδώ κάτω. 183 00:07:39,140 --> 00:07:42,530 Και ανακοίνωση, η απουσία ερωτηματικό εδώ, η οποία δεν είναι απαραίτητη όταν 184 00:07:42,530 --> 00:07:43,200 εφαρμογής. 185 00:07:43,200 --> 00:07:46,010 >> Έτσι, επιτρέψτε μου να ξανακάνω αυτό, δεν κάνουν swap. 186 00:07:46,010 --> 00:07:46,910 Πολύ καλύτερη κατάσταση. 187 00:07:46,910 --> 00:07:48,130 Εκτελέστε κανένα swap. 188 00:07:48,130 --> 00:07:48,740 Και γαμώτο. 189 00:07:48,740 --> 00:07:51,650 Τώρα είμαστε πίσω στο σημείο που ήταν τη Δευτέρα, όπου το πράγμα δεν ανταλλάξουν. 190 00:07:51,650 --> 00:07:55,410 >> Και ποια είναι η διαισθητική εξήγηση για το γιατί συμβαίνει αυτό; 191 00:07:55,410 --> 00:07:56,380 Ναι; 192 00:07:56,380 --> 00:07:57,630 >> ΦΟΙΤΗΤΗΣ: [δεν ακούγεται]. 193 00:07:57,630 --> 00:08:04,140 194 00:08:04,140 --> 00:08:05,230 >> DAVID MALAN: Ακριβώς. 195 00:08:05,230 --> 00:08:07,330 Έτσι, α και b είναι αντίγραφα των x και y. 196 00:08:07,330 --> 00:08:10,680 Και στην πραγματικότητα, κάθε φορά που έχετε καλώντας μία συνάρτηση του μέχρι στιγμής ότι 197 00:08:10,680 --> 00:08:12,540 περνά μεταβλητές όπως ints - 198 00:08:12,540 --> 00:08:14,470 ακριβώς όπως το swap περιμένει εδώ - 199 00:08:14,470 --> 00:08:16,270 εσείς έχουν περνώντας σε αντίγραφα. 200 00:08:16,270 --> 00:08:19,150 >> Τώρα αυτό σημαίνει ότι παίρνει λίγο του χρόνου, ένα κλάσμα του δευτερολέπτου, για την 201 00:08:19,150 --> 00:08:23,270 υπολογιστή για να αντιγράψετε τα κομμάτια από το ένα μεταβλητή σε τα δυαδικά ψηφία του άλλου. 202 00:08:23,270 --> 00:08:24,610 Αλλά αυτό δεν είναι μια τέτοια μεγάλη υπόθεση. 203 00:08:24,610 --> 00:08:25,920 Αλλά είναι παρ 'όλα αυτά ένα αντίγραφο. 204 00:08:25,920 --> 00:08:30,020 >> Και έτσι και τώρα, στο πλαίσιο της ανταλλαγής, Είμαι στην πραγματικότητα με επιτυχία 205 00:08:30,020 --> 00:08:31,180 αλλαγή ενός και b. 206 00:08:31,180 --> 00:08:33,000 Στην πραγματικότητα, ας κάνουμε μια γρήγορη λογική έλεγχο. 207 00:08:33,000 --> 00:08:36,830 Στ Εκτύπωση είναι% i, νέα γραμμή. 208 00:08:36,830 --> 00:08:38,770 Και plug ας σε ένα αρχείο. 209 00:08:38,770 --> 00:08:41,830 Τώρα ας κάνουμε το ίδιο πράγμα με το b. 210 00:08:41,830 --> 00:08:43,640 Και ας κάνουμε το ίδιο πράγμα εδώ. 211 00:08:43,640 --> 00:08:47,260 >> Και τώρα, επιτρέψτε μου να αντιγράψετε τις ίδιες γραμμές και πάλι στο κάτω μέρος της συνάρτησης 212 00:08:47,260 --> 00:08:51,250 μετά από τρεις γραμμές μου ενδιαφέροντα θα μπορούσε να εκτελεστεί, και 213 00:08:51,250 --> 00:08:53,270 εκτύπωση a και b για άλλη μια φορά. 214 00:08:53,270 --> 00:08:56,030 Έτσι, τώρα ας κάνουν αυτό, δεν κάνουν swap. 215 00:08:56,030 --> 00:08:58,430 Επιτρέψτε μου να κάνω το παράθυρο τερματικού α λίγο ψηλότερα, έτσι ώστε να μπορούμε να δούμε 216 00:08:58,430 --> 00:08:59,520 περισσότερο από αυτό ταυτόχρονα. 217 00:08:59,520 --> 00:09:00,860 >> Και δεν διατρέχουν κανέναν swap. 218 00:09:00,860 --> 00:09:04,000 το χ είναι 1, το Υ είναι 2. α είναι 1, το b είναι 2. 219 00:09:04,000 --> 00:09:06,070 Και στη συνέχεια, το α είναι 2, το b είναι 1. 220 00:09:06,070 --> 00:09:09,390 Γι 'αυτό λειτουργεί, όπως ακριβώς Jess έκανε εδώ μέσα swap. 221 00:09:09,390 --> 00:09:13,090 Αλλά φυσικά, αυτό είναι που έχουν καμία επίδραση σχετικά με τις μεταβλητές σε κύριες. 222 00:09:13,090 --> 00:09:15,360 >> Έτσι, είδαμε ένα τέχνασμα το οποίο μπορούμε θα μπορούσε να το διορθώσετε αυτό, έτσι δεν είναι; 223 00:09:15,360 --> 00:09:19,560 Όταν είστε αντιμέτωποι με αυτή την οριοθέτηση του πεδίου εφαρμογής θέμα, θα μπορούσατε απλά να punt και να κάνει x 224 00:09:19,560 --> 00:09:22,400 και y το είδος των μεταβλητών αντ 'αυτού; 225 00:09:22,400 --> 00:09:23,390 >> Θα μπορούσατε να τους παγκόσμια. 226 00:09:23,390 --> 00:09:27,560 Βάλτε τους στην κορυφή του αρχείου όπως κάναμε, ακόμη και στο παιχνίδι του 15. 227 00:09:27,560 --> 00:09:28,890 Χρησιμοποιούμε μια καθολική μεταβλητή. 228 00:09:28,890 --> 00:09:32,420 Αλλά στο πλαίσιο του παιχνιδιού 15, είναι λογικό να έχουμε μια παγκόσμια 229 00:09:32,420 --> 00:09:37,170 μεταβλητή που αντιπροσωπεύει το διοικητικό συμβούλιο, διότι το σύνολο των 15.c είναι όλα 230 00:09:37,170 --> 00:09:38,650 για την εφαρμογή του εν λόγω παιχνιδιού. 231 00:09:38,650 --> 00:09:41,470 Αυτό είναι ό, τι το αρχείο υπάρχει να κάνει. 232 00:09:41,470 --> 00:09:44,170 >> Αλλά σε αυτήν την περίπτωση εδώ, είμαι καλώντας μια ανταλλαγή λειτουργία. 233 00:09:44,170 --> 00:09:45,380 Θέλω να ανταλλάξουν δύο μεταβλητές. 234 00:09:45,380 --> 00:09:48,950 Και θα πρέπει να αρχίσετε να αισθάνεστε λίγο ατημέλητη Εάν το διάλυμα σε όλα μας 235 00:09:48,950 --> 00:09:51,300 προβλήματα όταν τρέχει σε πεδίο ζητήματα είναι να είναι παγκόσμια. 236 00:09:51,300 --> 00:09:54,730 Επειδή πολύ γρήγορα το πρόγραμμά μας είναι πρόκειται να γίνει αρκετά ένα χάος. 237 00:09:54,730 --> 00:09:57,760 Και το κάναμε αυτό με μεγάλη φειδώ ως αποτέλεσμα 15.c. 238 00:09:57,760 --> 00:10:00,470 >> Αλλά αποδεικνύεται ότι υπάρχει μια καλύτερο τρόπο εντελώς. 239 00:10:00,470 --> 00:10:05,600 Επιτρέψτε μου να πραγματικά να πάμε πίσω και να διαγράψετε το εκτύπωση της f, απλά για να απλοποιήσει τον κωδικό αυτό. 240 00:10:05,600 --> 00:10:09,160 Και επιτρέψτε μου να προτείνω Αυτό, πράγματι, είναι κακή. 241 00:10:09,160 --> 00:10:15,990 Αλλά αν αντί να προσθέσετε σε κάποια αστερίσκους και τα αστέρια, μπορώ να γυρίσει αντί για αυτό 242 00:10:15,990 --> 00:10:18,670 λειτουργία σε ένα που είναι πραγματικά λειτουργική. 243 00:10:18,670 --> 00:10:25,020 >> Έτσι, επιτρέψτε μου να επιστρέψω εδώ και να παραδεχτούμε λέγοντας αστερίσκους είναι πάντοτε δύσκολη, 244 00:10:25,020 --> 00:10:26,170 γι 'αυτό θα πω αστέρια. 245 00:10:26,170 --> 00:10:27,660 Εγώ απλώς θα fess μέχρι εκείνο το ένα. 246 00:10:27,660 --> 00:10:28,190 Εντάξει. 247 00:10:28,190 --> 00:10:30,190 Και τώρα, τι θα πάω να κάνει αντ 'αυτού; 248 00:10:30,190 --> 00:10:34,130 >> Έτσι, πρώτα απ 'όλα, Πάω να καθορίσετε ότι αντί να διέρχεται μια int σε 249 00:10:34,130 --> 00:10:37,980 η λειτουργία εναλλαγής, είμαι αντ 'αυτού της πρόκειται να πω int αστέρι. 250 00:10:37,980 --> 00:10:39,170 Τώρα, τι κάνει το αστέρι αναφέρει; 251 00:10:39,170 --> 00:10:41,970 Αυτή είναι η έννοια του δείκτη που Binky, ο χαρακτήρας claymation, ήταν 252 00:10:41,970 --> 00:10:43,465 αναφερόμενος σε μια στιγμή πριν. 253 00:10:43,465 --> 00:10:47,610 >> Έτσι, αν λέμε int αστέρι, η έννοια της Αυτό είναι τώρα ότι δεν πρόκειται να 254 00:10:47,610 --> 00:10:49,110 πέρασε από την τιμή του. 255 00:10:49,110 --> 00:10:50,350 Δεν πρόκειται να αντιγραφεί μέσα 256 00:10:50,350 --> 00:10:54,700 Αντίθετα, η διεύθυνση του a είναι πρόκειται να περάσει μέσα 257 00:10:54,700 --> 00:10:57,840 >> Έτσι υπενθυμίσουμε ότι στο εσωτερικό του υπολογιστή σας Είναι ένα σωρό μνήμη, αλλιώς 258 00:10:57,840 --> 00:10:58,760 γνωστή ως μνήμη RAM. 259 00:10:58,760 --> 00:11:00,520 Και ότι η μνήμη RAM είναι απλά μια σωρό bytes. 260 00:11:00,520 --> 00:11:03,320 Έτσι, αν το Mac ή το PC σας έχει δύο gigabytes, έχετε 2 261 00:11:03,320 --> 00:11:05,760 δισεκατομμύριο bytes της μνήμης. 262 00:11:05,760 --> 00:11:08,440 >> Τώρα, ας υποθέσουμε ότι ακριβώς για να κρατήσει τα πράγματα ωραία και ομαλή, μπορούμε 263 00:11:08,440 --> 00:11:09,450 εκχωρήσετε μια διεύθυνση - 264 00:11:09,450 --> 00:11:10,170 ένας αριθμός - 265 00:11:10,170 --> 00:11:12,270 σε κάθε byte της μνήμης RAM στον υπολογιστή σας. 266 00:11:12,270 --> 00:11:15,410 Το πρώτο byte αυτών των 2 δισ. ευρώ είναι με αριθμό μηδέν. 267 00:11:15,410 --> 00:11:18,572 Το επόμενο byte είναι νούμερο ένα, νούμερο δύο, σε όλη τη διαδρομή επάνω, dot dot 268 00:11:18,572 --> 00:11:20,530 dot, με περίπου 2 δισ. ευρώ. 269 00:11:20,530 --> 00:11:23,640 >> Έτσι, μπορείτε να τον αριθμό των bytes της μνήμης στον υπολογιστή σας. 270 00:11:23,640 --> 00:11:26,460 Ας υποθέσουμε ότι αυτό είναι ό, τι εννοούμε με μια διεύθυνση. 271 00:11:26,460 --> 00:11:31,360 Έτσι, όταν βλέπω αστέρι int a, τι συμβαίνει να περάσει σε ανταλλαγή τώρα είναι η 272 00:11:31,360 --> 00:11:32,830 διεύθυνση της a. 273 00:11:32,830 --> 00:11:37,150 Δεν έχει την αξία του, αλλά ό, τι ταχυδρομικών της διεύθυνσης είναι, να το πω έτσι - 274 00:11:37,150 --> 00:11:38,810 θέση του στη RAM. 275 00:11:38,810 --> 00:11:41,250 >> Και ομοίως για b, Πάω να πούμε το ίδιο πράγμα. 276 00:11:41,250 --> 00:11:42,720 Int, αστέρι, b. 277 00:11:42,720 --> 00:11:46,350 Ως μέρος, από τεχνική άποψη το αστέρι θα μπορούσε να πάει σε άλλες τοποθεσίες. 278 00:11:46,350 --> 00:11:50,140 Αλλά θα τυποποιήσουν το αστέρι είναι ακριβώς δίπλα από τον τύπο δεδομένων. 279 00:11:50,140 --> 00:11:54,080 >> Έτσι ανταλλάξουν υπογραφή σημαίνει τώρα, να μου δώσει η διεύθυνση ενός int και η κλήση 280 00:11:54,080 --> 00:11:55,400 που αναφέρονται σε ένα. 281 00:11:55,400 --> 00:11:58,690 Και να μου δώσει άλλη διεύθυνση του εξουσιοδοτημένου int και να καλέσετε ότι η Β διεύθυνσης. 282 00:11:58,690 --> 00:12:01,120 >> Αλλά τώρα τον κωδικό μου εδώ πρέπει να αλλάξει. 283 00:12:01,120 --> 00:12:03,470 Διότι, αν δηλώνω int temp - 284 00:12:03,470 --> 00:12:05,580 η οποία εξακολουθεί να είναι τύπου int - 285 00:12:05,580 --> 00:12:08,700 αλλά έχω αποθηκεύσει σε ένα, τι είδους σχέση; 286 00:12:08,700 --> 00:12:12,870 Για να είμαι σαφής, είμαι θέτοντας ένα με ο κώδικας όπως γράφεται τώρα; 287 00:12:12,870 --> 00:12:14,360 >> Βάζω την τοποθεσία σε ένα αρχείο. 288 00:12:14,360 --> 00:12:16,500 Αλλά εγώ δεν νοιάζονται για το θέση τώρα, έτσι δεν είναι; 289 00:12:16,500 --> 00:12:21,940 Θερμοκρασία υπάρχει μόνο τρίτο κύπελλο Jess » υπήρχε, για ποιο σκοπό; 290 00:12:21,940 --> 00:12:23,090 Για να αποθηκεύσετε μια τιμή. 291 00:12:23,090 --> 00:12:24,830 Γάλα ή χυμό πορτοκαλιού. 292 00:12:24,830 --> 00:12:28,520 Για να μην αποθηκεύουν στην πραγματικότητα τη διεύθυνση του κανένα από αυτά τα πράγματα, τα οποία αισθάνεται 293 00:12:28,520 --> 00:12:31,200 λίγο παράλογο σε αυτό το πραγματικό παγκόσμιο πλαίσιο ούτως ή άλλως. 294 00:12:31,200 --> 00:12:34,990 >> Έτσι, πραγματικά, αυτό που θέλω να θέσει σε temp δεν είναι η διεύθυνση της α, αλλά ο 295 00:12:34,990 --> 00:12:36,180 περιεχόμενα ενός αρχείου. 296 00:12:36,180 --> 00:12:41,930 Έτσι, αν το α είναι ένας αριθμός όπως 123, αυτό είναι η 123η byte της μνήμης ότι μια δίκαιη 297 00:12:41,930 --> 00:12:45,090 συμβαίνει να είναι κατοχική, ότι η αξία σε ένα συμβαίνει να είναι κατοχική. 298 00:12:45,090 --> 00:12:49,040 >> Αν θέλω να πάω σε αυτή τη διεύθυνση, Θέλω να πω ένα αστέρι. 299 00:12:49,040 --> 00:12:52,610 Παρομοίως, εάν επρόκειτο να αλλάξει ό, τι είναι στη διεύθυνση Α, μπορώ να αλλάξω 300 00:12:52,610 --> 00:12:53,570 Αυτό για να ξεκινήσετε μια. 301 00:12:53,570 --> 00:12:58,185 Αν θέλω να αποθηκεύουν σε ό, τι είναι στο θέση ένα με ό, τι υπάρχει στο σημείο 302 00:12:58,185 --> 00:13:02,180 στο b, b αστέρι αστέρι. 303 00:13:02,180 --> 00:13:05,340 >> Έτσι, εν ολίγοις, έστω και αν αυτό δεν είναι αρκετά βυθίζεται σε ακόμη - και δεν θα περίμενε 304 00:13:05,340 --> 00:13:06,560 ότι θα ήταν τόσο γρήγορα - 305 00:13:06,560 --> 00:13:11,100 συνειδητοποιούν ότι το μόνο που κάνω είναι πρόθεμα αυτά τα αστέρια σε μεταβλητές μου, 306 00:13:11,100 --> 00:13:13,350 ρητό δεν αρπάξει τις τιμές. 307 00:13:13,350 --> 00:13:14,520 Μην αλλάξετε τις τιμές. 308 00:13:14,520 --> 00:13:17,600 Αλλά μάλλον, να πάει σε αυτές τις διευθύνσεις και να πάρει την τιμή. 309 00:13:17,600 --> 00:13:21,430 Πηγαίνετε σε αυτή τη διεύθυνση και την αλλαγή η αξία εκεί. 310 00:13:21,430 --> 00:13:25,500 >> Έτσι, τώρα επιτρέψτε μου να μετακινηθείτε προς τα πίσω μέχρι την κορυφή, μόνο για να καθορίσει αυτή τη γραμμή εδώ, για να 311 00:13:25,500 --> 00:13:27,690 αλλάξετε το πρωτότυπο για να ταιριάζει. 312 00:13:27,690 --> 00:13:30,280 Αλλά τώρα πρέπει να κάνουμε ένα άλλο πράγμα. 313 00:13:30,280 --> 00:13:35,500 Διαισθητικά, αν έχω αλλάξει τους τύπους των επιχειρημάτων που ανταλλαγής αναμένει, 314 00:13:35,500 --> 00:13:37,245 Τι άλλο πρέπει να κάνω για να αλλαγή στον κώδικά μου; 315 00:13:37,245 --> 00:13:39,750 316 00:13:39,750 --> 00:13:40,840 >> Όταν καλώ swap. 317 00:13:40,840 --> 00:13:43,340 Διότι αυτή τη στιγμή, αυτό που είμαι I περνώντας να ανταλλάξουν ακόμα; 318 00:13:43,340 --> 00:13:47,450 Η τιμή x και η τιμή του y, ή το γάλα και το χυμό πορτοκαλιού. 319 00:13:47,450 --> 00:13:48,510 Αλλά δεν θέλω να το κάνω αυτό. 320 00:13:48,510 --> 00:13:51,060 I αντί να θέλουν να περάσουν σε ό, τι; 321 00:13:51,060 --> 00:13:53,050 Η θέση του χ και η θέση του y. 322 00:13:53,050 --> 00:13:55,300 Ποιες είναι οι ταχυδρομικές διευθύνσεις τους, να το πω έτσι. 323 00:13:55,300 --> 00:13:57,600 >> Για να συμβεί αυτό, υπάρχει ένα σύμβολο. 324 00:13:57,600 --> 00:13:59,260 Ampersand είδος των ήχων όπως η διεύθυνση. 325 00:13:59,260 --> 00:14:03,240 έτσι n, ampersand, η διεύθυνση του x, καθώς και η διεύθυνση του y. 326 00:14:03,240 --> 00:14:06,790 Έτσι είναι σκόπιμη που χρησιμοποιούμε συμπλεκτικά σύμβολα όταν καλείτε τη λειτουργία, 327 00:14:06,790 --> 00:14:10,230 και τα αστέρια κατά τη δήλωση και πότε εφαρμογή της συνάρτησης. 328 00:14:10,230 --> 00:14:14,220 >> Και σκεφτείτε εμπορικό και το διεύθυνση του φορέα εκμετάλλευσης, και το αστέρι, όπως η 329 00:14:14,220 --> 00:14:15,490 εκεί φορέα - 330 00:14:15,490 --> 00:14:18,640 ή, πιο σωστά, η χειριστή dereference. 331 00:14:18,640 --> 00:14:23,480 Έτσι, αυτό είναι ένα σωρό λέξεις μόνο για να πω ότι τώρα, ελπίζω, το swap θα 332 00:14:23,480 --> 00:14:24,440 να είναι σωστή. 333 00:14:24,440 --> 00:14:26,550 >> Επιτρέψτε μου να προχωρήσει και να κάνει - 334 00:14:26,550 --> 00:14:30,940 ας μετονομάσετε πραγματικά το αρχείο, μήπως Το πρόγραμμα αυτό εξακολουθεί να ονομάζεται δεν swap. 335 00:14:30,940 --> 00:14:33,240 Ισχυρίζομαι ότι θα τον λέμε swap.c τώρα. 336 00:14:33,240 --> 00:14:35,670 Έτσι κάνετε, swap. 337 00:14:35,670 --> 00:14:37,520 Dot, slash, swap. 338 00:14:37,520 --> 00:14:40,210 >> Και τώρα πράγματι, το χ είναι 1, το Υ είναι 2. 339 00:14:40,210 --> 00:14:44,040 Και στη συνέχεια, το χ είναι 2, το γ είναι ένα. 340 00:14:44,040 --> 00:14:46,500 Λοιπόν ας δούμε αν δεν μπορούμε να κάνουμε αυτή την λίγο διαφορετικά ως προς το τι είναι 341 00:14:46,500 --> 00:14:47,180 συμβαίνει εδώ. 342 00:14:47,180 --> 00:14:51,250 Κατ 'αρχάς, επιτρέψτε μου να κάνετε ζουμ σε μας αντλώντας οθόνη εδώ. 343 00:14:51,250 --> 00:14:54,160 Και επιτρέψτε μου να προτείνω για μια στιγμή - και κάθε φορά που ήθελα να επιστήσω εδώ θα πρέπει να αντικατοπτρίζεται 344 00:14:54,160 --> 00:14:58,660 εκεί τώρα - επιτρέψτε μου να προτείνω εδώ είναι ένα σωρό της μνήμης, ή 345 00:14:58,660 --> 00:15:00,540 RAM, στο εσωτερικό του υπολογιστή μου. 346 00:15:00,540 --> 00:15:04,140 >> Και αυτό θα είναι ο αριθμός δάγκωμα, ας πούμε, 1. 347 00:15:04,140 --> 00:15:05,720 Αυτό θα είναι bytes αριθμό 2. 348 00:15:05,720 --> 00:15:08,220 Και θα κάνω ένα σωρό άλλα, και τότε μια δέσμη των dot τελείες dot να 349 00:15:08,220 --> 00:15:10,880 δείχνουν ότι υπάρχει 2 δισ. από αυτά τα πράγματα. 350 00:15:10,880 --> 00:15:13,520 4, 5, και ούτω καθεξής. 351 00:15:13,520 --> 00:15:17,055 >> Έτσι, υπάρχουν τα πρώτα πέντε bytes της μνήμης του υπολογιστή μου. 352 00:15:17,055 --> 00:15:17,560 Εντάξει; 353 00:15:17,560 --> 00:15:19,060 Πολύ λίγοι από 2 δισ. ευρώ. 354 00:15:19,060 --> 00:15:21,120 Αλλά τώρα είμαι πρόκειται να προτείνει η ακόλουθη. 355 00:15:21,120 --> 00:15:27,490 Πάω να προτείνω x πρόκειται να αποθηκεύσει τον αριθμό 1, και y πρόκειται 356 00:15:27,490 --> 00:15:29,690 να αποθηκεύσετε τον αριθμό 2. 357 00:15:29,690 --> 00:15:35,000 Και επιτρέψτε μου να προχωρήσει τώρα και αντιπροσωπεύει οι τιμές αυτές ως εξής. 358 00:15:35,000 --> 00:15:41,510 >> Ας το κάνουμε ως εξής. 359 00:15:41,510 --> 00:15:42,870 Δώσε μου ένα δευτερόλεπτο. 360 00:15:42,870 --> 00:15:44,150 Ένα δευτερόλεπτο. 361 00:15:44,150 --> 00:15:45,680 OK. 362 00:15:45,680 --> 00:15:47,560 Θέλω να κάνω αυτό το λίγο - 363 00:15:47,560 --> 00:15:50,440 ας το κάνουμε πάλι. 364 00:15:50,440 --> 00:15:53,250 Διαφορετικά Πάω να και τη χρήση του ίδιους αριθμούς, άθελά τους, 365 00:15:53,250 --> 00:15:54,230 πολλές φορές. 366 00:15:54,230 --> 00:15:57,320 >> Έτσι ακριβώς έτσι έχουμε διαφορετικούς αριθμούς για να μιλήσουμε για, ας ονομάσουμε αυτό byte 367 00:15:57,320 --> 00:16:03,391 αριθμό 123, 124, 125, 126, και dot dot dot. 368 00:16:03,391 --> 00:16:08,400 Και επιτρέψτε μου να ισχυρίζονται τώρα ότι είμαι πρόκειται να θέσει την τιμή 1 εδώ, και την τιμή 2 369 00:16:08,400 --> 00:16:11,990 εδώ, αλλιώς γνωστή ως x και y. 370 00:16:11,990 --> 00:16:15,300 Έτσι, αυτό ακριβώς συμβαίνει, έτσι ώστε Αυτό είναι x, y αυτό είναι. 371 00:16:15,300 --> 00:16:18,180 >> Και μόνο από κάποιο τυχαίο, η υπολογιστή, το λειτουργικό σύστημα, 372 00:16:18,180 --> 00:16:21,890 συνέβη να βάλει στη θέση x αριθμό 123. 373 00:16:21,890 --> 00:16:25,590 Και y καταλήξαμε στη θέση 124 - 374 00:16:25,590 --> 00:16:26,330 γαμώτο. 375 00:16:26,330 --> 00:16:28,700 Θα έπρεπε να καθοριστεί αυτό. 376 00:16:28,700 --> 00:16:34,040 Ω άνθρωπος, θέλω πραγματικά να το κάνετε αυτό; 377 00:16:34,040 --> 00:16:37,340 Ναι, θέλω να διορθώσω αυτό και β κατάλληλη γι 'αυτό σήμερα. 378 00:16:37,340 --> 00:16:39,950 Δυστυχώς, νέος σε αυτό. 379 00:16:39,950 --> 00:16:45,020 >> 127, 131, και δεν ήθελα να είναι αυτό πολύπλοκες, αλλά γιατί δεν μπορώ να αλλάξω το 380 00:16:45,020 --> 00:16:46,340 αριθμοί είναι εκεί; 381 00:16:46,340 --> 00:16:48,360 Επειδή θέλω να τα ints στην πραγματικότητα είναι τέσσερα bytes. 382 00:16:48,360 --> 00:16:49,810 Οπότε ας είναι σούπερ πρωκτικό γι 'αυτό. 383 00:16:49,810 --> 00:16:53,800 Έτσι ώστε αν συμβεί 1 που πρέπει να αντιμετωπιστούν 123, το 2, πρόκειται να είναι στη διεύθυνση 384 00:16:53,800 --> 00:16:55,730 127 γιατί είναι μόλις 4 αποχαιρετισμός μακριά. 385 00:16:55,730 --> 00:16:56,210 Αυτό είναι όλο. 386 00:16:56,210 --> 00:16:58,640 Και θα ξεχάσουμε όλα τα άλλες διευθύνσεις στον κόσμο. 387 00:16:58,640 --> 00:17:03,320 >> Έτσι, το χ είναι στην θέση 123, γ είναι στη θέση 127. 388 00:17:03,320 --> 00:17:05,770 Και τώρα, τι μπορώ να κάνω πραγματικότητα θέλετε να κάνετε; 389 00:17:05,770 --> 00:17:10,099 Όταν καλώ ανταλλαγής τώρα, τι είναι πραγματικά συμβαίνει; 390 00:17:10,099 --> 00:17:14,920 Λοιπόν, όταν καλώ swap, είμαι περνώντας τη διεύθυνση των χ και η διεύθυνση του y. 391 00:17:14,920 --> 00:17:18,540 Έτσι, για παράδειγμα, εάν αυτά τα δύο τεμάχια χαρτιού αντιπροσωπεύουν σήμερα τα δύο 392 00:17:18,540 --> 00:17:23,510 επιχειρήματα α και β να ανταλλάξουν, τι είμαι πρόκειται να γράψω για το πρώτο από αυτά, 393 00:17:23,510 --> 00:17:27,720 που Πάω να καλέσω αναφέρονται ως ένα; 394 00:17:27,720 --> 00:17:30,610 >> Ακριβώς, 123. 395 00:17:30,610 --> 00:17:31,905 Έτσι, αυτό που ισχυρίζονται είναι ένα. 396 00:17:31,905 --> 00:17:32,955 Αυτή είναι η παράμετρος a. 397 00:17:32,955 --> 00:17:35,856 Βάζω την διεύθυνση του x εκεί. 398 00:17:35,856 --> 00:17:38,152 >> Τι είναι αυτό; 399 00:17:38,152 --> 00:17:40,890 >> Τι είναι αυτό; 400 00:17:40,890 --> 00:17:41,190 >> Όχι, όχι. 401 00:17:41,190 --> 00:17:41,720 Αυτό είναι εντάξει. 402 00:17:41,720 --> 00:17:42,570 Ακόμα καλό, εξακολουθεί να είναι καλή. 403 00:17:42,570 --> 00:17:43,530 Έτσι, αυτό είναι ένα. 404 00:17:43,530 --> 00:17:46,240 Και τώρα για το δεύτερο κομμάτι χαρτί, Αυτό πρόκειται να είναι b, και τι είμαι εγώ 405 00:17:46,240 --> 00:17:49,010 πρόκειται να εγγράφως σχετικά με αυτό το κομμάτι χαρτί; 406 00:17:49,010 --> 00:17:50,080 127. 407 00:17:50,080 --> 00:17:53,720 >> Έτσι, το μόνο πράγμα που έχει αλλάξει από προηγούμενη αφήγηση μας από αυτή την ιστορία είναι, 408 00:17:53,720 --> 00:17:58,590 όχι κυριολεκτικά 1 και 2, είμαι πρόκειται να περάσει το 123 και το 127. 409 00:17:58,590 --> 00:18:02,130 Και είμαι τώρα πρόκειται να θέσει αυτά τα μέσα από αυτό το κουτί, εντάξει; 410 00:18:02,130 --> 00:18:04,640 Έτσι ώστε μαύρο κουτί αντιπροσωπεύει τώρα η λειτουργία εναλλαγής. 411 00:18:04,640 --> 00:18:07,230 >> Εν τω μεταξύ, ας ρίξουμε τώρα κάποιος εφαρμόσουν τη λειτουργία εναλλαγής. 412 00:18:07,230 --> 00:18:09,090 Θα μπορούσε κάποιος εδώ επιθυμούσατε να προσφέρετε εθελοντικά; 413 00:18:09,090 --> 00:18:09,560 Ανέβα. 414 00:18:09,560 --> 00:18:11,080 Ποιο είναι το όνομά σου; 415 00:18:11,080 --> 00:18:11,460 Τσάρλι. 416 00:18:11,460 --> 00:18:12,080 Εντάξει, Τσάρλι. 417 00:18:12,080 --> 00:18:14,810 Ανέβα. 418 00:18:14,810 --> 00:18:17,310 >> Έτσι, ο Τσάρλι πρόκειται να παίξει ο ρόλος του μαύρου κουτιού μας. 419 00:18:17,310 --> 00:18:21,460 Και ο Τσάρλι, τι θα ήθελα να κάνω τώρα είναι να εφαρμόσει ανταλλαγής με τέτοιο τρόπο 420 00:18:21,460 --> 00:18:25,320 ότι, δεδομένου οι δύο διευθύνσεις, θα ήταν στην πραγματικότητα πρόκειται 421 00:18:25,320 --> 00:18:26,330 να αλλάξετε τις τιμές. 422 00:18:26,330 --> 00:18:28,290 Και εγώ θα ψιθυρίσω στο αυτί σας πώς να τρέξει την τηλεόραση εδώ. 423 00:18:28,290 --> 00:18:29,930 >> Έτσι προχωρήστε, και είσαι το μαύρο κουτί. 424 00:18:29,930 --> 00:18:30,920 Φτάσετε εκεί. 425 00:18:30,920 --> 00:18:34,054 Ποιες αξίες βλέπετε για μια, και ποιες αξίες βλέπεις για το β? 426 00:18:34,054 --> 00:18:36,740 >> CHARLIE: α είναι 123 και το b είναι 127. 427 00:18:36,740 --> 00:18:37,530 >> DAVID MALAN: OK, ακριβώς. 428 00:18:37,530 --> 00:18:38,940 Τώρα παύση εκεί για μια στιγμή. 429 00:18:38,940 --> 00:18:41,680 Το πρώτο πράγμα που πρόκειται να κάνουμε τώρα, σύμφωνα με τον κώδικα - η οποία 430 00:18:41,680 --> 00:18:43,220 Θα τραβήξει μέχρι τώρα στην οθόνη - 431 00:18:43,220 --> 00:18:46,750 θα είναι να διαθέσει λίγο κομμάτι της μνήμης που ονομάζεται temp. 432 00:18:46,750 --> 00:18:48,850 Έτσι, Πάω να προχωρήσει και να σας δώσει ότι μνήμης. 433 00:18:48,850 --> 00:18:52,210 >> Έτσι, αυτό πρόκειται να είναι μια τρίτη μεταβλητή ότι έχετε πρόσβαση 434 00:18:52,210 --> 00:18:54,080 καλέσατε temp. 435 00:18:54,080 --> 00:18:57,120 Και τι πρόκειται να γράψω στο κομμάτι θερμοκρασία του χαρτιού; 436 00:18:57,120 --> 00:19:02,524 437 00:19:02,524 --> 00:19:03,470 >> CHARLIE: Δείκτες, έτσι δεν είναι; 438 00:19:03,470 --> 00:19:04,790 >> DAVID MALAN: Εντάξει, δεν είναι καλά κατ 'ανάγκην δείκτες. 439 00:19:04,790 --> 00:19:07,230 Έτσι, η γραμμή του κώδικα που έχω τονίζεται στη δεξιά πλευρά, 440 00:19:07,230 --> 00:19:07,900 ας ξεκινήσουμε από εκεί. 441 00:19:07,900 --> 00:19:08,890 Λέει ένα αστέρι. 442 00:19:08,890 --> 00:19:11,670 Έτσι, ένα είναι επί του παρόντος την αποθήκευση ο αριθμός 123. 443 00:19:11,670 --> 00:19:16,660 Και μόνο διαισθητικά, τι έκανε αστέρων 123 σημαίνει; 444 00:19:16,660 --> 00:19:21,630 >> Αλλά ειδικά, εάν α είναι 123, ένα αστέρι σημαίνει τι; 445 00:19:21,630 --> 00:19:22,560 Η τιμή του a. 446 00:19:22,560 --> 00:19:24,580 Ή πιο άνετα, πάω εκεί. 447 00:19:24,580 --> 00:19:28,620 Έτσι, επιτρέψτε μου να προτείνω ότι, κρατώντας το ένα στο το χέρι σας, να προχωρήσει και να αντιμετωπίζει αυτό το 448 00:19:28,620 --> 00:19:29,430 σαν να είναι ένας χάρτης. 449 00:19:29,430 --> 00:19:32,940 Και τον εαυτό σας με τα πόδια πάνω στον υπολογιστή μνήμης, και μας βρείτε ό, τι είναι 450 00:19:32,940 --> 00:19:36,520 στη θέση 123. 451 00:19:36,520 --> 00:19:37,720 Ακριβώς. 452 00:19:37,720 --> 00:19:41,100 >> Έτσι βλέπουμε στη θέση 123 είναι αυτό, προφανώς; 453 00:19:41,100 --> 00:19:44,240 Εντάξει, έτσι τι αξία πλέον είσαι πρόκειται να τεθεί σε temp; 454 00:19:44,240 --> 00:19:44,750 Ακριβώς. 455 00:19:44,750 --> 00:19:45,600 Έτσι προχωρήστε και να το κάνουμε αυτό. 456 00:19:45,600 --> 00:19:51,280 Και γράψτε τον αριθμό 1 για το κομμάτι του το χαρτί που είναι επί του παρόντος με τίτλο temp. 457 00:19:51,280 --> 00:19:53,540 >> Και τώρα το επόμενο βήμα που θα πάμε να εφαρμόσει 458 00:19:53,540 --> 00:19:54,310 πρόκειται να είναι αυτό. 459 00:19:54,310 --> 00:19:57,820 Λοιπόν, στη δεξιά πλευρά του επόμενη γραμμή κώδικα είναι αστέρι b. Β, του 460 00:19:57,820 --> 00:19:59,260 Φυσικά, αποθηκεύει μια διεύθυνση. 461 00:19:59,260 --> 00:20:02,270 Ότι οι διευθύνσεις 127. 462 00:20:02,270 --> 00:20:06,620 Star B σημαίνει αυτό, ανέμελα μιλώντας; 463 00:20:06,620 --> 00:20:08,700 >> Πηγαίνετε σε αυτήν τη θέση. 464 00:20:08,700 --> 00:20:14,988 Έτσι προχωρήστε και να μας βρείτε τι είναι στη θέση 127. 465 00:20:14,988 --> 00:20:15,480 OK. 466 00:20:15,480 --> 00:20:19,170 Φυσικά, στη θέση 127, εξακολουθεί να είναι η τιμή 2. 467 00:20:19,170 --> 00:20:24,060 Λοιπόν, τι θα πας τώρα στο κατάστημα Όποια και αν είναι σε θέση σε ένα; 468 00:20:24,060 --> 00:20:26,860 Έτσι αστέρι μέσο μεταβείτε στη θέση ενός. 469 00:20:26,860 --> 00:20:29,770 Ποια είναι η θέση ένα; 470 00:20:29,770 --> 00:20:30,430 >> Ακριβώς. 471 00:20:30,430 --> 00:20:34,190 Έτσι τώρα, αν θέλετε να αλλάξετε τι είναι σε αυτή τη θέση - 472 00:20:34,190 --> 00:20:36,470 Θα πάω μπροστά και να τρέξει Η γόμα είναι εδώ. 473 00:20:36,470 --> 00:20:37,760 Και βάζουμε τώρα πίσω στο πινέλο. 474 00:20:37,760 --> 00:20:42,190 Τι αριθμό θα πας να γράψετε σε αυτό το κενό πλαίσιο τώρα; 475 00:20:42,190 --> 00:20:42,850 >> Ακριβώς. 476 00:20:42,850 --> 00:20:46,470 Έτσι, αυτή η γραμμή του κώδικα, να είναι σαφές - αφήστε Θέλω να διακόψω τι Τσάρλυ κάνουν και 477 00:20:46,470 --> 00:20:51,730 επισημάνω εδώ, τι ακριβώς γίνεται είναι γράφουν στο κουτί στη θέση 123 478 00:20:51,730 --> 00:20:55,150 η τιμή που ήταν προηγουμένως σε b. 479 00:20:55,150 --> 00:20:59,140 Και έτσι έχουμε τώρα υλοποιούνται όντως Αυτή η δεύτερη γραμμή του κώδικα. 480 00:20:59,140 --> 00:21:01,920 >> Τώρα, δυστυχώς, δεν υπάρχει ακόμα μια γραμμή που απομένουν. 481 00:21:01,920 --> 00:21:04,900 Τώρα τι είναι temp, κυριολεκτικά; 482 00:21:04,900 --> 00:21:06,200 Είναι προφανές ότι το νούμερο ένα. 483 00:21:06,200 --> 00:21:07,020 Αυτό δεν είναι μια διεύθυνση. 484 00:21:07,020 --> 00:21:09,380 Είναι απλά ένας αριθμός, το είδος των μια μεταβλητή από την πρώτη εβδομάδα. 485 00:21:09,380 --> 00:21:13,520 >> Και τώρα, όταν λέτε αστέρι b, αυτό σημαίνει ότι πηγαίνετε στο Β διεύθυνση, η οποία είναι 486 00:21:13,520 --> 00:21:15,090 Φυσικά εδώ. 487 00:21:15,090 --> 00:21:16,020 Έτσι, τη στιγμή που θα φτάσετε εκεί - 488 00:21:16,020 --> 00:21:18,320 Θα πάω μπροστά και να διαγράψει ό, τι είναι στην πραγματικότητα εκεί - και τι είσαι 489 00:21:18,320 --> 00:21:20,820 πρόκειται να γράψω τώρα στο 127 θέση; 490 00:21:20,820 --> 00:21:22,010 >> CHARLIE: Θερμοκρασία, η οποία είναι μία. 491 00:21:22,010 --> 00:21:23,430 >> DAVID MALAN: Temp, το οποίο είναι ένα. 492 00:21:23,430 --> 00:21:25,670 Και τι συμβαίνει με temp στο τέλος; 493 00:21:25,670 --> 00:21:26,600 Λοιπόν, πραγματικά δεν ξέρω. 494 00:21:26,600 --> 00:21:27,420 Εμείς δεν ενδιαφέρονται πραγματικά. 495 00:21:27,420 --> 00:21:31,090 Κάθε φορά που έχουμε εφαρμόσει μια λειτουργία μέχρι σήμερα, κάθε τοπικές μεταβλητές που έχετε 496 00:21:31,090 --> 00:21:31,890 είναι πράγματι τοπικό. 497 00:21:31,890 --> 00:21:33,060 Και απλά εξαφανίζονται. 498 00:21:33,060 --> 00:21:35,040 Είναι ανακτηθεί από το λειτουργικό σύστημα τελικά. 499 00:21:35,040 --> 00:21:39,800 >> Έτσι, το γεγονός ότι η θερμοκρασία εξακολουθεί να έχει το τιμή 1 είναι είδος θεμελιωδώς 500 00:21:39,800 --> 00:21:41,150 πληκτικός μας. 501 00:21:41,150 --> 00:21:43,100 Εντάξει, έτσι ώστε το χειροκρότημά του αν μπορούσαμε για τον Charlie. 502 00:21:43,100 --> 00:21:46,400 Πολύ καλά κάνει. 503 00:21:46,400 --> 00:21:51,520 >> Εντάξει, έτσι τι κάνει περισσότερα Αυτό σημαίνει ότι μπορούμε να κάνουμε; 504 00:21:51,520 --> 00:21:54,400 Έτσι, αποδεικνύεται ότι έχουμε ήδη λέει μερικά λευκά ψέματα 505 00:21:54,400 --> 00:21:55,540 για αρκετό καιρό. 506 00:21:55,540 --> 00:21:59,990 Πράγματι, αποδεικνύεται ότι μια σειρά, όλα αυτού του χρόνου, δεν είναι πραγματικά ένα 507 00:21:59,990 --> 00:22:02,190 ακολουθία χαρακτήρων per se. 508 00:22:02,190 --> 00:22:03,980 Το είδος του είναι ότι διαισθητικά. 509 00:22:03,980 --> 00:22:08,270 >> Αλλά από τεχνική άποψη, η σειρά είναι τύπο δεδομένων που δηλώνονται μέσα από 510 00:22:08,270 --> 00:22:12,170 το CS50 βιβλιοθήκη για να απλοποιήσει τον κόσμο για τις πρώτες λίγες εβδομάδες της κατηγορίας. 511 00:22:12,170 --> 00:22:20,130 Τι string είναι πραγματικά η διεύθυνση ενός χαρακτήρα κάπου στη RAM. 512 00:22:20,130 --> 00:22:25,530 Ένα string είναι πραγματικά ένας αριθμός, όπως 123 ή 127, που συμβαίνει να οριοθετήσει 513 00:22:25,530 --> 00:22:28,420 όπου μια σειρά ξεκινά μνήμη του υπολογιστή σας. 514 00:22:28,420 --> 00:22:31,870 >> Αλλά αυτό δεν αντιπροσωπεύει το συμβολοσειρά, per se, μόνη της. 515 00:22:31,870 --> 00:22:33,460 Και μπορούμε να δούμε αυτό ως εξής. 516 00:22:33,460 --> 00:22:35,980 Επιτρέψτε μου να προχωρήσει και να ανοίξει ο κώδικας που υπάρχει μεταξύ των 517 00:22:35,980 --> 00:22:38,340 πηγή σήμερα παραδείγματα κώδικα. 518 00:22:38,340 --> 00:22:42,225 Και Πάω να πάει μπροστά και να ανοίξει up, ας πούμε, να συγκρίνουν-0.c. 519 00:22:42,225 --> 00:22:44,830 520 00:22:44,830 --> 00:22:48,790 Αυτό είναι ένα buggy πρόγραμμα που πρόκειται να εφαρμοστεί ως εξής. 521 00:22:48,790 --> 00:22:49,040 >> Πρώτον. 522 00:22:49,040 --> 00:22:50,420 Πάω να πω κάτι. 523 00:22:50,420 --> 00:22:52,660 Στη συνέχεια, Πάω να προχωρήσει και πάρετε μια σειρά από τον χρήστη 524 00:22:52,660 --> 00:22:53,750 σε αυτό επόμενη γραμμή. 525 00:22:53,750 --> 00:22:55,370 Στη συνέχεια, Πάω να το πω και πάλι. 526 00:22:55,370 --> 00:22:57,540 Στη συνέχεια, Πάω να πάρετε ένα άλλο συμβολοσειρά από το χρήστη. 527 00:22:57,540 --> 00:23:00,390 >> Και ανακοίνωση, δείχνω ένα από τα χορδές σε μια μεταβλητή που ονομάζεται s, και 528 00:23:00,390 --> 00:23:03,040 άλλη από αυτές τις χορδές σε μια μεταβλητή ονομάζεται t. 529 00:23:03,040 --> 00:23:07,480 Και τώρα πάω να διεκδικήσει, πολύ ευλόγως, ότι αν s ισούται ισούται με t, 530 00:23:07,480 --> 00:23:08,940 οι χορδές είναι το ίδιο. 531 00:23:08,940 --> 00:23:09,970 Πληκτρολογείτε το ίδιο πράγμα. 532 00:23:09,970 --> 00:23:11,830 Αλλιώς, είναι οι χορδές δεν είναι το ίδιο πράγμα. 533 00:23:11,830 --> 00:23:15,440 >> Μετά από όλα, αν είσοδο δύο ints, δύο χαρακτήρες, δύο πλωτήρες, δύο δίκλινα, οποιοδήποτε από 534 00:23:15,440 --> 00:23:18,400 τους τύπους δεδομένων που έχουμε μιλήσει για μέχρι στιγμής να τα συγκρίνει - 535 00:23:18,400 --> 00:23:22,070 ανάκληση κάναμε πολύ σαφές πριν από λίγο καιρό ότι δεν το κάνετε αυτό, επειδή ένα 536 00:23:22,070 --> 00:23:25,840 ενιαία ίσον είναι φυσικά ο φορέας ανάθεσης. 537 00:23:25,840 --> 00:23:26,820 Έτσι, αυτό θα ήταν ένα bug. 538 00:23:26,820 --> 00:23:29,260 >> Χρησιμοποιούμε την ίση ίσον, η οποία μάλιστα συγκρίνει 539 00:23:29,260 --> 00:23:31,050 πράγματα για την πραγματική ισότητα. 540 00:23:31,050 --> 00:23:32,275 Αλλά εγώ ισχυρίζονται ότι αυτό είναι προβληματικό. 541 00:23:32,275 --> 00:23:37,400 Αν πάω μπροστά και να συγκρίνουν το μηδέν, και στη συνέχεια κάντε dot κάθετο συγκρίνουν το μηδέν. 542 00:23:37,400 --> 00:23:39,700 Και τύπου Ι σε, ας πούμε, γεια. 543 00:23:39,700 --> 00:23:41,590 Και τότε ας πούμε γεια και πάλι. 544 00:23:41,590 --> 00:23:46,040 Κυριολεκτικά το ίδιο πράγμα, ο υπολογιστής ισχυρισμοί θα πληκτρολογήσει διαφορετικά πράγματα. 545 00:23:46,040 --> 00:23:47,640 >> Τώρα, ίσως πληκτρολογήσατε λάθος κάτι. 546 00:23:47,640 --> 00:23:49,910 Θα πληκτρολογήστε το όνομά μου αυτή τη φορά. 547 00:23:49,910 --> 00:23:52,580 Θέλω να πω, γεια σου. 548 00:23:52,580 --> 00:23:54,770 Γεια σας. 549 00:23:54,770 --> 00:23:57,360 Είναι διαφορετικό κάθε φορά. 550 00:23:57,360 --> 00:23:58,430 >> Λοιπόν, γιατί συμβαίνει αυτό; 551 00:23:58,430 --> 00:24:00,140 Τι πραγματικά συμβαίνει κάτω από την κουκούλα; 552 00:24:00,140 --> 00:24:03,270 Λοιπόν, τι πραγματικά συμβαίνει κάτω η κουκούλα είναι η σειρά στη συνέχεια 553 00:24:03,270 --> 00:24:07,410 I δακτυλογραφημένα σε εκείνη την πρώτη φορά, για παράδειγμα, είναι η λέξη γειά σου, φυσικά. 554 00:24:07,410 --> 00:24:11,660 Αλλά αν εμείς εκπροσωπούμε αυτό κάτω η κουκούλα, υπενθυμίζουν ότι μια 555 00:24:11,660 --> 00:24:13,470 συμβολοσειρά είναι σε μία συστοιχία. 556 00:24:13,470 --> 00:24:15,040 Και έχουμε πει όσο στο παρελθόν. 557 00:24:15,040 --> 00:24:20,200 >> Έτσι, αν ήθελα να επιστήσω ότι η σειρά όπως αυτό, είμαι πρόκειται να αντιπροσωπεύει κάτι πολύ 558 00:24:20,200 --> 00:24:23,030 παρόμοιο με αυτό που κάναμε πριν από λίγο. 559 00:24:23,030 --> 00:24:25,390 Και υπάρχει πραγματικά κάτι ειδικά εδώ, πάρα πολύ. 560 00:24:25,390 --> 00:24:28,090 Τι έχουμε διαπιστώσει ήταν σε στο τέλος κάθε σειράς; 561 00:24:28,090 --> 00:24:30,760 Ναι, αυτό το μηδέν backslash, η οποία είναι ακριβώς ο τρόπος που εκπροσωπούν, 562 00:24:30,760 --> 00:24:33,610 κυριολεκτικά, 00000000. 563 00:24:33,610 --> 00:24:35,680 Οκτώ 0 bits σε μια σειρά. 564 00:24:35,680 --> 00:24:37,610 >> Δεν ξέρω, ειλικρινά, τι μετά από αυτό. 565 00:24:37,610 --> 00:24:40,090 Αυτό είναι απλά ένα μάτσο περισσότερη μνήμη RAM στο εσωτερικό του υπολογιστή μου. 566 00:24:40,090 --> 00:24:40,970 Αλλά αυτό είναι ένας πίνακας. 567 00:24:40,970 --> 00:24:42,260 Μιλήσαμε για τους πίνακες πριν. 568 00:24:42,260 --> 00:24:45,010 Και εμείς συνήθως μιλάμε για συστοιχίες ως θέση μηδέν, 569 00:24:45,010 --> 00:24:46,580 τότε, στη συνέχεια, δύο. 570 00:24:46,580 --> 00:24:47,950 Αλλά αυτό είναι μόνο για λόγους ευκολίας. 571 00:24:47,950 --> 00:24:49,380 Και αυτό είναι πολύ σχετική. 572 00:24:49,380 --> 00:24:53,010 >> Όταν είστε πραγματικά να πάρει μνήμης από ο υπολογιστής, είναι φυσικά οποιαδήποτε 573 00:24:53,010 --> 00:24:55,450 2 δισ. κάποιο περίεργο bytes, ενδεχομένως. 574 00:24:55,450 --> 00:24:59,100 Έτσι, πραγματικά κάτω από το καπό, όλο αυτό το διάστημα, ναι. 575 00:24:59,100 --> 00:25:01,670 Αυτό θα μπορούσε κάλλιστα να είναι μηδέν βραχίονα. 576 00:25:01,670 --> 00:25:04,780 Αλλά αν σκάψει ακόμη βαθύτερα κάτω η κουκούλα, αυτό είναι πραγματικά 577 00:25:04,780 --> 00:25:07,000 Αριθμός 123. 578 00:25:07,000 --> 00:25:09,150 Αυτή είναι η διεύθυνση 124. 579 00:25:09,150 --> 00:25:11,040 Αυτή είναι η διεύθυνση 125. 580 00:25:11,040 --> 00:25:12,540 >> Και εγώ δεν βίδα μέχρι αυτή τη φορά. 581 00:25:12,540 --> 00:25:15,840 Αυτά είναι τώρα ένα bytes Εκτός για ποιο λόγο; 582 00:25:15,840 --> 00:25:17,930 Πόσο μεγάλη είναι μια χαρα; 583 00:25:17,930 --> 00:25:19,170 Μια χαρα είναι μόνο ένα byte. 584 00:25:19,170 --> 00:25:20,570 Ένας int είναι συνήθως τέσσερα bytes. 585 00:25:20,570 --> 00:25:24,850 Έτσι, γι 'αυτό έκανα 123, 127, 131 και ούτω καθεξής. 586 00:25:24,850 --> 00:25:27,560 Τώρα μπορώ να κρατήσω τα μαθηματικά απλούστερη και να κάνουν ακριβώς συν 1. 587 00:25:27,560 --> 00:25:30,510 Και αυτό είναι τώρα τι πραγματικά συμβαίνει για κάτω από το καπό. 588 00:25:30,510 --> 00:25:37,760 >> Έτσι, όταν δηλώνουν κάτι τέτοιο, συμβολοσειρά s, αυτό είναι πραγματικά - 589 00:25:37,760 --> 00:25:39,170 αποδεικνύεται - 590 00:25:39,170 --> 00:25:41,190 char αστέρων. 591 00:25:41,190 --> 00:25:44,640 Star, φυσικά, σημαίνει διεύθυνση, γνωστός και ως δείκτη. 592 00:25:44,640 --> 00:25:46,200 Έτσι είναι η διεύθυνση του κάτι. 593 00:25:46,200 --> 00:25:47,510 Ποια είναι η διεύθυνση της; 594 00:25:47,510 --> 00:25:47,760 >> Καλά - 595 00:25:47,760 --> 00:25:51,680 Είμαι ο μόνος που μπορεί να δει το πολύ σημαντικό σημείο που κάνω, ή νομίζετε 596 00:25:51,680 --> 00:25:52,560 Είμαι κάνει. 597 00:25:52,560 --> 00:25:55,270 Έτσι κορδόνι - 598 00:25:55,270 --> 00:25:57,180 το λυπηρό είναι ότι έχω μια οθόνη εκεί όπου 599 00:25:57,180 --> 00:25:58,100 θα μπορούσε να δει ότι. 600 00:25:58,100 --> 00:26:00,990 >> Εντάξει, έτσι εγχόρδων s είναι ό, τι Έχω δηλώσει στο παρελθόν. 601 00:26:00,990 --> 00:26:04,600 Αλλά αποδεικνύεται, χάρη σε μια μικρή μαγεία στη βιβλιοθήκη CS50, όλα αυτά 602 00:26:04,600 --> 00:26:08,780 εγχόρδων του χρόνου έχει κυριολεκτικά ήταν char αστέρων. 603 00:26:08,780 --> 00:26:11,310 Το αστέρι σημαίνει και πάλι δείκτη ή διεύθυνση. 604 00:26:11,310 --> 00:26:14,180 Το γεγονός ότι είναι το πλευρίζουν λέξη char σημαίνει ότι είναι η 605 00:26:14,180 --> 00:26:15,970 διεύθυνση ενός χαρακτήρα. 606 00:26:15,970 --> 00:26:23,100 >> Έτσι, αν πάρει σειρά ονομάζεται, και πληκτρολογήστε στην H-Ε-L-L-O, προτείνει τώρα τι έχει να 607 00:26:23,100 --> 00:26:27,330 εγχόρδων κυριολεκτικά την επιστροφή όλων των αυτή τη φορά, ακόμα κι αν έχουμε μάλλον 608 00:26:27,330 --> 00:26:29,980 υπεραπλουστευμένη τον κόσμο; 609 00:26:29,980 --> 00:26:33,310 Τι σημαίνει να πάρει χορδών επιστρέφει ως τιμή επιστροφής της; 610 00:26:33,310 --> 00:26:35,830 611 00:26:35,830 --> 00:26:38,720 >> 123 σε αυτή την περίπτωση, για παράδειγμα. 612 00:26:38,720 --> 00:26:42,630 Έχουμε ήδη πει ότι παίρνουν σειρά απλά επιστρέφει ένα string, μια ακολουθία 613 00:26:42,630 --> 00:26:43,300 χαρακτήρων. 614 00:26:43,300 --> 00:26:44,790 Αλλά αυτό είναι ένα κομμάτι από ένα λευκό ψέμα. 615 00:26:44,790 --> 00:26:48,010 Ο τρόπος για να πάρει σειρά λειτουργεί πραγματικά κάτω από την κουκούλα είναι ότι παίρνει ένα 616 00:26:48,010 --> 00:26:48,930 συμβολοσειρά από το χρήστη. 617 00:26:48,930 --> 00:26:51,530 Είναι plops τους χαρακτήρες που αυτός ή αυτή τύπων στη μνήμη. 618 00:26:51,530 --> 00:26:54,680 Θα πρέπει να θέσει ένα μηδενικό κάθετος στο τέλος εκείνων ακολουθία χαρακτήρων. 619 00:26:54,680 --> 00:26:57,310 >> Αλλά τότε τι να πάρει σειρά κυριολεκτικά επιστρέψει; 620 00:26:57,310 --> 00:27:02,710 Επιστρέφει στην κυριολεξία τη διεύθυνση του πρώτα bytes στην μνήμη RAM που 621 00:27:02,710 --> 00:27:04,130 που χρησιμοποιείται για την εν λόγω δύναμη. 622 00:27:04,130 --> 00:27:07,500 Και αποδεικνύεται ότι μόνο με την επιστροφή μια ενιαία διεύθυνση της 623 00:27:07,500 --> 00:27:12,120 πρώτο χαρακτήρα της συμβολοσειράς, που είναι επαρκείς για την εύρεση το σύνολο των 624 00:27:12,120 --> 00:27:12,630 το string. 625 00:27:12,630 --> 00:27:16,930 >> Με άλλα λόγια, να αλφαριθμητικό, δεν έχει να επιστρέψει 123 και 124 και 125. 626 00:27:16,930 --> 00:27:19,950 Δεν πρέπει να μου δώσεις μια μακρά κατάλογο όλων των bytes που 627 00:27:19,950 --> 00:27:20,740 σειρά μου χρησιμοποιεί. 628 00:27:20,740 --> 00:27:22,670 Επειδή ένα, από όπου και αν όλα τα πλάτη με πλάτη. 629 00:27:22,670 --> 00:27:28,160 Και τα δύο, με βάση την πρώτη διεύθυνση, Ι μπορείτε να υπολογίσετε όπου η σειρά τελειώνει. 630 00:27:28,160 --> 00:27:29,910 Πώς; 631 00:27:29,910 --> 00:27:33,490 >> Ο ειδικός χαρακτήρας null, η Backslash μηδέν στο τέλος. 632 00:27:33,490 --> 00:27:35,430 Έτσι, με άλλα λόγια, εάν περνάτε γύρω - 633 00:27:35,430 --> 00:27:36,530 στο εσωτερικό των μεταβλητών - 634 00:27:36,530 --> 00:27:41,300 η διεύθυνση ενός char, και να αναλάβουν ότι στο τέλος της κάθε σειράς, οποιαδήποτε 635 00:27:41,300 --> 00:27:45,040 ακολουθία χαρακτήρων, όπως εμείς οι άνθρωποι σκεφτείτε χορδές, αν υποθέσουμε ότι 636 00:27:45,040 --> 00:27:48,600 στο τέλος της εν λόγω σειρά δεν υπάρχει μηδενικό backslash, είσαι χρυσή. 637 00:27:48,600 --> 00:27:52,430 Επειδή δεν μπορείτε πάντα να βρείτε το τέλος μιας συμβολοσειράς. 638 00:27:52,430 --> 00:27:54,870 >> Τώρα τι πραγματικά συμβαίνει στη συνέχεια σε αυτό το πρόγραμμα; 639 00:27:54,870 --> 00:27:59,990 Γιατί είναι αυτό το πρόγραμμα, συγκρίνουν-0.c, με λάθη; 640 00:27:59,990 --> 00:28:01,690 Τι είναι στην πραγματικότητα η σύγκριση; 641 00:28:01,690 --> 00:28:02,420 Ναι; 642 00:28:02,420 --> 00:28:05,000 >> ΦΟΙΤΗΤΗΣ: [δεν ακούγεται]. 643 00:28:05,000 --> 00:28:05,730 >> DAVID MALAN: Ακριβώς. 644 00:28:05,730 --> 00:28:08,350 Είναι συγκρίνοντας τις θέσεις των χορδών. 645 00:28:08,350 --> 00:28:12,420 Έτσι, αν ο χρήστης έχει πληκτρολογήσει γεια μία φορά, όπως έκανα, μνήμη μπορεί να καταλήξει 646 00:28:12,420 --> 00:28:13,430 μοιάζοντας με αυτό. 647 00:28:13,430 --> 00:28:18,210 Εάν ο χρήστης στη συνέχεια οι τύποι στο Γεια σας και πάλι, αλλά με την κλήση να πάρει σειρά και πάλι, c είναι 648 00:28:18,210 --> 00:28:21,800 δεν είναι ιδιαίτερα έξυπνος αν σας διδάξει να είναι έξυπνος με το γράψιμο κώδικα. 649 00:28:21,800 --> 00:28:22,430 >> C - 650 00:28:22,430 --> 00:28:23,860 και υπολογιστές γενικότερα - 651 00:28:23,860 --> 00:28:27,370 αν πληκτρολογήσετε τη λέξη Γεια σας και πάλι, ξέρετε τι πρόκειται να πάρετε. 652 00:28:27,370 --> 00:28:31,480 Είστε ακριβώς πρόκειται να πάρει μια δεύτερη σειρά της μνήμης που, ναι, συμβαίνει να είναι 653 00:28:31,480 --> 00:28:35,510 αποθήκευση H-E-L-L-O και ούτω καθεξής. 654 00:28:35,510 --> 00:28:38,240 >> Δεν πρόκειται να δούμε το ίδιο για εμάς τους ανθρώπους, αλλά αυτή η διεύθυνση 655 00:28:38,240 --> 00:28:39,460 μπορεί να μην είναι 123. 656 00:28:39,460 --> 00:28:42,470 Θα μπορούσε απλά να συμβεί έτσι ώστε η το λειτουργικό σύστημα έχει κάποιο διαθέσιμο 657 00:28:42,470 --> 00:28:45,430 χώρο, για παράδειγμα, στη θέση - 658 00:28:45,430 --> 00:28:49,820 ας πούμε κάτι αυθαίρετο, όπως αυτό είναι θέση 200. 659 00:28:49,820 --> 00:28:51,620 Και αυτή είναι η θέση 201. 660 00:28:51,620 --> 00:28:53,060 Και αυτό είναι η θέση 202. 661 00:28:53,060 --> 00:28:55,730 Δεν έχουμε καμία ιδέα για το πού αυτό είναι πρόκειται να είναι στη μνήμη. 662 00:28:55,730 --> 00:28:59,110 >> Αλλά τι σημαίνει αυτό είναι ότι ό, τι είναι πρόκειται να αποθηκευτούν σε τελική ανάλυση, s; 663 00:28:59,110 --> 00:29:00,750 Ο αριθμός 123. 664 00:29:00,750 --> 00:29:04,860 Τι πρόκειται να αποθηκευτούν σε t, σε αυτό το αυθαίρετο παράδειγμα; 665 00:29:04,860 --> 00:29:06,300 Ο αριθμός 200. 666 00:29:06,300 --> 00:29:11,410 Και όλα αυτό σημαίνει ότι τότε είναι προφανές ότι, 123 δεν είναι ίσο με 200. 667 00:29:11,410 --> 00:29:14,940 Και έτσι αυτή η κατάσταση, αν δεν αληθής. 668 00:29:14,940 --> 00:29:18,430 , Επειδή παίρνουν σειρά χρησιμοποιεί διαφορετικές κομμάτια της μνήμης κάθε φορά. 669 00:29:18,430 --> 00:29:20,360 >> Τώρα μπορούμε να δούμε πάλι αυτό σε ένα άλλο παράδειγμα. 670 00:29:20,360 --> 00:29:23,764 Επιτρέψτε μου να προχωρήσει και να ανοίξει copy-0.c. 671 00:29:23,764 --> 00:29:28,770 Ισχυρίζομαι ότι αυτό το παράδειγμα πρόκειται να δοκιμή - αλλά αποτυγχάνουν - να αντιγράψετε δύο χορδές 672 00:29:28,770 --> 00:29:29,910 ως ακολούθως. 673 00:29:29,910 --> 00:29:31,730 >> Πάω να πω κάτι για τον χρήστη. 674 00:29:31,730 --> 00:29:34,490 Είμαι στη συνέχεια πρόκειται να πάρετε μια string και να το ονομάσουμε s. 675 00:29:34,490 --> 00:29:36,400 Και τώρα, κάνω τον έλεγχο αυτό εδώ. 676 00:29:36,400 --> 00:29:37,990 Έχουμε αναφέρει αυτό μια πίσω, ενώ. 677 00:29:37,990 --> 00:29:42,490 Αλλά όταν θα μπορούσε να πάρει σειρά null επιστροφής, άλλο ειδικό χαρακτήρα, ή ειδικές 678 00:29:42,490 --> 00:29:45,050 σύμβολο ας πούμε. 679 00:29:45,050 --> 00:29:45,900 Αν είναι έξω από τη μνήμη. 680 00:29:45,900 --> 00:29:48,970 >> Για παράδειγμα, εάν ο χρήστης είναι πραγματικά είναι δύσκολο και τα είδη ένα φρικτό 681 00:29:48,970 --> 00:29:51,220 αριθμό των χαρακτήρων στην πληκτρολόγιο και χτυπήματα Enter. 682 00:29:51,220 --> 00:29:54,580 Εάν ο αριθμός των χαρακτήρων που απλά δεν μπορεί να χωράει στη RAM για οποιοδήποτε τρελό 683 00:29:54,580 --> 00:29:57,820 λόγο, αλλά και να πάρει χορδών θα μπορούσε να πολύ καλά επιστρέψει null. 684 00:29:57,820 --> 00:30:01,080 >> Ή αν το πρόγραμμά σας το ίδιο κάνει πολλά από άλλα πράγματα και εκεί ακριβώς 685 00:30:01,080 --> 00:30:03,790 δεν υπάρχει αρκετή μνήμη για get εγχόρδων για να πετύχει, θα μπορούσε να καταλήξει 686 00:30:03,790 --> 00:30:05,240 να επιστρέφουν null. 687 00:30:05,240 --> 00:30:07,160 Αλλά ας είμαστε πιο ακριβείς ως προς το τι είναι αυτό. 688 00:30:07,160 --> 00:30:10,280 Ποια είναι τα δεδομένα τύπου s είναι πραγματικά; 689 00:30:10,280 --> 00:30:11,610 Char αστέρων. 690 00:30:11,610 --> 00:30:14,560 >> Έτσι αποδεικνύεται τώρα μπορούμε φλούδα υποστηρίξει το στρώμα του null. 691 00:30:14,560 --> 00:30:17,500 Βγάζει, null είναι - ναι, προφανώς, ένα ειδικό σύμβολο. 692 00:30:17,500 --> 00:30:19,190 Αλλά τι είναι αυτό πραγματικά; 693 00:30:19,190 --> 00:30:25,220 Πραγματικά, null είναι μόνο ένα σύμβολο που οι άνθρωποι χρησιμοποιούν για να εκπροσωπήσει το μηδέν, καθώς και. 694 00:30:25,220 --> 00:30:29,010 >> Έτσι, οι συντάκτες της C, και υπολογιστές γενικότερα, αποφάσισε χρόνια πριν 695 00:30:29,010 --> 00:30:30,010 ότι, ξέρετε τι. 696 00:30:30,010 --> 00:30:34,850 Γιατί δεν μπορούμε να εξασφαλίσουμε ότι κανένας χρήστης τα δεδομένα είναι ποτέ, ποτέ, ποτέ 697 00:30:34,850 --> 00:30:36,730 αποθηκεύονται στο μηδέν αντίο; 698 00:30:36,730 --> 00:30:39,610 Στην πραγματικότητα, ακόμη και σε αυθαίρετες παράδειγμα μου πριν, δεν είχα ξεκινήσει η αρίθμηση 699 00:30:39,610 --> 00:30:40,390 bytes στο μηδέν. 700 00:30:40,390 --> 00:30:41,540 Ξεκίνησα σε ένα. 701 00:30:41,540 --> 00:30:44,950 Γιατί ήξερα ότι οι άνθρωποι στον κόσμο αποφάσισαν να κρατήσουν το μηδέν 702 00:30:44,950 --> 00:30:47,970 byte στη μνήμη RAM του καθενός, κάτι το ιδιαίτερο. 703 00:30:47,970 --> 00:30:52,020 >> Ο λόγος είναι, όποτε θέλετε να σήμα ότι κάτι έχει πάει στραβά 704 00:30:52,020 --> 00:30:55,960 όσον αφορά τις διευθύνσεις, που επέστρεψε null - αλλιώς γνωστή ως μηδέν - 705 00:30:55,960 --> 00:30:59,410 και επειδή ξέρετε ότι δεν υπάρχει legit δεδομένων στην διεύθυνση μηδέν, σαφώς 706 00:30:59,410 --> 00:31:00,400 αυτό σημαίνει ότι ένα σφάλμα. 707 00:31:00,400 --> 00:31:04,080 Και γι 'αυτό, κατά συνθήκη, ελέγξτε for null και την επιστροφή κάτι 708 00:31:04,080 --> 00:31:06,260 σαν ένα σε αυτές τις περιπτώσεις. 709 00:31:06,260 --> 00:31:09,300 >> Έτσι, αν μετακινηθείτε προς τα κάτω τώρα, αυτό είναι μόνο τότε κάποια έλεγχος σφαλμάτων, μόνο στην περίπτωση 710 00:31:09,300 --> 00:31:10,610 κάτι πήγε στραβά με [; εγγύηση?] 711 00:31:10,610 --> 00:31:13,470 εντελώς και κλείστε το πρόγραμμα με την επιστροφή νωρίς. 712 00:31:13,470 --> 00:31:19,030 Αυτή η γραμμή τώρα θα μπορούσε να ξαναγραφτεί καθώς αυτό, που σημαίνει τι; 713 00:31:19,030 --> 00:31:23,155 Στην αριστερή πλευρά, να μου δώσει ένα άλλο δείκτη σε ένα χαρακτήρα, και να το ονομάσουμε t. 714 00:31:23,155 --> 00:31:26,935 Τι είμαι εγώ αποθήκευση εσωτερικό του t, με βάση σε αυτή τη γραμμή ένα κώδικα; 715 00:31:26,935 --> 00:31:30,950 716 00:31:30,950 --> 00:31:32,170 >> Είμαι αποθήκευση μιας τοποθεσίας. 717 00:31:32,170 --> 00:31:34,742 Συγκεκριμένα, η θέση αυτό ήταν το s. 718 00:31:34,742 --> 00:31:39,000 Έτσι, αν ο χρήστης έχει πληκτρολογήσει σε γεια, και ότι η πρώτη συμβαίνει γεια για να καταλήξει 719 00:31:39,000 --> 00:31:42,567 εδώ, τότε ο αριθμός 123 είναι πρόκειται να έρθει πίσω από να πάρει 720 00:31:42,567 --> 00:31:43,810 string και να αποθηκεύονται - 721 00:31:43,810 --> 00:31:44,780 όπως είπαμε νωρίτερα - 722 00:31:44,780 --> 00:31:45,440 στο s. 723 00:31:45,440 --> 00:31:50,560 >> Όταν δηλώνω τώρα ένα άλλο δείκτη μια χαρα και να το ονομάσουμε t, ποιος αριθμός είναι 724 00:31:50,560 --> 00:31:53,940 κυριολεκτικά πρόκειται να καταλήξουν σε t σύμφωνα με την ιστορία; 725 00:31:53,940 --> 00:31:55,420 Έτσι, 123. 726 00:31:55,420 --> 00:32:00,310 >> Έτσι, από τεχνική τώρα τόσο s και t δείχνουν την ακριβή 727 00:32:00,310 --> 00:32:02,410 ίδια κομμάτια της μνήμης. 728 00:32:02,410 --> 00:32:06,140 Έτσι, παρατηρήστε τι Πάω να κάνουμε τώρα για να αποδεικνύουν ότι το πρόγραμμα αυτό είναι προβληματικό. 729 00:32:06,140 --> 00:32:08,820 >> Πρώτη Πάω να διεκδικήσει, με a f εκτύπωσης, αξιοποιώντας 730 00:32:08,820 --> 00:32:10,080 το αντίγραφο του string. 731 00:32:10,080 --> 00:32:11,660 Στη συνέχεια, Πάω να κάνω μια μικρή Έλεγχος σφαλμάτων. 732 00:32:11,660 --> 00:32:12,160 Πάω να βεβαιωθείτε. 733 00:32:12,160 --> 00:32:16,710 Ας βεβαιωθείτε ότι το t string είναι σε τουλάχιστον μεγαλύτερη από το μηδέν σε μήκος, 734 00:32:16,710 --> 00:32:19,190 οπότε υπάρχει κάποια χαρακτήρα εκεί πραγματικά να επωφεληθούμε. 735 00:32:19,190 --> 00:32:22,840 >> Και τότε ίσως να θυμάστε αυτό από τα προηγούμενα παραδείγματα. 736 00:32:22,840 --> 00:32:25,630 2 άνω - το οποίο είναι σε η ctype.h αρχείο. 737 00:32:25,630 --> 00:32:30,800 T βραχίονα μηδέν μου δίνει το μηδέν χαρακτήρα του t string. 738 00:32:30,800 --> 00:32:34,360 Και 2 άνω του ίδιου αξίας, της Φυσικά, το μετατρέπει σε κεφαλαία. 739 00:32:34,360 --> 00:32:38,230 >> Έτσι, διαισθητικά, αυτή η επισημασμένη γραμμή του κώδικα σε κεφαλαίο του πρώτου 740 00:32:38,230 --> 00:32:40,250 επιστολή στην t. 741 00:32:40,250 --> 00:32:44,485 Αλλά δεν κεφαλαιοποίηση, διαισθητικά, το πρώτο γράμμα s. 742 00:32:44,485 --> 00:32:48,130 Αλλά εάν σκέφτεστε το μέλλον, τι είμαι για να δούμε όταν τρέχω αυτό το πρόγραμμα 743 00:32:48,130 --> 00:32:54,220 και να εκτυπώσετε τόσο το πρωτότυπο, s, και το λεγόμενο αντίγραφο, t; 744 00:32:54,220 --> 00:32:55,350 >> Είναι πραγματικά πρόκειται να είναι το ίδιο. 745 00:32:55,350 --> 00:32:56,600 Και γιατί είναι αυτοί που πρόκειται να είναι το ίδιο; 746 00:32:56,600 --> 00:32:58,970 747 00:32:58,970 --> 00:33:01,020 Είναι και οι δύο δείχνουν να ακριβώς το ίδιο πράγμα. 748 00:33:01,020 --> 00:33:01,610 Έτσι, ας το κάνουμε. 749 00:33:01,610 --> 00:33:03,160 >> Κάντε μηδέν αντίγραφο. 750 00:33:03,160 --> 00:33:04,070 Θα συγκεντρώνει OK. 751 00:33:04,070 --> 00:33:06,500 Επιτρέψτε μου να τρέξει το μηδέν αντίγραφο. 752 00:33:06,500 --> 00:33:10,110 Επιτρέψτε μου να πληκτρολογήσετε κάτι σαν γεια σε όλα τα πεζά χτύπησε στη συνέχεια πατήστε Enter. 753 00:33:10,110 --> 00:33:16,520 Και ισχυρίζεται ότι τόσο η αρχική s και το αντίγραφο είναι όντως πανομοιότυπα. 754 00:33:16,520 --> 00:33:17,920 >> Έτσι, αυτό που πραγματικά συνέβη εδώ; 755 00:33:17,920 --> 00:33:20,100 Επιτρέψτε μου να αναδιατυπώσει αυτή την εικόνα μόνο να πει την ιστορία σε έναν 756 00:33:20,100 --> 00:33:21,340 ελαφρώς διαφορετικό τρόπο. 757 00:33:21,340 --> 00:33:26,060 Τι πραγματικά συμβαίνει κάτω από την κουκούλα, όταν δηλώνω κάτι σαν 758 00:33:26,060 --> 00:33:30,410 char ξεκίνημα s, ή συμβολοσειρά s, Είμαι πάρει ένα δείκτη - 759 00:33:30,410 --> 00:33:33,090 η οποία συμβαίνει να είναι τέσσερα bytes στη συσκευή CS50 760 00:33:33,090 --> 00:33:34,410 και σε πολλές των υπολογιστών. 761 00:33:34,410 --> 00:33:36,008 Και Πάω να καλέσετε αυτό το s. 762 00:33:36,008 --> 00:33:39,810 Και αυτό έχει σήμερα κάποια άγνωστη τιμή. 763 00:33:39,810 --> 00:33:43,900 >> Όταν δηλώνετε μια μεταβλητή, εκτός και αν θέσει τον εαυτό σας μια τιμή, εκεί που 764 00:33:43,900 --> 00:33:44,570 ξέρει τι υπάρχει εκεί. 765 00:33:44,570 --> 00:33:48,110 Θα μπορούσε να είναι κάποια τυχαία ακολουθία δυαδικά ψηφία από την προηγούμενη εκτέλεση. 766 00:33:48,110 --> 00:33:52,490 Έτσι, όταν, στην γραμμή μου κώδικα παίρνουν string, και στη συνέχεια να αποθηκεύσετε την επιστροφή 767 00:33:52,490 --> 00:33:54,800 αξία s να πάρει σειρά με κάποιο τρόπο - 768 00:33:54,800 --> 00:33:58,520 και εμείς θα τελικά φλούδα πίσω πώς να πάρει έργα string, διαθέτει κάποιον τρόπο 769 00:33:58,520 --> 00:34:00,480 πίνακα που ίσως φαίνεται λίγο σαν αυτό. 770 00:34:00,480 --> 00:34:05,390 H-E-L-L-O, backslash μηδέν. 771 00:34:05,390 --> 00:34:09,510 >> Ας υποθέσουμε ότι αυτή είναι η διεύθυνση 123 μόνο το πρώτο συνοχή. 772 00:34:09,510 --> 00:34:13,000 Έτσι πάρτε επιστρέφει string, στην επισημασμένη γραμμή εκεί, επιστρέφει το 773 00:34:13,000 --> 00:34:15,000 Αριθμός είπαμε, 123. 774 00:34:15,000 --> 00:34:17,420 Έτσι τι συμβαίνει πραγματικά στο εσωτερικό του είναι εδώ; 775 00:34:17,420 --> 00:34:26,590 >> Λοιπόν, τι πραγματικά συμβαίνει εσωτερικό του s είναι 123. 776 00:34:26,590 --> 00:34:29,250 Αλλά ειλικρινά, έχω πάρει λίγο συγχέεται με όλες αυτές τις διευθύνσεις, 777 00:34:29,250 --> 00:34:30,320 όλες αυτές αυθαίρετοι αριθμοί. 778 00:34:30,320 --> 00:34:32,290 123, 124, 127. 779 00:34:32,290 --> 00:34:34,570 Οπότε ας πραγματικότητα απλοποίηση ο κόσμος λίγο. 780 00:34:34,570 --> 00:34:38,800 >> Όταν μιλάμε για δείκτες, ειλικρινά, να εμάς τους ανθρώπους, ποιος στο καλό νοιάζεται όπου 781 00:34:38,800 --> 00:34:39,870 τα πράγματα είναι στη μνήμη; 782 00:34:39,870 --> 00:34:41,080 Αυτό είναι εντελώς αυθαίρετη. 783 00:34:41,080 --> 00:34:43,370 Είναι πρόκειται να εξαρτηθεί από το πόσο μνήμης RAM ο χρήστης έχει. 784 00:34:43,370 --> 00:34:46,590 Είναι πρόκειται να εξαρτηθεί από όταν μέσα στην ημέρα εκτελέσετε το πρόγραμμα, ίσως, και 785 00:34:46,590 --> 00:34:48,250 ποιες εισηγήσεις ο χρήστης που δίνει. 786 00:34:48,250 --> 00:34:50,060 Είμαστε κατοικία σε ασήμαντες λεπτομέρειες. 787 00:34:50,060 --> 00:34:54,230 >> Έτσι αφηρημένη ας μακριά και να πω ότι, όταν εκτελείτε μια γραμμή κώδικα, όπως αυτό, 788 00:34:54,230 --> 00:34:57,320 char αστέρι s παίρνει την επιστροφή αξία get string. 789 00:34:57,320 --> 00:35:02,720 Γιατί δεν αντ 'αυτού ακριβώς αντλήσει ό, τι μπορούμε κρατήσει καλώντας έναν δείκτη, όπως κι αν είναι 790 00:35:02,720 --> 00:35:04,140 δείχνοντας κάτι; 791 00:35:04,140 --> 00:35:07,000 Γι 'αυτό και ισχυρίζονται τώρα ότι s up υπάρχει ένας δείκτης - 792 00:35:07,000 --> 00:35:08,480 κάτω από την κουκούλα είναι μια διεύθυνση. 793 00:35:08,480 --> 00:35:11,330 Αλλά αυτό είναι ακριβώς που δείχνουν προς Το πρώτο byte στην 794 00:35:11,330 --> 00:35:12,780 συμβολοσειρά που είναι ήδη επιστραφεί. 795 00:35:12,780 --> 00:35:16,710 >> Αν τώρα επιστρέψουμε στον κώδικα εδώ, τι συμβαίνει σε αυτή τη γραμμή; 796 00:35:16,710 --> 00:35:20,020 Λοιπόν, σε αυτή την επισημασμένη γραμμή τώρα, Είμαι δηλώνοντας προφανώς άλλο 797 00:35:20,020 --> 00:35:21,070 μεταβλητή που ονομάζεται t. 798 00:35:21,070 --> 00:35:25,700 Αλλά είναι επίσης ένας δείκτης, έτσι Πάω να επιστήσει την, θεωρητικά, η ακριβής 799 00:35:25,700 --> 00:35:26,710 ίδιο κουτί μεγέθους. 800 00:35:26,710 --> 00:35:28,160 Και Πάω να το ονομάσουμε t. 801 00:35:28,160 --> 00:35:33,500 >> Και τώρα, αν πάμε πίσω στο ξανά τον κωδικό, όταν αποθηκεύουν s εσωτερικό του t, 802 00:35:33,500 --> 00:35:36,920 τι είμαι τεχνικά βάζοντας στο εσωτερικό του t; 803 00:35:36,920 --> 00:35:39,350 Λοιπόν, από τεχνική άποψη, αυτό ήταν ο αριθμός 123. 804 00:35:39,350 --> 00:35:42,270 Έτσι, πραγματικά θα πρέπει να γράφει ο αριθμός 123 εκεί. 805 00:35:42,270 --> 00:35:43,900 Αλλά ας τα πάρουμε υψηλότερο επίπεδο. 806 00:35:43,900 --> 00:35:48,090 t, αν είναι μόνο ένας δείκτης, διαισθητικά, είναι ακριβώς αυτό. 807 00:35:48,090 --> 00:35:49,800 Αυτό είναι όλο αυτό που είναι αποθηκευμένα εκεί. 808 00:35:49,800 --> 00:35:54,970 >> Έτσι τώρα τα τελευταία ενδιαφέρουσες γραμμές του κώδικα, όταν πραγματικά να πάει για 809 00:35:54,970 --> 00:36:00,680 κεφαλαιοποίηση του χαρακτήρας μηδέν σε t, τι συμβαίνει; 810 00:36:00,680 --> 00:36:06,310 Λοιπόν, t βραχίονα μηδέν τώρα δείχνει σε ό, τι χαρακτήρα, κατά πάσα πιθανότητα; 811 00:36:06,310 --> 00:36:07,460 >> Είναι επισημαίνοντας h. 812 00:36:07,460 --> 00:36:08,870 Επειδή t βραχίονα μηδέν - 813 00:36:08,870 --> 00:36:12,490 θυμάστε, αυτό είναι παλιό σύνταξη. t βραχίονα μηδέν σημαίνει μόνο αν t είναι ένα string, t 814 00:36:12,490 --> 00:36:15,590 βραχίονα μηδέν σημαίνει να πάρει το μηδέν χαρακτήρα σε αυτή την δύναμη. 815 00:36:15,590 --> 00:36:18,650 Έτσι, αυτό που πραγματικά σημαίνει είναι να πάτε σε αυτό το array - 816 00:36:18,650 --> 00:36:21,520 και ναι, αυτό μπορεί να είναι 123, Αυτό θα μπορούσε να είναι 124. 817 00:36:21,520 --> 00:36:22,790 Αλλά είναι όλα σχετικά, να θυμάστε. 818 00:36:22,790 --> 00:36:25,640 Κάθε φορά που μιλάμε για μια σειρά, έχουμε το πλεονέκτημα να μιλάμε για 819 00:36:25,640 --> 00:36:27,000 σε σχέση με δείκτες. 820 00:36:27,000 --> 00:36:31,120 >> Και έτσι τώρα μπορούμε απλά να υποθέσουμε ότι t βραχίονα μηδέν είναι h. 821 00:36:31,120 --> 00:36:35,090 Έτσι, αν Καλώ 2 επάνω σε αυτό, τι είναι πραγματικά κάνουν είναι να κεφαλαιοποίηση 822 00:36:35,090 --> 00:36:38,290 το πεζό h με κεφαλαία H. Αλλά, βεβαίως, τι είναι s; 823 00:36:38,290 --> 00:36:41,010 Είναι δείχνουν στο ίδιο καταριέται string. 824 00:36:41,010 --> 00:36:44,200 >> Έτσι, αυτό είναι το μόνο που συμβαίνει σε αυτόν τον κώδικα μέχρι στιγμής. 825 00:36:44,200 --> 00:36:45,960 Έτσι ποια είναι τότε η επίπτωση; 826 00:36:45,960 --> 00:36:48,300 Πώς μπορούμε να διορθώσετε αυτά τα δύο προβλήματα; 827 00:36:48,300 --> 00:36:50,870 Πώς μπορούμε να συγκρίνουμε την πραγματική χορδές; 828 00:36:50,870 --> 00:36:53,720 >> Καλά διαισθητικά, πώς θα πηγαίνετε για τη σύγκριση δύο 829 00:36:53,720 --> 00:36:55,090 χορδές για την πραγματική ισότητα; 830 00:36:55,090 --> 00:36:58,920 831 00:36:58,920 --> 00:37:00,750 >> Τι σημαίνει όταν δύο χορδές είναι ίσοι; 832 00:37:00,750 --> 00:37:04,330 Σαφώς δεν είναι ότι οι διευθύνσεις τους ισούται στη μνήμη, γιατί αυτό είναι ένα χαμηλό 833 00:37:04,330 --> 00:37:06,590 επίπεδο λεπτομέρειας εφαρμογής. 834 00:37:06,590 --> 00:37:08,360 Όλοι οι χαρακτήρες είναι το ίδιο. 835 00:37:08,360 --> 00:37:12,810 Έτσι, επιτρέψτε μου να προτείνω, και επιτρέψτε μου να εισαγάγει στην έκδοση ενός από compare.c 836 00:37:12,810 --> 00:37:14,970 εδώ, έτσι συγκρίνουν-1.γ. 837 00:37:14,970 --> 00:37:19,590 >> Επιτρέψτε μου να προτείνω να πάρετε ακόμα ένα δείκτη που ονομάζεται s, και να αποθηκεύουν σε αυτό το 838 00:37:19,590 --> 00:37:20,610 επιστροφή αξίας get string. 839 00:37:20,610 --> 00:37:21,750 Ας κάνουν το ίδιο πράγμα με t. 840 00:37:21,750 --> 00:37:23,230 Έτσι, κανένας από τον κώδικα είναι διαφορετική. 841 00:37:23,230 --> 00:37:25,420 Πάω να προσθέσετε λίγο περισσότερο έλεγχο σφαλμάτων τώρα. 842 00:37:25,420 --> 00:37:29,390 Έτσι, τώρα που είμαστε το είδος της απολέπισης πίσω αυτό στρώματα CS50 από ό, τι μια σειρά 843 00:37:29,390 --> 00:37:33,520 είναι στην πραγματικότητα, πρέπει να είμαστε πιο πρωκτικό για να διασφαλίσουμε ότι δεν καταχρώνται 844 00:37:33,520 --> 00:37:35,330 άκυρο αξίες όπως null. 845 00:37:35,330 --> 00:37:36,440 >> Έτσι, είμαι απλώς πρόκειται να ελέγξετε. 846 00:37:36,440 --> 00:37:41,490 Εάν s δεν είναι ίσο με null και t δεν ίση null, αυτό σημαίνει ότι είμαστε εντάξει. 847 00:37:41,490 --> 00:37:44,460 Πάρτε χορδών δεν βίδα μέχρι να πάρει είτε από τις χορδές. 848 00:37:44,460 --> 00:37:51,270 Και ίσως μπορείτε να μαντέψετε τώρα, τι δεν STR CMP πιθανώς να κάνω; 849 00:37:51,270 --> 00:37:52,000 String σύγκριση. 850 00:37:52,000 --> 00:37:55,470 >> Έτσι, αν έχετε το πρόγραμμα σε Java πριν, Αυτό είναι σαν τη μέθοδο που ισούται με το 851 00:37:55,470 --> 00:37:56,490 κλάσης string. 852 00:37:56,490 --> 00:37:57,890 Αλλά για εκείνους από εσάς που δεν έχουν προγραμματιστεί πριν, 853 00:37:57,890 --> 00:37:59,320 Αυτό είναι απλά μια συνάρτηση c. 854 00:37:59,320 --> 00:38:02,180 Συμβαίνει να έρθει σε μια αρχείο που ονομάζεται string.h. 855 00:38:02,180 --> 00:38:03,830 Αυτός είναι όπου έχει δηλωθεί. 856 00:38:03,830 --> 00:38:05,110 >> Και σύγκρισης συμβολοσειράς - 857 00:38:05,110 --> 00:38:07,530 Ξεχάσω πραγματικά τη χρήση του, αλλά δεν πειράζει αυτό. 858 00:38:07,530 --> 00:38:10,470 Υπενθυμίζουμε ότι μπορούμε να κάνουμε άνθρωπος, ανακατεύετε σύγκριση. 859 00:38:10,470 --> 00:38:12,590 Και αυτό πρόκειται να φέρει επάνω του Linux εγχειρίδιο προγραμματιστές. 860 00:38:12,590 --> 00:38:14,060 Και, ειλικρινά, λίγο αινιγματικό. 861 00:38:14,060 --> 00:38:15,270 Βλέπω, όμως, ότι εδώ, ναι. 862 00:38:15,270 --> 00:38:17,570 Θα πρέπει να περιλαμβάνει string.h. 863 00:38:17,570 --> 00:38:20,590 >> Και λέει εδώ κάτω περιγραφή, «η εγχόρδων συνάρτηση σύγκρισης συγκρίνει 864 00:38:20,590 --> 00:38:24,560 οι δύο χορδές S1 και S2. «Και S1 και S2 είναι προφανώς ο δύο 865 00:38:24,560 --> 00:38:26,120 επιχειρήματα που πέρασε μέσα 866 00:38:26,120 --> 00:38:28,650 Πραγματικά, δεν θυμάμαι τι const είναι, αλλά τώρα παρατηρήσετε - 867 00:38:28,650 --> 00:38:31,480 και μπορεί να έχετε δει αυτό, όταν ήδη έχετε χρησιμοποιήσει τις σελίδες man αν 868 00:38:31,480 --> 00:38:32,390 έχετε όλα - 869 00:38:32,390 --> 00:38:36,220 ότι char αστέρι είναι μόνο συνώνυμο με σπάγκο. 870 00:38:36,220 --> 00:38:40,440 >> Γι 'αυτό συγκρίνει τις δύο χορδές, S1 και S2, και επιστρέφει έναν ακέραιο μικρότερη 871 00:38:40,440 --> 00:38:44,930 από ή ίση με ή μεγαλύτερη από το μηδέν εάν S1 βρίσκεται, αντίστοιχα, για να είναι 872 00:38:44,930 --> 00:38:47,450 μικρότερη ή ίση ή να είναι μεγαλύτερη από S2. 873 00:38:47,450 --> 00:38:51,220 Αυτό είναι απλά ένα πολύ σύνθετο τρόπος για να πούμε ότι σύγκρισης συμβολοσειράς επιστρέφει 874 00:38:51,220 --> 00:38:55,760 μηδέν αν δύο χορδές είναι διαισθητικά ταυτόσημες, χαρακτήρα 875 00:38:55,760 --> 00:38:57,120 χαρακτήρα για τον χαρακτήρα. 876 00:38:57,120 --> 00:38:59,970 >> Επιστρέφει έναν αρνητικό αριθμό, αν s, αλφαβητικά, υποτίθεται 877 00:38:59,970 --> 00:39:01,010 να έρθει πριν από t. 878 00:39:01,010 --> 00:39:05,300 Ή επιστρέφει ένα θετικό αριθμό, αν s υποτίθεται ότι θα έρθουν μετά από t 879 00:39:05,300 --> 00:39:06,170 αλφαβητικά. 880 00:39:06,170 --> 00:39:08,360 Έτσι, με αυτή την απλή λειτουργία, θα μπορούσε να μπορείτε, για παράδειγμα, να ταξινομήσετε μια 881 00:39:08,360 --> 00:39:09,770 σωρό λέξεις; 882 00:39:09,770 --> 00:39:13,984 >> Έτσι, σε αυτή τη νέα έκδοση, Πάω να προχωρήσει και να κάνει compare1. 883 00:39:13,984 --> 00:39:15,750 Dot slash συγκρίνει ένα. 884 00:39:15,750 --> 00:39:18,030 Θα πληκτρολογήσετε γεια σε όλα τα πεζά. 885 00:39:18,030 --> 00:39:20,300 Πάω να πληκτρολογήσετε ένα γεια σε όλα τα πεζά και πάλι. 886 00:39:20,300 --> 00:39:23,340 Και ευτυχώς τώρα συνειδητοποιεί Έχω πληκτρολογήσει το ίδιο πράγμα. 887 00:39:23,340 --> 00:39:27,520 >> Εν τω μεταξύ, αν πληκτρολογήσετε γεια στο χαμηλότερο περίπτωση και γειά σου με κεφαλαία και 888 00:39:27,520 --> 00:39:29,710 σύγκρισή τους, θα πληκτρολογήσει διαφορετικά πράγματα. 889 00:39:29,710 --> 00:39:32,530 Διότι δεν είναι μόνο οι διευθύνσεις διαφορετικά, αλλά είμαστε συγκρίνοντας 890 00:39:32,530 --> 00:39:35,350 διαφορετικούς χαρακτήρες ξανά και ξανά. 891 00:39:35,350 --> 00:39:37,320 >> Λοιπόν ας πάμε και να καθορίσει ένα άλλο πρόβλημα τώρα. 892 00:39:37,320 --> 00:39:41,590 Επιτρέψτε μου να ανοίξει η μία εκδοχή της αντίγραφο, το οποίο τώρα αντιμετωπίζει 893 00:39:41,590 --> 00:39:42,900 αυτό το ζήτημα ως εξής. 894 00:39:42,900 --> 00:39:45,650 Και αυτό πρόκειται να δούμε λίγο πιο περίπλοκη. 895 00:39:45,650 --> 00:39:49,320 Αλλά αν σκεφτούμε ποιο είναι το πρόβλημα που πρέπει να επιλυθούν, ελπίζω ότι αυτό θα είναι 896 00:39:49,320 --> 00:39:51,870 σαφές ακριβώς σε μια στιγμή τώρα. 897 00:39:51,870 --> 00:39:57,280 >> Έτσι, αυτή η πρώτη γραμμή, χαρακτήρας ξεκίνημα t, σε Με άλλα λόγια θα μπορούσε κάποιος να προτείνει 898 00:39:57,280 --> 00:39:59,450 Τι σημαίνει αυτή η γραμμή εδώ; 899 00:39:59,450 --> 00:40:01,050 Char αστέρι t, αυτό είναι ότι κάνει; 900 00:40:01,050 --> 00:40:06,660 901 00:40:06,660 --> 00:40:07,210 >> Καλό. 902 00:40:07,210 --> 00:40:09,500 Δημιουργήστε ένα δείκτη προς κάποια σημείο στη μνήμη. 903 00:40:09,500 --> 00:40:10,930 Και επιτρέψτε μου να βελτιώσετε το λίγο. 904 00:40:10,930 --> 00:40:17,180 Αναγνωρίσει μια μεταβλητή που θα αποθηκεύσει το διεύθυνση του κάποια χαρα στη μνήμη, μόνο 905 00:40:17,180 --> 00:40:18,480 να είναι λίγο πιο σωστή. 906 00:40:18,480 --> 00:40:21,210 >> ΕΝΤΑΞΕΙ, έτσι τώρα στη δεξιά πλευρά, έχω δει ποτέ μία από αυτές τις λειτουργίες 907 00:40:21,210 --> 00:40:22,660 πριν, malloc. 908 00:40:22,660 --> 00:40:26,980 Αλλά τι μπορεί να σημαίνει αυτό; 909 00:40:26,980 --> 00:40:28,050 Κατανομή της μνήμης. 910 00:40:28,050 --> 00:40:29,410 Μνήμη κατανομής. 911 00:40:29,410 --> 00:40:33,050 >> Έτσι αποδεικνύεται, μέχρι τώρα, δεν είχαν πραγματικά ένα ισχυρό μέσο της 912 00:40:33,050 --> 00:40:36,210 ζητώντας από το λειτουργικό σύστημα, να μου δώσει κάποια μνήμη. 913 00:40:36,210 --> 00:40:39,980 Αντίθετα, έχουμε τώρα μια λειτουργία που ονομάζεται malloc που κάνει ακριβώς αυτό. 914 00:40:39,980 --> 00:40:42,960 Ακόμα κι αν αυτό είναι ένα κομμάτι ενός απόσπαση της προσοχής τώρα, παρατηρούμε ότι σε 915 00:40:42,960 --> 00:40:46,200 μεταξύ των δύο παρενθέσεις είναι ακριβώς πρόκειται να είναι ένας αριθμός. 916 00:40:46,200 --> 00:40:48,510 Σε περίπτωση που έχω πληκτρολογήσει στο εν λόγω τα σήματα μπορεί να είναι ένας αριθμός. 917 00:40:48,510 --> 00:40:51,020 >> Και ο αριθμός αυτός σημαίνει, να μου δώσει 10 bytes. 918 00:40:51,020 --> 00:40:52,320 Δώσε μου 20 bytes. 919 00:40:52,320 --> 00:40:53,820 Δώσε μου 100 bytes. 920 00:40:53,820 --> 00:40:56,500 Και malloc θα καταβάλει κάθε δυνατή προσπάθεια για να να ζητήσει από το λειτουργικό σύστημα - 921 00:40:56,500 --> 00:40:57,630 Linux, σε αυτή την περίπτωση - 922 00:40:57,630 --> 00:40:59,630 hey, είναι 100 bytes τους της RAM διαθέσιμα; 923 00:40:59,630 --> 00:41:04,320 Αν ναι, επιστρέψτε τα bytes σε μένα από επιστρέφοντας την διεύθυνση της οποίας του 924 00:41:04,320 --> 00:41:06,610 τα bytes, ίσως; 925 00:41:06,610 --> 00:41:07,610 Η ίδια η πρώτη. 926 00:41:07,610 --> 00:41:10,460 >> Έτσι, εδώ και πάρα πολύ - και αυτό είναι το κυρίαρχο στο C, κάθε φορά που είστε 927 00:41:10,460 --> 00:41:11,680 που ασχολούνται με τις διευθύνσεις; 928 00:41:11,680 --> 00:41:15,830 Είσαι σχεδόν πάντα ασχολούνται με το πρώτη τέτοια διεύθυνση, δεν έχει σημασία πόσο μεγάλο 929 00:41:15,830 --> 00:41:19,490 ένα μεγάλο κομμάτι της μνήμης που είναι επιστρέφονται, να το πω έτσι. 930 00:41:19,490 --> 00:41:20,880 >> Έτσι, ας βουτήξει εδώ. 931 00:41:20,880 --> 00:41:23,940 Είμαι προσπαθεί να διαθέσει το πώς πολλά bytes, ακριβώς; 932 00:41:23,940 --> 00:41:24,080 Καλά. 933 00:41:24,080 --> 00:41:26,090 Μήκος του νήματος του s - ας κάνει ένα συγκεκριμένο παράδειγμα. 934 00:41:26,090 --> 00:41:30,700 Αν s είναι γειά σου, H-Ε-L-L-O, ποια είναι η μήκος του νήματος του s, προφανώς; 935 00:41:30,700 --> 00:41:32,010 Έτσι είναι πέντε. 936 00:41:32,010 --> 00:41:34,590 Αλλά κάνω ένα συν 1 σε αυτό, γιατί; 937 00:41:34,590 --> 00:41:37,700 Γιατί θέλω έξι bytes αντί για πέντε; 938 00:41:37,700 --> 00:41:38,790 Ο χαρακτήρας null. 939 00:41:38,790 --> 00:41:41,210 >> Δεν θέλω να φύγω από αυτό το ειδική null χαρακτήρα. 940 00:41:41,210 --> 00:41:45,160 Γιατί αν κάνω ένα αντίγραφο του Hello και απλά κάνετε H-Ε-L-L-O, αλλά δεν βάζω 941 00:41:45,160 --> 00:41:50,160 ότι η ειδική χαρακτήρα, ο υπολογιστής δεν θα μπορούσαν να έχουν, κατά τύχη, το backslash 942 00:41:50,160 --> 00:41:51,730 μηδέν εκεί για μένα. 943 00:41:51,730 --> 00:41:55,570 Και έτσι, αν εγώ προσπαθώ να καταλάβω το μήκος του αντιγράφου, θα μπορούσε κανείς να σκεφτεί ότι 944 00:41:55,570 --> 00:41:59,360 είναι 20 χαρακτήρες, ή ένα εκατομμύριο χαρακτήρες, αν ποτέ απλώς τυχαίνει 945 00:41:59,360 --> 00:42:01,050 να χτυπήσει ένα μηδενικό κάθετο. 946 00:42:01,050 --> 00:42:05,780 >> Έτσι χρειαζόμαστε έξι bytes για την αποθήκευση H-E-L-L-O, backslash μηδέν. 947 00:42:05,780 --> 00:42:07,870 Και τότε αυτό είναι απλά να είναι σούπερ πρωκτικό. 948 00:42:07,870 --> 00:42:10,700 Ας υποθέσουμε ότι έχω ξεχάσει τι το μέγεθος ενός char είναι. 949 00:42:10,700 --> 00:42:12,020 Κρατάμε λέγοντας ένα byte του. 950 00:42:12,020 --> 00:42:12,860 Και είναι συνήθως. 951 00:42:12,860 --> 00:42:15,425 Θεωρητικά, θα μπορούσε να είναι κάτι διαφορετικά, σε μια διαφορετική ή Mac 952 00:42:15,425 --> 00:42:16,250 διαφορετικό υπολογιστή. 953 00:42:16,250 --> 00:42:19,650 >> Έτσι, αποδεικνύεται ότι υπάρχει αυτό το φορέα ονομάζεται sizeof ότι αν περάσει το 954 00:42:19,650 --> 00:42:22,680 το όνομα του τύπου δεδομένων - όπως char ή int ή float - 955 00:42:22,680 --> 00:42:26,930 θα σας πω, δυναμικά, πόσες bytes μια χαρα παίρνει επάνω σε αυτό 956 00:42:26,930 --> 00:42:28,090 συγκεκριμένο υπολογιστή. 957 00:42:28,090 --> 00:42:31,360 >> Έτσι, αυτό είναι αποτελεσματικά μόνο σαν να λέμε φορές 1 ή 958 00:42:31,360 --> 00:42:32,440 φορές τίποτα δεν σε όλα. 959 00:42:32,440 --> 00:42:36,340 Αλλά το κάνω μόνο για να είναι σούπερ πρωκτικό, ότι μόνο σε περίπτωση που μια χαρα διαφέρει 960 00:42:36,340 --> 00:42:40,610 στον υπολογιστή σε σχέση με το δικό μου, με αυτόν τον τρόπο Τα μαθηματικά είναι πάντα πρόκειται να ελέγξετε έξω. 961 00:42:40,610 --> 00:42:43,720 >> Τέλος, εδώ κάτω μπορώ να ελέγξω for null, το οποίο είναι πάντα καλή πρακτική - και πάλι, 962 00:42:43,720 --> 00:42:44,920 Κάθε φορά που έχουμε να κάνουμε με δείκτες. 963 00:42:44,920 --> 00:42:47,520 Εάν malloc δεν ήταν σε θέση να δώσει με έξι αποχαιρετισμός - η οποία είναι 964 00:42:47,520 --> 00:42:49,210 απίθανο, αλλά μόνο στην περίπτωση - 965 00:42:49,210 --> 00:42:50,730 επιστρέφει ένα αμέσως. 966 00:42:50,730 --> 00:42:53,290 Και τώρα, να προχωρήσει και να αντιγράψετε η σειρά ως εξής. 967 00:42:53,290 --> 00:42:57,240 Και αυτό είναι γνωστό σύνταξη, αν και σε διαφορετικό ρόλο. 968 00:42:57,240 --> 00:43:01,210 >> Πάω να πάει μπροστά και να πάρει το string μήκος του s και να το αποθηκεύσετε στο n. 969 00:43:01,210 --> 00:43:06,620 Είμαι στη συνέχεια πρόκειται να επαναλάβει από το i ισούται μηδέν έως και Ν, 970 00:43:06,620 --> 00:43:08,410 μεγαλύτερο από ή ίσο με. 971 00:43:08,410 --> 00:43:13,540 Έτσι ώστε σε κάθε επανάληψη, έβαλα το i-χαρακτήρας του s στο i- 972 00:43:13,540 --> 00:43:15,380 χαρακτήρα t. 973 00:43:15,380 --> 00:43:18,190 >> Έτσι, αυτό που πραγματικά συμβαίνει κάτω η κουκούλα εδώ; 974 00:43:18,190 --> 00:43:22,140 Λοιπόν, αν αυτό, για παράδειγμα, είναι s - 975 00:43:22,140 --> 00:43:26,400 και έχω πληκτρολογήσει τη λέξη H-Ε-Ε-Ε-Ο και υπάρχει ένα μηδενικό κάθετο. 976 00:43:26,400 --> 00:43:29,020 Και πάλι, αυτό είναι s δείχνοντας εδώ. 977 00:43:29,020 --> 00:43:30,830 Και εδώ τώρα είναι τ. 978 00:43:30,830 --> 00:43:34,860 >> Και αυτό δείχνει τώρα ένα αντίγραφο της μνήμης, έτσι δεν είναι; 979 00:43:34,860 --> 00:43:37,340 Malloc μου έδωσε ένα ολόκληρο κομμάτι της μνήμης. 980 00:43:37,340 --> 00:43:41,440 Δεν ξέρω αρχικά τι είναι σε οποιαδήποτε από αυτές τις θέσεις. 981 00:43:41,440 --> 00:43:44,340 Έτσι, Πάω να σκεφτώ αυτά ως ένα σωρό ερωτηματικά. 982 00:43:44,340 --> 00:43:50,190 >> Αλλά μόλις αρχίσω looping από το μηδέν στην επάνω μέσω του μήκους του S, T 983 00:43:50,190 --> 00:43:52,790 βραχίονα μηδέν και t βραχίονα 1 - 984 00:43:52,790 --> 00:43:55,080 και θα βάλω αυτό τώρα στην εναέρια - 985 00:43:55,080 --> 00:44:04,190 t βραχίονα μηδέν και s βραχίονα με μηδενική μέση ότι θα πάω να την αντιγραφή 986 00:44:04,190 --> 00:44:09,875 h σε επαναληπτικά εδώ, Ε-Ε-Ε-Ο. Πλέον, επειδή έκανα το συν 987 00:44:09,875 --> 00:44:12,370 1, backslash μηδέν. 988 00:44:12,370 --> 00:44:19,060 >> Έτσι τώρα, στην περίπτωση της σύγκρισης-1.γ, στο τέλος, αν μπορώ να εκτυπώσετε το 989 00:44:19,060 --> 00:44:24,760 κεφαλαιοποίηση t, θα πρέπει να δείτε ότι s είναι αμετάβλητη. 990 00:44:24,760 --> 00:44:26,090 Επιτρέψτε μου τώρα να προχωρήσει και να το κάνουμε αυτό. 991 00:44:26,090 --> 00:44:28,630 Έτσι κάνουν copy1. 992 00:44:28,630 --> 00:44:30,860 Dot slash copy1. 993 00:44:30,860 --> 00:44:33,670 Πάω να πληκτρολογήσετε ένα γεια, Enter. 994 00:44:33,670 --> 00:44:37,430 Και τώρα παρατηρήσετε, μόνο το αντίγραφο έχει κεφαλαιοποιηθεί. 995 00:44:37,430 --> 00:44:40,890 Επειδή έχω πραγματικά έχουν δύο κομμάτια της μνήμης. 996 00:44:40,890 --> 00:44:44,390 >> Δυστυχώς, μπορείτε να κάνετε κάποια αρκετά κακή και πολύ επικίνδυνα πράγματα εδώ. 997 00:44:44,390 --> 00:44:49,290 Επιτρέψτε μου να σηκώσει ένα παράδειγμα εδώ και τώρα, που μας δίνει ένα παράδειγμα των λίγων 998 00:44:49,290 --> 00:44:51,540 διαφορετικές γραμμές. 999 00:44:51,540 --> 00:44:56,040 Έτσι απλά διαισθητικά εδώ, η πρώτη γραμμή του κώδικα, int x αστέρων, δηλώνει 1000 00:44:56,040 --> 00:44:57,340 μια μεταβλητή που ονομάζεται x. 1001 00:44:57,340 --> 00:44:58,810 Και τι είναι ο τύπος δεδομένων αυτής της μεταβλητής; 1002 00:44:58,810 --> 00:45:01,820 1003 00:45:01,820 --> 00:45:04,290 Ποιος είναι ο τύπος δεδομένων της μεταβλητής; 1004 00:45:04,290 --> 00:45:06,980 Αυτό δεν ήταν η δραματική στιγμή. 1005 00:45:06,980 --> 00:45:08,350 >> Ο τύπος δεδομένων είναι int αστέρων. 1006 00:45:08,350 --> 00:45:12,600 Λοιπόν, τι σημαίνει αυτό; x θα αποθηκεύσετε τη διεύθυνση ενός int. 1007 00:45:12,600 --> 00:45:13,520 Τόσο απλά. 1008 00:45:13,520 --> 00:45:16,220 Y πρόκειται να αποθηκεύσετε το διεύθυνση ενός int. 1009 00:45:16,220 --> 00:45:18,390 Ποια είναι η τρίτη γραμμή κώδικα κάνει εκεί; 1010 00:45:18,390 --> 00:45:21,850 Είναι κατανομή πόσες bytes, το πιο πιθανό; 1011 00:45:21,850 --> 00:45:22,350 Four. 1012 00:45:22,350 --> 00:45:25,460 Λόγω του μεγέθους του είναι int γενικά τέσσερις, malloc των τεσσάρων δίνει 1013 00:45:25,460 --> 00:45:29,950 μου πίσω τη διεύθυνση του ένα μεγάλο κομμάτι της μνήμη, η πρώτη των οποίων είναι bytes 1014 00:45:29,950 --> 00:45:32,110 αποθηκεύονται τώρα στο x. 1015 00:45:32,110 --> 00:45:34,410 >> Τώρα κινούμαστε λίγο γρήγορα. 1016 00:45:34,410 --> 00:45:35,760 Αστέρια x σημαίνει τι; 1017 00:45:35,760 --> 00:45:38,480 1018 00:45:38,480 --> 00:45:42,590 Αυτό σημαίνει ότι πάμε σε αυτή τη διεύθυνση και να τι αριθμό εκεί; 1019 00:45:42,590 --> 00:45:43,870 Βάλτε το νούμερο 42 εκεί. 1020 00:45:43,870 --> 00:45:47,590 Αστέρια y σημαίνει να πάει με ό, τι υπάρχει στο y και να θέσει τον αριθμό 13 εκεί. 1021 00:45:47,590 --> 00:45:48,600 >> Αλλά περιμένετε ένα λεπτό. 1022 00:45:48,600 --> 00:45:51,640 Τι είναι το y αυτή τη στιγμή; 1023 00:45:51,640 --> 00:45:54,950 Ποια είναι η διεύθυνση είναι y αποθήκευση; 1024 00:45:54,950 --> 00:45:55,770 Δεν ξέρω, έτσι δεν είναι; 1025 00:45:55,770 --> 00:45:59,230 Εμείς ποτέ δεν έχουν χρησιμοποιήσει μία φορά την ανάθεση φορέας που αφορούν y. 1026 00:45:59,230 --> 00:46:03,370 Έτσι, y, όπως δηλώνεται στην δεύτερη γραμμή του κώδικας είναι μόνο κάποια αξία σκουπιδιών, ένα μεγάλο 1027 00:46:03,370 --> 00:46:04,760 ερωτηματικό να το πω έτσι. 1028 00:46:04,760 --> 00:46:07,230 Θα μπορούσε να δείχνει τυχαία σε τίποτα στη μνήμη, η οποία 1029 00:46:07,230 --> 00:46:08,340 είναι γενικά κακό. 1030 00:46:08,340 --> 00:46:13,540 >> Έτσι, μόλις χτυπάμε ότι η γραμμή εκεί, αστέρι y ισούται με 13, κάτι κακό, 1031 00:46:13,540 --> 00:46:17,220 κάτι πολύ κακό πρόκειται να συμβεί σε Binky. 1032 00:46:17,220 --> 00:46:25,810 Ας δούμε λοιπόν τι πρόκειται να καταλήξει συμβαίνει σε binky εδώ σε αυτό το λεπτό 1033 00:46:25,810 --> 00:46:26,200 ή έτσι φαίνονται. 1034 00:46:26,200 --> 00:46:26,490 >> [PLAYBACK VIDEO] 1035 00:46:26,490 --> 00:46:26,745 >> -Γεια σου, Μπίνκι. 1036 00:46:26,745 --> 00:46:27,000 Ξυπνήστε. 1037 00:46:27,000 --> 00:46:29,296 Ήρθε η ώρα για διασκέδαση δείκτη. 1038 00:46:29,296 --> 00:46:30,680 >> -Τι είναι αυτό; 1039 00:46:30,680 --> 00:46:31,980 Μάθετε για δείκτες; 1040 00:46:31,980 --> 00:46:34,010 Ω, goodie. 1041 00:46:34,010 --> 00:46:37,220 >> -Λοιπόν, για να ξεκινήσετε, υποθέτω είμαστε Θα χρειαστείτε ένα ζευγάρι δείκτες. 1042 00:46:37,220 --> 00:46:37,930 >> -Εντάξει. 1043 00:46:37,930 --> 00:46:41,650 Ο κωδικός αυτός διαθέτει δύο δείκτες το οποίο μπορεί να δείξει σε ακέραιους αριθμούς. 1044 00:46:41,650 --> 00:46:43,760 >> -Εντάξει, καλά, βλέπω τους δύο δείκτες. 1045 00:46:43,760 --> 00:46:45,850 Αλλά δεν φαίνεται να είναι επισημαίνοντας τίποτα. 1046 00:46:45,850 --> 00:46:46,490 >> -Αυτό είναι σωστό. 1047 00:46:46,490 --> 00:46:48,630 Αρχικά, οι δείκτες δεν να δείξει οτιδήποτε. 1048 00:46:48,630 --> 00:46:51,700 Ονομάζονται τα πράγματα που δείχνουν pointees και τη ρύθμισή τους είναι 1049 00:46:51,700 --> 00:46:52,850 ξεχωριστό στάδιο. 1050 00:46:52,850 --> 00:46:53,740 >> -Α, ναι, σωστά. 1051 00:46:53,740 --> 00:46:54,500 Το ήξερα αυτό. 1052 00:46:54,500 --> 00:46:56,270 Οι pointees είναι ξεχωριστές. 1053 00:46:56,270 --> 00:46:58,553 Τόσο πώς να διαθέσει ένα pointee; 1054 00:46:58,553 --> 00:46:59,480 >> -Εντάξει. 1055 00:46:59,480 --> 00:47:03,707 Λοιπόν, αυτός ο κώδικας διαθέτει ένα νέο ακέραιοι pointee, και αυτό το τμήμα θέτει x 1056 00:47:03,707 --> 00:47:05,520 να επισημάνω σε αυτό. 1057 00:47:05,520 --> 00:47:06,760 >> -Γεια σου, αυτό φαίνεται καλύτερα. 1058 00:47:06,760 --> 00:47:08,520 Γι 'αυτό να κάνουμε κάτι. 1059 00:47:08,520 --> 00:47:09,530 >> -Εντάξει. 1060 00:47:09,530 --> 00:47:14,110 Θα dereference το x δείκτη για την αποθήκευση ο αριθμός 42 σε pointee του. 1061 00:47:14,110 --> 00:47:17,660 Για αυτό το τέχνασμα, θα πρέπει μαγεία μου ραβδί του dereferencing. 1062 00:47:17,660 --> 00:47:20,695 >> -Το μαγικό ραβδί της dereferencing; 1063 00:47:20,695 --> 00:47:22,632 Χμ, αυτό είναι υπέροχο. 1064 00:47:22,632 --> 00:47:24,620 >> -Αυτό είναι ό, τι ο κώδικας μοιάζει. 1065 00:47:24,620 --> 00:47:27,526 Εγώ απλώς θα δημιουργήσει τον αριθμό, και - 1066 00:47:27,526 --> 00:47:28,250 >> -Γεια σου, κοίτα. 1067 00:47:28,250 --> 00:47:29,680 Εκεί πηγαίνει. 1068 00:47:29,680 --> 00:47:34,520 Έτσι, κάνει μια dereference για x εξής το βέλος για να αποκτήσετε πρόσβαση pointee της. 1069 00:47:34,520 --> 00:47:36,690 Σε αυτή την περίπτωση, για την αποθήκευση 42 εκεί μέσα. 1070 00:47:36,690 --> 00:47:40,890 Γεια σου, δοκιμάστε να χρησιμοποιήσετε για να αποθηκεύσετε τον αριθμό 13 μέσα από τον άλλο δείκτη, y. 1071 00:47:40,890 --> 00:47:42,125 >> -Εντάξει. 1072 00:47:42,125 --> 00:47:46,810 Θα πήγαινε για να τις y και Πάρτε τον αριθμό 13 που έχει συσταθεί. 1073 00:47:46,810 --> 00:47:50,890 Και στη συνέχεια να λάβει το ραβδί του dereferencing και μόνο - 1074 00:47:50,890 --> 00:47:52,430 Πω πω! 1075 00:47:52,430 --> 00:47:53,030 >> -Γεια σου. 1076 00:47:53,030 --> 00:47:54,610 Αυτό δεν λειτούργησε. 1077 00:47:54,610 --> 00:47:58,200 Ας πούμε, Binky, δεν νομίζω ότι η dereferencing y είναι μια καλή ιδέα, 1078 00:47:58,200 --> 00:48:01,370 επειδή τη σύσταση της pointee είναι ένα ξεχωριστό βήμα. 1079 00:48:01,370 --> 00:48:03,460 Και δεν νομίζω ότι το κάναμε ποτέ. 1080 00:48:03,460 --> 00:48:03,810 >> -Χμμ. 1081 00:48:03,810 --> 00:48:05,160 Καλό σημείο. 1082 00:48:05,160 --> 00:48:07,410 >> -Ναι, θα διατεθεί το y δείκτη. 1083 00:48:07,410 --> 00:48:10,045 Αλλά ποτέ δεν θα το θέσετε σε υποδηλώνουν μια pointee. 1084 00:48:10,045 --> 00:48:10,490 >> -Χμμ. 1085 00:48:10,490 --> 00:48:12,170 Πολύ προσεκτικός. 1086 00:48:12,170 --> 00:48:13,790 >> -Γεια σου, ψάχνετε καλά εκεί, Μπίνκι. 1087 00:48:13,790 --> 00:48:16,920 Μπορείς να το φτιάξω έτσι ώστε τα σημεία y με την ίδια ως pointee X; 1088 00:48:16,920 --> 00:48:17,810 >> -Σίγουρα. 1089 00:48:17,810 --> 00:48:20,300 Θα χρησιμοποιήσω το μαγικό ραβδί μου δείκτη ανάθεση. 1090 00:48:20,300 --> 00:48:22,240 >> -Είναι ότι πρόκειται να είναι μια πρόβλημα, όπως πριν; 1091 00:48:22,240 --> 00:48:22,665 >> -Όχι. 1092 00:48:22,665 --> 00:48:24,300 Αυτό δεν έρχεται σε επαφή με τα pointees. 1093 00:48:24,300 --> 00:48:27,880 Αλλάζει μόνο ένα δείκτη στο σημείο για το ίδιο πράγμα με ένα άλλο. 1094 00:48:27,880 --> 00:48:28,970 >> -Ω, βλέπω. 1095 00:48:28,970 --> 00:48:31,730 Τώρα τα σημεία y στο ίδιο σημείο με το x. 1096 00:48:31,730 --> 00:48:32,450 Έτσι περιμένουμε. 1097 00:48:32,450 --> 00:48:33,490 Τώρα y είναι σταθερό. 1098 00:48:33,490 --> 00:48:34,630 Έχει pointee. 1099 00:48:34,630 --> 00:48:36,520 Έτσι, μπορείτε να δοκιμάσετε το ραβδί της dereferencing και πάλι 1100 00:48:36,520 --> 00:48:39,200 για να στείλετε το 13 πάνω. 1101 00:48:39,200 --> 00:48:39,840 >> -Εντάξει. 1102 00:48:39,840 --> 00:48:41,570 Εδώ πηγαίνει. 1103 00:48:41,570 --> 00:48:42,870 >> -Γεια σου, κοίτα αυτό. 1104 00:48:42,870 --> 00:48:44,320 Τώρα dereferencing έργα για y. 1105 00:48:44,320 --> 00:48:47,020 Και επειδή οι δείκτες που μοιράζονται ότι ένα pointee, που 1106 00:48:47,020 --> 00:48:48,585 και δείτε τα 13. 1107 00:48:48,585 --> 00:48:49,040 >> -Ναι. 1108 00:48:49,040 --> 00:48:49,670 Κοινή χρήση. 1109 00:48:49,670 --> 00:48:50,380 Όποια και αν είναι. 1110 00:48:50,380 --> 00:48:52,290 Έτσι θα πάμε θέσεις διακόπτη τώρα; 1111 00:48:52,290 --> 00:48:52,970 >> -Κοίτα. 1112 00:48:52,970 --> 00:48:54,150 Είμαστε έξω από το χρόνο. 1113 00:48:54,150 --> 00:48:55,200 >> -Μα - 1114 00:48:55,200 --> 00:48:57,060 >> -Απλά θυμηθείτε τις τρεις κανόνες δείκτη. 1115 00:48:57,060 --> 00:49:00,100 Αριθμό ένα, η βασική δομή είναι ότι έχετε ένα δείκτη. 1116 00:49:00,100 --> 00:49:02,170 Και επισημαίνει πάνω σε ένα pointee. 1117 00:49:02,170 --> 00:49:04,160 Αλλά το δείκτη και pointee είναι ξεχωριστές. 1118 00:49:04,160 --> 00:49:06,460 Και το κοινό λάθος είναι να τη δημιουργία ενός δείκτη, αλλά για να 1119 00:49:06,460 --> 00:49:08,540 ξεχάσετε να δοθεί μια pointee. 1120 00:49:08,540 --> 00:49:12,460 >> Νούμερο δύο, δείκτης dereferencing ξεκινά στο δείκτη και ακολούθως της 1121 00:49:12,460 --> 00:49:14,570 βέλος για να αποκτήσετε πρόσβαση pointee της. 1122 00:49:14,570 --> 00:49:18,640 Όπως όλοι γνωρίζουμε, αυτό λειτουργεί μόνο αν υπάρχει είναι ένα pointee, που παίρνει πίσω στο 1123 00:49:18,640 --> 00:49:19,790 Κανόνας νούμερο ένα. 1124 00:49:19,790 --> 00:49:23,670 >> Νούμερο τρία, εκχώρηση δείκτη λαμβάνει ένα δείκτη και αλλαγές που να δείχνουν 1125 00:49:23,670 --> 00:49:25,850 το ίδιο pointee ως ένα άλλο δείκτη. 1126 00:49:25,850 --> 00:49:27,840 Έτσι, μετά την ανάθεση, οι δύο δείκτες θα 1127 00:49:27,840 --> 00:49:29,430 δείχνουν προς την ίδια pointee. 1128 00:49:29,430 --> 00:49:31,600 Μερικές φορές αυτό είναι που ονομάζεται κοινή χρήση. 1129 00:49:31,600 --> 00:49:33,430 Και αυτό είναι όλα υπάρχει σε αυτό, πραγματικά. 1130 00:49:33,430 --> 00:49:33,840 Bye bye τώρα. 1131 00:49:33,840 --> 00:49:34,300 >> [PLAYBACK VIDEO END] 1132 00:49:34,300 --> 00:49:36,940 >> DAVID MALAN: Έτσι περισσότερο σε δείκτες, περισσότερα για Binky την επόμενη εβδομάδα. 1133 00:49:36,940 --> 00:49:38,190 Θα τα πούμε τη Δευτέρα. 1134 00:49:38,190 --> 00:49:42,187