1 00:00:00,000 --> 00:00:06,180 2 00:00:06,180 --> 00:00:07,820 >> JASON HIRSCHHORN: Welkom A5, iedereen. 3 00:00:07,820 --> 00:00:11,270 We hebben een spannende week voor de boeg, vooral omdat er zo veel nieuwe 4 00:00:11,270 --> 00:00:12,350 gezichten in deze kamer. 5 00:00:12,350 --> 00:00:12,920 Het is prachtig. 6 00:00:12,920 --> 00:00:15,740 Veel van jullie zijn hier per ongeluk, dat is nog beter. 7 00:00:15,740 --> 00:00:18,220 Dus hopelijk je zult blijven bij ons. 8 00:00:18,220 --> 00:00:20,220 >> Deze week gaan we besteden het grootste deel van de sectie 9 00:00:20,220 --> 00:00:21,870 de voorbereiding voor de quiz. 10 00:00:21,870 --> 00:00:26,580 Dus per onze agenda, we gaan praten een beetje over de middelen voor de klas, 11 00:00:26,580 --> 00:00:30,350 maar ook voor de quiz, en daarna, weer, het grootste deel van de klas te praten door te brengen 12 00:00:30,350 --> 00:00:31,390 over vragen. 13 00:00:31,390 --> 00:00:33,900 Zodra we klaar zijn beantwoording van uw vragen, of als uw vragen 14 00:00:33,900 --> 00:00:39,010 natuurlijk leiden ons naar een aantal codering, ik hebben monster problemen van tentamens 15 00:00:39,010 --> 00:00:43,180 verleden dat we live zal coderen in paragraaf samen die brengen ook op een andere plaats 16 00:00:43,180 --> 00:00:45,420 goede onderwerpen te dekken. 17 00:00:45,420 --> 00:00:48,280 >> Dus eerst, als we door zijn gegaan voor de afgelopen paar weken om u eraan te herinneren 18 00:00:48,280 --> 00:00:51,700 jongens, zijn er een ton van de middelen beschikbaar voor deze cursus. 19 00:00:51,700 --> 00:00:55,020 Velen van hen zullen ongelooflijk nuttig zijn aan u als u doorgaat met 20 00:00:55,020 --> 00:00:57,280 studeren voor quiz 0, omdat Het is dinsdagmiddag. 21 00:00:57,280 --> 00:00:59,630 Dus ieder van jullie zijn geweest studeren voor een beetje. 22 00:00:59,630 --> 00:01:02,640 >> Er zijn dictaten en bron code die je moet 23 00:01:02,640 --> 00:01:04,050 zeker uitchecken. 24 00:01:04,050 --> 00:01:05,019 Bekijk de korte broek. 25 00:01:05,019 --> 00:01:07,470 Check out study.cs50.net. 26 00:01:07,470 --> 00:01:11,770 En dan, hieronder vermeld, een aantal van andere hulpmiddelen. 27 00:01:11,770 --> 00:01:14,020 >> Nogmaals, quiz 0 is morgen bij 01:00. 28 00:01:14,020 --> 00:01:18,230 Als u nog niet hebt gedaan, kijk maar uit de over Quiz 0 document op de 29 00:01:18,230 --> 00:01:21,370 Natuurlijk homepage te achterhalen waar je met de quiz. 30 00:01:21,370 --> 00:01:25,770 De quiz begint om 01:10 en eindigt 70 minuten later. 31 00:01:25,770 --> 00:01:29,610 Dus als u te laten zien na 01:10, je bent gaat dat veel minder minuten te krijgen 32 00:01:29,610 --> 00:01:30,940 dan 70 om de quiz te nemen. 33 00:01:30,940 --> 00:01:33,570 Dus zorg dat je er op tijd bent. 34 00:01:33,570 --> 00:01:38,690 Als je een extensie student of hebben sommige andere testen overwegingen 35 00:01:38,690 --> 00:01:40,400 misschien niet bij 1:00 morgen. 36 00:01:40,400 --> 00:01:43,540 Maar nogmaals, check het over Quiz 0 documenteren om ervoor te zorgen dat u weet wanneer 37 00:01:43,540 --> 00:01:44,760 je neemt de quiz. 38 00:01:44,760 --> 00:01:46,440 Ik schreef 75 minuten hier. 39 00:01:46,440 --> 00:01:48,580 Ik denk dat dat klopt, niet 70. 40 00:01:48,580 --> 00:01:53,420 >> Het heeft betrekking op al het materiaal van een week 0 tot lezing van vorige week op woensdag. 41 00:01:53,420 --> 00:01:59,350 En nogmaals, voor deze quiz, die per document, krijg je een dubbelzijdig en 8 42 00:01:59,350 --> 00:02:03,770 1/2 met 11 vel papier dat u te gebruiken als notities tijdens de quiz. 43 00:02:03,770 --> 00:02:08,570 Veel mensen, zo niet de meeste mensen, hebben vond dat de meest handige manier 44 00:02:08,570 --> 00:02:11,970 om te studeren voor de quiz is om maak een studie blad, een 45 00:02:11,970 --> 00:02:13,730 one-sider, van hun eigen. 46 00:02:13,730 --> 00:02:17,710 Dus kijk naar het verleden die indien je hebt het verleden modellen gezien. 47 00:02:17,710 --> 00:02:19,960 Zoek je vrienden op om te zien wat ze zetten op hen. 48 00:02:19,960 --> 00:02:23,610 >> Maar hands-down, de beste manier dan ook studie is om te gaan door alles en 49 00:02:23,610 --> 00:02:26,530 Whittle het neer op wat wel en wat niet thuis op dat vel 50 00:02:26,530 --> 00:02:30,570 papier, want dat is gewoon een heel handige manier voor u om ervoor te zorgen 51 00:02:30,570 --> 00:02:33,620 je gaat door alles en enige vertrouwdheid met het. 52 00:02:33,620 --> 00:02:36,690 De meeste mensen vinden we, hoewel ze hebben het vel papier zitten recht 53 00:02:36,690 --> 00:02:39,840 naast hen op de quiz, niet inschakelen het, omdat wederom, dat zeer 54 00:02:39,840 --> 00:02:43,290 proces van het gaan door de informatie heeft hen geholpen leren. 55 00:02:43,290 --> 00:02:45,370 >> Heeft iemand enig vragen over quiz 0? 56 00:02:45,370 --> 00:02:50,120 57 00:02:50,120 --> 00:02:51,450 Heeft iedereen - 58 00:02:51,450 --> 00:02:53,230 Ik ga niet naar een show van de handen doen. 59 00:02:53,230 --> 00:02:53,550 Maakt niet uit. 60 00:02:53,550 --> 00:02:54,790 Ik was van plan om die vragen gaan studeren. 61 00:02:54,790 --> 00:02:58,360 Maar ik wil niet dat je te maken al niet je hand op te steken. 62 00:02:58,360 --> 00:03:01,290 Dus zoals ik al zei - ja, Avi, ga je gang. 63 00:03:01,290 --> 00:03:04,205 >> AVI: Wat zou een nuttige zaak zijn op een pager zetten? 64 00:03:04,205 --> 00:03:05,875 >> STUDENT: Dat is aan jou. 65 00:03:05,875 --> 00:03:08,210 >> JASON HIRSCHHORN: U krijgt om je verstand te gebruiken. 66 00:03:08,210 --> 00:03:13,220 Nuttige dingen op de een-pager te zetten, als je verward over de grote O 67 00:03:13,220 --> 00:03:17,510 looptijd van verschillende soorten zoekopdrachten en sorteert, zet dat op er op een 68 00:03:17,510 --> 00:03:18,760 handige dandy grafiek. 69 00:03:18,760 --> 00:03:22,250 Op die manier, als je vroeg bent dat op de quiz, hoeft u niet te proberen en figuur 70 00:03:22,250 --> 00:03:23,560 het uit of reden door de runtime. 71 00:03:23,560 --> 00:03:24,730 Je kunt gewoon kopiëren naar beneden. 72 00:03:24,730 --> 00:03:28,320 Als je kijkt naar quizzen verleden, veel tijden, er loopt tijd vragen. 73 00:03:28,320 --> 00:03:34,150 Dat zou een voorbeeld van een goed ding op uw one-pager te zetten. 74 00:03:34,150 --> 00:03:37,450 >> Andere goede dingen op te zetten, als je verward over hoe te verklaren een 75 00:03:37,450 --> 00:03:40,570 functie of wat de verschillende delen van de functie verklaring zijn, schrijven 76 00:03:40,570 --> 00:03:43,400 dat daar, een generieke versie en dan misschien een voorbeeld. 77 00:03:43,400 --> 00:03:47,290 Als u verward over pointers bent, een diagram van hoe pointers werken is 78 00:03:47,290 --> 00:03:48,660 waarschijnlijk echt nuttig. 79 00:03:48,660 --> 00:03:52,440 Als u verward over recursie, een bent proeven recursieve functie op daar 80 00:03:52,440 --> 00:03:54,980 zou ook blijken echt nuttig te zijn. 81 00:03:54,980 --> 00:03:57,290 Betekent dat u een aantal ideeën? 82 00:03:57,290 --> 00:04:01,820 >> AVI: U moet begrijpen de hele compilatie proces, zoals 83 00:04:01,820 --> 00:04:03,220 hoe dat allemaal werkt? 84 00:04:03,220 --> 00:04:06,620 >> JASON HIRSCHHORN: Everything dat bedekt kan 85 00:04:06,620 --> 00:04:08,060 weergegeven op de quiz. 86 00:04:08,060 --> 00:04:08,930 Vragen - 87 00:04:08,930 --> 00:04:11,300 maar nogmaals, sommige dingen zullen zwaarder gewogen dan andere. 88 00:04:11,300 --> 00:04:14,330 Sommige dingen zijn weer gekomen en opnieuw in de klas, in 89 00:04:14,330 --> 00:04:15,590 lezing, en sectie. 90 00:04:15,590 --> 00:04:17,220 Andere dingen hebben niet komen dat vaak. 91 00:04:17,220 --> 00:04:22,900 >> We hebben veel gesproken over # include en -L iets en wat die betekenen in 92 00:04:22,900 --> 00:04:24,390 het compilatie proces. 93 00:04:24,390 --> 00:04:29,120 We hebben veel gesproken over GDB, vastklampen, deze verschillende vlaggen die wij gebruiken bij 94 00:04:29,120 --> 00:04:33,100 we iets samen te stellen, en wat make15, bijvoorbeeld, echt 95 00:04:33,100 --> 00:04:34,510 betekent en echt doet. 96 00:04:34,510 --> 00:04:38,110 We hebben niet zo veel over praten elke stap in 97 00:04:38,110 --> 00:04:39,240 het compilatie proces. 98 00:04:39,240 --> 00:04:40,410 We hebben nog steeds over gesproken. 99 00:04:40,410 --> 00:04:42,550 Dus het is nog steeds iets dat je moeten kennen. 100 00:04:42,550 --> 00:04:44,610 Maar nogmaals, we gaan niet te zijn - 101 00:04:44,610 --> 00:04:49,140 dingen die komen vaker in de klas hebben meer kans om meer te komen 102 00:04:49,140 --> 00:04:52,495 vaak en worden zwaarder gewogen op de quiz. 103 00:04:52,495 --> 00:04:53,280 >> Cool. 104 00:04:53,280 --> 00:04:54,580 Andere vragen heeft over quiz 0? 105 00:04:54,580 --> 00:04:57,660 106 00:04:57,660 --> 00:05:00,050 >> OK, dus heb ik een lijst van onderwerpen op het bord. 107 00:05:00,050 --> 00:05:01,550 Ik ging door de syllabus. 108 00:05:01,550 --> 00:05:07,340 Ik ging door de review sectie van gisteravond en deze dia's te komen 109 00:05:07,340 --> 00:05:13,710 met een niet-exhaustieve lijst van onderwerpen dat we tot nu toe in CS50 hebben afgelegd 110 00:05:13,710 --> 00:05:16,800 en dingen die zouden kunnen verschijnen op de quiz. 111 00:05:16,800 --> 00:05:19,900 Dus ik ben niet van plan om door te gaan elk van deze. 112 00:05:19,900 --> 00:05:22,370 Dat zou veel meer rekening tijd dan we nu hebben. 113 00:05:22,370 --> 00:05:26,880 Maar ik zet dit hier hopelijk jog je geheugen als om dingen die kunnen 114 00:05:26,880 --> 00:05:28,420 of misschien niet zo vertrouwd zijn met je. 115 00:05:28,420 --> 00:05:32,850 >> En ik zou graag het grootste deel van door te brengen sectie beantwoorden van uw vragen over 116 00:05:32,850 --> 00:05:35,130 deze onderwerpen, onderwerpen die worden hier niet behandeld. 117 00:05:35,130 --> 00:05:36,130 We kunnen pseudo-code te schrijven. 118 00:05:36,130 --> 00:05:40,010 We kunnen echte code te schrijven om ervoor te zorgen dat u - 119 00:05:40,010 --> 00:05:44,280 Ik kan uw vraag te beantwoorden en te helpen iedereen fundamenteel begrijpen 120 00:05:44,280 --> 00:05:48,330 Veel van deze onderwerpen, zodat je voelt voorbereid en comfortabel in te gaan op 121 00:05:48,330 --> 00:05:50,150 de quiz morgen. 122 00:05:50,150 --> 00:05:52,300 Dus lees over de lijst. 123 00:05:52,300 --> 00:05:54,780 Hopelijk zijn gekomen om deel met enkele vragen ook. 124 00:05:54,780 --> 00:05:58,480 Als je klaar bent, steek je hand en wij zullen aan de slag. 125 00:05:58,480 --> 00:06:01,590 126 00:06:01,590 --> 00:06:05,200 >> Houd in gedachten, de vragen die je hebt, er zijn geen domme vragen. 127 00:06:05,200 --> 00:06:06,250 We hebben dat een veel gehoord. 128 00:06:06,250 --> 00:06:09,490 En de vragen die je hebt, ik ben bereid om in te zetten, veel andere mensen, zowel 129 00:06:09,490 --> 00:06:11,740 hier zitten en kijken online te hebben. 130 00:06:11,740 --> 00:06:13,770 Dus je kan alleen maar helpen mensen door vragen te stellen. 131 00:06:13,770 --> 00:06:15,070 Marcus. 132 00:06:15,070 --> 00:06:18,040 >> MARCUS: Tussen de stapel en de hoop, is er een pre-toegewezen 133 00:06:18,040 --> 00:06:22,880 percentage van het geheugen dat is gedefinieerd als dit is voor de stack of voor de hoop? 134 00:06:22,880 --> 00:06:25,010 Of hoe werkt dat precies? 135 00:06:25,010 --> 00:06:26,230 >> JASON HIRSCHHORN: Goede vraag. 136 00:06:26,230 --> 00:06:28,640 Ik ga terug traceren een beetje. 137 00:06:28,640 --> 00:06:30,910 Doet iedereen - 138 00:06:30,910 --> 00:06:31,660 hier eerlijk te zijn. 139 00:06:31,660 --> 00:06:34,130 Ik weet dat ik je vraag te verhogen uw hand voor uw collega's. 140 00:06:34,130 --> 00:06:38,510 Maar zijn er mensen die het gevoel hebben ongemakkelijk met de stack en heap 141 00:06:38,510 --> 00:06:42,980 en wil graag gaan over dat en wat die betekenen? 142 00:06:42,980 --> 00:06:43,880 Steek je hand op als - 143 00:06:43,880 --> 00:06:44,420 OK. 144 00:06:44,420 --> 00:06:45,120 Dank u. 145 00:06:45,120 --> 00:06:48,420 Dus we gaan te gaan over de stapel en de hoop heel snel en dan 146 00:06:48,420 --> 00:06:50,370 verplaatsen in het beantwoorden van uw vraag. 147 00:06:50,370 --> 00:06:58,250 >> Dus als we trekken uit een doos te vertegenwoordigen geheugen op uw computer, wat zijn sommige 148 00:06:58,250 --> 00:07:02,160 dingen die verder gaan in dit vak? 149 00:07:02,160 --> 00:07:03,630 Main. 150 00:07:03,630 --> 00:07:04,020 Een hoofdfunctie. 151 00:07:04,020 --> 00:07:05,890 Waar komt belangrijkste heen? 152 00:07:05,890 --> 00:07:08,090 >> STUDENT: [onverstaanbaar]. 153 00:07:08,090 --> 00:07:09,390 >> JASON HIRSCHHORN: Dus we zet hier beneden belangrijkste. 154 00:07:09,390 --> 00:07:12,180 155 00:07:12,180 --> 00:07:13,430 Wat gaat in dit vak? 156 00:07:13,430 --> 00:07:16,000 157 00:07:16,000 --> 00:07:18,140 >> STUDENT: De functies die u belt. 158 00:07:18,140 --> 00:07:19,020 >> JASON HIRSCHHORN: De functies we noemen. 159 00:07:19,020 --> 00:07:20,440 En waar gaan ze naartoe? 160 00:07:20,440 --> 00:07:21,300 >> STUDENT: In de stapel. 161 00:07:21,300 --> 00:07:22,380 >> JASON HIRSCHHORN: Ze gaan in de stack. 162 00:07:22,380 --> 00:07:27,350 Dus we gaan op dit verzoek ding hier beneden de stapel. 163 00:07:27,350 --> 00:07:31,880 En tot boven, we hebben de hoop. 164 00:07:31,880 --> 00:07:35,450 Dus geheugen is niet een doos net als dit. 165 00:07:35,450 --> 00:07:37,330 Maar het is eigenlijk vrij gelijkaardig. 166 00:07:37,330 --> 00:07:40,840 Het gaat om een ​​heleboel dozen worden over en dan, afhankelijk van hoe groot uw 167 00:07:40,840 --> 00:07:43,730 computer is of hoe groot je geheugen is. 168 00:07:43,730 --> 00:07:46,950 >> Aan het citaat-unquote "bottom" is de stack. 169 00:07:46,950 --> 00:07:50,880 En er zijn meerdere dingen dat op de stapel. 170 00:07:50,880 --> 00:07:53,840 En die is afhankelijk van de functies je hebt in je code. 171 00:07:53,840 --> 00:07:57,780 Je hebt altijd een functie in uw code genaamd main, dus er is altijd een 172 00:07:57,780 --> 00:08:00,480 sectie hier beneden in de stack gewijd aan de belangrijkste. 173 00:08:00,480 --> 00:08:03,980 >> Deze secties in de stapel stack frames worden genoemd. 174 00:08:03,980 --> 00:08:09,580 Wanneer u een andere functie aan te roepen, zeggen de belangrijkste noemt een binary search functie, 175 00:08:09,580 --> 00:08:11,075 zetten we een ander frame op de stapel. 176 00:08:11,075 --> 00:08:13,830 177 00:08:13,830 --> 00:08:17,320 Meer specifiek, gaan we doneren een deel van het geheugen op onze 178 00:08:17,320 --> 00:08:22,960 computer op te slaan binary search lokale variabelen en de binaire draaien 179 00:08:22,960 --> 00:08:24,150 zoekcode. 180 00:08:24,150 --> 00:08:26,810 >> Dus noemen we binary search. 181 00:08:26,810 --> 00:08:30,440 182 00:08:30,440 --> 00:08:33,340 In dit stuk van het geheugen, gaan we zijn lokale variabelen op te slaan. 183 00:08:33,340 --> 00:08:35,270 We gaan haar printf oproepen opslaan. 184 00:08:35,270 --> 00:08:38,159 Wat er ook gebeurt, die functie is zal daar worden opgeslagen. 185 00:08:38,159 --> 00:08:40,350 Binary search gaat voeren. 186 00:08:40,350 --> 00:08:42,210 Het gaat om de uitvoering te voltooien. 187 00:08:42,210 --> 00:08:47,450 Wat is het woord in C, dat betekent dat een functie moet 188 00:08:47,450 --> 00:08:49,306 voltooien de uitvoering ervan? 189 00:08:49,306 --> 00:08:50,040 >> STUDENT: Return. 190 00:08:50,040 --> 00:08:50,870 >> JASON HIRSCHHORN: Return. 191 00:08:50,870 --> 00:08:53,230 Dus wanneer je een return-statement, de functie eindigt 192 00:08:53,230 --> 00:08:54,350 als het hits dat. 193 00:08:54,350 --> 00:08:56,740 Dus binary search zal zijn terugkeer raken. 194 00:08:56,740 --> 00:09:01,360 Dit deel van het geheugen zal wezen worden vrijgemaakt. 195 00:09:01,360 --> 00:09:03,510 En de belangrijkste terug naar uitvoering te gaan. 196 00:09:03,510 --> 00:09:07,240 Dus belangrijkste pauzeert waar was, oproep binary search, nog wat return waarde, 197 00:09:07,240 --> 00:09:08,700 en verder uitvoering. 198 00:09:08,700 --> 00:09:10,840 Dit stackframe weg zal gaan. 199 00:09:10,840 --> 00:09:14,810 >> Als we een recursieve functie, bel die is een functie die zichzelf aanroept dan 200 00:09:14,810 --> 00:09:18,480 en dan zouden we krijgen - zeggen dat we deed binary search recursief. 201 00:09:18,480 --> 00:09:21,520 Misschien krijgen we binary search versie een, binary search twee, binary search 202 00:09:21,520 --> 00:09:24,090 drie, binary search vier, binary search vijf. 203 00:09:24,090 --> 00:09:27,950 En dan is dit laatste binaire zoekopdracht vijf zal de base case, en de stapel raken 204 00:09:27,950 --> 00:09:31,010 frames terug zal gaan en blijven sluiten tot we terug naar de hoofdpagina. 205 00:09:31,010 --> 00:09:32,530 We kunnen gaan over recursie in een beetje. 206 00:09:32,530 --> 00:09:35,530 Maar dit alles wil zeggen, als je Met meerdere functies tegelijk, 207 00:09:35,530 --> 00:09:39,250 er zullen meerdere stack frames op de stapel. 208 00:09:39,250 --> 00:09:42,900 >> De heap, anderzijds, op Hier is niet te functies 209 00:09:42,900 --> 00:09:44,380 niet voor lokale variabelen. 210 00:09:44,380 --> 00:09:48,920 Het is voor dynamisch toegewezen variabelen. 211 00:09:48,920 --> 00:09:57,210 Dit zijn variabelen die kunnen worden geïnitialiseerd in zowel hoofd-of een 212 00:09:57,210 --> 00:09:58,640 functioneren dat de belangrijkste gesprekken. 213 00:09:58,640 --> 00:10:00,790 Overal in uw code, ze kunnen worden geïnitialiseerd. 214 00:10:00,790 --> 00:10:04,360 En een dynamisch initialiseren toegekende variabele. 215 00:10:04,360 --> 00:10:06,970 Welke functie in C gebruiken we? 216 00:10:06,970 --> 00:10:07,600 >> STUDENT: Malloc. 217 00:10:07,600 --> 00:10:09,240 >> JASON HIRSCHHORN: Malloc. 218 00:10:09,240 --> 00:10:10,800 U belt malloc. 219 00:10:10,800 --> 00:10:12,260 Je krijgt een ruimte van het geheugen. 220 00:10:12,260 --> 00:10:15,020 En die ruimte van het geheugen is op de heap. 221 00:10:15,020 --> 00:10:18,840 En die ruimte van herinnering blijft daar staan ​​totdat u gratis bellen. 222 00:10:18,840 --> 00:10:22,670 >> Dus dynamisch toegewezen variabelen in heap zal bestaan ​​voor zo lang als je 223 00:10:22,670 --> 00:10:25,250 willen dat ze bestaan, en zij zullen niet ga weg totdat u expliciet 224 00:10:25,250 --> 00:10:26,760 vertel hen om weg te gaan. 225 00:10:26,760 --> 00:10:29,670 Je kunt ze maken in een functie. 226 00:10:29,670 --> 00:10:31,930 Stack die functie kader zal verdwijnen. 227 00:10:31,930 --> 00:10:35,490 Maar dat variabele blijft bestaan in de hoop tot het wordt vrijgemaakt, 228 00:10:35,490 --> 00:10:39,650 mogelijk door de functie die genoemd binary search of wat dan ook. 229 00:10:39,650 --> 00:10:42,580 >> Dus die hoop variabelen blijven er voor zo lang als je wilt 230 00:10:42,580 --> 00:10:43,490 hen om daar te blijven. 231 00:10:43,490 --> 00:10:46,090 En krijgen ze hier plaatsen. 232 00:10:46,090 --> 00:10:47,450 En dan de volgende krijgt men daar te zetten. 233 00:10:47,450 --> 00:10:50,210 Ze houden steeds gevuld in, en ze daar blijven totdat u gratis bellen. 234 00:10:50,210 --> 00:10:52,870 >> En in wezen, de hoop en de stapel, om naar Marcus de vraag, 235 00:10:52,870 --> 00:10:54,500 groeien naar elkaar toe. 236 00:10:54,500 --> 00:10:57,730 En als ze lopen in elkaar over, je hebt opgebruikt al het geheugen in uw 237 00:10:57,730 --> 00:11:01,330 computer, en uw programma zal stoppen want je hebt geen geheugen meer 238 00:11:01,330 --> 00:11:02,420 links te gebruiken. 239 00:11:02,420 --> 00:11:07,290 Tussen hen er mogelijk andere dingen. 240 00:11:07,290 --> 00:11:10,980 Maar voor de omvang van deze cursus, u geen zorgen te maken over dat. 241 00:11:10,980 --> 00:11:12,020 >> Dus dat was het antwoord op uw vraag. 242 00:11:12,020 --> 00:11:13,520 Zit u er niet over in. 243 00:11:13,520 --> 00:11:15,550 Maar dat was het lange antwoord. 244 00:11:15,550 --> 00:11:17,800 Alles wat je moet weten is de en de stack zal - 245 00:11:17,800 --> 00:11:18,900 een vanaf de bodem. 246 00:11:18,900 --> 00:11:19,570 De stack doet. 247 00:11:19,570 --> 00:11:20,790 De hoop is daarboven. 248 00:11:20,790 --> 00:11:21,990 Zij dichter bij elkaar groeien. 249 00:11:21,990 --> 00:11:23,110 >> En als ze aanraken, dat is een probleem. 250 00:11:23,110 --> 00:11:24,500 Je liep uit het geheugen. 251 00:11:24,500 --> 00:11:28,760 Maar ook naast weten waar zij worden, wat opgeslagen in zowel de 252 00:11:28,760 --> 00:11:30,512 stack en heap. 253 00:11:30,512 --> 00:11:31,410 Curtis. 254 00:11:31,410 --> 00:11:33,570 >> CURTIS: Als ze botsen, is dat een stack overflow? 255 00:11:33,570 --> 00:11:35,670 >> JASON HIRSCHHORN: Als ze botsen, dat is niet een stack overflow. 256 00:11:35,670 --> 00:11:38,340 Een stack overflow is een ander gebied dat we dan kunnen gaan als je wilt. 257 00:11:38,340 --> 00:11:40,020 OK, we komen terug naar die komen in een beetje. 258 00:11:40,020 --> 00:11:42,730 >> STUDENT: Wat is het woord genaamd als ze elkaar raken, de 259 00:11:42,730 --> 00:11:44,450 stack en de heap? 260 00:11:44,450 --> 00:11:46,640 >> JASON HIRSCHHORN: Voor nu, maak je geen zorgen over. 261 00:11:46,640 --> 00:11:47,750 Gewoon weten - 262 00:11:47,750 --> 00:11:50,530 Ik zal die vraag te beantwoorden na de les. 263 00:11:50,530 --> 00:11:52,680 Als ze lopen in elkaar over, liep je uit van het geheugen, omdat er geen meer 264 00:11:52,680 --> 00:11:53,330 ruimte is er. 265 00:11:53,330 --> 00:11:55,450 >> STUDENT: Sorry, wat is een seg fout? 266 00:11:55,450 --> 00:11:58,710 >> JASON HIRSCHHORN: A-segment fout kan worden opgeroepen - 267 00:11:58,710 --> 00:12:02,240 het hangt af waarom de seg fout heet. 268 00:12:02,240 --> 00:12:06,260 Soms, je stack overflow, het zal zeggen seg fout als de fout. 269 00:12:06,260 --> 00:12:08,180 >> STUDENT: Hoe zit dereferentie een null variabele? 270 00:12:08,180 --> 00:12:10,040 Is dat een seg schuld? 271 00:12:10,040 --> 00:12:11,480 >> JASON HIRSCHHORN: dereferentie een null pointer - 272 00:12:11,480 --> 00:12:17,850 OK, dus als je een pointer die je ingesteld die gelijk is aan null, pointers, rappel, 273 00:12:17,850 --> 00:12:20,270 winkel geheugenadressen hun waarden. 274 00:12:20,270 --> 00:12:23,660 En een null pointer is in wezen het opslaan van 0, de 0-ste 275 00:12:23,660 --> 00:12:26,670 pakken in die variabele. 276 00:12:26,670 --> 00:12:30,010 Dus 0x, 0, 0, 0, 0, et cetera. 277 00:12:30,010 --> 00:12:35,030 Dat 0-th adres in het geheugen dat is niet in onze foto, dat is daarboven 278 00:12:35,030 --> 00:12:38,800 ergens, dat is voorbehouden voor de computer. 279 00:12:38,800 --> 00:12:40,130 We mogen het niet aanraken. 280 00:12:40,130 --> 00:12:44,680 >> Dus als je programma's uitvoeren, indien iets probeert naar het geheugen 281 00:12:44,680 --> 00:12:48,990 adres 0, weet dat dat een lege waarde. 282 00:12:48,990 --> 00:12:50,820 Het weet niets moet er zijn. 283 00:12:50,820 --> 00:12:53,420 Dus als je er te proberen en gebruik iets en als er iets te behandelen of 284 00:12:53,420 --> 00:12:58,355 proberen om naar die locatie, je bent gaan naar een seg fout of een foutmelding krijgt. 285 00:12:58,355 --> 00:13:00,520 Is dat een antwoord op je vraag? 286 00:13:00,520 --> 00:13:03,170 >> En nu gaan we terug te gaan overflow stapelen. 287 00:13:03,170 --> 00:13:09,560 Dingen in de stack, zoals jullie hebben eerder gezien, in - laten we trekken een nauwe 288 00:13:09,560 --> 00:13:11,966 up van een stapel frame. 289 00:13:11,966 --> 00:13:15,050 Kan iedereen zien dat? 290 00:13:15,050 --> 00:13:16,650 Dus hebben we onze stack frame. 291 00:13:16,650 --> 00:13:23,260 We zijn het opslaan van een array in een lokale variabele in deze functie. 292 00:13:23,260 --> 00:13:29,510 Dat zeggen ons aanbod heeft vijf plekken. 293 00:13:29,510 --> 00:13:33,230 Alle vijf van deze worden opgeslagen in die stack frame. 294 00:13:33,230 --> 00:13:37,540 >> Als we beginnen met het schrijven van buiten de grenzen van deze array - 295 00:13:37,540 --> 00:13:43,990 dus als we beginnen met het schrijven in, laten we zeggen dat is 0. 296 00:13:43,990 --> 00:13:46,800 Dat zijn de vijf indexen van onze array. 297 00:13:46,800 --> 00:13:50,980 Als we beginnen te schrijven in index 5, die we hebben niet als we een 298 00:13:50,980 --> 00:13:55,900 scala van maat 5, beginnen we schrijven in index 6, 7, 8, 9, we kunnen een Stack krijgen 299 00:13:55,900 --> 00:13:57,960 Overflow error. 300 00:13:57,960 --> 00:14:00,510 >> Over het algemeen is het niet - 301 00:14:00,510 --> 00:14:04,910 zal je waarschijnlijk in de problemen als je dan gaan voor een. 302 00:14:04,910 --> 00:14:08,640 Maar in het algemeen, zal je in de de meeste problemen als je over te gaan door veel 303 00:14:08,640 --> 00:14:12,770 en je zo ver over dat je schrijft gaan over de terugkeer adres van die 304 00:14:12,770 --> 00:14:16,080 functie, die is gelegen op de onderop de stapel frame. 305 00:14:16,080 --> 00:14:16,520 >> Omdat, toch? 306 00:14:16,520 --> 00:14:17,670 Je - in de - sorry. 307 00:14:17,670 --> 00:14:18,550 Niet "omdat rechts." 308 00:14:18,550 --> 00:14:20,470 >> In de stack frame, je hebt uw lokale variabelen. 309 00:14:20,470 --> 00:14:27,090 Aan de onderkant van de stapel frame is het retouradres. 310 00:14:27,090 --> 00:14:28,790 Dat is waar de functie gaat als het voorbij is. 311 00:14:28,790 --> 00:14:33,750 En als je dat rendement overschrijven adres, dan wanneer dit stackframe, 312 00:14:33,750 --> 00:14:36,680 wanneer je gaat door de stapel kaderen en uitvoeren van elke lijn, je bent 313 00:14:36,680 --> 00:14:40,350 ga naar uw nieuwe retouradres dat is er geschreven in plaats van de 314 00:14:40,350 --> 00:14:40,910 huidige. 315 00:14:40,910 --> 00:14:45,050 En dat is hoe we hebben gezien sommige inbreuken op de beveiliging 316 00:14:45,050 --> 00:14:46,780 kan gebeuren met computers. 317 00:14:46,780 --> 00:14:52,760 >> Dus stack overflow, kortom, is wanneer u het deel overschrijven in de stapel 318 00:14:52,760 --> 00:14:55,440 je zou moeten gebruiken, de lokale variabele je zou moeten gebruiken, en 319 00:14:55,440 --> 00:14:58,070 in het bijzonder wanneer u begint met het overschrijven belangrijke zaken als de 320 00:14:58,070 --> 00:14:59,100 retouradres. 321 00:14:59,100 --> 00:15:00,090 En dat is waar je een foutmelding krijgt. 322 00:15:00,090 --> 00:15:03,980 Of misschien zelfs kan je beginnen zelfs schrijven in - 323 00:15:03,980 --> 00:15:05,370 zeggen binary search was recht boven belangrijkste. 324 00:15:05,370 --> 00:15:07,790 Als je overschreef veel, je kon schrijven in de belangrijkste. 325 00:15:07,790 --> 00:15:10,230 Maar over het algemeen krijg je een foutmelding voordat Vervolgens, omdat de computer weet 326 00:15:10,230 --> 00:15:12,270 dat je iets doet je niet zou moeten doen. 327 00:15:12,270 --> 00:15:12,560 Yeah. 328 00:15:12,560 --> 00:15:13,910 >> STUDENT: Wat is het verschil tussen een stack overflow 329 00:15:13,910 --> 00:15:16,940 en een buffer overflow? 330 00:15:16,940 --> 00:15:19,420 >> JASON HIRSCHHORN: Buffer overflow is een meer algemene vorm van 331 00:15:19,420 --> 00:15:20,395 wat ik net heb beschreven. 332 00:15:20,395 --> 00:15:22,610 >> STUDENT: Dus een stack overflow is een voorbeeld van een buffer overflow. 333 00:15:22,610 --> 00:15:23,420 >> JASON HIRSCHHORN: Precies. 334 00:15:23,420 --> 00:15:28,700 Dit is een serie die we kunnen bedenken als een buffer, een ruimte voor de dingen naar binnen 335 00:15:28,700 --> 00:15:30,600 Dit is een stack buffer overflow. 336 00:15:30,600 --> 00:15:33,210 We konden een heap buffer overflow te hebben. 337 00:15:33,210 --> 00:15:36,870 Als er een buffer, waarvoor vaak is een array de hoop, en we 338 00:15:36,870 --> 00:15:40,600 overschreven die grenzen, dan zouden we hebben een heap buffer overflow. 339 00:15:40,600 --> 00:15:44,870 >> En buiten het bestek van deze cursus, ze ontdekt een beetje anders. 340 00:15:44,870 --> 00:15:48,040 De compiler heeft speciale de opsporing van elke. 341 00:15:48,040 --> 00:15:50,660 Maar een buffer overflow is een meer generieke type wat ik beschreef, 342 00:15:50,660 --> 00:15:54,090 dat was een stack buffer overflow. 343 00:15:54,090 --> 00:15:56,240 Heeft dat uw vraag beantwoord? 344 00:15:56,240 --> 00:15:57,910 Sweet. 345 00:15:57,910 --> 00:16:01,850 >> Waren er nog andere vragen over om de stapel of de hoop? 346 00:16:01,850 --> 00:16:04,920 347 00:16:04,920 --> 00:16:05,510 Yeah. 348 00:16:05,510 --> 00:16:08,220 >> STUDENT: Ik weet dat je moet gratis strings omdat ze in de hoop 349 00:16:08,220 --> 00:16:09,305 en je wilt niet het geheugen lekken. 350 00:16:09,305 --> 00:16:12,240 Maar heb je om globale variabelen te bevrijden en dat soort dingen? 351 00:16:12,240 --> 00:16:14,335 Of worden ze automatisch bevrijd? 352 00:16:14,335 --> 00:16:15,700 >> JASON HIRSCHHORN: Goede vraag. 353 00:16:15,700 --> 00:16:22,340 Dus in CS50.H, creëren we dit ding voor u een string genaamd. 354 00:16:22,340 --> 00:16:23,800 Een string is echt wat? 355 00:16:23,800 --> 00:16:24,810 >> STUDENT: Char ster. 356 00:16:24,810 --> 00:16:29,180 >> JASON HIRSCHHORN: Een char ster, een pointer om een ​​teken, een pointer naar 357 00:16:29,180 --> 00:16:30,650 een reeks tekens. 358 00:16:30,650 --> 00:16:32,210 Dat is wat de string is. 359 00:16:32,210 --> 00:16:36,050 Dus we moeten bevrijden, omdat getString, die we veel gebruikt - 360 00:16:36,050 --> 00:16:38,370 string naam gelijk getString - 361 00:16:38,370 --> 00:16:43,560 dat mallocs voor ons deel van het geheugen op de hoop en dan geeft een pointer naar de 362 00:16:43,560 --> 00:16:47,230 eerste teken van die koord, een char ster. 363 00:16:47,230 --> 00:16:52,760 >> Dus schijnbaar, als je nog niet geweest vrij schrijven op een van uw snaren 364 00:16:52,760 --> 00:16:55,600 dat je tot nu toe hebt genoemd, je hebt gelekt wat geheugen. 365 00:16:55,600 --> 00:16:57,430 Natuurlijk hebben we niet gesproken over , dus niemand heeft gekregen in 366 00:16:57,430 --> 00:16:58,520 moeite voor doen. 367 00:16:58,520 --> 00:16:59,980 Maar de toekomst, ja. 368 00:16:59,980 --> 00:17:03,990 Wanneer u getString belt, je bent mallocing wat ruimte op de heap. 369 00:17:03,990 --> 00:17:07,640 En als je niet gratis bellen later op die snaar, je hebt een geheugenlek. 370 00:17:07,640 --> 00:17:09,440 Dat antwoord op uw vraag? 371 00:17:09,440 --> 00:17:10,606 >> Ja 372 00:17:10,606 --> 00:17:15,020 >> STUDENT: Dus om dat te doen, gebruiken we gratis vlak voor terug? 373 00:17:15,020 --> 00:17:18,510 Net als in het kader van, denk ik zo we zeggen, als, int main, binnen de 374 00:17:18,510 --> 00:17:24,410 werkingssfeer van de code die binnen die accolades, vlak voor - 375 00:17:24,410 --> 00:17:26,140 je weet waar je zou doorgaans op terugkeer. 376 00:17:26,140 --> 00:17:27,950 Zet je vrij daarvoor? 377 00:17:27,950 --> 00:17:31,000 >> JASON HIRSCHHORN: Dus je kunt vrij zetten waar je vrij wilt zetten. 378 00:17:31,000 --> 00:17:33,810 Omdat deze dynamisch toegewezen variabelen, omdat ze kunnen 379 00:17:33,810 --> 00:17:39,170 leven buiten het kader van een bepaalde functie, als je malloc bellen in een 380 00:17:39,170 --> 00:17:44,140 aparte functie, bijvoorbeeld, getString, kunt u gratis bellen in de belangrijkste. 381 00:17:44,140 --> 00:17:46,050 U hoeft niet te noemen de specifieke functie 382 00:17:46,050 --> 00:17:47,570 waar malloc wordt genoemd. 383 00:17:47,570 --> 00:17:50,340 Maar je moet het ook noemen voordat belangrijkste rendement. 384 00:17:50,340 --> 00:17:51,120 >> En het is echt afhankelijk. 385 00:17:51,120 --> 00:17:54,960 Het hangt af van de reden waarom u dat malloced ruimte in de eerste plaats. 386 00:17:54,960 --> 00:17:57,320 Sommige mensen zullen noemen vrij snel bevrijden. 387 00:17:57,320 --> 00:17:59,220 Sommige mensen zullen niet gratis bellen tot het einde van het programma. 388 00:17:59,220 --> 00:18:00,660 En ze gaan door en gratis alles. 389 00:18:00,660 --> 00:18:03,597 Het hangt af van de reden waarom u malloc genoemd. 390 00:18:03,597 --> 00:18:11,270 >> STUDENT: En wat zou je zeggen als je gebruik getString genoemd? 391 00:18:11,270 --> 00:18:13,320 Je zou zeggen dat vrij wat? 392 00:18:13,320 --> 00:18:20,040 >> JASON HIRSCHHORN: Dus de syntaxis voor gratis is gewoon gratis, open Paren, dicht 393 00:18:20,040 --> 00:18:22,130 Paren, en de naam van de aanwijzer. 394 00:18:22,130 --> 00:18:26,410 Dus als je schrijft tekenreeksnaam gelijken getString, zet je naam hier. 395 00:18:26,410 --> 00:18:27,760 Dat is de naam van de aanwijzer. 396 00:18:27,760 --> 00:18:30,570 En hij weet dat het geheugen vrij te maken. 397 00:18:30,570 --> 00:18:33,920 >> STUDENT: Dus als het bevrijdt dat het geheugen, de wijzer wijst nog steeds naar die plaats 398 00:18:33,920 --> 00:18:34,970 in het geheugen? 399 00:18:34,970 --> 00:18:39,020 Of is het wijzer ook ontdaan van het adres dat het wijst op. 400 00:18:39,020 --> 00:18:40,290 >> JASON HIRSCHHORN: We moeten proberen dat. 401 00:18:40,290 --> 00:18:41,430 We moeten coderen dat. 402 00:18:41,430 --> 00:18:43,880 Laten we terugkomen als we in codering, en laten we coderen dat. 403 00:18:43,880 --> 00:18:46,000 En als je wilt weten het antwoord aan dat, kunt u ook de code die 404 00:18:46,000 --> 00:18:46,690 in de tussentijd. 405 00:18:46,690 --> 00:18:49,100 Maar dat is een grote vraag. 406 00:18:49,100 --> 00:18:53,480 >> STUDENT: Is het mogelijk om gratis iets te snel? 407 00:18:53,480 --> 00:18:58,530 Dus je moet nog steeds het voor uw programma, en je dat geheugenruimte vrijgemaakt? 408 00:18:58,530 --> 00:18:59,200 >> JASON HIRSCHHORN: Ja. 409 00:18:59,200 --> 00:19:03,020 Het is mogelijk, als je gratis iets en vervolgens opnieuw te gebruiken heb, zal je 410 00:19:03,020 --> 00:19:06,890 lopen in een fout. 411 00:19:06,890 --> 00:19:10,810 Maar dat is op je, omdat je bevrijd iets en dan noemde het later. 412 00:19:10,810 --> 00:19:13,940 Dus dat was een vergissing programmeur. 413 00:19:13,940 --> 00:19:14,780 Maar ja. 414 00:19:14,780 --> 00:19:17,760 Je kon schrijven dat. 415 00:19:17,760 --> 00:19:19,240 >> Meer vragen op - 416 00:19:19,240 --> 00:19:19,760 Ja. 417 00:19:19,760 --> 00:19:22,820 >> STUDENT: Dus als je wordt verondersteld om gewoon bevrijden in het algemeen voor de 418 00:19:22,820 --> 00:19:25,490 programma eindigt, betekent dat, indien de programma eindigt en je niet bevrijden, 419 00:19:25,490 --> 00:19:27,580 dat geheugen is nog steeds toegewezen? 420 00:19:27,580 --> 00:19:31,330 >> JASON HIRSCHHORN: Als uw programma eindigt en je vergeet om iets te bevrijden, dan 421 00:19:31,330 --> 00:19:34,390 dat het geheugen werd gedurende toegewezen de levensduur van uw programma. 422 00:19:34,390 --> 00:19:37,670 Wanneer uw programma wordt afgesloten geheel, dat geheugen is niet van plan 423 00:19:37,670 --> 00:19:39,490 om daar voor altijd blijven. 424 00:19:39,490 --> 00:19:42,080 De computer is slim genoeg om te weten dat wanneer het programma wordt afgesloten, het 425 00:19:42,080 --> 00:19:46,440 dient zich te ontdoen van al het geheugen dat werd geassocieerd met dat programma. 426 00:19:46,440 --> 00:19:51,240 >> Echter, er zijn tools die u kunt uitvoeren op een programma om te detecteren of, wanneer de 427 00:19:51,240 --> 00:19:54,720 programma afgewerkt, je vergat om wat geheugen vrij te maken. 428 00:19:54,720 --> 00:19:57,960 En voor uw volgende probleem stellen waar je zult gebruiken malloc en het gebruik van 429 00:19:57,960 --> 00:20:02,610 pointers, zult u het uitvoeren van dit programma op uw programma om te zien of, 430 00:20:02,610 --> 00:20:06,530 als belangrijkste rendement, je had een aantal dingen die unfreed werden achtergelaten. 431 00:20:06,530 --> 00:20:09,130 >> Dus ze gaan niet malloced blijven voor altijd in uw computer. 432 00:20:09,130 --> 00:20:11,720 Dat zou verspilling zijn, omdat zeer snel, computers 433 00:20:11,720 --> 00:20:12,960 zou onvoldoende geheugen. 434 00:20:12,960 --> 00:20:16,450 Maar als ze lopen tot het einde van uw programmeren en ze zijn niet bevrijd en uw 435 00:20:16,450 --> 00:20:20,260 programma wordt afgesloten, dat is nog steeds een probleem dat deze tool zal u helpen aanpakken. 436 00:20:20,260 --> 00:20:21,520 >> STUDENT: Is dat Valgrind? 437 00:20:21,520 --> 00:20:22,910 >> JASON HIRSCHHORN: Het is genoemd Valgrind. 438 00:20:22,910 --> 00:20:23,520 En je zult - 439 00:20:23,520 --> 00:20:25,780 >> STUDENT: Maar we hoeven niet te weten dat voor de quiz, hoewel? 440 00:20:25,780 --> 00:20:27,600 Ik bedoel, werd gesproken over een beetje in collegezaal. 441 00:20:27,600 --> 00:20:33,600 >> JASON HIRSCHHORN: Dus Valgrind is de naam van dat gereedschap. 442 00:20:33,600 --> 00:20:37,180 Weten wat het doet is genoeg voor de quiz. 443 00:20:37,180 --> 00:20:40,200 Maar je hebt het nog niet gebruikt op uw probleem stellen, omdat we hebben niet een 444 00:20:40,200 --> 00:20:43,520 probleem set die uitdrukkelijk heeft behandeld met malloc of u met behulp van malloc. 445 00:20:43,520 --> 00:20:45,330 Dus je hebt nog niet gebruikt Valgrind. 446 00:20:45,330 --> 00:20:47,760 Maar je zal het gebruik eerder eerder dan later. 447 00:20:47,760 --> 00:20:48,710 >> STUDENT: Kan je herhalen wat Valgrind is? 448 00:20:48,710 --> 00:20:49,190 >> JASON HIRSCHHORN: Sorry? 449 00:20:49,190 --> 00:20:51,240 >> STUDENT: Kan je wat herhalen het doel van Valgring is? 450 00:20:51,240 --> 00:20:53,100 >> JASON HIRSCHHORN: Valgrind heet - 451 00:20:53,100 --> 00:20:59,890 zoals GDB helpt je je programma debuggen, Valgrind helpt je erachter te komen of 452 00:20:59,890 --> 00:21:03,210 dingen zijn niet bevrijd wanneer het programma wordt afgesloten. 453 00:21:03,210 --> 00:21:05,110 Dus je zult het uit te voeren op uw programma. 454 00:21:05,110 --> 00:21:09,230 En uw programma wordt afgesloten, en het zal zeggen: uw programma genaamd malloc dit veel 455 00:21:09,230 --> 00:21:13,670 tijden voor deze vele bytes, en u alleen gratis noemde dit vele malen. 456 00:21:13,670 --> 00:21:16,520 En dus je deze vele bytes links zonder te worden bevrijd. 457 00:21:16,520 --> 00:21:18,050 Of het zal zeggen dat je alles hebt bevrijd. 458 00:21:18,050 --> 00:21:19,070 Goed gedaan. 459 00:21:19,070 --> 00:21:19,480 >> STUDENT: OK. 460 00:21:19,480 --> 00:21:21,060 En het is Valgring genoemd? 461 00:21:21,060 --> 00:21:24,940 >> JASON HIRSCHHORN V-A-L-G-R-I-N-D. 462 00:21:24,940 --> 00:21:25,970 >> STUDENT: Een vraag over pointers. 463 00:21:25,970 --> 00:21:30,080 Dus zeggen dat je hebt n ster x gelijk is aan iets. 464 00:21:30,080 --> 00:21:33,330 Dat is gelijk aan, wat je zetten daar, is dat wat er wordt binnen zetten 465 00:21:33,330 --> 00:21:36,120 x wat wijst op, of de wijzer van x? 466 00:21:36,120 --> 00:21:37,690 >> JASON HIRSCHHORN: Kunt u herhaal de vraag? 467 00:21:37,690 --> 00:21:39,340 Kunnen we trekken terwijl je het zegt? 468 00:21:39,340 --> 00:21:42,710 >> STUDENT: In de quiz, eigenlijk, de degene die je ons gestuurd, het was, char 469 00:21:42,710 --> 00:21:46,520 ster waarheid gelijk CS50 rotsen, toch? 470 00:21:46,520 --> 00:21:52,190 Betekent dat dan dat die CS50 rotsen is wat de waarheid wijst naar? 471 00:21:52,190 --> 00:21:55,810 >> JASON HIRSCHHORN: Dus je praat over een char ster in een string, hoe 472 00:21:55,810 --> 00:21:56,460 dat werkt? 473 00:21:56,460 --> 00:21:56,890 Yeah. 474 00:21:56,890 --> 00:21:57,700 OK. 475 00:21:57,700 --> 00:21:59,140 Laten we trekken deze hier. 476 00:21:59,140 --> 00:22:07,100 >> [SIDE GESPREK] 477 00:22:07,100 --> 00:22:11,130 >> JASON HIRSCHHORN: Dus deze variabele gaat van het type char ster te zijn. 478 00:22:11,130 --> 00:22:14,580 Hoe groot is een variabele van het type char ster? 479 00:22:14,580 --> 00:22:15,510 Hoeveel bytes? 480 00:22:15,510 --> 00:22:16,450 >> STUDENTEN: Vier. 481 00:22:16,450 --> 00:22:18,210 >> JASON HIRSCHHORN: Het is vier bytes. 482 00:22:18,210 --> 00:22:21,420 Hoeveel rechten is een variabele van het type int ster? 483 00:22:21,420 --> 00:22:22,210 >> STUDENTEN: Vier. 484 00:22:22,210 --> 00:22:24,910 >> JASON HIRSCHHORN: vier bytes. 485 00:22:24,910 --> 00:22:28,280 Als het een pointer, dan is het altijd vier bytes, omdat pointers hun 486 00:22:28,280 --> 00:22:30,070 waarde is een geheugen adres. 487 00:22:30,070 --> 00:22:35,160 En geheugen adressen op de CS50 apparaat zijn vier bytes lang. 488 00:22:35,160 --> 00:22:42,900 Dus toen we getString, of wanneer we noemen zeg, stringname gelijk, en vervolgens in 489 00:22:42,900 --> 00:22:46,140 dubbele aanhalingstekens zet een string, we zetten - 490 00:22:46,140 --> 00:22:46,920 nou, dat is een beetje anders. 491 00:22:46,920 --> 00:22:48,630 We doen getString als voorbeeld. 492 00:22:48,630 --> 00:22:52,150 Of char ster iets is gelijk aan de string. 493 00:22:52,150 --> 00:22:54,360 Sorry, geef mij het voorbeeld dat je leest? 494 00:22:54,360 --> 00:22:57,590 >> STUDENT: char ster waarheid gelijk "CS50 rocks" dubbele aanhalingstekens. 495 00:22:57,590 --> 00:23:02,260 >> JASON HIRSCHHORN: Dus deze ster, dit we zullen deze variabele x bellen voor onze 496 00:23:02,260 --> 00:23:04,060 algemene doeleinden. 497 00:23:04,060 --> 00:23:05,970 We hebben een variabele genaamd x gemaakt. 498 00:23:05,970 --> 00:23:07,610 Het is het type char ster. 499 00:23:07,610 --> 00:23:10,950 Het is een pointer naar een reeks karakters. 500 00:23:10,950 --> 00:23:12,200 Dus hier beneden - 501 00:23:12,200 --> 00:23:23,710 502 00:23:23,710 --> 00:23:25,890 >> Dus dit is hoe dit zou werken in het geheugen. 503 00:23:25,890 --> 00:23:27,410 Dit zou een geheugen adres op te slaan. 504 00:23:27,410 --> 00:23:31,770 Het zou het geheugen adres van slaan het eerste teken in de array. 505 00:23:31,770 --> 00:23:33,830 En dan wanneer je gevolgd de aanwijzer, zou je 506 00:23:33,830 --> 00:23:35,200 krijgen de eerste letter. 507 00:23:35,200 --> 00:23:38,780 >> En als je dit leest zoiets een string, uw computer is slim 508 00:23:38,780 --> 00:23:42,930 genoeg om te weten, lees dit hele ding totdat het bij een terugslag 0. 509 00:23:42,930 --> 00:23:45,530 Maar als je dit leest het een teken op een tijd, dus je itereren door 510 00:23:45,530 --> 00:23:49,910 deze string, dan zul je net hebt gelezen een karakter per keer tot u bij 511 00:23:49,910 --> 00:23:50,850 backslash 0. 512 00:23:50,850 --> 00:23:52,335 Dat is misschien niet het antwoord op uw vraag, dat wel. 513 00:23:52,335 --> 00:23:55,610 >> STUDENT: Ja, maar je hebt niet malloced die ruimte 514 00:23:55,610 --> 00:23:58,400 nog voor dat pointer. 515 00:23:58,400 --> 00:24:02,510 >> JASON HIRSCHHORN: Dus ik ben niet helemaal zeker precies wat u zoekt op, 516 00:24:02,510 --> 00:24:03,640 omdat ik niet die quiz maken. 517 00:24:03,640 --> 00:24:06,370 Dat zou een nuttig te zijn deze bij een andere TF. 518 00:24:06,370 --> 00:24:11,380 Als u een string op de stack of als een lokale variabele, het zal 519 00:24:11,380 --> 00:24:16,920 net scala aan kosten in plaats van zijn algemeen een char ster wijst naar 520 00:24:16,920 --> 00:24:18,600 andere string. 521 00:24:18,600 --> 00:24:20,550 Maar ik weet het niet. 522 00:24:20,550 --> 00:24:25,065 Dat kan een pointer naar de andere string op de stapel ook. 523 00:24:25,065 --> 00:24:27,240 Yeah. 524 00:24:27,240 --> 00:24:31,116 >> STUDENT: Ik weet dat je nodig hebt om geheugen toewijzen als de aanwijzer 525 00:24:31,116 --> 00:24:33,360 krijgen binnen verklaard van een andere functie. 526 00:24:33,360 --> 00:24:36,740 Heb je nodig om hetzelfde te doen als het binnenkant van de belangrijkste wordt verklaard, 527 00:24:36,740 --> 00:24:39,570 je gebruikt het binnen van de belangrijkste? 528 00:24:39,570 --> 00:24:43,590 >> JASON HIRSCHHORN: Dus ja. 529 00:24:43,590 --> 00:24:46,670 U kunt een pointer verklaren aan een geheugen adres in het geheugen. 530 00:24:46,670 --> 00:24:51,440 Het kan het geheugen adres van een lokaal zijn variabel, maar vaak, 531 00:24:51,440 --> 00:24:55,760 mensen niet geheugenadressen verklaren om lokale variabelen, omdat ze gaan 532 00:24:55,760 --> 00:24:59,890 weg zodra die functie geeft, die Daarom hebben we malloc algemeen dingen. 533 00:24:59,890 --> 00:25:04,630 Maar ja, je kon een pointer verklaren een andere lokale variabele. 534 00:25:04,630 --> 00:25:06,360 Het is gewoon in het algemeen niet gedaan. 535 00:25:06,360 --> 00:25:09,480 Maar ik kan een kijkje nemen op die rekening specifiek ding na de les. 536 00:25:09,480 --> 00:25:10,650 Yeah. 537 00:25:10,650 --> 00:25:12,350 >> STUDENT: Ik denk dat dit soort van wat er wordt gevraagd. 538 00:25:12,350 --> 00:25:16,930 Het lijkt vreemd om te initialiseren een pointer niet als 539 00:25:16,930 --> 00:25:20,760 adres, maar als wat lijkt een waarde. 540 00:25:20,760 --> 00:25:25,970 Het lijkt alsof de CS50 is wat erin zit het ding wordt gewezen op en 541 00:25:25,970 --> 00:25:28,820 niet de feitelijke adres, toch? 542 00:25:28,820 --> 00:25:30,520 >> JASON HIRSCHHORN: Dus dat is niet het geval, dat wel. 543 00:25:30,520 --> 00:25:32,470 Dat is niet wat er gebeurt. 544 00:25:32,470 --> 00:25:35,910 Wanneer u verklaren een char ster, het is een geheugen adres. 545 00:25:35,910 --> 00:25:38,860 Pointers zijn alle geheugenadressen wijzend naar iets anders. 546 00:25:38,860 --> 00:25:41,480 Dat er iets anders zou kunnen zijn op de stack, maar bijna altijd op de 547 00:25:41,480 --> 00:25:43,440 hoop in de manier waarop we zullen zien het gebruikt. 548 00:25:43,440 --> 00:25:46,860 549 00:25:46,860 --> 00:25:53,500 Maar stringname evenaart double-citaat "GetString," kunnen we dat zien en we 550 00:25:53,500 --> 00:25:55,010 kunnen kijken door die en coderen dat. 551 00:25:55,010 --> 00:26:01,190 getString snaar wordt niet in wordt opgeslagen die variabele of ongeacht de tekenreeks 552 00:26:01,190 --> 00:26:04,580 naam is niet in die gered variabele, want dat is niet hoe 553 00:26:04,580 --> 00:26:06,070 pointers werken. 554 00:26:06,070 --> 00:26:06,770 Is dat logisch? 555 00:26:06,770 --> 00:26:07,170 >> STUDENT: Ja. 556 00:26:07,170 --> 00:26:08,570 >> JASON HIRSCHHORN: OK. 557 00:26:08,570 --> 00:26:11,690 Hopelijk, dat was niet verwarrend voor iedereen. 558 00:26:11,690 --> 00:26:15,732 Maar als het was, kunnen we weer kijken in een beetje, omdat we eigenlijk aan de hand 559 00:26:15,732 --> 00:26:19,240 om iets dat hopelijk zal coderen werken met strijkers en helpen voelen 560 00:26:19,240 --> 00:26:22,170 meer comfortabel met hen. 561 00:26:22,170 --> 00:26:24,869 >> Andere vragen met betrekking tot deze onderwerpen of andere onderwerpen die 562 00:26:24,869 --> 00:26:26,119 Ik kom terug zetten? 563 00:26:26,119 --> 00:26:32,280 564 00:26:32,280 --> 00:26:34,840 En - 565 00:26:34,840 --> 00:26:36,310 nu. 566 00:26:36,310 --> 00:26:37,630 Ja, Alden. 567 00:26:37,630 --> 00:26:39,860 >> ALDEN: Dus dit is helemaal los, maar we kunnen alleen gaan over 568 00:26:39,860 --> 00:26:42,760 heel snel wat we moeten weten over het verschil tussen 32 en 569 00:26:42,760 --> 00:26:46,345 64-bit machine? 570 00:26:46,345 --> 00:26:47,740 >> JASON HIRSCHHORN: Ja. 571 00:26:47,740 --> 00:26:52,111 Dus 32 bits is hoeveel bytes? 572 00:26:52,111 --> 00:26:53,060 >> ALDEN: Het is vier bytes. 573 00:26:53,060 --> 00:26:54,360 >> JASON HIRSCHHORN: Het is vier bytes. 574 00:26:54,360 --> 00:26:58,420 En 64 bits is hoeveel bytes? 575 00:26:58,420 --> 00:26:59,112 >> STUDENT: Acht. 576 00:26:59,112 --> 00:27:00,610 >> JASON HIRSCHHORN: Acht bytes. 577 00:27:00,610 --> 00:27:03,980 Dus nogmaals, acht bits is een byte. 578 00:27:03,980 --> 00:27:08,340 Uw CS50 apparaat een 32-bit machine. 579 00:27:08,340 --> 00:27:13,650 Dus geheugenadressen zijn vier bytes lang. 580 00:27:13,650 --> 00:27:17,460 Er zijn 2 van de 32 geheugenadressen. 581 00:27:17,460 --> 00:27:21,310 0 tot 2 tot de 32 min 1. 582 00:27:21,310 --> 00:27:27,630 En ik ben niet positief, maar dat is waarschijnlijk de omvang van wat je nodig hebt om 583 00:27:27,630 --> 00:27:35,230 weet voor een 32-bit machine, dat het geheugen adressen zijn, nogmaals, vier bytes lang, 584 00:27:35,230 --> 00:27:39,620 en dat is het maximumbedrag van geheugenadressen. 585 00:27:39,620 --> 00:27:41,680 >> Ook gegevenstypen - 586 00:27:41,680 --> 00:27:45,020 dit kan iets zijn Nou dat is vermeldenswaard. 587 00:27:45,020 --> 00:27:49,610 De grootte van een gegevenstype afhangt de machine waarmee u werkt. 588 00:27:49,610 --> 00:27:56,760 Dus een char, een karakter, is hoe veel bytes op onze CS50 apparaat? 589 00:27:56,760 --> 00:27:57,980 Een byte. 590 00:27:57,980 --> 00:28:02,310 En het is eigenlijk een byte als goed op een 64-bit machine. 591 00:28:02,310 --> 00:28:05,920 >> En de meeste data types zijn hetzelfde nummer bytes op beide machines. 592 00:28:05,920 --> 00:28:11,620 Maar sommige soorten data zal anders zijn op beide machines. 593 00:28:11,620 --> 00:28:14,590 Dat zou potentieel de enige wat je moet weten. 594 00:28:14,590 --> 00:28:16,710 >> Maar zelfs dat, denk ik, is buiten de grenzen - 595 00:28:16,710 --> 00:28:20,990 Ik ben bijna zeker, als je terugkijkt bij oude quizzen, zegt het, aannemen 596 00:28:20,990 --> 00:28:24,090 codering problemen die u gebruikt een 32-bit machine. 597 00:28:24,090 --> 00:28:26,620 598 00:28:26,620 --> 00:28:30,620 Maar er zijn, om mee te gaan met die in Mocht je geïnteresseerd zijn, zijn er 599 00:28:30,620 --> 00:28:35,920 gegevenstypen die hetzelfde zijn grootte op alle machines. 600 00:28:35,920 --> 00:28:42,670 >> Als je zoiets hebt gezien uint32_t, kunt u of kan 601 00:28:42,670 --> 00:28:43,260 niet hebben gezien dat. 602 00:28:43,260 --> 00:28:44,290 Dat is een soort data. 603 00:28:44,290 --> 00:28:47,570 Dat is te zeggen, zijn 32 bits niet uit wat machine dit is op. 604 00:28:47,570 --> 00:28:50,350 Dus als mensen schrijven draagbaar code, zullen zij waarschijnlijk niet ints gebruiken. 605 00:28:50,350 --> 00:28:53,260 Ze zullen in plaats daarvan gebruik maken van deze andere gegevens types waarvan ze weten dat hetzelfde zal zijn 606 00:28:53,260 --> 00:28:54,780 grootte op elke machine. 607 00:28:54,780 --> 00:28:58,080 608 00:28:58,080 --> 00:28:58,250 Madhu. 609 00:28:58,250 --> 00:29:00,150 >> Madhu: Ik had een vraag over het compilatie proces. 610 00:29:00,150 --> 00:29:04,110 Dus als je het schrijven van een programma dat gebruik maakt van een bibliotheek zoals CS50 of iets 611 00:29:04,110 --> 00:29:06,840 als dat, ik weet dat die bibliotheek moet, op enig moment, worden 612 00:29:06,840 --> 00:29:08,590 gecompileerd en gekoppeld inch 613 00:29:08,590 --> 00:29:13,380 Maar hoeveel van dat gebeurt tijdens het samenstellen van uw programma? 614 00:29:13,380 --> 00:29:15,880 Welk deel van die bibliotheek proces treedt op wanneer u bent 615 00:29:15,880 --> 00:29:18,560 het samenstellen van je eigen programma? 616 00:29:18,560 --> 00:29:24,020 >> JASON HIRSCHHORN: Dus laten we gaan over algemeen de stappen van dit proces. 617 00:29:24,020 --> 00:29:26,280 Je schrijft je. C-bestand. 618 00:29:26,280 --> 00:29:33,530 In je. C bestand, je # include uw header bibliotheken, bijvoorbeeld cs50.h. 619 00:29:33,530 --> 00:29:39,480 Wat doet dat scherp onder lijn doen om uw programma? 620 00:29:39,480 --> 00:29:40,525 Akchar. 621 00:29:40,525 --> 00:29:43,350 >> AKCHAR: Het voegt de prototypes van de functies van de kop 622 00:29:43,350 --> 00:29:45,120 bestanden in de bibliotheken. 623 00:29:45,120 --> 00:29:45,600 >> JASON HIRSCHHORN: Precies. 624 00:29:45,600 --> 00:29:49,870 Het voegt deze functie prototypes aan uw code. 625 00:29:49,870 --> 00:29:55,230 Dus wanneer uw code wordt in gecompileerde de vroege stadia, de compiler weet 626 00:29:55,230 --> 00:29:59,250 dat deze functies echt bestaan, en dat zij ergens zijn gedefinieerd. 627 00:29:59,250 --> 00:30:02,460 Het. H bestanden omvatten niet de definities voor deze functies of hoe 628 00:30:02,460 --> 00:30:03,950 zij feitelijk werken. 629 00:30:03,950 --> 00:30:07,960 Cs50.h bevat gewoon iets dat zegt getString is een echte ding dat 630 00:30:07,960 --> 00:30:09,270 kan gebeuren. 631 00:30:09,270 --> 00:30:14,240 En standardio.h zegt printf is een echte ding dat kan gebeuren. 632 00:30:14,240 --> 00:30:23,190 >> Header zodat je c taal met dit. bestand wordt omgezet in een aantal 633 00:30:23,190 --> 00:30:27,750 machineleesbare code die uiteindelijk wordt omgezet in binaire 634 00:30:27,750 --> 00:30:30,030 code, 0 en 1's. 635 00:30:30,030 --> 00:30:33,590 En dat is de code die uiteindelijk wordt uitgevoerd. 636 00:30:33,590 --> 00:30:38,550 De-l CS50 lijn - bijvoorbeeld, wanneer je het schrijven van Clang - 637 00:30:38,550 --> 00:30:41,830 en dan moet je onder-l CS50, je dat type inch 638 00:30:41,830 --> 00:30:42,180 En je ziet dat. 639 00:30:42,180 --> 00:30:43,890 Als je schrijft te maken, zul je zien dat line-up hier. 640 00:30:43,890 --> 00:30:47,740 En we zullen zien dat in een tweede toen We coderen of later, als we code. 641 00:30:47,740 --> 00:30:50,390 >> Maar dat-l CS50 lijn doet iets een beetje anders dan 642 00:30:50,390 --> 00:30:52,440 de # include cs50.h. 643 00:30:52,440 --> 00:30:56,300 Wat betekent dat-l CS50 lijn doen? 644 00:30:56,300 --> 00:30:56,820 Avi? 645 00:30:56,820 --> 00:31:00,310 >> AVI: Ik wil zeggen dat het linkt de bibliotheek van de functie 646 00:31:00,310 --> 00:31:02,710 noemen, zoals de. o bestanden. 647 00:31:02,710 --> 00:31:08,200 >> JASON HIRSCHHORN: Zo erg dicht, zo niet spot-on. 648 00:31:08,200 --> 00:31:16,220 De-l CS50 neemt het binaire bestand en fuseert met uw binair bestand. 649 00:31:16,220 --> 00:31:21,410 Dus cs50.h, er is geen punt in het draaien cs50.h van C-taal voor elke binaire 650 00:31:21,410 --> 00:31:23,130 keer weer het wordt gebruikt. 651 00:31:23,130 --> 00:31:26,650 Dat zou dom zijn, want dat zou een hoop tijd te verspillen. 652 00:31:26,650 --> 00:31:30,420 Zo is reeds samengesteld en omgezet in een uitvoerbaar. 653 00:31:30,420 --> 00:31:35,430 En nu zal samengevoegd worden met uw dossier aan het eind. 654 00:31:35,430 --> 00:31:38,370 Dus die 1's en 0's gaan te fuseren met uw degenen 655 00:31:38,370 --> 00:31:39,150 en 0 bij het einde. 656 00:31:39,150 --> 00:31:43,670 Dus nu ga je eigenlijk de werkelijke 1's en 0's die hoe getString definiëren, 657 00:31:43,670 --> 00:31:47,890 bijvoorbeeld, werkt, of hoe printf, bijvoorbeeld, werkt. 658 00:31:47,890 --> 00:31:52,750 >> En voor meer informatie, er is een korte compilers dat Nate geeft dat 659 00:31:52,750 --> 00:31:55,410 je zou moeten controleren dat gaat door middel van deze stappen. 660 00:31:55,410 --> 00:31:56,050 Maar - 661 00:31:56,050 --> 00:31:56,560 Ja. 662 00:31:56,560 --> 00:32:01,700 >> STUDENT: Zijn ze altijd in o-bestanden. als ze in de bibliotheek vorm, 663 00:32:01,700 --> 00:32:06,764 klaar om te worden samengevoegd, verbonden - zoals ze zijn in de binaire code? 664 00:32:06,764 --> 00:32:07,600 >> JASON HIRSCHHORN: OK. 665 00:32:07,600 --> 00:32:08,420 Wat - 666 00:32:08,420 --> 00:32:11,780 >> STUDENT: Is dat altijd het geval voor de bibliotheken als je ze koppelen? 667 00:32:11,780 --> 00:32:12,500 >> JASON HIRSCHHORN: Ja. 668 00:32:12,500 --> 00:32:17,300 Dus er is. S-bestanden, die zal worden machine code, die ook zal worden 669 00:32:17,300 --> 00:32:17,975 cryptisch aan u. 670 00:32:17,975 --> 00:32:19,410 U hoeft geen zorgen te maken over die. 671 00:32:19,410 --> 00:32:24,930 Maar in het algemeen, ja, zullen ze in. o-bestanden klaar om te gaan. 672 00:32:24,930 --> 00:32:27,170 >> STUDENT: Dus als je het schip naar een bibliotheek, hoeft u alleen het schip 673 00:32:27,170 --> 00:32:28,880 het. h en de. o? 674 00:32:28,880 --> 00:32:32,210 Je hoeft niet het schip van de. C of de. S. 675 00:32:32,210 --> 00:32:33,070 >> JASON HIRSCHHORN: Dus - 676 00:32:33,070 --> 00:32:36,260 en dat is in dit kort ook, als Deze informatie lijkt te komen een 677 00:32:36,260 --> 00:32:36,700 beetje snel. 678 00:32:36,700 --> 00:32:39,870 Maar de korte over compilers praat over dit zo goed. 679 00:32:39,870 --> 00:32:43,290 Als je schip een bibliotheek, als je schip het. h, de header file, die 680 00:32:43,290 --> 00:32:46,290 functie prototypes, en de 1 en 0's, dat is alles wat je nodig hebt om te geven. 681 00:32:46,290 --> 00:32:50,640 U hoeft niet op te geven hoe de functie werkt, de c-bestand.. 682 00:32:50,640 --> 00:32:56,360 Omdat de punt van abstractie, of wijzen API's, het punt deze SPL, 683 00:32:56,360 --> 00:32:59,650 de Stanford draagbare bibliotheek, het is voor u om geen zorgen te maken over hoe de nieuwe 684 00:32:59,650 --> 00:33:04,220 GRect werkt, of hoe werkt bewegen, of hoe werkt voegen. 685 00:33:04,220 --> 00:33:06,520 Alles wat je moet weten is dat add is een functie die u kunt 686 00:33:06,520 --> 00:33:08,880 gebruikt, en het dit doet. 687 00:33:08,880 --> 00:33:12,760 Zodat je echt niet nodig om te weten hoe het is geschreven in C. Je hoeft alleen maar te 688 00:33:12,760 --> 00:33:15,460 weten, hier zijn de functies, wat ze doen, en hier zijn de de 1 en 0 689 00:33:15,460 --> 00:33:18,870 als je echt wilt om ze te gebruiken. 690 00:33:18,870 --> 00:33:19,530 >> Cool. 691 00:33:19,530 --> 00:33:26,980 Nog meer vragen over compilers of andere onderwerpen op het bord? 692 00:33:26,980 --> 00:33:30,300 >> STUDENT: Ik heb een vraag van uitvoering van recursieve functies. 693 00:33:30,300 --> 00:33:31,170 Een vraag over recursie. 694 00:33:31,170 --> 00:33:33,030 Ik had een gevoel dat zou komen. 695 00:33:33,030 --> 00:33:38,310 Dus laten we snel gaan door recursie met specifieke 696 00:33:38,310 --> 00:33:40,690 bijvoorbeeld een faculteit-functie. 697 00:33:40,690 --> 00:33:44,920 Omdat dit een voorbeeld dat vaak komt of wordt gebruikt 698 00:33:44,920 --> 00:33:46,170 te illustreren recursie. 699 00:33:46,170 --> 00:33:52,390 700 00:33:52,390 --> 00:33:56,410 >> Zo "4!" wordt gelezen als 4 faculteit. 701 00:33:56,410 --> 00:33:59,120 En wat betekent 4 faculteit betekenen? 702 00:33:59,120 --> 00:34:00,696 Wat doet dat? 703 00:34:00,696 --> 00:34:02,235 Hoe doe je 4 faculteit berekenen? 704 00:34:02,235 --> 00:34:05,250 705 00:34:05,250 --> 00:34:07,960 4 maal 3 maal 2 maal 1. 706 00:34:07,960 --> 00:34:11,889 >> Dus een andere manier om 4 faculteit schrijven is om dit te schrijven. 707 00:34:11,889 --> 00:34:16,780 708 00:34:16,780 --> 00:34:19,022 4 keer 3 faculteit. 709 00:34:19,022 --> 00:34:22,080 Omdat 3 faculteit is 3 maal 2 maal 1. 710 00:34:22,080 --> 00:34:27,580 Dus 4 keer 3 faculteit is 4 tijden 3 keer 2 keer 1. 711 00:34:27,580 --> 00:34:32,679 Dit is de reden waarom faculteit is een geweldige kandidaat voor recursie, omdat het 712 00:34:32,679 --> 00:34:36,630 duidelijk dat er iets is dat gebeurt over en over en over op een 713 00:34:36,630 --> 00:34:39,820 kleiner aantal dingen tot je het einde bereikt. 714 00:34:39,820 --> 00:34:42,570 Wanneer u 1 te bereiken, 1 faculteit is 1. 715 00:34:42,570 --> 00:34:43,719 Je kunt niet veel verder. 716 00:34:43,719 --> 00:34:47,219 0 factoriële wordt ook gedefinieerd als 1. 717 00:34:47,219 --> 00:34:50,679 Dus als je naar 1 of 0, je bent aan het eind, en u kunt 718 00:34:50,679 --> 00:34:53,219 start gaan back-up. 719 00:34:53,219 --> 00:34:59,540 Dus als we wilden een recursieve schrijven functie om een ​​factorial berekenen, 720 00:34:59,540 --> 00:35:02,170 we gaan wat schrijven pseudocode voor dat nu. 721 00:35:02,170 --> 00:35:03,300 Voordat we schrijven dat pseudo - 722 00:35:03,300 --> 00:35:05,660 Ik zal jullie geven een paar minuten aan de pseudo-code schrijven of denk gewoon 723 00:35:05,660 --> 00:35:09,600 over het - er zijn twee dingen elke recursieve functie nodig heeft. 724 00:35:09,600 --> 00:35:12,530 Wat zijn die twee dingen? 725 00:35:12,530 --> 00:35:13,220 >> JACK: Het heeft zichzelf noemen. 726 00:35:13,220 --> 00:35:13,680 >> JASON HIRSCHHORN: Noah? 727 00:35:13,680 --> 00:35:14,460 Oh, Jack. 728 00:35:14,460 --> 00:35:15,100 Ga je gang. 729 00:35:15,100 --> 00:35:16,640 >> JACK: Het heeft zichzelf noemen. 730 00:35:16,640 --> 00:35:19,220 >> JASON HIRSCHHORN: Dus een recursieve functie vereist een recursieve aanroep, een 731 00:35:19,220 --> 00:35:20,220 op zichzelf te vestigen. 732 00:35:20,220 --> 00:35:20,770 Dat is een. 733 00:35:20,770 --> 00:35:21,510 En wat is het andere ding? 734 00:35:21,510 --> 00:35:22,250 >> JACK: Een base case. 735 00:35:22,250 --> 00:35:23,780 >> JASON HIRSCHHORN: Een base case. 736 00:35:23,780 --> 00:35:26,940 Een base case is, hier is als we stoppen. 737 00:35:26,940 --> 00:35:29,510 Dus uw functie wordt aangeroepen. 738 00:35:29,510 --> 00:35:31,410 Het nulalternatief komt eerst. 739 00:35:31,410 --> 00:35:33,710 Je wilt weten of je op het einde. 740 00:35:33,710 --> 00:35:37,110 En als je niet aan het eind, u maak uw recursieve aanroep. 741 00:35:37,110 --> 00:35:39,880 En je door deze functie opnieuw, controleer je base case weer. 742 00:35:39,880 --> 00:35:42,575 Als je niet het einde, je maakt een recursieve aanroep, 743 00:35:42,575 --> 00:35:44,130 et cetera, et cetera. 744 00:35:44,130 --> 00:35:47,110 >> Daarom recursieve functies altijd die base gevallen en die moeten 745 00:35:47,110 --> 00:35:48,210 recursieve oproepen. 746 00:35:48,210 --> 00:35:51,280 Als je niet een recursieve aanroep hebben, zou een recursieve functie. 747 00:35:51,280 --> 00:35:53,210 Als je een base case had, je voor altijd zou gaan en 748 00:35:53,210 --> 00:35:54,780 geen einde zijn. 749 00:35:54,780 --> 00:35:57,870 En het basisscenario komt altijd op de eerste, omdat je altijd wilt controleren 750 00:35:57,870 --> 00:36:00,420 als je aan het eind eerste. 751 00:36:00,420 --> 00:36:04,770 Dus voordat we doen wat pseudocode, waarom ga je niet even de tijd nemen om na te denken over 752 00:36:04,770 --> 00:36:09,360 hoe een recursieve faculteit-functie worden geschreven? 753 00:36:09,360 --> 00:36:23,340 754 00:36:23,340 --> 00:36:26,010 >> Ook, zo veel als je aan het doen bent, het schrijven het uit op een vel papier is 755 00:36:26,010 --> 00:36:27,960 wat je gaat te hebben om doen op de quiz morgen. 756 00:36:27,960 --> 00:36:32,160 Dus waarschijnlijk goede praktijken te maken ervoor dat de code die u aan het schrijven bent 757 00:36:32,160 --> 00:36:34,420 neer op een vel papier - 758 00:36:34,420 --> 00:36:35,160 of kun je dat doen. 759 00:36:35,160 --> 00:36:36,710 Je weet waar de puntkomma zijn. 760 00:36:36,710 --> 00:36:37,660 Herinnert u zich de syntaxis. 761 00:36:37,660 --> 00:36:40,400 Omdat je niet in staat zijn om een compiler vertellen dat je een fout maakte. 762 00:36:40,400 --> 00:37:02,356 763 00:37:02,356 --> 00:37:07,240 >> Ook volgens die lijnen, morgen, wanneer je hebt codering problemen, als u 764 00:37:07,240 --> 00:37:11,490 gehaast voor tijd, of als je heel verward hoe je zou moeten 765 00:37:11,490 --> 00:37:16,030 schrijf de bijzonder ding in c, het zou behoove u pseudo-code te schrijven 766 00:37:16,030 --> 00:37:18,160 of schrijf commentaar in ook. 767 00:37:18,160 --> 00:37:21,940 Omdat er gedeeltelijke krediet voor een Veel van de vragen over de quiz. 768 00:37:21,940 --> 00:37:24,840 Dus je zou kunnen worden gehaast, of u misschien worden verward. 769 00:37:24,840 --> 00:37:28,030 Schrijven in commentaar of pseudo-code zijn vaak manieren die u 770 00:37:28,030 --> 00:37:29,360 kan gedeeltelijk krediet te krijgen. 771 00:37:29,360 --> 00:37:31,440 >> Dus niet iets laten leeg op de quiz. 772 00:37:31,440 --> 00:37:33,490 Er is geen sancties voor zetten dingen in 773 00:37:33,490 --> 00:37:37,650 In feite, de invoering van pseudo-code of reacties gaat de grader helpen 774 00:37:37,650 --> 00:37:40,410 erachter te komen of je eigenlijk wel wat je het over hebt, en misschien award 775 00:37:40,410 --> 00:37:42,030 u een aantal gedeeltelijke credit voor. 776 00:37:42,030 --> 00:37:44,510 >> Ook langs die lijnen, duidelijk schrijven. 777 00:37:44,510 --> 00:37:47,650 Als we kunnen niet echt wat je aan het schrijven bent, we gaan niet om u te bellen 778 00:37:47,650 --> 00:37:49,900 om middernacht morgen figuur wat je schreef. 779 00:37:49,900 --> 00:37:51,520 We gaan gewoon opstijgen punten. 780 00:37:51,520 --> 00:37:56,570 Schrijf duidelijk zodat we kunnen horen, of liever, we kunnen lezen wat je schreef. 781 00:37:56,570 --> 00:38:00,230 >> En als het zegt twee zinnen, niet een paragraaf niet schrijven. 782 00:38:00,230 --> 00:38:02,280 Volg de instructies. 783 00:38:02,280 --> 00:38:03,500 Schrijf duidelijk. 784 00:38:03,500 --> 00:38:07,720 En schrijf in die commentaar of pseudocode voor vragen die kunnen 785 00:38:07,720 --> 00:38:10,270 award gedeeltelijke credit. 786 00:38:10,270 --> 00:38:12,520 >> OK, laten we naar faculteit. 787 00:38:12,520 --> 00:38:15,000 We hebben dus een functie faculteit. 788 00:38:15,000 --> 00:38:18,400 789 00:38:18,400 --> 00:38:21,550 Als ik dit ook daadwerkelijk te schrijven in C, wat heb ik nodig voor de naam te zetten 790 00:38:21,550 --> 00:38:22,800 van de functie? 791 00:38:22,800 --> 00:38:24,880 792 00:38:24,880 --> 00:38:30,060 De return type, die in dit geval is, zullen we het geven int. 793 00:38:30,060 --> 00:38:35,450 En vervolgens binnen de accolades, is wat er binnen de accolades voor 794 00:38:35,450 --> 00:38:36,850 een functie? 795 00:38:36,850 --> 00:38:37,950 >> STUDENTEN: argument type. 796 00:38:37,950 --> 00:38:39,150 >> JASON HIRSCHHORN: Haar argumenten. 797 00:38:39,150 --> 00:38:42,680 Dus faculteit zal waarschijnlijk met een extra argument. 798 00:38:42,680 --> 00:38:44,500 Het zal het waarschijnlijk slechts een argument. 799 00:38:44,500 --> 00:38:49,450 En we zeggen het duurt x een geheel getal genoemd. 800 00:38:49,450 --> 00:38:52,770 En nogmaals, bij het schrijven van het prototype van een functie of beschreven functie 801 00:38:52,770 --> 00:38:57,110 in uw code voor het definiëren, je schrijf de gegevenstype en naam 802 00:38:57,110 --> 00:39:01,370 die variabele alleen die functie. 803 00:39:01,370 --> 00:39:06,350 Zo kunt u een getal overgaan in deze functie, zal het worden aangeduid als x 804 00:39:06,350 --> 00:39:07,340 intern. 805 00:39:07,340 --> 00:39:08,755 >> Wij hebben onze faculteit-functie. 806 00:39:08,755 --> 00:39:12,030 807 00:39:12,030 --> 00:39:15,850 We moeten twee dingen, een base case en een recursieve aanroep. 808 00:39:15,850 --> 00:39:20,900 Wat is het basisscenario voor faculteit? 809 00:39:20,900 --> 00:39:24,850 Iemand die schreef het uit en wie niet nog gesproken, wat is de basis 810 00:39:24,850 --> 00:39:26,100 geval voor faculteit? 811 00:39:26,100 --> 00:39:28,400 812 00:39:28,400 --> 00:39:30,930 >> STUDENT: Als n kleiner is dan 2, retour 1. 813 00:39:30,930 --> 00:39:33,520 >> JASON HIRSCHHORN: Als n minder dan 2, retour 1. 814 00:39:33,520 --> 00:39:37,216 Dat vind ik leuk, want dat zorgt 0 en 1. 815 00:39:37,216 --> 00:39:45,290 Dus we doen x <2, retour 1. 816 00:39:45,290 --> 00:39:47,870 Als we krijgen doorgegeven 0, als we afgelopen 1, zal deze functie 817 00:39:47,870 --> 00:39:49,790 onmiddellijk terug te keren 1. 818 00:39:49,790 --> 00:39:54,020 Als we voorbij een getal groter dan of gelijk aan 2, gaan we 819 00:39:54,020 --> 00:39:55,370 hebben onze recursieve aanroep. 820 00:39:55,370 --> 00:39:57,855 >> En dus hoe is dat gaat werken? 821 00:39:57,855 --> 00:40:01,070 Kan iemand anders die op dit werkte die heeft nog niet gesproken mij de 822 00:40:01,070 --> 00:40:07,380 recursieve aanroep voor deze functie in pseudocode? 823 00:40:07,380 --> 00:40:10,770 Als we krijgen doorgegeven in een aantal x en het is groter dan 2, welke 824 00:40:10,770 --> 00:40:13,370 willen we doen? 825 00:40:13,370 --> 00:40:17,930 We hebben ook een voorbeeld geschreven over de kant die je een hint zou kunnen geven. 826 00:40:17,930 --> 00:40:20,770 >> STUDENT: Call x maal de faculteit van x min 1? 827 00:40:20,770 --> 00:40:22,020 >> JASON HIRSCHHORN: Precies goed. 828 00:40:22,020 --> 00:40:24,610 829 00:40:24,610 --> 00:40:37,750 We gaan x keer terug de faculteit van x minus 1. 830 00:40:37,750 --> 00:40:41,810 En dat, hoewel ik schreef, Kortom, wat je zei in het Engels, 831 00:40:41,810 --> 00:40:44,580 deze faculteit-functie zal weer gecalled. 832 00:40:44,580 --> 00:40:46,320 Het zal voeren op x minus 1. 833 00:40:46,320 --> 00:40:49,320 Het zal terug te keren met een aantal integer en dan is het wel deze twee vermenigvuldigen 834 00:40:49,320 --> 00:40:52,050 elkaar en die waarde zal terug naar wat het ook heet 835 00:40:52,050 --> 00:40:55,010 faculteit-functie, die macht zijn een ander voorbeeld van 836 00:40:55,010 --> 00:40:58,420 deze faculteit-functie. 837 00:40:58,420 --> 00:41:01,360 >> Dat is een voorbeeld van een recursieve functie een zeer 838 00:41:01,360 --> 00:41:02,530 eenvoudige recursieve functie. 839 00:41:02,530 --> 00:41:04,530 Maar de meeste van hen zal zijn als dit. 840 00:41:04,530 --> 00:41:11,170 Als u graag een goede recursieve uitdaging voor de quiz, proberen codering 841 00:41:11,170 --> 00:41:13,230 binary search recursief. 842 00:41:13,230 --> 00:41:18,950 Want als je binaire zoektocht naar deed probleem set drie, heb je waarschijnlijk deed het 843 00:41:18,950 --> 00:41:21,730 iteratief in een while-lus. 844 00:41:21,730 --> 00:41:23,700 >> Maar het kan ook worden geschreven recursief. 845 00:41:23,700 --> 00:41:26,310 Je gaat nodig hebben om uw eigen schrijven aparte functie die sommige neemt 846 00:41:26,310 --> 00:41:29,020 verschillende command-line argumenten - of geen command-line argumenten, sommige 847 00:41:29,020 --> 00:41:30,910 anders gewoon normale argumenten. 848 00:41:30,910 --> 00:41:33,870 Maar je kon binary search schrijven recursief ook. 849 00:41:33,870 --> 00:41:36,190 >> STUDENT: Dus kan je ook hebben geschreven, in plaats van x minus 1, u 850 00:41:36,190 --> 00:41:39,502 kunnen ook geschreven x min minus, of je zou kunnen hebben 851 00:41:39,502 --> 00:41:40,830 geschreven minus minus x. 852 00:41:40,830 --> 00:41:44,740 Kun je uitleggen heel snel waarom die zouden verschillende dingen zijn, 853 00:41:44,740 --> 00:41:49,510 zoals wat het verschil is tussen x minus minus en minus minus x? 854 00:41:49,510 --> 00:41:51,320 >> JASON HIRSCHHORN: Nee, ik ben niet in te gaan op dat om te gaan. 855 00:41:51,320 --> 00:41:55,500 Maar ik zal met je praten over het na klasse. x minus minus minus minus x 856 00:41:55,500 --> 00:41:57,780 verlagen x door 1. 857 00:41:57,780 --> 00:41:59,090 Maar ze doen het een beetje anders. 858 00:41:59,090 --> 00:42:00,340 Maar ik wil niet op ingaan. 859 00:42:00,340 --> 00:42:04,330 860 00:42:04,330 --> 00:42:09,090 Andere vragen over recursie of deze functie? 861 00:42:09,090 --> 00:42:10,140 Dat is niet echt eens pseudocode. 862 00:42:10,140 --> 00:42:15,060 Dat is eigenlijk de code in C U zou schrijven voor dit. 863 00:42:15,060 --> 00:42:19,393 >> OK, andere vragen over onderwerpen die hier? 864 00:42:19,393 --> 00:42:19,864 Yeah. 865 00:42:19,864 --> 00:42:23,130 >> STUDENT: Ik heb een kort overzicht van floating point en precisie. 866 00:42:23,130 --> 00:42:24,260 >> JASON HIRSCHHORN: Drijvende punt en precisie. 867 00:42:24,260 --> 00:42:26,920 Kan iemand echt snel geef me een overzicht van 868 00:42:26,920 --> 00:42:28,210 floating point en precisie? 869 00:42:28,210 --> 00:42:30,420 Jullie moesten dit voor uw doen probleem te stellen, dus je bent helemaal 870 00:42:30,420 --> 00:42:31,700 vertrouwd mee. 871 00:42:31,700 --> 00:42:35,090 Of toch niet allemaal. 872 00:42:35,090 --> 00:42:36,602 Iedereen? 873 00:42:36,602 --> 00:42:39,530 Geef me een slag plek. 874 00:42:39,530 --> 00:42:40,750 Floating point en precisie. 875 00:42:40,750 --> 00:42:42,380 Wat is het probleem? 876 00:42:42,380 --> 00:42:42,960 Ja. 877 00:42:42,960 --> 00:42:43,680 Victoria? 878 00:42:43,680 --> 00:42:44,480 >> VANESSA: Vanessa. 879 00:42:44,480 --> 00:42:45,285 >> JASON HIRSCHHORN: Vanessa. 880 00:42:45,285 --> 00:42:45,680 Sorry. 881 00:42:45,680 --> 00:42:51,550 >> VANESSA: Er is maar een eindig aantal getallen kunnen worden weergegeven 882 00:42:51,550 --> 00:42:57,930 omdat je op een, in onze geval een 32-bits systeem. 883 00:42:57,930 --> 00:43:03,080 Dus je soort te make-up een aantal nummers. 884 00:43:03,080 --> 00:43:03,910 >> JASON HIRSCHHORN: Dus dat is precies goed. 885 00:43:03,910 --> 00:43:08,110 Er zijn maar een beperkt aantal nummers die kunnen worden weergegeven. 886 00:43:08,110 --> 00:43:11,770 Als u vermenigvuldigen twee zeer grote aantallen, kan het bedrag overstromen 887 00:43:11,770 --> 00:43:13,950 van ruimten moet je vertegenwoordigen een geheel getal. 888 00:43:13,950 --> 00:43:17,930 Daarom soms gebruiken we een lange lange in plaats van een int. 889 00:43:17,930 --> 00:43:19,210 Dat heeft meer ruimte. 890 00:43:19,210 --> 00:43:21,210 Dat kan een groter aantal houden. 891 00:43:21,210 --> 00:43:24,310 >> Floating point precisie heeft te maken met , maar heeft ook te maken met de 892 00:43:24,310 --> 00:43:29,300 Dat decimale getallen niet vast vertegenwoordigd. 893 00:43:29,300 --> 00:43:29,540 Sorry. 894 00:43:29,540 --> 00:43:31,280 Laat ik deze back-up. 895 00:43:31,280 --> 00:43:36,610 Het decimale getal 1.0 is niet altijd vertegenwoordigd zoals je zou verwachten, 896 00:43:36,610 --> 00:43:40,770 1,000000000. 897 00:43:40,770 --> 00:43:50,360 Soms wordt voorgesteld als 1,000000001 of 0,999999999. 898 00:43:50,360 --> 00:43:52,780 Het kan ook 89 worden geworpen daar ergens. 899 00:43:52,780 --> 00:43:56,560 Dus die decimale getallen zijn niet vertegenwoordigd precies zoals je zou 900 00:43:56,560 --> 00:43:58,430 verwachten dat ze vertegenwoordigd worden. 901 00:43:58,430 --> 00:44:00,010 >> Dus probleem set - 902 00:44:00,010 --> 00:44:00,860 was het twee? - 903 00:44:00,860 --> 00:44:05,290 probleem set twee, waar we behandeld floating point getallen, toen we wilden 904 00:44:05,290 --> 00:44:08,690 hen te vertegenwoordigen precies wat we wilden hen te vertegenwoordigen het aantal 905 00:44:08,690 --> 00:44:12,860 van centen, of het aantal centen, we ze vermenigvuldigen met 100. 906 00:44:12,860 --> 00:44:14,750 We rond hen. 907 00:44:14,750 --> 00:44:18,660 En dan snijden we alles af achter de komma. 908 00:44:18,660 --> 00:44:22,020 Dat was om ervoor te zorgen dat ze zouden eigenlijk gelijk precies wat we wilden 909 00:44:22,020 --> 00:44:22,410 ze gelijk. 910 00:44:22,410 --> 00:44:26,870 >> Want als je iets nemen dat een vlotter en zet hem in een int, u 911 00:44:26,870 --> 00:44:29,860 afgesneden alles naar rechts van de komma. 912 00:44:29,860 --> 00:44:33,900 Omdat er een aantal floating point onnauwkeurigheid, 100.000 zou kunnen zijn 913 00:44:33,900 --> 00:44:37,440 weergegeven als 99,999999999. 914 00:44:37,440 --> 00:44:40,350 En als je gewoon afgesneden alles de juiste meteen, je gaat 915 00:44:40,350 --> 00:44:41,600 krijgen het verkeerde nummer. 916 00:44:41,600 --> 00:44:44,050 917 00:44:44,050 --> 00:44:44,180 Yeah. 918 00:44:44,180 --> 00:44:45,290 >> STUDENT: Ik had een vraag over casting. 919 00:44:45,290 --> 00:44:47,500 Welke volgorde komt het voor in? 920 00:44:47,500 --> 00:44:54,480 Indien u vlotter zou doen, beugels, 1 gedeeld met 10, doet het 1 gedeeld door 10, 921 00:44:54,480 --> 00:44:58,910 dan krijg 0.1, zet het in een float? 922 00:44:58,910 --> 00:45:01,470 >> JASON HIRSCHHORN: Als je dat doet vlotter 1 gedeeld door 10 - 923 00:45:01,470 --> 00:45:02,550 >> STUDENT: Ja, en daarna gelijk aan - 924 00:45:02,550 --> 00:45:04,240 goed, het zou normaal heb het gelijk in - 925 00:45:04,240 --> 00:45:04,690 Yeah. 926 00:45:04,690 --> 00:45:06,760 Wil je het een float te maken, toch? 927 00:45:06,760 --> 00:45:12,790 >> JASON HIRSCHHORN: OK, dus we gaan dat gebruiken om overgaan in het uitzoeken 928 00:45:12,790 --> 00:45:15,390 de antwoorden op deze vragen door codering. 929 00:45:15,390 --> 00:45:18,180 Omdat je waarschijnlijk een hoop deze minuut vragen, en een goede manier 930 00:45:18,180 --> 00:45:19,100 op te lossen is door middel van codering. 931 00:45:19,100 --> 00:45:21,320 Dus we gaan dit nu te coderen, en dan gaan we terug te gaan en 932 00:45:21,320 --> 00:45:24,020 Code De vraag die je had. 933 00:45:24,020 --> 00:45:24,950 >> Dus de eerste regel - 934 00:45:24,950 --> 00:45:29,390 Ik had het niet hebben geschreven - wat is het eerste wat we willen doen als we 935 00:45:29,390 --> 00:45:32,250 het openen van een nieuw bestand in gedit? 936 00:45:32,250 --> 00:45:34,190 >> STUDENT: Opnemen. 937 00:45:34,190 --> 00:45:35,920 >> JASON HIRSCHHORN: Neem wat? 938 00:45:35,920 --> 00:45:37,952 >> STUDENT: CS50 bibliotheek. 939 00:45:37,952 --> 00:45:39,920 >> JASON HIRSCHHORN: OK. 940 00:45:39,920 --> 00:45:42,590 Wat moeten we nemen? 941 00:45:42,590 --> 00:45:46,820 We gaan gewoon om te controleren wat er gebeurt als je iets naar een float werpen. 942 00:45:46,820 --> 00:45:48,605 Maar wat hebben we nodig op te nemen indien we gaat om een ​​C programma te schrijven? 943 00:45:48,605 --> 00:45:49,300 >> STUDENT: Standaard I / O. 944 00:45:49,300 --> 00:45:50,625 >> JASON HIRSCHHORN: stdio.h. 945 00:45:50,625 --> 00:45:54,880 We eigenlijk niet nodig, want dit programma, cs50.h, ook al is het 946 00:45:54,880 --> 00:45:55,920 altijd nuttig op te nemen. 947 00:45:55,920 --> 00:45:58,260 Maar we hebben altijd stdio.h nodig. 948 00:45:58,260 --> 00:45:59,660 >> STUDENT: Bij het coderen in C? 949 00:45:59,660 --> 00:46:15,770 >> JASON HIRSCHHORN: Bij het coderen in C. 950 00:46:15,770 --> 00:46:17,090 >> Dus ik sla het op als dit. C bestand. 951 00:46:17,090 --> 00:46:18,590 Ik krijg een aantal leuke syntax highlighting. 952 00:46:18,590 --> 00:46:22,890 Ik schreef leegte in main. 953 00:46:22,890 --> 00:46:24,792 Wat betekent leegte betekenen? 954 00:46:24,792 --> 00:46:26,740 >> STUDENT: Vereist geen rekening command-line argumenten. 955 00:46:26,740 --> 00:46:28,900 >> JASON HIRSCHHORN: Void betekent in dit geval is het belangrijkste niet nemen 956 00:46:28,900 --> 00:46:29,700 command-line argumenten. 957 00:46:29,700 --> 00:46:32,720 In andere gevallen is de betreffende functie geen command-line argumenten nemen. 958 00:46:32,720 --> 00:46:36,560 Of de functie, als ik leegte schrijven main (void), dat zou zeggen voornaamste's 959 00:46:36,560 --> 00:46:38,460 niets terug. 960 00:46:38,460 --> 00:46:39,960 Dus leegte betekent gewoon niets. 961 00:46:39,960 --> 00:46:42,510 Wat zou ik schrijven als ik neem command-line argumenten? 962 00:46:42,510 --> 00:46:45,250 963 00:46:45,250 --> 00:46:47,150 >> STUDENT: int boog c touwtje boog v. 964 00:46:47,150 --> 00:46:49,055 >> JASON HIRSCHHORN: int argc snaar argv. 965 00:46:49,055 --> 00:46:54,050 966 00:46:54,050 --> 00:46:55,572 Is dat zo? 967 00:46:55,572 --> 00:46:58,720 >> STUDENT: Het is char ster argv haakjes. 968 00:46:58,720 --> 00:47:01,730 >> JASON HIRSCHHORN: Dus kan je schrijven snaar argv beugels of char ster argv 969 00:47:01,730 --> 00:47:03,710 haakjes, maar je moet de beugels. 970 00:47:03,710 --> 00:47:06,290 Omdat argv is een array snaren, herinneren. 971 00:47:06,290 --> 00:47:07,360 Het is niet alleen een string. 972 00:47:07,360 --> 00:47:10,350 Dus snaar argv is, hier is een snaar genoemd argv. 973 00:47:10,350 --> 00:47:13,630 String argv haakjes, hier is een array van strings. 974 00:47:13,630 --> 00:47:17,865 Dus int argc snaar argv beugels zou iets zijn dat ik 975 00:47:17,865 --> 00:47:18,810 zou waarschijnlijk te schrijven. 976 00:47:18,810 --> 00:47:23,050 >> Dus u wilde opslaan in een geheel getal? 977 00:47:23,050 --> 00:47:24,285 >> STUDENT: Ja, integer. 978 00:47:24,285 --> 00:47:25,840 Of in een float. 979 00:47:25,840 --> 00:47:26,710 >> JASON HIRSCHHORN: In een vlotter? 980 00:47:26,710 --> 00:47:30,790 Zoals, float x gelijk is aan 1 gedeeld door 10. 981 00:47:30,790 --> 00:47:32,040 >> JASON HIRSCHHORN: OK. 982 00:47:32,040 --> 00:47:40,160 983 00:47:40,160 --> 00:47:42,240 Hoe print ik een vlotter in printf? 984 00:47:42,240 --> 00:47:45,100 985 00:47:45,100 --> 00:47:46,714 Wat? 986 00:47:46,714 --> 00:47:47,560 >> STUDENT:% f. 987 00:47:47,560 --> 00:47:48,300 >> JASON HIRSCHHORN:% f. 988 00:47:48,300 --> 00:47:50,810 Wat is een geheel getal? 989 00:47:50,810 --> 00:47:52,110 d of i. 990 00:47:52,110 --> 00:47:53,000 Wat is een string? 991 00:47:53,000 --> 00:47:54,240 >> STUDENT: s. 992 00:47:54,240 --> 00:47:56,140 >> JASON HIRSCHHORN: s. 993 00:47:56,140 --> 00:47:57,550 Hoe krijg ik een nieuwe lijn? 994 00:47:57,550 --> 00:47:58,800 >> STUDENT: Backslash n. 995 00:47:58,800 --> 00:48:04,610 996 00:48:04,610 --> 00:48:07,100 >> JASON HIRSCHHORN: Wat moet ik terugkeren als belangrijkste runs correct? 997 00:48:07,100 --> 00:48:08,360 >> STUDENT: 0. 998 00:48:08,360 --> 00:48:09,430 Moet ik die lijn te schrijven, hoewel? 999 00:48:09,430 --> 00:48:10,170 >> STUDENT: Nee. 1000 00:48:10,170 --> 00:48:11,513 OK, we zullen niet schrijven, dan. 1001 00:48:11,513 --> 00:48:16,450 1002 00:48:16,450 --> 00:48:17,190 Kan iedereen lezen dat? 1003 00:48:17,190 --> 00:48:18,485 Het ziet er een beetje klein. 1004 00:48:18,485 --> 00:48:20,160 Kan iedereen zien, of moet Ik maak het groter? 1005 00:48:20,160 --> 00:48:23,480 1006 00:48:23,480 --> 00:48:25,100 Ik denk dat voor de camera, zorgen wij ervoor het een beetje groter, dat wel. 1007 00:48:25,100 --> 00:48:35,750 1008 00:48:35,750 --> 00:48:38,410 >> JASON HIRSCHHORN: Als ik wil kan ik dit uitschakelen . C bestand in een uitvoerbaar, wat 1009 00:48:38,410 --> 00:48:39,260 schrijf ik? 1010 00:48:39,260 --> 00:48:41,610 >> STUDENT: Maak test. 1011 00:48:41,610 --> 00:48:42,080 >> JASON HIRSCHHORN: Sorry? 1012 00:48:42,080 --> 00:48:42,790 >> STUDENT: Maak test. 1013 00:48:42,790 --> 00:48:44,040 >> JASON HIRSCHHORN: Maak test. 1014 00:48:44,040 --> 00:48:46,700 1015 00:48:46,700 --> 00:48:48,410 We hadden het over deze lijn eerder. 1016 00:48:48,410 --> 00:48:49,140 Clang. 1017 00:48:49,140 --> 00:48:51,270 Wat is clang? 1018 00:48:51,270 --> 00:48:52,200 De naam van de compiler. 1019 00:48:52,200 --> 00:48:53,920 Wat is de lijn? 1020 00:48:53,920 --> 00:48:55,580 >> STUDENT: Stelt het voor het gebruik van GDB. 1021 00:48:55,580 --> 00:48:59,230 >> JASON HIRSCHHORN: Sets het voor het gebruik van GDB. 1022 00:48:59,230 --> 00:49:02,338 Deze lijn, wat is dat? 1023 00:49:02,338 --> 00:49:03,290 >> STUDENT: Broncode. 1024 00:49:03,290 --> 00:49:06,010 >> JASON HIRSCHHORN: Dat is de bronbestand, de c-bestand.. 1025 00:49:06,010 --> 00:49:08,150 Wat hebben deze twee lijnen doen? 1026 00:49:08,150 --> 00:49:10,245 Of deze twee niet lijnen. 1027 00:49:10,245 --> 00:49:12,300 >> STUDENT: Het namen het te testen. 1028 00:49:12,300 --> 00:49:15,410 >> JASON HIRSCHHORN: Dus het dashboard o zegt: noem het iets anders. 1029 00:49:15,410 --> 00:49:16,790 En hier je belt het test. 1030 00:49:16,790 --> 00:49:18,900 Als ik had dat niet in, wat zou het noemen dit? 1031 00:49:18,900 --> 00:49:20,260 >> STUDENT: a.out. 1032 00:49:20,260 --> 00:49:22,340 >> JASON HIRSCHHORN: a.out. 1033 00:49:22,340 --> 00:49:25,366 Wat betekent dit? 1034 00:49:25,366 --> 00:49:27,670 >> STUDENT: Links de wiskunde bibliotheek. 1035 00:49:27,670 --> 00:49:29,550 >> JASON HIRSCHHORN: Het verbindt in de wiskunde bibliotheek. 1036 00:49:29,550 --> 00:49:32,880 We hadden niet de wiskunde bibliotheek, maar want dat is zo gewoon, ze hebben 1037 00:49:32,880 --> 00:49:35,780 schriftelijke maken om altijd de wiskunde bibliotheek. 1038 00:49:35,780 --> 00:49:39,050 En ook, dit omvat de CS50 bibliotheek. 1039 00:49:39,050 --> 00:49:43,010 >> OK, dus als we een lijst hebben we nu een uitvoerbaar bestand genaamd test. 1040 00:49:43,010 --> 00:49:45,150 Om het uit te voeren, ik schrijf test. 1041 00:49:45,150 --> 00:49:48,330 Ik zie dat mijn floating point, zoals verwacht, gelijk aan 0. 1042 00:49:48,330 --> 00:49:50,890 1043 00:49:50,890 --> 00:49:51,590 Doet dat - 1044 00:49:51,590 --> 00:49:52,060 zo - 1045 00:49:52,060 --> 00:49:55,210 >> STUDENT: Dan drijven als je nu, zoals je het gecast als float - 1046 00:49:55,210 --> 00:49:56,870 >> JASON HIRSCHHORN: Zet de 1 om een ​​vlotter? 1047 00:49:56,870 --> 00:49:59,180 >> STUDENT: Nee, werpe de volledige ding - 1048 00:49:59,180 --> 00:49:59,500 ja. 1049 00:49:59,500 --> 00:50:02,460 Als je net deed dat, zou die het 0.1? 1050 00:50:02,460 --> 00:50:07,170 >> JASON HIRSCHHORN: OK, dus echt snel, 1 gedeeld door 10, die zijn 1051 00:50:07,170 --> 00:50:08,690 integers verdeeld. 1052 00:50:08,690 --> 00:50:13,580 Dus als je gehele getallen verdelen, ze zijn 0, en je bespaart dat 0 in een 1053 00:50:13,580 --> 00:50:17,170 drijven, omdat de schuine streep gewoon integer divisie. 1054 00:50:17,170 --> 00:50:19,180 Dus nu zijn we iets te draaien in een float. 1055 00:50:19,180 --> 00:50:21,650 >> Laten we eens kijken wat er gebeurt. 1056 00:50:21,650 --> 00:50:22,900 We zullen testen maken. 1057 00:50:22,900 --> 00:50:25,870 1058 00:50:25,870 --> 00:50:31,090 Dus nu zien we dat die slash was niet integerdeling werd zweven 1059 00:50:31,090 --> 00:50:32,640 punt divisie. 1060 00:50:32,640 --> 00:50:35,700 Omdat een van de argumenten was geworpen om een ​​float. 1061 00:50:35,700 --> 00:50:38,380 Dus nu is het zei, behandel deze divisie alsof we te maken hebben met 1062 00:50:38,380 --> 00:50:40,140 zwevende punten niet met gehele getallen. 1063 00:50:40,140 --> 00:50:42,760 En zo krijgen we het antwoord dat we verwachten. 1064 00:50:42,760 --> 00:50:44,620 >> Laten we eens kijken wat er gebeurt - 1065 00:50:44,620 --> 00:50:47,103 oops. 1066 00:50:47,103 --> 00:50:51,646 Als ik wilde meer decimale afdrukken vlekken, hoe zou ik dat doen? 1067 00:50:51,646 --> 00:50:55,550 >> STUDENT: Point punt f, of zoveel decimalen als u wilt. 1068 00:50:55,550 --> 00:51:02,280 1069 00:51:02,280 --> 00:51:04,440 >> JASON HIRSCHHORN: Dus ik afdrukken 10 decimale plaatsen. 1070 00:51:04,440 --> 00:51:06,610 En we zien nu krijgen we sommige rare dingen. 1071 00:51:06,610 --> 00:51:09,650 En dat gaat terug naar je vraag over floating point onnauwkeurigheid. 1072 00:51:09,650 --> 00:51:10,950 Er is raar spul opgeslagen in hier. 1073 00:51:10,950 --> 00:51:13,650 1074 00:51:13,650 --> 00:51:15,275 >> OK, Is dat een antwoord op je vraag? 1075 00:51:15,275 --> 00:51:18,550 1076 00:51:18,550 --> 00:51:20,200 Wat heb je nog wilt om snel te coderen? 1077 00:51:20,200 --> 00:51:25,470 >> STUDENT: Ik wilde alleen maar om te zien of niet, als je vrijgemaakt wat wijzer, 1078 00:51:25,470 --> 00:51:30,410 of die pointer nog had opgeslagen in daarin het adres van wat het was geweest 1079 00:51:30,410 --> 00:51:32,170 wijst eerder. 1080 00:51:32,170 --> 00:51:34,100 >> JASON HIRSCHHORN: OK, dus laten we dat doen. 1081 00:51:34,100 --> 00:51:38,030 Char ster ptr, creëert dit een variabele riep PTR van het type char ster. 1082 00:51:38,030 --> 00:51:39,280 Hoe schrijf ik malloc? 1083 00:51:39,280 --> 00:51:40,550 Alden? 1084 00:51:40,550 --> 00:51:41,800 >> ALDEN: Just malloc. 1085 00:51:41,800 --> 00:51:44,820 1086 00:51:44,820 --> 00:51:51,040 Maar dan moet de grootte van, en in dit geval, ik denk dat je zou 1087 00:51:51,040 --> 00:51:52,465 wijzen naar char. 1088 00:51:52,465 --> 00:51:54,450 Dus het zou zijn char. 1089 00:51:54,450 --> 00:51:57,520 >> JASON HIRSCHHORN: OK, dus meer generiek, Inside - 1090 00:51:57,520 --> 00:51:58,770 laten we bewerken. 1091 00:51:58,770 --> 00:52:05,100 1092 00:52:05,100 --> 00:52:09,260 Binnen malloc, je wilt het nummer van bytes op de heap. 1093 00:52:09,260 --> 00:52:12,320 Over het algemeen, wat we hebben gezien dat we te doen is gaan we malloc 1094 00:52:12,320 --> 00:52:14,940 koorden, bijvoorbeeld, of arrays van integers. 1095 00:52:14,940 --> 00:52:21,600 Dus als we willen 10 gehele getallen, of 10 chars, zal 10 ons 10 geven. 1096 00:52:21,600 --> 00:52:24,370 En dan de grootte van chars zou geven ons dat de grootte van tekens, die 1097 00:52:24,370 --> 00:52:25,120 dit geval is 1 byte. 1098 00:52:25,120 --> 00:52:26,250 We krijgen 10 bytes. 1099 00:52:26,250 --> 00:52:28,540 Als we schrijven grootte van int, dat zou ons 40 bytes. 1100 00:52:28,540 --> 00:52:31,520 >> Dus meer algemeen, de binnenkant van malloc is het aantal bytes dat u wilt. 1101 00:52:31,520 --> 00:52:34,620 In dit geval, we krijgen 1 byte. 1102 00:52:34,620 --> 00:52:36,900 Die lijkt een rare gebruik van malloc, maar voor onze 1103 00:52:36,900 --> 00:52:38,470 doeleinden zinvol. 1104 00:52:38,470 --> 00:52:40,420 Dus er is dat. 1105 00:52:40,420 --> 00:52:43,420 >> We gaan bellen gratis. 1106 00:52:43,420 --> 00:52:47,040 We ontdoen van het en we weer gebruiken ptr. 1107 00:52:47,040 --> 00:52:48,750 En wat heb je wilt controleren? 1108 00:52:48,750 --> 00:52:50,550 >> STUDENT: Ik wilde alleen maar om te controleren of was of niet er iets 1109 00:52:50,550 --> 00:52:51,900 binnenkant van het. 1110 00:52:51,900 --> 00:52:53,050 >> JASON HIRSCHHORN: Dus of hij wees naar iets? 1111 00:52:53,050 --> 00:52:57,740 >> STUDENT: Ja, precies, of het had nog een geheugen adres. 1112 00:52:57,740 --> 00:53:02,220 >> JASON HIRSCHHORN: Dus je wilt om de waarde van ptr controleren? 1113 00:53:02,220 --> 00:53:03,470 >> STUDENT: Ja, precies. 1114 00:53:03,470 --> 00:53:07,940 1115 00:53:07,940 --> 00:53:10,160 >> JASON HIRSCHHORN: Wat moet ik hier schrijven als ik wil de waarde van de te controleren 1116 00:53:10,160 --> 00:53:11,880 punt - wat is, Jordanië gezegd, de waarde? 1117 00:53:11,880 --> 00:53:13,720 Of wat is opgeslagen in van ptr? 1118 00:53:13,720 --> 00:53:14,620 >> STUDENT: Een geheugenadres. 1119 00:53:14,620 --> 00:53:16,330 >> JASON HIRSCHHORN: Een geheugenadres. 1120 00:53:16,330 --> 00:53:20,520 Dus als ik schrijf alleen dit, het zal geef mij de waarde van ptr. 1121 00:53:20,520 --> 00:53:22,800 En hoe kan ik uitprinten een geheugen-adres? 1122 00:53:22,800 --> 00:53:26,470 Wat is de format string voor een geheugen-adres? 1123 00:53:26,470 --> 00:53:27,430 >> STUDENT:% p. 1124 00:53:27,430 --> 00:53:28,050 >> JASON HIRSCHHORN:% p. 1125 00:53:28,050 --> 00:53:29,500 % S is een string. 1126 00:53:29,500 --> 00:53:30,750 % P voor pointer. 1127 00:53:30,750 --> 00:53:40,820 1128 00:53:40,820 --> 00:53:43,540 Is dat zo? 1129 00:53:43,540 --> 00:53:44,790 Dat klopt. 1130 00:53:44,790 --> 00:53:49,450 1131 00:53:49,450 --> 00:53:51,040 Dus ptr gelijk - 1132 00:53:51,040 --> 00:53:53,350 het heeft nog iets in. 1133 00:53:53,350 --> 00:53:56,110 1134 00:53:56,110 --> 00:53:57,645 Dit is waarschijnlijk een meer interessante vraag. 1135 00:53:57,645 --> 00:53:59,198 Wat doet die lijn doen? 1136 00:53:59,198 --> 00:54:00,830 >> STUDENT: Seg fouten. 1137 00:54:00,830 --> 00:54:01,310 >> JASON HIRSCHHORN: Wat? 1138 00:54:01,310 --> 00:54:02,678 >> STUDENT: Ik denk dat het Seg fouten. 1139 00:54:02,678 --> 00:54:03,574 >> JASON HIRSCHHORN: Hm? 1140 00:54:03,574 --> 00:54:04,920 >> STUDENT: Ik denk dat het zal fout Seg. 1141 00:54:04,920 --> 00:54:08,265 >> JASON HIRSCHHORN: Dus deze lijn code, ster ptr, wat 1142 00:54:08,265 --> 00:54:10,152 betekent de ster betekenen? 1143 00:54:10,152 --> 00:54:11,240 >> STUDENT: Inhoud van. 1144 00:54:11,240 --> 00:54:11,560 >> JASON HIRSCHHORN: Yeah. 1145 00:54:11,560 --> 00:54:13,910 Toegang tot de inhoud te krijgen. 1146 00:54:13,910 --> 00:54:16,830 Dus dit gaat naar het geheugen pakken daar en geef me dat. 1147 00:54:16,830 --> 00:54:21,030 Ik gebruikte% c hier omdat er zijn personages daar opgeslagen. 1148 00:54:21,030 --> 00:54:23,390 Dus we gaan naar dat adres wij net zag - of het zal waarschijnlijk een 1149 00:54:23,390 --> 00:54:25,190 beetje anders dit keer dat we het programma uit te voeren. 1150 00:54:25,190 --> 00:54:28,010 Maar we gaan naar dat adres waarvan we weten nog steeds bestaat 1151 00:54:28,010 --> 00:54:29,260 en te zien wat er staat. 1152 00:54:29,260 --> 00:54:35,640 1153 00:54:35,640 --> 00:54:37,110 >> Zodat het niet Seg fout. 1154 00:54:37,110 --> 00:54:38,970 Dat het gewoon niet geven ons niets. 1155 00:54:38,970 --> 00:54:43,350 Het zou hebben ons eigenlijk gegeven iets, we kunnen gewoon niet zien. 1156 00:54:43,350 --> 00:54:45,110 En dat gaat terug tot dit idee - 1157 00:54:45,110 --> 00:54:47,270 en we gaan niet te veel in te krijgen dit, want dat is buiten de 1158 00:54:47,270 --> 00:54:48,460 omvang van deze cursus. 1159 00:54:48,460 --> 00:54:51,260 Maar we spraken over hier, als we ging verder dan de grenzen van de array 1160 00:54:51,260 --> 00:54:54,890 1, kunnen we niet in de problemen komen. 1161 00:54:54,890 --> 00:54:58,550 >> Soms, als je gewoon af te gaan op 1, dat je iets verkeerd doet, en u 1162 00:54:58,550 --> 00:54:59,220 kon krijgen in de problemen. 1163 00:54:59,220 --> 00:55:00,820 Maar je hoeft niet altijd in de problemen. 1164 00:55:00,820 --> 00:55:05,170 Het hangt ervan af hoeveel van een slechte zaak u weet, je gaat in de problemen te komen. 1165 00:55:05,170 --> 00:55:07,790 Wat niet wil zeggen, zijn slordig met uw code. 1166 00:55:07,790 --> 00:55:12,080 Maar het is te zeggen, het programma op geen altijd stoppen, zelfs als je ergens heen 1167 00:55:12,080 --> 00:55:14,130 je bent niet de bedoeling om te gaan. 1168 00:55:14,130 --> 00:55:18,170 >> Een goed voorbeeld daarvan is, veel mensen in hun probleem set 3, die 1169 00:55:18,170 --> 00:55:22,350 15, inspecteerden het was niet grenzen van het bord. 1170 00:55:22,350 --> 00:55:25,860 Dus je keek naar links, keek naar de recht, keek naar boven, keek 1171 00:55:25,860 --> 00:55:27,000 naar de bodem. 1172 00:55:27,000 --> 00:55:31,540 Maar je hebt niet te zien als de top was eigenlijk gaat worden op het bord. 1173 00:55:31,540 --> 00:55:35,220 En een heleboel mensen die dat deden en bleek dat in hun programma werkte 1174 00:55:35,220 --> 00:55:38,960 perfect, want waar die raad was opgeslagen in het geheugen, als je ging een 1175 00:55:38,960 --> 00:55:42,300 erboven of gecontroleerd dat het geheugen adres, er was niets 1176 00:55:42,300 --> 00:55:44,870 vooral verschrikkelijk over dat, zodat het programma niet was 1177 00:55:44,870 --> 00:55:45,970 ga je schreeuwt. 1178 00:55:45,970 --> 00:55:48,870 >> Maar we zouden toch opstijgen punten als u hebben daarom niet dat, omdat je 1179 00:55:48,870 --> 00:55:50,850 waren iets wat je niet doen waren verondersteld wordt te doen, en je zou kunnen hebben 1180 00:55:50,850 --> 00:55:51,860 gekregen in de problemen. 1181 00:55:51,860 --> 00:55:54,040 Odds zijn, hoewel, je waarschijnlijk niet. 1182 00:55:54,040 --> 00:55:57,790 Dus dit is te zien dat, ja, kunnen we nog naar het. 1183 00:55:57,790 --> 00:55:59,010 En we krijgen niet in problemen in dit geval. 1184 00:55:59,010 --> 00:56:04,000 Als we proberen te doen lezen volgende 100 tekens, zouden we 1185 00:56:04,000 --> 00:56:06,000 waarschijnlijk in de problemen komen. 1186 00:56:06,000 --> 00:56:09,400 En je kunt coderen lezen van de volgende 100 tekens als u wilt door wat voeten 1187 00:56:09,400 --> 00:56:10,110 soort van lus. 1188 00:56:10,110 --> 00:56:10,850 Yeah. 1189 00:56:10,850 --> 00:56:16,250 >> STUDENT: Aangezien we waren toegewezen dat ruimte een werkelijke waarde, zouden we niet 1190 00:56:16,250 --> 00:56:17,050 daadwerkelijk in staat zijn om iets te zien. 1191 00:56:17,050 --> 00:56:21,740 Moeten we proberen het met de instelling dat gelijk aan zoals C of zo? 1192 00:56:21,740 --> 00:56:22,640 >> JASON HIRSCHHORN: Goede vraag. 1193 00:56:22,640 --> 00:56:25,340 Hoe stel ik die waarde - 1194 00:56:25,340 --> 00:56:28,980 welke regel code schrijf ik op lijn zeven om te doen wat je zei? 1195 00:56:28,980 --> 00:56:34,040 >> STUDENT: Star ptr gelijk enkele citaat c eindigen enkele aanbieding. 1196 00:56:34,040 --> 00:56:36,970 >> JASON HIRSCHHORN: Dus dan druk een karakter, c, op die plaats, 1197 00:56:36,970 --> 00:56:40,200 want nogmaals, dat ster betekent ga naar daar. 1198 00:56:40,200 --> 00:56:43,320 En bij gebruik op de linkerkant van een opdracht operator, dat gelijk is aan 1199 00:56:43,320 --> 00:56:47,270 ondertekenen, we gaan niet te krijgen dat waarde zoveel als die waarde ingesteld. 1200 00:56:47,270 --> 00:56:48,520 Laten we nu eens kijken wat er gebeurt. 1201 00:56:48,520 --> 00:56:54,700 1202 00:56:54,700 --> 00:56:56,770 >> We hebben daar iets en het was er. 1203 00:56:56,770 --> 00:56:58,000 We noemden gratis. 1204 00:56:58,000 --> 00:57:00,100 Sommige dingen gebeurde waarschijnlijk op de heap. 1205 00:57:00,100 --> 00:57:01,890 Dus het is er niet meer. 1206 00:57:01,890 --> 00:57:07,440 Maar nogmaals, we zijn niet krijgen in de problemen voor er heen te gaan. 1207 00:57:07,440 --> 00:57:10,260 >> Ik doe dit in code om te illustreren dat veel van deze 1208 00:57:10,260 --> 00:57:12,410 vragen die je hebt, zijn ze echt interessant 1209 00:57:12,410 --> 00:57:13,650 beantwoordt veel tijd. 1210 00:57:13,650 --> 00:57:15,260 En ze zijn echt goede vragen. 1211 00:57:15,260 --> 00:57:19,010 En je kunt ze uit te zoeken op meenemen als, bijvoorbeeld, 1212 00:57:19,010 --> 00:57:19,990 we zijn niet in doorsnede. 1213 00:57:19,990 --> 00:57:20,940 Yeah. 1214 00:57:20,940 --> 00:57:24,430 >> STUDENT: Omdat je niet het verzenden van de pointer waar dan ook, heb je nodig om 1215 00:57:24,430 --> 00:57:26,530 gebruiken malloc? 1216 00:57:26,530 --> 00:57:28,400 >> JASON HIRSCHHORN: Dus dit gaat terug om uw eerste vraag. 1217 00:57:28,400 --> 00:57:28,620 [? ?] 1218 00:57:28,620 --> 00:57:29,980 Is het gewoon een lokale variabele? 1219 00:57:29,980 --> 00:57:32,280 Malloc hier is niet zo overtuigend. 1220 00:57:32,280 --> 00:57:35,260 Het gebruik van malloc hier niet dat dwingende omdat het 1221 00:57:35,260 --> 00:57:36,500 slechts een lokale variabele. 1222 00:57:36,500 --> 00:57:40,970 >> STUDENT: Dus kan je char doen ster ptr gelijk gedag? 1223 00:57:40,970 --> 00:57:41,400 >> JASON HIRSCHHORN: Oh. 1224 00:57:41,400 --> 00:57:43,300 Dus we gaan nu weer terug om uw eerste vraag. 1225 00:57:43,300 --> 00:57:46,885 Ik denk dat je niet tevreden waren met mijn antwoord. 1226 00:57:46,885 --> 00:57:48,220 OK? 1227 00:57:48,220 --> 00:57:49,226 Als dat? 1228 00:57:49,226 --> 00:57:49,682 >> STUDENT: Ja. 1229 00:57:49,682 --> 00:57:50,932 Wacht. 1230 00:57:50,932 --> 00:57:54,090 1231 00:57:54,090 --> 00:57:57,850 >> JASON HIRSCHHORN: En waar wil je om uit te printen? 1232 00:57:57,850 --> 00:58:00,026 Dus gaan we een string als die uit te printen? 1233 00:58:00,026 --> 00:58:06,380 1234 00:58:06,380 --> 00:58:07,630 >> STUDENT: Interessant. 1235 00:58:07,630 --> 00:58:09,900 1236 00:58:09,900 --> 00:58:14,285 >> JASON HIRSCHHORN: Dus dit zegt dit argument is het type van een karakter. 1237 00:58:14,285 --> 00:58:17,200 1238 00:58:17,200 --> 00:58:18,620 Dus dit een teken zou moeten zijn. 1239 00:58:18,620 --> 00:58:25,170 1240 00:58:25,170 --> 00:58:26,280 >> STUDENT: neemt gewoon de eerste. 1241 00:58:26,280 --> 00:58:28,610 >> JASON HIRSCHHORN: Dus dit is wat ik al eerder zei. 1242 00:58:28,610 --> 00:58:34,240 Zoals ik al zei, het is niet het opslaan van de snaar binnen variabele pointer. 1243 00:58:34,240 --> 00:58:35,120 Het opslaan - 1244 00:58:35,120 --> 00:58:36,350 >> STUDENT: De eerste waarde van de snaar. 1245 00:58:36,350 --> 00:58:40,810 >> JASON HIRSCHHORN: Het adres van de eerste waarde van de tekenreeks. 1246 00:58:40,810 --> 00:58:46,940 Als we uitprint, we zijn om de waarde binnen aanwijzer. 1247 00:58:46,940 --> 00:58:51,005 En we zullen zien is het inderdaad een geheugen adres. 1248 00:58:51,005 --> 00:58:53,595 1249 00:58:53,595 --> 00:58:56,440 >> Is dat logisch? 1250 00:58:56,440 --> 00:58:56,940 Sorry. 1251 00:58:56,940 --> 00:58:58,996 Wacht, is dat antwoord op je vraag, hoewel? 1252 00:58:58,996 --> 00:58:59,790 >> STUDENT: Ja. 1253 00:58:59,790 --> 00:59:05,830 >> JASON HIRSCHHORN: Deze regel code is het creëren van een string en dan nog 1254 00:59:05,830 --> 00:59:09,115 variabele wijzer dat is wijzende dat tekenreeks, die array. 1255 00:59:09,115 --> 00:59:14,320 1256 00:59:14,320 --> 00:59:14,980 Yeah. 1257 00:59:14,980 --> 00:59:19,200 >> STUDENT: Dus als we een geheugen gingen pakken verder, zouden we de h? 1258 00:59:19,200 --> 00:59:21,990 1259 00:59:21,990 --> 00:59:23,150 Is het al opgeslagen als een string? 1260 00:59:23,150 --> 00:59:24,400 >> JASON HIRSCHHORN: Zoals, we deden - 1261 00:59:24,400 --> 00:59:28,540 1262 00:59:28,540 --> 00:59:30,790 dus is dit waardevol te doen. 1263 00:59:30,790 --> 00:59:33,780 Dit is point berekeningen, die jullie eerder hebben gezien en moeten 1264 00:59:33,780 --> 00:59:35,550 relatief comfortabel met. 1265 00:59:35,550 --> 00:59:36,905 Dit is verwant aan het schrijven - 1266 00:59:36,905 --> 00:59:41,980 1267 00:59:41,980 --> 00:59:46,350 als we deze regel code te schrijven, we hebben reeks notatie eerder gezien. 1268 00:59:46,350 --> 00:59:55,900 Dit zou ons de tweede geven waarde in deze matrix, h. 1269 00:59:55,900 --> 01:00:05,010 >> Als we dit deden, dient dit ook te geven ons de tweede waarde in die array. 1270 01:00:05,010 --> 01:00:08,320 Want het gaat niet om het geheugen adres van de eerste ding, maar de 1271 01:00:08,320 --> 01:00:10,530 geheugenadres van het ding een over. 1272 01:00:10,530 --> 01:00:14,360 En dan is de ster operator dereferences dat pointer. 1273 01:00:14,360 --> 01:00:16,940 En nogmaals, laten we eens kijken. 1274 01:00:16,940 --> 01:00:18,664 We krijgen h weer. 1275 01:00:18,664 --> 01:00:20,980 >> STUDENT: Wat doet dereferentie betekenen? 1276 01:00:20,980 --> 01:00:23,650 >> JASON HIRSCHHORN: Verwijzing van is een duur woord voor gaan. 1277 01:00:23,650 --> 01:00:26,390 Ga naar die en krijgen wat is er is dereference een pointer. 1278 01:00:26,390 --> 01:00:28,240 Het is gewoon een duur woord voor. 1279 01:00:28,240 --> 01:00:29,986 >> STUDENT: Als we wilden afdrukken de hele reeks, konden we 1280 01:00:29,986 --> 01:00:31,930 doen ampersand wijzer? 1281 01:00:31,930 --> 01:00:33,490 >> JASON HIRSCHHORN: OK, we zijn ga hier even pauzeren. 1282 01:00:33,490 --> 01:00:35,480 We gaan hier eindigen. 1283 01:00:35,480 --> 01:00:41,760 Ampersand geeft u het adres van een locatie, dus als je ampersand van doen 1284 01:00:41,760 --> 01:00:44,080 een variabele, het geeft je het adres wanneer deze waarde wordt opgeslagen. 1285 01:00:44,080 --> 01:00:48,580 Ampersand wijzer zal u het geven adres van ptr waar ptr is in het geheugen. 1286 01:00:48,580 --> 01:00:50,140 >> We gaan niet om verder te gaan dit voorbeeld. 1287 01:00:50,140 --> 01:00:52,640 Je kunt achterhalen deze dingen op je eigen. 1288 01:00:52,640 --> 01:00:55,740 Maar nogmaals, dit zou zelfs op het randje van een beetje verder dan wat je moet weten voor 1289 01:00:55,740 --> 01:00:58,000 het toepassingsgebied van deze mid-term - 1290 01:00:58,000 --> 01:00:59,070 of deze quiz plaats. 1291 01:00:59,070 --> 01:01:00,270 Sorry. 1292 01:01:00,270 --> 01:01:03,770 >> We gaan om verder te gaan, want ik zou graag een codering probleem doen 1293 01:01:03,770 --> 01:01:05,100 voordat de tijd om is. 1294 01:01:05,100 --> 01:01:09,340 En we gaan coderen wat ik denk is de meest dwingende van deze 1295 01:01:09,340 --> 01:01:11,020 voorbeelden, atoi. 1296 01:01:11,020 --> 01:01:14,520 Dus dit was een vraag op een quiz twee jaar geleden. 1297 01:01:14,520 --> 01:01:17,810 En ik heb het op het bord hier. 1298 01:01:17,810 --> 01:01:20,680 >> Mensen werd gevraagd op de quiz - 1299 01:01:20,680 --> 01:01:23,640 ze kregen een beetje meer tesxt in de vraag, maar ik elimineerde de 1300 01:01:23,640 --> 01:01:26,640 tekst omdat het niet nodig was voor nu onze doeleinden. 1301 01:01:26,640 --> 01:01:29,180 Het was gewoon wat achtergrond over wat atoi deed. 1302 01:01:29,180 --> 01:01:31,425 Maar jullie weten en zijn zeer vertrouwd met atoi. 1303 01:01:31,425 --> 01:01:35,620 >> Ik stel voor dat je deze code op een vel papier. 1304 01:01:35,620 --> 01:01:39,310 Ik stel ook voor u de strategie te gebruiken dat we hebben laten zien 1305 01:01:39,310 --> 01:01:41,040 veel in onze rubriek. 1306 01:01:41,040 --> 01:01:44,130 Zorg eerst dat je begrijpt wat atoi's doen. 1307 01:01:44,130 --> 01:01:47,580 Maak een tekening of komen met een aantal mentaal beeld van het in je hoofd. 1308 01:01:47,580 --> 01:01:51,120 Vervolgens uitschrijven pseudocode voor dit. 1309 01:01:51,120 --> 01:01:53,120 Op de quiz, als alles wat je krijgt is pseudocode, in ieder geval je 1310 01:01:53,120 --> 01:01:54,550 zet iets neer. 1311 01:01:54,550 --> 01:02:00,070 En dan in kaart dat pseudocode op C. Als je een cheque in uw 1312 01:02:00,070 --> 01:02:03,760 pseudocode, zoals controleren als er iets is 1, dat kaarten op een if 1313 01:02:03,760 --> 01:02:05,750 conditie enzovoort. 1314 01:02:05,750 --> 01:02:07,850 En tot slot, de code van het programma in C. 1315 01:02:07,850 --> 01:02:15,000 >> Dus ga terug naar atoi en nemen vijf minuten Om deze code op een vel 1316 01:02:15,000 --> 01:02:19,480 papier, wat waarschijnlijk de hoeveelheid tijd die je op een zou nemen 1317 01:02:19,480 --> 01:02:21,260 quiz om code atoi. 1318 01:02:21,260 --> 01:02:27,060 Vijf 15 minuten, vijf tot 12, vijf tot 10 minuten is de hoeveelheid 1319 01:02:27,060 --> 01:02:30,150 tijd die je zou besteden aan deze vraag in de quiz. 1320 01:02:30,150 --> 01:02:31,670 Dus neem nu vijf minuten, alstublieft. 1321 01:02:31,670 --> 01:02:35,957 En als je vragen hebt, verhogen je hand en ik zal rond komen. 1322 01:02:35,957 --> 01:06:39,570 1323 01:06:39,570 --> 01:06:41,066 >> [SIDE CONVERSATIONS] 1324 01:06:41,066 --> 01:08:35,279 1325 01:08:35,279 --> 01:08:37,580 >> JASON HIRSCHHORN: OK, dus Dat was vijf minuten. 1326 01:08:37,580 --> 01:08:39,880 Dat was waarschijnlijk over de hoeveelheid tijd die je zou besteden aan dat op een quiz, 1327 01:08:39,880 --> 01:08:42,120 misschien de lage kant van die tijd. 1328 01:08:42,120 --> 01:08:44,010 We zullen samen te vatten in een beetje. 1329 01:08:44,010 --> 01:08:45,740 Laten we beginnen te coderen dit. 1330 01:08:45,740 --> 01:08:49,479 En als we niet helemaal door te krijgen, de antwoorden op deze en deze 1331 01:08:49,479 --> 01:08:54,189 quizvraag beschikbaar zijn, opnieuw, Het najaar van 2011 is bij deze vraag 1332 01:08:54,189 --> 01:08:54,913 verscheen op de quiz. 1333 01:08:54,913 --> 01:08:57,830 >> En het was acht punten waard op de quiz dan. 1334 01:08:57,830 --> 01:09:01,140 Acht punten op de bovenkant van de aantal punten iets waard is. 1335 01:09:01,140 --> 01:09:04,790 De meeste vragen zijn in het bereik met een tot zes punten. 1336 01:09:04,790 --> 01:09:08,500 Dit is dus een uitdagende vraag, zeker. 1337 01:09:08,500 --> 01:09:09,750 Kan iemand mij begon? 1338 01:09:09,750 --> 01:09:13,260 1339 01:09:13,260 --> 01:09:15,380 >> In het algemeen, wat gaan we te willen doen met deze 1340 01:09:15,380 --> 01:09:17,550 functioneren atoi, logisch? 1341 01:09:17,550 --> 01:09:19,569 Wat willen we doen? 1342 01:09:19,569 --> 01:09:22,279 Dus we gaan om te schrijven wat pseudocode. 1343 01:09:22,279 --> 01:09:24,090 >> STUDENT: Convert tekens in gehele getallen. 1344 01:09:24,090 --> 01:09:26,700 >> JASON HIRSCHHORN: Convert tekens in gehele getallen. 1345 01:09:26,700 --> 01:09:27,479 OK. 1346 01:09:27,479 --> 01:09:30,870 Dus hoeveel tekens zijn wij gaat nodig hebben om door te gaan? 1347 01:09:30,870 --> 01:09:32,295 >> STUDENT: Allemaal. 1348 01:09:32,295 --> 01:09:34,100 >> STUDENT: Alle personages in de string. 1349 01:09:34,100 --> 01:09:35,540 >> JASON HIRSCHHORN: Alle tekens in de tekenreeks. 1350 01:09:35,540 --> 01:09:42,180 Dus als we wilden gaan door elke teken in een string, wat is een ding 1351 01:09:42,180 --> 01:09:44,560 in C we hebben gezien dat heeft toegestaan we gaan door elke 1352 01:09:44,560 --> 01:09:45,939 teken in een string? 1353 01:09:45,939 --> 01:09:46,819 >> STUDENTEN: Een lus. 1354 01:09:46,819 --> 01:09:48,069 >> JASON HIRSCHHORN: Een lus. 1355 01:09:48,069 --> 01:09:52,020 1356 01:09:52,020 --> 01:09:55,330 Dus we gaan doorlussen elk karakter in s. 1357 01:09:55,330 --> 01:10:00,940 >> Dan wat gaan we willen doen als we een bepaald personage? 1358 01:10:00,940 --> 01:10:02,480 Zeggen wij worden langs een 90. 1359 01:10:02,480 --> 01:10:03,460 We krijgen de 9. 1360 01:10:03,460 --> 01:10:04,240 Het is een personage. 1361 01:10:04,240 --> 01:10:07,440 Wat willen we doen met dat personage 9? 1362 01:10:07,440 --> 01:10:10,082 >> STUDENT: Trek het van karakter 0? 1363 01:10:10,082 --> 01:10:11,860 >> STUDENT: Add 0? 1364 01:10:11,860 --> 01:10:13,350 >> JASON HIRSCHHORN: Aftrekken het van karakter 0? 1365 01:10:13,350 --> 01:10:13,800 >> STUDENT: Ja. 1366 01:10:13,800 --> 01:10:15,573 >> JASON HIRSCHHORN: Waarom doen wilt u dat doen? 1367 01:10:15,573 --> 01:10:16,560 >> STUDENT: [onverstaanbaar] 1368 01:10:16,560 --> 01:10:17,010 waarde. 1369 01:10:17,010 --> 01:10:18,380 Zijn int waarde. 1370 01:10:18,380 --> 01:10:21,580 >> JASON HIRSCHHORN: OK, dus nemen we de karakter 9, aftrekken van 1371 01:10:21,580 --> 01:10:25,820 karakter 0 op een te krijgen werkelijke integer 9. 1372 01:10:25,820 --> 01:10:27,070 Sweet. 1373 01:10:27,070 --> 01:10:31,255 1374 01:10:31,255 --> 01:10:37,000 En hoe weet je dat personage 9 min 0 karakter is 9? 1375 01:10:37,000 --> 01:10:39,222 Wat grafiek heb je kijken? 1376 01:10:39,222 --> 01:10:43,130 >> STUDENT: Er zijn logisch negen plaatsen tussen 9 en 0. 1377 01:10:43,130 --> 01:10:44,620 Of je zou kunnen kijken naar de ASCII-tabel. 1378 01:10:44,620 --> 01:10:45,120 >> JASON HIRSCHHORN: ASCII-tabel. 1379 01:10:45,120 --> 01:10:46,490 Maar ja, je hebt gelijk bent ook. 1380 01:10:46,490 --> 01:10:47,780 Dus trekken we 0. 1381 01:10:47,780 --> 01:10:49,010 Dus nu hebben we het gehele getal 9. 1382 01:10:49,010 --> 01:10:49,970 En wat willen we mee te maken hebben? 1383 01:10:49,970 --> 01:10:54,970 Als we 90, het is de eerste integer we hebben, wat we willen doen? 1384 01:10:54,970 --> 01:10:58,180 >> STUDENT: Ik zou in een tijdelijke integer zetten array, dan doen wiskunde om het 1385 01:10:58,180 --> 01:11:02,088 later om het te maken tot een eindproduct. 1386 01:11:02,088 --> 01:11:03,020 >> JASON HIRSCHHORN: OK. 1387 01:11:03,020 --> 01:11:06,990 >> STUDENT: U kunt beginnen aan het einde van de array en dan vooruit zodat 1388 01:11:06,990 --> 01:11:10,350 dat elke keer dat je vooruit, je vermenigvuldigen met 10. 1389 01:11:10,350 --> 01:11:10,830 >> JASON HIRSCHHORN: OK. 1390 01:11:10,830 --> 01:11:12,250 Dat klinkt als een mooie aansprekend idee. 1391 01:11:12,250 --> 01:11:16,040 We kunnen beginnen aan het einde van ons aanbod, en we kunnen gebruiken strleng. 1392 01:11:16,040 --> 01:11:17,030 We kunnen strleng gebruiken hier. 1393 01:11:17,030 --> 01:11:18,870 We zullen de lengte van onze reeks te krijgen. 1394 01:11:18,870 --> 01:11:20,100 We beginnen bij het einde. 1395 01:11:20,100 --> 01:11:29,170 En + de eerste, we nemen dat integer, en misschien maken we als een 1396 01:11:29,170 --> 01:11:32,270 nieuwe integer variabele up top waar we zijn alles op te slaan. 1397 01:11:32,270 --> 01:11:37,340 Dus we lus door elke char in s uit achter naar voren trekken we 0, en 1398 01:11:37,340 --> 01:11:42,790 dan nemen we, en afhankelijk waar het is, vermenigvuldigen we het 1399 01:11:42,790 --> 01:11:45,860 met een vermogen van 10. 1400 01:11:45,860 --> 01:11:50,644 Omdat de eerste, wat doen we vermenigvuldig het meest rechtse teken van? 1401 01:11:50,644 --> 01:11:51,440 >> STUDENT: 10 naar de 0. 1402 01:11:51,440 --> 01:11:53,170 >> JASON HIRSCHHORN: 10 naar de 0. 1403 01:11:53,170 --> 01:11:56,010 Wat doen we vermenigvuldigen de tweede meest rechtse teken van? 1404 01:11:56,010 --> 01:11:57,450 >> STUDENT: [onverstaanbaar]. 1405 01:11:57,450 --> 01:11:57,960 >> JASON HIRSCHHORN: Wat? 1406 01:11:57,960 --> 01:11:59,150 >> STUDENT: 10 naar de 1. 1407 01:11:59,150 --> 01:12:00,420 >> JASON HIRSCHHORN: 10 naar de 1. 1408 01:12:00,420 --> 01:12:03,754 De derde meest rechtse teken? 1409 01:12:03,754 --> 01:12:04,580 >> STUDENT: 10 naar de 2. 1410 01:12:04,580 --> 01:12:05,350 >> JASON HIRSCHHORN: 10 naar de 2. 1411 01:12:05,350 --> 01:12:07,200 >> STUDENT: Sorry, ik begrijp het niet wat we hier doen. 1412 01:12:07,200 --> 01:12:08,640 >> JASON HIRSCHHORN: OK, Laten we terug gaan, dan. 1413 01:12:08,640 --> 01:12:12,500 Dus we gaan krijgen aangenomen in een string. 1414 01:12:12,500 --> 01:12:14,470 Omdat we aan het schrijven bent atoi. 1415 01:12:14,470 --> 01:12:15,260 Dus krijgen we passeerden in een string. 1416 01:12:15,260 --> 01:12:17,640 Zeggen wij worden doorgegeven in de tekenreeks 90. 1417 01:12:17,640 --> 01:12:19,930 >> Het eerste wat we gaan doen is een nieuwe integer variabele die we 1418 01:12:19,930 --> 01:12:22,150 gewoon gaan maken als onze nieuwe integer. 1419 01:12:22,150 --> 01:12:24,630 Dat is wat we gaan terug eind. 1420 01:12:24,630 --> 01:12:30,110 We moeten gaan door elk karakter in de string want we hebben vastgesteld 1421 01:12:30,110 --> 01:12:34,430 die we nodig hebben om een ​​ieder te raken en voeg deze dan naar onze nieuwe integer. 1422 01:12:34,430 --> 01:12:36,330 >> Maar we kunnen niet zomaar toe te voegen als een nummer. 1423 01:12:36,330 --> 01:12:38,270 We kunnen niet zomaar 9 en voeg 9 aan onze integer. 1424 01:12:38,270 --> 01:12:40,560 Het hangt af van welke plaats het in de string. 1425 01:12:40,560 --> 01:12:42,960 We gaan nodig hebben om te vermenigvuldigen door een kracht van 10. 1426 01:12:42,960 --> 01:12:45,580 Want dat is hoe base 10 werken. 1427 01:12:45,580 --> 01:12:49,050 >> Dus we gaan naar de werkelijke krijgen karakter of de feitelijke integer 1428 01:12:49,050 --> 01:12:53,860 aantal, door het aftrekken van karakter 0 van karakter 9 zoals we deden met 1429 01:12:53,860 --> 01:12:57,560 aftrekken karakter hoofdletter A uit wat karakter hadden we in een van 1430 01:12:57,560 --> 01:12:58,120 deze problemen. 1431 01:12:58,120 --> 01:13:04,190 Dus we eigenlijk een getal van 0 tot 9 opgeslagen als een reëel getal, en we zullen 1432 01:13:04,190 --> 01:13:07,590 vermenigvuldigen met een macht van 10, afhankelijk op waar we zijn in de string. 1433 01:13:07,590 --> 01:13:19,430 1434 01:13:19,430 --> 01:13:22,575 En dan gaan we het opnieuw toevoegen in onze nieuwe integer variabele. 1435 01:13:22,575 --> 01:13:32,840 1436 01:13:32,840 --> 01:13:37,890 >> Dus wat dit eruit zou zien zou worden - we zullen hier trekken voorbij. 1437 01:13:37,890 --> 01:13:40,086 Als we krijgen doorgegeven in de string 90 - 1438 01:13:40,086 --> 01:13:41,336 >> STUDENT: [onverstaanbaar]. 1439 01:13:41,336 --> 01:13:43,190 1440 01:13:43,190 --> 01:13:45,540 >> JASON HIRSCHHORN: Maar atoi neemt een string. 1441 01:13:45,540 --> 01:13:46,350 Dus we gaan door te gaan het bedrijf. 1442 01:13:46,350 --> 01:13:49,900 We zullen krijgen doorgegeven in 90. 1443 01:13:49,900 --> 01:13:51,540 We gaan van de achterkant naar de voorkant. 1444 01:13:51,540 --> 01:13:53,920 We nemen de 0. 1445 01:13:53,920 --> 01:13:55,080 >> STUDENT: Het spijt me. 1446 01:13:55,080 --> 01:13:55,880 Misschien is dit dom. 1447 01:13:55,880 --> 01:13:59,440 Als wij worden aangenomen in een string, waarom is 90 wat we 1448 01:13:59,440 --> 01:14:00,260 krijgen gepasseerd in? 1449 01:14:00,260 --> 01:14:03,160 Omdat 90 een geheel getal. 1450 01:14:03,160 --> 01:14:06,820 >> JASON HIRSCHHORN: Omdat atoi neemt een string en verandert het in de integer 1451 01:14:06,820 --> 01:14:08,320 vertegenwoordiging van die string. 1452 01:14:08,320 --> 01:14:13,650 Maar de snaar 90 is de integer 90 of het nummer 90. 1453 01:14:13,650 --> 01:14:17,920 De string 90 is een serie van twee, of drie karakters, eerder de 9 1454 01:14:17,920 --> 01:14:22,740 karakter, de 0 karakter, en de backslash 0 karakter. 1455 01:14:22,740 --> 01:14:26,260 >> En we schrijven atoi want voor Bijvoorbeeld, wanneer je het commando te nemen 1456 01:14:26,260 --> 01:14:30,230 line argument, en het is opgeslagen in argv, het is opgeslagen als een string. 1457 01:14:30,230 --> 01:14:32,940 Maar als je wilt om het te behandelen als een nummer, je nodig hebt om het te converteren naar een 1458 01:14:32,940 --> 01:14:34,700 werkelijke integer. 1459 01:14:34,700 --> 01:14:37,210 Wat we gedaan hebben een van ons probleem sets. 1460 01:14:37,210 --> 01:14:38,800 Wat we gedaan hebben in een aantal van ons probleem sets. 1461 01:14:38,800 --> 01:14:41,690 Iedereen die een integer nam als een command line argument. 1462 01:14:41,690 --> 01:14:46,490 Dus dat is waarom onze atoi functie neemt een string. 1463 01:14:46,490 --> 01:14:51,910 >> Dus nogmaals, in ons voorbeeld hier, we zijn naar de laatste nemen. 1464 01:14:51,910 --> 01:14:55,050 We gaan naar het karakter aftrekken 0 uit, want de cijfers 0 1465 01:14:55,050 --> 01:14:58,810 afgetrokken door het karakter 0 geeft u het werkelijke aantal 0, volgens 1466 01:14:58,810 --> 01:15:00,950 de ASCII wiskunde die we doen. 1467 01:15:00,950 --> 01:15:04,870 >> Omdat karakters worden weergegeven als anders dan hun werkelijke - de 1468 01:15:04,870 --> 01:15:08,830 een karakter, bijvoorbeeld, kleine letter a is 97. 1469 01:15:08,830 --> 01:15:10,260 Het is niet - oops! 1470 01:15:10,260 --> 01:15:13,290 Het is niet wat je zou verwachten het is, 0, bijvoorbeeld. 1471 01:15:13,290 --> 01:15:16,200 Dus je moet aftrekken van de karakter een te krijgen 0. 1472 01:15:16,200 --> 01:15:18,950 >> Dus gaan we dat hier doen de werkelijke nummer. 1473 01:15:18,950 --> 01:15:22,560 En dan gaan we vermenigvuldigen met een vermogen van 10 afhankelijk van waar het 1474 01:15:22,560 --> 01:15:27,030 is in de string, en dan dat toevoegen aan onze place holder 1475 01:15:27,030 --> 01:15:32,520 variabele zodat we kunnen komen met onze laatste nieuwe integer. 1476 01:15:32,520 --> 01:15:35,080 Is dat zinvol voor iedereen? 1477 01:15:35,080 --> 01:15:37,730 >> Dus we gaan niet om deze code op dit moment, omdat we 1478 01:15:37,730 --> 01:15:38,830 krijgen weinig tijd. 1479 01:15:38,830 --> 01:15:40,860 Ik verontschuldig me voor de timing van dat. 1480 01:15:40,860 --> 01:15:44,620 Maar dit is wat, hopelijk, zou je kunnen doen aan de quiz - bij de 1481 01:15:44,620 --> 01:15:47,710 minst, krijg deze pseudocode uitgeschreven. 1482 01:15:47,710 --> 01:15:50,840 >> En dan, als we schrijven de pseudocode, eigenlijk, we konden dit doen 1483 01:15:50,840 --> 01:15:51,490 vrij snel. 1484 01:15:51,490 --> 01:15:55,230 Elke regel van de opmerkingen die we schreven we hier vertaalt naar ongeveer 1485 01:15:55,230 --> 01:15:56,970 een regel C-code. 1486 01:15:56,970 --> 01:16:01,780 Het uitroepen van een nieuwe variabele, schrijven een lus, een aantal aftrekken, sommige 1487 01:16:01,780 --> 01:16:07,070 vermenigvuldiging, en enkele opdracht. 1488 01:16:07,070 --> 01:16:09,020 We zouden waarschijnlijk ook willen schrijf een retourleiding. 1489 01:16:09,020 --> 01:16:12,040 We zouden ook willen zetten sommige controles in hier. 1490 01:16:12,040 --> 01:16:12,655 Yeah. 1491 01:16:12,655 --> 01:16:15,720 >> STUDENT: Dus we kunnen behandelen s als in de string? 1492 01:16:15,720 --> 01:16:18,730 Omdat ik weet dat het is gewoon een adres. 1493 01:16:18,730 --> 01:16:22,090 Zoals, hoe zou je de lengte van de string wordt doorgegeven? 1494 01:16:22,090 --> 01:16:25,310 >> JASON HIRSCHHORN: Dus hoe heeft de lengte van een string? 1495 01:16:25,310 --> 01:16:25,830 Strlen. 1496 01:16:25,830 --> 01:16:26,660 >> STUDENT: strlen, ja. 1497 01:16:26,660 --> 01:16:30,550 Maar kun je s als de argument voor? 1498 01:16:30,550 --> 01:16:34,620 >> JASON HIRSCHHORN: Dus strlen neemt een char ster. 1499 01:16:34,620 --> 01:16:38,090 En volgt dat char ster, en houdt tellen totdat het bij een 1500 01:16:38,090 --> 01:16:41,865 backslash 0. strlen was eigenlijk een van de andere programma's die we 1501 01:16:41,865 --> 01:16:42,850 gingen code. 1502 01:16:42,850 --> 01:16:44,560 Dat is nog een mooi voorbeeld om code. 1503 01:16:44,560 --> 01:16:47,270 Die ene is een beetje makkelijker, want als je gaat denken dat 1504 01:16:47,270 --> 01:16:47,830 conceptueel - 1505 01:16:47,830 --> 01:16:51,620 Ik zei het gewoon hardop - strlen volgt een pointer en blijft gaan en 1506 01:16:51,620 --> 01:16:54,210 tellen en bijhouden tot u een backslash 0 te bereiken. 1507 01:16:54,210 --> 01:16:56,530 >> STUDENT: OK, heb het. 1508 01:16:56,530 --> 01:17:00,200 >> JASON HIRSCHHORN: Dus beste van geluk op quiz 0 morgen. 1509 01:17:00,200 --> 01:17:03,170 Als je vragen hebt, ik zal buiten daarna. 1510 01:17:03,170 --> 01:17:05,610 Voel je vrij om me te mailen. 1511 01:17:05,610 --> 01:17:08,480 Reik uit naar uw eigen TF als je niet in mijn sectie, of mijn 1512 01:17:08,480 --> 01:17:10,005 mailen als u dat wilt. 1513 01:17:10,005 --> 01:17:13,140 >> Als u wilt freak out en stuur me een email, een freakout e-mail, ik zal 1514 01:17:13,140 --> 01:17:16,710 stuur je terug, net als een smiley, of, zoals, een grap of zo. 1515 01:17:16,710 --> 01:17:18,190 Dus voel je vrij om dat te doen ook. 1516 01:17:18,190 --> 01:17:20,750 Veel succes weer, en ik zal zie jullie allemaal volgende week. 1517 01:17:20,750 --> 01:17:23,435