1 00:00:00,000 --> 00:00:03,381 >> [Music kucheza] 2 00:00:03,381 --> 00:00:10,626 3 00:00:10,626 --> 00:00:11,610 >> [VIDEO avspelning] 4 00:00:11,610 --> 00:00:13,640 >> Hapo ni uongo. 5 00:00:13,640 --> 00:00:14,380 >> -Kuhusu nini? 6 00:00:14,380 --> 00:00:17,182 >> -Sijui. 7 00:00:17,182 --> 00:00:19,990 >> -Basi Je, sisi kujua? 8 00:00:19,990 --> 00:00:23,145 >> -yaani Katika 9:15, Ray Santoya alikuwa katika ATM. 9 00:00:23,145 --> 00:00:23,644 -Yeah. 10 00:00:23,644 --> 00:00:27,030 Hivyo swali ni, nini yeye kufanya katika 9:16? 11 00:00:27,030 --> 00:00:29,720 >> -Shooting 9 millimeter katika kitu. 12 00:00:29,720 --> 00:00:31,540 Labda aliona sniper. 13 00:00:31,540 --> 00:00:33,412 >> -au Alikuwa akifanya kazi pamoja naye. 14 00:00:33,412 --> 00:00:34,340 >> -Wait. 15 00:00:34,340 --> 00:00:36,200 Kurudi nyuma moja. 16 00:00:36,200 --> 00:00:36,975 >> -Nini Do you see? 17 00:00:36,975 --> 00:00:44,400 18 00:00:44,400 --> 00:00:47,805 >> -Bring Uso wake up screen kamili. 19 00:00:47,805 --> 00:00:48,680 >> -His Glasi. 20 00:00:48,680 --> 00:00:50,060 >> -Kuna Kutafakari. 21 00:00:50,060 --> 00:01:00,455 22 00:01:00,455 --> 00:01:02,280 >> -Ni Nuevitas baseball timu. 23 00:01:02,280 --> 00:01:03,110 Hiyo ni alama zao. 24 00:01:03,110 --> 00:01:05,820 >> -Na Yeye kuzungumza kwa yeyote amevaa koti kwamba. 25 00:01:05,820 --> 00:01:06,670 >> [Mwisho avspelning] 26 00:01:06,670 --> 00:01:07,628 >> DAVID Malan: zote haki. 27 00:01:07,628 --> 00:01:11,210 Hii ni CS50 na hii ni kidogo zaidi ya [inaudible] na ambayo uko 28 00:01:11,210 --> 00:01:12,890 dabbling na tatizo kuweka minne. 29 00:01:12,890 --> 00:01:16,606 Leo tunaanza kwa kuangalia kidogo zaidi undani katika mambo haya kuitwa kuyatumia, 30 00:01:16,606 --> 00:01:18,480 ambayo hata kama ni mada pretty arcane, 31 00:01:18,480 --> 00:01:20,813 zinageuka kuwa itakuja kuwa njia ambayo sisi 32 00:01:20,813 --> 00:01:24,320 Unaweza kuanza kujenga na kukusanyika mipango zaidi ya kisasa. 33 00:01:24,320 --> 00:01:28,150 Lakini sisi alifanya hivyo siku ya Jumatano iliyopita kwa njia ya baadhi claymation kwanza. 34 00:01:28,150 --> 00:01:30,190 Hivyo hii, kukumbuka, ni Binky na sisi alimtumia 35 00:01:30,190 --> 00:01:33,148 kwa kuangalia mpango kwamba si kweli kufanya kitu chochote kuvutia, 36 00:01:33,148 --> 00:01:34,950 lakini haikuwa yatangaza matatizo machache. 37 00:01:34,950 --> 00:01:38,570 Hivyo kuanza leo, kwa nini sio sisi kutembea haraka kwa njia chache ya hatua hizi, 38 00:01:38,570 --> 00:01:41,920 kujaribu distill katika maisha ya binadamu ya nini hasa kinaendelea hapa 39 00:01:41,920 --> 00:01:45,410 na kwa nini hii ni mbaya, na kisha kuondoka na kwa kweli kuanza kujenga kitu 40 00:01:45,410 --> 00:01:46,309 na mbinu hii? 41 00:01:46,309 --> 00:01:48,350 Hivyo hawa ndio kwanza mistari miwili katika mpango huu 42 00:01:48,350 --> 00:01:51,340 na katika suala layman, nini ni mistari hizi mbili kufanya? 43 00:01:51,340 --> 00:01:55,600 Mtu ambaye ni sababu ya starehe kwa nini alitangaza kwenye screen? 44 00:01:55,600 --> 00:01:58,340 45 00:01:58,340 --> 00:02:00,120 Je, ni mistari hizi mbili kufanya? 46 00:02:00,120 --> 00:02:02,070 Siyo kila kitu tofauti na wiki moja, 47 00:02:02,070 --> 00:02:03,611 lakini kuna baadhi ya mwezi alama maalum. 48 00:02:03,611 --> 00:02:04,152 Yeah? 49 00:02:04,152 --> 00:02:05,628 Huko nyuma. 50 00:02:05,628 --> 00:02:07,092 >> Watazamaji: Kutangaza kuyatumia? 51 00:02:07,092 --> 00:02:08,050 DAVID Malan: Sema tena? 52 00:02:08,050 --> 00:02:08,860 Watazamaji: Kutangaza kuyatumia? 53 00:02:08,860 --> 00:02:11,776 DAVID Malan: Kutangaza kuyatumia na hebu kuboresha yake kidogo zaidi. 54 00:02:11,776 --> 00:02:14,050 Watazamaji: [inaudible] anuani x na kisha y. 55 00:02:14,050 --> 00:02:15,300 DAVID Malan: Na kisha kushughulikia. 56 00:02:15,300 --> 00:02:18,550 Hivyo hasa nini sisi ni kufanya ni sisi ni kutangaza vigezo wawili. 57 00:02:18,550 --> 00:02:21,252 Vigezo hivi, ingawa, ni kwenda kuwa wa aina int nyota, ambayo 58 00:02:21,252 --> 00:02:23,210 zaidi hasa maana yake ni wao ni kwenda kuhifadhi 59 00:02:23,210 --> 00:02:26,450 pepe ya int, mtiririko, x na y. 60 00:02:26,450 --> 00:02:27,660 Sasa ni pale maadili yoyote? 61 00:02:27,660 --> 00:02:32,621 Je, kuna anwani halisi yoyote katika hizi vigezo mbili katika hatua hii katika wakati? 62 00:02:32,621 --> 00:02:33,120 Hakuna 63 00:02:33,120 --> 00:02:35,030 Ni tu kinachojulikana maadili takataka. 64 00:02:35,030 --> 00:02:38,120 Kama huna kweli kuwapa kutofautiana, chochote kilichokuwa katika RAM 65 00:02:38,120 --> 00:02:42,224 awali ni kwenda kujaza na zeros na ndio wote wawili wa vigezo hizo. 66 00:02:42,224 --> 00:02:44,140 Lakini sisi bado kujua nini hao na kwamba 67 00:02:44,140 --> 00:02:47,060 kwenda kuwa muhimu kwa nini Binky waliopotea kichwa chake wiki iliyopita. 68 00:02:47,060 --> 00:02:49,980 >> Hivyo hii ilikuwa claymation mwili wa hii 69 00:02:49,980 --> 00:02:53,580 ambapo una vigezo mbili tu, vipande mviringo kidogo ya udongo, 70 00:02:53,580 --> 00:02:57,330 kwamba wanaweza kuhifadhi vigezo, lakini kama ilimalizika mishale kupendekeza, 71 00:02:57,330 --> 00:03:00,640 wao siyo kweli akizungumzia na mahali popote inayojulikana per se. 72 00:03:00,640 --> 00:03:03,670 Hivyo basi tungekuwa na mstari huu, na hii ilikuwa mpya wiki iliyopita, malloc kwa kumbukumbu 73 00:03:03,670 --> 00:03:07,130 mgao, ambayo ni njia tu ya dhana ya kuwaambia mfumo wa uendeshaji, Linux 74 00:03:07,130 --> 00:03:09,750 au Mac OS au Windows, hey, nipe baadhi ya kumbukumbu, 75 00:03:09,750 --> 00:03:11,780 na wote una kuwaambia mfumo wa uendeshaji 76 00:03:11,780 --> 00:03:14,699 ni nini wakati kuuliza ni kwa ajili ya kumbukumbu. 77 00:03:14,699 --> 00:03:16,990 Ni si kwenda kwa huduma ya kile wewe ni kwenda kufanya na hayo, 78 00:03:16,990 --> 00:03:19,786 lakini huna haja ya kuwaambia uendeshaji mfumo kile kwa njia ya malloc. 79 00:03:19,786 --> 00:03:20,286 Yeah? 80 00:03:20,286 --> 00:03:21,078 >> Watazamaji: Ni kiasi gani? 81 00:03:21,078 --> 00:03:21,994 DAVID Malan: Ni kiasi gani? 82 00:03:21,994 --> 00:03:25,280 Kiasi gani katika ka, na hivyo, hii, tena, mfano contrived, ni kusema tu, 83 00:03:25,280 --> 00:03:27,360 nipe ukubwa wa int. 84 00:03:27,360 --> 00:03:30,550 Sasa, ukubwa wa int ni ka nne au 32 bits. 85 00:03:30,550 --> 00:03:32,850 Hivyo hii ni njia tu ya akisema, hey, mfumo wa uendeshaji, 86 00:03:32,850 --> 00:03:37,290 nipe ka nne ya kumbukumbu kwamba naweza kutumia ovyo yangu, 87 00:03:37,290 --> 00:03:40,560 na hasa, ni nini malloc kurudi kwa heshima 88 00:03:40,560 --> 00:03:41,795 kwa kuwa chunk ya ka nne? 89 00:03:41,795 --> 00:03:44,110 90 00:03:44,110 --> 00:03:44,860 Watazamaji: Mitaani? 91 00:03:44,860 --> 00:03:45,901 DAVID Malan: mahali. 92 00:03:45,901 --> 00:03:47,580 Pepe ya kwamba chunk ya ka nne. 93 00:03:47,580 --> 00:03:48,190 Hasa. 94 00:03:48,190 --> 00:03:51,430 Na hivyo kwamba ni nini kuhifadhiwa hatimaye katika x na hii ndiyo sababu sisi si kweli 95 00:03:51,430 --> 00:03:55,240 huduma ya kile idadi ya kwamba anuani ni, kama ni OX1 au OX2 96 00:03:55,240 --> 00:03:57,110 au baadhi cryptic hexadecimal mahali. 97 00:03:57,110 --> 00:03:59,850 Sisi tu huduma pictorially kuwa kwamba kutofautiana x ni sasa 98 00:03:59,850 --> 00:04:01,630 akizungumzia kwamba chunk ya kumbukumbu. 99 00:04:01,630 --> 00:04:05,570 Hivyo mshale inawakilisha pointer, au zaidi hasa, kumbukumbu ya mahali. 100 00:04:05,570 --> 00:04:09,120 Lakini tena, hatuna kawaida huduma nini wale anwani halisi watu. 101 00:04:09,120 --> 00:04:11,780 Sasa, mstari huu inasema nini katika suala layman? 102 00:04:11,780 --> 00:04:14,330 Star x anapata 42 semicolon. 103 00:04:14,330 --> 00:04:17,390 Hii ina maana gani? 104 00:04:17,390 --> 00:04:18,200 Unataka kwenda? 105 00:04:18,200 --> 00:04:20,102 Je, si scratch shingo yako. 106 00:04:20,102 --> 00:04:22,360 >> Watazamaji: pepe ya x ni katika 42. 107 00:04:22,360 --> 00:04:24,300 >> DAVID Malan: pepe ya x ni katika 42. 108 00:04:24,300 --> 00:04:25,190 Si kabisa. 109 00:04:25,190 --> 00:04:28,485 Hivyo karibu, lakini si kabisa, kwa sababu kuna nyota hiyo prefixing x huu. 110 00:04:28,485 --> 00:04:29,860 Kwa hiyo, tunahitaji tweak kidogo. 111 00:04:29,860 --> 00:04:31,032 Yeah? 112 00:04:31,032 --> 00:04:36,044 >> Watazamaji: thamani kwamba pointer x ni akizungumzia ni 42. 113 00:04:36,044 --> 00:04:36,710 DAVID Malan: Sawa. 114 00:04:36,710 --> 00:04:40,840 Thamani kwamba pointer X ni akizungumzia, hebu sema, atakuwa 42, 115 00:04:40,840 --> 00:04:44,165 au kuweka njia nyingine, nyota x anasema, kwenda chochote anuani 116 00:04:44,165 --> 00:04:48,340 ni katika x, kama ni 1 Oxford Mitaani au 33 Oxford Street 117 00:04:48,340 --> 00:04:51,850 au OX1 au ox33, chochote kwamba numeric anwani ni, 118 00:04:51,850 --> 00:04:54,380 nyota x ni dereferencing ya x. 119 00:04:54,380 --> 00:04:57,297 Hivyo kwenda kwa anwani hiyo na kisha kuweka namba 42 hapo. 120 00:04:57,297 --> 00:04:59,380 Hivyo kwamba itakuwa sawa njia ya kusema kwamba. 121 00:04:59,380 --> 00:05:01,860 Hivyo hiyo ni yote mazuri na kisha tunataka kuwakilisha picha 122 00:05:01,860 --> 00:05:05,370 kama ifuatavyo ambapo tumekuwa aliongeza 42 kwa kuwa chunk ya nne 123 00:05:05,370 --> 00:05:09,370 ka juu ya upande wa kulia, lakini mstari huu ulikuwa ambapo mambo ilikwenda kombo 124 00:05:09,370 --> 00:05:11,120 na kichwa Binky ya popped mbali katika hatua hii, 125 00:05:11,120 --> 00:05:15,290 kwa sababu mambo mabaya kutokea wakati wewe dereference maadili takataka 126 00:05:15,290 --> 00:05:18,210 au wewe dereference batili kuyatumia, na nasema batili 127 00:05:18,210 --> 00:05:21,020 kwa sababu katika hatua hii katika hadithi, ni nini ndani ya y? 128 00:05:21,020 --> 00:05:24,440 Nini thamani ya y msingi juu ya siku za nyuma hatua chache? 129 00:05:24,440 --> 00:05:25,360 Yeah? 130 00:05:25,360 --> 00:05:26,115 Nini hiyo? 131 00:05:26,115 --> 00:05:26,990 >> Watazamaji: mahali. 132 00:05:26,990 --> 00:05:28,460 DAVID Malan: mahali. 133 00:05:28,460 --> 00:05:31,910 Ni lazima anuani lakini mimi initialized hivyo? 134 00:05:31,910 --> 00:05:32,800 Hivyo nina bado. 135 00:05:32,800 --> 00:05:35,430 Kwa hiyo kile inajulikana kuwa katika huko? 136 00:05:35,430 --> 00:05:37,590 Ni baadhi tu ya thamani ya takataka. 137 00:05:37,590 --> 00:05:41,500 Ni inaweza kuwa anwani yoyote kutoka sifuri kwa Bilioni 2 kama una gigs mbili ya RAM, 138 00:05:41,500 --> 00:05:44,289 au zero kwa bilioni 4 kama wameweza got gigabytes nne ya RAM. 139 00:05:44,289 --> 00:05:46,080 Ni baadhi ya thamani ya takataka, lakini tatizo ni 140 00:05:46,080 --> 00:05:48,200 kuwa mfumo wa uendeshaji, ikiwa ni haijatoa wewe 141 00:05:48,200 --> 00:05:51,140 kwamba chunk ya kumbukumbu mahsusi kwamba wewe ni kujaribu kwenda, 142 00:05:51,140 --> 00:05:54,650 ni kwa ujumla kwenda kusababisha kile tumeona kama segmentation kosa. 143 00:05:54,650 --> 00:05:57,810 Hivyo kwa kweli, mmoja wenu ambao wana akihangaika katika matatizo katika masaa ya ofisi 144 00:05:57,810 --> 00:06:00,393 au katika matatizo ambayo ni zaidi ujumla na kujaribu kufikiri 145 00:06:00,393 --> 00:06:02,150 segmentation kosa, kwamba ujumla maana yake 146 00:06:02,150 --> 00:06:05,017 wewe ni kugusa sehemu ya kumbukumbu kwamba unapaswa kuwa. 147 00:06:05,017 --> 00:06:07,350 Wewe ni kugusa kumbukumbu kwamba mfumo wa uendeshaji ina si 148 00:06:07,350 --> 00:06:10,450 kuruhusiwa wewe kugusa, kama ni na kwenda mbali mno katika safu yako 149 00:06:10,450 --> 00:06:12,870 au kuanzia sasa, iwe ni kwa sababu wewe ni kugusa 150 00:06:12,870 --> 00:06:14,780 kumbukumbu kwamba tu ni baadhi ya thamani ya takataka. 151 00:06:14,780 --> 00:06:18,230 >> Akifanya hivyo nyota x hapa ni aina ya tabia kisichojulikana. 152 00:06:18,230 --> 00:06:22,030 Unapaswa kamwe kufanya hivyo kwa sababu ya tabia mbaya ni, mpango tu kwenda ajali, 153 00:06:22,030 --> 00:06:24,050 kwa sababu wewe ni kusema, kwenda anwani hii 154 00:06:24,050 --> 00:06:27,000 na wewe huna wazo ambapo anwani hiyo kweli ni. 155 00:06:27,000 --> 00:06:30,300 Hivyo mfumo wa uendeshaji ni uwezekano kwenda kwa ajali ya mpango wako 156 00:06:30,300 --> 00:06:33,840 kutokana na kwa kweli, hiyo ni kile kilichotokea pale kwa Binky. 157 00:06:33,840 --> 00:06:37,210 Hivyo hatimaye, Binky fasta tatizo hili na hili. 158 00:06:37,210 --> 00:06:38,909 Hivyo mpango kwamba yenyewe ilikuwa kiujanja. 159 00:06:38,909 --> 00:06:41,450 Lakini kama wewe ni aina ya kusonga mbele na kutekeleza mstari huu badala yake, 160 00:06:41,450 --> 00:06:45,580 y sawa x tu ina maana chochote anuani ni x, pia kuiweka katika y. 161 00:06:45,580 --> 00:06:48,740 >> Na hivyo pictorially, tumekuwa kuwakilishwa huu kwa mishale miwili 162 00:06:48,740 --> 00:06:51,570 kutoka x na y akizungumzia kutoka kwa sehemu moja. 163 00:06:51,570 --> 00:06:55,760 Hivyo semantically, x ni sawa kwa sababu y wote wawili wa wale 164 00:06:55,760 --> 00:07:00,300 ni hifadhi hiyo mitaani, ergo akionyesha 42, 165 00:07:00,300 --> 00:07:04,910 na sasa, unaposema nyota y, kwenda anuani katika y, 166 00:07:04,910 --> 00:07:06,790 hii ina kuvutia upande athari. 167 00:07:06,790 --> 00:07:10,320 Hivyo anuani katika y ni kitu kimoja kama anwani katika x. 168 00:07:10,320 --> 00:07:15,060 Hivyo kama wewe kusema kwenda anwani katika y na mabadiliko ya thamani ya 13, 169 00:07:15,060 --> 00:07:17,140 nani mwingine ni walioathirika? 170 00:07:17,140 --> 00:07:21,100 X ni, hatua D, hivyo kusema, lazima walioathirika vilevile. 171 00:07:21,100 --> 00:07:24,340 >> Na hakika, jinsi Nick waliochota picha hii katika claymation ilikuwa hasa kwamba. 172 00:07:24,340 --> 00:07:28,665 Hata ingawa sisi kufuata pointer y, sisi kuishia katika sehemu moja, 173 00:07:28,665 --> 00:07:32,780 na hivyo kama tulikuwa na magazeti nje x au y ya pointee, 174 00:07:32,780 --> 00:07:35,720 kisha tunataka kuona thamani ya 13. 175 00:07:35,720 --> 00:07:37,927 Sasa, nasema pointee kuwa sambamba na video. 176 00:07:37,927 --> 00:07:39,760 Programmers, kwa yangu maarifa, kamwe kweli 177 00:07:39,760 --> 00:07:42,460 kusema neno pointee, yaliyo chongoka 178 00:07:42,460 --> 00:07:44,650 katika, lakini kwa uthabiti na video, kutambua 179 00:07:44,650 --> 00:07:47,520 hiyo ni yote yaliyokuwa maana katika hali hiyo. 180 00:07:47,520 --> 00:07:54,190 Hivyo maswali yoyote juu ya claymation au kuyatumia au malloc bado tu? 181 00:07:54,190 --> 00:07:54,850 Hakuna? 182 00:07:54,850 --> 00:07:55,470 Sawa. 183 00:07:55,470 --> 00:07:58,560 >> Hivyo bila zaidi wasiwasi, hebu tuangalie 184 00:07:58,560 --> 00:08:00,700 katika ambapo hii ina kweli zimetumika kwa muda fulani. 185 00:08:00,700 --> 00:08:03,580 Hivyo tulikuwa na hii maktaba CS50 kwamba got wote wa kazi hizo. 186 00:08:03,580 --> 00:08:06,810 Tumekuwa kutumika GetInt mengi, GetString, pengine GetLongLong mapema 187 00:08:06,810 --> 00:08:09,840 katika pset yangu mmoja au hivyo, lakini nini hasa kinachoendelea? 188 00:08:09,840 --> 00:08:12,920 Naam, hebu tuangalie kwa haraka chini ya Hood katika mpango huo 189 00:08:12,920 --> 00:08:17,017 kuwahamasisha nini sisi kukupa CS50 maktaba, na kwa kweli kama ya wiki iliyopita, 190 00:08:17,017 --> 00:08:18,850 sisi kuanza kuchukua wale magurudumu mafunzo mbali. 191 00:08:18,850 --> 00:08:21,080 Hivyo hii sasa ni yamepangwa ya postmortem ya kile 192 00:08:21,080 --> 00:08:23,690 ina kinachoendelea ndani ya maktaba CS50, 193 00:08:23,690 --> 00:08:27,250 hata kama sisi sasa itaanza kusonga mbali na hayo kwa programu nyingi. 194 00:08:27,250 --> 00:08:29,460 >> Hivyo hii ni mpango ujulikanao scanf 0. 195 00:08:29,460 --> 00:08:30,510 Ni super mfupi. 196 00:08:30,510 --> 00:08:33,909 Ni tu ina mistari haya, lakini utangulizi kazi kuitwa scanf 197 00:08:33,909 --> 00:08:36,909 kwamba sisi ni kweli kwenda kuona katika wakati ndani ya maktaba CS50, 198 00:08:36,909 --> 00:08:38,600 angalau katika fomu tofauti kidogo. 199 00:08:38,600 --> 00:08:41,330 Hivyo mpango huu kwenye mstari 16 anatangaza x kutofautiana. 200 00:08:41,330 --> 00:08:43,150 Basi nipe ka nne kwa int. 201 00:08:43,150 --> 00:08:45,750 Imekuwa ni kuwaambia user, idadi tafadhali, na kisha 202 00:08:45,750 --> 00:08:49,010 hii ni mstari kuvutia kwamba kweli mahusiano pamoja wiki iliyopita 203 00:08:49,010 --> 00:08:49,790 na hii. 204 00:08:49,790 --> 00:08:53,230 Scanf, na kisha taarifa inachukua string format, kama vile printf, 205 00:08:53,230 --> 00:08:57,480 % i maana int, na kisha inachukua pili hoja ambayo inaonekana kidogo 206 00:08:57,480 --> 00:08:58,260 funky. 207 00:08:58,260 --> 00:09:01,880 Ni ampersand x, na kukumbuka, sisi tu aliona wiki hii mara moja iliyopita. 208 00:09:01,880 --> 00:09:03,465 Je ampersand x kuwakilisha? 209 00:09:03,465 --> 00:09:06,210 210 00:09:06,210 --> 00:09:08,450 Je ampersand kufanya katika C? 211 00:09:08,450 --> 00:09:08,950 Yeah? 212 00:09:08,950 --> 00:09:10,024 >> Watazamaji: pepe ya. 213 00:09:10,024 --> 00:09:11,190 DAVID Malan: pepe ya. 214 00:09:11,190 --> 00:09:13,190 Hivyo ni kinyume ya nyota operator, 215 00:09:13,190 --> 00:09:17,270 ambapo nyota operator anasema, kwenda anwani hii, mwendeshaji ampersand 216 00:09:17,270 --> 00:09:20,280 anasema, kufikiri pepe ya kutofautiana hii, 217 00:09:20,280 --> 00:09:23,530 na hivyo hii ni muhimu, kwa sababu Madhumuni scanf katika maisha 218 00:09:23,530 --> 00:09:26,320 ni kwa Scan mtumiaji pembejeo kutoka keyboard, 219 00:09:26,320 --> 00:09:29,970 kutegemea chochote yeye au yeye aina, na kisha kusoma pembejeo kwamba mtumiaji 220 00:09:29,970 --> 00:09:32,970 ndani ya kutofautiana, lakini sisi aliona katika wiki mbili zilizopita 221 00:09:32,970 --> 00:09:36,080 kuwa kwamba wabadilishane kazi kwamba sisi walijaribu effortlessly kutekeleza 222 00:09:36,080 --> 00:09:37,110 mara tu kuvunjwa. 223 00:09:37,110 --> 00:09:42,470 Kumbuka kwamba kwa wabadilishane kazi, kama sisi tu alitangaza A na B kama ints, 224 00:09:42,470 --> 00:09:47,040 hatukuwa mafanikio wabadilishane vigezo mbili ndani ya kubadilishana 225 00:09:47,040 --> 00:09:50,080 tu kama maziwa na OJ, lakini haraka kama wabadilishane akarudi, 226 00:09:50,080 --> 00:09:55,200 nini ilikuwa ni matokeo kwa heshima kwa x na y, maadili ya awali? 227 00:09:55,200 --> 00:09:55,700 Chochote. 228 00:09:55,700 --> 00:09:56,200 Naam. 229 00:09:56,200 --> 00:09:59,754 Hakuna kilichotokea wakati huo, kwa sababu swaps mabadiliko tu nakala yake mitaa, 230 00:09:59,754 --> 00:10:01,670 ambayo ni kusema, kila wakati huu, wakati wowote tumekuwa 231 00:10:01,670 --> 00:10:04,010 wamekuwa kupita katika hoja kwa kazi, tuko 232 00:10:04,010 --> 00:10:05,939 tu kupita nakala za hoja hizo. 233 00:10:05,939 --> 00:10:07,980 Unaweza kufanya na kwamba chochote unataka na wao, 234 00:10:07,980 --> 00:10:10,890 lakini wao wanaenda kuwa hakuna athari juu ya maadili ya awali. 235 00:10:10,890 --> 00:10:13,650 Hivyo hii ni tatizo kama wewe wanataka kuwa na kazi kama scanf 236 00:10:13,650 --> 00:10:17,170 katika maisha, ambao lengo ni Scan pembejeo mtumiaji kutoka keyboard 237 00:10:17,170 --> 00:10:22,010 na kisha kujaza nafasi zilizoachwa wazi, hivyo kwa kusema, yaani, kutoa kutofautiana kama x 238 00:10:22,010 --> 00:10:25,410 thamani, kwa sababu kama ningekuwa kupita tu x kwa scanf, 239 00:10:25,410 --> 00:10:28,790 kama wewe kufikiria mantiki ya mwisho wiki, scanf unaweza kufanya chochote anataka 240 00:10:28,790 --> 00:10:33,100 na nakala ya x, lakini hawakuweza kudumu mabadiliko x isipokuwa sisi kutoa 241 00:10:33,100 --> 00:10:37,120 scanf hazina ramani, ili kuzungumza, ambapo x alama doa, ambapo 242 00:10:37,120 --> 00:10:41,860 sisi kupita katika anuani ya x ili scanf unaweza kwenda huko na kwa kweli mabadiliko 243 00:10:41,860 --> 00:10:42,920 thamani ya x. 244 00:10:42,920 --> 00:10:45,080 Na hivyo kweli, kila kwamba mpango huu gani 245 00:10:45,080 --> 00:10:53,180 kama mimi kufanya scanf 0, katika chanzo yangu 5m directory, kufanya scanf 0, 246 00:10:53,180 --> 00:10:57,730 dot kufyeka scanf, idadi tafadhali 50, shukrani kwa 50. 247 00:10:57,730 --> 00:11:01,020 >> Hivyo si wote kwamba kuvutia, lakini nini kweli yanatokea 248 00:11:01,020 --> 00:11:04,820 ni kwamba haraka kama mimi wito scanf hapa hiyo, thamani ya x 249 00:11:04,820 --> 00:11:06,410 ni kuwa kudumu iliyopita. 250 00:11:06,410 --> 00:11:08,335 Sasa, hii inaonekana nzuri na nzuri, na kwa kweli, 251 00:11:08,335 --> 00:11:11,200 Inaonekana kama sisi si kweli haja maktaba CS50 wakati wote tena. 252 00:11:11,200 --> 00:11:13,960 Kwa mfano, hebu kukimbia hii kwa mara nyingine tena hapa. 253 00:11:13,960 --> 00:11:15,750 Napenda reopen ni kwa ajili ya pili. 254 00:11:15,750 --> 00:11:20,600 Hebu jaribu idadi tafadhali na badala ya kusema 50 kama kabla, 255 00:11:20,600 --> 00:11:22,810 hebu sema tu hakuna. 256 00:11:22,810 --> 00:11:24,000 OK, hiyo ni weird kidogo. 257 00:11:24,000 --> 00:11:25,270 SAWA. 258 00:11:25,270 --> 00:11:28,680 Na baadhi tu yasiyo na msingi hapa. 259 00:11:28,680 --> 00:11:31,170 Hivyo haionekani kushughulikia hali potofu. 260 00:11:31,170 --> 00:11:33,620 Kwa hiyo, tunahitaji kuanza ya chini kuongeza baadhi ya makosa ya kuangalia 261 00:11:33,620 --> 00:11:37,460 kuhakikisha kwamba mtumiaji ana typed katika idadi halisi kama 50, 262 00:11:37,460 --> 00:11:40,720 kwa sababu maneno inaonekana kuandika si wanaona kama tatizo, 263 00:11:40,720 --> 00:11:42,020 lakini pengine lazima. 264 00:11:42,020 --> 00:11:46,450 >> Hebu tuangalie hili toleo sasa hiyo ni jaribio yangu reimplement GetString. 265 00:11:46,450 --> 00:11:48,437 Kama scanf ina yote haya utendaji kujengwa katika, 266 00:11:48,437 --> 00:11:51,270 mbona sisi wamekuwa dabbling na haya magurudumu mafunzo kama GetString? 267 00:11:51,270 --> 00:11:55,450 Naam, hapa ni labda yangu mwenyewe rahisi toleo la GetString 268 00:11:55,450 --> 00:12:00,766 ambapo wiki iliyopita, mimi ili kuwa alisema, nipe kamba na kuiita buffer. 269 00:12:00,766 --> 00:12:03,390 Leo, mimi nina kwenda kuanza tu akisema char nyota, ambayo, kukumbuka, 270 00:12:03,390 --> 00:12:04,400 ni tu sawa. 271 00:12:04,400 --> 00:12:06,629 Inaonekana scarier lakini ni exact kitu. 272 00:12:06,629 --> 00:12:09,420 Basi nipe variable kuitwa buffer hiyo ni kwenda kuhifadhi kamba, 273 00:12:09,420 --> 00:12:12,780 kuwaambia kamba user tafadhali, na kisha, kama kabla, 274 00:12:12,780 --> 00:12:17,760 hebu jaribu kukopa somo hili scanf % s wakati huu na kisha kupita katika buffer. 275 00:12:17,760 --> 00:12:19,310 Sasa, haraka sanity hundi. 276 00:12:19,310 --> 00:12:22,120 Kwa nini mimi si kusema ampersand buffer wakati huu? 277 00:12:22,120 --> 00:12:25,190 278 00:12:25,190 --> 00:12:26,625 Infer kutoka mfano uliopita. 279 00:12:26,625 --> 00:12:28,000 Watazamaji: Char nyota ni pointer. 280 00:12:28,000 --> 00:12:29,920 DAVID Malan: Hasa, kwa sababu wakati huu, char 281 00:12:29,920 --> 00:12:34,080 nyota ni tayari pointer, mitaani, kwa ufafanuzi wa kwamba nyota kuwa huko. 282 00:12:34,080 --> 00:12:37,530 Na kama scanf anatarajia mitaani, yatosha tu kupita katika buffer. 283 00:12:37,530 --> 00:12:39,260 Sina haja ya kusema ampersand buffer. 284 00:12:39,260 --> 00:12:42,177 Kwa wadadisi, ungeweza kufanya kitu kama hiki. 285 00:12:42,177 --> 00:12:43,510 Ingekuwa na maana tofauti. 286 00:12:43,510 --> 00:12:47,240 Hii itakuwa kukupa pointer kwa pointer, ambayo ni kweli 287 00:12:47,240 --> 00:12:50,050 Jambo halali katika C, lakini kwa sasa, hebu kushika ni rahisi 288 00:12:50,050 --> 00:12:51,750 na kuweka hadithi thabiti. 289 00:12:51,750 --> 00:12:54,100 Mimi tu kwenda kupita katika buffer na hiyo ni sahihi. 290 00:12:54,100 --> 00:12:56,487 Tatizo ingawa ni hii. 291 00:12:56,487 --> 00:12:58,820 Hebu kwenda mbele na kukimbia hii Mpango baada ya kuandaa yake. 292 00:12:58,820 --> 00:13:00,902 Kufanya scanf 1. 293 00:13:00,902 --> 00:13:02,610 Damn hiyo, compiler yangu kuambukizwa makosa yangu. 294 00:13:02,610 --> 00:13:04,090 Nipe moja ya pili. 295 00:13:04,090 --> 00:13:05,460 Clang. 296 00:13:05,460 --> 00:13:06,990 Hebu sema scanf-1.c. 297 00:13:06,990 --> 00:13:10,880 298 00:13:10,880 --> 00:13:11,380 SAWA. 299 00:13:11,380 --> 00:13:12,720 Kuna sisi kwenda. 300 00:13:12,720 --> 00:13:14,280 Naihitaji. 301 00:13:14,280 --> 00:13:16,750 CS50 ID ina mbalimbali mipangilio 302 00:13:16,750 --> 00:13:18,280 kwamba kulinda wewe dhidi ya mwenyewe. 303 00:13:18,280 --> 00:13:21,300 Mimi zinahitajika afya wale na mbio Clang manually wakati huu. 304 00:13:21,300 --> 00:13:22,140 Hivyo kamba tafadhali. 305 00:13:22,140 --> 00:13:25,560 Mimi nina kwenda mbele na aina katika favorite hujambo dunia yangu. 306 00:13:25,560 --> 00:13:26,490 OK, null. 307 00:13:26,490 --> 00:13:27,700 Hiyo si kile typed. 308 00:13:27,700 --> 00:13:29,690 Hivyo ni dalili ya kitu kuwa kibaya. 309 00:13:29,690 --> 00:13:33,920 Hebu kwenda mbele na aina katika kamba kweli kwa muda mrefu. 310 00:13:33,920 --> 00:13:37,210 Shukrani kwa batili na sijui kama mimi nina kwenda kuwa na uwezo wa ajali hiyo. 311 00:13:37,210 --> 00:13:40,240 Hebu jaribu nakala kidogo kuweka na kuona kama hii husaidia. 312 00:13:40,240 --> 00:13:43,290 Tu kuweka mengi ya hii. 313 00:13:43,290 --> 00:13:47,310 Ni dhahiri kubwa kamba kuliko kawaida. 314 00:13:47,310 --> 00:13:51,450 Hebu tu kweli kuandika. 315 00:13:51,450 --> 00:13:51,950 Hakuna 316 00:13:51,950 --> 00:13:52,650 Damn it. 317 00:13:52,650 --> 00:13:53,480 Amri halikupatikana. 318 00:13:53,480 --> 00:13:54,550 Hivyo hiyo ni lisilohusiana. 319 00:13:54,550 --> 00:13:56,440 Hii ni kwa sababu mimi pasted baadhi ya wahusika mbaya, 320 00:13:56,440 --> 00:13:59,780 lakini hii zinageuka si kwenda kufanya kazi. 321 00:13:59,780 --> 00:14:03,510 >> Hebu jaribu hii kwa mara nyingine tena, kwa sababu ni furaha zaidi kama sisi kweli ajali hiyo. 322 00:14:03,510 --> 00:14:09,116 Hebu aina hii na sasa, mimi nina kwenda nakala kamba kweli kwa muda mrefu 323 00:14:09,116 --> 00:14:10,990 na sasa hebu angalia kama sisi unaweza ajali jambo hili. 324 00:14:10,990 --> 00:14:14,235 Taarifa mimi kuachwa nafasi na mistari mpya na semicolons 325 00:14:14,235 --> 00:14:16,035 na wahusika wote funky. 326 00:14:16,035 --> 00:14:16,535 Kuingia. 327 00:14:16,535 --> 00:14:21,090 328 00:14:21,090 --> 00:14:22,880 Na sasa mtandao ni kuwa tu polepole. 329 00:14:22,880 --> 00:14:27,460 Mimi uliofanyika chini amri-V muda mrefu sana, wazi. 330 00:14:27,460 --> 00:14:28,190 Damn it! 331 00:14:28,190 --> 00:14:29,260 Amri halikupatikana. 332 00:14:29,260 --> 00:14:29,780 >> SAWA. 333 00:14:29,780 --> 00:14:32,240 Naam, uhakika ni hata hivyo kufuatia. 334 00:14:32,240 --> 00:14:36,910 Kwa hiyo kile ni kweli kwenda tarehe na tamko hili 335 00:14:36,910 --> 00:14:39,240 ya char nyota buffer kwenye mstari 16? 336 00:14:39,240 --> 00:14:41,820 Kwa hiyo kile ni mimi kupata wakati mimi kutangaza pointer? 337 00:14:41,820 --> 00:14:47,440 Wote mimi nina kupata ni thamani wanne Byte aitwaye buffer, lakini nini ndani yake 338 00:14:47,440 --> 00:14:49,540 kwa kipindi hiki? 339 00:14:49,540 --> 00:14:50,930 Ni baadhi tu ya thamani ya takataka. 340 00:14:50,930 --> 00:14:54,170 Kwa sababu wakati wowote kutangaza kutofautiana katika C, ni baadhi tu ya thamani ya takataka, 341 00:14:54,170 --> 00:14:56,220 na sisi ni mapya ya safari juu ya ukweli huu. 342 00:14:56,220 --> 00:14:59,720 Sasa, wakati mimi kuwaambia scanf, kwenda anwani hii 343 00:14:59,720 --> 00:15:01,520 na kuweka chochote mtumiaji aina katika. 344 00:15:01,520 --> 00:15:06,400 Kama mtumiaji aina katika hujambo dunia, vizuri, ambapo mimi kuiweka? 345 00:15:06,400 --> 00:15:07,750 Buffer ni thamani ya takataka. 346 00:15:07,750 --> 00:15:11,510 >> Hivyo hiyo ni aina ya kama mshale hiyo akizungumzia ambaye anajua wapi. 347 00:15:11,510 --> 00:15:13,880 Labda ni akizungumzia hapa hapa katika kumbukumbu yangu. 348 00:15:13,880 --> 00:15:16,560 Na hivyo wakati mtumiaji aina katika hujambo dunia, 349 00:15:16,560 --> 00:15:22,380 Mpango anajaribu kuweka kamba hujambo dunia backslash 0 350 00:15:22,380 --> 00:15:23,910 katika kwamba chunk ya kumbukumbu. 351 00:15:23,910 --> 00:15:27,070 Lakini pamoja na uwezekano mkubwa, lakini wazi si 100% uwezekano, 352 00:15:27,070 --> 00:15:30,440 kompyuta ni kwenda basi ajali Mpango kwa sababu hii si 353 00:15:30,440 --> 00:15:32,490 kumbukumbu mimi waruhusiwe kugusa. 354 00:15:32,490 --> 00:15:36,330 Hivyo katika muda mfupi, mpango huu ni kiujanja kwa hasa sababu hiyo. 355 00:15:36,330 --> 00:15:38,070 Mimi kimsingi si kufanya nini? 356 00:15:38,070 --> 00:15:42,366 Ni hatua na mimi kuachwa, kama vile sisi liliondolewa kwa mfano kwanza Binky ya? 357 00:15:42,366 --> 00:15:42,866 Yeah? 358 00:15:42,866 --> 00:15:43,710 >> Watazamaji: mgao Kumbukumbu? 359 00:15:43,710 --> 00:15:45,001 >> DAVID Malan: mgao Kumbukumbu. 360 00:15:45,001 --> 00:15:48,400 Mimi si kweli zilizotengwa kumbukumbu yoyote kwa kamba hiyo. 361 00:15:48,400 --> 00:15:50,270 Ili tuweze kurekebisha hii katika michache ya njia. 362 00:15:50,270 --> 00:15:52,700 Moja, tunaweza kushika ni rahisi na kwa kweli, sasa uko 363 00:15:52,700 --> 00:15:55,116 kwenda kuanza kuona blurring ya mistari kati ya kile 364 00:15:55,116 --> 00:15:58,520 safu ni, nini kamba ni, nini a char nyota ni, nini safu ya chars 365 00:15:58,520 --> 00:15:59,020 ni. 366 00:15:59,020 --> 00:16:02,450 Hapa ni mfano wa pili kuwashirikisha masharti na ilani 367 00:16:02,450 --> 00:16:05,690 zote mimi tumefanya kwenye mstari 16 ni, badala ya kusema 368 00:16:05,690 --> 00:16:09,530 kwamba buffer ni kwenda kuwa Char nyota, pointer chunk ya kumbukumbu, 369 00:16:09,530 --> 00:16:14,057 Mimi nina kwenda proactively sana kutoa mwenyewe buffer kwa 16 wahusika, 370 00:16:14,057 --> 00:16:16,390 na kwa kweli, kama wewe ni ukoo na mrefu buffering, 371 00:16:16,390 --> 00:16:20,570 pengine kutokana na dunia ya video, ambapo video ni buffering, buffering, 372 00:16:20,570 --> 00:16:21,175 buffering. 373 00:16:21,175 --> 00:16:22,550 Naam, nini uhusiano hapa? 374 00:16:22,550 --> 00:16:24,960 Naam, Ndani ya YouTube na ndani ya wachezaji video 375 00:16:24,960 --> 00:16:27,200 ujumla ni safu hiyo ni kubwa kuliko 16. 376 00:16:27,200 --> 00:16:30,340 Ni inaweza kuwa safu ya ukubwa moja megabyte, labda megabytes 10, 377 00:16:30,340 --> 00:16:34,330 na katika safu kwamba anafanya kisakuzi chako download rundo zima la ka, 378 00:16:34,330 --> 00:16:37,500 rundo zima la megabytes ya video, na video mchezaji, 379 00:16:37,500 --> 00:16:40,930 YouTube au mtu ni, kuanza kusoma ka kutoka kwamba safu, 380 00:16:40,930 --> 00:16:43,530 na wakati wowote unaweza kuona neno buffering, buffering, 381 00:16:43,530 --> 00:16:46,350 hiyo ina maana mchezaji ana wamezipata kwa mwisho wa safu. 382 00:16:46,350 --> 00:16:50,430 Mtandao ni hivyo polepole kuwa ina si refilled safu na ka zaidi 383 00:16:50,430 --> 00:16:55,610 na hivyo uko nje ya bits kuonyesha kwa mtumiaji. 384 00:16:55,610 --> 00:16:59,430 >> Hivyo buffer ni mwalimu mwema mrefu hapa nchini kwamba ni tu safu, chunk ya kumbukumbu. 385 00:16:59,430 --> 00:17:02,530 Na hii itakuwa kurekebisha kwa sababu ni zamu nje 386 00:17:02,530 --> 00:17:07,410 uweze kutibu arrays kana kwamba wao ni anwani, hata kama buffer 387 00:17:07,410 --> 00:17:10,710 ni tu ishara, ni mlolongo wa wahusika, buffer, 388 00:17:10,710 --> 00:17:14,760 hiyo ni muhimu kwa ajili yangu, programu, unaweza kupita jina lake kuzunguka 389 00:17:14,760 --> 00:17:17,079 kana kwamba ni pointer, kana kwamba 390 00:17:17,079 --> 00:17:21,000 walikuwa pepe ya chunk ya kumbukumbu kwa 16 chars. 391 00:17:21,000 --> 00:17:24,530 Hivyo hiyo ni kusema, siwezi kupita scanf hasa neno 392 00:17:24,530 --> 00:17:30,670 na hivyo kwa sasa, kama mimi kufanya mpango huu, kufanya scanf 2, dot slash scanf 2, 393 00:17:30,670 --> 00:17:35,386 na aina katika hujambo dunia, Kuingia, kwamba time-- 394 00:17:35,386 --> 00:17:37,590 >> Hmm, nini kilitokea? 395 00:17:37,590 --> 00:17:39,340 Kamba tafadhali. 396 00:17:39,340 --> 00:17:41,430 Je, mimi kufanya makosa? 397 00:17:41,430 --> 00:17:43,800 Jambo dunia, buffer. 398 00:17:43,800 --> 00:17:44,705 Salamu, Dunia. 399 00:17:44,705 --> 00:17:48,201 400 00:17:48,201 --> 00:17:49,420 Ah, najua nini ni kufanya. 401 00:17:49,420 --> 00:17:49,920 SAWA. 402 00:17:49,920 --> 00:17:51,628 Hivyo ni kusoma juu mpaka nafasi ya kwanza. 403 00:17:51,628 --> 00:17:55,680 Basi hebu kudanganya kwa muda tu na kusema mimi nilitaka aina ya kitu 404 00:17:55,680 --> 00:18:01,408 kweli kwa muda mrefu kama hii ni adhabu kwa muda mrefu hiyo ni moja, mbili, tatu, nne, tano, 405 00:18:01,408 --> 00:18:04,420 sita, saba, nane, tisa, 10, 11, 12, 13, 14, 15, 16. 406 00:18:04,420 --> 00:18:05,300 SAWA. 407 00:18:05,300 --> 00:18:07,600 Kwa hakika ni adhabu kwa muda mrefu. 408 00:18:07,600 --> 00:18:10,710 Basi hukumu hii ni muda mrefu zaidi ya 16 wahusika 409 00:18:10,710 --> 00:18:13,670 na hivyo wakati mimi hit Enter, nini kitatokea? 410 00:18:13,670 --> 00:18:16,940 Naam, katika kesi hii ya hadithi, mimi alikuwa ametangaza buffer 411 00:18:16,940 --> 00:18:22,190 kwa kweli kuwa safu na 16 chars tayari kwenda. 412 00:18:22,190 --> 00:18:27,426 Hivyo moja, mbili, tatu, nne, tano, sita, saba, nane, tisa, 10, 11, 12, 13, 14, 413 00:18:27,426 --> 00:18:29,440 15, 16. 414 00:18:29,440 --> 00:18:34,410 Hivyo herufi 16, na sasa, wakati mimi kusoma katika kitu kama hii ni ndefu 415 00:18:34,410 --> 00:18:43,950 adhabu, nini kitatokea ni kwamba mimi nina kwenda kusoma katika hili ni ndefu 416 00:18:43,950 --> 00:18:49,660 S-E-N-T-E-N-C-E, hukumu. 417 00:18:49,660 --> 00:18:52,270 >> Hivyo hii ni kwa makusudi Jambo baya ambalo mimi 418 00:18:52,270 --> 00:18:55,060 kuweka kuandika zaidi mipaka ya safu yangu, 419 00:18:55,060 --> 00:18:56,660 nje ya mipaka ya buffer yangu. 420 00:18:56,660 --> 00:19:00,100 Mimi naweza kupata bahati na mpango wataendelea mbio na huduma, 421 00:19:00,100 --> 00:19:03,450 lakini kwa ujumla kuzungumza, hii hakika ajali mpango wangu, 422 00:19:03,450 --> 00:19:06,440 na ni mdudu katika wangu kanuni wakati mimi hatua 423 00:19:06,440 --> 00:19:08,576 nje ya mipaka ya kwamba safu, kwa sababu mimi 424 00:19:08,576 --> 00:19:10,450 sijui kama ni lazima kwenda kwa ajali 425 00:19:10,450 --> 00:19:12,120 au kama mimi nina kwenda tu kupata bahati. 426 00:19:12,120 --> 00:19:15,750 Hivyo hii ni tatizo kwa sababu katika kesi hiyo, haina wanaonekana kazi 427 00:19:15,750 --> 00:19:20,931 na hebu kumjaribu hatma hapa, ingawa IDE inaonekana kuvumilia kidogo kabisa 428 00:19:20,931 --> 00:19:21,430 of-- 429 00:19:21,430 --> 00:19:22,040 >> Kuna sisi kwenda. 430 00:19:22,040 --> 00:19:23,240 Hatimaye. 431 00:19:23,240 --> 00:19:26,470 Kwa hiyo mimi nina moja tu kwamba unaweza kuona hili. 432 00:19:26,470 --> 00:19:29,630 Hivyo mimi tu alikuwa na mengi ya furaha kuandika nje halisi kweli kwa muda mrefu maneno 433 00:19:29,630 --> 00:19:32,800 kwamba ni hakika ilizidi 16 ka, kwa sababu mimi 434 00:19:32,800 --> 00:19:38,050 typed katika hii mambo ya muda mrefu mbalimbali line maneno, na kisha taarifa ya kile kilichotokea. 435 00:19:38,050 --> 00:19:41,110 Mpango walijaribu uchapishaji ni na kisha got segmentation kosa 436 00:19:41,110 --> 00:19:44,430 na segmentation makosa ni wakati kitu kama hii kinatokea 437 00:19:44,430 --> 00:19:47,650 na mfumo wa uendeshaji anasema hapana, hawezi kugusa kwamba kumbukumbu. 438 00:19:47,650 --> 00:19:49,570 Tunakwenda kuua Mpango kabisa. 439 00:19:49,570 --> 00:19:51,180 >> Hivyo hii inaonekana tatizo. 440 00:19:51,180 --> 00:19:54,540 Nimekuwa kuboresha mpango ambapo angalau kuwa baadhi ya kumbukumbu, 441 00:19:54,540 --> 00:19:58,000 lakini hii inaweza kuonekana kuunda kazi GetString na kupata 442 00:19:58,000 --> 00:20:00,780 masharti ya baadhi ya urefu mahususi 16. 443 00:20:00,780 --> 00:20:04,200 Hivyo kama unataka kusaidia tena hukumu ya 16 wahusika, 444 00:20:04,200 --> 00:20:04,880 unafanya nini? 445 00:20:04,880 --> 00:20:07,970 Naam, unaweza kuongeza ukubwa wa buffer huu kwa 32 446 00:20:07,970 --> 00:20:09,190 au kwamba inaonekana aina ya muda mfupi. 447 00:20:09,190 --> 00:20:12,260 Mbona sisi tu kufanya ni 1,000 lakini kushinikiza nyuma. 448 00:20:12,260 --> 00:20:17,100 Nini majibu shirikishi wa tu kuepuka tatizo hili kwa kufanya 449 00:20:17,100 --> 00:20:20,660 buffer yangu kubwa, kama chars 1000? 450 00:20:20,660 --> 00:20:23,470 Kwa kutekeleza GetString kwa njia hii. 451 00:20:23,470 --> 00:20:27,130 Nini kizuri au kibaya hapa? 452 00:20:27,130 --> 00:20:28,033 Yeah? 453 00:20:28,033 --> 00:20:30,574 Watazamaji: Kama wewe kufunga zile kura ya nafasi na huna matumizi yake, 454 00:20:30,574 --> 00:20:33,500 basi huwezi reallocate nafasi hiyo. 455 00:20:33,500 --> 00:20:34,500 DAVID Malan: Kabisa. 456 00:20:34,500 --> 00:20:38,480 Ni fujo kadiri kama huna kweli haja ya ka wale 900 457 00:20:38,480 --> 00:20:41,057 na bado wewe ni kuuliza kwa 1,000 katika jumla anyway, 458 00:20:41,057 --> 00:20:44,140 wewe ni kuteketeza kumbukumbu zaidi juu tu kompyuta ya mtumiaji kuliko unahitaji, 459 00:20:44,140 --> 00:20:45,740 na baada ya yote, baadhi ya umefanya tayari yaliyojitokeza 460 00:20:45,740 --> 00:20:47,620 katika maisha kwamba wakati uko mbio kura ya mipango 461 00:20:47,620 --> 00:20:50,470 na wao ni kula up kura ya kumbukumbu, huu unaweza kweli kuathiri utendaji 462 00:20:50,470 --> 00:20:52,220 na mtumiaji uzoefu kwenye kompyuta. 463 00:20:52,220 --> 00:20:56,090 Hivyo hiyo ni aina ya ufumbuzi wavivu, kwa hakika, na kinyume chake, 464 00:20:56,090 --> 00:21:00,140 ni fujo tu, tatizo ni nini bado, hata kama mimi kufanya buffer yangu 465 00:21:00,140 --> 00:21:02,100 1,000? 466 00:21:02,100 --> 00:21:02,600 Yeah? 467 00:21:02,600 --> 00:21:04,475 >> Watazamaji: kamba ni urefu 1,001. 468 00:21:04,475 --> 00:21:05,350 DAVID Malan: Hasa. 469 00:21:05,350 --> 00:21:08,280 Kama kamba yako ni urefu 1,001, una halisi tatizo moja, 470 00:21:08,280 --> 00:21:10,705 na kwa hoja yangu, napenda tu kisha kufanya hivyo mwaka 2000, 471 00:21:10,705 --> 00:21:12,830 lakini nyinyi hamjui katika kuendeleza jinsi kubwa ni lazima, 472 00:21:12,830 --> 00:21:16,890 na bado, sijui na kukusanya mpango wangu kabla ya kuruhusu watu kutumia na download 473 00:21:16,890 --> 00:21:17,390 yake. 474 00:21:17,390 --> 00:21:21,490 Hivyo hii ni hasa aina ya mambo ambayo CS50 maktaba inajaribu 475 00:21:21,490 --> 00:21:24,750 kutusaidia kwa na tutaweza mtazamo tu katika baadhi ya utekelezaji ya msingi 476 00:21:24,750 --> 00:21:29,790 hapa, lakini hii ni CS50 nukta C. Hii ni faili kwamba imekuwa juu ya CS50 IDE 477 00:21:29,790 --> 00:21:31,420 wiki hizi zote kwamba tumekuwa kutumia. 478 00:21:31,420 --> 00:21:34,280 Ni kabla ya ulioandaliwa na wameweza wamekuwa wakitumia ni moja kwa moja 479 00:21:34,280 --> 00:21:38,780 kwa asili ya kuwa na dash L CS50 bendera na Clang, 480 00:21:38,780 --> 00:21:42,300 lakini kama mimi kitabu chini kwa njia zote za kazi hizi, hapa ni GetString, 481 00:21:42,300 --> 00:21:44,636 na tu kukupa ladha ya nini kinaendelea, 482 00:21:44,636 --> 00:21:46,760 hebu tuangalie kwa haraka katika utata jamaa. 483 00:21:46,760 --> 00:21:48,870 Siyo super muda mrefu kazi, lakini hatukuwa 484 00:21:48,870 --> 00:21:52,530 Una kufikiri zote kwa bidii juu jinsi ya kwenda juu ya kupata masharti. 485 00:21:52,530 --> 00:21:55,660 >> Hivyo hapa ni buffer wangu na mimi inaonekana initialize kwa null. 486 00:21:55,660 --> 00:21:57,990 Hii, bila shaka, ni kitu kimoja kama Char nyota, 487 00:21:57,990 --> 00:22:00,585 lakini niliamua katika utekelezaji wa maktaba CS50 488 00:22:00,585 --> 00:22:02,460 kwamba kama tunakwenda kuwa nguvu kabisa, 489 00:22:02,460 --> 00:22:05,770 Sijui mapema jinsi kubwa ya watumiaji kamba wanaenda wanataka kupata. 490 00:22:05,770 --> 00:22:08,140 Hivyo nina kwenda kuanza na kamba tu tupu 491 00:22:08,140 --> 00:22:11,507 na mimi nina kwenda kujenga kama kiasi kumbukumbu kama nahitaji walionao kamba user 492 00:22:11,507 --> 00:22:13,340 na kama sina kutosha, mimi nina kwenda kuuliza 493 00:22:13,340 --> 00:22:15,010 mfumo wa uendeshaji kwa ajili ya kumbukumbu zaidi. 494 00:22:15,010 --> 00:22:17,510 Mimi nina kwenda kutoa hoja zao kamba ndani ya chunk kubwa ya kumbukumbu 495 00:22:17,510 --> 00:22:21,847 na mimi nina kwenda kutolewa au bure chunk isiyotosheleza kikubwa cha kumbukumbu 496 00:22:21,847 --> 00:22:23,680 na tunakwenda tu kufanya hivyo iteratively. 497 00:22:23,680 --> 00:22:25,570 >> Hivyo mtazamo wa haraka, hapa tu kutofautiana 498 00:22:25,570 --> 00:22:28,780 na ambayo mimi nina kwenda kuweka wimbo uwezo wa buffer yangu. 499 00:22:28,780 --> 00:22:30,071 Jinsi wengi ka naweza fit? 500 00:22:30,071 --> 00:22:32,070 Hapa ni kutofautiana n na ambayo mimi nina kwenda kuweka 501 00:22:32,070 --> 00:22:36,200 wimbo wa jinsi wengi ka ni kweli katika buffer au kwamba mtumiaji typed. 502 00:22:36,200 --> 00:22:39,900 Kama wameweza si hii kuona mbele, wewe Unaweza kutaja kwamba kutofautiana kama int 503 00:22:39,900 --> 00:22:46,370 ni unsigned, ambayo kama jina la kupendekeza, ina maana ni yasiyo ya hasi, na kwa nini 504 00:22:46,370 --> 00:22:50,590 Mimi milele wanataka kujisumbua inayobainisha kuwa int sio tu int, 505 00:22:50,590 --> 00:22:52,540 lakini ni unsigned int? 506 00:22:52,540 --> 00:22:55,064 Ni int mashirika yasiyo ya hasi. 507 00:22:55,064 --> 00:22:56,355 Je [inaudible] ina maana gani? 508 00:22:56,355 --> 00:22:58,910 >> Watazamaji: Ni kuelezea kiasi ya kumbukumbu ambayo inaweza kuwa [inaudible]. 509 00:22:58,910 --> 00:22:59,660 >> DAVID Malan: Yeah. 510 00:22:59,660 --> 00:23:03,710 Hivyo kama mimi kusema unsigned, hii ni kweli kutoa hata kidogo ya kumbukumbu ya ziada 511 00:23:03,710 --> 00:23:07,440 na inaonekana aina ya silly, lakini kama wewe kuwa moja kidogo ya kumbukumbu za ziada, kwamba 512 00:23:07,440 --> 00:23:09,940 ina maana kuwa mara mbili kama wengi maadili unaweza kuwakilisha, 513 00:23:09,940 --> 00:23:11,570 sababu inaweza kuwa 0 au 1. 514 00:23:11,570 --> 00:23:14,660 Hivyo kwa default, int inaweza kuwa takribani hasi bilioni 2 njia yote 515 00:23:14,660 --> 00:23:16,030 hadi chanya bilioni 2. 516 00:23:16,030 --> 00:23:18,540 Hayo ni kati kubwa, lakini ni bado aina ya fujo 517 00:23:18,540 --> 00:23:21,280 kama wewe tu huduma ya juu ukubwa, ambayo tu intuitively 518 00:23:21,280 --> 00:23:24,620 lazima zisizo hasi au chanya au 0, vizuri basi, 519 00:23:24,620 --> 00:23:28,884 mbona kupoteza bilioni 2 maadili inawezekana kwa idadi hasi 520 00:23:28,884 --> 00:23:30,300 kama wewe ni kamwe kwenda kutumia yao? 521 00:23:30,300 --> 00:23:35,350 Hivyo kwa kusema unsigned, sasa int wangu anaweza kuwa kati ya 0 na takribani bilioni 4. 522 00:23:35,350 --> 00:23:39,280 >> Hivyo hapa ni tu int C kwa sababu za sisi si kupata katika tu sasa kama 523 00:23:39,280 --> 00:23:42,280 kwa nini ni int badala ya Char, lakini hapa ni 524 00:23:42,280 --> 00:23:44,630 kiini cha nini kinaendelea juu, na baadhi yenu 525 00:23:44,630 --> 00:23:48,340 yapate kutumia, kwa mfano, kazi fgetc hata katika pset nne 526 00:23:48,340 --> 00:23:51,580 au baada ya hapo, tutaweza kuona ni tena katika tatizo kuweka tano, 527 00:23:51,580 --> 00:23:55,410 fgetc ni nzuri kwa sababu kama jina aina ya, aina ya arcanely unaonyesha, 528 00:23:55,410 --> 00:23:57,940 ni kazi ambayo anapata tabia na hivyo, 529 00:23:57,940 --> 00:24:00,690 nini tofauti kimsingi kuhusu nini sisi ni kufanya katika GetString 530 00:24:00,690 --> 00:24:03,110 ni sisi siyo kutumia scanf kwa njia sawa. 531 00:24:03,110 --> 00:24:07,550 Sisi ni mnyama tu pamoja hatua kwa hatua zaidi ya chochote mtumiaji typed katika, 532 00:24:07,550 --> 00:24:10,970 kwa sababu tunaweza daima kutenga moja Char, na hivyo tunaweza daima salama 533 00:24:10,970 --> 00:24:15,599 kuangalia char moja kwa wakati mmoja, na uchawi kuanza kutokea hapa. 534 00:24:15,599 --> 00:24:17,890 Mimi nina kwenda kitabu chini ya katikati ya kazi hii 535 00:24:17,890 --> 00:24:20,360 tu kuanzisha ufupi kazi hii. 536 00:24:20,360 --> 00:24:22,670 Kiasi kama kuna malloc kazi, kuna 537 00:24:22,670 --> 00:24:27,740 realloc kazi ambapo realloc inakuwezesha reallocate chunk ya kumbukumbu 538 00:24:27,740 --> 00:24:29,570 na kufanya hivyo kubwa au ndogo. 539 00:24:29,570 --> 00:24:33,060 Hadithi hiyo kwa muda mrefu fupi na kwa wimbi la mkono wangu kwa leo, 540 00:24:33,060 --> 00:24:35,620 tunajua kwamba kile GetString anafanya ni ni aina 541 00:24:35,620 --> 00:24:39,720 ya magically kuongezeka au kushuka buffer kama mtumiaji 542 00:24:39,720 --> 00:24:41,440 aina katika kamba yake. 543 00:24:41,440 --> 00:24:43,962 >> Hivyo kama mtumiaji aina kamba fupi, kanuni huu 544 00:24:43,962 --> 00:24:45,920 tu kutenga kutosha kumbukumbu na kifafa kamba. 545 00:24:45,920 --> 00:24:48,086 Kama mtumiaji anaendelea kuandika kama mimi alifanya hivyo tena na tena 546 00:24:48,086 --> 00:24:50,330 na tena, vizuri, kama buffer ya awali hii kubwa 547 00:24:50,330 --> 00:24:53,310 na mpango anatambua, kwa kusubiri dakika, mimi nina nje ya nafasi, 548 00:24:53,310 --> 00:24:55,410 itakuja mara mbili ukubwa wa buffer 549 00:24:55,410 --> 00:24:59,110 na kisha mara mbili ya ukubwa wa buffer na kificho kwamba anafanya mara dufu, 550 00:24:59,110 --> 00:25:03,170 kama sisi kuangalia ni hapa, ni tu hii wajanja mmoja mjengo. 551 00:25:03,170 --> 00:25:06,830 Unaweza kuwa na kuonekana syntax hii kabla, lakini kama wewe kusema nyota ni sawa na, 552 00:25:06,830 --> 00:25:10,470 hii ni kitu kimoja kama akisema uwezo mara 2. 553 00:25:10,470 --> 00:25:13,390 Hivyo ni kuvaa tu mara dufu uwezo wa buffer 554 00:25:13,390 --> 00:25:17,480 na kisha kuwaambia realloc kutoa yenyewe kwamba kumbukumbu mengi zaidi. 555 00:25:17,480 --> 00:25:19,720 >> Sasa, kama kando, kuna ni kazi nyingine katika hapa 556 00:25:19,720 --> 00:25:23,680 kwamba sisi si kuangalia ndani ya maelezo yoyote zaidi ya kuonyesha katika GetInt, 557 00:25:23,680 --> 00:25:26,150 sisi kutumia GetString katika GetInt. 558 00:25:26,150 --> 00:25:28,192 Sisi kuangalia kwamba siyo null, ambayo, kukumbuka, 559 00:25:28,192 --> 00:25:30,400 ni thamani maalum kwamba ina maana kitu potoka. 560 00:25:30,400 --> 00:25:31,233 Tuko nje ya kumbukumbu. 561 00:25:31,233 --> 00:25:32,310 Bora kuangalia kwa ajili hiyo. 562 00:25:32,310 --> 00:25:33,710 Na sisi kurudi thamani mwangalizi. 563 00:25:33,710 --> 00:25:37,850 Lakini mimi itabidi kuahirisha kwa maoni kama kwa kwa nini na kisha sisi kutumia binamu hii ya scanf 564 00:25:37,850 --> 00:25:42,100 aitwaye sscanf na ni zamu nje kwamba sscanf, au kamba scanf, 565 00:25:42,100 --> 00:25:45,310 inakuwezesha tuangalie mstari kwamba mtumiaji typed katika na basi wewe 566 00:25:45,310 --> 00:25:49,610 kuchambua kimsingi na kile mimi nina kufanya hapa ni mimi nina kuwaambia sscanf, 567 00:25:49,610 --> 00:25:54,440 kuchambua chochote mtumiaji ana typed katika na kuhakikisha% i, 568 00:25:54,440 --> 00:25:59,250 kuna integer ndani yake, na sisi si kupata katika leo kwa nini hasa pale pia 569 00:25:59,250 --> 00:26:03,760 % c hapa, lakini hiyo kwa kifupi inaruhusu sisi kuchunguza kama mtumiaji typed 570 00:26:03,760 --> 00:26:06,050 katika kitu bogus baada idadi. 571 00:26:06,050 --> 00:26:11,766 Hivyo sababu hiyo GetInt na GetString kukuambia kujaribu tena, jaribu tena, jaribu tena 572 00:26:11,766 --> 00:26:13,640 Ni kwa sababu ya yote ya kwamba kanuni tumekuwa imeandikwa, 573 00:26:13,640 --> 00:26:17,900 ni aina ya kuangalia pembejeo mtumiaji katika kuhakikisha ni kabisa numeric 574 00:26:17,900 --> 00:26:21,700 au ni floating halisi hatua thamani au kama, 575 00:26:21,700 --> 00:26:24,233 kulingana na thamani gani kazi unatumia. 576 00:26:24,233 --> 00:26:25,060 >> Whew. 577 00:26:25,060 --> 00:26:25,710 SAWA. 578 00:26:25,710 --> 00:26:27,592 Hiyo ilikuwa ni Mouthful lakini uhakika hapa ni 579 00:26:27,592 --> 00:26:29,550 kwamba sababu tulikuwa na wale magurudumu mafunzo juu ya 580 00:26:29,550 --> 00:26:32,880 ni kwa sababu katika ngazi ya chini, kuna tu mambo mengi ambayo 581 00:26:32,880 --> 00:26:35,674 yanaweza kwenda vibaya kwamba tulitaka kwa preemptively kushughulikia 582 00:26:35,674 --> 00:26:38,090 mambo hayo kwa hakika katika wiki ya kwanza ya darasa, 583 00:26:38,090 --> 00:26:42,230 lakini sasa kwa pset nne na pset tano na zaidi ya wewe kuona kwamba ni zaidi hata 584 00:26:42,230 --> 00:26:45,570 wewe lakini pia wewe uwezo zaidi ya kutatua hayo aina ya matatizo 585 00:26:45,570 --> 00:26:47,180 wewe mwenyewe. 586 00:26:47,180 --> 00:26:51,770 Maswali yoyote juu ya GetString au GetInt? 587 00:26:51,770 --> 00:26:52,630 Yeah? 588 00:26:52,630 --> 00:26:55,130 >> Watazamaji: Kwa nini wewe mara mbili uwezo wa buffer 589 00:26:55,130 --> 00:26:57,630 badala ya kuongeza tu hivyo kwa kiasi halisi? 590 00:26:57,630 --> 00:26:58,100 >> DAVID Malan: swali nzuri. 591 00:26:58,100 --> 00:27:00,474 Kwa nini sisi mara mbili ya uwezo ya buffer kinyume 592 00:27:00,474 --> 00:27:02,800 tu kuongeza kuwa na baadhi ya thamani ya mara kwa mara? 593 00:27:02,800 --> 00:27:03,900 Ilikuwa ni uamuzi wa kubuni. 594 00:27:03,900 --> 00:27:08,590 Sisi tu aliamua kwamba kwa sababu inaelekea kuwa ni kidogo ghali wakati-busara kuuliza 595 00:27:08,590 --> 00:27:10,440 mfumo wa uendeshaji kwa kumbukumbu, hatukuwa 596 00:27:10,440 --> 00:27:13,210 wanataka kuishia kupata katika Hali kwa masharti kubwa 597 00:27:13,210 --> 00:27:14,960 kuwa tulikuwa kuuliza OS tena na tena 598 00:27:14,960 --> 00:27:17,500 na tena na tena katika mfululizo wa haraka kwa ajili ya kumbukumbu. 599 00:27:17,500 --> 00:27:20,387 Hivyo sisi tu aliamua, kwa kiasi fulani kiholela lakini tunatarajia sababu, 600 00:27:20,387 --> 00:27:22,720 kwamba, unajua nini, hebu kujaribu kupata mbele ya sisi wenyewe 601 00:27:22,720 --> 00:27:25,520 na kuweka tu mara dufu hivyo ili sisi kupunguza kiasi cha mara 602 00:27:25,520 --> 00:27:29,010 tuna kuwaita malloc au realloc, lakini hukumu jumla 603 00:27:29,010 --> 00:27:31,820 piga kutokana na kukosekana kwa kujua nini watumiaji kutaka aina katika. 604 00:27:31,820 --> 00:27:33,600 Njia zote mbili inaweza kuwa arguable. 605 00:27:33,600 --> 00:27:35,430 Arguably nzuri. 606 00:27:35,430 --> 00:27:39,240 >> Basi hebu tuangalie michache ya madhara mengine ya kumbukumbu, 607 00:27:39,240 --> 00:27:41,610 mambo ambayo yanaweza kwenda vibaya na zana kwamba unaweza 608 00:27:41,610 --> 00:27:43,880 kutumia kukamata aina hii ya makosa. 609 00:27:43,880 --> 00:27:47,800 Ni zinageuka nyote, hata kama check50 hana niliwaambia kama kiasi, 610 00:27:47,800 --> 00:27:50,050 wamekuwa kuandika buggy kificho tangu wiki moja, 611 00:27:50,050 --> 00:27:53,630 hata kama vipimo wote check50 ni kupita, na hata kama wewe na TF yako 612 00:27:53,630 --> 00:27:56,010 ni super na imani kwamba kanuni yako anafanya kazi kama ilivyokusudiwa. 613 00:27:56,010 --> 00:27:59,190 Kanuni yako imekuwa buggy au kiujanja kwa kuwa nyote, 614 00:27:59,190 --> 00:28:02,540 katika kutumia maktaba CS50, wamekuwa kuvuja kumbukumbu. 615 00:28:02,540 --> 00:28:06,040 Tumekuwa kuuliza mfumo wa uendeshaji kwa kumbukumbu katika zaidi ya mipango 616 00:28:06,040 --> 00:28:08,850 umefanya imeandikwa, lakini wameweza kamwe kweli kutokana na nyuma. 617 00:28:08,850 --> 00:28:12,110 Umetumia GetString na GetInt na GetFloat, 618 00:28:12,110 --> 00:28:15,270 lakini kwa GetString, wameweza kamwe kuitwa unGetString au Kutoa 619 00:28:15,270 --> 00:28:19,890 Kamba Nyuma au kama, lakini tumeona kwamba GetString gani kutenga kumbukumbu 620 00:28:19,890 --> 00:28:22,810 kwa njia ya malloc au hii kazi realloc, ambayo ni tu 621 00:28:22,810 --> 00:28:25,670 sawa sana katika ulimwengu wa kiroho, na bado, tumekuwa 622 00:28:25,670 --> 00:28:28,629 kuuliza mfumo wa uendeshaji kwa kumbukumbu na kumbukumbu tena na tena 623 00:28:28,629 --> 00:28:29,670 lakini kamwe kutoa ni nyuma. 624 00:28:29,670 --> 00:28:33,550 >> Sasa, kama kando, zinageuka kuwa wakati mpango quits, wote wa kumbukumbu 625 00:28:33,550 --> 00:28:34,870 ni moja kwa moja huru. 626 00:28:34,870 --> 00:28:36,150 Hivyo si kuwa mpango kubwa. 627 00:28:36,150 --> 00:28:38,590 Ni si kwenda kuvunja IDE au polepole mambo ya chini, 628 00:28:38,590 --> 00:28:40,670 lakini wakati mipango kufanya ujumla kuvuja kumbukumbu 629 00:28:40,670 --> 00:28:42,170 na wao ni mbio kwa muda mrefu. 630 00:28:42,170 --> 00:28:45,640 Kama wameweza milele kuonekana kijinga kidogo beach mpira katika Mac OS au hourglass 631 00:28:45,640 --> 00:28:51,160 juu ya Windows ambapo ni aina ya kupunguza chini au kufikiri au mawazo 632 00:28:51,160 --> 00:28:53,770 au tu kwa kweli kuanza kupunguza kwa kutambaa, 633 00:28:53,770 --> 00:28:56,960 ni uwezekano sana inaweza kuwa Kutokana na kumbukumbu kuvuja. 634 00:28:56,960 --> 00:28:59,970 Programmers aliyeandika programu unatumia 635 00:28:59,970 --> 00:29:03,570 kuuliza mfumo wa uendeshaji kwa ajili ya kumbukumbu kila baada ya dakika chache, kila saa. 636 00:29:03,570 --> 00:29:05,570 Lakini kama wewe ni mbio programu, hata kama ni 637 00:29:05,570 --> 00:29:08,680 kupunguzwa katika kompyuta yako kwa masaa au siku ya mwisho, 638 00:29:08,680 --> 00:29:11,980 unaweza kuwa kuomba zaidi na zaidi kumbukumbu na kamwe kweli kutumia 639 00:29:11,980 --> 00:29:15,180 na hivyo kanuni yako inaweza kuwa, au mipango inaweza kuwa kuvuja kumbukumbu, 640 00:29:15,180 --> 00:29:18,350 na kama kuanza kuvuja kumbukumbu, kuna chini ya kumbukumbu kwa programu nyingine, 641 00:29:18,350 --> 00:29:21,220 na athari ni kwa kupunguza kila kitu chini. 642 00:29:21,220 --> 00:29:23,600 >> Sasa, hii ni kwa mbali moja ya programu nyingi za mauaji 643 00:29:23,600 --> 00:29:26,350 utakuwa na fursa kuendesha katika CS50 kadiri 644 00:29:26,350 --> 00:29:31,650 kama matokeo yake ni hata zaidi kuliko ya wachache Clang au kufanya au yoyote ya amri 645 00:29:31,650 --> 00:29:35,930 mipango mstari tumekuwa kukimbia kabla lakini nashiriki, iliyoingia katika pato lake 646 00:29:35,930 --> 00:29:39,810 ni baadhi ya vidokezo super kusaidia kwamba itakuwa muhimu ama kwa pset nne 647 00:29:39,810 --> 00:29:41,510 au kwa hakika pset tano. 648 00:29:41,510 --> 00:29:44,250 Hivyo Valgrind ni chombo ambazo zinaweza kutumika kwa kuangalia 649 00:29:44,250 --> 00:29:46,930 kwa uvujaji kumbukumbu katika mpango wako. 650 00:29:46,930 --> 00:29:48,570 Ni rahisi kuendesha. 651 00:29:48,570 --> 00:29:51,420 Kukimbia Valgrind na kisha, hata ingawa ni verbose kidogo, 652 00:29:51,420 --> 00:29:54,440 dash dash kuvuja kuangalia sawa kamili, na kisha dot 653 00:29:54,440 --> 00:29:56,320 kufyeka na jina la mpango wako. 654 00:29:56,320 --> 00:30:00,010 Hivyo Valgrind mapenzi kisha kukimbia mpango wako na mwishoni sana ya mpango wako 655 00:30:00,010 --> 00:30:02,240 mbio kabla quits na anatoa mwingine haraka, 656 00:30:02,240 --> 00:30:04,980 itakuja kuchambua yako Mpango wakati imekuwa ni mbio 657 00:30:04,980 --> 00:30:07,740 na kukuambia gani kuvuja kumbukumbu yoyote na bado bora, 658 00:30:07,740 --> 00:30:10,610 je kugusa kumbukumbu kwamba hawakuwa wa wewe? 659 00:30:10,610 --> 00:30:13,700 Haiwezi kukamata kila kitu, lakini ni nzuri katika kuambukizwa mambo mengi. 660 00:30:13,700 --> 00:30:19,700 >> Hivyo hapa ni mfano wa kuwa na kukimbia yangu mpango huu, baada ya kukimbia Valgrind, 661 00:30:19,700 --> 00:30:21,470 juu ya mpango ujulikanao kumbukumbu, na mimi nina kwenda 662 00:30:21,470 --> 00:30:24,730 kuonyesha mistari kwamba ni hatimaye ya riba na sisi. 663 00:30:24,730 --> 00:30:27,690 Hivyo kuna usumbufu hata zaidi kwamba nimepata kufutwa kutoka slide. 664 00:30:27,690 --> 00:30:30,930 Lakini hebu tu kuona nini hii mpango ni uwezo wa kutuambia. 665 00:30:30,930 --> 00:30:34,800 Ni uwezo wa kutuambia mambo kama batili kuandika ya ukubwa 4. 666 00:30:34,800 --> 00:30:38,020 Kwa maneno mengine, kama wewe kugusa kumbukumbu, hasa ka 4 ya kumbukumbu 667 00:30:38,020 --> 00:30:40,350 kwamba unapaswa kuwa, Valgrind anaweza kukuambia kwamba. 668 00:30:40,350 --> 00:30:41,660 Kuandika batili ya ukubwa 4. 669 00:30:41,660 --> 00:30:43,640 Wewe kuguswa ka nne kwamba unapaswa kuwa. 670 00:30:43,640 --> 00:30:44,840 Wapi unaweza kufanya hivyo? 671 00:30:44,840 --> 00:30:45,900 Hii ni uzuri. 672 00:30:45,900 --> 00:30:50,000 Kumbukumbu nukta c mstari 21 ni wapi Star up na hii ndiyo sababu ni manufaa. 673 00:30:50,000 --> 00:30:53,410 Kiasi kama GDB, inaweza kusaidia uhakika wewe katika kosa halisi. 674 00:30:53,410 --> 00:30:57,170 >> Sasa, hii moja zaidi kidogo verbose, kama si utata. 675 00:30:57,170 --> 00:31:01,307 Ka 40 katika 1 vitalu ni dhahiri waliopotea katika hasara rekodi ya 1 ya 1. 676 00:31:01,307 --> 00:31:02,140 Hiyo ina maana gani? 677 00:31:02,140 --> 00:31:05,920 Naam, ni njia tu wewe aliuliza kwa Ka 40 na kamwe akampa. 678 00:31:05,920 --> 00:31:08,930 Wewe kuitwa malloc au wewe kuitwa GetString na mfumo wa uendeshaji 679 00:31:08,930 --> 00:31:12,450 aliwapa 40 ka, lakini kamwe huru au iliyotolewa kwamba kumbukumbu, 680 00:31:12,450 --> 00:31:15,400 na kuwa wa haki, tumekuwa kamwe kuonyesha jinsi ya kutoa nyuma kumbukumbu. 681 00:31:15,400 --> 00:31:17,910 Zinageuka kuna super kazi rahisi kuitwa bure. 682 00:31:17,910 --> 00:31:21,170 Inachukua moja hoja, jambo unataka bure au kutoa nyuma, 683 00:31:21,170 --> 00:31:23,430 lakini 40 ka, inaonekana, katika mpango huu 684 00:31:23,430 --> 00:31:27,300 zimepotea katika mstari 20 ya kumbukumbu dot c. 685 00:31:27,300 --> 00:31:28,650 >> Basi hebu angalia mpango huu. 686 00:31:28,650 --> 00:31:31,020 Ni super maana. 687 00:31:31,020 --> 00:31:33,980 Ni tu inaonyesha makosa fulani. 688 00:31:33,980 --> 00:31:34,920 Hivyo hebu tuangalie. 689 00:31:34,920 --> 00:31:39,920 Hapa ni kuu na kuu, ilani, wito kazi kuitwa f na kisha anarudi. 690 00:31:39,920 --> 00:31:41,550 Hivyo si yote ya kuvutia. 691 00:31:41,550 --> 00:31:42,664 Je f nini? 692 00:31:42,664 --> 00:31:44,330 Taarifa Sikutaka kwa mfano. 693 00:31:44,330 --> 00:31:46,520 Nilitaka kuendelea kificho kama ndogo kama iwezekanavyo. 694 00:31:46,520 --> 00:31:49,530 Hivyo mimi kuweka f juu kuu na hiyo ni nzuri, hakika, 695 00:31:49,530 --> 00:31:51,500 kwa mipango ya muda kama hii. 696 00:31:51,500 --> 00:31:56,910 Hivyo f haina kurudi chochote na anafanya kuchukua kitu chochote, lakini haina kufanya hivyo. 697 00:31:56,910 --> 00:31:59,620 Inatangaza, kiasi kama katika mfano Binky, 698 00:31:59,620 --> 00:32:02,682 pointer kuitwa x ambayo inaenda kuhifadhi pepe ya int. 699 00:32:02,682 --> 00:32:03,890 Hivyo hiyo ni upande wa mkono wa kushoto. 700 00:32:03,890 --> 00:32:07,230 Katika lugha ya Kiingereza, ni nini mkono wa kulia upande kufanya? 701 00:32:07,230 --> 00:32:09,770 Mtu yeyote? 702 00:32:09,770 --> 00:32:13,665 Ni nini hii kufanya kwa ajili yetu? 703 00:32:13,665 --> 00:32:14,651 Yeah? 704 00:32:14,651 --> 00:32:16,623 >> Watazamaji: [inaudible] Mara ukubwa wa int 705 00:32:16,623 --> 00:32:19,175 ambayo ni mara 10 kwamba [inaudible] 706 00:32:19,175 --> 00:32:20,800 DAVID Malan: nzuri na napenda kujumlisha. 707 00:32:20,800 --> 00:32:25,480 Hivyo kutenga nafasi ya kutosha kwa ajili ya 10 integers au 10, nini ukubwa wa int, 708 00:32:25,480 --> 00:32:29,340 ni ka nne, hivyo mara 10 4 ni 40, ili upande wa kulia kwamba nimekuwa 709 00:32:29,340 --> 00:32:33,930 yalionyesha ni nipe 40 ka na kuhifadhi anuani ya Byte kwanza 710 00:32:33,930 --> 00:32:34,940 ndani ya x. 711 00:32:34,940 --> 00:32:38,380 Na sasa mwisho, na hapa ndipo mpango huu ni Buggy, nini 712 00:32:38,380 --> 00:32:41,540 kibaya na mstari 21 kulingana na mantiki hiyo? 713 00:32:41,540 --> 00:32:45,197 714 00:32:45,197 --> 00:32:46,280 Nini mbaya na mstari 21? 715 00:32:46,280 --> 00:32:46,780 Yeah? 716 00:32:46,780 --> 00:32:49,550 Watazamaji: Unaweza si ripoti katika x [inaudible]. 717 00:32:49,550 --> 00:32:50,300 DAVID Malan: Yeah. 718 00:32:50,300 --> 00:32:52,270 Mimi hawapaswi ripoti katika x kama hicho. 719 00:32:52,270 --> 00:32:53,850 Hivyo syntactically, hiyo ni sawa. 720 00:32:53,850 --> 00:32:56,990 Nini ni nzuri ni, kiasi kama wewe unaweza kutibu jina la safu 721 00:32:56,990 --> 00:33:01,080 kana kwamba ni pointer, vile vile Unaweza kutibu pointer kana kwamba ni 722 00:33:01,080 --> 00:33:06,425 safu, na hivyo naweza syntactically kusema x mabano kitu, x mabano i, 723 00:33:06,425 --> 00:33:07,800 lakini 10 ni tatizo. 724 00:33:07,800 --> 00:33:09,096 Kwa nini? 725 00:33:09,096 --> 00:33:10,910 >> Watazamaji: Kwa sababu si ndani. 726 00:33:10,910 --> 00:33:12,390 >> DAVID Malan: Siyo ndani ya kwamba chunk ya kumbukumbu. 727 00:33:12,390 --> 00:33:15,306 Nini thamani kubwa ni lazima kuwa na kuweka katika mabano mraba wale? 728 00:33:15,306 --> 00:33:16,870 9, 0 kupitia 9. 729 00:33:16,870 --> 00:33:18,160 Kwa sababu ya sifuri Indexing. 730 00:33:18,160 --> 00:33:20,190 Hivyo 0 kupitia 9 itakuwa nzuri. 731 00:33:20,190 --> 00:33:23,960 Mabano 10 si nzuri na lakini, kukumbuka ingawa, kila wakati 732 00:33:23,960 --> 00:33:27,017 Mimi kuonekana kujaribu kufanya CS50 IDE ajali na kuandika katika maadili bogus, 733 00:33:27,017 --> 00:33:29,100 haina daima kushirikiana, na kwa hakika, wewe mara nyingi 734 00:33:29,100 --> 00:33:31,460 kupata bahati kwa sababu tu mfumo wa uendeshaji haina 735 00:33:31,460 --> 00:33:35,467 taarifa kwamba wewe milele hivyo kidogo kupita baadhi chunk ya kumbukumbu, 736 00:33:35,467 --> 00:33:38,300 kwa sababu wewe walikaa ndani ya kitaalam sehemu yako, lakini zaidi juu ya kwamba 737 00:33:38,300 --> 00:33:40,940 darasani mifumo ya uendeshaji, na hivyo kitu kama hii 738 00:33:40,940 --> 00:33:43,000 inaweza kwa urahisi sana kwenda bila kutambulika. 739 00:33:43,000 --> 00:33:48,120 Mpango wako kamwe kwenda ajali mara kwa mara lakini labda mara moja katika muda. 740 00:33:48,120 --> 00:33:50,610 >> Na hivyo hebu jaribu Valgrind juu ya hili, na hapa ni 741 00:33:50,610 --> 00:33:52,870 ambapo tutaweza kupata kuzidiwa na pato kwa muda. 742 00:33:52,870 --> 00:34:00,810 Hivyo kufanya kumbukumbu Valgrind kuvuja kuangalia sawa full dot slash kumbukumbu. 743 00:34:00,810 --> 00:34:03,040 Na hapa ni kwa nini mimi ahadi uandikishaji huu utazidi. 744 00:34:03,040 --> 00:34:05,700 Hapa ni nini Valgrind, hapa ni nini programu, baadhi ya miaka iliyopita- 745 00:34:05,700 --> 00:34:08,469 aliamua itakuwa ni wazo nzuri kwa pato kuangalia kama. 746 00:34:08,469 --> 00:34:09,750 Basi hebu kufanya maana ya hii. 747 00:34:09,750 --> 00:34:13,120 Hivyo njia zote juu ya mkono wa kushoto upande kwa sababu hakuna nzuri 748 00:34:13,120 --> 00:34:16,620 Ni utaratibu ID kwa mpango sisi kukimbia tu, kitambulisho kipekee 749 00:34:16,620 --> 00:34:18,030 kwa ajili ya mpango sisi tu mbio. 750 00:34:18,030 --> 00:34:19,738 Sisi kufutwa kwamba kuanzia slide, lakini kuna 751 00:34:19,738 --> 00:34:22,190 ni baadhi ya taarifa muhimu katika hapa. 752 00:34:22,190 --> 00:34:24,684 >> Hebu kitabu hadi juu sana. 753 00:34:24,684 --> 00:34:25,600 Hapa ni wapi sisi kuanza. 754 00:34:25,600 --> 00:34:27,040 Hivyo si yote pato kiasi hicho. 755 00:34:27,040 --> 00:34:30,429 Hapa ni kwamba kuandika batili ukubwa 4 kwenye mstari 21. 756 00:34:30,429 --> 00:34:31,760 Naam, alikuwa mstari 21 nini? 757 00:34:31,760 --> 00:34:34,500 Mstari 21 ilikuwa hasa hii na inafanya hisia 758 00:34:34,500 --> 00:34:37,290 kwamba mimi niko katika kihalali kuandika ka 4 kwa sababu mimi nina 759 00:34:37,290 --> 00:34:40,389 kujaribu kuweka integer hii, ambayo inaweza kuwa kitu chochote, 760 00:34:40,389 --> 00:34:42,370 tu hutokea kwa kuwa sifuri, lakini nina kujaribu 761 00:34:42,370 --> 00:34:44,940 kuiweka katika eneo hiyo haina mali yangu. 762 00:34:44,940 --> 00:34:50,900 Aidha, chini hapa, 40 ka katika moja vitalu ni dhahiri waliopotea katika rekodi 1. 763 00:34:50,900 --> 00:34:56,500 Hii ni kwa sababu wakati mimi wito malloc hapa, mimi kamwe kweli huru kumbukumbu. 764 00:34:56,500 --> 00:34:58,140 >> Hivyo ni jinsi gani tunaweza kurekebisha hili? 765 00:34:58,140 --> 00:35:02,970 Hebu kwenda mbele na kuwa salama kidogo na kufanya 9 huko na napenda hapa bure x. 766 00:35:02,970 --> 00:35:04,820 Hii ni kazi mpya kwa leo. 767 00:35:04,820 --> 00:35:11,520 Kama mimi sasa rerun kufanya kumbukumbu dot slash, hebu kukimbia Valgrind juu yake tena, 768 00:35:11,520 --> 00:35:14,990 kuongeza dirisha yangu na kugonga kuingia. 769 00:35:14,990 --> 00:35:16,900 Sasa, ni nzuri. 770 00:35:16,900 --> 00:35:19,590 Wao kuzika habari njema katika yote ya pato hili. 771 00:35:19,590 --> 00:35:20,810 Vitalu wote lundo walikuwa huru. 772 00:35:20,810 --> 00:35:23,604 Tutaweza kurudi kwa kile chungu ni, lakini hakuna uvujaji yanawezekana. 773 00:35:23,604 --> 00:35:25,520 Hivyo hii ni tu mwingine chombo kwa ajili ya chombo kit yako 774 00:35:25,520 --> 00:35:30,220 na ambayo unaweza kuanza kupata sasa makosa kama hayo. 775 00:35:30,220 --> 00:35:34,532 >> Lakini hebu angalia nini zaidi yanaweza kwenda vibaya hapa. 776 00:35:34,532 --> 00:35:38,890 Hebu mpito sasa kwa kweli kutatua tatizo. 777 00:35:38,890 --> 00:35:42,440 Kama kando, kama hii itakuwa kupunguza kidogo ya kuchanganyikiwa au mvutano, 778 00:35:42,440 --> 00:35:43,430 hii sasa ni funny. 779 00:35:43,430 --> 00:35:46,400 780 00:35:46,400 --> 00:35:46,900 Naam. 781 00:35:46,900 --> 00:35:49,040 Hiyo ni nzuri sana. 782 00:35:49,040 --> 00:35:50,890 Kwa sababu kuyatumia ni anwani na anwani 783 00:35:50,890 --> 00:35:53,098 kwa ujumla kwa mkataba imeandikwa na hexadesimoli. 784 00:35:53,098 --> 00:35:54,650 Ha, ha, hii ni funny sasa. 785 00:35:54,650 --> 00:35:58,390 Hata hivyo, hivyo hebu sasa kweli kutatua tatizo. 786 00:35:58,390 --> 00:36:00,840 Hii imekuwa super, super ngazi ya chini hivi sasa, 787 00:36:00,840 --> 00:36:03,950 na tunaweza kweli kufanya muhimu mambo kwa maelezo haya ngazi ya chini. 788 00:36:03,950 --> 00:36:06,710 >> Hivyo sisi ilianzisha wiki chache iliyopita dhana ya safu. 789 00:36:06,710 --> 00:36:09,177 Safu ilikuwa nzuri kwa sababu ni vigumu kusafisha kificho wetu 790 00:36:09,177 --> 00:36:11,760 kwa sababu kama sisi alitaka kuandika mpango na wanafunzi mbalimbali 791 00:36:11,760 --> 00:36:15,270 au majina mbalimbali na nyumba na dorms na vyuo na yote hayo, 792 00:36:15,270 --> 00:36:19,430 tunaweza kuhifadhi kila kitu zaidi cleanly ndani ya safu. 793 00:36:19,430 --> 00:36:23,039 Lakini kupendekeza upande wa chini moja wa safu hivi sasa. 794 00:36:23,039 --> 00:36:26,080 Hata kama umefanya si mateso mwenyewe katika mpango, tu instinctively, 795 00:36:26,080 --> 00:36:30,870 kile ni kitu mbaya kuhusu safu, labda? 796 00:36:30,870 --> 00:36:32,337 Nasikia baadhi murmurs. 797 00:36:32,337 --> 00:36:34,170 Watazamaji: Ni vigumu na mabadiliko ya kawaida. 798 00:36:34,170 --> 00:36:36,128 DAVID Malan: Ni vigumu na mabadiliko ya kawaida. 799 00:36:36,128 --> 00:36:38,660 Huwezi kubadili ukubwa wa safu, kwa kweli, per se 800 00:36:38,660 --> 00:36:43,040 katika C. Unaweza kutenga safu mwingine, hoja ya kila kitu kutoka moja ya zamani 801 00:36:43,040 --> 00:36:45,380 ndani ya mwezi, na sasa kuwa na baadhi ya nafasi ya ziada, 802 00:36:45,380 --> 00:36:47,469 lakini si kama lugha kama Java au chatu 803 00:36:47,469 --> 00:36:49,760 au idadi yoyote ya wengine Lugha ambazo baadhi yenu 804 00:36:49,760 --> 00:36:52,070 inaweza kuwa na mazoea ambapo unaweza tu kuendelea kuongeza vitu 805 00:36:52,070 --> 00:36:53,930 ad nauseam hadi mwisho wa safu. 806 00:36:53,930 --> 00:36:57,880 Wakati una safu ya ukubwa 6, kwamba ni kawaida yake, 807 00:36:57,880 --> 00:37:01,970 na hivyo kama wazo mapema kuwa buffer ya ukubwa fulani, 808 00:37:01,970 --> 00:37:05,940 una nadhani nje ya lango kile kawaida unataka kuwa ni? 809 00:37:05,940 --> 00:37:07,880 Kama wewe nadhani kubwa mno, wewe ni kupoteza nafasi. 810 00:37:07,880 --> 00:37:10,950 Kama wewe nadhani ndogo mno, wewe hawezi kuhifadhi data kwamba, angalau 811 00:37:10,950 --> 00:37:12,940 bila mengi zaidi kazi. 812 00:37:12,940 --> 00:37:18,180 >> Hivyo leo, shukrani kwa kuyatumia, tunaweza kuanza wakitengeneza pamoja desturi yetu wenyewe 813 00:37:18,180 --> 00:37:20,989 miundo data, na katika kweli, hapa ni kitu 814 00:37:20,989 --> 00:37:23,030 kwamba inaonekana zaidi kidogo cryptic katika mtazamo wa kwanza, 815 00:37:23,030 --> 00:37:26,440 lakini hii ni nini Tutamwita wanaohusishwa orodha, na jina lake aina ya muhtasari 816 00:37:26,440 --> 00:37:26,940 yake. 817 00:37:26,940 --> 00:37:29,550 Ni orodha ya namba, au katika kesi hiyo, orodha ya namba, 818 00:37:29,550 --> 00:37:33,480 lakini inaweza kuwa orodha ya kitu chochote, lakini ni wanaohusishwa pamoja na njia ya mishale, 819 00:37:33,480 --> 00:37:36,380 na tu kuchukua nadhani na kile mbinu 820 00:37:36,380 --> 00:37:38,310 sisi ni kwenda kuwa na uwezo kushona pamoja, 821 00:37:38,310 --> 00:37:42,540 aina ya kama popcorn na thread, wanaohusishwa orodha mistatili hapa? 822 00:37:42,540 --> 00:37:43,936 Idadi yake? 823 00:37:43,936 --> 00:37:45,560 Nini lugha ya msingi kipengele? 824 00:37:45,560 --> 00:37:46,350 >> Watazamaji: pointer. 825 00:37:46,350 --> 00:37:47,308 >> DAVID Malan: pointer. 826 00:37:47,308 --> 00:37:51,700 Hivyo kila mmoja mishale hizi hapa inawakilisha pointer au tu mahali. 827 00:37:51,700 --> 00:37:54,590 Hivyo kwa maneno mengine, kama nataka kuhifadhi orodha ya namba, 828 00:37:54,590 --> 00:37:59,040 Siwezi tu kuhifadhi kama nataka uwezo wa kukua na kuogopa 829 00:37:59,040 --> 00:38:00,990 muundo wa data zangu katika safu. 830 00:38:00,990 --> 00:38:03,000 Hivyo mimi haja ya kuwa na kidogo sophistication zaidi, 831 00:38:03,000 --> 00:38:05,720 lakini taarifa kwamba hii picha aina ya unaonyesha 832 00:38:05,720 --> 00:38:08,650 kwamba kama wameweza tu got nyuzi kidogo kuunganisha kila kitu pamoja, 833 00:38:08,650 --> 00:38:13,100 pengine ni kwamba ngumu ya kutengeneza nafasi katika kati ya mbili ya mistatili wale 834 00:38:13,100 --> 00:38:16,750 au mbili ya nodes hizo, kama tutaweza kuanza kuwaita, kuweka katika nodi mpya, 835 00:38:16,750 --> 00:38:19,547 na kisha kwa baadhi uzi mpya, tu shimoni nodes tatu kwa pamoja, 836 00:38:19,547 --> 00:38:22,880 moja ya kwanza, moja ya mwisho, na moja kwamba wewe tu kuingizwa katika katikati. 837 00:38:22,880 --> 00:38:26,000 >> Na hakika orodha wanaohusishwa, tofauti na safu, ni nguvu. 838 00:38:26,000 --> 00:38:27,840 Inaweza kukua na inaweza kuogopa na huna 839 00:38:27,840 --> 00:38:32,434 una kujua au huduma mapema jinsi data kiasi gani ni kwenda kuwa hifadhi, 840 00:38:32,434 --> 00:38:35,600 lakini zinageuka tuna kuwa kidogo makini kuhusu jinsi ya kutekeleza hili. 841 00:38:35,600 --> 00:38:39,070 Hivyo kwanza hebu fikiria jinsi sisi kutekeleza mmoja wa haya mistatili kidogo. 842 00:38:39,070 --> 00:38:40,690 Ni rahisi kutekeleza int. 843 00:38:40,690 --> 00:38:44,000 Wewe tu kusema int n na kisha kupata ka 4 kwa int, 844 00:38:44,000 --> 00:38:49,089 lakini jinsi gani mimi kupata int, simu yake n, na kisha pointer, hebu simu yake ijayo. 845 00:38:49,089 --> 00:38:50,880 Tunaweza kuwaita hawa mambo chochote tunataka 846 00:38:50,880 --> 00:38:53,590 lakini nahitaji muundo data desturi. 847 00:38:53,590 --> 00:38:54,257 Yeah? 848 00:38:54,257 --> 00:38:57,020 >> Watazamaji: Ampersand [inaudible]. 849 00:38:57,020 --> 00:39:00,940 >> DAVID Malan: Hivyo ampersand tutatumia kupata pepe ya nodi uwezekano. 850 00:39:00,940 --> 00:39:02,740 Lakini tunahitaji mwingine hulka ya C ili 851 00:39:02,740 --> 00:39:06,700 kunipa uwezo wa kujenga hii Mstatili desturi, desturi hii 852 00:39:06,700 --> 00:39:08,919 kutofautiana kama wewe, katika kumbukumbu. 853 00:39:08,919 --> 00:39:09,710 Watazamaji: struct. 854 00:39:09,710 --> 00:39:10,626 DAVID Malan: struct. 855 00:39:10,626 --> 00:39:14,310 Kumbuka kutoka wiki iliyopita, sisi ilianzisha struct, hii keyword rahisi 856 00:39:14,310 --> 00:39:16,254 kwamba unatuwezesha kufanya mambo kama hayo. 857 00:39:16,254 --> 00:39:18,420 C hakuwa na kuja na data muundo inayoitwa mwanafunzi. 858 00:39:18,420 --> 00:39:22,190 Ni huja na int na kuelea na char na vile, lakini haina kuja na mwanafunzi, 859 00:39:22,190 --> 00:39:26,750 lakini tunaweza kujenga aina mwanafunzi data, mwanafunzi muundo, na syntax hii 860 00:39:26,750 --> 00:39:27,250 hapa. 861 00:39:27,250 --> 00:39:28,350 Na utaona hii tena na tena. 862 00:39:28,350 --> 00:39:30,426 Hivyo msiwe na wasiwasi juu kukariri maneno, 863 00:39:30,426 --> 00:39:33,300 lakini keyword hiyo ni muhimu ni tu ukweli kwamba sisi alisema struct 864 00:39:33,300 --> 00:39:37,590 na kisha sisi kuitwa ni mwanafunzi na ndani ya ya mwanafunzi alikuwa na jina na nyumba 865 00:39:37,590 --> 00:39:39,390 au Dorm au kama. 866 00:39:39,390 --> 00:39:41,980 >> Na hivyo sasa leo, hebu kupendekeza hii. 867 00:39:41,980 --> 00:39:45,240 Nimekuwa aliongeza maneno machache, lakini kama nataka kutekeleza hili Mstatili hiyo ni 868 00:39:45,240 --> 00:39:48,440 got wote int na pointer, unajua nini, mimi nina 869 00:39:48,440 --> 00:39:51,540 kwenda kutangaza struct nodi aitwaye. 870 00:39:51,540 --> 00:39:55,630 Mimi pia, ndani yake, kwenda kusema kwamba nodi, mstatili hii, ina int 871 00:39:55,630 --> 00:39:59,730 na tutaweza simu yake n na ina pointer ijayo. 872 00:39:59,730 --> 00:40:02,540 Na hii ni kidogo verbose, lakini kama wewe kufikiri juu yake, 873 00:40:02,540 --> 00:40:07,300 mishale waliokuwa katika picha wakati iliyopita ni wa nini data aina? 874 00:40:07,300 --> 00:40:12,330 Ambapo kila mmoja wa wale mishale ni akizungumzia kwa aina gani ya muundo wa data? 875 00:40:12,330 --> 00:40:14,332 Siyo akizungumzia tu int per se. 876 00:40:14,332 --> 00:40:16,165 Ni akizungumzia zima mstatili kitu 877 00:40:16,165 --> 00:40:18,720 na kwamba jambo mstatili, tulivyosema, inaitwa nodi. 878 00:40:18,720 --> 00:40:21,720 Na hivyo sisi aina ya kuwa na recursively kufafanua hii kama 879 00:40:21,720 --> 00:40:26,270 kwamba nodi, tukisema, vyenye int kuitwa n 880 00:40:26,270 --> 00:40:31,070 na pointer iitwayo ijayo na aina ya muundo data ambayo 881 00:40:31,070 --> 00:40:35,770 kwamba pointi pointer ni inaonekana kwenda kuwa nodi struct. 882 00:40:35,770 --> 00:40:41,550 >> Hivyo hii ni annoyingly verbose na tu kuwa pedantic, 883 00:40:41,550 --> 00:40:44,100 sababu ni kwa nini hatuwezi tu kusema hii, ambayo kusema ukweli 884 00:40:44,100 --> 00:40:46,860 inaonekana mengi zaidi someka, ni kwa sababu wanakumbuka kwamba C kusoma 885 00:40:46,860 --> 00:40:48,710 mambo juu hadi chini, kushoto na kulia. 886 00:40:48,710 --> 00:40:54,120 Siyo mpaka sisi kupata semicolon kwamba nodi keyword kweli lipo. 887 00:40:54,120 --> 00:40:57,980 Hivyo kama tunataka kuwa na aina hii ya kumbukumbu mzunguko ndani ya takwimu 888 00:40:57,980 --> 00:41:02,120 muundo, tuna kufanya hivyo, ambapo tunasema struct nodi juu, ambayo 889 00:41:02,120 --> 00:41:06,770 inatupa njia tena ya kuelezea hii Jambo, basi ndani ya tunasema struct nodi, 890 00:41:06,770 --> 00:41:09,560 na kisha katika mstari wa mwisho sana tunasema, sawa, C, kwa njia, 891 00:41:09,560 --> 00:41:12,060 wito tu damn hili lote Jambo nodi na kuacha 892 00:41:12,060 --> 00:41:14,360 kutumia keyword struct kabisa. 893 00:41:14,360 --> 00:41:18,030 Hivyo hii ni tu aina ya kisintaksia hila kwamba hatimaye unatuwezesha kujenga 894 00:41:18,030 --> 00:41:21,370 kitu ambacho inaonekana hasa kama hii. 895 00:41:21,370 --> 00:41:25,010 >> Hivyo kama sisi kudhani sasa tunaweza kutekeleza jambo hili katika C, 896 00:41:25,010 --> 00:41:28,040 jinsi gani sisi kweli kuanza apitaye hii? 897 00:41:28,040 --> 00:41:32,360 Naam, kwa kweli, wote sisi kufanya ni iterate kutoka kushoto kwenda kulia na tu 898 00:41:32,360 --> 00:41:35,960 aina ya kuingiza nodes nodes au kufuta au kutafuta mambo popote tunataka, 899 00:41:35,960 --> 00:41:39,560 lakini kwa kufanya hivyo, hebu kwenda mbele na kufanya mambo madogo zaidi halisi kwa sababu hii 900 00:41:39,560 --> 00:41:42,560 imekuwa super ngazi ya chini hivi sasa. 901 00:41:42,560 --> 00:41:45,700 Je, mtu yeyote literally kama kuwa ya kwanza? 902 00:41:45,700 --> 00:41:46,200 SAWA. 903 00:41:46,200 --> 00:41:47,092 Kuja juu juu. 904 00:41:47,092 --> 00:41:47,800 Jina lako ni nini? 905 00:41:47,800 --> 00:41:48,499 >> DAVID: David. 906 00:41:48,499 --> 00:41:49,290 DAVID Malan: Daudi. 907 00:41:49,290 --> 00:41:49,998 Vyema kukutana na wewe. 908 00:41:49,998 --> 00:41:50,960 Mimi pia. 909 00:41:50,960 --> 00:41:52,450 Sawa. 910 00:41:52,450 --> 00:41:53,990 Na tunahitaji namba 9. 911 00:41:53,990 --> 00:41:55,240 Siyo mazuri kama ya kwanza, labda. 912 00:41:55,240 --> 00:41:56,430 Sawa, namba 9. 913 00:41:56,430 --> 00:41:59,667 Namba 17, tafadhali. 914 00:41:59,667 --> 00:42:01,000 Hebu nirejee nyuma kidogo. 915 00:42:01,000 --> 00:42:03,980 Idadi 22, tafadhali, na vipi kuhusu mbali nyuma 916 00:42:03,980 --> 00:42:06,344 kama ninaweza kuona mikono yoyote pamoja na yote mwanga au hapana. 917 00:42:06,344 --> 00:42:08,010 Mtu ni kuwa alijitolea pale pale. 918 00:42:08,010 --> 00:42:08,968 Je, unataka kuja? 919 00:42:08,968 --> 00:42:10,450 Forearm yako ni nguvu ya kwenda juu. 920 00:42:10,450 --> 00:42:12,340 OK, 17. 921 00:42:12,340 --> 00:42:13,690 22. 922 00:42:13,690 --> 00:42:15,120 26 ni kuja chini. 923 00:42:15,120 --> 00:42:18,450 Je, mtu mwingine kama forcefully-- Haya up. 924 00:42:18,450 --> 00:42:21,030 Kujitolea halisi. 925 00:42:21,030 --> 00:42:23,330 >> Kwa hiyo kwa haraka sana, kama nyie wanaweza kupanga 926 00:42:23,330 --> 00:42:26,550 wenyewe tu kama nodes kwenye screen. 927 00:42:26,550 --> 00:42:27,510 Asante. 928 00:42:27,510 --> 00:42:29,234 Na wewe utakuwa na 26. 929 00:42:29,234 --> 00:42:30,650 Haki na ya haraka zote utambulisho. 930 00:42:30,650 --> 00:42:32,139 Kwa hiyo mimi nina David na wewe ni pia? 931 00:42:32,139 --> 00:42:32,680 DAVID: David. 932 00:42:32,680 --> 00:42:33,721 DAVID Malan: Na wewe ni? 933 00:42:33,721 --> 00:42:34,229 JAKE: Jake. 934 00:42:34,229 --> 00:42:34,729 SUE: Sue. 935 00:42:34,729 --> 00:42:35,229 ALEX: Alex. 936 00:42:35,229 --> 00:42:36,475 RAPHAEL: Raphael. 937 00:42:36,475 --> 00:42:37,100 TAYLOR: Taylor. 938 00:42:37,100 --> 00:42:37,466 DAVID Malan: Taylor. 939 00:42:37,466 --> 00:42:37,590 Bora. 940 00:42:37,590 --> 00:42:39,810 Basi hizi ni kujitolea yetu kwa leo na kwenda mbele 941 00:42:39,810 --> 00:42:43,090 na kuhama kidogo kwa njia hiyo, na tu kwenda mbele na kuweka 942 00:42:43,090 --> 00:42:47,024 kufanya idadi yako kama wewe ni au yako ishara ya kwanza na kutumia mkono wako wa kushoto, 943 00:42:47,024 --> 00:42:48,940 kwenda mbele na kutekeleza tu mishale hizi, tu 944 00:42:48,940 --> 00:42:51,360 ili mkono wako wa kushoto ni halisi akionyesha chochote unapaswa uhakika 945 00:42:51,360 --> 00:42:54,610 katika, na kutoa mwenyewe baadhi chumba ili tunaweza kuibua kuona mikono yako kweli 946 00:42:54,610 --> 00:42:58,120 akizungumzia, na unaweza kumweka tu aina ya katika ardhi ni nzuri. 947 00:42:58,120 --> 00:43:03,040 >> Hivyo hapa tuna orodha wanaohusishwa ya moja, mbili, tatu, nne, tano nodes awali, 948 00:43:03,040 --> 00:43:05,860 na taarifa tuna hii maalum pointer mwanzoni ambaye ni 949 00:43:05,860 --> 00:43:09,770 ufunguo kwa sababu tuna kuweka wimbo ya zima urefu orodha namna fulani. 950 00:43:09,770 --> 00:43:13,590 Haya guys, ingawa wao ni wa kushoto na haki, nyuma kwa nyuma katika kumbukumbu, 951 00:43:13,590 --> 00:43:15,950 kwa kweli wanaweza kuwa mahali popote katika kumbukumbu ya kompyuta. 952 00:43:15,950 --> 00:43:18,240 Hivyo guys haya inaweza kuwa amesimama mahali popote juu ya hatua 953 00:43:18,240 --> 00:43:20,960 na hiyo ni nzuri, hivyo muda mrefu kama wao ni kweli akionyesha mtu mwingine, 954 00:43:20,960 --> 00:43:22,770 lakini kuweka mambo safi na rahisi, tutaweza 955 00:43:22,770 --> 00:43:25,728 tu kuteka yao kwa haki kama kushoto hii, lakini kuna inaweza kuwa mapengo mkubwa 956 00:43:25,728 --> 00:43:26,790 katika kati ya nodes hizo. 957 00:43:26,790 --> 00:43:30,710 >> Sasa, kama nataka kwa kweli kuingiza baadhi thamani mpya, hebu kwenda mbele na kufanya hili. 958 00:43:30,710 --> 00:43:33,720 Tuna fursa sasa kuchagua nodi mwingine. 959 00:43:33,720 --> 00:43:39,820 Kusema hebu kuanza mbali na mallocing 55. 960 00:43:39,820 --> 00:43:41,320 Je, mtu akili kuwa malloc? 961 00:43:41,320 --> 00:43:42,280 OK, kuja juu juu. 962 00:43:42,280 --> 00:43:42,992 Jina lako ni nini? 963 00:43:42,992 --> 00:43:43,700 RAINBOW: Rainbow. 964 00:43:43,700 --> 00:43:44,050 DAVID Malan: Rainbow? 965 00:43:44,050 --> 00:43:44,810 Sawa. 966 00:43:44,810 --> 00:43:46,600 Malloc Rainbow. 967 00:43:46,600 --> 00:43:47,450 Kuja juu juu. 968 00:43:47,450 --> 00:43:51,610 Hivyo basi, tuna kujiuliza algorithmically ambapo tunaweza kuweka 55. 969 00:43:51,610 --> 00:43:53,610 Hivyo sote tunajua, ni wazi, ambapo yeye pengine 970 00:43:53,610 --> 00:43:55,401 ni mali ikiwa sisi ni kujaribu kuweka hii yamepangwa 971 00:43:55,401 --> 00:43:58,299 na kama wewe guys inaweza kuchukua moja kurudi nyuma hivyo hatuna kuanguka mbali 972 00:43:58,299 --> 00:43:59,590 hatua, kwamba itakuwa kubwa. 973 00:43:59,590 --> 00:44:01,420 Hivyo kweli, Rainbow, kuanza juu hapa na mimi, 974 00:44:01,420 --> 00:44:04,200 kwa sababu sisi kama kompyuta sasa unaweza tu kuona kutofautiana moja kwa wakati mmoja. 975 00:44:04,200 --> 00:44:05,190 Hivyo kama hii ni nodi kwanza. 976 00:44:05,190 --> 00:44:07,160 Taarifa yeye si nodi, yeye tu pointer, 977 00:44:07,160 --> 00:44:10,270 na hii ndiyo sababu yeye inayotolewa kuwa tu ukubwa wa pointer, si 978 00:44:10,270 --> 00:44:11,780 moja ya mistatili wale full. 979 00:44:11,780 --> 00:44:16,650 Hivyo sisi ni kwenda kuangalia katika kila iteration ni 55 chini ya 9? 980 00:44:16,650 --> 00:44:17,150 Hakuna 981 00:44:17,150 --> 00:44:19,060 Ni 55 chini ya 17? 982 00:44:19,060 --> 00:44:19,720 Hakuna 983 00:44:19,720 --> 00:44:20,800 Chini ya 22? 984 00:44:20,800 --> 00:44:22,020 Chini ya 26? 985 00:44:22,020 --> 00:44:23,390 Chini ya 34? 986 00:44:23,390 --> 00:44:25,890 Na hivyo sasa, ni wazi Rainbow mali mwishoni. 987 00:44:25,890 --> 00:44:27,270 Hivyo kuwa wazi, na kile ilikuwa jina lako, Taylor? 988 00:44:27,270 --> 00:44:27,895 >> TAYLOR: Taylor. 989 00:44:27,895 --> 00:44:32,510 DAVID Malan: Hivyo miongoni mwa Taylor mkono wa kushoto na mikono Rainbow ya hapa, 990 00:44:32,510 --> 00:44:38,324 mkono ambao mahitaji ya uhakika katika kile katika ili kuingiza 55 katika orodha hii? 991 00:44:38,324 --> 00:44:39,240 Tufanye nini haja ya kufanya? 992 00:44:39,240 --> 00:44:39,700 Yeah? 993 00:44:39,700 --> 00:44:41,140 >> Watazamaji: mkono Taylor mahitaji ya uhakika wa kushoto. 994 00:44:41,140 --> 00:44:41,680 >> DAVID Malan: Hasa. 995 00:44:41,680 --> 00:44:43,800 Hivyo kuingiza nodi ndani ya mwisho wa orodha 996 00:44:43,800 --> 00:44:47,140 ni pretty rahisi kwa sababu Taylor tu ana uhakika, badala ya kwenye uwanja 997 00:44:47,140 --> 00:44:49,640 au tutaweza simu yake null, null ni aina ya kukosekana 998 00:44:49,640 --> 00:44:51,640 ya pointer au maalum sifuri pointer, uko 999 00:44:51,640 --> 00:44:53,740 kwenda kwa uhakika na kushoto yako mkono katika Rainbow na kisha Rainbow, 1000 00:44:53,740 --> 00:44:55,910 ambapo lazima kushoto yako mkono pengine uhakika? 1001 00:44:55,910 --> 00:44:56,570 Chini. 1002 00:44:56,570 --> 00:45:00,140 Siyo nzuri kama mkono wake ni aina ya akizungumzia mbali hapa au aina yoyote 1003 00:45:00,140 --> 00:45:00,640 ambayo njia. 1004 00:45:00,640 --> 00:45:02,407 Ambayo yangeweza takataka thamani, 1005 00:45:02,407 --> 00:45:04,240 lakini kama yeye anazungumzia baadhi thamani kujulikana, tutaweza 1006 00:45:04,240 --> 00:45:07,360 kuiita sifuri au null, hiyo ni sawa kwa sababu tuna mrefu katika hii 1007 00:45:07,360 --> 00:45:09,390 na tunajua orodha sasa ni kamili. 1008 00:45:09,390 --> 00:45:11,550 >> Basi nini kingine rahisi kesi? 1009 00:45:11,550 --> 00:45:13,125 Je, tunaweza malloc 5? 1010 00:45:13,125 --> 00:45:14,010 Kuja juu juu. 1011 00:45:14,010 --> 00:45:14,782 Jina lako ni nini? 1012 00:45:14,782 --> 00:45:15,490 TIFFANY: Tiffany. 1013 00:45:15,490 --> 00:45:16,000 DAVID Malan: Samahani? 1014 00:45:16,000 --> 00:45:16,470 TIFFANY: Tiffany. 1015 00:45:16,470 --> 00:45:16,880 DAVID Malan: Tiffany. 1016 00:45:16,880 --> 00:45:17,110 Sawa. 1017 00:45:17,110 --> 00:45:19,071 Tiffany imekuwa malloced kwa thamani ya 5. 1018 00:45:19,071 --> 00:45:19,570 Kuja juu juu. 1019 00:45:19,570 --> 00:45:23,820 Hii moja rahisi sana, lakini hebu fikiria utaratibu wa shughuli sasa. 1020 00:45:23,820 --> 00:45:25,820 Ilikuwa ni rahisi sana na Taylor mwishoni. 1021 00:45:25,820 --> 00:45:30,302 Namba 5 ni ya kweli chini ya 9, na hivyo tuna Daudi, tuna Tiffany, 1022 00:45:30,302 --> 00:45:31,260 na ilikuwa ni nini jina lako? 1023 00:45:31,260 --> 00:45:31,680 >> JAKE: Jake. 1024 00:45:31,680 --> 00:45:32,470 >> DAVID Malan: Jake. 1025 00:45:32,470 --> 00:45:34,300 Tiffany, Jake, na Daudi. 1026 00:45:34,300 --> 00:45:36,580 Ambaye mkononi mwake lazima updated kwanza? 1027 00:45:36,580 --> 00:45:39,260 1028 00:45:39,260 --> 00:45:40,590 Unataka nini cha kufanya hapa? 1029 00:45:40,590 --> 00:45:45,244 Kuna wanandoa njia iwezekanavyo, lakini pia kuna moja au njia sahihi zaidi. 1030 00:45:45,244 --> 00:45:46,620 >> Watazamaji: Anza na leftmost. 1031 00:45:46,620 --> 00:45:47,800 >> DAVID Malan: Anza na leftmost. 1032 00:45:47,800 --> 00:45:49,008 Nani leftmost hapa, basi? 1033 00:45:49,008 --> 00:45:49,700 Watazamaji: wa kwanza. 1034 00:45:49,700 --> 00:45:50,366 >> DAVID Malan: Sawa. 1035 00:45:50,366 --> 00:45:53,781 Hivyo kuanza na kwanza na wapi wewe wanataka update mikono Daudi kuwa? 1036 00:45:53,781 --> 00:45:54,780 Watazamaji: Kuelekea 5. 1037 00:45:54,780 --> 00:45:55,446 DAVID Malan: Sawa. 1038 00:45:55,446 --> 00:45:59,026 Basi Daudi, hatua tano au Tiffany hapa, na sasa? 1039 00:45:59,026 --> 00:46:01,072 >> Watazamaji: Tiffany anazungumzia 9? 1040 00:46:01,072 --> 00:46:04,030 DAVID Malan: Perfect, isipokuwa Binky ya kichwa tu aina ya ikaanguka, sawa? 1041 00:46:04,030 --> 00:46:06,820 Kwa sababu nini mbaya na picha hii literally? 1042 00:46:06,820 --> 00:46:08,070 Watazamaji: Hakuna ananyoosha kidole. 1043 00:46:08,070 --> 00:46:09,945 DAVID Malan: Hakuna kitu akizungumzia Jake sasa. 1044 00:46:09,945 --> 00:46:13,360 Tumekuwa literally yatima 9 na 17, na tumekuwa literally 1045 00:46:13,360 --> 00:46:18,450 kuvuja yote ya kumbukumbu hii, kwa sababu kwa kuhuisha mkono wa Daudi kwanza, hiyo ni 1046 00:46:18,450 --> 00:46:21,660 faini kadiri ni usahihi akionyesha Tiffany sasa, 1047 00:46:21,660 --> 00:46:25,410 lakini kama hakuna mtu alikuwa mtizamo wa kumweka katika Jake, 1048 00:46:25,410 --> 00:46:27,490 kisha tumekuwa waliopotea ukamilifu wa orodha hiyo. 1049 00:46:27,490 --> 00:46:28,200 Basi hebu kutengua. 1050 00:46:28,200 --> 00:46:30,950 Ili kwamba ilikuwa ni jambo jema kwa safari juu lakini hebu kurekebisha sasa. 1051 00:46:30,950 --> 00:46:33,624 Tufanye nini kwanza badala yake? 1052 00:46:33,624 --> 00:46:34,124 Yeah? 1053 00:46:34,124 --> 00:46:35,791 >> Watazamaji: Tiffany lazima uhakika saa 9? 1054 00:46:35,791 --> 00:46:37,582 DAVID Malan: Siwezi kupata kuwa karibu na wewe. 1055 00:46:37,582 --> 00:46:38,720 Nani anapaswa uhakika saa 9? 1056 00:46:38,720 --> 00:46:39,220 >> Watazamaji: Tiffany. 1057 00:46:39,220 --> 00:46:39,390 >> DAVID Malan: zote haki. 1058 00:46:39,390 --> 00:46:41,200 Hivyo Tiffany lazima hatua ya kwanza katika 9. 1059 00:46:41,200 --> 00:46:43,550 Hivyo Tiffany inapaswa kuchukua juu ya thamani sawa 1060 00:46:43,550 --> 00:46:45,820 Daudi, ambayo inaonekana kutokuwa na maana kwa muda, 1061 00:46:45,820 --> 00:46:48,820 lakini hiyo ni nzuri kwa sababu sasa, pili hatua, sisi anaweza kuweka upya mkono wa Daudi 1062 00:46:48,820 --> 00:46:52,680 kwa uhakika katika Tiffany, na kisha kama sisi tu aina ya safi mambo up 1063 00:46:52,680 --> 00:46:55,740 kana kwamba hii ni aina ya spring-kama, sasa hiyo ni kuingizwa sahihi. 1064 00:46:55,740 --> 00:46:56,700 Hivyo bora. 1065 00:46:56,700 --> 00:46:57,970 Hivyo sasa tuko karibu na hapo. 1066 00:46:57,970 --> 00:47:01,075 Hebu kuingiza mwisho moja thamani kama thamani 20. 1067 00:47:01,075 --> 00:47:03,010 Kama tunaweza malloc kujitolea moja ya mwisho? 1068 00:47:03,010 --> 00:47:04,140 Kuja juu juu. 1069 00:47:04,140 --> 00:47:06,224 Hivyo hii moja ni gumu zaidi kidogo. 1070 00:47:06,224 --> 00:47:08,390 Lakini kwa kweli, kanuni na tuko kuandika, angalau kwa maneno, 1071 00:47:08,390 --> 00:47:10,610 ni kama kuwa na kundi ya kama hali sasa, sawa? 1072 00:47:10,610 --> 00:47:12,318 Tulikuwa na hali kuangalia kama ni mali 1073 00:47:12,318 --> 00:47:13,840 mwishoni, labda mwanzo. 1074 00:47:13,840 --> 00:47:15,940 Tunahitaji baadhi ya aina ya kitanzi kwa kupata doa katikati. 1075 00:47:15,940 --> 00:47:17,400 Basi hebu kufanya hivyo kwa nini jina lako? 1076 00:47:17,400 --> 00:47:17,700 >> ERIC: Eric. 1077 00:47:17,700 --> 00:47:18,340 >> DAVID Malan: Eric? 1078 00:47:18,340 --> 00:47:18,660 Eric. 1079 00:47:18,660 --> 00:47:19,368 Vyema kukutana na wewe. 1080 00:47:19,368 --> 00:47:20,490 Hivyo tuna 20. 1081 00:47:20,490 --> 00:47:21,220 Chini ya miaka mitano? 1082 00:47:21,220 --> 00:47:21,530 Hakuna 1083 00:47:21,530 --> 00:47:22,160 Chini ya tisa? 1084 00:47:22,160 --> 00:47:22,410 Hakuna 1085 00:47:22,410 --> 00:47:23,050 Chini ya 17? 1086 00:47:23,050 --> 00:47:23,550 Hakuna 1087 00:47:23,550 --> 00:47:23,740 SAWA. 1088 00:47:23,740 --> 00:47:25,701 Yeye ni hapa na majina yenu tena ni? 1089 00:47:25,701 --> 00:47:26,200 SUE: Sue. 1090 00:47:26,200 --> 00:47:26,880 DAVID Malan: Sue. 1091 00:47:26,880 --> 00:47:27,379 ALEX: Alex. 1092 00:47:27,379 --> 00:47:28,790 DAVID Malan: Sue, Alex, na? 1093 00:47:28,790 --> 00:47:29,290 ERIC: Eric. 1094 00:47:29,290 --> 00:47:30,120 DAVID Malan: Eric. 1095 00:47:30,120 --> 00:47:32,140 Mikono ambao wanahitaji kupata updated kwanza? 1096 00:47:32,140 --> 00:47:32,930 >> Watazamaji: Eric. 1097 00:47:32,930 --> 00:47:33,429 SAWA. 1098 00:47:33,429 --> 00:47:35,200 Hivyo Eric inapaswa kumweka katika wapi? 1099 00:47:35,200 --> 00:47:35,930 Katika 22. 1100 00:47:35,930 --> 00:47:36,430 Nzuri. 1101 00:47:36,430 --> 00:47:38,180 Na sasa nini hapo? 1102 00:47:38,180 --> 00:47:40,800 Sue wanaweza kisha kumweka katika Eric na sasa, kama nyie tu 1103 00:47:40,800 --> 00:47:44,077 kufanya baadhi ya chumba, ambayo ni nzuri kuibua, sasa tumefanya kuingizwa. 1104 00:47:44,077 --> 00:47:47,160 Basi hebu sasa kufikiria swali lakini asante sana kwa kujitolea yetu. 1105 00:47:47,160 --> 00:47:48,090 Vizuri sana kufanyika. 1106 00:47:48,090 --> 00:47:50,831 Unaweza kuweka wale, kama wewe kama. 1107 00:47:50,831 --> 00:47:54,140 Na tuna zimefunguliwa zawadi nzuri kama d kila kama kuchukua msongo mpira. 1108 00:47:54,140 --> 00:47:56,030 Napenda tu kupita hii chini. 1109 00:47:56,030 --> 00:47:58,430 Hivyo ni takeaway ya hii nini? 1110 00:47:58,430 --> 00:48:02,430 Hii inaonekana kuwa ajabu kadiri tuna sasa 1111 00:48:02,430 --> 00:48:06,360 ilianzisha mbadala kwa safu kwamba si hivyo kufungiwa 1112 00:48:06,360 --> 00:48:07,780 kwa safu ya baadhi ya fasta ukubwa. 1113 00:48:07,780 --> 00:48:09,380 Wanaweza kukua dynamically. 1114 00:48:09,380 --> 00:48:13,220 >> Lakini kiasi kama tumeona katika kipindi cha wiki siku za nyuma, sisi kamwe kupata kitu chochote kwa ajili ya bure, 1115 00:48:13,220 --> 00:48:15,740 kama hakika kuna biashara-off hapa. 1116 00:48:15,740 --> 00:48:18,890 Hivyo, pamoja na suala la mafanikio ya uhusiano orodha, ni mabadiliko haya? 1117 00:48:18,890 --> 00:48:21,590 Uwezo huu wa kukua na kusema ukweli, sisi wangefanya kufuta 1118 00:48:21,590 --> 00:48:23,570 na tunaweza kuogopa kama inahitajika. 1119 00:48:23,570 --> 00:48:24,710 Nini bei ni sisi kulipa? 1120 00:48:24,710 --> 00:48:28,510 1121 00:48:28,510 --> 00:48:30,340 Mara mbili kama nafasi sana, kwanza ya yote. 1122 00:48:30,340 --> 00:48:34,010 Kama ukiangalia picha, tena Mimi ni kuhifadhi orodha ya integers. 1123 00:48:34,010 --> 00:48:36,740 Mimi kuhifadhi orodha ya integers pamoja na kuyatumia. 1124 00:48:36,740 --> 00:48:38,240 Hivyo mimi nina mara dufu kiasi cha nafasi. 1125 00:48:38,240 --> 00:48:40,740 Sasa, labda si kwamba kama mpango mkubwa ka 4, 8 ka, 1126 00:48:40,740 --> 00:48:43,160 lakini inaweza hakika kuongeza up kwa seti kubwa data. 1127 00:48:43,160 --> 00:48:45,570 Nini mwingine upande wa chini? 1128 00:48:45,570 --> 00:48:46,070 Yeah? 1129 00:48:46,070 --> 00:48:48,010 >> Watazamaji: Tuna traverse yao moja kwa moja. 1130 00:48:48,010 --> 00:48:48,760 DAVID Malan: Yeah. 1131 00:48:48,760 --> 00:48:50,260 Tuna traverse yao moja kwa moja. 1132 00:48:50,260 --> 00:48:53,860 Unajua nini, sisi akatoa hii super rahisi hulka ya mraba mabano 1133 00:48:53,860 --> 00:48:57,240 nukuu, vizuri zaidi inayojulikana kama random kupata, 1134 00:48:57,240 --> 00:48:59,280 ambapo tunaweza tu kuruka kwa kipengele binafsi 1135 00:48:59,280 --> 00:49:01,470 lakini sasa kama mimi bado alikuwa kujitolea yangu hapa, 1136 00:49:01,470 --> 00:49:04,660 kama nilitaka kupata namba 22, siwezi tu 1137 00:49:04,660 --> 00:49:06,620 Rukia mabano kitu kitu. 1138 00:49:06,620 --> 00:49:10,530 Nina kuangalia juu ya orodha, sehemu kubwa kama kutafuta yetu mifano kwa mstari, 1139 00:49:10,530 --> 00:49:12,260 kupata idadi 22. 1140 00:49:12,260 --> 00:49:14,340 Hivyo sisi wanaonekana kuwa na kulipwa bei huko. 1141 00:49:14,340 --> 00:49:16,430 Lakini tunaweza hata hivyo kutatua matatizo mengine. 1142 00:49:16,430 --> 00:49:18,587 >> Kwa kweli, napenda kuanzisha michache tu ya vielelezo. 1143 00:49:18,587 --> 00:49:20,920 Hivyo kama wewe tumekuwa chini ya Mather ya Dining Hall hivi karibuni, 1144 00:49:20,920 --> 00:49:23,320 itabidi kukumbuka kwamba wao mwingi wa trays kama hii, 1145 00:49:23,320 --> 00:49:26,300 sisi alikopa hizi kutoka Annenberg kabla darasani. 1146 00:49:26,300 --> 00:49:28,930 Hivyo hii stack ya trays, ingawa, ni mwakilishi kweli 1147 00:49:28,930 --> 00:49:30,860 muundo wa data ya sayansi ya kompyuta. 1148 00:49:30,860 --> 00:49:32,910 Kuna muundo wa data katika sayansi ya kompyuta 1149 00:49:32,910 --> 00:49:38,010 inayojulikana kama stack ambayo vizuri mno imejikita kwenye hasa hii ya kuona. 1150 00:49:38,010 --> 00:49:41,380 Hivyo kama kila mmoja trays haya si tray lakini kama idadi na nilitaka 1151 00:49:41,380 --> 00:49:45,010 kuhifadhi idadi, mimi inaweza kuweka moja chini hapa, 1152 00:49:45,010 --> 00:49:48,320 na mimi naweza kuweka mwingine chini hapa, na kuendelea stacking idadi 1153 00:49:48,320 --> 00:49:53,180 juu ya mtu mwingine, na nini uwezekano wa kusaidia kuhusu hili 1154 00:49:53,180 --> 00:49:55,450 ni kwamba nini maana ya muundo huu data? 1155 00:49:55,450 --> 00:49:58,045 Ambayo idadi naweza kujiondoa kwanza zaidi conveniently? 1156 00:49:58,045 --> 00:50:00,640 1157 00:50:00,640 --> 00:50:03,030 Hivi karibuni kuweka moja juu ya hapo. 1158 00:50:03,030 --> 00:50:06,430 >> Hivyo hii ni nini tunataka kuwaita katika sayansi ya kompyuta LIFO data muundo. 1159 00:50:06,430 --> 00:50:08,070 Mwisho katika, nje ya kwanza. 1160 00:50:08,070 --> 00:50:10,800 Na tutaweza kuona kabla ya muda mrefu kwa nini ambazo zinaweza kuwa na manufaa lakini kwa sasa, 1161 00:50:10,800 --> 00:50:12,200 kufikiria tu mali. 1162 00:50:12,200 --> 00:50:15,158 Na ni aina ya kijinga kama unadhani kuhusu jinsi ukumbi dining hufanya. 1163 00:50:15,158 --> 00:50:17,910 Kila wakati wao trays safi na kuweka ndio freshest juu, 1164 00:50:17,910 --> 00:50:22,160 unaweza kuwa na awali safi lakini hatimaye chafu sana na vumbi 1165 00:50:22,160 --> 00:50:24,360 tray chini kabisa kama wewe kamwe kweli 1166 00:50:24,360 --> 00:50:26,820 kupata chini ya kwamba stack, kwa sababu wewe tu 1167 00:50:26,820 --> 00:50:29,380 kuendelea kuweka mpya na ndio safi juu yake. 1168 00:50:29,380 --> 00:50:31,840 Kitu kimoja kinaweza kutokea katika maduka makubwa mno. 1169 00:50:31,840 --> 00:50:35,450 Kama una kesi kuonyesha maziwa na kila CVS wakati 1170 00:50:35,450 --> 00:50:37,610 au mtu anapata maziwa zaidi, wewe tu mkupuo maziwa ya 1171 00:50:37,610 --> 00:50:39,880 tayari una kwa nyuma na kuweka ndio mpya juu mbele, 1172 00:50:39,880 --> 00:50:43,088 wewe ni kwenda na baadhi pretty nasty maziwa mwishoni mwa muundo data, 1173 00:50:43,088 --> 00:50:46,390 kwa sababu mara nyingi ni chini au equivalently mara nyingi ni nyuma. 1174 00:50:46,390 --> 00:50:50,407 >> Lakini kuna njia nyingine ya kufikiri juu ya wamejipanga data na kwa mfano, hii. 1175 00:50:50,407 --> 00:50:53,490 Kama wewe ni mmoja wa watu wale ambao anapenda kujipanga nje ya maduka ya Apple 1176 00:50:53,490 --> 00:50:55,610 wakati bidhaa mpya anakuja nje, wewe pengine 1177 00:50:55,610 --> 00:50:58,780 si kwa kutumia data mkusanyiko muundo kwa sababu wewe 1178 00:50:58,780 --> 00:51:03,070 ingekuwa kuwatenganisha mtu mwingine ambaye ni wanaojitokeza kununua baadhi toy mpya. 1179 00:51:03,070 --> 00:51:06,610 Badala yake, wewe pengine kutumia ni aina gani ya muundo wa data 1180 00:51:06,610 --> 00:51:10,050 au ni aina gani ya mfumo katika ulimwengu wa kweli? 1181 00:51:10,050 --> 00:51:13,493 Hopefully ni mstari, au zaidi vizuri au zaidi Uingereza-kama, foleni. 1182 00:51:13,493 --> 00:51:17,700 Na zinageuka foleni ni pia data ya muundo katika sayansi ya kompyuta, 1183 00:51:17,700 --> 00:51:19,700 lakini foleni ina sana mbalimbali ya mali. 1184 00:51:19,700 --> 00:51:20,820 Siyo LIFO. 1185 00:51:20,820 --> 00:51:21,990 Mwisho katika, nje ya kwanza. 1186 00:51:21,990 --> 00:51:22,800 Hasha. 1187 00:51:22,800 --> 00:51:24,280 Ni badala FIFO. 1188 00:51:24,280 --> 00:51:26,110 Kwanza katika, nje ya kwanza. 1189 00:51:26,110 --> 00:51:27,970 Na kwamba ni jambo jema kwa inadai hivyo haki 1190 00:51:27,970 --> 00:51:30,428 hakika wakati wewe ni wamejipanga up super mapema asubuhi. 1191 00:51:30,428 --> 00:51:33,400 Kama kupata huko kwanza, wanataka kupata nje ya kwanza pia. 1192 00:51:33,400 --> 00:51:35,880 >> Na hivyo wote wa takwimu hizi miundo, foleni na mwingi 1193 00:51:35,880 --> 00:51:39,220 na mashada ya wengine, zinageuka wewe Unaweza kufikiri ya hii kama tu safu. 1194 00:51:39,220 --> 00:51:41,820 Hii ni safu, labda ukubwa fasta 4, lakini d 1195 00:51:41,820 --> 00:51:44,990 kuwa aina ya nzuri kama tunaweza tu rundo trays karibu kubwa mirefu kama sisi 1196 00:51:44,990 --> 00:51:46,780 na kwamba trays wengi au namba. 1197 00:51:46,780 --> 00:51:48,840 Hivyo labda tunataka kutumia orodha wanaohusishwa hapa, 1198 00:51:48,840 --> 00:51:51,800 lakini biashara-off ni kwenda kuwa uwezekano wa kwamba tunahitaji zaidi ya kumbukumbu, 1199 00:51:51,800 --> 00:51:55,930 inachukua muda kidogo zaidi, lakini sisi wala kikomo urefu wa stack, 1200 00:51:55,930 --> 00:51:59,550 kiasi kama Mather ya kuonyesha kesi inaweza kudhibiti ukubwa wa stack, 1201 00:51:59,550 --> 00:52:03,117 na hivyo hawa ni maamuzi kubuni au chaguzi kwa hatima yetu. 1202 00:52:03,117 --> 00:52:04,950 Hivyo, pamoja na data hizi miundo, tumekuwa kuanza 1203 00:52:04,950 --> 00:52:09,360 kuona mipaka mpya juu ya uwezekano wa juu ya nini hapo awali alikuwa super haraka 1204 00:52:09,360 --> 00:52:11,260 na ambapo tutaweza kuondoka mbali leo na ambapo 1205 00:52:11,260 --> 00:52:13,200 tutaweza matumaini ya kupata ni siku ya Jumatano, tutaweza 1206 00:52:13,200 --> 00:52:15,740 kuanza kuangalia data muundo kwamba unatuwezesha kutafuta 1207 00:52:15,740 --> 00:52:18,260 kupitia data katika gogo mwisho wakati tena. 1208 00:52:18,260 --> 00:52:21,470 Na tuliona kwamba, kukumbuka, katika wiki sifuri na moja na utafutaji binary au kugawanya 1209 00:52:21,470 --> 00:52:22,180 na kushinda. 1210 00:52:22,180 --> 00:52:26,240 Ni kuja nyuma na bado bora, grail takatifu kwa Jumatano hii 1211 00:52:26,240 --> 00:52:29,510 itakuwa kuja na muundo wa data kwamba anaendesha kweli 1212 00:52:29,510 --> 00:52:32,070 au kinadharia katika wakati mara kwa mara, ambapo 1213 00:52:32,070 --> 00:52:34,760 haijalishi ni wangapi mamilioni au mabilioni ya mambo 1214 00:52:34,760 --> 00:52:38,470 tuna katika muundo data, itakuwa kutupeleka wakati mara kwa mara, labda hatua moja 1215 00:52:38,470 --> 00:52:41,387 au hatua mbili au hatua 10, lakini idadi mara kwa mara ya hatua 1216 00:52:41,387 --> 00:52:42,970 kutafuta njia kwamba muundo data. 1217 00:52:42,970 --> 00:52:46,300 Hiyo kweli itakuwa grail takatifu lakini zaidi juu ya kwamba siku ya Jumatano. 1218 00:52:46,300 --> 00:52:49,045 Kuona ya basi. 1219 00:52:49,045 --> 00:52:53,704 >> [Music kucheza] 1220 00:52:53,704 --> 00:56:08,448