1 00:00:00,000 --> 00:00:11,242 >> [Halisi kucheza] 2 00:00:11,242 --> 00:00:16,630 >> DAVID J. Malan: zote haki hii ni CS50 na hii ni mwanzo wa wiki tano. 3 00:00:16,630 --> 00:00:21,480 Hivyo leo, chini ya kiti yako matakia, huwezi kupata kitu chochote. 4 00:00:21,480 --> 00:00:24,790 Lakini juu, unapaswa kupata hizi, kidogo ishara ya shukrani yetu kwa ajili ya 5 00:00:24,790 --> 00:00:26,970 yote ya kazi kwamba kuweka katika mchezo wa kumi na tano. 6 00:00:26,970 --> 00:00:30,290 Tu kuondoa mzunguko kidogo juu ya chini na kuanza kucheza kwa 7 00:00:30,290 --> 00:00:31,680 salio ya darasa. 8 00:00:31,680 --> 00:00:38,930 >> Hivyo kukumbuka kwamba, au kujua kwamba tatizo kuweka nne, ambayo akatoka mwishoni mwa wiki hii, 9 00:00:38,930 --> 00:00:40,340 inahusisha kuandika mchezo mwingine. 10 00:00:40,340 --> 00:00:43,740 Lakini wakati huu inahusisha kutumia halisi graphical user interface, si 11 00:00:43,740 --> 00:00:46,310 textual interface kama Mchezo wa kumi na tano ilikuwa. 12 00:00:46,310 --> 00:00:50,210 Na mchezo kwamba liko mbele yenu, kama wameweza bado kuonekana hii ya pili, 13 00:00:50,210 --> 00:00:52,310 inaonekana kitu kidogo kama hii. 14 00:00:52,310 --> 00:00:55,170 Mimi nina kwenda katika terminal yangu dirisha hapa katika GDB. 15 00:00:55,170 --> 00:00:58,600 Na mimi nina kwenda mbele na kukimbia wafanyakazi ufumbuzi, ambayo unaweza kupata 16 00:00:58,600 --> 00:01:01,010 baada ya mbio update 50 kama kawaida. 17 00:01:01,010 --> 00:01:04,090 >> Lakini mimi nina kwenda kuiweka katika kidogo siri mode, kidogo Pasaka yai, 18 00:01:04,090 --> 00:01:08,480 kinachojulikana Mungu mode, na kuweka Mungu katika argv1. 19 00:01:08,480 --> 00:01:12,920 Na mimi na kufuata maelekezo yangu mwenyewe, mbio katika yangu mwenyewe 20 00:01:12,920 --> 00:01:14,220 tatizo kuweka directory. 21 00:01:14,220 --> 00:01:19,190 Hivyo sasa unaweza kuona toleo kamili ya mchezo wa kuzuka. 22 00:01:19,190 --> 00:01:21,090 Kwa kweli, hii ni hakuna mikono mode. 23 00:01:21,090 --> 00:01:24,850 Hivyo ni kweli - 24 00:01:24,850 --> 00:01:26,470 wowed ingawa unaweza kuwa - 25 00:01:26,470 --> 00:01:30,850 pretty yasiyo na maana ya kutekeleza Mungu mode katika Kuzuka, tofauti na mchezo wa kumi na tano, 26 00:01:30,850 --> 00:01:33,590 ambayo baadhi yenu wanaweza kuwa na kukabiliana kwa ajili ya toleo hacker. 27 00:01:33,590 --> 00:01:37,890 >> Katika kuzuka Inatosha katika Mungu mode tu kufanya nini, 28 00:01:37,890 --> 00:01:41,220 shirikishi na paddle? 29 00:01:41,220 --> 00:01:45,630 Tu kufanya hivyo sawa na chochote nafasi ya usawa ni ya mpira. 30 00:01:45,630 --> 00:01:49,220 Na muda mrefu kama wewe kufanya hili katika lockstep na mpira kusonga mchezo huu mapenzi 31 00:01:49,220 --> 00:01:53,100 kamwe, daima, milele miss ya mpira na utasikia kushinda kila wakati. 32 00:01:53,100 --> 00:01:55,430 >> Lakini katika hacker toleo la wiki hii kuna zaidi kuliko tu mode Mungu. 33 00:01:55,430 --> 00:01:56,720 Kuna idadi ya makala mengine. 34 00:01:56,720 --> 00:01:58,140 Kati yao, lasers. 35 00:01:58,140 --> 00:02:01,070 Ili kwamba kama wewe kweli kupata papara wewe unaweza kuanza risasi chini matofali 36 00:02:01,070 --> 00:02:02,120 na wengine wachache. 37 00:02:02,120 --> 00:02:04,560 Na kwa wale ambao Ningependa calibrate kiwango dhidi hacker 38 00:02:04,560 --> 00:02:08,750 toleo, naona ya kuwa wiki hii hacker toleo makusudi ni 39 00:02:08,750 --> 00:02:12,830 zaidi kidogo doable, kusema, zaidi ya Mungu mode alikuwa pamoja na michezo ya kumi na tano. 40 00:02:12,830 --> 00:02:15,300 >> Hivyo kama wewe ni kuangalia kwa kunyoosha na wewe ni kuangalia kwa ajili ya kujifurahisha baadhi ya ziada 41 00:02:15,300 --> 00:02:18,400 makala kufanya dive katika kama ya riba. 42 00:02:18,400 --> 00:02:21,280 Sasa zaidi kivitendo, napenda uhakika nje jambo moja pia. 43 00:02:21,280 --> 00:02:24,780 GDB, ambayo baadhi yenu wanaweza kuwa bado kuguswa binafsi, ambayo ni nzuri. 44 00:02:24,780 --> 00:02:28,530 Lakini sasa ni kweli muda wa kupata kutumika kwa hii na starehe na chombo hiki 45 00:02:28,530 --> 00:02:31,510 sababu itakuwa kufanya maisha yako rahisi sana, kwa kweli. 46 00:02:31,510 --> 00:02:34,900 >> Kwa hotuba Rob juu GDB wanandoa ya wiki iliyopita, kukumbuka 47 00:02:34,900 --> 00:02:36,810 GDB kwamba ni debugger. 48 00:02:36,810 --> 00:02:41,230 Ni chombo kwamba inakuwezesha kuendesha yako mpango lakini kukimbia hivyo hatua kwa hatua ya mstari, 49 00:02:41,230 --> 00:02:45,680 na mstari, ili uweze poke kote, Basi utaona mambo yanayotokea, hivyo 50 00:02:45,680 --> 00:02:47,310 kwamba unaweza magazeti nje maadili ya vigezo. 51 00:02:47,310 --> 00:02:50,580 Kwa kifupi, inakupa hivyo zaidi nguvu zaidi kuliko printDef gani. 52 00:02:50,580 --> 00:02:52,900 >> Sasa admittedly, interface ni pretty arcane. 53 00:02:52,900 --> 00:02:55,180 Nyeusi na nyeupe textual interface kwa sehemu kubwa. 54 00:02:55,180 --> 00:02:57,400 amri ni kiasi fulani mgumu kukumbuka mara ya kwanza. 55 00:02:57,400 --> 00:03:01,230 Lakini hata ingawa inaweza kuchukua wewe nusu Saa, saa, ili kuweka kwamba upfront 56 00:03:01,230 --> 00:03:02,940 uwekezaji wa muda ndani yake, imani yangu. 57 00:03:02,940 --> 00:03:06,440 Hakika na mwisho wa muhula wa itakuwa kuokoa wewe utaratibu wa ukubwa zaidi 58 00:03:06,440 --> 00:03:07,600 muda zaidi ya hiyo. 59 00:03:07,600 --> 00:03:09,200 >> Hivyo mapema katika dive wiki in 60 00:03:09,200 --> 00:03:13,200 Na katika suala la kuzuka, tunajua kwamba wewe anaweza kufanya hili kwa muda mrefu kama una 61 00:03:13,200 --> 00:03:18,230 kanuni ya usambazaji au kanuni yako mwenyewe katika maendeleo katika saraka yako Pst4. 62 00:03:18,230 --> 00:03:21,680 Kujua kwamba unaweza kuendesha GDB / kuzuka.. 63 00:03:21,680 --> 00:03:23,490 >> Hii ni kwenda kufungua dirisha kama hii. 64 00:03:23,490 --> 00:03:25,530 Napenda kutoa mwenyewe zaidi ya dirisha terminal. 65 00:03:25,530 --> 00:03:27,770 Na kisha nini mimi kwenda mbele na kufanya, siyo tu kukimbia. 66 00:03:27,770 --> 00:03:30,690 Mimi nina kwenda kwanza kuweka hatua ya mapumziko kukumbuka, ambayo inaruhusu pause 67 00:03:30,690 --> 00:03:32,500 utekelezaji katika mahali fulani. 68 00:03:32,500 --> 00:03:35,750 >> Tu kuweka mambo rahisi mimi naenda kuvunja katika mstari mmoja tu kwa kuchapa 69 00:03:35,750 --> 00:03:37,000 namba moja. 70 00:03:37,000 --> 00:03:40,080 71 00:03:40,080 --> 00:03:43,250 Hebu kweli re-wazi dirisha hili kwa sababu ni kupata 72 00:03:43,250 --> 00:03:45,700 kidogo kidogo huko. 73 00:03:45,700 --> 00:03:53,270 Hivyo nini mimi sasa kwenda kufanya hapa ni kama mimi kufungua terminal yangu dirisha. 74 00:03:53,270 --> 00:03:53,910 Haya, kuna sisi kwenda. 75 00:03:53,910 --> 00:03:59,850 >> Hivyo sasa kama mimi kurejea dropbox, Pst4 na kukimbia GDB. / kuzuka kuingia, taarifa 76 00:03:59,850 --> 00:04:02,600 Mimi nina kwenda kuvunja moja ya kuweka hatua ya mapumziko katika mstari mmoja. 77 00:04:02,600 --> 00:04:04,840 Na sasa mimi nina kwenda mbele na aina kukimbia. 78 00:04:04,840 --> 00:04:07,370 Na wakati mimi kufanya, taarifa chochote inaonekana kutokea. 79 00:04:07,370 --> 00:04:08,120 >> Hakuna hadi pop. 80 00:04:08,120 --> 00:04:09,790 Hakuna grafiki user interface bado. 81 00:04:09,790 --> 00:04:13,340 Lakini hiyo ni kueleweka kwa sababu mimi nina halisi katika mstari mmoja katika mpango wangu. 82 00:04:13,340 --> 00:04:17,110 Na taarifa kwamba nimepata haraka kupelekwa, hasa sasa hadi 62, kwa sababu kila 83 00:04:17,110 --> 00:04:20,600 mambo ya wakati juu ya faili hii ni mambo kama maoni na constants na 84 00:04:20,600 --> 00:04:22,460 uninteresting mambo kwa sasa. 85 00:04:22,460 --> 00:04:25,840 >> Hivyo sasa mimi nina ndani ya kuu, inaonekana, katika mstari wa 62. 86 00:04:25,840 --> 00:04:27,960 Na hii ni usambazaji kanuni, kukumbuka. 87 00:04:27,960 --> 00:04:33,810 Kama mimi kufungua hili kwa kwenda, vile vile, ndani ya tone yangu sanduku directory katika Pst4, 88 00:04:33,810 --> 00:04:35,450 katika breakout.c. 89 00:04:35,450 --> 00:04:40,670 Na kama mimi kitabu chini na chini na chini, na napenda kwenda mbele na kurejea kwenye 90 00:04:40,670 --> 00:04:44,990 line yangu namba. 91 00:04:44,990 --> 00:04:50,300 >> Nini mimi utaona, kama mimi kitabu chini ya mstari 62, ni hasa mstari kwamba 92 00:04:50,300 --> 00:04:50,910 tumekuwa paused juu. 93 00:04:50,910 --> 00:04:53,720 Hivyo mstari huu hapa, 62, ni ambapo sisi ni juu ya kuwa. 94 00:04:53,720 --> 00:04:57,470 Hivyo sasa katika GDB, kama mimi kwenda mbele na aina sasa ijayo, kuingia itakavyo 95 00:04:57,470 --> 00:04:58,450 nitafanya kuwa mstari. 96 00:04:58,450 --> 00:05:00,610 Na voilĂ , tuna kinachojulikana g dirisha. 97 00:05:00,610 --> 00:05:02,800 Kama usio wa kawaida na kile GWindow ni, si kuwa na wasiwasi. 98 00:05:02,800 --> 00:05:05,740 spec kuanzisha wewe kwa hiyo, kama vile idadi ya video walkthrough 99 00:05:05,740 --> 00:05:06,830 iliyoingia katika spec. 100 00:05:06,830 --> 00:05:08,610 >> Lakini sasa hebu kufanya hii kidogo zaidi ya kuvutia. 101 00:05:08,610 --> 00:05:10,960 Hebu hoja hii dirisha juu ya kwa upande kidogo. 102 00:05:10,960 --> 00:05:13,480 Napenda kufanya dirisha kidogo kubwa hivyo siwezi kuona zaidi. 103 00:05:13,480 --> 00:05:16,140 >> Na sasa napenda kwenda mbele na kufanya ijayo tena. 104 00:05:16,140 --> 00:05:17,550 Na kuna matofali yangu. 105 00:05:17,550 --> 00:05:20,490 Kama mimi aina ijayo tena sasa naona mpira. 106 00:05:20,490 --> 00:05:23,520 Na kama mimi aina ijayo tena sasa naona paddle. 107 00:05:23,520 --> 00:05:26,690 >> Na kwa bahati nzuri gedit hii si kweli kushirikiana kwa kunionyeshea 108 00:05:26,690 --> 00:05:27,660 kila kitu nataka. 109 00:05:27,660 --> 00:05:30,820 Lakini sasa kama mimi kufanya ijayo tena, ijayo tena, Mimi tu 110 00:05:30,820 --> 00:05:32,260 kutangaza baadhi ya vigezo. 111 00:05:32,260 --> 00:05:34,750 Na mimi unaweza magazeti yeyote ya haya guys nje. 112 00:05:34,750 --> 00:05:37,170 Magazeti matofali, prints maisha. 113 00:05:37,170 --> 00:05:39,910 >> Na sasa kama mimi kuendelea kufanya pili, taarifa kwamba mimi itakuwa 114 00:05:39,910 --> 00:05:40,870 ndani ya kitanzi kwamba. 115 00:05:40,870 --> 00:05:43,380 Lakini kanuni ni kwenda kutekeleza hasa kama mimi kutarajia. 116 00:05:43,380 --> 00:05:45,810 Hivyo wakati mimi hit kazi hii, Subiri kwa Click, ni kwenda kufanya 117 00:05:45,810 --> 00:05:46,830 ni halisi kwamba. 118 00:05:46,830 --> 00:05:48,870 Hivyo mimi walionekana wamepoteza kudhibiti juu ya mpango. 119 00:05:48,870 --> 00:05:50,480 >> GDB si kutoa yangu mwingine wa haraka. 120 00:05:50,480 --> 00:05:51,500 Lakini si kuwa na wasiwasi. 121 00:05:51,500 --> 00:05:53,720 Kwenda kwa mchezo wangu, bonyeza mahali fulani. 122 00:05:53,720 --> 00:05:56,270 >> Na voilĂ , sasa ni kuendelea kwa line ya 86. 123 00:05:56,270 --> 00:05:59,460 Hivyo tena, ni mchango mkubwa sana, hatimaye, kwa debugging matatizo. 124 00:05:59,460 --> 00:06:03,050 Kwa sababu unaweza literally hatua kupitia kanuni yako, magazeti mambo ya nje na kiasi, 125 00:06:03,050 --> 00:06:03,640 kiasi, zaidi. 126 00:06:03,640 --> 00:06:07,210 Lakini kwa sasa, wale zana peke yake lazima kupata pretty mbali. 127 00:06:07,210 --> 00:06:10,050 >> Hivyo sisi ni, bila shaka, kuchukua kuangalia saa Graphics sasa, kwa ghafla. 128 00:06:10,050 --> 00:06:12,350 Na sasa dunia yetu anapata kidogo ya kuvutia zaidi. 129 00:06:12,350 --> 00:06:15,680 Na unajua, pengine, kutoka kwa baadhi ya videos online kwamba tuna hizi 130 00:06:15,680 --> 00:06:18,280 kaptula kwamba tumekuwa kuangalia kama sehemu ya seti tatizo. 131 00:06:18,280 --> 00:06:20,460 >> Na wao tumekuwa risasi, kwa makusudi, dhidi ya kuongezeka nyeupe. 132 00:06:20,460 --> 00:06:23,380 Na baadhi yao kuwa na mafundisho Wenzake kuchora baadhi ya maandishi juu ya 133 00:06:23,380 --> 00:06:25,490 screen hiyo akaifunika upande wao. 134 00:06:25,490 --> 00:06:27,760 Lakini bila shaka, hii si yote ambayo kuvutia katika ulimwengu wa kweli. 135 00:06:27,760 --> 00:06:30,520 Hii ni ukumbi wa mihadhara wenye kubwa nyeupe screen na kuongezeka. 136 00:06:30,520 --> 00:06:33,330 Na uzalishaji wetu wa ajabu timu aina wa hufanya kila kitu kuangalia nzuri 137 00:06:33,330 --> 00:06:36,620 baada ya ukweli na mseto nje au vichwa kitu 138 00:06:36,620 --> 00:06:37,840 sisi kufanya au hawataki. 139 00:06:37,840 --> 00:06:41,560 >> Sasa tu kuwahamasisha wiki hii na kweli, ambapo unaweza kwenda, hatimaye, 140 00:06:41,560 --> 00:06:42,560 na sayansi ya kompyuta. 141 00:06:42,560 --> 00:06:44,260 Si tu baada ya tatizo kuweka nne. 142 00:06:44,260 --> 00:06:48,240 Lakini baada ya mwingine bila shaka au mzima mtaala ni ajabu nini unaweza 143 00:06:48,240 --> 00:06:51,090 kufanya siku hizi katika suala la graphics hasa. 144 00:06:51,090 --> 00:06:53,440 >> Baadhi yenu wanaweza kuona hii inapita karibu online. 145 00:06:53,440 --> 00:06:56,240 Lakini nilifikiri Ningependa kuonyesha wewe, kwa ajili tu ya dakika kadhaa, mtazamo wa kile 146 00:06:56,240 --> 00:07:01,890 teknolojia ya kompyuta na nini CGI, graphics kompyuta wanaweza kufanya siku hizi 147 00:07:01,890 --> 00:07:04,510 na wimbo ukoo na labda movie. 148 00:07:04,510 --> 00:07:05,760 >> [MUSIC - Lana Del RAY, "VIJANA NA BEAUTIFUL] 149 00:07:05,760 --> 00:10:50,270 150 00:10:50,270 --> 00:10:52,470 >> SPIKA 1: Ni kidogo tu ajabu, pengine, tu jinsi 151 00:10:52,470 --> 00:10:52,857 omnipresent - 152 00:10:52,857 --> 00:10:57,040 >> [Makofi] 153 00:10:57,040 --> 00:10:59,230 >> SPIKA 1: Mimi tu kupakuliwa. 154 00:10:59,230 --> 00:11:02,920 Lakini ni kweli kushangaza, nadhani, tu jinsi omnipresent programu na kanuni na 155 00:11:02,920 --> 00:11:04,230 zana kama kweli hii ni. 156 00:11:04,230 --> 00:11:07,685 Hivyo kwamba ni ladha ya mwelekeo ambayo unaweza kwenda. 157 00:11:07,685 --> 00:11:10,620 Oh, hakuna Appliance zaidi leo. 158 00:11:10,620 --> 00:11:14,640 Naam, hiyo ni kweli kutisha majira kupewa uhakika Mimi tu walijaribu kufanya. 159 00:11:14,640 --> 00:11:18,670 >> Haki ya wote, hivyo hebu kuzindua Fusion tena. 160 00:11:18,670 --> 00:11:20,800 Unikumbushe baadaye. 161 00:11:20,800 --> 00:11:24,190 Haki zote, na unapaswa kuwa got email kama kando kama alivyofanya kupata 162 00:11:24,190 --> 00:11:25,460 taarifa kama hiyo. 163 00:11:25,460 --> 00:11:29,940 Haki ya wote, hivyo kukumbuka kwamba wiki iliyopita sisi kuanza peel nyuma hii 164 00:11:29,940 --> 00:11:31,380 baadaye inayojulikana kama kamba. 165 00:11:31,380 --> 00:11:34,700 >> kamba anakumbuka data aina hiyo ni alitangaza katika maktaba CS50. 166 00:11:34,700 --> 00:11:37,740 Na ni sehemu ya magurudumu mafunzo ambayo sasa kuanza kuchukua mbali. 167 00:11:37,740 --> 00:11:41,280 Ilikuwa ni dhana muhimu mapema. 168 00:11:41,280 --> 00:11:43,750 Lakini sasa ni kwenda kupata zaidi kuvutia na yenye nguvu zaidi ili 169 00:11:43,750 --> 00:11:48,330 kweli kuona kwamba chini ya Hood, kamba ni kile tu, je, sisi alisema? 170 00:11:48,330 --> 00:11:50,500 >> Yeah, hivyo ni kinachojulikana Char *. 171 00:11:50,500 --> 00:11:53,860 Na * kuna inaashiria kwamba kuna baadhi ya aina ya anuani ya kushiriki. 172 00:11:53,860 --> 00:11:58,690 Na hivyo wakati wewe kusema * Char wewe tu maana kutofautiana ambao data aina ni 173 00:11:58,690 --> 00:11:59,290 pointer sasa. 174 00:11:59,290 --> 00:12:01,770 ukweli kwamba kuna nyota kuna tu ina maana kwamba wewe ni kutangaza 175 00:12:01,770 --> 00:12:03,020 kinachojulikana pointer. 176 00:12:03,020 --> 00:12:06,220 Na pointer kwamba ni kwenda inaonekana kuhifadhi anwani ya, ya 177 00:12:06,220 --> 00:12:07,810 Bila shaka, char. 178 00:12:07,810 --> 00:12:08,960 >> Sasa kwa nini hii mantiki? 179 00:12:08,960 --> 00:12:11,200 Naam, kile ni kamba chini ya Hood? 180 00:12:11,200 --> 00:12:15,130 Naam, kwa baadhi ya wakati tumekuwa akisema kwamba string chini ya Hood ni 181 00:12:15,130 --> 00:12:18,460 tu h-e-l-l-o, kwa mfano. 182 00:12:18,460 --> 00:12:21,585 >> Lakini tumekuwa kuongelea hili kama kuwa, kimsingi, safu. 183 00:12:21,585 --> 00:12:25,410 Na safu ingekuwa basi kuangalia kidogo zaidi kama hii, na kila moja ya haya 184 00:12:25,410 --> 00:12:26,460 kuchukua bite. 185 00:12:26,460 --> 00:12:28,710 Na kisha tumekuwa alisema kwamba kuna kitu maalum nyuma hapa, 186 00:12:28,710 --> 00:12:31,270 backslash 0, au null Terminator. 187 00:12:31,270 --> 00:12:35,230 >> Hivyo muda wote huu, hii hapa imekuwa kamba. 188 00:12:35,230 --> 00:12:38,320 Lakini kwa kweli, kamba ni kweli anwani. 189 00:12:38,320 --> 00:12:43,210 Na anwani, kama tutaweza kuona, ni mara nyingi prefixed na 0x na mkataba. 190 00:12:43,210 --> 00:12:44,540 Je 0x kuashiria? 191 00:12:44,540 --> 00:12:45,970 Je, mtu yeyote kujua? 192 00:12:45,970 --> 00:12:47,320 >> Hivyo ni njia tu hexadesimoli. 193 00:12:47,320 --> 00:12:52,360 Hivyo unaweza kukumbuka, kwa kweli, kutoka PST 1, naamini, moja ya joto-up 194 00:12:52,360 --> 00:12:55,740 maswali ya kweli kuulizwa kuhusu hexadesimoli nukuu kwa kuongeza 195 00:12:55,740 --> 00:12:57,100 binary na decimal. 196 00:12:57,100 --> 00:13:00,460 Na motisha hapa ni kwamba na hexadesimoli una 16 197 00:13:00,460 --> 00:13:01,770 maadili ovyo wako. 198 00:13:01,770 --> 00:13:07,900 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ikifuatiwa na, b, c, d, e, f. 199 00:13:07,900 --> 00:13:10,430 >> Na kama wewe kuhesabu hadi wale wote, kupata jumla ya 16. 200 00:13:10,430 --> 00:13:13,200 Hivyo hii ni tofauti na decimal, ambapo tuna 10 201 00:13:13,200 --> 00:13:14,690 maadili, 0 kupitia tisa. 202 00:13:14,690 --> 00:13:17,750 Ni tofauti na kisha ambapo sisi tu 0 na 1. 203 00:13:17,750 --> 00:13:21,450 >> Lakini mwisho wa siku unaweza tu kuwakilisha nambari moja, lakini 204 00:13:21,450 --> 00:13:22,500 kwa njia tofauti. 205 00:13:22,500 --> 00:13:25,840 Na hexadesimoli ni ya kawaida kwa sababu kama zinageuka - na tutaweza kuona hii 206 00:13:25,840 --> 00:13:28,790 baadaye katika shaka - hata wakati sisi kupata na mtandao wa programu katika mazingira ya 207 00:13:28,790 --> 00:13:32,100 HTML na namba ya Michezo, hexadesimoli ni nzuri. 208 00:13:32,100 --> 00:13:36,390 Kwa sababu kila tarakimu, zamu nje, inawakilisha bits wanne kikamilifu. 209 00:13:36,390 --> 00:13:39,280 Hivyo ni aina tu ya mistari up nicely kama tutaweza hatimaye kuona. 210 00:13:39,280 --> 00:13:44,720 Hivyo hii inaweza kuwa Ox123 au kitu kama kwamba, denoting anuani 123 211 00:13:44,720 --> 00:13:47,050 mahali fulani ndani ya yangu kompyuta kumbukumbu. 212 00:13:47,050 --> 00:13:50,600 >> Lakini bila shaka, baadhi ya matatizo yanajitokeza sababu ya hii msingi 213 00:13:50,600 --> 00:13:51,520 utekelezaji. 214 00:13:51,520 --> 00:13:55,930 Na kukumbuka kwamba mimi alichukua kumchoma katika utekelezaji wa kazi kama hii - 215 00:13:55,930 --> 00:14:00,260 kulinganisha dash 0 dot c wiki iliyopita, kwamba hata kama inaonekana kama ilikuwa 216 00:14:00,260 --> 00:14:04,270 kulia, ni tu hakuwa na kulinganisha mbili masharti usahihi. 217 00:14:04,270 --> 00:14:07,470 >> Nimekuwa kutupwa mbali kuu, na nimekuwa kutupwa mbali maoni tu kulenga katika juu ya 218 00:14:07,470 --> 00:14:08,970 kificho kwamba ni wa maslahi hapa. 219 00:14:08,970 --> 00:14:10,660 Na ni katika nyekundu kwa sababu ni Buggy. 220 00:14:10,660 --> 00:14:11,670 Kwa sababu gani? 221 00:14:11,670 --> 00:14:15,890 >> Naam, kuna wakati mimi juu alitangaza kamba, nini ilikuwa kweli kinachoendelea 222 00:14:15,890 --> 00:14:17,260 chini ya Hood? 223 00:14:17,260 --> 00:14:19,530 Naam, napenda kwenda juu kwa screen hapa na kuteka kwamba. 224 00:14:19,530 --> 00:14:23,230 Hivyo mimi alitangaza, tena, kamba s GetString. 225 00:14:23,230 --> 00:14:26,640 >> Hivyo nina kwenda mbele sasa na kuteka s kwa nini ni kweli ni. 226 00:14:26,640 --> 00:14:28,590 Ni kwenda kuwa mraba hapa. 227 00:14:28,590 --> 00:14:30,490 Na mimi nina kwenda kudai kwamba hiyo ni 32 bits. 228 00:14:30,490 --> 00:14:32,890 Angalau ni kawaida ni, angalau juu CS50 229 00:14:32,890 --> 00:14:34,520 appliance katika mengi ya kompyuta. 230 00:14:34,520 --> 00:14:35,980 Mimi nina kwenda kwa simu yake ya. 231 00:14:35,980 --> 00:14:39,070 >> Lakini sasa kukumbuka kuwa sisi kuitwa GetString. 232 00:14:39,070 --> 00:14:41,430 Hivyo GetString anarudi, bila shaka, kamba. 233 00:14:41,430 --> 00:14:45,790 Kama aina user katika h-e-l-l-o kuingia kamba hujambo anapata akarudi. 234 00:14:45,790 --> 00:14:51,010 Na kamba kwamba, kama sisi tu alisema, mwisho hadi mahali fulani katika kumbukumbu ya kompyuta yako 235 00:14:51,010 --> 00:14:53,240 na 0 backslash mwishoni. 236 00:14:53,240 --> 00:14:56,650 Mimi itabidi kuteka hii kama safu - au contiguous block ya wahusika - 237 00:14:56,650 --> 00:14:58,330 kwamba ni kweli ni. 238 00:14:58,330 --> 00:15:01,790 >> Na sasa, ni nini GetString kweli kurudi? 239 00:15:01,790 --> 00:15:04,340 Nini GetString wamekuwa kurudi yote ya wakati huu? 240 00:15:04,340 --> 00:15:07,520 Naam, sisi kusema, katika wiki kabla, kuirudisha kamba. 241 00:15:07,520 --> 00:15:10,250 Lakini zaidi ya kitaalam, ni nini GetString kurudi inaonekana? 242 00:15:10,250 --> 00:15:11,610 >> Watazamaji: anwani. 243 00:15:11,610 --> 00:15:12,600 >> SPIKA 1: anwani. 244 00:15:12,600 --> 00:15:16,630 Hasa kuirudisha anwani ya bite kwanza kabisa, chochote ni. 245 00:15:16,630 --> 00:15:18,830 Mimi tu kuendelea kutumia moja, mbili, tatu kwa sababu ni rahisi. 246 00:15:18,830 --> 00:15:21,380 >> Kuirudisha anuani ya kwanza tabia katika kamba. 247 00:15:21,380 --> 00:15:23,510 Na sisi alisema wiki iliyopita kuwa kwamba ni wa kutosha. 248 00:15:23,510 --> 00:15:26,710 Kwa sababu tunaweza daima kufikiri ambapo mwisho wa kamba tu kwa 249 00:15:26,710 --> 00:15:30,150 iterating juu yake, labda, na kwa kitanzi au kitanzi wakati au kitu kama 250 00:15:30,150 --> 00:15:34,990 kwamba, kuangalia tu kwa "backslash 0", maalum sentinel tabia. 251 00:15:34,990 --> 00:15:37,220 >> Na kisha sisi kujua kwamba kamba hutokea kwa kuwa ya urefu - 252 00:15:37,220 --> 00:15:37,980 katika kesi hii - 253 00:15:37,980 --> 00:15:38,670 tano. 254 00:15:38,670 --> 00:15:43,800 Basi kitaalam nini GetString gani ni kuirudisha Ox123 katika kesi hii. 255 00:15:43,800 --> 00:15:53,670 Na utaalamu nini basi kinachotokea ni kwamba sisi kuhifadhi, ndani ya s, Ox123. 256 00:15:53,670 --> 00:15:56,460 Mwisho wa siku, hata kama hii ni dhana mpya, kuyatumia, wao ni 257 00:15:56,460 --> 00:15:57,350 tu vigezo. 258 00:15:57,350 --> 00:16:00,440 Lakini wao kutokea kwa kuhifadhi bits kwamba pamoja kuwakilisha anwani. 259 00:16:00,440 --> 00:16:03,700 Basi kitaalam yote wao anapata kuhifadhiwa katika s ni Ox123. 260 00:16:03,700 --> 00:16:04,680 >> Lakini sisi kama binadamu - 261 00:16:04,680 --> 00:16:06,020 ikiwa ni pamoja na kuendelea leo - 262 00:16:06,020 --> 00:16:09,290 ni kweli si kwenda huduma, kwa kawaida, nini anwani halisi ni 263 00:16:09,290 --> 00:16:10,520 baadhi ya chunk ya kumbukumbu. 264 00:16:10,520 --> 00:16:14,040 Ni tu kwa kiwango cha chini cha kina ili kuwa kielimu kuvutia. 265 00:16:14,040 --> 00:16:15,440 Hivyo nina kwenda kwa kamba hii. 266 00:16:15,440 --> 00:16:19,810 Na badala yake, zaidi ya kiwango cha juu, tu kusema kwamba wakati sisi ni kuzungumza juu ya kuyatumia 267 00:16:19,810 --> 00:16:22,170 Mimi naenda tu kuteka zaidi user-kirafiki mshale kwamba zinaonyesha 268 00:16:22,170 --> 00:16:26,060 huo wazo na ikisiri mbali maelezo ya yale halisi 269 00:16:26,060 --> 00:16:27,700 anuani ya msingi ni. 270 00:16:27,700 --> 00:16:33,290 >> Sasa kama sisi kurudi nyuma kwa kificho, ni nini kilichotokea wiki iliyopita kama tuna kamba t 271 00:16:33,290 --> 00:16:34,510 sawa GetString? 272 00:16:34,510 --> 00:16:38,630 Naam, kama mimi tena, aina katika hujambo wakati huu mimi nina kwenda kupata 273 00:16:38,630 --> 00:16:40,460 mwingine chunk ya kumbukumbu. 274 00:16:40,460 --> 00:16:44,820 h-e-l-l-o backslash 0. 275 00:16:44,820 --> 00:16:48,320 >> Lakini kwa sababu mimi kuitwa GetString mara ya pili - 276 00:16:48,320 --> 00:16:51,100 na ninajua hii kutoka kuangalia chanzo kanuni kwa GetString - hata 277 00:16:51,100 --> 00:16:54,350 ingawa ni kubahatisha kwamba hujambo mara typed katika mara mbili, GetString si 278 00:16:54,350 --> 00:16:55,890 kwenda kujaribu kuongeza na kuwa na wajanja. 279 00:16:55,890 --> 00:16:58,550 Ni tu kwenda kupata mwingine chunk ya kumbukumbu kutoka kwa kompyuta, ambayo ni 280 00:16:58,550 --> 00:16:59,640 kwenda kuwa katika anuani mwingine. 281 00:16:59,640 --> 00:17:02,330 Hebu kiholela tu kusema 456. 282 00:17:02,330 --> 00:17:04,079 >> Na kisha nini ni kwenda na kurudi? 283 00:17:04,079 --> 00:17:08,030 Ni kwenda na kurudi 456 na kuhifadhi katika t. 284 00:17:08,030 --> 00:17:12,010 Hivyo kweli ni nini kinachoendelea, juu ya upande wa mkono wa kushoto ni mimi na mwingine chunk 285 00:17:12,010 --> 00:17:14,260 ya kumbukumbu, 32 bits kawaida. 286 00:17:14,260 --> 00:17:16,720 Na huko ni kwenda Ox456. 287 00:17:16,720 --> 00:17:20,140 Lakini tena, Mimi si nia katika haya hasa idadi tena. 288 00:17:20,140 --> 00:17:23,069 Mimi tu kwenda abstractly kuteka ni kama mshale. 289 00:17:23,069 --> 00:17:25,202 >> Hivyo hii ni sasa maelezo mpya. 290 00:17:25,202 --> 00:17:28,735 Lakini ni sawa kamili wazo kwamba yakitokea wakati huu wote. 291 00:17:28,735 --> 00:17:33,150 Na hivyo sababu basi, kwamba hii ya kwanza toleo la kulinganisha mara Buggy 292 00:17:33,150 --> 00:17:34,480 wiki ya mwisho ni kwa nini? 293 00:17:34,480 --> 00:17:38,000 Wakati wa kufanya kama s ni sawa sawa na t ni wewe kweli 294 00:17:38,000 --> 00:17:40,550 chini ya Hood kulinganisha? 295 00:17:40,550 --> 00:17:41,910 >> Wewe ni kulinganisha anwani. 296 00:17:41,910 --> 00:17:47,950 Na tu shirikishi, kwa uwazi, Ox123 si kwenda Ox456 sawa. 297 00:17:47,950 --> 00:17:49,380 Wale idadi, wale bits ni tu tofauti. 298 00:17:49,380 --> 00:17:53,220 >> Na hivyo mara kwa mara, wiki iliyopita alisema unapoandika mambo mbalimbali, hata kama 299 00:17:53,220 --> 00:17:55,360 maneno walikuwa verbatim sawa. 300 00:17:55,360 --> 00:17:58,770 Hivyo sisi kurekebisha hii. 301 00:17:58,770 --> 00:18:00,120 Katika suala layman, nini ilikuwa fix? 302 00:18:00,120 --> 00:18:02,110 >> Watazamaji: Matumizi ya kazi. 303 00:18:02,110 --> 00:18:02,870 >> SPIKA 1: Matumizi ya kazi. 304 00:18:02,870 --> 00:18:05,190 Au nyota ni dhahiri wanaohusika, lakini kutumia kazi ya kufanya nini? 305 00:18:05,190 --> 00:18:05,962 >> Watazamaji: Ili kulinganisha masharti. 306 00:18:05,962 --> 00:18:07,390 >> SPIKA 1: Ili kulinganisha masharti. 307 00:18:07,390 --> 00:18:11,030 Hivyo tatizo la msingi hapa ilikuwa kwamba nilikuwa tu kuzingatia 308 00:18:11,030 --> 00:18:15,870 ubora wa masharti ya kuelezwa na kulinganisha ya anwani zao. 309 00:18:15,870 --> 00:18:18,540 Na ni wazi kwamba tu bubu sasa kwa mara nyingine wewe kuelewa nini kinaendelea 310 00:18:18,540 --> 00:18:19,510 chini ya Hood. 311 00:18:19,510 --> 00:18:23,270 Kwa kweli kulinganisha masharti ili kuona kama wao ni sawa katika njia ambayo binadamu 312 00:18:23,270 --> 00:18:26,680 bila kuzingatia masharti mbili kuwa sawa tunahitaji kulinganisha yao tabia kwa 313 00:18:26,680 --> 00:18:28,070 tabia kwa ajili ya tabia. 314 00:18:28,070 --> 00:18:30,020 >> Sasa mimi naweza kuwa na kufanyika hii sana tediously. 315 00:18:30,020 --> 00:18:32,240 Lakini familiarly, tuko kutumia kwa kitanzi. 316 00:18:32,240 --> 00:18:36,050 Na tu kulinganisha s bracket i dhidi ya t mabano i. 317 00:18:36,050 --> 00:18:39,590 s mabano i pamoja na 1 dhidi ya t bracket i pamoja na 1, na kadhalika, ndani ya 318 00:18:39,590 --> 00:18:40,580 baadhi ya aina ya kitanzi. 319 00:18:40,580 --> 00:18:44,950 Na kama mimi doa wahusika yoyote mbili ambazo tofauti, au kama mimi kutambua kwamba ooh, s ni 320 00:18:44,950 --> 00:18:48,410 mfupi kuliko t au muda mrefu zaidi ya t Naweza mara moja kusema uongo, 321 00:18:48,410 --> 00:18:49,390 wao siyo sawa. 322 00:18:49,390 --> 00:18:55,370 >> Lakini kama mimi kupata njia ya s na t na kusema sawa, sawa, sawa, sawa, sawa, mwisho wa 323 00:18:55,370 --> 00:18:58,520 wote masharti, naweza kusema kweli, ni sawa. 324 00:18:58,520 --> 00:19:01,040 Naam, nashiriki, miaka iliyopita mtu aliandika kwamba kanuni kwa ajili yetu. 325 00:19:01,040 --> 00:19:03,790 >> Na wao kuitwa ni StrComp kwa kamba kulinganisha. 326 00:19:03,790 --> 00:19:11,900 Na hata kama ni kidogo counter angavu, StrComp anarudi 0 kama wale 327 00:19:11,900 --> 00:19:14,520 mbili masharti, s na t ni sawa. 328 00:19:14,520 --> 00:19:18,090 Lakini kuirudisha thamani hasi kama s waje mbele t alphabetically au 329 00:19:18,090 --> 00:19:20,610 chanya thamani ikiwa ni lazima kuja baada ya t alphabetically. 330 00:19:20,610 --> 00:19:24,030 >> Hivyo kama wewe milele unataka kutatua kitu, zinageuka kuwa StrComp ni muhimu. 331 00:19:24,030 --> 00:19:26,660 Sababu haina tu kusema ndiyo au hapana, sawa au la. 332 00:19:26,660 --> 00:19:30,440 Ni anakupa hisia ya kuagiza kama nguvu kamusi. 333 00:19:30,440 --> 00:19:33,770 Hivyo StrComp, s comma t sawa sawa na njia 0 kwamba 334 00:19:33,770 --> 00:19:35,200 masharti ni kweli sawa. 335 00:19:35,200 --> 00:19:38,680 Kwa sababu mtu aliandika kazi huu miaka iliyopita labda kutumika kwa kitanzi 336 00:19:38,680 --> 00:19:42,840 au kitanzi wakati au kitu kama hicho kuunganisha tena juu ya wahusika 337 00:19:42,840 --> 00:19:45,270 na tena na tena. 338 00:19:45,270 --> 00:19:47,300 >> Lakini tatizo mbili akaondoka hapa. 339 00:19:47,300 --> 00:19:48,750 Hii ilikuwa copy0.c. 340 00:19:48,750 --> 00:19:51,680 Na mbili katika nyekundu ni sababu ni kiujanja. 341 00:19:51,680 --> 00:19:52,800 Na nini sisi kufanya hapa? 342 00:19:52,800 --> 00:19:54,310 Naam, kwanza mimi kuitwa GetString. 343 00:19:54,310 --> 00:19:56,255 Na mimi kuhifadhiwa thamani ya kurudi katika s. 344 00:19:56,255 --> 00:20:00,260 Hivyo kwamba ni pretty kiasi sawa kama hii sehemu ya juu ya picha. 345 00:20:00,260 --> 00:20:01,490 >> Lakini nini inakuja baada ya kwamba? 346 00:20:01,490 --> 00:20:04,980 Naam, napenda kwenda mbele na kujikwamua ya kundi zima la hii. 347 00:20:04,980 --> 00:20:09,650 Tutaweza rewind katika wakati ambapo sisi tu na s, ambayo sasa ni thabiti na 348 00:20:09,650 --> 00:20:10,940 mstari mmoja hadi huko. 349 00:20:10,940 --> 00:20:11,400 >> Mimi kuangalia. 350 00:20:11,400 --> 00:20:13,450 Kama s ni sawa sawa na 0. 351 00:20:13,450 --> 00:20:18,670 Sasa, haraka upande kumbuka, wakati wapate kurudi GetString 0? 352 00:20:18,670 --> 00:20:19,580 Kuna si kumbukumbu ya kutosha. 353 00:20:19,580 --> 00:20:19,880 Haki? 354 00:20:19,880 --> 00:20:22,310 >> Ni nadra kwamba hii kinaenda kutokea, hakika kwenye kompyuta hiyo ni 355 00:20:22,310 --> 00:20:24,740 got mamia ya megs au hata gigs ya RAM. 356 00:20:24,740 --> 00:20:27,080 Lakini inaweza, katika nadharia, kurudi 0, hasa kama 357 00:20:27,080 --> 00:20:28,080 mtumiaji hana kushirikiana. 358 00:20:28,080 --> 00:20:31,640 Kuna njia ya kujifanya kama una si inputted kitu na hila 359 00:20:31,640 --> 00:20:34,100 GetString katika kurudi 0 ufanisi. 360 00:20:34,100 --> 00:20:35,470 >> Hivyo ni kwenda kuangalia kwa ajili hiyo. 361 00:20:35,470 --> 00:20:39,430 Kwa sababu kama mtu wa kwenu wameanza kupata, tayari, makosa segmentation - 362 00:20:39,430 --> 00:20:42,280 ambayo ina pengine imekuwa chanzo ya kuchanganyikiwa baadhi ya - 363 00:20:42,280 --> 00:20:46,150 wale ni karibu daima matokeo ya kumbukumbu-kuhusiana makosa. 364 00:20:46,150 --> 00:20:50,440 Namna fulani wewe messed up kwa kuzingatia pointer, hata kama hukujua 365 00:20:50,440 --> 00:20:51,530 kulikuwa pointer. 366 00:20:51,530 --> 00:20:55,260 Hivyo unaweza kuwa ikiwa segmentation makosa kama mapema wiki moja kutumia 367 00:20:55,260 --> 00:21:02,100 kitu kama kwa kitanzi au wakati kitanzi na safu na kwenda mbali mno 368 00:21:02,100 --> 00:21:05,900 zamani ya mipaka ya safu baadhi ya kwamba wewe alitangaza, katika wiki mbili katika 369 00:21:05,900 --> 00:21:06,690 fulani. 370 00:21:06,690 --> 00:21:09,220 >> Unaweza wamefanya hivyo hata katika tatizo kuweka nne na kuzuka. 371 00:21:09,220 --> 00:21:12,910 Hata ingawa pengine hawajaona yoyote nyota katika kanuni ya usambazaji kwa 372 00:21:12,910 --> 00:21:17,410 Kuzuka, zinageuka kuwa wale GRect na GOval na wengine vile mambo, 373 00:21:17,410 --> 00:21:19,650 wale ni kweli kuyatumia chini ya Hood. 374 00:21:19,650 --> 00:21:23,430 >> Lakini Stanford, kama sisi, aina ya ngozi kwamba kina angalau kwa ajili ya maktaba 375 00:21:23,430 --> 00:21:26,540 madhumuni, kiasi kama sisi kufanya kwa kamba na * Char. 376 00:21:26,540 --> 00:21:30,060 Lakini GRect na GOval na wale wote mambo nyie ni au watakuwa kutumia 377 00:21:30,060 --> 00:21:32,630 wiki hii ni hatimaye kumbukumbu anwani. 378 00:21:32,630 --> 00:21:33,650 Wewe si tu kujua. 379 00:21:33,650 --> 00:21:37,240 >> Hivyo si ajabu basi, pengine, kwamba waweza safari juu ya baadhi ya 380 00:21:37,240 --> 00:21:38,580 segmentation makosa. 381 00:21:38,580 --> 00:21:41,290 Lakini nini kuvutia hapa sasa, kama baada ya sisi kuangalia kwa 0 sisi kufanya 382 00:21:41,290 --> 00:21:43,460 kamba t anapata s. 383 00:21:43,460 --> 00:21:44,690 Naam, napenda kutangaza t. 384 00:21:44,690 --> 00:21:47,730 Mimi nina kwenda kuteka ni kama mraba, 32 bits, simu yake t. 385 00:21:47,730 --> 00:21:49,740 Na kisha mimi naenda kufanya anapata s. 386 00:21:49,740 --> 00:21:51,130 >> Naam, hiyo ina maana gani? 387 00:21:51,130 --> 00:21:53,280 Naam, ni ngumu kidogo kufikiri kuhusu hilo picha ya busara. 388 00:21:53,280 --> 00:21:55,025 Lakini hebu fikiria kuhusu nini ndani ya x? 389 00:21:55,025 --> 00:21:59,430 Nini halisi ndani ya kutofautiana hii? 390 00:21:59,430 --> 00:22:01,500 Ox123 thamani. 391 00:22:01,500 --> 00:22:05,815 >> Hivyo wakati mimi kusema kamba t anapata s, kwamba tu likiwa na maana ya kuchukua idadi 392 00:22:05,815 --> 00:22:10,070 katika s, ambayo ni Ox123 na kuiweka Ox123. 393 00:22:10,070 --> 00:22:13,740 Au pictorially, kama mimi aina ya kufikirika mbali na undani kwamba ina 394 00:22:13,740 --> 00:22:16,600 athari za literally kufanya hili pia. 395 00:22:16,600 --> 00:22:22,110 >> Hivyo sasa, kufikiri nyuma wiki iliyopita wakati sisi tuliendelea kibepari T. mimi 396 00:22:22,110 --> 00:22:23,800 alifanya T mabano 0. 397 00:22:23,800 --> 00:22:27,150 Naam, T mabano 0, hata kama ni pointer, unaweza kutibu kama ingawa 398 00:22:27,150 --> 00:22:29,220 ni safu, na mraba bracket nukuu. 399 00:22:29,220 --> 00:22:31,550 >> Hivyo ambapo ni T mabano 0? 400 00:22:31,550 --> 00:22:32,990 Naam, ni h. 401 00:22:32,990 --> 00:22:36,800 Na hivyo wakati sisi kutumia kwamba mstari wa kanuni, mbili ya juu, ambayo ni kwa kuwa type.h c 402 00:22:36,800 --> 00:22:38,460 header faili, hiyo ambapo ni alitangaza. 403 00:22:38,460 --> 00:22:44,410 Wewe ni kuyafanyia hii H. Lakini ya Bila shaka, hiyo ni sawa kamili h kwamba 404 00:22:44,410 --> 00:22:46,540 ndani ya s, hivyo kusema. 405 00:22:46,540 --> 00:22:51,930 Na hivyo sasa una iliyopita au mtaji wote wawili awali na 406 00:22:51,930 --> 00:22:53,120 kinachojulikana nakala. 407 00:22:53,120 --> 00:22:56,620 Sababu hukutaka kufanya nakala katika njia ambayo binadamu wanataka iwe. 408 00:22:56,620 --> 00:22:59,710 >> Hivyo kile ilikuwa fix hapa, katika wiki ya mwisho copy1.c? 409 00:22:59,710 --> 00:23:03,070 410 00:23:03,070 --> 00:23:05,580 Kazi, hivyo tunaweza kweli nakala kamba. 411 00:23:05,580 --> 00:23:08,700 Na kimsingi, nini tunahitaji kufanya ili nakala kamba? 412 00:23:08,700 --> 00:23:12,070 >> Naam, katika toleo hili kijani hapa mimi nina kwenda kufanya ni haki ya chini ya kiwango. 413 00:23:12,070 --> 00:23:14,260 Ni kweli kuna kazi waweze kusaidia kwa hili. 414 00:23:14,260 --> 00:23:17,710 Lakini moja ya msingi zaidi, na wengi moja ukoo, angalau, hivi karibuni kuwa 415 00:23:17,710 --> 00:23:19,600 familiar kwetu, ni yafuatayo - 416 00:23:19,600 --> 00:23:21,910 hivyo moja juu ya mstari wa kwanza wa kanuni katika kijani sasa. 417 00:23:21,910 --> 00:23:23,970 >> Mimi tu rewrote s kama * Char. 418 00:23:23,970 --> 00:23:25,250 Hakuna kazi tofauti huko. 419 00:23:25,250 --> 00:23:28,790 Mimi tu akatupa mbali na maktaba CS50 Mimi nina wito yake ni nini, * Char. 420 00:23:28,790 --> 00:23:31,640 >> Sasa dot, dot, dot, kwa sababu kulikuwa baadhi ya kuangalia kosa si kwamba 421 00:23:31,640 --> 00:23:33,200 kuvutia kwa majadiliano juu tena. 422 00:23:33,200 --> 00:23:34,710 Hivyo sasa ni alitangaza t. 423 00:23:34,710 --> 00:23:35,780 Hiyo pia ni * Char. 424 00:23:35,780 --> 00:23:38,280 Hivyo nilitoa mraba kidogo juu ya screen kama kabla. 425 00:23:38,280 --> 00:23:41,870 >> Lakini juu ya upande wa kulia, malloc, sisi alisema ni kumbukumbu kutenga. 426 00:23:41,870 --> 00:23:44,130 Hivyo kutenga baadhi ya chunk ya kumbukumbu. 427 00:23:44,130 --> 00:23:48,830 Na jinsi ka wengi kufanya sisi kweli wanataka kutenga, nini ni kuonekana? 428 00:23:48,830 --> 00:23:50,340 >> Naam, urefu wa kamba ya s. 429 00:23:50,340 --> 00:23:52,310 Hivyo kama ni hujambo kwamba kwenda kuwa tano. 430 00:23:52,310 --> 00:23:53,950 Tutaweza kusema h-e-l-l-o. 431 00:23:53,950 --> 00:23:55,090 Hivyo tano ka. 432 00:23:55,090 --> 00:23:57,960 >> Lakini basi pamoja na 1, kwa nini 1? 433 00:23:57,960 --> 00:23:58,830 Tabia 0. 434 00:23:58,830 --> 00:24:03,640 Kama hatuwezi kuondoka chumba kwa guy hii sisi ili kujenga hali ya ajali 435 00:24:03,640 --> 00:24:05,600 ambapo kamba ni h-e-l-l-o. 436 00:24:05,600 --> 00:24:08,470 Na kisha wakati ujao GetString ni kuitwa na mimi aina katika, kwa mfano, 437 00:24:08,470 --> 00:24:14,020 Daudi, D-a-v-i-d, kompyuta ni kwenda kufikiri kwamba s ni kweli 438 00:24:14,020 --> 00:24:18,900 h-e-l-l-o-d-a-v-i-d sababu kuna hakuna kuvunja katika kati ya maneno hayo. 439 00:24:18,900 --> 00:24:19,810 >> Hivyo tunahitaji kuwa mapumziko. 440 00:24:19,810 --> 00:24:20,720 Hivyo hatutaki tano. 441 00:24:20,720 --> 00:24:22,100 Tunataka ka sita. 442 00:24:22,100 --> 00:24:23,110 >> Na ka mimi kusema. 443 00:24:23,110 --> 00:24:25,220 Lakini ni kweli wakati ukubwa wa Char. 444 00:24:25,220 --> 00:24:28,040 Kitaalam Char ni karibu daima Byte moja. 445 00:24:28,040 --> 00:24:31,030 >> Lakini tu kufanya kanuni zetu portable, hivyo kusema, hivyo kwamba ni kazi ya 446 00:24:31,030 --> 00:24:33,750 tofauti kompyuta hata kama walivyotarajiwa kuwa tofauti kidogo chini ya 447 00:24:33,750 --> 00:24:36,590 Hood, mimi nina kwenda generically wanasema ukubwa wa Char ili 448 00:24:36,590 --> 00:24:37,660 kanuni yangu daima kazi. 449 00:24:37,660 --> 00:24:40,610 Na mimi hawana recompile tu kwa sababu mimi kuboresha kompyuta yangu au kutumia 450 00:24:40,610 --> 00:24:42,140 baadhi ya jukwaa tofauti. 451 00:24:42,140 --> 00:24:45,300 >> Hivyo mimi nimepata 6 ukubwa wa mara Char, ambayo hufanyika kuwa 1. 452 00:24:45,300 --> 00:24:47,440 Ili malloc njia inaweza nipe ka sita. 453 00:24:47,440 --> 00:24:49,140 Nini ni kwamba kweli kufanya? 454 00:24:49,140 --> 00:24:52,810 Vizuri, basi mimi unaendelea nyuma katika muda hapa ambapo sisi ni katika hadithi. 455 00:24:52,810 --> 00:24:57,620 >> Hivyo kama mimi kurejea hapa, nimekuwa alitangaza * Char kuitwa t. 456 00:24:57,620 --> 00:25:00,280 Nimekuwa sasa inaitwa malloc kwa ka sita. 457 00:25:00,280 --> 00:25:06,400 Na sasa mimi nina kwenda kuteka wale sita ka tu kama safu ya awali. 458 00:25:06,400 --> 00:25:10,570 Lakini mimi kwa kweli hawajui nini ndani ya safu hii. 459 00:25:10,570 --> 00:25:14,640 >> Kama wewe kutenga kumbukumbu zinageuka kuwa huwezi kuamini kwamba kuna baadhi ya 460 00:25:14,640 --> 00:25:15,810 inayojulikana thamani huko. 461 00:25:15,810 --> 00:25:18,400 Wangeweza kutumiwa na kitu mwingine, baadhi ya kazi nyingine, baadhi ya wengine 462 00:25:18,400 --> 00:25:19,630 mstari wa kanuni kwamba aliandika. 463 00:25:19,630 --> 00:25:22,870 Hivyo tutaweza ujumla kuwaita hawa takataka maadili na kuteka yao, pengine, kama 464 00:25:22,870 --> 00:25:26,170 alama ya kuuliza, tu kuonyesha kwamba sisi sijui nini ni kweli huko. 465 00:25:26,170 --> 00:25:30,390 Na kwamba hakuna mpango mkubwa ya muda mrefu kama sisi ni smart kutosha overwrite wale 466 00:25:30,390 --> 00:25:34,550 taka maadili na namba au chars kwamba sisi huduma ya juu. 467 00:25:34,550 --> 00:25:36,340 >> Hivyo katika kesi hii je, Mimi naenda kufanya nini? 468 00:25:36,340 --> 00:25:38,670 Naam, line yangu ya maadili ya ijayo, nina nne. 469 00:25:38,670 --> 00:25:41,350 int i kupata 0, n anapata urefu wa kamba s. 470 00:25:41,350 --> 00:25:42,750 Hivyo familiar kwa kitanzi. 471 00:25:42,750 --> 00:25:45,875 Mimi ni chini ya au sawa na n, ambayo kwa kawaida ni juu. 472 00:25:45,875 --> 00:25:47,500 >> Lakini wakati huu ni makusudi. 473 00:25:47,500 --> 00:25:51,890 I + +, na kisha mimi tu kufanya t mabano i anapata s. 474 00:25:51,890 --> 00:25:56,320 Kwa sababu picha yangu inaonekana kama hii katika wakati huu, kuhifadhiwa katika t ni 475 00:25:56,320 --> 00:25:59,530 anuani ya chunk kwamba random ya kumbukumbu ambao maadili ni haijulikani. 476 00:25:59,530 --> 00:26:03,030 Lakini kwa haraka kama mimi kufanya t bracket 0 kwamba unaweka mimi hapa. 477 00:26:03,030 --> 00:26:07,430 >> Na nini mwisho juu kupata inayotolewa huko? 478 00:26:07,430 --> 00:26:08,740 Sisi kuishia kuweka h. 479 00:26:08,740 --> 00:26:11,170 Kwa sababu hiyo ni nini saa s mabano 0. 480 00:26:11,170 --> 00:26:14,300 Na kisha kitu kimoja kwa ajili e, na l, na l, na o. 481 00:26:14,300 --> 00:26:17,930 >> n, kwa nini mimi kwenda juu kupitia sawa na n? 482 00:26:17,930 --> 00:26:19,200 Sababu ya tabia 0. 483 00:26:19,200 --> 00:26:23,580 Hivyo tu kuwa wazi, basi, kama mimi kwa kweli kufuta chochote haya ya takataka 484 00:26:23,580 --> 00:26:28,870 maadili ni kweli na kisha kuteka katika kile kutarajia, hii ni s mabano 1, 2, 485 00:26:28,870 --> 00:26:32,440 3, 4, pamoja na hiyo trailing tabia mpya. 486 00:26:32,440 --> 00:26:36,080 >> Na hivyo sasa kama sisi iliendelea zamani dot, dot, dot katika toleo hili sahihi 487 00:26:36,080 --> 00:26:41,930 na mtaji t mabano 0 napenda, ya Bila shaka, kuwa kuyafanyia tu hii 488 00:26:41,930 --> 00:26:47,050 guy hapa, ambayo conceptually, ilikuwa hatimaye lengo. 489 00:26:47,050 --> 00:26:48,040 Hivyo kwamba ni pointer wote ni. 490 00:26:48,040 --> 00:26:51,430 >> Na tumekuwa kutumia yao kwa muda wa wiki sasa katika mazingira ya masharti. 491 00:26:51,430 --> 00:26:53,530 Lakini chini ya Hood wao uko kidogo ngumu zaidi. 492 00:26:53,530 --> 00:26:57,520 Lakini kama unafikiri juu yao katika hii fomu mchoro napendekeza kwamba wao ni 493 00:26:57,520 --> 00:27:01,720 pengine si inatisha kwamba wote kama wao wapate kwanza kuonekana katika mtazamo wa kwanza, 494 00:27:01,720 --> 00:27:04,730 hasa kwa vile syntax mpya. 495 00:27:04,730 --> 00:27:07,290 Maswali yoyote juu ya kuyatumia, masharti, au chars? 496 00:27:07,290 --> 00:27:07,580 Yeah? 497 00:27:07,580 --> 00:27:09,252 >> Watazamaji: Je, unaweza kurudi nyuma kwa [inaudible]? 498 00:27:09,252 --> 00:27:10,502 >> SPIKA 1: Uhakika. 499 00:27:10,502 --> 00:27:14,058 500 00:27:14,058 --> 00:27:19,525 >> Watazamaji: Hivyo jinsi ya kuja katika sana yako ya mwisho mstari, huna t * Mpya 501 00:27:19,525 --> 00:27:21,513 na s * katika mstari? 502 00:27:21,513 --> 00:27:23,004 Je, si una kumbukumbu - 503 00:27:23,004 --> 00:27:24,640 >> SPIKA 1: Ah, swali zuri. 504 00:27:24,640 --> 00:27:26,800 Kwa nini si mimi kuwa t * na * s? 505 00:27:26,800 --> 00:27:30,340 Sababu kwa ufupi, wiki iliyopita, kama katika yetu wabadilishane kazi, mimi kusema kwamba wakati 506 00:27:30,340 --> 00:27:33,350 nimepata pointer njia ambayo wewe kwenda huko kama tulivyofanya 507 00:27:33,350 --> 00:27:36,590 kimwili juu ya hatua, ilikuwa kwa kweli kutumia operator nyota. 508 00:27:36,590 --> 00:27:40,570 >> Ni zinageuka kuwa hii mabano mraba- nukuu ni nini Tutamwita kisintaksia 509 00:27:40,570 --> 00:27:44,190 sukari, ambayo ni njia tu sexy ya akisema shorthand ni nukuu kwa 510 00:27:44,190 --> 00:27:45,950 nini hasa ni kuelezea. 511 00:27:45,950 --> 00:27:49,385 Lakini ni kidogo Intuitive zaidi. 512 00:27:49,385 --> 00:27:53,510 Na katika hatari ya kufanya hii wanaonekana zaidi ngumu kuliko mahitaji kwa kuwa, 513 00:27:53,510 --> 00:27:56,990 nini kweli kinachoendelea hapa ni yafuatayo - 514 00:27:56,990 --> 00:28:01,450 Kama mimi kusema * t kwamba maana ya kwenda anuani ya kuhifadhiwa katika t. 515 00:28:01,450 --> 00:28:04,350 >> Hivyo literally, kama t ni hifadhi ya anuani ya kwamba h 516 00:28:04,350 --> 00:28:07,300 awali, t * njia kwenda hapa. 517 00:28:07,300 --> 00:28:10,730 Sasa, je, t mabano 0 maana? 518 00:28:10,730 --> 00:28:11,560 Huo halisi kitu. 519 00:28:11,560 --> 00:28:13,510 Ni tu zaidi kidogo ya mtumiaji kirafiki kuandika. 520 00:28:13,510 --> 00:28:14,430 >> Lakini nina kufanyika bado. 521 00:28:14,430 --> 00:28:17,800 Siwezi kusema tu t * anapata * s. 522 00:28:17,800 --> 00:28:19,440 Kwa sababu gani mimi kuwa kufanya, basi? 523 00:28:19,440 --> 00:28:22,950 Ningependa kuwa na kuweka h, h, h, h, h katika jambo zima. 524 00:28:22,950 --> 00:28:22,995 Haki? 525 00:28:22,995 --> 00:28:26,020 >> Kwa sababu * t ni kwenda anuani katika t. 526 00:28:26,020 --> 00:28:27,580 Lakini sisi ni ndani ya kitanzi. 527 00:28:27,580 --> 00:28:32,150 Na thamani gani mimi incrementing, bila shaka, juu ya kila iteration? 528 00:28:32,150 --> 00:28:32,690 i. 529 00:28:32,690 --> 00:28:34,590 >> Lakini kuna nafasi hapa, sawa? 530 00:28:34,590 --> 00:28:37,870 Hata ingawa hii anahisi kama ni kupata kidogo kisasa zaidi 531 00:28:37,870 --> 00:28:40,730 kuliko nukuu mraba-bracket tumekuwa kutumika kwa muda - 532 00:28:40,730 --> 00:28:43,840 basi mimi tengua h wangu mabadiliko huko - 533 00:28:43,840 --> 00:28:48,870 hata ingawa hii sasa ni kupata kidogo fancier, wazo msingi, kama t * 534 00:28:48,870 --> 00:28:53,630 maana hapa na t * ni tu kwenda anuani katika t. 535 00:28:53,630 --> 00:28:54,990 >> Lakini kile ambacho kilikuwa anwani katika t? 536 00:28:54,990 --> 00:28:56,850 idadi sisi kuendelea kutumia? 537 00:28:56,850 --> 00:29:00,540 Kama Ox456, hebu kuleta kwamba nyuma tu kwa ajili ya majadiliano. 538 00:29:00,540 --> 00:29:05,380 Naam, kama nataka kupata saa e katika t kamba, mimi tu wanataka kwenda, 539 00:29:05,380 --> 00:29:06,460 kimsingi, 456. 540 00:29:06,460 --> 00:29:09,230 >> Au tuseme, 457. 541 00:29:09,230 --> 00:29:10,590 Mimi tu haja ya kuongeza moja. 542 00:29:10,590 --> 00:29:11,790 Lakini siwezi kufanya hivyo, haki? 543 00:29:11,790 --> 00:29:14,680 Kwa sababu t, hata kama mimi kuendelea kuchora sasa kama mshale, ni tu 544 00:29:14,680 --> 00:29:16,570 posta, Ox456. 545 00:29:16,570 --> 00:29:21,400 Na kama mimi kuongeza moja kwamba, au zaidi kwa ujumla, kama mimi kuongeza mimi kwa kuwa naweza 546 00:29:21,400 --> 00:29:24,350 kweli kupata hasa ambapo nataka. 547 00:29:24,350 --> 00:29:26,260 Hivyo kama mimi kwa kweli kufanya hili - 548 00:29:26,260 --> 00:29:28,970 na hii ni nini sasa inaitwa pointer hesabu - 549 00:29:28,970 --> 00:29:30,375 Naweza kuondoa mstari huu. 550 00:29:30,375 --> 00:29:33,550 Ambayo ni, kusema ukweli, nadhani wazi na zaidi kidogo ya mtumiaji wa kirafiki kusoma. 551 00:29:33,550 --> 00:29:35,970 Lakini hii ni si chini ya sahihi. 552 00:29:35,970 --> 00:29:38,570 >> Line hii ya maadili ya sasa ni kutumia pointer hesabu. 553 00:29:38,570 --> 00:29:40,920 Ni kusema kwenda kufuatia anwani - 554 00:29:40,920 --> 00:29:44,670 chochote mwanzo wa t ni, ambayo ni t plus i, ambayo awali 555 00:29:44,670 --> 00:29:45,730 ni 0, ambayo ni kubwa. 556 00:29:45,730 --> 00:29:49,280 Sababu hiyo ina maana ya mwanzo wa t pamoja na 1, plus 2, pamoja na 3, na kadhalika. 557 00:29:49,280 --> 00:29:51,030 Na mpango huo na s. 558 00:29:51,030 --> 00:29:52,750 >> Hivyo kisintaksia sukari kwa ajili hii. 559 00:29:52,750 --> 00:29:55,900 Lakini kuelewa nini kweli kinachoendelea chini ya Hood, napenda kusema, 560 00:29:55,900 --> 00:29:57,410 ni kweli ni muhimu katika yenyewe. 561 00:29:57,410 --> 00:30:00,620 Sababu ina maana sasa kuna si mengi zaidi uchawi kwenda kwenye 562 00:30:00,620 --> 00:30:01,620 chini ya Hood. 563 00:30:01,620 --> 00:30:03,920 Kuna si kwenda kuwa wengi zaidi tabaka kwamba tunaweza peel nyuma kwa ajili yenu. 564 00:30:03,920 --> 00:30:04,810 Hii ni c. 565 00:30:04,810 --> 00:30:06,410 Na hii ni programu. 566 00:30:06,410 --> 00:30:08,002 Nzuri kwa kweli swali. 567 00:30:08,002 --> 00:30:11,570 >> Haki wote, hivyo hii ni kwamba Buggy mpango mimi alikuwa akimaanisha mapema. 568 00:30:11,570 --> 00:30:12,650 wabadilishane ilikuwa kiujanja. 569 00:30:12,650 --> 00:30:14,070 Kama hawakuwa wanaonekana kazi. 570 00:30:14,070 --> 00:30:17,390 Kukumbuka kuwa tu kama maziwa na maji ya machungwa - ambayo mimi kuanza 571 00:30:17,390 --> 00:30:18,660 kunywa maandamano ya leo. 572 00:30:18,660 --> 00:30:22,220 Hivyo tu kama na maji ya machungwa na maziwa, hatukuwa na kutumia 573 00:30:22,220 --> 00:30:26,200 muda kutofautiana, TMP, kushikilia muda ili kwamba tunaweza kisha 574 00:30:26,200 --> 00:30:28,820 mabadiliko ya thamani yake na kisha update b. 575 00:30:28,820 --> 00:30:32,870 >> Lakini kazi hii, sisi alisema, au hii mpango ambapo kazi hii ilikuwa 576 00:30:32,870 --> 00:30:35,670 imeandikwa ilikuwa na makosa na dosari kubwa, kwa nini? 577 00:30:35,670 --> 00:30:38,870 578 00:30:38,870 --> 00:30:39,090 Ndiyo? 579 00:30:39,090 --> 00:30:42,471 >> Watazamaji: [inaudible]. 580 00:30:42,471 --> 00:30:44,940 >> SPIKA 1: Hasa, wakati wewe piga wabadilishane - 581 00:30:44,940 --> 00:30:47,820 au zaidi kwa ujumla, wakati wewe kuwaita zaidi ya kazi yoyote - 582 00:30:47,820 --> 00:30:51,210 kama hoja ya kazi kwamba ni mali, hivyo kusema, ints na chars 583 00:30:51,210 --> 00:30:56,740 na mara mbili na ikifungwa, mambo bila nyota, wewe ni kupita katika nakala ya 584 00:30:56,740 --> 00:30:57,540 Hoja. 585 00:30:57,540 --> 00:31:01,580 Hivyo kama alikuwa 1 x na y alikuwa 2, ni kwenda kuwa 1 na b ni kwenda kuwa 2. 586 00:31:01,580 --> 00:31:05,250 Lakini wao wanaenda kuwa tofauti chunks ya bits, chunks tofauti ya 587 00:31:05,250 --> 00:31:07,540 kumbukumbu kwamba kutokea kwa kuwa hifadhi ya kufanana maadili. 588 00:31:07,540 --> 00:31:12,160 >> Hivyo kanuni hii ni super kamili saa swapping b na. 589 00:31:12,160 --> 00:31:13,850 Siyo nzuri katika swapping - 590 00:31:13,850 --> 00:31:15,290 katika mfano wa mwisho wa wiki - 591 00:31:15,290 --> 00:31:16,390 x na y. 592 00:31:16,390 --> 00:31:18,780 Sababu tena, wao ni katika upeo vibaya. 593 00:31:18,780 --> 00:31:21,310 >> Sasa, jinsi gani sisi kwenda kuhusu fixing hili? 594 00:31:21,310 --> 00:31:23,140 Tulikuwa na kufanya kazi kuangalia uglier kidogo. 595 00:31:23,140 --> 00:31:25,250 Lakini tena, fikiria nini hii ina maana tu. 596 00:31:25,250 --> 00:31:27,840 597 00:31:27,840 --> 00:31:31,500 >> Na kweli, basi mimi, kwa ajili ya msimamo, kubadili jambo moja hivyo ni sawa na 598 00:31:31,500 --> 00:31:33,200 nini sisi tu alifanya. 599 00:31:33,200 --> 00:31:35,690 Kama nilivyoeleza wiki iliyopita, haina jambo ambapo unaendelea. 600 00:31:35,690 --> 00:31:38,120 Kwa kweli, kwa kawaida bila kuweka nyota karibu na jina kutofautiana. 601 00:31:38,120 --> 00:31:40,750 Lakini nadhani ingekuwa rahisi kidogo kufikiria * karibu na 602 00:31:40,750 --> 00:31:44,910 data aina kama maana ni pointer kwa int katika kesi hii. 603 00:31:44,910 --> 00:31:46,270 >> Hivyo kile mimi nafanya nini hapa? 604 00:31:46,270 --> 00:31:49,590 Mimi kusema wala kunipa int ikifuatiwa na int mwingine, 605 00:31:49,590 --> 00:31:50,810 wito wao na b. 606 00:31:50,810 --> 00:31:52,460 Nipe anwani ya int. 607 00:31:52,460 --> 00:31:53,960 Nipe anwani ya int mwingine. 608 00:31:53,960 --> 00:31:56,330 Kuwaita wale unashughulikia b na. 609 00:31:56,330 --> 00:32:00,860 >> Na kisha kwa kutumia nukuu * chini chini, kwenda kwa kila moja ya anwani wale 610 00:32:00,860 --> 00:32:05,290 kama zinahitajika ama kupata au kuweka thamani yake. 611 00:32:05,290 --> 00:32:07,400 Lakini kuna ubaguzi hapa. 612 00:32:07,400 --> 00:32:11,130 Kwa nini mimi si kuwa * karibu na TMP? 613 00:32:11,130 --> 00:32:15,070 Kwa nini mimi si kufanya hivyo, kwa mfano? 614 00:32:15,070 --> 00:32:19,370 Ni anahisi kama mimi lazima tu kwenda wote nje na kusahihisha jambo zima. 615 00:32:19,370 --> 00:32:19,752 Yeah? 616 00:32:19,752 --> 00:32:21,002 >> Watazamaji: [inaudible]. 617 00:32:21,002 --> 00:32:23,280 618 00:32:23,280 --> 00:32:25,480 >> SPIKA 1: Mimi si alitangaza TMP kama kamba. 619 00:32:25,480 --> 00:32:28,830 620 00:32:28,830 --> 00:32:34,950 Hivyo hii itakuwa kutangaza, katika kesi hii, TMP kuwa anuani ya int. 621 00:32:34,950 --> 00:32:37,380 Lakini si kwamba kabisa nini nataka, kwa michache ya sababu. 622 00:32:37,380 --> 00:32:38,616 >> Watazamaji: Wewe hawataki kubadilishana nao. 623 00:32:38,616 --> 00:32:41,800 >> SPIKA 1: Hasa, Sitaki wabadilishane kitu chochote na TMP. TMP ni tu 624 00:32:41,800 --> 00:32:42,790 wiki moja ya mambo ya ajabu. 625 00:32:42,790 --> 00:32:45,150 Yote nataka ni kutofautiana kuhifadhi baadhi ya simu. 626 00:32:45,150 --> 00:32:47,330 Mimi wala hata huduma kuhusu anwani za katika wakati huu. 627 00:32:47,330 --> 00:32:50,530 >> Mimi haja tu bits 32 au hivyo kuhifadhi int. 628 00:32:50,530 --> 00:32:56,690 Na mimi nataka kuweka katika bits wale 32 chochote si katika, hivyo kusema, lakini 629 00:32:56,690 --> 00:33:01,260 ni nini, tu kuwa sahihi zaidi. 630 00:33:01,260 --> 00:33:06,420 Kwa sababu kama ni anwani, * maana kwenda huko na kupata thamani 1. 631 00:33:06,420 --> 00:33:10,560 Kwa mfano, katika mfano wa wiki iliyopita au katika kesi ya b, kupata thamani ya 2. 632 00:33:10,560 --> 00:33:11,750 >> Basi nini kweli kinachoendelea? 633 00:33:11,750 --> 00:33:15,070 Basi mimi kuchora picha hapa kwamba mapenzi tu tease mbali sehemu ya leo. 634 00:33:15,070 --> 00:33:18,580 Lakini hii itaendelea kuonekana kwa muda kabisa. 635 00:33:18,580 --> 00:33:22,430 >> Hii, mimi kudai, ni nini kompyuta yako kumbukumbu inaonekana kama wakati kukimbia 636 00:33:22,430 --> 00:33:24,060 mpango, mpango wowote. 637 00:33:24,060 --> 00:33:28,340 Wakati kukimbia mpango saa ya juu sana ya RAM ya kompyuta yako - hivyo kufikiria 638 00:33:28,340 --> 00:33:33,530 hii mstatili, kweli, kama yako RAM ya kompyuta au kumbukumbu, kila 101 639 00:33:33,530 --> 00:33:36,920 bilioni ka yake, kila bilioni mbili ka, kila gigabytes mbili ya mambo yake, 640 00:33:36,920 --> 00:33:39,910 chochote wingi una ni, hebu kuteka ni kama mstatili. 641 00:33:39,910 --> 00:33:43,260 Na mimi kudai kwamba wakati wewe kukimbia na mpango kama Microsoft Word au Chrome 642 00:33:43,260 --> 00:33:49,220 au kitu kama hicho, bits kwamba Microsoft au kwamba Google aliandika - 643 00:33:49,220 --> 00:33:50,910 katika kesi ya programu hizo - 644 00:33:50,910 --> 00:33:54,490 ni kubeba katika kumbukumbu ya kompyuta yako ambapo wanaweza kuuawa zaidi 645 00:33:54,490 --> 00:33:57,520 haraka na kulishwa ndani ya CPU, ambayo ni akili ya kompyuta. 646 00:33:57,520 --> 00:34:00,940 >> Na katika TAM wao ni kuhifadhiwa katika sana juu ya mpango wako, hivyo kusema. 647 00:34:00,940 --> 00:34:03,300 Kwa maneno mengine, kama hii ni chunk ya kumbukumbu, wakati wewe bonyeza mara mbili 648 00:34:03,300 --> 00:34:05,740 Microsoft Word, bits kuja mbali ya gari ngumu. 649 00:34:05,740 --> 00:34:06,680 Wao kupata kubeba katika RAM. 650 00:34:06,680 --> 00:34:10,330 Na tutaweza kikumbo yao hadi saa ya juu sana ya hii Mstatili conceptually. 651 00:34:10,330 --> 00:34:13,010 >> Naam, mapumziko ya kumbukumbu yako ni kutumika kwa ajili ya mambo mbalimbali. 652 00:34:13,010 --> 00:34:16,460 Saa ya juu sana, unaweza kuona initialize data na uninitialize data. 653 00:34:16,460 --> 00:34:20,500 Hii ina nini, kwa sehemu kubwa, na constants au vigezo kimataifa 654 00:34:20,500 --> 00:34:21,340 kwamba kuwa na maadili. 655 00:34:21,340 --> 00:34:22,980 Lakini zaidi juu ya wale wakati mwingine. 656 00:34:22,980 --> 00:34:25,150 >> Basi una chungu, ambayo tutaweza kuja nyuma. 657 00:34:25,150 --> 00:34:28,420 Lakini chini ni sehemu hiyo ni hasa germane hivi sasa. 658 00:34:28,420 --> 00:34:30,210 Ni stack kinachojulikana. 659 00:34:30,210 --> 00:34:33,850 Hivyo tu kama katika ukumbi yoyote zaidi D hapa chuo, una sania wale 660 00:34:33,850 --> 00:34:37,210 tu stack juu ya kila mmoja juu ambayo unaweza kuweka chakula na mengineyo. 661 00:34:37,210 --> 00:34:40,139 stack katika mfumo wa kompyuta ni sawa sana. 662 00:34:40,139 --> 00:34:42,679 Ila wakati tray, kama sisi kutumia katika dining hall, bila shaka, ni maana 663 00:34:42,679 --> 00:34:45,710 kubeba mambo sania au muafaka - 664 00:34:45,710 --> 00:34:49,469 kama tutaweza kuwaita - katika ya kompyuta kumbukumbu ni kutumika kushikilia 665 00:34:49,469 --> 00:34:51,610 vigezo na maadili. 666 00:34:51,610 --> 00:34:53,929 >> Hivyo kile kweli unaendelea chini ya Hood? 667 00:34:53,929 --> 00:34:55,820 Vizuri, basi mimi flip juu screen hapa. 668 00:34:55,820 --> 00:34:58,370 Na hebu mkazo tu kwa chini sehemu kwa muda. 669 00:34:58,370 --> 00:35:02,770 Kama hii ni sehemu ya chini ya yangu kumbukumbu ya kompyuta zinageuka wakati mimi 670 00:35:02,770 --> 00:35:05,350 piga kazi kuu - ambayo hufanyika, kusema ukweli, 671 00:35:05,350 --> 00:35:06,950 moja kwa moja kwa ajili yangu - 672 00:35:06,950 --> 00:35:10,510 Mimi kupata chunk ya kumbukumbu katika chini ya RAM yangu hivyo kusema. 673 00:35:10,510 --> 00:35:13,390 Na hii ni wapi kuu ni vigezo mitaa kwenda. 674 00:35:13,390 --> 00:35:16,770 Ni ambapo argc na argv labda kwenda, na vigezo yoyote mimi 675 00:35:16,770 --> 00:35:18,170 kutangaza ndani ya kuu. 676 00:35:18,170 --> 00:35:20,260 Wao kuishia chini ya RAM ya kompyuta yangu. 677 00:35:20,260 --> 00:35:25,040 >> Sasa tuseme kwamba wito kuu kazi kama wabadilishane, kama ilivyokuwa wiki iliyopita? 678 00:35:25,040 --> 00:35:30,620 Naam, sisi kimsingi kuweka tray mpya, mpya sura, kwenye chunk yangu ya kumbukumbu. 679 00:35:30,620 --> 00:35:34,160 Na mimi nina kwenda kuelezea hii kama mali ya kazi ya kubadilishana. 680 00:35:34,160 --> 00:35:35,770 >> Sasa nini ndani ya kubadilishana? 681 00:35:35,770 --> 00:35:39,240 Vizuri, kwa kuzingatia mpango wa wiki iliyopita na mmoja sisi tu kuona Excerpt kutoka, 682 00:35:39,240 --> 00:35:46,590 ndani ya sura ya kubadilishana, au juu ya kubadilishana ya tray, ni nini vigezo? 683 00:35:46,590 --> 00:35:47,970 Naam, na b. 684 00:35:47,970 --> 00:35:51,850 Kwa sababu wale walikuwa hoja yake ya ndani, pamoja na wa tatu, TMP. 685 00:35:51,850 --> 00:35:54,470 Hivyo kweli, mimi naweza kuteka hii kidogo zaidi cleanly. 686 00:35:54,470 --> 00:35:56,680 Hebu kwenda mbele na kuondoa studio. 687 00:35:56,680 --> 00:35:58,520 Na napenda kudai kwamba unajua nini? 688 00:35:58,520 --> 00:36:00,560 >> pengine ni kwenda kuishia hapa. 689 00:36:00,560 --> 00:36:02,160 B ni kwenda kuishia hapa. 690 00:36:02,160 --> 00:36:03,810 Na TMP ni kwenda kuishia hapa. 691 00:36:03,810 --> 00:36:05,160 Sasa, kuagiza nguvu kuwa tofauti kidogo. 692 00:36:05,160 --> 00:36:06,840 Lakini conceptually hii ni wazo. 693 00:36:06,840 --> 00:36:11,490 >> Na tu kwa pamoja, hii ni nini Tutamwita sura ya kubadilishana, au 694 00:36:11,490 --> 00:36:12,136 messi tray. 695 00:36:12,136 --> 00:36:13,150 Na mpango huo na kuu. 696 00:36:13,150 --> 00:36:14,040 Lakini mimi si redraw kwamba. 697 00:36:14,040 --> 00:36:17,810 Lakini hilo ambapo argc na argv na yoyote ya vigezo yake ya ndani kama x na y 698 00:36:17,810 --> 00:36:18,940 wapate kuwa kama vile. 699 00:36:18,940 --> 00:36:22,170 >> Hivyo sasa kufikiria nini kweli kinachotokea wakati wewe piga wabadilishane. 700 00:36:22,170 --> 00:36:26,370 Wakati wewe piga wabadilishane, utekelezaji wa kanuni kama hii, wewe ni kupita katika, katika 701 00:36:26,370 --> 00:36:30,670 Buggy toleo, b na kama nakala za x na y. 702 00:36:30,670 --> 00:36:34,300 Hivyo kama mimi sasa kuteka hii juu ya screen - 703 00:36:34,300 --> 00:36:36,700 got kupata bora katika hili - 704 00:36:36,700 --> 00:36:40,850 hivyo hadithi mimi alikuwa anawaambia kwa mwenyewe alikuwa katika toleo hili Buggy, wakati sisi 705 00:36:40,850 --> 00:36:46,130 kuwaita wabadilishane kupita katika literally na b kama integers, nini kweli kinachotokea? 706 00:36:46,130 --> 00:36:48,250 >> Vizuri, nini kweli kinachotokea ni hii. 707 00:36:48,250 --> 00:36:52,850 Hebu kwenda mbele na kuondoa tu wazi juu ya baadhi ya nafasi hapa. 708 00:36:52,850 --> 00:36:54,720 Hivyo hii ni kumbukumbu ya kompyuta yangu. 709 00:36:54,720 --> 00:36:57,510 >> Hivyo kama mimi, kwa mfano - 710 00:36:57,510 --> 00:36:58,910 kweli hebu kufanya hivyo kwa njia hii - 711 00:36:58,910 --> 00:37:02,690 kama mimi kudai kwamba hii ni x, hifadhi thamani 1 tu kama wiki iliyopita. 712 00:37:02,690 --> 00:37:05,930 Na hii ni y, kuhifadhi thamani 2 tu kama wiki iliyopita. 713 00:37:05,930 --> 00:37:11,370 Na hii ni kuu, wakati mimi wito wabadilishane, hivyo kutoa mwenyewe upatikanaji na 714 00:37:11,370 --> 00:37:15,150 b na TMP, mimi nina kwenda kudai kwamba hii ni na hii ni 1. 715 00:37:15,150 --> 00:37:16,080 >> Hii ni b. 716 00:37:16,080 --> 00:37:17,010 Hii ni 2. 717 00:37:17,010 --> 00:37:18,370 Hii inaitwa TMP. 718 00:37:18,370 --> 00:37:23,360 >> Na awali, ina baadhi ya thamani ya takataka mpaka mimi kweli kuhifadhi ndani yake, 719 00:37:23,360 --> 00:37:24,450 ambayo ni 1. 720 00:37:24,450 --> 00:37:28,320 Kisha mimi kwenda mbele na mabadiliko ya kuwa nini? 721 00:37:28,320 --> 00:37:29,720 B ya thamani. 722 00:37:29,720 --> 00:37:31,980 >> Na hivyo sasa mimi mbili hapa. 723 00:37:31,980 --> 00:37:34,050 Na kisha sisi alisema b anapata TMP. 724 00:37:34,050 --> 00:37:37,670 Tena, tu kama sanity kuangalia, ya tatu mstari wa kanuni hapa tu hii 725 00:37:37,670 --> 00:37:39,440 moja, b anapata TMP. 726 00:37:39,440 --> 00:37:41,730 >> Na hivyo mwishowe, nini mimi? 727 00:37:41,730 --> 00:37:46,800 Mimi kwenda mbele na kubadili b kuwa chochote thamani ya TMP ni, ambayo ni 1. 728 00:37:46,800 --> 00:37:48,390 Mimi wala kugusa TMP tena. 729 00:37:48,390 --> 00:37:54,100 >> Lakini sasa, tatizo ni haraka kama wabadilishane anarudi, kwa sababu si kuwapatia 730 00:37:54,100 --> 00:37:57,540 nyuma baadhi ya thamani, kuna hakuna kurudi kauli ya wazi katika hilo. 731 00:37:57,540 --> 00:37:59,080 Nini hasa kinatokea? 732 00:37:59,080 --> 00:38:03,480 Naam, kimsingi kumbukumbu hii yote - 733 00:38:03,480 --> 00:38:07,410 OK, inaonekana Raba anapenda moja tu ya kidole wakati huo - 734 00:38:07,410 --> 00:38:08,180 tu kutoweka. 735 00:38:08,180 --> 00:38:10,070 >> Sasa katika hali halisi si kwenda mahali popote. 736 00:38:10,070 --> 00:38:11,810 Lakini unaweza kufikiria ni sasa kama alama ya kuuliza. 737 00:38:11,810 --> 00:38:14,040 Sababu ni tena kweli katika matumizi. 738 00:38:14,040 --> 00:38:17,470 Na hakuna kitu inafanywa na maadili hayo. 739 00:38:17,470 --> 00:38:21,920 >> Hivyo katika kesi ya toleo la kijani la kanuni hii, nini badala yake ni kuwa 740 00:38:21,920 --> 00:38:24,640 kupita katika wabadilishane? 741 00:38:24,640 --> 00:38:25,770 Basi anwani. 742 00:38:25,770 --> 00:38:28,520 Basi anwani ya x na anuani ya y. 743 00:38:28,520 --> 00:38:35,790 Hivyo kama sisi re-kuwaambia hadithi hii moja ya mwisho muda, na mimi kwa kweli kuteka wabadilishane tena, 744 00:38:35,790 --> 00:38:44,620 lakini pamoja na kuyatumia, hii kuwa, hii kuwa b, na hii TMP kuwa, ni nini 745 00:38:44,620 --> 00:38:49,080 kweli kuhifadhiwa katika katika hii ya kijani toleo la kanuni yangu ambapo mimi nina kupita 746 00:38:49,080 --> 00:38:52,110 katika anwani? 747 00:38:52,110 --> 00:38:53,780 >> Ni kwenda kuwa pointer x. 748 00:38:53,780 --> 00:38:54,890 Ili niweze kuteka mshale. 749 00:38:54,890 --> 00:38:57,310 Lakini hebu kutumia holela huo mfano kama kabla. 750 00:38:57,310 --> 00:39:01,220 Hebu kusema kwamba hii ni kitu kama Ox123. 751 00:39:01,220 --> 00:39:04,970 Na hii ni kwenda kuwa Ox127 kwa sababu ni wanne ka mbali kwa sababu ni 752 00:39:04,970 --> 00:39:07,370 int, hivyo Ox127. 753 00:39:07,370 --> 00:39:09,080 >> Na tena, mimi kuchukua uhuru wa baadhi ya pamoja na namba. 754 00:39:09,080 --> 00:39:11,430 Wao ni ndogo sana kuliko wao ingekuwa kweli kuwa na utaratibu tofauti. 755 00:39:11,430 --> 00:39:14,350 Lakini hiyo ni jinsi gani picha sasa ni tofauti. 756 00:39:14,350 --> 00:39:19,060 >> Lakini wakati mimi kutumia kanuni hii ya kijani na mimi TMP int kupata *. 757 00:39:19,060 --> 00:39:25,010 * Njia ya kufanya yafuatayo, kuchukua kushughulikia kwamba katika na kwenda kwa hiyo, 758 00:39:25,010 --> 00:39:26,190 ambayo ni 1. 759 00:39:26,190 --> 00:39:28,480 Na kwamba ni nini mimi kisha kuweka katika TMP. 760 00:39:28,480 --> 00:39:32,480 Wakati huo huo, katika mstari wa pili wa kanuni hapa, * anapata b, hiyo ina maana gani? 761 00:39:32,480 --> 00:39:36,910 >> Naam, *, hivyo kwenda hapa anapata * b, ambayo ina maana ya kwenda huko. 762 00:39:36,910 --> 00:39:39,310 Na kwamba maana ya kuweka thamani na pale. 763 00:39:39,310 --> 00:39:43,670 Hatimaye, mstari wa mwisho wa kanuni tu alisema * b anapata TMP. 764 00:39:43,670 --> 00:39:48,900 >> Hivyo anasema b kwenda huko na overwrite ni pamoja na TMP ambayo, katika kesi hii, ni kwenda 765 00:39:48,900 --> 00:39:51,520 kuwa, tena, 1. 766 00:39:51,520 --> 00:39:54,920 Na hii ni kwa nini toleo la kijani la kanuni zetu matendo, ambapo nyekundu 767 00:39:54,920 --> 00:39:56,010 toleo kamwe alifanya. 768 00:39:56,010 --> 00:39:59,020 Ni wote tu majipu chini jinsi kumbukumbu ni kusimamiwa na ambapo ni 769 00:39:59,020 --> 00:40:02,580 kweli kuwekwa katika yako kompyuta RAM. 770 00:40:02,580 --> 00:40:07,270 Na kwa sasa, hiyo ni moja ya mambo kwamba stack ni kuwa kutumika kwa ajili ya. 771 00:40:07,270 --> 00:40:09,225 >> Maswali juu ya mpangilio? 772 00:40:09,225 --> 00:40:10,380 Juu ya kuyatumia? 773 00:40:10,380 --> 00:40:11,630 Au juu ya kubadilishana? 774 00:40:11,630 --> 00:40:13,740 775 00:40:13,740 --> 00:40:17,043 >> Haki ya wote, hivyo malloc, kukumbuka, walifanya kitu kama hiki. 776 00:40:17,043 --> 00:40:18,260 Hii ilikuwa ni super rahisi mfano. 777 00:40:18,260 --> 00:40:20,550 Na hii ilikuwa ni moja kwamba Binky ilianzisha kwetu, angalau kabisa 778 00:40:20,550 --> 00:40:21,870 haraka, mwisho wa darasa. 779 00:40:21,870 --> 00:40:24,480 Dammit, kuna sisi kwenda tena. 780 00:40:24,480 --> 00:40:28,780 >> Hivyo kukumbuka kwamba hii ilikuwa mfano kwamba Binky ilianzisha kwetu, angalau 781 00:40:28,780 --> 00:40:30,360 kiasi fulani haraka mwisho wa darasa. 782 00:40:30,360 --> 00:40:33,640 Na hapa sisi kutumika malloc kweli kwa mara ya pili. 783 00:40:33,640 --> 00:40:37,330 Kwa sababu mara ya kwanza sisi kutumika kwa kujenga RAM kutosha, kutenga RAM kutosha 784 00:40:37,330 --> 00:40:38,340 kuhifadhi kamba. 785 00:40:38,340 --> 00:40:40,250 >> Wakati huu naendelea Binky ni rahisi. 786 00:40:40,250 --> 00:40:42,465 Hivyo ni kuhifadhi tu int, inaonekana. 787 00:40:42,465 --> 00:40:43,510 Na kwamba kabisa faini. 788 00:40:43,510 --> 00:40:46,560 Ni weird kidogo, kusema ukweli, kwa kutumia malloc kutenga moja int. 789 00:40:46,560 --> 00:40:50,650 Lakini hatua ya claymation Nick alikuwa kweli tu kuwaambia hadithi ya kile 790 00:40:50,650 --> 00:40:53,830 kinatokea au haina kutokea wakati wewe kuwatendea kumbukumbu. 791 00:40:53,830 --> 00:40:56,520 >> Hivyo katika kesi hii, mpango huu alifanya mambo machache. 792 00:40:56,520 --> 00:41:01,580 Katika kesi ya kwanza hapa, inatangaza pointer kuitwa x kwa int. 793 00:41:01,580 --> 00:41:04,480 Ni kisha anatangaza pointer kuitwa y int. 794 00:41:04,480 --> 00:41:06,150 Ni kisha maduka katika x, nini? 795 00:41:06,150 --> 00:41:07,110 Mtu mwingine sasa. 796 00:41:07,110 --> 00:41:09,685 Nini anapata kuhifadhiwa katika x kulingana na mstari wa tatu wa mpango huu? 797 00:41:09,685 --> 00:41:12,380 >> Watazamaji: [inaudible]. 798 00:41:12,380 --> 00:41:14,130 >> SPIKA 1: Naam, si kabisa ka, kwa kusema. 799 00:41:14,130 --> 00:41:16,760 Kuwa sahihi zaidi sasa. 800 00:41:16,760 --> 00:41:18,325 Nini anapata kuhifadhiwa katika x? 801 00:41:18,325 --> 00:41:21,000 802 00:41:21,000 --> 00:41:22,060 anwani, nadhani habari hiyo. 803 00:41:22,060 --> 00:41:23,570 >> Hivyo nini malloc kurudi? 804 00:41:23,570 --> 00:41:26,030 malloc behaviorally kutenga chunk ya kumbukumbu. 805 00:41:26,030 --> 00:41:27,850 Lakini jinsi gani kukupa huduma hiyo? 806 00:41:27,850 --> 00:41:29,460 Kuirudisha nini? 807 00:41:29,460 --> 00:41:32,000 anuani ya Byte kwanza katika chunk ya kumbukumbu. 808 00:41:32,000 --> 00:41:33,020 >> Sasa, hii ni super rahisi. 809 00:41:33,020 --> 00:41:35,380 Ni moja tu Byte, ambayo ina maana ya kushughulikia sisi ni kupata nyuma ni 810 00:41:35,380 --> 00:41:37,300 anuani ya jambo zima. 811 00:41:37,300 --> 00:41:42,070 Hivyo kuhifadhiwa katika x basi, ni anwani ya kwamba chunk ya kumbukumbu. 812 00:41:42,070 --> 00:41:43,400 Wakati huo huo, nini kinatokea ijayo? 813 00:41:43,400 --> 00:41:45,890 Hivyo kweli, hebu kwenda mbele na kuteka hii kwa haraka nje ya kweli. 814 00:41:45,890 --> 00:41:52,490 >> Hivyo kama sisi kwenda juu ya screen hapa na sisi kucheza hii nje int * x na y * int 815 00:41:52,490 --> 00:41:53,740 ni kwenda kufanya nini kwa ajili yangu? 816 00:41:53,740 --> 00:41:58,280 Mimi kudai kwamba ni tu kwenda kufanya kitu kama hiki na kuiita x, na 817 00:41:58,280 --> 00:42:00,010 hii na kuiita y. 818 00:42:00,010 --> 00:42:03,110 Wakati huo huo, mstari wa tatu wa kanuni ni kwenda kutenga ukubwa wa int, 819 00:42:03,110 --> 00:42:06,160 ambayo hutokea kwa kuwa - pole kama nilivyosema moja kabla ya mimi maana moja int - 820 00:42:06,160 --> 00:42:08,280 wanne ka kwenye kompyuta ya kawaida. 821 00:42:08,280 --> 00:42:09,720 Angalau na appliance CS50. 822 00:42:09,720 --> 00:42:11,490 >> Hivyo hii ni ya kwenda kutenga yake, ambaye anajua? 823 00:42:11,490 --> 00:42:12,800 Mahali fulani nje hapa. 824 00:42:12,800 --> 00:42:15,780 Na hii ni kuhifadhiwa katika baadhi ya anuani ya ng'ombe, ambaye anajua? 825 00:42:15,780 --> 00:42:18,330 Lakini nini kinaendelea kupata akarudi ni kwamba anwani. 826 00:42:18,330 --> 00:42:22,270 Lakini tutaweza kuteka hii pictorially kama tu mshale kama hiyo. 827 00:42:22,270 --> 00:42:25,430 >> Sasa katika mstari wa pili * x anapata 42. 828 00:42:25,430 --> 00:42:29,400 Je * x maana katika suala layman? 829 00:42:29,400 --> 00:42:30,040 Tu kwenda huko. 830 00:42:30,040 --> 00:42:30,960 Kwenda kwa anwani hiyo. 831 00:42:30,960 --> 00:42:35,900 Au kwa maneno mengine, kufuata mshale na kuweka 42 huko. 832 00:42:35,900 --> 00:42:38,140 Lakini basi kitu mbaya kilichotokea kwa Binky, haki? 833 00:42:38,140 --> 00:42:43,950 >> Kumbuka kwamba line tano hapa, * y anapata 13, kwa kweli idadi ukorofi, 834 00:42:43,950 --> 00:42:44,760 alifanya nini kwa ajili yetu? 835 00:42:44,760 --> 00:42:47,320 Naam, * y njia kwenda huko. 836 00:42:47,320 --> 00:42:50,460 Naam, hii haijawahi kutolewa thamani bado, haki? 837 00:42:50,460 --> 00:42:54,090 kanuni hana y kuwa initialized na kitu chochote. 838 00:42:54,090 --> 00:42:56,120 Tulikuwa x kuwa initialized na anwani. 839 00:42:56,120 --> 00:42:57,640 Lakini y ilitangazwa juu juu. 840 00:42:57,640 --> 00:43:00,250 Lakini basi semicolon, hakuna thamani ilikuwa kweli kuweka ndani yake. 841 00:43:00,250 --> 00:43:02,330 Hivyo ni haki ya kuita hii thamani ya takataka. 842 00:43:02,330 --> 00:43:03,430 Nani anajua nini huko? 843 00:43:03,430 --> 00:43:07,160 Ni mabaki ya vipande kwamba walikuwa kutumika na baadhi ya mstari wa kanuni katika uliopita 844 00:43:07,160 --> 00:43:08,300 wangu wa mpango. 845 00:43:08,300 --> 00:43:13,250 >> Hivyo kama mimi kusema kwenda huko, hii ni kama, Mimi sijui ambapo mshale hii ni 846 00:43:13,250 --> 00:43:14,490 kwenda kuishia. 847 00:43:14,490 --> 00:43:17,720 Na kwamba wakati wewe kawaida kupata kosa segmentation. 848 00:43:17,720 --> 00:43:22,430 Kama ajali dereference, hivyo kuzungumza, au kwenda anuani si kwamba 849 00:43:22,430 --> 00:43:25,400 kweli anwani halali, mambo mabaya kutokea. 850 00:43:25,400 --> 00:43:27,550 >> Na kwamba ni nini hasa kilichotokea kufikiri Binky. 851 00:43:27,550 --> 00:43:31,060 Hivyo kukumbuka kwamba hadithi kwamba Nick alikuwa kuwaambia hapa ilikuwa wazo moja kama nini 852 00:43:31,060 --> 00:43:34,050 Nimekuwa inayotolewa na udanganyifu wa chaki ubaoni huko. 853 00:43:34,050 --> 00:43:35,960 X na y ni alitangaza. 854 00:43:35,960 --> 00:43:39,690 >> Kisha sisi zilizotengwa ukubwa wa int na kuhifadhiwa katika x. 855 00:43:39,690 --> 00:43:42,130 Kisha mstari unaofuata tulivyofanya * x. 856 00:43:42,130 --> 00:43:46,070 Hii ilikuwa ni Nick uchawi wand ya dereferencing. 857 00:43:46,070 --> 00:43:49,780 Kwamba kuweka 42 katika kumbukumbu alisema na x. 858 00:43:49,780 --> 00:43:51,600 >> Lakini hii ni ambapo mambo akaenda horribly vibaya. 859 00:43:51,600 --> 00:43:51,820 Haki? 860 00:43:51,820 --> 00:43:53,550 Sisi alijaribu y dereference. 861 00:43:53,550 --> 00:43:55,620 Lakini y alikuwa na baadhi ya thamani bogus, haki? 862 00:43:55,620 --> 00:43:57,720 >> Kwamba mshale katika chini upande wa kushoto kona, si 863 00:43:57,720 --> 00:43:58,950 kweli akizungumzia kitu. 864 00:43:58,950 --> 00:44:01,520 Ni aina ya kufanya kile Mimi alivyofanya hapa kwenye bodi. 865 00:44:01,520 --> 00:44:05,900 Hivyo mambo mabaya kutokea, segmentation kosa, au Binky kosa, katika kesi hii. 866 00:44:05,900 --> 00:44:10,800 >> Lakini kama sisi kisha kurekebisha kwamba kwa kufanya x anapata y jinsi gani mabadiliko ya hadithi? 867 00:44:10,800 --> 00:44:15,760 Naam, kama mimi kufanya x anapata y, hiyo ni ufanisi sawa na kusema 868 00:44:15,760 --> 00:44:19,235 chochote hii ni, ng'ombe-kitu ni kwenda kuwa sawa hapa, 869 00:44:19,235 --> 00:44:20,080 Ng'ombe-kitu. 870 00:44:20,080 --> 00:44:22,970 Au pictorially tutaweza kuteka mshale. 871 00:44:22,970 --> 00:44:25,530 >> Hivyo hapa juu ya bodi na Binky, na line ya pili ya 872 00:44:25,530 --> 00:44:28,350 kanuni, * y ina maana kwenda huko. 873 00:44:28,350 --> 00:44:29,400 Ambapo ni huko? 874 00:44:29,400 --> 00:44:30,820 Maana yake ni zaidi ya hapa. 875 00:44:30,820 --> 00:44:36,050 >> Na wakati sisi update kwamba kuwa 13 tu kwenda na inahusisha 876 00:44:36,050 --> 00:44:39,470 kuandika 13 hapa sasa. 877 00:44:39,470 --> 00:44:44,130 Hivyo labda kabisa moja kwa moja katika mtazamo wa kwanza. 878 00:44:44,130 --> 00:44:47,740 Lakini kwa kurejea na kutumia jargon huo kwamba Binky ilikuwa kutumia hapa, hivyo 879 00:44:47,740 --> 00:44:50,485 mbili ya kwanza kutenga kuyatumia, x na y, lakini si pointees. 880 00:44:50,485 --> 00:44:54,750 Na pointees si ujumla kutumika mrefu. 881 00:44:54,750 --> 00:44:56,120 Lakini pointer kabisa ni. 882 00:44:56,120 --> 00:44:59,200 Lakini ni nini kuwa alisema saa katika utaratibu wa majina Binky ya. 883 00:44:59,200 --> 00:45:01,660 >> Line hii ya pili, bila shaka, kutenga pointee int. 884 00:45:01,660 --> 00:45:04,840 Hivyo chunk ya kumbukumbu - kama nilitoa zaidi juu ya upande wa kulia hapo - na kuweka 885 00:45:04,840 --> 00:45:06,470 x sawa kwa uhakika na hilo. 886 00:45:06,470 --> 00:45:11,350 Hii x dereferences kuhifadhi 42 katika kumbukumbu kwamba ni akionyesha. 887 00:45:11,350 --> 00:45:13,380 Na kisha hii, bila shaka, ilikuwa kitu mbaya. 888 00:45:13,380 --> 00:45:15,600 Kwa sababu y hakuwa akizungumzia katika kitu bado. 889 00:45:15,600 --> 00:45:16,530 Hii kunasa yake. 890 00:45:16,530 --> 00:45:18,240 Hivyo hii ni bado Buggy mpango. 891 00:45:18,240 --> 00:45:21,580 Tu kwa sababu sisi ni unavuma kupitia kanuni ya mstari kwa mstari na kusema, oh vizuri, 892 00:45:21,580 --> 00:45:22,690 basi ni ajali huko. 893 00:45:22,690 --> 00:45:23,420 Hiyo ni kitu mbaya. 894 00:45:23,420 --> 00:45:26,790 Tabia mbaya ni mpango tu kwenda mimba kabisa katika mstari huo. 895 00:45:26,790 --> 00:45:30,550 Lakini kama ungekuwa na kuondoa kugonga kujipanga na badala yake na mawili ya mwisho 896 00:45:30,550 --> 00:45:32,470 mistari kuna hawawajui - 897 00:45:32,470 --> 00:45:35,310 kutumia pointer kazi - y kwa uhakika na x kama t uhakika. 898 00:45:35,310 --> 00:45:39,280 Na kisha wewe dereference y katika njia salama sana. 899 00:45:39,280 --> 00:45:41,520 >> Hivyo ambapo gani hii kuondoka sisi? 900 00:45:41,520 --> 00:45:45,350 Naam, zinageuka kuwa chini ya Hood katika maktaba CS50, kuyatumia ni 901 00:45:45,350 --> 00:45:46,320 kutumika katika. 902 00:45:46,320 --> 00:45:48,910 Na tutaweza kweli kuanza peel nyuma kwamba safu kabla ya muda mrefu. 903 00:45:48,910 --> 00:45:51,740 Lakini ni zamu pia, kujieleza kwamba baadhi yenu wanaweza kuwa na mazoea na, 904 00:45:51,740 --> 00:45:54,580 hasa wale vizuri zaidi, ni kweli kwamba ya maarufu sana 905 00:45:54,580 --> 00:45:56,390 tovuti, au kufurika stack, siku hizi. 906 00:45:56,390 --> 00:45:58,720 >> Lakini hii kweli ina sana kiufundi maana. 907 00:45:58,720 --> 00:46:00,160 Sisi sasa kujua stack ni. 908 00:46:00,160 --> 00:46:02,550 Ni kama mkusanyiko wa sania ndani ya ukumbi wa kulia chakula. 909 00:46:02,550 --> 00:46:05,140 >> Au ndani ya kompyuta yako kumbukumbu yake muafaka wale 910 00:46:05,140 --> 00:46:06,900 ambazo hutumiwa na utendaji. 911 00:46:06,900 --> 00:46:10,760 Naam, zinageuka kuwa sababu ya kwamba rahisi sana utekelezaji wa 912 00:46:10,760 --> 00:46:14,970 kumbukumbu na muafaka juu ya kinachojulikana stack, unaweza kweli kuchukua udhibiti 913 00:46:14,970 --> 00:46:17,050 ya mfumo wa kompyuta haki kwa urahisi. 914 00:46:17,050 --> 00:46:22,180 Unaweza hack katika mfumo kama watu kama sisi si imeandikwa code yetu 915 00:46:22,180 --> 00:46:23,300 hasa vizuri. 916 00:46:23,300 --> 00:46:26,670 >> Kama watu kama sisi kutumia chunks ya kumbukumbu au matumizi arrays - 917 00:46:26,670 --> 00:46:27,810 hata zaidi ya kawaida - 918 00:46:27,810 --> 00:46:31,800 lakini wakati mwingine kusahau kuangalia mipaka ya safu yetu kama waweza 919 00:46:31,800 --> 00:46:38,470 na wewe mwenyewe wakati mwingine, na iterated njia mbali sana siku za nyuma mwisho safu. 920 00:46:38,470 --> 00:46:40,520 Katika kesi bora, mpango wako ili tu kukwama. 921 00:46:40,520 --> 00:46:42,280 Segmentation kosa, aina ya aibu. 922 00:46:42,280 --> 00:46:45,480 Si kubwa, lakini siyo lazima Jambo imekuwa mbaya. 923 00:46:45,480 --> 00:46:49,480 >> Lakini kama mpango wako ni kweli juu ya mali watumiaji 'kompyuta, ikiwa ni mbio 924 00:46:49,480 --> 00:46:53,070 kwenye tovuti ya kwamba halisi random watu kwenye mtandao ni kupiga, kuruhusu 925 00:46:53,070 --> 00:46:56,690 watu kushawishi mambo mabaya juu ya kanuni yako ni ujumla si jambo zuri kwa sababu 926 00:46:56,690 --> 00:46:59,930 maana yake ni nafasi ya kuchukua udhibiti wa kompyuta. 927 00:46:59,930 --> 00:47:01,350 Na hii ni kwenda kuangalia kidogo fumbo. 928 00:47:01,350 --> 00:47:04,570 Lakini nilifikiri ningependa kuwatisheni ninyi kwa mfano huu mwisho hapa. 929 00:47:04,570 --> 00:47:05,650 >> Hapa ni mfano wa kanuni. 930 00:47:05,650 --> 00:47:07,370 Na kuna Wikipedia nzuri makala kwamba anatembea kwa njia ya 931 00:47:07,370 --> 00:47:08,530 hili kwa undani zaidi. 932 00:47:08,530 --> 00:47:13,890 Nina kuu juu ya wito chini foo, kupita katika argv ya 1. 933 00:47:13,890 --> 00:47:15,750 Na kwamba tu ili uweze kuendesha programu na kupita 934 00:47:15,750 --> 00:47:17,080 pembejeo holela. 935 00:47:17,080 --> 00:47:20,180 >> Na kisha foo ni alitangaza juu juu kama kukubali kamba, au zaidi 936 00:47:20,180 --> 00:47:21,700 usahihi, * Char. 937 00:47:21,700 --> 00:47:23,860 Ni kisha anatangaza safu ya chars. 938 00:47:23,860 --> 00:47:27,130 Kuiita buffer, kwa ujumla zaidi, ya ukubwa wa 12. 939 00:47:27,130 --> 00:47:30,900 Hivyo 12 chars unaweza fit ndani ya ya kwamba safu kuitwa c. 940 00:47:30,900 --> 00:47:33,510 >> Na kisha anatumia kazi huu mpya, ambayo ni mpya lakini si vigumu 941 00:47:33,510 --> 00:47:34,930 kuelewa, kumbukumbu nakala. 942 00:47:34,930 --> 00:47:39,290 Ni nakala ya kumbukumbu kutoka bar, ambayo ilikuwa kutofautiana zamani n, chochote 943 00:47:39,290 --> 00:47:42,080 mtumiaji typed katika argv 1 katika c. 944 00:47:42,080 --> 00:47:43,090 Ngapi ka? 945 00:47:43,090 --> 00:47:44,260 urefu wa kamba ya bar. 946 00:47:44,260 --> 00:47:48,380 >> Hivyo kwa maneno mengine, kama mtumiaji aina katika h-e-l-l-o kuingia, urefu wa kamba 947 00:47:48,380 --> 00:47:49,260 ya hodi ni tano. 948 00:47:49,260 --> 00:47:52,790 Hivyo tano ya ka wale ni kwenda kupata kunakiliwa katika safu kuitwa c, ambayo 949 00:47:52,790 --> 00:47:54,110 ni ya kawaida 12. 950 00:47:54,110 --> 00:47:58,710 Lakini nini mtumiaji aina katika sana tena neno hilo wahusika 13 au 14 951 00:47:58,710 --> 00:48:01,250 wahusika au wahusika 100 au zaidi? 952 00:48:01,250 --> 00:48:02,660 >> Ambapo ni wao kwenda kwenda? 953 00:48:02,660 --> 00:48:06,090 Naam, kwamba sura, kwamba tray katika stack messi, 954 00:48:06,090 --> 00:48:06,930 wao wanaenda kwenda huko. 955 00:48:06,930 --> 00:48:10,080 Na ni tu kwenda kuanza overwriting mambo mengine kwamba tayari 956 00:48:10,080 --> 00:48:12,880 juu ya stack kwamba, imejazwa stack, hivyo kusema. 957 00:48:12,880 --> 00:48:14,780 >> Hivyo pictorially, kufikiria njia hii. 958 00:48:14,780 --> 00:48:17,970 Hii ni toleo la rangi ya picha tumekuwa kuchora. 959 00:48:17,970 --> 00:48:20,060 Chini, hebu sema, ni kuu. 960 00:48:20,060 --> 00:48:24,690 Na juu, nini wewe ni kuona sasa ni sura, rangi coded sasa, kwa 961 00:48:24,690 --> 00:48:26,090 kazi kuitwa foo. 962 00:48:26,090 --> 00:48:30,170 Lakini nini kuvutia hapa kuhusu foo ni kwamba hapa ni sura yake. 963 00:48:30,170 --> 00:48:32,860 Hivyo ni inayotolewa kama mimi alifanya lakini katika bluu mwanga. 964 00:48:32,860 --> 00:48:35,220 Na sasa hii ni mahali ambapo c mabano 0 unaendelea. 965 00:48:35,220 --> 00:48:37,410 Na hii ni pale c bracket 11 ni kwenda kuishia. 966 00:48:37,410 --> 00:48:39,670 >> Kwa maneno mengine, ni hutokea kwa ya kuwakilishwa kama mraba. 967 00:48:39,670 --> 00:48:42,320 Lakini kama wewe tu kuweka plopping ka chini - au chars - wao ni kwenda mwisho 968 00:48:42,320 --> 00:48:46,070 hadi saa eneo 0 njia yote hadi hadi 11 kwa sababu ni 0 indexed. 969 00:48:46,070 --> 00:48:49,170 >> Lakini pale ambapo ni tabia ya 13 kwenda kuishia? 970 00:48:49,170 --> 00:48:50,310 Ambapo wa 14? 971 00:48:50,310 --> 00:48:52,430 Ambapo ni tabia 50 kwenda kuishia? 972 00:48:52,430 --> 00:48:54,070 >> Ni kwenda kushika kwenda chini. 973 00:48:54,070 --> 00:48:57,350 Kwa sababu hata kama tumepata picha ya pamoja na stack kupanda juu, 974 00:48:57,350 --> 00:48:59,920 anwani, ni zamu nje, kwenda kutoka ndogo anwani, ndogo 975 00:48:59,920 --> 00:49:01,830 kuyatumia, kwa anwani kubwa. 976 00:49:01,830 --> 00:49:03,540 Hivyo tu anaendelea kwenda juu na juu. 977 00:49:03,540 --> 00:49:05,660 >> Hivyo kama mtumiaji aina katika hello, kwamba ni kubwa. 978 00:49:05,660 --> 00:49:08,650 Hakuna mdudu, hakuna tatizo, salama ya kila mtu. 979 00:49:08,650 --> 00:49:11,940 Lakini kama mtumiaji aina katika kile tutaweza piga kanuni ya ushindani, na kuwakilishwa 980 00:49:11,940 --> 00:49:16,040 mpangilio kama, mashambulizi, mashambulizi, mashambulizi, mashambulizi, nini kinaweza kutokea? 981 00:49:16,040 --> 00:49:19,760 >> Naam, kama wote wa pembejeo kwamba mtumiaji typed katika ni baadhi tu ya kirafiki 982 00:49:19,760 --> 00:49:21,540 au kukera kamba ya wahusika. 983 00:49:21,540 --> 00:49:24,050 Ni kweli mlolongo wa wahusika kwamba kama wewe ni compiled, 984 00:49:24,050 --> 00:49:26,050 ni kweli ni kanuni. 985 00:49:26,050 --> 00:49:29,570 Labda ni kificho kwamba hufuta kila files kwenye gari yako ngumu au anaye taka 986 00:49:29,570 --> 00:49:30,810 au kitu kama hicho. 987 00:49:30,810 --> 00:49:35,110 Taarifa kwamba nini msingi hapa ni kwamba kama mtu mbaya got bahati 988 00:49:35,110 --> 00:49:37,830 overwrite chunk nyekundu ya kumbukumbu - 989 00:49:37,830 --> 00:49:41,080 ambayo sikuweza kuteka juu ya picha yangu lakini hii picha hapa ina Wikipedia - 990 00:49:41,080 --> 00:49:42,890 wake kinachojulikana kurudi anwani. 991 00:49:42,890 --> 00:49:47,470 >> Wakati wa chakula anarudi, wakati wabadilishane anarudi, jinsi gani kompyuta kujua kwenda kutoka 992 00:49:47,470 --> 00:49:49,790 hadi hapa chini hapa? 993 00:49:49,790 --> 00:49:52,920 Au katika sehemu tech juu juu, jinsi gani kujua kwenda kutoka wabadilishane 994 00:49:52,920 --> 00:49:54,870 kanuni - 0 na 1 ya ambayo kutunga wabadilishane - 995 00:49:54,870 --> 00:49:56,020 nyuma kuu? 996 00:49:56,020 --> 00:50:00,450 Kuna kinachojulikana kurudi anuani kuhifadhiwa katika kwamba sura ile ile stack, juu ya 997 00:50:00,450 --> 00:50:02,140 huo mkahawa tray. 998 00:50:02,140 --> 00:50:06,080 >> Hivyo kama mtu mbaya ni wajanja kutosha kuweka kanuni ya mashambulizi, mashambulizi ya kanuni, mashambulizi 999 00:50:06,080 --> 00:50:07,960 kanuni, na kupata bahati ya kutosha - 1000 00:50:07,960 --> 00:50:11,630 mara nyingi kwa njia ya majaribio na makosa - kwa overwrite kwamba nyekundu kurudi anwani, 1001 00:50:11,630 --> 00:50:14,360 pamoja na anuani yake na tangazo ya juu sana. 1002 00:50:14,360 --> 00:50:16,830 Taarifa 0835C080. 1003 00:50:16,830 --> 00:50:20,650 Imeandikwa nyuma juu juu kwa sababu tutaweza labda kupitia upya. 1004 00:50:20,650 --> 00:50:22,050 Hii ni kwamba idadi. 1005 00:50:22,050 --> 00:50:25,790 >> Hivyo kama mtu mbaya anapata bahati ya kutosha au ni smart kutosha overwrite nyekundu 1006 00:50:25,790 --> 00:50:29,480 strip ya kumbukumbu na anuani ya kificho kwamba yeye au yeye ana namna fulani 1007 00:50:29,480 --> 00:50:34,980 hudungwa katika kompyuta yako, nadhani ambaye kanuni ni kwenda kurudishwa kwa 1008 00:50:34,980 --> 00:50:38,260 haraka kama foo ni kosa utekelezaji? 1009 00:50:38,260 --> 00:50:39,440 >> guy mbaya ya kanuni. 1010 00:50:39,440 --> 00:50:43,610 Hivyo kanuni hii mashambulizi, AAA, tena, ili kutuma spam, ili kufuta mafaili yote 1011 00:50:43,610 --> 00:50:44,500 kwenye gari yako ngumu. 1012 00:50:44,500 --> 00:50:48,740 Lakini kwamba ni nini kweli kufurika stack ni, au overrun buffer, au 1013 00:50:48,740 --> 00:50:51,060 buffer kufurika mashambulizi. 1014 00:50:51,060 --> 00:50:54,400 >> Na ni incredibly, incredibly kawaida siku hii na mipango imeandikwa katika 1015 00:50:54,400 --> 00:50:58,220 C, C + +, na hata baadhi ya lugha nyingine. 1016 00:50:58,220 --> 00:51:02,275 Kumbuka kwamba inatisha, tutaweza mwisho kwa mzaha. 1017 00:51:02,275 --> 00:51:03,230 >> [Kicheko] 1018 00:51:03,230 --> 00:51:04,550 >> Kuona juu ya Jumatano. 1019 00:51:04,550 --> 00:51:07,920 1020 00:51:07,920 --> 00:51:10,310 Saa CS50 ijayo - 1021 00:51:10,310 --> 00:51:15,920 Hivyo mimi nina wote nje ya taa disk leo lakini kusubiri, mafuta ya bure maziwa, simu ya nusu 1022 00:51:15,920 --> 00:51:17,850 kitabu, maji ya machungwa kwamba mimi kunywa leo. 1023 00:51:17,850 --> 00:51:20,370 1024 00:51:20,370 --> 00:51:22,780 USB cable, bisibisi. 1025 00:51:22,780 --> 00:51:24,800 >> [Halisi kucheza]