1 00:00:00,000 --> 00:00:06,180 2 00:00:06,180 --> 00:00:07,820 >> JASON Hirschhorn: Bonvenon al A5, everyone. 3 00:00:07,820 --> 00:00:11,270 Ni havas ekscitan semajno antaŭ ni, plejparte ĉar tie estas tiom da novaj 4 00:00:11,270 --> 00:00:12,350 alfrontas en tiu ĉambro. 5 00:00:12,350 --> 00:00:12,920 Ĝi estas mirinda. 6 00:00:12,920 --> 00:00:15,740 Multaj el vi alvenis ĉi tien hazarde, kio estas eĉ pli bona. 7 00:00:15,740 --> 00:00:18,220 Do espereble vi devos teni aniĝon. 8 00:00:18,220 --> 00:00:20,220 >> Ĉi semajne ni pasigos la plejparto de la sekcio 9 00:00:20,220 --> 00:00:21,870 preparas por la kvizo. 10 00:00:21,870 --> 00:00:26,580 Do por nia tagordo, ni iras por paroli iomete pri rimedoj por la klaso, 11 00:00:26,580 --> 00:00:30,350 sed ankaux por la kvizo, kaj tiam, denove, elspezi la ŝvelaĵo de klaso parolado 12 00:00:30,350 --> 00:00:31,390 pri demandoj. 13 00:00:31,390 --> 00:00:33,900 Iam ni faris respondi vian demandojn, aŭ se via demandoj 14 00:00:33,900 --> 00:00:39,010 nature kondukos nin al iu kodigo, mi havi specimenon problemoj de midterms 15 00:00:39,010 --> 00:00:43,180 pasinteco, ke ni havos kodigi vivas en sekcio kune kiu ankaŭ venigi kelkaj aliaj 16 00:00:43,180 --> 00:00:45,420 bonajn temojn por kovri. 17 00:00:45,420 --> 00:00:48,280 >> Do unue, kiel ni jam trapasis la pasintaj kelkaj semajnoj por memorigi vin 18 00:00:48,280 --> 00:00:51,700 knaboj, esas barelon da rimedoj disponebla por tiu ĉi kurso. 19 00:00:51,700 --> 00:00:55,020 Multaj el ili estos nekredeble utila al vi, kiel vi daŭre 20 00:00:55,020 --> 00:00:57,280 studi por kvizo 0, ĉar ĝi estas mardo posttagmeze. 21 00:00:57,280 --> 00:00:59,630 Do ĉiu el vi estis studis por bito. 22 00:00:59,630 --> 00:01:02,640 >> Esas prelego notoj kaj vikitekston kodo, ke vi devus 23 00:01:02,640 --> 00:01:04,050 definitive kontroli. 24 00:01:04,050 --> 00:01:05,019 Spektu la mallongaj. 25 00:01:05,019 --> 00:01:07,470 Check out study.cs50.net. 26 00:01:07,470 --> 00:01:11,770 Kaj tiam, listigita sube, numero de aliaj rimedoj. 27 00:01:11,770 --> 00:01:14,020 >> Denove, kvizo 0 estas morgaŭ je 1 horo. 28 00:01:14,020 --> 00:01:18,230 Se vi ne tion faris jam, kontrolu el la Pri Kvizo 0 dokumenton en la 29 00:01:18,230 --> 00:01:21,370 Certe la hejmpaĝo elkompreni kie vi prenas la kvizo. 30 00:01:21,370 --> 00:01:25,770 La kvizo startas je 1:10 kaj finiĝas 70 minutojn poste. 31 00:01:25,770 --> 00:01:29,610 Do, se vi montros post 1:10, vi estas tuj atingi tiun multaj malpli minutoj 32 00:01:29,610 --> 00:01:30,940 ol 70 al preni la kvizo. 33 00:01:30,940 --> 00:01:33,570 Do certigu vi estas tie ĝustatempe. 34 00:01:33,570 --> 00:01:38,690 Se vi estas etendo studento aŭ havi iuj aliaj provoj konsideroj, ŝi 35 00:01:38,690 --> 00:01:40,400 ili ne estu, je 1 horo morgaŭ. 36 00:01:40,400 --> 00:01:43,540 Sed denove, kontrolu la Pri Kvizo 0 dokumenti certigi vi scias kiam 37 00:01:43,540 --> 00:01:44,760 vi prenas la kvizo. 38 00:01:44,760 --> 00:01:46,440 Mi skribis 75 minutojn ĝis ĉi tie. 39 00:01:46,440 --> 00:01:48,580 Mi opinias ke pravas, ne 70. 40 00:01:48,580 --> 00:01:53,420 >> Ĝi kovras la tutan materialon de semajno 0 al la pasinta semajno prelego merkrede. 41 00:01:53,420 --> 00:01:59,350 Kaj denove, por tiu kvizo, por ke dokumento, vi ricevas unu duflanka kaj 8 42 00:01:59,350 --> 00:02:03,770 1/2 por 11 paperfolion kiun vi ricevas uzi kiel notoj dum la kvizo. 43 00:02:03,770 --> 00:02:08,570 Multaj homoj, se ne la plej multaj homoj, havas trovis ke la sola plej helpema vojo 44 00:02:08,570 --> 00:02:11,970 por studi por la kvizo estas fari studon tukon, a 45 00:02:11,970 --> 00:02:13,730 unu-Sider, siajn proprajn. 46 00:02:13,730 --> 00:02:17,710 Do rigardu pasintaj se vi jam vidis pasintaj. 47 00:02:17,710 --> 00:02:19,960 Etendu al amikoj, por vidi, kion ili estas meti sur ilia. 48 00:02:19,960 --> 00:02:23,610 >> Sed la manoj-sube, la plej bona maniero vi povas Studo estas iri tra ĉiu kaj 49 00:02:23,610 --> 00:02:26,530 Whittle gxin malsupren al kio devus aŭ devus ne apartenus en tiu folio 50 00:02:26,530 --> 00:02:30,570 papero, ĉar tio estas nur vere helpema maniero por vi certigi 51 00:02:30,570 --> 00:02:33,620 vi iras tra ĉiu kaj havi iom familiareco kun ĝi. 52 00:02:33,620 --> 00:02:36,690 La plej multaj homoj, ni trovos, eĉ kvankam ili esti la paperfolion sidantan dekstre 53 00:02:36,690 --> 00:02:39,840 apud ili sur la kvizo, ne turni al ĝi, ĉar, denove, ke tre 54 00:02:39,840 --> 00:02:43,290 procezo de irante tra la informo helpis ilin lerni ĝin. 55 00:02:43,290 --> 00:02:45,370 >> Ĉu iu havas demandojn pri kvizo 0? 56 00:02:45,370 --> 00:02:50,120 57 00:02:50,120 --> 00:02:51,450 Havas everybody - 58 00:02:51,450 --> 00:02:53,230 Mi ne faros pruvon de la manoj. 59 00:02:53,230 --> 00:02:53,550 Neniam menso. 60 00:02:53,550 --> 00:02:54,790 Mi tuj demandas kiu ekstudis. 61 00:02:54,790 --> 00:02:58,360 Sed mi ne volas fari vin ĉiuj ne levas viajn manojn. 62 00:02:58,360 --> 00:03:01,290 Do kiel mi diris - jes, Avi, iru antaŭen. 63 00:03:01,290 --> 00:03:04,205 >> AVI: Kio estus utila afero meti en la unu-pager? 64 00:03:04,205 --> 00:03:05,875 >> Studento: Tio dependas de vi. 65 00:03:05,875 --> 00:03:08,210 >> JASON Hirschhorn: Vi ricevas uzi vian juĝon. 66 00:03:08,210 --> 00:03:13,220 Utilaj aferojn, por meti sur la unu-pager, se vi estas konfuzita pri la granda O 67 00:03:13,220 --> 00:03:17,510 runtime de malsamaj tipoj de serĉoj kaj varoj enkalkulu en tie en 68 00:03:17,510 --> 00:03:18,760 oportuna dando abako. 69 00:03:18,760 --> 00:03:22,250 Tiel, se vi demandis, ke sur la kvizo, vi ne bezonas provi kaj figuro 70 00:03:22,250 --> 00:03:23,560 ĝin aŭ motivo tra la ekzekuto. 71 00:03:23,560 --> 00:03:24,730 Vi povas simple kopii ĝin malsupren. 72 00:03:24,730 --> 00:03:28,320 Se vi rigardas kvizojn pasinteco, multaj fojoj, ke ekzistu rultempo demandoj. 73 00:03:28,320 --> 00:03:34,150 Do kiu estus ekzemplo de bona aferon, por meti sur vian unu-pager. 74 00:03:34,150 --> 00:03:37,450 >> Aliaj bonaĵojn por surmeti, se vi estas konfuzita pri kiel deklari 75 00:03:37,450 --> 00:03:40,570 funkcio aŭ kio la diversaj partoj de la funkcio deklaracio estas, skribi 76 00:03:40,570 --> 00:03:43,400 ke sur tie, ĝenerala versio kaj tiam eble ekzemplo. 77 00:03:43,400 --> 00:03:47,290 Se vi estas konfuzita pri montriloj, diagramon de kiel montriloj verko estas 78 00:03:47,290 --> 00:03:48,660 probable vere helpemaj. 79 00:03:48,660 --> 00:03:52,440 Se vi estas konfuzita pri rikuro, unu studadi rekursia funkcio sur tie 80 00:03:52,440 --> 00:03:54,980 povus ankaŭ pruvi al esti vere utila. 81 00:03:54,980 --> 00:03:57,290 Ĉu tio donos al vi kelkajn ideojn? 82 00:03:57,290 --> 00:04:01,820 >> AVI: Vi devas kompreni la tuta kompilita procezo, kiel 83 00:04:01,820 --> 00:04:03,220 ke ĉiuj verkoj? 84 00:04:03,220 --> 00:04:06,620 >> JASON Hirschhorn: Ĉio kiu estis kovrita povis 85 00:04:06,620 --> 00:04:08,060 aperos sur la kvizo. 86 00:04:08,060 --> 00:04:08,930 Demandoj - 87 00:04:08,930 --> 00:04:11,300 sed denove, kelkaj aĵoj estos pezigita peze ol aliaj. 88 00:04:11,300 --> 00:04:14,330 Kelkaj aferoj venas denove kaj denove en la klaso, en 89 00:04:14,330 --> 00:04:15,590 lekcio, kaj sekcion. 90 00:04:15,590 --> 00:04:17,220 Aliaj aferoj ne antaŭvidi ke ofte. 91 00:04:17,220 --> 00:04:22,900 >> Ni parolis multe pri # include kaj -L io kaj kio tiuj signifas en 92 00:04:22,900 --> 00:04:24,390 kompilado procezo. 93 00:04:24,390 --> 00:04:29,120 Ni parolis multe pri GDB, krampas, tiuj malsamaj flagoj kiujn ni uzas, kiam 94 00:04:29,120 --> 00:04:33,100 ni kompilos ion, kaj kion make15, ekzemple, vere 95 00:04:33,100 --> 00:04:34,510 signifas kaj vere faras. 96 00:04:34,510 --> 00:04:38,110 Ni ne parolas tiel pri ĉiu sola paŝo en 97 00:04:38,110 --> 00:04:39,240 kompilado procezo. 98 00:04:39,240 --> 00:04:40,410 Ni ankoraŭ parolis pri ĝi. 99 00:04:40,410 --> 00:04:42,550 Do estas ankoraŭ iu kiu vi devus koni. 100 00:04:42,550 --> 00:04:44,610 Sed denove, ni ne tuj estos - 101 00:04:44,610 --> 00:04:49,140 aferojn, kiuj venas supren pli ofte en klaso Estas pli verŝajne, ke li supreniru pli 102 00:04:49,140 --> 00:04:52,495 ofte kaj pli peze pezis sur la kvizo. 103 00:04:52,495 --> 00:04:53,280 >> Cool. 104 00:04:53,280 --> 00:04:54,580 Ajna alia demandojn pri kvizo 0? 105 00:04:54,580 --> 00:04:57,660 106 00:04:57,660 --> 00:05:00,050 >> OK, do mi metis listo de temoj sur la tabulo. 107 00:05:00,050 --> 00:05:01,550 Mi iris tra la Syllabus. 108 00:05:01,550 --> 00:05:07,340 Mi iris tra la recenzo sekcio de lasta nokto kaj tiuj diapozitivoj veni supren 109 00:05:07,340 --> 00:05:13,710 kun ne-ĝisfunda listo de temoj ke ni kovris tiom malproksime en CS50 110 00:05:13,710 --> 00:05:16,800 kaj aĵoj kiuj povus aperi sur la kvizo. 111 00:05:16,800 --> 00:05:19,900 Do mi ne tuj iros tra ĉiu sola unu el tiuj. 112 00:05:19,900 --> 00:05:22,370 Kiu prenus multe pli tempo ol ni havas nun. 113 00:05:22,370 --> 00:05:26,880 Sed mi metis ĉi tien por espereble jog via memoro pri aferoj kiuj povas 114 00:05:26,880 --> 00:05:28,420 aŭ eble ne estas tiel familiara kun vi. 115 00:05:28,420 --> 00:05:32,850 >> Kaj mi ŝatus pasigi la plejparto de sekcion respondi viajn demandojn pri 116 00:05:32,850 --> 00:05:35,130 ĉi tiuj temoj, temoj kiuj ne estas kovritaj tie. 117 00:05:35,130 --> 00:05:36,130 Ni povas skribi pseŭda-kodo. 118 00:05:36,130 --> 00:05:40,010 Ni povas skribi reala kodo por certigi ke vi - 119 00:05:40,010 --> 00:05:44,280 Mi povas respondi vian demandon kaj helpi everybody funde kompreni 120 00:05:44,280 --> 00:05:48,330 multon el tiuj temoj tiom vi sentos preta kaj komforta internigi 121 00:05:48,330 --> 00:05:50,150 la kvizo morgaŭ. 122 00:05:50,150 --> 00:05:52,300 Do legu super la listo. 123 00:05:52,300 --> 00:05:54,780 Vi espereble venos al sekcio kun iuj demandoj tiel. 124 00:05:54,780 --> 00:05:58,480 Kiam vi estas preta, levi vian manon kaj ni komencu. 125 00:05:58,480 --> 00:06:01,590 126 00:06:01,590 --> 00:06:05,200 >> Memoru, la demandoj vi havas, ne ekzistas stultaj demandoj. 127 00:06:05,200 --> 00:06:06,250 Ni aŭdis, ke multo. 128 00:06:06,250 --> 00:06:09,490 Kaj la demandoj vi havas, mi pretas veti, multaj aliaj homoj ambaŭ 129 00:06:09,490 --> 00:06:11,740 sidis tie kaj rigardante linio havas tiel. 130 00:06:11,740 --> 00:06:13,770 Do vi povas nur helpi la homojn Petante demandoj. 131 00:06:13,770 --> 00:06:15,070 Marcus. 132 00:06:15,070 --> 00:06:18,040 >> Marcus: Inter la pilo kaj la monteto, estas tie antaŭ-asignitaj 133 00:06:18,040 --> 00:06:22,880 procento de memoro kiu estas difinita kiel ĉi tio estas por la stako aŭ por la havaĵon? 134 00:06:22,880 --> 00:06:25,010 Kaj kiel oni faras tiun laboron, ekzakte? 135 00:06:25,010 --> 00:06:26,230 >> JASON Hirschhorn: Granda demando. 136 00:06:26,230 --> 00:06:28,640 Mi iras al dorso spuri iomete. 137 00:06:28,640 --> 00:06:30,910 Ĉu ĉiuj - 138 00:06:30,910 --> 00:06:31,660 Bonvolu esti honesta tie. 139 00:06:31,660 --> 00:06:34,130 Mi scias, mi petas vin levi vian manon antaŭ viaj kunlernantoj. 140 00:06:34,130 --> 00:06:38,510 Sed ĉu ekzistas homoj kiuj sentas malkomfortaj kun la pilo kaj amason 141 00:06:38,510 --> 00:06:42,980 kaj ŝatus transiru ke kaj kion tiuj volas diri? 142 00:06:42,980 --> 00:06:43,880 Levu la manojn, se - 143 00:06:43,880 --> 00:06:44,420 OK. 144 00:06:44,420 --> 00:06:45,120 Dankon. 145 00:06:45,120 --> 00:06:48,420 Do ni iras, por transiri la pilo kaj la havaĵon vere rapide kaj poste 146 00:06:48,420 --> 00:06:50,370 movi en respondi vian demandon. 147 00:06:50,370 --> 00:06:58,250 >> Do, se ni elingigos skatolo reprezenti memoron de via komputilo, kio estas iuj 148 00:06:58,250 --> 00:07:02,160 aferojn, kiuj iris en tiu skatolo? 149 00:07:02,160 --> 00:07:03,630 Artikolo. 150 00:07:03,630 --> 00:07:04,020 Al ĉefa funkcio. 151 00:07:04,020 --> 00:07:05,890 Kie ĉefa iri? 152 00:07:05,890 --> 00:07:08,090 >> Lernanto: [inaudibles]. 153 00:07:08,090 --> 00:07:09,390 >> JASON Hirschhorn: Do ni devos meti ĉefa suben ĉi tien. 154 00:07:09,390 --> 00:07:12,180 155 00:07:12,180 --> 00:07:13,430 Kion alian iras en tiu skatolo? 156 00:07:13,430 --> 00:07:16,000 157 00:07:16,000 --> 00:07:18,140 >> Lernanto: La funkcioj kiujn vi nomas. 158 00:07:18,140 --> 00:07:19,020 >> JASON Hirschhorn: La funkcioj ke ni vokas al Li. 159 00:07:19,020 --> 00:07:20,440 Kaj kie do they go? 160 00:07:20,440 --> 00:07:21,300 >> Lernanto: En la stako. 161 00:07:21,300 --> 00:07:22,380 >> JASON Hirschhorn: Ili iru en la stako. 162 00:07:22,380 --> 00:07:27,350 Do ni iras, por voki ĉi afero cxi tie la stako. 163 00:07:27,350 --> 00:07:31,880 Kaj ĝis supro, ni havas la monteton. 164 00:07:31,880 --> 00:07:35,450 Do memoro ne estas skatolo ĝuste kiel ĉi tio. 165 00:07:35,450 --> 00:07:37,330 Sed estas vere bela simila. 166 00:07:37,330 --> 00:07:40,840 Ĝi tuj estos amaso de skatoloj super kaj super, depende de kiom granda via 167 00:07:40,840 --> 00:07:43,730 komputilo estas aŭ kiom granda via memoro estas. 168 00:07:43,730 --> 00:07:46,950 >> Je la kurzo-unquote "fundo" Estas la stako. 169 00:07:46,950 --> 00:07:50,880 Kaj estas multaj aferoj kiuj iras sur la stako. 170 00:07:50,880 --> 00:07:53,840 Kaj tiuj dependas de la funkcioj vi havas en via kodo. 171 00:07:53,840 --> 00:07:57,780 Vi ĉiam havas funkcion en via kodo vokis ĉefan, do ĉiam estas 172 00:07:57,780 --> 00:08:00,480 sekcion cxi tie malsupre en la pilo dediĉitaj al ĉefaj. 173 00:08:00,480 --> 00:08:03,980 >> Tiuj sekcioj en la stako nomiĝas stako kadrojn. 174 00:08:03,980 --> 00:08:09,580 Kiam vi nomas alian funkcion, diru ĉefa flamo duuma serĉo funkcion, 175 00:08:09,580 --> 00:08:11,075 Ni metu alian kadro sur la stako. 176 00:08:11,075 --> 00:08:13,830 177 00:08:13,830 --> 00:08:17,320 Pli specife, ni tuj donaci eron de memoro pri nia 178 00:08:17,320 --> 00:08:22,960 komputilo por stoki duumaj serĉo La loka variabloj kaj kuri la duuma 179 00:08:22,960 --> 00:08:24,150 search kodo. 180 00:08:24,150 --> 00:08:26,810 >> Do ni nomas duuma serĉo. 181 00:08:26,810 --> 00:08:30,440 182 00:08:30,440 --> 00:08:33,340 En ĉi eron de memoro, ni iras stoki lia loka variablo. 183 00:08:33,340 --> 00:08:35,270 Ni iras al stoki lia printf alvokoj. 184 00:08:35,270 --> 00:08:38,159 Kio ajn okazas, ke tiu funkcio estas tuj estos stokitaj rajton tie. 185 00:08:38,159 --> 00:08:40,350 Duuma serĉo tuj ekzekuti. 186 00:08:40,350 --> 00:08:42,210 Ĝi tuj kompletigi ekzekuto. 187 00:08:42,210 --> 00:08:47,450 Kio estas la vorto en C, kiu signifas ke funkcio devus 188 00:08:47,450 --> 00:08:49,306 kompletigi lian ekzekuton? 189 00:08:49,306 --> 00:08:50,040 >> Lernanto: Reveno. 190 00:08:50,040 --> 00:08:50,870 >> JASON Hirschhorn: Return. 191 00:08:50,870 --> 00:08:53,230 Do kiam ajn vi vidas reveno deklaro, la funkcio randoj 192 00:08:53,230 --> 00:08:54,350 kiam kolizias tio. 193 00:08:54,350 --> 00:08:56,740 Do duuma serĉo alvenos lia reveno. 194 00:08:56,740 --> 00:09:01,360 Tiu parto de memoro volas esence liveri supren. 195 00:09:01,360 --> 00:09:03,510 Kaj ĉefa reiros al ekzekuto. 196 00:09:03,510 --> 00:09:07,240 Do ĉefa estos paŭzo, kien estis, alvoko duuma serĉo, akiri iom reveno valoro, 197 00:09:07,240 --> 00:09:08,700 kaj daŭrigus ekzekuto. 198 00:09:08,700 --> 00:09:10,840 Ĉi stack frame foriros. 199 00:09:10,840 --> 00:09:14,810 >> Se ni nomas rekursia funkcio, kiu estas funkcio kiu nomas sin super 200 00:09:14,810 --> 00:09:18,480 kaj super, ni eble reatingas - diru ni faris duuma serĉo rekursie. 201 00:09:18,480 --> 00:09:21,520 Ni povus ricevi binarajn serĉo versio unu, duuma serĉo du, duuma serĉo 202 00:09:21,520 --> 00:09:24,090 tri, duuma serĉo kvar, duuma serĉo kvin. 203 00:09:24,090 --> 00:09:27,950 Kaj tiam tiu fina duuma serĉo kvin alvenos la bazo kazo, kaj la stako 204 00:09:27,950 --> 00:09:31,010 kadroj reiros kaj observu fermo gxis ni reiros al la ĉefa. 205 00:09:31,010 --> 00:09:32,530 Ni povas iri sur rekursio en iom. 206 00:09:32,530 --> 00:09:35,530 Sed cxio tio estas, se vi estas nomante multnombraj funkciojn samtempe, 207 00:09:35,530 --> 00:09:39,250 tie estos multnombraj stako kadrojn sur la stako. 208 00:09:39,250 --> 00:09:42,900 >> La havaĵo, aliflanke, supren ĉi tie, ne por funkcioj, 209 00:09:42,900 --> 00:09:44,380 Ne por lokaj variabloj. 210 00:09:44,380 --> 00:09:48,920 Ĝi estas por dinamike asignitaj variabloj. 211 00:09:48,920 --> 00:09:57,210 Do jen estas variabloj kiuj povas esti pravalorizita en ĉu ĉefa aŭ 212 00:09:57,210 --> 00:09:58,640 Funkcio kiu ĉefa alvokoj. 213 00:09:58,640 --> 00:10:00,790 Ie ajn en via kodo, ili povas pravalorizita. 214 00:10:00,790 --> 00:10:04,360 Kaj al pravalorizi a dinamike asignitaj variablo. 215 00:10:04,360 --> 00:10:06,970 Kio funkcio en C ni uzos? 216 00:10:06,970 --> 00:10:07,600 >> Lernanto: malloc. 217 00:10:07,600 --> 00:10:09,240 >> JASON Hirschhorn: malloc. 218 00:10:09,240 --> 00:10:10,800 Vi nomas malloc. 219 00:10:10,800 --> 00:10:12,260 Vi akiras spacon de memoro. 220 00:10:12,260 --> 00:10:15,020 Kaj tiu spaco de memoro Estas sur la monteto. 221 00:10:15,020 --> 00:10:18,840 Kaj tiu spaco de memoro restas tie, ĝis vi vokos libera. 222 00:10:18,840 --> 00:10:22,670 >> Do dinamike asignitaj variabloj en amason ekzistos tiom longe kiom vi 223 00:10:22,670 --> 00:10:25,250 ĉu ili ekzistas, kaj ili tute ne foriros, ĝis vi eksplicite 224 00:10:25,250 --> 00:10:26,760 diru al ili foriri. 225 00:10:26,760 --> 00:10:29,670 Vi povas krei ilin en unu funkcion. 226 00:10:29,670 --> 00:10:31,930 Tio funkcia stako framo foriros. 227 00:10:31,930 --> 00:10:35,490 Sed tiu variablo estos ankoraŭ ekzistas en la havaĵo ĝis ĝi liberigas, 228 00:10:35,490 --> 00:10:39,650 potenciale per la funkcio kiu nomis duuma serĉo aŭ kio ajn. 229 00:10:39,650 --> 00:10:42,580 >> Do tiuj amason variabloj restu tie cxar tiel longe kiel vi volas 230 00:10:42,580 --> 00:10:43,490 ilin resti tie. 231 00:10:43,490 --> 00:10:46,090 Kaj ili get meti tien. 232 00:10:46,090 --> 00:10:47,450 Kaj tiam la venonta unu gets metis tie. 233 00:10:47,450 --> 00:10:50,210 Ili gardas getting plenigis, kaj ili restu tie, ĝis vi vokos libera. 234 00:10:50,210 --> 00:10:52,870 >> Kaj esence, la havaĵo kaj la pilo, alveni al Marcus demando, 235 00:10:52,870 --> 00:10:54,500 kreski al ĉiu alia. 236 00:10:54,500 --> 00:10:57,730 Kaj se ili kolizias unu la alian, vi jam eluzebla tuta memoro en via 237 00:10:57,730 --> 00:11:01,330 komputilo, kaj via programo estos quit ĉar vi ne havas plu memoro 238 00:11:01,330 --> 00:11:02,420 forlasis uzi. 239 00:11:02,420 --> 00:11:07,290 Inter ili, ekzistas potenciale aliaj aferoj. 240 00:11:07,290 --> 00:11:10,980 Sed por la atingo de ĉi tiu kurso, vi ne bezonas zorgi pri tio. 241 00:11:10,980 --> 00:11:12,020 >> Tiel estis la respondo al via demando. 242 00:11:12,020 --> 00:11:13,520 Ne zorgu pri tio. 243 00:11:13,520 --> 00:11:15,550 Sed tio estis la longa respondo. 244 00:11:15,550 --> 00:11:17,800 Ĉio kion vi bezonas scii estas monteton kaj trans la stako volo - 245 00:11:17,800 --> 00:11:18,900 unu startas ĉe la malsupro. 246 00:11:18,900 --> 00:11:19,570 La stako faras. 247 00:11:19,570 --> 00:11:20,790 La havaĵo estas tie supre. 248 00:11:20,790 --> 00:11:21,990 Ili kreskos pli proksime unu al alia. 249 00:11:21,990 --> 00:11:23,110 >> Kaj se ili tuŝas, tio estas problemo. 250 00:11:23,110 --> 00:11:24,500 Vi elkuris el memoro. 251 00:11:24,500 --> 00:11:28,760 Sed ankaŭ, krom scii kie ili, kio estas stokita en ambaŭ la 252 00:11:28,760 --> 00:11:30,512 pilo kaj monteto. 253 00:11:30,512 --> 00:11:31,410 Curtis. 254 00:11:31,410 --> 00:11:33,570 >> Curtis: Kiam ili karambolas, estas ke la pilo overflow? 255 00:11:33,570 --> 00:11:35,670 >> JASON Hirschhorn: Kiam ili karambolas, tio ne estas stako overflow. 256 00:11:35,670 --> 00:11:38,340 A stack overflow estas malsama areo ke ni povas iri super se vi volas. 257 00:11:38,340 --> 00:11:40,020 OK, ni revenos al tio en iom. 258 00:11:40,020 --> 00:11:42,730 >> Lernanto: Kio estas la vorto nomas kiam ili batis ĉiu alia, la 259 00:11:42,730 --> 00:11:44,450 pilo kaj la havaĵon? 260 00:11:44,450 --> 00:11:46,640 >> JASON Hirschhorn: Ĉar nun, ne maltrankviligi. 261 00:11:46,640 --> 00:11:47,750 Nur konas - 262 00:11:47,750 --> 00:11:50,530 Mi respondos al tiu demando post klaso. 263 00:11:50,530 --> 00:11:52,680 Se ili kolizias ĉiu alia, vi elkuris de memoro, ĉar ekzistas ne plu 264 00:11:52,680 --> 00:11:53,330 spacon tie. 265 00:11:53,330 --> 00:11:55,450 >> Lernanto: Pardonu, kio estas seg kulpas? 266 00:11:55,450 --> 00:11:58,710 >> JASON Hirschhorn: Segmento kulpo povas nomi por - 267 00:11:58,710 --> 00:12:02,240 tio dependas kial la seg kulpas la nomata. 268 00:12:02,240 --> 00:12:06,260 Foje, viaj stack overflow, ĝi malebligos diru seg fault kiel la eraro. 269 00:12:06,260 --> 00:12:08,180 >> Lernanto: Kio pri dereferencing nula variablo? 270 00:12:08,180 --> 00:12:10,040 Is that a seg kulpas? 271 00:12:10,040 --> 00:12:11,480 >> JASON Hirschhorn: Dereferencing nula montrilo - 272 00:12:11,480 --> 00:12:17,850 OK, do se vi havas montrilon, ke vi aro egala al nula, montriloj, recall, 273 00:12:17,850 --> 00:12:20,270 vendejo memoro adresoj kiel iliaj valoroj. 274 00:12:20,270 --> 00:12:23,660 Kaj nula montrilo estas esence stokante 0, la 0-a 275 00:12:23,660 --> 00:12:26,670 trakti en tiu variablo. 276 00:12:26,670 --> 00:12:30,010 Do 0x, 0, 0, 0, 0, ktp. 277 00:12:30,010 --> 00:12:35,030 Tio 0-a adreso en memoro kiu ne estas en nia bildo, ke estas tie supre 278 00:12:35,030 --> 00:12:38,800 ie, ke estas rezervitaj por la komputilo. 279 00:12:38,800 --> 00:12:40,130 Ni ne rajtas tuŝi ŝin. 280 00:12:40,130 --> 00:12:44,680 >> Do, kiam via programo estas ekzekuti, se io estas provi iri al la memoro 281 00:12:44,680 --> 00:12:48,990 adreso 0, sciu ke ke estas malplena valoro. 282 00:12:48,990 --> 00:12:50,820 Ĝi scias nenion devus esti tie. 283 00:12:50,820 --> 00:12:53,420 Do se vi klopodos kaj uzi ion tie kaj trakti iun kiel tie aŭ 284 00:12:53,420 --> 00:12:58,355 provis iri al tiu loko, vi estas tuj akiri seg kulpo aŭ eraro. 285 00:12:58,355 --> 00:13:00,520 Ĉu tio respondas vian demandon? 286 00:13:00,520 --> 00:13:03,170 >> Kaj nun ni reiros al pilo overflow. 287 00:13:03,170 --> 00:13:09,560 Aĵoj en la pilo, kiel vi knaboj havas vidis antaŭe, en - ni desegni proksime 288 00:13:09,560 --> 00:13:11,966 supren el stako kadro. 289 00:13:11,966 --> 00:13:15,050 Ĉu ĉiuj vidas, ke? 290 00:13:15,050 --> 00:13:16,650 Do ni havas nian stack frame. 291 00:13:16,650 --> 00:13:23,260 Ni ŝparas tabelo en kiel loka variablo en ĉi tiu funkcio. 292 00:13:23,260 --> 00:13:29,510 Do diru nia tabelo havas kvin makuloj. 293 00:13:29,510 --> 00:13:33,230 Ĉiuj kvin el tiuj estos stokitaj en tiu stako kadro. 294 00:13:33,230 --> 00:13:37,540 >> Se ni komencas skribi preter la limojn de tiu tabelo - 295 00:13:37,540 --> 00:13:43,990 tial se ni komencos skribi en, diru ke estas 0. 296 00:13:43,990 --> 00:13:46,800 Tiuj estas la kvin indeksoj de nia tabelo. 297 00:13:46,800 --> 00:13:50,980 Se ni komencas skribi en indekso 5, kiu ni ne havas, kiam ni havas 298 00:13:50,980 --> 00:13:55,900 tabelo de amplekso 5, ni komencas skribi en indekso 6, 7, 8, 9, ni povas ricevi Parva 299 00:13:55,900 --> 00:13:57,960 Overflow eraro. 300 00:13:57,960 --> 00:14:00,510 >> Ĝenerale ĝi ne estas - 301 00:14:00,510 --> 00:14:04,910 vi probable enproblemigos se vi iros preter unu. 302 00:14:04,910 --> 00:14:08,640 Sed ĝenerale, vi akiros en la plej problemojn, se vi transiras per loto 303 00:14:08,640 --> 00:14:12,770 kaj vi iru sur tiom super kiuj vi skribos super la reveno adreso de tiu 304 00:14:12,770 --> 00:14:16,080 funkcio, kiu situas ĉe la fundo de la stako kadro. 305 00:14:16,080 --> 00:14:16,520 >> Ĉar, ĉu ne? 306 00:14:16,520 --> 00:14:17,670 Vi - en la - sorry. 307 00:14:17,670 --> 00:14:18,550 Ne "ĉar pravas." 308 00:14:18,550 --> 00:14:20,470 >> En la stako kadron, vi havas viaj lokaj variabloj. 309 00:14:20,470 --> 00:14:27,090 Je la tre malsupre de la stako framo estas la reveno adreso. 310 00:14:27,090 --> 00:14:28,790 Tie estas kie la funkcio iras kiam ĝi estas finita. 311 00:14:28,790 --> 00:14:33,750 Kaj se vi anstatauxigas revenintoj adreso, tiam kiam tiu stako kadro, 312 00:14:33,750 --> 00:14:36,680 kiam vi iras tra la stako kadro kaj ekzekuti ĉiun linion, vi estas 313 00:14:36,680 --> 00:14:40,350 tuj iros al via nova reveno adreso tio estas skribita tie anstataŭ la 314 00:14:40,350 --> 00:14:40,910 reala unu. 315 00:14:40,910 --> 00:14:45,050 Kaj tiu estas kiel ni jam vidis iuj sekureco breĉojn 316 00:14:45,050 --> 00:14:46,780 povas okazi per komputiloj. 317 00:14:46,780 --> 00:14:52,760 >> Do stack overflow, resume, estas kiam vi anstatauxigas la parton en la stako 318 00:14:52,760 --> 00:14:55,440 vi supozis uzi, la loka variablo vi supozis uzi, kaj 319 00:14:55,440 --> 00:14:58,070 precipe kiam vi komencas overwriting gravaj aferoj kiel la 320 00:14:58,070 --> 00:14:59,100 revenu adreso. 321 00:14:59,100 --> 00:15:00,090 Kaj tio estas kie vi ricevos eraro. 322 00:15:00,090 --> 00:15:03,980 Aux eble ecx vi povis starti eĉ skribi en - 323 00:15:03,980 --> 00:15:05,370 diru duuma serĉo estis dekstre supre ĉefa. 324 00:15:05,370 --> 00:15:07,790 Se vi overwrote multon, vi povis verki en ĉefaj. 325 00:15:07,790 --> 00:15:10,230 Sed ĝenerale, vi ricevas erarmesagxon antaux tiam, ĉar la komputilo scias 326 00:15:10,230 --> 00:15:12,270 vi faras ion, kion vi oni ne faras. 327 00:15:12,270 --> 00:15:12,560 Jes. 328 00:15:12,560 --> 00:15:13,910 >> Lernanto: Kio estas la diferenco inter stako overflow 329 00:15:13,910 --> 00:15:16,940 kaj buffer overflow? 330 00:15:16,940 --> 00:15:19,420 >> JASON Hirschhorn: Bufro overflow estas pli ĝenerala tipo de 331 00:15:19,420 --> 00:15:20,395 kion mi ĵus priskribis. 332 00:15:20,395 --> 00:15:22,610 >> Lernanto: Do ​​stako overflow estas Ekzemplo de buffer overflow. 333 00:15:22,610 --> 00:15:23,420 >> JASON Hirschhorn: Ekzakte. 334 00:15:23,420 --> 00:15:28,700 Tiu estas tabelo ni povas pensi pri kiel bufro, spaco por aĵoj por eniri 335 00:15:28,700 --> 00:15:30,600 Tio ĉi estas stako buffer overflow. 336 00:15:30,600 --> 00:15:33,210 Ni povus havi amason buffer overflow. 337 00:15:33,210 --> 00:15:36,870 Se tie estis buffer, kiuj ofte estas tabelo de la monteto, kaj ni 338 00:15:36,870 --> 00:15:40,600 overwrote tiujn limojn, tiam ni havus havi amason buffer overflow. 339 00:15:40,600 --> 00:15:44,870 >> Kaj preter la atingo de ĉi tiu kurso, ili estas detektita iom malsame. 340 00:15:44,870 --> 00:15:48,040 La tradukilo havas specialan manieroj de detekti ĉiu. 341 00:15:48,040 --> 00:15:50,660 Sed buffer overflow estas pli ĝenerala tipo de kion mi priskribis, 342 00:15:50,660 --> 00:15:54,090 kiu estis stako buffer overflow. 343 00:15:54,090 --> 00:15:56,240 Ĉu tio respondas vian demandon? 344 00:15:56,240 --> 00:15:57,910 Dolĉa. 345 00:15:57,910 --> 00:16:01,850 >> Tie estis neniu alia demandojn rilatajn al la stako aŭ la havaĵon? 346 00:16:01,850 --> 00:16:04,920 347 00:16:04,920 --> 00:16:05,510 Jes. 348 00:16:05,510 --> 00:16:08,220 >> Lernanto: Mi konas vin devas liberaj kordoj ĉar ili estas en la havaĵo 349 00:16:08,220 --> 00:16:09,305 kaj vi ne volas filtri memoro. 350 00:16:09,305 --> 00:16:12,240 Sed vi devas liberigi mallokajn variablojn kaj da tio? 351 00:16:12,240 --> 00:16:14,335 Aŭ ili estas aŭtomate liberigitaj? 352 00:16:14,335 --> 00:16:15,700 >> JASON Hirschhorn: Bona demando. 353 00:16:15,700 --> 00:16:22,340 Do en CS50.H, ni kreu tiun aferon cxar vi nomas ŝnureto. 354 00:16:22,340 --> 00:16:23,800 Kordo estas vere kion? 355 00:16:23,800 --> 00:16:24,810 >> Lernanto: Char stelo. 356 00:16:24,810 --> 00:16:29,180 >> JASON Hirschhorn: A char stelo, montrilo karakteron, puntero al 357 00:16:29,180 --> 00:16:30,650 tabelo de signoj. 358 00:16:30,650 --> 00:16:32,210 Tio estas kion la kordo estas. 359 00:16:32,210 --> 00:16:36,050 Do ni devas liberigi ĝin, ĉar getstring, kiun ni uzis multajn - 360 00:16:36,050 --> 00:16:38,370 kordo nomo egalas getstring - 361 00:16:38,370 --> 00:16:43,560 ke mallocs por ni iom da memoro pri la amasigos kaj poste redonas referencon al la 362 00:16:43,560 --> 00:16:47,230 unua karaktero de tiu kordo, oni char stelo. 363 00:16:47,230 --> 00:16:52,760 >> Do evidente, se vi ne estis skribi liberaj je iu ajn el viaj kordoj 364 00:16:52,760 --> 00:16:55,600 ke vi nomis tiel for, vi havas iris filtrante iuj memoro. 365 00:16:55,600 --> 00:16:57,430 Kompreneble ni ne parolis pri Ĝi, do nenies alveninta en 366 00:16:57,430 --> 00:16:58,520 problemoj por fari ĝin. 367 00:16:58,520 --> 00:16:59,980 Sed irante antaŭen, jes. 368 00:16:59,980 --> 00:17:03,990 Kiam vi nomas getstring, vi estas mallocing iuj spaco sur la monteto. 369 00:17:03,990 --> 00:17:07,640 Kaj se vi ne nomas libera poste sur tiu kordo, vi havas memoron liko. 370 00:17:07,640 --> 00:17:09,440 Tio respondos al via demando? 371 00:17:09,440 --> 00:17:10,606 >> Jes 372 00:17:10,606 --> 00:17:15,020 >> Lernanto: Do ​​fari tion, do ni uzu libera ĝuste antaŭ reveno? 373 00:17:15,020 --> 00:17:18,510 Kiel, en la kadro de, mi supozas, se ni diru, kiel, int main, ene de la 374 00:17:18,510 --> 00:17:24,410 medio de la kodo kiu estas interne de tiuj krispa krampoj, ĝuste antaŭ - 375 00:17:24,410 --> 00:17:26,140 vi scias kie oni kredus kutimas meti reveno. 376 00:17:26,140 --> 00:17:27,950 Ĉu vi metis liberaj antaŭ tiu? 377 00:17:27,950 --> 00:17:31,000 >> JASON Hirschhorn: Do vi povas meti liberaj kien vi volas meti libera. 378 00:17:31,000 --> 00:17:33,810 Ĉar tiuj estas dinamike asignitaj variabloj, ĉar ili povas 379 00:17:33,810 --> 00:17:39,170 loĝas preter la atingo de aparta funkcio, se vi nomas malloc en 380 00:17:39,170 --> 00:17:44,140 apartan funkcion, ekzemple, getstring, vi povas voki libera en ĉefa. 381 00:17:44,140 --> 00:17:46,050 Vi ne bezonas nomi ĝin en la specifa funkcio 382 00:17:46,050 --> 00:17:47,570 kie malloc nomiĝas. 383 00:17:47,570 --> 00:17:50,340 Sed vi ne bezonas nomi ĝin antaŭ la ĉefaj revenas. 384 00:17:50,340 --> 00:17:51,120 >> Kaj tio vere dependas. 385 00:17:51,120 --> 00:17:54,960 Ĝi dependas kial vi malloced ke spaco en la unua loko. 386 00:17:54,960 --> 00:17:57,320 Kelkaj homoj vokos liberigi bela rapide. 387 00:17:57,320 --> 00:17:59,220 Kelkaj homoj ne nomas libera ĝis la finon de ilia programo. 388 00:17:59,220 --> 00:18:00,660 Kaj oni iros tra kaj libera ĉion. 389 00:18:00,660 --> 00:18:03,597 Ĝi dependas kial vi vokis malloc. 390 00:18:03,597 --> 00:18:11,270 >> Lernanto: Kaj kion vi diras se vi nomas uzo getstring? 391 00:18:11,270 --> 00:18:13,320 Vi dirus liberaj kio? 392 00:18:13,320 --> 00:18:20,040 >> JASON Hirschhorn: Do la sintakso senpage Estas simple liberan, malferman paren, fermo 393 00:18:20,040 --> 00:18:22,130 paren, kaj la nomo de la montrilo. 394 00:18:22,130 --> 00:18:26,410 Do se vi skribus kordo nomo egaluloj getstring, vi metu nomon en ĉi tie. 395 00:18:26,410 --> 00:18:27,760 Tio estas la nomo de la montrilo. 396 00:18:27,760 --> 00:18:30,570 Kaj sciu liberigi ke memoro. 397 00:18:30,570 --> 00:18:33,920 >> Lernanto: Do ​​kiam Libera ke memoro, la montrilon ankoraŭ antaŭ al tiu loko 398 00:18:33,920 --> 00:18:34,970 en la memoro? 399 00:18:34,970 --> 00:18:39,020 Aŭ ĉu la montrilon ankaŭ transversxata el la adreso, ke gxi indikas al. 400 00:18:39,020 --> 00:18:40,290 >> JASON Hirschhorn: ni devus provi tion. 401 00:18:40,290 --> 00:18:41,430 Ni devas programi tion. 402 00:18:41,430 --> 00:18:43,880 Ni revenos kiam ni atingos kodigo, kaj lasu la kodon, kiun. 403 00:18:43,880 --> 00:18:46,000 Kaj se vi volas eltrovi la respondo por ke, vi povas ankaŭ kodon kiu 404 00:18:46,000 --> 00:18:46,690 intertempe. 405 00:18:46,690 --> 00:18:49,100 Sed tio estas granda demando. 406 00:18:49,100 --> 00:18:53,480 >> Lernanto: Ĉu eblas libera iu tro frue? 407 00:18:53,480 --> 00:18:58,530 Do vi ankoraŭ bezonas gxin por via programo, kaj vi liberigita, ke memora spaco? 408 00:18:58,530 --> 00:18:59,200 >> JASON Hirschhorn: Jes. 409 00:18:59,200 --> 00:19:03,020 Ĝi estas ebla, se vi liberan ion kaj tiam vi uzu gxin denove, vi estos 410 00:19:03,020 --> 00:19:06,890 kolizii eraro. 411 00:19:06,890 --> 00:19:10,810 Sed tio estas sur vi, ĉar vi liberigitaj io kaj tiam nomis ŝin poste. 412 00:19:10,810 --> 00:19:13,940 Por ke estis programisto estas eraro. 413 00:19:13,940 --> 00:19:14,780 Sed jes. 414 00:19:14,780 --> 00:19:17,760 Vi povus skribi tion. 415 00:19:17,760 --> 00:19:19,240 >> Plu demandoj pri - 416 00:19:19,240 --> 00:19:19,760 jes. 417 00:19:19,760 --> 00:19:22,820 >> Lernanto: Do, se vi supozas nur liberigi ĝin en ĝeneralan antaŭ la 418 00:19:22,820 --> 00:19:25,490 programo finiĝas, tio signifas, se la programo finiĝas kaj vi ne liberigi lin, 419 00:19:25,490 --> 00:19:27,580 tiu memoro estas ankoraŭ asignitaj? 420 00:19:27,580 --> 00:19:31,330 >> JASON Hirschhorn: Se via programo finiĝas kaj vi forgesos liberigi ion, tiam 421 00:19:31,330 --> 00:19:34,390 tiu memoro estis asignitaj tra la vivo de via programo. 422 00:19:34,390 --> 00:19:37,670 Kiam via programo fermas tute, tiu memoro ne tuj 423 00:19:37,670 --> 00:19:39,490 resti tie por ĉiam. 424 00:19:39,490 --> 00:19:42,080 La komputilo estas sufiĉe lertaj por scii ke kiam la programo fermas, ĝi 425 00:19:42,080 --> 00:19:46,440 devus forigi de ĉiuj el la memoro, ke estis asociitaj kun tiu programo. 426 00:19:46,440 --> 00:19:51,240 >> Tamen, tie estas iloj vi povas kuri en programo por detekti se, kiam la 427 00:19:51,240 --> 00:19:54,720 programo finis, vi forgesis liberigi iun memoron. 428 00:19:54,720 --> 00:19:57,960 Kaj por via sekva problemo starigis kie vi uzos malloc kaj uzante 429 00:19:57,960 --> 00:20:02,610 montriloj, vi estos kuranta ĉi plani vian programon por vidi se, 430 00:20:02,610 --> 00:20:06,530 kiam ĉefa revenas, vi havis iun aferojn, kiuj restis unfreed. 431 00:20:06,530 --> 00:20:09,130 >> Do ili ne tuj resti malloced cxiam en via komputilo. 432 00:20:09,130 --> 00:20:11,720 Tio estus malŝparo, ĉar tre rapide, komputiloj 433 00:20:11,720 --> 00:20:12,960 kurus el memoro. 434 00:20:12,960 --> 00:20:16,450 Sed se ili dauxras gxis la fino de viaj plani kaj ili ne liberigita kaj via 435 00:20:16,450 --> 00:20:20,260 programo eliroj, tio estas ankoraŭ problemo ke tiu ilo helpos vin adreso. 436 00:20:20,260 --> 00:20:21,520 >> Lernanto: Ĉu tio estas Valgrind? 437 00:20:21,520 --> 00:20:22,910 >> JASON Hirschhorn: Estas vokis Valgrind. 438 00:20:22,910 --> 00:20:23,520 Kaj vi estos - 439 00:20:23,520 --> 00:20:25,780 >> Lernanto: Sed ni ne devas scii ke por la kvizo, kvankam? 440 00:20:25,780 --> 00:20:27,600 Mi volas diri, oni parolis pri iom en prelego. 441 00:20:27,600 --> 00:20:33,600 >> JASON Hirschhorn: Do Valgrind estas la nomo de tiu ilo. 442 00:20:33,600 --> 00:20:37,180 Sciante, kion li faras, estas Suficxas por la kvizo. 443 00:20:37,180 --> 00:20:40,200 Sed vi ne uzis ĝin ankoraŭ en via problemo metita ĉar ni ne havis 444 00:20:40,200 --> 00:20:43,520 problemo aro kiu eksplicite traktis per malloc aŭ vi uzas malloc. 445 00:20:43,520 --> 00:20:45,330 Do vi ne uzas Valgrind ankoraŭ. 446 00:20:45,330 --> 00:20:47,760 Sed vi uzos gxin pli frue prefere ol poste. 447 00:20:47,760 --> 00:20:48,710 >> Lernanto: Ĉu vi povas ripeti kio Valgrind estas? 448 00:20:48,710 --> 00:20:49,190 >> JASON Hirschhorn: Pardonu? 449 00:20:49,190 --> 00:20:51,240 >> Lernanto: Ĉu vi povas ripeti kion la celo de Valgring estas? 450 00:20:51,240 --> 00:20:53,100 >> JASON Hirschhorn: Valgrind estas la nomo - 451 00:20:53,100 --> 00:20:59,890 kiel GDB helpas vin elpurigi vian programon, Valgrind helpas vin diveni, se 452 00:20:59,890 --> 00:21:03,210 aferoj ne estis liberigitaj kiam via programo fermas. 453 00:21:03,210 --> 00:21:05,110 Do vi devos kuri ĝin sur via programo. 454 00:21:05,110 --> 00:21:09,230 Kaj via programo eliras, kaj gxi diros via programo nomata malloc ĉi multaj 455 00:21:09,230 --> 00:21:13,670 fojoj por tio multaj bajtoj, kaj vi nur nomis liberaj ĉi multfoje. 456 00:21:13,670 --> 00:21:16,520 Kaj tial vi lasis multe da bitokoj sen esti liberigita. 457 00:21:16,520 --> 00:21:18,050 Aŭ tio diros, ke vi jam liberigitaj ĉion. 458 00:21:18,050 --> 00:21:19,070 Bonan laboron. 459 00:21:19,070 --> 00:21:19,480 >> Lernanto: okej. 460 00:21:19,480 --> 00:21:21,060 Kaj ĝi nomiĝas Valgring? 461 00:21:21,060 --> 00:21:24,940 >> JASON Hirschhorn: V-A-L-G-R-I-N-D. 462 00:21:24,940 --> 00:21:25,970 >> Lernanto: Demando pri montriloj. 463 00:21:25,970 --> 00:21:30,080 Do diru vi n star x egalas ion. 464 00:21:30,080 --> 00:21:33,330 Tio egalas kion ajn vi metante tie, estas ke tio, kio metas ene 465 00:21:33,330 --> 00:21:36,120 kio x estas indikante, aŭ la montrilon de x? 466 00:21:36,120 --> 00:21:37,690 >> JASON Hirschhorn: Can vin ripetu la demandon? 467 00:21:37,690 --> 00:21:39,340 Ĉu ni povas desegni ĝin dum vi diras tion? 468 00:21:39,340 --> 00:21:42,710 >> Lernanto: En la kvizo, efektive, la tiu, kiun vi sendis nin, estis kiel, char 469 00:21:42,710 --> 00:21:46,520 stelo veron egalas CS50 rokoj, ĉu ne? 470 00:21:46,520 --> 00:21:52,190 Do tio signifas ke tiu CS50 rokoj diras la veron notas al? 471 00:21:52,190 --> 00:21:55,810 >> JASON Hirschhorn: Do vi parolas pri char stelo en ĉeno, kiel 472 00:21:55,810 --> 00:21:56,460 kiu funkcias? 473 00:21:56,460 --> 00:21:56,890 Jes. 474 00:21:56,890 --> 00:21:57,700 OK. 475 00:21:57,700 --> 00:21:59,140 Ni desegnas ĉi tie. 476 00:21:59,140 --> 00:22:07,100 >> [SIDE konversacio] 477 00:22:07,100 --> 00:22:11,130 >> JASON Hirschhorn: Do tiu variablo tuj estos de tipo char stelo. 478 00:22:11,130 --> 00:22:14,580 Kiom grandaj estas variablo de tipo char stelo? 479 00:22:14,580 --> 00:22:15,510 Kiom da bajtoj? 480 00:22:15,510 --> 00:22:16,450 >> Lernantoj: Kvar. 481 00:22:16,450 --> 00:22:18,210 >> JASON Hirschhorn: Estas kvar bajtojn. 482 00:22:18,210 --> 00:22:21,420 Kiom da rajtoj estas variablo de tipo int stelo? 483 00:22:21,420 --> 00:22:22,210 >> Lernantoj: Kvar. 484 00:22:22,210 --> 00:22:24,910 >> JASON Hirschhorn: Kvar bajtoj. 485 00:22:24,910 --> 00:22:28,280 Se ĝi estas montrilo, tiam ĝi estas ĉiam kvar bajtojn, ĉar montriloj, ilia 486 00:22:28,280 --> 00:22:30,070 valoro estas memoro adreso. 487 00:22:30,070 --> 00:22:35,160 Kaj memoro adresoj sur la CS50 aparato estas kvar bajtojn longa. 488 00:22:35,160 --> 00:22:42,900 Do, kiam ni vokas getstring, aŭ kiam ni diru, stringname egaluloj, kaj poste en 489 00:22:42,900 --> 00:22:46,140 duoblaj citiloj metis ĉenon, ni metas - 490 00:22:46,140 --> 00:22:46,920 bone, tio estas iom malsama. 491 00:22:46,920 --> 00:22:48,630 Ni ja getstring kiel la ekzemplo. 492 00:22:48,630 --> 00:22:52,150 Aŭ char stelo ion egalas la kordo. 493 00:22:52,150 --> 00:22:54,360 Pardonu, donu al mi la ekzemplo ke vi legas? 494 00:22:54,360 --> 00:22:57,590 >> Lernanto: char stelo veron egalas "Cs50 rokoj" en citiloj. 495 00:22:57,590 --> 00:23:02,260 >> JASON Hirschhorn: Do tiu stelo, ĉi ni nomas tiun variablon x por nia 496 00:23:02,260 --> 00:23:04,060 Generic celoj. 497 00:23:04,060 --> 00:23:05,970 Ni kreis variablon nomitan x. 498 00:23:05,970 --> 00:23:07,610 Ĝi estas tipo char stelo. 499 00:23:07,610 --> 00:23:10,950 Ĝi estas montrilo al serio de karakteroj. 500 00:23:10,950 --> 00:23:12,200 Do ĉi tie - 501 00:23:12,200 --> 00:23:23,710 502 00:23:23,710 --> 00:23:25,890 >> Do jen kiel ĉi tio labori en la memoro. 503 00:23:25,890 --> 00:23:27,410 Ĉi stokus memoro adreso. 504 00:23:27,410 --> 00:23:31,770 Estus stoki la memoro adreso de la unua gravulo en la tabelo. 505 00:23:31,770 --> 00:23:33,830 Kaj poste, kiam vi sekvis la montrilon, vi farus 506 00:23:33,830 --> 00:23:35,200 akiri la unuan karakteron. 507 00:23:35,200 --> 00:23:38,780 >> Kaj se vi legas ĉi tion kiel ŝnureto, via komputilo estas inteligenta 508 00:23:38,780 --> 00:23:42,930 sufiĉe por scii, legu ĉi afero ĝis ĝi atingas reagon 0. 509 00:23:42,930 --> 00:23:45,530 Sed se vi legas ĝin karaktero ĉe tempo, tial vi estas ripetanta tra 510 00:23:45,530 --> 00:23:49,910 tiun ĉenon, tiam vi estos nur legi karaktero samtempe ĝis vi atingos 511 00:23:49,910 --> 00:23:50,850 backslash 0. 512 00:23:50,850 --> 00:23:52,335 Tio eble ne respondos al via demando, kvankam. 513 00:23:52,335 --> 00:23:55,610 >> Lernanto: Jes, sed tion vi ne malloced tiu spaco 514 00:23:55,610 --> 00:23:58,400 tamen pro tiu montrilo. 515 00:23:58,400 --> 00:24:02,510 >> JASON Hirschhorn: Do mi ne estas tute certa precize kion vi serĉas ĉe, 516 00:24:02,510 --> 00:24:03,640 ĉar mi ne faras tiun kvizon. 517 00:24:03,640 --> 00:24:06,370 Tio estis supozitaj esti helpema de rimedoj el alia TF. 518 00:24:06,370 --> 00:24:11,380 Se vi kreas ĉenon sur la pilo aŭ kiel loka variablo, ĝi malebligos 519 00:24:11,380 --> 00:24:16,920 nur estu tabelo de ŝargoj anstataŭ ĝenerale char stelo montrante 520 00:24:16,920 --> 00:24:18,600 alia kordo. 521 00:24:18,600 --> 00:24:20,550 Sed mi ne scias. 522 00:24:20,550 --> 00:24:25,065 Tio povus esti montrilo por alia kordo sur la stakon tiel. 523 00:24:25,065 --> 00:24:27,240 Jes. 524 00:24:27,240 --> 00:24:31,116 >> Lernanto: Mi scias, ke vi bezonas rezervi memoron se la montrilo estas 525 00:24:31,116 --> 00:24:33,360 getting deklaris interne de alia funkcio. 526 00:24:33,360 --> 00:24:36,740 Ĉu vi bezonas fari la samon, se ĝi estas esti deklarita ene de ĉefa, 527 00:24:36,740 --> 00:24:39,570 vi uzas gxin ene de ĉefaj? 528 00:24:39,570 --> 00:24:43,590 >> JASON Hirschhorn: Do jes. 529 00:24:43,590 --> 00:24:46,670 Vi povas deklari montrilon al iu memoro adreso en memoro. 530 00:24:46,670 --> 00:24:51,440 Ĝi povas esti la memoro adreso de loka variablo, kvankam ofte, 531 00:24:51,440 --> 00:24:55,760 homoj ne deklari memoro adresoj al lokaj variabloj ĉar ili iros 532 00:24:55,760 --> 00:24:59,890 for unufoje tiu funkcio redonas, kiuj Tial ni ĝenerale malloc aferojn. 533 00:24:59,890 --> 00:25:04,630 Sed jes, vi povus deklari montrilo al alia loka variablo. 534 00:25:04,630 --> 00:25:06,360 Ĝi estas nur ĝenerale ne faris. 535 00:25:06,360 --> 00:25:09,480 Sed mi povas tuj iri en tiu specifa afero post klaso. 536 00:25:09,480 --> 00:25:10,650 Jes. 537 00:25:10,650 --> 00:25:12,350 >> Lernanto: Mi pensas, ke estas speco de kio petas. 538 00:25:12,350 --> 00:25:16,930 Ĝi ŝajnas stranga por esti inicializar puntero ne kiel 539 00:25:16,930 --> 00:25:20,760 adreso, sed pro kio Ŝajnas kiel valoro. 540 00:25:20,760 --> 00:25:25,970 Ĝi ŝajnas kiel la CS50 estas kio estas interne la afero esti fingromontris kaj 541 00:25:25,970 --> 00:25:28,820 ne la realan adreson, ĉu ne? 542 00:25:28,820 --> 00:25:30,520 >> JASON Hirschhorn: Do jen ne estas la kazo, kvankam. 543 00:25:30,520 --> 00:25:32,470 Tio ne estas kio okazas. 544 00:25:32,470 --> 00:25:35,910 Kiam vi deklaras char stelo, ĝi estas memoro adreso. 545 00:25:35,910 --> 00:25:38,860 Pointers estas ĉiuj memoro adresoj montras ion alian. 546 00:25:38,860 --> 00:25:41,480 Ke io povus esti sur la stako, sed preskaŭ ĉiam estas sur la 547 00:25:41,480 --> 00:25:43,440 amasigos en la maniero ni vidos gxin uzas. 548 00:25:43,440 --> 00:25:46,860 549 00:25:46,860 --> 00:25:53,500 Sed stringname egalas duoble citaĵo "Getstring," ni povas vidi, ke ni 550 00:25:53,500 --> 00:25:55,010 povas rigardi tra tiu kaj programi tion. 551 00:25:55,010 --> 00:26:01,190 getstring kordo ne esti savita en ke variablo, aux kion ajn la kordo 552 00:26:01,190 --> 00:26:04,580 nomo ne estas savo en tiu variablo, ĉar tio ne estas kiel 553 00:26:04,580 --> 00:26:06,070 pointers labori. 554 00:26:06,070 --> 00:26:06,770 Ĉu tio havas sencon? 555 00:26:06,770 --> 00:26:07,170 >> Lernanto: Jes. 556 00:26:07,170 --> 00:26:08,570 >> JASON Hirschhorn: okej. 557 00:26:08,570 --> 00:26:11,690 Mi esperas, ke ne estis konfuza al neniu. 558 00:26:11,690 --> 00:26:15,732 Sed se gxi estis, ni povas rigardi ĝin denove en iom, ĉar ni vere irante 559 00:26:15,732 --> 00:26:19,240 kodigi iu kiu espereble labori per kordoj kaj helpu vin sentas 560 00:26:19,240 --> 00:26:22,170 pli komforta kun ili. 561 00:26:22,170 --> 00:26:24,869 >> Ajna alia demandojn rilataj al tiuj temoj aŭ aliaj temoj kiujn 562 00:26:24,869 --> 00:26:26,119 Mi metos back up? 563 00:26:26,119 --> 00:26:32,280 564 00:26:32,280 --> 00:26:34,840 Kaj - 565 00:26:34,840 --> 00:26:36,310 ĝuste nun. 566 00:26:36,310 --> 00:26:37,630 Jes, Alden. 567 00:26:37,630 --> 00:26:39,860 >> Alden: Do tio estas tute nerilata, sed ni povas simple transiri 568 00:26:39,860 --> 00:26:42,760 vere rapide, kion ni bezonas scii pri la diferenco inter 32 kaj 569 00:26:42,760 --> 00:26:46,345 64-bita maŝino? 570 00:26:46,345 --> 00:26:47,740 >> JASON Hirschhorn: Jes. 571 00:26:47,740 --> 00:26:52,111 Do 32 bitoj estas kiom da bitokoj? 572 00:26:52,111 --> 00:26:53,060 >> Alden: Estas kvar bajtojn. 573 00:26:53,060 --> 00:26:54,360 >> JASON Hirschhorn: Estas kvar bajtojn. 574 00:26:54,360 --> 00:26:58,420 Kaj 64 bitoj estas kiom da bitokoj? 575 00:26:58,420 --> 00:26:59,112 >> Lernanto: Ok. 576 00:26:59,112 --> 00:27:00,610 >> JASON Hirschhorn: Ok bajtoj. 577 00:27:00,610 --> 00:27:03,980 Do denove, ok bitoj estas unu bajto. 578 00:27:03,980 --> 00:27:08,340 Viaj CS50 aparato estas 32-bitan komputilon. 579 00:27:08,340 --> 00:27:13,650 Do memoro adresoj estas kvar bajtojn longa. 580 00:27:13,650 --> 00:27:17,460 Estas 2 al la 32 memoro adresoj. 581 00:27:17,460 --> 00:27:21,310 0 ĝis 2 al la 32 minus 1. 582 00:27:21,310 --> 00:27:27,630 Kaj mi ne estas pozitiva, sed tio estas probable la medio de kion vi bezonas por 583 00:27:27,630 --> 00:27:35,230 scii por 32-bita maŝino, ke la memoro adresoj estas, denove, kvar bajtojn longa, 584 00:27:35,230 --> 00:27:39,620 kaj tio estas la maksimuma kvanto de memoro adresoj. 585 00:27:39,620 --> 00:27:41,680 >> Ankaŭ, datumtipoj - 586 00:27:41,680 --> 00:27:45,020 tio povus esti io kiel bone, ke valoras noti. 587 00:27:45,020 --> 00:27:49,610 La grandeco de datumtipo dependas la maŝino vi laboras kun. 588 00:27:49,610 --> 00:27:56,760 Do char, sola karaktero, estas kiel multaj bitokoj sur nia CS50 aparaton? 589 00:27:56,760 --> 00:27:57,980 Unu bitoko. 590 00:27:57,980 --> 00:28:02,310 Kaj ĝi estas efektive unu bajton kiel bone sur 64-bitan komputilon. 591 00:28:02,310 --> 00:28:05,920 >> Kaj plej datumtipoj estas la sama nombro de bajtoj en ambaŭ maŝinoj. 592 00:28:05,920 --> 00:28:11,620 Sed iuj datumtipoj estos malsama sur ambaŭ maŝinoj. 593 00:28:11,620 --> 00:28:14,590 Do kiu estus potenciale la nur afero vi bezonas scii. 594 00:28:14,590 --> 00:28:16,710 >> Sed ecx tio, mi pensas, estas preter la limojn - 595 00:28:16,710 --> 00:28:20,990 Mi preskaŭ pozitiva, se vi retrorigardas ĉe malnovaj kvizojn, ĝi diras, alpreni por 596 00:28:20,990 --> 00:28:24,090 kodiga problemojn vi uzas 32-bitan komputilon. 597 00:28:24,090 --> 00:28:26,620 598 00:28:26,620 --> 00:28:30,620 Sed estas, iri kune kun tiu en kazo vi interesiĝas, ekzistas 599 00:28:30,620 --> 00:28:35,920 datumtipoj ke estas la sama grandeco sur ĉiuj maŝinoj. 600 00:28:35,920 --> 00:28:42,670 >> Se vi vidis ion kiel uint32_t, vi povas aŭ 601 00:28:42,670 --> 00:28:43,260 ne vidis tion. 602 00:28:43,260 --> 00:28:44,290 Tio estas datumtipo. 603 00:28:44,290 --> 00:28:47,570 Tio estas diranta, ke 32 bitoj negrave kia maŝino ĉi estas plu. 604 00:28:47,570 --> 00:28:50,350 Do kiam homoj skribas porteblaj kodo, oni probable ne uzos ints. 605 00:28:50,350 --> 00:28:53,260 Ili faros anstataŭ uzi tiujn aliajn datumoj tipoj ke ili scias estos la sama 606 00:28:53,260 --> 00:28:54,780 grandeco sur ĉiu simpla maŝino. 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: mi havis demandon pri kompilado procezo. 610 00:29:00,150 --> 00:29:04,110 Do, se vi skribas programo kiu uzas biblioteko kiel CS50 aŭ io 611 00:29:04,110 --> 00:29:06,840 kiel tiun, mi scias ke tiu biblioteko devas, je iu punkto, estu 612 00:29:06,840 --> 00:29:08,590 kompilis kaj ligita in 613 00:29:08,590 --> 00:29:13,380 Sed kiom de kiu okazas dum kompilado de via programo? 614 00:29:13,380 --> 00:29:15,880 Kiun parton de tiu biblioteko procezo okazas kiam vi estas 615 00:29:15,880 --> 00:29:18,560 kompili vian propran programon? 616 00:29:18,560 --> 00:29:24,020 >> JASON Hirschhorn: Do ni iru trans ĝenerale la pasxojn de tiu procezo. 617 00:29:24,020 --> 00:29:26,280 Vi skribas vian. C dosiero. 618 00:29:26,280 --> 00:29:33,530 En via. C dosiero, vi # include via kaplinio bibliotekoj, ekzemple, cs50.h. 619 00:29:33,530 --> 00:29:39,480 Kion faras tiu akra inkluzivi linio do al via programo? 620 00:29:39,480 --> 00:29:40,525 Akchar. 621 00:29:40,525 --> 00:29:43,350 >> AKCHAR: ĝi aldonas la prototipoj de la funkcioj de la kaplinio 622 00:29:43,350 --> 00:29:45,120 dosieroj en la bibliotekoj. 623 00:29:45,120 --> 00:29:45,600 >> JASON Hirschhorn: Ekzakte. 624 00:29:45,600 --> 00:29:49,870 Ĝi aldonas tiujn funkcio prototipoj al via kodo. 625 00:29:49,870 --> 00:29:55,230 Do, kiam via kodo estas kompilita en la fruaj stadioj, la tradukilo scias 626 00:29:55,230 --> 00:29:59,250 ke tiuj funkcioj vere ekzistas, kaj ke ie ili difinis. 627 00:29:59,250 --> 00:30:02,460 La. H dosieroj ne inkluzivas la difinoj por tiuj funkcioj aŭ kiel 628 00:30:02,460 --> 00:30:03,950 ili efektive funkcias. 629 00:30:03,950 --> 00:30:07,960 Cs50.h simple inkluzivas iun kiu diras getstring estas reala afero, kiun 630 00:30:07,960 --> 00:30:09,270 povas okazi. 631 00:30:09,270 --> 00:30:14,240 Kaj standardio.h diras printf estas vera afero kiu povas okazi. 632 00:30:14,240 --> 00:30:23,190 >> Do via c lingvo kun tio. Kaplinio dosiero gets igitaj iuj 633 00:30:23,190 --> 00:30:27,750 maŝino-legebla kodo, kiu eventuale gets igitaj duuma 634 00:30:27,750 --> 00:30:30,030 kodo, 0-aj kaj la 1-aj jaroj. 635 00:30:30,030 --> 00:30:33,590 Kaj tio estas la kodo kiu finfine gets ekzekutita. 636 00:30:33,590 --> 00:30:38,550 La-l cs50 linio - ekzemple, kiam vi skribas tin - 637 00:30:38,550 --> 00:30:41,830 kaj tiam vi inkluzivi-l cs50, vi tajpas, ke in 638 00:30:41,830 --> 00:30:42,180 Kaj vi vidas tion. 639 00:30:42,180 --> 00:30:43,890 Kiam vi skribas faros, vi vidi tiun linion tien. 640 00:30:43,890 --> 00:30:47,740 Kaj ni vidos, ke en la dua kiam Ni kodo aŭ poste, kiam ni kodon. 641 00:30:47,740 --> 00:30:50,390 >> Sed tiu-l cs50 linio faras ion iom malsamaj ol 642 00:30:50,390 --> 00:30:52,440 la # include cs50.h. 643 00:30:52,440 --> 00:30:56,300 Kion tio-l cs50 linion faru? 644 00:30:56,300 --> 00:30:56,820 Avi? 645 00:30:56,820 --> 00:31:00,310 >> AVI: Mi volas diri, ke ĝi ligiloj la bibliotekon al la funkcio 646 00:31:00,310 --> 00:31:02,710 vokas, kiel la. o dosierojn. 647 00:31:02,710 --> 00:31:08,200 >> JASON Hirschhorn: Do tre apude, se ne videblas-on. 648 00:31:08,200 --> 00:31:16,220 La-l cs50 prenas la duuma dosiero kaj kunfandas ĝin kun via duuma dosiero. 649 00:31:16,220 --> 00:31:21,410 Do cs50.h, estas senutile turnante cs50.h de C lingvon al duuma ĉiu 650 00:31:21,410 --> 00:31:23,130 solan fojon ĝi estas uzata. 651 00:31:23,130 --> 00:31:26,650 Tio estus stulta, ĉar tio devus malŝpari multan tempon. 652 00:31:26,650 --> 00:31:30,420 Do ĝi estas jam kompilita kaj igita plenumebla. 653 00:31:30,420 --> 00:31:35,430 Kaj nun gxi estas tuj esti kunfandita kun via dosiero ĉe la fino. 654 00:31:35,430 --> 00:31:38,370 Do tiuj 1-aj kaj 0 La iras kunfandi kun viaj karaj 655 00:31:38,370 --> 00:31:39,150 kaj 0 estas cxe la fino. 656 00:31:39,150 --> 00:31:43,670 Do nun vi efektive havas la realan 1-oj kaj 0-oj kiuj difinas kiom getstring, 657 00:31:43,670 --> 00:31:47,890 ekzemple, funkcias, nek kiel printf, ekzemple, verkoj. 658 00:31:47,890 --> 00:31:52,750 >> Kaj por pli da informoj, tie estas mallonga tradukiloj ke Nate donas ke 659 00:31:52,750 --> 00:31:55,410 vi devus kontroli kiu iras tra tiuj paŝoj. 660 00:31:55,410 --> 00:31:56,050 Sed - 661 00:31:56,050 --> 00:31:56,560 jes. 662 00:31:56,560 --> 00:32:01,700 >> Lernanto: Ĉu ili ĉiam. O dosierojn kiam ili estas en la biblioteko formon, 663 00:32:01,700 --> 00:32:06,764 preta por polurado kaj movo, ligita - kiel Ili estas en la duuma kodo? 664 00:32:06,764 --> 00:32:07,600 >> JASON Hirschhorn: okej. 665 00:32:07,600 --> 00:32:08,420 Kio - 666 00:32:08,420 --> 00:32:11,780 >> Lernanto: Ĉu tio estas ĉiam la kazo por la bibliotekoj kiam vi ligas ilin? 667 00:32:11,780 --> 00:32:12,500 >> JASON Hirschhorn: Jes. 668 00:32:12,500 --> 00:32:17,300 Do tie estas. S dosierojn, kiuj estos maŝino kodon, kiun ankaŭ estos 669 00:32:17,300 --> 00:32:17,975 kamufla al vi. 670 00:32:17,975 --> 00:32:19,410 Vi ne bezonas zorgi pri tiuj. 671 00:32:19,410 --> 00:32:24,930 Sed ĝenerale, jes, ili timige esti en. o Dosieroj pretaj por iri. 672 00:32:24,930 --> 00:32:27,170 >> Lernanto: Do ​​kiam vi veturis al biblioteko, cxu vi nur sxipo 673 00:32:27,170 --> 00:32:28,880 La. h kaj la. o? 674 00:32:28,880 --> 00:32:32,210 Vi ne ŝipo. C aŭ la. S. 675 00:32:32,210 --> 00:32:33,070 >> JASON Hirschhorn: Do - 676 00:32:33,070 --> 00:32:36,260 kaj ĉi tiu estas en ĉi tiu mallonga tiel, se ĉi informoj ŝajnas esti venante 677 00:32:36,260 --> 00:32:36,700 iom rapide. 678 00:32:36,700 --> 00:32:39,870 Sed la mallonga je tradukiloj intertraktoj pri ĉi tiel. 679 00:32:39,870 --> 00:32:43,290 Kiam vi sxipo bibliotekon, se vi sxipo La. h, la kaplinio dosiero, tiuj 680 00:32:43,290 --> 00:32:46,290 funkcio prototipojn, kaj la 1-aj kaj 0 estas, jen ĉio vi bezonos doni. 681 00:32:46,290 --> 00:32:50,640 Vi ne bezonas doni kiel la funkcio funkciu, la. c dosiero. 682 00:32:50,640 --> 00:32:56,360 Ĉar la punkto de abstraktado, aŭ la noti API, la punkto je ĉi SPL, 683 00:32:56,360 --> 00:32:59,650 la Stanford porteblan biblioteko, ĝi estas por ke vi ne maltrankviliĝu pri tio, kiel nova 684 00:32:59,650 --> 00:33:04,220 GRect funkcias, nek kiel movi verkoj, aŭ kiel aldoni verkoj. 685 00:33:04,220 --> 00:33:06,520 Ĉio kion vi bezonas scii estas ke add estas funkcio kiu vi povas 686 00:33:06,520 --> 00:33:08,880 uzi, kaj ĝi faras tion. 687 00:33:08,880 --> 00:33:12,760 Do vi vere ne bezonas scii Ĝi estas skribita en C. Vi nur bezonas 688 00:33:12,760 --> 00:33:15,460 sciu, jen la funkcioj, kion ili faru, kaj tie estas la 1-aj kaj 0 estas 689 00:33:15,460 --> 00:33:18,870 kiam vi vere volas uzi ilin. 690 00:33:18,870 --> 00:33:19,530 >> Cool. 691 00:33:19,530 --> 00:33:26,980 Plu demandoj pri tradukiloj aŭ aliaj temoj sur la tabulo? 692 00:33:26,980 --> 00:33:30,300 >> Lernanto: Mi havas demandon pri efektivigo rekursiaj funkcioj. 693 00:33:30,300 --> 00:33:31,170 Demando pri rekursio. 694 00:33:31,170 --> 00:33:33,030 Mi havis la senton, ke estus veni supren. 695 00:33:33,030 --> 00:33:38,310 Do ni rapide trairu rekursio kun specifa 696 00:33:38,310 --> 00:33:40,690 Ekzemple, funkcio faktorialo. 697 00:33:40,690 --> 00:33:44,920 Pro tio estas ekzemplo, ke ofte venas supren aŭ estas uzata 698 00:33:44,920 --> 00:33:46,170 ilustri rekursio. 699 00:33:46,170 --> 00:33:52,390 700 00:33:52,390 --> 00:33:56,410 >> Do "4!" legu kiel 4 faktorialo. 701 00:33:56,410 --> 00:33:59,120 Kaj kion signifas 4 faktorialo signifi? 702 00:33:59,120 --> 00:34:00,696 Kion tio do? 703 00:34:00,696 --> 00:34:02,235 Kiel vi kalkulas 4 faktorialo? 704 00:34:02,235 --> 00:34:05,250 705 00:34:05,250 --> 00:34:07,960 4 fojoj 3 fojojn 2 horoj 1. 706 00:34:07,960 --> 00:34:11,889 >> Do alia maniero skribi 4 faktorialo estas skribi tion. 707 00:34:11,889 --> 00:34:16,780 708 00:34:16,780 --> 00:34:19,022 4 fojoj 3 faktorialo. 709 00:34:19,022 --> 00:34:22,080 Ĉar 3 faktorialo estas 3 fojojn 2 horoj 1. 710 00:34:22,080 --> 00:34:27,580 Do 4 fojoj 3 faktorialo estas 4 fojoj 3 fojojn 2 horoj 1. 711 00:34:27,580 --> 00:34:32,679 Jen kial faktorialo estas granda kandidato por rekursio, ĉar estas 712 00:34:32,679 --> 00:34:36,630 certe ke tie estas iu kiu okazas super kaj super kaj super sur 713 00:34:36,630 --> 00:34:39,820 pli malgranda nombro de aĵoj ĝis oni atingas la finon. 714 00:34:39,820 --> 00:34:42,570 Kiam vi atingos 1, 1 faktorialo estas 1. 715 00:34:42,570 --> 00:34:43,719 Vi ne povas iri multe pli. 716 00:34:43,719 --> 00:34:47,219 0 faktorialo estas ankaŭ difinita kiel 1. 717 00:34:47,219 --> 00:34:50,679 Do kiam vi atingos 1 aŭ 0, vi estas ĉe la fino, kaj vi povas 718 00:34:50,679 --> 00:34:53,219 komenci iri reen supren. 719 00:34:53,219 --> 00:34:59,540 Do, se ni volis skribi rekursia funkcio por kalkuli faktorialo, 720 00:34:59,540 --> 00:35:02,170 Ni tuj skribos kelkajn _pseudocode_ por ke nun. 721 00:35:02,170 --> 00:35:03,300 Antaŭ ni skribas ke _pseudocode_ - 722 00:35:03,300 --> 00:35:05,660 Mi donos al vi uloj kelkaj minutoj skribi la pseŭdo kodo aux simple opinias 723 00:35:05,660 --> 00:35:09,600 pri tio - estas du aferoj ĉiu rekursia funkcio bezonas. 724 00:35:09,600 --> 00:35:12,530 Kio estas tiuj du aferoj? 725 00:35:12,530 --> 00:35:13,220 >> Jack: Ĝi havas nomi sin. 726 00:35:13,220 --> 00:35:13,680 >> JASON Hirschhorn: Noa? 727 00:35:13,680 --> 00:35:14,460 Ho, Jocxjo. 728 00:35:14,460 --> 00:35:15,100 Antaŭen. 729 00:35:15,100 --> 00:35:16,640 >> Jack: Ĝi havas nomi sin. 730 00:35:16,640 --> 00:35:19,220 >> JASON Hirschhorn: Do rekursia funkcio bezonas rekursia alvoko, oni 731 00:35:19,220 --> 00:35:20,220 voki al si mem. 732 00:35:20,220 --> 00:35:20,770 Tio estas unu. 733 00:35:20,770 --> 00:35:21,510 Kaj kio estas la alia afero? 734 00:35:21,510 --> 00:35:22,250 >> Jack: Bazo kazo. 735 00:35:22,250 --> 00:35:23,780 >> JASON Hirschhorn: Bazo kazo. 736 00:35:23,780 --> 00:35:26,940 Bazo kazo estas, jen kiam ni haltas. 737 00:35:26,940 --> 00:35:29,510 Do via funkcion gets nomata. 738 00:35:29,510 --> 00:35:31,410 La baza kazo venas unue. 739 00:35:31,410 --> 00:35:33,710 Vi volas scii se vi estas ĉe la fino. 740 00:35:33,710 --> 00:35:37,110 Kaj se vi ne estas je la fino, vi faru vian rekursia alvoko. 741 00:35:37,110 --> 00:35:39,880 Kaj vi iru tra tiu funkcio denove, kontrolu vian bazon kazo denove. 742 00:35:39,880 --> 00:35:42,575 Se vi ne estas la fino, vi faras alia rekursia alvoko, 743 00:35:42,575 --> 00:35:44,130 kaj tiel plu, kaj tiel plu. 744 00:35:44,130 --> 00:35:47,110 >> Tio estas kial rekursiaj funkcioj ĉiam bezonas tiujn bazo kazoj kaj tiuj 745 00:35:47,110 --> 00:35:48,210 rekursiaj vokoj. 746 00:35:48,210 --> 00:35:51,280 Se vi ne havas rekursia alvoko, ĝi ne estus rekursia funkcio. 747 00:35:51,280 --> 00:35:53,210 Se vi ne havas bazon kazo, vi irus cxiam kaj 748 00:35:53,210 --> 00:35:54,780 ne estus fino. 749 00:35:54,780 --> 00:35:57,870 Kaj la bazo kazo ĉiam venas unue, ĉar vi ĉiam volas kontroli 750 00:35:57,870 --> 00:36:00,420 se vi estas ĉe la fino unue. 751 00:36:00,420 --> 00:36:04,770 Do antaŭ ol ni fari kelkajn _pseudocode_, kial ĉu vi ne prenas minuton por pripensi 752 00:36:04,770 --> 00:36:09,360 kiel rekursia funkcio faktorialo estus skribita? 753 00:36:09,360 --> 00:36:23,340 754 00:36:23,340 --> 00:36:26,010 >> Ankaŭ, kiel multaj, kiel vi faras, skribo ĝin sur paperfolion estas 755 00:36:26,010 --> 00:36:27,960 kion vi tuj devas fari en la kvizo morgaŭ. 756 00:36:27,960 --> 00:36:32,160 Do probable bona praktiko por fari certe la kodon, kiun vi skribas 757 00:36:32,160 --> 00:36:34,420 sur folio de papero - 758 00:36:34,420 --> 00:36:35,160 aux vi povas fari tion. 759 00:36:35,160 --> 00:36:36,710 Vi scias kie estas la punktokomojn estas. 760 00:36:36,710 --> 00:36:37,660 Vi memoros la sintakso. 761 00:36:37,660 --> 00:36:40,400 Ĉar vi ne povos havi tradukilo diri al vi faris eraron. 762 00:36:40,400 --> 00:37:02,356 763 00:37:02,356 --> 00:37:07,240 >> Ankaŭ, kune tiujn liniojn, morgaŭ, kiam Vi kodigo problemojn, se vi 764 00:37:07,240 --> 00:37:11,490 ili kuregis por tempo, aŭ se vi estas tre konfuzita pri kiel vi supozis 765 00:37:11,490 --> 00:37:16,030 skribu la aparta afero en c, ĝi estus behoove vi skribi pseŭda-kodo 766 00:37:16,030 --> 00:37:18,160 aŭ skribi komentojn en tiel. 767 00:37:18,160 --> 00:37:21,940 Ĉar tie estas parta krediton por multon el la demandoj je la kvizo. 768 00:37:21,940 --> 00:37:24,840 Do vi povas samtempe impetis, nek vin povus simple esti konfuzita. 769 00:37:24,840 --> 00:37:28,030 Skribante en komentoj aŭ pseudo-kodo ofte estas manieroj, kiujn vi 770 00:37:28,030 --> 00:37:29,360 povas ricevi partan kredito. 771 00:37:29,360 --> 00:37:31,440 >> Do ne lasi ion malplenan je la kvizo. 772 00:37:31,440 --> 00:37:33,490 Mankas punoj por metante aferojn in 773 00:37:33,490 --> 00:37:37,650 Fakte, metante en pseŭda-kodo aŭ komentoj tuj helpi la grader 774 00:37:37,650 --> 00:37:40,410 diveni, se vi vere scias kion Vi parolas, kaj eble premio 775 00:37:40,410 --> 00:37:42,030 vi iuj partaj krediton por tio. 776 00:37:42,030 --> 00:37:44,510 >> Ankaŭ laŭ tiuj linioj, skribu klare. 777 00:37:44,510 --> 00:37:47,650 Se ni ne povas vere kion vi skribas, ni ne tuj vokos vin 778 00:37:47,650 --> 00:37:49,900 noktomeze morgaŭ al figuro tion kion vi skribis. 779 00:37:49,900 --> 00:37:51,520 Ni nur tuj demetu punktoj. 780 00:37:51,520 --> 00:37:56,570 Skribu klare tiel ni povas aŭdi, aŭ pli ĝuste, Ni povas legi kion vi skribis. 781 00:37:56,570 --> 00:38:00,230 >> Kaj se ĝi diras du frazojn, ne skribi alineon. 782 00:38:00,230 --> 00:38:02,280 Sekvu la instrukciojn. 783 00:38:02,280 --> 00:38:03,500 Skribu klare. 784 00:38:03,500 --> 00:38:07,720 Kaj skribi en tiuj komentoj aŭ _pseudocode_ por demandoj kiuj povis 785 00:38:07,720 --> 00:38:10,270 premio parta kredito. 786 00:38:10,270 --> 00:38:12,520 >> Bone, ni iru al faktorialo. 787 00:38:12,520 --> 00:38:15,000 Do ni havas funkcion faktorialo. 788 00:38:15,000 --> 00:38:18,400 789 00:38:18,400 --> 00:38:21,550 Se mi efektive skribu tion en C, Kion mi bezonas por meti antaux la nomo 790 00:38:21,550 --> 00:38:22,800 de la funkcio? 791 00:38:22,800 --> 00:38:24,880 792 00:38:24,880 --> 00:38:30,060 La reveno tipo, kiuj, en tiu Tiukaze ni donos gxin int. 793 00:38:30,060 --> 00:38:35,450 Kaj poste interne de la krispa krampoj, estas kio okazas interne de la krispa krampoj por 794 00:38:35,450 --> 00:38:36,850 funkcio? 795 00:38:36,850 --> 00:38:37,950 >> Lernantoj: Argumento tipo. 796 00:38:37,950 --> 00:38:39,150 >> JASON Hirschhorn: Liaj argumentoj. 797 00:38:39,150 --> 00:38:42,680 Do faktorialo versxajne prenas argumenton. 798 00:38:42,680 --> 00:38:44,500 Ĝi verŝajne nur prenas unu argumento. 799 00:38:44,500 --> 00:38:49,450 Kaj ni diros gxin prenos entjero nomata x. 800 00:38:49,450 --> 00:38:52,770 Kaj ankoraux, kiam skribas la prototipo de funkcio aŭ skribi la funkcio 801 00:38:52,770 --> 00:38:57,110 en via kodo antaŭ difinante ĝin, vi skribu la datumtipo kaj la nomo de 802 00:38:57,110 --> 00:39:01,370 ke variablo por tiu funkcio nur. 803 00:39:01,370 --> 00:39:06,350 Do vi povas pasi kelkaj nombro en tiun funkcio, gxi devos esti referita al kiel x 804 00:39:06,350 --> 00:39:07,340 interne. 805 00:39:07,340 --> 00:39:08,755 >> Ni havas niajn funkcio faktorialo. 806 00:39:08,755 --> 00:39:12,030 807 00:39:12,030 --> 00:39:15,850 Ni bezonas du aferojn, bazo kazo kaj rekursia alvoko. 808 00:39:15,850 --> 00:39:20,900 Kio estas la bazo kazo por faktorialo? 809 00:39:20,900 --> 00:39:24,850 Iu kiu verkis ĝin kaj kiu ajn ne havas parolis ankoraŭ, kio estas la bazo 810 00:39:24,850 --> 00:39:26,100 kazo por faktorialo? 811 00:39:26,100 --> 00:39:28,400 812 00:39:28,400 --> 00:39:30,930 >> Lernanto: Se n estas malpli ol 2, revenu 1. 813 00:39:30,930 --> 00:39:33,520 >> JASON Hirschhorn: Se n estas malpli ol 2, revenu 1. 814 00:39:33,520 --> 00:39:37,216 Mi ŝatas tion, ĉar tio prizorgas 0 kaj 1. 815 00:39:37,216 --> 00:39:45,290 Do ni faros x <2, revenu 1. 816 00:39:45,290 --> 00:39:47,870 Se ni atingos pasis 0, se ni preni pasis 1, ĉi tiu funkcio volo 817 00:39:47,870 --> 00:39:49,790 tuj revenos 1. 818 00:39:49,790 --> 00:39:54,020 Se ni atingos preterpasis iu nombro pli granda ol aŭ egala al 2, ni iras al 819 00:39:54,020 --> 00:39:55,370 havas nian rekursia alvoko. 820 00:39:55,370 --> 00:39:57,855 >> Kaj do kial tiu iras labori? 821 00:39:57,855 --> 00:40:01,070 Ĉu iu alia, kiu laboris en ĉi tiu kiuj ne parolis ankoraŭ doni al mi la 822 00:40:01,070 --> 00:40:07,380 rekursia alvoko por tiu funkcio en _pseudocode_? 823 00:40:07,380 --> 00:40:10,770 Se ni atingos pasis en nombro x kaj ĝi estas pli granda ol 2, kio 824 00:40:10,770 --> 00:40:13,370 cxu ni volas fari? 825 00:40:13,370 --> 00:40:17,930 Ni ankaŭ havas ekzemplon skribita en la flanko kiu povus doni al vi aludo. 826 00:40:17,930 --> 00:40:20,770 >> Lernanto: Alvoku x fojoj la faktorialo de x minus 1? 827 00:40:20,770 --> 00:40:22,020 >> JASON Hirschhorn: Ekzakte pravas. 828 00:40:22,020 --> 00:40:24,610 829 00:40:24,610 --> 00:40:37,750 Ni tuj revenos x fojoj la faktorialo de x minus 1. 830 00:40:37,750 --> 00:40:41,810 Kaj tio, kvankam mi skribis supren, esence, kion vi diris en la angla, 831 00:40:41,810 --> 00:40:44,580 ĉi funkcio faktorialo estos get denove vokis. 832 00:40:44,580 --> 00:40:46,320 Ĝi devos ekzekuti sur x minus 1. 833 00:40:46,320 --> 00:40:49,320 Ĝi revenos kun iu entjero, kaj tiam povos multobligi tiujn du 834 00:40:49,320 --> 00:40:52,050 kune, kaj tiu valoro estos revenis al kion ajn nomis tion 835 00:40:52,050 --> 00:40:55,010 faktorialo funkcio, kiu potenco alia ekzemplo de 836 00:40:55,010 --> 00:40:58,420 ĉi funkcio faktorialo. 837 00:40:58,420 --> 00:41:01,360 >> Do tio estas ekzemplo de rekursie funkcio, tre 838 00:41:01,360 --> 00:41:02,530 simpla rikura funkcio. 839 00:41:02,530 --> 00:41:04,530 Sed plejparte ili estos kiel ĉi tio. 840 00:41:04,530 --> 00:41:11,170 Se vi ŝatus bonan rekursiaj defii por la kvizo, provu kodigo 841 00:41:11,170 --> 00:41:13,230 duuma serĉo rekursie. 842 00:41:13,230 --> 00:41:18,950 Ĉar se vi faris duuma serĉo problemo starigis tri, vi probable faris 843 00:41:18,950 --> 00:41:21,730 ripete en kiam buklo. 844 00:41:21,730 --> 00:41:23,700 >> Sed ĝi povas ankaŭ esti skribita rekursie. 845 00:41:23,700 --> 00:41:26,310 Vi tuj bezonos skribi vian propran aparta funkcio kiu prenas iun 846 00:41:26,310 --> 00:41:29,020 malsamaj komandlinion argumentoj - aŭ Ne komandlinion argumentoj, iuj 847 00:41:29,020 --> 00:41:30,910 malsamaj simple regula argumentoj. 848 00:41:30,910 --> 00:41:33,870 Sed vi povus skribi duuma serĉo rekursie kiel bone. 849 00:41:33,870 --> 00:41:36,190 >> Lernanto: Do ​​vi povus esti ankaŭ skribitaj, anstataŭ x minus 1, vi 850 00:41:36,190 --> 00:41:39,502 povus esti ankaŭ skribitaj x minus minus, aŭ vi povus havi 851 00:41:39,502 --> 00:41:40,830 skribita minus minus x. 852 00:41:40,830 --> 00:41:44,740 Ĉu vi povas simple klarigi vere rapide kial tiuj estus malsamajn aferojn, 853 00:41:44,740 --> 00:41:49,510 kiel kion la diferenco estas inter x minus minus kaj minus minus x? 854 00:41:49,510 --> 00:41:51,320 >> JASON Hirschhorn: Ne, mi ne estas tuj iri en tiun. 855 00:41:51,320 --> 00:41:55,500 Sed mi parolos al vi pri tio post klaso. x minus minus, minus minus x 856 00:41:55,500 --> 00:41:57,780 dekremento x per 1. 857 00:41:57,780 --> 00:41:59,090 Sed ili faru ĝin iom alimaniere. 858 00:41:59,090 --> 00:42:00,340 Sed mi ne volas iri en tiun. 859 00:42:00,340 --> 00:42:04,330 860 00:42:04,330 --> 00:42:09,090 Aliaj demandoj pri rekursio aŭ ĉi funkcio? 861 00:42:09,090 --> 00:42:10,140 Tio ne vere eĉ _pseudocode_. 862 00:42:10,140 --> 00:42:15,060 Tio estas esence la kodo C vi skribus pri tio. 863 00:42:15,060 --> 00:42:19,393 >> OK, ajnan alian demandoj pri temoj ĝis ĉi tie? 864 00:42:19,393 --> 00:42:19,864 Jes. 865 00:42:19,864 --> 00:42:23,130 >> Lernanto: Mi havas rapidan resumo de flosanta punkto kaj precizeco. 866 00:42:23,130 --> 00:42:24,260 >> JASON Hirschhorn: Flosanta punkto kaj precizeco. 867 00:42:24,260 --> 00:42:26,920 Ĉu iu vere rapide doni al mi resumo de 868 00:42:26,920 --> 00:42:28,210 glitpunktaj kaj precizeco? 869 00:42:28,210 --> 00:42:30,420 Vi ĉiuj devis fari ĉi tiun por via problemo metita, do vi ĉiuj 870 00:42:30,420 --> 00:42:31,700 familiara kun ĝi. 871 00:42:31,700 --> 00:42:35,090 Aŭ eble ne ĉiuj el vi. 872 00:42:35,090 --> 00:42:36,602 Iu? 873 00:42:36,602 --> 00:42:39,530 Donu al mi komencis surloke. 874 00:42:39,530 --> 00:42:40,750 Flosanta punkto kaj precizeco. 875 00:42:40,750 --> 00:42:42,380 Kio estas la problemo? 876 00:42:42,380 --> 00:42:42,960 Jes. 877 00:42:42,960 --> 00:42:43,680 Viktorio? 878 00:42:43,680 --> 00:42:44,480 >> Vanessa: Vanessa. 879 00:42:44,480 --> 00:42:45,285 >> JASON Hirschhorn: Vanessa. 880 00:42:45,285 --> 00:42:45,680 Pardonon. 881 00:42:45,680 --> 00:42:51,550 >> Vanessa: Estas nur finia nombro de nombroj kiuj povas esti reprezentita 882 00:42:51,550 --> 00:42:57,930 ĉar vi estas sur, en nia kazo, 32-bita sistemo. 883 00:42:57,930 --> 00:43:03,080 Do vi specon de devos konsistigas iujn numerojn. 884 00:43:03,080 --> 00:43:03,910 >> JASON Hirschhorn: Do jen ĝuste. 885 00:43:03,910 --> 00:43:08,110 Estas nur certa kvanto de nombroj kiuj povas esti prezentita. 886 00:43:08,110 --> 00:43:11,770 Se vi multipliki du tre grandajn nombrojn, eble superfluas la kvanto 887 00:43:11,770 --> 00:43:13,950 de spacoj vi devas reprezenti entjero. 888 00:43:13,950 --> 00:43:17,930 Tial ni kelkfoje uzas longa longa anstataŭ int. 889 00:43:17,930 --> 00:43:19,210 Kiu havas pli da spacoj. 890 00:43:19,210 --> 00:43:21,210 Tio povas teni pli grandan numeron. 891 00:43:21,210 --> 00:43:24,310 >> Flosanta punkto precizeco havas al fari kun tio, sed ankaux devas vidi per la 892 00:43:24,310 --> 00:43:29,300 fakto ke decimalaj numeroj estas Ne ĉiam reprezentita. 893 00:43:29,300 --> 00:43:29,540 Pardonon. 894 00:43:29,540 --> 00:43:31,280 Permesu al mi metis ĉi reen supren. 895 00:43:31,280 --> 00:43:36,610 La dekuma nombro 1,0 ne estas ĉiam reprezentis kiel vi devus atendi, 896 00:43:36,610 --> 00:43:40,770 1,000000000. 897 00:43:40,770 --> 00:43:50,360 Ĝi estas foje reprezentis kiel 1,000000001 aŭ 0,999999999. 898 00:43:50,360 --> 00:43:52,780 Ĝi povus esti eĉ 89 jxetita tien ie. 899 00:43:52,780 --> 00:43:56,560 Do tiuj decimalaj numeroj ne estas reprezentis ekzakte kiel vi farus 900 00:43:56,560 --> 00:43:58,430 atendi ilin esti reprezentitaj. 901 00:43:58,430 --> 00:44:00,010 >> Do problemo starigis - 902 00:44:00,010 --> 00:44:00,860 gxi estis du? - 903 00:44:00,860 --> 00:44:05,290 problemo starigis du, kie ni pritraktis flosantaj punktaj nombroj, kiam ni volis 904 00:44:05,290 --> 00:44:08,690 ilin reprezenti ĝuste kion ni deziris ilin reprezenti, la nombro 905 00:44:08,690 --> 00:44:12,860 cendoj, aŭ la numeron de cendoj, ni multigos ilin per 100. 906 00:44:12,860 --> 00:44:14,750 Ni rondoforma ilin. 907 00:44:14,750 --> 00:44:18,660 Kaj tiam ni ekstermis cxion malantaux la dekuma punkto. 908 00:44:18,660 --> 00:44:22,020 Tio estis por certigi, ke ili fakte egalas ekzakte kion ni deziris 909 00:44:22,020 --> 00:44:22,410 ilin por egali. 910 00:44:22,410 --> 00:44:26,870 >> Ĉar, kiam vi prenas ion ke estas Float kaj igi ĝin int, vi 911 00:44:26,870 --> 00:44:29,860 ekstermi ĉiun dekstren de la decimala punkto. 912 00:44:29,860 --> 00:44:33,900 Ĉar tie estas kelkaj glitpunktaj imprecision, 100,000 povus esti 913 00:44:33,900 --> 00:44:37,440 reprezentis kiel 99,999999999. 914 00:44:37,440 --> 00:44:40,350 Kaj se vi nur ekstermos ĉion la rajton al la momento, vi tuj 915 00:44:40,350 --> 00:44:41,600 akiri malĝustan numeron. 916 00:44:41,600 --> 00:44:44,050 917 00:44:44,050 --> 00:44:44,180 Jes. 918 00:44:44,180 --> 00:44:45,290 >> Lernanto: Mi havis demandon pri enjxetantan. 919 00:44:45,290 --> 00:44:47,500 Kio ordon ghi okazos en? 920 00:44:47,500 --> 00:44:54,480 Se vi volus fari kaleŝego, krampoj, 1 dividita per 10, ghi do 1 dividita per 10, 921 00:44:54,480 --> 00:44:58,910 tiam akiri 0.1, tiam turnu ĝi enen float? 922 00:44:58,910 --> 00:45:01,470 >> JASON Hirschhorn: Se vi faras flosi 1 dividita per 10 - 923 00:45:01,470 --> 00:45:02,550 >> Lernanto: Jes, kaj tiam egalas - 924 00:45:02,550 --> 00:45:04,240 Nu, estus ordinare havas ĝin egala en - 925 00:45:04,240 --> 00:45:04,690 Jes. 926 00:45:04,690 --> 00:45:06,760 Vi volas fari gxin kaleŝego, ĉu ne? 927 00:45:06,760 --> 00:45:12,790 >> JASON Hirschhorn: Bone, do ni tuj uzas tiun al segue en elŝeligi 928 00:45:12,790 --> 00:45:15,390 la respondojn al tiuj demandoj per kodigo. 929 00:45:15,390 --> 00:45:18,180 Ĉar vi probable havas multe da tiuj minuto demandojn, kaj bona maniero 930 00:45:18,180 --> 00:45:19,100 solvi ilin estas per kodigo. 931 00:45:19,100 --> 00:45:21,320 Do ni tuj programi ĉi ĝuste nun, kaj tiam ni tuj iru tien kaj 932 00:45:21,320 --> 00:45:24,020 Kodo la demandon vi havis. 933 00:45:24,020 --> 00:45:24,950 >> Do la unua linio - 934 00:45:24,950 --> 00:45:29,390 Mi ne devus esti skribita tio - kio estas la unua afero, kiun ni volas fari, kiam ni 935 00:45:29,390 --> 00:45:32,250 malfermi novan dosieron en gedit? 936 00:45:32,250 --> 00:45:34,190 >> Lernanto: Inkluzivi. 937 00:45:34,190 --> 00:45:35,920 >> JASON Hirschhorn: Inkluzivi kio? 938 00:45:35,920 --> 00:45:37,952 >> Lernanto: CS50 biblioteko. 939 00:45:37,952 --> 00:45:39,920 >> JASON Hirschhorn: okej. 940 00:45:39,920 --> 00:45:42,590 Kion alian ni devus inkluzivi? 941 00:45:42,590 --> 00:45:46,820 Ni nur tuj kontroli kio okazas kiam vi jxetis ion por kaleŝego. 942 00:45:46,820 --> 00:45:48,605 Sed kion fari ni bezonas inkluzivi se ni estas tuj skribi C-programo? 943 00:45:48,605 --> 00:45:49,300 >> Lernanto: Norma mi / O. 944 00:45:49,300 --> 00:45:50,625 >> JASON Hirschhorn: stdio.h. 945 00:45:50,625 --> 00:45:54,880 Ni fakte ne bezonas, ĉar ĉi programo, cs50.h, eĉ se ĝi estas 946 00:45:54,880 --> 00:45:55,920 ĉiam helpema por inkluzivi ŝin. 947 00:45:55,920 --> 00:45:58,260 Sed ni ja ĉiam bezonas stdio.h. 948 00:45:58,260 --> 00:45:59,660 >> Lernanto: Kiam kodigo en C? 949 00:45:59,660 --> 00:46:15,770 >> JASON Hirschhorn: Kiam kodigo en C. 950 00:46:15,770 --> 00:46:17,090 >> Do mi savos ĝin kiel ĉi tio. C dosiero. 951 00:46:17,090 --> 00:46:18,590 Mi ricevas iun belan sintaksa kolorigo. 952 00:46:18,590 --> 00:46:22,890 Mi skribis malplena interne ĉefa. 953 00:46:22,890 --> 00:46:24,792 What does malplenon signifi? 954 00:46:24,792 --> 00:46:26,740 >> Lernanto: Ĉu ne preni ajnan komandlinion argumentoj. 955 00:46:26,740 --> 00:46:28,900 >> JASON Hirschhorn: Void rimedoj, en tiu kazo, ĉefa ne prenas ajnan 956 00:46:28,900 --> 00:46:29,700 komandlinion argumentoj. 957 00:46:29,700 --> 00:46:32,720 En aliaj kazoj, ĝi signifas la funkcio ne prenu komandlinion argumentoj. 958 00:46:32,720 --> 00:46:36,560 Aŭ la funkcio, se mi skribus void main (void), kiu dirus ĉefa La 959 00:46:36,560 --> 00:46:38,460 ne reveni nenion. 960 00:46:38,460 --> 00:46:39,960 Do malplenon simple signifas nenion. 961 00:46:39,960 --> 00:46:42,510 Kion mi volis skribi se mi preni komandlinion argumentoj? 962 00:46:42,510 --> 00:46:45,250 963 00:46:45,250 --> 00:46:47,150 >> Lernanto: int arko c kordo arko v 964 00:46:47,150 --> 00:46:49,055 >> JASON Hirschhorn: int argc kordo argv. 965 00:46:49,055 --> 00:46:54,050 966 00:46:54,050 --> 00:46:55,572 Ĉu tio estas justa? 967 00:46:55,572 --> 00:46:58,720 >> Studento: Tio estas char stelo argv krampoj. 968 00:46:58,720 --> 00:47:01,730 >> JASON Hirschhorn: Tiel vi povus skribi kordo argv krampoj aux char stelo argv 969 00:47:01,730 --> 00:47:03,710 krampoj, sed vi bezonos la krampoj. 970 00:47:03,710 --> 00:47:06,290 Ĉar argv estas tabelo de kordoj, memoru. 971 00:47:06,290 --> 00:47:07,360 Ĝi ne estas nur unu kordo. 972 00:47:07,360 --> 00:47:10,350 Do kordo argv estas, jen unu kordo nomata argv. 973 00:47:10,350 --> 00:47:13,630 String argv krampoj estas, jen tabelo de kordoj. 974 00:47:13,630 --> 00:47:17,865 Do int argc kordo argv krampoj estus iu kiu mi 975 00:47:17,865 --> 00:47:18,810 versxajne skribos. 976 00:47:18,810 --> 00:47:23,050 >> Do vi volis konservi en entjera? 977 00:47:23,050 --> 00:47:24,285 >> Lernanto: Jes, entjero. 978 00:47:24,285 --> 00:47:25,840 Aŭ en float. 979 00:47:25,840 --> 00:47:26,710 >> JASON Hirschhorn: En float? 980 00:47:26,710 --> 00:47:30,790 Kiel, float x egalas 1 dividita per 10. 981 00:47:30,790 --> 00:47:32,040 >> JASON Hirschhorn: okej. 982 00:47:32,040 --> 00:47:40,160 983 00:47:40,160 --> 00:47:42,240 Kjel mi presi float en printf? 984 00:47:42,240 --> 00:47:45,100 985 00:47:45,100 --> 00:47:46,714 Kio? 986 00:47:46,714 --> 00:47:47,560 >> Lernanto:% f. 987 00:47:47,560 --> 00:47:48,300 >> JASON Hirschhorn:% f. 988 00:47:48,300 --> 00:47:50,810 Kio estas entjero? 989 00:47:50,810 --> 00:47:52,110 d aŭ i. 990 00:47:52,110 --> 00:47:53,000 Kio estas kordo? 991 00:47:53,000 --> 00:47:54,240 >> Lernanto: s. 992 00:47:54,240 --> 00:47:56,140 >> JASON Hirschhorn: s. 993 00:47:56,140 --> 00:47:57,550 Kjel mi acxetas novan linion? 994 00:47:57,550 --> 00:47:58,800 >> Lernanto: Deklivo n. 995 00:47:58,800 --> 00:48:04,610 996 00:48:04,610 --> 00:48:07,100 >> JASON Hirschhorn: Kion mi revenos se ĉefa runs korekte? 997 00:48:07,100 --> 00:48:08,360 >> Lernanto: 0. 998 00:48:08,360 --> 00:48:09,430 Chu mi bezonas skribi tiun linion, kvankam? 999 00:48:09,430 --> 00:48:10,170 >> Lernanto: N-ro 1000 00:48:10,170 --> 00:48:11,513 OK, ni ne skribis ĝin, tiam. 1001 00:48:11,513 --> 00:48:16,450 1002 00:48:16,450 --> 00:48:17,190 Ĉu ĉiuj legis tion? 1003 00:48:17,190 --> 00:48:18,485 Ĝi aspektas iom malgranda. 1004 00:48:18,485 --> 00:48:20,160 Ĉu ĉiuj vidas, aŭ devus Mi faros gxin pli granda? 1005 00:48:20,160 --> 00:48:23,480 1006 00:48:23,480 --> 00:48:25,100 Mi pensas por la ĉambro, ni faros gxi iom pli granda, kvankam. 1007 00:48:25,100 --> 00:48:35,750 1008 00:48:35,750 --> 00:48:38,410 >> JASON Hirschhorn: Se mi volas turni ĉi . C dosiero en plenumeblan, kion 1009 00:48:38,410 --> 00:48:39,260 cxu mi skribu? 1010 00:48:39,260 --> 00:48:41,610 >> Lernanto: Faru provon. 1011 00:48:41,610 --> 00:48:42,080 >> JASON Hirschhorn: Pardonu? 1012 00:48:42,080 --> 00:48:42,790 >> Lernanto: Faru provon. 1013 00:48:42,790 --> 00:48:44,040 >> JASON Hirschhorn: Faru provon. 1014 00:48:44,040 --> 00:48:46,700 1015 00:48:46,700 --> 00:48:48,410 Ni parolis pri tiun linion antaŭe. 1016 00:48:48,410 --> 00:48:49,140 Tin. 1017 00:48:49,140 --> 00:48:51,270 Kio estas tin? 1018 00:48:51,270 --> 00:48:52,200 La nomo de la tradukilo. 1019 00:48:52,200 --> 00:48:53,920 Kio estas tiu linio? 1020 00:48:53,920 --> 00:48:55,580 >> Lernanto: Aroj ĝin por uzo de GDB. 1021 00:48:55,580 --> 00:48:59,230 >> JASON Hirschhorn: Aroj ĝin por uzo de GDB. 1022 00:48:59,230 --> 00:49:02,338 Tiu linio, kio estas tio? 1023 00:49:02,338 --> 00:49:03,290 >> Lernanto: Fonto-kodo. 1024 00:49:03,290 --> 00:49:06,010 >> JASON Hirschhorn: Tio estas la fontdosieron, La. c dosiero. 1025 00:49:06,010 --> 00:49:08,150 Kion tiuj du linioj do? 1026 00:49:08,150 --> 00:49:10,245 Aux tiuj du ne linioj. 1027 00:49:10,245 --> 00:49:12,300 >> Studento: Tio nomoj testi. 1028 00:49:12,300 --> 00:49:15,410 >> JASON Hirschhorn: Do la haltostreko o diras, name it ion malsame. 1029 00:49:15,410 --> 00:49:16,790 Kaj ĉi tie vi nomas ĝin provo. 1030 00:49:16,790 --> 00:49:18,900 Se mi ne havas tiun en, kio ĝi nomas ĉi tion? 1031 00:49:18,900 --> 00:49:20,260 >> Lernanto: A.out. 1032 00:49:20,260 --> 00:49:22,340 >> JASON Hirschhorn: A.out. 1033 00:49:22,340 --> 00:49:25,366 Kion tio do? 1034 00:49:25,366 --> 00:49:27,670 >> Lernanto: Ligiloj La matematiko biblioteko. 1035 00:49:27,670 --> 00:49:29,550 >> JASON Hirschhorn: Ĝi ligiloj en la matematiko biblioteko. 1036 00:49:29,550 --> 00:49:32,880 Ni ne inkludas la matematikon biblioteko, sed ĉar tio estas tiom komuna, ke ili jam 1037 00:49:32,880 --> 00:49:35,780 skribita fakto ĉiam inkluzivi la matematika biblioteko. 1038 00:49:35,780 --> 00:49:39,050 Kaj same, tio inkluzivas la CS50 biblioteko. 1039 00:49:39,050 --> 00:49:43,010 >> OK, do se ni listo, ni nun havas plenumebla nomata testo. 1040 00:49:43,010 --> 00:49:45,150 Ekzekuti ŝin, mi skribos teston. 1041 00:49:45,150 --> 00:49:48,330 Mi vidas ke mia glitpunkta, kiel atendita, egalas 0. 1042 00:49:48,330 --> 00:49:50,890 1043 00:49:50,890 --> 00:49:51,590 Ĉu tio - 1044 00:49:51,590 --> 00:49:52,060 do - 1045 00:49:52,060 --> 00:49:55,210 >> Lernanto: Tiam, se vi metas flosi nun, kiel vi jxetis gxin kiel float - 1046 00:49:55,210 --> 00:49:56,870 >> JASON Hirschhorn: Jxetu la 1 al float? 1047 00:49:56,870 --> 00:49:59,180 >> Lernanto: Ne, jxetu la plena afero - 1048 00:49:59,180 --> 00:49:59,500 yeah. 1049 00:49:59,500 --> 00:50:02,460 Se vi nur faris tion, ĉu kiuj faras gxin 0.1? 1050 00:50:02,460 --> 00:50:07,170 >> JASON Hirschhorn: OK, do vere rapide, 1 dividita per 10, tiuj estas 1051 00:50:07,170 --> 00:50:08,690 entjeroj esti dividitaj. 1052 00:50:08,690 --> 00:50:13,580 Do kiam vi dividas entjeroj, ili estas 0, kaj vi ŝparas ke 0 en 1053 00:50:13,580 --> 00:50:17,170 flosi, ĉar la oblikvo estas nur entjera divido. 1054 00:50:17,170 --> 00:50:19,180 Do nun ni ĝiri ion en float. 1055 00:50:19,180 --> 00:50:21,650 >> Ni vidu kio okazos. 1056 00:50:21,650 --> 00:50:22,900 Ni faros provon. 1057 00:50:22,900 --> 00:50:25,870 1058 00:50:25,870 --> 00:50:31,090 Do nun ni vidas, ke tiu oblikvo ne estis entjera divido, ĝi flosis 1059 00:50:31,090 --> 00:50:32,640 punkto divido. 1060 00:50:32,640 --> 00:50:35,700 Ĉar unu el ĝiaj argumentoj estis jxetita al float. 1061 00:50:35,700 --> 00:50:38,380 Do nun tio estis diranta, trakti ĉi divido kiel ni pritraktas 1062 00:50:38,380 --> 00:50:40,140 flosanta punktoj, ne kun entjeroj. 1063 00:50:40,140 --> 00:50:42,760 Kaj tiel ni atingas la respondon ni atendas. 1064 00:50:42,760 --> 00:50:44,620 >> Ni vidu kio okazos - 1065 00:50:44,620 --> 00:50:47,103 oops. 1066 00:50:47,103 --> 00:50:51,646 Se mi volas presi pli da dekumaj makuloj, kiom mi povus fari tion? 1067 00:50:51,646 --> 00:50:55,550 >> Lernanto: Punkto dot f, aŭ kiel multaj dekumaj lokoj kiel vi volas. 1068 00:50:55,550 --> 00:51:02,280 1069 00:51:02,280 --> 00:51:04,440 >> JASON Hirschhorn: Do mi printi 10 dekuma makuloj. 1070 00:51:04,440 --> 00:51:06,610 Kaj ni vidas nun estas duumaj iujn strangajn aferojn. 1071 00:51:06,610 --> 00:51:09,650 Kaj kiu superas al via demando pri glitpunktaj imprecision. 1072 00:51:09,650 --> 00:51:10,950 Estas stranga stuff stokitaj en ĉi tie. 1073 00:51:10,950 --> 00:51:13,650 1074 00:51:13,650 --> 00:51:15,275 >> OK, ĉu tio respondas vian demandon? 1075 00:51:15,275 --> 00:51:18,550 1076 00:51:18,550 --> 00:51:20,200 Kion alian vi volas kodigi rapide? 1077 00:51:20,200 --> 00:51:25,470 >> Lernanto: Mi nur volis vidi, ĉu aŭ Ne, se vi liberigis iuj montrilon, 1078 00:51:25,470 --> 00:51:30,410 ĉu tiu montrilon ankoraŭ stokita en ĝi la adreson de kio estis 1079 00:51:30,410 --> 00:51:32,170 indikante antaŭe. 1080 00:51:32,170 --> 00:51:34,100 >> JASON Hirschhorn: OK, do ni faru tion. 1081 00:51:34,100 --> 00:51:38,030 Char stelo ptr, tio kreas variablo vokis ptr de tipo char stelo. 1082 00:51:38,030 --> 00:51:39,280 Kjel mi skribas malloc? 1083 00:51:39,280 --> 00:51:40,550 Alden? 1084 00:51:40,550 --> 00:51:41,800 >> Alden: Just malloc. 1085 00:51:41,800 --> 00:51:44,820 1086 00:51:44,820 --> 00:51:51,040 Sed tiam ĝi devas esti grandeco de, kaj en ĉi tiu kazo, mi supozas ke vi volas 1087 00:51:51,040 --> 00:51:52,465 esti indikante char. 1088 00:51:52,465 --> 00:51:54,450 Do ĝi estus char. 1089 00:51:54,450 --> 00:51:57,520 >> JASON Hirschhorn: OK, tiom pli genéricamente, Interne - 1090 00:51:57,520 --> 00:51:58,770 ni redakti. 1091 00:51:58,770 --> 00:52:05,100 1092 00:52:05,100 --> 00:52:09,260 Interne malloc, vi volas ke la nombro de bajtoj sur la monteto. 1093 00:52:09,260 --> 00:52:12,320 Ĝenerale, kion ni vidis, ke ni estas farante estas ni tuj malloc 1094 00:52:12,320 --> 00:52:14,940 kordoj, ekzemple, aŭ arrays de entjeroj. 1095 00:52:14,940 --> 00:52:21,600 Do, se ni volas 10 entjerojn, aŭ 10 signoj, 10 donos al ni 10. 1096 00:52:21,600 --> 00:52:24,370 Kaj tiam la grandeco de signoj donus ni, ke grandeco de signoj, kiuj en 1097 00:52:24,370 --> 00:52:25,120 ĉi tiu kazo estas 1 bajtoj. 1098 00:52:25,120 --> 00:52:26,250 Ni ricevas 10 bajtoj. 1099 00:52:26,250 --> 00:52:28,540 Se ni devis skribi grandeco de int, kiu donus al ni la 40 bajtoj. 1100 00:52:28,540 --> 00:52:31,520 >> Do pli genéricamente, ene de malloc estas la nombro de bitokoj vi deziras. 1101 00:52:31,520 --> 00:52:34,620 En ĉi tiu kazo, ni ricevis la 1 bajto. 1102 00:52:34,620 --> 00:52:36,900 Kio ŝajnas kiel bizara uzo de malloc, sed pro nia 1103 00:52:36,900 --> 00:52:38,470 intencoj sencas. 1104 00:52:38,470 --> 00:52:40,420 Do tie estas tio. 1105 00:52:40,420 --> 00:52:43,420 >> Ni tuj voki libera. 1106 00:52:43,420 --> 00:52:47,040 Ni forigi ĝin kaj ni uzas ptr denove. 1107 00:52:47,040 --> 00:52:48,750 Kaj kion vi volas kontroli? 1108 00:52:48,750 --> 00:52:50,550 >> Lernanto: Mi nur volis kontroli, ĉu aŭ ne estas io 1109 00:52:50,550 --> 00:52:51,900 interne de ĝi. 1110 00:52:51,900 --> 00:52:53,050 >> JASON Hirschhorn: Do ĉu ĝi indikis ion? 1111 00:52:53,050 --> 00:52:57,740 >> Lernanto: Jes, ĝuste, ĉu ĝi ankoraŭ havis memoron adreso. 1112 00:52:57,740 --> 00:53:02,220 >> JASON Hirschhorn: Do vi volas kontroli la valoron de ptr? 1113 00:53:02,220 --> 00:53:03,470 >> Lernanto: Jes, ĝuste. 1114 00:53:03,470 --> 00:53:07,940 1115 00:53:07,940 --> 00:53:10,160 >> JASON Hirschhorn: Kion mi skribos ĉi tie se mi volas kontroli la valoron de la 1116 00:53:10,160 --> 00:53:11,880 punkto - kio estas, Jordanio diris, la valoro? 1117 00:53:11,880 --> 00:53:13,720 Aŭ kio estas stokita ene de ptr? 1118 00:53:13,720 --> 00:53:14,620 >> Lernanto: Memor-adreso. 1119 00:53:14,620 --> 00:53:16,330 >> JASON Hirschhorn: Memor-adreso. 1120 00:53:16,330 --> 00:53:20,520 Do se mi skribas nur tion, ĝi malebligos donu al mi la valoron de ptr. 1121 00:53:20,520 --> 00:53:22,800 Kaj kiel mi printi memoro adreso? 1122 00:53:22,800 --> 00:53:26,470 Kio estas la formato de ŝnuroj por memoro adreso? 1123 00:53:26,470 --> 00:53:27,430 >> Lernanto:% p. 1124 00:53:27,430 --> 00:53:28,050 >> JASON Hirschhorn:% p. 1125 00:53:28,050 --> 00:53:29,500 % S estas ĉeno. 1126 00:53:29,500 --> 00:53:30,750 % P por montrilo. 1127 00:53:30,750 --> 00:53:40,820 1128 00:53:40,820 --> 00:53:43,540 Ĉu tio estas justa? 1129 00:53:43,540 --> 00:53:44,790 Tio estas prava. 1130 00:53:44,790 --> 00:53:49,450 1131 00:53:49,450 --> 00:53:51,040 Do ptr egalas - 1132 00:53:51,040 --> 00:53:53,350 Ĝi havas ankoraŭ ion. 1133 00:53:53,350 --> 00:53:56,110 1134 00:53:56,110 --> 00:53:57,645 Tio estas verŝajne pli interesa demando. 1135 00:53:57,645 --> 00:53:59,198 Kion tio linio fari? 1136 00:53:59,198 --> 00:54:00,830 >> Lernanto: seg kulpoj. 1137 00:54:00,830 --> 00:54:01,310 >> JASON Hirschhorn: Kio? 1138 00:54:01,310 --> 00:54:02,678 >> Lernanto: Mi pensas ke seg kulpoj. 1139 00:54:02,678 --> 00:54:03,574 >> JASON Hirschhorn: Hm? 1140 00:54:03,574 --> 00:54:04,920 >> Lernanto: Mi pensas ĝi malebligos seg kulpo. 1141 00:54:04,920 --> 00:54:08,265 >> JASON Hirschhorn: Do tiu linio de kodo, stelo ptr, kion 1142 00:54:08,265 --> 00:54:10,152 faras la stelo signifas? 1143 00:54:10,152 --> 00:54:11,240 >> Lernanto: Enhavo de. 1144 00:54:11,240 --> 00:54:11,560 >> JASON Hirschhorn: Jes. 1145 00:54:11,560 --> 00:54:13,910 Go to get la enhavo de. 1146 00:54:13,910 --> 00:54:16,830 Do tiu tuj iras al la memoro alparoli tie kaj donu al mi tion. 1147 00:54:16,830 --> 00:54:21,030 Mi uzis% c ĝuste ĉi tie ĉar tie estas karakteroj stokitaj tie. 1148 00:54:21,030 --> 00:54:23,390 Do ni tuj iru al tiu adreso ni nur vidis - aŭ ĝi verŝajne estos 1149 00:54:23,390 --> 00:54:25,190 iomete malsama ĉi tempo ni kuras la programon. 1150 00:54:25,190 --> 00:54:28,010 Sed ni iros al tiu adreso kiun ni konas ankoraŭ ekzistas 1151 00:54:28,010 --> 00:54:29,260 kaj vidi kio estas tie. 1152 00:54:29,260 --> 00:54:35,640 1153 00:54:35,640 --> 00:54:37,110 >> Do tio ne seg kulpo. 1154 00:54:37,110 --> 00:54:38,970 Tio simple ne donis al ni nenion. 1155 00:54:38,970 --> 00:54:43,350 Ĝi povus esti efektive donis al ni io, ni simple ne povas vidi ĝin. 1156 00:54:43,350 --> 00:54:45,110 Kaj kiu superas al ĉi ideo - 1157 00:54:45,110 --> 00:54:47,270 kaj ni ne tuj akiri tro multe en tio, ĉar tio estas preter la 1158 00:54:47,270 --> 00:54:48,460 atingo de ĉi tiu kurso. 1159 00:54:48,460 --> 00:54:51,260 Sed ni parolis pri ĝuste ĉi tie, se ni iris preter la limojn de la tabelo de 1160 00:54:51,260 --> 00:54:54,890 1, ni ne povus akiri en mizero. 1161 00:54:54,890 --> 00:54:58,550 >> Foje, kiam vi nur foriras per 1, vi faras ion malbonan, kaj vi 1162 00:54:58,550 --> 00:54:59,220 povis akiri en mizero. 1163 00:54:59,220 --> 00:55:00,820 Sed vi ne ĉiam ricevas en mizero. 1164 00:55:00,820 --> 00:55:05,170 Dependas multe de malbona afero vi do, vi tuj akiri en mizero. 1165 00:55:05,170 --> 00:55:07,790 Kio ne estas diri, ke fuŝa kun via kodo. 1166 00:55:07,790 --> 00:55:12,080 Sed tio estas, la programo ne ĉiam rezigni, eĉ se vi iri ien 1167 00:55:12,080 --> 00:55:14,130 vi ne supozis iri. 1168 00:55:14,130 --> 00:55:18,170 >> Bona ekzemplo de tio estas, multajn homoj en ilia problemo metita 3, kiu 1169 00:55:18,170 --> 00:55:22,350 Estis 15, ne kontrolas la limojn de la tabulo. 1170 00:55:22,350 --> 00:55:25,860 Do vi rigardis al la maldekstra, rigardis al la dekstra, rigardis al la supro, rigardis 1171 00:55:25,860 --> 00:55:27,000 al la fundo. 1172 00:55:27,000 --> 00:55:31,540 Sed vi ne kontrolu, cxu la supron Estis efektive tuj estos sur la tabulo. 1173 00:55:31,540 --> 00:55:35,220 Kaj amaso da homoj kiuj faris tion kaj turnis ke en ilia programo laboris 1174 00:55:35,220 --> 00:55:38,960 perfekte, ĉar kie tiu estraro estis stokita en memoro, se vi irus unu 1175 00:55:38,960 --> 00:55:42,300 super ĝi aŭ kontrolis ke la memoro adreso, ne ekzistis io 1176 00:55:42,300 --> 00:55:44,870 aparte horora pri tio, tial via programo ne estis 1177 00:55:44,870 --> 00:55:45,970 tuj krias al vi. 1178 00:55:45,970 --> 00:55:48,870 >> Sed ni ankoraŭ demetu punktoj se vi ne kontrolu ke, ĉar vi 1179 00:55:48,870 --> 00:55:50,850 estis faranta ion vi ne estis supozis fari, kaj vi povus havi 1180 00:55:50,850 --> 00:55:51,860 alveninta en mizero. 1181 00:55:51,860 --> 00:55:54,040 Probabloj estas, tamen, oni probable ne. 1182 00:55:54,040 --> 00:55:57,790 Do tiu estas montri ke, jes, ni ankoraŭ povos iri al ĝi. 1183 00:55:57,790 --> 00:55:59,010 Kaj ni ne alvenante en problemojn en tiu kazo. 1184 00:55:59,010 --> 00:56:04,000 Se ni provis fari legi la sekvanta 100 karakteroj, ni volonte 1185 00:56:04,000 --> 00:56:06,000 verŝajne akiri en mizero. 1186 00:56:06,000 --> 00:56:09,400 Kaj vi povas programi legante la sekvanta 100 karakteroj, se vi volas, farante iun 1187 00:56:09,400 --> 00:56:10,110 ia por buklo. 1188 00:56:10,110 --> 00:56:10,850 Jes. 1189 00:56:10,850 --> 00:56:16,250 >> Lernanto: Ĉar ni estis atribuitaj ke spaco reala valoro, ni ne volis 1190 00:56:16,250 --> 00:56:17,050 efektive povos vidi nenion. 1191 00:56:17,050 --> 00:56:21,740 Ĉu ni provu ĝin per opcio ke egala al kiel C aŭ ion? 1192 00:56:21,740 --> 00:56:22,640 >> JASON Hirschhorn: Granda demando. 1193 00:56:22,640 --> 00:56:25,340 Kjel mi starigis tiun valoron - 1194 00:56:25,340 --> 00:56:28,980 kio linio de kodo mi skribos sur linio sep fari kion vi diris? 1195 00:56:28,980 --> 00:56:34,040 >> Lernanto: Stelo ptr egalas sola citaĵo c fini sola citaĵo. 1196 00:56:34,040 --> 00:56:36,970 >> JASON Hirschhorn: Do jen metante karaktero, c, en tiu loko, 1197 00:56:36,970 --> 00:56:40,200 ĉar denove, ke la stelo signifas iri tien. 1198 00:56:40,200 --> 00:56:43,320 Kiam uzata je la maldekstra flanko de valorizo ​​operatoro, kiu egalas 1199 00:56:43,320 --> 00:56:47,270 subskribi, ni ne tuj atingi tiun valoro plu metis tiun valoron. 1200 00:56:47,270 --> 00:56:48,520 Nun ni vidu kio okazas. 1201 00:56:48,520 --> 00:56:54,700 1202 00:56:54,700 --> 00:56:56,770 >> Ni metas ion tie kaj estis tie. 1203 00:56:56,770 --> 00:56:58,000 Ni nomas libera. 1204 00:56:58,000 --> 00:57:00,100 Kelkaj aĵoj probable okazis sur la monteto. 1205 00:57:00,100 --> 00:57:01,890 Do ĝi ne estas tie plu. 1206 00:57:01,890 --> 00:57:07,440 Sed denove, ni ne alveni En la mizero por iri tien. 1207 00:57:07,440 --> 00:57:10,260 >> Mi faras ĉi tion en la kodo por ilustri ke amaso de tiuj 1208 00:57:10,260 --> 00:57:12,410 demandojn, kiujn vi havas, ili estas vere interesa 1209 00:57:12,410 --> 00:57:13,650 respondas multan tempon. 1210 00:57:13,650 --> 00:57:15,260 Kaj ili estas vere bonaj demandoj. 1211 00:57:15,260 --> 00:57:19,010 Kaj vi povas kalkuli ilin sur via propra se, ekzemple, 1212 00:57:19,010 --> 00:57:19,990 ni ne estas en sekcio. 1213 00:57:19,990 --> 00:57:20,940 Jes. 1214 00:57:20,940 --> 00:57:24,430 >> Lernanto: Ĉar vi ne estas la sendo de la Pointer ie, ĉu vi bezonas por 1215 00:57:24,430 --> 00:57:26,530 uzi malloc? 1216 00:57:26,530 --> 00:57:28,400 >> JASON Hirschhorn: Do tio superas al viaj komenca demando. 1217 00:57:28,400 --> 00:57:28,620 [? ?] 1218 00:57:28,620 --> 00:57:29,980 Ĉu estas nur loka variablo? 1219 00:57:29,980 --> 00:57:32,280 Malloc tie ne estas ke konvinka. 1220 00:57:32,280 --> 00:57:35,260 La uzo de malloc tie ne estas ke konvinka, ĉar ĝi estas 1221 00:57:35,260 --> 00:57:36,500 nur loka variablo. 1222 00:57:36,500 --> 00:57:40,970 >> Lernanto: Tiel vi povus fari char stelo ptr egalas saluton? 1223 00:57:40,970 --> 00:57:41,400 >> JASON Hirschhorn: Ho. 1224 00:57:41,400 --> 00:57:43,300 Do ni tuj nun reiri al viaj komenca demando. 1225 00:57:43,300 --> 00:57:46,885 Mi kredas ke vi ne estis kontentigita kun mia respondo. 1226 00:57:46,885 --> 00:57:48,220 OK? 1227 00:57:48,220 --> 00:57:49,226 Kiel tio? 1228 00:57:49,226 --> 00:57:49,682 >> Lernanto: Jes. 1229 00:57:49,682 --> 00:57:50,932 Atendu. 1230 00:57:50,932 --> 00:57:54,090 1231 00:57:54,090 --> 00:57:57,850 >> JASON Hirschhorn: Kaj kie ĉu vi volas presi? 1232 00:57:57,850 --> 00:58:00,026 Do ni devos presi ĉenon kiel tiu? 1233 00:58:00,026 --> 00:58:06,380 1234 00:58:06,380 --> 00:58:07,630 >> Lernanto: Interesaj. 1235 00:58:07,630 --> 00:58:09,900 1236 00:58:09,900 --> 00:58:14,285 >> JASON Hirschhorn: Do tio diras ĉi argumento havas la tipon de karaktero. 1237 00:58:14,285 --> 00:58:17,200 1238 00:58:17,200 --> 00:58:18,620 Do tio estu signo. 1239 00:58:18,620 --> 00:58:25,170 1240 00:58:25,170 --> 00:58:26,280 >> Lernanto: Nur prenas la unua. 1241 00:58:26,280 --> 00:58:28,610 >> JASON Hirschhorn: Do tiu estas kion mi diris antaŭe. 1242 00:58:28,610 --> 00:58:34,240 Kiel mi diris, ĝi ne estas stoki la kordo interne variablo montrilo. 1243 00:58:34,240 --> 00:58:35,120 Ĝi estas stokante - 1244 00:58:35,120 --> 00:58:36,350 >> Lernanto: La unua valoro de la kordo. 1245 00:58:36,350 --> 00:58:40,810 >> JASON Hirschhorn: La adreso de la unua valoro de la kordo. 1246 00:58:40,810 --> 00:58:46,940 Se ni devis presi ĉi, ni estas atingi la valoron ene montrilo. 1247 00:58:46,940 --> 00:58:51,005 Kaj ni vidos estas, ja, memoro adreso. 1248 00:58:51,005 --> 00:58:53,595 1249 00:58:53,595 --> 00:58:56,440 >> Ĉu tio havas sencon? 1250 00:58:56,440 --> 00:58:56,940 Pardonon. 1251 00:58:56,940 --> 00:58:58,996 Atendu, ĉu tio respondas vian demando, kvankam? 1252 00:58:58,996 --> 00:58:59,790 >> Lernanto: Jes. 1253 00:58:59,790 --> 00:59:05,830 >> JASON Hirschhorn: Tiu linio de kodo estas krei ĉenon kaj poste la alian 1254 00:59:05,830 --> 00:59:09,115 variablo montrilon tio estas montrante al kiuj kordoj, ke tabelo. 1255 00:59:09,115 --> 00:59:14,320 1256 00:59:14,320 --> 00:59:14,980 Jes. 1257 00:59:14,980 --> 00:59:19,200 >> Lernanto: Do, se ni iris unu memoro alparoli tie, estus ni preni la h? 1258 00:59:19,200 --> 00:59:21,990 1259 00:59:21,990 --> 00:59:23,150 Ĉu ĝi estis stokitaj kiel kordo? 1260 00:59:23,150 --> 00:59:24,400 >> JASON Hirschhorn: Kiel, ni faris - 1261 00:59:24,400 --> 00:59:28,540 1262 00:59:28,540 --> 00:59:30,790 tia ĉi estas valora por fari. 1263 00:59:30,790 --> 00:59:33,780 Ĉi tio estas punkta aritmetiko, kiu vi uloj vidis antaŭe, kaj devus esti 1264 00:59:33,780 --> 00:59:35,550 relative komforta kun. 1265 00:59:35,550 --> 00:59:36,905 Ĉi tio estas parenca al skribis - 1266 00:59:36,905 --> 00:59:41,980 1267 00:59:41,980 --> 00:59:46,350 se ni devis skribi tiun linion de kodo, ni vidis tabelo notacio antaŭe. 1268 00:59:46,350 --> 00:59:55,900 Tio devus doni al ni la duan valoro en tiu tabelo, h. 1269 00:59:55,900 --> 01:00:05,010 >> Se ni faris tion, tiu devas ankaŭ doni ni la duan valoron en tiu tabelo. 1270 01:00:05,010 --> 01:00:08,320 Ĉar tuj ne al la memoro adreso de la unua aĵo, sed la 1271 01:00:08,320 --> 01:00:10,530 memoro adreso de la afero unu super. 1272 01:00:10,530 --> 01:00:14,360 Kaj tiam la stelo operatoro dereferences ke montrilo. 1273 01:00:14,360 --> 01:00:16,940 Kaj cetere, vidu. 1274 01:00:16,940 --> 01:00:18,664 Ni ricevas h denove. 1275 01:00:18,664 --> 01:00:20,980 >> Lernanto: Kion precize faras dereference signifi? 1276 01:00:20,980 --> 01:00:23,650 >> JASON Hirschhorn: Dereference estas fantazio vorto por iri. 1277 01:00:23,650 --> 01:00:26,390 Iru al tiu kaj akiri kio estas tie estas dereference puntero. 1278 01:00:26,390 --> 01:00:28,240 Ĝi estas nur fantazio vorto por tio. 1279 01:00:28,240 --> 01:00:29,986 >> Lernanto: Se ni volis print la tutan ĉenon, ni povus 1280 01:00:29,986 --> 01:00:31,930 fari signon montrilo? 1281 01:00:31,930 --> 01:00:33,490 >> JASON Hirschhorn: Bone, ni estas irante paŭzi tie. 1282 01:00:33,490 --> 01:00:35,480 Ni tuj finos cxi tie. 1283 01:00:35,480 --> 01:00:41,760 Ampersand donas al vi la adreson de situo, do kiam vi faras ampersand de 1284 01:00:41,760 --> 01:00:44,080 variablo, donas al vi la adreson kie tiu variablo estas stokitaj. 1285 01:00:44,080 --> 01:00:48,580 Ampersand montrilon donos al vi la adreso de ptr kie ptr estas en memoro. 1286 01:00:48,580 --> 01:00:50,140 >> Ni ne tuj iros sur kun tiu ekzemplo. 1287 01:00:50,140 --> 01:00:52,640 Vi povas eltrovi tiujn aferojn sur via propra. 1288 01:00:52,640 --> 01:00:55,740 Sed denove, tio povus eĉ esti verging a iom tie, kion vi bezonas scii por 1289 01:00:55,740 --> 01:00:58,000 La medio de tiu meza termino - 1290 01:00:58,000 --> 01:00:59,070 aŭ ĉi kvizo, prefere. 1291 01:00:59,070 --> 01:01:00,270 Pardonon. 1292 01:01:00,270 --> 01:01:03,770 >> Ni tuj pluiri, ĉar mi volus ŝatas fari unu kodigo problemo 1293 01:01:03,770 --> 01:01:05,100 antaŭ tempo estas ĝis. 1294 01:01:05,100 --> 01:01:09,340 Kaj ni tuj programi kion mi kredas estas la plej konvinka de tiuj 1295 01:01:09,340 --> 01:01:11,020 ekzemploj, atoi. 1296 01:01:11,020 --> 01:01:14,520 Do tio estis demando pri kvizon du jarojn. 1297 01:01:14,520 --> 01:01:17,810 Kaj mi havas ĝin sur la tabulo tie. 1298 01:01:17,810 --> 01:01:20,680 >> Homoj demandis je la kvizo - 1299 01:01:20,680 --> 01:01:23,640 ili donis iom pli tesxt en la demando, sed mi forigis la 1300 01:01:23,640 --> 01:01:26,640 teksto, ĉar ĝi estis nenecesa por niaj celoj nun. 1301 01:01:26,640 --> 01:01:29,180 Ĝi estis nur kelkaj fono sur kio atoi faris. 1302 01:01:29,180 --> 01:01:31,425 Sed vi ĉiuj konas kaj estas tre familiara kun atoi. 1303 01:01:31,425 --> 01:01:35,620 >> Mi sugestas vin kodigi ĉi sur folio de papero. 1304 01:01:35,620 --> 01:01:39,310 Mi ankaŭ rekomendas ke vi uzu la strategion ke ni jam trapasis 1305 01:01:39,310 --> 01:01:41,040 multon en nia sekcio. 1306 01:01:41,040 --> 01:01:44,130 Unue, certigu vin komprenu kio atoi tio farigxis. 1307 01:01:44,130 --> 01:01:47,580 Desegni bildon aŭ veni supren kun iuj mensan bildon de tio en via kapo. 1308 01:01:47,580 --> 01:01:51,120 Sekva, skribi el _pseudocode_ por ĉi tio. 1309 01:01:51,120 --> 01:01:53,120 Sur la kvizo, se ĉiuj vi ricevas estas _pseudocode_, almenaŭ vi 1310 01:01:53,120 --> 01:01:54,550 meti ion malsupren. 1311 01:01:54,550 --> 01:02:00,070 Kaj tiam mapi ke _pseudocode_ sur C. Se vi havas ĉekon en via 1312 01:02:00,070 --> 01:02:03,760 _pseudocode_, kiel kontroli se io estas 1, kiuj mapas sur la se 1313 01:02:03,760 --> 01:02:05,750 kondiĉo ks. 1314 01:02:05,750 --> 01:02:07,850 Kaj fine, programi la programon en C. 1315 01:02:07,850 --> 01:02:15,000 >> Do reiru al atoi kaj prenu kvin minutojn kodigi tio sur folio de 1316 01:02:15,000 --> 01:02:19,480 papero, kiu estas verŝajne ĉirkaŭ la kvanto da tempo vi devus preni sur 1317 01:02:19,480 --> 01:02:21,260 kvizon al kodo atoi. 1318 01:02:21,260 --> 01:02:27,060 Kvin ĝis 15 minutoj, kvin ĝis 12, kvin ĝis 10 minutoj, temas pri la kvanto de 1319 01:02:27,060 --> 01:02:30,150 tempo vi volus elspezi sur tiu demando en la kvizo. 1320 01:02:30,150 --> 01:02:31,670 Do prenu kvin minutojn nun, bonvolu. 1321 01:02:31,670 --> 01:02:35,957 Kaj se vi havas demandojn, levi via mano kaj mi venos ĉirkaŭe. 1322 01:02:35,957 --> 01:06:39,570 1323 01:06:39,570 --> 01:06:41,066 >> [SIDE konversacioj] 1324 01:06:41,066 --> 01:08:35,279 1325 01:08:35,279 --> 01:08:37,580 >> JASON Hirschhorn: OK, tiel ke estis kvin minutoj. 1326 01:08:37,580 --> 01:08:39,880 Tio estis verŝajne pri la kvanto de tempo vi volas pasigi en tiu sur kvizo 1327 01:08:39,880 --> 01:08:42,120 eble la malalta fino de tiu tempo. 1328 01:08:42,120 --> 01:08:44,010 Ni Recap en iom. 1329 01:08:44,010 --> 01:08:45,740 Ni komencu kodigo ĉi. 1330 01:08:45,740 --> 01:08:49,479 Kaj se ni ne havas la tutan vojon tra, la respondojn al tiu kaj tiu 1331 01:08:49,479 --> 01:08:54,189 kvizo demando estas disponeblaj, denove, Aŭtuno 2011 estas kiam tiu demando 1332 01:08:54,189 --> 01:08:54,913 Aperis en la kvizo. 1333 01:08:54,913 --> 01:08:57,830 >> Kaj tio valoris ok punktoj en la kvizo tiam. 1334 01:08:57,830 --> 01:09:01,140 Ok punktoj estas sur la alta pinto de la kvanto de punktoj ion valoras. 1335 01:09:01,140 --> 01:09:04,790 Plej demandoj estas en la gamo de unu al ses punktojn. 1336 01:09:04,790 --> 01:09:08,500 Do tiu estas pli defia demando, por certa. 1337 01:09:08,500 --> 01:09:09,750 Cxu iu ajn get me komenciĝis? 1338 01:09:09,750 --> 01:09:13,260 1339 01:09:13,260 --> 01:09:15,380 >> Ĝenerale, kion ni iras voli fari kun ĉi 1340 01:09:15,380 --> 01:09:17,550 funkcii atoi, logike? 1341 01:09:17,550 --> 01:09:19,569 Kion ni volas fari? 1342 01:09:19,569 --> 01:09:22,279 Do ni tuj skribos iuj _pseudocode_. 1343 01:09:22,279 --> 01:09:24,090 >> Lernanto: Convert karakteroj en entjeroj. 1344 01:09:24,090 --> 01:09:26,700 >> JASON Hirschhorn: Convert karakteroj en entjeroj. 1345 01:09:26,700 --> 01:09:27,479 OK. 1346 01:09:27,479 --> 01:09:30,870 Do, kiom da karakteroj estas ni tuj devas iri tra gxi? 1347 01:09:30,870 --> 01:09:32,295 >> Lernanto: Ĉiuj el ili. 1348 01:09:32,295 --> 01:09:34,100 >> Lernanto: Ĉiuj karakteroj en la kordo. 1349 01:09:34,100 --> 01:09:35,540 >> JASON Hirschhorn: Ĉiuj signoj en la ĉeno. 1350 01:09:35,540 --> 01:09:42,180 Do, se ni volis iri tra ĉiu karaktero en ĉenon, kio estas io 1351 01:09:42,180 --> 01:09:44,560 en C ni jam vidis, ke permesis ni iros tra ĉiu 1352 01:09:44,560 --> 01:09:45,939 karaktero en kordo? 1353 01:09:45,939 --> 01:09:46,819 >> Lernantoj: A por buklo. 1354 01:09:46,819 --> 01:09:48,069 >> JASON Hirschhorn: A por buklo. 1355 01:09:48,069 --> 01:09:52,020 1356 01:09:52,020 --> 01:09:55,330 Do ni iras al buklo tra ĉiun karakteron en s. 1357 01:09:55,330 --> 01:10:00,940 >> Kion do ni tuj volas fari kiam ni ricevas specifan karakteron? 1358 01:10:00,940 --> 01:10:02,480 Diru ni ekuzi pasigis 90. 1359 01:10:02,480 --> 01:10:03,460 Ni akiras la 9. 1360 01:10:03,460 --> 01:10:04,240 Ĝi estas signo. 1361 01:10:04,240 --> 01:10:07,440 Kion ni volas fari kun ke karaktero 9? 1362 01:10:07,440 --> 01:10:10,082 >> Lernanto: Subtrahi ĝin de karaktero 0? 1363 01:10:10,082 --> 01:10:11,860 >> Studento: Aldonu 0? 1364 01:10:11,860 --> 01:10:13,350 >> JASON Hirschhorn: Subtrahi ĝin de karaktero 0? 1365 01:10:13,350 --> 01:10:13,800 >> Lernanto: Jes. 1366 01:10:13,800 --> 01:10:15,573 >> JASON Hirschhorn: Kial ke vi volas fari tion? 1367 01:10:15,573 --> 01:10:16,560 >> Lernanto: [inaudibles] 1368 01:10:16,560 --> 01:10:17,010 valoro. 1369 01:10:17,010 --> 01:10:18,380 Lia int valoro. 1370 01:10:18,380 --> 01:10:21,580 >> JASON Hirschhorn: Bone, do ni prenu la karaktero 9, subtrahi ĝin el 1371 01:10:21,580 --> 01:10:25,820 karaktero 0 akiri reala entjero 9. 1372 01:10:25,820 --> 01:10:27,070 Dolĉa. 1373 01:10:27,070 --> 01:10:31,255 1374 01:10:31,255 --> 01:10:37,000 Kaj kiel vi scias, ke karaktero 9 minus 0 karaktero estas 9? 1375 01:10:37,000 --> 01:10:39,222 Kio abako cxu vi rigardas? 1376 01:10:39,222 --> 01:10:43,130 >> Lernanto: Estas logike naŭ lokoj inter 9 kaj 0. 1377 01:10:43,130 --> 01:10:44,620 Aŭ vi povus rigardi la ASCII tablo. 1378 01:10:44,620 --> 01:10:45,120 >> JASON Hirschhorn: Askio tablo. 1379 01:10:45,120 --> 01:10:46,490 Sed jes, vi estas korekta, kiel ankaŭ. 1380 01:10:46,490 --> 01:10:47,780 Do ni subtrahi 0. 1381 01:10:47,780 --> 01:10:49,010 Do nun ni havas la entjera 9. 1382 01:10:49,010 --> 01:10:49,970 Kaj kion ni volas fari kun ĝi? 1383 01:10:49,970 --> 01:10:54,970 Se ni havas 90, gxi estas la unua entjero ni havas, kion ni volas fari? 1384 01:10:54,970 --> 01:10:58,180 >> Lernanto: Mi deziras meti en portempa entjero tabelo, tiam faru math al ĝi 1385 01:10:58,180 --> 01:11:02,088 poste fari ĝin en fino. 1386 01:11:02,088 --> 01:11:03,020 >> JASON Hirschhorn: okej. 1387 01:11:03,020 --> 01:11:06,990 >> Studento: Vi povas komenci ĉe la fino de la tabelo, kaj poste movi antaŭen tiom 1388 01:11:06,990 --> 01:11:10,350 ke ĉiufoje vi movas antaŭen, vi multigos gxin per 10. 1389 01:11:10,350 --> 01:11:10,830 >> JASON Hirschhorn: okej. 1390 01:11:10,830 --> 01:11:12,250 Tio sonas kiel bela konvinka ideo. 1391 01:11:12,250 --> 01:11:16,040 Ni povas komenci ĉe la fino de nia tabelo, kaj ni povas uzi strleng. 1392 01:11:16,040 --> 01:11:17,030 Ni povas uzi strleng en ĉi tie. 1393 01:11:17,030 --> 01:11:18,870 Ni ricevos la longeco de nia kordo. 1394 01:11:18,870 --> 01:11:20,100 Ni komencu cxe la fino. 1395 01:11:20,100 --> 01:11:29,170 Kaj + la unua, ni nur prenu ke entjera, kaj eble ni kreu kiel 1396 01:11:29,170 --> 01:11:32,270 nova entjera variablo supren supro kie ni stokante ĉion. 1397 01:11:32,270 --> 01:11:37,340 Do ni loop per singla char en s de reen al fronto, ni subtrahi 0, kaj 1398 01:11:37,340 --> 01:11:42,790 tiam ni prenos gxin, kaj depende de kie ĝi estas, ni multigos gxin 1399 01:11:42,790 --> 01:11:45,860 per potenco de 10. 1400 01:11:45,860 --> 01:11:50,644 Pro la unua, kion ni faras multipliki la plej dekstra karaktero de? 1401 01:11:50,644 --> 01:11:51,440 >> Lernanto: 10 al la 0. 1402 01:11:51,440 --> 01:11:53,170 >> JASON Hirschhorn: 10 al la 0. 1403 01:11:53,170 --> 01:11:56,010 Kion ni multigos la dua plej dekstra karaktero de? 1404 01:11:56,010 --> 01:11:57,450 >> Lernanto: [inaudibles]. 1405 01:11:57,450 --> 01:11:57,960 >> JASON Hirschhorn: Kio? 1406 01:11:57,960 --> 01:11:59,150 >> Lernanto: 10 ĝis 1. 1407 01:11:59,150 --> 01:12:00,420 >> JASON Hirschhorn: 10 ĝis 1. 1408 01:12:00,420 --> 01:12:03,754 La tria plej dekstra karaktero? 1409 01:12:03,754 --> 01:12:04,580 >> Lernanto: 10 ĝis la 2. 1410 01:12:04,580 --> 01:12:05,350 >> JASON Hirschhorn: 10 ĝis la 2. 1411 01:12:05,350 --> 01:12:07,200 >> Lernanto: Pardonu, mi ne komprenas kion ni faras tie ĉi. 1412 01:12:07,200 --> 01:12:08,640 >> JASON Hirschhorn: OK, ni reiri, tiam. 1413 01:12:08,640 --> 01:12:12,500 Do ni tuj akiri pasis en ŝnuro. 1414 01:12:12,500 --> 01:12:14,470 Ĉar ni skribas atoi. 1415 01:12:14,470 --> 01:12:15,260 Do ni ricevas pasis en ŝnuro. 1416 01:12:15,260 --> 01:12:17,640 Diru ni ekuzi pasis en la kordo 90. 1417 01:12:17,640 --> 01:12:19,930 >> La unua afero, ni tuj faras estas fiksita nova entjera variablo kiu ni estas 1418 01:12:19,930 --> 01:12:22,150 nur provus krei kiel nia nova entjero. 1419 01:12:22,150 --> 01:12:24,630 Tio estas kion ni iras por reveni al la fino. 1420 01:12:24,630 --> 01:12:30,110 Ni devas iri tra ĉiun karakteron en la arĉa ĉar ni jam determinis 1421 01:12:30,110 --> 01:12:34,430 ke ni devas tuŝi ĉiun kaj tiam aldoni ĝin al nia nova entjero. 1422 01:12:34,430 --> 01:12:36,330 >> Sed ni ne povas simple aldoni gxin kiel nombro. 1423 01:12:36,330 --> 01:12:38,270 Ni ne povas simple preni 9 kaj aldoni 9 al nia entjero. 1424 01:12:38,270 --> 01:12:40,560 Dependas de kion loko ĝi estas en la kordo. 1425 01:12:40,560 --> 01:12:42,960 Ni tuj bezonos multobligi ĝi per potenco de 10. 1426 01:12:42,960 --> 01:12:45,580 Ĉar tiel estas kiel bazo 10 verkoj. 1427 01:12:45,580 --> 01:12:49,050 >> Do ni tuj ricevas la realan karaktero, aux la efektiva entjero 1428 01:12:49,050 --> 01:12:53,860 nombro, laux subtrahanta karaktero 0 de karaktero 9 kiel ni faris kun 1429 01:12:53,860 --> 01:12:57,560 subtrahanta karaktero ĉefurbo A de kion ajn karaktero ni havis en unu el 1430 01:12:57,560 --> 01:12:58,120 tiuj problemoj. 1431 01:12:58,120 --> 01:13:04,190 Do ni reale preni nombro de 0 al 9 savis kiel reela nombro, kaj ni 1432 01:13:04,190 --> 01:13:07,590 multipliki ĝi per potenco de 10 depende de kie ni estas en la kordo. 1433 01:13:07,590 --> 01:13:19,430 1434 01:13:19,430 --> 01:13:22,575 Kaj tiam ni tuj aldoni ĝin reen en nian novan entjera variablo. 1435 01:13:22,575 --> 01:13:32,840 1436 01:13:32,840 --> 01:13:37,890 >> Do kio estas tiu devus aspekti kiel farus estos - ni devos desegni pli ĉi tie. 1437 01:13:37,890 --> 01:13:40,086 Se ni atingos pasis en la kordo 90 - 1438 01:13:40,086 --> 01:13:41,336 >> Lernanto: [inaudibles]. 1439 01:13:41,336 --> 01:13:43,190 1440 01:13:43,190 --> 01:13:45,540 >> JASON Hirschhorn: Sed atoi prenas kordo. 1441 01:13:45,540 --> 01:13:46,350 Do ni tuj iru tra la okazigon. 1442 01:13:46,350 --> 01:13:49,900 Ni ricevos pasis en 90. 1443 01:13:49,900 --> 01:13:51,540 Ni iru el la dorson al la pordo. 1444 01:13:51,540 --> 01:13:53,920 Ni prenu la 0. 1445 01:13:53,920 --> 01:13:55,080 >> Lernanto: Mi bedaŭras. 1446 01:13:55,080 --> 01:13:55,880 Eble tiu estas stulta. 1447 01:13:55,880 --> 01:13:59,440 Se ni ekuzi pasis en cxeno, kial estas 90 kion ni estas 1448 01:13:59,440 --> 01:14:00,260 getting pasis en? 1449 01:14:00,260 --> 01:14:03,160 Ĉar 90 estas entjero. 1450 01:14:03,160 --> 01:14:06,820 >> JASON Hirschhorn: Ĉar atoi prenas kordo kaj igas la entjero 1451 01:14:06,820 --> 01:14:08,320 reprezento de tiu ĉeno. 1452 01:14:08,320 --> 01:14:13,650 Sed la kordo 90 ne estas la entjero 90 aŭ la nombro 90. 1453 01:14:13,650 --> 01:14:17,920 La kordoj 90 estas tabelo el du, aŭ tri signoj, pli ĝuste, la 9an 1454 01:14:17,920 --> 01:14:22,740 karaktero, la 0 karakteron, kaj la backslash 0 karaktero. 1455 01:14:22,740 --> 01:14:26,260 >> Kaj ni skribas atoi ĉar, Ekzemple, kiam oni prenas la komandon 1456 01:14:26,260 --> 01:14:30,230 linio argumento, kaj ĝi estas savita en argv, ĝi estos savita kiel linio. 1457 01:14:30,230 --> 01:14:32,940 Sed se vi volas trakti gxin kiel nombro, vi devas konverti ĝin al 1458 01:14:32,940 --> 01:14:34,700 reala entjero. 1459 01:14:34,700 --> 01:14:37,210 Kiun ni faris unu el nia problemo aroj. 1460 01:14:37,210 --> 01:14:38,800 Kiun ni faris en nombro de nia problemo aroj. 1461 01:14:38,800 --> 01:14:41,690 Cxiu kiu prenis entjero kiel komandlinia argumento. 1462 01:14:41,690 --> 01:14:46,490 Do jen kial nia atoi funkcio prenas kordo. 1463 01:14:46,490 --> 01:14:51,910 >> Do denove, en nia ekzemplo cxi tie, ni estas iri preni la lasta. 1464 01:14:51,910 --> 01:14:55,050 Ni iras al subtrahi la karaktero 0 de ĝi, ĉar la karakteroj 0 1465 01:14:55,050 --> 01:14:58,810 subtrahita de la karaktero 0 donas vin la efektiva nombro 0, laŭ 1466 01:14:58,810 --> 01:15:00,950 la ASCII math ke ni faros. 1467 01:15:00,950 --> 01:15:04,870 >> Ĉar karakteroj estas reprezentataj kiel malsama ol iliaj realaj - la 1468 01:15:04,870 --> 01:15:08,830 karaktero, ekzemple, minuskla a estas 97. 1469 01:15:08,830 --> 01:15:10,260 Ĝi ne estas - oops! 1470 01:15:10,260 --> 01:15:13,290 Ĝi ne estas, kion vi devus atendi ĝi estu, 0, ekzemple. 1471 01:15:13,290 --> 01:15:16,200 Do vi devas subtrahi la karaktero akiri 0. 1472 01:15:16,200 --> 01:15:18,950 >> Do ni tuj faros tion ĉi tie por ricevi la reala nombro. 1473 01:15:18,950 --> 01:15:22,560 Kaj tiam ni tuj multobligos ĝin per potenco de 10 depende de kie 1474 01:15:22,560 --> 01:15:27,030 Estas en la ĉeno, kaj poste prenu ke kaj aldoni ĝin al nia loko posedanto 1475 01:15:27,030 --> 01:15:32,520 variablo tiel ni povas veni supren kun nian lastan nova entjero. 1476 01:15:32,520 --> 01:15:35,080 Ĉu tio sencas por ĉiuj? 1477 01:15:35,080 --> 01:15:37,730 >> Do ni ne tuj programi ĉi nun, ĉar ni estas 1478 01:15:37,730 --> 01:15:38,830 atingi mallonga tempo. 1479 01:15:38,830 --> 01:15:40,860 Mi pardonpetas pro la altempigo de tiu. 1480 01:15:40,860 --> 01:15:44,620 Sed tio estas kio, espereble, vi farus povos fari en la kvizo - ĉe la 1481 01:15:44,620 --> 01:15:47,710 tre malgrandaj, get this _pseudocode_ elskribita. 1482 01:15:47,710 --> 01:15:50,840 >> Kaj tiam, se ni devis skribi la _pseudocode_, fakte, ni povus fari tion 1483 01:15:50,840 --> 01:15:51,490 bela rapide. 1484 01:15:51,490 --> 01:15:55,230 Ĉiu linio de komentoj ni ni skribis ĉi tie tradukas al ĉirkaŭ 1485 01:15:55,230 --> 01:15:56,970 unu linio de C-kodon. 1486 01:15:56,970 --> 01:16:01,780 Deklarante nova variablo, skribo banto, iuj subtraho, iuj 1487 01:16:01,780 --> 01:16:07,070 multipliko, kaj iuj farita. 1488 01:16:07,070 --> 01:16:09,020 Ni volonte probable ankaŭ volas skribi reveno linio. 1489 01:16:09,020 --> 01:16:12,040 Ni povus ankaŭ bezono meti iuj ĉekoj en ĉi tie. 1490 01:16:12,040 --> 01:16:12,655 Jes. 1491 01:16:12,655 --> 01:16:15,720 >> Lernanto: Do ​​ĉu ni povas trakti s kiel la efektiva kordo? 1492 01:16:15,720 --> 01:16:18,730 Ĉar mi scias ke estas simple adreso. 1493 01:16:18,730 --> 01:16:22,090 Kiel, kiom vi volas ricevi la longeco de la arĉa aprobotaj tra? 1494 01:16:22,090 --> 01:16:25,310 >> JASON Hirschhorn: Do kiel faris La longeco de kordo? 1495 01:16:25,310 --> 01:16:25,830 Strlen. 1496 01:16:25,830 --> 01:16:26,660 >> Lernanto: strlen, jes. 1497 01:16:26,660 --> 01:16:30,550 Sed vi povas meti s kiel la argumento por tio? 1498 01:16:30,550 --> 01:16:34,620 >> JASON Hirschhorn: Do strlen prenas char stelo. 1499 01:16:34,620 --> 01:16:38,090 Kaj tio sekvas ke char la stelo, kaj ĝi subtenas rakonti ĝis ĝi ricevas al 1500 01:16:38,090 --> 01:16:41,865 backslash 0. strlen estis efektive unu el la aliaj programoj ni 1501 01:16:41,865 --> 01:16:42,850 tuj kodo. 1502 01:16:42,850 --> 01:16:44,560 Tio estas alia bona unu kodo. 1503 01:16:44,560 --> 01:16:47,270 Tiu estas iom pli facila, ĉar se vi tuj pensas pri tio 1504 01:16:47,270 --> 01:16:47,830 koncepte - 1505 01:16:47,830 --> 01:16:51,620 Mi simple diris, ke ĝi laŭte - strlen sekvas puntero kaj konservas irante kaj 1506 01:16:51,620 --> 01:16:54,210 rakonti kaj konservanta trako ĝis vi atingos backslash 0. 1507 01:16:54,210 --> 01:16:56,530 >> Lernanto: OK, akiris ĝin. 1508 01:16:56,530 --> 01:17:00,200 >> JASON Hirschhorn: Do plej bona sorto je kvizo 0 morgaŭ. 1509 01:17:00,200 --> 01:17:03,170 Se vi havas demandojn, mi esti ekstere post tio. 1510 01:17:03,170 --> 01:17:05,610 Bonvolu retpoŝti al mi. 1511 01:17:05,610 --> 01:17:08,480 Etendu vian propran TF se vi estas Ne en mia sekcio aux ricevi mian 1512 01:17:08,480 --> 01:17:10,005 retpoŝti se vi volas. 1513 01:17:10,005 --> 01:17:13,140 >> Se vi volas Freak Out kaj simple sendu mi retmesaĝon, a freakout retpoŝto, mi 1514 01:17:13,140 --> 01:17:16,710 resendu vin, kiel, a ridetanta vizaĝo, aŭ, kiel, ŝerco aŭ io. 1515 01:17:16,710 --> 01:17:18,190 Do bonvolu fari tion ankaŭ. 1516 01:17:18,190 --> 01:17:20,750 Bonan sorton denove, kaj mi vidi vin ĉiujn venontan semajnon. 1517 01:17:20,750 --> 01:17:23,435