1 00:00:00,000 --> 00:00:06,180 2 00:00:06,180 --> 00:00:07,820 >> Jason HIRSCHHORN: Maligayang Pagdating sa A5, sa lahat. 3 00:00:07,820 --> 00:00:11,270 Mayroon kaming isang kapana-panabik na linggo nang mas maaga sa amin, karamihan ay dahil may mga kaya maraming mga bagong 4 00:00:11,270 --> 00:00:12,350 Nakaharap sa kuwartong ito. 5 00:00:12,350 --> 00:00:12,920 Ito ay kahanga-hanga. 6 00:00:12,920 --> 00:00:15,740 Ang isang pulutong ng sa iyo dito sa pamamagitan ng aksidente, na kung saan ay mas mahusay. 7 00:00:15,740 --> 00:00:18,220 Kaya sana ay makikita mo panatilihin ang pagsali sa amin. 8 00:00:18,220 --> 00:00:20,220 >> Sa linggong ito kami ay pagpunta sa gastusin sa karamihan ng seksyon 9 00:00:20,220 --> 00:00:21,870 paghahanda para sa pagsusulit. 10 00:00:21,870 --> 00:00:26,580 Kaya alinsunod sa aming agenda, kami ay pagpunta sa makipag-usap ng kaunti tungkol sa mga mapagkukunan para sa mga klase, 11 00:00:26,580 --> 00:00:30,350 ngunit din para sa mga pagsusulit, at pagkatapos ay, muli, gastusin sa karamihan ng klase ng pakikipag-usap 12 00:00:30,350 --> 00:00:31,390 tungkol sa mga tanong. 13 00:00:31,390 --> 00:00:33,900 Sa sandaling tapos na kami ng pagsagot sa iyong katanungan, o kung ang iyong mga katanungan 14 00:00:33,900 --> 00:00:39,010 natural humantong sa amin sa ilang mga coding, ako may sample na mga problema mula sa midterms 15 00:00:39,010 --> 00:00:43,180 nakalipas na magkakaroon kami ng live na code sa seksyon na magkasama na nagdadala rin ng ilang iba pang mga 16 00:00:43,180 --> 00:00:45,420 magandang paksa upang masakop. 17 00:00:45,420 --> 00:00:48,280 >> Kaya una, bilang nai-nawala namin sa pamamagitan ng para sa nakalipas na ilang linggo upang ipaalala sa iyo 18 00:00:48,280 --> 00:00:51,700 guys, may mga isang tonelada ng mga mapagkukunan Available para sa kursong ito. 19 00:00:51,700 --> 00:00:55,020 Marami sa mga ito ay magiging hindi mapaniniwalaan o kapani-paniwala kapaki-pakinabang sa iyo bilang patuloy kang 20 00:00:55,020 --> 00:00:57,280 mag-aral para sa pagsusulit 0, dahil ito ay Martes hapon. 21 00:00:57,280 --> 00:00:59,630 Kaya lahat ng ka na pag-aaral para sa isang bit. 22 00:00:59,630 --> 00:01:02,640 >> May mga panayam tala at pinagmulan ang code na iyon dapat mong 23 00:01:02,640 --> 00:01:04,050 Talagang check out. 24 00:01:04,050 --> 00:01:05,019 Panoorin ang shorts. 25 00:01:05,019 --> 00:01:07,470 Tingnan ang study.cs50.net. 26 00:01:07,470 --> 00:01:11,770 At pagkatapos ay, na nakalista sa ibaba, ang isang numero ng iba pang mga mapagkukunan. 27 00:01:11,770 --> 00:01:14,020 >> Muli, pagsusulit 0 ay bukas sa 01:00. 28 00:01:14,020 --> 00:01:18,230 Kung hindi mo pa nagagawa, tingnan out ang Tungkol sa Pagsusulit 0 dokumento sa 29 00:01:18,230 --> 00:01:21,370 homepage kurso upang malaman kung kung saan ka ng paggawa ng mga pagsusulit. 30 00:01:21,370 --> 00:01:25,770 Ang pagsusulit ay nagsisimula sa 01:10 at ay nagtatapos sa 70 minuto sa ibang pagkakataon. 31 00:01:25,770 --> 00:01:29,610 Kaya kung lalabas ka pagkatapos ng 01:10, handa ka pagpunta upang makakuha ng na maraming mga mas kaunting minuto 32 00:01:29,610 --> 00:01:30,940 kaysa sa 70 na kumuha ng pagsusulit. 33 00:01:30,940 --> 00:01:33,570 Kaya't tiyakin na nandoon ka sa oras. 34 00:01:33,570 --> 00:01:38,690 Kung ikaw ay isang mag-aaral extension o mayroon ilang iba pang mga pagsasaalang-alang na pagsubok, ito 35 00:01:38,690 --> 00:01:40,400 maaaring hindi maging sa 1:00 bukas. 36 00:01:40,400 --> 00:01:43,540 Ngunit muli, suriin ang Tungkol sa Pagsusulit 0 idokumento upang matiyak na sa iyo kapag 37 00:01:43,540 --> 00:01:44,760 ka paglalaan ng pagsusulit. 38 00:01:44,760 --> 00:01:46,440 Isinulat ni ko 75 minuto up dito. 39 00:01:46,440 --> 00:01:48,580 Sa tingin ko na tama, hindi 70. 40 00:01:48,580 --> 00:01:53,420 >> Sinasaklaw nito ang lahat ng materyal mula sa isang linggo 0 upang magbigay ng panayam noong nakaraang linggo sa Miyerkules. 41 00:01:53,420 --> 00:01:59,350 At muli, para sa pagsusulit na ito, sa bawat na dokumento, makakakuha ka ng isa magkabilaan at 8 42 00:01:59,350 --> 00:02:03,770 1/2 ng 11 sheet ng papel na nakakakuha ka ng na gagamitin bilang mga tala sa panahon ng pagsusulit. 43 00:02:03,770 --> 00:02:08,570 Maraming mga tao, kung hindi karamihan ng mga tao, mayroon natagpuan na ang nag-iisang pinaka-kapaki-pakinabang na paraan 44 00:02:08,570 --> 00:02:11,970 mag-aral para sa pagsusulit ay sa gumawa ng pag-aaral sheet, isang 45 00:02:11,970 --> 00:02:13,730 isa-sider, ng kanilang sariling. 46 00:02:13,730 --> 00:02:17,710 Kaya tumingin sa nakaraang mga bago kung nakita mo nakalipas bago. 47 00:02:17,710 --> 00:02:19,960 Abutin ang out sa mga kaibigan upang makita kung ano sila ay paglalagay sa kanila. 48 00:02:19,960 --> 00:02:23,610 >> Ngunit mga kamay-down, ang pinakamahusay na paraan maaari kang pag-aaral ay upang pumunta sa pamamagitan ng lahat ng bagay at 49 00:02:23,610 --> 00:02:26,530 pagkayas ito pababa sa kung ano ang dapat o nararapat hindi nabibilang sa na sheet ng 50 00:02:26,530 --> 00:02:30,570 papel, dahil iyan ay isang talagang lamang kapaki-pakinabang na paraan para sa iyo upang matiyak na 51 00:02:30,570 --> 00:02:33,620 ka ng pagpunta sa pamamagitan ng lahat ng bagay at kumuha ng pagpapalagayang-loob sa mga ito. 52 00:02:33,620 --> 00:02:36,690 Karamihan sa mga tao, nakita namin, kahit na sila na ang sheet ng papel sitting karapatan 53 00:02:36,690 --> 00:02:39,840 sa tabi ng mga ito sa pagsusulit, huwag i- upang ito, dahil, muli, na napaka 54 00:02:39,840 --> 00:02:43,290 proseso ng pagpunta sa pamamagitan ng impormasyon ay nakatulong sa kanila matuto ito. 55 00:02:43,290 --> 00:02:45,370 >> Kahit sinong mayroon ba kayong mga katanungan tungkol sa pagsusulit 0? 56 00:02:45,370 --> 00:02:50,120 57 00:02:50,120 --> 00:02:51,450 May lahat - 58 00:02:51,450 --> 00:02:53,230 Hindi ako pagpunta sa gawin ang isang show ng mga kamay. 59 00:02:53,230 --> 00:02:53,550 Wala iyon. 60 00:02:53,550 --> 00:02:54,790 Ako ay pagpunta sa magtanong kung sino makapagsimula sa pag-aaral. 61 00:02:54,790 --> 00:02:58,360 Ngunit hindi ko nais upang gumawa ka lahat ng hindi taasan ang iyong mga kamay. 62 00:02:58,360 --> 00:03:01,290 Kaya tulad ng sinabi ko - oo, Avi, sige. 63 00:03:01,290 --> 00:03:04,205 >> AVI: Ano ang gusto maging isang kapaki-pakinabang na bagay ilagay sa mga one-pager? 64 00:03:04,205 --> 00:03:05,875 >> AARAL: Iyon ay nakasalalay sa iyo. 65 00:03:05,875 --> 00:03:08,210 >> Jason HIRSCHHORN: Makukuha mo na gamitin ang iyong paghatol. 66 00:03:08,210 --> 00:03:13,220 Mga kapaki-pakinabang mga bagay upang ilagay sa mga isahang-pager, kung ikaw ay lito tungkol sa mga malaki O 67 00:03:13,220 --> 00:03:17,510 runtime ng iba't ibang mga uri ng mga paghahanap at mga uri, ilagay na sa doon sa isang 68 00:03:17,510 --> 00:03:18,760 madaling-magamit na primera klase tsart. 69 00:03:18,760 --> 00:03:22,250 Sa ganoong paraan, kung tatanungin ka na sa pagsusulit, hindi mo kailangang subukan at figure 70 00:03:22,250 --> 00:03:23,560 ito o dahilan sa pamamagitan ng runtime. 71 00:03:23,560 --> 00:03:24,730 Maaari mong kopyahin lamang ito pababa. 72 00:03:24,730 --> 00:03:28,320 Kung tumingin ka sa mga pagsusulit nakaraan, ng maraming beses, na pinapagana may oras katanungan. 73 00:03:28,320 --> 00:03:34,150 Kaya na magiging isang halimbawa ng isang magandang bagay ilagay sa iyong one-pager. 74 00:03:34,150 --> 00:03:37,450 >> Iba pang mahusay na mga bagay upang ilagay sa, kung ikaw ay naguguluhan tungkol sa kung paano idedeklara isang 75 00:03:37,450 --> 00:03:40,570 pag-andar o kung ano ang iba't ibang bahagi ng ang pag-andar na pagpapahayag ay, sumulat 76 00:03:40,570 --> 00:03:43,400 na sa doon, isang generic na bersyon at pagkatapos ay marahil isang halimbawa. 77 00:03:43,400 --> 00:03:47,290 Kung ikaw ay naguguluhan tungkol sa mga payo, isang diagram ng kung paano pointer ng gawain ay 78 00:03:47,290 --> 00:03:48,660 marahil ay talagang kapaki-pakinabang. 79 00:03:48,660 --> 00:03:52,440 Kung ikaw ay naguguluhan tungkol sa recursion, isang makatikim ng recursive function na sa doon 80 00:03:52,440 --> 00:03:54,980 maaari ring patunayan na maging kapaki-pakinabang talaga. 81 00:03:54,980 --> 00:03:57,290 Ba na magbibigay sa iyo ng ilang mga ideya? 82 00:03:57,290 --> 00:04:01,820 >> AVI: Kailangan mong maunawaan ang buong proseso ng kino-compile, tulad ng 83 00:04:01,820 --> 00:04:03,220 paano na ang lahat ng mga gawa? 84 00:04:03,220 --> 00:04:06,620 >> Jason HIRSCHHORN: Lahat na na-sakop ng dati 85 00:04:06,620 --> 00:04:08,060 lalabas sa mga pagsusulit. 86 00:04:08,060 --> 00:04:08,930 Tanong - 87 00:04:08,930 --> 00:04:11,300 ngunit muli, ang ilang mga bagay ay magiging tinimbang mabigat kaysa sa iba. 88 00:04:11,300 --> 00:04:14,330 Ang ilang mga bagay na muli makabuo at muli sa klase, sa 89 00:04:14,330 --> 00:04:15,590 magbigay ng panayam, at seksyon. 90 00:04:15,590 --> 00:04:17,220 Iba pang mga bagay ay may hindi makaisip na madalas. 91 00:04:17,220 --> 00:04:22,900 >> Usapan kami ng maraming tungkol sa # include at -L isang bagay at kung ano ang mga ibig sabihin sa 92 00:04:22,900 --> 00:04:24,390 ang proseso ng compilation. 93 00:04:24,390 --> 00:04:29,120 Usapan kami ng maraming tungkol sa GDB, kapitan, mga iba't ibang mga flag na ginagamit namin kapag 94 00:04:29,120 --> 00:04:33,100 compile kami ng isang bagay, at kung ano make15, halimbawa, talaga 95 00:04:33,100 --> 00:04:34,510 Nangangahulugan at talagang gumagana. 96 00:04:34,510 --> 00:04:38,110 Hindi pa kami makipag-usap ng maraming tungkol sa bawat solong hakbang sa 97 00:04:38,110 --> 00:04:39,240 ang proseso ng compilation. 98 00:04:39,240 --> 00:04:40,410 Na-usapan pa rin namin ang tungkol dito. 99 00:04:40,410 --> 00:04:42,550 Kaya pa rin ito ng isang bagay na iyong Dapat na pamilyar ka. 100 00:04:42,550 --> 00:04:44,610 Ngunit muli, hindi namin pagpunta sa maging - 101 00:04:44,610 --> 00:04:49,140 mga bagay na makabuo ng mas madalas sa klase ay mas malamang na makabuo ng higit pa 102 00:04:49,140 --> 00:04:52,495 madalas at maging mas mabigat tinimbang sa pagsusulit. 103 00:04:52,495 --> 00:04:53,280 >> Cool. 104 00:04:53,280 --> 00:04:54,580 Anumang iba pang mga tanong tungkol sa pagsusulit 0? 105 00:04:54,580 --> 00:04:57,660 106 00:04:57,660 --> 00:05:00,050 >> OK, kaya ko bang ilagay ang isang listahan ng mga mga paksa sa board. 107 00:05:00,050 --> 00:05:01,550 Nagpunta ako sa pamamagitan ng syllabus. 108 00:05:01,550 --> 00:05:07,340 Nagpunta ako sa pamamagitan ng seksyon ng pagsusuri mula sa kagabi at mga slide upang makabuo 109 00:05:07,340 --> 00:05:13,710 may isang di-lubusan listahan ng mga paksa na sakop namin sa ngayon sa CS50 110 00:05:13,710 --> 00:05:16,800 at mga bagay na maaari lumitaw sa pagsusulit. 111 00:05:16,800 --> 00:05:19,900 Kaya ako hindi pagpunta sa pumunta sa pamamagitan ng bawat solong isa sa mga ito. 112 00:05:19,900 --> 00:05:22,370 Ito ay tumagal ng mas higit pa oras kaysa sa mayroon kami ngayon. 113 00:05:22,370 --> 00:05:26,880 Ngunit ko bang ilagay ito dito hanggang sa sana ay buhayin ang alaala iyong memorya bilang sa mga bagay na maaari 114 00:05:26,880 --> 00:05:28,420 o hindi maaaring maging kasing pamilyar sa iyo. 115 00:05:28,420 --> 00:05:32,850 >> At gusto ko iyan gastusin sa karamihan ng seksyon ng pagsagot sa iyong mga katanungan tungkol sa 116 00:05:32,850 --> 00:05:35,130 mga paksang ito, paksa na ay hindi sakop dito. 117 00:05:35,130 --> 00:05:36,130 Maaari naming isulat ang palsipikado code. 118 00:05:36,130 --> 00:05:40,010 Maaari naming isulat ang tunay na code upang matiyak na - 119 00:05:40,010 --> 00:05:44,280 Maaari ko bang sagutin ang iyong mga tanong at tulungan sa panimula maunawaan ang lahat ng 120 00:05:44,280 --> 00:05:48,330 marami sa mga paksang ito upang hindi mo na huwag mag- nakahanda at kumportableng ng pagpunta sa 121 00:05:48,330 --> 00:05:50,150 ang pagsusulit bukas. 122 00:05:50,150 --> 00:05:52,300 Kaya basahin sa ibabaw ng listahan. 123 00:05:52,300 --> 00:05:54,780 Ikaw sana ay sumapit sa seksyon may ilang mga katanungan pati na rin. 124 00:05:54,780 --> 00:05:58,480 Kapag handa ka na, itaas ang iyong kamay at kami ay makapagsimula. 125 00:05:58,480 --> 00:06:01,590 126 00:06:01,590 --> 00:06:05,200 >> Isaisip, ang mga tanong na mayroon ka, walang mga ugok katanungan. 127 00:06:05,200 --> 00:06:06,250 Narinig namin na marami. 128 00:06:06,250 --> 00:06:09,490 At ang mga tanong na mayroon ka, handa akong sa taya, maraming iba pang mga tao sa parehong 129 00:06:09,490 --> 00:06:11,740 sitting dito at nanonood online mayroon din. 130 00:06:11,740 --> 00:06:13,770 Kaya maaari ka lamang makatulong sa mga tao sa pamamagitan ng pagtatanong. 131 00:06:13,770 --> 00:06:15,070 Marcus. 132 00:06:15,070 --> 00:06:18,040 >> Marcus: Sa pagitan ng stack at ang magbunton, ay mayroong isang pre-inilalaan 133 00:06:18,040 --> 00:06:22,880 porsyento ng memorya na tinukoy bilang ito ay para sa stack o para sa kimpal? 134 00:06:22,880 --> 00:06:25,010 O kaya kung paano gumagana iyon, nang eksakto? 135 00:06:25,010 --> 00:06:26,230 >> Jason HIRSCHHORN: Mahusay pinag-uusapan. 136 00:06:26,230 --> 00:06:28,640 Pupunta ako upang i-back Sundan ang ilang sandali. 137 00:06:28,640 --> 00:06:30,910 Gumagana ba sa lahat - 138 00:06:30,910 --> 00:06:31,660 mangyaring maging matapat dito. 139 00:06:31,660 --> 00:06:34,130 Alam ko ako humihiling sa iyo na taasan ang iyong kamay sa harap ng iyong mga kasamahan. 140 00:06:34,130 --> 00:06:38,510 Ngunit may mga tao na sa tingin hindi komportable sa stack at magbunton 141 00:06:38,510 --> 00:06:42,980 at gustong pumunta sa paglipas na at kung ano ang mga ibig sabihin? 142 00:06:42,980 --> 00:06:43,880 Itaas ang iyong kamay kung - 143 00:06:43,880 --> 00:06:44,420 OK. 144 00:06:44,420 --> 00:06:45,120 Salamat sa inyo. 145 00:06:45,120 --> 00:06:48,420 Kaya kami ay pagpunta sa pumunta sa ibabaw ng stack at ang magbunton talagang mabilis at pagkatapos ay 146 00:06:48,420 --> 00:06:50,370 ilipat sa pagsagot sa iyong katanungan. 147 00:06:50,370 --> 00:06:58,250 >> Kaya kung gumuhit namin ang isang kahon upang kumatawan memorya sa iyong computer, kung ano ang ilang mga 148 00:06:58,250 --> 00:07:02,160 mga bagay na pumunta sa kahon na ito? 149 00:07:02,160 --> 00:07:03,630 Main. 150 00:07:03,630 --> 00:07:04,020 Ang isang pangunahing pag-andar. 151 00:07:04,020 --> 00:07:05,890 Saan ang pangunahing pumunta? 152 00:07:05,890 --> 00:07:08,090 >> AARAL: [hindi marinig]. 153 00:07:08,090 --> 00:07:09,390 >> Jason HIRSCHHORN: Kaya kami ay ilagay pangunahing pababa dito. 154 00:07:09,390 --> 00:07:12,180 155 00:07:12,180 --> 00:07:13,430 Ano pa ang napupunta sa kahon na ito? 156 00:07:13,430 --> 00:07:16,000 157 00:07:16,000 --> 00:07:18,140 >> AARAL: Ang function na tawagan ka. 158 00:07:18,140 --> 00:07:19,020 >> Jason HIRSCHHORN: Ang mga pag-andar na tinatawag naming. 159 00:07:19,020 --> 00:07:20,440 At kung saan gumagana ang mga ito pumunta? 160 00:07:20,440 --> 00:07:21,300 >> AARAL: Sa stack. 161 00:07:21,300 --> 00:07:22,380 >> Jason HIRSCHHORN: Sila pumunta sa stack. 162 00:07:22,380 --> 00:07:27,350 Kaya kami ay pagpunta sa tumawag ito bagay down na dito ng stack. 163 00:07:27,350 --> 00:07:31,880 At hanggang tuktok, mayroon kaming ang magbunton. 164 00:07:31,880 --> 00:07:35,450 Kaya memorya ay hindi isang kahon tulad nito lamang. 165 00:07:35,450 --> 00:07:37,330 Ngunit ito ay talagang kaakit-akit na katulad. 166 00:07:37,330 --> 00:07:40,840 Ito ay pagpunta sa maging ng maraming mga kahon sa ibabaw at mahigit, depende sa kung gaano kalaki ang iyong 167 00:07:40,840 --> 00:07:43,730 computer ay o kung gaano kalaki ang iyong memorya ay. 168 00:07:43,730 --> 00:07:46,950 >> Sa quote-magpanipi "ilalim" ay ang stack. 169 00:07:46,950 --> 00:07:50,880 At mayroong maramihang bagay na pumunta sa stack. 170 00:07:50,880 --> 00:07:53,840 At iyon ay nakadepende sa mga function mayroon ka sa iyong code. 171 00:07:53,840 --> 00:07:57,780 Palagi kang magkaroon ng isa pag-andar sa iyong code na tinatawag na main, kaya walang palaging isang 172 00:07:57,780 --> 00:08:00,480 seksyon down na dito sa stack na nakatuon sa pangunahing. 173 00:08:00,480 --> 00:08:03,980 >> Ang mga bahagi sa stack ay tinatawag na stack na frame. 174 00:08:03,980 --> 00:08:09,580 Kapag tumawag ka ng isa pang function, sabihin pangunahing tawag ng binary function ng paghahanap, 175 00:08:09,580 --> 00:08:11,075 ilalagay namin ng isa pang frame sa stack. 176 00:08:11,075 --> 00:08:13,830 177 00:08:13,830 --> 00:08:17,320 Mas partikular, kami ay pagpunta sa mag-abuloy ang isang tipak ng memory sa aming 178 00:08:17,320 --> 00:08:22,960 computer upang mag-imbak ng binary paghahanap ng lokal na mga variable at upang patakbuhin ang binary 179 00:08:22,960 --> 00:08:24,150 code ng paghahanap. 180 00:08:24,150 --> 00:08:26,810 >> Kaya tinatawag naming binary paghahanap. 181 00:08:26,810 --> 00:08:30,440 182 00:08:30,440 --> 00:08:33,340 Sa ganitong tipak ng memory, kami ay pagpunta mag-imbak nito lokal na variable. 183 00:08:33,340 --> 00:08:35,270 Kami ay pagpunta sa mag-imbak ng printf tawag nito. 184 00:08:35,270 --> 00:08:38,159 Anuman ang mangyayari, na function ay pagpunta sa ma-imbak doon. 185 00:08:38,159 --> 00:08:40,350 Binary paghahanap ay pagpunta sa execute. 186 00:08:40,350 --> 00:08:42,210 Ito ay pagpunta upang makumpleto ang pagpapatupad. 187 00:08:42,210 --> 00:08:47,450 Ano ang salita sa C na Sumisimbolo na isang function dapat 188 00:08:47,450 --> 00:08:49,306 kumpletuhin ang pagpapatupad nito? 189 00:08:49,306 --> 00:08:50,040 >> AARAL: Return. 190 00:08:50,040 --> 00:08:50,870 >> Jason HIRSCHHORN: Bumalik. 191 00:08:50,870 --> 00:08:53,230 Kaya kapag nakita mo sa isang pabalik na pahayag, natapos na ang pag-andar 192 00:08:53,230 --> 00:08:54,350 kapag ito hit na iyon. 193 00:08:54,350 --> 00:08:56,740 Ay pindutin Kaya binary paghahanap balik nito. 194 00:08:56,740 --> 00:09:01,360 Ito bahagi ng memorya habilin talaga ay napalaya up. 195 00:09:01,360 --> 00:09:03,510 At pangunahing ay bumalik sa execution. 196 00:09:03,510 --> 00:09:07,240 Kaya pangunahing ipo-pause kung saan man ay, tawag binary paghahanap, makakuha ng ilang halaga return, 197 00:09:07,240 --> 00:09:08,700 at magpatuloy ng execution. 198 00:09:08,700 --> 00:09:10,840 Ito stack frame ay mapupunta ang layo. 199 00:09:10,840 --> 00:09:14,810 >> Kung tinatawag naming isang recursive function, kung saan ay isang pagpapaandar na tawag mismo sa ibabaw 200 00:09:14,810 --> 00:09:18,480 at higit sa, maaari naming makakuha ng - sabihin namin May ginawang binary paghahanap recursively. 201 00:09:18,480 --> 00:09:21,520 Maaari naming makakuha ng binary bersyon ng paghahanap ng isa, binary paghahanap ng dalawa, binary paghahanap 202 00:09:21,520 --> 00:09:24,090 tatlo, binary paghahanap apat, binary paghahanap limang. 203 00:09:24,090 --> 00:09:27,950 At pagkatapos ay ang panghuling binary paghahanap limang ay pindutin ang batayang kaso, at ng stack 204 00:09:27,950 --> 00:09:31,010 mga frame ay bumalik at panatilihin ang pagsasara hanggang sa makuha namin pabalik sa pangunahing. 205 00:09:31,010 --> 00:09:32,530 Maaari naming pumunta sa paglipas ng recursion sa isang bit. 206 00:09:32,530 --> 00:09:35,530 Ngunit ang lahat ng ito ay upang sabihin, kung ikaw ay pagtawag sa maramihang mga pag-andar sa isang pagkakataon, 207 00:09:35,530 --> 00:09:39,250 Makikita mayroong maramihang mga stack mga frame sa stack. 208 00:09:39,250 --> 00:09:42,900 >> Magbunton Ang, sa kabilang banda, hanggang dito, ay hindi para sa mga pag-andar, 209 00:09:42,900 --> 00:09:44,380 hindi para sa lokal na mga variable. 210 00:09:44,380 --> 00:09:48,920 Ito ay para sa mga magilas na inilaan mga variable. 211 00:09:48,920 --> 00:09:57,210 Kaya ito ay mga variable na maaari maging nasimulan sa alinman sa pangunahing o isang 212 00:09:57,210 --> 00:09:58,640 gumana na pangunahing mga tawag. 213 00:09:58,640 --> 00:10:00,790 Saanman sa iyong code, ang mga ito maaaring i-initialize. 214 00:10:00,790 --> 00:10:04,360 At ang pagsisimula ng isang pabagu-bagong inilalaan variable. 215 00:10:04,360 --> 00:10:06,970 Ano ang function sa C huwag naming gamitin? 216 00:10:06,970 --> 00:10:07,600 >> AARAL: Malloc. 217 00:10:07,600 --> 00:10:09,240 >> Jason HIRSCHHORN: Malloc. 218 00:10:09,240 --> 00:10:10,800 Tawagan mo malloc. 219 00:10:10,800 --> 00:10:12,260 Nakakuha ka ng puwang ng memory. 220 00:10:12,260 --> 00:10:15,020 At na puwang ng memory ay nasa magbunton. 221 00:10:15,020 --> 00:10:18,840 At na puwang ng memory ay mananatiling doon hanggang tawagan ka libre. 222 00:10:18,840 --> 00:10:22,670 >> Kaya dynamic na inilalaan variable sa magbunton ay umiiral para sa hangga't ka 223 00:10:22,670 --> 00:10:25,250 gusto ang mga ito sa umiiral, at sila ay hindi pumunta ang layo ng hanggang sa tahasan 224 00:10:25,250 --> 00:10:26,760 sabihin sa kanila upang pumunta ang layo. 225 00:10:26,760 --> 00:10:29,670 Maaari kang lumikha ng mga ito sa isang function. 226 00:10:29,670 --> 00:10:31,930 Stack na pag-andar ng frame ay mapupunta ang layo. 227 00:10:31,930 --> 00:10:35,490 Ngunit ay Umiiral pa rin ang variable na sa kimpal hangga't ito ay napalaya, 228 00:10:35,490 --> 00:10:39,650 potensyal na sa pamamagitan ng pag-andar na tinatawag na binary paghahanap o kahit anong. 229 00:10:39,650 --> 00:10:42,580 >> Kaya mga kimpal variable manatili doon para sa hangga't gusto mo 230 00:10:42,580 --> 00:10:43,490 ang mga ito upang manatili doon. 231 00:10:43,490 --> 00:10:46,090 At sila makakuha ng ilagay dito. 232 00:10:46,090 --> 00:10:47,450 At pagkatapos ay ang susunod na isa ay makakakuha ng ilagay doon. 233 00:10:47,450 --> 00:10:50,210 Panatilihin ang mga ito ay nagsisimula pa napunan, at sila manatili doon hanggang tawagan ka libre. 234 00:10:50,210 --> 00:10:52,870 >> At totoo, ang magbunton at ng stack, pagkuha sa tanong Marcus ni, 235 00:10:52,870 --> 00:10:54,500 lumaki patungo sa isa't isa. 236 00:10:54,500 --> 00:10:57,730 At kung sila ay magkaroon ng isa sa isa pa, ikaw ginagamit nito ang lahat ng memorya sa iyong 237 00:10:57,730 --> 00:11:01,330 computer, at ang iyong programa ay huminto dahil wala kang anumang higit pang memory 238 00:11:01,330 --> 00:11:02,420 ang natitira upang gamitin. 239 00:11:02,420 --> 00:11:07,290 Sa pagitan ng mga ito, may mga potensyal na iba pang mga bagay. 240 00:11:07,290 --> 00:11:10,980 Ngunit para sa saklaw ng kursong ito, mo Hindi kailangang mag-alala tungkol sa na. 241 00:11:10,980 --> 00:11:12,020 >> Kaya na ay ang kasagutan sa iyong katanungan. 242 00:11:12,020 --> 00:11:13,520 Huwag ninyong alalahanin ito. 243 00:11:13,520 --> 00:11:15,550 Ngunit iyon ay ang mahabang sagot. 244 00:11:15,550 --> 00:11:17,800 Lahat ng kailangan mong malaman ay ang magbunton at ng stack habilin - 245 00:11:17,800 --> 00:11:18,900 isa ay nagsisimula sa ibaba. 246 00:11:18,900 --> 00:11:19,570 Stack ang ginagawa. 247 00:11:19,570 --> 00:11:20,790 Magbunton Ang ang bahala doon. 248 00:11:20,790 --> 00:11:21,990 Sila ay lumago mas malapit sa isa't isa. 249 00:11:21,990 --> 00:11:23,110 >> At kung hawakan nila, na problema. 250 00:11:23,110 --> 00:11:24,500 Pinatatakbo ka na ng memory. 251 00:11:24,500 --> 00:11:28,760 Ngunit din, bilang karagdagan sa pag-alam kung saan ang mga ito ay, kung ano ay naka-imbak sa parehong 252 00:11:28,760 --> 00:11:30,512 stack at magbunton. 253 00:11:30,512 --> 00:11:31,410 Curtis. 254 00:11:31,410 --> 00:11:33,570 >> Curtis: Kapag mabangga nila, ay na ang isang stack overflow? 255 00:11:33,570 --> 00:11:35,670 >> Jason HIRSCHHORN: Kapag mabangga nila, hindi iyon stack overflow. 256 00:11:35,670 --> 00:11:38,340 Ang isang stack overflow ay isang iba't ibang mga lugar na maaari naming pumunta sa ibabaw kung nais mong. 257 00:11:38,340 --> 00:11:40,020 OK, magpapadala kami ay bumalik sa na sa ilang saglit. 258 00:11:40,020 --> 00:11:42,730 >> AARAL: Ano ang salita na tinatawag na kapag hit nila sa isa't isa, ang 259 00:11:42,730 --> 00:11:44,450 stack at ang kimpal? 260 00:11:44,450 --> 00:11:46,640 >> Jason HIRSCHHORN: Para sa ngayon, huwag mag-alala tungkol sa. 261 00:11:46,640 --> 00:11:47,750 Alam lang - 262 00:11:47,750 --> 00:11:50,530 Ako ay sagutin na tanong pagkatapos ng klase. 263 00:11:50,530 --> 00:11:52,680 Kung sila tumakbo papunta sa bawat isa, ang bumangga out ka ng memorya, dahil walang higit pa 264 00:11:52,680 --> 00:11:53,330 espasyo doon. 265 00:11:53,330 --> 00:11:55,450 >> AARAL: Paumanhin, kung ano ang isang seg fault? 266 00:11:55,450 --> 00:11:58,710 >> Jason HIRSCHHORN: Isang segment Kasalanan maaaring tinatawag na para sa - 267 00:11:58,710 --> 00:12:02,240 Depende ito sa kung bakit tinatawag na ang kasalanan ni seg. 268 00:12:02,240 --> 00:12:06,260 Minsan, ang iyong stack overflow, ipapakita ito sabihin seg kapintasan bilang ang error. 269 00:12:06,260 --> 00:12:08,180 >> AARAL: Ano ang tungkol sa dereferencing isang null variable? 270 00:12:08,180 --> 00:12:10,040 Iyan ba ay seg fault? 271 00:12:10,040 --> 00:12:11,480 >> Jason HIRSCHHORN: Dereferencing isang null pointer - 272 00:12:11,480 --> 00:12:17,850 OK, kaya kung mayroon kang isang pointer na sa iyo itakda ang katumbas ng null, mga payo, pagpapabalik, 273 00:12:17,850 --> 00:12:20,270 tindahan ng memory address bilang kanilang mga halaga. 274 00:12:20,270 --> 00:12:23,660 At isang null pointer ay mahalagang pag-iimbak ng 0, ang ika-0 275 00:12:23,660 --> 00:12:26,670 tugunan sa variable na iyon. 276 00:12:26,670 --> 00:12:30,010 Kaya 0x, 0, 0, 0, 0, at iba pa. 277 00:12:30,010 --> 00:12:35,030 Ika-0 na address sa memory hindi iyon sa ating larawan, na ang bahala doon 278 00:12:35,030 --> 00:12:38,800 sa isang lugar, na nakalaan para sa mga computer. 279 00:12:38,800 --> 00:12:40,130 Hindi namin pinapayagan na hawakan ito. 280 00:12:40,130 --> 00:12:44,680 >> Kaya kapag ang iyong programa ay execute, kung isang bagay ay sinusubukan upang pumunta sa memory 281 00:12:44,680 --> 00:12:48,990 address 0, alam nito na na ay isang walang laman na halaga. 282 00:12:48,990 --> 00:12:50,820 Alam ito ng walang dapat na doon. 283 00:12:50,820 --> 00:12:53,420 Kaya kung susubukan mo at gamitin ang isang bagay doon at ituturing ng isang bagay tulad ng doon o 284 00:12:53,420 --> 00:12:58,355 sinusubukan upang pumunta sa lokasyon na iyon, handa ka pagpunta upang makakuha ng isang seg fault o isang error. 285 00:12:58,355 --> 00:13:00,520 Na sagutin ang iyong tanong? 286 00:13:00,520 --> 00:13:03,170 >> At ngayon, ipapakita namin bumalik pagpatung-patungin ang mga overflow. 287 00:13:03,170 --> 00:13:09,560 Mga bagay sa stack, pati na mayroon kang guys nakita bago, sa - gumuhit ng isang malapit na ipaalam 288 00:13:09,560 --> 00:13:11,966 up ng isang stack frame. 289 00:13:11,966 --> 00:13:15,050 Maaari ba lahat ng tao makita na? 290 00:13:15,050 --> 00:13:16,650 Kaya mayroon kaming ang aming stack frame. 291 00:13:16,650 --> 00:13:23,260 Kami ay pag-save ng isang array in bilang isang lokal na variable sa ito function. 292 00:13:23,260 --> 00:13:29,510 Kaya sabihin sa aming mga array ay may limang mga spot. 293 00:13:29,510 --> 00:13:33,230 Ang lahat ng limang ng mga maiimbak sa na stack na frame. 294 00:13:33,230 --> 00:13:37,540 >> Kung magsimulang namin sa pagsusulat ng lagpas sa hanggahan ng array na ito - 295 00:13:37,540 --> 00:13:43,990 kaya kung sisimulan namin ang pagsusulat sa, sabihin nating na 0. 296 00:13:43,990 --> 00:13:46,800 Iyon ang mga ini-index ng limang sa aming mga array. 297 00:13:46,800 --> 00:13:50,980 Kung magsimulang namin sa pagsusulat sa index 5, na wala kaming kapag mayroon kaming isang 298 00:13:50,980 --> 00:13:55,900 na hanay ng mga sukat 5, magsisimulang namin sa pagsusulat sa index ng 6, 7, 8, 9, kami ay maaaring makakuha ng isang Stack 299 00:13:55,900 --> 00:13:57,960 Overflow error. 300 00:13:57,960 --> 00:14:00,510 >> Sa pangkalahatan hindi ito - 301 00:14:00,510 --> 00:14:04,910 makikita mo marahil makakuha ng sa pag- kung kang pumunta sa ibabaw ng isa. 302 00:14:04,910 --> 00:14:08,640 Ngunit sa pangkalahatan, makakakuha ka ng sa karamihan ng problema kung kang pumunta sa paglipas ng sa pamamagitan ng isang pulutong 303 00:14:08,640 --> 00:14:12,770 at pumunta ka sa ngayon sa paglipas na sinulat mo sa ibabaw ng return address ng na 304 00:14:12,770 --> 00:14:16,080 function, na kung saan ay matatagpuan sa ilalim ng stack na frame. 305 00:14:16,080 --> 00:14:16,520 >> Dahil, tama? 306 00:14:16,520 --> 00:14:17,670 Ikaw - sa - paumanhin. 307 00:14:17,670 --> 00:14:18,550 Hindi "dahil karapatan." 308 00:14:18,550 --> 00:14:20,470 >> Sa stack frame, mayroon kang iyong lokal na variable. 309 00:14:20,470 --> 00:14:27,090 Sa pinakailalim ng stack frame ay ang return address. 310 00:14:27,090 --> 00:14:28,790 Iyon ay kung saan ang function napupunta kapag ito ay mahigit. 311 00:14:28,790 --> 00:14:33,750 At kung ikaw patungan balik na address, pagkatapos ay kapag ito stack frame, 312 00:14:33,750 --> 00:14:36,680 kapag tapos ka ng pagpunta sa pamamagitan ng stack -frame at pagpapatupad sa bawat linya, ikaw ay 313 00:14:36,680 --> 00:14:40,350 pagpunta upang pumunta sa iyong bagong tirahan na nakasulat doon sa halip na ang 314 00:14:40,350 --> 00:14:40,910 aktwal na isa. 315 00:14:40,910 --> 00:14:45,050 At na kung paano namin nakita ilang mga breaches seguridad 316 00:14:45,050 --> 00:14:46,780 Maaari itong mangyari sa mga computer. 317 00:14:46,780 --> 00:14:52,760 >> Kaya stack overflow, sa maikling salita, ay kapag mong patungan ang mga bahagi sa stack 318 00:14:52,760 --> 00:14:55,440 naka-dapat upang gamitin, ang mga lokal na variable na naka-dapat upang gamitin, at 319 00:14:55,440 --> 00:14:58,070 sa partikular na kapag nagsimula ka Sasapawan nito mahalagang bagay tulad ng 320 00:14:58,070 --> 00:14:59,100 bumalik address. 321 00:14:59,100 --> 00:15:00,090 At na kung saan makakakuha ka ng isang error. 322 00:15:00,090 --> 00:15:03,980 O siguro kahit na maaari mong simulan kahit pagsusulat sa - 323 00:15:03,980 --> 00:15:05,370 sabihin binary paghahanap ay kanang itaas pangunahing. 324 00:15:05,370 --> 00:15:07,790 Kung sinulatan papatong sa iyo ng maraming, mo makakasulat sa pangunahing. 325 00:15:07,790 --> 00:15:10,230 Ngunit sa pangkalahatan, makakakuha ka ng isang error bago pagkatapos, dahil alam ng computer na 326 00:15:10,230 --> 00:15:12,270 ikaw ay gumagawa ka ng isang bagay hindi dapat ginagawa. 327 00:15:12,270 --> 00:15:12,560 Oo. 328 00:15:12,560 --> 00:15:13,910 >> AARAL: Ano ang pagkakaiba sa sa pagitan ng isang stack overflow 329 00:15:13,910 --> 00:15:16,940 at isang buffer overflow? 330 00:15:16,940 --> 00:15:19,420 >> Jason HIRSCHHORN: Buffer overflow ay isang mas generic na uri ng 331 00:15:19,420 --> 00:15:20,395 ano na lang Inilarawan ko. 332 00:15:20,395 --> 00:15:22,610 >> AARAL: Kaya isang stack overflow ay isang halimbawa ng isang buffer overflow. 333 00:15:22,610 --> 00:15:23,420 >> Jason HIRSCHHORN: Mismong. 334 00:15:23,420 --> 00:15:28,700 Ito ay isang array maaari naming isipin bilang isang nagpapahina ng lakas, ng isang puwang para sa mga bagay upang pumunta in 335 00:15:28,700 --> 00:15:30,600 Ito ay isang stack buffer overflow. 336 00:15:30,600 --> 00:15:33,210 Maaari naming magkaroon ng isang kimpal buffer overflow. 337 00:15:33,210 --> 00:15:36,870 Kung nagkaroon ng buffer, na madalas doon ay isang array ang magbunton, at kami 338 00:15:36,870 --> 00:15:40,600 sinulatan papatong sa mga hanggahan, pagkatapos kami ay magkaroon ng isang kimpal buffer overflow. 339 00:15:40,600 --> 00:15:44,870 >> At hindi na saklaw ng kursong ito, sila ay nakita ng isang bit naiiba. 340 00:15:44,870 --> 00:15:48,040 Tagatala ay may espesyal na paraan ng pag-detect sa bawat isa. 341 00:15:48,040 --> 00:15:50,660 Ngunit isang buffer overflow ay isang mas generic uri ng kung ano ang aking inilarawan, 342 00:15:50,660 --> 00:15:54,090 na kung saan ay isang stack buffer overflow. 343 00:15:54,090 --> 00:15:56,240 Ang ibig na sagutin ang iyong tanong? 344 00:15:56,240 --> 00:15:57,910 Sweet. 345 00:15:57,910 --> 00:16:01,850 >> Nagawa Mayroon bang anumang iba pang mga tanong kaugnay na sa stack o ang kimpal? 346 00:16:01,850 --> 00:16:04,920 347 00:16:04,920 --> 00:16:05,510 Oo. 348 00:16:05,510 --> 00:16:08,220 >> AARAL: Alam ko mayroon kang upang libreng mga string dahil hindi nila sa magbunton 349 00:16:08,220 --> 00:16:09,305 at hindi mo nais na tumagas memory. 350 00:16:09,305 --> 00:16:12,240 Ngunit ang mayroon ka sa libreng mga pangkalahatang variable at bagay-bagay tulad na? 351 00:16:12,240 --> 00:16:14,335 O kaya ay awtomatikong sila napalaya? 352 00:16:14,335 --> 00:16:15,700 >> Jason HIRSCHHORN: Magandang katanungan. 353 00:16:15,700 --> 00:16:22,340 Kaya sa CS50.H, lumikha namin ang bagay na ito para sa tinatawag na isang string. 354 00:16:22,340 --> 00:16:23,800 Ang isang string ay talagang kung ano? 355 00:16:23,800 --> 00:16:24,810 >> AARAL: pansamantalang trabaho bituin. 356 00:16:24,810 --> 00:16:29,180 >> Jason HIRSCHHORN: Ang isang pansamantalang trabaho bituin, isang pointer sa isang character, isang pointer sa 357 00:16:29,180 --> 00:16:30,650 isang array ng mga character. 358 00:16:30,650 --> 00:16:32,210 Iyon ay kung ano ang string ay. 359 00:16:32,210 --> 00:16:36,050 Kaya kailangan namin upang palayain ito, dahil getstring, na ginamit namin ng maraming - 360 00:16:36,050 --> 00:16:38,370 string pangalan ay katumbas ng getstring - 361 00:16:38,370 --> 00:16:43,560 na mallocs para sa amin ng ilang memory sa magbunton at pagkatapos ay bumalik sa isang pointer sa 362 00:16:43,560 --> 00:16:47,230 unang character ng na string, isang pansamantalang trabaho bituin. 363 00:16:47,230 --> 00:16:52,760 >> Kaya para baga, kung hindi mo pa naging pagsusulat ng libreng sa anuman sa iyong mga string 364 00:16:52,760 --> 00:16:55,600 na iyong na tinatawag na sa ngayon, mayroon kang Na-pagtulo ng ilang mga memorya. 365 00:16:55,600 --> 00:16:57,430 Siyempre hindi pa namin usapan tungkol sa ito, kaya walang sinuman ay nakuha sa 366 00:16:57,430 --> 00:16:58,520 pag para sa paggawa nito. 367 00:16:58,520 --> 00:16:59,980 Ngunit pasulong, oo. 368 00:16:59,980 --> 00:17:03,990 Kapag tumawag ka getstring, handa ka mallocing ilang espasyo sa magbunton. 369 00:17:03,990 --> 00:17:07,640 At kung hindi mo tawagan ang libreng mamaya sa na string, mayroon kang isang tumagas memory. 370 00:17:07,640 --> 00:17:09,440 Iyon sagutin ang iyong katanungan? 371 00:17:09,440 --> 00:17:10,606 >> Oo 372 00:17:10,606 --> 00:17:15,020 >> AARAL: Kaya't upang gawin iyon, huwag ginagamit namin libreng kanan bago balik? 373 00:17:15,020 --> 00:17:18,510 Tulad ng, sa loob ng saklaw ng, hulaan ko kung sabihin namin, tulad ng, int main, sa loob ng 374 00:17:18,510 --> 00:17:24,410 saklaw ng code na sa loob ng mga kulot tirante, bago mismo - 375 00:17:24,410 --> 00:17:26,140 mo alam kung saan ikaw ay karaniwang ilagay return. 376 00:17:26,140 --> 00:17:27,950 Huwag ilagay mo libreng bago na? 377 00:17:27,950 --> 00:17:31,000 >> Jason HIRSCHHORN: Kaya maaari kang maglagay ng libreng kahit saan mo nais na ilagay libre. 378 00:17:31,000 --> 00:17:33,810 Dahil ang mga ito ay dynamic na inilalaan variable, dahil maaari nilang 379 00:17:33,810 --> 00:17:39,170 mabuhay na hindi na saklaw ng isang partikular na function, kung tawagan ka malloc sa isang 380 00:17:39,170 --> 00:17:44,140 hiwalay na function, halimbawa, getstring, maaari mong tawagin libre sa pangunahing. 381 00:17:44,140 --> 00:17:46,050 Hindi mo kailangang tumawag ito sa mga partikular na function na 382 00:17:46,050 --> 00:17:47,570 kung saan malloc ay tinatawag na. 383 00:17:47,570 --> 00:17:50,340 Ngunit mo kailangang tumawag ito bago pangunahing babalik. 384 00:17:50,340 --> 00:17:51,120 >> At ito ay talagang dumedepende. 385 00:17:51,120 --> 00:17:54,960 Depende ito sa kung bakit mo malloced na puwang sa simula pa lamang. 386 00:17:54,960 --> 00:17:57,320 Ang ilang mga tao ay tumawag sa palayain medyo mabilis. 387 00:17:57,320 --> 00:17:59,220 Hindi Tatawagan libreng ilang tao hanggang ang katapusan ng kanilang programa. 388 00:17:59,220 --> 00:18:00,660 At ang mga ito pumunta sa pamamagitan ng at libre ang lahat. 389 00:18:00,660 --> 00:18:03,597 Depende ito sa kung bakit tinawag mo malloc. 390 00:18:03,597 --> 00:18:11,270 >> AARAL: At kung ano ang sasabihin sa iyo kung tinatawag mo paggamit getstring? 391 00:18:11,270 --> 00:18:13,320 Gusto mo sabihin libreng ano? 392 00:18:13,320 --> 00:18:20,040 >> Jason HIRSCHHORN: Kaya ang syntax para sa libreng ay simpleng libre, open paren, malapit 393 00:18:20,040 --> 00:18:22,130 paren, at ang pangalan ng pointer. 394 00:18:22,130 --> 00:18:26,410 Kaya kung sumulat ka ng pangalan ng string ay katumbas ng getstring, ilagay mo ang pangalan ng in dito. 395 00:18:26,410 --> 00:18:27,760 Iyon ang pangalan ng pointer. 396 00:18:27,760 --> 00:18:30,570 At alam ito sa libreng na memorya. 397 00:18:30,570 --> 00:18:33,920 >> AARAL: Kaya kapag pinakakawalan nito isang na memorya, ang pointer tumuturo pa rin sa lugar na iyon 398 00:18:33,920 --> 00:18:34,970 sa memory? 399 00:18:34,970 --> 00:18:39,020 O kaya ay ang pointer emptied din ng ang address na ito nagtuturo sa. 400 00:18:39,020 --> 00:18:40,290 >> Jason HIRSCHHORN: Kami ay dapat na subukan na. 401 00:18:40,290 --> 00:18:41,430 Dapat nating code na iyon. 402 00:18:41,430 --> 00:18:43,880 Ng bumalik kapag makuha namin sa Hayaan coding, at sabihin code na iyon. 403 00:18:43,880 --> 00:18:46,000 At kung gusto mong malaman ang kasagutan sa na, maaari mo ring code na 404 00:18:46,000 --> 00:18:46,690 sa habang panahon. 405 00:18:46,690 --> 00:18:49,100 Ngunit iyon lamang ang isang mahusay na tanong. 406 00:18:49,100 --> 00:18:53,480 >> AARAL: Posible bang libreng isang bagay masyadong sa lalong madaling panahon? 407 00:18:53,480 --> 00:18:58,530 Kaya ito kailangan mo pa rin para sa iyong programa, at napalaya ka na puwang ng memory? 408 00:18:58,530 --> 00:18:59,200 >> Jason HIRSCHHORN: Oo. 409 00:18:59,200 --> 00:19:03,020 Posible, kung libre ka ng isang bagay at pagkatapos nito mong gamitin muli, ay sa iyo 410 00:19:03,020 --> 00:19:06,890 tumakbo sa isang error. 411 00:19:06,890 --> 00:19:10,810 Ngunit iyon sa iyo, dahil napalaya mo isang bagay at pagkatapos ay tinatawag na ito sa ibang pagkakataon. 412 00:19:10,810 --> 00:19:13,940 Kaya na ay hindi sinasadya ng isang programmer ni. 413 00:19:13,940 --> 00:19:14,780 Ngunit oo. 414 00:19:14,780 --> 00:19:17,760 Maaari kang magsulat na. 415 00:19:17,760 --> 00:19:19,240 >> Anumang higit pang mga tanong sa - 416 00:19:19,240 --> 00:19:19,760 Oo. 417 00:19:19,760 --> 00:19:22,820 >> AARAL: Kaya kung ikaw ay dapat lamang palayain ito sa pangkalahatan bago ang 418 00:19:22,820 --> 00:19:25,490 Nagtatapos ang programa, ang ibig sabihin na kung ang Nagtatapos ang programa at hindi mo na palayain ito, 419 00:19:25,490 --> 00:19:27,580 na memorya ay inilalaan pa rin? 420 00:19:27,580 --> 00:19:31,330 >> Jason HIRSCHHORN: Kung nagtatapos ang iyong mga programa at makalimutan mo upang palayain ang isang bagay, at pagkatapos ay 421 00:19:31,330 --> 00:19:34,390 na memorya ay inilalaan sa buong ang buhay ng iyong programa. 422 00:19:34,390 --> 00:19:37,670 Kapag ganap na nagsara ang programa, na memorya ay hindi papunta sa 423 00:19:37,670 --> 00:19:39,490 upang manatili doon magpakailanman. 424 00:19:39,490 --> 00:19:42,080 Ang computer na ay sapat na smart na malaman na kapag nagsara ang programa, 425 00:19:42,080 --> 00:19:46,440 dapat mapupuksa ang lahat ng memorya na ay nauugnay sa programang iyon. 426 00:19:46,440 --> 00:19:51,240 >> Subalit, may mga kagamitang maaari mong patakbuhin ang sa isang programa upang makita kung, kapag ang 427 00:19:51,240 --> 00:19:54,720 programa tapos na, nakalimutan upang palayain ang ilan sa memorya. 428 00:19:54,720 --> 00:19:57,960 At para sa iyong susunod na problema kung saan nakatakda ikaw ay gumagamit ng malloc at gamit 429 00:19:57,960 --> 00:20:02,610 mga payo, ikaw ay tumatakbo na ito programa sa iyong programa upang makita kung, 430 00:20:02,610 --> 00:20:06,530 kapag pangunahing pagbalik, nagkaroon ka ng ilang bagay na naiwan unfreed. 431 00:20:06,530 --> 00:20:09,130 >> Kaya hindi sila titira malloced magpakailanman sa iyong computer. 432 00:20:09,130 --> 00:20:11,720 Iyon ay magiging bulagsak, dahil masyadong mabilis, mga computer 433 00:20:11,720 --> 00:20:12,960 Gusto maubusan ng memorya. 434 00:20:12,960 --> 00:20:16,450 Ngunit kung tumakbo sila hanggang sa katapusan ng iyong programa at hindi ito ay naka-napalaya at ang iyong 435 00:20:16,450 --> 00:20:20,260 programa lumabas, na pa rin ng problema na ang tool na ito ay makakatulong sa matugunan mo. 436 00:20:20,260 --> 00:20:21,520 >> AARAL: Iyan ba Valgrind? 437 00:20:21,520 --> 00:20:22,910 >> Jason HIRSCHHORN: Ito ay tinatawag Valgrind. 438 00:20:22,910 --> 00:20:23,520 At makikita mo - 439 00:20:23,520 --> 00:20:25,780 >> AARAL: Ngunit kami Hindi mo na kailangang malaman na para sa mga pagsusulit, bagaman? 440 00:20:25,780 --> 00:20:27,600 Ibig kong sabihin, ito ay usapan tungkol sa Medyo sa panayam. 441 00:20:27,600 --> 00:20:33,600 >> Jason HIRSCHHORN: Kaya Valgrind ay ang pangalan ng tool na. 442 00:20:33,600 --> 00:20:37,180 Pag-alam kung ano ang gagawin nito ay sapat na para sa mga pagsusulit. 443 00:20:37,180 --> 00:20:40,200 Ngunit hindi ka pa ginamit ito sa iyong itakda ang problema dahil hindi namin ay may isang 444 00:20:40,200 --> 00:20:43,520 hanay problema na tahasang Aaksyunan may malloc o iyo gamit ang malloc. 445 00:20:43,520 --> 00:20:45,330 Kaya hindi mo pa ginamit Valgrind. 446 00:20:45,330 --> 00:20:47,760 Ngunit gagamitin mo ito nang mas maaga sa halip na sa ibang pagkakataon. 447 00:20:47,760 --> 00:20:48,710 >> AARAL: Maari mong ulitin ano Valgrind ay? 448 00:20:48,710 --> 00:20:49,190 >> Jason HIRSCHHORN: Paumanhin? 449 00:20:49,190 --> 00:20:51,240 >> AARAL: Maari mong ulitin kung ano sa layunin ng Valgring ay? 450 00:20:51,240 --> 00:20:53,100 >> Jason HIRSCHHORN: Valgrind ay ang pangalan - 451 00:20:53,100 --> 00:20:59,890 tulad ng GDB ay tumutulong sa i-debug mo ang iyong programa, Valgrind tumutulong kang malaman kung 452 00:20:59,890 --> 00:21:03,210 mga bagay ay hindi nai-napalaya kapag nagsara ang programa. 453 00:21:03,210 --> 00:21:05,110 Kaya makikita mo patakbuhin ito sa iyong mga programa. 454 00:21:05,110 --> 00:21:09,230 At iyong programa lumabas, at sasabihin nito sabihin ang iyong programa na tinatawag na malloc ganito karaming 455 00:21:09,230 --> 00:21:13,670 beses para sa ganito karaming bytes, at mo tinatawag lamang libreng ito maraming beses. 456 00:21:13,670 --> 00:21:16,520 At kaya iniwan mo ang mga maraming mga byte nang hindi napalaya. 457 00:21:16,520 --> 00:21:18,050 O kaya makikita ito sabihin mo na napalaya ang lahat. 458 00:21:18,050 --> 00:21:19,070 Magandang trabaho. 459 00:21:19,070 --> 00:21:19,480 >> AARAL: OK. 460 00:21:19,480 --> 00:21:21,060 At ang tawag dito 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 >> AARAL: Ang isang tanong tungkol sa mga payo. 463 00:21:25,970 --> 00:21:30,080 Kaya sabihin n mo pa lagyan ng star x ay katumbas ng isang bagay. 464 00:21:30,080 --> 00:21:33,330 Iyon ay katumbas ng, ang kahit anong naglalagay ka ng doon, ay na kung ano ang ilalagay sa loob 465 00:21:33,330 --> 00:21:36,120 ano ang x ay tumuturo sa, o ang pointer ng x? 466 00:21:36,120 --> 00:21:37,690 >> Jason HIRSCHHORN: Maari bang ma-mo ulitin ang mga katanungan? 467 00:21:37,690 --> 00:21:39,340 Puwede ba kaming gumuhit ito habang ito sabihin sa iyo? 468 00:21:39,340 --> 00:21:42,710 >> AARAL: Sa pagsusulit, talaga, ang isa na ipinadala mo sa amin, ito ay tulad ng, pansamantalang trabaho 469 00:21:42,710 --> 00:21:46,520 star katotohanan ay katumbas ng CS50 mga bato, tama? 470 00:21:46,520 --> 00:21:52,190 Kaya ang ibig sabihin na na na CS50 bato ay kung ano ang katotohanan ay tumuturo sa? 471 00:21:52,190 --> 00:21:55,810 >> Jason HIRSCHHORN: Kaya mo pinag-uusapan tungkol sa isang pansamantalang trabaho star sa isang string, kung paano 472 00:21:55,810 --> 00:21:56,460 na gumagana? 473 00:21:56,460 --> 00:21:56,890 Oo. 474 00:21:56,890 --> 00:21:57,700 OK. 475 00:21:57,700 --> 00:21:59,140 Ni gumuhit ito sa paglipas dito Hayaan. 476 00:21:59,140 --> 00:22:07,100 >> [Side-uusap] 477 00:22:07,100 --> 00:22:11,130 >> Jason HIRSCHHORN: Kaya ito variable ay magiging ng uri ng pansamantalang trabaho bituin. 478 00:22:11,130 --> 00:22:14,580 Paano malaki ay isang variable ng uri ng pansamantalang trabaho star? 479 00:22:14,580 --> 00:22:15,510 Gaano karaming bytes? 480 00:22:15,510 --> 00:22:16,450 >> ESTUDYANTE: Apat. 481 00:22:16,450 --> 00:22:18,210 >> Jason HIRSCHHORN: Ito ay apat na bytes. 482 00:22:18,210 --> 00:22:21,420 Gaano karaming mga karapatan ay isang variable ng uri int star? 483 00:22:21,420 --> 00:22:22,210 >> ESTUDYANTE: Apat. 484 00:22:22,210 --> 00:22:24,910 >> Jason HIRSCHHORN: Apat na bytes. 485 00:22:24,910 --> 00:22:28,280 Kung ito ay isang pointer, kung gayon ito ay palaging apat na bytes, dahil sa mga paalala, ang kanilang 486 00:22:28,280 --> 00:22:30,070 halaga ay isang memory address. 487 00:22:30,070 --> 00:22:35,160 At memory address sa CS50 appliance apat na bytes mahaba. 488 00:22:35,160 --> 00:22:42,900 Kaya kapag tinatawag naming getstring, o kapag kami sabihin nating, stringname katumbas, at pagkatapos ay sa 489 00:22:42,900 --> 00:22:46,140 double quote maglagay ng string, ay paglalagay namin - 490 00:22:46,140 --> 00:22:46,920 na rin, na ang isang ilan naiiba. 491 00:22:46,920 --> 00:22:48,630 Susubukan naming huwag getstring bilang halimbawa. 492 00:22:48,630 --> 00:22:52,150 O kaya pansamantalang trabaho star ng isang bagay ay katumbas ng string. 493 00:22:52,150 --> 00:22:54,360 Paumanhin, bigyan mo ako ng halimbawa na iyong nabasa na? 494 00:22:54,360 --> 00:22:57,590 >> AARAL: pansamantalang trabaho star katotohanan ay katumbas ng "Cs50 mga bato" sa double quotes. 495 00:22:57,590 --> 00:23:02,260 >> Jason HIRSCHHORN: Kaya ng bituin na ito, ito Makikita kami tatawag sa x variable na ito para sa aming mga 496 00:23:02,260 --> 00:23:04,060 generic na mga layunin. 497 00:23:04,060 --> 00:23:05,970 Lumikha kami ng isang variable na tinatawag na x. 498 00:23:05,970 --> 00:23:07,610 Ito ay uri ng pansamantalang trabaho bituin. 499 00:23:07,610 --> 00:23:10,950 Ito ay isang pointer sa isang serye ng mga character. 500 00:23:10,950 --> 00:23:12,200 Kaya pababa dito - 501 00:23:12,200 --> 00:23:23,710 502 00:23:23,710 --> 00:23:25,890 >> Kaya ito ay kung paano ito gagawin magtrabaho sa memorya. 503 00:23:25,890 --> 00:23:27,410 Ito ay mag-imbak ng memory address. 504 00:23:27,410 --> 00:23:31,770 Ito-imbak sa memory address ng ang unang character sa array. 505 00:23:31,770 --> 00:23:33,830 At pagkatapos ay kapag ikaw ay sumunod ang pointer, gagawin mo 506 00:23:33,830 --> 00:23:35,200 makuha ang unang character. 507 00:23:35,200 --> 00:23:38,780 >> At kung binabasa mo ito bagay tulad ng isang string, ang iyong computer ay matalino 508 00:23:38,780 --> 00:23:42,930 sapat na malaman, basahin ang buong bagay hanggang sa ito ay nakakakuha sa isang sumasagot na hampas 0. 509 00:23:42,930 --> 00:23:45,530 Ngunit kung binabasa mo ito isang character sa isang oras, kaya ka iterating sa pamamagitan ng 510 00:23:45,530 --> 00:23:49,910 ang string na ito, pagkatapos ay mong basahin lamang ng isang na character sa isang panahon hanggang sa makuha mo upang 511 00:23:49,910 --> 00:23:50,850 backslash 0. 512 00:23:50,850 --> 00:23:52,335 Iyon ay maaaring sagutin ang iyong tanong, bagaman. 513 00:23:52,335 --> 00:23:55,610 >> AARAL: Oo, ngunit hindi mo pa malloced na espasyo 514 00:23:55,610 --> 00:23:58,400 pa para sa na pointer. 515 00:23:58,400 --> 00:24:02,510 >> Jason HIRSCHHORN: Kaya hindi ako masyadong sigurado eksakto kung ano ang hinahanap mo sa, 516 00:24:02,510 --> 00:24:03,640 dahil hindi ako gumawa na pagsusulit. 517 00:24:03,640 --> 00:24:06,370 Iyon ay dapat na maging isang kapaki-pakinabang Resource mula sa isa pang tf. 518 00:24:06,370 --> 00:24:11,380 Kung lumilikha ka ng isang string sa stack o bilang isang lokal na variable, ipapakita ito 519 00:24:11,380 --> 00:24:16,920 maging array ng mga singil sa halip na lamang sa pangkalahatan ay isang pansamantalang trabaho star na tumuturo sa 520 00:24:16,920 --> 00:24:18,600 isa pang string. 521 00:24:18,600 --> 00:24:20,550 Ngunit hindi ko alam. 522 00:24:20,550 --> 00:24:25,065 Iyon ay maaaring isang pointer sa isa pang string sa stack pati na rin. 523 00:24:25,065 --> 00:24:27,240 Oo. 524 00:24:27,240 --> 00:24:31,116 >> AARAL: alam ko na kailangan mo upang magtalaga ng memorya kung ang pointer ay 525 00:24:31,116 --> 00:24:33,360 nagsisimula pa ipinahayag sa loob ng isa pang function. 526 00:24:33,360 --> 00:24:36,740 Kailangan mong gawin ang parehong bagay kung ito ay ini ipinahayag sa loob ng main, 527 00:24:36,740 --> 00:24:39,570 ginagamit mo ito sa loob ng main? 528 00:24:39,570 --> 00:24:43,590 >> Jason HIRSCHHORN: So yes. 529 00:24:43,590 --> 00:24:46,670 Maaari mong magpahayag ng isang pointer sa anumang memory address sa memorya. 530 00:24:46,670 --> 00:24:51,440 Maaari itong maging ang memorya ng address ng isang lokal na variable, bagaman malimit, 531 00:24:51,440 --> 00:24:55,760 mga tao huwag magpahayag ng memory address sa mga lokal na mga variable dahil sila pumunta 532 00:24:55,760 --> 00:24:59,890 ang layo ng isang beses na pag-andar ay nagbalik, na ang dahilan kung bakit namin sa pangkalahatan malloc bagay. 533 00:24:59,890 --> 00:25:04,630 Ngunit oo, maaari mong magpahayag ng isang pointer sa isa pang lokal na variable. 534 00:25:04,630 --> 00:25:06,360 Ito ay lamang sa pangkalahatan ay hindi tapos na. 535 00:25:06,360 --> 00:25:09,480 Ngunit maaari kong tingnan ang na partikular na bagay pagkatapos ng klase. 536 00:25:09,480 --> 00:25:10,650 Oo. 537 00:25:10,650 --> 00:25:12,350 >> AARAL: tingin ko ito ang uri ng kung ano ang hihilingin. 538 00:25:12,350 --> 00:25:16,930 Ay mukhang kakaiba sa ma-initialize isang pointer hindi bilang isang 539 00:25:16,930 --> 00:25:20,760 address, ngunit bilang kung ano Mukhang tulad ng isang halaga. 540 00:25:20,760 --> 00:25:25,970 Mukhang tulad ng CS50 ay kung ano ang nasa loob ang bagay na itinuturo sa at 541 00:25:25,970 --> 00:25:28,820 hindi ang aktwal na address, i-right? 542 00:25:28,820 --> 00:25:30,520 >> Jason HIRSCHHORN: Kaya na hindi ito ang kaso, bagaman. 543 00:25:30,520 --> 00:25:32,470 Iyan ay hindi kung ano ang nangyayari. 544 00:25:32,470 --> 00:25:35,910 Kapag pinahahayag isang pansamantalang trabaho bituin, ito ay isang memory address. 545 00:25:35,910 --> 00:25:38,860 Mga payo ay ang lahat ng memory address na tumuturo sa ibang bagay. 546 00:25:38,860 --> 00:25:41,480 Iyon ibang bagay ay maaaring maging sa stack, ngunit halos palaging ay sa 547 00:25:41,480 --> 00:25:43,440 magbunton sa paraang gagawin namin makita ito ginagamit. 548 00:25:43,440 --> 00:25:46,860 549 00:25:46,860 --> 00:25:53,500 Ngunit stringname ay katumbas ng double-quote "Getstring," maaari naming makita na at kami 550 00:25:53,500 --> 00:25:55,010 Maaari tingnan ng masinsinan na at code na iyon. 551 00:25:55,010 --> 00:26:01,190 getstring string ay hindi naka-save sa na variable, o anuman ang string 552 00:26:01,190 --> 00:26:04,580 pangalan ay ay hindi naka-save sa na variable, dahil hindi iyon paano 553 00:26:04,580 --> 00:26:06,070 mga payo gumana. 554 00:26:06,070 --> 00:26:06,770 Ba na magkaroon ng kahulugan? 555 00:26:06,770 --> 00:26:07,170 >> AARAL: Oo. 556 00:26:07,170 --> 00:26:08,570 >> Jason HIRSCHHORN: OK. 557 00:26:08,570 --> 00:26:11,690 Sana, na noon ay hindi nakakalito sa sinuman. 558 00:26:11,690 --> 00:26:15,732 Ngunit kung ito ay, maaari naming tumingin muli sa ito sa isang sandali, dahil aktwal na kami ay pagpunta 559 00:26:15,732 --> 00:26:19,240 sa code ng isang bagay na habilin sana gumagana sa mga string at makatulong sa tingin mo 560 00:26:19,240 --> 00:26:22,170 higit pa komportable sa kanila. 561 00:26:22,170 --> 00:26:24,869 >> Anumang iba pang mga katanungan na may kaugnayan sa mga paksa o iba pang mga paksa na 562 00:26:24,869 --> 00:26:26,119 Makikita ko bang ilagay ang back-up? 563 00:26:26,119 --> 00:26:32,280 564 00:26:32,280 --> 00:26:34,840 At - 565 00:26:34,840 --> 00:26:36,310 sa ngayon. 566 00:26:36,310 --> 00:26:37,630 Oo, Alden. 567 00:26:37,630 --> 00:26:39,860 >> Alden: Kaya ito ay lubos na hindi kaugnay, ngunit maaari pumunta lamang namin ang higit sa 568 00:26:39,860 --> 00:26:42,760 talagang mabilis kung ano ang kailangan naming malaman tungkol sa pagkakaiba sa pagitan ng 32 at 569 00:26:42,760 --> 00:26:46,345 64-bit na machine? 570 00:26:46,345 --> 00:26:47,740 >> Jason HIRSCHHORN: Oo. 571 00:26:47,740 --> 00:26:52,111 Kaya 32 bits ay kung gaano karaming bytes? 572 00:26:52,111 --> 00:26:53,060 >> Alden: Ito ay apat na bytes. 573 00:26:53,060 --> 00:26:54,360 >> Jason HIRSCHHORN: Ito ay apat na bytes. 574 00:26:54,360 --> 00:26:58,420 At 64 bits ay kung gaano karaming bytes? 575 00:26:58,420 --> 00:26:59,112 >> AARAL: Eight. 576 00:26:59,112 --> 00:27:00,610 >> Jason HIRSCHHORN: Eight bytes. 577 00:27:00,610 --> 00:27:03,980 Kaya muli, walong bits ay isa byte. 578 00:27:03,980 --> 00:27:08,340 Ang iyong CS50 appliance ay 32-bit na machine. 579 00:27:08,340 --> 00:27:13,650 Kaya memory address ay apat na bytes mahaba. 580 00:27:13,650 --> 00:27:17,460 May 2 sa 32 memory address. 581 00:27:17,460 --> 00:27:21,310 0-2 sa 32 minus 1. 582 00:27:21,310 --> 00:27:27,630 At hindi ako positibo, ngunit iyan ay marahil ang saklaw ng kung ano ang kailangan mong i- 583 00:27:27,630 --> 00:27:35,230 alam para sa isang 32-bit na machine, na memory addresses ay, muli, apat na bytes mahaba, 584 00:27:35,230 --> 00:27:39,620 at iyon ang maximum na halaga ng memory address. 585 00:27:39,620 --> 00:27:41,680 >> Gayundin, mga uri ng data - 586 00:27:41,680 --> 00:27:45,020 maaaring ito ay isang bagay tulad ng mahusay na Sulit noting. 587 00:27:45,020 --> 00:27:49,610 Ang laki ng isang uri ng data ay depende sa ang machine nakikipagtulungan ka sa. 588 00:27:49,610 --> 00:27:56,760 Kaya isang pansamantalang trabaho, ang isang solong character, ay kung paano maraming bytes sa aming CS50 appliance? 589 00:27:56,760 --> 00:27:57,980 Ang isa byte. 590 00:27:57,980 --> 00:28:02,310 At ito ay tunay na isang byte bilang na rin sa 64-bit na machine. 591 00:28:02,310 --> 00:28:05,920 >> At karamihan ng mga uri ng data ay ang parehong bilang ng bytes sa parehong machine. 592 00:28:05,920 --> 00:28:11,620 Ngunit ang ilang mga uri ng data ay naiiba sa parehong machine. 593 00:28:11,620 --> 00:28:14,590 Kaya na magiging potensyal na ang tanging bagay na kailangan mong malaman. 594 00:28:14,590 --> 00:28:16,710 >> Ngunit kahit na, sa palagay ko, ay lampas sa hanggahan - 595 00:28:16,710 --> 00:28:20,990 Ako halos positibo, kung tiningnan mo likod sa lumang pagsusulit, sinasabi nito, ipinapalagay para sa 596 00:28:20,990 --> 00:28:24,090 coding problema na iyong ginagamit 32-bit na machine. 597 00:28:24,090 --> 00:28:26,620 598 00:28:26,620 --> 00:28:30,620 Ngunit mayroong, na isasama sa na sa kaso ikaw ay interesado, may mga 599 00:28:30,620 --> 00:28:35,920 mga uri ng data na ay pareho laki sa lahat ng mga machine. 600 00:28:35,920 --> 00:28:42,670 >> Kung nakita mo ang isang bagay tulad ng uint32_t, maaari mo o maaari 601 00:28:42,670 --> 00:28:43,260 hindi nakita iyon. 602 00:28:43,260 --> 00:28:44,290 Iyan ay isang uri ng data. 603 00:28:44,290 --> 00:28:47,570 Iyon ay nagsasabi, maging 32 bit man kung ano ang machine ay ito sa. 604 00:28:47,570 --> 00:28:50,350 Kaya kapag ang mga tao ay sumusulat portable code, ang mga ito ay marahil hindi gagamitin ang ints. 605 00:28:50,350 --> 00:28:53,260 Sa halip nila makikita ginagamit ang ibang data mga uri na alam nila ang magiging pareho 606 00:28:53,260 --> 00:28:54,780 laki sa bawat solong machine. 607 00:28:54,780 --> 00:28:58,080 608 00:28:58,080 --> 00:28:58,250 Madhu. 609 00:28:58,250 --> 00:29:00,150 >> MADHU: Mayroon akong isang tanong tungkol sa ang proseso ng compilation. 610 00:29:00,150 --> 00:29:04,110 Kaya't kung ikaw ay sumusulat ng isang program na gumagamit ng isang library tulad ng CS50 o isang bagay 611 00:29:04,110 --> 00:29:06,840 tulad na, alam ko na na library May sa, sa isang punto, maging 612 00:29:06,840 --> 00:29:08,590 pinagsama-sama at naka-link in 613 00:29:08,590 --> 00:29:13,380 Ngunit kung gaano kalaki na ang mangyayari sa panahon ng ang compilation ng iyong programa? 614 00:29:13,380 --> 00:29:15,880 Anong bahagi ng proseso na library nangyayari kapag ikaw ay 615 00:29:15,880 --> 00:29:18,560 kino-compile ang iyong sariling mga programa? 616 00:29:18,560 --> 00:29:24,020 >> Jason HIRSCHHORN: Kaya't sabihin pumunta sa ibabaw sa pangkalahatan ang mga hakbang ng proseso na ito. 617 00:29:24,020 --> 00:29:26,280 Isulat mo ang iyong mga c file.. 618 00:29:26,280 --> 00:29:33,530 Sa iyong c file., Mo # isama ang iyong Header ng mga aklatan, halimbawa, cs50.h. 619 00:29:33,530 --> 00:29:39,480 Ano ang matalim na isama linya gawin sa iyong programa? 620 00:29:39,480 --> 00:29:40,525 Akchar. 621 00:29:40,525 --> 00:29:43,350 >> AKCHAR: Nagdadagdag ito ng mga modelo ng ang mga pag-andar mula sa header 622 00:29:43,350 --> 00:29:45,120 mga file sa mga aklatan. 623 00:29:45,120 --> 00:29:45,600 >> Jason HIRSCHHORN: Mismong. 624 00:29:45,600 --> 00:29:49,870 Nagdadagdag ito sa mga function ng modelo sa iyong code. 625 00:29:49,870 --> 00:29:55,230 Kaya kapag ang iyong code ay pinagsama-sama sa ang maagang yugto, alam ang tagatala 626 00:29:55,230 --> 00:29:59,250 na ang mga pag-andar talagang umiiral, at na sa isang lugar ang mga ito ay tinukoy. 627 00:29:59,250 --> 00:30:02,460 Ang. H file huwag isama ang mga kahulugan para sa mga pag-andar o kung paano 628 00:30:02,460 --> 00:30:03,950 talaga gumagana ang mga ito. 629 00:30:03,950 --> 00:30:07,960 Kasama lamang Cs50.h isang bagay na nagsasabing getstring ay isang tunay na bagay na 630 00:30:07,960 --> 00:30:09,270 Maaari itong mangyari. 631 00:30:09,270 --> 00:30:14,240 At standardio.h sabi printf ay isang tunay na bagay na maaaring mangyari. 632 00:30:14,240 --> 00:30:23,190 >> Kaya iyong c wika na may ito. Header file ay makakakuha ng naka sa ilang 633 00:30:23,190 --> 00:30:27,750 code machine-nababasa, na malaon ay makakakuha ng naka sa binary 634 00:30:27,750 --> 00:30:30,030 code, 0 at 1 ni. 635 00:30:30,030 --> 00:30:33,590 At iyon ang code na ganap ay makakakuha ng pinaandar. 636 00:30:33,590 --> 00:30:38,550 Ang-l linya cs50 - halimbawa, kapag sumusulat ka kumalatong - 637 00:30:38,550 --> 00:30:41,830 at pagkatapos ay isama-l mo cs50, mong i-type na in 638 00:30:41,830 --> 00:30:42,180 At nakikita mo na. 639 00:30:42,180 --> 00:30:43,890 Kapag isulat mo gawin, makakakuha ka makita na line up dito. 640 00:30:43,890 --> 00:30:47,740 At muli naming makita na sa isang segundo kapag kami code o mamaya sa kung kailan namin code. 641 00:30:47,740 --> 00:30:50,390 >> Ngunit na-l cs50 linya ang isang bagay medyo iba kaysa 642 00:30:50,390 --> 00:30:52,440 ang # include cs50.h. 643 00:30:52,440 --> 00:30:56,300 Ano ang na-l cs50 linya gawin? 644 00:30:56,300 --> 00:30:56,820 Avi? 645 00:30:56,820 --> 00:31:00,310 >> AVI: gusto kong sabihin na ito nagli-link ang library sa pagpapaandar na 646 00:31:00,310 --> 00:31:02,710 tumawag, tulad ng. o mga file. 647 00:31:02,710 --> 00:31:08,200 >> Jason HIRSCHHORN: Kaya napaka malapit, kung hindi kawili-on. 648 00:31:08,200 --> 00:31:16,220 Ang-l cs50 tumatagal ang binary file at merges ito sa iyong mga binary file. 649 00:31:16,220 --> 00:31:21,410 Kaya cs50.h, walang point sa pag cs50.h mula sa C wika sa binary bawat 650 00:31:21,410 --> 00:31:23,130 solong oras na ito ginagamit. 651 00:31:23,130 --> 00:31:26,650 Iyon ay magiging walang isip, dahil na Gusto aksaya ng maraming oras. 652 00:31:26,650 --> 00:31:30,420 Kaya ito ay na-pinagsama-sama at naging isang executable. 653 00:31:30,420 --> 00:31:35,430 At ngayon ito ay pagpunta sa ay naka-merge gamit ang iyong file sa dulo. 654 00:31:35,430 --> 00:31:38,370 Kaya mga 1 at 0 ay pagpunta upang sumanib sa iyong mga bago 655 00:31:38,370 --> 00:31:39,150 at 0 ni sa dulo. 656 00:31:39,150 --> 00:31:43,670 Kaya ngayon makikita mo talaga magkaroon ng aktwal na 1 at 0 na matukoy kung paano getstring, 657 00:31:43,670 --> 00:31:47,890 halimbawa, ang gumagana, o kung paano printf, halimbawa, gumagana. 658 00:31:47,890 --> 00:31:52,750 >> At para sa higit pang impormasyon, mayroong isang maikling compiler na nagbibigay Nate na 659 00:31:52,750 --> 00:31:55,410 dapat mong suriin out na napupunta sa pamamagitan ng mga hakbang na ito. 660 00:31:55,410 --> 00:31:56,050 Ngunit - 661 00:31:56,050 --> 00:31:56,560 Oo. 662 00:31:56,560 --> 00:32:01,700 >> AARAL: palagi ba ang mga ito sa o file. kapag ang mga ito sa anyo library, 663 00:32:01,700 --> 00:32:06,764 handa na para sa Pinagsama, naka-link - tulad ng ang mga ito ay sa binary code? 664 00:32:06,764 --> 00:32:07,600 >> Jason HIRSCHHORN: OK. 665 00:32:07,600 --> 00:32:08,420 Ano - 666 00:32:08,420 --> 00:32:11,780 >> AARAL: Iyan ba palagi ang kaso para sa ang mga library kapag-link mo ang mga ito? 667 00:32:11,780 --> 00:32:12,500 >> Jason HIRSCHHORN: Oo. 668 00:32:12,500 --> 00:32:17,300 Kaya may mga file, na kung saan ay magiging kung. Ni code machine, na maaari ring maging 669 00:32:17,300 --> 00:32:17,975 misteriyoso sa iyo. 670 00:32:17,975 --> 00:32:19,410 Hindi mo kailangang mag-alala tungkol sa mga. 671 00:32:19,410 --> 00:32:24,930 Ngunit sa pangkalahatan, oo, makakakuha sila nasa. o ang mga file na handa na upang patakbuhin. 672 00:32:24,930 --> 00:32:27,170 >> AARAL: Kaya kapag nagpapadala ka sa isang library, huwag ipadala mo lamang 673 00:32:27,170 --> 00:32:28,880 ang. h at ang. o? 674 00:32:28,880 --> 00:32:32,210 Hindi mo na ipadala ang. C o ang. Ni. 675 00:32:32,210 --> 00:32:33,070 >> Jason HIRSCHHORN: So - 676 00:32:33,070 --> 00:32:36,260 at ito ay sa ang maikling pati na rin, kung Mukhang darating na isang ito impormasyon 677 00:32:36,260 --> 00:32:36,700 maliit mabilis. 678 00:32:36,700 --> 00:32:39,870 Ngunit ang maikling sa compiler uusap tungkol dito pati na rin. 679 00:32:39,870 --> 00:32:43,290 Kapag nagpapadala ka ng isang library, kung naipadala mo ang. h, ang header ng file, mga 680 00:32:43,290 --> 00:32:46,290 function ng mga modelo, at ang 1 at 0 ni, na ang lahat ng kailangan mong bigyan. 681 00:32:46,290 --> 00:32:50,640 Hindi mo na kailangan upang bigyan ang kung paano ang function na gumagana, ang. c file. 682 00:32:50,640 --> 00:32:56,360 Dahil ang punto ng abstraction, o ang ituro ang mga API, ang punto sa ito SPL, 683 00:32:56,360 --> 00:32:59,650 ang Stanford portable library, ito ay para sa iyo upang mag-alala tungkol sa kung paano bagong 684 00:32:59,650 --> 00:33:04,220 GRect gumagana, o kung paano ilipat ang mga gawa, o kung paano magdagdag ng mga gawa. 685 00:33:04,220 --> 00:33:06,520 Lahat ng kailangan mong malaman ay na add na ay isang katangian na maaari mong 686 00:33:06,520 --> 00:33:08,880 gamitin, at gagawin nito sa ito. 687 00:33:08,880 --> 00:33:12,760 Kaya mo ba talagang hindi na kailangan malaman kung paano ito ay nakasulat sa C. mo kailangan lang upang 688 00:33:12,760 --> 00:33:15,460 alam, narito ang ilan sa mga pag-andar, kung ano ang kanilang gawin, at narito ang ilan sa 1 at 0 689 00:33:15,460 --> 00:33:18,870 kapag mo ba talagang gamitin ang mga ito. 690 00:33:18,870 --> 00:33:19,530 >> Cool. 691 00:33:19,530 --> 00:33:26,980 Anumang higit pang mga tanong sa compiler o iba pang mga paksa sa board? 692 00:33:26,980 --> 00:33:30,300 >> AARAL: Mayroon akong tanong ng pagpapatupad ng recursive function. 693 00:33:30,300 --> 00:33:31,170 Ang isang tanong tungkol sa recursion. 694 00:33:31,170 --> 00:33:33,030 Nagkaroon ako ng pakiramdam na makabuo. 695 00:33:33,030 --> 00:33:38,310 Kaya sabihin mabilis na pumunta sa pamamagitan ng recursion na may tukoy na 696 00:33:38,310 --> 00:33:40,690 Halimbawa, ang isang factorial na function. 697 00:33:40,690 --> 00:33:44,920 Dahil ito ay isang halimbawa na madalas ay lumalabas o ginagamit 698 00:33:44,920 --> 00:33:46,170 upang ilarawan recursion. 699 00:33:46,170 --> 00:33:52,390 700 00:33:52,390 --> 00:33:56,410 >> Kaya "4!" ay read bilang 4 factorial. 701 00:33:56,410 --> 00:33:59,120 At kung ano ang ibig sabihin ng 4 factorial? 702 00:33:59,120 --> 00:34:00,696 Ano ang ibig na gawin? 703 00:34:00,696 --> 00:34:02,235 Paano kalkulahin mo 4 factorial? 704 00:34:02,235 --> 00:34:05,250 705 00:34:05,250 --> 00:34:07,960 4 na beses 3 beses 2 beses 1. 706 00:34:07,960 --> 00:34:11,889 >> Kaya isa pang paraan upang magsulat 4 factorial ay upang isulat ito. 707 00:34:11,889 --> 00:34:16,780 708 00:34:16,780 --> 00:34:19,022 4 na beses 3 factorial. 709 00:34:19,022 --> 00:34:22,080 Dahil 3 factorial ay 3 beses 2 beses 1. 710 00:34:22,080 --> 00:34:27,580 Kaya 4 na beses 3 factorial ay 4 beses 3 beses 2 beses 1. 711 00:34:27,580 --> 00:34:32,679 Ito ang dahilan kung bakit factorial ay isang magandang kandidato para sa recursion, dahil ito ay 712 00:34:32,679 --> 00:34:36,630 malinaw na mayroong isang bagay na ang mangyayari paulit-ulit at mahigit sa isang 713 00:34:36,630 --> 00:34:39,820 mas maliit na bilang ng mga bagay hanggang sa iyo na maabot ang dulo. 714 00:34:39,820 --> 00:34:42,570 Kapag naabot mo na 1, 1 factorial ay 1. 715 00:34:42,570 --> 00:34:43,719 Hindi mo magkano ang karagdagang maaaring pumunta. 716 00:34:43,719 --> 00:34:47,219 0 factorial ay tinutukoy din bilang 1. 717 00:34:47,219 --> 00:34:50,679 Kaya kapag nakarating ka na sa 1 o 0, handa ka sa dulo, at maaari mong 718 00:34:50,679 --> 00:34:53,219 simulan ang pagpunta-back up. 719 00:34:53,219 --> 00:34:59,540 Kaya kung gusto naming magsulat ng isang recursive function na kalkulahin ang factorial, 720 00:34:59,540 --> 00:35:02,170 kami ay pagpunta sa sumulat ng ilang pseudocode para sa na ngayon. 721 00:35:02,170 --> 00:35:03,300 Bago namin isulat na pseudocode - 722 00:35:03,300 --> 00:35:05,660 Bibigyan kita ng guys ng ilang minuto upang isulat ang palsipikado code o tingin lang 723 00:35:05,660 --> 00:35:09,600 ang tungkol dito - may dalawang mga bagay sa bawat Kailangan ng recursive function. 724 00:35:09,600 --> 00:35:12,530 Ano ang mga dalawang bagay? 725 00:35:12,530 --> 00:35:13,220 >> Jack: Ito ay upang tawagan mismo. 726 00:35:13,220 --> 00:35:13,680 >> Jason HIRSCHHORN: Noah? 727 00:35:13,680 --> 00:35:14,460 Oh, Jack. 728 00:35:14,460 --> 00:35:15,100 Sige. 729 00:35:15,100 --> 00:35:16,640 >> Jack: Ito ay upang tawagan mismo. 730 00:35:16,640 --> 00:35:19,220 >> Jason HIRSCHHORN: Kaya isang recursive function na nangangailangan ng recursive tawag, isang 731 00:35:19,220 --> 00:35:20,220 tumawag sa sarili nito. 732 00:35:20,220 --> 00:35:20,770 Iyon ay isa. 733 00:35:20,770 --> 00:35:21,510 At ano ang iba pang mga bagay? 734 00:35:21,510 --> 00:35:22,250 >> Jack: Isang base kaso. 735 00:35:22,250 --> 00:35:23,780 >> Jason HIRSCHHORN: Isang base kaso. 736 00:35:23,780 --> 00:35:26,940 Ang isang base kaso ay, narito kung kailan titigil kami. 737 00:35:26,940 --> 00:35:29,510 Kaya ang iyong mga function na ay makakakuha ng tinatawag na. 738 00:35:29,510 --> 00:35:31,410 Ang unang base kaso ay. 739 00:35:31,410 --> 00:35:33,710 Gusto mong malaman kung ikaw ay sa dulo. 740 00:35:33,710 --> 00:35:37,110 At kung ikaw ay hindi sa dulo, mo gawin ang iyong mga recursive tawag. 741 00:35:37,110 --> 00:35:39,880 At pumunta ka muli sa pamamagitan ng pag-andar, suriin muli ang iyong base kaso. 742 00:35:39,880 --> 00:35:42,575 Kung hindi ikaw ang katapusan, gumawa ka ng isa pang recursive tawag, 743 00:35:42,575 --> 00:35:44,130 at iba pa, at iba pa. 744 00:35:44,130 --> 00:35:47,110 >> Iyon ang dahilan kung bakit recursive function palagi kailangan mga base ng mga kaso at mga 745 00:35:47,110 --> 00:35:48,210 recursive tawag. 746 00:35:48,210 --> 00:35:51,280 Kung wala kang isang recursive tawag, ito hindi magiging isang recursive function. 747 00:35:51,280 --> 00:35:53,210 Kung hindi ka magkaroon ng isang base ng kaso, Gusto mong pumunta magpakailanman at 748 00:35:53,210 --> 00:35:54,780 doon ay magiging walang nagtatapos. 749 00:35:54,780 --> 00:35:57,870 At ang batayang kaso laging mauna, sapagkat magkakaroon gusto mong palaging suriin 750 00:35:57,870 --> 00:36:00,420 kung ikaw una mong sa dulo. 751 00:36:00,420 --> 00:36:04,770 Kaya bago kami gumawa ng ilang pseudocode, bakit ay hindi nagkakaroon ka ng isang minuto upang isipin ang tungkol 752 00:36:04,770 --> 00:36:09,360 kung paano ang isang recursive function na factorial ay nakasulat? 753 00:36:09,360 --> 00:36:23,340 754 00:36:23,340 --> 00:36:26,010 >> Gayundin, bilang maraming bilang ang iyong ginagawa, pagsulat ito sa isang sheet ng papel ay 755 00:36:26,010 --> 00:36:27,960 kung ano ang pagpunta mong magkaroon upang gawin sa pagsusulit bukas. 756 00:36:27,960 --> 00:36:32,160 Kaya marahil mahusay na kasanayan upang gumawa ng Siguraduhin na ang code mo ay sumusulat 757 00:36:32,160 --> 00:36:34,420 pababa sa sheet ng papel - 758 00:36:34,420 --> 00:36:35,160 o maaari mong gawin iyon. 759 00:36:35,160 --> 00:36:36,710 Alam mo kung saan ang semicolons ay. 760 00:36:36,710 --> 00:36:37,660 Tandaan mo ang syntax. 761 00:36:37,660 --> 00:36:40,400 Dahil hindi ka magagawang upang magkaroon ng isang sabihin tagatala mo ginawa ng error. 762 00:36:40,400 --> 00:37:02,356 763 00:37:02,356 --> 00:37:07,240 >> Gayundin, kasama ang mga linya, bukas, kapag na-coding ng mga problema, kung ikaw 764 00:37:07,240 --> 00:37:11,490 ay rushed para sa oras, o kung ikaw ay napaka lito bilang sa kung paano ka dapat 765 00:37:11,490 --> 00:37:16,030 isulat ang partikular na bagay sa c, ito Gusto marapat sa iyo na magsulat hindi tunay na code 766 00:37:16,030 --> 00:37:18,160 o magsulat ng mga komento sa pati na rin. 767 00:37:18,160 --> 00:37:21,940 Dahil mayroong mga bahagyang credit para sa isang marami sa mga tanong sa pagsusulit. 768 00:37:21,940 --> 00:37:24,840 Kaya't sa iyo ay maaaring rushed, o mo baka lang malito. 769 00:37:24,840 --> 00:37:28,030 Nagsusulat sa mga komento o hindi tunay na code ay madalas na mga paraan na iyong 770 00:37:28,030 --> 00:37:29,360 makakakuha ng bahagyang kredito. 771 00:37:29,360 --> 00:37:31,440 >> Kaya huwag mag-iwan ng isang bagay blangko sa pagsusulit. 772 00:37:31,440 --> 00:37:33,490 Walang mga parusa para sa paglalagay ng mga bagay in 773 00:37:33,490 --> 00:37:37,650 Sa katunayan, paglalagay sa palsipikado-code o mga komento ay pagpunta upang matulungan ang greyder 774 00:37:37,650 --> 00:37:40,410 malaman kung ikaw talaga alam kung ano ang ka ng pakikipag-usap tungkol sa, at marahil award 775 00:37:40,410 --> 00:37:42,030 kang ilang mga bahagyang credit para sa na. 776 00:37:42,030 --> 00:37:44,510 >> Gayundin kasama ang mga linya, isulat nang malinaw. 777 00:37:44,510 --> 00:37:47,650 Kung hindi namin talaga kung ano ang iyong pagsusulat, Hindi namin pagpunta sa tawagan ka 778 00:37:47,650 --> 00:37:49,900 sa bukas hatinggabi sa figure out kung ano ang iyong sinulat ni. 779 00:37:49,900 --> 00:37:51,520 Lamang kami ng pagpunta sa tumagal-off point. 780 00:37:51,520 --> 00:37:56,570 Sumulat ng malinaw upang maaari naming marinig, o sa halip, maaari naming basahin kung ano ang iyong sinulat ni. 781 00:37:56,570 --> 00:38:00,230 >> At kung sinasabi nito dalawang mga pangungusap, huwag magsulat ng talata. 782 00:38:00,230 --> 00:38:02,280 Sundin ang mga tagubilin. 783 00:38:02,280 --> 00:38:03,500 Sumulat ng malinaw. 784 00:38:03,500 --> 00:38:07,720 At sumulat sa mga komento o pseudocode para sa mga katanungan na maaari 785 00:38:07,720 --> 00:38:10,270 award bahagyang kredito. 786 00:38:10,270 --> 00:38:12,520 >> OK, ni pumunta sa factorial ipaalam. 787 00:38:12,520 --> 00:38:15,000 Kaya mayroon kaming isang function factorial. 788 00:38:15,000 --> 00:38:18,400 789 00:38:18,400 --> 00:38:21,550 Kung ako ay upang aktwal na isulat ito sa C, ano ang kailangan kong ilagay bago ang pangalan 790 00:38:21,550 --> 00:38:22,800 ng pag-andar? 791 00:38:22,800 --> 00:38:24,880 792 00:38:24,880 --> 00:38:30,060 Ang uri ng return, na, sa ganitong kaso, bibigyan namin ito int. 793 00:38:30,060 --> 00:38:35,450 At pagkatapos ay sa loob ng mga kulot tirante, ay kung ano ang napupunta sa loob ng kulot tirante para sa 794 00:38:35,450 --> 00:38:36,850 isang function? 795 00:38:36,850 --> 00:38:37,950 >> ESTUDYANTE: uri ng argument. 796 00:38:37,950 --> 00:38:39,150 >> Jason HIRSCHHORN: mga argumento nito. 797 00:38:39,150 --> 00:38:42,680 Kaya factorial habilin marahil tumagal ng isang argumento. 798 00:38:42,680 --> 00:38:44,500 Ito marahil tumagal lamang ng isang argumento. 799 00:38:44,500 --> 00:38:49,450 At muli naming sabihin makikita tumagal isang integer na tinatawag na x. 800 00:38:49,450 --> 00:38:52,770 At muli, kapag sumusulat ang prototype ng isang function o pagsusulat ang pag-andar 801 00:38:52,770 --> 00:38:57,110 sa iyong code bago pagtukoy ito, mo isulat ang uri ng data at ang pangalan ng 802 00:38:57,110 --> 00:39:01,370 na variable para sa na function na lamang. 803 00:39:01,370 --> 00:39:06,350 Kaya maaari mong pumasa sa ilang mga numero sa ito function, magkakaroon ito ay tinutukoy bilang x 804 00:39:06,350 --> 00:39:07,340 sa loob. 805 00:39:07,340 --> 00:39:08,755 >> Mayroon kaming ang aming factorial na function. 806 00:39:08,755 --> 00:39:12,030 807 00:39:12,030 --> 00:39:15,850 Kailangan namin ang dalawang bagay, isang base ng kaso at isang recursive tawag. 808 00:39:15,850 --> 00:39:20,900 Ano ang pangunahing kaso para sa factorial? 809 00:39:20,900 --> 00:39:24,850 Isang tao na sinulat ni ito out at kung sino ang may hindi pa pasalitang, ano ang pangunahing 810 00:39:24,850 --> 00:39:26,100 kaso para sa factorial? 811 00:39:26,100 --> 00:39:28,400 812 00:39:28,400 --> 00:39:30,930 >> AARAL: Kung n Mababa sa 2, bumalik 1. 813 00:39:30,930 --> 00:39:33,520 >> Jason HIRSCHHORN: Kung n ay Mababa sa 2, bumalik 1. 814 00:39:33,520 --> 00:39:37,216 Gusto ko na, dahil iyon tumatagal ng pag-aalaga ng 0 at 1. 815 00:39:37,216 --> 00:39:45,290 Kaya gagawin namin x <2, bumalik 1. 816 00:39:45,290 --> 00:39:47,870 Kung makuha namin ang pumasa sa 0, kung makuha namin pumasa sa 1, ito function ng habilin 817 00:39:47,870 --> 00:39:49,790 agad na bumalik 1. 818 00:39:49,790 --> 00:39:54,020 Kung makuha namin ang pumasa sa ilang mga numero na mas malaki sa o katumbas ng 2, kami ay pagpunta sa 819 00:39:54,020 --> 00:39:55,370 Mayroon aming recursive tawag. 820 00:39:55,370 --> 00:39:57,855 >> At kaya kung paano na pagpunta ay upang gumana? 821 00:39:57,855 --> 00:40:01,070 Maaari bang ibang tao na nagtrabaho sa ito sino ay hindi pa pasalitang ninyo akong bigyan ang 822 00:40:01,070 --> 00:40:07,380 recursive tawag para sa pag-andar sa pseudocode? 823 00:40:07,380 --> 00:40:10,770 Kung natin nakapasa sa isang numero x at ito ay mas malaki kaysa sa 2, ano 824 00:40:10,770 --> 00:40:13,370 nais naming gawin? 825 00:40:13,370 --> 00:40:17,930 Inirerekumenda rin na ang isang halimbawa nakasulat sa gilid na maaaring magbigay sa iyo ng isang pahiwatig. 826 00:40:17,930 --> 00:40:20,770 >> AARAL: Tawagan beses x ang factorial ng x minus 1? 827 00:40:20,770 --> 00:40:22,020 >> Jason HIRSCHHORN: Eksaktong karapatan. 828 00:40:22,020 --> 00:40:24,610 829 00:40:24,610 --> 00:40:37,750 Kami ay pagpunta sa bumalik ulit x ang factorial ng x minus 1. 830 00:40:37,750 --> 00:40:41,810 At iyon, kahit na ako ay sumulat up, talaga, kung ano ang sinabi mo sa Ingles, 831 00:40:41,810 --> 00:40:44,580 factorial function na ito ay makakapagsimula ulit na tinatawag. 832 00:40:44,580 --> 00:40:46,320 Ito execute sa x minus 1. 833 00:40:46,320 --> 00:40:49,320 Ito bumalik sa ilang mga integer, at pagkatapos ay magkakaroon ito i-multiply ang dalawang 834 00:40:49,320 --> 00:40:52,050 magkasama, at halaga na magiging ibinalik sa kahit anong tinatawag na ito 835 00:40:52,050 --> 00:40:55,010 factorial na function, na maaaring maging isa pang halimbawa ng 836 00:40:55,010 --> 00:40:58,420 ito factorial na function. 837 00:40:58,420 --> 00:41:01,360 >> Kaya na ay isang halimbawa ng isang recursive function, isang napaka- 838 00:41:01,360 --> 00:41:02,530 simpleng recursive function. 839 00:41:02,530 --> 00:41:04,530 Ngunit karamihan sa mga ito ay magiging tulad nito. 840 00:41:04,530 --> 00:41:11,170 Kung nais mong isang mahusay na recursive hamunin para sa pagsusulit, subukan ang coding 841 00:41:11,170 --> 00:41:13,230 binary paghahanap recursively. 842 00:41:13,230 --> 00:41:18,950 Dahil kung ginawa mo binary paghahanap para sa itakda ang problemang tatlong, malamang na ginawa ito 843 00:41:18,950 --> 00:41:21,730 iteratively sa isang habang loop. 844 00:41:21,730 --> 00:41:23,700 >> Ngunit ito ay maaari ding nakasulat recursively. 845 00:41:23,700 --> 00:41:26,310 Ikaw ay pagpunta sa kailangan upang isulat ang iyong sariling hiwalay na function na tumatagal ng ilang 846 00:41:26,310 --> 00:41:29,020 iba't ibang mga argumento command-line - o hindi argumento command-line, ang ilang mga 847 00:41:29,020 --> 00:41:30,910 iba't ibang lamang regular na mga argumento. 848 00:41:30,910 --> 00:41:33,870 Ngunit maaari kang sumulat ng binary paghahanap recursively pati na rin. 849 00:41:33,870 --> 00:41:36,190 >> AARAL: Kaya maaari mong isinulat din, sa halip ng x minus 1, mo 850 00:41:36,190 --> 00:41:39,502 sana nakasulat din x minus minus, o maaari kang magkaroon ng 851 00:41:39,502 --> 00:41:40,830 nakasulat minus minus x. 852 00:41:40,830 --> 00:41:44,740 Maaari mo bang ipaliwanag lang talaga mabilis bakit mga magiging iba't ibang mga bagay, 853 00:41:44,740 --> 00:41:49,510 tulad ng kung ano ang pagkakaiba ay sa pagitan ng x minus minus at minus minus x? 854 00:41:49,510 --> 00:41:51,320 >> Jason HIRSCHHORN: Hindi, hindi ako pagpunta sa pumunta sa na. 855 00:41:51,320 --> 00:41:55,500 Ngunit ako ay makipag-usap sa iyo tungkol dito pagkatapos class. x minus minus, minus minus x 856 00:41:55,500 --> 00:41:57,780 pagbawas x ng 1. 857 00:41:57,780 --> 00:41:59,090 Pero ginagawa nila ito ng kaunti naiiba. 858 00:41:59,090 --> 00:42:00,340 Ngunit hindi ko nais upang pumunta sa na. 859 00:42:00,340 --> 00:42:04,330 860 00:42:04,330 --> 00:42:09,090 Iba pang mga tanong tungkol sa recursion o ang pagpapaganang ito? 861 00:42:09,090 --> 00:42:10,140 Iyan ay hindi talagang kahit pseudocode. 862 00:42:10,140 --> 00:42:15,060 Iyon ay isa lamang ang code sa C nais mong magsulat para na ito. 863 00:42:15,060 --> 00:42:19,393 >> OK, ang anumang iba pang mga tanong tungkol sa mga paksa dito? 864 00:42:19,393 --> 00:42:19,864 Oo. 865 00:42:19,864 --> 00:42:23,130 >> AARAL: Mayroon akong isang mabilis na rundown ng lumulutang na tuldok at katumpakan. 866 00:42:23,130 --> 00:42:24,260 >> Jason HIRSCHHORN: Lumulutang point at katumpakan. 867 00:42:24,260 --> 00:42:26,920 Maaari bang isang tao talagang mabilis ninyo ako ng rundown ng 868 00:42:26,920 --> 00:42:28,210 lumulutang na tuldok at katumpakan? 869 00:42:28,210 --> 00:42:30,420 Mo ang lahat ay nagkaroon upang gawin ito para sa iyong itakda ang problema, kaya ikaw ay ang lahat ng 870 00:42:30,420 --> 00:42:31,700 pamilyar sa mga ito. 871 00:42:31,700 --> 00:42:35,090 O siguro hindi lahat ng iyo. 872 00:42:35,090 --> 00:42:36,602 Sinuman? 873 00:42:36,602 --> 00:42:39,530 Bigyan mo ako ng isang makapagsimula na puwesto. 874 00:42:39,530 --> 00:42:40,750 Lumulutang point at katumpakan. 875 00:42:40,750 --> 00:42:42,380 Ano ang problema? 876 00:42:42,380 --> 00:42:42,960 Oo. 877 00:42:42,960 --> 00:42:43,680 Victoria? 878 00:42:43,680 --> 00:42:44,480 >> Vanessa: Vanessa. 879 00:42:44,480 --> 00:42:45,285 >> Jason HIRSCHHORN: Vanessa. 880 00:42:45,285 --> 00:42:45,680 Sorry. 881 00:42:45,680 --> 00:42:51,550 >> Vanessa: Mayroon lamang isang may hangganan bilang ng mga numero na maaaring katawanin 882 00:42:51,550 --> 00:42:57,930 dahil ikaw ay nasa isang, sa aming kaso, isang 32-bit na sistema. 883 00:42:57,930 --> 00:43:03,080 Kaya mo uri ng kailangang gumawa ng up ng ilang numero. 884 00:43:03,080 --> 00:43:03,910 >> Jason HIRSCHHORN: Kaya na akmang-akma. 885 00:43:03,910 --> 00:43:08,110 May lamang ng ilang halaga ng mga numero na maaaring katawanin. 886 00:43:08,110 --> 00:43:11,770 Kung i-multiply mo ang dalawang napakalaking numero, maaaring mapuno nito ang halaga 887 00:43:11,770 --> 00:43:13,950 ng mga puwang mayroon kang upang kumatawan isang integer. 888 00:43:13,950 --> 00:43:17,930 Iyon ang dahilan kung bakit minsan ay ginagamit namin ang isang mahaba mahaba sa halip ng isang int. 889 00:43:17,930 --> 00:43:19,210 Iyon ay may higit pang mga puwang. 890 00:43:19,210 --> 00:43:21,210 Iyon ay maaaring magkaroon ng isang mas malaking numero. 891 00:43:21,210 --> 00:43:24,310 >> Katumpakan Lumulutang punto ay gagawin sa iyon, ngunit din itong gawin gamit ang 892 00:43:24,310 --> 00:43:29,300 katotohanan na decimal na mga numero ay hindi laging kinakatawan. 893 00:43:29,300 --> 00:43:29,540 Sorry. 894 00:43:29,540 --> 00:43:31,280 Hayaan akong ilagay ito pabalik up. 895 00:43:31,280 --> 00:43:36,610 Ang decimal numero 1.0 ay hindi palaging kinakatawan katulad mo aasahan, 896 00:43:36,610 --> 00:43:40,770 1.000000000. 897 00:43:40,770 --> 00:43:50,360 Minsan Ito ay kinakatawan bilang 1.000000001 o .999999999. 898 00:43:50,360 --> 00:43:52,780 Ito ay maaaring kahit na 89 itinapon doon sa isang lugar. 899 00:43:52,780 --> 00:43:56,560 Kaya mga decimal na numero ay hindi kinakatawan eksakto katulad ng ginagawa mo 900 00:43:56,560 --> 00:43:58,430 asahan ang mga ito upang katawanin. 901 00:43:58,430 --> 00:44:00,010 >> Kaya sa problema itinakda - 902 00:44:00,010 --> 00:44:00,860 ay ito ng dalawang? - 903 00:44:00,860 --> 00:44:05,290 itakda ang problema ng dalawa, kung saan kami Aaksyunan may lumulutang na tuldok numero, kapag gusto naming 904 00:44:05,290 --> 00:44:08,690 sa kanila upang kumatawan eksakto kung ano ang gusto namin sa kanila upang kumatawan, ang bilang 905 00:44:08,690 --> 00:44:12,860 ng pennies, o ang bilang ng mga cents, multiply namin ang mga ito sa pamamagitan ng 100. 906 00:44:12,860 --> 00:44:14,750 Bilugan namin ang mga ito. 907 00:44:14,750 --> 00:44:18,660 At pagkatapos ay i-cut-off namin ang lahat ng bagay sa likod ng decimal point. 908 00:44:18,660 --> 00:44:22,020 Iyon ay upang matiyak na ang mga ito ay lalabas talagang katumbas nang eksakto kung ano ang gusto namin 909 00:44:22,020 --> 00:44:22,410 ang mga ito upang pumatas. 910 00:44:22,410 --> 00:44:26,870 >> Dahil kapag kumuha ka ng isang bagay na isang float at i-on ito sa isang int, mo 911 00:44:26,870 --> 00:44:29,860 cut-off ang lahat ng bagay sa kanan ng decimal point. 912 00:44:29,860 --> 00:44:33,900 Dahil mayroong ilang mga lumulutang na tuldok imprecision, 100.000 ay maaaring maging 913 00:44:33,900 --> 00:44:37,440 kinakatawan bilang 99.999999999. 914 00:44:37,440 --> 00:44:40,350 At kung cut off mo lang ang lahat sa kanan agad, ka ng pagpunta sa 915 00:44:40,350 --> 00:44:41,600 makuha ang maling numero. 916 00:44:41,600 --> 00:44:44,050 917 00:44:44,050 --> 00:44:44,180 Oo. 918 00:44:44,180 --> 00:44:45,290 >> AARAL: ako ay may isang tanong tungkol sa paghahagis. 919 00:44:45,290 --> 00:44:47,500 Ano order mangyari ito sa? 920 00:44:47,500 --> 00:44:54,480 Kung nais mong gawin ng float, bracket, 1 hinati sa pamamagitan ng 10, ang mga ito ay 1 hinati sa 10, 921 00:44:54,480 --> 00:44:58,910 pagkatapos makakuha 0.1, pagkatapos ay i- ito sa isang float? 922 00:44:58,910 --> 00:45:01,470 >> Jason HIRSCHHORN: Kung gagawin mo float 1 hinati sa 10 - 923 00:45:01,470 --> 00:45:02,550 >> AARAL: Oo, at pagkatapos ay katumbas ng - 924 00:45:02,550 --> 00:45:04,240 well, ito gagawin normal Mayroon itong katumbas sa - 925 00:45:04,240 --> 00:45:04,690 Oo. 926 00:45:04,690 --> 00:45:06,760 Gusto mong gawin itong isang float, tama? 927 00:45:06,760 --> 00:45:12,790 >> Jason HIRSCHHORN: OK, kaya kami ay pagpunta sa gamitin iyon upang segue sa pag-uunawa 928 00:45:12,790 --> 00:45:15,390 ang mga sagot sa mga tanong na ito sa pamamagitan ng coding. 929 00:45:15,390 --> 00:45:18,180 Dahil makikita mo marahil ay may napakaraming mga mga minutong katanungan, at isang mahusay na paraan 930 00:45:18,180 --> 00:45:19,100 upang malutas ang mga ito ay sa pamamagitan ng coding. 931 00:45:19,100 --> 00:45:21,320 Kaya kami ay pagpunta sa code na ito sa ngayon, at pagkatapos kami ay pagpunta sa bumalik at 932 00:45:21,320 --> 00:45:24,020 Code ng tanong na mayroon. 933 00:45:24,020 --> 00:45:24,950 >> Kaya ang unang linya - 934 00:45:24,950 --> 00:45:29,390 Hindi ko dapat na nakasulat na ito - ano ang unang bagay na gusto naming gawin kapag kami 935 00:45:29,390 --> 00:45:32,250 buksan up ng isang bagong file sa gedit? 936 00:45:32,250 --> 00:45:34,190 >> AARAL: Isama. 937 00:45:34,190 --> 00:45:35,920 >> Jason HIRSCHHORN: Isama ano? 938 00:45:35,920 --> 00:45:37,952 >> AARAL: CS50 library. 939 00:45:37,952 --> 00:45:39,920 >> Jason HIRSCHHORN: OK. 940 00:45:39,920 --> 00:45:42,590 Ano pa ang dapat naming isama? 941 00:45:42,590 --> 00:45:46,820 Lamang kami ng pagpunta upang suriin kung ano ang mangyayari kapag nagsumite ka ng isang bagay sa isang float. 942 00:45:46,820 --> 00:45:48,605 Ngunit ano ang kailangan namin upang isama kung hindi kami pagpunta sa magsulat ng isang programa C? 943 00:45:48,605 --> 00:45:49,300 >> AARAL: Standard ako / O. 944 00:45:49,300 --> 00:45:50,625 >> Jason HIRSCHHORN: stdio.h. 945 00:45:50,625 --> 00:45:54,880 Namin talagang hindi na kailangan, para ito programa, cs50.h, kahit na ito ay 946 00:45:54,880 --> 00:45:55,920 laging nakakatulong upang maisama ito. 947 00:45:55,920 --> 00:45:58,260 Ngunit palagi naming kailangang stdio.h. 948 00:45:58,260 --> 00:45:59,660 >> AARAL: Kapag coding sa C? 949 00:45:59,660 --> 00:46:15,770 >> Jason HIRSCHHORN: Kapag coding sa C. 950 00:46:15,770 --> 00:46:17,090 >> Kaya i-save ko ito bilang ito. C file. 951 00:46:17,090 --> 00:46:18,590 Nakakuha ako ng ilang magaling na syntax sa pagha-highlight. 952 00:46:18,590 --> 00:46:22,890 Isinulat ni ko walang bisa sa loob ng main. 953 00:46:22,890 --> 00:46:24,792 Ano ang ibig sabihin walang bisa? 954 00:46:24,792 --> 00:46:26,740 >> AARAL: Hindi tumagal ba ang anumang command-line na mga argumento. 955 00:46:26,740 --> 00:46:28,900 >> Jason HIRSCHHORN: walang bisa paraan, sa ganitong kaso, ang pangunahing ay hindi gumawa ng anumang 956 00:46:28,900 --> 00:46:29,700 command-line na mga argumento. 957 00:46:29,700 --> 00:46:32,720 Sa ibang mga kaso, ang ibig sabihin nito ang pag-andar Hindi tumagal ng mga argumento command-line. 958 00:46:32,720 --> 00:46:36,560 O kaya naman ang pag-andar, kung ako ay sumulat ng walang bisa pangunahing (walang bisa), na sasabihin pangunahing ni 959 00:46:36,560 --> 00:46:38,460 hindi nagbabalik ng anumang bagay. 960 00:46:38,460 --> 00:46:39,960 Kaya walang bisa lamang ay nangangahulugan na wala. 961 00:46:39,960 --> 00:46:42,510 Ano ang gusto kong isulat kung ako ay upang tumagal ng mga argumento command-line? 962 00:46:42,510 --> 00:46:45,250 963 00:46:45,250 --> 00:46:47,150 >> AARAL: int arc c string arc v 964 00:46:47,150 --> 00:46:49,055 >> Jason HIRSCHHORN: int argc string argv. 965 00:46:49,055 --> 00:46:54,050 966 00:46:54,050 --> 00:46:55,572 Iyan ba ang tama? 967 00:46:55,572 --> 00:46:58,720 >> AARAL: Ito ay pansamantalang trabaho star argv bracket. 968 00:46:58,720 --> 00:47:01,730 >> Jason HIRSCHHORN: Kaya maaari mong isulat string argv bracket o pansamantalang trabaho star argv 969 00:47:01,730 --> 00:47:03,710 bracket, ngunit kailangan mo ng mga bracket. 970 00:47:03,710 --> 00:47:06,290 Dahil argv ay isang array ng mga string, alalahanin. 971 00:47:06,290 --> 00:47:07,360 Ito ay hindi string ng isa lang. 972 00:47:07,360 --> 00:47:10,350 Kaya string argv ay, dito ay isa string na tinatawag argv. 973 00:47:10,350 --> 00:47:13,630 String argv bracket ay, narito isang array ng mga string. 974 00:47:13,630 --> 00:47:17,865 Kaya int argc string argv bracket ay magiging isang bagay na ako 975 00:47:17,865 --> 00:47:18,810 Gusto marahil magsulat. 976 00:47:18,810 --> 00:47:23,050 >> Kaya nais mong i-save sa isang integer? 977 00:47:23,050 --> 00:47:24,285 >> AARAL: Oo, integer. 978 00:47:24,285 --> 00:47:25,840 O kaya sa isang float. 979 00:47:25,840 --> 00:47:26,710 >> Jason HIRSCHHORN: Sa isang float? 980 00:47:26,710 --> 00:47:30,790 Tulad ng, ng float x ay katumbas ng 1 hinati sa 10. 981 00:47:30,790 --> 00:47:32,040 >> Jason HIRSCHHORN: OK. 982 00:47:32,040 --> 00:47:40,160 983 00:47:40,160 --> 00:47:42,240 Paano ko i-print out ako ng float sa printf? 984 00:47:42,240 --> 00:47:45,100 985 00:47:45,100 --> 00:47:46,714 Ano? 986 00:47:46,714 --> 00:47:47,560 >> AARAL:% f. 987 00:47:47,560 --> 00:47:48,300 >> Jason HIRSCHHORN:% f. 988 00:47:48,300 --> 00:47:50,810 Ano ang isang integer? 989 00:47:50,810 --> 00:47:52,110 d o i. 990 00:47:52,110 --> 00:47:53,000 Ano ang isang string? 991 00:47:53,000 --> 00:47:54,240 >> AARAL: s. 992 00:47:54,240 --> 00:47:56,140 >> Jason HIRSCHHORN: s. 993 00:47:56,140 --> 00:47:57,550 Paano ako makakakuha ng isang bagong linya? 994 00:47:57,550 --> 00:47:58,800 >> AARAL: Backslash n. 995 00:47:58,800 --> 00:48:04,610 996 00:48:04,610 --> 00:48:07,100 >> Jason HIRSCHHORN: Ano ang gagawin ko bumalik kung pangunahing nagpapatakbo ng tama? 997 00:48:07,100 --> 00:48:08,360 >> AARAL: 0. 998 00:48:08,360 --> 00:48:09,430 Kailangan ko bang isulat ang linyang iyon, bagaman? 999 00:48:09,430 --> 00:48:10,170 >> AARAL: Hindi. 1000 00:48:10,170 --> 00:48:11,513 OK, hindi namin isulat ito, pagkatapos. 1001 00:48:11,513 --> 00:48:16,450 1002 00:48:16,450 --> 00:48:17,190 Maaari lahat basahin iyon? 1003 00:48:17,190 --> 00:48:18,485 Mukhang isang bit maliit. 1004 00:48:18,485 --> 00:48:20,160 Maaari ba lahat ng tao makita, o dapat Ginawa ito mas malaki? 1005 00:48:20,160 --> 00:48:23,480 1006 00:48:23,480 --> 00:48:25,100 Sa tingin ko para sa mga camera, magsasagawa kami ng ito isang bit mas malaki, bagaman. 1007 00:48:25,100 --> 00:48:35,750 1008 00:48:35,750 --> 00:48:38,410 >> Jason HIRSCHHORN: Kung gusto kong i ito . C-file sa isang executable, kung ano 1009 00:48:38,410 --> 00:48:39,260 ako magsusulat? 1010 00:48:39,260 --> 00:48:41,610 >> AARAL: Gumawa ng pagsubok. 1011 00:48:41,610 --> 00:48:42,080 >> Jason HIRSCHHORN: Paumanhin? 1012 00:48:42,080 --> 00:48:42,790 >> AARAL: Gumawa ng pagsubok. 1013 00:48:42,790 --> 00:48:44,040 >> Jason HIRSCHHORN: Gumawa ng pagsubok. 1014 00:48:44,040 --> 00:48:46,700 1015 00:48:46,700 --> 00:48:48,410 Kami ay pakikipag-usap tungkol sa ang linyang ito nang mas maaga. 1016 00:48:48,410 --> 00:48:49,140 Kumalatong. 1017 00:48:49,140 --> 00:48:51,270 Ano ang kumalatong? 1018 00:48:51,270 --> 00:48:52,200 Ang pangalan ng tagatala. 1019 00:48:52,200 --> 00:48:53,920 Ano ang linyang ito? 1020 00:48:53,920 --> 00:48:55,580 >> AARAL: Itinatakda up ito para sa paggamit ng GDB. 1021 00:48:55,580 --> 00:48:59,230 >> Jason HIRSCHHORN: Sets ito up para sa paggamit ng GDB. 1022 00:48:59,230 --> 00:49:02,338 Linyang ito, kung ano ang na? 1023 00:49:02,338 --> 00:49:03,290 >> AARAL: Ang source code. 1024 00:49:03,290 --> 00:49:06,010 >> Jason HIRSCHHORN: Iyon ang source file, ang. c file. 1025 00:49:06,010 --> 00:49:08,150 Ano ang mga dalawang linya gawin? 1026 00:49:08,150 --> 00:49:10,245 O kaya naman ang dalawang hindi linya. 1027 00:49:10,245 --> 00:49:12,300 >> AARAL: mga pangalan ito ng ito susubukan. 1028 00:49:12,300 --> 00:49:15,410 >> Jason HIRSCHHORN: Kaya sinasabi ng gitling o, pangalanan ito ng isang bagay na naiiba. 1029 00:49:15,410 --> 00:49:16,790 At dito ka sa pagtawag ito ng pagsubok. 1030 00:49:16,790 --> 00:49:18,900 Kung hindi ko kinailangang na in, ano ang magiging ito pangalanan ito? 1031 00:49:18,900 --> 00:49:20,260 >> AARAL: A.out. 1032 00:49:20,260 --> 00:49:22,340 >> Jason HIRSCHHORN: A.out. 1033 00:49:22,340 --> 00:49:25,366 Ano ang ginagawa ito? 1034 00:49:25,366 --> 00:49:27,670 >> AARAL: Links ang matematika library. 1035 00:49:27,670 --> 00:49:29,550 >> Jason HIRSCHHORN: nagli-link Ito sa matematika library. 1036 00:49:29,550 --> 00:49:32,880 Hindi namin isama ang matematika library, ngunit dahil na kaya karaniwan, na sila ang 1037 00:49:32,880 --> 00:49:35,780 nakasulat make na laging isama ang matematika library. 1038 00:49:35,780 --> 00:49:39,050 At gayon din naman, ito ay kasama ang ang CS50 library. 1039 00:49:39,050 --> 00:49:43,010 >> OK, kaya kung ilista namin, mayroon kaming ngayon isang executable na tinatawag na pagsubok. 1040 00:49:43,010 --> 00:49:45,150 Upang maisagawa ito, isulat kong pagsubok. 1041 00:49:45,150 --> 00:49:48,330 Nakikita ko na ang aking mga lumulutang na tuldok, tulad ng inaasahan, ay katumbas ng 0. 1042 00:49:48,330 --> 00:49:50,890 1043 00:49:50,890 --> 00:49:51,590 Gumagana ba na - 1044 00:49:51,590 --> 00:49:52,060 kaya - 1045 00:49:52,060 --> 00:49:55,210 >> AARAL: Pagkatapos kung inilagay mo float ngayon, tulad mo cast ito bilang ng float - 1046 00:49:55,210 --> 00:49:56,870 >> Jason HIRSCHHORN: Cast ang 1 sa isang float? 1047 00:49:56,870 --> 00:49:59,180 >> AARAL: Hindi, nagsumite ang buong bagay - 1048 00:49:59,180 --> 00:49:59,500 oo. 1049 00:49:59,500 --> 00:50:02,460 Kung ginawa mo lang iyon, gagawin na gawin itong 0.1? 1050 00:50:02,460 --> 00:50:07,170 >> Jason HIRSCHHORN: OK, kaya talagang mabilis, 1 hinati sa 10, mga mga 1051 00:50:07,170 --> 00:50:08,690 integer na hinati. 1052 00:50:08,690 --> 00:50:13,580 Kaya kapag hatiin mo ang integer, ang mga ito ay 0, at iyong sine-save na 0 sa isang 1053 00:50:13,580 --> 00:50:17,170 float, dahil ang slash ay lamang integer division. 1054 00:50:17,170 --> 00:50:19,180 Kaya ngayon naka pag kami ng isang bagay sa isang float. 1055 00:50:19,180 --> 00:50:21,650 >> Ni makita kung ano ang mangyayari Hayaan. 1056 00:50:21,650 --> 00:50:22,900 Gagawin namin pagsubok. 1057 00:50:22,900 --> 00:50:25,870 1058 00:50:25,870 --> 00:50:31,090 Kaya ngayon nakita namin na na slash ay hindi integer division, ito ay lumulutang 1059 00:50:31,090 --> 00:50:32,640 punto division. 1060 00:50:32,640 --> 00:50:35,700 Dahil isa sa mga argumento nito ay cast sa isang float. 1061 00:50:35,700 --> 00:50:38,380 Kaya ngayon sinasabi ito, ituturing ito division tulad kami pagharap sa 1062 00:50:38,380 --> 00:50:40,140 lumulutang na tuldok, hindi na may integer. 1063 00:50:40,140 --> 00:50:42,760 At gayon makuha namin ang kasagutan inaasahan namin. 1064 00:50:42,760 --> 00:50:44,620 >> Ni makita kung ano ang mangyayari Hayaan - 1065 00:50:44,620 --> 00:50:47,103 oops. 1066 00:50:47,103 --> 00:50:51,646 Kung gusto kong i-print nang higit pa decimal spot, kung paano maaaring gawin ko na? 1067 00:50:51,646 --> 00:50:55,550 >> Tuldok f Point, o kahit gaano karaming: AARAL decimal place hangga't gusto mo. 1068 00:50:55,550 --> 00:51:02,280 1069 00:51:02,280 --> 00:51:04,440 >> Jason HIRSCHHORN: Kaya i-print ko 10 decimal spot. 1070 00:51:04,440 --> 00:51:06,610 At nakikita namin ngayon namin nakukuha ang ilang mga kakatwang mga bagay-bagay. 1071 00:51:06,610 --> 00:51:09,650 At na napupunta bumalik sa iyong katanungan tungkol sa mga lumulutang na tuldok imprecision. 1072 00:51:09,650 --> 00:51:10,950 May kakaiba mga bagay-bagay na naka-imbak sa dito. 1073 00:51:10,950 --> 00:51:13,650 1074 00:51:13,650 --> 00:51:15,275 >> OK, ang ibig na sagutin ang iyong tanong? 1075 00:51:15,275 --> 00:51:18,550 1076 00:51:18,550 --> 00:51:20,200 Ano pa ang gusto mo sa code ng mabilis? 1077 00:51:20,200 --> 00:51:25,470 >> AARAL: ako Nais lamang upang makita kung o Hindi, kung napalaya up ng ilang pointer, 1078 00:51:25,470 --> 00:51:30,410 kung na pointer pa rin si naka-imbak sa ito ang address ng kung ano ito ay hindi naging 1079 00:51:30,410 --> 00:51:32,170 na tumuturo sa dati. 1080 00:51:32,170 --> 00:51:34,100 >> Jason HIRSCHHORN: OK, kaya ni gawin na ipaalam. 1081 00:51:34,100 --> 00:51:38,030 Pansamantalang trabaho star ptr, ito ay lumilikha ng isang variable tinatawag ptr ng uri ng pansamantalang trabaho bituin. 1082 00:51:38,030 --> 00:51:39,280 Paano ako magsulat malloc? 1083 00:51:39,280 --> 00:51:40,550 Alden? 1084 00:51:40,550 --> 00:51:41,800 >> Alden: malloc lang. 1085 00:51:41,800 --> 00:51:44,820 1086 00:51:44,820 --> 00:51:51,040 Ngunit pagkatapos ito ay dapat na laki ng, at sa kasong ito, hulaan ko ikaw ay 1087 00:51:51,040 --> 00:51:52,465 ay tumuturo sa pansamantalang trabaho. 1088 00:51:52,465 --> 00:51:54,450 Kaya gusto itong maging pansamantalang trabaho. 1089 00:51:54,450 --> 00:51:57,520 >> Jason HIRSCHHORN: OK, kaya nang higit pa generically, Inside - 1090 00:51:57,520 --> 00:51:58,770 ni-edit ipaalam. 1091 00:51:58,770 --> 00:52:05,100 1092 00:52:05,100 --> 00:52:09,260 Sa Loob ng malloc, gusto mo ang iyong numero ng bytes sa magbunton. 1093 00:52:09,260 --> 00:52:12,320 Sa pangkalahatan, ano ang iyong nakita namin na hindi namin ginagawa namin ang pagpunta sa malloc 1094 00:52:12,320 --> 00:52:14,940 mga string, halimbawa, o array ng integer. 1095 00:52:14,940 --> 00:52:21,600 Kaya kung nais namin 10 integer, o 10 char, 10 ay magbibigay sa amin 10. 1096 00:52:21,600 --> 00:52:24,370 At pagkatapos ay ang laki ng char ay magbibigay sa sa amin na ang laki ng char, na sa 1097 00:52:24,370 --> 00:52:25,120 kasong ito ay 1 byte. 1098 00:52:25,120 --> 00:52:26,250 Kumuha kami ng 10 bytes. 1099 00:52:26,250 --> 00:52:28,540 Kung kami ay upang isulat ang laki ng int, na bigyan kami ng mga 40 bytes. 1100 00:52:28,540 --> 00:52:31,520 >> Kaya nang higit pa generically, sa loob ng malloc ay ang bilang ng mga byte na gusto mo. 1101 00:52:31,520 --> 00:52:34,620 Sa kasong ito, kami ay nakakakuha ng 1 byte. 1102 00:52:34,620 --> 00:52:36,900 Aling tila tulad ng isang kakaiba paggamit ng malloc, ngunit para sa aming mga 1103 00:52:36,900 --> 00:52:38,470 mga layuning pang-saysay. 1104 00:52:38,470 --> 00:52:40,420 Kaya doon lang iyon. 1105 00:52:40,420 --> 00:52:43,420 >> Kami ay pagpunta sa tumawag sa libre. 1106 00:52:43,420 --> 00:52:47,040 Kami mapupuksa ito at ginagamit namin muli ptr. 1107 00:52:47,040 --> 00:52:48,750 At ano ang nais mong suriin? 1108 00:52:48,750 --> 00:52:50,550 >> AARAL: ako Nais lamang upang suriin kung o hindi nagkaroon ng anumang bagay 1109 00:52:50,550 --> 00:52:51,900 sa loob nito. 1110 00:52:51,900 --> 00:52:53,050 >> Jason HIRSCHHORN: Kaya kung ito itinuturo sa anumang bagay? 1111 00:52:53,050 --> 00:52:57,740 >> AARAL: Oo, eksakto, kung ito ay nagkaroon pa rin ng isang memory address. 1112 00:52:57,740 --> 00:53:02,220 >> Jason HIRSCHHORN: Kaya gusto mo upang suriin ang halaga ng ptr? 1113 00:53:02,220 --> 00:53:03,470 >> AARAL: Oo, eksakto. 1114 00:53:03,470 --> 00:53:07,940 1115 00:53:07,940 --> 00:53:10,160 >> Jason HIRSCHHORN: Ano ang gagawin ko isulat dito kung gusto ko upang suriin ang halaga ng 1116 00:53:10,160 --> 00:53:11,880 point - ano, Jordan sinabi, ang halaga? 1117 00:53:11,880 --> 00:53:13,720 O kung ano ay naka-imbak sa loob ng ptr? 1118 00:53:13,720 --> 00:53:14,620 >> AARAL: Ang isang memory address. 1119 00:53:14,620 --> 00:53:16,330 >> Jason HIRSCHHORN: Ang isang memory address. 1120 00:53:16,330 --> 00:53:20,520 Kaya kung isulat ko pa lang ito, ipapakita ito magbigay sa akin ang halaga ng ptr. 1121 00:53:20,520 --> 00:53:22,800 At paano ko ipi-print out isang address na memory? 1122 00:53:22,800 --> 00:53:26,470 Ano ang format string para sa isang memory address? 1123 00:53:26,470 --> 00:53:27,430 >> AARAL:% p. 1124 00:53:27,430 --> 00:53:28,050 >> Jason HIRSCHHORN:% p. 1125 00:53:28,050 --> 00:53:29,500 % S ay isang string. 1126 00:53:29,500 --> 00:53:30,750 % P para pointer. 1127 00:53:30,750 --> 00:53:40,820 1128 00:53:40,820 --> 00:53:43,540 Iyan ba ang tama? 1129 00:53:43,540 --> 00:53:44,790 Iyon ang tama. 1130 00:53:44,790 --> 00:53:49,450 1131 00:53:49,450 --> 00:53:51,040 Kaya ptr ay katumbas ng - 1132 00:53:51,040 --> 00:53:53,350 ito pa rin ay may isang bagay sa loob nito. 1133 00:53:53,350 --> 00:53:56,110 1134 00:53:56,110 --> 00:53:57,645 Marahil ito ay isang mas kawili-wiling tanong. 1135 00:53:57,645 --> 00:53:59,198 Ano ang ibig na linya gawin? 1136 00:53:59,198 --> 00:54:00,830 >> AARAL: Seg faults. 1137 00:54:00,830 --> 00:54:01,310 >> Jason HIRSCHHORN: Ano? 1138 00:54:01,310 --> 00:54:02,678 >> AARAL: Sa tingin ko ito seg faults. 1139 00:54:02,678 --> 00:54:03,574 >> Jason HIRSCHHORN: Hm? 1140 00:54:03,574 --> 00:54:04,920 >> AARAL: Sa tingin ko magkakaroon ito seg fault. 1141 00:54:04,920 --> 00:54:08,265 >> Jason HIRSCHHORN: Kaya ang linyang ito ng code, bituin ptr, kung ano 1142 00:54:08,265 --> 00:54:10,152 ang ibig sabihin ng mga bituin? 1143 00:54:10,152 --> 00:54:11,240 >> AARAL: Nilalaman ng. 1144 00:54:11,240 --> 00:54:11,560 >> Jason HIRSCHHORN: Oo. 1145 00:54:11,560 --> 00:54:13,910 Pumunta upang makuha ang nilalaman ng. 1146 00:54:13,910 --> 00:54:16,830 Kaya ito ay pagpunta sa pumunta sa memory tugunan doon at bigyan ako iyon. 1147 00:54:16,830 --> 00:54:21,030 Ginamit ko% c dito mismo dahil doon ay nakaimbak doon character. 1148 00:54:21,030 --> 00:54:23,390 Kaya kami ay pagpunta upang pumunta sa na address namin Nakita lamang - o magkakaroon ito marahil maging isang 1149 00:54:23,390 --> 00:54:25,190 Medyo naiiba ito na patakbuhin namin ang programang. 1150 00:54:25,190 --> 00:54:28,010 Ngunit ipagpapatuloy namin sa address na iyon na kung saan alam namin pa rin umiiral 1151 00:54:28,010 --> 00:54:29,260 at makita kung ano ang doon. 1152 00:54:29,260 --> 00:54:35,640 1153 00:54:35,640 --> 00:54:37,110 >> Kaya ito ay hindi seg fault. 1154 00:54:37,110 --> 00:54:38,970 Ito lamang ay hindi magbibigay sa amin ng kahit ano. 1155 00:54:38,970 --> 00:54:43,350 Ito ay maaaring aktwal na ibinigay sa amin isang bagay, kami lamang ay hindi maaaring makita ito. 1156 00:54:43,350 --> 00:54:45,110 At na napupunta pabalik sa ideyang ito - 1157 00:54:45,110 --> 00:54:47,270 at hindi kami ay pagpunta upang makakuha ng masyadong maraming sa ito, dahil na lagpas sa 1158 00:54:47,270 --> 00:54:48,460 ang saklaw ng kursong ito. 1159 00:54:48,460 --> 00:54:51,260 Ngunit usapan natin ang tungkol dito mismo, kung namin nagpunta sa ibayo ng hangganan ng array sa pamamagitan ng 1160 00:54:51,260 --> 00:54:54,890 1, hindi namin maaaring makakuha sa problema. 1161 00:54:54,890 --> 00:54:58,550 >> Minsan, kapag pumunta off mo sa pamamagitan lamang ng 1, ikaw ay gumagawa ng mali, at ikaw 1162 00:54:58,550 --> 00:54:59,220 maaaring makipag-problema. 1163 00:54:59,220 --> 00:55:00,820 Ngunit wala ka laging makipag-problema. 1164 00:55:00,820 --> 00:55:05,170 Depende nito kung magkano ng isang masamang bagay sa iyo ko, hindi ka pagpunta upang makakuha ng sa problema. 1165 00:55:05,170 --> 00:55:07,790 Alin ang hindi na sabihin, maging nanggigitata sa iyong code. 1166 00:55:07,790 --> 00:55:12,080 Ngunit ito ay upang sabihin, ang programa ay hindi laging quit, kahit na pumunta ka sa isang lugar 1167 00:55:12,080 --> 00:55:14,130 hindi ka dapat pumunta. 1168 00:55:14,130 --> 00:55:18,170 >> Ang isang mahusay na halimbawa ng iyon ay, ng maraming tao sa kanilang mga problema set 3, na 1169 00:55:18,170 --> 00:55:22,350 ay 15, ay hindi suriin ang hanggahan ng board. 1170 00:55:22,350 --> 00:55:25,860 Kaya mo ay tumingin sa kaliwa, tumingin sa kanan, tumingin sa tuktok, ay tumingin 1171 00:55:25,860 --> 00:55:27,000 hanggang sa ibaba. 1172 00:55:27,000 --> 00:55:31,540 Ngunit hindi mo suriin upang makita kung ang tuktok ay talagang pagpunta sa maging sa board. 1173 00:55:31,540 --> 00:55:35,220 At may maraming mga tao na ginawa na at Naka na in, nagtrabaho ang kanilang mga programa 1174 00:55:35,220 --> 00:55:38,960 ganap na ganap, dahil kung saan na board ay naka-imbak sa memorya, kung ikaw nagpunta isa 1175 00:55:38,960 --> 00:55:42,300 nasa itaas nito o naka-check na memory address, nagkaroon hindi anumang bagay 1176 00:55:42,300 --> 00:55:44,870 lalo na kalagim-lagim tungkol sa na, kaya ang iyong programa ay hindi 1177 00:55:44,870 --> 00:55:45,970 pagpunta sa sigaw sa iyo. 1178 00:55:45,970 --> 00:55:48,870 >> Ngunit nais naming mag-alis pa rin point kung hindi mo suriin na, dahil sa iyo 1179 00:55:48,870 --> 00:55:50,850 ay paggawa ng isang bagay na ikaw ay hindi ipagpalagay na gawin, at maaari kang magkaroon ng 1180 00:55:50,850 --> 00:55:51,860 nakuha sa problema. 1181 00:55:51,860 --> 00:55:54,040 Logro ay, bagaman, marahil ang hindi. 1182 00:55:54,040 --> 00:55:57,790 Kaya ito ay upang ipakita na, oo, maaari naming pa rin pumunta dito. 1183 00:55:57,790 --> 00:55:59,010 At hindi namin nakukuha sa pag sa kasong ito. 1184 00:55:59,010 --> 00:56:04,000 Kung sinubukan naming gawin basahin ang susunod na 100 character, kami ay 1185 00:56:04,000 --> 00:56:06,000 marahil makakuha sa problema. 1186 00:56:06,000 --> 00:56:09,400 At maaari mong code ng pagbabasa ng susunod na 100 character kung gusto mo sa pamamagitan ng paggawa ng ilang 1187 00:56:09,400 --> 00:56:10,110 uri ng para sa loop. 1188 00:56:10,110 --> 00:56:10,850 Oo. 1189 00:56:10,850 --> 00:56:16,250 >> AARAL: Dahil tayo ay nakatalaga na espasyo isang aktwal na halaga, kami gagawin hindi 1190 00:56:16,250 --> 00:56:17,050 talaga magawang makita ang anumang bagay. 1191 00:56:17,050 --> 00:56:21,740 Dapat subukan namin ito sa pag-set na katumbas ng gusto c o ng isang bagay? 1192 00:56:21,740 --> 00:56:22,640 >> Jason HIRSCHHORN: Mahusay pinag-uusapan. 1193 00:56:22,640 --> 00:56:25,340 Paano ko itatakda ang halaga na - 1194 00:56:25,340 --> 00:56:28,980 ano linya ng code ako magsusulat sa linya pito na gawin kung ano ang iyong sinabi? 1195 00:56:28,980 --> 00:56:34,040 >> AARAL: Bituin ptr ay katumbas ng single quote c magtapos single quote. 1196 00:56:34,040 --> 00:56:36,970 >> Jason HIRSCHHORN: Kaya na paglalagay isang character, c, sa lokasyon na iyon, 1197 00:56:36,970 --> 00:56:40,200 dahil muli, na bituin Nangangahulugan pumunta sa doon. 1198 00:56:40,200 --> 00:56:43,320 At kapag ginamit sa kaliwang bahagi ng isang pagtatalaga operator, na katumbas ng 1199 00:56:43,320 --> 00:56:47,270 mag-sign, hindi namin pagpunta upang makakuha ng na halaga kaya magkano bilang itakda ang halaga. 1200 00:56:47,270 --> 00:56:48,520 Ngayon sabihin makita kung ano ang mangyayari. 1201 00:56:48,520 --> 00:56:54,700 1202 00:56:54,700 --> 00:56:56,770 >> Naglaan na kami ng isang bagay doon at ito ay doon. 1203 00:56:56,770 --> 00:56:58,000 Tinatawag na kami ng mga libreng. 1204 00:56:58,000 --> 00:57:00,100 Marahil nangyari ang ilang mga bagay-bagay sa ang magbunton. 1205 00:57:00,100 --> 00:57:01,890 Kaya ito ay hindi doon ngayon. 1206 00:57:01,890 --> 00:57:07,440 Ngunit muli, hindi namin nakukuha sa pag para sa pagpunta doon. 1207 00:57:07,440 --> 00:57:10,260 >> Ako ginagawa ito out sa code upang ilarawan na marami sa mga 1208 00:57:10,260 --> 00:57:12,410 mga tanong na mayroon ka, ang mga ito ay talagang kawili-wiling 1209 00:57:12,410 --> 00:57:13,650 sumasagot ng maraming oras. 1210 00:57:13,650 --> 00:57:15,260 At ang mga ito ay talagang mahusay na mga katanungan. 1211 00:57:15,260 --> 00:57:19,010 At maaari mong malaman kung ang mga ito sa iyong sarili kung, halimbawa, 1212 00:57:19,010 --> 00:57:19,990 hindi kami sa seksyon. 1213 00:57:19,990 --> 00:57:20,940 Oo. 1214 00:57:20,940 --> 00:57:24,430 >> AARAL: Dahil hindi ka Ipinapadala ang pointer kahit saan, kailangan mong i- 1215 00:57:24,430 --> 00:57:26,530 gamitin ang malloc? 1216 00:57:26,530 --> 00:57:28,400 >> Jason HIRSCHHORN: Kaya ito napupunta pabalik sa iyong paunang tanong. 1217 00:57:28,400 --> 00:57:28,620 [? ?] 1218 00:57:28,620 --> 00:57:29,980 Ito ba ay lamang ng isang lokal na variable? 1219 00:57:29,980 --> 00:57:32,280 Malloc dito ay hindi na nakakahimok. 1220 00:57:32,280 --> 00:57:35,260 Ang paggamit ng malloc dito ay hindi na nakakahimok dahil ito ay 1221 00:57:35,260 --> 00:57:36,500 lamang ng isang lokal na variable. 1222 00:57:36,500 --> 00:57:40,970 >> AARAL: Kaya magagawa mo pansamantalang trabaho star ptr ay katumbas ng kumusta? 1223 00:57:40,970 --> 00:57:41,400 >> Jason HIRSCHHORN: Oh. 1224 00:57:41,400 --> 00:57:43,300 Kaya kami ay pagpunta sa ngayon babalikan sa iyong paunang tanong. 1225 00:57:43,300 --> 00:57:46,885 Sa tingin ko kayo ay hindi nasiyahan kasama ang aking sagot. 1226 00:57:46,885 --> 00:57:48,220 OK? 1227 00:57:48,220 --> 00:57:49,226 Tulad ng mga iyon? 1228 00:57:49,226 --> 00:57:49,682 >> AARAL: Oo. 1229 00:57:49,682 --> 00:57:50,932 Maghintay. 1230 00:57:50,932 --> 00:57:54,090 1231 00:57:54,090 --> 00:57:57,850 >> Jason HIRSCHHORN: At kung saan nais mong i-print out? 1232 00:57:57,850 --> 00:58:00,026 Kaya makikita print namin ang isang string tulad na? 1233 00:58:00,026 --> 00:58:06,380 1234 00:58:06,380 --> 00:58:07,630 >> AARAL: Kawili-wiling. 1235 00:58:07,630 --> 00:58:09,900 1236 00:58:09,900 --> 00:58:14,285 >> Jason HIRSCHHORN: Kaya ito sabi ni ito argumento ay ang uri ng isang character. 1237 00:58:14,285 --> 00:58:17,200 1238 00:58:17,200 --> 00:58:18,620 Kaya ito ay dapat na isang character. 1239 00:58:18,620 --> 00:58:25,170 1240 00:58:25,170 --> 00:58:26,280 >> AARAL: tumatagal lang ang unang isa. 1241 00:58:26,280 --> 00:58:28,610 >> Jason HIRSCHHORN: So ito ay kung ano ang aking sinabi bago. 1242 00:58:28,610 --> 00:58:34,240 Tulad ng sinabi ko, hindi ito ang pag-iimbak ang string sa loob variable pointer. 1243 00:58:34,240 --> 00:58:35,120 Ito ay ang pag-iimbak - 1244 00:58:35,120 --> 00:58:36,350 >> AARAL: Ang unang halaga ng string. 1245 00:58:36,350 --> 00:58:40,810 >> Jason HIRSCHHORN: Ang address ng sa unang halaga ng string. 1246 00:58:40,810 --> 00:58:46,940 Kung kami ay upang i-print out ito, hindi kami pagkuha ng mga halaga sa loob pointer. 1247 00:58:46,940 --> 00:58:51,005 At muli naming makita ito ay, sa katunayan, address ng memorya. 1248 00:58:51,005 --> 00:58:53,595 1249 00:58:53,595 --> 00:58:56,440 >> Ba na magkaroon ng kahulugan? 1250 00:58:56,440 --> 00:58:56,940 Sorry. 1251 00:58:56,940 --> 00:58:58,996 Maghintay, ay na sagutin ang iyong tanong, bagaman? 1252 00:58:58,996 --> 00:58:59,790 >> AARAL: Oo. 1253 00:58:59,790 --> 00:59:05,830 >> Jason HIRSCHHORN: Ito linya ng code ay paglikha ng isang string at pagkatapos ay isa pang 1254 00:59:05,830 --> 00:59:09,115 variable pointer na tumuturo sa na string, na array. 1255 00:59:09,115 --> 00:59:14,320 1256 00:59:14,320 --> 00:59:14,980 Oo. 1257 00:59:14,980 --> 00:59:19,200 >> AARAL: Kaya kung nagpunta kami ng isa memorya tugunan ang karagdagang, nais makuha namin ang h? 1258 00:59:19,200 --> 00:59:21,990 1259 00:59:21,990 --> 00:59:23,150 Ay ito ay naka-imbak bilang isang string? 1260 00:59:23,150 --> 00:59:24,400 >> Jason HIRSCHHORN: Tulad ng, ginawa namin - 1261 00:59:24,400 --> 00:59:28,540 1262 00:59:28,540 --> 00:59:30,790 kaya ito ay mahalaga na gawin. 1263 00:59:30,790 --> 00:59:33,780 Ito ay point aritmetika, kung saan ka guys nakita bago at dapat ay 1264 00:59:33,780 --> 00:59:35,550 medyo komportable. 1265 00:59:35,550 --> 00:59:36,905 Ito ay kauri sa pagsusulat - 1266 00:59:36,905 --> 00:59:41,980 1267 00:59:41,980 --> 00:59:46,350 kung kami ay upang isulat ito linya ng code, nakakita kami pagtatanda array bago. 1268 00:59:46,350 --> 00:59:55,900 Ito ay dapat magbigay sa amin ang pangalawang halaga sa array, h. 1269 00:59:55,900 --> 01:00:05,010 >> Kung ginawa namin ito, ito ay dapat ding magbigay amin ang pangalawang halaga sa na array. 1270 01:00:05,010 --> 01:00:08,320 Dahil ito ay pagpunta hindi sa memory address ng unang bagay na, ngunit ang 1271 01:00:08,320 --> 01:00:10,530 memory address ng bagay isa sa ibabaw. 1272 01:00:10,530 --> 01:00:14,360 At pagkatapos ay ang bituin operator dereferences na pointer. 1273 01:00:14,360 --> 01:00:16,940 At muli, sabihin makita. 1274 01:00:16,940 --> 01:00:18,664 Kumuha kami muli h. 1275 01:00:18,664 --> 01:00:20,980 >> AARAL: Ano ang eksakto dereference ibig sabihin? 1276 01:00:20,980 --> 01:00:23,650 >> Jason HIRSCHHORN: Dereference ay isang magarbong salita para pumunta sa. 1277 01:00:23,650 --> 01:00:26,390 Pumunta sa iyon at makakuha ng kung ano ang doon ay upang dereference isang pointer. 1278 01:00:26,390 --> 01:00:28,240 Ito ay lamang ng isang magarbong salita para doon. 1279 01:00:28,240 --> 01:00:29,986 >> AARAL: Kung gusto naming i-print ang buong string, magagawa namin 1280 01:00:29,986 --> 01:00:31,930 gawin ampersand pointer? 1281 01:00:31,930 --> 01:00:33,490 >> Jason HIRSCHHORN: OK, kami ay pagpunta sa i-pause dito. 1282 01:00:33,490 --> 01:00:35,480 Pupunta kami sa mga end dito. 1283 01:00:35,480 --> 01:00:41,760 Binibigyan ka ng ampersand ang address ng isang lokasyon, kaya kapag gumawa ka ng ampersand 1284 01:00:41,760 --> 01:00:44,080 isang variable, binibigyan ka nito ng address kung saan variable na ay naka-imbak. 1285 01:00:44,080 --> 01:00:48,580 Ampersand pointer ay magbibigay sa iyo ang address ng ptr kung saan ptr ay nasa memorya. 1286 01:00:48,580 --> 01:00:50,140 >> Hindi namin pagpunta sa pumunta sa may halimbawang ito. 1287 01:00:50,140 --> 01:00:52,640 Maaari mong malaman kung ang mga bagay sa inyong sarili. 1288 01:00:52,640 --> 01:00:55,740 Ngunit muli, ito ay maaaring kahit na ma-verging isang bit na lampas sa kung ano ang kailangan mong malaman para sa 1289 01:00:55,740 --> 01:00:58,000 ang saklaw ng ito mid-matagalang - 1290 01:00:58,000 --> 01:00:59,070 o ito pagsusulit, sa halip. 1291 01:00:59,070 --> 01:01:00,270 Sorry. 1292 01:01:00,270 --> 01:01:03,770 >> Pupunta kami upang ilipat sa, dahil gagawin ko i gawin ang isa sa coding problema 1293 01:01:03,770 --> 01:01:05,100 bago ang oras ay up. 1294 01:01:05,100 --> 01:01:09,340 At kami ay pagpunta sa code kung ano ang aking tingin ay ang pinaka-nakakahimok ng mga 1295 01:01:09,340 --> 01:01:11,020 halimbawa, atoi. 1296 01:01:11,020 --> 01:01:14,520 Kaya ito ay isang tanong sa isang pagsusulit dalawang taon na ang nakakaraan. 1297 01:01:14,520 --> 01:01:17,810 At mayroon akong ito sa board dito. 1298 01:01:17,810 --> 01:01:20,680 >> Ang mga tao ay nagtanong sa pagsusulit - 1299 01:01:20,680 --> 01:01:23,640 sila ay bibigyan ng kaunti pa tesxt sa ang tanong, ngunit eliminated ko ang 1300 01:01:23,640 --> 01:01:26,640 teksto sapagkat ito ay hindi kinakailangang para sa aming mga layuning ngayon. 1301 01:01:26,640 --> 01:01:29,180 Ito ay ilan lang sa background sa kung anong atoi ginawa. 1302 01:01:29,180 --> 01:01:31,425 Ngunit mo ang lahat ng alam at napaka pamilyar sa atoi. 1303 01:01:31,425 --> 01:01:35,620 >> Iminumungkahi ko sa iyo ang code na ito sa isang sheet ng papel. 1304 01:01:35,620 --> 01:01:39,310 Iminumungkahi ko rin na gamitin mo ang diskarte na-nawala kami sa ibabaw 1305 01:01:39,310 --> 01:01:41,040 marami sa aming seksyon. 1306 01:01:41,040 --> 01:01:44,130 Una, tiyaking nauunawaan mo ang ano atoi ng paggawa. 1307 01:01:44,130 --> 01:01:47,580 Gumuhit ng isang larawan o makabuo ng ilang mental na imahe ng ito sa iyong ulo. 1308 01:01:47,580 --> 01:01:51,120 Susunod, isulat pseudocode para sa ito. 1309 01:01:51,120 --> 01:01:53,120 Sa pagsusulit, kung ang lahat makuha mo ay pseudocode, ng hindi bababa sa iyo 1310 01:01:53,120 --> 01:01:54,550 maglagay ng isang bagay pababa. 1311 01:01:54,550 --> 01:02:00,070 At pagkatapos ay i-map na pseudocode sa C. Kung mayroon kang isang tseke sa iyong 1312 01:02:00,070 --> 01:02:03,760 pseudocode, tulad ng suriin kung ang isang bagay ay 1, na maps sa isang kung 1313 01:02:03,760 --> 01:02:05,750 kalagayan at iba pa. 1314 01:02:05,750 --> 01:02:07,850 At sa wakas, code sa program sa C. 1315 01:02:07,850 --> 01:02:15,000 >> Kaya bumalik sa atoi at tumagal ng limang minuto sa code na ito sa isang sheet ng 1316 01:02:15,000 --> 01:02:19,480 papel, na kung saan ay marahil tungkol sa dami ng oras na gusto mong gawin sa isang 1317 01:02:19,480 --> 01:02:21,260 pagsusulit sa atoi code. 1318 01:02:21,260 --> 01:02:27,060 Limang sa 15 minuto, lima hanggang 12, lima hanggang 10 minuto, ay tungkol sa halaga ng 1319 01:02:27,060 --> 01:02:30,150 oras na nais mong gastusin sa tanong sa pagsusulit. 1320 01:02:30,150 --> 01:02:31,670 Kaya tumagal ng limang minuto ngayon, mangyaring. 1321 01:02:31,670 --> 01:02:35,957 At kung mayroon kang anumang mga katanungan, itataas iyong kamay at ako makakakita dumating sa paligid. 1322 01:02:35,957 --> 01:06:39,570 1323 01:06:39,570 --> 01:06:41,066 >> [Side CONVERSATIONS] 1324 01:06:41,066 --> 01:08:35,279 1325 01:08:35,279 --> 01:08:37,580 >> Jason HIRSCHHORN: OK, kaya na noon ay limang minuto. 1326 01:08:37,580 --> 01:08:39,880 Iyon ay marahil tungkol sa halaga ng oras na nais mong gastusin sa na sa isang pagsusulit, 1327 01:08:39,880 --> 01:08:42,120 siguro ang mababang dulo ng oras na iyon. 1328 01:08:42,120 --> 01:08:44,010 Susubukan naming pagbabalik-tanaw sa isang bit. 1329 01:08:44,010 --> 01:08:45,740 Ipaalam sa amin simulan coding na ito. 1330 01:08:45,740 --> 01:08:49,479 At kung hindi namin makuha ang lahat ng mga paraan sa pamamagitan, ang mga sagot sa mga ito at ito 1331 01:08:49,479 --> 01:08:54,189 pagsusulit tanong ay magagamit, muli, Taglagas 2011 ay kapag pinag-uusapan ito 1332 01:08:54,189 --> 01:08:54,913 Lumitaw sa pagsusulit. 1333 01:08:54,913 --> 01:08:57,830 >> At iyon ay nagkakahalaga ng walong puntos sa pagsusulit pagkatapos. 1334 01:08:57,830 --> 01:09:01,140 Eight point ay nasa mataas na dulo ng halaga ng mga puntos na ang isang bagay ay nagkakahalaga. 1335 01:09:01,140 --> 01:09:04,790 Karamihan sa mga tanong ay nasa hanay ng 1-6 puntos. 1336 01:09:04,790 --> 01:09:08,500 Kaya ito ay isang mas mapaghamong pinag-uusapan, para sigurado. 1337 01:09:08,500 --> 01:09:09,750 Maaari kahit sino makakuha ako magsisimula? 1338 01:09:09,750 --> 01:09:13,260 1339 01:09:13,260 --> 01:09:15,380 >> Sa pangkalahatan, ano kami makapupunta sa nais gawin sa ito 1340 01:09:15,380 --> 01:09:17,550 gumana atoi, lohikal? 1341 01:09:17,550 --> 01:09:19,569 Ano ang gusto naming gawin? 1342 01:09:19,569 --> 01:09:22,279 Kaya kami ay pagpunta sa magsulat ilang pseudocode. 1343 01:09:22,279 --> 01:09:24,090 >> AARAL: I-convert ang mga character sa integer. 1344 01:09:24,090 --> 01:09:26,700 >> Jason HIRSCHHORN: I-convert ang mga character sa integer. 1345 01:09:26,700 --> 01:09:27,479 OK. 1346 01:09:27,479 --> 01:09:30,870 Kaya kung gaano karaming mga character ay namin pagpunta sa kailangan upang pumunta sa pamamagitan ng? 1347 01:09:30,870 --> 01:09:32,295 >> AARAL: Ang lahat ng mga ito. 1348 01:09:32,295 --> 01:09:34,100 >> AARAL: Lahat ng mga character sa string. 1349 01:09:34,100 --> 01:09:35,540 >> Jason HIRSCHHORN: Lahat ng mga character sa string. 1350 01:09:35,540 --> 01:09:42,180 Kaya kung gusto naming pumunta sa pamamagitan ng bawat character sa isang string, ano ang isang bagay 1351 01:09:42,180 --> 01:09:44,560 sa C nasaksihan namin na pinapayagan amin upang pumunta sa pamamagitan ng bawat 1352 01:09:44,560 --> 01:09:45,939 character sa isang string? 1353 01:09:45,939 --> 01:09:46,819 >> ESTUDYANTE: Isang para sa loop. 1354 01:09:46,819 --> 01:09:48,069 >> Jason HIRSCHHORN: Isang para sa loop. 1355 01:09:48,069 --> 01:09:52,020 1356 01:09:52,020 --> 01:09:55,330 Kaya kami ay pagpunta sa loop sa pamamagitan ng bawat character sa s. 1357 01:09:55,330 --> 01:10:00,940 >> Pagkatapos, anong kami makapupunta sa nais na gawin kapag makuha namin ang isang tiyak na character? 1358 01:10:00,940 --> 01:10:02,480 Sabihing ka namin nagsisimula pa pumasa sa isang 90. 1359 01:10:02,480 --> 01:10:03,460 Kumuha kami ng 9. 1360 01:10:03,460 --> 01:10:04,240 Ito ay isang character. 1361 01:10:04,240 --> 01:10:07,440 Ano ang gusto naming gawin sa na karakter 9? 1362 01:10:07,440 --> 01:10:10,082 >> AARAL: Magbawas ng ito mula sa character 0? 1363 01:10:10,082 --> 01:10:11,860 >> AARAL: Magdagdag ng 0? 1364 01:10:11,860 --> 01:10:13,350 >> Jason HIRSCHHORN: Magbawas ito mula sa character 0? 1365 01:10:13,350 --> 01:10:13,800 >> AARAL: Oo. 1366 01:10:13,800 --> 01:10:15,573 >> Jason HIRSCHHORN: Bakit Gusto mo bang gawin iyon? 1367 01:10:15,573 --> 01:10:16,560 >> AARAL: [hindi marinig] 1368 01:10:16,560 --> 01:10:17,010 halaga. 1369 01:10:17,010 --> 01:10:18,380 Int halaga nito. 1370 01:10:18,380 --> 01:10:21,580 >> Jason HIRSCHHORN: OK, kaya kinukuha namin ang na character 9, ibabawas ito mula sa 1371 01:10:21,580 --> 01:10:25,820 0 karakter upang makakuha ng aktwal na integer 9. 1372 01:10:25,820 --> 01:10:27,070 Sweet. 1373 01:10:27,070 --> 01:10:31,255 1374 01:10:31,255 --> 01:10:37,000 At kung paano ang kilala mo na karakter 9 minus 0 karakter ay 9? 1375 01:10:37,000 --> 01:10:39,222 Ano tsart ay kang tumingin sa? 1376 01:10:39,222 --> 01:10:43,130 >> AARAL: May mga lohikal na siyam mga lugar sa pagitan ng 9 at 0. 1377 01:10:43,130 --> 01:10:44,620 O maaari kang tumingin sa talahanayan ASCII. 1378 01:10:44,620 --> 01:10:45,120 >> Jason HIRSCHHORN: ASCII table. 1379 01:10:45,120 --> 01:10:46,490 Ngunit oo, ikaw ay tama rin. 1380 01:10:46,490 --> 01:10:47,780 Kaya ibawas namin 0. 1381 01:10:47,780 --> 01:10:49,010 Kaya ngayon ay mayroon kaming ang integer 9. 1382 01:10:49,010 --> 01:10:49,970 At ano ang gusto naming gawin sa mga iyon? 1383 01:10:49,970 --> 01:10:54,970 Kung mayroon kaming 90, ito ay ang unang integer na, kung ano ang gusto namin naming gawin? 1384 01:10:54,970 --> 01:10:58,180 >> AARAL: gusto kong ilagay sa isang pansamantalang integer array, pagkatapos ay gawin sa matematika upang ito 1385 01:10:58,180 --> 01:11:02,088 mamaya upang gumawa ng ito sa isang dulo. 1386 01:11:02,088 --> 01:11:03,020 >> Jason HIRSCHHORN: OK. 1387 01:11:03,020 --> 01:11:06,990 >> AARAL: Maaari mong simulan sa dulo ng ang array at pagkatapos ay sumulong kaya 1388 01:11:06,990 --> 01:11:10,350 na sa bawat oras na ilipat mo inaabangan ang panahon, mo i-multiply ito ng 10. 1389 01:11:10,350 --> 01:11:10,830 >> Jason HIRSCHHORN: OK. 1390 01:11:10,830 --> 01:11:12,250 Iyan tulad ng isang kaakit-akit nakahihimok na ideya. 1391 01:11:12,250 --> 01:11:16,040 Maaari naming magsimula sa dulo ng aming mga array, at maaari naming gamitin strleng. 1392 01:11:16,040 --> 01:11:17,030 Maaari naming gamitin strleng in dito. 1393 01:11:17,030 --> 01:11:18,870 Susubukan naming makuha ang haba ng aming mga string. 1394 01:11:18,870 --> 01:11:20,100 Simulan namin sa dulo. 1395 01:11:20,100 --> 01:11:29,170 At + ang una, kinukuha namin lamang na integer, at siguro lumikha kami tulad ng isang 1396 01:11:29,170 --> 01:11:32,270 bagong variable integer up tuktok kung saan ka sa pag-iimbak namin ang lahat. 1397 01:11:32,270 --> 01:11:37,340 Kaya loop namin sa pamamagitan ng bawat pansamantalang trabaho sa mga mula bumalik sa harap, ibabawas namin ang 0, at 1398 01:11:37,340 --> 01:11:42,790 pagkatapos ay dadalhin namin ito, at depende sa kung saan ito ay, i-multiply namin ito 1399 01:11:42,790 --> 01:11:45,860 sa pamamagitan ng kapangyarihan ng 10. 1400 01:11:45,860 --> 01:11:50,644 Dahil ang unang isa, ano ang ginagawa namin multiply ang rightmost ng character sa pamamagitan ng? 1401 01:11:50,644 --> 01:11:51,440 >> AARAL: 10 sa 0. 1402 01:11:51,440 --> 01:11:53,170 >> Jason HIRSCHHORN: 10 sa 0. 1403 01:11:53,170 --> 01:11:56,010 Ano ang multiply namin ang pangalawang rightmost ng character sa pamamagitan ng? 1404 01:11:56,010 --> 01:11:57,450 >> AARAL: [hindi marinig]. 1405 01:11:57,450 --> 01:11:57,960 >> Jason HIRSCHHORN: Ano? 1406 01:11:57,960 --> 01:11:59,150 >> AARAL: 10 sa 1. 1407 01:11:59,150 --> 01:12:00,420 >> Jason HIRSCHHORN: 10 sa 1. 1408 01:12:00,420 --> 01:12:03,754 Ang third-rightmost ng character? 1409 01:12:03,754 --> 01:12:04,580 >> AARAL: 10 sa 2. 1410 01:12:04,580 --> 01:12:05,350 >> Jason HIRSCHHORN: 10 sa 2. 1411 01:12:05,350 --> 01:12:07,200 >> AARAL: Paumanhin, hindi ko maintindihan kung anong ginagawa namin dito. 1412 01:12:07,200 --> 01:12:08,640 >> Jason HIRSCHHORN: OK, sabihin bumalik, pagkatapos. 1413 01:12:08,640 --> 01:12:12,500 Kaya kami ay pagpunta upang makakuha ng nakapasa sa isang string. 1414 01:12:12,500 --> 01:12:14,470 Dahil kami ay sumusulat atoi. 1415 01:12:14,470 --> 01:12:15,260 Kaya natin ang pumasa sa isang string. 1416 01:12:15,260 --> 01:12:17,640 Sabihing ka namin nagsisimula pa pumasa sa sa string 90. 1417 01:12:17,640 --> 01:12:19,930 >> Ang unang bagay na kami ay pagpunta sa gawin ay itakda isang bagong variable integer na kami 1418 01:12:19,930 --> 01:12:22,150 lamang ng pagpunta sa lumikha bilang aming bagong integer. 1419 01:12:22,150 --> 01:12:24,630 Iyon ay kung ano kami ay pagpunta upang bumalik sa dulo. 1420 01:12:24,630 --> 01:12:30,110 Kailangan namin upang pumunta sa pamamagitan ng bawat character sa ang string dahil natukoy naming 1421 01:12:30,110 --> 01:12:34,430 na kailangan namin upang hawakan ang bawat isa at pagkatapos ay idagdag ito sa aming bagong integer. 1422 01:12:34,430 --> 01:12:36,330 >> Ngunit hindi namin maaaring idagdag lamang ito bilang isang numero. 1423 01:12:36,330 --> 01:12:38,270 Hindi namin maaaring lamang tumagal ng 9 at magdagdag 9 sa aming integer. 1424 01:12:38,270 --> 01:12:40,560 Depende ito sa kung anong lugar ito ay nasa string. 1425 01:12:40,560 --> 01:12:42,960 Kami ay pagpunta sa kailangan upang i-multiply ito sa pamamagitan ng kapangyarihan ng 10. 1426 01:12:42,960 --> 01:12:45,580 Dahil na kung paano base 10 mga gawa. 1427 01:12:45,580 --> 01:12:49,050 >> Kaya kami ay pagpunta upang makuha ang aktwal na karakter, o ang aktwal na integer 1428 01:12:49,050 --> 01:12:53,860 numero, sa pamamagitan ng pagbabawas ng character 0 mula sa character 9 tulad ng ginawa namin sa 1429 01:12:53,860 --> 01:12:57,560 pagbabawas ng character capital A mula sa kami kahit anong character na nagkaroon sa isa sa 1430 01:12:57,560 --> 01:12:58,120 ang mga problemang ito. 1431 01:12:58,120 --> 01:13:04,190 Kaya makikita talaga kami makakuha ng isang numero mula 0 hanggang 9-save bilang isang tunay na numero, at kami ay 1432 01:13:04,190 --> 01:13:07,590 multiply ito sa pamamagitan ng kapangyarihan ng 10 depende sa kung saan kami ay sa string. 1433 01:13:07,590 --> 01:13:19,430 1434 01:13:19,430 --> 01:13:22,575 At pagkatapos ay kami ay pagpunta upang idagdag ito pabalik sa aming bagong variable integer. 1435 01:13:22,575 --> 01:13:32,840 1436 01:13:32,840 --> 01:13:37,890 >> Kaya kung ano ang magiging hitsura ng iyong gagawin ma - ipapakita namin gumuhit sa paglipas dito. 1437 01:13:37,890 --> 01:13:40,086 Kung makuha namin ang pumasa sa sa string 90 - 1438 01:13:40,086 --> 01:13:41,336 >> AARAL: [hindi marinig]. 1439 01:13:41,336 --> 01:13:43,190 1440 01:13:43,190 --> 01:13:45,540 >> Jason HIRSCHHORN: Ngunit atoi tumatagal ng isang string. 1441 01:13:45,540 --> 01:13:46,350 Kaya kami ay pagpunta sa pumunta sa pamamagitan ng ang paghawak. 1442 01:13:46,350 --> 01:13:49,900 Susubukan naming makakuha ng mga nakapasa sa 90. 1443 01:13:49,900 --> 01:13:51,540 Pumunta namin mula sa pabalik sa harap. 1444 01:13:51,540 --> 01:13:53,920 Isinasaalang-alang namin ang 0. 1445 01:13:53,920 --> 01:13:55,080 >> AARAL: Sorry. 1446 01:13:55,080 --> 01:13:55,880 Siguro ito ay bobo. 1447 01:13:55,880 --> 01:13:59,440 Kung kami nagsisimula ka pa nakapasa sa isang string, kung bakit ay 90 ano kami ay 1448 01:13:59,440 --> 01:14:00,260 nagsisimula pa ang pumasa sa? 1449 01:14:00,260 --> 01:14:03,160 Dahil ang 90 ay isang integer. 1450 01:14:03,160 --> 01:14:06,820 >> Jason HIRSCHHORN: Dahil atoi tumatagal ng isang string at lumiliko ito sa integer 1451 01:14:06,820 --> 01:14:08,320 representasyon ng na string. 1452 01:14:08,320 --> 01:14:13,650 Ngunit ang string na 90 ay hindi ang integer 90 o ang bilang 90. 1453 01:14:13,650 --> 01:14:17,920 Ang string 90 ay isang hanay ng mga dalawang, o tatlong character, sa halip, ang 9 1454 01:14:17,920 --> 01:14:22,740 karakter, ang 0 karakter, at ang backslash 0 karakter. 1455 01:14:22,740 --> 01:14:26,260 >> At kami ay sumusulat atoi dahil, para sa Halimbawa, kapag magdadala sa iyo ang command 1456 01:14:26,260 --> 01:14:30,230 linya ng argumento, at na-save ito argv, na-save ito bilang isang string. 1457 01:14:30,230 --> 01:14:32,940 Ngunit kung nais mong ituring ito bilang isang numero, kailangan mong i-convert ito sa isang 1458 01:14:32,940 --> 01:14:34,700 aktwal na integer. 1459 01:14:34,700 --> 01:14:37,210 Aling mga ginawa namin sa isa sa aming mga hanay ng problema. 1460 01:14:37,210 --> 01:14:38,800 Aling mga ginawa namin sa isang numero sa aming mga hanay ng problema. 1461 01:14:38,800 --> 01:14:41,690 Ang bawat tao'y na tumagal ng isang integer bilang isang argumento command line. 1462 01:14:41,690 --> 01:14:46,490 Kaya na ang dahilan kung bakit ang aming atoi function na tumatagal ng isang string. 1463 01:14:46,490 --> 01:14:51,910 >> Kaya muli, sa aming mga halimbawa dito, kami ay pagpunta sa gawin ang huling isa. 1464 01:14:51,910 --> 01:14:55,050 Kami ay pagpunta sa ibawas ang karakter 0 mula dito, dahil ang mga character na 0 1465 01:14:55,050 --> 01:14:58,810 awas sa pamamagitan ng mga character na 0 ay nagbibigay sa iyo ang aktwal na bilang 0, ayon sa 1466 01:14:58,810 --> 01:15:00,950 ang ASCII math na ginagawa namin. 1467 01:15:00,950 --> 01:15:04,870 >> Dahil ang mga character ay kinakatawan bilang iba kaysa sa kanilang tunay - ang 1468 01:15:04,870 --> 01:15:08,830 karakter ng, halimbawa, lowercase isang ay 97. 1469 01:15:08,830 --> 01:15:10,260 Hindi ito - oops! 1470 01:15:10,260 --> 01:15:13,290 Ito ay hindi ang kahit anong gusto mong asahan ito upang maging, 0, halimbawa. 1471 01:15:13,290 --> 01:15:16,200 Kaya kailangan mong ibawas ang na character sa isang upang makakuha ng 0. 1472 01:15:16,200 --> 01:15:18,950 >> Kaya kami ay pagpunta sa gawin iyon dito upang makuha ang aktwal na bilang. 1473 01:15:18,950 --> 01:15:22,560 At pagkatapos ay pumunta kami sa multiply ito sa pamamagitan ng isang kapangyarihan ng 10 depende sa kung saan ito 1474 01:15:22,560 --> 01:15:27,030 ay nasa string, at pagkatapos ay dadalhin na at idagdag ito sa aming mga may-hawak ng lugar 1475 01:15:27,030 --> 01:15:32,520 variable upang maaari makabuo kami sa ang aming panghuling bagong integer. 1476 01:15:32,520 --> 01:15:35,080 Ba na ang may katuturan sa lahat? 1477 01:15:35,080 --> 01:15:37,730 >> Kaya kami ay hindi pagpunta sa code na ito sa ngayon, dahil kami 1478 01:15:37,730 --> 01:15:38,830 pagkuha ng maikling sa oras. 1479 01:15:38,830 --> 01:15:40,860 Humihingi ako ng paumanhin para sa tiyempo ng mga iyon. 1480 01:15:40,860 --> 01:15:44,620 Ngunit ito ay kung ano ang, sana, gagawin mo magawa sa pagsusulit - sa 1481 01:15:44,620 --> 01:15:47,710 napaka hindi bababa sa, kumuha ng mga ito pseudocode nakasulat out. 1482 01:15:47,710 --> 01:15:50,840 >> At pagkatapos ay, kung kami ay upang isulat ang pseudocode, talaga, maaari naming gawin ito 1483 01:15:50,840 --> 01:15:51,490 medyo mabilis. 1484 01:15:51,490 --> 01:15:55,230 Ang bawat linya ng mga komento na sinulat namin kami dito isinasalin sa tungkol sa 1485 01:15:55,230 --> 01:15:56,970 isang linya ng C code. 1486 01:15:56,970 --> 01:16:01,780 Ang pagdeklara ng isang bagong variable, pagsulat ng loop, ang ilang mga pagbabawas, ang ilang mga 1487 01:16:01,780 --> 01:16:07,070 pagpaparami, at ang ilan pagtatalaga. 1488 01:16:07,070 --> 01:16:09,020 Nais naming marahil ring isaalang- isulat sa isang pabalik na linya. 1489 01:16:09,020 --> 01:16:12,040 Maaari din namin nais na ilagay ilan sa mga pagsusuri sa dito. 1490 01:16:12,040 --> 01:16:12,655 Oo. 1491 01:16:12,655 --> 01:16:15,720 >> AARAL: Kaya maaari naming ituring s bilang ang aktwal na string? 1492 01:16:15,720 --> 01:16:18,730 Dahil alam ko ito lamang ay isang address. 1493 01:16:18,730 --> 01:16:22,090 Tulad ng, kung paano makuha mo ang haba ng ang string na dumaan sa? 1494 01:16:22,090 --> 01:16:25,310 >> Jason HIRSCHHORN: Kaya kung paano ginawa ang haba ng isang string? 1495 01:16:25,310 --> 01:16:25,830 Strlen. 1496 01:16:25,830 --> 01:16:26,660 >> AARAL: strlen, oo. 1497 01:16:26,660 --> 01:16:30,550 Ngunit mo maaaring ilagay s bilang ang argumento para sa iyon? 1498 01:16:30,550 --> 01:16:34,620 >> Jason HIRSCHHORN: Kaya strlen tumatagal ng isang pansamantalang trabaho bituin. 1499 01:16:34,620 --> 01:16:38,090 At sumusunod ito na pansamantalang trabaho star, at ito Pinapanatili ng pagbibilang hanggang sa ito ay nakakakuha sa isang 1500 01:16:38,090 --> 01:16:41,865 backslash 0. strlen noon ay talagang isa sa iba pang mga programa namin 1501 01:16:41,865 --> 01:16:42,850 ay pagpunta sa code. 1502 01:16:42,850 --> 01:16:44,560 Iyon ay isa pang mahusay na isa sa code. 1503 01:16:44,560 --> 01:16:47,270 Isa Iyon ay isang bit mas madali, dahil kung ka pagpunta sa isipin ang tungkol na 1504 01:16:47,270 --> 01:16:47,830 conceptually - 1505 01:16:47,830 --> 01:16:51,620 Lang sinabi ko ito nang malakas - sinusunod strlen isang pointer at pinapanatili ang pagpunta at 1506 01:16:51,620 --> 01:16:54,210 pagbibilang at pagpapanatili ng track hanggang mong maabot ang isang backslash 0. 1507 01:16:54,210 --> 01:16:56,530 >> AARAL: OK, nakuha ko. 1508 01:16:56,530 --> 01:17:00,200 >> Jason HIRSCHHORN: Kaya pinakamaganda sa ka sana sa pagsusulit 0 bukas. 1509 01:17:00,200 --> 01:17:03,170 Kung mayroon kang anumang mga katanungan, idedetalye ko nasa labas pagkatapos na ito. 1510 01:17:03,170 --> 01:17:05,610 Huwag mag-atubili na mag-email sa akin. 1511 01:17:05,610 --> 01:17:08,480 Abutin ang out sa iyong sariling tf kung ikaw ay wala sa aking seksyon, o makuha ang aking 1512 01:17:08,480 --> 01:17:10,005 mag-email kung gusto mo. 1513 01:17:10,005 --> 01:17:13,140 >> Kung nais mong taong kakatuwa out at magpadala lamang akin ng isang email, isang freakout email, idedetalye ko 1514 01:17:13,140 --> 01:17:16,710 magpadala ka rin, tulad ng, isang SMILEY mukha, o, katulad, isang magbiro o isang bagay. 1515 01:17:16,710 --> 01:17:18,190 Kaya huwag mag-atubili na gawin din iyon. 1516 01:17:18,190 --> 01:17:20,750 Good luck muli, at idedetalye ko nakikita mo ang lahat ng mga susunod na linggo. 1517 01:17:20,750 --> 01:17:23,435