1 00:00:07,420 --> 00:00:08,160 [Powered by Google Translate] DAVID J. MALAN: Oke. 2 00:00:08,160 --> 00:00:11,170 Dit is CS50, en dit is het einde van week twee. 3 00:00:11,170 --> 00:00:14,650 Als u verwacht om honger te hebben rond deze tijd morgen, weet dat we gaan 4 00:00:14,650 --> 00:00:18,920 bijeen te roepen als een kleine groep morgen, donderdag, 1:15 PM. 5 00:00:18,920 --> 00:00:21,460 Er is deze URL hier als u wilt RSVP. 6 00:00:21,460 --> 00:00:25,270 Ruimte is beperkt, dus vergeef, indien de formulieren opgevuld door de tijd die u 7 00:00:25,270 --> 00:00:26,680 fill this out. 8 00:00:26,680 --> 00:00:29,400 Een andere URL hoewel dat interessant kunnen zijn is dit. 9 00:00:29,400 --> 00:00:32,409 >> Dus in ongeveer een maand tijd wordt de cursus zal ter beschikking 10 00:00:32,409 --> 00:00:36,090 alle meer in het algemeen via EDX, via welke mensen op het internet zal worden 11 00:00:36,090 --> 00:00:39,580 kunnen volgen langs in de loop gaan zeer actief zelfs. 12 00:00:39,580 --> 00:00:43,070 Ze zullen gebruik maken van de CS50 Appliance en CS50 bespreken en het merendeel van de 13 00:00:43,070 --> 00:00:45,840 diverse software tools die we al hebben dit semester gebruikt. 14 00:00:45,840 --> 00:00:49,030 En een van de initiatieven die we graag op te nemen als een experiment dit jaar 15 00:00:49,030 --> 00:00:53,120 is om te zien hoeveel inhoud die we kunnen vertalen naar andere taal in woord en 16 00:00:53,120 --> 00:00:54,110 geschreven talen. 17 00:00:54,110 --> 00:00:58,000 Dus als je zou er belang bij hebben deel te nemen aan dit project, waarbij 18 00:00:58,000 --> 00:01:02,090 zullen wij Engels transcripties en ondertiteling voor cursus 19 00:01:02,090 --> 00:01:05,190 lezingen en korte broek en seminars en profielen en dergelijke - 20 00:01:05,190 --> 00:01:08,700 als je spreekt vloeiend of schrijven vloeiend een andere taal, zouden we 21 00:01:08,700 --> 00:01:12,240 je graag deelnemen aan dit project, waarbij je op een of meer van de 22 00:01:12,240 --> 00:01:15,340 video's, te vertalen naar een taal die je redelijk goed kent. 23 00:01:15,340 --> 00:01:19,050 Om u een idee van de interface, er is een web-based user interface 24 00:01:19,050 --> 00:01:22,330 dat we gebruiken die in wezen een UI als deze maken. 25 00:01:22,330 --> 00:01:24,520 Dit werd mij leren wat Halloween geleden. 26 00:01:24,520 --> 00:01:27,710 En aan de rechterkant er in zwart naast deze tijdstempels 27 00:01:27,710 --> 00:01:31,300 zie je de verschillende dingen die kwam uit mijn mond die dag. 28 00:01:31,300 --> 00:01:34,660 En dan eronder, zult u in staat om te vertalen naar een andere taal. 29 00:01:34,660 --> 00:01:37,840 Wat de mapping tussen, in dit geval Engels 30 00:01:37,840 --> 00:01:38,660 en, laten we zeggen, Spaans. 31 00:01:38,660 --> 00:01:40,480 Dus het is eigenlijk een zeer gebruiksvriendelijk hulpmiddel. 32 00:01:40,480 --> 00:01:43,690 U kunt terugspoelen en vooruitspoelen zeer gemakkelijk met behulp van sneltoetsen. 33 00:01:43,690 --> 00:01:46,710 Dus als je wilt deelnemen aan dit experiment en uw woorden 34 00:01:46,710 --> 00:01:50,730 gezien en gelezen door potentieel duizenden mensen die er zijn, ik neem dan gerust 35 00:01:50,730 --> 00:01:51,960 vrij om deel te nemen. 36 00:01:51,960 --> 00:01:56,940 >> Nu een woord over het kitten van maandag, opdat wij hebben een te sturen 37 00:01:56,940 --> 00:01:58,120 eng bericht. 38 00:01:58,120 --> 00:02:02,130 Doe beseffen dat als kantooruren suggereren en als secties suggereren, de 39 00:02:02,130 --> 00:02:05,110 ontwerp van de cursus is zeer aan studenten hebben samen te werken en 40 00:02:05,110 --> 00:02:09,250 praten om samen te werken door middel van probleem sets en problemen. 41 00:02:09,250 --> 00:02:13,630 En echt de lijn komt slechts neer op, nogmaals, het werk dat u uiteindelijk 42 00:02:13,630 --> 00:02:16,420 moeten indienen moet uw eigen. 43 00:02:16,420 --> 00:02:19,080 En dus is het, eerlijk gezegd - in kantooruren, het is heel normaal - 44 00:02:19,080 --> 00:02:21,560 Het is totaal te verwachten, zelfs - te chatten met een aantal 45 00:02:21,560 --> 00:02:22,370 vrienden naast je. 46 00:02:22,370 --> 00:02:25,240 Als hij of zij worstelt met een bepaald onderwerp, en je net als, oh, goed verhuurd 47 00:02:25,240 --> 00:02:27,750 Ik geef u een glimp van enkele lijn van code die ik geschreven heb. 48 00:02:27,750 --> 00:02:28,290 Dat is prima. 49 00:02:28,290 --> 00:02:28,700 Dat gebeurt. 50 00:02:28,700 --> 00:02:31,580 En dat is heel erg bevorderlijk, denk ik, met het proces van leren. 51 00:02:31,580 --> 00:02:35,270 Wanneer de lijn, opnieuw, wordt gekruist is wanneer het hoofd is een soort van gekanteld 52 00:02:35,270 --> 00:02:38,800 hier voor veel te veel seconden of minuten voor die echt om er gewoon nog 53 00:02:38,800 --> 00:02:41,250 was een deblokkering kans voor je vriend. 54 00:02:41,250 --> 00:02:43,870 En zeker, als dingen uitgewisseld via e-mail en Dropbox en 55 00:02:43,870 --> 00:02:45,350 dergelijke, ook daar is de lijn. 56 00:02:45,350 --> 00:02:48,940 Dus met alle middelen, zich gerust voelen en voelen aangemoedigd om te chatten met vrienden 57 00:02:48,940 --> 00:02:51,270 en klasgenoten over psets en nog veel meer. 58 00:02:51,270 --> 00:02:54,680 En realiseer je dat wat je uiteindelijk in te dienen moet echt de 59 00:02:54,680 --> 00:02:57,780 product van uw creatie en niet iemand anders. 60 00:02:57,780 --> 00:03:01,010 >> Dus in dezelfde geest van snoezige dieren, zou je 61 00:03:01,010 --> 00:03:02,820 weten van deze man hier. 62 00:03:02,820 --> 00:03:06,180 Dus dit is een verschrikkelijk cheesy film van jaren geleden. 63 00:03:06,180 --> 00:03:08,680 Iedereen hier te zien Spaceballs? 64 00:03:08,680 --> 00:03:09,120 Oke. 65 00:03:09,120 --> 00:03:10,220 Dus een flink aantal hier. 66 00:03:10,220 --> 00:03:13,840 Dus dit is onze prachtige academische manier van de invoering van vandaag uiteindelijk 67 00:03:13,840 --> 00:03:15,130 de notie van cryptografie. 68 00:03:15,130 --> 00:03:19,010 En dus een van de domeinspecifieke problemen voor PSET 2, die zal komen 69 00:03:19,010 --> 00:03:22,770 uit laat morgenavond, is om te duiken in de wereld van de cryptografie, die 70 00:03:22,770 --> 00:03:26,380 is de kunst van het versleutelen of scrambling informatie. 71 00:03:26,380 --> 00:03:30,160 En dit gaat uiteindelijk om de wereld van de beveiliging. 72 00:03:30,160 --> 00:03:34,440 >> Nu de beveiliging voor de meeste ons komt in de vorm van vrij alledaagse mechanismen. 73 00:03:34,440 --> 00:03:36,920 Ieder van ons heeft gebruikersnamen en wachtwoorden. 74 00:03:36,920 --> 00:03:41,350 En ieder van ons hebben een zeer slechte gebruikersnamen en wachtwoorden, het meest waarschijnlijk. 75 00:03:41,350 --> 00:03:45,250 Als uw wachtwoord is hetzelfde op meerdere websites, dat is waarschijnlijk niet 76 00:03:45,250 --> 00:03:47,920 het beste idee, zoals we zullen bespreken in de richting van het einde semester. 77 00:03:47,920 --> 00:03:51,680 Als uw wachtwoord is geschreven op een notitie - geen grap - op uw 78 00:03:51,680 --> 00:03:55,130 monitor, ook dat is niet per se het beste ontwerp, maar een veel voorkomend 79 00:03:55,130 --> 00:03:56,140 verschijnsel. 80 00:03:56,140 --> 00:04:00,420 En als je geen gebruik maakt cryptografie om wachtwoorden te versleutelen, zijn ze 81 00:04:00,420 --> 00:04:01,610 bijzonder kwetsbaar. 82 00:04:01,610 --> 00:04:04,670 Dus als je denkt dat je super slim zijn door het hebben van een verborgen woord 83 00:04:04,670 --> 00:04:07,740 documenteren ergens op uw harde schijf die al uw wachtwoorden heeft, maar 84 00:04:07,740 --> 00:04:10,550 het is in een map die niemand gaat kijken in, ook dat is niet erg 85 00:04:10,550 --> 00:04:11,540 veilig mechanisme. 86 00:04:11,540 --> 00:04:15,100 En dus wat PSET 2 zal introduceren is deze kunst van cryptografie en 87 00:04:15,100 --> 00:04:18,300 klauteren gegevens, zodat zaken als wachtwoorden 88 00:04:18,300 --> 00:04:19,500 des te meer veilig. 89 00:04:19,500 --> 00:04:24,500 Zodat deze zeer echte probleem motiveren met een niet-echte 90 00:04:24,500 --> 00:04:28,740 scenario, laat me je hier kennismaken met een van onze favoriete clips van deze 91 00:04:28,740 --> 00:04:29,895 film, Spaceballs. 92 00:04:29,895 --> 00:04:30,565 >> [VIDEO AFSPELEN] 93 00:04:30,565 --> 00:04:32,995 -Helm, je vijand, wat is er aan de hand? 94 00:04:32,995 --> 00:04:34,730 Wat doe je met mijn dochter? 95 00:04:34,730 --> 00:04:38,960 -Sta mij toe de briljante jonge plastisch chirurg, Dr Philip introduceren 96 00:04:38,960 --> 00:04:43,290 Schlotkin, de grootste neuscorrectie mens in het gehele 97 00:04:43,290 --> 00:04:45,526 universum en Beverly Hills. 98 00:04:45,526 --> 00:04:46,450 -Uwe Hoogheid. 99 00:04:46,450 --> 00:04:47,380 -Nose job? 100 00:04:47,380 --> 00:04:48,035 Ik begrijp het niet. 101 00:04:48,035 --> 00:04:49,480 Ze heeft al een neuscorrectie gehad. 102 00:04:49,480 --> 00:04:51,490 Het was een sweet 16 aanwezig is. 103 00:04:51,490 --> 00:04:53,090 -Nee, het is niet wat je denkt. 104 00:04:53,090 --> 00:04:55,150 Het is veel, veel erger. 105 00:04:55,150 --> 00:04:59,860 Als je niet geef me de combinatie naar de lucht schild, Dr Schlotkin zal 106 00:04:59,860 --> 00:05:04,135 geef je dochter terug haar oude neus. 107 00:05:04,135 --> 00:05:05,385 -Nee! 108 00:05:08,202 --> 00:05:10,186 Waar heb je dat vandaan? 109 00:05:10,186 --> 00:05:11,178 -Oke. 110 00:05:11,178 --> 00:05:11,674 Ik zal je vertellen. 111 00:05:11,674 --> 00:05:12,666 Ik zal je vertellen. 112 00:05:12,666 --> 00:05:14,154 -Nee, papa, nee. 113 00:05:14,154 --> 00:05:15,150 Je moet niet. 114 00:05:15,150 --> 00:05:16,460 -Je hebt gelijk, mijn beste. 115 00:05:16,460 --> 00:05:18,450 Ik zal je missen je nieuwe neus. 116 00:05:18,450 --> 00:05:21,550 Maar ik zal niet vertellen de combinatie er ook gebeurt. 117 00:05:21,550 --> 00:05:23,100 -Heel goed. 118 00:05:23,100 --> 00:05:25,510 Dr Schlotkin, doe je ergste. 119 00:05:25,510 --> 00:05:26,760 -Graag gedaan. 120 00:05:30,560 --> 00:05:31,180 -Nee! 121 00:05:31,180 --> 00:05:33,450 Wacht, wacht. 122 00:05:33,450 --> 00:05:34,770 Ik zal je vertellen. 123 00:05:34,770 --> 00:05:36,400 Ik zal je vertellen. 124 00:05:36,400 --> 00:05:38,630 -Ik wist dat het zou werken. 125 00:05:38,630 --> 00:05:42,040 Oke, geef het aan mij. 126 00:05:42,040 --> 00:05:46,890 De combinatie-een. 127 00:05:46,890 --> 00:05:47,290 -One. 128 00:05:47,290 --> 00:05:48,183 -One. 129 00:05:48,183 --> 00:05:48,950 -Twee. 130 00:05:48,950 --> 00:05:49,370 -Twee. 131 00:05:49,370 --> 00:05:50,450 -Twee. 132 00:05:50,450 --> 00:05:50,715 -Drie 133 00:05:50,715 --> 00:05:51,380 -Drie. 134 00:05:51,380 --> 00:05:52,390 -Drie. 135 00:05:52,390 --> 00:05:53,200 -Vier. 136 00:05:53,200 --> 00:05:53,720 -Vier. 137 00:05:53,720 --> 00:05:55,830 -Vier. 138 00:05:55,830 --> 00:05:56,580 -Vijf 139 00:05:56,580 --> 00:05:57,120 -Vijf. 140 00:05:57,120 --> 00:05:58,560 -Vijf. 141 00:05:58,560 --> 00:06:03,770 Dus de combinatie-een, twee, drie, vier, vijf. 142 00:06:03,770 --> 00:06:06,745 Dat is het stomste combinatie die ik ooit heb gehoord in mijn leven. 143 00:06:06,745 --> 00:06:09,290 Dat is het soort ding een idioot zou hebben op zijn bagage. 144 00:06:09,290 --> 00:06:11,540 -Dank u, uwe hoogheid. 145 00:06:11,540 --> 00:06:12,940 -Wat heb je gedaan? 146 00:06:12,940 --> 00:06:14,230 -Ik zette de muur. 147 00:06:14,230 --> 00:06:14,630 -Nee, dat deed je niet. 148 00:06:14,630 --> 00:06:15,430 Je zette de hele film. 149 00:06:15,430 --> 00:06:16,722 -Ik moet de verkeerde knop gedrukt. 150 00:06:16,722 --> 00:06:18,078 -Nou, zet hem weer aan. 151 00:06:18,078 --> 00:06:18,805 Zet de film weer aan. 152 00:06:18,805 --> 00:06:19,080 -Ja, meneer. 153 00:06:19,080 --> 00:06:19,270 Ja, meneer. 154 00:06:19,270 --> 00:06:19,830 -Laten we gaan, Erna. 155 00:06:19,830 --> 00:06:20,270 Kom, Gretchen. 156 00:06:20,270 --> 00:06:22,850 Natuurlijk je weet dat ik nog steeds om u te factureren voor. 157 00:06:27,400 --> 00:06:28,325 -Nou, het? 158 00:06:28,325 --> 00:06:29,550 Waar is de poort? 159 00:06:29,550 --> 00:06:29,910 -Het werkte, meneer. 160 00:06:29,910 --> 00:06:30,770 We hebben de combinatie. 161 00:06:30,770 --> 00:06:31,390 -Great. 162 00:06:31,390 --> 00:06:35,630 Nu kunnen we elke laatste adem van verse lucht van planeet Druidia. 163 00:06:35,630 --> 00:06:36,550 Wat is de combinatie? 164 00:06:36,550 --> 00:06:38,805 Een, twee, drie, vier, vijf. 165 00:06:38,805 --> 00:06:40,610 -Een, twee, drie, vier, vijf? 166 00:06:40,610 --> 00:06:41,070 -Ja. 167 00:06:41,070 --> 00:06:41,760 -Dat is geweldig. 168 00:06:41,760 --> 00:06:45,200 Ik heb dezelfde combinatie op mijn bagage. 169 00:06:45,200 --> 00:06:47,800 Bereid Spaceball 1 voor onmiddellijk vertrek. 170 00:06:47,800 --> 00:06:48,536 -Ja, meneer. 171 00:06:48,536 --> 00:06:52,350 -En verander de combinatie op mijn bagage. 172 00:06:52,350 --> 00:06:53,250 -Ow! 173 00:06:53,250 --> 00:06:55,020 [END VIDEO AFSPELEN] 174 00:06:55,020 --> 00:06:57,470 >> DAVID J. MALAN: Een geweldige film moet je nu allemaal zien. 175 00:07:00,600 --> 00:07:06,540 Dus de context hier is dat met onzekere gegevens een mogelijkheid komt om 176 00:07:06,540 --> 00:07:07,790 coderen en te klauteren het. 177 00:07:07,790 --> 00:07:11,060 En dus bijvoorbeeld, is een voorbeeld van een gecodeerd bericht. 178 00:07:11,060 --> 00:07:12,980 Dit zegt eigenlijk iets in het Engels. 179 00:07:12,980 --> 00:07:14,750 Maar het is duidelijk niet geheel duidelijk. 180 00:07:14,750 --> 00:07:17,360 En we zullen de cirkel rond vandaag te plagen elkaar wat dit geheim 181 00:07:17,360 --> 00:07:18,380 boodschap hier is. 182 00:07:18,380 --> 00:07:22,370 Maar in de echte wereld van computers, de dingen niet eens op dat ze misschien 183 00:07:22,370 --> 00:07:23,440 Engels zijn zinnen. 184 00:07:23,440 --> 00:07:27,500 Zo, dit is wat je zou kunnen vinden op een standaard Linux of Mac of 185 00:07:27,500 --> 00:07:32,080 Unix-computer in een bestand dat was ooit een tijd genaamd het wachtwoord bestand. 186 00:07:32,080 --> 00:07:34,170 Tegenwoordig, het is al verplaatst naar andere plaatsen. 187 00:07:34,170 --> 00:07:38,660 Maar als je kijkt op de juiste plaats op een systeem, ziet u niet alleen uw 188 00:07:38,660 --> 00:07:41,430 gebruikersnaam of die van andere mensen op het systeem, maar je zult zien een 189 00:07:41,430 --> 00:07:43,410 versleutelde versie van hun wachtwoord. 190 00:07:43,410 --> 00:07:47,800 Inderdaad, het woord crypte is er dat de volgende dingen gecodeerd. 191 00:07:47,800 --> 00:07:52,030 En deze reeks van schijnbaar willekeurige letters en tekens en cijfers en 192 00:07:52,030 --> 00:07:56,370 enzovoort kunnen worden gedecodeerd alleen door het algemeen kennis van enkele geheime - 193 00:07:56,370 --> 00:07:58,600 een geheim woord, een geheim nummer. 194 00:07:58,600 --> 00:08:02,760 En dus inderdaad, om de kunst van cryptografie uiteindelijk neer vertrouwen van sommige 195 00:08:02,760 --> 00:08:05,700 sorteren en weten iets dat iemand anders niet doet. 196 00:08:05,700 --> 00:08:10,010 We verkennen deze in een beetje meer detail nu en in de PSET te komen. 197 00:08:10,010 --> 00:08:11,860 >> En nu een woord over de pass / fail. 198 00:08:11,860 --> 00:08:15,250 Dus vooral, hebben zoals sommigen van jullie doken in PSET 1, het apparaat, en 199 00:08:15,250 --> 00:08:18,390 een heel nieuwe wereld voor jezelf, besefte dat frustraties en 200 00:08:18,390 --> 00:08:21,340 verwarring en slechts technische moeilijkheden te verwachten. 201 00:08:21,340 --> 00:08:24,410 Vooral bij de eerste PSET, waar er net zo veel nieuwe, net 202 00:08:24,410 --> 00:08:28,830 vertrouwd zijn met ls en cd en al deze geheimzinnige commando's in een nieuwe omgeving. 203 00:08:28,830 --> 00:08:32,679 En dat is los van de feitelijke materiaal en het programmeren zelf. 204 00:08:32,679 --> 00:08:35,960 Zo ook realiseren, dat er zeker kantooruren die bestaan ​​als 205 00:08:35,960 --> 00:08:36,770 de steunconstructie. 206 00:08:36,770 --> 00:08:38,620 Secties beginnen komende zondag. 207 00:08:38,620 --> 00:08:41,990 Maar het belangrijkste is, als je je voelt gewoon dat dit niet het 208 00:08:41,990 --> 00:08:44,420 wereld voor u, beseffen dat het echt gewoon niet de tijd te nemen. 209 00:08:44,420 --> 00:08:47,520 En ware het niet voor deze gelegenheid jaren geleden voor mij van het nemen van een klasse 210 00:08:47,520 --> 00:08:50,840 pass / fail, eerlijk gezegd, ik zou nooit hebben zelfs een voet in de klas. 211 00:08:50,840 --> 00:08:53,520 En u kunt dit veranderen tot, laten we zeggen, de vijfde maandag van de cursus. 212 00:08:53,520 --> 00:08:57,110 Dus als je op de rand nu realiseren dat in plaats van het hoofd in een aantal andere 213 00:08:57,110 --> 00:09:01,000 wateren helemaal, ik zeker overwegen alleen het veranderen van tot pass / fail. 214 00:09:01,000 --> 00:09:03,750 Nogmaals, er is niet echt deze cultuur hier op Harvard van het nemen van dingen 215 00:09:03,750 --> 00:09:08,080 pass / fail omdat iedereen echt wil bereiken overtreffen of. 216 00:09:08,080 --> 00:09:11,470 Maar eerlijk gezegd, dit is een prachtige manier om te proberen iets uit dat misschien niet 217 00:09:11,470 --> 00:09:13,110 zijn bekend voorkomen. 218 00:09:13,110 --> 00:09:17,090 En je zult uiteindelijk doen in de meeste gevallen prima, misschien 219 00:09:17,090 --> 00:09:18,040 veel tot uw verbazing. 220 00:09:18,040 --> 00:09:20,850 En in meer concrete termen, wat ik denk pass / fail over het algemeen doet, 221 00:09:20,850 --> 00:09:23,350 vooral omdat je misschien al hebt ervaren met PSET 0, als je hebt gezet 222 00:09:23,350 --> 00:09:27,200 in 10 uur, 15 uur, 25 uur in een aantal PSET - en je bent gewoon bonzen 223 00:09:27,200 --> 00:09:28,180 je hoofd tegen de muur, 224 00:09:28,180 --> 00:09:29,850 en het wordt steeds super laat in de nacht, 225 00:09:29,850 --> 00:09:31,880 maar je hebt genomen de PSET als 90% van de weg, 226 00:09:31,880 --> 00:09:33,780 je weet dat je gewoon niet kunt achterhalen een ding - 227 00:09:33,780 --> 00:09:36,830 pass / fail echt neemt de rand af van een klasse als deze, waar u kunt sorteren 228 00:09:36,830 --> 00:09:39,150 van gelukkig zeggen oke, ik weet dat het niet perfect. 229 00:09:39,150 --> 00:09:40,470 Maar ik werkte mijn kont af op dit punt. 230 00:09:40,470 --> 00:09:42,410 Ik ben erg blij met waar het uiteindelijk. 231 00:09:42,410 --> 00:09:44,780 En dat zal voldoen aan de verwachtingen voor pass / fail. 232 00:09:44,780 --> 00:09:46,850 Dus hou dat in gedachten. 233 00:09:46,850 --> 00:09:47,140 >> Oke. 234 00:09:47,140 --> 00:09:50,980 Dus degenen onder u die hebben lang naar de Harvard University Wi-Fi te gebruiken weet 235 00:09:50,980 --> 00:09:54,780 dat er een CS50 SSID, een Wi-Fi-verbinding rondzweven dat je 236 00:09:54,780 --> 00:09:56,520 zou kunnen hebben meer geluk voor. 237 00:09:56,520 --> 00:09:59,430 Het is een beetje ironisch dat het wachtwoord voor deze - indien u zou willen proberen 238 00:09:59,430 --> 00:10:03,080 verbinding met deze voor een betere snelheden en laat ons weten of het niet beter - 239 00:10:03,080 --> 00:10:09,240 een, twee, drie, vier, vijf, helemaal tot acht omdat acht is 240 00:10:09,240 --> 00:10:10,270 veiliger dan vijf. 241 00:10:10,270 --> 00:10:15,520 Dus als u de Wi-Fi-wachtwoord, verbinding te maken met CS50 draadloze hier. 242 00:10:15,520 --> 00:10:16,950 Een, twee, drie, vier, vijf, zes, zeven, acht. 243 00:10:16,950 --> 00:10:20,440 En post op CS50 Bespreek als u nog intermitterende problemen met de verbinding, 244 00:10:20,440 --> 00:10:24,880 en we laten de bevoegdheden die worden weet voor deze ruimte. 245 00:10:24,880 --> 00:10:25,180 >> Oke. 246 00:10:25,180 --> 00:10:30,350 Dus een snelle teaser, vooral voor degenen onder jullie die fan jongens of meisjes 247 00:10:30,350 --> 00:10:31,900 van alle dingen Apple. 248 00:10:31,900 --> 00:10:37,566 Wat ik opgegraven van een paar jaar terug was dit bestand hier, ilock.c, gewoon om te 249 00:10:37,566 --> 00:10:40,930 soort make concreter en meer complexe deel van de meer fundamentele C 250 00:10:40,930 --> 00:10:42,350 programma's die we hebben geschreven. 251 00:10:42,350 --> 00:10:44,360 Dus ik opende dit bestand, ilock.c. 252 00:10:44,360 --> 00:10:46,830 Het is beschikbaar op de lezingen pagina voor vandaag. 253 00:10:46,830 --> 00:10:49,470 Aan de linkerkant zie je een lange lijst van functies. 254 00:10:49,470 --> 00:10:51,860 Dus de man die dit schreef schreef een heleboel functies, 255 00:10:51,860 --> 00:10:53,290 meer dan alleen de belangrijkste. 256 00:10:53,290 --> 00:10:55,490 Hij gebruikte een hele hoop van bibliotheken hier. 257 00:10:55,490 --> 00:11:00,450 En als we het scrollen te starten door, wat dit eigenlijk is, is het zeer 258 00:11:00,450 --> 00:11:04,670 ten eerste, geloof ik, kraken voor de originele iPhone. 259 00:11:04,670 --> 00:11:08,000 Als je wilde de originele iPhone jailbreak, wat betekent untether 260 00:11:08,000 --> 00:11:11,800 het installeren van AT & T en eigenlijk speciale software op en doe dingen 261 00:11:11,800 --> 00:11:13,510 dat Apple niet wil dat mensen doen - 262 00:11:13,510 --> 00:11:17,020 goed, iemand nam de tijd om erachter te komen hoe ze kan misbruik maken van 263 00:11:17,020 --> 00:11:20,880 softwarefouten, fouten, bugs, in de software van Apple. 264 00:11:20,880 --> 00:11:22,650 En zo werd geboren ilock.c. 265 00:11:22,650 --> 00:11:26,670 Dat als je het compileerde op een computer en geïnstalleerd op een iPhone die 266 00:11:26,670 --> 00:11:29,810 werd aangesloten op uw computer via bijvoorbeeld een USB-kabel, zou dit u 267 00:11:29,810 --> 00:11:33,360 administratieve of root-privileges op je iPhone en laat je vrij veel 268 00:11:33,360 --> 00:11:34,170 wat je wilt. 269 00:11:34,170 --> 00:11:36,740 >> En dus er is al deze fascinerende kat en muis spel tussen Apple en 270 00:11:36,740 --> 00:11:39,920 de rest van de wereld in het bijzonder als ze, net als veel bedrijven, proberen te vergrendelen 271 00:11:39,920 --> 00:11:43,220 hun spullen naar beneden, zodat je kunt alleen doen wat ze van plan. 272 00:11:43,220 --> 00:11:46,620 Maar dankzij mensen zoals deze en hun begrip van low-level 273 00:11:46,620 --> 00:11:50,580 details en in dit geval, C programmering en veel van de bekende constructen 274 00:11:50,580 --> 00:11:54,630 dat we begonnen te spelen met, bent u in staat om echt te maken gebruik van de 275 00:11:54,630 --> 00:11:59,050 hardware op een manier je past en niet noodzakelijk een aantal corporate entiteit. 276 00:11:59,050 --> 00:12:01,360 Dus bijvoorbeeld, ik heb geen idee wat dit allemaal doet. 277 00:12:01,360 --> 00:12:03,220 Maar GetVersion klinkt vrij eenvoudig. 278 00:12:03,220 --> 00:12:05,480 En het lijkt erop dat dit is een functie dat deze persoon heeft geschreven. 279 00:12:05,480 --> 00:12:09,240 Neem een ​​soort van integer als argument, geeft niets, maar 280 00:12:09,240 --> 00:12:13,080 lijkt lus met een for-lus hier en een if-conditie, als voorwaarde, 281 00:12:13,080 --> 00:12:15,620 breken, en een of andere manier betrekking heeft op versienummers. 282 00:12:15,620 --> 00:12:16,700 Als we naar beneden scrollen - 283 00:12:16,700 --> 00:12:19,570 hoewel veel van deze zoekwoorden zullen zijn nieuwe, en er is een 284 00:12:19,570 --> 00:12:22,590 heel veel functies in hier hebben we nog nooit gezien en misschien niet altijd te zien via 285 00:12:22,590 --> 00:12:23,830 de loop van het semester - 286 00:12:23,830 --> 00:12:27,150 aan het eind van de dag, het volgt dezelfde regels en logica dat we zijn geweest 287 00:12:27,150 --> 00:12:28,760 spelen met tot dusver. 288 00:12:28,760 --> 00:12:34,220 Dus dit is veel te oud om je iPhone 3s of 4s of binnenkort 5s, deze dagen te kraken, 289 00:12:34,220 --> 00:12:37,320 maar weet dat het is allemaal heel erg afgeleid van deze wereld, dat hebben we 290 00:12:37,320 --> 00:12:38,430 dook. 291 00:12:38,430 --> 00:12:41,900 >> Dus laten we een kijkje nemen op een beetje meer eenvoudig voorbeeld. 292 00:12:41,900 --> 00:12:46,100 Deze, alleen maar om krijgen opgewarmd met een aantal syntax en ook een aantal andere gegevens 293 00:12:46,100 --> 00:12:49,240 type dat we over gesproken hebben, maar nog niet echt gezien in C. Dit is dus een 294 00:12:49,240 --> 00:12:51,680 bestand met de naam positive1.c. 295 00:12:51,680 --> 00:12:55,120 En per de opmerkingen aan de top, dit eist alleen dat de gebruiker een 296 00:12:55,120 --> 00:12:55,960 positief getal. 297 00:12:55,960 --> 00:12:59,530 Dus het is een voorbeeld van een do-while-lus, dat is leuk voor de gebruiker interactief 298 00:12:59,530 --> 00:13:01,980 programma's waar je moet de gebruiker vertellen om iets te doen. 299 00:13:01,980 --> 00:13:05,190 En als ze niet meewerken, je schreeuwen tegen hen of verwerpen hun inbreng. 300 00:13:05,190 --> 00:13:11,610 Case in point, ga ik doen lijnen 19 tot en met 24, zolang de gebruiker 301 00:13:11,610 --> 00:13:14,310 niet gegeven mij een positief getal. 302 00:13:14,310 --> 00:13:20,400 Nu dit detail hier op lijn 18, waarom heb ik verklaar n boven dit hele 303 00:13:20,400 --> 00:13:24,490 looping constructie, in tegenstelling tot direct naast lijn 22 waar ik 304 00:13:24,490 --> 00:13:26,880 daadwerkelijk geeft om n te krijgen? 305 00:13:26,880 --> 00:13:27,330 Ja? 306 00:13:27,330 --> 00:13:27,780 [Onverstaanbaar] 307 00:13:27,780 --> 00:13:29,040 >> DAVID J. MALAN: Ja, dus dit nummer van omvang. 308 00:13:29,040 --> 00:13:30,850 En in termen van de leek, het toepassingsgebied zich wat vindt u? 309 00:13:34,690 --> 00:13:36,610 Ja? 310 00:13:36,610 --> 00:13:37,860 [Onverstaanbaar] 311 00:13:40,040 --> 00:13:41,105 DAVID J. MALAN: Kun je je een beetje harder? 312 00:13:41,105 --> 00:13:43,450 LUIDSPREKER 1: Waar kun je een bepaalde variabele te openen. 313 00:13:43,450 --> 00:13:45,170 DAVID J. MALAN: Perfect. 314 00:13:45,170 --> 00:13:47,360 Waar kun je een bepaalde variabele te openen. 315 00:13:47,360 --> 00:13:50,400 En in het algemeen, de vuistregel tot nu toe is dat de omvang van een aantal 316 00:13:50,400 --> 00:13:55,860 variabele wordt bepaald door de meest recente accolades die je hebt gezien. 317 00:13:55,860 --> 00:14:02,010 En dus in dit geval, als ik de fout gemaakt te verklaren n op lijn 22, 318 00:14:02,010 --> 00:14:03,010 die lijn zou werken. 319 00:14:03,010 --> 00:14:10,990 Ik zou krijgen een int, en ik zou het gebracht die variabele n in lijn 22. 320 00:14:10,990 --> 00:14:16,900 Maar welke regel code zou nu heb geen idee waar ik het over heb? 321 00:14:16,900 --> 00:14:22,650 Dus 25, en het blijkt 24 en omdat in dit geval buiten 322 00:14:22,650 --> 00:14:23,610 van de accolades. 323 00:14:23,610 --> 00:14:27,280 Dus gewoon een beetje vervelend, maar zeer eenvoudig op te lossen door simpelweg te verklaren 324 00:14:27,280 --> 00:14:30,140 de variabele buiten de functie zelf. 325 00:14:30,140 --> 00:14:32,600 >> Nu we later zullen zien vandaag de dag, kunt u een stap verder gaan. 326 00:14:32,600 --> 00:14:34,860 En je kon zelfs een beetje lui - 327 00:14:34,860 --> 00:14:37,320 en dit is niet aan te bevelen, in het algemeen - 328 00:14:37,320 --> 00:14:42,260 maar je kon zelfs lui en zet een variabele wereldwijd, om zo te zeggen, niet 329 00:14:42,260 --> 00:14:46,670 in een functie, niet in een lus, maar in het bestand zelf buiten 330 00:14:46,670 --> 00:14:49,600 van alle functies die je hebt geschreven, zoals ik deed hier op lijn 15. 331 00:14:49,600 --> 00:14:51,160 Maar dit is over het algemeen afgekeurd. 332 00:14:51,160 --> 00:14:55,680 Maar beseffen dat dit een oplossing is soms tot andere problemen, zoals we zullen 333 00:14:55,680 --> 00:14:56,620 uiteindelijk te zien. 334 00:14:56,620 --> 00:14:58,130 Dus voor nu, we laten het zo. 335 00:14:58,130 --> 00:15:01,030 Maar laten we eens kijken of we kunnen herschrijven dit gewoon om te beginnen uiten onszelf een 336 00:15:01,030 --> 00:15:01,990 beetje anders. 337 00:15:01,990 --> 00:15:05,330 >> Dus dit programma, alleen maar om duidelijk, is positive1. 338 00:15:05,330 --> 00:15:11,810 Laat me hier ga je gang en in mijn terminal-venster maken positive1, Enter. 339 00:15:11,810 --> 00:15:12,740 Compileert, oke. 340 00:15:12,740 --> 00:15:14,910 Ik ga positive1 rennen, druk op Enter. 341 00:15:14,910 --> 00:15:16,820 Ik eis dat je me een positief geheel getal. 342 00:15:16,820 --> 00:15:18,260 Ik zal -1 zeggen. 343 00:15:18,260 --> 00:15:18,910 Dat werkte niet. 344 00:15:18,910 --> 00:15:22,150 0, 99, dat lijkt te werken. 345 00:15:22,150 --> 00:15:23,570 Misschien niet de meest rigoureuze test. 346 00:15:23,570 --> 00:15:26,480 Maar in ieder geval het is een leuke sanity check dat we op de goede weg. 347 00:15:26,480 --> 00:15:29,240 Dus nu laat me gaan en open versie twee van deze. 348 00:15:29,240 --> 00:15:32,500 En wat is er anders al? 349 00:15:32,500 --> 00:15:35,140 Het implementeert hetzelfde. 350 00:15:35,140 --> 00:15:40,660 Maar wat springen zo duidelijk deze keer anders? 351 00:15:40,660 --> 00:15:42,560 Ja, dus dit bool in het groen. 352 00:15:42,560 --> 00:15:45,980 Gedit heeft in het groen dit sleutelwoord bekend als bool, 353 00:15:45,980 --> 00:15:47,000 Dit is een gegevenstype. 354 00:15:47,000 --> 00:15:51,080 Het komt niet ingebouwd in alle versies van C. Je moet zijn 355 00:15:51,080 --> 00:15:52,010 specifieke bibliotheek. 356 00:15:52,010 --> 00:15:54,770 In ons geval, ik onder meer de CS50 bibliotheek, zodat we 357 00:15:54,770 --> 00:15:56,460 toegang tot bool. 358 00:15:56,460 --> 00:15:59,810 Maar in lijn 18, lijken we in een Booleaanse waarde hier genoemd dankbaar zijn. 359 00:15:59,810 --> 00:16:01,040 Dus ik kon noemen dit alles. 360 00:16:01,040 --> 00:16:04,500 Maar ik noemde het alleen maar om dankbaar voor soort over te brengen wat semantische betekenis. 361 00:16:04,500 --> 00:16:07,930 Dus in eerste instantie op lijn 18, ik ben blijkbaar niet dankbaar, omdat de 362 00:16:07,930 --> 00:16:12,150 Booleaanse waarde dankbaar wordt geïnitialiseerd op false in de lijn 18. 363 00:16:12,150 --> 00:16:16,890 En dan lijkt het wat ik hier heb gedaan in de regels 21 tot en met 23 is ik heb net 364 00:16:16,890 --> 00:16:18,610 soort herschreven mijn logica. 365 00:16:18,610 --> 00:16:21,020 Dus geen functioneel verschillende. 366 00:16:21,020 --> 00:16:26,940 Maar in lijn 22 nu, ik controleren of de int de gebruiker heeft verstrekt, is groter dan 367 00:16:26,940 --> 00:16:31,120 0, dan heb ik gewoon de waarde van dankbaar in op true. 368 00:16:31,120 --> 00:16:32,290 En waarom doe ik dat? 369 00:16:32,290 --> 00:16:35,600 Omdat in de lijn 25, blijkbaar, ik ga naar een toestand te controleren. 370 00:16:35,600 --> 00:16:39,380 Doe deze lus terwijl dankbaar is vals. 371 00:16:39,380 --> 00:16:43,610 >> Ik stel dit als alternatief voor een versie omdat het minstens 372 00:16:43,610 --> 00:16:45,130 weinig meer intuïtieve, misschien. 373 00:16:45,130 --> 00:16:46,900 Het is een beetje meer geaard in het Engels. 374 00:16:46,900 --> 00:16:51,710 Dus het volgende doen terwijl u niet dankbaar of tijdens dankbaar is vals. 375 00:16:51,710 --> 00:16:55,890 En deze keer ook, ik blijkbaar niet schelen om te onthouden wat de gebruiker heeft ingevoerd 376 00:16:55,890 --> 00:16:57,730 in omdat aankondiging er geen variabele n. 377 00:16:57,730 --> 00:16:58,650 Dus eigenlijk heb ik - 378 00:16:58,650 --> 00:17:00,080 Een leugentje om bestwil is. 379 00:17:00,080 --> 00:17:02,770 Functioneel, het programma is een beetje anders als we tot op de bodem van de 380 00:17:02,770 --> 00:17:04,819 omdat ik niet herinneren wat n. 381 00:17:04,819 --> 00:17:09,579 Maar ik wilde hier laten zien ook dat, hoewel we hebben gezien GetInt en 382 00:17:09,579 --> 00:17:13,920 GetString wordt gebruikt op de rechterkant van het gelijkteken dusver zodat 383 00:17:13,920 --> 00:17:17,160 we denken aan de waarde, technisch, dat is niet strikt noodzakelijk. 384 00:17:17,160 --> 00:17:20,950 Als u om welke reden dan ook gewoon niet schelen om de waarde op te slaan, wil je gewoon 385 00:17:20,950 --> 00:17:25,710 om de waarde te controleren, merken dat we gewoon kunnen dit schrijven als GetInt geopend 386 00:17:25,710 --> 00:17:27,000 haakje, in de buurt haakje. 387 00:17:27,000 --> 00:17:30,460 Deze functie zal een waarde te retourneren, zoals we al zeiden. 388 00:17:30,460 --> 00:17:32,010 Het zal u terug te geven een int. 389 00:17:32,010 --> 00:17:36,450 En dus als je mentaal denken dat dit gebeurt, als ik typ in 99, GetInt 390 00:17:36,450 --> 00:17:38,160 retourneert het getal 99. 391 00:17:38,160 --> 00:17:41,330 En zo conceptueel, het is alsof mijn code eigenlijk waren dit. 392 00:17:41,330 --> 00:17:45,880 Als 99 inderdaad groter is dan 0, dan wordt dankbaar waar. 393 00:17:45,880 --> 00:17:50,420 Dan lijn 25 realiseert ooh, we zijn klaar, want ik ben nu dankbaar. 394 00:17:50,420 --> 00:17:54,590 En in lijn 26, we gewoon zeggen, bedankt voor de positieve gehele getallen, wat het ook 395 00:17:54,590 --> 00:17:55,710 toevallig. 396 00:17:55,710 --> 00:17:58,900 >> Nu gaan we een lichte syntactische suiker hier, bij wijze van spreken. 397 00:17:58,900 --> 00:18:02,990 Laten we eens kijken of we kunnen opruimen deze lijn 25 met deze derde en laatste variantie 398 00:18:02,990 --> 00:18:04,640 in positive3. 399 00:18:04,640 --> 00:18:08,250 Dus let op de enige verschil nu is wat regel code? 400 00:18:11,930 --> 00:18:13,260 Ja, dus 25. 401 00:18:13,260 --> 00:18:15,520 En we hebben niet echt gezien deze truc gewoon nog niet. 402 00:18:15,520 --> 00:18:19,510 Maar we zagen het uitroepteken op maandag, die wat aanduidt? 403 00:18:19,510 --> 00:18:20,970 Dus niet, of ontkenning. 404 00:18:20,970 --> 00:18:23,460 Dus neem een ​​Booleaanse waarde en flip zijn waarde. 405 00:18:23,460 --> 00:18:24,390 Ware wordt vals. 406 00:18:24,390 --> 00:18:25,500 False wordt waar. 407 00:18:25,500 --> 00:18:28,910 Dus dit, ik zou willen voorstellen, is zelfs een beetje meer intuïtieve van een manier van 408 00:18:28,910 --> 00:18:32,200 het schrijven van de code, omdat ik nog steeds dankbaar initialiseren op false. 409 00:18:32,200 --> 00:18:33,530 Ik heb nog steeds het volgende doen. 410 00:18:33,530 --> 00:18:35,700 Ik dankbaar op true wanneer de tijd komt. 411 00:18:35,700 --> 00:18:40,690 Maar nu kun je eigenlijk alleen maar vertalen deze code verbaal van links naar rechts, 412 00:18:40,690 --> 00:18:42,550 terwijl niet dankbaar. 413 00:18:42,550 --> 00:18:46,170 Omdat knal of uitroepteken, duidt het begrip niet, dus terwijl 414 00:18:46,170 --> 00:18:47,010 niet dankbaar. 415 00:18:47,010 --> 00:18:49,740 >> Dus nogmaals, we hebben geen nieuwe concepten als zodanig. 416 00:18:49,740 --> 00:18:53,230 We hebben gesproken over Booleans terug toen speelden we met Scratch. 417 00:18:53,230 --> 00:18:55,690 Maar realiseer me nu dat we kunnen gewoon beginnen met het schrijven van onze code in 418 00:18:55,690 --> 00:18:56,550 verschillende manieren. 419 00:18:56,550 --> 00:19:00,010 Dus vooral in pset1, als je soort van worstelen om erachter te komen de weg naar 420 00:19:00,010 --> 00:19:03,400 schrijf een programma, worden heb je geluk kansen, want er komt wel elke 421 00:19:03,400 --> 00:19:05,780 aantal oplossingen die je kan gebeuren op. 422 00:19:05,780 --> 00:19:09,850 Zo, dit is gewoon drie voor zelfs de eenvoudigste van de programma's. 423 00:19:09,850 --> 00:19:10,180 Oke. 424 00:19:10,180 --> 00:19:13,860 En nu terug op maandag, vertrokken we op deze notitie met terugkeer waarden. 425 00:19:13,860 --> 00:19:18,280 Dus voor de eerste keer, schreven we een programma dat niet alleen maar de belangrijkste, 426 00:19:18,280 --> 00:19:22,240 Het heeft ook een eigen aangepaste functie die ik hier geschreven heb. 427 00:19:22,240 --> 00:19:26,640 Dus in lijn 31 tot 34, heb ik geïmplementeerd een kubus functie. 428 00:19:26,640 --> 00:19:27,800 Het is niet complex. 429 00:19:27,800 --> 00:19:29,830 Het is gewoon een keer een keer een, in dit geval. 430 00:19:29,830 --> 00:19:34,920 Maar wat belangrijk is over het is dat ik inbreng te nemen in de vorm van een en 431 00:19:34,920 --> 00:19:38,910 Ik breng output in de vorm van een keer per keer per. 432 00:19:38,910 --> 00:19:43,940 >> Dus nu heb ik de mogelijkheid, net als ik om met printf alleen wordt gebruikt, om te bellen 433 00:19:43,940 --> 00:19:47,120 deze functie door te bellen naar de kubus functie. 434 00:19:47,120 --> 00:19:49,470 En de kubus functie neemt sommige input. 435 00:19:49,470 --> 00:19:52,030 En de kubus functie geeft enkele uitgang. 436 00:19:52,030 --> 00:19:56,660 En zo daarentegen printf gewoon deed iets. 437 00:19:56,660 --> 00:19:59,490 Het kwam niet terug iets dat we om gaf - ook al, als een 438 00:19:59,490 --> 00:20:00,820 terzijde, het doet een waarde teruggeven. 439 00:20:00,820 --> 00:20:02,650 Je gewoon in het algemeen negeren. 440 00:20:02,650 --> 00:20:04,000 Printf gewoon deed iets. 441 00:20:04,000 --> 00:20:06,220 Het had een neveneffect van afdrukken op het scherm. 442 00:20:06,220 --> 00:20:09,480 Daarentegen hier, hebben we de kubus functie, die 443 00:20:09,480 --> 00:20:11,400 eigenlijk terug iets. 444 00:20:11,400 --> 00:20:12,960 >> Dus dit is over het algemeen - 445 00:20:12,960 --> 00:20:15,260 voor degenen die vertrouwd zijn met deze, het is een vrij eenvoudig idee. 446 00:20:15,260 --> 00:20:18,460 Maar voor de minder vertrouwd zijn met dit idee van het doorgeven in inputs en het krijgen van 447 00:20:18,460 --> 00:20:21,700 terug uitgangen, laten we proberen gewoon iets super eenvoudig. 448 00:20:21,700 --> 00:20:25,180 Is er iemand comfortabele komen op het podium kort? 449 00:20:25,180 --> 00:20:27,460 Je moet comfortabel met een camera op je, als goed. 450 00:20:27,460 --> 00:20:27,640 Ja. 451 00:20:27,640 --> 00:20:28,610 Oke, wat is je naam? 452 00:20:28,610 --> 00:20:29,020 KEN: Ken. 453 00:20:29,020 --> 00:20:29,420 DAVID J. MALAN: Ken. 454 00:20:29,420 --> 00:20:29,810 Oke, Ken. 455 00:20:29,810 --> 00:20:31,060 Kom op. 456 00:20:31,060 --> 00:20:34,660 Ken dus zal een functie soort hier. 457 00:20:34,660 --> 00:20:35,760 En laten we verder gaan en dit doen. 458 00:20:35,760 --> 00:20:38,790 Laten we een beetje fantasie. 459 00:20:38,790 --> 00:20:39,770 Leuk u te ontmoeten. 460 00:20:39,770 --> 00:20:41,010 Welkom bij centraal. 461 00:20:41,010 --> 00:20:41,980 Oke. 462 00:20:41,980 --> 00:20:45,590 Laten we hier op die knop. 463 00:20:45,590 --> 00:20:46,420 Oke. 464 00:20:46,420 --> 00:20:49,490 Dus hier heb je een moderne schoolbord. 465 00:20:49,490 --> 00:20:53,050 En wat ik ben is de belangrijkste functie, bijvoorbeeld. 466 00:20:53,050 --> 00:20:55,990 En ik heb geen iPad in mijn hand. 467 00:20:55,990 --> 00:20:59,000 Ik heb niet echt weet hoe je - nou eigenlijk, kan dat niet zeggen. 468 00:20:59,000 --> 00:21:02,200 Ik heb niet echt goed handschrift. 469 00:21:02,200 --> 00:21:05,260 En dus daarom, ik wil dat je iets op het scherm voor me af te drukken. 470 00:21:05,260 --> 00:21:07,470 >> Dus daar ben ik nu het hoofdprogramma. 471 00:21:07,470 --> 00:21:15,060 En ik ga je zeggen dat dit door het schrijven van het in mijn kip kras-en 472 00:21:15,060 --> 00:21:16,600 dan aan u voorbijgaan een ingang. 473 00:21:16,600 --> 00:21:20,000 Dus net zo dwaas alsof deze oefening is, het begrip van functies en het bellen van een 474 00:21:20,000 --> 00:21:22,260 functie en het retourneren van een functie echt neer op deze. 475 00:21:22,260 --> 00:21:23,120 Ik ben de belangrijkste. 476 00:21:23,120 --> 00:21:26,270 Ik heb net printf geschreven ("iets") op het scherm. 477 00:21:26,270 --> 00:21:27,470 Ik gebruik dit programma. 478 00:21:27,470 --> 00:21:30,900 En zodra printf wordt aangeroepen, duurt het een argument - of een parameter, 479 00:21:30,900 --> 00:21:31,660 soms - 480 00:21:31,660 --> 00:21:32,780 tussen dubbele aanhalingstekens. 481 00:21:32,780 --> 00:21:33,960 Hier is dat argument. 482 00:21:33,960 --> 00:21:35,740 Ik ben door te geven aan Ken. 483 00:21:35,740 --> 00:21:39,390 Nu is hij een zwarte doos schriftelijke bepaald aantal jaren geleden dat blijkbaar 484 00:21:39,390 --> 00:21:41,070 alleen weet hoe u kunt afdrukken wat op het scherm. 485 00:21:41,070 --> 00:21:42,320 >> Dus, uit te voeren. 486 00:21:48,842 --> 00:21:49,900 Dat is niet slecht. 487 00:21:49,900 --> 00:21:50,890 Dus, heel goed. 488 00:21:50,890 --> 00:21:52,900 Dus nu Ken gebeurt uitvoeren. 489 00:21:52,900 --> 00:21:55,810 Heeft hij nodig om mij iets terug? 490 00:21:55,810 --> 00:21:57,240 Dus niet dat we tot nu toe gezien. 491 00:21:57,240 --> 00:21:59,230 Nogmaals, printf eigenlijk terug een nummer. 492 00:21:59,230 --> 00:22:01,640 Maar we gaan dat te negeren voor nu, want we hebben het nooit gebruikt. 493 00:22:01,640 --> 00:22:03,400 Dus dat is het voor Ken. 494 00:22:03,400 --> 00:22:06,650 En nu de belangrijkste komt terug te voeren naar - 495 00:22:06,650 --> 00:22:09,630 belangrijkste neemt de controle over het programma opnieuw, want dat regel van de code, 496 00:22:09,630 --> 00:22:11,010 printf, gebeurt de uitvoering. 497 00:22:11,010 --> 00:22:13,890 En we gaan over onze manier uitvoeren wat andere lijnen zijn er. 498 00:22:13,890 --> 00:22:14,130 >> Oke. 499 00:22:14,130 --> 00:22:17,080 Dus nu laten we proberen een iets ander voorbeeld. 500 00:22:17,080 --> 00:22:22,430 En deze keer hier, laten we eerst het scherm te wissen. 501 00:22:22,430 --> 00:22:24,670 En deze keer, we doen het Cubing functie. 502 00:22:24,670 --> 00:22:27,350 Maar deze keer, verwacht ik een uitgangswaarde. 503 00:22:27,350 --> 00:22:28,630 Dus laten we verder gaan en dit doen. 504 00:22:28,630 --> 00:22:35,680 Dus nu heb ik een regel code die zegt x = cube (x). 505 00:22:35,680 --> 00:22:36,930 Dus eigenlijk let's - 506 00:22:41,450 --> 00:22:43,940 de regel van de code, recall, ziet er als volgt. 507 00:22:43,940 --> 00:22:45,960 x = cube (x). 508 00:22:45,960 --> 00:22:48,100 Dus hoe gaat dit werken? 509 00:22:48,100 --> 00:22:50,820 Dus laten we verder gaan en geven je een wit scherm weer. 510 00:22:50,820 --> 00:22:55,000 En ik ga nu schrijven de waarde van x, die op dit moment in 511 00:22:55,000 --> 00:23:01,080 tijd gebeurt, worden laten we zeggen, 2, om het simpel te houden. 512 00:23:01,080 --> 00:23:04,890 Dus ik heb geschreven op een stuk papier de waarde van 2, 513 00:23:04,890 --> 00:23:06,100 dat is mijn waarde x. 514 00:23:06,100 --> 00:23:08,250 Ik geef het aan Ken. 515 00:23:08,250 --> 00:23:09,200 KEN: En ik schrijf het antwoord? 516 00:23:09,200 --> 00:23:12,660 DAVID J. MALAN: Ja, laten we gewoon het antwoord te schrijven. 517 00:23:12,660 --> 00:23:13,030 Oke. 518 00:23:13,030 --> 00:23:16,280 En nu heeft hij om terug te keren me iets. 519 00:23:16,280 --> 00:23:17,560 Dus - 520 00:23:17,560 --> 00:23:18,170 perfect. 521 00:23:18,170 --> 00:23:18,840 Leuk segue. 522 00:23:18,840 --> 00:23:21,970 >> Dus nu geeft hij me terug de waarde van 8, in dit geval. 523 00:23:21,970 --> 00:23:23,220 En wat doe ik ermee? 524 00:23:23,220 --> 00:23:26,130 Nou, eigenlijk, laten we eens kijken. 525 00:23:26,130 --> 00:23:26,640 Dit goed. 526 00:23:26,640 --> 00:23:27,880 Wat moet ik doen? 527 00:23:27,880 --> 00:23:31,900 Nu ga ik om deze waarde te nemen en daadwerkelijk op te slaan in de 528 00:23:31,900 --> 00:23:33,400 dezelfde bits geheugen. 529 00:23:33,400 --> 00:23:35,030 Maar let op, ik ben een beetje worstelen hier. 530 00:23:35,030 --> 00:23:38,280 Ik ben een beetje in de war, want waar moet ik eigenlijk schrijf de waarde van x? 531 00:23:38,280 --> 00:23:41,840 Want wat ik net heb gedaan is fysiek de hand Ken een stuk papier 532 00:23:41,840 --> 00:23:44,400 dat was de waarde 2, die x. 533 00:23:44,400 --> 00:23:46,300 En inderdaad, dat is precies wat er gebeurt. 534 00:23:46,300 --> 00:23:50,100 Zo blijkt dat wanneer je een functie aan te roepen, en passeert u in een discussie 535 00:23:50,100 --> 00:23:54,130 als "hello world" of passeert u in een discussie zoals 2, in het algemeen, je bent 536 00:23:54,130 --> 00:23:56,720 passeren in een kopie van dit argument. 537 00:23:56,720 --> 00:24:01,020 En dus net zoals ik schreef het nummer 2 hier en gaf het aan Ken, dat moet 538 00:24:01,020 --> 00:24:04,760 betekenen dat ik nog steeds een kopie van de waarde 2 ergens. 539 00:24:04,760 --> 00:24:08,140 Want inderdaad, nu ik heb gekregen terug de waarde 8, moet ik om terug te gaan in 540 00:24:08,140 --> 00:24:12,010 RAM en eigenlijk schrijf een daling van 8 waar ik ooit had de nummer 2. 541 00:24:12,010 --> 00:24:15,720 >> Dus visueel onthoud dit begrip passeren in letterlijk 542 00:24:15,720 --> 00:24:16,730 een kopie van de waarde. 543 00:24:16,730 --> 00:24:19,570 Ken doet zijn ding, geeft me weer iets - in dit geval, 544 00:24:19,570 --> 00:24:20,820 een waarde als 8. 545 00:24:20,820 --> 00:24:22,660 En dan moet ik iets doen met die waarde, als ik 546 00:24:22,660 --> 00:24:24,880 willen houden rond. 547 00:24:24,880 --> 00:24:29,470 Dus dit alles zal zijn maar al te bekend voor lang. 548 00:24:29,470 --> 00:24:33,082 Dank je wel voor deze demo hier, Ken. 549 00:24:33,082 --> 00:24:34,820 Oke. 550 00:24:34,820 --> 00:24:36,720 Heel goed gedaan. 551 00:24:36,720 --> 00:24:40,610 Dus laten we eens kijken hoe dat uiteindelijk betrekking heeft op een deel van de functie 552 00:24:40,610 --> 00:24:42,270 roepen dat we hier gedaan. 553 00:24:42,270 --> 00:24:47,610 Dus laat me gaan en brengen ons terug naar de Cubing voorbeeld hier. 554 00:24:47,610 --> 00:24:53,080 En let op dat als we willen om daadwerkelijk beginnen met het innemen van dit verder, we gaan 555 00:24:53,080 --> 00:24:57,050 te moeten houden met het feit dat het aantal x dat wordt doorgegeven in 556 00:24:57,050 --> 00:25:01,390 hier is iets anders dan wat er daadwerkelijk wordt doorgegeven aan de functie. 557 00:25:01,390 --> 00:25:03,940 Dus nogmaals, wordt dit doorgegeven door kopie gaat behoorlijk 558 00:25:03,940 --> 00:25:05,620 germane in slechts een moment. 559 00:25:05,620 --> 00:25:09,320 >> Dus laten we eens een blik op iets dat niet helemaal werkt juist nog niet. 560 00:25:09,320 --> 00:25:11,790 Ik ga om verder te gaan en een derde buggy voorbeeld te openen, die 561 00:25:11,790 --> 00:25:13,560 wordt ontsierd door de natuur. 562 00:25:13,560 --> 00:25:18,070 En het heet buggy3, en het implementeert een swap-functie. 563 00:25:18,070 --> 00:25:23,500 Hier hebben we dus een van de belangrijkste functie die in willekeur heeft x-en y-geïnitialiseerd te 564 00:25:23,500 --> 00:25:24,720 1 en 2 respectievelijk. 565 00:25:24,720 --> 00:25:27,590 We konden gebruik maken GetInt, maar we hoeven alleen maar een eenvoudige oefening. 566 00:25:27,590 --> 00:25:29,680 Dus het is hard-coded als 1 en 2. 567 00:25:29,680 --> 00:25:35,330 In lijnen 21 en 22, hebben we blijkbaar printen x en y, een per regel. 568 00:25:35,330 --> 00:25:39,620 Dan, op lijn 23, ik beweer ik deze waarden swapping, puntje, puntje, puntje. 569 00:25:39,620 --> 00:25:43,030 Ik blijkbaar roep een functie in regel 24 de naam swap 570 00:25:43,030 --> 00:25:44,000 dat duurt twee argumenten. 571 00:25:44,000 --> 00:25:46,430 Het is totaal legit voor functies te nemen twee argumenten. 572 00:25:46,430 --> 00:25:48,220 We hebben gezien printf al doen. 573 00:25:48,220 --> 00:25:50,370 Dus swap neemt blijkbaar x en y. 574 00:25:50,370 --> 00:25:53,010 En zoals de naam al doet vermoeden, hoop ik dat het gaat om 575 00:25:53,010 --> 00:25:54,320 swap deze twee waarden. 576 00:25:54,320 --> 00:25:57,560 Dus dan moet ik zeggen op de lijn 25, verwisseld. 577 00:25:57,560 --> 00:26:01,570 En ik herdrukken x en y in de veronderstelling dat 578 00:26:01,570 --> 00:26:02,830 ze hebben inderdaad verwisseld. 579 00:26:02,830 --> 00:26:04,370 Maar als ik echt uitvoeren van dit programma - 580 00:26:04,370 --> 00:26:06,060 Laat me open een terminal venster. 581 00:26:06,060 --> 00:26:07,750 Laat me buggy3. 582 00:26:07,750 --> 00:26:09,970 Zoals de naam al doet vermoeden, is dit niet van plan om goed af. 583 00:26:09,970 --> 00:26:14,690 Want als ik druk op Enter, merken dat x is 1. 584 00:26:14,690 --> 00:26:15,720 y 2. 585 00:26:15,720 --> 00:26:19,160 En toch het einde van het programma ze nog in feite hetzelfde. 586 00:26:19,160 --> 00:26:22,760 >> Dus gebaseerd op het aantonen juist nu met Ken, wat er werkelijk aan de hand is? 587 00:26:22,760 --> 00:26:24,660 Nou, laten we duiken in deze swap functie. 588 00:26:24,660 --> 00:26:25,800 Het is super kort. 589 00:26:25,800 --> 00:26:28,020 Het is slechts een paar regels code lang. 590 00:26:28,020 --> 00:26:32,810 Maar wat is het fundamentele probleem op basis van het eenvoudige verhaal verteld 591 00:26:32,810 --> 00:26:34,270 hier met Ken? 592 00:26:34,270 --> 00:26:36,115 Waarom wordt swap gebroken? 593 00:26:36,115 --> 00:26:37,365 [Onverstaanbaar] 594 00:26:39,840 --> 00:26:40,460 Precies. 595 00:26:40,460 --> 00:26:43,610 Dus we slaan een kopie, niet de variabele zelf. 596 00:26:43,610 --> 00:26:46,810 Met andere woorden, swap neemt blijkbaar twee argumenten, een int. 597 00:26:46,810 --> 00:26:49,370 En het is willekeurig genoemd a en b. 598 00:26:49,370 --> 00:26:54,430 En hier heb ik aangenomen in x en y, die respectievelijk zijn 1 en 2. 599 00:26:54,430 --> 00:26:56,580 Maar ik ben niet letterlijk passeren in x. 600 00:26:56,580 --> 00:26:58,410 Ik ben niet letterlijk voorbij in y. 601 00:26:58,410 --> 00:27:01,230 Ik ben het passeren van een kopie van x en een kopie van y. 602 00:27:01,230 --> 00:27:05,180 Het is net als bijna alsof je gekopieerd en geplakt in te wisselen de waarden die 603 00:27:05,180 --> 00:27:07,440 je wilt dat het daadwerkelijk manipuleren. 604 00:27:07,440 --> 00:27:11,970 Dus als dat het geval is, als ik het programma, start het uitvoeren van 605 00:27:11,970 --> 00:27:14,140 lijn 35, dan 36 - 606 00:27:14,140 --> 00:27:17,740 als ik naar lijn 37, op dit punt in het verhaal, wat is de waarde van een? 607 00:27:20,740 --> 00:27:24,850 Op dit punt in het verhaal, lijn 37, wat is de waarde van een op dit punt? 608 00:27:24,850 --> 00:27:25,980 Dus het moet gewoon 1. 609 00:27:25,980 --> 00:27:26,170 Juist? 610 00:27:26,170 --> 00:27:29,100 Omdat x werd doorgegeven als het eerste argument. 611 00:27:29,100 --> 00:27:33,150 En deze functie gewoon willekeurig roept haar eerste argument, een. 612 00:27:33,150 --> 00:27:35,130 Ook is y, het tweede argument. 613 00:27:35,130 --> 00:27:37,930 En het is gewoon willekeurig te bellen naar het tweede argument b. 614 00:27:37,930 --> 00:27:40,510 >> Nu deze tweedeling is eigenlijk vrij eenvoudig uitgelegd. 615 00:27:40,510 --> 00:27:40,880 Denk er eens over. 616 00:27:40,880 --> 00:27:42,980 Niemand van ons heeft voldaan aan de persoon die schreef printf. 617 00:27:42,980 --> 00:27:49,880 Dus zeker, hij of zij heeft geen idee wat onze variabelen 30 jaar later gaan 618 00:27:49,880 --> 00:27:50,710 genoemd te worden. 619 00:27:50,710 --> 00:27:55,110 Dus er moet een onderscheid te maken tussen wat je noemt variabelen in 620 00:27:55,110 --> 00:27:59,960 functies die u aan het schrijven bent en wat je noemt variabelen in functies die u bent 621 00:27:59,960 --> 00:28:01,770 bellen of gebruikt. 622 00:28:01,770 --> 00:28:05,120 Met andere woorden, heb ik zelf mijn variabelen x en y. 623 00:28:05,120 --> 00:28:08,060 Maar als iemand anders had geschreven de swap-functie, hij of zij zeker 624 00:28:08,060 --> 00:28:10,480 zou niet weten wat mijn variabelen zullen worden genoemd. 625 00:28:10,480 --> 00:28:13,850 Dus beseffen dat dit is de reden waarom u deze dualiteit van namen. 626 00:28:13,850 --> 00:28:16,800 Technisch gezien kan ik dit doen door toeval. 627 00:28:16,800 --> 00:28:19,750 Maar ze zou nog steeds worden doorgegeven als kopieën. 628 00:28:19,750 --> 00:28:22,940 Het zou gewoon puur toeval esthetisch als die persoon die schreef 629 00:28:22,940 --> 00:28:25,590 swap had gebruikt dezelfde namen. 630 00:28:25,590 --> 00:28:25,930 >> Oke. 631 00:28:25,930 --> 00:28:29,010 Dus op dit punt in het verhaal leiding 37 a 1. 632 00:28:29,010 --> 00:28:30,410 b 2. 633 00:28:30,410 --> 00:28:32,040 En nu moet ik gaan om ze te verwisselen. 634 00:28:32,040 --> 00:28:34,730 Nou allereerst wil ik eigenlijk doen dit veel eenvoudiger. 635 00:28:34,730 --> 00:28:36,500 Ik weet niet wat die drie regels code aan het doen waren. 636 00:28:36,500 --> 00:28:37,370 Laat me dit te doen. 637 00:28:37,370 --> 00:28:38,850 b krijgt een. 638 00:28:38,850 --> 00:28:40,170 a krijgt b. 639 00:28:40,170 --> 00:28:41,450 Gereed. 640 00:28:41,450 --> 00:28:43,540 Waarom is deze gebroken, logisch? 641 00:28:46,980 --> 00:28:48,590 Het is een soort van de intuïtieve, toch? 642 00:28:48,590 --> 00:28:50,640 Dus een wordt b. 643 00:28:50,640 --> 00:28:52,450 En b wordt een. 644 00:28:52,450 --> 00:28:55,410 Maar het probleem is dat zodra lijn 37 wordt uitgevoerd, wat is het 645 00:28:55,410 --> 00:28:58,170 waarde van a en b? 646 00:28:58,170 --> 00:28:59,070 Dezelfde, 1. 647 00:28:59,070 --> 00:29:03,460 Omdat je pan gehakt, om zo te zeggen, je hebt veranderd b om een ​​gelijk. 648 00:29:03,460 --> 00:29:06,000 Dus zodra lijn 37 wordt uitgevoerd, dat is geweldig. 649 00:29:06,000 --> 00:29:09,940 Je hebt nu twee exemplaren van het nummer 1 binnen in deze functie. 650 00:29:09,940 --> 00:29:14,720 Dus dan wanneer je zegt in de lijn 38, een b krijgt, nou, je bent soort geschroefd. 651 00:29:14,720 --> 00:29:17,370 Omdat je gewoon toewijzen van 1 tot 1. 652 00:29:17,370 --> 00:29:20,400 Je hebt soort van verloren de waarde die u gaf. 653 00:29:20,400 --> 00:29:22,910 >> Dus in de originele versie van dit, let op wat ik deed. 654 00:29:22,910 --> 00:29:26,620 Ik plaats had een derde lijn van de code die er zo uitzag. 655 00:29:26,620 --> 00:29:29,910 Ik verklaar een tijdelijke variabele - tmp is een veel voorkomende naam 656 00:29:29,910 --> 00:29:31,240 voor een tijdelijke variabele. 657 00:29:31,240 --> 00:29:34,280 Het is een int, omdat het moet passen bij wat ik wil een kopie van te maken. 658 00:29:34,280 --> 00:29:39,720 Ik bewaar een kopie van een binnenkant van tmp. Dus zodra lijn 37 heeft uitgevoerd, 659 00:29:39,720 --> 00:29:41,390 de waarde van a - 660 00:29:41,390 --> 00:29:42,970 snelle sanity check - 661 00:29:42,970 --> 00:29:43,460 1. 662 00:29:43,460 --> 00:29:45,780 De waarde van b is 2. 663 00:29:45,780 --> 00:29:48,470 En de waarde van tmp is 1. 664 00:29:48,470 --> 00:29:51,470 Dus nu heb ik uitvoeren lijn 38. 665 00:29:51,470 --> 00:29:57,180 Dus als lijn 38 voert een neemt de waarde van b. 666 00:29:57,180 --> 00:29:58,510 En b was 2. 667 00:29:58,510 --> 00:30:00,500 Dus een is nu 2. 668 00:30:00,500 --> 00:30:03,110 Dus op dit punt in het verhaal, a 2, b 2, 669 00:30:03,110 --> 00:30:05,130 en tmp 1. 670 00:30:05,130 --> 00:30:09,330 Dus nu logisch, we kunnen gewoon plop tmp waarde in b. 671 00:30:09,330 --> 00:30:10,690 En we zijn klaar. 672 00:30:10,690 --> 00:30:12,170 >> Dus hebben we dat probleem opgelost. 673 00:30:12,170 --> 00:30:16,040 Helaas, toen ik dit programma uit te voeren in deze vorm, is het niet echt ruilen 674 00:30:16,040 --> 00:30:17,700 geen waarden. 675 00:30:17,700 --> 00:30:18,950 Maar om duidelijk te zijn, waarom? 676 00:30:23,420 --> 00:30:26,310 Ik maakte het logische probleem van zojuist. 677 00:30:26,310 --> 00:30:31,150 Maar nogmaals, als ik zonder dit programma, x en y blijven ongewijzigd tegen het einde van 678 00:30:31,150 --> 00:30:33,834 van het programma uitvoering. 679 00:30:33,834 --> 00:30:34,760 [Onverstaanbaar] 680 00:30:34,760 --> 00:30:36,030 DAVID J. MALAN: Dus we hebben niet teruggekeerd niets. 681 00:30:36,030 --> 00:30:36,960 Dus dat is waar. 682 00:30:36,960 --> 00:30:39,880 Maar het blijkt dat er een beetje een probleem hier omdat tot nu toe, de 683 00:30:39,880 --> 00:30:42,460 enige wat we in staat geweest om terug te keren is een ding. 684 00:30:42,460 --> 00:30:46,540 En dit is een beperking van C. U kunt pas echt een waarde teruggeven, 685 00:30:46,540 --> 00:30:48,970 in welk geval, ik ben een beetje hier vast 686 00:30:48,970 --> 00:30:51,805 want ik kon de nieuwe waarde van x terug of ik kon de terugkeer van de 687 00:30:51,805 --> 00:30:53,160 nieuwe waarde van y. 688 00:30:53,160 --> 00:30:54,330 Maar ik wil beide terug. 689 00:30:54,330 --> 00:30:58,010 Dus terug is niet de eenvoudige oplossing. 690 00:30:58,010 --> 00:30:59,770 Maar het probleem is fundamenteel waarom? 691 00:30:59,770 --> 00:31:03,270 Wat hebben we eigenlijk verwisseld? 692 00:31:03,270 --> 00:31:04,010 a en b. 693 00:31:04,010 --> 00:31:07,670 Maar a en b zijn kopieën van x en y, wat betekent dat we gewoon dit alles deed 694 00:31:07,670 --> 00:31:10,080 werken - we brachten als drie minuten praten over de swap 695 00:31:10,080 --> 00:31:11,680 functie en deze drie variabelen. 696 00:31:11,680 --> 00:31:15,090 En dat is geweldig, volkomen juist in een isolement. 697 00:31:15,090 --> 00:31:20,230 Maar a en b van de scope is alleen in deze lijnen hier. 698 00:31:20,230 --> 00:31:24,130 Dus net als een for-lus, als je verklaart een geheel getal i in de voor 699 00:31:24,130 --> 00:31:27,400 lus - op dezelfde wijze, als je verklaren a en b in een functie die 700 00:31:27,400 --> 00:31:30,550 je hebt geschreven, ze zijn alleen geldig binnen van die functie. 701 00:31:30,550 --> 00:31:35,020 Wat betekent dat, zodra swap wordt gedaan uitvoeren en we gaan van lijn 24 naar 702 00:31:35,020 --> 00:31:38,380 leiding 25 x en y zijn niet veranderd. 703 00:31:38,380 --> 00:31:42,580 Je hoeft alleen verspilde heel veel tijd wisselen kopieën van variabelen. 704 00:31:42,580 --> 00:31:46,490 >> Zo blijkt dat de oplossing voor dit eigenlijk niet duidelijk. 705 00:31:46,490 --> 00:31:49,210 Het is niet helemaal voldoende om terug te keren waarden omdat we kunnen 706 00:31:49,210 --> 00:31:50,320 slechts een waarde teruggeven. 707 00:31:50,320 --> 00:31:53,370 En ik wil zowel de x-en y-swap op hetzelfde moment. 708 00:31:53,370 --> 00:31:55,020 Dus we gaan terug naar deze. 709 00:31:55,020 --> 00:31:58,770 Maar voor nu, beseffen dat het probleem fundamenteel voort uit het feit 710 00:31:58,770 --> 00:32:00,660 dat a en b kopieën. 711 00:32:00,660 --> 00:32:03,450 En ze zijn in hun eigen toepassingsgebied. 712 00:32:03,450 --> 00:32:04,980 Nou, laten we proberen om dit op te lossen op een bepaalde manier. 713 00:32:04,980 --> 00:32:09,200 Laat me eigenlijk scrollen hier terug en open te stellen, laten we zeggen, een vierde variant 714 00:32:09,200 --> 00:32:11,170 hiervan buggy4. 715 00:32:11,170 --> 00:32:13,230 En wat dacht je hiervan? 716 00:32:13,230 --> 00:32:16,690 Dit is een soortgelijke, maar eenvoudiger probleem om naar te kijken voordat we een gooi naar 717 00:32:16,690 --> 00:32:17,530 het oplossen ervan. 718 00:32:17,530 --> 00:32:19,440 Dit programma heet increment. 719 00:32:19,440 --> 00:32:24,320 En het initialiseert blijkbaar een x geheel getal van 1 in lijn 18. 720 00:32:24,320 --> 00:32:25,950 Vervolgens heb ik beweren x 1. 721 00:32:25,950 --> 00:32:28,020 Vervolgens heb ik vordering verhogen, puntje, puntje, puntje. 722 00:32:28,020 --> 00:32:29,460 Ik bel dan increment. 723 00:32:29,460 --> 00:32:33,480 Maar dan in lijnen 22 en 23, ik beweer het is al opgehoogd. 724 00:32:33,480 --> 00:32:37,780 Ik eis x is nu wat het ook is, vermoedelijk 2. 725 00:32:37,780 --> 00:32:39,770 >> Maar dit programma is buggy. 726 00:32:39,770 --> 00:32:41,020 Wat is het probleem? 727 00:32:43,450 --> 00:32:44,418 Ja? 728 00:32:44,418 --> 00:32:45,668 [Onverstaanbaar] 729 00:32:49,260 --> 00:32:49,850 DAVID J. MALAN: Precies. 730 00:32:49,850 --> 00:32:52,430 Dus x is uiteraard verklaard op lijn 18. 731 00:32:52,430 --> 00:32:54,410 Dat is binnen accolades belangrijkste is. 732 00:32:54,410 --> 00:32:58,470 Dus het simpele antwoord is dat, nou ja, x hier bestaat. 733 00:32:58,470 --> 00:33:01,510 Het bestaat niet in de lijn 32. 734 00:33:01,510 --> 00:33:03,710 Dus dit programma eigenlijk niet eens samen te stellen. 735 00:33:03,710 --> 00:33:07,910 De compiler, wanneer ik probeer deze code moet compileren, gaat schreeuwen 736 00:33:07,910 --> 00:33:13,190 over enkele zwart-id of iets van die strekking. 737 00:33:13,190 --> 00:33:13,870 In feite, laten we het proberen. 738 00:33:13,870 --> 00:33:15,235 Dit is te buggy4. 739 00:33:17,780 --> 00:33:18,190 Daar is het. 740 00:33:18,190 --> 00:33:22,030 Het gebruik van niet-aangegeven identifier x in de lijn 32. 741 00:33:22,030 --> 00:33:25,700 En eigenlijk, laten we explicieter hier vandaag, zodat dit is nuttig in 742 00:33:25,700 --> 00:33:27,140 kantooruren en thuis. 743 00:33:27,140 --> 00:33:29,000 Merk op dat het een beetje cryptisch geschreven. 744 00:33:29,000 --> 00:33:31,560 Maar het feit dat Clang heeft schreeuwde naar ons, zeggende: 745 00:33:31,560 --> 00:33:36,970 buggy4.c: 32:5, is eigenlijk nuttig. 746 00:33:36,970 --> 00:33:41,970 Het betekent dat de fout op lijn 32 op tekenpositie vijf. 747 00:33:41,970 --> 00:33:44,670 Dus een, twee, drie, vier, vijf. 748 00:33:44,670 --> 00:33:46,640 Dat is, in feite, waar het probleem. 749 00:33:46,640 --> 00:33:49,710 En ook om in gedachten te houden tijdens kantooruren en thuis, ik ben gelukkig hier. 750 00:33:49,710 --> 00:33:50,740 Ik heb een fout gemaakt. 751 00:33:50,740 --> 00:33:52,660 Het gaat om relatief eenvoudig op te lossen. 752 00:33:52,660 --> 00:33:56,220 Maar als je een heel scherm vol met overweldigende foutmeldingen, nogmaals, 753 00:33:56,220 --> 00:33:59,240 beseffen dat de onderste een net kunnen een symptoom zijn van 754 00:33:59,240 --> 00:34:00,320 de bovenste degenen. 755 00:34:00,320 --> 00:34:03,560 Dus altijd achtervolgen je bugs van boven naar beneden. 756 00:34:03,560 --> 00:34:06,720 Omdat er misschien gewoon een daisy-chain effect dat wenst u 757 00:34:06,720 --> 00:34:09,030 hebben veel meer problemen dan je eigenlijk doen. 758 00:34:09,030 --> 00:34:14,989 >> Dus hoe kunnen we dit oplossen als mijn doel is om te hogen x? 759 00:34:14,989 --> 00:34:15,370 Wat is dat? 760 00:34:15,370 --> 00:34:15,620 Oke. 761 00:34:15,620 --> 00:34:16,679 Dus we kunnen maken x mondiaal. 762 00:34:16,679 --> 00:34:18,860 Laten we de snelkoppeling die ik gewaarschuwd eerder. 763 00:34:18,860 --> 00:34:20,550 Maar ach, we hoeven alleen maar een snelle oplossing. 764 00:34:20,550 --> 00:34:23,949 Dus laten we gewoon zeggen int x hier. 765 00:34:23,949 --> 00:34:25,600 Dat maakt x mondiaal. 766 00:34:25,600 --> 00:34:28,460 Dus nu de belangrijkste toegang tot het. 767 00:34:28,460 --> 00:34:31,780 En Toename er toegang toe heeft. 768 00:34:31,780 --> 00:34:33,860 En dus laat me ga je gang en nu slaat deze. 769 00:34:33,860 --> 00:34:36,330 Maak buggy4, Enter. 770 00:34:36,330 --> 00:34:37,440 Lijkt nu te compileren. 771 00:34:37,440 --> 00:34:40,949 Laten we lopen buggy4, en het lijkt echt te werken. 772 00:34:40,949 --> 00:34:42,780 Nu, dit is een van die dingen - 773 00:34:42,780 --> 00:34:45,870 Doe wat ik zeg, niet wat ik doe, want ik ben net klaar. 774 00:34:45,870 --> 00:34:49,239 Omdat in het algemeen worden onze programma's wordt nog veel interessanter en 775 00:34:49,239 --> 00:34:50,440 veel langer dan dit. 776 00:34:50,440 --> 00:34:53,199 En als je oplossing voor de problemen van het leven is gewoon ah, zet alle 777 00:34:53,199 --> 00:34:57,550 variabelen op de top van uw dossier, heel snel doen programma's te krijgen 778 00:34:57,550 --> 00:34:59,700 afschuwelijk moeilijk te beheren. 779 00:34:59,700 --> 00:35:02,050 Het wordt nog lastiger te bedenken nieuwe variabele namen. 780 00:35:02,050 --> 00:35:05,240 Het wordt nog lastiger om te begrijpen wat de variabele is wat doet. 781 00:35:05,240 --> 00:35:08,250 >> En dus in het algemeen is dit geen goede oplossing. 782 00:35:08,250 --> 00:35:09,780 Dus laten we dit doen beter. 783 00:35:09,780 --> 00:35:11,920 We willen niet een globale variabele gebruiken hier. 784 00:35:11,920 --> 00:35:14,050 Ik wil wel x verhogen. 785 00:35:14,050 --> 00:35:16,050 Dus ik kon natuurlijk - 786 00:35:16,050 --> 00:35:18,450 aan het eind van de dag, het is een soort van een domme verhaal, omdat we dit gewoon doen. 787 00:35:18,450 --> 00:35:22,050 Maar als ik niet weet over die exploitant, of ik mocht niet 788 00:35:22,050 --> 00:35:27,700 veranderen in de belangrijkste zichzelf, hoe zou ik anders implementeren Ken hier, dit 789 00:35:27,700 --> 00:35:31,450 tijd niet om kubus, maar op te hogen? 790 00:35:31,450 --> 00:35:32,700 Hoe kan ik hier veranderen dit ding? 791 00:35:32,700 --> 00:35:33,025 Ja. 792 00:35:33,025 --> 00:35:34,275 [Onverstaanbaar] 793 00:35:37,430 --> 00:35:38,000 DAVID J. MALAN: Oke, goed. 794 00:35:38,000 --> 00:35:40,490 Dus waarom niet ik pas in x? 795 00:35:40,490 --> 00:35:44,390 En dan in plaats van terug te keren, waarom niet Ik doe gewoon terug x + 1? 796 00:35:44,390 --> 00:35:46,370 Nu, een paar dingen moet hier veranderen. 797 00:35:46,370 --> 00:35:47,530 Ik ben op de goede weg. 798 00:35:47,530 --> 00:35:48,910 Wat heb ik nodig om te tweaken? 799 00:35:48,910 --> 00:35:49,470 Iemand anders. 800 00:35:49,470 --> 00:35:49,882 Ja? 801 00:35:49,882 --> 00:35:51,530 [Onverstaanbaar] 802 00:35:51,530 --> 00:35:53,520 DAVID J. MALAN: Ik moet de return type van increment wijzigen 803 00:35:53,520 --> 00:35:54,590 want het is niet vervallen. 804 00:35:54,590 --> 00:35:56,650 Void betekent niets er wordt geretourneerd. 805 00:35:56,650 --> 00:35:57,600 Maar het is duidelijk, nu is. 806 00:35:57,600 --> 00:36:01,280 Dus dit moet veranderen om int in overeenstemming te zijn met wat 807 00:36:01,280 --> 00:36:02,580 Ik ben eigenlijk terug. 808 00:36:02,580 --> 00:36:04,580 >> Nu iets anders is nog steeds buggy hier. 809 00:36:04,580 --> 00:36:04,982 Ja? 810 00:36:04,982 --> 00:36:06,590 [Onverstaanbaar] 811 00:36:06,590 --> 00:36:07,630 DAVID J. MALAN: Dus ik moet x verhogen? 812 00:36:07,630 --> 00:36:10,336 [Onverstaanbaar] 813 00:36:10,336 --> 00:36:11,880 DAVID J. MALAN: Ah, dus ik moet x passeren. 814 00:36:11,880 --> 00:36:13,300 Dus ik moet hier doen. 815 00:36:17,590 --> 00:36:19,690 Dus het prototype, ik moet dit veranderen hier. 816 00:36:19,690 --> 00:36:21,290 Dit heeft dus te worden een int. 817 00:36:21,290 --> 00:36:22,820 Dit moet naar - 818 00:36:22,820 --> 00:36:23,670 hmm. 819 00:36:23,670 --> 00:36:24,710 Ik heb eigenlijk een bug hier beneden. 820 00:36:24,710 --> 00:36:25,780 Laten we eerst bevestig deze. 821 00:36:25,780 --> 00:36:27,990 Wat moet dit eigenlijk? 822 00:36:27,990 --> 00:36:29,330 Dus het moet een int iets. 823 00:36:29,330 --> 00:36:30,340 Het kan x. 824 00:36:30,340 --> 00:36:33,120 Maar eerlijk gezegd, als je begint te bellen al je variabelen x, gaat het om 825 00:36:33,120 --> 00:36:35,250 steeds minder duidelijk wat wat is. 826 00:36:35,250 --> 00:36:38,210 Dus laten we gewoon willekeurig een andere naamgevingsconventie voor mijn kiezen 827 00:36:38,210 --> 00:36:40,220 helper functies, functies die ik aan het schrijven ben. 828 00:36:40,220 --> 00:36:41,100 We noemen het een. 829 00:36:41,100 --> 00:36:44,500 Of we kunnen noemen het - laten we noemen het even_number om nog meer te expliciteren. 830 00:36:44,500 --> 00:36:47,610 Dus dan moet ik om terug te keren, ongeacht het aantal is plus 1. 831 00:36:47,610 --> 00:36:49,720 En nu moet ik nog iets veranderen hier en een 832 00:36:49,720 --> 00:36:50,700 ander ding hier. 833 00:36:50,700 --> 00:36:54,150 Wat moet ik eerst wijzigen op lijn 21? 834 00:36:54,150 --> 00:36:55,390 Ik moet het toe te wijzen aan x. 835 00:36:55,390 --> 00:36:57,480 Dus ik kan niet gewoon bellen increment x. 836 00:36:57,480 --> 00:37:01,000 Ik moet het antwoord onthouden door het veranderen van de waarde van x op 837 00:37:01,000 --> 00:37:02,020 de linkerkant. 838 00:37:02,020 --> 00:37:04,930 En hoewel x nu op de links en rechts, dat is helemaal goed, omdat 839 00:37:04,930 --> 00:37:08,370 de rechterkant wordt eerst uitgevoerd krijgt dan plofte in de linker 840 00:37:08,370 --> 00:37:10,240 de hand ding, x in dit geval. 841 00:37:10,240 --> 00:37:11,900 En dan tot slot, is dit een makkelijke oplossing nu. 842 00:37:11,900 --> 00:37:15,080 Dit moet gewoon overeenkomen met wat er onder neer. 843 00:37:15,080 --> 00:37:17,120 Int nummer. 844 00:37:17,120 --> 00:37:17,320 >> Oke. 845 00:37:17,320 --> 00:37:20,290 Dus een hele hoop veranderingen voor een hele domme functie. 846 00:37:20,290 --> 00:37:24,250 Maar vertegenwoordiger van de dingen die we in toenemende mate zullen willen doen. 847 00:37:24,250 --> 00:37:25,490 Dus zorg buggy4. 848 00:37:25,490 --> 00:37:26,485 Ik heb het verknald ergens. 849 00:37:26,485 --> 00:37:27,520 Oh mijn God. 850 00:37:27,520 --> 00:37:29,660 Vijf fouten in, zoals, een zes-line programma. 851 00:37:29,660 --> 00:37:36,500 Dus wat is er mis op lijn 18, character 5? 852 00:37:36,500 --> 00:37:36,970 Oke. 853 00:37:36,970 --> 00:37:39,330 Dus ik moet deze int te declareren. 854 00:37:39,330 --> 00:37:39,630 Oke. 855 00:37:39,630 --> 00:37:41,790 Dus laten we eens kijken, een hele hoop andere fouten. 856 00:37:41,790 --> 00:37:42,230 Oh my god. 857 00:37:42,230 --> 00:37:43,880 19, 18, 21. 858 00:37:43,880 --> 00:37:46,020 Maar nogmaals, laten we gewoon het scherm te wissen - 859 00:37:46,020 --> 00:37:48,660 Control L hier - en re-run Clang. 860 00:37:48,660 --> 00:37:51,340 Dus vijf problemen is eigenlijk alleen maar die ene. 861 00:37:51,340 --> 00:37:53,500 Dus laten we nu lopen buggy4, Enter. 862 00:37:53,500 --> 00:37:54,150 Oef. 863 00:37:54,150 --> 00:37:57,434 x correct verhoogd. 864 00:37:57,434 --> 00:37:58,420 >> Oke. 865 00:37:58,420 --> 00:38:01,700 Hebt u vragen over de manier waarop getallen verhogen? 866 00:38:01,700 --> 00:38:02,896 Ja? 867 00:38:02,896 --> 00:38:06,864 SPEAKER 2: Hoe komt het dat je gewoon x veranderen naar nummer in de variabele 868 00:38:06,864 --> 00:38:08,860 naam geven en weet wat je bedoelt? 869 00:38:08,860 --> 00:38:09,600 DAVID J. MALAN: Goede vraag. 870 00:38:09,600 --> 00:38:13,130 Hoe komt het dat ik kan x veranderen naar nummer en het programma zal weten 871 00:38:13,130 --> 00:38:13,990 onmiddellijk? 872 00:38:13,990 --> 00:38:16,120 Dus nogmaals, denk aan het als deze abstractie. 873 00:38:16,120 --> 00:38:20,110 Dus als ik de belangrijkste en Ken is incrementeel, eerlijk gezegd, kan me niet schelen 874 00:38:20,110 --> 00:38:21,540 wat Ken noemt zijn iPad. 875 00:38:21,540 --> 00:38:25,350 Kan me niet schelen wat hij noemt alles wat te maken heeft met zijn implementatie 876 00:38:25,350 --> 00:38:26,550 van deze functionaliteit. 877 00:38:26,550 --> 00:38:32,130 Dus dit is een implementatie detail dat ik, de belangrijkste, niet 878 00:38:32,130 --> 00:38:33,010 zorgen te maken over. 879 00:38:33,010 --> 00:38:37,440 En dus simpelweg het veranderen van het consequent binnenkant van de functie, het aantal hier 880 00:38:37,440 --> 00:38:41,340 en nummer hier, is alles wat nodig zolang ik opnieuw te compileren. 881 00:38:41,340 --> 00:38:43,820 Het is een soort van leuk als je erover nadenkt - velen van ons, die van u met bestuurder 882 00:38:43,820 --> 00:38:46,590 licenties die hebben gereden, of als je zelfs gereden in een auto - 883 00:38:46,590 --> 00:38:50,710 de meesten van ons hebben geen idee hoe een auto werkt onder de kap. 884 00:38:50,710 --> 00:38:54,710 En letterlijk, bij het openen van de motorkap, de meesten van ons - waaronder ikzelf - 885 00:38:54,710 --> 00:38:56,580 zijn niet van plan om echt te weten wat we kijken. 886 00:38:56,580 --> 00:38:58,850 Zoiets als je nu misschien voelen met dingen zoals dit recht. 887 00:38:58,850 --> 00:39:01,380 Maar we hoeven niet echt schelen hoe de auto werkt. 888 00:39:01,380 --> 00:39:05,000 We hoeven niet te schelen wat alle stangen en zuigers en kabels binnenkant van 889 00:39:05,000 --> 00:39:07,700 de auto eigenlijk aan het doen. 890 00:39:07,700 --> 00:39:11,360 >> Dus iets als wat je noemt de zuiger doet er niet toe 891 00:39:11,360 --> 00:39:11,920 hier in dit geval. 892 00:39:11,920 --> 00:39:12,490 Hetzelfde idee. 893 00:39:12,490 --> 00:39:12,670 Ja? 894 00:39:12,670 --> 00:39:13,920 [Onverstaanbaar] 895 00:39:25,250 --> 00:39:29,530 DAVID J. MALAN: Als er meer toepassingen van de variabele x een moment geleden, 896 00:39:29,530 --> 00:39:32,220 u, de programmeur, zou moeten overal veranderen. 897 00:39:32,220 --> 00:39:35,230 Of je zou kunnen letterlijk doen Bestand, Menu en vervolgens Zoeken / vervangen, 898 00:39:35,230 --> 00:39:36,270 zoiets. 899 00:39:36,270 --> 00:39:40,110 Maar je gaat te hebben om die wijzigingen zelf. 900 00:39:40,110 --> 00:39:41,200 Je moet consequent zijn. 901 00:39:41,200 --> 00:39:42,450 [Onverstaanbaar] 902 00:39:47,200 --> 00:39:48,960 DAVID J. MALAN: Een bepaalde volgorde zoals hier? 903 00:39:48,960 --> 00:39:52,660 Als dit int een ander nummer? 904 00:39:52,660 --> 00:39:52,940 Ja. 905 00:39:52,940 --> 00:39:56,430 Dus volgorde van belang wanneer u aanroepen van de functie. 906 00:39:56,430 --> 00:40:00,350 Dus als ik riepen Toename hier met iets komma iets, 907 00:40:00,350 --> 00:40:01,400 er is een directe mapping. 908 00:40:01,400 --> 00:40:04,490 De eerste variabele, wat het ook heet, is gemaakt van een kopie van de eerste 909 00:40:04,490 --> 00:40:05,480 argument hier. 910 00:40:05,480 --> 00:40:07,280 Sorry, mag dit niet als een haakje. 911 00:40:07,280 --> 00:40:09,300 Het tweede argument een lijn staat met de tweede. 912 00:40:09,300 --> 00:40:11,220 >> Dus orde, ja, zaken. 913 00:40:11,220 --> 00:40:11,490 Oke. 914 00:40:11,490 --> 00:40:13,360 Sorry dat ik nam een ​​lange weg om er te komen. 915 00:40:13,360 --> 00:40:14,610 Andere vragen? 916 00:40:16,460 --> 00:40:16,850 Oke. 917 00:40:16,850 --> 00:40:20,300 Dus laten we kijken of we niet een beeld schetsen van wat er werkelijk gaande is 918 00:40:20,300 --> 00:40:22,160 hier onder de kap, om zo te zeggen. 919 00:40:22,160 --> 00:40:26,310 Dus dit is een rechthoek die geheugen van uw computer zouden kunnen betekenen. 920 00:40:26,310 --> 00:40:31,240 Dus zelfs als je geen idee hebt hoe het geheugen werkt of hoe RAM werkt, in ieder geval 921 00:40:31,240 --> 00:40:33,590 ervan uit dat je trossen van het deze dagen hebben. 922 00:40:33,590 --> 00:40:34,740 Je hebt megabytes van. 923 00:40:34,740 --> 00:40:35,760 Je hebt gigabytes aan het. 924 00:40:35,760 --> 00:40:40,690 En we weten van week nul, dat een byte is precies wat? 925 00:40:40,690 --> 00:40:41,280 8 bits. 926 00:40:41,280 --> 00:40:42,730 Juist, dus 8 nullen en enen. 927 00:40:42,730 --> 00:40:46,300 Dus als uw computer is voorzien van een gig RAM, twee optredens van RAM deze dagen, heb je een 928 00:40:46,300 --> 00:40:54,450 miljard of 2 miljard bytes van het geheugen, of ongeveer 8 miljard of 16 miljard 929 00:40:54,450 --> 00:40:56,560 bits, binnenkant van uw computer. 930 00:40:56,560 --> 00:40:59,710 Nu in tegenstelling tot de kleine Woolly Willy voorbeeld, het is niet magnetische deeltjes 931 00:40:59,710 --> 00:41:00,560 typisch meer. 932 00:41:00,560 --> 00:41:04,470 In toenemende mate, in laptops in ieder geval, het is solid state drives, SSD's, die 933 00:41:04,470 --> 00:41:05,560 net hebben geen bewegende delen. 934 00:41:05,560 --> 00:41:06,710 Het is allemaal elektronisch. 935 00:41:06,710 --> 00:41:08,070 Het is gebaseerd alle elektriciteit. 936 00:41:08,070 --> 00:41:12,360 Dus hoewel denken, van deze rechthoek als slechts die de een of twee 937 00:41:12,360 --> 00:41:13,930 gigabyte geheugen die je hebt. 938 00:41:13,930 --> 00:41:15,500 >> Dus het is een stuk van het geheugen. 939 00:41:15,500 --> 00:41:20,460 Nu is de wereld van de informatica heeft een soort van afgescheiden stukken 940 00:41:20,460 --> 00:41:22,570 geheugen om verschillende dingen te doen. 941 00:41:22,570 --> 00:41:25,930 Dus bijvoorbeeld, als dit je computer RAM-geheugen - zoals voorgesteld door de 942 00:41:25,930 --> 00:41:30,400 rechthoek er - blijkt dat volgens afspraak aan de bovenkant van uw RAM-geheugen, zodat 943 00:41:30,400 --> 00:41:33,170 spreken, is over het algemeen wat heet een tekstsegment. 944 00:41:33,170 --> 00:41:35,910 Dat zijn de nullen en enen die u hebt gecompileerd. 945 00:41:35,910 --> 00:41:39,040 Dus toen hebben we gekeken onder de kap naar wat a.out is, worden alle 946 00:41:39,040 --> 00:41:40,360 de nullen en enen - 947 00:41:40,360 --> 00:41:44,000 wanneer u een programma uitvoert, worden die nullen en enen geladen vanaf de vaste 948 00:41:44,000 --> 00:41:46,290 drive in iets genaamd RAM-geheugen. 949 00:41:46,290 --> 00:41:48,950 En in het RAM, ze zetten aan de top. 950 00:41:48,950 --> 00:41:50,330 Nu ondertussen, heb je andere dingen. 951 00:41:50,330 --> 00:41:53,060 Geïnitialiseerde data, niet-geïnitialiseerde data. 952 00:41:53,060 --> 00:41:56,440 Deze twee zwaden van het geheugen verwijzen naar globale variabelen, die 953 00:41:56,440 --> 00:41:57,530 u niet vaak gebruikt. 954 00:41:57,530 --> 00:42:00,630 Maar soms als je dat doet, belanden ze daar ook. 955 00:42:00,630 --> 00:42:01,620 Dan is er nog een aantal andere dingen. 956 00:42:01,620 --> 00:42:04,130 Omgevingsvariabelen, die we niet veel tijd besteden aan. 957 00:42:04,130 --> 00:42:06,120 Maar dan twee belangrijke dingen die terug zullen komen in deze 958 00:42:06,120 --> 00:42:08,130 semester, stack en heap. 959 00:42:08,130 --> 00:42:12,280 >> Dus het grootste deel van het geheugen van uw computer is gereserveerd bij het uitvoeren van een programma voor 960 00:42:12,280 --> 00:42:14,880 iets genaamd de stapel en iets genaamd de heap. 961 00:42:14,880 --> 00:42:16,940 En we gaan niet om te praten over de hoop van vandaag, maar we zullen 962 00:42:16,940 --> 00:42:18,180 praten over de stapel. 963 00:42:18,180 --> 00:42:22,910 En de stapel is bedoeld om roepen de visuele van, zoals de eetzaal 964 00:42:22,910 --> 00:42:26,120 maaltijdplateaus in Mather House, of waar u zich ook bevindt, waar de 965 00:42:26,120 --> 00:42:27,810 eetzaal personeel schoon te maken elke dag. 966 00:42:27,810 --> 00:42:30,180 Ze stapelen ze van de vloer naar boven. 967 00:42:30,180 --> 00:42:33,800 En evenzo in het geheugen, is er dit idee om iets op een 968 00:42:33,800 --> 00:42:36,740 stapelen, om iets op een stapel, om iets op een stapel. 969 00:42:36,740 --> 00:42:38,000 En wat bedoelen we hiermee? 970 00:42:38,000 --> 00:42:41,430 Nou, laten we inzoomen op alleen de onderste helft van deze foto, van uw computer 971 00:42:41,430 --> 00:42:43,990 RAM, de volgende voorstellen. 972 00:42:43,990 --> 00:42:48,300 Het blijkt dat wanneer je een programma zoals a.out uitvoeren of hallo, wat dan ook 973 00:42:48,300 --> 00:42:49,920 het programma is dat je hebt geschreven, 974 00:42:49,920 --> 00:42:53,030 weer, zijn die nullen en enen geladen van uw harde schijf - en dat is 975 00:42:53,030 --> 00:42:56,190 langdurige opslag, blijft daar ook als je de stekker eruit trekt - 976 00:42:56,190 --> 00:42:57,220 geladen in het RAM. 977 00:42:57,220 --> 00:42:59,020 RAM-geheugen is sneller dan harde schijven. 978 00:42:59,020 --> 00:43:00,700 Het is kleiner dan harde schijven. 979 00:43:00,700 --> 00:43:03,490 Maar het is waar programma's leven, terwijl je draait ze. 980 00:43:03,490 --> 00:43:06,380 >> Dus u dubbelklikt op een programma op een Mac of een PC - het is geladen vanaf 981 00:43:06,380 --> 00:43:07,750 harde schijf in het RAM. 982 00:43:07,750 --> 00:43:11,760 Zodra het is geladen in het RAM, de nullen en enen gaan op de manier waarop top, de 983 00:43:11,760 --> 00:43:13,130 zogenaamde tekstsegment. 984 00:43:13,130 --> 00:43:17,040 Maar zodra je het programma daadwerkelijk begint te lopen, de belangrijkste 985 00:43:17,040 --> 00:43:18,140 functie wordt aangeroepen. 986 00:43:18,140 --> 00:43:21,070 En de belangrijkste, zoals we hebben gezien, heeft vaak lokale variabelen. 987 00:43:21,070 --> 00:43:24,560 En het heeft ints en strijkers en tekens en dergelijke. 988 00:43:24,560 --> 00:43:28,300 Dus als je het programma dat je hebt geschreven of het programma dat u 989 00:43:28,300 --> 00:43:33,680 dubbel geklikt gebruikte een aantal variabelen in de belangrijkste, belanden ze in de 990 00:43:33,680 --> 00:43:37,020 onderkant van je stack van het geheugen, om zo te zeggen. 991 00:43:37,020 --> 00:43:39,160 Nu meer concreet, dat wil wat eigenlijk? 992 00:43:39,160 --> 00:43:44,080 Dit betekent gewoon dat als we zouden gaan om de dingen te tellen - 993 00:43:44,080 --> 00:43:49,380 als we gingen het nummer van de bytes RAM in uw computer, merken dat 994 00:43:49,380 --> 00:43:51,650 dit zou byte nummer nul. 995 00:43:51,650 --> 00:43:56,130 Dit kan byte nummer een, twee, drie, vier, vijf, zes, allemaal 996 00:43:56,130 --> 00:43:57,290 de weg omhoog te willen - 997 00:43:57,290 --> 00:44:01,520 2 miljard helemaal tot daar aan de top te zijn. 998 00:44:01,520 --> 00:44:05,960 Met andere woorden, als het over RAM of geheugen in termen van bytes, het 999 00:44:05,960 --> 00:44:09,680 betekent gewoon dat iemand heeft besloten wat voor elk van nummeren 1000 00:44:09,680 --> 00:44:11,110 die delen van het geheugen. 1001 00:44:11,110 --> 00:44:16,950 >> Dus als u 32-bits voor een int nodig hebt, of je moet 8 bits voor een char, waar 1002 00:44:16,950 --> 00:44:18,320 ze belanden in het geheugen? 1003 00:44:18,320 --> 00:44:20,650 Nou conceptueel, maar ze belanden op de bodem van deze 1004 00:44:20,650 --> 00:44:21,780 ding genaamd de stapel. 1005 00:44:21,780 --> 00:44:25,670 Maar wat is interessant nu is wanneer de belangrijkste noemt een functie. 1006 00:44:25,670 --> 00:44:28,830 Stel dat een functie genaamd foo, gewoon een willekeurige naam. 1007 00:44:28,830 --> 00:44:32,480 Wat er gebeurt is belangrijkste is onderaan de stapel geheugen. 1008 00:44:32,480 --> 00:44:35,630 Foo nu wordt gelegd op de top van de belangrijkste in het geheugen. 1009 00:44:35,630 --> 00:44:40,020 Dus elke lokale variabelen die foo heeft uiteindelijk soort van conceptueel boven 1010 00:44:40,020 --> 00:44:40,770 die in de belangrijkste. 1011 00:44:40,770 --> 00:44:46,920 Als foo roept een andere functie genaamd bar, die variabelen hier terecht. 1012 00:44:46,920 --> 00:44:49,790 Als bar noemt iets anders, hier, hier, hier. 1013 00:44:49,790 --> 00:44:53,900 Dus wat interessant is aan het uitvoeren van een programma is dat als je functies aan te roepen, 1014 00:44:53,900 --> 00:44:57,720 en als die functies aan te roepen functies, en als die functies aan te roepen functies, 1015 00:44:57,720 --> 00:45:00,980 bouw je deze stapel van functies in het geheugen. 1016 00:45:00,980 --> 00:45:06,740 En slechts een keer per functie terugkeert begin je krijgt dat het geheugen terug. 1017 00:45:06,740 --> 00:45:11,190 Dus een van de makkelijkste manieren om opraken van geheugen in een computer programma is om 1018 00:45:11,190 --> 00:45:14,170 schrijf functies die nooit meer terug. 1019 00:45:14,170 --> 00:45:16,650 >> Dus bijvoorbeeld, laten we zo veel aan te tonen met een 1020 00:45:16,650 --> 00:45:18,460 opzettelijk buggy programma. 1021 00:45:18,460 --> 00:45:24,690 Laat me ga je gang en doen # include , int main (void). 1022 00:45:24,690 --> 00:45:31,270 En ik ga doen, terwijl (2> 1), die waarschijnlijk nooit 1023 00:45:31,270 --> 00:45:33,370 veranderen op ons. 1024 00:45:33,370 --> 00:45:37,720 En laat me nu ga je gang en doe printf. 1025 00:45:37,720 --> 00:45:39,950 Eigenlijk, dat gaat minder visueel interessant. 1026 00:45:39,950 --> 00:45:40,460 Laten we dit doen. 1027 00:45:40,460 --> 00:45:44,840 Voor int (i = 0; i> 0). 1028 00:45:44,840 --> 00:45:49,740 Laten we deze fout, i + +. 1029 00:45:49,740 --> 00:45:51,150 En laten we niet printf hier. 1030 00:45:51,150 --> 00:45:52,550 Laten we doen wat ik predikte. 1031 00:45:52,550 --> 00:45:54,090 Laten we hier een methode. 1032 00:45:54,090 --> 00:46:00,860 Void koor, en we zullen int i zeggen. 1033 00:46:00,860 --> 00:46:02,295 En dan ga ik naar printf zeggen, - 1034 00:46:04,871 --> 00:46:06,790 oh, laten we dit meer interessant. 1035 00:46:06,790 --> 00:46:08,350 Laten we eigenlijk niets afgedrukt. 1036 00:46:08,350 --> 00:46:10,530 Laten we dit doen. 1037 00:46:10,530 --> 00:46:11,780 Chorus (i). 1038 00:46:16,630 --> 00:46:17,000 >> Oke. 1039 00:46:17,000 --> 00:46:20,040 Dus dit is buggy want waarom? 1040 00:46:20,040 --> 00:46:22,850 Ik verzin dit niet als ik ga, omdat het programma niet echt iets 1041 00:46:22,850 --> 00:46:23,420 van belang. 1042 00:46:23,420 --> 00:46:24,670 Maar dat is niet het doel. 1043 00:46:24,670 --> 00:46:30,440 Het doel is het schrijven van een programma met als belangrijkste functie doet wat, blijkbaar? 1044 00:46:30,440 --> 00:46:31,370 Bel zelf. 1045 00:46:31,370 --> 00:46:32,600 En eigenlijk hebben we niet nodig hebben de lus. 1046 00:46:32,600 --> 00:46:36,070 Laten we zelfs vereenvoudigen dit gewoon om niet uit het oog echt de verliezen 1047 00:46:36,070 --> 00:46:37,310 fundamentele fout. 1048 00:46:37,310 --> 00:46:39,200 Belangrijkste oproepen koor een aantal koor zingen. 1049 00:46:39,200 --> 00:46:41,760 Toen deed ik iets stoms, en ik had refrein oproep refrein, omdat ik veronderstelde 1050 00:46:41,760 --> 00:46:43,550 iemand anders zou misschien te voeren. 1051 00:46:43,550 --> 00:46:45,960 En nu dit is niet van plan om nog samen te stellen. 1052 00:46:45,960 --> 00:46:48,340 Ik moet wat doen? 1053 00:46:48,340 --> 00:46:49,700 Ik moet het prototype, herinneren. 1054 00:46:49,700 --> 00:46:55,520 Dus ik moet hier zijn de lege chorus (int i);. 1055 00:46:55,520 --> 00:46:57,470 >> Dus nu, als ik hier beneden - 1056 00:46:57,470 --> 00:46:59,030 eigenlijk, laten we gebruik maken van de groter venster. 1057 00:46:59,030 --> 00:47:01,670 Laten we verder gaan en maken refrein. 1058 00:47:01,670 --> 00:47:06,000 Laten we verder gaan en maken refrein. 1059 00:47:06,000 --> 00:47:08,302 Gebruik van niet-geïdentificeerde leider i. 1060 00:47:08,302 --> 00:47:09,860 Oh, dat was stom. 1061 00:47:09,860 --> 00:47:11,020 We hebben geen behoefte het argument. 1062 00:47:11,020 --> 00:47:13,680 Laten we dit doen. 1063 00:47:13,680 --> 00:47:14,550 Wou dat we hadden op deze manier begonnen. 1064 00:47:14,550 --> 00:47:16,160 Het zou veel gemakkelijker programma te schrijven. 1065 00:47:16,160 --> 00:47:20,100 Dus. 1066 00:47:20,100 --> 00:47:23,870 Laten we nu over te gaan naar mijn terminal venster, re-run Clang. 1067 00:47:23,870 --> 00:47:26,900 En daar gaan we. 1068 00:47:26,900 --> 00:47:28,020 Dat was echt snel. 1069 00:47:28,020 --> 00:47:30,690 Wat er feitelijk gebeurde, hoewel? 1070 00:47:30,690 --> 00:47:33,430 Nou, nu zal ik de print regel toe te voegen, zodat we kunnen zien. 1071 00:47:33,430 --> 00:47:41,330 Dus laat ik zeggen printf, laten we zeggen, ik ben hier. 1072 00:47:41,330 --> 00:47:43,470 Oke, geen variabelen, we laten het zo. 1073 00:47:43,470 --> 00:47:44,860 Laat me opnieuw uit te voeren maken. 1074 00:47:44,860 --> 00:47:47,940 Laat me re-run koor. 1075 00:47:47,940 --> 00:47:51,235 En kom op. 1076 00:47:53,880 --> 00:47:55,130 Ga door. 1077 00:47:57,630 --> 00:47:59,750 Even terzijde, heeft waarom het niet neergestort nog? 1078 00:47:59,750 --> 00:48:02,050 De segmentatie fout gebeurd super snel voor. 1079 00:48:02,050 --> 00:48:04,250 [Onverstaanbaar] 1080 00:48:04,250 --> 00:48:04,830 DAVID J. MALAN: Precies. 1081 00:48:04,830 --> 00:48:06,350 Dus het kost tijd om af te drukken. 1082 00:48:06,350 --> 00:48:08,370 Het duurt slechts meer werk van de kant van de computer. 1083 00:48:08,370 --> 00:48:09,550 En daar is het. 1084 00:48:09,550 --> 00:48:10,620 Segmentation fault. 1085 00:48:10,620 --> 00:48:12,140 >> Dus zien hoe snel programma's te draaien. 1086 00:48:12,140 --> 00:48:14,110 Als u niet aan het afdrukken iets, super snel. 1087 00:48:14,110 --> 00:48:18,100 Maar we hebben nog steeds deze segmentation fault omdat wat er gebeurde? 1088 00:48:18,100 --> 00:48:21,310 Nou, als je na te denken over hoe uw computer het geheugen is aangelegd, is dit 1089 00:48:21,310 --> 00:48:22,890 gebeurt te zijn de belangrijkste. 1090 00:48:22,890 --> 00:48:23,800 Maar hier - 1091 00:48:23,800 --> 00:48:28,670 laten we gewoon noemen dit koor, en laten we noemen dit koor. 1092 00:48:28,670 --> 00:48:33,420 En als ik nu doe mijn esthetiek recht, wordt deze net gaan refrein zeggen, 1093 00:48:33,420 --> 00:48:38,060 chorus, chorus, chorus, chorus, chorus, chorus, tot vervelens toe. 1094 00:48:38,060 --> 00:48:39,920 En uiteindelijk, wat is er gebeurt? 1095 00:48:39,920 --> 00:48:46,690 Als het grote geheel letterlijk is dit, wat gebeurt er gewoon conceptueel? 1096 00:48:46,690 --> 00:48:48,320 De stapel overschrijdingen van de heap. 1097 00:48:48,320 --> 00:48:52,400 Of erger nog, je gewoon overspoeld alles, met inbegrip van de tekst segment, dat 1098 00:48:52,400 --> 00:48:54,530 de nullen en enen dat uw programma vertegenwoordigen. 1099 00:48:54,530 --> 00:48:56,690 Kortom, dit is gewoon super, super slecht. 1100 00:48:56,690 --> 00:48:56,860 Juist? 1101 00:48:56,860 --> 00:48:58,620 Uw programma is onbeheersbaar. 1102 00:48:58,620 --> 00:49:02,840 Je gebruikt veel meer geheugen dan je allemaal bedoeld als gevolg van een domme 1103 00:49:02,840 --> 00:49:03,920 fout in dit geval. 1104 00:49:03,920 --> 00:49:08,160 Of in dit geval een zeer bewust gedaan functie die zichzelf. 1105 00:49:08,160 --> 00:49:09,210 Nu is dit niet allemaal slecht. 1106 00:49:09,210 --> 00:49:12,540 Functies die zichzelf heeft eigenlijk veel macht 1107 00:49:12,540 --> 00:49:13,700 bij het gebruik van het goed. 1108 00:49:13,700 --> 00:49:15,650 Ik heb niet gebruikt het goed hier. 1109 00:49:15,650 --> 00:49:16,940 >> Dus dit is niet allemaal slecht. 1110 00:49:16,940 --> 00:49:20,620 Maar het feit dat ik eigenlijk nooit stoppen met bellen me is een fundamenteel 1111 00:49:20,620 --> 00:49:23,050 zwakte hier van dit programma. 1112 00:49:23,050 --> 00:49:25,090 Dus waar gaan we heen met dit alles? 1113 00:49:25,090 --> 00:49:26,230 Nou, wat er echt gebeurt? 1114 00:49:26,230 --> 00:49:30,010 Toen ik de stap functie aan te roepen, zoals we aan het doen waren in die voorbeelden, 1115 00:49:30,010 --> 00:49:33,290 Ik heb een waarde als 1 die ik pas binnen 1116 00:49:33,290 --> 00:49:35,820 Ik passeer in een kopie van de nummer een. 1117 00:49:35,820 --> 00:49:37,080 Dus gebeurt het volgende. 1118 00:49:37,080 --> 00:49:40,390 Dus laten we gaan in de increment voorbeeld. 1119 00:49:40,390 --> 00:49:44,230 En deze man rechts over hier. 1120 00:49:44,230 --> 00:49:46,800 Dus hier is wat er daadwerkelijk gebeurt. 1121 00:49:46,800 --> 00:49:50,770 Toen ik belde increment, en ik pas in x, picturaal wat is 1122 00:49:50,770 --> 00:49:53,660 hier aan de hand is dit - 1123 00:49:53,660 --> 00:50:00,240 als ik de waarde van 1 hier opgeslagen, en ik daadwerkelijk op te roepen increment, dat 1124 00:50:00,240 --> 00:50:02,680 heet nu refrein - 1125 00:50:02,680 --> 00:50:04,010 ja, dat is het gooien van me af hier. 1126 00:50:04,010 --> 00:50:06,750 Dus laten we noemen dit increment. 1127 00:50:06,750 --> 00:50:09,420 En we weten niet wat deze volgende functie gaat worden. 1128 00:50:09,420 --> 00:50:14,270 Dus wat er eigenlijk gebeurt, is hier ergens in de belangrijkste, ik heb een brok van 1129 00:50:14,270 --> 00:50:16,670 geheugen opslaan die het getal 1. 1130 00:50:16,670 --> 00:50:19,730 Toen ik increment bellen, ik gebruik een andere stuk van het geheugen, maar nu heb ik 1131 00:50:19,730 --> 00:50:20,840 de kopie van 1. 1132 00:50:20,840 --> 00:50:25,480 Toen ik verhoog deze waarde, wordt dit 2 - vreselijk geschreven op de 1133 00:50:25,480 --> 00:50:26,420 scherm hier. 1134 00:50:26,420 --> 00:50:30,550 Maar dan, wat gebeurt er zodra Toename rendement? 1135 00:50:30,550 --> 00:50:34,610 Dit geheugen gewoon wordt teruggegeven aan het besturingssysteem, wat betekent dat alle 1136 00:50:34,610 --> 00:50:37,470 je hebt gedaan is niets nuttigs. 1137 00:50:37,470 --> 00:50:43,460 Degene die oorspronkelijk was opgenomen in de belangrijkste is nog steeds daar feitelijk. 1138 00:50:43,460 --> 00:50:44,650 >> Waar gaan we heen? 1139 00:50:44,650 --> 00:50:49,400 Nou, het blijkt dat in het geheugen moet je dit terug om de sequentie van een back- 1140 00:50:49,400 --> 00:50:50,940 bytes die je kunt dingen zetten inch 1141 00:50:50,940 --> 00:50:53,760 En het blijkt dat we al iets dat inhoudt dat gezien 1142 00:50:53,760 --> 00:50:55,100 dingen rug aan rug aan rug aan rug. 1143 00:50:55,100 --> 00:51:00,170 Wat is een string, op basis van week een en nu week twee? 1144 00:51:00,170 --> 00:51:01,840 Dus het is gewoon een verzameling van tekens. 1145 00:51:01,840 --> 00:51:05,290 Zo blijkt, net zoals u kunt nummers zetten in het geheugen, net kunt u 1146 00:51:05,290 --> 00:51:06,900 zet tekens in het geheugen. 1147 00:51:06,900 --> 00:51:09,810 En als we eenmaal beginnen met het opzetten tekens in het geheugen rug aan rug heen en weer om 1148 00:51:09,810 --> 00:51:12,800 terug, het blijkt dat het gebruik van de eenvoudigste dingen zoals een for-lus of 1149 00:51:12,800 --> 00:51:14,510 een lus while, kunnen we herhalen - 1150 00:51:14,510 --> 00:51:17,130 van links naar rechts over de karakters in een string - 1151 00:51:17,130 --> 00:51:20,720 en beginnen masseren ze in verschillende karakters in totaal. 1152 00:51:20,720 --> 00:51:25,550 Een zou kunnen worden B. B zou kunnen worden C. Dus dat uiteindelijk, kunnen we een 1153 00:51:25,550 --> 00:51:28,830 Engels zin die daadwerkelijk zinvol is en converteren elk van deze 1154 00:51:28,830 --> 00:51:32,440 letters een voor een door een wandeling door het geheugen van onze computer links naar 1155 00:51:32,440 --> 00:51:34,300 recht om daadwerkelijk coderen. 1156 00:51:34,300 --> 00:51:36,590 >> Dus laten we hier nemen onze vijf minuten pauze, en als we terug komen, we zullen 1157 00:51:36,590 --> 00:51:39,060 begin dit proces van scrambling informatie. 1158 00:51:41,640 --> 00:51:43,180 >> Oke. 1159 00:51:43,180 --> 00:51:48,440 Dus voordat we duiken in een aantal crypto en deze dingen genoemd arrays, laat me 1160 00:51:48,440 --> 00:51:51,610 pauze voor eventuele vragen, omdat ik het gevoel dat ik echt een soort van verwarde enkele van 1161 00:51:51,610 --> 00:51:52,230 deze onderwerpen. 1162 00:51:52,230 --> 00:51:53,940 Dus laten we nu oplossen als we kunnen. 1163 00:51:53,940 --> 00:51:56,480 Dus we spraken over terugkeer waarden. 1164 00:51:56,480 --> 00:51:58,630 We spraken over argumenten. 1165 00:51:58,630 --> 00:52:02,330 En we spraken over dit idee, dat we terug komen in de komende weken 1166 00:52:02,330 --> 00:52:07,140 komen, van het bekijken van het geheugen als een hele hoop van deze gestapelde 1167 00:52:07,140 --> 00:52:08,540 trays, bij wijze van spreken. 1168 00:52:08,540 --> 00:52:13,460 Van beneden naar boven, zodat elke lade wordt op de stapel vertegenwoordigt 1169 00:52:13,460 --> 00:52:15,160 een functie die er op dit moment wordt genoemd. 1170 00:52:17,970 --> 00:52:20,300 Nog vragen? 1171 00:52:20,300 --> 00:52:22,890 Hoe zit - laat mij eens proberen een vraag te stellen. 1172 00:52:22,890 --> 00:52:25,520 Ik blijf bederven, maar nu is - you've allemaal gezien dat de jongen het gezicht. 1173 00:52:25,520 --> 00:52:27,020 Dus komen we terug naar dat. 1174 00:52:27,020 --> 00:52:29,700 >> Dus laat me een vraag stellen hier. 1175 00:52:29,700 --> 00:52:34,810 Laat ik dit terug te vereenvoudigen naar wat het was voor een aantal van onze eerdere Q & A. 1176 00:52:34,810 --> 00:52:41,730 En het feit dat increment open haakje heeft, int getal, gesloten 1177 00:52:41,730 --> 00:52:42,260 haakjes. 1178 00:52:42,260 --> 00:52:46,370 Wat betekent int number vertegenwoordigen? 1179 00:52:46,370 --> 00:52:47,250 [Onverstaanbaar] 1180 00:52:47,250 --> 00:52:47,870 DAVID J. MALAN: Een argument. 1181 00:52:47,870 --> 00:52:50,732 Oke, maar wat is een argument? 1182 00:52:50,732 --> 00:52:51,620 [Onverstaanbaar] 1183 00:52:51,620 --> 00:52:52,500 DAVID J. MALAN: Sorry, wat is dat? 1184 00:52:52,500 --> 00:52:53,150 SPEAKER 3: Iets wat je passeert inch 1185 00:52:53,150 --> 00:52:53,570 DAVID J. MALAN: Oke. 1186 00:52:53,570 --> 00:52:54,780 Dus iets dat je langs inch 1187 00:52:54,780 --> 00:52:56,560 En meer in het algemeen, het is gewoon de ingang. 1188 00:52:56,560 --> 00:52:59,860 Als je het schrijven van een functie en die functie het doel in het leven is om te doen 1189 00:52:59,860 --> 00:53:03,290 iets een beetje anders elke keer dat je het gebruikt, dan is de enige manier voor 1190 00:53:03,290 --> 00:53:07,710 dat om echt gebeuren lijkt te zijn om het te voorzien van input, zodat het 1191 00:53:07,710 --> 00:53:10,180 kan iets anders doen met die ingang per keer. 1192 00:53:10,180 --> 00:53:13,590 >> Dus je moet twee dingen te geven wanneer een functie wordt ingangen. 1193 00:53:13,590 --> 00:53:17,240 U moet de naam die u wilt geven aan die input, puur voor opgeven 1194 00:53:17,240 --> 00:53:20,790 uw eigen gemak, zodat u kunt verwijzen naar het in de functie die u 1195 00:53:20,790 --> 00:53:23,610 zelf schrijven, zoals ik deed hier in de lijn 32. 1196 00:53:23,610 --> 00:53:27,840 Maar je moet ook aan het type te specificeren omdat C is een programmeertaal 1197 00:53:27,840 --> 00:53:28,840 die net nodig 1198 00:53:28,840 --> 00:53:31,810 dat als je wilt een variabele, moet u de computer vertellen wat 1199 00:53:31,810 --> 00:53:32,790 gegevens typen is, 1200 00:53:32,790 --> 00:53:35,540 grotendeels zodat het weet hoeveel bits 1201 00:53:35,540 --> 00:53:37,230 wijzen voor die variabele. 1202 00:53:37,230 --> 00:53:38,600 Omdat het zou kunnen zijn zes - 1203 00:53:38,600 --> 00:53:39,990 Sorry, het zal niet zes. 1204 00:53:39,990 --> 00:53:41,050 Het kan 16. 1205 00:53:41,050 --> 00:53:41,630 Het kan 8. 1206 00:53:41,630 --> 00:53:44,410 Het kan 32 zelfs 64. 1207 00:53:44,410 --> 00:53:45,820 Maar de computer moet weten. 1208 00:53:45,820 --> 00:53:49,110 Nu int aan de linkerkant staat voor wat daarentegen? 1209 00:53:52,825 --> 00:53:53,780 [Onverstaanbaar] 1210 00:53:53,780 --> 00:53:54,570 DAVID J. MALAN: Wat is dat? 1211 00:53:54,570 --> 00:53:55,390 [Onverstaanbaar] 1212 00:53:55,390 --> 00:53:57,920 DAVID J. Malan: Het type van de functie en meer bepaald de 1213 00:53:57,920 --> 00:53:59,755 type van de output. 1214 00:53:59,755 --> 00:54:00,220 Juist. 1215 00:54:00,220 --> 00:54:04,220 Dus terwijl het ding tussen haakjes staat voor de ingang, indien van toepassing, de 1216 00:54:04,220 --> 00:54:06,640 ding aan de linkerkant geeft haar output. 1217 00:54:06,640 --> 00:54:10,560 En in dit geval, increment terug blijkbaar een int. 1218 00:54:10,560 --> 00:54:14,590 En dus int is de terugkeer van dit type functie. 1219 00:54:14,590 --> 00:54:16,090 >> Wat betekent het om terug te keren? 1220 00:54:16,090 --> 00:54:19,810 Letterlijk, gebruikt u het sleutelwoord return. 1221 00:54:19,810 --> 00:54:24,640 En dan, als wat je terug te keren naar de rechterkant van het zoekwoord is een 1222 00:54:24,640 --> 00:54:28,340 geheel getal, dan is dat inderdaad overeen met wat we hebben beloofd. 1223 00:54:28,340 --> 00:54:31,110 Je kon het niet zoiets als dit - 1224 00:54:31,110 --> 00:54:32,280 hello, world - 1225 00:54:32,280 --> 00:54:33,500 want dat is een string. 1226 00:54:33,500 --> 00:54:35,440 Uiteraard is het niet een geheel getal. 1227 00:54:35,440 --> 00:54:40,450 Dus in het kort, de last is echt op ons, de programmeur, om precies te zijn als 1228 00:54:40,450 --> 00:54:44,730 naar wat we terug en dan eigenlijk gaan over terug te zenden. 1229 00:54:44,730 --> 00:54:49,030 En dan te maken een beetje meer duidelijk dat de context - 1230 00:54:49,030 --> 00:54:50,080 daar is hij weer. 1231 00:54:50,080 --> 00:54:51,060 De context - 1232 00:54:51,060 --> 00:54:52,830 grote verrassing komen in slechts een moment. 1233 00:54:52,830 --> 00:54:57,720 De context hier is nu dat geheugen van uw computer is, nogmaals, een 1234 00:54:57,720 --> 00:54:59,070 gigabyte, twee gigabyte, wat dan ook. 1235 00:54:59,070 --> 00:54:59,630 Misschien is het meer. 1236 00:54:59,630 --> 00:55:00,540 Misschien is het minder. 1237 00:55:00,540 --> 00:55:03,750 Maar de computer ziet het als het hebben van verschillende secties. 1238 00:55:03,750 --> 00:55:04,860 Er gaat iets daar beneden. 1239 00:55:04,860 --> 00:55:06,020 Iets anders gaat daar. 1240 00:55:06,020 --> 00:55:07,540 Verschillende dingen gaat in het midden. 1241 00:55:07,540 --> 00:55:09,300 En vandaag, we beginnen te vertellen dit verhaal. 1242 00:55:09,300 --> 00:55:11,130 >> Maar we zullen terugkeren naar dit na verloop van tijd. 1243 00:55:11,130 --> 00:55:15,000 Voor nu, het enige stuk van het geheugen hebben we echt zorgen over is het tekstsegment 1244 00:55:15,000 --> 00:55:17,160 omdat alleen vertegenwoordigt de nullen en enen 1245 00:55:17,160 --> 00:55:18,460 dat Clang is uitgevoerd. 1246 00:55:18,460 --> 00:55:21,570 Dus als je een opdracht uitvoeren op het toetsenbord, zoals a.out, of dat u dubbel 1247 00:55:21,570 --> 00:55:25,350 Klik op een pictogram op Mac OS of Windows, is uw programma geladen vanaf de vaste 1248 00:55:25,350 --> 00:55:26,930 rijden in het RAM. 1249 00:55:26,930 --> 00:55:30,850 En het is plofte op de top van RAM-geheugen van uw computer, om zo te zeggen. 1250 00:55:30,850 --> 00:55:35,470 Nu ondertussen, als uw programma begint te lopen en de belangrijkste wordt aangeroepen in de 1251 00:55:35,470 --> 00:55:39,240 programma dat u heeft geschreven of het programma Microsoft of Apple schreef, een van haar 1252 00:55:39,240 --> 00:55:42,930 lokale variabelen uiteindelijk daar op de bodem van het geheugen van uw computer. 1253 00:55:42,930 --> 00:55:46,490 Maar als belangrijkste noemt een andere functie die zelf variabelen of 1254 00:55:46,490 --> 00:55:48,340 argumenten, ze uiteindelijk erboven. 1255 00:55:48,340 --> 00:55:50,670 En als die functie noemt iets, belanden ze erboven, 1256 00:55:50,670 --> 00:55:51,840 boven, boven. 1257 00:55:51,840 --> 00:55:56,100 En slechts eenmaal een functie wordt uitvoering heeft de stapel trays, zodat 1258 00:55:56,100 --> 00:55:58,320 te spreken, beginnen te krijgen lager en lager. 1259 00:55:58,320 --> 00:56:03,370 En dit is wat dan, in een notendop, legt uit waarom, wanneer u belt kubus - 1260 00:56:03,370 --> 00:56:04,660 of je belt increment - 1261 00:56:04,660 --> 00:56:06,490 je voorbij in een kopie van de waarde. 1262 00:56:06,490 --> 00:56:09,840 En wat dat betekent picturaal is dat je letterlijk je het schrijven van 1263 00:56:09,840 --> 00:56:14,540 nummer 1 in een ander deel van het geheugen, het veranderen dat 1 tot 2, bij 1264 00:56:14,540 --> 00:56:15,360 increment - 1265 00:56:15,360 --> 00:56:17,450 of een 8, bij cube - 1266 00:56:17,450 --> 00:56:21,450 en gooien dat het geheugen weg zodra de toename of de kubus 1267 00:56:21,450 --> 00:56:23,410 functie terugkeert. 1268 00:56:23,410 --> 00:56:24,267 >> Vraag. 1269 00:56:24,267 --> 00:56:25,517 [Onverstaanbaar] 1270 00:56:28,090 --> 00:56:29,970 DAVID J. MALAN: Waar - globale variabelen worden opgeslagen in wat 1271 00:56:29,970 --> 00:56:32,960 Momenteel genoemd geïnitialiseerd gegevens of gegevens geïnitialiseerd. 1272 00:56:32,960 --> 00:56:35,900 Het verschil is, als je een globale variabele, en u deze toewijzen 1273 00:56:35,900 --> 00:56:39,530 onmiddellijk een waarde met de gelijkteken, het eindigt aan de top daar. 1274 00:56:39,530 --> 00:56:43,390 En als je gewoon zeggen int x puntkomma zonder waarde, het eindigt een beetje 1275 00:56:43,390 --> 00:56:46,670 lager in het RAM gewoon volgens afspraak. 1276 00:56:46,670 --> 00:56:49,308 Andere vragen. 1277 00:56:49,308 --> 00:56:49,750 Oke. 1278 00:56:49,750 --> 00:56:53,040 >> Dus deze foto zal terugkomen als we meer krachtige met wat we kunnen doen 1279 00:56:53,040 --> 00:56:53,830 met de computer. 1280 00:56:53,830 --> 00:56:58,790 Maar voor nu, laten we eens een korte intro van cryptografie, een specifiek type 1281 00:56:58,790 --> 00:57:01,910 cryptografie die niet op te lossen alle problemen in de wereld, maar niet op te lossen 1282 00:57:01,910 --> 00:57:02,480 sommige. 1283 00:57:02,480 --> 00:57:06,090 In dit geval hier, we hebben iets dat we geheime sleutel cryptografie. 1284 00:57:06,090 --> 00:57:10,430 En geheime sleutel cryptografie, zoals de naam al doet vermoeden, ontleent zijn veiligheid 1285 00:57:10,430 --> 00:57:11,330 van een geheim. 1286 00:57:11,330 --> 00:57:14,720 Dus bijvoorbeeld, als je terug op de lagere school en je bent het passeren van een 1287 00:57:14,720 --> 00:57:18,040 little secret liefdesbrief aan de jongen of het meisje die u verpletteren aan - als u 1288 00:57:18,040 --> 00:57:20,820 wilde dat door het publiek, zou u waarschijnlijk niet schrijven 1289 00:57:20,820 --> 00:57:24,120 zodanige aantekening in het Engels of wat dan ook je moedertaal is, maar eerder, u 1290 00:57:24,120 --> 00:57:25,800 zou kunnen coderen. 1291 00:57:25,800 --> 00:57:27,820 Of je kan gewoon stuur ze een SMS-bericht van deze dagen. 1292 00:57:27,820 --> 00:57:30,310 Maar je zou eigenlijk gaan ze een briefje door het hele lokaal. 1293 00:57:30,310 --> 00:57:33,820 En op een veilige manier te doen, op zo'n manier dat je vrienden en de leraar 1294 00:57:33,820 --> 00:57:36,820 weet niet wat je aan het schrijven bent, kun je komen met een vrij eenvoudige 1295 00:57:36,820 --> 00:57:37,800 algoritme - 1296 00:57:37,800 --> 00:57:39,290 jonge hoewel je misschien wel - 1297 00:57:39,290 --> 00:57:40,780 om gewoon klauteren de woorden. 1298 00:57:40,780 --> 00:57:44,390 Dus in plaats van het schrijven van A, zou je B. schrijft in plaats van B, kunt u schrijven 1299 00:57:44,390 --> 00:57:46,670 C. In plaats van C, D kan schrijf, enzovoort. 1300 00:57:46,670 --> 00:57:50,020 Of je zou kunnen komen met een meer geavanceerde vertaling van brieven 1301 00:57:50,020 --> 00:57:51,300 verschillende letters. 1302 00:57:51,300 --> 00:57:55,440 Maar de vangst is de jongen of het meisje aan wie u wilt verzenden deze nota moet 1303 00:57:55,440 --> 00:57:56,850 iets weten. 1304 00:57:56,850 --> 00:57:59,620 Dat is wat, natuurlijk? 1305 00:57:59,620 --> 00:58:01,400 Zoals, wat uw geheim is. 1306 00:58:01,400 --> 00:58:04,620 Zoals, wat is dat mapping tussen As en Bs en Cs en Ds? 1307 00:58:04,620 --> 00:58:08,780 Is het gewoon het toevoegen van een, zo te zeggen, aan elk van de brieven om van 1308 00:58:08,780 --> 00:58:09,730 A naar B, B naar C? 1309 00:58:09,730 --> 00:58:11,350 Is het complexer dan dat? 1310 00:58:11,350 --> 00:58:16,450 Dus jij en je geliefde moet deze geheime informatie te hebben. 1311 00:58:16,450 --> 00:58:18,170 Maar er is een soort van een catch-22 hier. 1312 00:58:18,170 --> 00:58:20,760 Als dit de eerste keer dat je het verzenden van deze liefdesbrief door de 1313 00:58:20,760 --> 00:58:25,590 klasse, hoe die jongen of meisje gaat om te weten wat het geheim is zelfs? 1314 00:58:25,590 --> 00:58:28,450 Dus geheime sleutel crypto lost niet alle problemen in de wereld. 1315 00:58:28,450 --> 00:58:30,490 En er is eigenlijk een relatie die we terug komen in de richting van 1316 00:58:30,490 --> 00:58:31,370 semester einde. 1317 00:58:31,370 --> 00:58:35,970 >> Ook hebben niemand van ons waarschijnlijk ooit een verzonden - 1318 00:58:35,970 --> 00:58:39,453 evenzo, de meeste van ons niet weet iemand dat, werkt bijvoorbeeld op 1319 00:58:39,453 --> 00:58:40,300 Amazon.com. 1320 00:58:40,300 --> 00:58:43,130 En toch, hebben velen van ons waarschijnlijk gekocht spul bij Amazon.com. 1321 00:58:43,130 --> 00:58:45,670 En we hebben geleerd om aan te nemen dat deze e-commerce 1322 00:58:45,670 --> 00:58:47,060 transacties veilig zijn. 1323 00:58:47,060 --> 00:58:47,210 Juist? 1324 00:58:47,210 --> 00:58:49,310 De URL zegt waarschijnlijk https. 1325 00:58:49,310 --> 00:58:51,590 Er is misschien een domme kleine hangslotpictogram ergens. 1326 00:58:51,590 --> 00:58:54,680 Er is een soort van cryptografie beveiliging van uw creditcardgegevens 1327 00:58:54,680 --> 00:58:56,980 tussen u en Amazon.com. 1328 00:58:56,980 --> 00:59:00,410 En toch, als cryptografie gaat weten een geheim, en toch doe ik niet 1329 00:59:00,410 --> 00:59:03,330 Weet iemand bij Amazon, en ik heb zeker niet geregeld elke vorm van 1330 00:59:03,330 --> 00:59:07,350 geheim met iemand bij Amazon, hoe wordt mijn computer of mijn browser om dit te doen? 1331 00:59:07,350 --> 00:59:10,100 Nou, blijkt dat er andere vormen van cryptografie geheel dat op te lossen 1332 00:59:10,100 --> 00:59:10,740 dat probleem. 1333 00:59:10,740 --> 00:59:13,610 Maar voor vandaag, zullen we ons richten op de eenvoudige, waar u kunt regelen in 1334 00:59:13,610 --> 00:59:18,480 verder te gaan naar een geheime weet wel, zoals plus 1 of enkele mapping tussen As en B's. 1335 00:59:18,480 --> 00:59:20,710 >> En het proces van cryptografie gaat meestal deze. 1336 00:59:20,710 --> 00:59:23,550 Je hebt een aantal platte tekst, hier afgebeeld aan de linkerkant. 1337 00:59:23,550 --> 00:59:26,260 Je loopt het door een soort van algoritme of procedure 1338 00:59:26,260 --> 00:59:27,670 voor het versleutelen van het. 1339 00:59:27,670 --> 00:59:31,390 Misschien is dat gewoon A wordt B, B wordt C En dan eindig je met 1340 00:59:31,390 --> 00:59:32,260 versleutelen tekst. 1341 00:59:32,260 --> 00:59:36,450 Ondertussen, zodra je geliefde het geheim notitie ontvangt, hij of zij moet dan 1342 00:59:36,450 --> 00:59:39,950 decoderen door het algemeen een omkering in de algoritme om te krijgen 1343 00:59:39,950 --> 00:59:41,640 het steunen van de platte tekst. 1344 00:59:41,640 --> 00:59:43,860 Nu zijn er fysieke incarnaties van deze. 1345 00:59:43,860 --> 00:59:46,720 Zo, dit is een klein geheim decoder ring. 1346 00:59:46,720 --> 00:59:50,060 En dit is een ring in de zin dat er hier twee wijzerplaten. 1347 00:59:50,060 --> 00:59:53,630 Aan de buitenkant rand van dit ding, is er letters A tot en met Z, 1348 00:59:53,630 --> 00:59:55,110 hoewel ze in willekeurige volgorde. 1349 00:59:55,110 --> 00:59:58,410 En aan de binnenkant, is er eigenlijk een aantal nummers, zoals dat met deze 1350 00:59:58,410 --> 01:00:02,940 ring, kunt u soort draai de buitenkant, maar niet de binnenkant om line-up 1351 01:00:02,940 --> 01:00:04,110 nummers met letters. 1352 01:00:04,110 --> 01:00:08,290 En in de clip die u gaat zien - waarvan sommige je misschien hebt gezien 24/7 1353 01:00:08,290 --> 01:00:11,120 rond de kerstdagen van een film genaamd A Christmas Story. 1354 01:00:11,120 --> 01:00:16,050 U zult zien dat er weinig Ralphie was zo enthousiast om erachter te komen wat kleine wees 1355 01:00:16,050 --> 01:00:19,810 Geheime boodschap Annie's was om hem dat waren meegedeeld, denk ik, in de 1356 01:00:19,810 --> 01:00:22,810 vorm van numerieke berichten op een seriële box. 1357 01:00:22,810 --> 01:00:26,760 En je moest alle kleine kaarten die kwam ophopen 1358 01:00:26,760 --> 01:00:27,480 in de doos cornflakes. 1359 01:00:27,480 --> 01:00:28,320 Je moest ze mailen inch 1360 01:00:28,320 --> 01:00:31,060 Je moest terug de geheime decoder ring, zodat je eindelijk kunt achterhalen 1361 01:00:31,060 --> 01:00:34,190 wat de mapping is tussen letters en cijfers, 1362 01:00:34,190 --> 01:00:35,420 of letters en letters. 1363 01:00:35,420 --> 01:00:39,790 Dus ik geef je deze korte clip van A Christmas Story te PSET 2 motiveren en 1364 01:00:39,790 --> 01:00:42,340 onze discussie, in een ogenblik, van arrays. 1365 01:00:42,340 --> 01:00:43,773 Hier hebben we dus Ralphie. 1366 01:00:43,773 --> 01:00:44,126 >> [VIDEO AFSPELEN] 1367 01:00:44,126 --> 01:00:47,470 -Doen te weten aan alles en iedereen dat Ralph Parker wordt hierbij benoemd tot 1368 01:00:47,470 --> 01:00:50,690 lid van de Little Orphan Annie Secret Circle en heeft recht op alle 1369 01:00:50,690 --> 01:00:53,500 de eer en de voordelen die zich daaraan. 1370 01:00:53,500 --> 01:00:56,040 -Signed, Little Orphan Annie. 1371 01:00:56,040 --> 01:00:58,730 Medeondertekend, Pierre Andre! 1372 01:00:58,730 --> 01:01:00,150 In inkt! 1373 01:01:00,150 --> 01:01:02,910 Eer en voordelen, al op de leeftijd van negen. 1374 01:01:09,970 --> 01:01:10,730 Kom op, laten we aan de slag gaan. 1375 01:01:10,730 --> 01:01:15,000 Ik hoef niet al die jazz over smokkelaars en piraten. 1376 01:01:15,000 --> 01:01:17,624 Morgenavond-Luister naar de afsluitende avontuur van The Black 1377 01:01:17,624 --> 01:01:19,710 Pirate Ship. 1378 01:01:19,710 --> 01:01:23,380 Nu is het tijd voor geheime boodschap Annie's voor u leden 1379 01:01:23,380 --> 01:01:25,670 van de Secret Circle. 1380 01:01:25,670 --> 01:01:30,260 Vergeet niet, kinderen, kunnen alleen leden van Secret Circle Annie's decoderen 1381 01:01:30,260 --> 01:01:31,660 Geheime boodschap Annie's. 1382 01:01:31,660 --> 01:01:36,230 Vergeet niet, is Annie afhankelijk van je. 1383 01:01:36,230 --> 01:01:38,720 Stel uw pennen naar B2. 1384 01:01:38,720 --> 01:01:41,040 Hier is de boodschap. 1385 01:01:41,040 --> 01:01:42,470 12, 11 - 1386 01:01:42,470 --> 01:01:46,000 -Ik ben in mijn eerste geheime vergadering. 1387 01:01:46,000 --> 01:01:49,440 -14, 11, 18, 16 - 1388 01:01:49,440 --> 01:01:51,700 -Pierre was in grote stem vanavond. 1389 01:01:51,700 --> 01:01:54,890 Ik kon vertellen dat vanavond de boodschap was echt belangrijk. 1390 01:01:54,890 --> 01:01:56,750 -3, 25. 1391 01:01:56,750 --> 01:01:58,590 Dat is een boodschap van Annie zelf. 1392 01:01:58,590 --> 01:01:59,840 Vergeet niet, niet verder vertellen. 1393 01:02:04,570 --> 01:02:08,750 -90 Seconden later, ik ben in de enige kamer in het huis waar een jongen van negen 1394 01:02:08,750 --> 01:02:12,980 konden zitten in privacy en decoderen. 1395 01:02:12,980 --> 01:02:17,130 Aha, B. ging ik naar de volgende. 1396 01:02:17,130 --> 01:02:20,330 E. Het eerste woord is zijn. 1397 01:02:20,330 --> 01:02:22,670 S. Het werd gemakkelijker komen nu. 1398 01:02:22,670 --> 01:02:24,590 U. 1399 01:02:24,590 --> 01:02:26,510 -Oh, kom op, Ralphie. 1400 01:02:26,510 --> 01:02:28,430 Ik moet gaan. 1401 01:02:28,430 --> 01:02:30,350 -Ik moet recht naar beneden, ma. 1402 01:02:30,350 --> 01:02:33,720 -Gee whiz. 1403 01:02:33,720 --> 01:02:38,270 -T, O. Zorg ervoor dat u. 1404 01:02:38,270 --> 01:02:40,000 Zorg ervoor dat u wat? 1405 01:02:40,000 --> 01:02:42,105 Wat was Little Orphan Annie probeert te zeggen? 1406 01:02:42,105 --> 01:02:43,095 Zorg ervoor dat u wat? 1407 01:02:43,095 --> 01:02:43,590 -Ralphie! 1408 01:02:43,590 --> 01:02:44,580 Randy heeft om te gaan. 1409 01:02:44,580 --> 01:02:45,570 Wil je alsjeblieft naar buiten komen? 1410 01:02:45,570 --> 01:02:46,560 -Oke, ma. 1411 01:02:46,560 --> 01:02:48,540 Ik kom er zo aan. 1412 01:02:48,540 --> 01:02:50,580 -Ik werd steeds dichterbij nu. 1413 01:02:50,580 --> 01:02:52,550 De spanning was verschrikkelijk. 1414 01:02:52,550 --> 01:02:53,355 Wat was het? 1415 01:02:53,355 --> 01:02:56,315 Het lot van de planeet kan hangen in de balans. 1416 01:02:56,315 --> 01:02:56,790 -Ralphie! 1417 01:02:56,790 --> 01:02:59,165 Randy heeft om te gaan. 1418 01:02:59,165 --> 01:03:02,310 -Ik moet zo uit, voor luid schreeuwen. 1419 01:03:02,310 --> 01:03:04,000 -Goh, er bijna. 1420 01:03:04,000 --> 01:03:05,180 Mijn vingers vlogen. 1421 01:03:05,180 --> 01:03:07,150 Mijn geest was een stalen val. 1422 01:03:07,150 --> 01:03:08,790 Elke porie getrild. 1423 01:03:08,790 --> 01:03:10,040 Het was bijna duidelijk. 1424 01:03:10,040 --> 01:03:13,400 Ja, ja, ja, ja. 1425 01:03:13,400 --> 01:03:18,960 -Zorg ervoor dat u uw Ovaltine drinken. 1426 01:03:18,960 --> 01:03:20,210 Ovaltine? 1427 01:03:24,010 --> 01:03:25,260 Een crummy commercieel? 1428 01:03:28,200 --> 01:03:29,640 Zoon van een teef. 1429 01:03:29,640 --> 01:03:33,340 [END VIDEO AFSPELEN] 1430 01:03:33,340 --> 01:03:36,040 >> DAVID J. MALAN: Dus daar hebben we cryptografie. 1431 01:03:36,040 --> 01:03:39,670 Dus hoe in een computer kunnen we gaan over de uitvoering of 1432 01:03:39,670 --> 01:03:40,950 die dit soort dingen? 1433 01:03:40,950 --> 01:03:44,430 Nou, we moeten een manier van uitdrukken onszelf een beetje flexibeler dan 1434 01:03:44,430 --> 01:03:46,420 onze variabelen tot nu toe hebben toegestaan. 1435 01:03:46,420 --> 01:03:47,370 We hebben ints. 1436 01:03:47,370 --> 01:03:48,380 We hebben tekens. 1437 01:03:48,380 --> 01:03:50,790 We hebben praalwagens en tweepersoonskamers en een paar anderen. 1438 01:03:50,790 --> 01:03:55,050 Maar dat zijn individuele stukken van het geheugen die niet echt ons toelaten om 1439 01:03:55,050 --> 01:03:58,010 uitdrukken dingen zoals woorden en zinnen en zinnen. 1440 01:03:58,010 --> 01:04:00,200 Inderdaad, we hebben wel zulke dingen snaren. 1441 01:04:00,200 --> 01:04:03,650 Maar we beloofd dat dit echt is gewoon een vereenvoudiging van de CS50 1442 01:04:03,650 --> 01:04:07,020 bibliotheek die we van plan te schillen terug. 1443 01:04:07,020 --> 01:04:08,970 >> En dus laten we beginnen hier doen. 1444 01:04:08,970 --> 01:04:11,130 Laat me verder gaan en het openen van een bestand - 1445 01:04:11,130 --> 01:04:13,770 al deze bestanden zijn beschikbaar zoals gebruikelijk online - 1446 01:04:13,770 --> 01:04:19,120 riep array.c om een ​​probleem niets met strings op te lossen, maar dat zegt meer dan 1447 01:04:19,120 --> 01:04:23,040 foto hier hoe we zouden kunnen gebruiken zoiets als een array. 1448 01:04:23,040 --> 01:04:25,530 Een array is een data type. 1449 01:04:25,530 --> 01:04:31,320 Het is een type van de variabele, van soorten, die heeft meerdere kleinere soorten gegevens 1450 01:04:31,320 --> 01:04:34,150 binnenkant van het rug aan rug aan rug aan rug. 1451 01:04:34,150 --> 01:04:37,700 Dus bijvoorbeeld, als we willen een klein programma dat geeft je schrijf uw 1452 01:04:37,700 --> 01:04:42,110 quiz gemiddelde voor een cursus zoals 50 dat twee quizzen, je kon heel gemakkelijk 1453 01:04:42,110 --> 01:04:45,170 schrijf dit programma - gebaseerd, zelfs op een aantal van materiaal van vorige week - 1454 01:04:45,170 --> 01:04:47,770 met GetInt en een aantal variabelen. 1455 01:04:47,770 --> 01:04:51,920 Int quiz1, int quiz2, en het is vrij eenvoudig. 1456 01:04:51,920 --> 01:04:55,930 Het is misschien 10, 20 regels code, max, de implementatie van een programma dat de vraag 1457 01:04:55,930 --> 01:05:01,170 gebruiker voor twee quiz scores en vervolgens berekent de gemiddelde door ze toe te voegen 1458 01:05:01,170 --> 01:05:03,850 samen te delen door twee, en vervolgens afdrukken van de resultaten. 1459 01:05:03,850 --> 01:05:06,380 We kunnen waarschijnlijk wel dat mooie gemakkelijk nu na 1460 01:05:06,380 --> 01:05:07,510 een aantal minuten niet. 1461 01:05:07,510 --> 01:05:11,005 >> Maar het probleem is dat veronderstellen dat 50 had drie of vier quizzen. 1462 01:05:11,005 --> 01:05:13,510 Stel dat je wilde hetzelfde programma gebruiken voor een klasse die had 1463 01:05:13,510 --> 01:05:14,850 wekelijkse quizzen. 1464 01:05:14,850 --> 01:05:16,610 Denk na over een klasse die wekelijks heeft quizzen. 1465 01:05:16,610 --> 01:05:20,610 Als er, zoals 16 of zo weken in een semester, nu heb je 16 variabelen - 1466 01:05:20,610 --> 01:05:24,270 int quiz1, int quiz2, int quiz3, int quiz4. 1467 01:05:24,270 --> 01:05:27,560 Zodra u begint met het zien van deze redundantie, deze kopiëren en plakken 1468 01:05:27,560 --> 01:05:31,390 van de code moet beginnen om je wou dat er een betere manier. 1469 01:05:31,390 --> 01:05:33,930 En gelukkig, als gevolg van arrays, is er. 1470 01:05:33,930 --> 01:05:34,980 Dus laten we dit doen. 1471 01:05:34,980 --> 01:05:38,430 Ten eerste, laat me even een heel simpel ding dat we niet hebben tot nu toe gebruikt, 1472 01:05:38,430 --> 01:05:40,140 maar je zult af en toe ziet het in code. 1473 01:05:40,140 --> 01:05:42,360 Dit is wat algemeen een constante genoemd. 1474 01:05:42,360 --> 01:05:45,790 Dus het is een constante in de zin dat deze waarde nooit verandert. 1475 01:05:45,790 --> 01:05:49,210 De menselijke conventie bij het maken van een constante is het gebruik van alle kapitaal 1476 01:05:49,210 --> 01:05:51,940 brieven, gewoon zo dat het echt opvalt in uw code. 1477 01:05:51,940 --> 01:05:55,960 En de bijzonder sleutelwoord dat u gebruikt in C # te definiëren. 1478 01:05:55,960 --> 01:06:00,250 Dus als je zegt # en definiëren, een spatie, dan het woord dat u wilt gebruiken voor 1479 01:06:00,250 --> 01:06:03,260 de constante naam en de waarde van de constante. 1480 01:06:03,260 --> 01:06:06,180 Dus verklaring, deze is anders dan het toewijzen van iets aan een variabele. 1481 01:06:06,180 --> 01:06:07,020 Er is geen gelijk-teken. 1482 01:06:07,020 --> 01:06:08,240 Er is geen puntkomma. 1483 01:06:08,240 --> 01:06:11,410 Dit is wat algemeen bekend als een preprocessor richtlijn, maar meer op 1484 01:06:11,410 --> 01:06:12,210 dat een andere keer. 1485 01:06:12,210 --> 01:06:18,540 >> Voor nu, dit zorgt voor een heet onveranderlijke waarde QUIZZEN waarvan de feitelijke 1486 01:06:18,540 --> 01:06:19,940 numerieke waarde is 2. 1487 01:06:19,940 --> 01:06:24,020 Dus overal zie je quizzen, Quizzes, quizzes gedurende dit bestand, dat is 1488 01:06:24,020 --> 01:06:25,410 slechts het cijfer 2. 1489 01:06:25,410 --> 01:06:28,100 Nu, als ik kijk naar de belangrijkste nu, laten we eens kijken hoe dit werkt. 1490 01:06:28,100 --> 01:06:29,500 Op het eerste, het ziet er een beetje cryptisch. 1491 01:06:29,500 --> 01:06:31,340 Maar het is allemaal spullen van week een. 1492 01:06:31,340 --> 01:06:32,710 Vraag de gebruiker voor de rangen. 1493 01:06:32,710 --> 01:06:33,630 Hoe gaan we dit doen? 1494 01:06:33,630 --> 01:06:35,470 Nou, in de lijn 22 - 1495 01:06:35,470 --> 01:06:37,210 dit is echt de sappige deel - 1496 01:06:37,210 --> 01:06:40,960 Ik verklaar een vlotter, maar niet zomaar een vlotter. 1497 01:06:40,960 --> 01:06:44,620 Ik verklaar, in plaats van, een array van floating point waarden. 1498 01:06:44,620 --> 01:06:49,100 Die variabele zal worden genoemd kwaliteiten zoals hier gesuggereerd. 1499 01:06:49,100 --> 01:06:53,080 Maar het enige stuk van de nieuwe syntaxis dan zijn deze vierkante haakjes, het feit 1500 01:06:53,080 --> 01:06:59,350 dat ik heb gezegd vlotter rangen en open beugel en dan een nummer. 1501 01:06:59,350 --> 01:07:02,460 Let op, als dit een constante, dit is net als wij deden dit. 1502 01:07:02,460 --> 01:07:06,890 Dit betekent hey computer, geef me twee drijvers, en collectief laten we 1503 01:07:06,890 --> 01:07:08,220 ze cijfers. 1504 01:07:08,220 --> 01:07:11,920 Dit in tegenstelling tot een veel moeizaam proces als dit. 1505 01:07:11,920 --> 01:07:15,850 Float Voorraad1, zweven Grade2, enzovoort. 1506 01:07:15,850 --> 01:07:20,010 Dus een reeks stelt ons in staat de uitvoering van deze idee, maar veel minder slordig, in 1507 01:07:20,010 --> 01:07:24,630 zodanig dat we een regel code schrijven in plaats van bijvoorbeeld 16 voor een 16 1508 01:07:24,630 --> 01:07:25,740 week semester. 1509 01:07:25,740 --> 01:07:29,950 Dus ik wilde niet hard-code 2, want als je van deze nu 1510 01:07:29,950 --> 01:07:34,160 logisch - stel volgend jaar CS50 veranderingen tot 3 quizzen plaats. 1511 01:07:34,160 --> 01:07:35,510 En ik had de nummer 2 hier. 1512 01:07:35,510 --> 01:07:36,600 Ik had de nummer 2 hier. 1513 01:07:36,600 --> 01:07:37,580 Ik had de nummer 2 hier. 1514 01:07:37,580 --> 01:07:38,560 Ik had de nummer 2 hier. 1515 01:07:38,560 --> 01:07:43,180 Het wordt heel vervelend en heel gemakkelijk om het te verknallen en per ongeluk wijzigen 1516 01:07:43,180 --> 01:07:47,690 een waarde 3 en missen een andere waarde van 2. 1517 01:07:47,690 --> 01:07:52,460 Dus ik ga in plaats daarvan abstracte dit weg en het gebruik van deze constante dat, zoals de 1518 01:07:52,460 --> 01:07:54,120 naam al doet vermoeden, verandert nooit. 1519 01:07:54,120 --> 01:07:57,710 En nu, het maakt niet uit of we verschillende quizzen hebben dit jaar of volgende, ik 1520 01:07:57,710 --> 01:08:01,210 gewoon om het te veranderen in een plaats, hier boven. 1521 01:08:01,210 --> 01:08:02,720 >> Dus dat is alles constant is. 1522 01:08:02,720 --> 01:08:08,680 Ondertussen de nieuwe conceptuele is dat een array. 1523 01:08:08,680 --> 01:08:14,660 Dus de vierkante haken geef mij dit veel praalwagens en laat me collectief 1524 01:08:14,660 --> 01:08:16,630 Hier noemen ze rangen. 1525 01:08:16,630 --> 01:08:17,990 Dus nu laten we eens kijken wat ik ga doen. 1526 01:08:17,990 --> 01:08:20,359 Hier in leiding 24 is het begin van een lus. 1527 01:08:20,359 --> 01:08:22,260 Dit is echt niks speciaals. 1528 01:08:22,260 --> 01:08:25,060 Het is alleen met behulp van quizzen in plaats van een hard-gecodeerde nummer. 1529 01:08:25,060 --> 01:08:27,790 Maar er is niets intellectueel anders er van vorige week. 1530 01:08:27,790 --> 01:08:29,040 Dit is gewoon printf. 1531 01:08:29,040 --> 01:08:35,490 Dus printf ("quiz number% d van% d"), omdat ik wil gewoon uitprinten me quiz geven 1532 01:08:35,490 --> 01:08:38,050 nummer een van de twee en dan twee van twee. 1533 01:08:38,050 --> 01:08:39,850 Dus dit is puur een esthetische ding. 1534 01:08:39,850 --> 01:08:42,500 Maar het interessante deel is nu in lijn 27. 1535 01:08:42,500 --> 01:08:48,310 Om vullen een van de twee aanduidingen met drijvende komma 1536 01:08:48,310 --> 01:08:51,029 waarde, u weer gebruik maken van vierkante haken. 1537 01:08:51,029 --> 01:08:55,620 In dit geval, ik gebruik ik omdat dit for-lus is begonnen met i gelijk 1538 01:08:55,620 --> 01:08:57,560 welke waarde, blijkbaar? 1539 01:08:57,560 --> 01:08:58,279 0. 1540 01:08:58,279 --> 01:09:01,350 >> Dus op de eerste iteratie van deze lus, is het alsof ik 1541 01:09:01,350 --> 01:09:02,689 schreef dit in de code. 1542 01:09:02,689 --> 01:09:05,580 Maar op de tweede iteratie van deze lus, is het alsof ik 1543 01:09:05,580 --> 01:09:07,750 schreef dit in mijn code. 1544 01:09:07,750 --> 01:09:10,750 Maar het feit dat ik een variabele met behulp van perfect is, omdat, zoals de naam al 1545 01:09:10,750 --> 01:09:14,300 suggereert, het variëren van de waarde van elke iteratie. 1546 01:09:14,300 --> 01:09:17,370 Dus ik ben het vullen van deze array een plek op een moment. 1547 01:09:17,370 --> 01:09:18,910 Wat betekent deze array eruit? 1548 01:09:18,910 --> 01:09:21,430 Nou, de reden dat ik tekende deze super eenvoudige rechthoek op het scherm hier 1549 01:09:21,430 --> 01:09:23,350 eerder was om deze reden. 1550 01:09:23,350 --> 01:09:27,279 Een array is gewoon een brok van het geheugen, gevolgd door een ander stuk van het geheugen, 1551 01:09:27,279 --> 01:09:30,109 gevolgd door een stuk geheugen, enzovoort. 1552 01:09:30,109 --> 01:09:35,260 Dus als mijn array is van maat 2, in dit geval hier, alles wat ik zou moeten doen door 1553 01:09:35,260 --> 01:09:37,590 te typen in mijn quiz scores, zoals hier. 1554 01:09:37,590 --> 01:09:39,430 Ik heb 100 op deze. 1555 01:09:39,430 --> 01:09:42,020 En toen kreeg ik een 99 op dit ene. 1556 01:09:42,020 --> 01:09:46,040 Dan is dit geheugen kan niet worden gebruikt, zelfs, want ik heb alleen gevraagd de 1557 01:09:46,040 --> 01:09:48,689 computer voor een array van grootte 2. 1558 01:09:48,689 --> 01:09:50,180 Die vierkantjes zijn er nog steeds. 1559 01:09:50,180 --> 01:09:50,340 Juist? 1560 01:09:50,340 --> 01:09:52,500 Je hebt nog steeds twee gigabyte aan RAM-geheugen, zelfs als je alleen maar 1561 01:09:52,500 --> 01:09:53,979 vragen om twee drijvers. 1562 01:09:53,979 --> 01:09:58,710 Dus het idee achter arrays is dat de computer slechts een deel van het geheugen wordt 1563 01:09:58,710 --> 01:10:03,230 en dan verdeelt kleinere stukken rug aan rug aan rug aan rug. 1564 01:10:03,230 --> 01:10:04,740 En dus dat is alles wat een array is. 1565 01:10:04,740 --> 01:10:09,080 Het is een aaneengesloten stuk van het geheugen, waarbinnen u kunt dingen. 1566 01:10:09,080 --> 01:10:12,400 >> Nu gebeurt dit te doen dan slechts enkele saaie rekenen. 1567 01:10:12,400 --> 01:10:16,170 Als ik naar beneden scrollen hier, dit is waar ik dan itereren over de array. 1568 01:10:16,170 --> 01:10:19,410 Ik kom met de som van alle waarden in de array. 1569 01:10:19,410 --> 01:10:22,390 En dan gebruik ik de ronde functie hier om daadwerkelijk de 1570 01:10:22,390 --> 01:10:23,940 Samenvattend gedeeld door quizzen. 1571 01:10:23,940 --> 01:10:27,450 Maar laat me mijn hand zwaaien, dat als een soort van voldoende rekenkundige voor nu. 1572 01:10:27,450 --> 01:10:30,010 Maar dat alles doet voor mij uiteindelijk het berekenen van een gemiddelde. 1573 01:10:30,010 --> 01:10:33,640 Dus eerst quiz plus tweede quiz, gedeeld door 2, en vervolgens afdrukken 1574 01:10:33,640 --> 01:10:34,700 het uit als een int. 1575 01:10:34,700 --> 01:10:39,030 >> Maar laten we nu de overgang naar een ander voorbeeld genoemd tekenreeks1, 1576 01:10:39,030 --> 01:10:42,370 die schetst een soortgelijk beeld, maar met behulp van snaren. 1577 01:10:42,370 --> 01:10:45,550 Laat me ga je gang en vereenvoudigen dit voor slechts een moment. 1578 01:10:45,550 --> 01:10:48,340 En vergeef de inspringing voor nu. 1579 01:10:48,340 --> 01:10:52,280 Merk op dat in lijn 19 van dit voorbeeld, krijg ik een string van de gebruiker. 1580 01:10:52,280 --> 01:10:55,780 Maar let op wat ik daarna doe in lijnen 22 verder. 1581 01:10:55,780 --> 01:11:00,260 Ik ben eigenlijk itereren van i tot en met - en dit is een nieuwe truc - 1582 01:11:00,260 --> 01:11:02,730 strlen, tekstlengte. 1583 01:11:02,730 --> 01:11:07,010 Dit is een functie die wordt geleverd met C dat als je langs het een string, het vertelt 1584 01:11:07,010 --> 01:11:08,950 u hoeveel tekens zijn in die string. 1585 01:11:08,950 --> 01:11:09,440 Dat is alles. 1586 01:11:09,440 --> 01:11:12,520 Het feit dat het strlen in plaats van de string lengte is gewoon omdat het 1587 01:11:12,520 --> 01:11:13,040 meer beknopt. 1588 01:11:13,040 --> 01:11:17,100 30 jaar geleden, mensen graag dingen op te schrijven zo kort en bondig mogelijk te maken. 1589 01:11:17,100 --> 01:11:19,080 Dus we hebben gehouden dat verdrag hier. 1590 01:11:19,080 --> 01:11:21,730 i + + betekent gewoon verhogen i in elke iteratie. 1591 01:11:21,730 --> 01:11:24,310 En let nu op, en dat is echt interessant. 1592 01:11:24,310 --> 01:11:28,730 Dus in lijn 24, zeg ik computer, geef me een teken, acht 1593 01:11:28,730 --> 01:11:30,770 bits, en noem het c. 1594 01:11:30,770 --> 01:11:35,370 Maar wat is dit op de rechterkant te zeggen? 1595 01:11:35,370 --> 01:11:38,150 In het Engels, dat betekent wat voor? 1596 01:11:38,150 --> 01:11:40,070 [Onverstaanbaar] 1597 01:11:40,070 --> 01:11:40,490 DAVID J. MALAN: Precies. 1598 01:11:40,490 --> 01:11:42,390 Geef mij het eerste teken in de array. 1599 01:11:42,390 --> 01:11:45,400 Of meer in het algemeen, geef me de i-de karakter in de array. 1600 01:11:45,400 --> 01:11:48,230 En nu besef dat het belangrijk is dat als informatici, we eigenlijk zijn 1601 01:11:48,230 --> 01:11:49,330 tellen vanaf 0. 1602 01:11:49,330 --> 01:11:51,290 Je hoeft nu niet de vrijheid hebben om te beginnen om dit te doen. 1603 01:11:51,290 --> 01:11:54,580 Nu heb je te gedragen in overeenstemming met de verwachtingen van de computer en 1604 01:11:54,580 --> 01:11:58,010 tellen van nul, omdat [0] zal als eerste 1605 01:11:58,010 --> 01:11:59,670 teken in een tekenreeks. 1606 01:11:59,670 --> 01:12:01,320 [1] gaat worden de tweede. 1607 01:12:01,320 --> 01:12:03,610 [2] gaat de derde, enzovoort. 1608 01:12:03,610 --> 01:12:08,840 Dus dit programma, als ik het compileren - dit is, nogmaals, tekenreeks1. 1609 01:12:08,840 --> 01:12:11,040 >> Dus zorg tekenreeks1. 1610 01:12:11,040 --> 01:12:16,730 En nu loop ik tekenreeks1 in mijn terminal-venster. 1611 01:12:16,730 --> 01:12:19,180 Het wacht op input, dus ik ga in te typen, zeg, David. 1612 01:12:19,180 --> 01:12:20,080 Enter. 1613 01:12:20,080 --> 01:12:23,350 En nu wordt afgedrukt DAVID allemaal op verschillende lijnen, omdat 1614 01:12:23,350 --> 01:12:24,430 let op wat ik doe. 1615 01:12:24,430 --> 01:12:27,510 Ik ben het afdrukken van een karakter per keer. 1616 01:12:27,510 --> 01:12:29,100 Nu zullen we niet in detail treden vandaag op deze. 1617 01:12:29,100 --> 01:12:31,610 Maar ik verwijderde een moment geleden deze controle hier. 1618 01:12:31,610 --> 01:12:36,310 Het blijkt dat als de gebruiker zich misdraagt, hoor en wederhoor, of gewoon 1619 01:12:36,310 --> 01:12:41,780 verward, kun je eigenlijk niet aan een reeks van enige lengte te geven. 1620 01:12:41,780 --> 01:12:43,640 Als je op de verkeerde toets op het toetsenbord, kunt u geven 1621 01:12:43,640 --> 01:12:44,390 geen snaar helemaal. 1622 01:12:44,390 --> 01:12:47,790 Of als je kwaadaardige, kunt u proberen te plakken in de moeite waard een gigabyte's van een 1623 01:12:47,790 --> 01:12:49,380 essay naar deze string te vullen. 1624 01:12:49,380 --> 01:12:52,060 En als de computer onvoldoende geheugen, blijkt dat we gaan 1625 01:12:52,060 --> 01:12:54,310 terug te krijgen deze speciale waarde genaamd null. 1626 01:12:54,310 --> 01:12:57,550 Dus voor nu, weet alleen dat er deze speciale waarde met de naam null, dat 1627 01:12:57,550 --> 01:13:01,000 zal ons toelaten om na te gaan als we geen geheugen meer, onder andere dingen. 1628 01:13:01,000 --> 01:13:07,330 >> Maar als ik open nu tekenreeks2, hier op te merken een verschil. 1629 01:13:07,330 --> 01:13:09,760 Hier een opzegtermijn van een verschil met string2. 1630 01:13:09,760 --> 01:13:13,260 Met tekenreeks2, dit for-lus is een beetje anders. 1631 01:13:13,260 --> 01:13:16,350 Laat me verwijderen van de nullen, zodat we kunnen praten over die andere keer. 1632 01:13:16,350 --> 01:13:18,460 Maar wat is er anders aan de for-lus deze keer? 1633 01:13:21,580 --> 01:13:23,160 En ik kan terug te gaan naar het vorige voorbeeld. 1634 01:13:23,160 --> 01:13:24,800 Dus dat is versie twee. 1635 01:13:24,800 --> 01:13:27,020 Dit is versie een. 1636 01:13:27,020 --> 01:13:31,935 Een, twee, een twee. 1637 01:13:35,030 --> 01:13:38,240 Dus de strlen oproep is waar? 1638 01:13:38,240 --> 01:13:40,420 Het is in het eerste deel van de lus. 1639 01:13:40,420 --> 01:13:43,060 Elke gedachten over waarom ik dit doe? 1640 01:13:43,060 --> 01:13:43,690 Ja. 1641 01:13:43,690 --> 01:13:46,010 [Onverstaanbaar] 1642 01:13:46,010 --> 01:13:47,630 DAVID J. MALAN: Dus we niet bellen met de functie iedere keer. 1643 01:13:47,630 --> 01:13:48,040 Precies. 1644 01:13:48,040 --> 01:13:50,350 Recall van voor loops dat ze super simpel als je eenmaal soort van 1645 01:13:50,350 --> 01:13:52,180 begrijpen dat dit de initialisatie, de 1646 01:13:52,180 --> 01:13:53,330 toestand en de update. 1647 01:13:53,330 --> 01:13:55,430 Het probleem is dat de toestand gebeurt op elke 1648 01:13:55,430 --> 01:13:56,600 iteratie van de lus. 1649 01:13:56,600 --> 01:13:59,930 En dus in dit voorbeeld, wat slecht is over het feit 1650 01:13:59,930 --> 01:14:03,500 dat dit mijn conditie? 1651 01:14:03,500 --> 01:14:05,920 U belt strlen opnieuw en opnieuw en opnieuw. 1652 01:14:05,920 --> 01:14:08,990 Maar zodra ik heb getypt in DAVID, de lengte van die string is vijf. 1653 01:14:08,990 --> 01:14:11,560 En het is niet van plan om te veranderen op elke iteratie van de lus, omdat de 1654 01:14:11,560 --> 01:14:15,560 koord nog D-A-V-I-D. Dus dit is een hint naar wat er gaat uitgegroeid tot een 1655 01:14:15,560 --> 01:14:19,650 steeds belangrijker idee bekend als een ontwerpbeslissing, waar - gewoon niet 1656 01:14:19,650 --> 01:14:21,640 maken van de computer te doen onnodig werk. 1657 01:14:21,640 --> 01:14:25,630 >> Nu even een sneak preview van PSET 2, PSET 2 in de standaard editie is 1658 01:14:25,630 --> 01:14:28,850 ga je uitdagen om daadwerkelijk uitvoering van een aantal aantal cijfers, sommige 1659 01:14:28,850 --> 01:14:32,650 aantal encryptie-algoritmen, zodat u zowel kunt coderen en decoderen 1660 01:14:32,650 --> 01:14:35,530 geheime boodschappen, net als degene die Ralphie daar gedecodeerd. 1661 01:14:35,530 --> 01:14:38,720 In de hacker editie van PSET 2, we gaan een stukje verder te gaan. 1662 01:14:38,720 --> 01:14:42,010 We gaan overhandigen u een bestand uit een werkelijke computer systeem dat een bevat 1663 01:14:42,010 --> 01:14:45,690 hele hoop van gebruikersnamen en feitelijke gecodeerde wachtwoorden, en de uitdaging 1664 01:14:45,690 --> 01:14:49,110 voor de hacker editie gaat worden om die wachtwoorden en figuur te kraken 1665 01:14:49,110 --> 01:14:53,060 wat cryptografie of wat het geheim is om daadwerkelijk gebruikt 1666 01:14:53,060 --> 01:14:55,080 genereren die wachtwoorden. 1667 01:14:55,080 --> 01:14:58,360 En we gaan dit doen door gebruik te maken van een nieuwe feature hier van C die ik geef 1668 01:14:58,360 --> 01:15:02,200 je gewoon een demo van, bekend als command-line argumenten. 1669 01:15:02,200 --> 01:15:05,930 >> Zo blijkt, zoals sommigen van jullie misschien hebben gezien in paragraaf of in leerboeken, 1670 01:15:05,930 --> 01:15:09,850 belangrijkste hoeft niet altijd nietig tussen haakjes zijn. 1671 01:15:09,850 --> 01:15:14,060 Het blijkt dat de belangrijkste ook geschreven kan worden als deze, met twee argumenten, 1672 01:15:14,060 --> 01:15:19,690 argc en argv, waar argc is het aantal woorden die u typt na 1673 01:15:19,690 --> 01:15:21,940 van het programma de naam van uw opdrachtregel. 1674 01:15:21,940 --> 01:15:24,550 En argv is de werkelijke woorden. 1675 01:15:24,550 --> 01:15:29,470 En als de vierkante haken daar suggereren, argv is blijkbaar een array. 1676 01:15:29,470 --> 01:15:33,720 Het gaat om een ​​string na een reeks na een reeks in het geheugen zijn. 1677 01:15:33,720 --> 01:15:36,170 Dus wat we gaan om te kunnen doen, te beginnen met PSET 2, wordt 1678 01:15:36,170 --> 01:15:37,310 iets als dit. 1679 01:15:37,310 --> 01:15:42,450 Als ik argv1, dat is een voorbeeld dat we weer terug te komen op maandag, en voer 1680 01:15:42,450 --> 01:15:45,180 het, merken dat het niet lijkt te nog iets doen. 1681 01:15:45,180 --> 01:15:47,050 Hij drukt gewoon uit zijn eigen naam. 1682 01:15:47,050 --> 01:15:53,220 Maar als ik afscheid klasse, merk op dat dit programma blijkbaar herhaalt 1683 01:15:53,220 --> 01:15:57,030 over elk van de woorden die werden ingevoerd wordt bij het prompt. 1684 01:15:57,030 --> 01:16:02,050 En de manier waarop we toegang tot woorden die de gebruiker te krijgen 1685 01:16:02,050 --> 01:16:06,780 ingevoerd wordt bij het prompt is door het veranderen van de belangrijkste, te beginnen dit weekend, van int 1686 01:16:06,780 --> 01:16:10,710 main (void) to main (argc, argv) int. 1687 01:16:10,710 --> 01:16:13,700 En zo zullen geboren worden commandoregel argumenten. 1688 01:16:13,700 --> 01:16:17,210 En als je eenmaal echt verfijnd op dit, zult u in staat zijn om te schrijven 1689 01:16:17,210 --> 01:16:21,370 echt trippy programma's, zoals deze hier, die verder gaat boven en buiten 1690 01:16:21,370 --> 01:16:25,520 deel van de functionaliteit die we tot nu toe gedaan, maar allemaal heel krachtig. 1691 01:16:25,520 --> 01:16:27,330 >> Dus we laten dit met deze op het scherm. 1692 01:16:27,330 --> 01:16:29,160 En we zullen zien je maandag.