1 00:00:00,000 --> 00:00:02,310 [Powered by Google Translate] [Wiki 4, Inaendelea] 2 00:00:02,310 --> 00:00:04,240 [David J. Malan - Chuo Kikuu cha Harvard] 3 00:00:04,240 --> 00:00:07,290 [Hii ni CS50. - CS50.TV] 4 00:00:07,290 --> 00:00:11,290 >> Hii ni CS50, na hii ni mwisho wa wiki 4. 5 00:00:11,290 --> 00:00:14,030 Hivyo baadhi ya habari njema na baadhi ya habari mbaya. 6 00:00:14,030 --> 00:00:26,240 Hakuna hotuba ya Jumatatu, hakuna tatizo kuweka wiki ijayo. [Wanafunzi cheering] 7 00:00:26,240 --> 00:00:28,680 Wewe si kwenda kama ambapo hii ni kwenda. 8 00:00:28,680 --> 00:00:31,590 Lakini hatuwezi kuwa na hii badala Jumatano ijayo, 9 00:00:31,590 --> 00:00:37,740 na pia kuna kila hotuba mtaala 1 Ijumaa ijayo Ijumaa ili tuweze kukaa njiani. 10 00:00:37,740 --> 00:00:40,580 Lakini kila kitu itakuwa zingine kama kawaida, hivyo usiwe na wasiwasi. 11 00:00:40,580 --> 00:00:44,100 >> Na kuhusiana na Quiz 0 nini tutaweza kufanya kuelekea mwisho wa wiki 12 00:00:44,100 --> 00:00:47,140 ni baada ya juu cs50.net homepage kozi ya maelezo 13 00:00:47,140 --> 00:00:50,160 ya aina gani ya matarajio unapaswa kuwa linapokuja quiz ya kwanza. 14 00:00:50,160 --> 00:00:55,100 Kwa ujumla, itakuwa nyingi uchaguzi, kweli-uongo, short jibu, short matatizo coding. 15 00:00:55,100 --> 00:00:57,360 Wewe hutaenda kutarajiwa kutekeleza sawa 16 00:00:57,360 --> 00:01:00,030 ya tatizo kwamba ungependa kuona kwenye pset, ambayo una kompyuta 17 00:01:00,030 --> 00:01:03,240 na debugger na kama, lakini kutakuwa na ndogo coding matatizo. 18 00:01:03,240 --> 00:01:06,900 >> Na hakika, kiongozi bora ya kupata hisia ya kile CS50 Quizzes ni kama 19 00:01:06,900 --> 00:01:09,180 ni kwenda cs50.net, kwenda kiungo Quizzes, 20 00:01:09,180 --> 00:01:11,920 na unaweza kuona nyuma ya miaka kadhaa yenye thamani ya Quizzes. 21 00:01:11,920 --> 00:01:16,600 Tu kutambua kwamba mitaala imekuwa daima imekuwa si sawa zaidi ya miaka. 22 00:01:16,600 --> 00:01:18,510 Wakati mwingine sisi kuongeza, wakati mwingine Ondoa, 23 00:01:18,510 --> 00:01:20,670 hivyo kama unaweza kuona baadhi ya mada juu ya moja ya wale kale Quizzes 24 00:01:20,670 --> 00:01:25,380 kwamba hawana wazo nini ni kuzungumza juu, ni aidha kwamba hatukuwa kuifunika 25 00:01:25,380 --> 00:01:27,210 au kwamba hatukuwa kuifunika. 26 00:01:27,210 --> 00:01:31,110 Lakini kwa namna ya kitaalam, hii Jumapili, Jumatatu, Jumanne na 27 00:01:31,110 --> 00:01:34,770 kama vile kozi nzima mapitio kikao siku ya Jumapili usiku - 28 00:01:34,770 --> 00:01:37,500 muda na mahali kwa kuwa alitangaza juu ya homepage ya shaka - 29 00:01:37,500 --> 00:01:40,120 wewe wote kuwa na fursa ya kupitia upya na wenzake kozi ya mafundisho 30 00:01:40,120 --> 00:01:44,830 vifaa kwa ajili ya mwaka huu, katika sehemu na kama darasa kamili, 31 00:01:44,830 --> 00:01:48,400 na wale itakuwa zingine kama kawaida vilevile. 32 00:01:48,400 --> 00:01:53,380 >> Wote haki. Hivyo bila wasiwasi zaidi, moja ya maoni juu ya kupita / kushindwa na kuongeza / tone. 33 00:01:53,380 --> 00:01:57,980 Unaweza tumeona maelezo yangu jana usiku, na hii ni kweli baadhi tu ya ziada reassurance 34 00:01:57,980 --> 00:02:01,250 kwamba kama wewe ni miongoni mwa wale hasa chini ya starehe au mahali fulani katika kati ya 35 00:02:01,250 --> 00:02:04,870 na wewe ni hisia tu kidogo katika juu ya kichwa yako, 36 00:02:04,870 --> 00:02:08,430 kutambua kwamba ni kweli kabisa ya kawaida, na kuna kutosha msaada muundo katika mahali, 37 00:02:08,430 --> 00:02:13,530 moja ambayo masaa ya ofisi walikuwa dhamira ya kuboresha zaidi wote kwa usiku barua pepe yangu ya mwisho, 38 00:02:13,530 --> 00:02:16,520 na kutambua pia kwamba chaguo kama kupita / kushindwa kwa darasa kama hili 39 00:02:16,520 --> 00:02:21,540 kweli ni maana kama utaratibu wa kuchukua makali mbali bila shaka kama hii, 40 00:02:21,540 --> 00:02:24,200 ili tena kama wewe ni matumizi ya wale 10, 15, masaa 20 41 00:02:24,200 --> 00:02:28,160 tu kujaribu kupata baadhi pset kufanya kazi na wewe kujua wewe ni 90-95% ya njia pale 42 00:02:28,160 --> 00:02:32,100 lakini huwezi kupata baadhi mdudu damn, katika kupita / kushindwa mfano kwamba ni aina ya sawa. 43 00:02:32,100 --> 00:02:36,230 >> Wazo ni kwamba, kwa utaratibu kwamba unaweza kisha kwenda kuzingatia psets yako mengine 44 00:02:36,230 --> 00:02:39,530 au kulala au chochote ni kwamba unataka kuzingatia. 45 00:02:39,530 --> 00:02:43,390 Hivyo kutambua kwamba una mpaka Jumanne hii kuja - kitaalam Jumatatu 5, 46 00:02:43,390 --> 00:02:50,840 lakini ni likizo, hivyo hii Jumanne ijayo - kubadili kutoka kupita / kushindwa kinyume graded au kinyume chake. 47 00:02:50,840 --> 00:02:54,450 Na kama wewe ni kweli juu ya poromoko na ni mawazo ya kuacha kabisa, 48 00:02:54,450 --> 00:02:56,440 tafadhali catch me baada ya hotuba au kuacha mimi kumbuka. 49 00:02:56,440 --> 00:02:59,990 Tunatarajia upendo na mazungumzo angalau kabla nikawaage. 50 00:02:59,990 --> 00:03:03,470 Wote haki. Hivyo sisi kuanza kuchukua magurudumu mafunzo mbali wakati wa mwisho. 51 00:03:03,470 --> 00:03:06,030 Hasa, sisi ililenga katika kamba. 52 00:03:06,030 --> 00:03:09,740 Kamba ni kitu ambacho alisema katika maktaba CS50, 53 00:03:09,740 --> 00:03:14,340 hasa katika kuwa faili inayoitwa cs50.h ambayo tutaweza kuanza kuangalia wiki hii na ijayo. 54 00:03:14,340 --> 00:03:17,250 Lakini string ni kweli tu kurahisisha kitu 55 00:03:17,250 --> 00:03:20,980 hiyo kidogo zaidi arcanely kama ilivyoelezwa * Char. 56 00:03:20,980 --> 00:03:24,090 Char tuko familiar with. Ni tu tabia moja. 57 00:03:24,090 --> 00:03:28,010 Lakini * kama ya Jumatatu ulionyehsa nini? >> [Mwanafunzi] pointer. 58 00:03:28,010 --> 00:03:31,290 pointer. Na nini pointer? >> [Mwanafunzi] anuani. 59 00:03:31,290 --> 00:03:33,420 >> Ni kama anuani, mahali katika kumbukumbu. 60 00:03:33,420 --> 00:03:35,910 Nini anwani au mahali au kumbukumbu? 61 00:03:35,910 --> 00:03:40,290 Tena, sisi sote tuna Laptops na GIG au gigabytes 2 ya RAM zaidi uwezekano siku hizi, 62 00:03:40,290 --> 00:03:44,160 na hiyo ina maana una ka bilioni au bilioni 2 thamani ya kumbukumbu. 63 00:03:44,160 --> 00:03:46,240 Na ni kweli haina jambo gani kimwili inaonekana kama, 64 00:03:46,240 --> 00:03:51,220 lakini kuchukua imani kwamba unaweza kuzihesabu yote ya ka mtu kuwa mbali yako mwenyewe ana - 65 00:03:51,220 --> 00:03:54,580 hii ni Byte 0, hii ni Byte 1, hii ni Byte bilioni 2 - 66 00:03:54,580 --> 00:03:56,100 na kwamba ni nini hasa kompyuta gani. 67 00:03:56,100 --> 00:04:00,030 Wakati wewe kutenga nafasi kwa ajili ya tabia moja, kwa mfano, 68 00:04:00,030 --> 00:04:02,480 ni wazi ana kuishi mahali fulani katika kumbukumbu ya kompyuta yako, 69 00:04:02,480 --> 00:04:05,860 na labda ni katika idadi Byte 12,345, 70 00:04:05,860 --> 00:04:08,470 na kwamba ni mahali fulani hapa juu katika kumbukumbu ya kompyuta yako. 71 00:04:08,470 --> 00:04:12,630 Na anuani ya basi ya tabia ya kuwa ni 12,345. 72 00:04:12,630 --> 00:04:16,140 >> Sasa, katika wiki 0 kupitia sasa hivi sasa, sisi si kweli kumjali 73 00:04:16,140 --> 00:04:19,170 ambapo katika mambo kumbukumbu ni kuhifadhiwa kwa sababu sisi kawaida kutumia ishara, 74 00:04:19,170 --> 00:04:22,540 vigezo, na arrays kwa kweli kupata katika takwimu zetu. 75 00:04:22,540 --> 00:04:24,950 Lakini kama ya Jumatatu na zaidi wote leo, wewe sasa kwenda na 76 00:04:24,950 --> 00:04:27,710 uwezo wote zaidi expressive na mipango kuandika 77 00:04:27,710 --> 00:04:31,330 kwa kweli kuendesha kumbukumbu ya kompyuta hata hivyo unaweza kuona inafaa, 78 00:04:31,330 --> 00:04:33,720 kwa wote madhumuni mazuri na mabaya, 79 00:04:33,720 --> 00:04:39,620 Bugs kuwa matokeo ya kawaida sana katika hatua hii ya kujifunza mambo haya. 80 00:04:39,620 --> 00:04:42,460 Lakini ni nini kweli maana ya kuwa * Char? 81 00:04:42,460 --> 00:04:46,140 Hebu kwenda mbele nyuma - na tutaweza kurudi Binky kama alivyoahidi leo. 82 00:04:46,140 --> 00:04:48,670 Hebu kwenda mfano rahisi hapa. 83 00:04:48,670 --> 00:04:53,060 Hebu kuokoa faili hii kama compare.c, na napenda tu kupata baadhi ya kanuni template hapa 84 00:04:53,060 --> 00:05:00,490 hivyo ni pamoja na stdio.h, napenda pia kutoa mwenyewe ni pamoja cs50.h. Mimi itabidi zoom katika huko. 85 00:05:00,490 --> 00:05:05,850 Napenda kuanza kuandika int kuu, kuu (utupu), na sasa nataka kufanya kitu kama hii: 86 00:05:05,850 --> 00:05:13,520 printf ("Nipe string:") na kisha nitatumia string s anapata GetString 87 00:05:13,520 --> 00:05:16,750 kupata kamba kutoka kwa mtumiaji, basi mimi naenda kuuliza mtumiaji kwa ajili ya mtu mwingine. 88 00:05:16,750 --> 00:05:21,870 ("Nipe mwingine string:") na mimi nina kwenda kuuliza yao kupitia GetString kupata hiyo. 89 00:05:21,870 --> 00:05:27,020 Mimi nitakuita ni t sababu t inakuja baada ya s na s ni jina nzuri kwa kamba kama ni pretty generic. 90 00:05:27,020 --> 00:05:30,030 Hivyo GetString, na sasa mimi nataka tu kufanya kuangalia sanity na mimi nina kwenda kusema 91 00:05:30,030 --> 00:05:39,770 kama (s == t) basi Mimi tu kwenda kuwaambia mtumiaji printf ("Wewe typed kitu kimoja \ n!"); 92 00:05:39,770 --> 00:05:45,520 mwingine nitakacho magazeti nje kitu kama ("Wewe typed kitu tofauti \! n") 93 00:05:45,520 --> 00:05:48,460 au chochote hukumu itakuwa. Hivyo kitu kama hicho. 94 00:05:48,460 --> 00:05:52,200 Kisha kama kawaida, mimi itabidi kurudi 0 ambayo tu akabashiri kwamba hakuna kitu kibaya kilichotokea, 95 00:05:52,200 --> 00:05:54,400 na mimi nina kwenda mbele na kukusanya na kukimbia mpango huu. 96 00:05:54,400 --> 00:05:56,540 >> Lakini Jumatatu sisi mbio katika mpango huu, 97 00:05:56,540 --> 00:06:00,420 na kweli waliambiwa kwamba HELLO si HELLO na kwaheri si kwaheri. 98 00:06:00,420 --> 00:06:03,140 tabia tuliona ilikuwa ni kidogo zaidi kama hii. 99 00:06:03,140 --> 00:06:11,450 Hebu kwenda katika chanzo saraka yangu, zoom katika hapa, na hebu kufanya kufanya kulinganisha. 100 00:06:11,450 --> 00:06:14,570 Imekusanywa sawa. Hebu kukimbia kulinganisha. Nipe string: HELLO. 101 00:06:14,570 --> 00:06:16,300 Nipe mwingine string: HELLO. 102 00:06:16,300 --> 00:06:18,000 Uliyoandika kitu tofauti! 103 00:06:18,000 --> 00:06:22,650 Vizuri, basi mimi kujaribu kitu rahisi kama 50, 50. Uliyoandika kitu tofauti! 104 00:06:22,650 --> 00:06:25,740 hi, hi. Hivyo ni wazi, kuna kitu kinachoendelea hapa. 105 00:06:25,740 --> 00:06:28,440 Lakini kile ambacho kilikuwa maelezo kwa nini? 106 00:06:28,440 --> 00:06:33,850 Inavyoonekana, mstari 12 ni kabisa dysfunctional. 107 00:06:34,300 --> 00:06:39,430 Nini tatizo la msingi hapa? Yeah. >> [Mwanafunzi] Ni kulinganisha anwani. 108 00:06:39,430 --> 00:06:41,850 Yeah, kwa uhakika. Ni kweli kulinganisha anwani 109 00:06:41,850 --> 00:06:44,580 ambayo HELLO na HELLO ni kuhifadhiwa. 110 00:06:44,580 --> 00:06:48,290 Siyo kulinganisha barua HELLO tena na tena, 111 00:06:48,290 --> 00:06:52,370 kwa sababu ni nini hasa kilichotokea, wakati huu wote tumekuwa kutumia GetString - 112 00:06:52,370 --> 00:06:56,130 Ubao huu ni tena kumbukumbu ya kompyuta yetu, 113 00:06:56,130 --> 00:07:00,100 na hebu sema mimi wito GetString baada ya kutangaza s kutofautiana. 114 00:07:00,100 --> 00:07:01,930 Nini kumbukumbu yangu kuangalia kama? 115 00:07:01,930 --> 00:07:07,070 Hebu kiholela kusema kwamba s inaonekana kama hii. Ni mraba. 116 00:07:07,070 --> 00:07:09,040 Na pretty much yoyote wakati nimekuwa inayotolewa kipande cha kumbukumbu kwenye screen 117 00:07:09,040 --> 00:07:12,860 kama ni 32 bits Nimekuwa kuchora mraba kama hii kwa sababu kwa kweli katika appliance, 118 00:07:12,860 --> 00:07:17,380 pointer, anuani, ni 32 bits. Ni sawa kama int. 119 00:07:17,380 --> 00:07:19,420 Hiyo inaweza kutofautiana kulingana na mfumo wa kompyuta. 120 00:07:19,420 --> 00:07:24,630 Wale ambao ni vaguely familiar na ukweli kwamba Mac au PC yako ni 64 bits, 121 00:07:24,630 --> 00:07:28,120 kwamba kweli inaashiria kuwa kompyuta yako kwa kutumia kuyatumia 64-bit, 122 00:07:28,120 --> 00:07:33,730 64-bit anwani, na kati ya upsides ya kwamba ni kompyuta yako 123 00:07:33,730 --> 00:07:35,560 unaweza kuwa na mengi zaidi kuliko RAM yesteryear. 124 00:07:35,560 --> 00:07:39,240 Long hadithi fupi, nyuma katika siku wakati kompyuta tu kutumika bits 32 125 00:07:39,240 --> 00:07:42,740 kuwakilisha anwani, namba kubwa ya ka unaweza kuwakilisha 126 00:07:42,740 --> 00:07:46,280 katika kesi hiyo ilikuwa nini kama una bits 32? 127 00:07:46,280 --> 00:07:49,590 Hivyo bilioni 4, haki, kwa sababu 2-32 ni bilioni 4. 128 00:07:49,590 --> 00:07:51,370 Idadi hii imekuwa mara kwa mara katika shaka. 129 00:07:51,370 --> 00:07:55,240 >> Hivyo kama wewe tu bits 32, idadi kubwa zaidi unaweza kuhesabu kwa ni takribani bilioni 4. 130 00:07:55,240 --> 00:07:58,750 Lakini hiyo ilikuwa kiwango cha juu ya msingi ya kompyuta hadi miaka michache iliyopita 131 00:07:58,750 --> 00:08:01,180 kwa sababu kama unaweza tu kuhesabu kama juu kama bilioni 4, 132 00:08:01,180 --> 00:08:05,270 haijalishi kama wewe kununua 8 gigabytes ya RAM au hata gigabytes 5 ya RAM; 133 00:08:05,270 --> 00:08:07,780 huwezi kuhesabu kwamba juu, hivyo ilikuwa ya maana. 134 00:08:07,780 --> 00:08:11,430 Unaweza tu kupata kwanza gigabytes 3 au 4 ya kumbukumbu ya kompyuta yako. 135 00:08:11,430 --> 00:08:14,410 Hiyo ni chini ya suala sasa, na unaweza kununua pros MacBook na Dells 136 00:08:14,410 --> 00:08:17,680 na 8 gigabytes ya RAM au hata zaidi siku hizi. 137 00:08:17,680 --> 00:08:24,100 Lakini kama mimi kutenga urahisi kabisa katika mpango huu pointer, pointer kuitwa s, 138 00:08:24,100 --> 00:08:28,370 inaweza kuangalia kama hii kwenye screen kwa sababu kwa kweli tunahitaji peel nyuma safu hii. 139 00:08:28,370 --> 00:08:33,520 Naendelea kusema kamba, lakini kama ya Jumatatu, kamba ni kweli Char *, 140 00:08:33,520 --> 00:08:35,590 anuani ya tabia fulani. 141 00:08:35,590 --> 00:08:39,280 Basi hebu kuchukua gurudumu mafunzo mbali hata kama tutaweza kuendelea kutumia GetString kwa sasa. 142 00:08:39,280 --> 00:08:42,600 Hivyo nimekuwa alitangaza, na hii ni chunk ya kumbukumbu, bits 32. 143 00:08:42,600 --> 00:08:47,370 Nini katika hapa katika kumbukumbu na default? >> [Inaudible mwanafunzi majibu] 144 00:08:47,370 --> 00:08:50,040 Nini hiyo? >> [Mwanafunzi] Takataka. >> Takataka. Hasa. 145 00:08:50,040 --> 00:08:54,610 Kama programu wala kuweka thamani katika variable, ambaye anajua ni nini? 146 00:08:54,610 --> 00:08:57,990 Wakati mwingine unaweza kupata bahati na ni 0, ambayo ni aina ya thamani nzuri, safi default, 147 00:08:57,990 --> 00:09:00,310 lakini kama tuliona Jumatatu, wakati mwingine ni kamili nonsense, 148 00:09:00,310 --> 00:09:04,130 baadhi kubwa kweli kweli chanya au hasi idadi kwamba alikuja kutoka wapi? 149 00:09:05,350 --> 00:09:07,010 Yeah. >> [Mwanafunzi] kazi kabla. >> Yeah. 150 00:09:07,010 --> 00:09:10,170 >> Mara nyingi kazi kwamba got kuitwa mbele kwa sababu kumbuka, 151 00:09:10,170 --> 00:09:13,920 kama wewe piga kazi katika kumbukumbu, wao kuchukua zaidi na nafasi zaidi kutoka chini kwenda juu, 152 00:09:13,920 --> 00:09:17,040 na haraka kama anarudi kazi, kumbukumbu kwamba anapata reused 153 00:09:17,040 --> 00:09:20,890 kwa guy ijayo kwamba anapata kuitwa, ambaye ni kutumia kipande yako hiyo ya kumbukumbu. 154 00:09:20,890 --> 00:09:23,450 Na kama wewe wameweza takataka kushoto huko, uliopita maadili, 155 00:09:23,450 --> 00:09:28,190 sisi ili makosa s kama baada ya baadhi ya thamani wakati kwa kweli sisi si kuweka chochote huko. 156 00:09:28,190 --> 00:09:30,960 Hivyo RAM wetu katika hatua hii inaonekana kama hii. 157 00:09:30,960 --> 00:09:36,030 Sasa upande wa kulia wa mstari 7 tuko wito GetString, 158 00:09:36,030 --> 00:09:40,150 ambayo tumekuwa kufanya sasa kwa wiki, lakini kile GetString kweli kufanya? 159 00:09:40,150 --> 00:09:43,350 GetString zilizoandikwa na wafanyakazi CS50 ni kidogo akili 160 00:09:43,350 --> 00:09:46,500 kwa kuwa haraka kama mtumiaji kuanza kuandika funguo na hits Ingiza, 161 00:09:46,500 --> 00:09:50,010 GetString takwimu nje jinsi wengi keystrokes alifanya hit user, 162 00:09:50,010 --> 00:09:53,360 ngapi wahusika nahitaji kutenga RAM kwa. 163 00:09:53,360 --> 00:09:55,660 Na pale ambapo RAM kwamba anakuja kutoka, ambaye anajua? 164 00:09:55,660 --> 00:09:58,930 Ni mahali fulani katika gigabytes kompyuta yako 2 au whatnot wa kumbukumbu. 165 00:09:58,930 --> 00:10:05,200 Lakini hebu tuseme kwamba kompyuta kupatikana nafasi kwa neno HELLO haki hapa. 166 00:10:05,200 --> 00:10:08,710 neno mimi typed ilikuwa H-E-L-L-O. 167 00:10:08,710 --> 00:10:13,510 Na kama sisi kuteka hii kama mlolongo wa wahusika, tupate kuteka ni kama hii. 168 00:10:13,510 --> 00:10:17,860 Lakini mimi haja ya kufanya kitu 1 ziada. Kile ambacho ni mali ya mwisho wa kamba yoyote katika C? 169 00:10:17,860 --> 00:10:20,710 tabia null, ambayo sisi kuandika kama \ 0. 170 00:10:20,710 --> 00:10:23,980 Ni kitaalam 0 idadi, lakini backslash hufanya wazi wote 171 00:10:23,980 --> 00:10:28,150 kwamba hii ni halisi idadi 0, 0 integer; 172 00:10:28,150 --> 00:10:32,440 siyo, kwa mfano 0, quote-unquote kwamba unaweza aina katika keyboard. 173 00:10:32,440 --> 00:10:33,940 Hivyo hii ni HELLO. 174 00:10:33,940 --> 00:10:36,350 >> Na nini sisi kusema juu ya Jumatatu kwamba kazi kama GetString 175 00:10:36,350 --> 00:10:39,580 ni kweli kurudi wiki haya yote? 176 00:10:39,580 --> 00:10:43,960 Ni si kurudi string per se sababu kwamba kweli haina maana kuwa 177 00:10:43,960 --> 00:10:47,710 kwa sababu masharti hazipo. Wao ni aina ya upotoshaji katika maktaba CS50. 178 00:10:47,710 --> 00:10:51,300 Je, ni kweli kamba, zaidi kitaalam? >> [Mwanafunzi] Ni tabia ya kwanza. 179 00:10:51,300 --> 00:10:55,950 Hasa. Ni rahisi kabisa anuani ya tabia ya kwanza kwamba mtumiaji typed in 180 00:10:55,950 --> 00:11:02,810 Hivyo kama neno langu HELLO mwisho ni juu katika 123 Byte idadi na kisha saa idadi Byte 124, 181 00:11:02,810 --> 00:11:08,320 125, 126, na kadhalika, kama mimi tu idadi bytes yangu kutoka 0 juu juu, 182 00:11:08,320 --> 00:11:12,650 kile kwa kweli ni GetString kurudi ni literally 123 idadi. 183 00:11:12,650 --> 00:11:19,270 Basi nini anapata kuweka katika s ni 123 idadi, si H barua, si neno HELLO, 184 00:11:19,270 --> 00:11:23,130 kabisa tu anuani ya saa ambayo naweza kupata barua ya kwanza ya HELLO. 185 00:11:23,130 --> 00:11:26,500 Lakini hiyo haina kuonekana kama kutosha. Nilimuuliza wewe kwa kamba, si tabia. 186 00:11:26,500 --> 00:11:32,970 Hivyo ni jinsi gani sisi au kompyuta kujua kwamba ELLO aina ya kuja pamoja na H? 187 00:11:35,760 --> 00:11:37,460 Nini aina ya mkataba tuna? Yeah. 188 00:11:37,460 --> 00:11:40,100 [Mwanafunzi] Inalifanya kuwaambia yenyewe kupata wahusika baadhi zaidi. >> Hasa. 189 00:11:40,100 --> 00:11:44,570 >> Kuna hii mkataba binadamu-kompyuta ambapo wakati wewe ni kushughulika na masharti, 190 00:11:44,570 --> 00:11:49,410 inayojulikana sasa kama nyota Char, wewe tu kuwa na takwimu kutoka 191 00:11:49,410 --> 00:11:54,350 ambapo mwisho wa kila uzi katika maisha ni kwa kweli tu iterating juu yake na kwa kitanzi, 192 00:11:54,350 --> 00:11:57,820 kitanzi wakati, na kwa chochote, hivyo kwamba wakati wewe kupata mwisho wa kamba 193 00:11:57,820 --> 00:12:02,160 sasa unaweza infer kutoka kwamba, oh, neno zima lilikuwa HELLO. 194 00:12:02,160 --> 00:12:04,820 Wale wa wewe na uzoefu kabla ya programu wapate kujua katika Java 195 00:12:04,820 --> 00:12:09,880 unaweza kuwaita tu urefu. na katika lugha nyingine unaweza kupiga urefu au sawa. 196 00:12:09,880 --> 00:12:14,060 Hiyo ni kwa sababu katika mengi ya lugha, hasa mambo kuitwa kitu-oriented lugha, 197 00:12:14,060 --> 00:12:18,580 urefu wa kitu ni aina ya ndani ya zimegawanywa ya kipande cha data yenyewe, 198 00:12:18,580 --> 00:12:24,000 kiasi kama sisi Vitambulisho zimegawanywa na majina na nyumba ndani ya mwanafunzi Jumatatu. 199 00:12:24,000 --> 00:12:28,700 Lakini C ni ya chini sana ngazi. Hakuna vitu au madarasa, kama wewe Nimesikia sheria hizo kabla. 200 00:12:28,700 --> 00:12:31,490 Wote una kweli ni kumbukumbu anwani. 201 00:12:31,490 --> 00:12:35,540 Hivyo hii ni aina ya njia ya zamani-fashioned ya anayewakilisha data kuvutia miundo. 202 00:12:35,540 --> 00:12:38,760 Una thamani ya kuanza kama anuani ya tabia ya kwanza 203 00:12:38,760 --> 00:12:42,340 na kisha baadhi tu mkataba holela kwamba kila mtu anakubaliana na kufuata. 204 00:12:42,340 --> 00:12:46,420 Hivyo ni jinsi gani string urefu kutekelezwa, gani sisi kupendekeza? 205 00:12:46,420 --> 00:12:51,360 Strlen, strlen, ambayo baadhi yenu sasa kutumika mara chache. Ni pretty rahisi, sawa? 206 00:12:51,360 --> 00:12:53,060 Ni kama mistari 2 ya maadili. 207 00:12:53,060 --> 00:12:56,140 Ni pretty much kitanzi kwa wa aina fulani, labda kwa variable ya ziada ya mitaa. 208 00:12:56,140 --> 00:13:00,540 Lakini strlen tu ana kuchukua pointer na kisha kuanza kuangalia kwa \ 0. 209 00:13:00,540 --> 00:13:05,190 >> Na haraka kama huikuta, inaweza kurudi idadi ya jumla ya hatua ya kuwa ni kuchukuliwa katika kamba hiyo. 210 00:13:05,190 --> 00:13:07,150 Hivyo tunaweza infer kutoka hii yale yanayoendelea ijayo. 211 00:13:07,150 --> 00:13:11,850 Tuseme basi mimi kutangaza t kama nimepata kufanyika katika mstari wa 10. 212 00:13:11,850 --> 00:13:14,280 Hii ni baadhi ya thamani ya takataka. Nani anajua kwa mara ya kwanza? 213 00:13:14,280 --> 00:13:18,490 Lakini upande wa kulia wa mstari wa 10 mimi nina wito GetString tena. 214 00:13:18,490 --> 00:13:20,050 Nani anajua ambapo hii inaishia? 215 00:13:20,050 --> 00:13:23,830 Hebu kiholela kusema kwamba mfumo wa uendeshaji kupatikana chumba kwa njia zaidi ya hapa. 216 00:13:23,830 --> 00:13:28,610 Mimi kutokea kwa bahati aina ya H-E-L-L-O tena, 217 00:13:28,610 --> 00:13:31,260 na hivyo tunaweza kuchora moja aina ya picha. 218 00:13:31,260 --> 00:13:34,290 Lakini ukweli kwamba nimekuwa redrawn picha hii ni makusudi 219 00:13:34,290 --> 00:13:37,720 sababu ni tofauti HELLO kuliko huu. 220 00:13:37,720 --> 00:13:43,920 Hivyo hapa kuwa hii inaweza kuwa mahali 456, hii ni 457, na kadhalika. 221 00:13:43,920 --> 00:13:47,170 Basi nini anapata kuweka ambapo alama swali moja mara? 222 00:13:47,170 --> 00:13:50,190 Katika kesi hii 456. 223 00:13:50,190 --> 00:13:53,540 Sisi ni kuokota namba hizi kiholela kwa sababu kwa kweli baada ya leo 224 00:13:53,540 --> 00:13:57,110 tuko hataenda kujali sana kuhusu nini anwani ya kitu chochote ni. 225 00:13:57,110 --> 00:14:02,690 Wote sisi huduma ya juu ni kwamba tunaweza kufikiri anuani ya baadhi kipande cha data kama HELLO. 226 00:14:02,690 --> 00:14:07,100 >> Hivyo kweli nini watu wengi katika sayansi ya kompyuta wakati wakizungumza kuhusu anwani kumbukumbu 227 00:14:07,100 --> 00:14:10,210 na kuzungumza juu ya kuyatumia hasa, 228 00:14:10,210 --> 00:14:14,220 badala ya bother kuhesabia 123 - anayejali ambapo mambo haya kwa kweli ni, 229 00:14:14,220 --> 00:14:17,440 sisi tu kujua kwamba ni katika anuani baadhi namba - 230 00:14:17,440 --> 00:14:22,180 sisi kurahisisha dunia na kusema tu kwamba s ni akizungumzia tabia ya kuwa 231 00:14:22,180 --> 00:14:25,080 na t akizungumzia tabia hiyo. 232 00:14:25,080 --> 00:14:27,430 Na ukweli kwamba ni mshale ni kabisa kukusudia 233 00:14:27,430 --> 00:14:31,610 sababu halisi sasa s ananyoosha katika H na t akionyesha H nyingine 234 00:14:31,610 --> 00:14:34,720 kwa sababu mwisho wa siku, haijalishi nini anwani ni, 235 00:14:34,720 --> 00:14:40,240 lakini haina suala kwamba tuna uwezo wa kueleza kwamba anuani na baadhi ya kipande cha code. 236 00:14:40,240 --> 00:14:42,730 Sisi si kweli manipulated anwani hizi bado tu 237 00:14:42,730 --> 00:14:47,770 hivyo tutaweza kuona ambapo tunaweza interject na aina ya kufanya mambo kwa kuyatumia, 238 00:14:47,770 --> 00:14:52,030 lakini kwa sasa katika mstari 12 literally nini maadili ni sisi kulinganisha 239 00:14:52,030 --> 00:14:55,500 kulingana na hadithi hii katika mstari wa 12? 240 00:14:56,570 --> 00:15:01,290 Sisi ni kusema ni 123 sawa sawa na 456? Na kwamba ni dhahiri si kesi. 241 00:15:01,290 --> 00:15:05,320 Na hata conceptually, pointer hii ni dhahiri si sawa kama hii 242 00:15:05,320 --> 00:15:09,500 kwa sababu wewe kuitwa GetString mara mbili, na GetString haina kujaribu kuwa super wajanja, 243 00:15:09,500 --> 00:15:12,470 haina kujaribu kutambua, oh, uliyoandika HELLO dakika 5 iliyopita; 244 00:15:12,470 --> 00:15:15,090 nikupe pointer sawa niliokupa kabla, 245 00:15:15,090 --> 00:15:18,450 tu kutenga fungu jipya la kumbukumbu kila wakati simu yake. 246 00:15:18,450 --> 00:15:20,350 >> Hivyo ni jinsi gani sisi kurekebisha tatizo hili? 247 00:15:20,350 --> 00:15:24,270 Kama ngazi nataka kulinganisha masharti HELLO na HELLO - 248 00:15:24,270 --> 00:15:28,680 Mimi sijali kuhusu kuyatumia - jinsi gani mimi kwenda kuhusu kujibu swali, 249 00:15:28,680 --> 00:15:31,980 hakuwa mtumiaji aina kitu kimoja? Nini lazima hapa? Yeah. 250 00:15:31,980 --> 00:15:35,200 [Mwanafunzi] Matumizi ya kazi. >> Naweza kutumia kazi nje ya boksi. 251 00:15:35,200 --> 00:15:38,170 Naweza kutumia kazi kuitwa strcmp, s-t-r-c-m-p, 252 00:15:38,170 --> 00:15:41,190 tu toleo abbreviated ya kusema string kulinganisha. 253 00:15:41,190 --> 00:15:45,070 Na kama sisi kwenda katika, kwa mfano, kulinganisha 2, ambayo ni kati ya takrima ya leo, 254 00:15:45,070 --> 00:15:46,690 Mimi kufanya hasa kwamba. 255 00:15:46,690 --> 00:15:51,750 Mimi naendelea kila kitu kingine huo kutoka mstari 1 juu ya chini 26 au hivyo, 256 00:15:51,750 --> 00:15:54,360 na sasa taarifa sehemu hii imebadilika kidogo tu. 257 00:15:54,360 --> 00:15:57,690 Hebu kupuuza mstari 28 kwa wakati na kuzingatia tu juu ya hili. 258 00:15:57,690 --> 00:16:00,410 Nini sisi kusema kwamba Jumatatu kulinganisha str gani? 259 00:16:00,410 --> 00:16:05,200 Hushughulikia mchakato wa kuchukua kuyatumia 2, s na t katika kesi hii, 260 00:16:05,200 --> 00:16:08,480 aina ya karibu kuweka kidole chake juu ya barua hizo 2, 261 00:16:08,480 --> 00:16:11,530 na nini ni lazima kufanya ni kitu kama kitanzi wakati au kwa kitanzi, 262 00:16:11,530 --> 00:16:16,050 na anasema ni hizo hizo? Kama ni hivyo, ni hatua ya vidole au kuyatumia mbele. 263 00:16:16,050 --> 00:16:17,970 Je, haya sawa, hawa, hizi, sawa 264 00:16:17,970 --> 00:16:22,710 hizi, hawa? Na ooh, mimi nina katika mwisho wa kamba saa mbili s na t. 265 00:16:22,710 --> 00:16:26,780 Sijayaona utata wowote. Ndiyo, haya masharti ni sawa. 266 00:16:26,780 --> 00:16:31,940 Na nini str kulinganisha kurudi ikiwa 2 masharti ni sawa, inaonekana? Zero. 267 00:16:31,940 --> 00:16:35,900 Hivyo 0 ni nzuri katika kesi hii kwa sababu kama hiyo anarudi -1 au 1, 268 00:16:35,900 --> 00:16:40,560 hiyo ina maana kwamba tu kinachotokea kuja kabla ya t alphabetically au baada ya t. 269 00:16:40,560 --> 00:16:43,760 Na ni kwa nini kwamba kuwa na manufaa kwa kuwa na kazi anayewaambia ambayo string huja kabla ya 270 00:16:43,760 --> 00:16:46,720 au baada ya katika kamusi? 271 00:16:46,720 --> 00:16:48,740 [Mwanafunzi] Searching. >> Searching na kuchagua. 272 00:16:48,740 --> 00:16:51,730 >> Hivyo unaweza kufanya mambo kama tafuta binary au aina Bubble au kuunganisha aina 273 00:16:51,730 --> 00:16:53,230 ambapo una kulinganisha vitu. 274 00:16:53,230 --> 00:16:56,420 Hivi sasa tumekuwa aina ya kukata pembe na baadhi tu aliyesema kuhusu uchambuaji 275 00:16:56,420 --> 00:16:59,430 katika mazingira ya idadi kwa sababu ni nzuri na rahisi kwa majadiliano juu, 276 00:16:59,430 --> 00:17:02,430 lakini unaweza shaka kulinganisha masharti, apple na ndizi, 277 00:17:02,430 --> 00:17:05,349 kwa sababu kama apple inajulikana kuja kabla ya ndizi, vile vile, 278 00:17:05,349 --> 00:17:09,319 unaweza hoja masharti kuzunguka katika kumbukumbu tu kama alivyofanya kwa Rob aina kuunganisha katika video 279 00:17:09,319 --> 00:17:15,880 na sisi tulikuwa hapa juu ya hatua kwa uteuzi aina, aina insertion, na aina Bubble. 280 00:17:15,880 --> 00:17:18,710 Hivyo ambapo mwingine tunaweza kuchukua hii? Hebu jaribu hii. 281 00:17:18,710 --> 00:17:23,980 Aina Hebu ya kusahau kwamba somo kwa wakati na kujaribu sasa na nakala 1.c kufanya yafuatayo. 282 00:17:23,980 --> 00:17:26,800 Katika mstari 21 mimi kusema magazeti kitu, 283 00:17:26,800 --> 00:17:28,520 basi nina kupata kamba kutoka kwa mtumiaji, 284 00:17:28,520 --> 00:17:30,690 basi mimi nina kuangalia hii. 285 00:17:30,690 --> 00:17:33,620 Sisi si kweli wamezipata katika tabia hii bado, lakini hebu sasa kufanya hili. 286 00:17:33,620 --> 00:17:40,990 Hebu kweli peel nyuma safu hii. Hii ni kweli Char *. Guy huu ni kweli Char *. 287 00:17:40,990 --> 00:17:45,690 Hivyo ni nini maana ya kuwa kuangalia kama s == null? 288 00:17:45,690 --> 00:17:48,380 Ni zinageuka kuwa wakati wewe piga kazi kama GetString 289 00:17:48,380 --> 00:17:51,540 au zaidi kwa ujumla tu kuuliza kompyuta kutoa baadhi ya kumbukumbu, 290 00:17:51,540 --> 00:17:53,030 kitu inaweza kwenda vibaya. 291 00:17:53,030 --> 00:17:56,630 Unaweza kuwa mambo na kuuliza kompyuta kwa terabyte ya kumbukumbu 292 00:17:56,630 --> 00:18:01,780 kwa kuuliza kwa matrilioni ya ka ya kumbukumbu ya kwamba tu hazipo katika kompyuta, 293 00:18:01,780 --> 00:18:05,130 lakini GetString na kazi nyingine haja ya baadhi ya njia ya kunguruma katika wewe 294 00:18:05,130 --> 00:18:06,820 kama wameweza aliuliza kwa sana. 295 00:18:06,820 --> 00:18:10,450 Na njia GetString gani hii ni kama una aliuliza kwa zaidi ya kumbukumbu 296 00:18:10,450 --> 00:18:14,250 kuliko inapatikana katika kompyuta, hata kama kwamba ni super, super Asili uwezekano 297 00:18:14,250 --> 00:18:17,730 kwa sababu hakuna hata mmoja wetu ni kwenda andika herufi trilioni na kisha hit Enter, 298 00:18:17,730 --> 00:18:21,980 lakini chini uwezekano ingawa inaweza kuwa, mimi bado wanataka kuangalia kwa ajili yake tu katika kesi, 299 00:18:21,980 --> 00:18:26,120 na thamani maalum kwamba GetString, jibu, na kazi nyingine anarudi 300 00:18:26,120 --> 00:18:30,630 kama kitu amekwenda vibaya ni null katika kofia wote. 301 00:18:30,630 --> 00:18:36,520 >> Na ni nini null? Null tu hivyo hutokea kuwakilisha pointer. Ni kumbukumbu ya anuani 0. 302 00:18:36,520 --> 00:18:40,800 dunia aliamua kwamba kiholela, kama hii ni kumbukumbu ya kompyuta yangu - unajua nini? - 303 00:18:40,800 --> 00:18:46,260 tunakwenda kuiba tu 1 Byte ya kumbukumbu kila kompyuta, na hii ni mahali 0. 304 00:18:46,260 --> 00:18:49,560 Sisi ni kwenda kuwapa jina la utani la null, na tunakwenda ahadi 305 00:18:49,560 --> 00:18:52,660 kuwa sisi kamwe kweli kuweka data halisi kuna 306 00:18:52,660 --> 00:18:56,770 kwa sababu sisi tu kiholela haja thamani maalum, 0, aka null, 307 00:18:56,770 --> 00:19:00,230 ili tuweze yell katika watumiaji kama kitu fulani kitaenda vibaya. 308 00:19:00,230 --> 00:19:03,590 Vinginevyo unaweza kujua haina maana 0 kuweka kitu hapa 309 00:19:03,590 --> 00:19:05,490 au haina maana kitu potoka? 310 00:19:05,490 --> 00:19:09,190 Tuna kwa wote wanakubaliana kwamba null chochote njia zilizorudishwa, 311 00:19:09,190 --> 00:19:11,700 anuani hakuna halisi zilizorudishwa. 312 00:19:11,700 --> 00:19:15,210 Sasa, hapa mimi tu kupitisha mkataba wangu binadamu ya mimi kurudi kutoka 1 kuu 313 00:19:15,210 --> 00:19:17,040 kama kitu fulani kitaenda vibaya. 314 00:19:17,040 --> 00:19:20,650 Hiyo ni kwa sababu kurudi kuu ya mkataba ni kurudi 0 ikiwa nzuri, 315 00:19:20,650 --> 00:19:22,990 1 au baadhi thamani mengine ikiwa mbaya. 316 00:19:22,990 --> 00:19:28,200 Lakini GetString na kazi yoyote ambayo inahusika katika anarudi kumbukumbu null kama kitu fulani kitaenda vibaya. 317 00:19:28,200 --> 00:19:33,480 >> Sawa. Hivyo kwa bahati mbaya, line 27, super rahisi ingawa ni, kabisa inashindwa nakala kamba. 318 00:19:33,480 --> 00:19:35,740 Kwa nini? Tunaweza kuona hii kama ifuatavyo. 319 00:19:35,740 --> 00:19:40,120 Mimi nina wakidai katika mstari 27 kuwa maamuzi nakala ya s na kuiita t. 320 00:19:40,120 --> 00:19:45,790 Hivyo Mimi si kuuliza mtumiaji kwa masharti 2 wakati huu; Mimi tu kusema thamani katika s 321 00:19:45,790 --> 00:19:47,870 atafukuzwa katika t pia. 322 00:19:47,870 --> 00:19:52,890 Hivyo sasa tu kuonyesha jinsi hii ni kuvunjika, katika mstari 29 kuendelea je, Mimi kufanya? 323 00:19:52,890 --> 00:19:56,980 Kwanza mimi nina kuangalia kama urefu wa t, ni mkubwa kuliko 0. 324 00:19:56,980 --> 00:19:59,330 Kuna baadhi ya kamba huko. user typed kitu in 325 00:19:59,330 --> 00:20:03,410 Nini ni mstari 32 kufanya, inaonekana? 326 00:20:03,410 --> 00:20:08,910 [Inaudible mwanafunzi majibu] >> Haki. Unaweza aina ya infer kutoka kile alisema ni kufanya. 327 00:20:08,910 --> 00:20:13,200 Lakini kitaalam, ni nini hii kufanya? t [0] inawakilisha nini? 328 00:20:13,200 --> 00:20:15,140 [Mwanafunzi] tabia 0. >> [Malan] tabia 0. 329 00:20:15,140 --> 00:20:19,620 Au, zaidi ya binadamu-kama, tabia ya kwanza katika t, chochote kile, H labda katika kesi hii. 330 00:20:19,620 --> 00:20:24,990 Na toupper anafanya nini anasema. Ni capitalizes tabia 0 wa t na ni mabadiliko hayo. 331 00:20:24,990 --> 00:20:28,430 Hivyo hii ina maana kuchukua tabia ya t 0, kufanya hivyo uppercase, 332 00:20:28,430 --> 00:20:30,320 na kuiweka nyuma katika eneo hilo hilo. 333 00:20:30,320 --> 00:20:35,540 Hivyo kama ninapoandika hujambo katika lowercase, hii inapaswa kubadilika h lowercase kwa H. mtaji 334 00:20:35,540 --> 00:20:41,400 Lakini tatizo ni kwamba katika mistari 35 na 36 mimi nina nini kuhusu kufanya ni kuchapa nje kwa ajili yetu s na t. 335 00:20:41,400 --> 00:20:43,120 Na nini hunch yako? 336 00:20:43,120 --> 00:20:47,250 Hivi mimi kweli kwenda kuona kama mimi typed katika hujambo katika lowercase wote? 337 00:20:47,250 --> 00:20:52,280 Nini kinaendelea kupata kuchapishwa? >> [Inaudible mwanafunzi majibu] >> gani hiyo? 338 00:20:52,280 --> 00:20:58,360 [Mwanafunzi] Big H na wengine wadogo. >> H kubwa na ndogo kwa ajili ya mapumziko ambayo, s au t? 339 00:20:58,360 --> 00:21:03,170 [Mwanafunzi] Wote. >> Wote. Hasa. Basi hebu angalia nini kinaendelea hapa. 340 00:21:03,170 --> 00:21:08,380 >> Hebu kwenda mbele na kukusanya hii. Hii ni copy1, hivyo kufanya copy1. Wote haki. 341 00:21:08,380 --> 00:21:14,840 Zoom in Hebu kwenda mbele na kukimbia copy1, Ingieni, Sema kitu: hello katika lowercase. 342 00:21:14,840 --> 00:21:19,570 Ni mtaji nakala, lakini inaonekana kama mtaji awali vizuri, 343 00:21:19,570 --> 00:21:22,070 sababu kile kinachotokea sasa katika hadithi hii? 344 00:21:22,070 --> 00:21:27,030 Katika mstari 27 mimi si kweli wanaonekana kuwa kuiga kamba, 345 00:21:27,030 --> 00:21:30,450 lakini hata ingawa unaweza kuwa na matumaini kwamba intuitively kuwa kesi, 346 00:21:30,450 --> 00:21:33,680 kama unafikiri kuhusu picha hii, kweli yale nimefanya? 347 00:21:33,680 --> 00:21:35,410 Nusu ya picha ni sawa. 348 00:21:35,410 --> 00:21:39,390 Basi hebu nirudishe katika muda ili t bado haina zipo katika hadithi. 349 00:21:39,390 --> 00:21:43,160 S unaweza kuwepo katika hadithi, lakini hebu Herufi za chini hujambo wakati huu. 350 00:21:43,160 --> 00:21:46,710 Hivyo basi mimi kurekebisha kile Mimi kweli typed in 351 00:21:46,710 --> 00:21:51,280 Katika kesi hii hapa tuna h-e-l-l-o. 352 00:21:51,280 --> 00:21:58,050 Tutaweza kuteka ni kama mlolongo wa wahusika, kuweka separator mistari yangu hapa na yangu \ 0. 353 00:21:58,050 --> 00:22:05,980 Hivyo hii ni mahali ambapo sisi ni haraka kama mstari 1 24 kupitia-ish, kutoa au kuchukua, haijanyonga. 354 00:22:05,980 --> 00:22:07,800 Hii ni picha ya kumbukumbu yangu. 355 00:22:07,800 --> 00:22:10,800 Wakati mimi kupata mstari 27, nini kitatokea? 356 00:22:10,800 --> 00:22:14,730 Tu kama kabla, mimi kupata pointer, ambayo mimi itabidi kuteka kama mraba huu. 357 00:22:14,730 --> 00:22:19,740 Ni wito t. Na nini thamani yake na default? Nani anajua? Baadhi ya thamani ya takataka. 358 00:22:19,740 --> 00:22:22,060 >> Hivyo mimi itabidi abstract kwamba mbali kama alama swali. 359 00:22:22,060 --> 00:22:27,670 Na haraka kama upande wa kulia ya mstari 27 executes, je, Mimi kuweka ndani ya t? 360 00:22:27,670 --> 00:22:30,770 kitu kimoja kwamba katika s. 361 00:22:30,770 --> 00:22:34,120 Hivyo kama sisi kwa muda kuondoa hii abstraction ya mshale na sisi kusema, 362 00:22:34,120 --> 00:22:40,330 oh, hii ni kumbukumbu ya mzigo anuani 123, wakati wewe kusema t anapata s, semicolon, 363 00:22:40,330 --> 00:22:42,700 wewe ni literally kuweka 123 hapa. 364 00:22:42,700 --> 00:22:45,200 Sasa kama sisi aina ya kurahisisha dunia yetu tena na picha, 365 00:22:45,200 --> 00:22:48,750 nini umefanya kweli kufanyika ni tu aliongeza mwingine mshale dunia yako 366 00:22:48,750 --> 00:22:52,910 hiyo akizungumzia kutoka t kwa kamba huo halisi. 367 00:22:52,910 --> 00:22:59,730 Hivyo wakati katika mstari 31 na 32 mimi kweli kwenda juu ya kubadilisha t [0], 368 00:22:59,730 --> 00:23:05,580 kile ni t [0] inaonekana sawa na sasa? s [0] 369 00:23:05,580 --> 00:23:07,030 Basi hiyo ni yote yale yanayotokea. 370 00:23:07,030 --> 00:23:09,900 Na hata kama aina hii ya anahisi kidogo kiwango cha chini na arcane 371 00:23:09,900 --> 00:23:12,760 na aina hii ya anahisi kama labda intuitively hii lazima tu kazi - 372 00:23:12,760 --> 00:23:15,410 Nimekuwa alifanya nakala za mambo kabla na ni haki kazi - 373 00:23:15,410 --> 00:23:18,590 kama kweli kufikiri kuhusu nini string kweli ni, ni * Char. 374 00:23:18,590 --> 00:23:21,700 Naam, hiyo ni nini? Ni anuani ya tabia fulani. 375 00:23:21,700 --> 00:23:24,930 Kisha labda inakuwa na mantiki zaidi kwamba wakati wewe kujaribu kufanya kitu 376 00:23:24,930 --> 00:23:29,220 super inaonekana rahisi kama hii, yote wewe kufanya ni kuiga anuani kumbukumbu. 377 00:23:29,220 --> 00:23:32,530 Wewe si kweli kufanya kitu chochote kwa kamba yenyewe. 378 00:23:32,530 --> 00:23:37,500 Hivyo hata kama huna wazo jinsi gani kutatua tatizo hili katika kanuni, 379 00:23:37,500 --> 00:23:45,080 ngazi ya juu, conceptually, nini tunahitaji kufanya ili kufanya ta kweli nakala ya s, inaonekana? 380 00:23:46,670 --> 00:23:48,820 Yeah. >> [Mwanafunzi] Kuwapa eneo jipya? >> Hasa. 381 00:23:48,820 --> 00:23:50,800 >> Sisi haja ya kutoa t bidhaa mpya mahali. 382 00:23:50,800 --> 00:23:55,230 Tunahitaji namna fulani kujenga dunia ambayo sisi kupata chunk mpya ya kumbukumbu, 383 00:23:55,230 --> 00:24:00,090 ambayo kwa ajili tu ya ufafanuzi mimi itabidi kuteka haki chini ya hii moja, lakini haina haja ya kuwa huko. 384 00:24:00,090 --> 00:24:04,880 Lakini inahitaji kuwa muziki huo, hivyo mimi itabidi kuteka mistari haya wima katika sehemu moja. 385 00:24:04,880 --> 00:24:09,720 Ni faini kama hii yote ni takataka awali. Nani anajua huko? 386 00:24:09,720 --> 00:24:13,850 Lakini hatua ya 1 ni kwenda kuwa nipe kama kumbukumbu kiasi kama nahitaji 387 00:24:13,850 --> 00:24:18,630 walionao nakala ya hello, kisha kufikiri jinsi ya nakala h hapa, e hapa, 388 00:24:18,630 --> 00:24:20,390 l hapa na kadhalika. 389 00:24:20,390 --> 00:24:24,880 Lakini hii tayari anatakiwa kujisikia kidogo dhahiri hata kama baadhi ya maelezo ni bado kufikirika. 390 00:24:24,880 --> 00:24:28,690 Kwa nakala hii kamba katika hili, ni tu kwa kitanzi au kitanzi wakati 391 00:24:28,690 --> 00:24:31,580 au kitu fulani na ambayo umefanya kuwa wote zaidi ya ukoo. 392 00:24:31,580 --> 00:24:35,970 Basi hebu jaribu hii. Hebu kwenda katika copy2.c. 393 00:24:35,970 --> 00:24:43,270 Katika copy2.c tuna karibu mpango huo ila kwa mstari 27. 394 00:24:43,270 --> 00:24:47,260 Inaonekana tata kidogo, lakini kama sisi kuvunja chini kipande kwa kipande, 395 00:24:47,260 --> 00:24:48,950 upande wa mkono wa kushoto ni sawa. 396 00:24:48,950 --> 00:24:52,790 Char * t inajenga jambo hili katika kumbukumbu, angalau kwa swali alama 397 00:24:52,790 --> 00:24:54,680 kwa sababu sisi hatuna wazo nini huko na default. 398 00:24:54,680 --> 00:24:57,920 Upande wa kulia tuko sasa kuanzisha mpya kazi, malloc, 399 00:24:57,920 --> 00:25:00,640 kwa kumbukumbu kutenga, nipe kumbukumbu, 400 00:25:00,640 --> 00:25:06,900 na inaonekana inachukua jinsi hoja nyingi, mambo mangapi ndani ya mabano? 401 00:25:09,660 --> 00:25:12,130 Nikasikia manung'uniko ya 1 na 2, lakini ni 1 tu. 402 00:25:12,130 --> 00:25:15,320 Hakuna comma, ambayo ina maana kuna kitu tu 1 ndani ya mabano. 403 00:25:15,320 --> 00:25:17,720 Hata ingawa kuna mabano nyingine, napenda kuonyesha 404 00:25:17,720 --> 00:25:21,460 nini ndani ya mabano yttersta, na ni hii kujieleza: 405 00:25:21,460 --> 00:25:25,880 (Strlen (s) + 1) * sizeof (Char). 406 00:25:25,880 --> 00:25:29,190 Hivyo kama sisi kweli nadhani hii kupitia, hii ni kusema nipe urefu wa s. 407 00:25:29,190 --> 00:25:34,440 Kwa nini mimi, ingawa, akiongeza 1 kwenye urefu? >> [Inaudible mwanafunzi majibu] 408 00:25:34,440 --> 00:25:40,200 Hasa. Tunahitaji nafasi kwa guy hii ifikapo mkia, tabia ya sita kwamba haina maana Kiingereza 409 00:25:40,200 --> 00:25:42,250 lakini haina una maalum kimpango maana. 410 00:25:42,250 --> 00:25:46,800 >> Hivyo tunahitaji + 1 kwa kuwa kwa sababu strlen anarudi matumaini ya binadamu ya urefu, 411 00:25:46,800 --> 00:25:50,890 hujambo au 5, haina kukupa ziada null tabia. 412 00:25:50,890 --> 00:25:52,980 Hivyo mimi manually kuongeza hii kwa + 1. 413 00:25:52,980 --> 00:25:56,060 Na kisha hii, ukubwa wa * (Char), hatujaona hii kabla. 414 00:25:56,060 --> 00:25:57,480 Hii si kitaalam kazi. 415 00:25:57,480 --> 00:26:04,150 Ni Keyword maalum kwamba tu anakwambia kile kawaida ni ya baadhi ya aina data kwenye komputa 416 00:26:04,150 --> 00:26:06,980 kwa sababu katika hali halisi, baadhi ya sisi kuwa na kompyuta 32-bit. 417 00:26:06,980 --> 00:26:10,900 Mimi kuwa na kompyuta pretty umri wa nyumbani, na anatumia tu bits 32 kuwakilisha kuyatumia. 418 00:26:10,900 --> 00:26:13,900 Na hivyo kama mimi ukubwa wa aina data, inaweza kuwa 32 bits. 419 00:26:13,900 --> 00:26:18,300 Lakini kama mimi nina kutumia dhana yangu mpya ya kompyuta, mimi ili kupata nyuma thamani ya bits 64 420 00:26:18,300 --> 00:26:20,510 kwa kitu kama anwani. 421 00:26:20,510 --> 00:26:25,400 Hivyo katika kesi hii, tu kuwa super salama, sisi siyo kwenda kitu ngumu code kama - 422 00:26:25,400 --> 00:26:28,740 vizuri, ni nini na ukubwa wa Char kulingana na kile ambacho tumekuwa alisema hadi sasa? 423 00:26:28,740 --> 00:26:34,450 Tumekuwa pretty much alisema maneno kwamba ni 1 Byte, na kwamba ni kiasi pretty kweli katika bodi. 424 00:26:34,450 --> 00:26:37,000 Lakini tena, mawazo huwa na kuwa mbaya. 425 00:26:37,000 --> 00:26:40,850 Wao kusababisha programu Buggy ikiwa watu kutumia programu yako katika njia wewe hakuwa na nia. 426 00:26:40,850 --> 00:26:44,750 Hivyo hebu abstract hii mbali na tu zaidi generically kusema 427 00:26:44,750 --> 00:26:46,830 Nahitaji chunks hayo, wengi wa kumbukumbu 428 00:26:46,830 --> 00:26:50,210 na kila chunk ya kumbukumbu inapaswa kuwa sawa na ukubwa wa tabia, 429 00:26:50,210 --> 00:26:54,870 ambao kwa kweli ni sawa na 1 katika kesi hii, lakini ni njia zaidi generic ya kuandika hivyo. 430 00:26:54,870 --> 00:27:00,460 Hivyo kama neno ni hello, jinsi wengi ka haina malloc inaonekana kutenga kwa hujambo? 431 00:27:00,460 --> 00:27:04,980 [Mwanafunzi] Sita. >> Sita. Hasa kama wengi kama tuna swali alama juu ya screen. 432 00:27:04,980 --> 00:27:07,800 Na kisha kuchukua nadhani sasa kwa kuzingatia uelewa wako wa GetString 433 00:27:07,800 --> 00:27:12,790 nini malloc pengine kurudi? >> [Mwanafunzi] anuani. 434 00:27:12,790 --> 00:27:17,020 anuani ya nini? Ya chunk ya kwanza ya kumbukumbu. 435 00:27:17,020 --> 00:27:20,670 >> Sisi hatuna wazo nini huko kwa sababu baadhi ya kazi nyingine 436 00:27:20,670 --> 00:27:23,010 wangeweza kutumia kumbukumbu hii hapo awali. 437 00:27:23,010 --> 00:27:28,380 Lakini malloc, kama GetString, anarudi anuani ya Byte kwanza ya kumbukumbu 438 00:27:28,380 --> 00:27:30,540 kwamba imetenga kwa ajili yenu. 439 00:27:30,540 --> 00:27:38,380 Hata hivyo, nini haina kufanya ni kujaza tupu hii na tabia null backslash 440 00:27:38,380 --> 00:27:43,030 kwa sababu ni zamu nje unaweza kutumia malloc kutenga chochote: ints, masharti, arrays, 441 00:27:43,030 --> 00:27:45,700 ikifungwa, mwanafunzi miundo. 442 00:27:45,700 --> 00:27:47,750 Unaweza kutumia malloc kabisa generically. 443 00:27:47,750 --> 00:27:51,470 Ni hajali au kujua nini wewe kugawa kumbukumbu kwa. 444 00:27:51,470 --> 00:27:55,810 Hivyo itakuwa presumptuous kwa malloc kuweka 0 \ 445 00:27:55,810 --> 00:27:58,340 mwisho wa kila chunk ya kumbukumbu ni kutoa 446 00:27:58,340 --> 00:28:02,620 kwa sababu hii \ 0 kitu ni mkataba kwa masharti. 447 00:28:02,620 --> 00:28:06,310 Ni si kutumika kwa ajili ya ints, siyo kutumika kwa ajili ya ikifungwa, siyo kutumika kwa ajili ya wanafunzi. 448 00:28:06,310 --> 00:28:11,730 Na hivyo gotcha na malloc ni kwamba mzigo ni wewe kabisa juu ya programu 449 00:28:11,730 --> 00:28:16,790 kukumbuka jinsi wengi ka wewe zilizotengwa na si kwa milele kutumia kwa kitanzi 450 00:28:16,790 --> 00:28:21,570 au kitanzi wakati na kwenda nyuma ya mpaka wa chunk ya kumbukumbu tumekuwa aliyopewa. 451 00:28:21,570 --> 00:28:23,540 Weka kwa njia nyingine, haraka kama wewe kutenga kumbukumbu, 452 00:28:23,540 --> 00:28:28,510 huwezi kuuliza mfumo wa uendeshaji, oh, kwa njia, jinsi kubwa ya chunk ya kumbukumbu ilikuwa hii? 453 00:28:28,510 --> 00:28:32,080 Ni kabisa hadi wewe kukumbuka kama unahitaji kuwa thamani. 454 00:28:32,080 --> 00:28:34,330 >> Basi hebu angalia jinsi mimi kuendelea kutumia kumbukumbu. 455 00:28:34,330 --> 00:28:38,430 Katika mstari 28 na 29 kwa nini mimi kufanya hili? 456 00:28:39,850 --> 00:28:42,260 Tu jumla sanity hundi. 457 00:28:42,260 --> 00:28:45,110 Tu katika kesi kitu potoka, naomba kwa kiasi fulani mambo ya kumbukumbu 458 00:28:45,110 --> 00:28:48,690 au mimi mambo mengi mbio juu ya kompyuta kwamba kuna tu siyo kumbukumbu ya kutosha, 459 00:28:48,690 --> 00:28:51,780 kitu kama hicho, mimi angalau wanataka kuangalia kwa null. 460 00:28:51,780 --> 00:28:55,260 Katika hali halisi, wengi kompyuta nitakupa udanganyifu kwamba kila mpango 461 00:28:55,260 --> 00:28:57,080 Unaweza kutumia ukamilifu wa RAM yako, 462 00:28:57,080 --> 00:29:00,740 lakini hata hivyo, kama mtumiaji aina katika string baadhi crazy muda mrefu labda kwa sababu ni mtu mbaya 463 00:29:00,740 --> 00:29:03,440 na wao ni kweli kujaribu ajali programu yako au hack ndani yake, 464 00:29:03,440 --> 00:29:07,300 unataka angalau kuangalia thamani ya kurudi kwa malloc na kama ni sawa null. 465 00:29:07,300 --> 00:29:11,630 Na ikiwa hivyo, hebu tu kuacha haki sasa kwa sababu mimi sijui nini cha kufanya katika kesi hiyo. 466 00:29:11,630 --> 00:29:13,950 Ninawezaje nakala kamba? Kuna njia kadhaa za kufanya hivyo. 467 00:29:13,950 --> 00:29:18,850 Kuna str nakala kazi katika C, lakini ni super rahisi kwa sisi kufanya hii ya zamani-fashioned njia. 468 00:29:18,850 --> 00:29:23,110 >> Kwanza napenda kufikiri nini urefu wa s ni. 469 00:29:23,110 --> 00:29:26,930 Ningeweza kuweka hii katika kitanzi lakini badala yake mimi tu kuweka nje hapa kwa ufafanuzi. 470 00:29:26,930 --> 00:29:30,610 Hivyo n sasa maduka ya urefu wa kamba ya awali, ambayo ni inaonekana 5. 471 00:29:30,610 --> 00:29:35,290 Kisha katika kitanzi yangu kwa mimi nina iterating kutoka juu ya 0 hadi n, 472 00:29:35,290 --> 00:29:40,940 na juu ya kila iteration mimi nina kuweka s [i] ndani ya t [i]. 473 00:29:40,940 --> 00:29:45,060 Hivyo kwamba ni nini mimi alisema kwa vidole vyangu 2 akionyesha masharti kabla. 474 00:29:45,060 --> 00:29:49,260 Kama hii kwa kitanzi iterates kama hii, mimi nina kwenda kuwa kuiga h ndani ya hapa, 475 00:29:49,260 --> 00:29:52,890 e katika hapa, l ndani ya hapa kwa sababu hii ni s, hii ni t. 476 00:29:52,890 --> 00:29:58,770 Na kisha mwishowe, katika mstari 35 kwa nini mimi kufanya hili? 477 00:29:58,770 --> 00:30:03,770 Mimi haja ya kuhakikisha kwamba mimi nina kumaliza t kamba. 478 00:30:03,770 --> 00:30:06,170 Na mimi ni njia hii kuwa super wazi. 479 00:30:06,170 --> 00:30:09,510 Lakini kupendekeza, mtu, kama unaweza, njia mbalimbali za kufanya hivi. 480 00:30:09,510 --> 00:30:13,930 Mimi si kweli wanahitaji line 35. Kuna njia nyingine ya kufanya hili. 481 00:30:13,930 --> 00:30:18,880 Yeah. >> [Inaudible mwanafunzi majibu] >> Sema nguvu zaidi. 482 00:30:18,880 --> 00:30:20,960 [Mwanafunzi] Chini ya au sawa na. >> Hasa. 483 00:30:20,960 --> 00:30:24,450 Tunaweza tu kusema chini ya au sawa na n, ambayo kwa ujumla imekuwa mbaya 484 00:30:24,450 --> 00:30:28,190 kwa sababu karibu kila mara wakati sisi kwenda sawa na kitu sisi ni kuhesabu 485 00:30:28,190 --> 00:30:30,000 sisi kwenda 1 hatua mbali mno. 486 00:30:30,000 --> 00:30:32,170 Lakini kumbuka, jinsi ka wengi hawakuwa sisi kutenga? 487 00:30:32,170 --> 00:30:37,210 Sisi zilizotengwa strlen ya s, hivyo 5 + 1 kwa jumla ya 6. 488 00:30:37,210 --> 00:30:39,980 Hivyo katika kesi hii tunaweza kufanya kitu kama hiki 489 00:30:39,980 --> 00:30:46,450 hivyo kwamba sisi ni kuiga si tu hujambo lakini pia 0 \ mwishoni sana. 490 00:30:46,450 --> 00:30:49,860 Vinginevyo, tunaweza kutumia kazi kuitwa str nakala, strcpy, 491 00:30:49,860 --> 00:30:51,700 lakini kwamba itakuwa si kuwa karibu kama furaha sana. 492 00:30:51,700 --> 00:30:54,000 Lakini hiyo yote ni gani chini ya Hood. 493 00:30:54,000 --> 00:30:56,050 Kisha mwisho, sisi kufanya kitu kimoja kama kabla. 494 00:30:56,050 --> 00:31:01,620 Mimi capitalize t na kisha mimi kudai kwamba awali inaonekana kama hii na nakala inaonekana kama kwamba. 495 00:31:01,620 --> 00:31:08,570 Basi hebu jaribu hii sasa. Hebu kwenda katika hapa. Matokeo copy2. Tutaweza kukuza ndani na kukimbia copy2. 496 00:31:08,570 --> 00:31:13,840 Mimi naenda aina katika hujambo katika lowercase, na kwa kweli mimi kupata Herufi za chini hujambo kama awali 497 00:31:13,840 --> 00:31:16,930 lakini mtaji Wapendwa kwa nakala. 498 00:31:16,930 --> 00:31:20,300 Lakini mimi nina kufanyika bado tu. Mimi haja ya kufanya mwisho 1 kitu hapa. 499 00:31:20,300 --> 00:31:28,000 46 na 47 ni wazi kumkomboa kumbukumbu, lakini ni nini maana ya kwamba kweli? 500 00:31:28,000 --> 00:31:33,250 Hivi mimi nafanya nini, unafikiri, kwa wito line 46 na mstari 47? 501 00:31:33,250 --> 00:31:38,900 Nini athari gani kwamba kuwa? Yeah. 502 00:31:38,900 --> 00:31:43,140 [Inaudible mwanafunzi majibu] >> Hasa. 503 00:31:43,140 --> 00:31:46,380 >> Wewe ni tu kuwaambia mfumo wa uendeshaji, hey, shukrani kwa ajili ya kumbukumbu hii. 504 00:31:46,380 --> 00:31:48,320 Unaweza sasa matumizi yake kwa mtu mwingine. 505 00:31:48,320 --> 00:31:50,790 Na hapa ni mfano kamili wa maadili ya takataka. 506 00:31:50,790 --> 00:31:55,430 Mimi tu kutumika kumbukumbu hii kwa kuandika neno hujambo katika maeneo 2, 507 00:31:55,430 --> 00:31:57,490 hapa, hapa, hapa, na hapa. 508 00:31:57,490 --> 00:32:00,910 Hivyo hii ni h-e-l-l-o-\ 0. 509 00:32:00,910 --> 00:32:06,960 Lakini basi mimi piga mstari 46 na mstari 47, na wewe kujua nini kinatokea pale katika suala la picha? 510 00:32:06,960 --> 00:32:10,010 Kweli, ngoja, picha hii ni moja ya zamani. 511 00:32:10,010 --> 00:32:12,550 Mara sisi kufanya nakala, guy hii ni kweli akizungumzia hapa, 512 00:32:12,550 --> 00:32:16,110 hivyo hebu kuondoa idadi na tu abstract mbali kama mishale yetu tena. 513 00:32:16,110 --> 00:32:19,370 Nini kinatokea katika picha hii wakati mimi kuwaita bure? 514 00:32:19,370 --> 00:32:22,750 [Inaudible mwanafunzi majibu] >> Si hata. 515 00:32:22,750 --> 00:32:29,510 Kama mimi wito bure kwenye s na t - aina ya swali hila - picha hii haina mabadiliko wakati wote 516 00:32:29,510 --> 00:32:33,880 kwa sababu wito s na wito t tu anaelezea mfumo wa uendeshaji, 517 00:32:33,880 --> 00:32:39,010 hey, unaweza kutumia kumbukumbu hii tena, lakini haibadilishi hii null 518 00:32:39,010 --> 00:32:41,840 au baadhi ya tabia maalum, haina mabadiliko hayo, 519 00:32:41,840 --> 00:32:47,350 haibadilishi h au e au l au l au o katika aidha mahali pa kitu kingine chochote. 520 00:32:47,350 --> 00:32:51,610 Katika suala la picha, haraka kama wewe piga mabadiliko bure kitu,. 521 00:32:51,610 --> 00:32:56,570 Na humo uongo asili ya maadili ya takataka kwa sababu kama mimi kisha baadaye katika mpango huu 522 00:32:56,570 --> 00:33:01,010 kuuliza mfumo wa uendeshaji kwa ajili ya kumbukumbu zaidi na GetString au malloc au kitu kama hicho 523 00:33:01,010 --> 00:33:04,900 na mfumo wa uendeshaji anasema, hakika, nina ka 12 ya kumbukumbu tu zilizotolewa, 524 00:33:04,900 --> 00:33:08,080 matumizi haya, nini unakwenda kuwa mitupu? 525 00:33:08,080 --> 00:33:10,830 Mtakuja kuwa mitupu chunk ya kumbukumbu kwamba sisi ingekuwa kawaida kuteka 526 00:33:10,830 --> 00:33:13,700 na alama ya kuuliza, lakini nini ni alama swali hizo? 527 00:33:13,700 --> 00:33:17,000 Wao kutokea kwa kuwa h-e-l-l-o, h-e-l-l-o. 528 00:33:17,000 --> 00:33:20,940 Hizi ni takataka wetu mpya maadili haraka kama wewe bure juu ya kwamba kumbukumbu. 529 00:33:20,940 --> 00:33:22,750 >> Kuna ulimwengu halisi Kidokezo hapa pia. 530 00:33:22,750 --> 00:33:24,720 Hii hutokea kwa kufanya na RAM, lakini kompyuta yako 531 00:33:24,720 --> 00:33:26,720 kweli kufanya kitu kimoja na disk. 532 00:33:26,720 --> 00:33:30,620 Tutazungumzia hili hasa kwa kuweka baadaye tatizo kwamba inalenga katika forensics. 533 00:33:30,620 --> 00:33:36,170 Lakini nini hasa kinatokea kama una baadhi ya nyeti ya fedha faili kwenye desktop yako 534 00:33:36,170 --> 00:33:39,600 au baadhi JPEG sketchy na wewe Drag ni ndani ya takataka yako, 535 00:33:39,600 --> 00:33:44,390 kile kinachotokea wakati Drag ni ndani ya takataka au kusaga bin? 536 00:33:44,390 --> 00:33:47,240 Ulijua nini nilikuwa kuzungumza juu. [Kicheko] 537 00:33:47,240 --> 00:33:52,370 Nini kinatokea wakati umeweka dragged kuwa ushahidi katika bin yako kusaga au takataka unaweza? 538 00:33:52,370 --> 00:33:55,920 [Inaudible mwanafunzi majibu] 539 00:33:55,920 --> 00:33:58,000 Naam, hivyo makini. Nini kinatokea wakati wewe kufanya hivyo? 540 00:33:58,000 --> 00:34:01,030 jibu fupi ni kitu, sawa? 541 00:34:01,030 --> 00:34:04,790 Sketchy au nyeti faili bado wamekaa tu pale mahali fulani katika gari yako ngumu. 542 00:34:04,790 --> 00:34:07,940 Wengi wetu angalau wamejifunza njia ngumu kwamba unahitaji tupu takataka yako 543 00:34:07,940 --> 00:34:10,429 au yako kusaga bin kwa kweli kufuta files. 544 00:34:10,429 --> 00:34:13,440 Na kwa kweli, wakati wewe haki bonyeza au Udhibiti click juu ya takataka yako inaweza 545 00:34:13,440 --> 00:34:15,580 au kuchagua faili, Tupu Trash au chochote 546 00:34:15,580 --> 00:34:21,420 na kweli tupu takataka unaweza au kusaga bin, nini hasa kinachotokea basi kwa picha hii? 547 00:34:22,810 --> 00:34:25,969 Zaidi chochote. Hivyo kitu kweli kinachotokea kwenye disk. 548 00:34:25,969 --> 00:34:30,880 >> Na kama sisi tu muda digress na kuandika - I'll tu kutumia nyuma ya hii. 549 00:34:30,880 --> 00:34:34,639 Hivyo sasa ni kubadilisha hadithi kutoka RAM, ambayo ni programu ambapo zipo 550 00:34:34,639 --> 00:34:39,250 wakati wewe mbio yao, ili disk, ambayo ni ambapo wao ni kuhifadhiwa muda mrefu 551 00:34:39,250 --> 00:34:42,920 hata wakati nguvu huenda nje, kwa sasa - na tutaweza kurudi huu katika siku zijazo - 552 00:34:42,920 --> 00:34:46,380 hebu tu kujifanya kuwa hii inawakilisha bidii gari ndani ya kompyuta yako 553 00:34:46,380 --> 00:34:50,110 kwa sababu nyuma katika siku waliyo kuwa mviringo disks, kiasi kama disks floppy. 554 00:34:50,110 --> 00:34:55,130 Hivyo kama wewe kufanya kuwa na baadhi ya nyeti Excel faili, inaweza kuchukua hadi hii chunk ya kumbukumbu 555 00:34:55,130 --> 00:34:59,770 kwenye disk ya kompyuta yako, na Mimi tu kuchora huo holela 1s na sekunde 0. 556 00:34:59,770 --> 00:35:03,970 Wakati wewe Drag faili kama kwamba kwa takataka yako inaweza au kusaga bin, 557 00:35:03,970 --> 00:35:07,750 literally hakuna kinachotokea kwa sababu Apple na Microsoft kuwa tu aliamua 558 00:35:07,750 --> 00:35:10,450 takataka unaweza na kusaga bin ni kweli tu placeholder muda. 559 00:35:10,450 --> 00:35:14,710 Labda hatimaye OS itakuwa tupu ni kwa ajili yenu, lakini kwa kawaida, haina kufanya kitu chochote, 560 00:35:14,710 --> 00:35:17,090 angalau mpaka uko kweli chini juu ya nafasi. 561 00:35:17,090 --> 00:35:20,870 >> Hata hivyo, wakati wa kwenda takataka tupu au tupu ya kusaga bin, 562 00:35:20,870 --> 00:35:23,460 vile vile, hakuna kinachotokea kwa picha hii. 563 00:35:23,460 --> 00:35:28,590 Yote ambayo hufanyika ni mahali pengine kwenye kompyuta yako, kuna baadhi ya aina ya meza. 564 00:35:28,590 --> 00:35:35,400 Ni aina ya kama karatasi kidogo kudanganya kwamba anasema kwamba, hebu sema, resume.doc, 565 00:35:35,400 --> 00:35:40,920 hivyo resume yako katika faili Microsoft Word kutumika kuishi katika eneo 123 juu ya hard disk yako, 566 00:35:40,920 --> 00:35:43,710 si katika kumbukumbu na si katika RAM lakini juu ya hard disk yako, 567 00:35:43,710 --> 00:35:49,050 na JPEG yako sketchy maisha katika 456, na yako Excel faili anaishi 789 au popote. 568 00:35:49,050 --> 00:35:53,640 Wakati wewe kufuta kwa kweli kuondoa takataka au kusaga bin, 569 00:35:53,640 --> 00:35:59,530 picha hii haina mabadiliko. Sekunde 0 na 1s kwenye gari yako ngumu hawaendi popote. 570 00:35:59,530 --> 00:36:03,930 Lakini hii meza, hii database kidogo ya aina, anafanya mabadiliko. 571 00:36:03,930 --> 00:36:08,750 Wakati wewe kufuta resume yako, ni kana kwamba faili ni ilifutwa kwa maana ya baadhi, 572 00:36:08,750 --> 00:36:12,790 lakini kompyuta wote gani ni kusahau ambapo kitu kwamba anaishi kwenye gari yako ngumu. 573 00:36:12,790 --> 00:36:17,870 Sekunde 0 na 1s kwamba compose resume yako au yeyote wa files haya mengine ni bado intact. 574 00:36:17,870 --> 00:36:21,960 >> Hivyo kama wewe alifanya hii ajali, bado kuna uwezekano zisizo sifuri 575 00:36:21,960 --> 00:36:25,800 kwamba unaweza kupona data zako kwa kutumia Norton Utilities au baadhi programu ya kibiashara 576 00:36:25,800 --> 00:36:29,810 kusudi lake katika maisha ni kupata sekunde 0 na 1s ambayo aina ya wamekuwa yatima, 577 00:36:29,810 --> 00:36:33,300 wamesahau hapa lakini kushoto hapa, ili uweze kupata data yako ya nyuma. 578 00:36:33,300 --> 00:36:38,410 Au kuchunguza mauaji wapelelezi na polisi au FBI ingekuwa kweli kuchukua gari ngumu 579 00:36:38,410 --> 00:36:42,550 na kwa kweli kuangalia kwa mifumo ya sekunde 0 na 1s kwamba kuangalia kama JPEGs, kuangalia kama files Excel, 580 00:36:42,550 --> 00:36:46,400 na kuokoa wale njia hata kama kompyuta ina wamesahau yao huko. 581 00:36:46,400 --> 00:36:49,820 Hivyo njia pekee ya kweli kufuta data, kama tutaweza kujadili katika siku zijazo, 582 00:36:49,820 --> 00:36:54,190 ni kwa kusugua au kuifuta faili au disk ngumu na - 583 00:36:54,190 --> 00:36:56,540 Unaweza si kweli kujikwamua na sekunde 0 1s 584 00:36:56,540 --> 00:36:59,440 kwa sababu vinginevyo wewe d kuanza na gari gigabyte ngumu 585 00:36:59,440 --> 00:37:02,380 na wewe d kuishia na gari megabyte ngumu kama wewe daima walikuwa kufuta, 586 00:37:02,380 --> 00:37:04,380 literally, sekunde 0 na 1s. 587 00:37:04,380 --> 00:37:06,310 Basi nini ungefanya kama kweli alitaka cover tracks yako 588 00:37:06,310 --> 00:37:10,510 na tatizo la msingi ni kwamba bado kuna sekunde 0 na 1s kwenye disk? 589 00:37:10,510 --> 00:37:14,930 Naona mtu gesticulating kwamba ungependa kimwili kuvunja kifaa. Hiyo itakuwa kazi. 590 00:37:14,930 --> 00:37:19,600 [Kicheko] Lakini kama kwamba ni aina ya ufumbuzi ghali, nini itakuwa busara zaidi? 591 00:37:19,600 --> 00:37:23,270 Yeah. >> [Mwanafunzi] overwrite yao. >> Overwrite yao na nini? >> [Mwanafunzi] Nyingine data. 592 00:37:23,270 --> 00:37:29,070 Nyingine data. Unaweza tu overwrite disk yako kwa sekunde 0 au 1s au yote sekunde 0, wote 1s. 593 00:37:29,070 --> 00:37:31,230 >> Na kwamba ni kweli nini baadhi ya programu gani. 594 00:37:31,230 --> 00:37:33,570 Unaweza kununua software au hata kupata programu huru, 595 00:37:33,570 --> 00:37:36,610 na hata kujengwa katika Mac OS siku hizi, chini hivyo katika Windows, 596 00:37:36,610 --> 00:37:38,660 ni uwezo wa kufuta salama. 597 00:37:38,660 --> 00:37:41,960 Kweli, kama unataka nyumbani wote kukimbia leo kama una Mac na kufanya hili, 598 00:37:41,960 --> 00:37:45,740 kama nimepata baadhi ya mambo katika takataka yako inaweza, unaweza kufanya salama Tupu Trash, 599 00:37:45,740 --> 00:37:47,610 ambayo haina hasa ile. 600 00:37:47,610 --> 00:37:53,350 Badala tu ya kufuta files hapa, haina kufuta hapa na sekunde 0 1s, 601 00:37:53,350 --> 00:38:01,240 badala yake, ni tu kuvibadilisha wote, kwa mfano, kwa sekunde 0 na dot, dot, dot. 602 00:38:01,240 --> 00:38:05,330 Basi mmoja wa psets yako ya baadaye itakuwa kweli kuwa kwa makusudi kuokoa data - 603 00:38:05,330 --> 00:38:08,430 picha kwamba tumekuwa kuchukuliwa wa watu, mahali, na mambo ya chuo 604 00:38:08,430 --> 00:38:12,810 ambayo tutaweza kufanya sanamu ya kuchunguza mauaji ya kadi ya kumbukumbu kamera ya digital ya, 605 00:38:12,810 --> 00:38:17,120 ambayo ni exact wazo - na itabidi wapewe changamoto ya kweli kupata 606 00:38:17,120 --> 00:38:20,160 mwelekeo kwamba kuwakilisha JPEGs kwenye gari yako ngumu, 607 00:38:20,160 --> 00:38:23,610 kiasi kama mwanafunzi wa zamani ambaye kwamba mimi kusoma barua pepe wiki chache zilizopita alifanya 608 00:38:23,610 --> 00:38:25,860 kuokoa picha ya dada yake. 609 00:38:25,860 --> 00:38:30,300 Mbona sisi kuchukua mapumziko 5-dakika hapa, na tutaweza regroup na zaidi juu ya kumbukumbu. 610 00:38:33,030 --> 00:38:38,610 Hivyo hapa ni ambapo mambo kupata kidogo akili-bending, lakini hii ni hatua ya nguvu sana 611 00:38:38,610 --> 00:38:40,480 kuelekea kuelewa hii yote zaidi. 612 00:38:40,480 --> 00:38:42,900 Hapa ni mpango ujulikanao pointers.c. 613 00:38:42,900 --> 00:38:45,430 Ni kati ya sampuli code ya leo. 614 00:38:45,430 --> 00:38:51,280 Ona kwamba katika mistari michache ya kwanza, 19 kupitia 22, wote sisi ni kufanya ni kitu kama GetString 615 00:38:51,280 --> 00:38:54,460 na kurudi anuani, hifadhi hiyo katika s. 616 00:38:54,460 --> 00:38:58,380 Tangu sasa kwa pset hata 3 kama unataka lakini pset 4 na juu ya 617 00:38:58,380 --> 00:39:01,030 ambapo unaweza kuanza kuchukua magurudumu haya mafunzo mbali mwenyewe, 618 00:39:01,030 --> 00:39:04,030 hakuna sababu ya kujifanya kuwa masharti kuwepo tena. 619 00:39:04,030 --> 00:39:07,030 Ni hakika sawa na kuanza tu kusema * Char. 620 00:39:07,030 --> 00:39:12,610 >> Kama kando, katika marejeo online na katika vitabu unaweza kuona mara nyingi nyota baada ya kutofautiana. 621 00:39:12,610 --> 00:39:15,600 Unaweza hata kuona maeneo kuzunguka pande zote mbili ya hiyo. 622 00:39:15,600 --> 00:39:17,680 Wale wote ni functionally sahihi. 623 00:39:17,680 --> 00:39:21,180 Kwa sasa, ingawa, tutaweza standardize juu ya mbinu hii kufanya super wazi 624 00:39:21,180 --> 00:39:24,000 kwamba * Char ni kama kusema tabia pointer. 625 00:39:24,000 --> 00:39:25,680 Hiyo ni aina data. 626 00:39:25,680 --> 00:39:28,730 Na kisha jina la kutofautiana ni s katika kesi hii. 627 00:39:28,730 --> 00:39:31,180 Hivyo tumekuwa Gotten kamba na tumekuwa kuitwa ni s. 628 00:39:31,180 --> 00:39:35,180 Na kisha chini hapa taarifa kwamba mimi nina kufanya kweli kidogo ya udanganyifu. 629 00:39:35,180 --> 00:39:39,080 Hii inaitwa pointer arithmetic, ambayo ni aina ya rahisi super. 630 00:39:39,080 --> 00:39:41,790 Ni njia tu kuongeza na Ondoa idadi ya kuyatumia. 631 00:39:41,790 --> 00:39:43,660 Lakini hii kweli kazi. 632 00:39:43,660 --> 00:39:49,170 Mpango huu inaonekana Prints string s 1 tabia kwa kuwa mstari wa vile matokeo ya mwisho - 633 00:39:49,170 --> 00:39:54,920 Hivyo tu tunaweza nyara ambapo hii ni kwenda, kufanya kuyatumia, kukimbia kuyatumia, basi mimi zoom in 634 00:39:54,920 --> 00:39:58,940 Sasa basi mimi aina katika kitu kama HELLO na aina Ingiza 635 00:39:58,940 --> 00:40:01,080 na Prints 1 tabia kwa kila mstari. 636 00:40:01,080 --> 00:40:04,730 Hadi pili iliyopita, sisi ingekuwa amefanya hili na nukuu za mraba mabano. 637 00:40:04,730 --> 00:40:09,760 Tunatarajia kuwa kwa kitanzi na tunatarajia kufanya printf ya s [i] na tunatarajia kufanya hivyo tena na tena na tena 638 00:40:09,760 --> 00:40:11,950 na n backslash mwisho wa kila mstari. 639 00:40:11,950 --> 00:40:16,800 Lakini mpango huu ni tofauti. Mpango huu ni kutumia, literally, hesabu. 640 00:40:16,800 --> 00:40:18,860 Basi nini kinaendelea hapa? 641 00:40:18,860 --> 00:40:24,720 Awali ya yote, kabla ya kitanzi hii hata executes, nini, tu kuwa wazi, ni ya kweli? 642 00:40:24,720 --> 00:40:27,270 S ni? >> [Mwanafunzi] anuani. >> Anuani. 643 00:40:27,270 --> 00:40:32,980 >> Na ni anuani ya, katika kesi ya hello, tabia ya kwanza katika neno kwamba, ambayo ni h. 644 00:40:32,980 --> 00:40:37,370 Hivyo ni s, katika mfano huu, hasa anuani ya h. 645 00:40:37,370 --> 00:40:41,850 Hivyo ni nini maana ya kufanya s + i? 646 00:40:41,850 --> 00:40:46,280 Naam, i kuanza saa 0 katika hii kwa kitanzi. Tumefanya mara nyingi. 647 00:40:46,280 --> 00:40:49,760 Mimi ni kwenda hadi urefu wa kamba, inaonekana. 648 00:40:49,760 --> 00:40:53,950 Kadhalika iteration kwanza ya kitanzi hii, i ni wazi 0. 649 00:40:53,950 --> 00:41:01,740 Hivyo msemo huu ni kusema s + i - badala yake, s +0--hiyo ni wazi tu s. 650 00:41:01,740 --> 00:41:04,320 Hiyo ni nini * s hapa? 651 00:41:04,320 --> 00:41:08,530 Sasa sisi ni kutumia nyota katika njia tofauti kidogo. 652 00:41:08,530 --> 00:41:13,080 Hebu kwenda mbele na kujikwamua t kwa sababu sisi ni kosa kuzungumza juu ya t na nakala ya s. 653 00:41:13,080 --> 00:41:15,540 Sasa sisi tu nataka kuwaambia hadithi kuwashirikisha s. 654 00:41:15,540 --> 00:41:20,090 Na hivyo kwa wakati huu, baada ya kuwa na aina kamba, dunia yetu inaonekana kabisa kama ilivyokuwa kabla ya 655 00:41:20,090 --> 00:41:26,630 pamoja na haki ya hifadhi ya anuani ya h na kwa ujumla zaidi akionyesha string hello. 656 00:41:26,630 --> 00:41:33,170 Kama mimi sasa kufanya mstari kama * (s + i), hebu jaribu hii nje. 657 00:41:33,170 --> 00:41:40,140 Hivyo * (s + i). Hebu kurahisisha hii kwa sababu hii ni 0, hivyo hii ni * (s 0). 658 00:41:40,140 --> 00:41:43,790 Naam, kusubiri dakika. Kurahisisha zaidi. Hii ni * (s). 659 00:41:43,790 --> 00:41:47,020 Naam, sasa mabano ni aina ya kijinga, hivyo sasa hebu tu kufanya * s. 660 00:41:47,020 --> 00:41:50,540 Hivyo katika iteration ya kwanza ya hii kitanzi, kwamba line hiyo yalionyesha, 26, 661 00:41:50,540 --> 00:41:53,650 ni kiasi pretty sawa na uchapishaji huu. 662 00:41:53,650 --> 00:41:56,040 Je, ni aina ya data * s? 663 00:41:56,040 --> 00:42:00,770 Katika hali hii, kwa sababu nyota hutokea kwa kuwa karibu na s yenyewe, 664 00:42:00,770 --> 00:42:04,930 lakini zaidi hasa, kwa sababu sisi ni tena kutangaza s, 665 00:42:04,930 --> 00:42:09,730 sisi siyo kujenga variable tena, hakuna kutaja ya * Char katika mstari 26, 666 00:42:09,730 --> 00:42:14,280 hakuna kutaja ya kamba Keyword, sisi ni tu kwa kutumia variable kuitwa s, 667 00:42:14,280 --> 00:42:19,650 zinageuka sasa nyota ina tofauti kidogo na, admittedly, kuwachanganya maana. 668 00:42:19,650 --> 00:42:26,590 * S hapa ina maana ya kwenda anuani katika s na magazeti chochote ni pale. 669 00:42:26,590 --> 00:42:33,750 Hivyo s ni hapa, * s ni - aina ya kama Chutes na Ladders, kufuata mshale - hapa. 670 00:42:33,750 --> 00:42:35,850 Hivyo hii ni * s. 671 00:42:35,850 --> 00:42:39,060 >> Basi nini anapata kuchapishwa kwenye iteration ya kwanza ya kwamba kitanzi katika mstari 26? 672 00:42:39,060 --> 00:42:42,170 Mimi magazeti nje% c, ambayo ni placeholder kwa tabia, 673 00:42:42,170 --> 00:42:48,520 kisha \ n kwa mstari mpya. * (S + i) ambapo i ni 0 ni tu hii. 674 00:42:48,520 --> 00:42:53,670 Basi nini Char gani mimi kuweka katika kwa c%? H. 675 00:42:53,670 --> 00:42:56,900 Katika iteration ya pili ya kitanzi - pengine unaweza kuona ambapo hii ni kwenda - 676 00:42:56,900 --> 00:43:01,350 iteration ijayo i ni wazi 1, hivyo njia hii ya 1, 677 00:43:01,350 --> 00:43:05,580 na kisha sasa sijui haja mabano kwa sababu sasa nyota anahitaji kusema 678 00:43:05,580 --> 00:43:08,620 kwenda kumbukumbu anuani ya 1. 679 00:43:08,620 --> 00:43:14,170 Je, ni s? Hebu roll nyuma katika wakati na kusema arrow hii sasa si kweli kufanya sisi neema yoyote. 680 00:43:14,170 --> 00:43:18,450 Hebu zaidi hasa kusema kwamba hii ni hifadhi ya 123 idadi 681 00:43:18,450 --> 00:43:25,110 kwa sababu ya kuanza kwa kamba hii hello, hii ni anwani ya 123, hii ni 124, na kadhalika. 682 00:43:25,110 --> 00:43:30,550 Kadhalika iteration pili wakati mimi kusema s 1, hiyo ni kama kusema 123 1, 683 00:43:30,550 --> 00:43:35,340 inayojulikana kama 124, hivyo nini Char anapata kuchapishwa kwenye iteration pili? 684 00:43:35,340 --> 00:43:37,850 E katika kumbukumbu anuani 124. 685 00:43:37,850 --> 00:43:44,440 Ndipo + tena, 125, 126, 127, na kitanzi hii nashiriki ataacha kabla ya sisi kupata hapa 686 00:43:44,440 --> 00:43:49,040 kwa sababu mimi nina kutumia strlen kuhakikisha kwamba i haina hesabu kubwa mno. 687 00:43:49,040 --> 00:43:50,810 Hivyo kwamba pia ni yake. 688 00:43:50,810 --> 00:43:55,000 Tena, hii ni kama tu kwamba sisi tulikuwa kufanyika wiki iliyopita. 689 00:43:55,000 --> 00:43:59,200 Hebu kuandika kwenye mstari chini hata kama hatutaki kufanya wote. 690 00:43:59,200 --> 00:44:02,500 Hii ni sawa sasa kwa hii. 691 00:44:02,500 --> 00:44:08,310 >> Hivyo hata kama ni s kamba, kama tumekuwa na kuiita kwa wiki, s ni kweli * Char. 692 00:44:08,310 --> 00:44:13,270 Hivyo kama tunataka kuwa super anal, ni kweli sahihi kuandika tabia maalum 693 00:44:13,270 --> 00:44:17,490 katika eneo idh kutumia anwani hizi numeric na hii operator nyota, 694 00:44:17,490 --> 00:44:20,470 lakini kusema ukweli, hii ni kiasi tu safi. Hivyo hii si mbaya. 695 00:44:20,470 --> 00:44:26,720 Hakuna sababu ya kuacha kufanya mstari 27 hapa, lakini 26 ni functionally sawa, 696 00:44:26,720 --> 00:44:31,570 na ni functionally sawa kwa sababu hasa kwamba sisi tumekuwa kujadili hivi sasa. 697 00:44:31,570 --> 00:44:33,650 Na Mwisho, 29 ni nzuri tu ya mazoezi. 698 00:44:33,650 --> 00:44:38,420 Wito bure ya s ina maana kwamba sasa wewe ni kutoa nyuma kumbukumbu kwamba GetString akakupeni 699 00:44:38,420 --> 00:44:41,630 kwa sababu tena, kama nilivyoeleza Jumatatu, GetString kwa wiki 700 00:44:41,630 --> 00:44:44,180 imekuwa kuanzisha mdudu katika kanuni yako. 701 00:44:44,180 --> 00:44:46,490 Code yako kwa wiki imekuwa na uvujaji kumbukumbu 702 00:44:46,490 --> 00:44:49,970 ambapo tumekuwa kuuliza GetString kwa kumbukumbu lakini wewe sijawahi kutoa ni nyuma. 703 00:44:49,970 --> 00:44:53,410 Na kwamba alikuwa makusudi waliochaguliwa na sisi pedagogically 704 00:44:53,410 --> 00:44:55,880 sababu ni tu sana kufikiria kuhusu mapema. 705 00:44:55,880 --> 00:44:57,710 Lakini sasa tunahitaji zaidi ulinganifu. 706 00:44:57,710 --> 00:45:00,830 Ukiuliza kompyuta kwa ajili ya kumbukumbu, kama ilivyo kwa ajili GetString, 707 00:45:00,830 --> 00:45:02,820 kama ni kesi inaonekana kwa malloc, 708 00:45:02,820 --> 00:45:07,970 lazima sasa kwa pset kuendelea 4 pia bure yoyote kumbukumbu hizo. 709 00:45:07,970 --> 00:45:11,650 Taarifa hii ni tofauti na kusema n int. 710 00:45:11,650 --> 00:45:15,040 Huna haja ya bure hii kwa sababu wewe hakutuita GetString 711 00:45:15,040 --> 00:45:16,890 na wewe hakutuita malloc. 712 00:45:16,890 --> 00:45:20,610 >> Na hata kama wewe kuitwa GetInt kama tutaweza hatimaye kuona, 713 00:45:20,610 --> 00:45:25,520 GetInt haina kutenga kumbukumbu kwa sababu wewe unaweza kweli kupita karibu integers 714 00:45:25,520 --> 00:45:29,430 na ikifungwa na chars njia tu tumekuwa kufanya kwa wiki. 715 00:45:29,430 --> 00:45:33,960 Strings, ingawa, ni maalum kwa sababu kwa kweli wao ni concatenation ya chars nyingi. 716 00:45:33,960 --> 00:45:37,450 Hivyo wao ni tu tofauti na chars na ikifungwa na ints na kama. 717 00:45:37,450 --> 00:45:39,980 Lakini tutaweza kuja nyuma na kwamba kabla ya muda mrefu. 718 00:45:39,980 --> 00:45:44,920 Maswali yoyote juu ya hili kisha mwanzo ya kuyatumia? Yeah. 719 00:45:44,920 --> 00:45:49,690 [Inaudible mwanafunzi swali] 720 00:45:49,690 --> 00:45:51,440 Ah, vizuri sana swali. 721 00:45:51,440 --> 00:45:55,790 Moja ya mambo machache C kweli haina maana wewe, ambayo ni rahisi, 722 00:45:55,790 --> 00:46:00,110 je, ni takwimu nje kwa nini ya kawaida ni wa aina data 723 00:46:00,110 --> 00:46:03,060 na kisha gani kwamba aina ya kuzidisha kwa ajili yenu. 724 00:46:03,060 --> 00:46:06,610 Hii ni lisilo katika kesi ya chars kwa sababu karibu kila mara Char ni 1 Byte, 725 00:46:06,610 --> 00:46:08,150 hivyo hii kazi tu. 726 00:46:08,150 --> 00:46:11,220 Lakini kwa ajili ya majadiliano, kama wewe walikuwa kweli uchapishaji integers 727 00:46:11,220 --> 00:46:15,500 na wewe walikuwa wakijaribu magazeti nje baadhi ya thamani ya kwamba alikuwa akionyesha integer, 728 00:46:15,500 --> 00:46:20,720 wewe vile vile bila haja ya kufanya + 4 * i tu kwa sababu ni int 4 ka. 729 00:46:20,720 --> 00:46:25,780 Pointer arithmetic ina maana kuwa C na compiler kufanya math kwamba wote kwa ajili yenu. 730 00:46:25,780 --> 00:46:29,190 Wote una jali ni hesabu katika aina ya hisia za binadamu. Yeah. 731 00:46:29,190 --> 00:46:35,200 [Mwanafunzi] Kama wewe kutangaza string ndani kwa kitanzi, je, una huru baadaye? 732 00:46:35,200 --> 00:46:36,760 Nzuri swali. 733 00:46:36,760 --> 00:46:41,390 >> Kama alitangaza ndani ya kamba ya kwa kitanzi, unahitaji huru baadaye? 734 00:46:41,390 --> 00:46:47,520 Wewe tu haja ya kumbukumbu bure kwamba kutenga na GetString au na malloc. 735 00:46:47,520 --> 00:46:53,110 Hivyo kama wewe tu kusema kitu kama - basi mimi kuweka braces curly sasa ili code wote ni kuhusiana. 736 00:46:53,110 --> 00:46:58,580 Kama alifanya kitu, angalau buggily, kama hii, char * t = s, 737 00:46:58,580 --> 00:47:03,450 huna haja ya t bure kwa sababu t hawakuwa kuhusisha yoyote kutaja malloc au GetString. 738 00:47:03,450 --> 00:47:08,960 Kama kwa kulinganisha wewe alifanya hivyo, GetString, basi ndiyo, ungependa haja ya t bure. 739 00:47:08,960 --> 00:47:14,350 Na kwa kweli, nafasi yako ya pekee ya kufanya hivyo ni sasa ndani ya kitanzi hii, kwa suala hilo hilo la wigo 740 00:47:14,350 --> 00:47:16,060 kwamba tumekuwa kujadiliwa katika siku za nyuma. 741 00:47:16,060 --> 00:47:18,830 Vinginevyo wewe d kuwa kugawa kumbukumbu, kugawa kumbukumbu, kugawa kumbukumbu, 742 00:47:18,830 --> 00:47:21,230 na mwisho wa mpango kwa sababu wewe ni nje ya kitanzi kwamba, 743 00:47:21,230 --> 00:47:24,240 t haipo, lakini kamwe aliiambia mfumo wa uendeshaji 744 00:47:24,240 --> 00:47:26,750 kwamba hawakuwa na haja ya kuwa kumbukumbu tena. 745 00:47:26,750 --> 00:47:30,430 Na kabla ya muda mrefu, kwa pset 4 au 5 tutaweza kuvipa wewe na programu inayoitwa Valgrind, 746 00:47:30,430 --> 00:47:34,160 ambayo ni sawa katika roho kwa GDB katika kwamba ni got kiasi fulani ya interface arcane, 747 00:47:34,160 --> 00:47:35,750 lakini kusudi lake katika maisha ni kukusaidia. 748 00:47:35,750 --> 00:47:39,380 Na Valgrind ni mpango huo katika siku za baadaye kutafuta mipango yako 749 00:47:39,380 --> 00:47:42,550 kuangalia kwa uvujaji kumbukumbu, kama kutoka GetString au malloc, 750 00:47:42,550 --> 00:47:47,800 ambayo tutaweza kuanza kutumia zaidi ya yote kama sisi kuacha kutumia maktaba CS50 kama mengi. 751 00:47:47,800 --> 00:47:53,030 Sisi hatimaye sasa kuwa na aina ya msamiati na aina ya mtindo wa akili katika nadharia 752 00:47:53,030 --> 00:47:55,170 na katika kutatua mpango kuvunjwa. 753 00:47:55,170 --> 00:47:59,410 >> Hivyo katika mpango huu kuvunjwa, wabadilishane kazi ndani ya kubadilishana, 754 00:47:59,410 --> 00:48:05,280 lakini kamwe kweli kazi katika kuu kwa sababu kuu kupita katika x na y, wanakumbuka, 755 00:48:05,280 --> 00:48:07,260 na wale zimepitishwa na maadili, hivyo kusema. 756 00:48:07,260 --> 00:48:09,330 Nakala za wamepewa wabadilishane. 757 00:48:09,330 --> 00:48:12,520 Na mwisho wa kubadilishana, a na b alikuwa kweli imekuwa kubadilishana, 758 00:48:12,520 --> 00:48:16,120 lakini bila shaka x na y, kama sisi kujadiliwa siku ya Jumatatu, isingekuwa. 759 00:48:16,120 --> 00:48:19,940 Hivyo napendekeza katika kijani hapa kwamba hii ni kweli suluhisho hapa. 760 00:48:19,940 --> 00:48:22,640 Na kweli, basi mimi hoja nyota wangu tu kuwa thabiti 761 00:48:22,640 --> 00:48:24,440 hata ingawa, tena, functionally hii haijalishi. 762 00:48:24,440 --> 00:48:28,730 Katika wiki baadaye tutaweza kueleza lini na kwa nini ni gani jambo. 763 00:48:28,730 --> 00:48:30,600 Hivyo katika kijani sasa ni ufumbuzi. 764 00:48:30,600 --> 00:48:33,700 Kusema ukweli, inaonekana sana nzima messier kwa sababu mimi na wote wa nyota hizi. 765 00:48:33,700 --> 00:48:35,380 Hebu kumweka nje jambo moja. 766 00:48:35,380 --> 00:48:40,040 line ya juu hapa ambapo anasema int * a na b int * 767 00:48:40,040 --> 00:48:42,820 ni kimsingi kufanya kitu kimoja kama daima ina. 768 00:48:42,820 --> 00:48:47,070 Ni kutangaza hoja 2 au vigezo wabadilishane, 769 00:48:47,070 --> 00:48:49,940 ya kwanza ambayo ni pointer int walioitwa, 770 00:48:49,940 --> 00:48:53,100 pili ambayo ni ya pointer int kuitwa b. 771 00:48:53,100 --> 00:48:55,770 Kitu tu kwamba ni mpya katika hatua hii ni ukweli kwamba kuna nyota huko. 772 00:48:55,770 --> 00:48:59,340 >> Hiyo ina maana gani? si int, b si int. 773 00:48:59,340 --> 00:49:04,100 ni anuani ya int na b ni anuani ya int tofauti. 774 00:49:04,100 --> 00:49:06,980 Chini hapa, hii ni pale ambapo mimi kukubali C anapata utata. 775 00:49:06,980 --> 00:49:09,790 Sasa sisi ni kutumia nyota, lakini ina maana tofauti katika muktadha huu. 776 00:49:09,790 --> 00:49:13,150 Kwa sababu sisi siyo kutangaza kuyatumia kama sisi ni hapa juu, 777 00:49:13,150 --> 00:49:15,500 hapa sisi ni dereferencing mambo. 778 00:49:15,500 --> 00:49:21,520 Basi kitaalam, nyota katika muktadha huu wa mstari wa kwanza, wa pili, na wa tatu ndani ya kubadilishana 779 00:49:21,520 --> 00:49:24,560 ni operator dereference, ambayo ina maana tu kwenda huko. 780 00:49:24,560 --> 00:49:27,400 Hivyo tu kama kidole changu ikifuatiwa mshale h, 781 00:49:27,400 --> 00:49:31,100 * Njia kwenda kwa anwani hiyo na kupata mimi int kwamba pale. 782 00:49:31,100 --> 00:49:34,250 * B njia kwenda anuani na kupita kwangu kuna nini huko. 783 00:49:34,250 --> 00:49:40,730 Basi hebu redraw picha kutoka Jumatatu sasa kutumia stack ya muafaka, 784 00:49:40,730 --> 00:49:43,130 moja chini ambayo ni ya kwenda kuwa kuu, 785 00:49:43,130 --> 00:49:47,600 moja juu ya ambayo ni kwenda kuwa byta, 786 00:49:47,600 --> 00:49:50,880 hivyo kwamba dunia yetu inaonekana, kama Jumatatu, kama hii. 787 00:49:50,880 --> 00:49:53,620 Hapa ni chunk ya kumbukumbu kwamba kuu ni kwenda kutumia. 788 00:49:53,620 --> 00:49:56,520 >> Kumbuka kutoka Jumatatu kwamba mpango tu alikuwa vigezo 2, 789 00:49:56,520 --> 00:50:01,930 mtu mmoja aitwaye x na mtu mmoja aitwaye y, na mimi alikuwa na kuweka namba 1 na 2 hapo. 790 00:50:01,930 --> 00:50:06,580 Sasa wakati mimi kuwaita wabadilishane kama mimi alifanya juu ya Jumatatu, 791 00:50:06,580 --> 00:50:11,000 hapo awali wakati mimi kutumika version nyekundu ya mpango huu, ambayo inaonekana kama hii, 792 00:50:11,000 --> 00:50:17,470 I got vigezo 2, b na, na ni nini sisi kuandika hapa na hapa? 793 00:50:17,470 --> 00:50:21,160 Tu 1 na 2, literally nakala za x na y. 794 00:50:21,160 --> 00:50:23,070 Leo sisi mabadiliko hayo. 795 00:50:23,070 --> 00:50:28,510 Leo badala ya kupita katika ints na b tunakwenda kupita katika anwani 2. 796 00:50:28,510 --> 00:50:34,290 Wale anwani kutokea kwa uhakika na ints, lakini wale anwani si ints wenyewe. 797 00:50:34,290 --> 00:50:37,330 Wao ni anwani. Ni kama anwani ya posta badala yake. 798 00:50:37,330 --> 00:50:40,580 Hivyo sasa tunahitaji tu kutoa mwenyewe kidogo zaidi kwa undani juu ya screen. 799 00:50:40,580 --> 00:50:43,250 Hii ni kumbukumbu ya kompyuta yangu kama ni kuwa siku zote. 800 00:50:43,250 --> 00:50:45,120 Sasa tunahitaji baadhi holela hesabu ya mfuko huo. 801 00:50:45,120 --> 00:50:50,580 Basi hebu kusema tu, tu kwa bahati, kwamba hii ni kumbukumbu ya anuani 123, 124. 802 00:50:50,580 --> 00:50:55,660 Hebu tu kusema hii ni 125, hii ni 126, na kadhalika, lakini hiyo ni kabisa holela. 803 00:50:55,660 --> 00:50:58,590 Sisi tu haja ya baadhi ya mpango wa nambari katika kumbukumbu yangu. 804 00:50:58,590 --> 00:51:04,030 Hivyo sasa wakati mimi kwa kweli kupita katika x na y, Sitakuja kupita katika x na y; 805 00:51:04,030 --> 00:51:08,400 Mimi naenda kupita katika anwani ya posta, ili kuzungumza, ya x na y ya 806 00:51:08,400 --> 00:51:11,870 ili kile anapata kuhifadhiwa hapa na hapa ni si 1 na 2, 807 00:51:11,870 --> 00:51:16,030 lakini kama unaweza kuona Nakala yangu ndogo, nini anapata kupita hapa na hapa? 808 00:51:16,030 --> 00:51:23,340 [Inaudible mwanafunzi majibu] >> Hasa. 123 anapata kuweka hapa na 124 anapata kuweka hapa. 809 00:51:23,340 --> 00:51:28,910 >> Sasa, kwa sababu mimi kutumika nyota katika njia hii ya kwanza kabisa line up hapa kwa juu, 810 00:51:28,910 --> 00:51:34,340 mpango wangu tu anajua kwamba 123 na 124, ingawa wao ni wazi integers 811 00:51:34,340 --> 00:51:40,160 kwamba binadamu yeyote anaweza taarifa, wanapaswa kufasiriwa kama anwani, nambari anwani. 812 00:51:40,160 --> 00:51:43,250 Wao si katika na wenyewe ints, wao uko anwani, 813 00:51:43,250 --> 00:51:46,120 na kwamba kwa sababu mimi waziwazi kuweka nyota huko. 814 00:51:46,120 --> 00:51:51,360 Hivyo sasa katika line yangu ya kwanza, ya pili, na wa tatu wa code halisi kile kinachotokea hapa? 815 00:51:51,360 --> 00:51:53,380 Hebu kuteka wengine wa picha. 816 00:51:53,380 --> 00:51:56,980 TMP ni kama ilikuwa siku ya Jumatatu. Hakuna kitu maalum kuhusu TMP. 817 00:51:56,980 --> 00:52:03,060 Ni haki ya mitaa 32 bits variable, na ndani ya kwamba mimi inaonekana kuhifadhi thamani ya *. 818 00:52:03,060 --> 00:52:08,580 Sasa, kama mimi tu alisema TMP = a, gani mimi kuweka hapa? >> [Mwanafunzi] 123. 819 00:52:08,580 --> 00:52:10,370 123. Lakini si kwamba nini mimi kufanya. 820 00:52:10,370 --> 00:52:13,670 Mimi kusema TMP = * a. Star njia kwenda huko. 821 00:52:13,670 --> 00:52:19,370 Hivyo hapa ni, 123. Jinsi gani mimi kwenda huko? Kujifanya kama kuna mshale. 822 00:52:19,370 --> 00:52:24,460 Naam, kuna ni, 1. Basi nini anapata kuhifadhiwa katika TMP, inaonekana? 1 tu. 823 00:52:24,460 --> 00:52:29,620 Hivyo kwa maneno mengine, TMP ni * a, * njia kwenda kwa anwani hiyo kwa sasa ni katika, 824 00:52:29,620 --> 00:52:31,320 ambayo ni inaonekana 123. 825 00:52:31,320 --> 00:52:33,910 >> Okay, hapa sisi ni katika eneo 123, naona idadi 1, 826 00:52:33,910 --> 00:52:35,670 hivyo mimi nina kwenda kuweka namba 1 hapo. 827 00:52:35,670 --> 00:52:39,020 Sasa nini mimi katika mstari 2, * a = * b? 828 00:52:39,020 --> 00:52:44,570 Hii moja ni kidogo zaidi kushiriki kwa sababu sasa ni nini? Ni 123. 829 00:52:44,570 --> 00:52:50,220 Hivyo * ni wapi? Haki ambapo nilikuwa kabla. Hivyo kwenda huko. Sawa. 830 00:52:50,220 --> 00:52:53,420 Sasa, mwishowe, na kisha hatimaye huu utaanza kufanya akili, hopefully, 831 00:52:53,420 --> 00:53:00,280 * B ina maana nini katika b? 124. Kwa hiyo mimi haja ya kwenda huko, ambayo ni 2. 832 00:53:00,280 --> 00:53:03,430 Basi je, mimi kuweka wapi? 833 00:53:03,430 --> 00:53:10,100 2 huenda katika hapa kwa sababu * b huenda katika *. Hivyo mimi itabidi kufanya hivyo. 834 00:53:10,100 --> 00:53:13,120 Na unaweza tayari kuona, pengine, kwamba sisi ni hivyo karibu sana 835 00:53:13,120 --> 00:53:17,710 kutatua hayo ya kijinga, rahisi tatizo kikamilifu, kwa mara ya kwanza 836 00:53:17,710 --> 00:53:20,920 kwa sababu sasa bado tuna kumbukumbu ya kile x ilikuwa, 837 00:53:20,920 --> 00:53:23,230 tuna nakala 2, admittedly, ya y, 838 00:53:23,230 --> 00:53:25,850 lakini mstari 3 sasa anasema * b. 839 00:53:25,850 --> 00:53:31,080 Hivyo hapa ni b. * B njia kwenda huko. Hivyo ambapo ni mahali 124? 840 00:53:31,080 --> 00:53:35,560 Ni dhahiri hapa. Basi je, mimi kuweka hapa? Ni wazi, TMP. 841 00:53:35,560 --> 00:53:39,600 Hivyo sasa mimi kufanya hili. Hivyo nina 1 hapa na 2 hapa. 842 00:53:39,600 --> 00:53:43,560 Na sasa nini kuhusu haya yote, 123, 124, na 1? 843 00:53:43,560 --> 00:53:47,910 Haraka kama byta anarudi, kumbukumbu hii ni nzuri kama waliopotea 844 00:53:47,910 --> 00:53:51,070 kwa sababu haraka kama byta anarudi, mfumo wa uendeshaji 845 00:53:51,070 --> 00:53:54,190 ni huru kutumia kwamba kumbukumbu tena katika siku zijazo. 846 00:53:54,190 --> 00:53:58,870 Tu kuu ya kumbukumbu chini ya hii stack kinachojulikana vijiti kuzunguka. 847 00:53:58,870 --> 00:54:01,470 >> Na hivyo sisi hatimaye kuwa sasa version kazi. 848 00:54:01,470 --> 00:54:06,310 Hebu kwenda katika swap.c, na taarifa zifuatazo. 849 00:54:06,310 --> 00:54:11,280 Katika juu ya mpango nimekuwa iliyopita mfano wangu kuwa int * a na int * b. 850 00:54:11,280 --> 00:54:15,000 Hivyo kitu pekee mimi iliyopita na kwenda kutoka nyekundu, ambayo ilikuwa mbaya, kwa kijani, ambayo ni nzuri, 851 00:54:15,000 --> 00:54:17,350 ni mimi aliongeza nyota hizi leo. 852 00:54:17,350 --> 00:54:21,520 Lakini kisha chini hapa katika wabadilishane yenyewe nilikuwa na nakala, kuweka nini ilikuwa tu kwenye slide. 853 00:54:21,520 --> 00:54:24,140 Nina nyota hapa, nyota hapa - kwamba mechi mfano - 854 00:54:24,140 --> 00:54:27,930 na kisha mambo yote haya sasa kuwa na nyota isipokuwa kwa TMP 855 00:54:27,930 --> 00:54:30,680 kwa sababu matumizi ya variable muda, kuna kitu kipya huko. 856 00:54:30,680 --> 00:54:33,040 Mimi tu haja ya kuhifadhi muda kwa int. 857 00:54:33,040 --> 00:54:34,820 Hivyo hatuna haja nyota huko. 858 00:54:34,820 --> 00:54:39,310 Sisi tu haja ya nyota ili tuweze kuvuka mipaka ya aina hii ya holela 859 00:54:39,310 --> 00:54:42,900 kati ya hizi muafaka 2 katika kumbukumbu ya kompyuta yangu. 860 00:54:42,900 --> 00:54:45,630 Lakini jambo moja mwisho kubadilika, na unaweza kuwa glimpsed tayari. 861 00:54:45,630 --> 00:54:48,810 Gani nyingine mstari ni wazi tofauti na sasa? >> [Mwanafunzi] & x. 862 00:54:48,810 --> 00:54:53,270 >> Yeah, hivyo ni 25 mstari wa mwisho wa code mimi haja ya kubadili kwa hii kazi. 863 00:54:53,270 --> 00:54:58,360 wiki iliyopita na hata juu ya Jumatatu mstari 25 inaonekana kama hii, wabadilishane x na y, 864 00:54:58,360 --> 00:55:02,020 na hii mara tu kuvunjwa kwa sababu kama wewe kusema byta (x, y) 865 00:55:02,020 --> 00:55:05,660 wewe ni kutoa nakala za x na y wabadilishane, basi ni kufanya jambo yake, 866 00:55:05,660 --> 00:55:09,080 lakini wewe ni kweli kamwe kubadilisha x na y yenyewe. 867 00:55:09,080 --> 00:55:12,880 Hivyo hata kama wewe sijawahi kuona tabia hii kabla na ampersand katika kanuni, 868 00:55:12,880 --> 00:55:15,860 tu kuchukua nadhani. Je ampersand kufanya, inaonekana? 869 00:55:15,860 --> 00:55:17,890 [Mwanafunzi] Takes anuani. >> Takes anuani. 870 00:55:17,890 --> 00:55:21,160 Hivyo ni kusema ampersand nipe anuani ya x. 871 00:55:21,160 --> 00:55:25,590 Nani anajua ambapo ni? Hutokea kwa kuwa 123. Mimi sijali. Tu nipe anuani ya x. 872 00:55:25,590 --> 00:55:28,340 & Y maana nipe anuani ya y. 873 00:55:28,340 --> 00:55:34,450 Na katika hadithi ni kwamba hatua kikamilifu sambamba na picha tulianzisha wakati iliyopita. 874 00:55:34,450 --> 00:55:38,310 >> Hivyo mimi itabidi kukubali kuyatumia, hakika kwa mimi wakati mimi kwanza kuanza kujifunza hii, 875 00:55:38,310 --> 00:55:40,570 walikuwa dhahiri moja ya mambo ya gumu wrap akili yangu kote. 876 00:55:40,570 --> 00:55:43,760 Lakini kutambua, hasa kama sisi kuendelea kucheza na aina hii ya mambo, 877 00:55:43,760 --> 00:55:48,030 kama wewe kuvunja chini kwa aina hizi super rahisi ya kielimu uninteresting matatizo 878 00:55:48,030 --> 00:55:52,270 ya kusonga tu idadi kote, jibu mkanganyiko na kuyatumia 879 00:55:52,270 --> 00:55:56,590 kweli inaweza kuwa derived kutoka mechanics haya ya msingi sana. 880 00:55:56,590 --> 00:55:59,070 Hapa ni anuani. Kwenda huko na nyota. 881 00:55:59,070 --> 00:56:03,830 Au kinyume chake, hapa ampersand. Kufikiri nini anwani kweli ni. 882 00:56:03,830 --> 00:56:06,270 Wote haki. 883 00:56:06,270 --> 00:56:09,000 Hivyo ambapo ni aina ya kumbukumbu hii kuja kutoka? 884 00:56:09,000 --> 00:56:12,360 Tumepata picha hii michache ya nyakati, na mimi kuendelea kuahidi tutaweza kuja nyuma yake, 885 00:56:12,360 --> 00:56:14,920 lakini hapa ni uwakilishi wa kumbukumbu ya kompyuta yako 886 00:56:14,920 --> 00:56:17,420 hiyo kidogo zaidi kuliko labeled ubao wetu hapa ni. 887 00:56:17,420 --> 00:56:21,590 Nakala sehemu ya juu inawakilisha nini kwa heshima na mpango wako? 888 00:56:21,590 --> 00:56:26,090 [Inaudible mwanafunzi majibu] >> Samahani? Sema tena. 889 00:56:26,090 --> 00:56:28,660 [Mwanafunzi] mpango halisi. >> Mpango halisi. 890 00:56:28,660 --> 00:56:32,430 >> Hivyo Clang sekunde 0 na 1s kwa kuwa compiled baada ya kuandika code C na kisha kukimbia 891 00:56:32,430 --> 00:56:35,910 na kuzalisha ncha sekunde 0 na 1s up kupata tucked huko katika kumbukumbu 892 00:56:35,910 --> 00:56:38,570 sababu wakati wewe bonyeza mara mbili icon kwenye Mac au PC yako 893 00:56:38,570 --> 00:56:43,010 au kukimbia amri kama Mario katika haraka yako, sekunde 0 yako na 1s kutoka disk 894 00:56:43,010 --> 00:56:45,700 kupata kubeba katika kumbukumbu ili kompyuta inaweza kuendesha yao 895 00:56:45,700 --> 00:56:47,540 na kuitekeleza kwa haraka zaidi. 896 00:56:47,540 --> 00:56:50,880 Hivyo initialized data na data uninitialized, sisi si kuzungumza mengi juu ya hizo, 897 00:56:50,880 --> 00:56:52,420 lakini wale ni tu kimataifa vigezo. 898 00:56:52,420 --> 00:56:54,710 Initialized maana vigezo kimataifa uliyonipatia maadili; 899 00:56:54,710 --> 00:56:59,300 uninitialized maana vigezo kimataifa kwamba hawakuwa bado kutoa maadili kwa. 900 00:56:59,300 --> 00:57:01,900 Kisha kuna vigezo mazingira haya ambayo mimi itabidi kabisa kupitisha mkono wangu, 901 00:57:01,900 --> 00:57:04,860 lakini wao wapo na kuwa maduka mambo kama user jina lako 902 00:57:04,860 --> 00:57:08,090 na mengine ya aina ya maelezo ya chini ya kiwango. 903 00:57:08,090 --> 00:57:12,880 Lakini vipande juiciest ya layout kumbukumbu yako ni hiki kitu kinachoitwa stack na lundo. 904 00:57:12,880 --> 00:57:17,470 stack tena, kwa kuwa wazi, ni kumbukumbu kuwa alitumia kila kazi ni wito, 905 00:57:17,470 --> 00:57:19,710 wakati wowote kuna vigezo mitaa 906 00:57:19,710 --> 00:57:22,120 na wakati wowote kuna vigezo kuwa alipita kote. 907 00:57:22,120 --> 00:57:24,490 Yote ambayo hufanyika katika stack. 908 00:57:24,490 --> 00:57:29,570 lundo sisi si aliongea juu, lakini kuchukua nadhani ambaye anatumia lundo. 909 00:57:31,120 --> 00:57:32,690 Tu chunk tofauti ya kumbukumbu. 910 00:57:32,690 --> 00:57:36,620 Hufanyika kwa kuwa inayotolewa hapa kwa juu, lakini hiyo ni holela pictorial mkataba. 911 00:57:36,620 --> 00:57:41,670 Nani amefunguliwa kutumia kumbukumbu kutoka lundo kwa wiki? 912 00:57:41,670 --> 00:57:44,830 Ni kitaalam wewe lakini si moja kwa moja. >> [Mwanafunzi] GetString. 913 00:57:44,830 --> 00:57:47,950 GetString na malloc. Hivyo hapa ni tofauti ya kimsingi. 914 00:57:47,950 --> 00:57:51,300 >> Unajua kwa wiki chache zilizopita kwamba kama unahitaji kumbukumbu, tu kutangaza kutofautiana. 915 00:57:51,300 --> 00:57:54,560 Kama unahitaji kura ya kumbukumbu, kutangaza haki ndani ya safu ya kazi yako. 916 00:57:54,560 --> 00:57:59,620 Lakini tatizo tumekuwa naendelea yanayowakabili ni kama wewe kutangaza vigezo ndani ya nchi ndani ya utendaji, 917 00:57:59,620 --> 00:58:05,340 haraka kama anarudi kazi, nini kinatokea kwa kumbukumbu na vigezo wale? 918 00:58:05,340 --> 00:58:09,620 Tu aina ya ni tena kwako, sawa? Ni tu kutoweka aina ya conceptually. 919 00:58:09,620 --> 00:58:13,950 Ni bado kuna kimwili, ni wazi, lakini ni hakuna tena haki yako ya kutumia. 920 00:58:13,950 --> 00:58:17,160 Hii ni wazi tatizo kama unataka kuandika kazi katika maisha 921 00:58:17,160 --> 00:58:20,440 kwamba kweli kutenga kumbukumbu na si kutoa ni nyuma mara moja. 922 00:58:20,440 --> 00:58:24,180 Uchunguzi katika kumweka: kusudi GetString katika maisha ni kuwa hakuna wazo mapema 923 00:58:24,180 --> 00:58:26,390 jinsi kubwa ya kamba nitakacho andika katika keyboard, 924 00:58:26,390 --> 00:58:30,390 lakini ni got kuwa na uwezo wa kutenga kumbukumbu kushikilia Daudi au hujambo 925 00:58:30,390 --> 00:58:32,860 au insha nzima kwamba mtumiaji anaweza kuwa typed in 926 00:58:32,860 --> 00:58:35,280 Hivyo GetString imekuwa ikitumia malloc. 927 00:58:35,280 --> 00:58:38,910 Malloc hiyo lazima kutumia si stack; 928 00:58:38,910 --> 00:58:40,770 badala ni kutumia kitu kinachoitwa lundo. 929 00:58:40,770 --> 00:58:44,430 Kuna kitu tofauti kuhusu kumbukumbu. Ni si kwa kasi au polepole au kitu kama hicho. 930 00:58:44,430 --> 00:58:46,570 Ni tu kimwili katika eneo tofauti. 931 00:58:46,570 --> 00:58:50,120 >> Lakini utawala ni kwamba kumbukumbu hiyo zilizotengwa katika kifusi 932 00:58:50,120 --> 00:58:56,180 kamwe ataondolewa wewe mpaka kuwaita - kuchukua nadhani - bure. 933 00:58:56,180 --> 00:59:00,510 Kwa kulinganisha, kumbukumbu yoyote ya kuuliza kwa juu ya stack na tu kutangaza safu 934 00:59:00,510 --> 00:59:03,320 au kutangaza variable kama tumekuwa kufanya kwa wiki, 935 00:59:03,320 --> 00:59:05,640 kwamba kwa default inaishia kwenye stack. 936 00:59:05,640 --> 00:59:09,550 Na kwamba kazi kubwa 90% ya muda, lakini juu ya matukio hayo rarer 937 00:59:09,550 --> 00:59:12,470 ambapo unataka kutenga kumbukumbu na kushika ni kuzunguka, 938 00:59:12,470 --> 00:59:14,730 basi unahitaji kutumia kazi kama malloc. 939 00:59:14,730 --> 00:59:19,370 Au tuna kutumika kazi kama GetString, ambayo kwa upande anatumia malloc. 940 00:59:19,370 --> 00:59:23,300 Hebu angalia ambapo hii inaweza kuvunja chini na kisha kuchukua Peek saa Binky. 941 00:59:23,300 --> 00:59:25,820 Tutaweza kuja nyuma na kwamba katika siku zijazo. 942 00:59:25,820 --> 00:59:29,270 Hapa ni super rahisi mpango kwamba katika mistari ya kwanza 2 anafanya nini? 943 00:59:29,270 --> 00:59:33,460 Katika lugha ya Kiingereza, je, hizi kwanza mistari 2 ya maadili ya kufanya ndani ya kuu? 944 00:59:33,460 --> 00:59:35,600 [Inaudible mwanafunzi majibu] 945 00:59:35,600 --> 00:59:37,880 Makini. Haina nipe anuani ya x au y. 946 00:59:37,880 --> 00:59:41,840 [Mwanafunzi] Hutoa kuyatumia kwa ints. >> Good. Nipe kuyatumia 2 kwa integers. 947 00:59:41,840 --> 00:59:45,130 Kwa maneno mengine, nipe chunks 2 ya kumbukumbu kwamba mimi kuendelea kuchora leo, 948 00:59:45,130 --> 00:59:46,950 hata mimi erased sasa, kama miraba. 949 00:59:46,950 --> 00:59:50,000 Nipe chunks 2 ya kumbukumbu, mtu mmoja aitwaye x, mtu mmoja aitwaye y - 950 00:59:50,000 --> 00:59:54,320 kabla ya hapo nilikuwa akawaita s na t - na nini ni ya aina ya kwamba chunk ya kumbukumbu? 951 00:59:54,320 --> 00:59:57,160 Ni kwenda kuhifadhi anwani. 952 00:59:57,160 --> 00:59:59,110 Ni aina ya * int. 953 00:59:59,110 --> 01:00:01,630 >> Hivyo anuani ya int hatimaye kuishi katika x, 954 01:00:01,630 --> 01:00:03,860 anuani ya int hatimaye kuishi katika y, 955 01:00:03,860 --> 01:00:08,460 lakini awali nini ndani ya x na y? Nani anajua? Takataka maadili. 956 01:00:08,460 --> 01:00:10,180 Ina chochote cha kufanya na kuyatumia. 957 01:00:10,180 --> 01:00:12,720 Kama sisi si kuweka kitu pale, ambaye anajua nini ni kweli huko? 958 01:00:12,720 --> 01:00:18,950 Sasa, x. Nini kinatokea hapa? Hii ni legit sasa kwa sababu x ni pointer. Ni * int. 959 01:00:18,950 --> 01:00:21,870 Hivyo kwamba maana siwezi kuweka katika x anuani ya baadhi chunk ya kumbukumbu. 960 01:00:21,870 --> 01:00:25,120 Je malloc kurudi? Perfect, kuirudisha anwani, 961 01:00:25,120 --> 01:00:28,510 anuani ya Byte kwanza katika chunk nzima ya kumbukumbu. 962 01:00:28,510 --> 01:00:31,140 Jinsi ka wengi ni hii inaonekana kugawa, kwa mfano, katika appliance? 963 01:00:31,140 --> 01:00:33,510 Nini ukubwa wa int? 4. 964 01:00:33,510 --> 01:00:36,600 Kama unafikiri nyuma kwa wiki 1, siyo super muhimu daima kukumbuka kwamba, 965 01:00:36,600 --> 01:00:38,870 lakini katika kesi hii ni muhimu kujua, ka 4. 966 01:00:38,870 --> 01:00:41,770 Hivyo hii ni kugawa juu ya lundo ka 4 967 01:00:41,770 --> 01:00:46,110 na ni kurudi anuani ya kwanza kwangu kiholela. 968 01:00:46,110 --> 01:00:47,700 Sasa, ni nini x kufanya? 969 01:00:47,700 --> 01:00:52,200 * X = 42 ni kufanya nini? 970 01:00:52,200 --> 01:00:57,150 Kama katika hatua hii kwa hadithi tuna x, ambayo inaonekana kama hii na thamani ya baadhi ya takataka, 971 01:00:57,150 --> 01:01:04,120 hii ni sasa na thamani y baadhi ya takataka, sasa katika mstari 3 nimekuwa zilizotengwa ka 4. 972 01:01:04,120 --> 01:01:06,950 Hii picha kimsingi inaonekana kama hii. 973 01:01:06,950 --> 01:01:12,010 Au zaidi hasa, kama hii ni holela anuani 123, hii ni nini hadithi yetu sasa inaonekana kama. 974 01:01:12,010 --> 01:01:23,940 * X = 42 sasa maana yake nini? Hiyo ina maana kwenda 123 anuani na kuweka namba 42 hapo. 975 01:01:23,940 --> 01:01:26,220 Sihitaji kuteka mistari haya kwa sababu sisi siyo kufanya masharti. 976 01:01:26,220 --> 01:01:29,480 >> Mimi lazima tu yaliyoandikwa ni kama hii, na kwa ajili tu ya maandamano, 977 01:01:29,480 --> 01:01:33,240 42 kama aina int ya inachukua hadi mengi ya nafasi, ka 4. 978 01:01:33,240 --> 01:01:35,960 Basi hiyo ni nini kilichotokea huko, lakini kuna tatizo sasa. 979 01:01:35,960 --> 01:01:40,580 * Y = 13. Nini kitatokea hapa? 980 01:01:40,580 --> 01:01:46,470 Tatizo ni * y katika dunia yetu kilichorahisishwa tu ina maana kwenda anuani katika y. 981 01:01:46,470 --> 01:01:48,590 Nini katika y? Ni baadhi ya thamani ya takataka. 982 01:01:48,590 --> 01:01:53,150 Basi hebu kudhani kwamba thamani ya takataka ni 5551212, kitu mambo kama hayo. 983 01:01:53,150 --> 01:01:56,750 * Y njia kwenda kushughulikia 5,551,212. 984 01:01:56,750 --> 01:02:00,450 Hiyo kama zaidi hapa. Ni haipo, kwa mfano. 985 01:02:00,450 --> 01:02:05,310 Hivyo * y anapata njia 13 mimi nina kujaribu kuteka 13 hapa. Ni haipo. 986 01:02:05,310 --> 01:02:08,790 Nimekuwa ilizidi sehemu ya ubao. Nini mimi kupata? 987 01:02:08,790 --> 01:02:14,930 Hiyo cryptic ujumbe segmentation kosa kwa sababu mimi nina kujaribu kuweka katika kumbukumbu 988 01:02:14,930 --> 01:02:19,470 thamani kama 13 katika eneo ambalo haipo. 989 01:02:19,470 --> 01:02:23,900 wengine wa mpango ili kazi sawa, lakini hadi kwamba hatua hiyo haina. 990 01:02:23,900 --> 01:02:25,350 Basi hebu jaribu kuwaambia hadithi hii. 991 01:02:25,350 --> 01:02:27,830 Tutaweza kurudi mara moja kwamba tumekuwa aliyesema kuhusu hex. 992 01:02:27,830 --> 01:02:30,290 Turudi kwa hii na kuhitimisha na hii kitu inayoitwa Binky, 993 01:02:30,290 --> 01:02:33,710 ambayo wanakumbuka ni profesa Stanford kukaa nyumbani kucheza na claymation, 994 01:02:33,710 --> 01:02:36,380 kuwaambia hadithi ya mpango hasa kwamba huo. 995 01:02:36,380 --> 01:02:40,580 Ni tu kuhusu 3 dakika ya muda mrefu. Hapa tuna Binky. 996 01:02:40,580 --> 01:02:45,030 [Kiume msemaji kwenye video] Hey Binky, kuamka. Ni wakati kwa ajili ya kujifurahisha pointer. 997 01:02:45,030 --> 01:02:50,080 [Binky] Nini hiyo? Jifunze kuhusu kuyatumia? Oh, GOODY! 998 01:02:50,080 --> 01:02:53,700 [Msemaji kiume] Naam, kwa kuanza, mimi nadhani sisi ni kwenda haja ya kuyatumia wanandoa. 999 01:02:53,700 --> 01:02:57,890 >> [Binky] Sawa. Kanuni hii inatenga kuyatumia 2 ambayo inaweza kumweka kwa integers. 1000 01:02:57,890 --> 01:03:02,220 [Kiume msemaji] Sawa. Naam, naona kuyatumia 2, lakini hawaonekani kuwa akizungumzia chochote. 1001 01:03:02,220 --> 01:03:05,550 [Binky] Hiyo ni haki. Awali, kuyatumia hawana uhakika na kitu chochote. 1002 01:03:05,550 --> 01:03:09,270 mambo ya wao wanaongelea wanaitwa pointees, na kuweka yao juu ni hatua tofauti. 1003 01:03:09,270 --> 01:03:12,330 [Kiume msemaji] Oh, haki, haki. Mimi nilijua kwamba. pointees ni tofauti. 1004 01:03:12,330 --> 01:03:15,630 Eri, hivyo ni jinsi gani unaweza kutenga pointee? 1005 01:03:15,630 --> 01:03:21,510 [Binky] Sawa. Kanuni hii inatenga mpya integer pointee, na sehemu hii seti x kwa uhakika na hilo. 1006 01:03:21,510 --> 01:03:23,500 [Kiume msemaji] Hey, kwamba inaonekana zaidi. 1007 01:03:23,500 --> 01:03:26,030 Hivyo kufanya hivyo kufanya kitu. >> [Binky] Sawa. 1008 01:03:26,030 --> 01:03:30,300 Mimi itabidi dereference x pointer kuhifadhi namba 42 katika pointee wake. 1009 01:03:30,300 --> 01:03:34,410 Kwa hila hii mimi itabidi wand yangu ya uchawi wa dereferencing. 1010 01:03:34,410 --> 01:03:38,610 [Kiume msemaji] wand yako uchawi wa dereferencing? Hiyo ni kubwa. 1011 01:03:38,610 --> 01:03:44,230 [Binky] Hii ni nini code inaonekana kama. Mimi itabidi kuweka idadi na ... [Popping sound] 1012 01:03:44,230 --> 01:03:46,100 [Kiume msemaji] Hey kuangalia, kuna unaendelea. 1013 01:03:46,100 --> 01:03:50,990 Kufanya hivyo dereference juu ya x ifuatavyo arrow kupata pointee yake, 1014 01:03:50,990 --> 01:03:53,230 katika kesi hii ya kuhifadhi 42 katika huko. 1015 01:03:53,230 --> 01:03:57,630 Hey, jaribu kutumia na kuhifadhi idadi 13 kupitia pointer nyingine, y. 1016 01:03:57,630 --> 01:04:03,250 [Binky] Sawa. Mimi itabidi kwenda juu hapa y na kupata namba 13 ya kuanzisha 1017 01:04:03,250 --> 01:04:08,360 na kisha kuchukua wand ya dereferencing na tu ... [Buzzing sound] Ho! 1018 01:04:08,360 --> 01:04:10,980 [Kiume msemaji] Oh hey, kwamba hawakuwa na kazi. 1019 01:04:10,980 --> 01:04:14,870 >> Sema, Binky, sidhani dereferencing y ni wazo nzuri 1020 01:04:14,870 --> 01:04:17,880 kwa sababu ya kuanzisha pointee ni hatua tofauti 1021 01:04:17,880 --> 01:04:19,850 na sidhani sisi milele alifanya hivyo. 1022 01:04:19,850 --> 01:04:21,770 [Binky] Hmm, nzuri uhakika. 1023 01:04:21,770 --> 01:04:26,640 [Kiume msemaji] Yeah. Sisi zilizotengwa y pointer lakini sisi kamwe kuweka kwa uhakika na pointee. 1024 01:04:26,640 --> 01:04:28,780 [Binky] Hmm, sana wachunguaji. 1025 01:04:28,780 --> 01:04:30,690 [Kiume msemaji] Hey, wewe ni kuangalia nzuri huko, Binky. 1026 01:04:30,690 --> 01:04:34,160 Je, unaweza kurekebisha ili y pointi pointee sawa kama x? >> [Binky] Uhakika. 1027 01:04:34,160 --> 01:04:37,100 Mimi itabidi kutumia wand yangu ya uchawi wa zoezi pointer. 1028 01:04:37,100 --> 01:04:39,070 [Kiume msemaji] Ni kwamba kwenda kuwa tatizo kama kabla? 1029 01:04:39,070 --> 01:04:40,840 [Binky] Hapana, hii haina kugusa pointees. 1030 01:04:40,840 --> 01:04:44,780 Ni tu mabadiliko moja pointer kwa uhakika na kitu sawa kama mwingine. [Popping sound] 1031 01:04:44,780 --> 01:04:48,570 [Kiume msemaji] Oh, naona. Sasa y pointi kwenye sehemu moja kama x. 1032 01:04:48,570 --> 01:04:51,140 Hivyo kusubiri. Sasa y ni fasta. Ina pointee. 1033 01:04:51,140 --> 01:04:54,520 Hivyo unaweza kujaribu wand ya dereferencing tena kwa kutuma zaidi ya 13. 1034 01:04:54,520 --> 01:04:58,130 [Binky] Uh, okay. Hapa unaendelea. [Popping sound] 1035 01:04:58,130 --> 01:05:01,250 [Kiume msemaji] Hey, kuangalia kwamba. Sasa dereferencing kazi juu y. 1036 01:05:01,250 --> 01:05:05,200 Na kwa sababu kuyatumia wanashiriki kwamba moja pointee, nao wote wawili kuona 13. 1037 01:05:05,200 --> 01:05:06,910 [Binky] Yeah, kugawana. Chochote. 1038 01:05:06,910 --> 01:05:08,880 >> Hivyo ni sisi kwenda kubadili maeneo sasa? 1039 01:05:08,880 --> 01:05:11,420 [Kiume msemaji] Oh kuangalia, tuko nje ya muda. >> [Binky] Lakini - 1040 01:05:11,420 --> 01:05:13,880 [Msemaji kiume] Kumbuka tu sheria pointer 3. 1041 01:05:13,880 --> 01:05:18,630 Idadi 1, muundo wa msingi ni kwamba una pointer na inaelekeza juu ya pointee. 1042 01:05:18,630 --> 01:05:23,120 Lakini pointer na pointee ni tofauti, na makosa ya kawaida ni kuanzisha pointer 1043 01:05:23,120 --> 01:05:25,680 lakini kusahau kuwapa pointee. 1044 01:05:25,680 --> 01:05:29,580 Idadi 2, pointer dereferencing kuanza saa pointer na ifuatavyo mshale wake juu ya 1045 01:05:29,580 --> 01:05:31,060 kupata pointee wake. 1046 01:05:31,060 --> 01:05:34,340 Kama sisi wote kujua, hii kazi tu kama kuna pointee, 1047 01:05:34,340 --> 01:05:36,460 ambayo aina ya anapata nyuma kutawala namba 1. 1048 01:05:36,460 --> 01:05:39,870 Idadi 3, pointer zoezi inachukua moja pointer na hulibadilisha 1049 01:05:39,870 --> 01:05:42,390 kwa uhakika na pointee sawa kama pointer mwingine. 1050 01:05:42,390 --> 01:05:45,890 Hivyo baada ya zoezi, kuyatumia 2 nitawaelekezeni kwa pointee sawa. 1051 01:05:45,890 --> 01:05:47,800 Wakati mwingine kwamba wito kugawana. 1052 01:05:47,800 --> 01:05:50,910 >> Na kwamba ni yote kuna ni kweli. Bye bye-sasa. 1053 01:05:50,910 --> 01:05:55,840 Hii ni Binky. Hii ni CS50. Tutaweza kuona wewe wiki ijayo. [Applause] 1054 01:05:55,840 --> 01:05:59,000 >> [CS50.TV]