1 00:00:00,000 --> 00:00:06,180 2 00:00:06,180 --> 00:00:07,820 >> JASON Hirsch: Welkom A5, almal. 3 00:00:07,820 --> 00:00:11,270 Ons het 'n opwindende week voor ons, meestal, want daar is so baie nuwe 4 00:00:11,270 --> 00:00:12,350 gesigte in hierdie kamer. 5 00:00:12,350 --> 00:00:12,920 Dit is wonderlik. 6 00:00:12,920 --> 00:00:15,740 Baie van julle is hier deur 'n ongeluk, wat is selfs beter. 7 00:00:15,740 --> 00:00:18,220 So hopelik sal jy hou by ons. 8 00:00:18,220 --> 00:00:20,220 >> Hierdie week gaan ons spandeer die grootste deel van die artikel 9 00:00:20,220 --> 00:00:21,870 voor te berei vir die toets. 10 00:00:21,870 --> 00:00:26,580 So per ons agenda, ons gaan om te praat 'n bietjie oor hulpbronne vir die klas, 11 00:00:26,580 --> 00:00:30,350 maar ook vir die toets, en dan weer, spandeer die grootste deel van die klas praat 12 00:00:30,350 --> 00:00:31,390 oor vrae. 13 00:00:31,390 --> 00:00:33,900 Sodra ons klaar beantwoord jou vrae, of indien jou vrae 14 00:00:33,900 --> 00:00:39,010 ons natuurlik lei tot 'n kodering, ek het monster probleme uit midterms 15 00:00:39,010 --> 00:00:43,180 verlede wat ons sal lewe kode in artikel tesame bring ook 'n paar ander 16 00:00:43,180 --> 00:00:45,420 goeie onderwerpe te dek. 17 00:00:45,420 --> 00:00:48,280 >> So die eerste, as ons deur gegaan het vir die afgelope paar weke om jou te herinner 18 00:00:48,280 --> 00:00:51,700 ouens, daar is 'n ton van die hulpbronne vir hierdie kursus beskikbaar. 19 00:00:51,700 --> 00:00:55,020 Baie van hulle sal baie nuttig wees aan jou as jy aanhou om te 20 00:00:55,020 --> 00:00:57,280 studeer quiz 0, omdat dit is Dinsdagmiddag. 21 00:00:57,280 --> 00:00:59,630 So julle almal gewees het studeer vir 'n bietjie. 22 00:00:59,630 --> 00:01:02,640 >> Daar is lesing notas en bron kode wat jy moet 23 00:01:02,640 --> 00:01:04,050 beslis check. 24 00:01:04,050 --> 00:01:05,019 Kyk na die kortbroek. 25 00:01:05,019 --> 00:01:07,470 Check uit study.cs50.net. 26 00:01:07,470 --> 00:01:11,770 En dan, hieronder gelys, 'n aantal ander hulpbronne. 27 00:01:11,770 --> 00:01:14,020 >> Weereens, quiz 0 is môre by 01:00. 28 00:01:14,020 --> 00:01:18,230 As jy nog nie gedoen het nie, maak seker Oor die Quiz 0 dokument op die 29 00:01:18,230 --> 00:01:21,370 Natuurlik se tuisblad om uit te vind waar jy die neem van die quiz. 30 00:01:21,370 --> 00:01:25,770 Die toets begin om 01:10 en eindig 70 minute later. 31 00:01:25,770 --> 00:01:29,610 So as jy opdaag ná 01:10, is jy gaan dat baie minder minute te kry 32 00:01:29,610 --> 00:01:30,940 as 70 die toets te neem. 33 00:01:30,940 --> 00:01:33,570 So maak seker jy is daar op tyd. 34 00:01:33,570 --> 00:01:38,690 As jy 'n verlenging student of 'n ander toets oorwegings, is dit 35 00:01:38,690 --> 00:01:40,400 dalk nie by 01:00 môre. 36 00:01:40,400 --> 00:01:43,540 Maar weereens, kyk die oor Quiz 0 dokumenteer om seker te maak jy weet wanneer 37 00:01:43,540 --> 00:01:44,760 jy neem die quiz. 38 00:01:44,760 --> 00:01:46,440 Ek het 75 minute tot hier. 39 00:01:46,440 --> 00:01:48,580 Ek dink dit is reg, nie 70. 40 00:01:48,580 --> 00:01:53,420 >> Dit dek al die materiaal van 'n week 0 met verlede week se lesing op Woensdag. 41 00:01:53,420 --> 00:01:59,350 En weer, vir hierdie toets, per wat dokument, kry jy 'n twee kante en 8 42 00:01:59,350 --> 00:02:03,770 1/2 met 11 vel papier wat jy kry as notas te gebruik tydens die toets. 43 00:02:03,770 --> 00:02:08,570 Baie mense, indien nie die meeste mense, het bevind dat die grootste enkele nuttige manier 44 00:02:08,570 --> 00:02:11,970 om te studeer vir die toets is om te Maak 'n studie vel, 'n 45 00:02:11,970 --> 00:02:13,730 one-sider, van hul eie. 46 00:02:13,730 --> 00:02:17,710 So kyk na die verlede kinders as jy het gesien die verlede kinders. 47 00:02:17,710 --> 00:02:19,960 Reik uit na vriende om te sien wat hulle is om op hulle s'n. 48 00:02:19,960 --> 00:02:23,610 >> Maar die hande-down, die beste manier wat jy kan studie is om te gaan deur alles en 49 00:02:23,610 --> 00:02:26,530 Whittle dit neer op wat moet of moet nie op daardie stuk behoort 50 00:02:26,530 --> 00:02:30,570 papier, want dit is net 'n baie nuttige manier vir jou om seker te maak 51 00:02:30,570 --> 00:02:33,620 jy gaan deur alles en het 'n paar vertroudheid met dit. 52 00:02:33,620 --> 00:02:36,690 Die meeste mense, vind ons, selfs al is hulle het die papier sit reg 53 00:02:36,690 --> 00:02:39,840 langs hulle op die toets, draai nie om nie, want, weer, wat baie 54 00:02:39,840 --> 00:02:43,290 proses gaan deur die inligting het hulle gehelp het om te leer nie. 55 00:02:43,290 --> 00:02:45,370 >> Het enige iemand enige vrae oor quiz 0? 56 00:02:45,370 --> 00:02:50,120 57 00:02:50,120 --> 00:02:51,450 Het almal - 58 00:02:51,450 --> 00:02:53,230 Ek gaan nie 'n opsteek van hande te doen. 59 00:02:53,230 --> 00:02:53,550 Never mind. 60 00:02:53,550 --> 00:02:54,790 Ek gaan wie om te vra begin studeer. 61 00:02:54,790 --> 00:02:58,360 Maar ek wil nie hê jy moet maak al nie jou hande samel. 62 00:02:58,360 --> 00:03:01,290 So soos ek gesê het - ja, Avi, gaan voort. 63 00:03:01,290 --> 00:03:04,205 >> AVI: Wat sou 'n nuttige ding op die een-pager te sit? 64 00:03:04,205 --> 00:03:05,875 >> Student: Daar is aan jou. 65 00:03:05,875 --> 00:03:08,210 >> JASON Hirsch: Jy kry jou oordeel te gebruik. 66 00:03:08,210 --> 00:03:13,220 Nuttige dinge op die een-pager te sit, As jy is verward oor die groot O 67 00:03:13,220 --> 00:03:17,510 runtime van verskillende soorte soektogte en allerhande, sit dit op daar in 'n 68 00:03:17,510 --> 00:03:18,760 handig dandy grafiek. 69 00:03:18,760 --> 00:03:22,250 Op dié manier, as jy het gevra dat die quiz, het jy nie nodig om te probeer en figuur 70 00:03:22,250 --> 00:03:23,560 dit uit of rede deur die runtime. 71 00:03:23,560 --> 00:03:24,730 Jy kan net kopieer dit af. 72 00:03:24,730 --> 00:03:28,320 As jy kyk na vasvrae verlede, 'n baie tye, is daar loop van die tyd vrae. 73 00:03:28,320 --> 00:03:34,150 So wat sou 'n voorbeeld van 'n goed ding op jou een-pager te sit. 74 00:03:34,150 --> 00:03:37,450 >> Ander goeie dinge aan te trek, as jy verward oor hoe om te verklaar om 'n 75 00:03:37,450 --> 00:03:40,570 funksie of wat die verskillende dele van die funksie verklaring, skryf 76 00:03:40,570 --> 00:03:43,400 dat daar aan, 'n generiese weergawe en dan miskien 'n voorbeeld. 77 00:03:43,400 --> 00:03:47,290 As jy verward oor wysers, 'n diagram van hoe wysers werk is 78 00:03:47,290 --> 00:03:48,660 waarskynlik werklik nuttig. 79 00:03:48,660 --> 00:03:52,440 As jy verward oor rekursie, 'n monster rekursiewe funksie daar 80 00:03:52,440 --> 00:03:54,980 kan ook blyk te wees baie nuttig. 81 00:03:54,980 --> 00:03:57,290 Is dit gee jou 'n paar idees? 82 00:03:57,290 --> 00:04:01,820 >> AVI: Jy moet verstaan ​​dat die hele samestelling proses, soos 83 00:04:01,820 --> 00:04:03,220 hoe dit alles werk? 84 00:04:03,220 --> 00:04:06,620 >> JASON Hirsch: Alles wat gedek kon 85 00:04:06,620 --> 00:04:08,060 wys op die quiz. 86 00:04:08,060 --> 00:04:08,930 Vrae - 87 00:04:08,930 --> 00:04:11,300 maar weer, sal 'n paar dinge wees geweeg swaarder as die ander. 88 00:04:11,300 --> 00:04:14,330 Sommige dinge kom weer en weer in die klas, in 89 00:04:14,330 --> 00:04:15,590 lesing, en afdeling. 90 00:04:15,590 --> 00:04:17,220 Ander dinge het nie kom wat dikwels. 91 00:04:17,220 --> 00:04:22,900 >> Ons het 'n baie gepraat oor # sluit en -L iets en wat die beteken in 92 00:04:22,900 --> 00:04:24,390 die samestelling proses. 93 00:04:24,390 --> 00:04:29,120 Ons het 'n baie gepraat oor GDB, klou, daardie verskillende vlae wat ons gebruik wanneer 94 00:04:29,120 --> 00:04:33,100 Ons stel iets, en wat make15, byvoorbeeld, regtig 95 00:04:33,100 --> 00:04:34,510 beteken en regtig nie. 96 00:04:34,510 --> 00:04:38,110 Ons het so veel oor praat nie elke enkele stap in 97 00:04:38,110 --> 00:04:39,240 die samestelling proses. 98 00:04:39,240 --> 00:04:40,410 Ons het nog daaroor gepraat nie. 99 00:04:40,410 --> 00:04:42,550 So dit is nog iets wat jy moet vertroud wees met. 100 00:04:42,550 --> 00:04:44,610 Maar weereens, ons gaan nie te wees - 101 00:04:44,610 --> 00:04:49,140 dinge wat kom meer dikwels in die klas meer geneig is om meer te kom 102 00:04:49,140 --> 00:04:52,495 dikwels en swaarder geweeg op die quiz. 103 00:04:52,495 --> 00:04:53,280 >> Cool. 104 00:04:53,280 --> 00:04:54,580 Enige ander vrae oor quiz 0? 105 00:04:54,580 --> 00:04:57,660 106 00:04:57,660 --> 00:05:00,050 >> OK, so ek het 'n lys van onderwerpe op die bord. 107 00:05:00,050 --> 00:05:01,550 Ek het deur die leerplan. 108 00:05:01,550 --> 00:05:07,340 Ek het deur die hersiening van artikel gisteraand en diegene gly te kom 109 00:05:07,340 --> 00:05:13,710 met 'n nie-volledige lys van onderwerpe wat ons tot dusver gedek in CS50 110 00:05:13,710 --> 00:05:16,800 en dinge wat kan verskyn die quiz. 111 00:05:16,800 --> 00:05:19,900 So ek gaan nie deur te gaan elke enkele een van hulle nie. 112 00:05:19,900 --> 00:05:22,370 Dit sou neem baie meer tyd as wat ons nou het. 113 00:05:22,370 --> 00:05:26,880 Maar ek het dit hier om hopelik draf jou geheue as dinge wat mag 114 00:05:26,880 --> 00:05:28,420 of dalk nie so vertroud is met jou. 115 00:05:28,420 --> 00:05:32,850 >> En ek wil graag die grootste deel van die te spandeer artikel jou vrae te beantwoord oor 116 00:05:32,850 --> 00:05:35,130 hierdie onderwerpe, onderwerpe wat nie hier gedek word. 117 00:05:35,130 --> 00:05:36,130 Ons kan pseudokode skryf. 118 00:05:36,130 --> 00:05:40,010 Ons kan die werklike kode skryf om te verseker dat jy - 119 00:05:40,010 --> 00:05:44,280 Ek kan jou vraag beantwoord en te help almal fundamenteel verstaan ​​'n 120 00:05:44,280 --> 00:05:48,330 Baie van hierdie onderwerpe sodat jy voel voorberei en gemaklik gaan in 121 00:05:48,330 --> 00:05:50,150 die quiz môre. 122 00:05:50,150 --> 00:05:52,300 So lees oor die lys. 123 00:05:52,300 --> 00:05:54,780 Jy hopelik artikel kom met 'n paar vrae. 124 00:05:54,780 --> 00:05:58,480 Wanneer jy gereed is, lig jou hand en ons sal begin. 125 00:05:58,480 --> 00:06:01,590 126 00:06:01,590 --> 00:06:05,200 >> Hou in gedagte, die vrae wat jy het, daar is geen dom vrae. 127 00:06:05,200 --> 00:06:06,250 Ons het gehoor dat 'n lot. 128 00:06:06,250 --> 00:06:09,490 En die vrae wat jy het, ek is bereid om , baie ander mense in te sit beide 129 00:06:09,490 --> 00:06:11,740 hier sit en kyk aanlyn so goed. 130 00:06:11,740 --> 00:06:13,770 So kan jy net mense help deur vrae te vra. 131 00:06:13,770 --> 00:06:15,070 Marcus. 132 00:06:15,070 --> 00:06:18,040 >> Markus: Tussen die stapel en die hoop, is daar 'n pre-toegeken 133 00:06:18,040 --> 00:06:22,880 persentasie van die geheue wat gedefinieer is as dit is vir die stapel of vir die hoop? 134 00:06:22,880 --> 00:06:25,010 Of hoe werk dit presies? 135 00:06:25,010 --> 00:06:26,230 >> JASON Hirsch: Groot vraag. 136 00:06:26,230 --> 00:06:28,640 Ek is van plan om terug te spoor 'n bietjie. 137 00:06:28,640 --> 00:06:30,910 Is almal - 138 00:06:30,910 --> 00:06:31,660 asseblief eerlik wees hier. 139 00:06:31,660 --> 00:06:34,130 Ek weet ek vra om jou te samel jou hand voor jou maats. 140 00:06:34,130 --> 00:06:38,510 Maar daar is mense wat voel ongemaklik met die stapel en hoop 141 00:06:38,510 --> 00:06:42,980 en wil graag oor te gaan wat en wat die beteken? 142 00:06:42,980 --> 00:06:43,880 Lig jou hand indien - 143 00:06:43,880 --> 00:06:44,420 OK. 144 00:06:44,420 --> 00:06:45,120 Dankie. 145 00:06:45,120 --> 00:06:48,420 So ons gaan om te gaan oor die stapel en die hoop regtig vinnig en dan 146 00:06:48,420 --> 00:06:50,370 beweeg in antwoord op jou vraag. 147 00:06:50,370 --> 00:06:58,250 >> So as ons trek uit 'n boks te verteenwoordig geheue op jou rekenaar, wat is 'n paar 148 00:06:58,250 --> 00:07:02,160 dinge wat gaan in die boks? 149 00:07:02,160 --> 00:07:03,630 Main. 150 00:07:03,630 --> 00:07:04,020 Een van die vernaamste funksie. 151 00:07:04,020 --> 00:07:05,890 Waar kom hoof gaan? 152 00:07:05,890 --> 00:07:08,090 >> STUDENT: [onhoorbaar]. 153 00:07:08,090 --> 00:07:09,390 >> JASON Hirsch: So ons sal sit belangrikste hier. 154 00:07:09,390 --> 00:07:12,180 155 00:07:12,180 --> 00:07:13,430 Wat anders gaan in hierdie boks? 156 00:07:13,430 --> 00:07:16,000 157 00:07:16,000 --> 00:07:18,140 >> STUDENT: die funksies wat jy noem. 158 00:07:18,140 --> 00:07:19,020 >> JASON Hirsch: Die funksies wat ons noem. 159 00:07:19,020 --> 00:07:20,440 En waar gaan hulle nie? 160 00:07:20,440 --> 00:07:21,300 >> STUDENT: In die stapel. 161 00:07:21,300 --> 00:07:22,380 >> JASON Hirsch: Hulle gaan in die stapel. 162 00:07:22,380 --> 00:07:27,350 So ons gaan om dit te noem ding hier die stapel. 163 00:07:27,350 --> 00:07:31,880 En tot bo, ons het die hoop. 164 00:07:31,880 --> 00:07:35,450 So geheue is nie 'n boks net soos hierdie. 165 00:07:35,450 --> 00:07:37,330 Maar dit is eintlik redelik soortgelyk. 166 00:07:37,330 --> 00:07:40,840 Dit gaan 'n klomp bokse te wees oor en oor, afhangende van hoe groot jou 167 00:07:40,840 --> 00:07:43,730 rekenaar of hoe groot jou geheue is. 168 00:07:43,730 --> 00:07:46,950 >> Aan die quote-unquote "onderkant" is die stapel. 169 00:07:46,950 --> 00:07:50,880 En daar is verskeie dinge wat gaan op die stapel. 170 00:07:50,880 --> 00:07:53,840 En dié is afhanklik van die funksies jy in jou kode. 171 00:07:53,840 --> 00:07:57,780 Jy het altyd 'n funksie in jou kode genoem hoof, dus is daar altyd 'n 172 00:07:57,780 --> 00:08:00,480 artikel hier in die stapel gewy aan hoof. 173 00:08:00,480 --> 00:08:03,980 >> Hierdie afdelings in die stapel word stapel rame genoem. 174 00:08:03,980 --> 00:08:09,580 Wanneer jy bel 'n ander funksie, sê hoof roep 'n binêre soek funksie, 175 00:08:09,580 --> 00:08:11,075 Ons het 'n ander raam op die stapel. 176 00:08:11,075 --> 00:08:13,830 177 00:08:13,830 --> 00:08:17,320 Meer spesifiek, gaan ons skenk 'n deel van die geheue op ons 178 00:08:17,320 --> 00:08:22,960 rekenaar binêre soek se plaaslike te stoor veranderlikes en die binêre te voer 179 00:08:22,960 --> 00:08:24,150 Soek kode. 180 00:08:24,150 --> 00:08:26,810 >> So noem ons binêre soek. 181 00:08:26,810 --> 00:08:30,440 182 00:08:30,440 --> 00:08:33,340 In hierdie stuk van die geheue, ons gaan sy plaaslike veranderlikes te stoor. 183 00:08:33,340 --> 00:08:35,270 Ons gaan die printf oproepe te stoor. 184 00:08:35,270 --> 00:08:38,159 Wat ook al gebeur, daardie funksie is gaan word reg daar gestoor. 185 00:08:38,159 --> 00:08:40,350 Binêre soek gaan uit te voer. 186 00:08:40,350 --> 00:08:42,210 Dit gaan uitvoering te voltooi. 187 00:08:42,210 --> 00:08:47,450 Wat is die woord in C wat dui dat 'n funksie moet 188 00:08:47,450 --> 00:08:49,306 voltooi die uitvoering daarvan? 189 00:08:49,306 --> 00:08:50,040 >> STUDENT: Terug. 190 00:08:50,040 --> 00:08:50,870 >> JASON Hirsch: terug te keer. 191 00:08:50,870 --> 00:08:53,230 So wanneer jy sien 'n terugkeer verklaring, die funksie eindig 192 00:08:53,230 --> 00:08:54,350 wanneer dit tref nie. 193 00:08:54,350 --> 00:08:56,740 So binêre soek, sal sy terugkeer getref. 194 00:08:56,740 --> 00:09:01,360 Hierdie deel van die geheue sal hoofsaaklik word bevry. 195 00:09:01,360 --> 00:09:03,510 En die belangrikste terug te gaan uitvoer. 196 00:09:03,510 --> 00:09:07,240 So hoof sal breek waar was, oproep binêre soek, kry 'n paar terugkeer waarde, 197 00:09:07,240 --> 00:09:08,700 en gaan voort om uitvoering. 198 00:09:08,700 --> 00:09:10,840 Hierdie stapel raam sal weggaan. 199 00:09:10,840 --> 00:09:14,810 >> As ons 'n rekursiewe funksie, wat is 'n funksie wat noem homself oor 200 00:09:14,810 --> 00:09:18,480 en oor, kan ons kry - sê ons het binêre soek rekursief. 201 00:09:18,480 --> 00:09:21,520 Ons kan kry binêre soek weergawe een, binêre soek twee, binêre soek 202 00:09:21,520 --> 00:09:24,090 drie, vier binêre soek, binêre soek vyf. 203 00:09:24,090 --> 00:09:27,950 En dan is dit finaal binêre soek vyf sal die basis geval, en die stapel getref 204 00:09:27,950 --> 00:09:31,010 rame sal terug te gaan en hou sluitingsdatum totdat ons terug na die hoof. 205 00:09:31,010 --> 00:09:32,530 Ons kan gaan oor rekursie in 'n bietjie. 206 00:09:32,530 --> 00:09:35,530 Maar al hierdie dinge is om te sê, as jy roep verskeie funksies op 'n tyd, 207 00:09:35,530 --> 00:09:39,250 Daar sal verskeie stapel wees rame op die stapel. 208 00:09:39,250 --> 00:09:42,900 >> Die hoop, aan die ander kant, tot Hier is nie vir funksies, 209 00:09:42,900 --> 00:09:44,380 nie vir plaaslike veranderlikes. 210 00:09:44,380 --> 00:09:48,920 Dit is vir dinamiese toegeken veranderlikes. 211 00:09:48,920 --> 00:09:57,210 So dit is veranderlikes wat kan wees geïnisialiseer in óf hoof-of 'n 212 00:09:57,210 --> 00:09:58,640 funksioneer wat hoof oproepe. 213 00:09:58,640 --> 00:10:00,790 Oral in jou kode, wat hulle kan geïnisialiseer word. 214 00:10:00,790 --> 00:10:04,360 En 'n dinamiese te inisialiseer toegeken veranderlike. 215 00:10:04,360 --> 00:10:06,970 Watter funksie in C gebruik ons? 216 00:10:06,970 --> 00:10:07,600 >> STUDENT: malloc. 217 00:10:07,600 --> 00:10:09,240 >> JASON Hirsch: malloc. 218 00:10:09,240 --> 00:10:10,800 Jy noem malloc. 219 00:10:10,800 --> 00:10:12,260 Jy kry 'n ruimte van die geheue. 220 00:10:12,260 --> 00:10:15,020 En dat die ruimte van die geheue is op die hoop. 221 00:10:15,020 --> 00:10:18,840 En dat die ruimte van die geheue bly daar totdat jy bel gratis. 222 00:10:18,840 --> 00:10:22,670 >> So dinamies toegeken veranderlikes in hoop sal bestaan ​​vir so lank as wat jy 223 00:10:22,670 --> 00:10:25,250 wil hulle bestaan ​​nie, en hulle sal nie weg te gaan totdat jy uitdruklik 224 00:10:25,250 --> 00:10:26,760 hulle vertel om weg te gaan. 225 00:10:26,760 --> 00:10:29,670 Jy kan dit maak in een funksie. 226 00:10:29,670 --> 00:10:31,930 Daardie funksie se stapel raam sal weggaan. 227 00:10:31,930 --> 00:10:35,490 Maar dit veranderlike sal steeds bestaan in die hoop totdat dit vrygelaat, 228 00:10:35,490 --> 00:10:39,650 potensieel deur die funksie wat genoem binêre soek of wat ook al. 229 00:10:39,650 --> 00:10:42,580 >> So diegene hoop veranderlikes bly daar vir so lank as wat jy wil 230 00:10:42,580 --> 00:10:43,490 om hulle daar te bly. 231 00:10:43,490 --> 00:10:46,090 En hulle kry hier sit. 232 00:10:46,090 --> 00:10:47,450 En dan is die volgende een kry daar te vestig. 233 00:10:47,450 --> 00:10:50,210 Hulle hou aan om gevul in, en hulle bly daar totdat julle vry bel. 234 00:10:50,210 --> 00:10:52,870 >> En in wese, die hoop en die stapel, om te Marcus se vraag 235 00:10:52,870 --> 00:10:54,500 groei na mekaar. 236 00:10:54,500 --> 00:10:57,730 En as hulle loop in mekaar, jy het gebruik om al die geheue in jou 237 00:10:57,730 --> 00:11:01,330 rekenaar, en jou program sal ophou omdat jy nie meer geheue hê 238 00:11:01,330 --> 00:11:02,420 links te gebruik. 239 00:11:02,420 --> 00:11:07,290 In tussen hulle, is daar moontlik ander dinge. 240 00:11:07,290 --> 00:11:10,980 Maar vir die omvang van hierdie kursus, kan jy hoef nie te bekommerd wees oor wat. 241 00:11:10,980 --> 00:11:12,020 >> So dit was die antwoord op jou vraag. 242 00:11:12,020 --> 00:11:13,520 Moet nie bekommerd wees oor dit. 243 00:11:13,520 --> 00:11:15,550 Maar dit was die lang antwoord. 244 00:11:15,550 --> 00:11:17,800 Al wat jy hoef te weet, is die hoop en die stapel sal - 245 00:11:17,800 --> 00:11:18,900 een begin aan die onderkant. 246 00:11:18,900 --> 00:11:19,570 Die stapel nie. 247 00:11:19,570 --> 00:11:20,790 Die hoop is daar. 248 00:11:20,790 --> 00:11:21,990 Hulle sal groei nader aan mekaar. 249 00:11:21,990 --> 00:11:23,110 >> En as hulle raak, is dit 'n probleem. 250 00:11:23,110 --> 00:11:24,500 Jy het uit die geheue. 251 00:11:24,500 --> 00:11:28,760 Maar ook, benewens om te weet waar hulle is wat in beide die gestoor 252 00:11:28,760 --> 00:11:30,512 stapel en hoop. 253 00:11:30,512 --> 00:11:31,410 Curtis. 254 00:11:31,410 --> 00:11:33,570 >> CURTIS: Wanneer hulle bots, is dat 'n Stapeloorvloei? 255 00:11:33,570 --> 00:11:35,670 >> JASON Hirsch: Wanneer hulle bots, dit is nie 'n stapel oorloop. 256 00:11:35,670 --> 00:11:38,340 'N Stapeloorvloei is 'n ander gebied dat ons kan gaan oor as jy wil. 257 00:11:38,340 --> 00:11:40,020 OK, ons sal terug kom in 'n bietjie. 258 00:11:40,020 --> 00:11:42,730 >> STUDENT: Wat is die woord genoem toe hulle mekaar slaan, die 259 00:11:42,730 --> 00:11:44,450 stapel en die hoop? 260 00:11:44,450 --> 00:11:46,640 >> JASON Hirsch: Vir nou, moenie bekommerd wees oor. 261 00:11:46,640 --> 00:11:47,750 Weet net - 262 00:11:47,750 --> 00:11:50,530 Ek sal daardie vraag te beantwoord na die klas. 263 00:11:50,530 --> 00:11:52,680 As hulle loop in mekaar, jy uitgehardloop geheue, want daar is nie meer 264 00:11:52,680 --> 00:11:53,330 ruimte is daar. 265 00:11:53,330 --> 00:11:55,450 >> STUDENT: Jammer, wat is 'n seg skuld? 266 00:11:55,450 --> 00:11:58,710 >> JASON Hirsch: 'n segment skuld kan genoem word vir - 267 00:11:58,710 --> 00:12:02,240 dit hang af waarom die seg skuld se genoem. 268 00:12:02,240 --> 00:12:06,260 Soms, jou Stapeloorvloei, sal dit sê seg fout as die fout. 269 00:12:06,260 --> 00:12:08,180 >> STUDENT: Wat van ontwysing 'n nul veranderlike? 270 00:12:08,180 --> 00:12:10,040 Is dit 'n seg skuld? 271 00:12:10,040 --> 00:12:11,480 >> JASON Hirsch: ontwysing 'n nul pointer - 272 00:12:11,480 --> 00:12:17,850 OK, so as jy 'n wyser wat jy gelyk aan nul is, wysers, onthou, 273 00:12:17,850 --> 00:12:20,270 Store geheue adresse as hulle waardes. 274 00:12:20,270 --> 00:12:23,660 En 'n nul wyser is in wese stoor 0, die 0-ste 275 00:12:23,660 --> 00:12:26,670 spreek in daardie veranderlike. 276 00:12:26,670 --> 00:12:30,010 So 0x, 0, 0, 0, 0, ensovoorts. 277 00:12:30,010 --> 00:12:35,030 Dit 0-de-posadres in die geheue wat nie in ons prentjie, dit is daar 278 00:12:35,030 --> 00:12:38,800 iewers, dis voorbehou vir die rekenaar. 279 00:12:38,800 --> 00:12:40,130 Ons is nie toegelaat word om dit aan te raak. 280 00:12:40,130 --> 00:12:44,680 >> So wanneer jou program se uitvoer, indien iets probeer om te gaan na die geheue 281 00:12:44,680 --> 00:12:48,990 adres 0, dit weet dat dit is 'n leë waarde. 282 00:12:48,990 --> 00:12:50,820 Dit weet niks moet daar wees. 283 00:12:50,820 --> 00:12:53,420 So as jy probeer en te gebruik om iets daar en behandel iets soos daar of 284 00:12:53,420 --> 00:12:58,355 probeer om te gaan na die plek, is jy gaan 'n seg fout of 'n fout te kry. 285 00:12:58,355 --> 00:13:00,520 Maak dit jou vraag? 286 00:13:00,520 --> 00:13:03,170 >> En nou gaan ons terug te gaan oorloop om te stapel. 287 00:13:03,170 --> 00:13:09,560 Dinge in die stapel te plaas, as jy ouens het gesien het, in - laat ons trek 'n beslote 288 00:13:09,560 --> 00:13:11,966 up van 'n stapel raam. 289 00:13:11,966 --> 00:13:15,050 Kan almal sien dat? 290 00:13:15,050 --> 00:13:16,650 So het ons ons stapel raam. 291 00:13:16,650 --> 00:13:23,260 Ons is 'n skikking te spaar in 'n plaaslike veranderlike in die funksie. 292 00:13:23,260 --> 00:13:29,510 So sê ons verskeidenheid het vyf kolle. 293 00:13:29,510 --> 00:13:33,230 Al vyf van diegene gestoor word in daardie stapel raam. 294 00:13:33,230 --> 00:13:37,540 >> As ons begin skryf as die grense van die skikking - 295 00:13:37,540 --> 00:13:43,990 so as ons begin skryf in, Kom ons sê dit is 0. 296 00:13:43,990 --> 00:13:46,800 Dit is die vyf indekse van ons verskeidenheid. 297 00:13:46,800 --> 00:13:50,980 As ons begin skryf in indeks 5, wat ons het nie wanneer ons 'n 298 00:13:50,980 --> 00:13:55,900 verskeidenheid van grootte 5, moet ons begin skryf in indeks 6, 7, 8, 9, kan ons 'n stapel kry 299 00:13:55,900 --> 00:13:57,960 Oorloop fout. 300 00:13:57,960 --> 00:14:00,510 >> Die algemeen dit is nie - 301 00:14:00,510 --> 00:14:04,910 jy sal waarskynlik in die moeilikheid As jy gaan deur een. 302 00:14:04,910 --> 00:14:08,640 Maar oor die algemeen, sal jy in die meeste probleme as jy gaan oor 'n klomp 303 00:14:08,640 --> 00:14:12,770 en jy so ver oor wat jy skryf, gaan oor die terugkeer adres van daardie 304 00:14:12,770 --> 00:14:16,080 funksie, wat geleë is by die onderkant van die stapel raam. 305 00:14:16,080 --> 00:14:16,520 >> Omdat, reg? 306 00:14:16,520 --> 00:14:17,670 Jy - in die - jammer. 307 00:14:17,670 --> 00:14:18,550 Nie ", want reg." 308 00:14:18,550 --> 00:14:20,470 >> In die stapel raam, jy het jou plaaslike veranderlikes. 309 00:14:20,470 --> 00:14:27,090 Op die heel onderkant van die stapel raam is die terugkeer adres. 310 00:14:27,090 --> 00:14:28,790 Dit is waar die funksie gaan as dit verby is. 311 00:14:28,790 --> 00:14:33,750 En as jy oor skryf dat terugkeer adres, dan wanneer hierdie stapel raam, 312 00:14:33,750 --> 00:14:36,680 wanneer jy gaan deur die stapel raam en uitvoering van elke lyn, is jy 313 00:14:36,680 --> 00:14:40,350 gaan om te gaan na jou nuwe terugkeer adres dat daar geskryf staan ​​in plaas van die 314 00:14:40,350 --> 00:14:40,910 werklike een. 315 00:14:40,910 --> 00:14:45,050 En dit is hoe ons gesien sommige sekuriteit oortredings 316 00:14:45,050 --> 00:14:46,780 kan gebeur met rekenaars. 317 00:14:46,780 --> 00:14:52,760 >> So Stapeloorvloei, in kort, is wanneer jy vervang die deel in die stapel 318 00:14:52,760 --> 00:14:55,440 jy veronderstel is om te gebruik, die plaaslike veranderlike jy veronderstel is om te gebruik, en 319 00:14:55,440 --> 00:14:58,070 in die besonder wanneer jy begin die vervang belangrike dinge soos die 320 00:14:58,070 --> 00:14:59,100 terug adres. 321 00:14:59,100 --> 00:15:00,090 En dit is waar jy 'n fout kry. 322 00:15:00,090 --> 00:15:03,980 Of miskien selfs kon jy begin selfs skryf in - 323 00:15:03,980 --> 00:15:05,370 sê binêre soek was reg bokant hoof. 324 00:15:05,370 --> 00:15:07,790 As jy overwrote 'n baie, jy kon in Hoofstraat skryf. 325 00:15:07,790 --> 00:15:10,230 Maar oor die algemeen, kry jy 'n fout voor Dan, omdat die rekenaar weet 326 00:15:10,230 --> 00:15:12,270 jy iets doen wat jy moet dit nie te doen nie. 327 00:15:12,270 --> 00:15:12,560 Ja. 328 00:15:12,560 --> 00:15:13,910 >> STUDENT: Wat is die verskil tussen 'n Stapeloorvloei 329 00:15:13,910 --> 00:15:16,940 en 'n buffer oorloop? 330 00:15:16,940 --> 00:15:19,420 >> JASON Hirsch: Buffer oorloop is 'n meer generiese tipe 331 00:15:19,420 --> 00:15:20,395 wat ek nou net beskryf. 332 00:15:20,395 --> 00:15:22,610 >> STUDENT: So 'n Stapeloorvloei is 'n voorbeeld van 'n buffer oorloop. 333 00:15:22,610 --> 00:15:23,420 >> JASON Hirsch: Presies. 334 00:15:23,420 --> 00:15:28,700 Dit is 'n skikking ons kan dink as 'n buffer, 'n ruimte vir die dinge te gaan in 335 00:15:28,700 --> 00:15:30,600 Dit is 'n stapel buffer oorloop. 336 00:15:30,600 --> 00:15:33,210 Ons kan 'n hoop buffer oorloop. 337 00:15:33,210 --> 00:15:36,870 As daar 'n buffer, wat daar dikwels is 'n skikking die hoop klippe, en ons 338 00:15:36,870 --> 00:15:40,600 overwrote die perke, dan sou ons het 'n hoop buffer oorloop. 339 00:15:40,600 --> 00:15:44,870 >> En buite die omvang van hierdie kursus Hulle is 'n bietjie anders bespeur. 340 00:15:44,870 --> 00:15:48,040 Die samesteller het 'n spesiale maniere om die opsporing van elk. 341 00:15:48,040 --> 00:15:50,660 Maar 'n buffer oorloop is 'n meer generiese tipe wat ek beskryf, 342 00:15:50,660 --> 00:15:54,090 wat was 'n stapel buffer oorloop. 343 00:15:54,090 --> 00:15:56,240 Het dit jou vraag? 344 00:15:56,240 --> 00:15:57,910 Soet. 345 00:15:57,910 --> 00:16:01,850 >> Was daar enige ander vrae verwante die stapel of die hoop? 346 00:16:01,850 --> 00:16:04,920 347 00:16:04,920 --> 00:16:05,510 Ja. 348 00:16:05,510 --> 00:16:08,220 >> STUDENT: Ek weet wat jy hoef te vry snare want hulle is in die hoop 349 00:16:08,220 --> 00:16:09,305 en jy wil nie geheue lek. 350 00:16:09,305 --> 00:16:12,240 Maar jy het globale veranderlikes te bevry en dinge soos wat? 351 00:16:12,240 --> 00:16:14,335 Of is hulle outomaties bevry? 352 00:16:14,335 --> 00:16:15,700 >> JASON Hirsch: Goeie vraag. 353 00:16:15,700 --> 00:16:22,340 So in CS50.H, skep ons hierdie ding vir jou genoem 'n string. 354 00:16:22,340 --> 00:16:23,800 'N string is regtig wat? 355 00:16:23,800 --> 00:16:24,810 >> STUDENT: Char ster. 356 00:16:24,810 --> 00:16:29,180 >> JASON Hirsch: 'n kar ster, 'n wyser om 'n karakter, 'n verwysing na 357 00:16:29,180 --> 00:16:30,650 'n verskeidenheid van die karakters. 358 00:16:30,650 --> 00:16:32,210 Dit is wat die string is. 359 00:16:32,210 --> 00:16:36,050 So ons moet dit vry, want getstring, wat ons gebruik om 'n baie - 360 00:16:36,050 --> 00:16:38,370 string naam is gelyk aan getstring - 361 00:16:38,370 --> 00:16:43,560 dat mallocs vir ons 'n paar geheue op die ophoop en dan stuur 'n wyser na die 362 00:16:43,560 --> 00:16:47,230 eerste karakter van daardie string, 'n kar ster. 363 00:16:47,230 --> 00:16:52,760 >> So oënskynlik, as jy nog nie free skryf op enige van jou snare 364 00:16:52,760 --> 00:16:55,600 wat jy tot dusver genoem is, moet jy lek 'n paar geheue. 365 00:16:55,600 --> 00:16:57,430 Natuurlik het ons nie gepraat oor dit, sodat niemand gekry is in 366 00:16:57,430 --> 00:16:58,520 moeilikheid vir om dit te doen. 367 00:16:58,520 --> 00:16:59,980 Maar vorentoe gaan, ja. 368 00:16:59,980 --> 00:17:03,990 Wanneer jy getstring noem, is jy mallocing 'n ruimte op die hoop. 369 00:17:03,990 --> 00:17:07,640 En as jy nie vry bel later op daardie string, jy het 'n geheue lek. 370 00:17:07,640 --> 00:17:09,440 Dit beantwoord jou vraag? 371 00:17:09,440 --> 00:17:10,606 >> Ja 372 00:17:10,606 --> 00:17:15,020 >> STUDENT: So dit te doen, gebruik ons vrye reg voor terugkeer? 373 00:17:15,020 --> 00:17:18,510 Soos, binne die bestek van, ek dink as ons binne die sê, soos, int hoof, 374 00:17:18,510 --> 00:17:24,410 omvang van die kode wat binne daardie krulhakies, reg voor - 375 00:17:24,410 --> 00:17:26,140 jy weet waar jy wil gewoonlik sit terugkeer. 376 00:17:26,140 --> 00:17:27,950 Sit jy vry voor dit? 377 00:17:27,950 --> 00:17:31,000 >> JASON Hirsch: So jy kan gratis sit waar jy wil gratis te sit. 378 00:17:31,000 --> 00:17:33,810 Omdat hierdie dinamiese toegeken veranderlikes, want hulle kan 379 00:17:33,810 --> 00:17:39,170 lewe buite die bestek van 'n bepaalde funksie, as jy malloc noem in 'n 380 00:17:39,170 --> 00:17:44,140 afsonderlike funksie, byvoorbeeld, getstring, kan jy gratis noem in die belangrikste. 381 00:17:44,140 --> 00:17:46,050 Jy hoef nie om dit te noem in die spesifieke funksie 382 00:17:46,050 --> 00:17:47,570 waar malloc genoem word. 383 00:17:47,570 --> 00:17:50,340 Maar jy moet om dit te noem voordat hoof opbrengste. 384 00:17:50,340 --> 00:17:51,120 >> En dit hang af. 385 00:17:51,120 --> 00:17:54,960 Dit hang af van die rede waarom jy malloced wat ruimte in die eerste plek. 386 00:17:54,960 --> 00:17:57,320 Sommige mense sal roep bevry redelik vinnig. 387 00:17:57,320 --> 00:17:59,220 Sommige mense sal nie vry noem totdat die einde van hul program. 388 00:17:59,220 --> 00:18:00,660 En hulle sal gaan deur en gratis alles. 389 00:18:00,660 --> 00:18:03,597 Dit hang af van die rede waarom jy malloc genoem. 390 00:18:03,597 --> 00:18:11,270 >> STUDENT: En wat sou jy sê As jy die naam gebruik getstring? 391 00:18:11,270 --> 00:18:13,320 Jy sê free wat? 392 00:18:13,320 --> 00:18:20,040 >> JASON Hirsch: So het die sintaksis gratis is eenvoudig vry, oop paren, naby 393 00:18:20,040 --> 00:18:22,130 paren, en die naam van die wyser. 394 00:18:22,130 --> 00:18:26,410 So as jy skryf string naam gelykes getstring, jy sit naam hier. 395 00:18:26,410 --> 00:18:27,760 Dit is die naam van die wyser. 396 00:18:27,760 --> 00:18:30,570 En hy weet dat die geheue te bevry. 397 00:18:30,570 --> 00:18:33,920 >> STUDENT: So wanneer dit bevry dat die geheue, die wyser wys nog steeds na die plek 398 00:18:33,920 --> 00:18:34,970 in die geheue? 399 00:18:34,970 --> 00:18:39,020 Of is die wyser ook leeggemaak die adres wat dit op. 400 00:18:39,020 --> 00:18:40,290 >> JASON Hirsch: Ons moet probeer om dit. 401 00:18:40,290 --> 00:18:41,430 Ons moet Kode wat. 402 00:18:41,430 --> 00:18:43,880 Kom ons kom terug wanneer ons by kodering, en laat kode wat. 403 00:18:43,880 --> 00:18:46,000 En as jy wil die antwoord uit te vind dat, kan jy ook kode wat 404 00:18:46,000 --> 00:18:46,690 in die tussentyd. 405 00:18:46,690 --> 00:18:49,100 Maar dit is 'n groot vraag. 406 00:18:49,100 --> 00:18:53,480 >> STUDENT: Is dit moontlik om te gou vry iets? 407 00:18:53,480 --> 00:18:58,530 So het jy nog nodig het om dit vir jou program, en jy bevry dat die geheue ruimte? 408 00:18:58,530 --> 00:18:59,200 >> JASON Hirsch: Ja. 409 00:18:59,200 --> 00:19:03,020 Dit is moontlik, as jy iets gratis en dan kan jy dit weer gebruik, sal jy 410 00:19:03,020 --> 00:19:06,890 loop in 'n fout. 411 00:19:06,890 --> 00:19:10,810 Maar dit is op jou, omdat jy bevry iets en dan later genoem het. 412 00:19:10,810 --> 00:19:13,940 So dit was 'n programmeerder se fout. 413 00:19:13,940 --> 00:19:14,780 Maar ja. 414 00:19:14,780 --> 00:19:17,760 Jy kan skryf nie. 415 00:19:17,760 --> 00:19:19,240 >> Enige verdere vrae op - 416 00:19:19,240 --> 00:19:19,760 ja. 417 00:19:19,760 --> 00:19:22,820 >> STUDENT: So as jy is veronderstel om net vry om dit in die algemeen voor die 418 00:19:22,820 --> 00:19:25,490 program eindig, beteken dit as die program eindig en jy Los dit nie, 419 00:19:25,490 --> 00:19:27,580 dat die geheue is nog toegeken? 420 00:19:27,580 --> 00:19:31,330 >> JASON Hirsch: As jou program eindig en jy vergeet om iets te bevry, dan 421 00:19:31,330 --> 00:19:34,390 dat die geheue is deurgaans toegeken die leeftyd van jou program. 422 00:19:34,390 --> 00:19:37,670 Wanneer jou program sluit heeltemal, dat die geheue is nie van plan 423 00:19:37,670 --> 00:19:39,490 om daar te bly vir ewig. 424 00:19:39,490 --> 00:19:42,080 Die rekenaar is slim genoeg om te weet dat wanneer die program sluit, is dit 425 00:19:42,080 --> 00:19:46,440 moet ontslae te raak van al die geheue wat is wat verband hou met die program. 426 00:19:46,440 --> 00:19:51,240 >> Maar daar is gereedskap wat jy kan hardloop op 'n program op te spoor indien, wanneer die 427 00:19:51,240 --> 00:19:54,720 program klaar is, jy vergeet sommige geheue te bevry. 428 00:19:54,720 --> 00:19:57,960 En vir jou volgende probleem stel waar jy sal gebruik word om malloc en die gebruik van 429 00:19:57,960 --> 00:20:02,610 wysers, sal jy hardloop hierdie program op jou program om te sien of, 430 00:20:02,610 --> 00:20:06,530 wanneer vernaamste opbrengste, jy het 'n paar dinge wat unfreed oorgebly het. 431 00:20:06,530 --> 00:20:09,130 >> So hulle gaan nie malloced om te bly vir ewig in jou rekenaar. 432 00:20:09,130 --> 00:20:11,720 Dit sou wees verkwistende, want baie vinnig, rekenaars 433 00:20:11,720 --> 00:20:12,960 sou loop uit van die geheue. 434 00:20:12,960 --> 00:20:16,450 Maar as hulle loop tot aan die einde van jou program en hulle is nie bevry en jou 435 00:20:16,450 --> 00:20:20,260 program uitgange, dit is nog steeds 'n probleem dat hierdie instrument sal jou help om te spreek. 436 00:20:20,260 --> 00:20:21,520 >> STUDENT: Is dit Valgrind? 437 00:20:21,520 --> 00:20:22,910 >> JASON Hirsch: Dit is ' genoem Valgrind. 438 00:20:22,910 --> 00:20:23,520 En jy sal wees - 439 00:20:23,520 --> 00:20:25,780 >> STUDENT: Maar ons het nie om te weet wat vir die toets, al is? 440 00:20:25,780 --> 00:20:27,600 Ek bedoel, is dit gepraat oor 'n bietjie in lesing. 441 00:20:27,600 --> 00:20:33,600 >> JASON Hirsch: So Valgrind is die naam van die instrument. 442 00:20:33,600 --> 00:20:37,180 Weet wat dit doen, is genoeg vir die toets. 443 00:20:37,180 --> 00:20:40,200 Maar jy het dit nie gebruik nie op jou probleem stel, want ons het nie 'n 444 00:20:40,200 --> 00:20:43,520 probleem stel wat uitdruklik behandel met malloc of jy met behulp van malloc. 445 00:20:43,520 --> 00:20:45,330 So jy het Valgrind nog nie gebruik. 446 00:20:45,330 --> 00:20:47,760 Maar jy sal dit gouer gebruik eerder as later. 447 00:20:47,760 --> 00:20:48,710 >> STUDENT: Kan jy herhaal wat Valgrind is? 448 00:20:48,710 --> 00:20:49,190 >> JASON Hirsch: Jammer? 449 00:20:49,190 --> 00:20:51,240 >> STUDENT: Kan jy herhaal wat die doel van Valgring is? 450 00:20:51,240 --> 00:20:53,100 >> JASON Hirsch: Valgrind is die naam - 451 00:20:53,100 --> 00:20:59,890 soos GDB help jou ontfout jou program, Valgrind help jy uitvind of 452 00:20:59,890 --> 00:21:03,210 dinge is nie vry wanneer jou program sluit. 453 00:21:03,210 --> 00:21:05,110 So sal jy hardloop dit op jou program. 454 00:21:05,110 --> 00:21:09,230 En jou program verlaat, en dit sal sê jou program genaamd malloc hierdie baie 455 00:21:09,230 --> 00:21:13,670 keer vir hierdie baie grepe, en jy net genoem vry om hierdie baie keer. 456 00:21:13,670 --> 00:21:16,520 En sodat jy hierdie baie grepe links sonder om bevry. 457 00:21:16,520 --> 00:21:18,050 Of dit sal sê jy het alles bevry. 458 00:21:18,050 --> 00:21:19,070 Goeie werk. 459 00:21:19,070 --> 00:21:19,480 >> STUDENT: OK. 460 00:21:19,480 --> 00:21:21,060 En dit is bekend Valgring? 461 00:21:21,060 --> 00:21:24,940 >> JASON Hirsch: V-A-L-G-R-ek-N-D. 462 00:21:24,940 --> 00:21:25,970 >> STUDENT: 'n vraag oor wysers. 463 00:21:25,970 --> 00:21:30,080 So sê jy het n ster x is gelyk aan iets. 464 00:21:30,080 --> 00:21:33,330 Dit is gelyk aan, wat ookal jy sit daar is, is dat wat daar binne-in sit 465 00:21:33,330 --> 00:21:36,120 wat x is, gewys het, of die wyser van x? 466 00:21:36,120 --> 00:21:37,690 >> JASON Hirsch: Kan u herhaal die vraag? 467 00:21:37,690 --> 00:21:39,340 Kan ons dan, terwyl jy dit sê? 468 00:21:39,340 --> 00:21:42,710 >> STUDENT: In die toets, eintlik, die een wat jy vir ons gestuur het, was dit soos, kar 469 00:21:42,710 --> 00:21:46,520 star waarheid gelyk CS50 rotse, reg? 470 00:21:46,520 --> 00:21:52,190 So beteken dit dat CS50 rotse is wat die waarheid is wys na? 471 00:21:52,190 --> 00:21:55,810 >> JASON Hirsch: So jy praat oor 'n kar ster in 'n string, hoe 472 00:21:55,810 --> 00:21:56,460 wat werk? 473 00:21:56,460 --> 00:21:56,890 Ja. 474 00:21:56,890 --> 00:21:57,700 OK. 475 00:21:57,700 --> 00:21:59,140 Kom ons teken dit oor hier. 476 00:21:59,140 --> 00:22:07,100 >> [SIDE GESPREK] 477 00:22:07,100 --> 00:22:11,130 >> JASON Hirsch: So hierdie veranderlike gaan wees van die tipe char ster. 478 00:22:11,130 --> 00:22:14,580 Hoe groot is 'n veranderlike van die tipe char ster? 479 00:22:14,580 --> 00:22:15,510 Hoeveel grepe? 480 00:22:15,510 --> 00:22:16,450 >> STUDENTE: Vier. 481 00:22:16,450 --> 00:22:18,210 >> JASON Hirsch: Dit is vier grepe. 482 00:22:18,210 --> 00:22:21,420 Hoeveel regte is 'n veranderlike van die tipe int ster? 483 00:22:21,420 --> 00:22:22,210 >> STUDENTE: Vier. 484 00:22:22,210 --> 00:22:24,910 >> JASON Hirsch: Vier grepe. 485 00:22:24,910 --> 00:22:28,280 As dit is 'n wyser, dan is dit altyd vier grepe, want wysers, hul 486 00:22:28,280 --> 00:22:30,070 waarde is 'n geheue adres. 487 00:22:30,070 --> 00:22:35,160 En geheue-adresse op die CS50 toestel is vier grepe lank. 488 00:22:35,160 --> 00:22:42,900 So wanneer ons getstring, of wanneer ons 'n beroep sê, stringname gelyk, en dan in 489 00:22:42,900 --> 00:22:46,140 dubbel aanhalings het 'n string, ons besig is om - 490 00:22:46,140 --> 00:22:46,920 Wel, dit is 'n bietjie anders. 491 00:22:46,920 --> 00:22:48,630 Ons sal nie getstring as die voorbeeld. 492 00:22:48,630 --> 00:22:52,150 Of kar ster iets gelyk aan die tou. 493 00:22:52,150 --> 00:22:54,360 Jammer, gee my die voorbeeld dat jy lees? 494 00:22:54,360 --> 00:22:57,590 >> STUDENT: char ster waarheid is gelyk aan "Cs50 rotse" in dubbel aanhalingstekens. 495 00:22:57,590 --> 00:23:02,260 >> JASON Hirsch: So hierdie ster, hierdie Ons sal hierdie veranderlike x bel vir ons 496 00:23:02,260 --> 00:23:04,060 generiese doeleindes. 497 00:23:04,060 --> 00:23:05,970 Ons het 'n veranderlike genoem x. 498 00:23:05,970 --> 00:23:07,610 Dit is die tipe char ster. 499 00:23:07,610 --> 00:23:10,950 Dit is 'n verwysing na 'n reeks van die karakters. 500 00:23:10,950 --> 00:23:12,200 So hier - 501 00:23:12,200 --> 00:23:23,710 502 00:23:23,710 --> 00:23:25,890 >> So dit is hoe dit werk in die geheue. 503 00:23:25,890 --> 00:23:27,410 Dit sou 'n geheue adres stoor. 504 00:23:27,410 --> 00:23:31,770 Dit sou die geheue adres van die winkel Die eerste karakter in die skikking. 505 00:23:31,770 --> 00:23:33,830 En dan wanneer jy gevolg die wyser, sou jy 506 00:23:33,830 --> 00:23:35,200 kry die eerste karakter. 507 00:23:35,200 --> 00:23:38,780 >> En as jy hierdie ding lees soos 'n string, jou rekenaar is slim 508 00:23:38,780 --> 00:23:42,930 genoeg om te weet, lees hierdie hele ding totdat dit raak 'n teenreaksie 0. 509 00:23:42,930 --> 00:23:45,530 Maar as jy dit lees 'n karakter op 'n tyd, so jy iterating deur 510 00:23:45,530 --> 00:23:49,910 hierdie string, dan sal jy net lees 'n karakter op 'n tyd totdat jy 511 00:23:49,910 --> 00:23:50,850 backslash 0. 512 00:23:50,850 --> 00:23:52,335 Dit kan nie antwoord op jou vraag, al is. 513 00:23:52,335 --> 00:23:55,610 >> STUDENT: Ja, maar jy het nie malloced dat die ruimte 514 00:23:55,610 --> 00:23:58,400 nog vir die wyser. 515 00:23:58,400 --> 00:24:02,510 >> JASON Hirsch: So ek is nie heeltemal seker presies wat jy is op soek na, 516 00:24:02,510 --> 00:24:03,640 want ek het nie te maak dat quiz. 517 00:24:03,640 --> 00:24:06,370 Dit was veronderstel om 'n nuttige hulpbron van 'n ander TF. 518 00:24:06,370 --> 00:24:11,380 As jy 'n tou op die stapel of as 'n plaaslike veranderlike, sal dit 519 00:24:11,380 --> 00:24:16,920 net verskeidenheid van koste eerder as algemeen 'n kar ster verwys na 520 00:24:16,920 --> 00:24:18,600 'n ander string. 521 00:24:18,600 --> 00:24:20,550 Maar ek weet nie. 522 00:24:20,550 --> 00:24:25,065 Dit kan 'n verwysing na 'n ander te wees string op die stapel sowel. 523 00:24:25,065 --> 00:24:27,240 Ja. 524 00:24:27,240 --> 00:24:31,116 >> STUDENT: Ek weet dat jy nodig het om te toeken geheue indien die wyser is 525 00:24:31,116 --> 00:24:33,360 om verklaar binnekant van 'n ander funksie. 526 00:24:33,360 --> 00:24:36,740 Het jy behoefte aan dieselfde ding om te doen as dit verklaar binnekant van die belangrikste, 527 00:24:36,740 --> 00:24:39,570 jy gebruik dit in van die belangrikste? 528 00:24:39,570 --> 00:24:43,590 >> JASON Hirsch: So ja. 529 00:24:43,590 --> 00:24:46,670 Jy kan 'n wyser verklaar aan enige geheue adres in die geheue. 530 00:24:46,670 --> 00:24:51,440 Dit kan die geheue-adres van 'n plaaslike wees veranderlike, alhoewel dikwels, 531 00:24:51,440 --> 00:24:55,760 mense nie geheue adresse verklaar nie om plaaslike veranderlikes, want hulle gaan 532 00:24:55,760 --> 00:24:59,890 weg keer dat funksie gee, wat is die rede waarom ons oor die algemeen malloc dinge. 533 00:24:59,890 --> 00:25:04,630 Maar ja, jy kan 'n wyser verklaar na 'n ander plaaslike veranderlike. 534 00:25:04,630 --> 00:25:06,360 Dit is net oor die algemeen nie gedoen nie. 535 00:25:06,360 --> 00:25:09,480 Maar ek kan 'n blik op wat neem spesifieke ding na die klas. 536 00:25:09,480 --> 00:25:10,650 Ja. 537 00:25:10,650 --> 00:25:12,350 >> STUDENT: Ek dink dit is 'n soort van wat gevra word. 538 00:25:12,350 --> 00:25:16,930 Dit lyk vreemd word initializing 'n wyser nie as 'n 539 00:25:16,930 --> 00:25:20,760 adres nie, maar as dit wat lyk soos 'n waarde. 540 00:25:20,760 --> 00:25:25,970 Dit lyk asof die CS50 is wat binne die ding wat wys na en 541 00:25:25,970 --> 00:25:28,820 nie die werklike adres, reg? 542 00:25:28,820 --> 00:25:30,520 >> JASON Hirsch: So dit is nie die geval nie, al is. 543 00:25:30,520 --> 00:25:32,470 Dit is nie wat gebeur. 544 00:25:32,470 --> 00:25:35,910 Wanneer jy 'n kar ster verklaar, dit is 'n geheue adres. 545 00:25:35,910 --> 00:25:38,860 Wysers is al die geheue adresse verwys na iets anders. 546 00:25:38,860 --> 00:25:41,480 Wat iets anders kan wees op die stapel, maar byna altyd op die 547 00:25:41,480 --> 00:25:43,440 ophoop in die manier waarop ons sal sien dit gebruik. 548 00:25:43,440 --> 00:25:46,860 549 00:25:46,860 --> 00:25:53,500 Maar stringname gelyk aan dubbel-aanhaling "Getstring," ons kan sien dat ons 550 00:25:53,500 --> 00:25:55,010 kan kyk deur dit en kode wat. 551 00:25:55,010 --> 00:26:01,190 getstring string is nie gestoor in dat veranderlike, of wat ook al die string 552 00:26:01,190 --> 00:26:04,580 naam word nie gered in daardie veranderlike, want dit is nie hoe 553 00:26:04,580 --> 00:26:06,070 wysers werk. 554 00:26:06,070 --> 00:26:06,770 Is wat sin maak? 555 00:26:06,770 --> 00:26:07,170 >> STUDENT: Ja. 556 00:26:07,170 --> 00:26:08,570 >> JASON Hirsch: OK. 557 00:26:08,570 --> 00:26:11,690 Hopelik, dit was nie verwarrend aan enigiemand. 558 00:26:11,690 --> 00:26:15,732 Maar as dit was, kan ons kyk na dit weer in 'n bietjie, want ons is eintlik gaan 559 00:26:15,732 --> 00:26:19,240 iets wat hopelik die kode werk met snare en help jy voel 560 00:26:19,240 --> 00:26:22,170 meer gemaklik met hulle. 561 00:26:22,170 --> 00:26:24,869 >> Enige ander vrae wat verband hou met hierdie onderwerpe of ander onderwerpe wat 562 00:26:24,869 --> 00:26:26,119 Ek sal terug sit? 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 nou. 566 00:26:36,310 --> 00:26:37,630 Ja, Alden. 567 00:26:37,630 --> 00:26:39,860 >> ALDEN: So is dit heeltemal los, maar kan ons net gaan oor 568 00:26:39,860 --> 00:26:42,760 regtig vinnig wat ons nodig het om te weet oor die verskil tussen 'n 32 en 569 00:26:42,760 --> 00:26:46,345 64-bit masjien? 570 00:26:46,345 --> 00:26:47,740 >> JASON Hirsch: Ja. 571 00:26:47,740 --> 00:26:52,111 So 32 stukkies is hoeveel grepe? 572 00:26:52,111 --> 00:26:53,060 >> ALDEN: Dit is vier grepe. 573 00:26:53,060 --> 00:26:54,360 >> JASON Hirsch: Dit is vier grepe. 574 00:26:54,360 --> 00:26:58,420 En 64 stukkies is hoeveel grepe? 575 00:26:58,420 --> 00:26:59,112 >> STUDENT: Agt. 576 00:26:59,112 --> 00:27:00,610 >> JASON Hirsch: Agt grepe. 577 00:27:00,610 --> 00:27:03,980 So weer, agt stukkies is een byte. 578 00:27:03,980 --> 00:27:08,340 Jou CS50 toestel is 'n 32-bit masjien. 579 00:27:08,340 --> 00:27:13,650 So geheue adresse vier grepe lank. 580 00:27:13,650 --> 00:27:17,460 Daar is 2 tot die 32 geheue adresse. 581 00:27:17,460 --> 00:27:21,310 0-2 aan die 32 minus 1. 582 00:27:21,310 --> 00:27:27,630 En ek is nie positief nie, maar dit is waarskynlik die omvang van wat jy nodig het om te 583 00:27:27,630 --> 00:27:35,230 weet vir 'n 32-bit masjien, wat die geheue adresse, weer, vier grepe lank, 584 00:27:35,230 --> 00:27:39,620 en dit is die maksimum bedrag geheue adresse. 585 00:27:39,620 --> 00:27:41,680 >> Ook, data tipes - 586 00:27:41,680 --> 00:27:45,020 hierdie dalk iets wees soos Wel, dit is die moeite werd om daarop te let. 587 00:27:45,020 --> 00:27:49,610 Die grootte van 'n data tipe hang af van die masjien jy werk met. 588 00:27:49,610 --> 00:27:56,760 So 'n kar, 'n enkele karakter, is hoe baie grepe op ons CS50 toestel? 589 00:27:56,760 --> 00:27:57,980 Een byte. 590 00:27:57,980 --> 00:28:02,310 En dit is eintlik een byte as goed op 'n 64-bit masjien. 591 00:28:02,310 --> 00:28:05,920 >> En die meeste data tipes is dieselfde aantal grepe op beide masjiene. 592 00:28:05,920 --> 00:28:11,620 Maar sommige data tipes sal anders wees op beide masjiene. 593 00:28:11,620 --> 00:28:14,590 So wat potensieel sou wees om die enigste ding wat jy nodig het om te weet. 594 00:28:14,590 --> 00:28:16,710 >> Maar selfs dit, dink ek, is buite die grense - 595 00:28:16,710 --> 00:28:20,990 Ek is amper positiewe, as jy kyk terug by ou vasvrae, dit sê, aanvaar vir 596 00:28:20,990 --> 00:28:24,090 kodering probleme wat jy gebruik 'n 32-bit masjien. 597 00:28:24,090 --> 00:28:26,620 598 00:28:26,620 --> 00:28:30,620 Maar daar is, om saam te gaan met dit in geval jy belangstel, is daar 599 00:28:30,620 --> 00:28:35,920 data tipes wat dieselfde grootte op al die masjiene. 600 00:28:35,920 --> 00:28:42,670 >> As jy iets soos gesien uint32_t, mag of mag jy 601 00:28:42,670 --> 00:28:43,260 nie gesien het nie. 602 00:28:43,260 --> 00:28:44,290 Dit is 'n data tipe. 603 00:28:44,290 --> 00:28:47,570 Wat sê wees 32 stukkies maak nie saak wat die masjien dit is op. 604 00:28:47,570 --> 00:28:50,350 So wanneer mense skryf draagbare kode, hulle sal waarskynlik nie ints gebruik. 605 00:28:50,350 --> 00:28:53,260 Hulle sal gebruik in plaas van hierdie ander data tipes wat hulle weet dieselfde sal wees 606 00:28:53,260 --> 00:28:54,780 grootte op elke enkele masjien. 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: Ek het 'n vraag oor die samestelling proses. 610 00:29:00,150 --> 00:29:04,110 So as jy 'n program wat gebruik maak van skryf 'n biblioteek soos CS50 of iets 611 00:29:04,110 --> 00:29:06,840 soos wat, ek weet dat daardie biblioteek moet op 'n sekere punt, wees 612 00:29:06,840 --> 00:29:08,590 saamgestel en gekoppel in 613 00:29:08,590 --> 00:29:13,380 Maar hoeveel van dit gebeur tydens die samestelling van jou program? 614 00:29:13,380 --> 00:29:15,880 Watter deel van die biblioteek in die proses vind plaas wanneer jy 615 00:29:15,880 --> 00:29:18,560 die opstel van jou eie program? 616 00:29:18,560 --> 00:29:24,020 >> JASON Hirsch: So laat ons gaan oor algemeen die stappe van hierdie proses. 617 00:29:24,020 --> 00:29:26,280 Jy skryf jou. C lêer. 618 00:29:26,280 --> 00:29:33,530 In jou. C lêer, jy # sluit jou kop biblioteke, byvoorbeeld, cs50.h. 619 00:29:33,530 --> 00:29:39,480 Wat beteken dat skerp sluit lyn doen om jou program? 620 00:29:39,480 --> 00:29:40,525 Akchar. 621 00:29:40,525 --> 00:29:43,350 >> AKCHAR: Dit voeg die voorlopers van die funksies van die kop 622 00:29:43,350 --> 00:29:45,120 lêers in die biblioteke. 623 00:29:45,120 --> 00:29:45,600 >> JASON Hirsch: Presies. 624 00:29:45,600 --> 00:29:49,870 Dit voeg die funksie prototipes om jou kode. 625 00:29:49,870 --> 00:29:55,230 So wanneer jou kode word saamgestel in die vroeë stadiums, samesteller weet 626 00:29:55,230 --> 00:29:59,250 dat hierdie funksies werklik bestaan, en dat iewers hulle is gedefinieer. 627 00:29:59,250 --> 00:30:02,460 Die. H lêers sluit nie die definisies vir hierdie funksies of hoe 628 00:30:02,460 --> 00:30:03,950 hulle eintlik werk. 629 00:30:03,950 --> 00:30:07,960 Cs50.h sluit net iets wat sê getstring is 'n ware ding wat 630 00:30:07,960 --> 00:30:09,270 kan gebeur. 631 00:30:09,270 --> 00:30:14,240 En standardio.h sê printf is 'n ware ding wat kan gebeur. 632 00:30:14,240 --> 00:30:23,190 >> Kop sodat jou c taal met hierdie. lêer kry verander in 'n paar 633 00:30:23,190 --> 00:30:27,750 masjien-leesbare kode, wat uiteindelik kry het in binêre 634 00:30:27,750 --> 00:30:30,030 kode, 0's en 1's. 635 00:30:30,030 --> 00:30:33,590 En dit is die kode wat uiteindelik uitgevoer word. 636 00:30:33,590 --> 00:30:38,550 Die-l cs50 lyn - byvoorbeeld, wanneer jy skryf klang - 637 00:30:38,550 --> 00:30:41,830 en dan moet jy sluit-l cs50, jy tik dat in 638 00:30:41,830 --> 00:30:42,180 En jy sien dat. 639 00:30:42,180 --> 00:30:43,890 Wanneer jy skryf maak, sal jy sien dat die lyn hier. 640 00:30:43,890 --> 00:30:47,740 En ons sal sien wat in 'n tweede toe ons kode of later wanneer ons kode. 641 00:30:47,740 --> 00:30:50,390 >> Maar dat-l cs50 lyn doen iets 'n bietjie anders as 642 00:30:50,390 --> 00:30:52,440 die # sluit cs50.h. 643 00:30:52,440 --> 00:30:56,300 Wat beteken dat-l cs50 lyn te doen? 644 00:30:56,300 --> 00:30:56,820 Avi? 645 00:30:56,820 --> 00:31:00,310 >> AVI: Ek wil om te sê dat dit skakels die biblioteek aan die funksie 646 00:31:00,310 --> 00:31:02,710 noem, soos die. o lêers. 647 00:31:02,710 --> 00:31:08,200 >> JASON Hirsch: So baie naby, indien nie in die kol. 648 00:31:08,200 --> 00:31:16,220 Die-l cs50 neem die binêre lêer en kombineer dit met jou binêre lêer. 649 00:31:16,220 --> 00:31:21,410 So cs50.h, is daar geen punt in die draai cs50.h van C-taal elke binêre 650 00:31:21,410 --> 00:31:23,130 enkele keer is dit gebruik word. 651 00:31:23,130 --> 00:31:26,650 Dit sou dom wees, want dit sou 'n baie tyd mors. 652 00:31:26,650 --> 00:31:30,420 So dit is reeds saamgestel en verander in 'n uitvoerbare. 653 00:31:30,420 --> 00:31:35,430 En nou is dit gaan saamgesmelt staan ​​te word met jou lêer aan die einde. 654 00:31:35,430 --> 00:31:38,370 So diegene 1 en 0's gaan om saam te smelt met jou kinders 655 00:31:38,370 --> 00:31:39,150 en 0's aan die einde. 656 00:31:39,150 --> 00:31:43,670 So nou moet jy eintlik die werklike 1 en 0's wat bepaal hoe getstring, 657 00:31:43,670 --> 00:31:47,890 byvoorbeeld, werk, of hoe printf, byvoorbeeld, werk. 658 00:31:47,890 --> 00:31:52,750 >> En vir meer inligting, daar is 'n kort opstellers dat Nate gee dat 659 00:31:52,750 --> 00:31:55,410 jy moet check wat gaan deur die stappe. 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: Is hulle altyd in o lêers. wanneer hulle in die biblioteek vorm, 663 00:32:01,700 --> 00:32:06,764 gereed saamgesmelt staan ​​te word, gekoppel - soos hulle is in die binêre kode? 664 00:32:06,764 --> 00:32:07,600 >> JASON Hirsch: OK. 665 00:32:07,600 --> 00:32:08,420 Wat - 666 00:32:08,420 --> 00:32:11,780 >> STUDENT: Is dit altyd die geval is vir die biblioteke wanneer jy hulle skakel? 667 00:32:11,780 --> 00:32:12,500 >> JASON Hirsch: Ja. 668 00:32:12,500 --> 00:32:17,300 So daar is. S lêers, wat sal masjien kode, wat ook 669 00:32:17,300 --> 00:32:17,975 kriptiese aan jou. 670 00:32:17,975 --> 00:32:19,410 Jy hoef nie bekommerd te wees oor daardie. 671 00:32:19,410 --> 00:32:24,930 Maar oor die algemeen, ja, sal hulle in. o lêers gereed om te gaan. 672 00:32:24,930 --> 00:32:27,170 >> STUDENT: So wanneer jy stuur na 'n biblioteek, nie net stuur jou 673 00:32:27,170 --> 00:32:28,880 die. h en die. o? 674 00:32:28,880 --> 00:32:32,210 Jy het die skip nie die. C of die. S. 675 00:32:32,210 --> 00:32:33,070 >> JASON Hirsch: So - 676 00:32:33,070 --> 00:32:36,260 en dit is in hierdie kort sowel as hierdie inligting blyk te wees 'n 677 00:32:36,260 --> 00:32:36,700 bietjie vinnig. 678 00:32:36,700 --> 00:32:39,870 Maar die kort op die opstellers praat oor dit so goed. 679 00:32:39,870 --> 00:32:43,290 Wanneer jy 'n biblioteek skip, as jy skip die. h, die kop lêer, die 680 00:32:43,290 --> 00:32:46,290 funksie prototipes, en die 1's en 0's, dit is al wat jy nodig het om te gee. 681 00:32:46,290 --> 00:32:50,640 Jy hoef nie te gee hoe die funksie werk, die. c lêer. 682 00:32:50,640 --> 00:32:56,360 Omdat die punt van onttrekking, of die wys APIs, die punt op hierdie SPL, 683 00:32:56,360 --> 00:32:59,650 die Stanford draagbare biblioteek, is dit vir jou om nie bekommerd wees oor hoe om nuwe 684 00:32:59,650 --> 00:33:04,220 GRect werk, of hoe beweeg werke, of hoe voeg werke. 685 00:33:04,220 --> 00:33:06,520 Al wat jy hoef te weet, is dat byvoeging is 'n funksie wat jy kan 686 00:33:06,520 --> 00:33:08,880 gebruik, en doen dit. 687 00:33:08,880 --> 00:33:12,760 So jy regtig nodig het om te weet hoe Dis in C. Jy geskryf net nodig het om te 688 00:33:12,760 --> 00:33:15,460 weet, hier is die funksies, wat hulle doen, en hier is die 1 en 0's 689 00:33:15,460 --> 00:33:18,870 as jy regtig wil om dit te gebruik. 690 00:33:18,870 --> 00:33:19,530 >> Cool. 691 00:33:19,530 --> 00:33:26,980 Enige verdere vrae oor opstellers of ander onderwerpe op die bord? 692 00:33:26,980 --> 00:33:30,300 >> STUDENT: Ek het 'n vraag van die implementering van rekursiewe funksies. 693 00:33:30,300 --> 00:33:31,170 'N vraag oor rekursie. 694 00:33:31,170 --> 00:33:33,030 Ek het 'n gevoel wat jou sal kom. 695 00:33:33,030 --> 00:33:38,310 So laat ons gaan vinnig deur rekursie met 'n spesifieke 696 00:33:38,310 --> 00:33:40,690 Byvoorbeeld, 'n faktoriale funksie. 697 00:33:40,690 --> 00:33:44,920 Want dit is 'n voorbeeld wat dikwels kom of gebruik word 698 00:33:44,920 --> 00:33:46,170 rekursie te illustreer. 699 00:33:46,170 --> 00:33:52,390 700 00:33:52,390 --> 00:33:56,410 >> So "4!" is as 4 faktoriaal lees. 701 00:33:56,410 --> 00:33:59,120 En wat beteken 4 faktoriaal beteken? 702 00:33:59,120 --> 00:34:00,696 Wat beteken dat jy doen? 703 00:34:00,696 --> 00:34:02,235 Hoe bereken jy 4 faktoriaal? 704 00:34:02,235 --> 00:34:05,250 705 00:34:05,250 --> 00:34:07,960 4 keer 3 keer 2 keer 1. 706 00:34:07,960 --> 00:34:11,889 >> So 'n ander manier 4 faktoriaal te skryf is om dit te skryf. 707 00:34:11,889 --> 00:34:16,780 708 00:34:16,780 --> 00:34:19,022 4 keer 3 faktoriaal. 709 00:34:19,022 --> 00:34:22,080 Omdat 3 faktoriaal is 3 keer 2 keer 1. 710 00:34:22,080 --> 00:34:27,580 So 4 keer 3 faktoriaal 4 keer 3 keer 2 keer 1. 711 00:34:27,580 --> 00:34:32,679 Dit is die rede waarom faktoriaal is 'n groot kandidaat vir rekursie, want dit is 712 00:34:32,679 --> 00:34:36,630 duidelik dat daar is iets wat gebeur oor en oor en oor op 'n 713 00:34:36,630 --> 00:34:39,820 kleiner aantal van die dinge wat tot jy aan die einde. 714 00:34:39,820 --> 00:34:42,570 Wanneer jy by 1, 1 faktoriaal is 1. 715 00:34:42,570 --> 00:34:43,719 Jy kan nie veel verder te gaan. 716 00:34:43,719 --> 00:34:47,219 0 faktoriaal word ook gedefinieer as 1. 717 00:34:47,219 --> 00:34:50,679 So wanneer jy na 1 of 0, is jy aan die einde, en jy kan 718 00:34:50,679 --> 00:34:53,219 begin om terug te gaan. 719 00:34:53,219 --> 00:34:59,540 So as ons wou 'n rekursiewe te skryf funksie 'n faktoriale te bereken, 720 00:34:59,540 --> 00:35:02,170 Ons gaan 'n paar te skryf pseudokode vir wat nou. 721 00:35:02,170 --> 00:35:03,300 Voordat ons skryf dat pseudokode - 722 00:35:03,300 --> 00:35:05,660 Ek gee julle 'n paar minute die pseudo-kode te skryf of dink net 723 00:35:05,660 --> 00:35:09,600 daaroor - is daar twee dinge wat elke rekursiewe funksie nodig het. 724 00:35:09,600 --> 00:35:12,530 Wat is die twee dinge? 725 00:35:12,530 --> 00:35:13,220 >> Jack: Dit het om homself te noem. 726 00:35:13,220 --> 00:35:13,680 >> JASON Hirsch: Noag? 727 00:35:13,680 --> 00:35:14,460 O, Jack. 728 00:35:14,460 --> 00:35:15,100 Gaan voort. 729 00:35:15,100 --> 00:35:16,640 >> Jack: Dit het om homself te noem. 730 00:35:16,640 --> 00:35:19,220 >> JASON Hirsch: So 'n rekursiewe funksie moet 'n rekursiewe oproep, 'n 731 00:35:19,220 --> 00:35:20,220 roep self. 732 00:35:20,220 --> 00:35:20,770 Dit is een. 733 00:35:20,770 --> 00:35:21,510 En wat is die ander ding? 734 00:35:21,510 --> 00:35:22,250 >> Jack: A basis geval. 735 00:35:22,250 --> 00:35:23,780 >> JASON Hirsch: 'n basis geval. 736 00:35:23,780 --> 00:35:26,940 'N basis geval is, hier is wanneer ons stop. 737 00:35:26,940 --> 00:35:29,510 Sodat jou funksie kry genoem. 738 00:35:29,510 --> 00:35:31,410 Die basis saak kom eerste. 739 00:35:31,410 --> 00:35:33,710 Jy wil weet as jy aan die einde. 740 00:35:33,710 --> 00:35:37,110 En as jy nie aan die einde, jy maak jou rekursiewe oproep. 741 00:35:37,110 --> 00:35:39,880 En jy gaan deur middel van hierdie funksie weer check jou basis geval weer. 742 00:35:39,880 --> 00:35:42,575 As jy nie die einde, maak jy 'n ander rekursiewe oproep, 743 00:35:42,575 --> 00:35:44,130 ensovoorts, ensovoorts. 744 00:35:44,130 --> 00:35:47,110 >> Dit is waarom rekursiewe funksies altyd moet die basis gevalle en dié 745 00:35:47,110 --> 00:35:48,210 rekursiewe oproepe. 746 00:35:48,210 --> 00:35:51,280 As jy nog nie 'n rekursiewe oproep, is dit sou nie 'n rekursiewe funksie. 747 00:35:51,280 --> 00:35:53,210 As jy nie 'n basis geval, sou jy vir ewig gaan 748 00:35:53,210 --> 00:35:54,780 sou daar geen einde wees nie. 749 00:35:54,780 --> 00:35:57,870 En die basis geval kom altyd eerste, want jy sal altyd wil om te kyk 750 00:35:57,870 --> 00:36:00,420 As jy aan die einde eerste. 751 00:36:00,420 --> 00:36:04,770 So voordat ons doen 'n paar pseudokode, waarom het jy nie 'n minuut neem om te dink oor 752 00:36:04,770 --> 00:36:09,360 hoe om 'n rekursiewe funksie faktoriaal sou geskryf word? 753 00:36:09,360 --> 00:36:23,340 754 00:36:23,340 --> 00:36:26,010 >> Ook, soveel as wat jy doen, skryf dit uit op 'n vel papier is 755 00:36:26,010 --> 00:36:27,960 wat jy gaan te hê doen op die quiz môre. 756 00:36:27,960 --> 00:36:32,160 So waarskynlik goeie praktyk te maak Maak seker dat die kode wat jy skryf 757 00:36:32,160 --> 00:36:34,420 neer op papier - 758 00:36:34,420 --> 00:36:35,160 of jy dit kan doen. 759 00:36:35,160 --> 00:36:36,710 Jy weet waar die kommapunte is. 760 00:36:36,710 --> 00:36:37,660 Jy onthou die sintaksis. 761 00:36:37,660 --> 00:36:40,400 Omdat jy nie in staat wees om 'n samesteller vertel nie 'n fout gemaak. 762 00:36:40,400 --> 00:37:02,356 763 00:37:02,356 --> 00:37:07,240 >> Ook, langs die lyne, môre, wanneer jy kodering probleme, as jy 764 00:37:07,240 --> 00:37:11,490 is 'n gejaag vir die tyd, of as jy baie verward oor hoe jy veronderstel is om te 765 00:37:11,490 --> 00:37:16,030 skryf die spesifieke ding in c, dit sou behoove jy pseudo-kode te skryf 766 00:37:16,030 --> 00:37:18,160 of skryf kommentaar in as well. 767 00:37:18,160 --> 00:37:21,940 Want daar is gedeeltelike krediet vir 'n Baie van die vrae oor die toets. 768 00:37:21,940 --> 00:37:24,840 So kan jy dalk gejaag word, of jy dalk net verwar word. 769 00:37:24,840 --> 00:37:28,030 Skryf in kommentaar of pseudo-kode is dikwels maniere waarop jy 770 00:37:28,030 --> 00:37:29,360 kan kry gedeeltelike krediet. 771 00:37:29,360 --> 00:37:31,440 >> So iets laat nie leeg op die quiz. 772 00:37:31,440 --> 00:37:33,490 Daar is geen boetes vir om dinge in 773 00:37:33,490 --> 00:37:37,650 Trouens, om in pseudo-kode of kommentaar gaan die padskraper te help 774 00:37:37,650 --> 00:37:40,410 uit te vind of jy eintlik weet wat jy praat, en miskien toekenning 775 00:37:40,410 --> 00:37:42,030 jy 'n paar gedeeltelike krediet vir daardie. 776 00:37:42,030 --> 00:37:44,510 >> Ook langs die lyne, skryf duidelik. 777 00:37:44,510 --> 00:37:47,650 As ons kan nie regtig wat jy wil skryf, Ons gaan nie om jou te bel 778 00:37:47,650 --> 00:37:49,900 middernag môre figuur uit te vind wat jy geskryf het. 779 00:37:49,900 --> 00:37:51,520 Ons is maar net gaan punte af te neem. 780 00:37:51,520 --> 00:37:56,570 Skryf duidelik, sodat ons kan hoor, of liewer, ons kan lees wat jy geskryf het. 781 00:37:56,570 --> 00:38:00,230 >> En as dit sê twee sinne, nie 'n lid skryf. 782 00:38:00,230 --> 00:38:02,280 Volg die instruksies. 783 00:38:02,280 --> 00:38:03,500 Skryf duidelik. 784 00:38:03,500 --> 00:38:07,720 En skryf in die kommentaar of pseudokode vir vrae wat gevra kan 785 00:38:07,720 --> 00:38:10,270 toekenning gedeeltelike krediet. 786 00:38:10,270 --> 00:38:12,520 >> OK, laat ons gaan faktoriaal. 787 00:38:12,520 --> 00:38:15,000 So het ons 'n funksie factorial. 788 00:38:15,000 --> 00:38:18,400 789 00:38:18,400 --> 00:38:21,550 As ek eintlik skryf hierdie in C, wat moet ek voor die naam te sit 790 00:38:21,550 --> 00:38:22,800 van die funksie? 791 00:38:22,800 --> 00:38:24,880 792 00:38:24,880 --> 00:38:30,060 Die opbrengs tipe, wat in hierdie geval is, sal ons dit gee int. 793 00:38:30,060 --> 00:38:35,450 En dan in die krulhakies, is wat gaan die binnekant van die krulhakies vir 794 00:38:35,450 --> 00:38:36,850 'n funksie? 795 00:38:36,850 --> 00:38:37,950 >> STUDENTE: Argument tipe. 796 00:38:37,950 --> 00:38:39,150 >> JASON Hirsch: Die argumente. 797 00:38:39,150 --> 00:38:42,680 So faktoriaal sal waarskynlik neem 'n argument. 798 00:38:42,680 --> 00:38:44,500 Dit sal waarskynlik slegs een argument. 799 00:38:44,500 --> 00:38:49,450 En ons sal sê dit sal neem 'n heelgetal genoem x. 800 00:38:49,450 --> 00:38:52,770 En weer, toe die prototipe van skryf 'n funksie of die skryf van die funksie 801 00:38:52,770 --> 00:38:57,110 in jou kode voor te definieer, moet jy skryf die data tipe en die naam van 802 00:38:57,110 --> 00:39:01,370 dat veranderlike vir daardie enigste funksie. 803 00:39:01,370 --> 00:39:06,350 So kan jy 'n paar nommer slaag in hierdie funksie, sal dit verwys word as x 804 00:39:06,350 --> 00:39:07,340 intern. 805 00:39:07,340 --> 00:39:08,755 >> Ons het ons faktoriaal funksie. 806 00:39:08,755 --> 00:39:12,030 807 00:39:12,030 --> 00:39:15,850 Ons moet twee dinge, 'n basis geval en 'n rekursiewe oproep. 808 00:39:15,850 --> 00:39:20,900 Wat is die basis geval vir faktoriaal? 809 00:39:20,900 --> 00:39:24,850 Iemand wat dit geskryf het uit en wie nie het nie gepraat nie, wat is die basis 810 00:39:24,850 --> 00:39:26,100 geval vir faktoriaal? 811 00:39:26,100 --> 00:39:28,400 812 00:39:28,400 --> 00:39:30,930 >> STUDENT: Indien n minder as 2, terug 1. 813 00:39:30,930 --> 00:39:33,520 >> JASON Hirsch: Indien n ' minder as 2, terug 1. 814 00:39:33,520 --> 00:39:37,216 Ek hou van wat, want dit sorg van 0 en 1. 815 00:39:37,216 --> 00:39:45,290 So ons sal doen x <2, terug 1. 816 00:39:45,290 --> 00:39:47,870 As ons geslaag 0, as ons geslaag 1, Hierdie funksie sal 817 00:39:47,870 --> 00:39:49,790 onmiddellik terug 1. 818 00:39:49,790 --> 00:39:54,020 As ons verby 'n klein aantal groter as of gelyk aan 2, gaan ons 819 00:39:54,020 --> 00:39:55,370 het ons rekursiewe oproep. 820 00:39:55,370 --> 00:39:57,855 >> En hoe is dit gaan om te werk? 821 00:39:57,855 --> 00:40:01,070 Kan iemand anders wat gewerk het op hierdie wat nog nie gepraat gee my die 822 00:40:01,070 --> 00:40:07,380 rekursiewe oproep vir die funksie in pseudokode? 823 00:40:07,380 --> 00:40:10,770 As ons geslaag in 'n aantal x en dit is meer as 2, wat 824 00:40:10,770 --> 00:40:13,370 wil ons te doen? 825 00:40:13,370 --> 00:40:17,930 Ons het ook 'n voorbeeld wat geskryf is op die kant wat kan jy 'n wenk. 826 00:40:17,930 --> 00:40:20,770 >> STUDENT: Call x keer die faktoriaal van x minus 1? 827 00:40:20,770 --> 00:40:22,020 >> JASON Hirsch: Presies reg. 828 00:40:22,020 --> 00:40:24,610 829 00:40:24,610 --> 00:40:37,750 Ons gaan om terug te keer x keer die faktoriaal van x minus 1. 830 00:40:37,750 --> 00:40:41,810 En dat, selfs al het ek geskryf het, basies, wat jy gesê het in Engels, 831 00:40:41,810 --> 00:40:44,580 hierdie faktoriaal funksie weer 'n beroep sal kry. 832 00:40:44,580 --> 00:40:46,320 Dit sal uit te voer op x minus 1. 833 00:40:46,320 --> 00:40:49,320 Dit sal terugkeer met 'n paar heelgetal, en dan sal dit die twee vermenigvuldig 834 00:40:49,320 --> 00:40:52,050 saam, en wat waarde sal wees terug na wat ook al noem hierdie 835 00:40:52,050 --> 00:40:55,010 faktoriaal funksie, wat dalk 'n ander geval van 836 00:40:55,010 --> 00:40:58,420 hierdie faktoriaal funksie. 837 00:40:58,420 --> 00:41:01,360 >> So dit is 'n voorbeeld van 'n rekursiewe funksie, 'n baie 838 00:41:01,360 --> 00:41:02,530 eenvoudige rekursiewe funksie. 839 00:41:02,530 --> 00:41:04,530 Maar die meeste van hulle sal wees soos hierdie. 840 00:41:04,530 --> 00:41:11,170 As jy wil graag 'n goeie rekursiewe Groot uitdaging vir die toets, probeer kodering 841 00:41:11,170 --> 00:41:13,230 binêre soek rekursief. 842 00:41:13,230 --> 00:41:18,950 Want as jy het binêre soek vir probleem van drie, het jy waarskynlik het dit 843 00:41:18,950 --> 00:41:21,730 iteratief in 'n rukkie lus. 844 00:41:21,730 --> 00:41:23,700 >> Maar dit kan ook geskryf word rekursief. 845 00:41:23,700 --> 00:41:26,310 Jy gaan nodig het om jou eie te skryf afsonderlike funksie dat sommige neem 846 00:41:26,310 --> 00:41:29,020 verskillende opdrag-lyn argumente - of nie opdrag-lyn argumente, sommige 847 00:41:29,020 --> 00:41:30,910 verskillende net gewone argumente. 848 00:41:30,910 --> 00:41:33,870 Maar jy kan binêre soek skryf rekursief as well. 849 00:41:33,870 --> 00:41:36,190 >> STUDENT: So jy kan ook geskryf word, in plaas van x minus 1, het jy 850 00:41:36,190 --> 00:41:39,502 kon ook geskryf x minus minus, of jy kan 'n 851 00:41:39,502 --> 00:41:40,830 geskryf minus minus x. 852 00:41:40,830 --> 00:41:44,740 Kan jy net regtig vinnig hoekom verduidelik diegene sou wees om verskillende dinge, 853 00:41:44,740 --> 00:41:49,510 soos wat die verskil is tussen x minus minus en minus minus x? 854 00:41:49,510 --> 00:41:51,320 >> JASON Hirsch: Nee, ek is nie gaan om te gaan in daardie. 855 00:41:51,320 --> 00:41:55,500 Maar ek sal met jou te praat oor dit na klas. x minus minus minus minus x 856 00:41:55,500 --> 00:41:57,780 Trek 'x deur 1. 857 00:41:57,780 --> 00:41:59,090 Maar hulle doen dit 'n bietjie anders. 858 00:41:59,090 --> 00:42:00,340 Maar ek wil nie in te gaan. 859 00:42:00,340 --> 00:42:04,330 860 00:42:04,330 --> 00:42:09,090 Ander vrae oor rekursie of hierdie funksie? 861 00:42:09,090 --> 00:42:10,140 Dit is nie regtig selfs pseudokode. 862 00:42:10,140 --> 00:42:15,060 Dit is basies die kode in C sou jy skryf vir hierdie. 863 00:42:15,060 --> 00:42:19,393 >> OK, enige ander vrae oor onderwerpe hier? 864 00:42:19,393 --> 00:42:19,864 Ja. 865 00:42:19,864 --> 00:42:23,130 >> STUDENT: Ek het 'n vinnige verduideliking van swaai punt en presisie. 866 00:42:23,130 --> 00:42:24,260 >> JASON Hirsch: Floating punt en presisie. 867 00:42:24,260 --> 00:42:26,920 Kan iemand werklik te vinnig gee my 'n verduideliking van 868 00:42:26,920 --> 00:42:28,210 swaai punt en presisie? 869 00:42:28,210 --> 00:42:30,420 Julle almal het dit te doen vir jou probleem stel, sodat jy al 870 00:42:30,420 --> 00:42:31,700 vertroud met dit. 871 00:42:31,700 --> 00:42:35,090 Of miskien nie almal van julle. 872 00:42:35,090 --> 00:42:36,602 Enigiemand? 873 00:42:36,602 --> 00:42:39,530 Gee my 'n begin spot. 874 00:42:39,530 --> 00:42:40,750 Swaai punt en presisie. 875 00:42:40,750 --> 00:42:42,380 Wat is die 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 Hirsch: Vanessa. 880 00:42:45,285 --> 00:42:45,680 Jammer. 881 00:42:45,680 --> 00:42:51,550 >> VANESSA: Daar is slegs 'n beperkte aantal getalle wat voorgestel kan word 882 00:42:51,550 --> 00:42:57,930 omdat jy op 'n, in ons geval, 'n 32-bis-stelsel. 883 00:42:57,930 --> 00:43:03,080 So jy soort van moet make-up 'n paar nommers. 884 00:43:03,080 --> 00:43:03,910 >> JASON Hirsch: So dit is presies reg. 885 00:43:03,910 --> 00:43:08,110 Daar is slegs 'n sekere bedrag van getalle wat voorgestel kan word. 886 00:43:08,110 --> 00:43:11,770 As jy twee baie groot getalle vermeerder dit kan die bedrag oorloop 887 00:43:11,770 --> 00:43:13,950 van ruimtes wat jy hoef te verteenwoordig 'n heelgetal. 888 00:43:13,950 --> 00:43:17,930 Dit is hoekom ons soms gebruik om 'n lang lang in plaas van 'n int. 889 00:43:17,930 --> 00:43:19,210 Dit het meer ruimtes. 890 00:43:19,210 --> 00:43:21,210 Dit kan 'n groter aantal hou. 891 00:43:21,210 --> 00:43:24,310 >> Swaai punt presisie te doen het met nie, maar ook te doen het met die 892 00:43:24,310 --> 00:43:29,300 feit dat desimale getalle nie altyd verteenwoordig. 893 00:43:29,300 --> 00:43:29,540 Jammer. 894 00:43:29,540 --> 00:43:31,280 Laat ek dit terug. 895 00:43:31,280 --> 00:43:36,610 Die desimale getal 1,0 is nie altyd verteenwoordig soos jy sou verwag, 896 00:43:36,610 --> 00:43:40,770 1,000000000. 897 00:43:40,770 --> 00:43:50,360 Dit is soms verteenwoordig as 1,000000001 of 0,999999999. 898 00:43:50,360 --> 00:43:52,780 Dit kan selfs 89 gegooi word daar iewers. 899 00:43:52,780 --> 00:43:56,560 So diegene desimale getalle is nie verteenwoordig presies soos jy sou 900 00:43:56,560 --> 00:43:58,430 verwag dat hulle verteenwoordig word. 901 00:43:58,430 --> 00:44:00,010 >> So in die probleem gestel - 902 00:44:00,010 --> 00:44:00,860 Dit was twee? - 903 00:44:00,860 --> 00:44:05,290 probleem sit twee, waar ons hanteer swaai punt getalle, toe ons wou 904 00:44:05,290 --> 00:44:08,690 om hulle te verteenwoordig presies wat ons wou om hulle te verteenwoordig, die aantal 905 00:44:08,690 --> 00:44:12,860 van pennies, of die aantal sent, ons hulle vermenigvuldig met 100. 906 00:44:12,860 --> 00:44:14,750 Ons afgerond het. 907 00:44:14,750 --> 00:44:18,660 En dan het ons alles afgesny agter die desimale punt. 908 00:44:18,660 --> 00:44:22,020 Dit was om te verseker dat hulle nie sou eintlik gelyk presies wat ons wou 909 00:44:22,020 --> 00:44:22,410 om hulle te ewenaar. 910 00:44:22,410 --> 00:44:26,870 >> Want wanneer jy iets neem wat 'n float en draai dit in 'n int, jy 911 00:44:26,870 --> 00:44:29,860 afgesny alles aan die regterkant van die desimale punt. 912 00:44:29,860 --> 00:44:33,900 Want daar is 'n paar drywende punt onakkuraatheid, 100,000 kan wees 913 00:44:33,900 --> 00:44:37,440 verteenwoordig as 99,999999999. 914 00:44:37,440 --> 00:44:40,350 En as jy net afgesny alles te die reg om dadelik, gaan jy 915 00:44:40,350 --> 00:44:41,600 kry die verkeerde nommer. 916 00:44:41,600 --> 00:44:44,050 917 00:44:44,050 --> 00:44:44,180 Ja. 918 00:44:44,180 --> 00:44:45,290 >> STUDENT: Ek het 'n vraag oor giet. 919 00:44:45,290 --> 00:44:47,500 Wat beteken dit om in voorkom? 920 00:44:47,500 --> 00:44:54,480 As jy float doen, tussen hakies, 1 gedeel 10, beteken dit nie 1 gedeel deur 10, 921 00:44:54,480 --> 00:44:58,910 dan kry 0,1, dan draai dit in 'n float? 922 00:44:58,910 --> 00:45:01,470 >> JASON Hirsch: As jy dit doen dryf 1 gedeel deur 10 - 923 00:45:01,470 --> 00:45:02,550 >> STUDENT: Ja, en dan is gelyk aan - 924 00:45:02,550 --> 00:45:04,240 Wel, dit gewoonlik het dit in gelyke - 925 00:45:04,240 --> 00:45:04,690 Ja. 926 00:45:04,690 --> 00:45:06,760 Jy wil dit 'n float te maak, reg? 927 00:45:06,760 --> 00:45:12,790 >> JASON Hirsch: OK, so ons gaan gebruik om dit te segue in die uitzoeken 928 00:45:12,790 --> 00:45:15,390 Die antwoorde op hierdie vrae deur kodering. 929 00:45:15,390 --> 00:45:18,180 Want jy sal waarskynlik 'n baie hierdie minuut vrae, en 'n goeie manier 930 00:45:18,180 --> 00:45:19,100 dit op te los, is deur kodering. 931 00:45:19,100 --> 00:45:21,320 So ons gaan om dit reg te kodeer nou, en dan gaan ons terug te gaan en 932 00:45:21,320 --> 00:45:24,020 kode om die vraag wat jy het. 933 00:45:24,020 --> 00:45:24,950 >> So het die eerste reël - 934 00:45:24,950 --> 00:45:29,390 Ek moet nie geskryf het nie - wat Die eerste ding wat ons wil doen, wanneer ons 935 00:45:29,390 --> 00:45:32,250 open 'n nuwe lêer in gedit? 936 00:45:32,250 --> 00:45:34,190 >> STUDENT: Sluit. 937 00:45:34,190 --> 00:45:35,920 >> JASON Hirsch: Sluit wat? 938 00:45:35,920 --> 00:45:37,952 >> STUDENT: CS50 biblioteek. 939 00:45:37,952 --> 00:45:39,920 >> JASON Hirsch: OK. 940 00:45:39,920 --> 00:45:42,590 Wat anders moet ons insluit? 941 00:45:42,590 --> 00:45:46,820 Ons is net gaan om te kyk wat gebeur wanneer jy iets aan 'n float gegooi. 942 00:45:46,820 --> 00:45:48,605 Maar wat moet ons in te sluit as ons gaan 'n C program te skryf? 943 00:45:48,605 --> 00:45:49,300 >> STUDENT: Standard I / O. 944 00:45:49,300 --> 00:45:50,625 >> JASON Hirsch: stdio.h. 945 00:45:50,625 --> 00:45:54,880 Ons is eintlik nie nodig het, vir hierdie program, cs50.h, selfs al is dit 946 00:45:54,880 --> 00:45:55,920 altyd nuttig om dit te sluit. 947 00:45:55,920 --> 00:45:58,260 Maar ons het nie altyd stdio.h nodig. 948 00:45:58,260 --> 00:45:59,660 >> STUDENT: Wanneer kodering in C? 949 00:45:59,660 --> 00:46:15,770 >> JASON Hirsch: Wanneer kodering in C. 950 00:46:15,770 --> 00:46:17,090 >> So ek stoor dit as dit. C lêer. 951 00:46:17,090 --> 00:46:18,590 Ek kry 'n paar mooi accentuering. 952 00:46:18,590 --> 00:46:22,890 Ek het leemte binne hoof. 953 00:46:22,890 --> 00:46:24,792 Wat beteken leemte beteken? 954 00:46:24,792 --> 00:46:26,740 >> STUDENT: Maak nie neem opdrag-lyn argumente. 955 00:46:26,740 --> 00:46:28,900 >> JASON Hirsch: Void middel, in hierdie geval, hoof geen neem 956 00:46:28,900 --> 00:46:29,700 opdrag-lyn argumente. 957 00:46:29,700 --> 00:46:32,720 In ander gevalle, beteken dit dat die funksie nie opdrag-lyn argumente neem. 958 00:46:32,720 --> 00:46:36,560 Of die funksie, as ek nietig te skryf main (void), sou wat sê hoof se 959 00:46:36,560 --> 00:46:38,460 nie terugkeer nie. 960 00:46:38,460 --> 00:46:39,960 So nietig beteken net mooi niks. 961 00:46:39,960 --> 00:46:42,510 Wat sou ek skryf as ek was om te neem opdrag-lyn argumente? 962 00:46:42,510 --> 00:46:45,250 963 00:46:45,250 --> 00:46:47,150 >> STUDENT: int boog c string boog v 964 00:46:47,150 --> 00:46:49,055 >> JASON Hirsch: int argc string bevat SPASIES. 965 00:46:49,055 --> 00:46:54,050 966 00:46:54,050 --> 00:46:55,572 Is dit reg? 967 00:46:55,572 --> 00:46:58,720 >> STUDENT: Dis kar ster bevat SPASIES hakies. 968 00:46:58,720 --> 00:47:01,730 >> JASON Hirsch: So jy kan skryf string bevat SPASIES hakies of kar ster bevat SPASIES 969 00:47:01,730 --> 00:47:03,710 hakies, maar jy moet die hakies. 970 00:47:03,710 --> 00:47:06,290 Omdat bevat SPASIES is 'n skikking van snare, onthou. 971 00:47:06,290 --> 00:47:07,360 Dit is nie net 'n string. 972 00:47:07,360 --> 00:47:10,350 So string bevat SPASIES is, hier is een string genoem bevat SPASIES. 973 00:47:10,350 --> 00:47:13,630 String bevat SPASIES hakies is, hier is 'n verskeidenheid van snare. 974 00:47:13,630 --> 00:47:17,865 So int argc string bevat SPASIES hakies sou iets wees wat ek 975 00:47:17,865 --> 00:47:18,810 sou waarskynlik skryf. 976 00:47:18,810 --> 00:47:23,050 >> So jy wou stoor in 'n heelgetal? 977 00:47:23,050 --> 00:47:24,285 >> STUDENT: Ja, heelgetal. 978 00:47:24,285 --> 00:47:25,840 Of in 'n float. 979 00:47:25,840 --> 00:47:26,710 >> JASON Hirsch: In 'n float? 980 00:47:26,710 --> 00:47:30,790 Soos, float x is gelyk aan 1 gedeel deur 10. 981 00:47:30,790 --> 00:47:32,040 >> JASON Hirsch: OK. 982 00:47:32,040 --> 00:47:40,160 983 00:47:40,160 --> 00:47:42,240 Hoe kan ek druk 'n float 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 Hirsch:% f. 988 00:47:48,300 --> 00:47:50,810 Wat is 'n heelgetal? 989 00:47:50,810 --> 00:47:52,110 d of i. 990 00:47:52,110 --> 00:47:53,000 Wat is 'n string? 991 00:47:53,000 --> 00:47:54,240 >> STUDENT: s. 992 00:47:54,240 --> 00:47:56,140 >> JASON Hirsch: s. 993 00:47:56,140 --> 00:47:57,550 Hoe kry ek 'n nuwe lyn? 994 00:47:57,550 --> 00:47:58,800 >> STUDENT: agteroorskuisstreep n. 995 00:47:58,800 --> 00:48:04,610 996 00:48:04,610 --> 00:48:07,100 >> JASON Hirsch: Wat moet ek terugkeer As hoof lopies korrek? 997 00:48:07,100 --> 00:48:08,360 >> STUDENT: 0. 998 00:48:08,360 --> 00:48:09,430 Moet ek daardie lyn te skryf, al is? 999 00:48:09,430 --> 00:48:10,170 >> STUDENT: No 1000 00:48:10,170 --> 00:48:11,513 OK, ons sal dit nie skryf nie, dan is. 1001 00:48:11,513 --> 00:48:16,450 1002 00:48:16,450 --> 00:48:17,190 Kan almal lees dat? 1003 00:48:17,190 --> 00:48:18,485 Dit lyk 'n bietjie klein. 1004 00:48:18,485 --> 00:48:20,160 Kan almal sien, of indien Ek maak dit groter? 1005 00:48:20,160 --> 00:48:23,480 1006 00:48:23,480 --> 00:48:25,100 Ek dink vir die kamera, sal ons maak dit 'n bietjie groter, al is. 1007 00:48:25,100 --> 00:48:35,750 1008 00:48:35,750 --> 00:48:38,410 >> JASON Hirsch: As Ek wil hê om dit te draai . C lêer in 'n uitvoerbare, wat 1009 00:48:38,410 --> 00:48:39,260 skryf ek? 1010 00:48:39,260 --> 00:48:41,610 >> STUDENT: Maak toets. 1011 00:48:41,610 --> 00:48:42,080 >> JASON Hirsch: Jammer? 1012 00:48:42,080 --> 00:48:42,790 >> STUDENT: Maak toets. 1013 00:48:42,790 --> 00:48:44,040 >> JASON Hirsch: Maak toets. 1014 00:48:44,040 --> 00:48:46,700 1015 00:48:46,700 --> 00:48:48,410 Ons het gesels oor hierdie lyn vroeër. 1016 00:48:48,410 --> 00:48:49,140 Klang. 1017 00:48:49,140 --> 00:48:51,270 Wat is klang? 1018 00:48:51,270 --> 00:48:52,200 Die naam van die samesteller. 1019 00:48:52,200 --> 00:48:53,920 Wat is hierdie lyn? 1020 00:48:53,920 --> 00:48:55,580 >> STUDENT: sit hulle vir die gebruik van GDB. 1021 00:48:55,580 --> 00:48:59,230 >> JASON Hirsch: Sets dit vir die gebruik van GDB. 1022 00:48:59,230 --> 00:49:02,338 Hierdie lyn, wat is dit? 1023 00:49:02,338 --> 00:49:03,290 >> STUDENT: Bronkode. 1024 00:49:03,290 --> 00:49:06,010 >> JASON Hirsch: Dit is die bron lêer, die. c lêer. 1025 00:49:06,010 --> 00:49:08,150 Wat het hierdie twee lyne doen? 1026 00:49:08,150 --> 00:49:10,245 Of hierdie twee nie lyne. 1027 00:49:10,245 --> 00:49:12,300 >> STUDENT: Dit name dit toets. 1028 00:49:12,300 --> 00:49:15,410 >> JASON Hirsch: So het die streep o sê, noem dit iets anders. 1029 00:49:15,410 --> 00:49:16,790 En hier is jy noem dit toets. 1030 00:49:16,790 --> 00:49:18,900 As ek nie dat, wat sou dit noem dit? 1031 00:49:18,900 --> 00:49:20,260 >> STUDENT: a.out. 1032 00:49:20,260 --> 00:49:22,340 >> JASON Hirsch: a.out. 1033 00:49:22,340 --> 00:49:25,366 Wat beteken dit doen? 1034 00:49:25,366 --> 00:49:27,670 >> STUDENT: Links Die wiskunde biblioteek. 1035 00:49:27,670 --> 00:49:29,550 >> JASON Hirsch: Dit skakel in die wiskunde biblioteek. 1036 00:49:29,550 --> 00:49:32,880 Ons het nie die wiskunde biblioteek, maar want dit is so algemeen, het hulle 1037 00:49:32,880 --> 00:49:35,780 skriftelike om altyd die wiskunde biblioteek. 1038 00:49:35,780 --> 00:49:39,050 En net so, dit sluit die CS50 biblioteek. 1039 00:49:39,050 --> 00:49:43,010 >> OK, so as ons 'n lys, ons het nou ' 'n uitvoerbare genoem toets. 1040 00:49:43,010 --> 00:49:45,150 Dit uit te voer, skryf ek toets. 1041 00:49:45,150 --> 00:49:48,330 Ek sien dat my swaai punt, as wat verwag is, is gelyk aan 0. 1042 00:49:48,330 --> 00:49:50,890 1043 00:49:50,890 --> 00:49:51,590 Doen dit - 1044 00:49:51,590 --> 00:49:52,060 so - 1045 00:49:52,060 --> 00:49:55,210 >> STUDENT: Dan as jy dryf nou, soos jy gooi dit as float - 1046 00:49:55,210 --> 00:49:56,870 >> JASON Hirsch: Gooi die 1 na 'n float? 1047 00:49:56,870 --> 00:49:59,180 >> STUDENT: Nee, gooi die volle ding - 1048 00:49:59,180 --> 00:49:59,500 ja. 1049 00:49:59,500 --> 00:50:02,460 As jy net dit gedoen het, sou wat maak dit 0,1? 1050 00:50:02,460 --> 00:50:07,170 >> JASON Hirsch: OK, so regtig vinnig, 1 gedeel deur 10, dit is 1051 00:50:07,170 --> 00:50:08,690 heelgetalle verdeel. 1052 00:50:08,690 --> 00:50:13,580 So wanneer jy heelgetalle verdeel, hulle is 0, en jy spaar dat 0 in 'n 1053 00:50:13,580 --> 00:50:17,170 dryf, omdat die streep is net integer-afdeling. 1054 00:50:17,170 --> 00:50:19,180 So nou is ons iets draai in 'n float. 1055 00:50:19,180 --> 00:50:21,650 >> Kom ons kyk wat gebeur. 1056 00:50:21,650 --> 00:50:22,900 Ons sal toets maak. 1057 00:50:22,900 --> 00:50:25,870 1058 00:50:25,870 --> 00:50:31,090 So nou sien ons dat streep was nie integer-afdeling, was dit swaai 1059 00:50:31,090 --> 00:50:32,640 punt afdeling. 1060 00:50:32,640 --> 00:50:35,700 Omdat een van sy argumente is aan 'n float gegooi. 1061 00:50:35,700 --> 00:50:38,380 So nou is dit te sê, te behandel hierdie afdeling, soos wat ons te doen het met 1062 00:50:38,380 --> 00:50:40,140 swaai punte, nie met heelgetalle. 1063 00:50:40,140 --> 00:50:42,760 En so kry ons die antwoord wat ons verwag. 1064 00:50:42,760 --> 00:50:44,620 >> Kom ons kyk wat gebeur - 1065 00:50:44,620 --> 00:50:47,103 Oeps. 1066 00:50:47,103 --> 00:50:51,646 As ek wou meer desimale te druk kolle, hoe kan ek dit doen? 1067 00:50:51,646 --> 00:50:55,550 >> STUDENT: Point dot f, of soveel desimale plekke as wat jy wil. 1068 00:50:55,550 --> 00:51:02,280 1069 00:51:02,280 --> 00:51:04,440 >> JASON Hirsch: So ek druk 10 desimale plekke. 1070 00:51:04,440 --> 00:51:06,610 En ons nou sien ons kry 'n paar vreemde dinge. 1071 00:51:06,610 --> 00:51:09,650 En wat gaan terug na jou vraag oor swaai punt onakkuraatheid. 1072 00:51:09,650 --> 00:51:10,950 Daar is vreemde dinge gestoor in hier. 1073 00:51:10,950 --> 00:51:13,650 1074 00:51:13,650 --> 00:51:15,275 >> OK, beteken dat jou vraag beantwoord? 1075 00:51:15,275 --> 00:51:18,550 1076 00:51:18,550 --> 00:51:20,200 Wat anders het jy wil vinnig code? 1077 00:51:20,200 --> 00:51:25,470 >> STUDENT: Ek wou net om te sien of nie, as jy bevry 'n paar wyser, 1078 00:51:25,470 --> 00:51:30,410 of dit wyser steeds het gestoor in dit die adres van wat dit was 1079 00:51:30,410 --> 00:51:32,170 wys na voorheen. 1080 00:51:32,170 --> 00:51:34,100 >> JASON Hirsch: OK, so laat ons dit doen. 1081 00:51:34,100 --> 00:51:38,030 Char ster ptr, dit skep 'n veranderlike genoem ptr van tipe char ster. 1082 00:51:38,030 --> 00:51:39,280 Hoe skryf ek 'malloc? 1083 00:51:39,280 --> 00:51:40,550 Alden? 1084 00:51:40,550 --> 00:51:41,800 >> ALDEN: Slegs malloc. 1085 00:51:41,800 --> 00:51:44,820 1086 00:51:44,820 --> 00:51:51,040 Maar dan is dit die grootte van te wees, en In hierdie geval, ek dink jy wil 1087 00:51:51,040 --> 00:51:52,465 word verwys na teken. 1088 00:51:52,465 --> 00:51:54,450 So dit sou wees kar. 1089 00:51:54,450 --> 00:51:57,520 >> JASON Hirsch: OK, so meer generies, Binne - 1090 00:51:57,520 --> 00:51:58,770 laat se wysig. 1091 00:51:58,770 --> 00:52:05,100 1092 00:52:05,100 --> 00:52:09,260 Binne malloc, wil jy die aantal grepe op die hoop. 1093 00:52:09,260 --> 00:52:12,320 Die algemeen, wat ons gesien het dat ons doen, is ons gaan malloc 1094 00:52:12,320 --> 00:52:14,940 snare, byvoorbeeld, of skikkings van heelgetalle. 1095 00:52:14,940 --> 00:52:21,600 So as ons wil 10 heelgetalle, of 10 karakters, 10 sal ons 10. 1096 00:52:21,600 --> 00:52:24,370 En dan grootte van karakters sou gee ons dat die grootte van die karakters, wat in 1097 00:52:24,370 --> 00:52:25,120 hierdie geval is 1 byte. 1098 00:52:25,120 --> 00:52:26,250 Ons kry 10 grepe. 1099 00:52:26,250 --> 00:52:28,540 As ons die grootte van die int te skryf, wat sou gee ons 40 grepe. 1100 00:52:28,540 --> 00:52:31,520 >> So meer generies, binnekant van malloc is die aantal grepe wat jy wil. 1101 00:52:31,520 --> 00:52:34,620 In hierdie geval, is ons om 1 byte. 1102 00:52:34,620 --> 00:52:36,900 Wat lyk soos 'n vreemde gebruik van malloc, maar vir ons 1103 00:52:36,900 --> 00:52:38,470 doeleindes sin maak. 1104 00:52:38,470 --> 00:52:40,420 So daar is nie. 1105 00:52:40,420 --> 00:52:43,420 >> Ons gaan vry om te bel. 1106 00:52:43,420 --> 00:52:47,040 Ons ontslae te raak van dit en ons gebruik ptr weer. 1107 00:52:47,040 --> 00:52:48,750 En wat het jy wil om te kyk? 1108 00:52:48,750 --> 00:52:50,550 >> STUDENT: Ek wou net om te kyk of of nie daar was iets 1109 00:52:50,550 --> 00:52:51,900 binnekant van dit. 1110 00:52:51,900 --> 00:52:53,050 >> JASON Hirsch: So of dit verwys na enigiets? 1111 00:52:53,050 --> 00:52:57,740 >> STUDENT: Ja, presies, of dit is nog steeds 'n geheue adres. 1112 00:52:57,740 --> 00:53:02,220 >> JASON Hirsch: So jy wil die waarde van ptr na te gaan? 1113 00:53:02,220 --> 00:53:03,470 >> STUDENT: Ja, presies. 1114 00:53:03,470 --> 00:53:07,940 1115 00:53:07,940 --> 00:53:10,160 >> JASON Hirsch: Wat doen ek hier skryf As ek wil die waarde van die na te gaan 1116 00:53:10,160 --> 00:53:11,880 punt - wat is, Jordan sê, die waarde? 1117 00:53:11,880 --> 00:53:13,720 Of wat is die binnekant van ptr gestoor? 1118 00:53:13,720 --> 00:53:14,620 >> Student: a geheue adres. 1119 00:53:14,620 --> 00:53:16,330 >> JASON Hirsch: 'n geheue adres. 1120 00:53:16,330 --> 00:53:20,520 So as ek skryf net dit, dit sal gee my die waarde van ptr. 1121 00:53:20,520 --> 00:53:22,800 En hoe druk ek uit 'n geheue adres? 1122 00:53:22,800 --> 00:53:26,470 Wat is die formaat string vir 'n geheue adres? 1123 00:53:26,470 --> 00:53:27,430 >> STUDENT:% p. 1124 00:53:27,430 --> 00:53:28,050 >> JASON Hirsch:% p. 1125 00:53:28,050 --> 00:53:29,500 % S is 'n string. 1126 00:53:29,500 --> 00:53:30,750 % P vir wyser. 1127 00:53:30,750 --> 00:53:40,820 1128 00:53:40,820 --> 00:53:43,540 Is dit reg? 1129 00:53:43,540 --> 00:53:44,790 Dit is reg. 1130 00:53:44,790 --> 00:53:49,450 1131 00:53:49,450 --> 00:53:51,040 So ptr gelyk - 1132 00:53:51,040 --> 00:53:53,350 dit is nog steeds iets in dit. 1133 00:53:53,350 --> 00:53:56,110 1134 00:53:56,110 --> 00:53:57,645 Dit is waarskynlik 'n meer interessante vraag. 1135 00:53:57,645 --> 00:53:59,198 Wat beteken dat die lyn te doen? 1136 00:53:59,198 --> 00:54:00,830 >> STUDENT: ma foute. 1137 00:54:00,830 --> 00:54:01,310 >> JASON Hirsch: Wat? 1138 00:54:01,310 --> 00:54:02,678 >> STUDENT: Ek dink dit seg foute. 1139 00:54:02,678 --> 00:54:03,574 >> JASON Hirsch: Hm? 1140 00:54:03,574 --> 00:54:04,920 >> STUDENT: Ek dink dit sal seg skuld. 1141 00:54:04,920 --> 00:54:08,265 >> JASON Hirsch: So hierdie lyn van die kode, ster ptr, wat 1142 00:54:08,265 --> 00:54:10,152 beteken die ster beteken? 1143 00:54:10,152 --> 00:54:11,240 >> STUDENT: Inhoud van. 1144 00:54:11,240 --> 00:54:11,560 >> JASON Hirsch: Ja. 1145 00:54:11,560 --> 00:54:13,910 Gaan die inhoud te kry. 1146 00:54:13,910 --> 00:54:16,830 So dit gaan om te gaan na die geheue spreek daar, en gee my dat. 1147 00:54:16,830 --> 00:54:21,030 Ek gebruik% c reg hier, want daar is karakters wat daar gestoor. 1148 00:54:21,030 --> 00:54:23,390 So ons gaan om te gaan na die adres wat ons net gesien - of dit sal waarskynlik 'n 1149 00:54:23,390 --> 00:54:25,190 bietjie anders hierdie tyd loop ons die program. 1150 00:54:25,190 --> 00:54:28,010 Maar ons sal gaan na daardie adres wat ons weet nog steeds bestaan 1151 00:54:28,010 --> 00:54:29,260 en kyk wat daar is. 1152 00:54:29,260 --> 00:54:35,640 1153 00:54:35,640 --> 00:54:37,110 >> So dit het nie seg skuld. 1154 00:54:37,110 --> 00:54:38,970 Dit het net nie vir ons nie. 1155 00:54:38,970 --> 00:54:43,350 Dit mag dalk het ons eintlik gegee iets wat ons net nie kan sien nie. 1156 00:54:43,350 --> 00:54:45,110 En wat gaan terug na hierdie idee - 1157 00:54:45,110 --> 00:54:47,270 en ons gaan nie te veel in te kry hierdie, want dit is buite die 1158 00:54:47,270 --> 00:54:48,460 omvang van hierdie kursus. 1159 00:54:48,460 --> 00:54:51,260 Maar ons het gepraat oor reg hier, as ons het buite die grense van die skikking deur 1160 00:54:51,260 --> 00:54:54,890 1, kan ons nie in die moeilikheid beland. 1161 00:54:54,890 --> 00:54:58,550 >> Soms, wanneer jy net af te gaan met 1, jy doen iets verkeerd, en jy 1162 00:54:58,550 --> 00:54:59,220 kon kry in die moeilikheid. 1163 00:54:59,220 --> 00:55:00,820 Maar jy kry nie altyd in die moeilikheid. 1164 00:55:00,820 --> 00:55:05,170 Dit hang af van hoeveel van 'n slegte ding wat jy nie, jy gaan te kry in die moeilikheid. 1165 00:55:05,170 --> 00:55:07,790 Dit is nie te sê, wees slordige met jou kode. 1166 00:55:07,790 --> 00:55:12,080 Maar dit is om te sê, die program sal nie altyd hou, selfs as jy iewers gaan 1167 00:55:12,080 --> 00:55:14,130 jy is nie veronderstel om te gaan. 1168 00:55:14,130 --> 00:55:18,170 >> 'N Goeie voorbeeld is, 'n baie mense in hulle probleem stel 3, wat 1169 00:55:18,170 --> 00:55:22,350 was 15, het nie die grense van die raad. 1170 00:55:22,350 --> 00:55:25,860 So jy kyk na links, kyk na die regs, kyk na die top, kyk 1171 00:55:25,860 --> 00:55:27,000 aan die onderkant. 1172 00:55:27,000 --> 00:55:31,540 Maar jy het nie kyk om te sien of die top was eintlik gaan wees op die bord. 1173 00:55:31,540 --> 00:55:35,220 En 'n baie van die mense wat dit gedoen het en het dat hulle program gewerk 1174 00:55:35,220 --> 00:55:38,960 perfek, want waar die raad was gestoor in die geheue, as jy het 'n 1175 00:55:38,960 --> 00:55:42,300 bo dit of bewys dat die geheue adres, was daar niks 1176 00:55:42,300 --> 00:55:44,870 veral verskriklik oor wat, sodat jou program was nie 1177 00:55:44,870 --> 00:55:45,970 gaan gil op jou. 1178 00:55:45,970 --> 00:55:48,870 >> Maar ons sal nog steeds af punte as jy nie kyk nie, want jy 1179 00:55:48,870 --> 00:55:50,850 is iets wat jy nie doen veronderstel is om te doen nie, en jy kan hê 1180 00:55:50,850 --> 00:55:51,860 gekry in die moeilikheid. 1181 00:55:51,860 --> 00:55:54,040 Kans is, al is, jy waarskynlik nie. 1182 00:55:54,040 --> 00:55:57,790 So dit is om te wys dat ja, Ons kan nog steeds gaan om dit te. 1183 00:55:57,790 --> 00:55:59,010 En ons is nie om in probleme in hierdie geval. 1184 00:55:59,010 --> 00:56:04,000 As ons probeer om te doen lees die volgende 100 karakters, wil ons 1185 00:56:04,000 --> 00:56:06,000 waarskynlik in die moeilikheid. 1186 00:56:06,000 --> 00:56:09,400 En jy kan kode lees die volgende 100 karakters as jy wil deur 'n paar 1187 00:56:09,400 --> 00:56:10,110 soort van lus. 1188 00:56:10,110 --> 00:56:10,850 Ja. 1189 00:56:10,850 --> 00:56:16,250 >> STUDENT: Sedert ons opgedra wat ruimte 'n werklike waarde, sou ons nie 1190 00:56:16,250 --> 00:56:17,050 eintlik in staat wees om enigiets te sien. 1191 00:56:17,050 --> 00:56:21,740 Moet ons probeer om dit met die opstel van die gelyk c of iets te hou? 1192 00:56:21,740 --> 00:56:22,640 >> JASON Hirsch: Groot vraag. 1193 00:56:22,640 --> 00:56:25,340 Hoe stel ek wat waarde - 1194 00:56:25,340 --> 00:56:28,980 watter lyn van die kode skryf ek op die lyn sewe om te doen wat jy gesê? 1195 00:56:28,980 --> 00:56:34,040 >> STUDENT: Star ptr gelyk aan enkele quote c enkele aanhaling eindig. 1196 00:56:34,040 --> 00:56:36,970 >> JASON Hirsch: So dit is om 'n karakter, c, op die plek, 1197 00:56:36,970 --> 00:56:40,200 want weer, wat ster beteken gaan daar. 1198 00:56:40,200 --> 00:56:43,320 En wanneer dit gebruik word op die linkerkant van 'n opdrag operateur, wat gelyk is aan 1199 00:56:43,320 --> 00:56:47,270 teken, ons gaan nie te kry wat waarde soveel soos wat waarde. 1200 00:56:47,270 --> 00:56:48,520 Nou laat ons sien wat gebeur. 1201 00:56:48,520 --> 00:56:54,700 1202 00:56:54,700 --> 00:56:56,770 >> Ons sit iets daar en dit was daar. 1203 00:56:56,770 --> 00:56:58,000 Ons het gratis. 1204 00:56:58,000 --> 00:57:00,100 Sommige dinge waarskynlik gebeur op die hoop. 1205 00:57:00,100 --> 00:57:01,890 So dit is nie daar nie. 1206 00:57:01,890 --> 00:57:07,440 Maar weereens, ons kry nie in die moeilikheid gaan daar. 1207 00:57:07,440 --> 00:57:10,260 >> Ek doen dit in kode te illustreer dat 'n groot deel van hierdie 1208 00:57:10,260 --> 00:57:12,410 vrae wat jy het, is hulle baie interessant 1209 00:57:12,410 --> 00:57:13,650 beantwoord 'n baie tyd. 1210 00:57:13,650 --> 00:57:15,260 En hulle is regtig 'n goeie vrae. 1211 00:57:15,260 --> 00:57:19,010 En jy kan dit uit te vind op jou eie as, byvoorbeeld, 1212 00:57:19,010 --> 00:57:19,990 ons is nie in afdeling. 1213 00:57:19,990 --> 00:57:20,940 Ja. 1214 00:57:20,940 --> 00:57:24,430 >> STUDENT: Omdat jy nie die stuur van die aanwijzer plek, het jy nodig om te 1215 00:57:24,430 --> 00:57:26,530 gebruik malloc? 1216 00:57:26,530 --> 00:57:28,400 >> JASON Hirsch: So dit gaan terug jou aanvanklike vraag. 1217 00:57:28,400 --> 00:57:28,620 [? ?] 1218 00:57:28,620 --> 00:57:29,980 Is dit net 'n plaaslike veranderlike? 1219 00:57:29,980 --> 00:57:32,280 Malloc hier is nie dat dwingende. 1220 00:57:32,280 --> 00:57:35,260 Die gebruik van malloc hier is nie dat dwingende, want dit is 1221 00:57:35,260 --> 00:57:36,500 net 'n plaaslike veranderlike. 1222 00:57:36,500 --> 00:57:40,970 >> STUDENT: So kan jy doen kar star ptr gelyk hallo? 1223 00:57:40,970 --> 00:57:41,400 >> JASON Hirsch: Oh. 1224 00:57:41,400 --> 00:57:43,300 So ons gaan nou terug te kry jou aanvanklike vraag. 1225 00:57:43,300 --> 00:57:46,885 Ek dink jy is nie tevrede met my antwoord. 1226 00:57:46,885 --> 00:57:48,220 OK? 1227 00:57:48,220 --> 00:57:49,226 Soos wat? 1228 00:57:49,226 --> 00:57:49,682 >> STUDENT: Ja. 1229 00:57:49,682 --> 00:57:50,932 Wag nie. 1230 00:57:50,932 --> 00:57:54,090 1231 00:57:54,090 --> 00:57:57,850 >> JASON Hirsch, en waar wil jy om uit te druk? 1232 00:57:57,850 --> 00:58:00,026 So sal ons druk 'n string soos wat? 1233 00:58:00,026 --> 00:58:06,380 1234 00:58:06,380 --> 00:58:07,630 >> STUDENT: Interessante. 1235 00:58:07,630 --> 00:58:09,900 1236 00:58:09,900 --> 00:58:14,285 >> JASON Hirsch: So dit sê dit argument het die tipe van 'n karakter. 1237 00:58:14,285 --> 00:58:17,200 1238 00:58:17,200 --> 00:58:18,620 So dit moet 'n karakter wees. 1239 00:58:18,620 --> 00:58:25,170 1240 00:58:25,170 --> 00:58:26,280 >> STUDENT: neem net die eerste een. 1241 00:58:26,280 --> 00:58:28,610 >> JASON Hirsch: So dit is wat ek gesê het. 1242 00:58:28,610 --> 00:58:34,240 Soos ek gesê het, dit is nie die stoor van die string binne veranderlike wyser. 1243 00:58:34,240 --> 00:58:35,120 Dit is die stoor - 1244 00:58:35,120 --> 00:58:36,350 >> STUDENT: Die eerste waarde van die string. 1245 00:58:36,350 --> 00:58:40,810 >> JASON Hirsch: Die adres van die eerste waarde van die string. 1246 00:58:40,810 --> 00:58:46,940 As ons uit te druk nie, ons is om die waarde in wyser. 1247 00:58:46,940 --> 00:58:51,005 En ons sal sien wat dit is, inderdaad, 'n geheue adres. 1248 00:58:51,005 --> 00:58:53,595 1249 00:58:53,595 --> 00:58:56,440 >> Is wat sin maak? 1250 00:58:56,440 --> 00:58:56,940 Jammer. 1251 00:58:56,940 --> 00:58:58,996 Wag, gee dat die antwoord jou vraag, al is? 1252 00:58:58,996 --> 00:58:59,790 >> STUDENT: Ja. 1253 00:58:59,790 --> 00:59:05,830 >> JASON Hirsch: Hierdie lyn van die kode is skep van 'n string en dan nog 'n 1254 00:59:05,830 --> 00:59:09,115 veranderlike wyser dit is wys aan daardie string, wat opgestel is. 1255 00:59:09,115 --> 00:59:14,320 1256 00:59:14,320 --> 00:59:14,980 Ja. 1257 00:59:14,980 --> 00:59:19,200 >> STUDENT: So as ons gaan een geheue verder te spreek, sal ons die h? 1258 00:59:19,200 --> 00:59:21,990 1259 00:59:21,990 --> 00:59:23,150 Is dit gestoor word as 'n string? 1260 00:59:23,150 --> 00:59:24,400 >> JASON Hirsch: Soos ons gedoen het - 1261 00:59:24,400 --> 00:59:28,540 1262 00:59:28,540 --> 00:59:30,790 so dit is waardevol om te doen. 1263 00:59:30,790 --> 00:59:33,780 Dit is punt rekenkundige, wat julle gesien het voor en moet 1264 00:59:33,780 --> 00:59:35,550 relatief gemaklik met. 1265 00:59:35,550 --> 00:59:36,905 Dit is soortgelyk aan die skryf van - 1266 00:59:36,905 --> 00:59:41,980 1267 00:59:41,980 --> 00:59:46,350 As ons hierdie lyn van die kode te skryf, Ons het gesien verskeidenheid notasie voor. 1268 00:59:46,350 --> 00:59:55,900 Dit moet gee ons die tweede waarde in hierdie skikking, h. 1269 00:59:55,900 --> 01:00:05,010 >> As ons dit gedoen het, moet dit ook gee ons die tweede in daardie skikking. 1270 01:00:05,010 --> 01:00:08,320 Want dit is nie van plan om die geheue adres van die eerste ding, maar die 1271 01:00:08,320 --> 01:00:10,530 geheue adres van die ding een oor. 1272 01:00:10,530 --> 01:00:14,360 En dan is die ster operateur dereferences dat wyser. 1273 01:00:14,360 --> 01:00:16,940 En weer, laat ons sien. 1274 01:00:16,940 --> 01:00:18,664 Ons kry h weer. 1275 01:00:18,664 --> 01:00:20,980 >> STUDENT: Wat presies beteken dereference beteken? 1276 01:00:20,980 --> 01:00:23,650 >> JASON Hirsch: Dereference is 'n fancy woord vir gaan. 1277 01:00:23,650 --> 01:00:26,390 Gaan na dat en kry wat daar is om dereference 'n wyser. 1278 01:00:26,390 --> 01:00:28,240 Dit is net 'n fancy woord vir dit. 1279 01:00:28,240 --> 01:00:29,986 >> STUDENT: As ons wou druk die hele string, kan ons 1280 01:00:29,986 --> 01:00:31,930 doen ampersand wyser? 1281 01:00:31,930 --> 01:00:33,490 >> JASON Hirsch: OK, ons is hier gaan stilstaan. 1282 01:00:33,490 --> 01:00:35,480 Ons gaan hier eindig. 1283 01:00:35,480 --> 01:00:41,760 Ampersand gee jou die adres van 'n plek, so wanneer jy dit doen ampersand van 1284 01:00:41,760 --> 01:00:44,080 'n veranderlike, dit gee jou die adres waar daardie veranderlike gestoor word. 1285 01:00:44,080 --> 01:00:48,580 Ampersand wyser sal jy die gee adres van ptr waar ptr is in die geheue. 1286 01:00:48,580 --> 01:00:50,140 >> Ons gaan nie om te gaan op met hierdie voorbeeld. 1287 01:00:50,140 --> 01:00:52,640 Jy kan uitvind van hierdie dinge op jou eie. 1288 01:00:52,640 --> 01:00:55,740 Maar weereens, kan dit selfs verging word om 'n bietjie meer as wat jy nodig het om te weet vir 1289 01:00:55,740 --> 01:00:58,000 die omvang van hierdie mid-term - 1290 01:00:58,000 --> 01:00:59,070 of hierdie quiz, eerder. 1291 01:00:59,070 --> 01:01:00,270 Jammer. 1292 01:01:00,270 --> 01:01:03,770 >> Ons gaan om te beweeg op, want ek sou graag een kodering probleem te doen 1293 01:01:03,770 --> 01:01:05,100 voor die tyd om is. 1294 01:01:05,100 --> 01:01:09,340 En ons gaan die kode wat ek dink is die mees dwingende van hierdie 1295 01:01:09,340 --> 01:01:11,020 voorbeelde, atoi. 1296 01:01:11,020 --> 01:01:14,520 So dit was 'n vraag oor 'n toets twee jaar gelede. 1297 01:01:14,520 --> 01:01:17,810 En ek het dit op die bord hier. 1298 01:01:17,810 --> 01:01:20,680 >> Mense is gevra om op die quiz - 1299 01:01:20,680 --> 01:01:23,640 hulle gegee 'n bietjie meer tesxt in die vraag, maar ek uitgeskakel die 1300 01:01:23,640 --> 01:01:26,640 teks, want dit was onnodig Vir ons doeleindes nou. 1301 01:01:26,640 --> 01:01:29,180 Dit was net 'n bietjie agtergrond op wat atoi het. 1302 01:01:29,180 --> 01:01:31,425 Maar jy weet en is baie vertroud is met atoi. 1303 01:01:31,425 --> 01:01:35,620 >> Ek stel voor jy kode Hierdie op 'n vel papier. 1304 01:01:35,620 --> 01:01:39,310 Ek stel ook voor jy die strategie gebruik dat ons het gegaan oor 1305 01:01:39,310 --> 01:01:41,040 'n baie in ons afdeling. 1306 01:01:41,040 --> 01:01:44,130 Eerstens, maak seker jy verstaan wat atoi se doen. 1307 01:01:44,130 --> 01:01:47,580 Teken 'n prentjie of kom met 'n paar geestelike beeld van dit in jou kop. 1308 01:01:47,580 --> 01:01:51,120 Volgende, skryf pseudokode vir hierdie. 1309 01:01:51,120 --> 01:01:53,120 Op die quiz, as alles wat jy kry, is pseudokode, ten minste 1310 01:01:53,120 --> 01:01:54,550 sit iets neer. 1311 01:01:54,550 --> 01:02:00,070 En dan kaart wat pseudokode op C. As jy 'n tjek in jou 1312 01:02:00,070 --> 01:02:03,760 pseudokode, soos kyk of iets is 1, wat kaarte op 'n as 1313 01:02:03,760 --> 01:02:05,750 toestand en so meer. 1314 01:02:05,750 --> 01:02:07,850 En uiteindelik, kode om die program in C. 1315 01:02:07,850 --> 01:02:15,000 >> So gaan terug na atoi en vyf minute hierdie kode op 'n vel 1316 01:02:15,000 --> 01:02:19,480 papier, wat waarskynlik oor die bedrag van die tyd wat jy sal neem om op 'n 1317 01:02:19,480 --> 01:02:21,260 quiz die kode atoi. 1318 01:02:21,260 --> 01:02:27,060 Vyf tot 15 minute, vyf tot 12, vyf tot 10 minute, is oor die hoeveelheid 1319 01:02:27,060 --> 01:02:30,150 tyd wat jy wil spandeer op hierdie vraag in die toets. 1320 01:02:30,150 --> 01:02:31,670 So vyf minute nou, asseblief. 1321 01:02:31,670 --> 01:02:35,957 En as jy enige vrae het, verhoog jou hand en ek sal bykom. 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 Hirsch: OK, so dit was vyf minute. 1326 01:08:37,580 --> 01:08:39,880 Dit was waarskynlik oor die hoeveelheid tyd wat jy wil spandeer op wat op 'n toets, 1327 01:08:39,880 --> 01:08:42,120 Miskien is die lae einde van die tyd. 1328 01:08:42,120 --> 01:08:44,010 Ons sal vat in 'n bietjie. 1329 01:08:44,010 --> 01:08:45,740 Kom ons begin kodering hierdie. 1330 01:08:45,740 --> 01:08:49,479 En as ons dit nie kry nie al die pad deur, Die antwoorde op hierdie en hierdie 1331 01:08:49,479 --> 01:08:54,189 quiz vraag is beskikbaar, weer, Val 2011 is wanneer hierdie vraag 1332 01:08:54,189 --> 01:08:54,913 verskyn op die quiz. 1333 01:08:54,913 --> 01:08:57,830 >> En dit was die moeite werd agt punte op die quiz dan. 1334 01:08:57,830 --> 01:09:01,140 Agt punte is op die hoë einde van die bedrag van die punte iets die moeite werd. 1335 01:09:01,140 --> 01:09:04,790 Die meeste vrae is in die reeks van een tot ses punte. 1336 01:09:04,790 --> 01:09:08,500 So, dit is 'n meer uitdagende vraag, vir seker. 1337 01:09:08,500 --> 01:09:09,750 Kan iemand my begin? 1338 01:09:09,750 --> 01:09:13,260 1339 01:09:13,260 --> 01:09:15,380 >> Die algemeen, wat gaan ons om te wil doen met hierdie 1340 01:09:15,380 --> 01:09:17,550 funksioneer atoi, logies? 1341 01:09:17,550 --> 01:09:19,569 Wat wil ons doen? 1342 01:09:19,569 --> 01:09:22,279 So ons gaan om te skryf sommige pseudokode. 1343 01:09:22,279 --> 01:09:24,090 >> STUDENT: Skakel karakters in heelgetalle. 1344 01:09:24,090 --> 01:09:26,700 >> JASON Hirsch: Skakel karakters in heelgetalle. 1345 01:09:26,700 --> 01:09:27,479 OK. 1346 01:09:27,479 --> 01:09:30,870 So hoeveel karakters is ons gaan nodig om deur te gaan? 1347 01:09:30,870 --> 01:09:32,295 >> STUDENT: Almal van hulle. 1348 01:09:32,295 --> 01:09:34,100 >> STUDENT: Al die karakters in die tou. 1349 01:09:34,100 --> 01:09:35,540 >> JASON Hirsch: Al die karakters in die string. 1350 01:09:35,540 --> 01:09:42,180 So as ons wou om te gaan deur elke karakter in 'n string, wat is 'n ding 1351 01:09:42,180 --> 01:09:44,560 in C het ons gesien wat toegelaat het ons om te gaan deur elke 1352 01:09:44,560 --> 01:09:45,939 karakter in 'n string? 1353 01:09:45,939 --> 01:09:46,819 >> STUDENTE: 'n lus vir. 1354 01:09:46,819 --> 01:09:48,069 >> JASON Hirsch: 'n lus vir. 1355 01:09:48,069 --> 01:09:52,020 1356 01:09:52,020 --> 01:09:55,330 So ons gaan loop deur elke karakter in s. 1357 01:09:55,330 --> 01:10:00,940 >> Dan wat gaan ons wil doen wanneer ons 'n spesifieke karakter? 1358 01:10:00,940 --> 01:10:02,480 Sê ons kry geslaag het 'n 90. 1359 01:10:02,480 --> 01:10:03,460 Ons kry die 9. 1360 01:10:03,460 --> 01:10:04,240 Dit is 'n karakter. 1361 01:10:04,240 --> 01:10:07,440 Wat wil ons te doen het met daardie karakter 9? 1362 01:10:07,440 --> 01:10:10,082 >> STUDENT: Trek dit uit karakter 0? 1363 01:10:10,082 --> 01:10:11,860 >> STUDENT: Voeg 0? 1364 01:10:11,860 --> 01:10:13,350 >> JASON Hirsch: Trek dit van karakter 0? 1365 01:10:13,350 --> 01:10:13,800 >> STUDENT: Ja. 1366 01:10:13,800 --> 01:10:15,573 >> JASON Hirsch: Hoekom doen jy wil om dit te doen? 1367 01:10:15,573 --> 01:10:16,560 >> STUDENT: [onhoorbaar] 1368 01:10:16,560 --> 01:10:17,010 waarde. 1369 01:10:17,010 --> 01:10:18,380 Sy int waarde. 1370 01:10:18,380 --> 01:10:21,580 >> JASON Hirsch: OK, so ons neem om die karakter 9, trek dit uit 1371 01:10:21,580 --> 01:10:25,820 karakter 0 'n te kry werklike heelgetal 9. 1372 01:10:25,820 --> 01:10:27,070 Soet. 1373 01:10:27,070 --> 01:10:31,255 1374 01:10:31,255 --> 01:10:37,000 En hoe weet jy dat karakter 9 minus 0 karakter is 9? 1375 01:10:37,000 --> 01:10:39,222 Wat grafiek het jy na? 1376 01:10:39,222 --> 01:10:43,130 >> STUDENT: Daar is logies nege plekke tussen 9 en 0. 1377 01:10:43,130 --> 01:10:44,620 Of jy kan kyk na die ASCII-tabel. 1378 01:10:44,620 --> 01:10:45,120 >> JASON Hirsch: ASCII-tabel. 1379 01:10:45,120 --> 01:10:46,490 Maar ja, jy is reg as well. 1380 01:10:46,490 --> 01:10:47,780 So ons trek 0. 1381 01:10:47,780 --> 01:10:49,010 So nou het ons die integer 9. 1382 01:10:49,010 --> 01:10:49,970 En wat wil ons te doen met dit? 1383 01:10:49,970 --> 01:10:54,970 As ons 'n 90, dit is die eerste heelgetal ons het, wat ons wil hê om te doen? 1384 01:10:54,970 --> 01:10:58,180 >> STUDENT: Ek wil sit in 'n tydelike heelgetal skikking, dan doen wiskunde om dit te 1385 01:10:58,180 --> 01:11:02,088 later dit te maak in 'n einde. 1386 01:11:02,088 --> 01:11:03,020 >> JASON Hirsch: OK. 1387 01:11:03,020 --> 01:11:06,990 >> STUDENT: Jy kan begin aan die einde van die skikking en dan vorentoe te beweeg sodat 1388 01:11:06,990 --> 01:11:10,350 dat elke keer as jy vorentoe beweeg, jy dit met 10 vermenigvuldig. 1389 01:11:10,350 --> 01:11:10,830 >> JASON Hirsch: OK. 1390 01:11:10,830 --> 01:11:12,250 Dit klink soos 'n mooi dwingende idee. 1391 01:11:12,250 --> 01:11:16,040 Ons kan begin by die einde van ons reeks, en ons kan gebruik strleng. 1392 01:11:16,040 --> 01:11:17,030 Ons kan strleng gebruik hier. 1393 01:11:17,030 --> 01:11:18,870 Ons kry die lengte van ons tou. 1394 01:11:18,870 --> 01:11:20,100 Ons begin by die einde. 1395 01:11:20,100 --> 01:11:29,170 En + die eerste een, het ons net neem wat integer, en miskien skep ons soos 'n 1396 01:11:29,170 --> 01:11:32,270 nuwe heelgetalveranderlike tot bo waar ons stoor alles. 1397 01:11:32,270 --> 01:11:37,340 So het ons lus deur elke kar in s uit Terug na die voorkant, ons trek 0, en 1398 01:11:37,340 --> 01:11:42,790 haal ons dit, en afhangende van waar dit is, het ons dit vermenigvuldig 1399 01:11:42,790 --> 01:11:45,860 deur 'n krag van 10. 1400 01:11:45,860 --> 01:11:50,644 Omdat die eerste een, wat doen ons vermenigvuldig die regterkantste karakter deur? 1401 01:11:50,644 --> 01:11:51,440 >> STUDENT: 10 tot die 0. 1402 01:11:51,440 --> 01:11:53,170 >> JASON Hirsch: 10 tot die 0. 1403 01:11:53,170 --> 01:11:56,010 Wat doen ons vermenigvuldig die tweede regterkantste karakter deur? 1404 01:11:56,010 --> 01:11:57,450 >> STUDENT: [onhoorbaar]. 1405 01:11:57,450 --> 01:11:57,960 >> JASON Hirsch: Wat? 1406 01:11:57,960 --> 01:11:59,150 >> STUDENT: 10 by die 1. 1407 01:11:59,150 --> 01:12:00,420 >> JASON Hirsch: 10 by die 1. 1408 01:12:00,420 --> 01:12:03,754 Die derde pyl karakter? 1409 01:12:03,754 --> 01:12:04,580 >> STUDENT: 10 tot die 2. 1410 01:12:04,580 --> 01:12:05,350 >> JASON Hirsch: 10 tot die 2. 1411 01:12:05,350 --> 01:12:07,200 >> STUDENT: Jammer, ek verstaan ​​nie wat ons hier doen. 1412 01:12:07,200 --> 01:12:08,640 >> JASON Hirsch: OK, laat se terug te gaan, dan is. 1413 01:12:08,640 --> 01:12:12,500 So ons gaan kry geslaag in 'n string. 1414 01:12:12,500 --> 01:12:14,470 Omdat ons wil skryf atoi. 1415 01:12:14,470 --> 01:12:15,260 So kry ons geslaag in 'n string. 1416 01:12:15,260 --> 01:12:17,640 Sê ons kry geslaag in die tou 90. 1417 01:12:17,640 --> 01:12:19,930 >> Die eerste ding wat ons gaan doen, is stel 'n nuwe heelgetalveranderlike dat ons 1418 01:12:19,930 --> 01:12:22,150 net gaan om te skep as ons nuwe heelgetal. 1419 01:12:22,150 --> 01:12:24,630 Dit is wat ons gaan om terug te keer aan die einde. 1420 01:12:24,630 --> 01:12:30,110 Ons moet om te gaan deur middel van elke karakter in die string, want ons het bepaal 1421 01:12:30,110 --> 01:12:34,430 wat ons nodig het om elkeen te raak en voeg dit dan na ons nuwe heelgetal. 1422 01:12:34,430 --> 01:12:36,330 >> Maar ons kan nie net voeg dit as 'n nommer. 1423 01:12:36,330 --> 01:12:38,270 Ons kan nie net neem 9 en voeg 9 tot ons heelgetal. 1424 01:12:38,270 --> 01:12:40,560 Dit hang af van die plek waar dit is in die tou. 1425 01:12:40,560 --> 01:12:42,960 Ons gaan nodig om te vermeerder dit deur 'n krag van 10. 1426 01:12:42,960 --> 01:12:45,580 Want dit is hoe basis 10 werke. 1427 01:12:45,580 --> 01:12:49,050 >> So gaan ons die werklike te kry karakter, of die werklike heelgetal 1428 01:12:49,050 --> 01:12:53,860 nommer, deur die aftrekking van karakter 0 van karakter 9 soos ons gedoen het met 1429 01:12:53,860 --> 01:12:57,560 trek karakter kapitaal A vanaf watter karakter wat ons gehad het in een van 1430 01:12:57,560 --> 01:12:58,120 hierdie probleme. 1431 01:12:58,120 --> 01:13:04,190 So ons sal eintlik 'n getal van 0 tot 9 gestoor as 'n reële getal, en ons sal 1432 01:13:04,190 --> 01:13:07,590 vermenigvuldig dit met 'n krag van 10, afhangende op die plek waar ons is in die tou. 1433 01:13:07,590 --> 01:13:19,430 1434 01:13:19,430 --> 01:13:22,575 En dan gaan ons dit terug te voeg in ons nuwe heelgetalveranderlike. 1435 01:13:22,575 --> 01:13:32,840 1436 01:13:32,840 --> 01:13:37,890 >> So, wat dit soos sou lyk word - ons sal trek hier verby. 1437 01:13:37,890 --> 01:13:40,086 As ons geslaag in die tou 90 - 1438 01:13:40,086 --> 01:13:41,336 >> STUDENT: [onhoorbaar]. 1439 01:13:41,336 --> 01:13:43,190 1440 01:13:43,190 --> 01:13:45,540 >> JASON Hirsch: Maar atoi neem 'n string. 1441 01:13:45,540 --> 01:13:46,350 So ons gaan deur te gaan die hoewe. 1442 01:13:46,350 --> 01:13:49,900 Ons sal kry geslaag in 90. 1443 01:13:49,900 --> 01:13:51,540 Ons gaan van die terug na die voorblad. 1444 01:13:51,540 --> 01:13:53,920 Ons neem die 0. 1445 01:13:53,920 --> 01:13:55,080 >> STUDENT: Ek is jammer. 1446 01:13:55,080 --> 01:13:55,880 Miskien is dit dom. 1447 01:13:55,880 --> 01:13:59,440 As ons kry geslaag in 'n string, Hoekom is 90 wat ons is 1448 01:13:59,440 --> 01:14:00,260 kry geslaag in? 1449 01:14:00,260 --> 01:14:03,160 Omdat 90 is 'n heelgetal. 1450 01:14:03,160 --> 01:14:06,820 >> JASON Hirsch: Omdat atoi neem 'n string en draai dit in die heelgetal 1451 01:14:06,820 --> 01:14:08,320 voorstelling van die string. 1452 01:14:08,320 --> 01:14:13,650 Maar die string 90 is nie die heelgetal 90 of die nommer 90. 1453 01:14:13,650 --> 01:14:17,920 Die string 90 is 'n skikking van twee, of drie karakters, eerder, die 9 1454 01:14:17,920 --> 01:14:22,740 karakter, die 0 karakter, en die agteroorskuisstreep 0 karakter. 1455 01:14:22,740 --> 01:14:26,260 >> En ons skryf atoi, want vir Byvoorbeeld, wanneer jy die opdrag 1456 01:14:26,260 --> 01:14:30,230 lyn argument, en dit is gered in bevat SPASIES, is dit gestoor as 'n string. 1457 01:14:30,230 --> 01:14:32,940 Maar as jy dit as 'n aantal te behandel, jy nodig het om dit te omskep in 'n 1458 01:14:32,940 --> 01:14:34,700 werklike heelgetal. 1459 01:14:34,700 --> 01:14:37,210 Wat ons het een van ons probleem stelle. 1460 01:14:37,210 --> 01:14:38,800 Wat ons gedoen het in 'n aantal van ons probleem stelle. 1461 01:14:38,800 --> 01:14:41,690 Almal wat plaasgevind n heelgetal as 'n opdrag lyn argument. 1462 01:14:41,690 --> 01:14:46,490 So dit is waarom ons atoi funksie neem 'n string. 1463 01:14:46,490 --> 01:14:51,910 >> So weer, in ons voorbeeld hier, ons is gaan die laaste een te neem. 1464 01:14:51,910 --> 01:14:55,050 Ons gaan die karakter te trek 0 van dit, omdat die karakters 0 1465 01:14:55,050 --> 01:14:58,810 afgetrek deur die karakter 0 gee jou die werklike getal 0, volgens 1466 01:14:58,810 --> 01:15:00,950 die ASCII wiskunde wat ons doen. 1467 01:15:00,950 --> 01:15:04,870 >> Omdat karakters verteenwoordig as anders as hul werklike - die 1468 01:15:04,870 --> 01:15:08,830 a, byvoorbeeld, klein 'n 97. 1469 01:15:08,830 --> 01:15:10,260 Dit is nie - oops! 1470 01:15:10,260 --> 01:15:13,290 Dit is nie wat jy sou verwag dit moet wees, 0, byvoorbeeld. 1471 01:15:13,290 --> 01:15:16,200 So jy het om te trek die karakter 'n te kry 0. 1472 01:15:16,200 --> 01:15:18,950 >> So ons gaan om dit te doen hier die werklike getal te kry. 1473 01:15:18,950 --> 01:15:22,560 En dan gaan ons dit te vermenigvuldig met 'n krag van 10, afhangende van waar dit 1474 01:15:22,560 --> 01:15:27,030 is in die tou, en dan neem dit en voeg dit by ons plek houer 1475 01:15:27,030 --> 01:15:32,520 veranderlike, sodat ons kan kom met ons finale nuwe heelgetal. 1476 01:15:32,520 --> 01:15:35,080 Maak dit sin maak vir almal? 1477 01:15:35,080 --> 01:15:37,730 >> So ons gaan nie om dit te kodeer nou, want ons is 1478 01:15:37,730 --> 01:15:38,830 om kort op tyd. 1479 01:15:38,830 --> 01:15:40,860 Ek vra om verskoning vir die tydsberekening van daardie. 1480 01:15:40,860 --> 01:15:44,620 Maar dit is wat hopelik sal jy in staat wees om te doen op die toets - op die 1481 01:15:44,620 --> 01:15:47,710 minste, kry hierdie pseudokode uitgeskryf. 1482 01:15:47,710 --> 01:15:50,840 >> En dan, as ons te skryf om die pseudokode, eintlik, ons kan dit doen 1483 01:15:50,840 --> 01:15:51,490 redelik vinnig. 1484 01:15:51,490 --> 01:15:55,230 Elke lyn van die kommentaar wat ons ons geskryf hier kom neer op sowat 1485 01:15:55,230 --> 01:15:56,970 een lyn van C-kode. 1486 01:15:56,970 --> 01:16:01,780 Waarby 'n nuwe veranderlike, skriftelik 'n lus, sommige aftrek, sommige 1487 01:16:01,780 --> 01:16:07,070 vermenigvuldiging, en 'n paar opdrag. 1488 01:16:07,070 --> 01:16:09,020 Ons sou waarskynlik ook wil skryf 'n terugkeer lyn. 1489 01:16:09,020 --> 01:16:12,040 Ons kan ook wil om te sit sommige tjeks in hier. 1490 01:16:12,040 --> 01:16:12,655 Ja. 1491 01:16:12,655 --> 01:16:15,720 >> STUDENT: So kan ons behandel s as die werklike string? 1492 01:16:15,720 --> 01:16:18,730 Want ek weet dit is net 'n adres. 1493 01:16:18,730 --> 01:16:22,090 Soos, hoe sou jy die lengte van die string word geslaag deur? 1494 01:16:22,090 --> 01:16:25,310 >> JASON Hirsch: So hoe het die lengte van 'n 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 kan jy s as die argument vir wat? 1498 01:16:30,550 --> 01:16:34,620 >> JASON Hirsch: So StrLen neem 'n kar ster. 1499 01:16:34,620 --> 01:16:38,090 En volg dit dat kar ster, en dit hou tel totdat dit raak 'n 1500 01:16:38,090 --> 01:16:41,865 backslash 0. StrLen was eintlik een van die ander programme wat ons 1501 01:16:41,865 --> 01:16:42,850 gaan om te code. 1502 01:16:42,850 --> 01:16:44,560 Dit is nog 'n goeie een om te code. 1503 01:16:44,560 --> 01:16:47,270 Daardie een is 'n bietjie makliker te maak, want as jy gaan om te dink oor wat 1504 01:16:47,270 --> 01:16:47,830 konseptueel - 1505 01:16:47,830 --> 01:16:51,620 Ek het net gesê dit hardop - StrLen volg 'n wyser en hou gaan en 1506 01:16:51,620 --> 01:16:54,210 tel en die dop tot bereik 'n backslash 0. 1507 01:16:54,210 --> 01:16:56,530 >> STUDENT: OK, het dit. 1508 01:16:56,530 --> 01:17:00,200 >> JASON Hirsch: So beste van geluk op quiz 0 môre. 1509 01:17:00,200 --> 01:17:03,170 As jy enige vrae het, sal ek buite wees na hierdie. 1510 01:17:03,170 --> 01:17:05,610 Voel vry om my te e-pos. 1511 01:17:05,610 --> 01:17:08,480 Reik uit na jou eie TF as jy nie in my artikel, of kry my 1512 01:17:08,480 --> 01:17:10,005 e-pos as jy dit wil hê. 1513 01:17:10,005 --> 01:17:13,140 >> As jy wil om uit te freak en stuur vir my 'n e-pos, 'n e-pos freakout, sal ek 1514 01:17:13,140 --> 01:17:16,710 stuur jou terug, soos 'n smiley face, of, soos, 'n grap of iets. 1515 01:17:16,710 --> 01:17:18,190 So voel vry om dit te doen as goed. 1516 01:17:18,190 --> 01:17:20,750 Sterkte weer, en ek sal sien julle almal volgende week. 1517 01:17:20,750 --> 01:17:23,435