1 00:00:00,000 --> 00:00:03,381 >> [Muzika] 2 00:00:03,381 --> 00:00:10,626 3 00:00:10,626 --> 00:00:11,610 >> [VIDEO rishikim] 4 00:00:11,610 --> 00:00:13,640 >> -Ai Po gënjen. 5 00:00:13,640 --> 00:00:14,380 >> -Rreth Çfarë? 6 00:00:14,380 --> 00:00:17,182 >> -Une nuk e di. 7 00:00:17,182 --> 00:00:19,990 >> -Pra, Çfarë njohim ne? 8 00:00:19,990 --> 00:00:23,145 >> -Kjo Në 9:15, Ray Santoya ishte në ATM. 9 00:00:23,145 --> 00:00:23,644 -Yeah. 10 00:00:23,644 --> 00:00:27,030 Pra, pyetja është, çfarë ishte ai bën në 9:16? 11 00:00:27,030 --> 00:00:29,720 >> -Shooting Milimetër 9 në diçka. 12 00:00:29,720 --> 00:00:31,540 Ndoshta ai e pa snajper. 13 00:00:31,540 --> 00:00:33,412 >> -OR Ishte duke punuar me të. 14 00:00:33,412 --> 00:00:34,340 >> -Wait. 15 00:00:34,340 --> 00:00:36,200 Kthehu mbrapa një. 16 00:00:36,200 --> 00:00:36,975 >> -Cfare shikon? 17 00:00:36,975 --> 00:00:44,400 18 00:00:44,400 --> 00:00:47,805 >> -Të Sjellë fytyrën e tij në ekran të plotë. 19 00:00:47,805 --> 00:00:48,680 >> Syzet -His. 20 00:00:48,680 --> 00:00:50,060 >> -Nuk Është një reflektim. 21 00:00:50,060 --> 00:01:00,455 22 00:01:00,455 --> 00:01:02,280 >> -Kjo Është ekipi Nuevitas baseball. 23 00:01:02,280 --> 00:01:03,110 Kjo është logo e tyre. 24 00:01:03,110 --> 00:01:05,820 >> -Dhe Ai është duke folur për kushdo që ka veshur atë xhaketë. 25 00:01:05,820 --> 00:01:06,670 >> [END rishikim] 26 00:01:06,670 --> 00:01:07,628 >> DAVID Malan: Të gjithë të drejtë. 27 00:01:07,628 --> 00:01:11,210 Kjo është CS50 dhe kjo është pak më e [e padëgjueshme] me të cilën ju jeni 28 00:01:11,210 --> 00:01:12,890 dabbling me problemin e ngritur katër. 29 00:01:12,890 --> 00:01:16,606 Sot ne fillojmë të shikojmë pak më shumë thellësisht në këto gjëra quajtur pointers, 30 00:01:16,606 --> 00:01:18,480 e cila edhe pse është e një temë mjaft misterioze, 31 00:01:18,480 --> 00:01:20,813 rezulton se ajo do të jetë mjeti me të cilin ne 32 00:01:20,813 --> 00:01:24,320 mund të fillojë ndërtimin dhe montimin programe shumë më të sofistikuara. 33 00:01:24,320 --> 00:01:28,150 Por ne e bëmë atë të mërkurën e kaluar me anë të një claymation parë. 34 00:01:28,150 --> 00:01:30,190 Pra kjo, kujtojnë, është Binky dhe kemi përdorur atë 35 00:01:30,190 --> 00:01:33,148 për të marrë një sy në një program që nuk ka të vërtetë të bëjë asgjë interesante, 36 00:01:33,148 --> 00:01:34,950 por ajo e bëri të zbulojë disa probleme. 37 00:01:34,950 --> 00:01:38,570 Pra, për të filluar sot, pse nuk ecim shpejt nëpër disa nga këto hapa, 38 00:01:38,570 --> 00:01:41,920 të përpiqet të gjej në aspektin njerëzor e saktësisht se çfarë po ndodh këtu 39 00:01:41,920 --> 00:01:45,410 dhe pse kjo është e keqe, dhe pastaj të kalojnë në dhe në fakt të fillojë ndërtimin e diçka 40 00:01:45,410 --> 00:01:46,309 me këtë teknikë? 41 00:01:46,309 --> 00:01:48,350 Pra, këto ishin të parët dy linja në këtë program 42 00:01:48,350 --> 00:01:51,340 dhe në kushtet e laik, çfarë janë duke bërë këto dy linja? 43 00:01:51,340 --> 00:01:55,600 Dikush që është në mënyrë të arsyeshme të rehatshme me atë që deklaroi në ekran? 44 00:01:55,600 --> 00:01:58,340 45 00:01:58,340 --> 00:02:00,120 Çfarë janë këto dy rreshta duke bërë? 46 00:02:00,120 --> 00:02:02,070 Kjo nuk është e gjitha që ndryshme nga njëra jave, 47 00:02:02,070 --> 00:02:03,611 por ka disa simboli i ri i veçantë. 48 00:02:03,611 --> 00:02:04,152 Po? 49 00:02:04,152 --> 00:02:05,628 Atje. 50 00:02:05,628 --> 00:02:07,092 >> Audienca: Deklarimi pointers? 51 00:02:07,092 --> 00:02:08,050 DAVID Malan: Thuaj përsëri? 52 00:02:08,050 --> 00:02:08,860 Audienca: Deklarimi pointers? 53 00:02:08,860 --> 00:02:11,776 DAVID Malan: pointers Deklarimi dhe le të përsosin atë një pak më shumë. 54 00:02:11,776 --> 00:02:14,050 Audienca: [padëgjueshme] Adresa x dhe pastaj y. 55 00:02:14,050 --> 00:02:15,300 DAVID Malan: Dhe pastaj adresuar. 56 00:02:15,300 --> 00:02:18,550 Pra, në mënyrë të veçantë ajo që ne jemi duke bërë po ne jemi deklaruar dy variabla. 57 00:02:18,550 --> 00:02:21,252 Këto variabla, megjithatë, janë duke shkuar të jetë i int yllit tipit, e cila 58 00:02:21,252 --> 00:02:23,210 më konkretisht do të thotë ata janë duke shkuar për të ruajtur 59 00:02:23,210 --> 00:02:26,450 adresa e një int, përkatësisht, x dhe y. 60 00:02:26,450 --> 00:02:27,660 Tani a ka ndonjë vlera? 61 00:02:27,660 --> 00:02:32,621 A ka ndonjë adresat aktuale në këto dy variabla në këtë moment në kohë? 62 00:02:32,621 --> 00:02:33,120 Jo. 63 00:02:33,120 --> 00:02:35,030 Është vetëm e ashtuquajtura vlerat e plehrave. 64 00:02:35,030 --> 00:02:38,120 Nëse ju nuk mund të vërtetë të caktojë një ndryshueshme, çdo gjë që ishte në RAM 65 00:02:38,120 --> 00:02:42,224 më parë do të mbush me zero dhe ato të dy prej këtyre variablave. 66 00:02:42,224 --> 00:02:44,140 Por ne ende nuk e dimë atë që ata janë dhe kjo është 67 00:02:44,140 --> 00:02:47,060 do të jetë kyç se pse Binky humbur kokën e tij javën e kaluar. 68 00:02:47,060 --> 00:02:49,980 >> Pra, ky ishte claymation mishërimi i kësaj 69 00:02:49,980 --> 00:02:53,580 ku ju keni vetëm dy variablave, pak copa rrethore prej argjile, 70 00:02:53,580 --> 00:02:57,330 që mund të ruajë variabla, por si shigjetat përfundoi lart sugjerojnë, 71 00:02:57,330 --> 00:03:00,640 ata nuk janë në fakt duke për të njohur kudo në vetvete. 72 00:03:00,640 --> 00:03:03,670 Pra, atëherë kemi pasur këtë linjë, dhe kjo ishte e re javën e kaluar, malloc për kujtesën 73 00:03:03,670 --> 00:03:07,130 ndarja, e cila është vetëm një mënyrë e sofistikuar e thënë të sistemit operativ, Linux 74 00:03:07,130 --> 00:03:09,750 ose Mac OS ose Windows, hej, jepni disa kujtesës, 75 00:03:09,750 --> 00:03:11,780 dhe të gjithë ju duhet të tregoni sistemi operativ 76 00:03:11,780 --> 00:03:14,699 është ajo që kur kërkon atë për kujtesën. 77 00:03:14,699 --> 00:03:16,990 Kjo nuk do të kujdesen se çfarë ju jeni do të bëjë me të, 78 00:03:16,990 --> 00:03:19,786 por ju keni nevojë për të të treguar operative Sistemi atë me anë të malloc. 79 00:03:19,786 --> 00:03:20,286 Po? 80 00:03:20,286 --> 00:03:21,078 >> Audienca: Sa? 81 00:03:21,078 --> 00:03:21,994 DAVID Malan: Sa? 82 00:03:21,994 --> 00:03:25,280 Sa në bytes, dhe kështu, kjo, përsëri, një shembull i ndërtuar, është vetëm duke thënë: 83 00:03:25,280 --> 00:03:27,360 më jep madhësinë e një int. 84 00:03:27,360 --> 00:03:30,550 Tani, madhësia e një int është katër bytes ose 32 bit. 85 00:03:30,550 --> 00:03:32,850 Pra, kjo është vetëm një mënyrë për të duke thënë, hej, sistemit operativ, 86 00:03:32,850 --> 00:03:37,290 jepni katër byte memorje që unë mund të përdorni në dispozicion tim, 87 00:03:37,290 --> 00:03:40,560 dhe konkretisht, çfarë Kthimi malloc me respekt 88 00:03:40,560 --> 00:03:41,795 në atë copë të katër bytes? 89 00:03:41,795 --> 00:03:44,110 90 00:03:44,110 --> 00:03:44,860 Audienca: Adresa? 91 00:03:44,860 --> 00:03:45,901 DAVID Malan: Adresa. 92 00:03:45,901 --> 00:03:47,580 Adresa e asaj copë e katër bytes. 93 00:03:47,580 --> 00:03:48,190 Pikërisht. 94 00:03:48,190 --> 00:03:51,430 Dhe kështu kjo është ajo që është ruajtur në fund të fundit në x dhe kjo është arsyeja pse ne nuk të vërtetë 95 00:03:51,430 --> 00:03:55,240 kujdes se çfarë numri i që adresa është, nëse kjo është OX1 ose OX2 96 00:03:55,240 --> 00:03:57,110 apo disa adresa fshehtë heksadecimal. 97 00:03:57,110 --> 00:03:59,850 Ne vetëm kujdesemi në pikturë se kjo variabël x është tani 98 00:03:59,850 --> 00:04:01,630 duke treguar në atë copë e kujtesës. 99 00:04:01,630 --> 00:04:05,570 Pra, shigjeta përfaqëson një tregues, ose më konkretisht, një adresë e kujtesës. 100 00:04:05,570 --> 00:04:09,120 Por përsëri, ne nuk e kujdesit në mënyrë tipike çfarë ato adresat aktuale janë. 101 00:04:09,120 --> 00:04:11,780 Tani, kjo linjë thotë çfarë në kushtet e laik? 102 00:04:11,780 --> 00:04:14,330 Star x merr 42 pikëpresje. 103 00:04:14,330 --> 00:04:17,390 Ç'do të thotë kjo? 104 00:04:17,390 --> 00:04:18,200 Ju doni të shkoni? 105 00:04:18,200 --> 00:04:20,102 Mos heq qafën tuaj. 106 00:04:20,102 --> 00:04:22,360 >> Audienca: Adresa e x është në 42. 107 00:04:22,360 --> 00:04:24,300 >> DAVID Malan: Adresa e x është në 42. 108 00:04:24,300 --> 00:04:25,190 Jo mjaft. 109 00:04:25,190 --> 00:04:28,485 Pra të ngushtë, por jo fare, sepse nuk ka ylli që është prefixing këtë x. 110 00:04:28,485 --> 00:04:29,860 Pra, ne kemi nevojë për të shkulje pak. 111 00:04:29,860 --> 00:04:31,032 Po? 112 00:04:31,032 --> 00:04:36,044 >> Audienca: Vlera që akrep x është duke treguar për është 42. 113 00:04:36,044 --> 00:04:36,710 DAVID Malan: OK. 114 00:04:36,710 --> 00:04:40,840 Vlera se tregues x është duke treguar për, le të themi, do të jetë 42, 115 00:04:40,840 --> 00:04:44,165 ose thënë ndryshe, yllin x thotë, shkoni në çfarëdo adresë 116 00:04:44,165 --> 00:04:48,340 është në x, nëse kjo është 1 Oxford Rrugë ose 33 Oxford Street 117 00:04:48,340 --> 00:04:51,850 ose OX1 apo ox33, çfarëdo që adresa numerike është, 118 00:04:51,850 --> 00:04:54,380 Ylli x është dereferencing e x. 119 00:04:54,380 --> 00:04:57,297 Pra shkoni në atë adresë dhe pastaj numrin 42 atje. 120 00:04:57,297 --> 00:04:59,380 Kështu që do të ishte një mënyrë ekuivalente e thënë se. 121 00:04:59,380 --> 00:05:01,860 Pra, kjo është e gjitha në rregull dhe pastaj ne do të përfaqësojë foto 122 00:05:01,860 --> 00:05:05,370 si më poshtë ku kemi shtuar 42 në atë copë prej katër 123 00:05:05,370 --> 00:05:09,370 bytes në anën e djathtë, por Kjo linjë ishte vendi ku gjërat shkuan keq 124 00:05:09,370 --> 00:05:11,120 dhe kreu Binky-së popped jashtë në këtë pikë, 125 00:05:11,120 --> 00:05:15,290 sepse gjëra të këqija ndodhin kur ju dereference vlerat e plehrave 126 00:05:15,290 --> 00:05:18,210 ose ju dereference pavlefshëm pointers, dhe unë them të pavlefshme 127 00:05:18,210 --> 00:05:21,020 sepse në këtë pikë në Historia, ajo që është brenda y? 128 00:05:21,020 --> 00:05:24,440 Cila është vlera ey bazuar në hapat e fundit pak? 129 00:05:24,440 --> 00:05:25,360 Po? 130 00:05:25,360 --> 00:05:26,115 Cfare eshte kjo? 131 00:05:26,115 --> 00:05:26,990 >> Audienca: Një adresë. 132 00:05:26,990 --> 00:05:28,460 DAVID Malan: Një adresë. 133 00:05:28,460 --> 00:05:31,910 Ajo duhet të jetë një adresë por kam nisur atë? 134 00:05:31,910 --> 00:05:32,800 Kështu që unë nuk kam ende. 135 00:05:32,800 --> 00:05:35,430 Pra, çfarë është e njohur të jetë në atje? 136 00:05:35,430 --> 00:05:37,590 Është vetëm disa vlera mbeturina. 137 00:05:37,590 --> 00:05:41,500 Ajo mund të jetë çdo adresë nga zero deri 2 miliard në qoftë se ju keni dy koncerte e RAM, 138 00:05:41,500 --> 00:05:44,289 ose zero për 4 miliardë në qoftë se ju keni mori katër gigabajt të RAM. 139 00:05:44,289 --> 00:05:46,080 Kjo është disa vlera mbeturina, por problemi është 140 00:05:46,080 --> 00:05:48,200 që sistemit operativ, në qoftë se ai nuk ju ka dhënë 141 00:05:48,200 --> 00:05:51,140 se copë e kujtesës në mënyrë specifike se ju jeni duke u përpjekur për të shkuar në, 142 00:05:51,140 --> 00:05:54,650 ajo në përgjithësi do të shkaktojë çfarë ne kemi parë si një defekt segmentimit. 143 00:05:54,650 --> 00:05:57,810 Pra, në fakt, asnjë prej jush që kanë luftuan në probleme në orarit të punës 144 00:05:57,810 --> 00:06:00,393 apo në problemet që është më shumë përgjithësisht me duke u përpjekur të kuptoj se 145 00:06:00,393 --> 00:06:02,150 një faji segmentimit, që në përgjithësi do të thotë 146 00:06:02,150 --> 00:06:05,017 ju jeni duke prekur një segment të kujtim që ju nuk duhet të jetë. 147 00:06:05,017 --> 00:06:07,350 Ju jeni duke prekur kujtesën se sistemi operativ nuk ka 148 00:06:07,350 --> 00:06:10,450 lejuar ju për të prekur, nëse kjo është duke shkuar shumë larg në grup tuaj 149 00:06:10,450 --> 00:06:12,870 ose duke filluar nga tani, nëse kjo është për shkak se ju jeni prekur 150 00:06:12,870 --> 00:06:14,780 kujtesës që vetëm disa vlera e mbeturinave. 151 00:06:14,780 --> 00:06:18,230 >> Pra, duke bërë yll x këtu është lloj i sjelljes papërcaktuar. 152 00:06:18,230 --> 00:06:22,030 Ju kurrë nuk duhet të bëjë atë, sepse mosmarrëveshje po, programi i vetëm do të rrëzuar, 153 00:06:22,030 --> 00:06:24,050 sepse ju jeni duke thënë, shkoni në këtë adresë 154 00:06:24,050 --> 00:06:27,000 dhe ju nuk keni ide se ku që adresa të vërtetë është. 155 00:06:27,000 --> 00:06:30,300 Pra sistemi operativ është e mundshme duke shkuar për të rrëzuar programin tuaj 156 00:06:30,300 --> 00:06:33,840 si rezultat dhe në të vërtetë, kjo është çfarë ka ndodhur atje për Binky. 157 00:06:33,840 --> 00:06:37,210 Pra në fund të fundit, Binky fikse ky problem me këtë. 158 00:06:37,210 --> 00:06:38,909 Kështu që programi vetë ishte me të meta. 159 00:06:38,909 --> 00:06:41,450 Por në qoftë se ju lloj i të ecur përpara dhe ekzekutuar këtë linjë në vend të kësaj, 160 00:06:41,450 --> 00:06:45,580 y barabartë x vetëm do të thotë çfarëdo Adresa është një X, gjithashtu e vënë atë në y. 161 00:06:45,580 --> 00:06:48,740 >> Dhe kështu në pikturë, ne kemi përfaqësuar ky me dy shigjeta 162 00:06:48,740 --> 00:06:51,570 nga x dhe y nga duke treguar në të njëjtin vend. 163 00:06:51,570 --> 00:06:55,760 Pra semantike, x është i barabartë për y sepse të dy nga ata 164 00:06:55,760 --> 00:07:00,300 janë ruajtjen e njëjtë adresa, ergo treguar në 42, 165 00:07:00,300 --> 00:07:04,910 dhe tani, kur ju thoni yll y, shkoni në adresën në y, 166 00:07:04,910 --> 00:07:06,790 kjo ka një efekt anësor interesant. 167 00:07:06,790 --> 00:07:10,320 Pra, adresa në y është njëjta gjë si adresën në x. 168 00:07:10,320 --> 00:07:15,060 Pra, nëse ju thoni shkoni në adresën e në y dhe ndryshojë vlerën në 13, 169 00:07:15,060 --> 00:07:17,140 kush tjetër është prekur? 170 00:07:17,140 --> 00:07:21,100 X, pika D, kështu që të flasin, duhet të preken si edhe. 171 00:07:21,100 --> 00:07:24,340 >> Dhe me të vërtetë, si Nick tërhoqi këtë foto në claymation ishte pikërisht ajo. 172 00:07:24,340 --> 00:07:28,665 Edhe pse ne të ndjekë kursorin y, ne përfundoi në të njëjtin vend, 173 00:07:28,665 --> 00:07:32,780 dhe kështu që në qoftë se ne kemi qenë të shtypur nga x ose y pointee së, 174 00:07:32,780 --> 00:07:35,720 atëherë ne do të shohim vlerën e 13. 175 00:07:35,720 --> 00:07:37,927 Tani, unë them pointee të jetë në përputhje me video. 176 00:07:37,927 --> 00:07:39,760 Programuesit, tim njohuri, në fakt nuk 177 00:07:39,760 --> 00:07:42,460 thonë fjalën pointee, ajo që është vënë në 178 00:07:42,460 --> 00:07:44,650 në, por për qëndrueshmëri me video, të kuptojnë 179 00:07:44,650 --> 00:07:47,520 kjo është e gjitha kjo ishte do të thoshte në këtë situatë. 180 00:07:47,520 --> 00:07:54,190 Pra, çdo pyetje për claymation ose pointers ose malloc vetëm ende? 181 00:07:54,190 --> 00:07:54,850 Nuk ka? 182 00:07:54,850 --> 00:07:55,470 Në rregull. 183 00:07:55,470 --> 00:07:58,560 >> Pra, pa më tej ado, le të marrin një vështrim 184 00:07:58,560 --> 00:08:00,700 në ku kjo ka aktualisht janë përdorur për disa kohë. 185 00:08:00,700 --> 00:08:03,580 Pra, ne kemi pasur këtë bibliotekë CS50 që e mori të gjitha këto funksione. 186 00:08:03,580 --> 00:08:06,810 Ne kemi përdorur GetInt shumë, getString, ndoshta GetLongLong më parë 187 00:08:06,810 --> 00:08:09,840 në pset time një apo më shumë, por çfarë është qenë në fakt po ndodh? 188 00:08:09,840 --> 00:08:12,920 E pra, le të marrin një vështrim të shpejtë nën kapuç në një program që 189 00:08:12,920 --> 00:08:17,017 frymëzon arsyeja pse ne ju CS50 jap bibliotekë, dhe në të vërtetë si e javës së kaluar, 190 00:08:17,017 --> 00:08:18,850 kemi filluar të marrë ato rrota trajnimit jashtë. 191 00:08:18,850 --> 00:08:21,080 Pra, kjo është renditur tani e një postmortem të asaj që 192 00:08:21,080 --> 00:08:23,690 ka qenë duke shkuar në brenda bibliotekës CS50, 193 00:08:23,690 --> 00:08:27,250 edhe pse ne tani do të fillojnë të lëvizin larg nga ajo për shumicën e programeve. 194 00:08:27,250 --> 00:08:29,460 >> Pra, ky është një program i quajtur scanf 0. 195 00:08:29,460 --> 00:08:30,510 Është super të shkurtër. 196 00:08:30,510 --> 00:08:33,909 Ajo vetëm ka këto rreshta, por ajo paraqet një funksion të quajtur scanf 197 00:08:33,909 --> 00:08:36,909 se ne jemi të vërtetë do të shohim në një moment brenda bibliotekës CS50, 198 00:08:36,909 --> 00:08:38,600 megjithëse në një formë pak të ndryshme. 199 00:08:38,600 --> 00:08:41,330 Pra ky program on line 16 është deklaruar një x ndryshueshme. 200 00:08:41,330 --> 00:08:43,150 Pra, më jepni katër bytes për një int. 201 00:08:43,150 --> 00:08:45,750 Ajo është thënë përdorues, numrin lutem, dhe pastaj 202 00:08:45,750 --> 00:08:49,010 kjo është një linjë interesante që në fakt lidh së bashku javën e kaluar 203 00:08:49,010 --> 00:08:49,790 dhe kjo. 204 00:08:49,790 --> 00:08:53,230 Scanf, dhe pastaj të vini re ajo merr një string format, ashtu si printf, 205 00:08:53,230 --> 00:08:57,480 % i thotë një int, dhe pastaj ajo merr një Argumenti i dytë i cili duket pak 206 00:08:57,480 --> 00:08:58,260 shokuar. 207 00:08:58,260 --> 00:09:01,880 Është simbol x, dhe të kujtojnë, ne pamë vetëm këtë javë një herë e kaluar. 208 00:09:01,880 --> 00:09:03,465 Çfarë bën simbol x përfaqëson? 209 00:09:03,465 --> 00:09:06,210 210 00:09:06,210 --> 00:09:08,450 Çfarë do të bëni në simbol C? 211 00:09:08,450 --> 00:09:08,950 Po? 212 00:09:08,950 --> 00:09:10,024 >> Audienca: Adresa e. 213 00:09:10,024 --> 00:09:11,190 DAVID Malan: Adresa e. 214 00:09:11,190 --> 00:09:13,190 Pra, kjo është e kundërta e operatorit yll, 215 00:09:13,190 --> 00:09:17,270 ndërsa operatori Ylli thotë, të shkojnë në kjo adresë, operatori simbol 216 00:09:17,270 --> 00:09:20,280 thotë, kuptoj se Adresa e kësaj variable, 217 00:09:20,280 --> 00:09:23,530 dhe kështu që kjo është kyç, sepse Qëllimi scanf në jetën 218 00:09:23,530 --> 00:09:26,320 është për të scan përdorues-së të dhëna nga tastiera, 219 00:09:26,320 --> 00:09:29,970 në varësi të çfarëdo që ai apo ajo lloje, dhe pastaj lexoni të dhëna që përdoruesi të 220 00:09:29,970 --> 00:09:32,970 në një ndryshore, por ne pashë në dy javëve të fundit 221 00:09:32,970 --> 00:09:36,080 se se funksioni shkëmbim që ne përpoq effortlessly të zbatojë 222 00:09:36,080 --> 00:09:37,110 ishte thyer vetëm. 223 00:09:37,110 --> 00:09:42,470 Kujtojnë se me funksionin swap, në qoftë se ne vetëm i deklaruar A dhe B, si ints, 224 00:09:42,470 --> 00:09:47,040 ne e bëmë me sukses bie në ujdi dy variabla brenda e shkëmbim 225 00:09:47,040 --> 00:09:50,080 ashtu si me qumësht dhe FZ, por sa më shpejt që swap kthye, 226 00:09:50,080 --> 00:09:55,200 çfarë ishte rezultati me respekt për x dhe y, vlerat origjinale? 227 00:09:55,200 --> 00:09:55,700 Asgjë. 228 00:09:55,700 --> 00:09:56,200 Po. 229 00:09:56,200 --> 00:09:59,754 Asgjë nuk ka ndodhur atë kohë, sepse këmbime të ndryshojë vetëm kopjet e saj lokale, 230 00:09:59,754 --> 00:10:01,670 që do të thotë, të gjithë këtë herë, sa herë që ne kemi 231 00:10:01,670 --> 00:10:04,010 qenë duke kaluar në argumente me funksionet, ne jemi 232 00:10:04,010 --> 00:10:05,939 vetëm duke kaluar kopje të këtyre argumenteve. 233 00:10:05,939 --> 00:10:07,980 Ju mund të bëni me atë çdo gjë që ju doni me to, 234 00:10:07,980 --> 00:10:10,890 por ata do të kenë asnjë efekt në vlerat origjinale. 235 00:10:10,890 --> 00:10:13,650 Pra, kjo është problematike nëse ju dëshironi që të ketë një funksion si scanf 236 00:10:13,650 --> 00:10:17,170 në jetë, qëllimi i të cilit është që të hetoj input e përdoruesit nga tastiera 237 00:10:17,170 --> 00:10:22,010 dhe pastaj plotësoni në bosh, në mënyrë që të flasin, që është, të japë një ndryshore si x 238 00:10:22,010 --> 00:10:25,410 një vlerë, sepse në qoftë se unë ishin për të vetëm të kalojë në x scanf, 239 00:10:25,410 --> 00:10:28,790 në qoftë se ju e konsideroni logjikën e fundit javë, scanf mund të bëjë çfarëdo që dëshiron 240 00:10:28,790 --> 00:10:33,100 me një kopje të x, por kjo nuk mund të ndryshojë përgjithmonë x nëse ne japim 241 00:10:33,100 --> 00:10:37,120 scanf një hartë e thesarit, kështu që të flasin, ku x shënon vend, ku 242 00:10:37,120 --> 00:10:41,860 ne të kalojë në adresën e x në mënyrë që scanf mund të shkojnë atje dhe në fakt ndryshimi 243 00:10:41,860 --> 00:10:42,920 vlera e x. 244 00:10:42,920 --> 00:10:45,080 Dhe kështu me të vërtetë, të gjithë se ky program bën 245 00:10:45,080 --> 00:10:53,180 në qoftë se unë bëj scanf 0, në burimin tim Lista 5m, bëjnë scanf 0, 246 00:10:53,180 --> 00:10:57,730 dot çaj scanf, numri i ju lutem 50, faleminderit për 50. 247 00:10:57,730 --> 00:11:01,020 >> Pra, kjo nuk është e gjitha se interesante, Por ajo që është me të vërtetë ndodh 248 00:11:01,020 --> 00:11:04,820 është se sa më shpejt që unë e quaj scanf këtu, vlerën e x 249 00:11:04,820 --> 00:11:06,410 është duke u ndryshuar përgjithmonë. 250 00:11:06,410 --> 00:11:08,335 Tani, kjo duket e bukur dhe mirë, dhe në fakt, ajo 251 00:11:08,335 --> 00:11:11,200 Duket sikur ne nuk duhet të vërtetë biblioteka CS50 fare më. 252 00:11:11,200 --> 00:11:13,960 Për shembull, le të drejtuar kjo edhe një herë këtu. 253 00:11:13,960 --> 00:11:15,750 Më lejoni të rihap atë për një të dytë. 254 00:11:15,750 --> 00:11:20,600 Le të provoni një numër të lutem dhe në vend të thënë 50 si më parë, 255 00:11:20,600 --> 00:11:22,810 le të them vetëm jo. 256 00:11:22,810 --> 00:11:24,000 OK, kjo është pak i çuditshëm. 257 00:11:24,000 --> 00:11:25,270 NE RREGULL. 258 00:11:25,270 --> 00:11:28,680 Dhe vetëm disa pakuptimta këtu. 259 00:11:28,680 --> 00:11:31,170 Pra, kjo nuk duket të merren me situata të gabuara. 260 00:11:31,170 --> 00:11:33,620 Pra, ne kemi nevojë për minimalisht fillimin duke shtuar disa error-checking 261 00:11:33,620 --> 00:11:37,460 për të siguruar që përdoruesi ka shtypur në një numër aktual si 50, 262 00:11:37,460 --> 00:11:40,720 sepse me sa duket shtypur fjalët nuk është zbuluar si problematike, 263 00:11:40,720 --> 00:11:42,020 por ai ndoshta duhet të jetë. 264 00:11:42,020 --> 00:11:46,450 >> Le të shikojmë në këtë version tani që është përpjekja ime për Rikrijimin getString. 265 00:11:46,450 --> 00:11:48,437 Nëse scanf ka e gjithë kjo funksionalitetin e ndërtuar në, 266 00:11:48,437 --> 00:11:51,270 pse kemi qenë dabbling me këto rrota trajnimit si getString? 267 00:11:51,270 --> 00:11:55,450 E pra, këtu është ndoshta mi Versioni i thjeshtë i getString 268 00:11:55,450 --> 00:12:00,766 ku një javë më parë, unë mund të ketë thënë: më jepni një varg dhe e quajti atë tampon. 269 00:12:00,766 --> 00:12:03,390 Sot, unë jam duke shkuar për të filluar vetëm duke thënë yll char, e cila, risjell, 270 00:12:03,390 --> 00:12:04,400 kjo është vetëm sinonim. 271 00:12:04,400 --> 00:12:06,629 Ajo duket e frikshme, por kjo është saktë të njëjtën gjë. 272 00:12:06,629 --> 00:12:09,420 Pra, më jepni një ndryshore të quajtur tampon që do të ruajtur një varg, 273 00:12:09,420 --> 00:12:12,780 them string përdoruesit, ju lutem, dhe pastaj, ashtu si më parë, 274 00:12:12,780 --> 00:12:17,760 le të përpiqemi për të marrë hua këtë mësim scanf % s këtë herë dhe pastaj të kalojë në tampon. 275 00:12:17,760 --> 00:12:19,310 Tani, një kontroll i shpejtë mendje e shëndoshë. 276 00:12:19,310 --> 00:12:22,120 Pse nuk jam unë duke thënë simbol tampon këtë kohë? 277 00:12:22,120 --> 00:12:25,190 278 00:12:25,190 --> 00:12:26,625 Konkludoj nga shembullin e mëparshëm. 279 00:12:26,625 --> 00:12:28,000 Audienca: Char yll është një akrep. 280 00:12:28,000 --> 00:12:29,920 DAVID Malan: Pikërisht, sepse këtë herë, char 281 00:12:29,920 --> 00:12:34,080 yll është tashmë një tregues, një adresë, sipas definicionit të atij ylli qenë atje. 282 00:12:34,080 --> 00:12:37,530 Dhe në qoftë se scanf pret një adresë, mjafton vetëm për të kaluar në tampon. 283 00:12:37,530 --> 00:12:39,260 Unë nuk kam nevojë të them ampersand buffer. 284 00:12:39,260 --> 00:12:42,177 Për kurioz, ju mund të të bëjë diçka si kjo. 285 00:12:42,177 --> 00:12:43,510 Ajo do të kishte kuptim të ndryshëm. 286 00:12:43,510 --> 00:12:47,240 Kjo do t'ju japë një akrep tek nje tregues i cili është në të vërtetë, 287 00:12:47,240 --> 00:12:50,050 një gjë e vlefshme në C, por për tani, le të mbajtur atë të thjeshtë 288 00:12:50,050 --> 00:12:51,750 dhe për të mbajtur historinë qëndrueshme. 289 00:12:51,750 --> 00:12:54,100 Unë jam vetëm duke shkuar për të kaluar në tampon dhe kjo është e saktë. 290 00:12:54,100 --> 00:12:56,487 Problemi edhe pse është kjo. 291 00:12:56,487 --> 00:12:58,820 Më lejoni të shkoj përpara dhe të drejtuar këtë Programi pas përpilimit atë. 292 00:12:58,820 --> 00:13:00,902 Bëni scanf 1. 293 00:13:00,902 --> 00:13:02,610 Damn ajo, përpilues tim infektues gabimin tim. 294 00:13:02,610 --> 00:13:04,090 Më jepni një të dytë. 295 00:13:04,090 --> 00:13:05,460 Tingëllimë. 296 00:13:05,460 --> 00:13:06,990 Le të thonë se scanf-1.c. 297 00:13:06,990 --> 00:13:10,880 298 00:13:10,880 --> 00:13:11,380 NE RREGULL. 299 00:13:11,380 --> 00:13:12,720 Atje shkojmë. 300 00:13:12,720 --> 00:13:14,280 Unë kam nevojë për atë. 301 00:13:14,280 --> 00:13:16,750 ID CS50 ka të ndryshme konfigurimi 302 00:13:16,750 --> 00:13:18,280 që të ju mbrojnë kundër vetes. 303 00:13:18,280 --> 00:13:21,300 Unë e nevojshme për të çaktivizuar ato nga drejtimin tingëllimë manualisht këtë kohë. 304 00:13:21,300 --> 00:13:22,140 Pra ju lutem string. 305 00:13:22,140 --> 00:13:25,560 Unë jam duke shkuar për të shkuar përpara dhe shkruani në favorite botën time përshëndetje. 306 00:13:25,560 --> 00:13:26,490 OK, null. 307 00:13:26,490 --> 00:13:27,700 Kjo nuk është ajo që unë shtypur. 308 00:13:27,700 --> 00:13:29,690 Pra, kjo është tregues i diçka të gabuar. 309 00:13:29,690 --> 00:13:33,920 Më lejoni të shkoj përpara dhe të shtypni në një varg të vërtetë të gjatë. 310 00:13:33,920 --> 00:13:37,210 Faleminderit për null dhe unë nuk e di në qoftë se unë jam do të jetë në gjendje për të rrëzuar atë. 311 00:13:37,210 --> 00:13:40,240 Le të provoni një kopje të vogël paste dhe të shohim nëse kjo ndihmon. 312 00:13:40,240 --> 00:13:43,290 Vetëm ngjitur një shumë prej kësaj. 313 00:13:43,290 --> 00:13:47,310 Kjo është padyshim një e madhe string se zakonisht. 314 00:13:47,310 --> 00:13:51,450 Le të vetëm të vërtetë të shkruajnë atë. 315 00:13:51,450 --> 00:13:51,950 Jo. 316 00:13:51,950 --> 00:13:52,650 Mallkuar atë. 317 00:13:52,650 --> 00:13:53,480 Urdhëroj nuk u gjet. 318 00:13:53,480 --> 00:13:54,550 Pra, kjo është pa lidhje. 319 00:13:54,550 --> 00:13:56,440 Kjo për shkak se unë ngjit disa karaktere të këqija, 320 00:13:56,440 --> 00:13:59,780 por kjo rezulton se nuk do të punojë. 321 00:13:59,780 --> 00:14:03,510 >> Le të provoni këtë një herë më shumë, sepse kjo është më shumë argëtim në qoftë se ne fakt rrëzimit atë. 322 00:14:03,510 --> 00:14:09,116 Le të shkruani këtë dhe tani, unë jam do të kopjoni një varg të vërtetë të gjatë 323 00:14:09,116 --> 00:14:10,990 dhe tani le të shohim nëse ne mund të rrëzimit këtë gjë. 324 00:14:10,990 --> 00:14:14,235 Njoftim i lënë jashtë hapësirave dhe Linjat e reja dhe pikpresje 325 00:14:14,235 --> 00:14:16,035 dhe të gjitha personazhet shokuar. 326 00:14:16,035 --> 00:14:16,535 Enter. 327 00:14:16,535 --> 00:14:21,090 328 00:14:21,090 --> 00:14:22,880 Dhe tani rrjeti është vetëm duke i ngadalshëm. 329 00:14:22,880 --> 00:14:27,460 I mbajtur poshtë Command-V kohë të gjatë, në mënyrë të qartë. 330 00:14:27,460 --> 00:14:28,190 Mallkuar atë! 331 00:14:28,190 --> 00:14:29,260 Urdhëroj nuk u gjet. 332 00:14:29,260 --> 00:14:29,780 >> NE RREGULL. 333 00:14:29,780 --> 00:14:32,240 E pra, pikë është megjithatë në vijim. 334 00:14:32,240 --> 00:14:36,910 Pra, çfarë është në të vërtetë ndodh më me këtë deklaratë 335 00:14:36,910 --> 00:14:39,240 i char yll tampon on line 16? 336 00:14:39,240 --> 00:14:41,820 Pra, çfarë jam unë duke marrë kur unë deklaroj një akrep? 337 00:14:41,820 --> 00:14:47,440 Të gjitha unë jam marrë është një vlerë katër bajt quajtur tampon, por ajo që është brenda saj 338 00:14:47,440 --> 00:14:49,540 momentin? 339 00:14:49,540 --> 00:14:50,930 Është vetëm disa vlera mbeturina. 340 00:14:50,930 --> 00:14:54,170 Sepse çdo kohë që ju të deklarojë një ndryshore në C, kjo është vetëm disa vlera mbeturina, 341 00:14:54,170 --> 00:14:56,220 dhe ne jemi duke filluar për të udhëtim mbi këtë realitet. 342 00:14:56,220 --> 00:14:59,720 Tani, kur unë them scanf, shkoni në këtë adresë 343 00:14:59,720 --> 00:15:01,520 dhe të vënë çfarëdo lloje përdorues në. 344 00:15:01,520 --> 00:15:06,400 Nëse llojet e përdoruesve në përshëndetje bota, mirë, ku mund ta vënë atë? 345 00:15:06,400 --> 00:15:07,750 Buffer është një vlerë e mbeturinave. 346 00:15:07,750 --> 00:15:11,510 >> Pra, kjo është lloj i si një shigjetë që është duke treguar kush e di se ku. 347 00:15:11,510 --> 00:15:13,880 Ndoshta kjo është vënë të drejtë këtu në kujtesën time. 348 00:15:13,880 --> 00:15:16,560 Dhe kështu kur përdoruesi lloje në botë Hello, 349 00:15:16,560 --> 00:15:22,380 programi përpiqet për të vënë string Hello World backslash 0 350 00:15:22,380 --> 00:15:23,910 në atë copë e kujtesës. 351 00:15:23,910 --> 00:15:27,070 Por me probabilitet të lartë, por në mënyrë të qartë nuk 100% probabilitet, 352 00:15:27,070 --> 00:15:30,440 kompjuteri do të pas rrëzimit programi sepse kjo nuk është e 353 00:15:30,440 --> 00:15:32,490 kujtim unë duhet të lejohet të prek. 354 00:15:32,490 --> 00:15:36,330 Pra me pak fjalë, ky program është i meta pikërisht për këtë arsye. 355 00:15:36,330 --> 00:15:38,070 Unë jam në thelb nuk bëjnë atë? 356 00:15:38,070 --> 00:15:42,366 Çfarë hapash kam harruar, ashtu si ne hequr me shembullin e parë Binky-së? 357 00:15:42,366 --> 00:15:42,866 Po? 358 00:15:42,866 --> 00:15:43,710 >> Audienca: Alokimi Memory? 359 00:15:43,710 --> 00:15:45,001 >> DAVID Malan: kujtese. 360 00:15:45,001 --> 00:15:48,400 Unë nuk e kanë ndarë faktikisht ndonjë kujtim për atë varg. 361 00:15:48,400 --> 00:15:50,270 Pra, ne mund të rregullojmë këtë në disa mënyra. 362 00:15:50,270 --> 00:15:52,700 Dikush, ne mund të mbani atë të thjeshtë dhe në fakt, tani ju jeni 363 00:15:52,700 --> 00:15:55,116 do të fillojnë të shohim një blurring e linjave mes asaj 364 00:15:55,116 --> 00:15:58,520 një grup është, çfarë është një varg është, çfarë Ylli char është, ajo që një grup i karaktere 365 00:15:58,520 --> 00:15:59,020 është. 366 00:15:59,020 --> 00:16:02,450 Ja një shembull i dytë përfshirë vargjet dhe njoftimin 367 00:16:02,450 --> 00:16:05,690 të gjitha unë kam bërë në linjë 16 është, në vend të thënë 368 00:16:05,690 --> 00:16:09,530 që tampon do të jetë një char yll, një tregues për një copë e kujtesës, 369 00:16:09,530 --> 00:16:14,057 Unë jam duke shkuar për të dhënë shumë në mënyrë proaktive veten një tampon për 16 karaktere, 370 00:16:14,057 --> 00:16:16,390 dhe në fakt, në qoftë se ju jeni të njohur me buffering afat, 371 00:16:16,390 --> 00:16:20,570 ndoshta nga bota e videos, ku një video është buffering, buffering, 372 00:16:20,570 --> 00:16:21,175 buffering. 373 00:16:21,175 --> 00:16:22,550 E pra, çfarë është lidhja këtu? 374 00:16:22,550 --> 00:16:24,960 E pra, Brenda YouTube dhe brenda lojtarët video 375 00:16:24,960 --> 00:16:27,200 në përgjithësi është një koleksion kjo është më e madhe se 16. 376 00:16:27,200 --> 00:16:30,340 Ajo mund të jetë një grup i një madhësie megabyte, ndoshta 10 megabajt, 377 00:16:30,340 --> 00:16:34,330 dhe në atë grup bën shfletuesin tuaj shkarkoni një bandë e tërë e bytes, 378 00:16:34,330 --> 00:16:37,500 një bandë e tërë e megabajt të Video, dhe lojtar video të, 379 00:16:37,500 --> 00:16:40,930 YouTube-së apo kushdo që është, fillon lexuar bytes nga ai grup, 380 00:16:40,930 --> 00:16:43,530 dhe çdo herë që të shihni Fjala buffering, buffering, 381 00:16:43,530 --> 00:16:46,350 që do të thotë ky lojtar ka marrë në fund të asaj vektorit. 382 00:16:46,350 --> 00:16:50,430 Rrjeti është aq i ngadalshëm që ajo nuk ka rimbushet array me më shumë bytes 383 00:16:50,430 --> 00:16:55,610 dhe kështu ju jeni jashtë bit për të shfaqur për përdoruesit. 384 00:16:55,610 --> 00:16:59,430 >> Pra tampon është një term i prirur këtu në atë kjo është vetëm një grup, një copë e kujtesës. 385 00:16:59,430 --> 00:17:02,530 Dhe kjo do të rregullohet sepse kjo rezulton 386 00:17:02,530 --> 00:17:07,410 që ju mund të trajtoni vargjeve sikur ata janë adresat, edhe pse tampon 387 00:17:07,410 --> 00:17:10,710 është vetëm një simbol, kjo është një sekuenca e karaktereve, tampon, 388 00:17:10,710 --> 00:17:14,760 kjo është e dobishme për mua, programues, ju mund të kalojë emrin e saj rreth 389 00:17:14,760 --> 00:17:17,079 sikur të ishte një akrep, sikur ajo 390 00:17:17,079 --> 00:17:21,000 ishin adresa e një copë e kujtesës për 16 gërma. 391 00:17:21,000 --> 00:17:24,530 Pra, kjo është për të thënë, unë mund të kalojë scanf pikërisht këtë fjalë 392 00:17:24,530 --> 00:17:30,670 dhe kështu që tani, në qoftë se unë bëj këtë program, bëjnë scanf 2, dot Slash scanf 2, 393 00:17:30,670 --> 00:17:35,386 dhe shkruani në përshëndetje botë, Shkruani, se time-- 394 00:17:35,386 --> 00:17:37,590 >> Hmm, çfarë ndodhi? 395 00:17:37,590 --> 00:17:39,340 String ju lutem. 396 00:17:39,340 --> 00:17:41,430 Çfarë të bëj gabim? 397 00:17:41,430 --> 00:17:43,800 Tungjatjeta botë, tampon. 398 00:17:43,800 --> 00:17:44,705 Përshendetje Botë. 399 00:17:44,705 --> 00:17:48,201 400 00:17:48,201 --> 00:17:49,420 Ah, unë e di se çfarë është bërë. 401 00:17:49,420 --> 00:17:49,920 NE RREGULL. 402 00:17:49,920 --> 00:17:51,628 Kështu që është e lexuar deri deri në hapësirën e parë. 403 00:17:51,628 --> 00:17:55,680 Pra, le të mashtrojnë për vetëm një moment dhe thonë se unë vetëm të kërkuar për të tipit diçka 404 00:17:55,680 --> 00:18:01,408 me të vërtetë e gjatë si kjo është një fjali e gjatë kjo është një, dy, tre, katër, pesë, 405 00:18:01,408 --> 00:18:04,420 gjashtë, shtatë, tetë, nëntë, 10, 11, 12, 13, 14, 15, 16. 406 00:18:04,420 --> 00:18:05,300 NE RREGULL. 407 00:18:05,300 --> 00:18:07,600 Kjo është me të vërtetë një dënim të gjatë. 408 00:18:07,600 --> 00:18:10,710 Pra, kjo fjali është më shumë se 16 karaktere 409 00:18:10,710 --> 00:18:13,670 dhe kështu që kur unë hit Enter, çfarë do të ndodhë? 410 00:18:13,670 --> 00:18:16,940 E pra, në këtë rast e tampon histori, unë kam shpallur 411 00:18:16,940 --> 00:18:22,190 që në fakt qenë një grup me 16 chars gati për të shkuar. 412 00:18:22,190 --> 00:18:27,426 Pra, një, dy, tre, katër, pesë, gjashtë, shtatë, tetë, nëntë, 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 Pra 16 karaktere, dhe tani, kur unë lexuar në diçka si kjo është një kohë të gjatë 415 00:18:34,410 --> 00:18:43,950 dënim, çfarë do të ndodhë është që unë jam duke shkuar për të lexuar në këtë është një i gjatë 416 00:18:43,950 --> 00:18:49,660 S-E-N-T-E-N-C-E, fjalia. 417 00:18:49,660 --> 00:18:52,270 >> Pra, kjo është qëllimisht një gjë e keqe që kam 418 00:18:52,270 --> 00:18:55,060 mbani shkrim përtej Kufijtë e array tim, 419 00:18:55,060 --> 00:18:56,660 përtej kufijve të tampon sime. 420 00:18:56,660 --> 00:19:00,100 Unë mund të merrni me fat dhe programi do të mbajë mbi drejtimin dhe nuk e kujdesit, 421 00:19:00,100 --> 00:19:03,450 por në përgjithësi, kjo në të vërtetë do të rrëzimit programin tim, 422 00:19:03,450 --> 00:19:06,440 dhe kjo është një bug në tim kodin moment unë hap 423 00:19:06,440 --> 00:19:08,576 përtej kufijve e atij grup, sepse unë 424 00:19:08,576 --> 00:19:10,450 nuk e di nëse kjo është domosdoshmërisht do të rrëzuar 425 00:19:10,450 --> 00:19:12,120 ose në qoftë se unë jam vetëm do të merrni me fat. 426 00:19:12,120 --> 00:19:15,750 Pra, kjo është problematike për shkak se në këtë rast, kjo nuk duket për të punuar 427 00:19:15,750 --> 00:19:20,931 dhe le të provokoj fatin këtu, edhe pse IDE duket të tolerojë mjaft 428 00:19:20,931 --> 00:19:21,430 of-- 429 00:19:21,430 --> 00:19:22,040 >> Atje shkojmë. 430 00:19:22,040 --> 00:19:23,240 Së fundi. 431 00:19:23,240 --> 00:19:26,470 Kështu që unë jam i vetmi që mund të shihni këtë. 432 00:19:26,470 --> 00:19:29,630 Kështu që unë vetëm e kishte një shumë të shtypni fun nga një frazë të vërtet të gjatë aktual 433 00:19:29,630 --> 00:19:32,800 se ajo tejkaluar sigurisht 16 bytes, sepse unë 434 00:19:32,800 --> 00:19:38,050 shtypur në këtë çmendur gjatë multi-line fraza, dhe pastaj të vini re çfarë ka ndodhur. 435 00:19:38,050 --> 00:19:41,110 Programi u përpoq botimit të saj dhe pastaj mori një defekt segmentimit 436 00:19:41,110 --> 00:19:44,430 dhe gabimet segmentimit është kur diçka si kjo ndodh 437 00:19:44,430 --> 00:19:47,650 dhe të sistemit operativ thotë Jo, nuk mund ta prekë atë kujtesës. 438 00:19:47,650 --> 00:19:49,570 Ne jemi duke shkuar për të vrarë programi krejt. 439 00:19:49,570 --> 00:19:51,180 >> Pra, kjo duket problematike. 440 00:19:51,180 --> 00:19:54,540 Unë e kam përmirësuar programin ku të paktën të ketë disa kujtesës, 441 00:19:54,540 --> 00:19:58,000 por kjo do të duket të kufizojë getString funksioni për të marrë 442 00:19:58,000 --> 00:20:00,780 vargjet e ndonjë gjatësi të fundme 16. 443 00:20:00,780 --> 00:20:04,200 Pra, nëse ju doni të mbështetur më shumë fjali se 16 karaktere, 444 00:20:04,200 --> 00:20:04,880 cfare po ben? 445 00:20:04,880 --> 00:20:07,970 E pra, ju mund të rrisë madhësia e këtij tampon në 32 446 00:20:07,970 --> 00:20:09,190 ose që duket lloj i shkurtër. 447 00:20:09,190 --> 00:20:12,260 Pse nuk vetëm të bëjë ajo 1000 por zbyth. 448 00:20:12,260 --> 00:20:17,100 Cila është përgjigja intuitive e vetëm duke shmangur këtë problem duke e bërë 449 00:20:17,100 --> 00:20:20,660 tampon ime më e madhe, si 1000 karaktere? 450 00:20:20,660 --> 00:20:23,470 Me implementimin e getString në këtë mënyrë. 451 00:20:23,470 --> 00:20:27,130 Çfarë është e mirë apo e keqe këtu? 452 00:20:27,130 --> 00:20:28,033 Po? 453 00:20:28,033 --> 00:20:30,574 Audienca: Në qoftë se ju lidhin një shumë i hapësirës dhe ju nuk e përdorni atë, 454 00:20:30,574 --> 00:20:33,500 atëherë ju nuk mund të rialokuar atë hapësirë. 455 00:20:33,500 --> 00:20:34,500 DAVID Malan: Absolutisht. 456 00:20:34,500 --> 00:20:38,480 Është kota aq sa në qoftë se ju nuk e bëni në fakt duhet 900 e atyre bytes 457 00:20:38,480 --> 00:20:41,057 por ju jeni duke kërkuar për 1,000 në total gjithsesi, 458 00:20:41,057 --> 00:20:44,140 ju jeni vetëm të konsumojnë më shumë memorie në kompjuterin e përdoruesit se sa ju duhet për të, 459 00:20:44,140 --> 00:20:45,740 dhe në fund të fundit, disa prej të ju keni hasur tashmë 460 00:20:45,740 --> 00:20:47,620 në jetën që kur ju jeni drejtimin e shumë programeve 461 00:20:47,620 --> 00:20:50,470 dhe ata janë të hahet deri shumë kujtesës, kjo në fakt mund të ndikojë në performancën e 462 00:20:50,470 --> 00:20:52,220 dhe përvoja e përdoruesit në kompjuter. 463 00:20:52,220 --> 00:20:56,090 Pra, kjo është lloj i një zgjidhje dembel, me siguri, dhe anasjelltas, 464 00:20:56,090 --> 00:21:00,140 kjo nuk është vetëm të kota, çfarë problemi ende mbetet, edhe në qoftë se unë bëj tampon tim 465 00:21:00,140 --> 00:21:02,100 1000? 466 00:21:02,100 --> 00:21:02,600 Po? 467 00:21:02,600 --> 00:21:04,475 >> Audienca: Vargu është gjatësia 1,001. 468 00:21:04,475 --> 00:21:05,350 DAVID Malan: Pikërisht. 469 00:21:05,350 --> 00:21:08,280 Nëse string juaj është gjatësia e 1001, ju keni të njëjtin problem e saktë, 470 00:21:08,280 --> 00:21:10,705 dhe me argumentin tim, unë do të vetëm pastaj e bëjnë atë të vitit 2000, 471 00:21:10,705 --> 00:21:12,830 por ju nuk e dini në të avancuar se sa e madhe ajo duhet të jetë, 472 00:21:12,830 --> 00:21:16,890 dhe ende, unë duhet të hartojnë programin tim para se të lënë njerëzit e përdorin dhe shkarko 473 00:21:16,890 --> 00:21:17,390 ajo. 474 00:21:17,390 --> 00:21:21,490 Pra, kjo është pikërisht lloji i gjëra që përpiqet bibliotekës CS50 475 00:21:21,490 --> 00:21:24,750 për të na ndihmuar me dhe ne do shikim vetëm në disa zbatimit themelor 476 00:21:24,750 --> 00:21:29,790 këtu, por kjo është CS50 dot C. Kjo është skedari që ka qenë në CS50 IDE 477 00:21:29,790 --> 00:21:31,420 të gjitha këto javë që ju keni qenë duke përdorur. 478 00:21:31,420 --> 00:21:34,280 Është e para-hartuar dhe ju keni qenë duke e përdorur atë automatikisht 479 00:21:34,280 --> 00:21:38,780 nga natyra e duke pasur dash L CS50 flamurin me tingëllim, 480 00:21:38,780 --> 00:21:42,300 por në qoftë se unë lëvizni poshtë nëpër të gjitha këto funksione, këtu është getString, 481 00:21:42,300 --> 00:21:44,636 dhe vetëm për të ju jap një shije të asaj që po ndodh, 482 00:21:44,636 --> 00:21:46,760 le të marrin një vështrim të shpejtë kompleksiteti relative. 483 00:21:46,760 --> 00:21:48,870 Kjo nuk është një super të gjatë funksion, por ne nuk e bëmë 484 00:21:48,870 --> 00:21:52,530 duhet të mendoj se të gjithë e vështirë për se si të shkojë në lidhje me marrjen e strings. 485 00:21:52,530 --> 00:21:55,660 >> Kështu që këtu është tampon im dhe unë me sa duket nisja atë të null. 486 00:21:55,660 --> 00:21:57,990 Kjo, sigurisht, është njëjta gjë si yll char, 487 00:21:57,990 --> 00:22:00,585 por kam vendosur në zbatimin e bibliotekës CS50 488 00:22:00,585 --> 00:22:02,460 se në qoftë se ne jemi duke shkuar për të jetë plotësisht dinamik, 489 00:22:02,460 --> 00:22:05,770 Unë nuk e di paraprakisht se si e madhe e një përdoruesit string do të dëshironi të merrni. 490 00:22:05,770 --> 00:22:08,140 Kështu që unë jam duke shkuar për të filluar me vetëm një varg të zbrazët 491 00:22:08,140 --> 00:22:11,507 dhe unë jam duke shkuar për të ndërtuar sa më shumë e kujtesës si unë duhet të përshtaten string përdoruesit 492 00:22:11,507 --> 00:22:13,340 dhe në qoftë se unë nuk kam të mjaftueshme, unë jam duke shkuar për të pyetur 493 00:22:13,340 --> 00:22:15,010 sistemi operativ për më shumë memorie. 494 00:22:15,010 --> 00:22:17,510 Unë jam duke shkuar për të lëvizur varg e tyre në një copë të madhe të kujtesës 495 00:22:17,510 --> 00:22:21,847 dhe unë jam duke shkuar për lirimin ose të liruar copë pamjaftueshme e madhe e kujtesës 496 00:22:21,847 --> 00:22:23,680 dhe ne jemi vetëm do për të bërë këtë iteratively. 497 00:22:23,680 --> 00:22:25,570 >> Pra, një shikim të shpejtë, këtu është vetëm një variabël 498 00:22:25,570 --> 00:22:28,780 me të cilën unë jam duke shkuar për të mbajtur nën e kapacitetit të tampon sime. 499 00:22:28,780 --> 00:22:30,071 Sa bytes mund të përshtatet? 500 00:22:30,071 --> 00:22:32,070 Këtu është një variabël me n që unë jam duke shkuar për të mbajtur 501 00:22:32,070 --> 00:22:36,200 gjurmët e sa bytes janë në të vërtetë në tampon ose që përdoruesi ka shtypur. 502 00:22:36,200 --> 00:22:39,900 Nëse ju nuk e keni parë këtë më parë, ju mund të specifikoni se një variabël si një int 503 00:22:39,900 --> 00:22:46,370 është panënshkruar, e cila siç sugjeron emri, do të thotë se është jo-negativ, dhe pse do të 504 00:22:46,370 --> 00:22:50,590 Unë ndonjëherë dua të shqetësojë specifikon se një int nuk është vetëm një int, 505 00:22:50,590 --> 00:22:52,540 por kjo është një int panënshkruar? 506 00:22:52,540 --> 00:22:55,064 Kjo është një int jo-negativ. 507 00:22:55,064 --> 00:22:56,355 Çfarë [e padëgjueshme] do të thotë? 508 00:22:56,355 --> 00:22:58,910 >> Audienca: Është përshkruar një sasi e kujtesës që mund të jetë [e padëgjueshme]. 509 00:22:58,910 --> 00:22:59,660 >> DAVID Malan: Po. 510 00:22:59,660 --> 00:23:03,710 Pra, nëse unë them unsigned, kjo është në fakt duke ju dhënë një grimë e kujtesës shtesë 511 00:23:03,710 --> 00:23:07,440 dhe kjo duket lloj i trashë, por në qoftë se ju kanë një grimë e kujtesës shtesë, që 512 00:23:07,440 --> 00:23:09,940 do të thotë që ju keni dy herë më shumë Vlerat ju mund të përfaqësojnë, 513 00:23:09,940 --> 00:23:11,570 sepse ajo mund të jetë një 0, ose një 1. 514 00:23:11,570 --> 00:23:14,660 Pra by default, një int mund të jetë afërsisht negativ 2 miliard gjithë rrugës 515 00:23:14,660 --> 00:23:16,030 deri në 2 miliardë pozitiv. 516 00:23:16,030 --> 00:23:18,540 Këto janë vargjet e madhe, por është ende lloj i të kota 517 00:23:18,540 --> 00:23:21,280 në qoftë se ju intereson vetëm për madhësive, të cilat vetëm intuitive 518 00:23:21,280 --> 00:23:24,620 duhet të jetë jo-negativ ose pozitiv ose 0, edhe atëherë, 519 00:23:24,620 --> 00:23:28,884 pse jeni të humbur 2 miliardë Vlerat e mundshme për numrat negativë 520 00:23:28,884 --> 00:23:30,300 në qoftë se ju nuk jeni do të përdorin ato? 521 00:23:30,300 --> 00:23:35,350 Pra, duke thënë panënshkruar, tani int ime mund të të jetë në mes të 0 dhe afërsisht 4 miliardë. 522 00:23:35,350 --> 00:23:39,280 >> Kështu që këtu është vetëm një int C për arsye të ne nuk do të marrë në vetëm tani si 523 00:23:39,280 --> 00:23:42,280 pse kjo është një int vend e një char, por këtu është 524 00:23:42,280 --> 00:23:44,630 Thelbi i asaj që po ndodh në, dhe disa nga ju 525 00:23:44,630 --> 00:23:48,340 mund të jetë duke përdorur, për shembull, Funksioni fgetc edhe në pset katër 526 00:23:48,340 --> 00:23:51,580 ose pas kësaj, ne do të shohim atë përsëri në problemin vendosur pesë, 527 00:23:51,580 --> 00:23:55,410 fgetc është e bukur sepse si emri lloj, lloj arcanely sugjeron, 528 00:23:55,410 --> 00:23:57,940 kjo është një funksion që merr një karakter dhe kështu, 529 00:23:57,940 --> 00:24:00,690 çfarë është krejtësisht të ndryshme për atë që ne jemi duke bërë në getString 530 00:24:00,690 --> 00:24:03,110 është që ne nuk jeni duke përdorur scanf në të njëjtën mënyrë. 531 00:24:03,110 --> 00:24:07,550 Ne jemi vetëm zvarrit përgjatë Hap-pas-hapi mbi çfarëdo përdoruesi ka shtypur në, 532 00:24:07,550 --> 00:24:10,970 sepse ne gjithmonë mund të caktojë një char, dhe kështu që ne mund gjithmonë të sigurtë 533 00:24:10,970 --> 00:24:15,599 shikoni në një char në një kohë, dhe magji fillon të ndodhë këtu. 534 00:24:15,599 --> 00:24:17,890 Unë do të lëvizni poshtë për të mes të këtij funksioni 535 00:24:17,890 --> 00:24:20,360 vetëm të prezantoj shkurtimisht këtë funksion. 536 00:24:20,360 --> 00:24:22,670 Ashtu si ka një funksion malloc, ka 537 00:24:22,670 --> 00:24:27,740 një funksion risigurimi ku risigurimi ju lejon të rialokuar një copë e kujtesës 538 00:24:27,740 --> 00:24:29,570 dhe të bëjë atë të mëdha apo të vogla. 539 00:24:29,570 --> 00:24:33,060 Histori kaq të gjatë të shkurtër dhe me një valë e dorës sime për sot, 540 00:24:33,060 --> 00:24:35,620 e di se çfarë getString është duke bërë është kjo është lloj 541 00:24:35,620 --> 00:24:39,720 i magjike në rritje ose ngushtim tampon si përdorues 542 00:24:39,720 --> 00:24:41,440 Llojet e në vargun e tij ose të saj. 543 00:24:41,440 --> 00:24:43,962 >> Pra, nëse llojet e përdoruesit një string i shkurtër, ky kod 544 00:24:43,962 --> 00:24:45,920 vetëm ndan të mjaftueshme kujtim të përshtaten string. 545 00:24:45,920 --> 00:24:48,086 Nëse shfrytëzuesi mban typing si unë e bëri atë përsëri dhe përsëri 546 00:24:48,086 --> 00:24:50,330 dhe përsëri, mirë, në qoftë se tampon fillimisht ky i madh 547 00:24:50,330 --> 00:24:53,310 dhe programi realizon, në prit një minutë, unë jam jashtë hapësirës, 548 00:24:53,310 --> 00:24:55,410 ajo do të dyfishohet madhësia e tampon 549 00:24:55,410 --> 00:24:59,110 dhe pastaj të dyfishojë madhësinë e tampon dhe kodi që bën dyfishimin, 550 00:24:59,110 --> 00:25:03,170 nëse ne shikojmë në atë këtu, është vetëm kjo zgjuar një astar. 551 00:25:03,170 --> 00:25:06,830 Ju nuk mund të keni parë këtë sintaksë më parë, por në qoftë se ju thoni yll të barabartë, 552 00:25:06,830 --> 00:25:10,470 kjo është e njëjta gjë si duke thënë herë kapacitetin e 2. 553 00:25:10,470 --> 00:25:13,390 Pra, vetëm ajo mban dyfishuar kapaciteti i tampon 554 00:25:13,390 --> 00:25:17,480 dhe pastaj duke u thënë risigurimi për të dhënë vetë se kujtesa shumë më tepër. 555 00:25:17,480 --> 00:25:19,720 >> Tani, si një mënjanë, atje janë funksione të tjera në këtu 556 00:25:19,720 --> 00:25:23,680 që ne nuk do të shikojmë në çdo detaj përveç për të treguar në GetInt, 557 00:25:23,680 --> 00:25:26,150 ne përdorim getString në GetInt. 558 00:25:26,150 --> 00:25:28,192 Ne kontrolloni se kjo nuk është null, e cila, kujtojnë, 559 00:25:28,192 --> 00:25:30,400 është vlera e veçantë që do të thotë diçka shkoi keq. 560 00:25:30,400 --> 00:25:31,233 Ne jemi jashtë kujtesës. 561 00:25:31,233 --> 00:25:32,310 Më mirë kontrolloni për atë. 562 00:25:32,310 --> 00:25:33,710 Dhe ne të kthehen një vlerë sentinel. 563 00:25:33,710 --> 00:25:37,850 Por unë do të shtyjë për komentet si për të pse dhe pastaj ne e përdorim këtë kushëririn e scanf 564 00:25:37,850 --> 00:25:42,100 quajtur sscanf dhe kjo rezulton që scanf sscanf, ose varg, 565 00:25:42,100 --> 00:25:45,310 ju lejon të marrin një vështrim në vijën që përdoruesi ka shtypur në dhe të ju lejojnë 566 00:25:45,310 --> 00:25:49,610 analizuar atë në thelb dhe atë që unë jam duke bërë këtu është Unë jam i thënë sscanf, 567 00:25:49,610 --> 00:25:54,440 analizuar çfarëdo përdoruesi ka shtypur në dhe sigurohuni% i, 568 00:25:54,440 --> 00:25:59,250 nuk është një numër i plotë në të, dhe ne nuk do merrni në, sot pikërisht pse ka edhe 569 00:25:59,250 --> 00:26:03,760 një% c këtu, por që me pak fjalë lejon na për të zbuluar nëse përdoruesi ka shtypur 570 00:26:03,760 --> 00:26:06,050 në diçka fals pas numrit. 571 00:26:06,050 --> 00:26:11,766 Pra, arsyeja që GetInt dhe getString ju them për të rigjykuar, rigjykuar, rigjykuar 572 00:26:11,766 --> 00:26:13,640 është për shkak të gjithë që kodi kemi shkruar, 573 00:26:13,640 --> 00:26:17,900 Kjo është lloj i kërkuar në input të përdoruesit në duke u siguruar se është plotësisht numerike 574 00:26:17,900 --> 00:26:21,700 ose kjo është një Floating aktual Vlera pikë ose të ngjashme, 575 00:26:21,700 --> 00:26:24,233 në varësi të asaj vlere funksionojë ju jeni duke përdorur. 576 00:26:24,233 --> 00:26:25,060 >> Uf. 577 00:26:25,060 --> 00:26:25,710 NE RREGULL. 578 00:26:25,710 --> 00:26:27,592 Kjo ishte një kafshatë por çështja këtu është 579 00:26:27,592 --> 00:26:29,550 se arsyeja kemi pasur këto rrota trajnimit në 580 00:26:29,550 --> 00:26:32,880 është për shkak se në nivelin më të ulët, nuk është vetëm kaq shumë gjëra që 581 00:26:32,880 --> 00:26:35,674 mund të shkojnë keq që ne të kërkuar për preemptively trajtuar 582 00:26:35,674 --> 00:26:38,090 këto gjëra sigurisht në javë hershme e klasës, 583 00:26:38,090 --> 00:26:42,230 por tani me pset katër dhe pesë pset dhe përtej do të shihni se ajo është më shumë tek 584 00:26:42,230 --> 00:26:45,570 ju por edhe ju jeni më të aftë e zgjidhjen e këtyre llojet e problemeve 585 00:26:45,570 --> 00:26:47,180 veten. 586 00:26:47,180 --> 00:26:51,770 Çdo pyetje mbi getString ose GetInt? 587 00:26:51,770 --> 00:26:52,630 Po? 588 00:26:52,630 --> 00:26:55,130 >> Audienca: Pse do të dyfishtë kapaciteti i tampon 589 00:26:55,130 --> 00:26:57,630 në vend se vetëm duke rritur ai nga shuma e saktë? 590 00:26:57,630 --> 00:26:58,100 >> DAVID Malan: Pyetje e mirë. 591 00:26:58,100 --> 00:27:00,474 Pse do të dyfishojë kapacitetin e tampon krahasim 592 00:27:00,474 --> 00:27:02,800 për të vetëm të rritur atë nga disa vlera konstante? 593 00:27:02,800 --> 00:27:03,900 Ishte një vendim i projektit. 594 00:27:03,900 --> 00:27:08,590 Ne thjesht vendosi se për shkak se ajo tenton të të jetë pak e shtrenjtë kohë-mençur për të kërkuar 595 00:27:08,590 --> 00:27:10,440 sistemi operativ për kujtesën, ne nuk e bëri 596 00:27:10,440 --> 00:27:13,210 duan të përfundojnë duke marrë në një situatë për vargjet e mëdha 597 00:27:13,210 --> 00:27:14,960 se ne ishim duke i kërkuar OS përsëri dhe përsëri 598 00:27:14,960 --> 00:27:17,500 dhe përsëri dhe përsëri në suksesion të shpejtë për kujtesën. 599 00:27:17,500 --> 00:27:20,387 Pra, ne vetëm vendosëm, disi në mënyrë arbitrare, por ne shpresojmë në mënyrë të arsyeshme, 600 00:27:20,387 --> 00:27:22,720 se, ju e dini se çfarë, le të përpiqen për të marrë përpara veten 601 00:27:22,720 --> 00:27:25,520 dhe vetëm i mbajnë dyfishuar atë në mënyrë që ne minimizuar shumën e herë 602 00:27:25,520 --> 00:27:29,010 ne kemi për të thirrur malloc ose risigurimi, por një gjykim i përgjithshëm 603 00:27:29,010 --> 00:27:31,820 thirrur në mungesë të njohjes atë që përdoruesit mund të dëshironi të shkruani. 604 00:27:31,820 --> 00:27:33,600 Dy mënyra mund të jetë e diskutueshme. 605 00:27:33,600 --> 00:27:35,430 Ndoshta mirë. 606 00:27:35,430 --> 00:27:39,240 >> Pra, le të marrin një vështrim në një çift e efekteve të tjera anësore të kujtesës, 607 00:27:39,240 --> 00:27:41,610 gjëra që mund të shkojnë keq dhe mjetet që ju mund të 608 00:27:41,610 --> 00:27:43,880 përdorin për të kapur këto lloje të gabimeve. 609 00:27:43,880 --> 00:27:47,800 Ajo rezulton se të gjithë ju, edhe pse check50 nuk ka thënë të sa më shumë, 610 00:27:47,800 --> 00:27:50,050 kam qenë i shkruar buggy Kodi që nga java e parë, 611 00:27:50,050 --> 00:27:53,630 edhe në qoftë se të gjitha testet janë check50 kaluar, dhe madje edhe në qoftë se ju dhe TF tuaj 612 00:27:53,630 --> 00:27:56,010 janë super të bindur se Kodi juaj punon si qëllim. 613 00:27:56,010 --> 00:27:59,190 Kodi juaj ka qenë buggy ose të meta në të gjithë ju që, 614 00:27:59,190 --> 00:28:02,540 në përdorimin e bibliotekës CS50, janë rrjedh kujtesën. 615 00:28:02,540 --> 00:28:06,040 Ju keni qenë duke kërkuar e sistemit operativ për kujtesën, në shumicën e programeve 616 00:28:06,040 --> 00:28:08,850 ju keni shkruar, por ju keni kurrë dhënë në të vërtetë atë. 617 00:28:08,850 --> 00:28:12,110 Ju keni quajtur getString dhe GetInt dhe GetFloat, 618 00:28:12,110 --> 00:28:15,270 por me getString, ju keni kurrë nuk e quajti unGetString ose jep 619 00:28:15,270 --> 00:28:19,890 String Prapa apo si, por ne kemi parë që getString bën të siguroj kujtesë 620 00:28:19,890 --> 00:28:22,810 me anë të malloc ose kjo risigurimi funksion, e cila është vetëm 621 00:28:22,810 --> 00:28:25,670 shumë të ngjashme në frymë, dhe akoma, ne kemi qenë 622 00:28:25,670 --> 00:28:28,629 duke i kërkuar e sistemit operativ për kujtesës dhe kujtesës përsëri dhe përsëri 623 00:28:28,629 --> 00:28:29,670 por kurrë duke i dhënë atë. 624 00:28:29,670 --> 00:28:33,550 >> Tani, si një mënjanë, rezulton se kur një program shpërblej, të gjithë e kujtesës 625 00:28:33,550 --> 00:28:34,870 është liruar automatikisht. 626 00:28:34,870 --> 00:28:36,150 Pra, kjo nuk ka qenë një marrëveshje e madhe. 627 00:28:36,150 --> 00:28:38,590 Kjo nuk do të thyejnë IDE apo gjëra të ngadalësojnë, 628 00:28:38,590 --> 00:28:40,670 por kur programet bëjë përgjithësisht rrjedhje kujtesës 629 00:28:40,670 --> 00:28:42,170 dhe ata po xhironi për një kohë të gjatë. 630 00:28:42,170 --> 00:28:45,640 Nëse ju keni parë ndonjëherë budalla Pak topi plazhi në Mac OS ose hourglass 631 00:28:45,640 --> 00:28:51,160 në Windows ku kjo është lloj i ngadalësuar apo të menduarit apo të të menduarit 632 00:28:51,160 --> 00:28:53,770 ose vetëm të vërtetë fillon për të ngadalësuar në një zvarritje, 633 00:28:53,770 --> 00:28:56,960 ajo shumë ndoshta mund të jetë rezultat i një rrjedhje kujtesës. 634 00:28:56,960 --> 00:28:59,970 Programuesit të cilët shkruan software ju jeni duke përdorur 635 00:28:59,970 --> 00:29:03,570 pyesni sistemit operativ për kujtesën çdo disa minuta, çdo orë. 636 00:29:03,570 --> 00:29:05,570 Por nëse ju xhironi software, edhe nëse është 637 00:29:05,570 --> 00:29:08,680 minimizohet në kompjuterin tuaj për orë ose ditë në fund, 638 00:29:08,680 --> 00:29:11,980 ju mund të jetë i pyetur për më shumë dhe më shumë kujtesës dhe në fakt nuk e përdorur atë 639 00:29:11,980 --> 00:29:15,180 dhe kështu kodin tuaj mund të jetë, ose Programet mund të rrjedh kujtesës, 640 00:29:15,180 --> 00:29:18,350 dhe në qoftë se ju filloni për rrjedhje kujtesës, ka pak kujtesë për programe të tjera, 641 00:29:18,350 --> 00:29:21,220 dhe efekti është për të ngadalësojnë gjithçka poshtë. 642 00:29:21,220 --> 00:29:23,600 >> Tani, kjo është larg nga një prej programet më të egra 643 00:29:23,600 --> 00:29:26,350 ju do të keni mundësi për të kandiduar në CS50 aq 644 00:29:26,350 --> 00:29:31,650 si prodhimin e saj është edhe më e fshehtë se tingëllimë-së ose të bëjë ose ndonjë e komandës 645 00:29:31,650 --> 00:29:35,930 Programet e linjës ne kemi drejtuar më parë, por fatmirësisht, ngulitur në prodhimin e saj 646 00:29:35,930 --> 00:29:39,810 është disa këshilla super të dobishme që do të jetë e dobishme ose për pset katër 647 00:29:39,810 --> 00:29:41,510 ose sigurisht pset pesë. 648 00:29:41,510 --> 00:29:44,250 Pra interfaqe e Valgrind është një mjet që mund të përdoret për të parë 649 00:29:44,250 --> 00:29:46,930 për rrjedhjet e kujtesës në programin tuaj. 650 00:29:46,930 --> 00:29:48,570 Është relativisht e thjeshtë për të kandiduar. 651 00:29:48,570 --> 00:29:51,420 Ju drejtuar interfaqe e Valgrind dhe pastaj, madje edhe edhe pse kjo është një fjalëshumë pak, 652 00:29:51,420 --> 00:29:54,440 dash kontrolloni dash rrjedhje barabartë të plotë, dhe pastaj dot 653 00:29:54,440 --> 00:29:56,320 pakësojë dhe emri i programit tuaj. 654 00:29:56,320 --> 00:30:00,010 Pra interfaqe e Valgrind atëherë do të drejtuar programin tuaj dhe në fund të programit tuaj 655 00:30:00,010 --> 00:30:02,240 drejtimin para se të shpërblej dhe ju jep një tjetër të shpejtë, 656 00:30:02,240 --> 00:30:04,980 ajo do të analizohet tuaj Programi ndërsa ajo është duke 657 00:30:04,980 --> 00:30:07,740 dhe tregoni ju keni rrjedhje çdo kujtim dhe më mirë akoma, 658 00:30:07,740 --> 00:30:10,610 nuk ju prek kujtesën se nuk i takojnë për ju? 659 00:30:10,610 --> 00:30:13,700 Ajo nuk mund të arrijë gjithçka, por kjo është mjaft të mirë në kapjen gjërat më të. 660 00:30:13,700 --> 00:30:19,700 >> Kështu që këtu është një shembull i tim që ka drejtuar ky program, duke pasur Shprehje drejtuar, 661 00:30:19,700 --> 00:30:21,470 në një program të quajtur kujtesës, dhe unë jam duke shkuar 662 00:30:21,470 --> 00:30:24,730 për të nxjerrë në pah linjat që janë në fund të fundit me interes për ne. 663 00:30:24,730 --> 00:30:27,690 Pra, ka edhe më shumë distractions që unë e kam fshirë nga rrëshqitje. 664 00:30:27,690 --> 00:30:30,930 Por le të shohim vetëm atë që kjo Programi është i aftë për të na thënë. 665 00:30:30,930 --> 00:30:34,800 Është i aftë për të na thënë gjëra si shkruani pavlefshme të madhësisë 4. 666 00:30:34,800 --> 00:30:38,020 Me fjalë të tjera, në qoftë se ju prek kujtesën, konkretisht 4 byte memorje 667 00:30:38,020 --> 00:30:40,350 që ju nuk duhet të ketë, interfaqe e Valgrind mund t'ju them se. 668 00:30:40,350 --> 00:30:41,660 Shkruaj Invalid i madhësisë 4. 669 00:30:41,660 --> 00:30:43,640 Ju prekur katër bytes që ju nuk duhet të ketë. 670 00:30:43,640 --> 00:30:44,840 Ku e keni bërë këtë? 671 00:30:44,840 --> 00:30:45,900 Kjo është bukuria. 672 00:30:45,900 --> 00:30:50,000 Memory dot c linja 21 është ajo ku ju dehur dhe kjo është arsyeja pse ajo është e dobishme. 673 00:30:50,000 --> 00:30:53,410 Shumë si GDB, ajo mund të ndihmojë ju pikë në gabim aktuale. 674 00:30:53,410 --> 00:30:57,170 >> Tani, kjo është pak më shumë fjalëshumë, nëse jo konfuze. 675 00:30:57,170 --> 00:31:01,307 40 bytes në 1 blloqe janë patjetër humbur në humbje rekord 1 e 1. 676 00:31:01,307 --> 00:31:02,140 Cfare do te thote ajo? 677 00:31:02,140 --> 00:31:05,920 E pra, kjo thjesht do të thotë që ju kërkohet për 40 bytes dhe ju kurrë nuk ia dha atë. 678 00:31:05,920 --> 00:31:08,930 Ju quajtur malloc ose i quajtur GetString dhe të sistemit operativ 679 00:31:08,930 --> 00:31:12,450 ju 40 bytes, por ju dha kurrë liruar ose lëshuar atë kujtesës, 680 00:31:12,450 --> 00:31:15,400 dhe të jenë të ndershëm, ne kurrë nuk kam treguar se si të kthej kujtesën. 681 00:31:15,400 --> 00:31:17,910 Rezulton se ka një super Funksioni i thjeshtë i quajtur të lirë. 682 00:31:17,910 --> 00:31:21,170 Merr një argument, gjë ju doni të lirë apo të japë përsëri, 683 00:31:21,170 --> 00:31:23,430 por 40 bytes, me sa duket, në këtë program 684 00:31:23,430 --> 00:31:27,300 kanë qenë të humbur në linjë 20 e kujtesës dot c. 685 00:31:27,300 --> 00:31:28,650 >> Pra, le të shohim këtë program. 686 00:31:28,650 --> 00:31:31,020 Është super padobishme. 687 00:31:31,020 --> 00:31:33,980 Ajo vetëm tregon ky gabim veçanti. 688 00:31:33,980 --> 00:31:34,920 Pra, le të marrin një vështrim. 689 00:31:34,920 --> 00:31:39,920 Këtu është kryesore dhe kryesore, njoftim, thirrjet një funksion i quajtur f dhe pastaj kthimit. 690 00:31:39,920 --> 00:31:41,550 Pra, jo të gjithë atë interesante. 691 00:31:41,550 --> 00:31:42,664 Çfarë do të f bëj? 692 00:31:42,664 --> 00:31:44,330 Njoftim unë nuk e mërzit me një prototip. 693 00:31:44,330 --> 00:31:46,520 Unë të kërkuar për të mbajtur kodin si minimale të jetë e mundur. 694 00:31:46,520 --> 00:31:49,530 Kështu që unë vë f lart kryesor dhe kjo është në rregull, sigurisht, 695 00:31:49,530 --> 00:31:51,500 për programet e shkurtër si kjo. 696 00:31:51,500 --> 00:31:56,910 Pra, f nuk ka kthim asgjë dhe bën nuk merr asgjë, por ajo e bën këtë. 697 00:31:56,910 --> 00:31:59,620 Ai deklaron, ashtu si në shembullin Binky, 698 00:31:59,620 --> 00:32:02,682 një tregues i quajtur X që po ndodh për të ruajtur adresën e një int. 699 00:32:02,682 --> 00:32:03,890 Pra, kjo është anën e majtë. 700 00:32:03,890 --> 00:32:07,230 Në anglisht, çfarë është drejtë-hand side duke bërë? 701 00:32:07,230 --> 00:32:09,770 Çdokush? 702 00:32:09,770 --> 00:32:13,665 Ç'është kjo bën për ne? 703 00:32:13,665 --> 00:32:14,651 Po? 704 00:32:14,651 --> 00:32:16,623 >> Audienca: [padëgjueshme] herë më e madhe e një int 705 00:32:16,623 --> 00:32:19,175 e cila është 10 herë më se [e padëgjueshme] 706 00:32:19,175 --> 00:32:20,800 DAVID Malan: Mirë dhe më lejoni të përmbledh. 707 00:32:20,800 --> 00:32:25,480 Pra ndajë hapësirë ​​të mjaftueshme për 10 integers ose 10, çfarë është madhësia e një int, 708 00:32:25,480 --> 00:32:29,340 është katër bytes, kështu 10 herë 4 është 40, në mënyrë që të djathtë anën që unë e kam 709 00:32:29,340 --> 00:32:33,930 e theksuar është më jepni 40 bytes dhe të ruajtur adresën e byte parë 710 00:32:33,930 --> 00:32:34,940 në x. 711 00:32:34,940 --> 00:32:38,380 Dhe tani së fundi, dhe këtu është ku ky program është buggy, çfarë është 712 00:32:38,380 --> 00:32:41,540 gabuar me linjë 21 bazuar në atë logjikë? 713 00:32:41,540 --> 00:32:45,197 714 00:32:45,197 --> 00:32:46,280 Çfarë është e gabuar me linjë 21? 715 00:32:46,280 --> 00:32:46,780 Po? 716 00:32:46,780 --> 00:32:49,550 Audienca: Ju nuk mund të Indeksi në x [e padëgjueshme]. 717 00:32:49,550 --> 00:32:50,300 DAVID Malan: Po. 718 00:32:50,300 --> 00:32:52,270 Unë nuk duhet indeksi në x si kjo. 719 00:32:52,270 --> 00:32:53,850 Pra sintaksore, kjo është në rregull. 720 00:32:53,850 --> 00:32:56,990 Çfarë është e bukur është, ashtu si ti mund të trajtojnë emrin e një grup 721 00:32:56,990 --> 00:33:01,080 sikur kjo është një tregues, në mënyrë të ngjashme mund të trajtoj një tregues sikur është 722 00:33:01,080 --> 00:33:06,425 një grup, dhe kështu që unë mund të sintaksore thonë x kllapa diçka, x kllapa unë, 723 00:33:06,425 --> 00:33:07,800 por 10 është problematike. 724 00:33:07,800 --> 00:33:09,096 Përse? 725 00:33:09,096 --> 00:33:10,910 >> Audienca: Për shkak se ajo nuk është brenda. 726 00:33:10,910 --> 00:33:12,390 >> DAVID Malan: Kjo nuk është brenda asaj copë e kujtesës. 727 00:33:12,390 --> 00:33:15,306 Cila është vlera më e madhe unë duhet të të vënë në këto kllapa katrore? 728 00:33:15,306 --> 00:33:16,870 9, 0 deri 9. 729 00:33:16,870 --> 00:33:18,160 Për shkak të zero indeksimit. 730 00:33:18,160 --> 00:33:20,190 Pra, 0 deri 9 do të jetë mirë. 731 00:33:20,190 --> 00:33:23,960 Kllapa 10 nuk është e mirë dhe por, kujtojnë edhe pse, çdo herë 732 00:33:23,960 --> 00:33:27,017 I duket të përpiqet të bëjë CS50 IDE përplasje nga shtypja në vlerat fals, 733 00:33:27,017 --> 00:33:29,100 ajo nuk ka gjithmonë të bashkëpunojnë, dhe në të vërtetë, ju shpesh 734 00:33:29,100 --> 00:33:31,460 merrni me fat vetëm për shkak se sistemit operativ nuk ka 735 00:33:31,460 --> 00:33:35,467 vini re se ju ndonjëherë në mënyrë pak kalojnë disa copë e kujtesës, 736 00:33:35,467 --> 00:33:38,300 sepse keni qëndruar brenda teknikisht segment tuaj, por më shumë se 737 00:33:38,300 --> 00:33:40,940 në një klasë sistemeve operative, dhe kështu diçka si kjo 738 00:33:40,940 --> 00:33:43,000 shumë lehtë mund të shkojnë pa u vënë re. 739 00:33:43,000 --> 00:33:48,120 Programi juaj është kurrë do të rrëzuar vazhdimisht por ndoshta një herë në pak kohë. 740 00:33:48,120 --> 00:33:50,610 >> Dhe kështu le të përpiqemi Shprehje për këtë, dhe këtu është 741 00:33:50,610 --> 00:33:52,870 ku ne do të merrni zhytur nga prodhimi çast. 742 00:33:52,870 --> 00:34:00,810 Pra, ti kujtesës kontroll interfaqe e Valgrind rrjedhje është e barabartë e plotë e kujtesës dot slash. 743 00:34:00,810 --> 00:34:03,040 Dhe këtu është arsyeja pse unë premtoj kjo do të trullos. 744 00:34:03,040 --> 00:34:05,700 Ja se çfarë interfaqe e Valgrind, këtu është ajo që një programues, disa vite ago- 745 00:34:05,700 --> 00:34:08,469 vendosi se do të ishte një ide e mirë për prodhimi të duken si. 746 00:34:08,469 --> 00:34:09,750 Pra, le të bëjë ndjenjën e kësaj. 747 00:34:09,750 --> 00:34:13,120 Pra, të gjithë rrugën në të dorës së majtë anë për asnjë arsye të mirë 748 00:34:13,120 --> 00:34:16,620 është ID Procesi i programit ne vetëm të drejtuar, të identifikues unik 749 00:34:16,620 --> 00:34:18,030 për programin ne vetëm u. 750 00:34:18,030 --> 00:34:19,738 Ne fshihet se nga rrëshqitje, por ka 751 00:34:19,738 --> 00:34:22,190 disa informata të dobishme në këtu. 752 00:34:22,190 --> 00:34:24,684 >> Le të shkoni deri në krye. 753 00:34:24,684 --> 00:34:25,600 Ja ku kemi filluar. 754 00:34:25,600 --> 00:34:27,040 Pra, kjo nuk është e gjitha e prodhimit se shumë. 755 00:34:27,040 --> 00:34:30,429 Ja se shkruaj pavlefshme i madhësisë 4 në linjë 21. 756 00:34:30,429 --> 00:34:31,760 E pra, çfarë ishte linja 21? 757 00:34:31,760 --> 00:34:34,500 Linja 21 ishte pikërisht kjo dhe kjo ka kuptim 758 00:34:34,500 --> 00:34:37,290 se unë jam në plotfuqishmërinë shkruar 4 bytes, sepse unë jam i 759 00:34:37,290 --> 00:34:40,389 duke u përpjekur për të vënë këtë numër i plotë, e cila mund të jetë çdo gjë, 760 00:34:40,389 --> 00:34:42,370 ajo vetëm ndodh që të jetë zero, por unë jam duke u përpjekur 761 00:34:42,370 --> 00:34:44,940 për ta vënë atë në një vend që nuk i përket mua. 762 00:34:44,940 --> 00:34:50,900 Për më tepër, poshtë këtu, 40 bytes në një Blloqet janë të humbur përfundimisht në procesverbal 1. 763 00:34:50,900 --> 00:34:56,500 Kjo për shkak se, kur unë e quaj malloc këtu, unë kurrë nuk të vërtetë e lirë e kujtesës. 764 00:34:56,500 --> 00:34:58,140 >> Pra, si mund ta fix this? 765 00:34:58,140 --> 00:35:02,970 Më lejoni të shkoj përpara dhe të jetë pak më të sigurt dhe të bëjë 9 atje dhe më lejoni këtu falas X. 766 00:35:02,970 --> 00:35:04,820 Ky është funksioni i ri për sot. 767 00:35:04,820 --> 00:35:11,520 Nëse unë tani përsëritje të kujtesës dot plagë, le të kandidojë interfaqe e Valgrind mbi atë përsëri, 768 00:35:11,520 --> 00:35:14,990 maksimizuar dritaren time dhe hit Enter. 769 00:35:14,990 --> 00:35:16,900 Tani, kjo është e mirë. 770 00:35:16,900 --> 00:35:19,590 Ata varrosin lajmin e mirë në të gjithë këtë prodhim. 771 00:35:19,590 --> 00:35:20,810 Të gjitha blloqet grumbullosh ishin të lira. 772 00:35:20,810 --> 00:35:23,604 Ne do të kthehen në atë tog është, por nuk ka rrjedhjet janë të mundshme. 773 00:35:23,604 --> 00:35:25,520 Pra, kjo është vetëm një tjetër mjet për kit tuaj mjet 774 00:35:25,520 --> 00:35:30,220 me të cilat ju mund të filloni për të gjetur tani gabime si kjo. 775 00:35:30,220 --> 00:35:34,532 >> Por le të shohim se çfarë më shumë mund të shkojnë keq këtu. 776 00:35:34,532 --> 00:35:38,890 Le të tranzicionit tani për në fakt zgjidhjen e një problemi. 777 00:35:38,890 --> 00:35:42,440 Si një mënjanë, në qoftë se kjo do të lehtësojë një pak e konfuzionit ose tensioni, 778 00:35:42,440 --> 00:35:43,430 kjo tani është qesharake. 779 00:35:43,430 --> 00:35:46,400 780 00:35:46,400 --> 00:35:46,900 Po. 781 00:35:46,900 --> 00:35:49,040 Kjo është shumë e mirë. 782 00:35:49,040 --> 00:35:50,890 Sepse pointers janë adresat dhe adresat 783 00:35:50,890 --> 00:35:53,098 janë përgjithësisht nga konventa shkruar me heksadecimal. 784 00:35:53,098 --> 00:35:54,650 Ha, ha, kjo është qesharake tani. 785 00:35:54,650 --> 00:35:58,390 Gjithsesi, kështu që le të tani në fakt të zgjidhur një problem. 786 00:35:58,390 --> 00:36:00,840 Kjo ka qenë super, super-nivelit të ulët deri më tani, 787 00:36:00,840 --> 00:36:03,950 dhe ne fakt mund të bëjmë dobishme gjëra me këto detaje të nivelit të ulët. 788 00:36:03,950 --> 00:36:06,710 >> Pra, ne kemi prezantuar disa javë më parë nocioni i një grup. 789 00:36:06,710 --> 00:36:09,177 Një grup ishte e bukur sepse është e vështirë për të pastruar kodin tonë 790 00:36:09,177 --> 00:36:11,760 sepse në qoftë se ne të kërkuar për të shkruar një program me studentë të shumta 791 00:36:11,760 --> 00:36:15,270 ose emra të shumta dhe shtëpitë dhe dorms dhe kolegjet dhe të gjithë që, 792 00:36:15,270 --> 00:36:19,430 ne mund të ruajë gjithçka më shumë pastër brenda një grup. 793 00:36:19,430 --> 00:36:23,039 Por të propozojë një dobësitë nga një grup deri më tani. 794 00:36:23,039 --> 00:36:26,080 Edhe nëse ju nuk keni vuajtur vetë në një program, vetëm instinktivisht, 795 00:36:26,080 --> 00:36:30,870 ajo është një gjë e keqe në lidhje me një grup, ndoshta? 796 00:36:30,870 --> 00:36:32,337 Kam dëgjuar disa murmurimat. 797 00:36:32,337 --> 00:36:34,170 Audienca: Është e vështirë për të ndryshuar madhësinë. 798 00:36:34,170 --> 00:36:36,128 DAVID Malan: Është e vështirë për të ndryshuar madhësinë. 799 00:36:36,128 --> 00:36:38,660 Ju nuk mund të ndryshoni madhësinë e një grup, në fakt, në vetvete 800 00:36:38,660 --> 00:36:43,040 në C. Ju mund të caktojë një tjetër rrjet, lëvizin çdo gjë nga e vjetër 801 00:36:43,040 --> 00:36:45,380 në e re, dhe tani të ketë një hapësirë ​​shtesë, 802 00:36:45,380 --> 00:36:47,469 por kjo nuk është si një gjuha si Java ose Python 803 00:36:47,469 --> 00:36:49,760 ose ndonjë numër tjetër i gjuhë me të cilën disa prej jush 804 00:36:49,760 --> 00:36:52,070 mund të jetë njohur ku ju vetëm mund të mbani duke shtuar gjëra të 805 00:36:52,070 --> 00:36:53,930 Shpallja nauseam në fund të një grup. 806 00:36:53,930 --> 00:36:57,880 Kur ju keni një rrjet të Madhësia e 6, që është madhësia e tij, 807 00:36:57,880 --> 00:37:01,970 dhe aq shumë si ide më parë të paturit e një tampon të një madhësie të caktuar, 808 00:37:01,970 --> 00:37:05,940 ju duhet të mendoj nga porta çfarë madhësie nuk ju duan që ajo të jetë? 809 00:37:05,940 --> 00:37:07,880 Në qoftë se ju me mend shumë i madh, ju jeni të humbur hapësirë. 810 00:37:07,880 --> 00:37:10,950 Në qoftë se ju me mend shumë të vogla, të nuk mund të ruajë që të dhënat paktën 811 00:37:10,950 --> 00:37:12,940 pa shumë punë. 812 00:37:12,940 --> 00:37:18,180 >> Sot kështu, falë pointers, ne mund të filloni qepur së bashku vet me porosi tonë 813 00:37:18,180 --> 00:37:20,989 strukturat e të dhënave, dhe në fakt, këtu është diçka 814 00:37:20,989 --> 00:37:23,030 që duket pak më shumë i fshehtë në shikim të parë, 815 00:37:23,030 --> 00:37:26,440 por kjo është ajo që ne do të thërrasë një i lidhur lista, dhe lloji i saj emri i përmbledh 816 00:37:26,440 --> 00:37:26,940 ajo. 817 00:37:26,940 --> 00:37:29,550 Kjo është një listë të numrave, ose në ky rast, një listë të numrave, 818 00:37:29,550 --> 00:37:33,480 por ajo mund të jetë një listë e asgjë, por ajo është e lidhur së bashku me anë të shigjetave, 819 00:37:33,480 --> 00:37:36,380 dhe vetëm të marrë me mend me çfarë teknikë 820 00:37:36,380 --> 00:37:38,310 do të shkojmë të jetë në gjendje për të thur së bashku, 821 00:37:38,310 --> 00:37:42,540 lloj si kokoshka me një fije, një i lidhur listat rectangles këtu? 822 00:37:42,540 --> 00:37:43,936 Numrat e saj? 823 00:37:43,936 --> 00:37:45,560 Çfarë është tipar gjuha themelore? 824 00:37:45,560 --> 00:37:46,350 >> Audienca: Një akrep. 825 00:37:46,350 --> 00:37:47,308 >> DAVID Malan: Një akrep. 826 00:37:47,308 --> 00:37:51,700 Pra, secili prej këtyre shigjetave këtu përfaqëson një tregues apo vetëm një adresë. 827 00:37:51,700 --> 00:37:54,590 Pra, me fjalë të tjera, në qoftë se unë dua për të ruajtur një listë të numrave, 828 00:37:54,590 --> 00:37:59,040 Unë nuk mund të ruajë atë në qoftë se unë dua aftësia për të rritet dhe tkurret 829 00:37:59,040 --> 00:38:00,990 Struktura e mia të dhëna në një rrjet. 830 00:38:00,990 --> 00:38:03,000 Kështu që unë duhet të ketë pak më sofistikimi, 831 00:38:03,000 --> 00:38:05,720 por vini re se kjo Foto lloj i sugjeron 832 00:38:05,720 --> 00:38:08,650 se në qoftë se ju keni marrë vetëm temat pak lidh çdo gjë së bashku, 833 00:38:08,650 --> 00:38:13,100 ndoshta nuk është se e vështirë për të bërë hapësirë në mes të dy prej këtyre rectangles 834 00:38:13,100 --> 00:38:16,750 ose dy nga këto nyje, ndërsa ne do të fillojmë duke i quajtur ato, të vënë në një nyje të re, 835 00:38:16,750 --> 00:38:19,547 dhe pastaj me disa fije të re, vetëm hendek tre nyje së bashku, 836 00:38:19,547 --> 00:38:22,880 e para, e fundit, dhe një që keni futur vetëm në mes. 837 00:38:22,880 --> 00:38:26,000 >> Dhe me të vërtetë një listë e lidhur, ndryshe nga një grup, është dinamik. 838 00:38:26,000 --> 00:38:27,840 Ajo mund të rritet dhe kjo mund të tkurret dhe ju nuk e bëni 839 00:38:27,840 --> 00:38:32,434 duhet të dinë ose kujdesur paraprakisht se shumë të dhëna ju jeni do të jetë ruajtjen, 840 00:38:32,434 --> 00:38:35,600 por ajo rezulton ne duhet të jetë pak kujdesshëm në lidhje me se si për të zbatuar këtë. 841 00:38:35,600 --> 00:38:39,070 Pra, së pari le të shqyrtojmë se si ne zbatimin e një nga këto rectangles pak. 842 00:38:39,070 --> 00:38:40,690 Është e lehtë për të zbatuar një int. 843 00:38:40,690 --> 00:38:44,000 Ju vetëm të them int n dhe pastaj ju merrni 4 bytes për një int, 844 00:38:44,000 --> 00:38:49,089 por si mund ta merrni një int, e quajti atë n, dhe pastaj një akrep, le ta quajmë atë të ardhshëm. 845 00:38:49,089 --> 00:38:50,880 Ne mund të telefononi këto gjëra çdo gjë që ne duam 846 00:38:50,880 --> 00:38:53,590 por kam nevojë për një strukturë të dhënave doganore. 847 00:38:53,590 --> 00:38:54,257 Po? 848 00:38:54,257 --> 00:38:57,020 >> Audienca: Ampersand [e padëgjueshme]. 849 00:38:57,020 --> 00:39:00,940 >> DAVID Malan: Pra, simbol ne do të përdorim për marrë adresën e një nyje potencialisht. 850 00:39:00,940 --> 00:39:02,740 Por ne kemi nevojë për një tjetër tipar i C në mënyrë 851 00:39:02,740 --> 00:39:06,700 të më japë mundësinë për të krijuar kjo drejtkëndësh zakon, kjo porosi 852 00:39:06,700 --> 00:39:08,919 variabël në qoftë se ju do të, në kujtesë. 853 00:39:08,919 --> 00:39:09,710 Audienca: Një struct. 854 00:39:09,710 --> 00:39:10,626 DAVID Malan: Një struct. 855 00:39:10,626 --> 00:39:14,310 Kujtojnë nga java e fundit, ne kemi prezantuar struct, kjo fjalen relativisht e thjeshtë 856 00:39:14,310 --> 00:39:16,254 që ju lejon të bëjmë gjëra të tilla si kjo. 857 00:39:16,254 --> 00:39:18,420 C nuk ka ardhur me një të dhëna Struktura e quajtur studenti. 858 00:39:18,420 --> 00:39:22,190 Ajo vjen me int dhe noton dhe char dhe të tilla, por ajo nuk ka ardhur me student, 859 00:39:22,190 --> 00:39:26,750 por ne mund të krijojë një lloj të dhënave të studentëve, një strukturë nxënës, me këtë sintaksë 860 00:39:26,750 --> 00:39:27,250 këtu. 861 00:39:27,250 --> 00:39:28,350 Dhe ju do të shihni këtë përsëri dhe përsëri. 862 00:39:28,350 --> 00:39:30,426 Pra, mos u bëni merak për memorizimin fjalë kyçe, 863 00:39:30,426 --> 00:39:33,300 por fjalen që është e rëndësishme është vetëm fakti që kemi thënë struct 864 00:39:33,300 --> 00:39:37,590 dhe pastaj kemi quajtur atë nxënës dhe brenda i studentit ishte një emër dhe një shtëpi 865 00:39:37,590 --> 00:39:39,390 ose një fjetore apo si. 866 00:39:39,390 --> 00:39:41,980 >> Dhe kështu që tani sot, le të propozojë këtë. 867 00:39:41,980 --> 00:39:45,240 Unë kam shtuar disa fjalë, por në qoftë se unë dua për të zbatuar këtë drejtkëndësh që është 868 00:39:45,240 --> 00:39:48,440 mori edhe një int dhe një akrep, ju e dini se çfarë, unë jam 869 00:39:48,440 --> 00:39:51,540 duke shkuar për të deklaruar një e strukturës të quajtur nyje. 870 00:39:51,540 --> 00:39:55,630 Unë jam gjithashtu, në brendësi të saj, do të thonë se një nyje, kjo drejtkëndësh, ka një int 871 00:39:55,630 --> 00:39:59,730 dhe ne do të thërrasë atë n dhe ajo ka një tregues tjetër. 872 00:39:59,730 --> 00:40:02,540 Dhe kjo është pak fjalëshumë, por në qoftë se ju mendoni rreth saj, 873 00:40:02,540 --> 00:40:07,300 shigjetat që ishin në foto një moment më parë janë të çfarë lloji të dhënave? 874 00:40:07,300 --> 00:40:12,330 Ku secili prej këtyre shigjetave është treguar për çfarë lloji i strukturës së të dhënave? 875 00:40:12,330 --> 00:40:14,332 Kjo nuk është vetëm për të vënë në një int në vetvete. 876 00:40:14,332 --> 00:40:16,165 Është treguar të Gjithë gjë drejtkëndëshe 877 00:40:16,165 --> 00:40:18,720 dhe kjo gjë drejtkëndëshe, thamë, është quajtur një nyje. 878 00:40:18,720 --> 00:40:21,720 Dhe kështu që ne lloj i duhet të Recursively përcaktojnë këtë tilla 879 00:40:21,720 --> 00:40:26,270 se një nyje, ne do të thotë: do të përmbajë një int quajtur n 880 00:40:26,270 --> 00:40:31,070 dhe një tregues të quajtur tjetër dhe lloji i strukturës së të dhënave për të cilat 881 00:40:31,070 --> 00:40:35,770 se pikat Pointer është me sa duket do të jetë nyje struct. 882 00:40:35,770 --> 00:40:41,550 >> Pra, kjo është annoyingly fjalëshumë dhe vetëm të jetë pedant, 883 00:40:41,550 --> 00:40:44,100 arsyeja pse ne nuk mund të them vetëm këtë, që sinqerisht 884 00:40:44,100 --> 00:40:46,860 duket shumë më i lexueshëm, është sepse kujtojnë se C lexuar 885 00:40:46,860 --> 00:40:48,710 gjëra lart poshtë, majta në të djathtë. 886 00:40:48,710 --> 00:40:54,120 Kjo nuk është deri sa të kemi të pikëpresje se nyja fjalen fakt ekziston. 887 00:40:54,120 --> 00:40:57,980 Pra, nëse ne duam të kemi këtë lloj të referencë ciklike brenda e të dhënave 888 00:40:57,980 --> 00:41:02,120 Struktura, ne duhet të bëjmë këtë, ku themi nyje struct në krye, e cila 889 00:41:02,120 --> 00:41:06,770 na jep një mënyrë më të gjatë të përshkruar këtë gjë, atëherë brenda themi nyje struct, 890 00:41:06,770 --> 00:41:09,560 dhe pastaj në vijën e fundit themi, të gjithë të drejtë, C, nga rruga, 891 00:41:09,560 --> 00:41:12,060 vetëm thirrje gjithë këtë mallkim Gjëja një nyje dhe të ndaluar 892 00:41:12,060 --> 00:41:14,360 duke përdorur struct fjalen krejt. 893 00:41:14,360 --> 00:41:18,030 Pra, kjo është vetëm lloj i një sintaktik mashtrim që në fund të fundit na lejon të krijojë 894 00:41:18,030 --> 00:41:21,370 diçka që duket tamam si kjo. 895 00:41:21,370 --> 00:41:25,010 >> Pra, nëse ne supozojmë tani ne mund të zbatojë këtë gjë në C, 896 00:41:25,010 --> 00:41:28,040 Si nuk kemi në fakt filloni traversing këtë? 897 00:41:28,040 --> 00:41:32,360 E pra, në fakt, të gjithë ne duhet të bëni është iterate nga e majta në të djathtë dhe vetëm 898 00:41:32,360 --> 00:41:35,960 lloj i futur nyjet apo fshij nyje ose kërko për gjëra kudo që duam, 899 00:41:35,960 --> 00:41:39,560 por për të bërë këtë, le të shkojnë përpara dhe të bëjë gjërat pak më e vërtetë, sepse kjo 900 00:41:39,560 --> 00:41:42,560 ka qenë super-nivelit të ulët deri tani. 901 00:41:42,560 --> 00:41:45,700 A do dikush të vërtetë donte të jetë i pari? 902 00:41:45,700 --> 00:41:46,200 NE RREGULL. 903 00:41:46,200 --> 00:41:47,092 Eja up. 904 00:41:47,092 --> 00:41:47,800 Si e ke emrin? 905 00:41:47,800 --> 00:41:48,499 >> DAVID: David. 906 00:41:48,499 --> 00:41:49,290 DAVID Malan: David. 907 00:41:49,290 --> 00:41:49,998 Gëzohem që u njohëm. 908 00:41:49,998 --> 00:41:50,960 Me too. 909 00:41:50,960 --> 00:41:52,450 Në rregull. 910 00:41:52,450 --> 00:41:53,990 Dhe ne kemi nevojë për një numër 9. 911 00:41:53,990 --> 00:41:55,240 Nuk është aq i mirë sa i pari, ndoshta. 912 00:41:55,240 --> 00:41:56,430 OK, numri 9. 913 00:41:56,430 --> 00:41:59,667 Një numër 17, ju lutem. 914 00:41:59,667 --> 00:42:01,000 Më lejoni të kthehem pak më larg. 915 00:42:01,000 --> 00:42:03,980 Numri 22, ju lutem, dhe si në lidhje më larg prapa 916 00:42:03,980 --> 00:42:06,344 në qoftë se unë mund të shoh ndonjë duart me të gjitha dritë të apo jo. 917 00:42:06,344 --> 00:42:08,010 Dikush është duke u vullnetarë të drejtë atje. 918 00:42:08,010 --> 00:42:08,968 A doni për të dalë? 919 00:42:08,968 --> 00:42:10,450 Parakrah juaj me forcë duke shkuar deri. 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 po vjen poshtë. 923 00:42:15,120 --> 00:42:18,450 A do dikush tjetër të doja të forcefully-- Eja lart. 924 00:42:18,450 --> 00:42:21,030 Një vullnetar aktual. 925 00:42:21,030 --> 00:42:23,330 >> Pra shumë shpejt, në qoftë se ju djema mund të organizojmë 926 00:42:23,330 --> 00:42:26,550 veten ashtu si nyjet në ekran. 927 00:42:26,550 --> 00:42:27,510 Faleminderit. 928 00:42:27,510 --> 00:42:29,234 Dhe ju do të jetë 26. 929 00:42:29,234 --> 00:42:30,650 Të gjitha Paraqitjet e drejtë dhe të shpejtë. 930 00:42:30,650 --> 00:42:32,139 Kështu që unë jam Davidi dhe ju jeni gjithashtu? 931 00:42:32,139 --> 00:42:32,680 DAVID: David. 932 00:42:32,680 --> 00:42:33,721 DAVID Malan: Dhe ju jeni? 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 Shkëlqyer. 940 00:42:37,590 --> 00:42:39,810 Pra, këto janë vullnetarë tona për sot dhe të shkojnë përpara 941 00:42:39,810 --> 00:42:43,090 dhe zhvendosje një mënyrë që pak, dhe thjesht shkoni përpara dhe për të mbajtur 942 00:42:43,090 --> 00:42:47,024 mbajnë numrat tuaj si ju jeni apo tuaj Shenja e parë dhe duke përdorur dorën tuaj të majtë, 943 00:42:47,024 --> 00:42:48,940 të shkojnë përpara dhe vetëm të zbatojë këto shigjeta, vetëm 944 00:42:48,940 --> 00:42:51,360 në mënyrë që dora jote e majtë është fjalë për fjalë duke treguar në çdo gjë që ju duhet të pikë 945 00:42:51,360 --> 00:42:54,610 në, dhe t'i japë vetes disa dhoma në mënyrë që ne mund të shohim me sy armëve tuaj në fakt 946 00:42:54,610 --> 00:42:58,120 duke treguar, dhe ju vetëm mund të tregojnë lloj e në tokë është e mirë. 947 00:42:58,120 --> 00:43:03,040 >> Pra, këtu ne kemi një listë e lidhur e një, dy, tre, katër, pesë nyjet në fillim, 948 00:43:03,040 --> 00:43:05,860 dhe vini re ne kemi këtë të veçantë tregues në fillim i cili është 949 00:43:05,860 --> 00:43:09,770 kyç, sepse ne duhet të mbajnë gjurmët e gjithë listës gjatësi disi. 950 00:43:09,770 --> 00:43:13,590 Këta njerëz, edhe pse ata janë lënë në të djathtë, për të kthyer prapa në kujtesë, 951 00:43:13,590 --> 00:43:15,950 ata në fakt mund të jetë diku në kujtesën e kompjuterit. 952 00:43:15,950 --> 00:43:18,240 Pra, këta njerëz mund të jenë qëndruar kudo në skenë 953 00:43:18,240 --> 00:43:20,960 dhe kjo është në rregull, për aq kohë sa ata janë në fakt duke njëri me tjetrin, 954 00:43:20,960 --> 00:43:22,770 por për të mbajtur gjërat pastër dhe të thjeshtë, ne do të 955 00:43:22,770 --> 00:43:25,728 vetëm të tërheqë ata majta në të djathtë si këtë, por nuk mund të ketë boshllëqe masive 956 00:43:25,728 --> 00:43:26,790 në mes të këtyre nyjeve. 957 00:43:26,790 --> 00:43:30,710 >> Tani, në qoftë se unë dua që në fakt të futur disa Vlera e re, le të shkojnë përpara dhe të bëjë këtë. 958 00:43:30,710 --> 00:43:33,720 Ne kemi një mundësi tani për të zgjedhur një tjetër nyje. 959 00:43:33,720 --> 00:43:39,820 Thuaj le të nisem me mallocing 55. 960 00:43:39,820 --> 00:43:41,320 Dikush do të ngurrojë të malloc? 961 00:43:41,320 --> 00:43:42,280 OK, eja lart. 962 00:43:42,280 --> 00:43:42,992 Si e ke emrin? 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 Në rregull. 966 00:43:44,810 --> 00:43:46,600 Malloc Rainbow. 967 00:43:46,600 --> 00:43:47,450 Eja up. 968 00:43:47,450 --> 00:43:51,610 Deri tani ne duhet të pyesim veten algoritmikisht ku ne mund të vënë 55. 969 00:43:51,610 --> 00:43:53,610 Pra, të gjithë ne e dimë, natyrisht, ku ajo ndoshta 970 00:43:53,610 --> 00:43:55,401 takon në qoftë se ne jemi duke u përpjekur për të mbajtur këtë të renditura 971 00:43:55,401 --> 00:43:58,299 dhe në qoftë se ju djema mund të merrni një hap prapa kështu që ne nuk bie 972 00:43:58,299 --> 00:43:59,590 faza, që do të jetë i madh. 973 00:43:59,590 --> 00:44:01,420 Pra, në fakt, Rainbow, fillojnë të gjatë këtu me mua, 974 00:44:01,420 --> 00:44:04,200 sepse ne si kompjuter tani mund shohin vetëm një variabël në një kohë. 975 00:44:04,200 --> 00:44:05,190 Pra, nëse kjo është nyja e parë. 976 00:44:05,190 --> 00:44:07,160 Vini re se ai nuk është një nyje, ai është vetëm një tregues, 977 00:44:07,160 --> 00:44:10,270 dhe kjo është arsyeja pse ai është tërhequr në jetë vetëm madhësia e një akrep, nuk 978 00:44:10,270 --> 00:44:11,780 një nga ato rectangles të plota. 979 00:44:11,780 --> 00:44:16,650 Pra, ne jemi duke shkuar për të kontrolluar në çdo përsëritje është 55 më pak se 9? 980 00:44:16,650 --> 00:44:17,150 Jo. 981 00:44:17,150 --> 00:44:19,060 Është 55 më pak se 17? 982 00:44:19,060 --> 00:44:19,720 Jo. 983 00:44:19,720 --> 00:44:20,800 Më pak se 22? 984 00:44:20,800 --> 00:44:22,020 Më pak se 26? 985 00:44:22,020 --> 00:44:23,390 Më pak se 34? 986 00:44:23,390 --> 00:44:25,890 Dhe kështu tani, natyrisht Ylber takon në fund. 987 00:44:25,890 --> 00:44:27,270 Pra, të jetë i qartë, dhe çfarë ishte emri yt, Taylor? 988 00:44:27,270 --> 00:44:27,895 >> TAYLOR: Taylor. 989 00:44:27,895 --> 00:44:32,510 DAVID Malan: Pra, në mes të Taylor-së dorën e majtë dhe duart ylber këtu, 990 00:44:32,510 --> 00:44:38,324 dorën e të cilit ka nevojë për pikë në çfarë në urdhërojnë për të futur 55 në këtë listë? 991 00:44:38,324 --> 00:44:39,240 Çfarë duhet të bëjmë? 992 00:44:39,240 --> 00:44:39,700 Po? 993 00:44:39,700 --> 00:44:41,140 >> Audienca: dora Taylor ka nevojë për pikë të majtë. 994 00:44:41,140 --> 00:44:41,680 >> DAVID Malan: Pikërisht. 995 00:44:41,680 --> 00:44:43,800 Pra futur një nyje në fund të lista 996 00:44:43,800 --> 00:44:47,140 është shumë e thjeshtë, sepse Taylor vetëm duhet të theksoj, në vend të në terren 997 00:44:47,140 --> 00:44:49,640 ose ne do të thërrasë atë null, null është lloj i mungesës 998 00:44:49,640 --> 00:44:51,640 i një tregues apo një të veçantë zero akrep, ju jeni 999 00:44:51,640 --> 00:44:53,740 do të vinte me të majtë tuaj dorë në Rainbow dhe pastaj Rainbow, 1000 00:44:53,740 --> 00:44:55,910 ku duhet të majtë tuaj dorë ndoshta pikë? 1001 00:44:55,910 --> 00:44:56,570 Poshtë. 1002 00:44:56,570 --> 00:45:00,140 Kjo nuk është e mirë në qoftë se dora e saj është lloj e vënë off këtu ose ndonjë lloj 1003 00:45:00,140 --> 00:45:00,640 cila mënyrë. 1004 00:45:00,640 --> 00:45:02,407 Kjo do të konsiderohet një vlerë të mbeturinave, 1005 00:45:02,407 --> 00:45:04,240 por në qoftë se ajo vë në disa vlera të njohura, ne do të 1006 00:45:04,240 --> 00:45:07,360 e quajti atë zero apo null, kjo është në rregull sepse ne kemi një mandat në këtë 1007 00:45:07,360 --> 00:45:09,390 dhe ne e dimë lista tani është kompletuar. 1008 00:45:09,390 --> 00:45:11,550 >> Pra, çfarë është një tjetër Rasti relativisht e thjeshtë? 1009 00:45:11,550 --> 00:45:13,125 Mund të kemi malloc 5? 1010 00:45:13,125 --> 00:45:14,010 Eja up. 1011 00:45:14,010 --> 00:45:14,782 Si e ke emrin? 1012 00:45:14,782 --> 00:45:15,490 TIFFANY: Tiffany. 1013 00:45:15,490 --> 00:45:16,000 DAVID Malan: Unë jam i keq? 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 Në rregull. 1017 00:45:17,110 --> 00:45:19,071 Tiffany është malloced me vlerën e 5. 1018 00:45:19,071 --> 00:45:19,570 Eja up. 1019 00:45:19,570 --> 00:45:23,820 Kjo është relativisht e lehtë shumë, por le të konsiderojmë rendit të operacioneve tani. 1020 00:45:23,820 --> 00:45:25,820 Ajo ishte shumë e lehtë me Taylor në fund. 1021 00:45:25,820 --> 00:45:30,302 Numri 5 është sigurisht më pak se 9, dhe kështu që ne kemi Davidit, ne kemi Tiffany, 1022 00:45:30,302 --> 00:45:31,260 dhe çfarë ishte emri juaj? 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, dhe David. 1026 00:45:34,300 --> 00:45:36,580 Dora e të cilit duhet të përditësohet së pari? 1027 00:45:36,580 --> 00:45:39,260 1028 00:45:39,260 --> 00:45:40,590 Çfarë bëni ju doni të bëni këtu? 1029 00:45:40,590 --> 00:45:45,244 Ka mënyra të mundshme një çift, por ka edhe një ose mënyra më të gabuar. 1030 00:45:45,244 --> 00:45:46,620 >> Audienca: Filloni me pari nga e majta. 1031 00:45:46,620 --> 00:45:47,800 >> DAVID Malan: Filloni me pari nga e majta. 1032 00:45:47,800 --> 00:45:49,008 Kush është këtu pari nga e majta, atëherë? 1033 00:45:49,008 --> 00:45:49,700 Audienca: Së pari. 1034 00:45:49,700 --> 00:45:50,366 >> DAVID Malan: OK. 1035 00:45:50,366 --> 00:45:53,781 Pra, fillojë me të parë dhe ku do të doni për të rinovuar duart e Davidit të jetë? 1036 00:45:53,781 --> 00:45:54,780 Audienca: Drejt 5. 1037 00:45:54,780 --> 00:45:55,446 DAVID Malan: OK. 1038 00:45:55,446 --> 00:45:59,026 Kështu Davidi, pikë në pesë ose Tiffany këtu, dhe tani? 1039 00:45:59,026 --> 00:46:01,072 >> Audienca: Tiffany vë në 9? 1040 00:46:01,072 --> 00:46:04,030 DAVID Malan: Perfect, përveç Binky-së kreu vetëm lloj i ra off, e drejtë? 1041 00:46:04,030 --> 00:46:06,820 Sepse çfarë është e gabuar me kjo foto fjalë për fjalë? 1042 00:46:06,820 --> 00:46:08,070 Audienca: Asgjë nuk është treguar. 1043 00:46:08,070 --> 00:46:09,945 DAVID Malan: Asgjë nuk është e duke treguar për Jake tani. 1044 00:46:09,945 --> 00:46:13,360 Ne kemi jetimë fjalë për fjalë 9 dhe 17, dhe ne kemi fjalë për fjalë 1045 00:46:13,360 --> 00:46:18,450 rrjedhur gjithë këtë kujtim, sepse nga përditësimin Davidin së pari, kjo është 1046 00:46:18,450 --> 00:46:21,660 gjobë për aq sa është e saktë duke vënë në Tiffany tani, 1047 00:46:21,660 --> 00:46:25,410 por në qoftë se askush nuk e kishte largpamësi për pikë në Jake, 1048 00:46:25,410 --> 00:46:27,490 atëherë ne kemi humbur tërësia e atë listë. 1049 00:46:27,490 --> 00:46:28,200 Pra, le të prish. 1050 00:46:28,200 --> 00:46:30,950 Pra, kjo ishte një gjë e mirë për të udhëtim mbi por le të korrigjuar tani. 1051 00:46:30,950 --> 00:46:33,624 Çfarë duhet të bëjmë për herë të parë në vend? 1052 00:46:33,624 --> 00:46:34,124 Po? 1053 00:46:34,124 --> 00:46:35,791 >> Audienca: Tiffany duhet pikë në 9? 1054 00:46:35,791 --> 00:46:37,582 DAVID Malan: Unë nuk mund të merrni se afër teje. 1055 00:46:37,582 --> 00:46:38,720 Kush duhet pikë në 9? 1056 00:46:38,720 --> 00:46:39,220 >> Audienca: Tiffany. 1057 00:46:39,220 --> 00:46:39,390 >> DAVID Malan: Të gjithë të drejtë. 1058 00:46:39,390 --> 00:46:41,200 Pra, Tiffany duhet pika e parë në 9. 1059 00:46:41,200 --> 00:46:43,550 Pra, Tiffany duhet të marrë në një vlerë të njëjtë 1060 00:46:43,550 --> 00:46:45,820 Davidit, e cila duket tepërt për një moment, 1061 00:46:45,820 --> 00:46:48,820 por kjo është në rregull, sepse tani, i dyti hap, ne mund update dorën e Davidit 1062 00:46:48,820 --> 00:46:52,680 për pikë në Tiffany, dhe pastaj nëse Ne vetëm lloj të pastër gjërat 1063 00:46:52,680 --> 00:46:55,740 sikur kjo është lloj i pranverës-si, tani që është një futje saktë. 1064 00:46:55,740 --> 00:46:56,700 Në mënyrë të shkëlqyer. 1065 00:46:56,700 --> 00:46:57,970 Pra, tani ne jemi pothuajse atje. 1066 00:46:57,970 --> 00:47:01,075 Le të futur një finale vlera si vlera 20. 1067 00:47:01,075 --> 00:47:03,010 Nëse ne mund të malloc një vullnetar të fundit? 1068 00:47:03,010 --> 00:47:04,140 Eja up. 1069 00:47:04,140 --> 00:47:06,224 Pra, kjo është pak më e ndërlikuar. 1070 00:47:06,224 --> 00:47:08,390 Por me të vërtetë, kodi ne jemi shkrim, megjithëse me gojë, 1071 00:47:08,390 --> 00:47:10,610 është vetëm si të paturit e një bandë e nëse kushtet tani, apo jo? 1072 00:47:10,610 --> 00:47:12,318 Ne patëm një kusht kontrolluar nëse ajo i takon 1073 00:47:12,318 --> 00:47:13,840 në fund, ndoshta fillimi. 1074 00:47:13,840 --> 00:47:15,940 Ne kemi nevojë për një lloj lak për gjeni vend në mes. 1075 00:47:15,940 --> 00:47:17,400 Pra, le të bëjë kjo me atë që është emri juaj? 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 Gëzohem që u njohëm. 1080 00:47:19,368 --> 00:47:20,490 Pra, ne kemi 20. 1081 00:47:20,490 --> 00:47:21,220 Më pak se pesë? 1082 00:47:21,220 --> 00:47:21,530 Jo. 1083 00:47:21,530 --> 00:47:22,160 Më pak se nëntë? 1084 00:47:22,160 --> 00:47:22,410 Jo. 1085 00:47:22,410 --> 00:47:23,050 Më pak se 17? 1086 00:47:23,050 --> 00:47:23,550 Jo. 1087 00:47:23,550 --> 00:47:23,740 NE RREGULL. 1088 00:47:23,740 --> 00:47:25,701 Ai i përket këtu dhe emrat tuaj janë përsëri? 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, dhe? 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 Duhet të merrni përditësuar pari duart e së cilës? 1096 00:47:32,140 --> 00:47:32,930 >> Audienca: Eric. 1097 00:47:32,930 --> 00:47:33,429 NE RREGULL. 1098 00:47:33,429 --> 00:47:35,200 Pra, Eric-së duhet të theksoj se ku? 1099 00:47:35,200 --> 00:47:35,930 Në 22. 1100 00:47:35,930 --> 00:47:36,430 Të mirë. 1101 00:47:36,430 --> 00:47:38,180 Dhe tani çfarë e ardhshme? 1102 00:47:38,180 --> 00:47:40,800 Sue atëherë mund të nxjerr në Eric dhe tani, në qoftë se ju djema vetëm 1103 00:47:40,800 --> 00:47:44,077 bëjnë disa dhoma, e cila është gjobë vizualisht, tani ne kemi bërë futjen. 1104 00:47:44,077 --> 00:47:47,160 Pra, le të tani e konsiderojnë një pyetje, por thank you so much për vullnetarët tanë. 1105 00:47:47,160 --> 00:47:48,090 Bërë shumë mirë. 1106 00:47:48,090 --> 00:47:50,831 Ju mund të mbani ato, në qoftë se ju pëlqen. 1107 00:47:50,831 --> 00:47:54,140 Dhe ne kemi një dhuratë të bukur lamtumire nëse ju do të çdo të doja të marrë një top stresit. 1108 00:47:54,140 --> 00:47:56,030 Më lejoni vetëm të kalojë këtë poshtë. 1109 00:47:56,030 --> 00:47:58,430 Pra, çfarë është kryefjala e kësaj? 1110 00:47:58,430 --> 00:48:02,430 Kjo duket të jetë e mahnitshme për aq sa kemi tani 1111 00:48:02,430 --> 00:48:06,360 futur një alternativë për një grup që nuk është e kufizuar kështu 1112 00:48:06,360 --> 00:48:07,780 në një grup të disa madhësinë e caktuar. 1113 00:48:07,780 --> 00:48:09,380 Ata mund të rriten në mënyrë dinamike. 1114 00:48:09,380 --> 00:48:13,220 >> Por, ashtu si kemi parë në javët e e kaluara, nuk kemi marrë ndonjë gjë për të lira, 1115 00:48:13,220 --> 00:48:15,740 si siguri ka një tregti-off këtu. 1116 00:48:15,740 --> 00:48:18,890 Pra, me një kokë e një i lidhur Lista është kjo dinamizmi? 1117 00:48:18,890 --> 00:48:21,590 Kjo aftësi për të rriten dhe sinqerisht, ne mund të kemi bërë fshini 1118 00:48:21,590 --> 00:48:23,570 dhe ne mund të tkurret si të nevojshme. 1119 00:48:23,570 --> 00:48:24,710 Çfarë çmimi jemi duke paguar? 1120 00:48:24,710 --> 00:48:28,510 1121 00:48:28,510 --> 00:48:30,340 Dy herë më shumë hapësirë, para së gjithash. 1122 00:48:30,340 --> 00:48:34,010 Nëse ju shikoni në foto, nuk është më jam ruajtjen e një listë të integers. 1123 00:48:34,010 --> 00:48:36,740 Unë jam ruajtjen e një listë të integers plus pointers. 1124 00:48:36,740 --> 00:48:38,240 Kështu që unë jam duke dyfishuar sasinë e hapësirës. 1125 00:48:38,240 --> 00:48:40,740 Tani, ndoshta kjo nuk është e tillë një punë e madhe 4 bytes, 8 bytes, 1126 00:48:40,740 --> 00:48:43,160 por ajo me siguri mund të shtoni up për dhënave grupe të mëdha. 1127 00:48:43,160 --> 00:48:45,570 Çfarë është një tjetër downside? 1128 00:48:45,570 --> 00:48:46,070 Po? 1129 00:48:46,070 --> 00:48:48,010 >> Audienca: Ne duhet të kaloj ato një-nga-një. 1130 00:48:48,010 --> 00:48:48,760 DAVID Malan: Po. 1131 00:48:48,760 --> 00:48:50,260 Ne duhet të kaloj nëpër ato një-nga-një. 1132 00:48:50,260 --> 00:48:53,860 Ti e di atë, që hoqi dorë këtë super tipar i përshtatshëm i kllapa katrore 1133 00:48:53,860 --> 00:48:57,240 simbol, më duhet i njohur si qasje të rastit, 1134 00:48:57,240 --> 00:48:59,280 ku ne vetëm mund të kërcejnë një element individual 1135 00:48:59,280 --> 00:49:01,470 por tani, nëse unë ende kishte vullnetarët e mia këtu, 1136 00:49:01,470 --> 00:49:04,660 nëse kam kërkuar për të gjetur numër 22, unë nuk mund të 1137 00:49:04,660 --> 00:49:06,620 hidhen në kllapa diçka diçka. 1138 00:49:06,620 --> 00:49:10,530 Unë duhet të shikoni mbi listë, shumë si shembujt tanë kërkim linear, 1139 00:49:10,530 --> 00:49:12,260 për të gjetur numrin 22. 1140 00:49:12,260 --> 00:49:14,340 Kështu që ne duket se kanë paguar një çmim atje. 1141 00:49:14,340 --> 00:49:16,430 Por ne mund megjithatë zgjidhjen e problemeve të tjera. 1142 00:49:16,430 --> 00:49:18,587 >> Në fakt, më lejoni të prezantoj vetëm disa visuals. 1143 00:49:18,587 --> 00:49:20,920 Pra, nëse ju keni qenë deri në Dining Hall Mather-së kohët e fundit, 1144 00:49:20,920 --> 00:49:23,320 ju do të kujtojnë se tyre oxhaqet e tabaka si kjo, 1145 00:49:23,320 --> 00:49:26,300 ne huazuar këto nga Annenberg para klasës. 1146 00:49:26,300 --> 00:49:28,930 Pra, kjo rafte e tabaka, edhe pse, është përfaqësues në fakt 1147 00:49:28,930 --> 00:49:30,860 e një strukture të dhënave shkenca kompjuterike. 1148 00:49:30,860 --> 00:49:32,910 Nuk është një strukturë e të dhënave në shkenca kompjuterike 1149 00:49:32,910 --> 00:49:38,010 i njohur si një pirg që shumë të bukur jep veten për të pikërisht kjo vizuale. 1150 00:49:38,010 --> 00:49:41,380 Kështu që nëse secili prej këtyre sirtarë nuk është tabaka por si një numër dhe kam kërkuar 1151 00:49:41,380 --> 00:49:45,010 për të ruajtur numrat, unë mund të vënë një poshtë këtu, 1152 00:49:45,010 --> 00:49:48,320 dhe unë mund të vënë një tjetër poshtë këtu, dhe vazhdojnë stacking numrat 1153 00:49:48,320 --> 00:49:53,180 në krye të njëri-tjetrit, dhe çfarë është potencialisht të dobishme në lidhje me këtë 1154 00:49:53,180 --> 00:49:55,450 është se çfarë është implikimi e kësaj strukture të dhënave? 1155 00:49:55,450 --> 00:49:58,045 Numri i të cilëve mund të tërhiqet nga për herë të parë më e përshtatshme? 1156 00:49:58,045 --> 00:50:00,640 1157 00:50:00,640 --> 00:50:03,030 Fjalët më të fundit ai vuri në atje. 1158 00:50:03,030 --> 00:50:06,430 >> Pra, kjo është ajo që ne do të thërrasë në shkenca kompjuterike një strukturë të dhënave LIFO. 1159 00:50:06,430 --> 00:50:08,070 Zgjasë në, nga e para. 1160 00:50:08,070 --> 00:50:10,800 Dhe ne do të shohim para se të gjatë pse që mund të jenë të dobishme, por tani për tani, 1161 00:50:10,800 --> 00:50:12,200 vetëm e konsiderojnë pronën. 1162 00:50:12,200 --> 00:50:15,158 Dhe kjo është lloj i trashë në qoftë se ju mendoni se për mënyrën se si sallë ngrënie e bën këtë. 1163 00:50:15,158 --> 00:50:17,910 Sa herë që ata tabaka të pastër dhe vënë ato freshest në krye, 1164 00:50:17,910 --> 00:50:22,160 ju mund të ketë një të pastër më parë por në fund shumë të pista dhe me pluhur 1165 00:50:22,160 --> 00:50:24,360 tabaka në fund shumë në qoftë se ju në fakt nuk 1166 00:50:24,360 --> 00:50:26,820 të marrë në fund të atij rafte, sepse ju vetëm 1167 00:50:26,820 --> 00:50:29,380 mbani vënë re dhe ato të pastra në krye të saj. 1168 00:50:29,380 --> 00:50:31,840 E njëjta gjë mund të ndodhë në një supermarket shumë. 1169 00:50:31,840 --> 00:50:35,450 Në qoftë se ju keni një rast ekran e qumështit dhe çdo herë CVS 1170 00:50:35,450 --> 00:50:37,610 ose kushdo që merr më shumë qumësht, ju vetëm të fus milks 1171 00:50:37,610 --> 00:50:39,880 ju tashmë keni në pjesën e pasme dhe ju vënë ato të reja që në fillim, 1172 00:50:39,880 --> 00:50:43,088 ju jeni do të ketë disa mjaft e keqe qumeshti në fund të strukturës së të dhënave, 1173 00:50:43,088 --> 00:50:46,390 sepse ajo është gjithmonë në fund apo ekuivalente është gjithmonë në pjesën e prapme. 1174 00:50:46,390 --> 00:50:50,407 >> Por ka një mënyrë tjetër për të menduar për rreshtuar dhënat dhe për shembull, kjo. 1175 00:50:50,407 --> 00:50:53,490 Nëse ju jeni një nga ata njerëz që i pëlqen të vijë deri jashtë dyqaneve Apple 1176 00:50:53,490 --> 00:50:55,610 kur një produkt i ri vjen jashtë, ju jeni me siguri 1177 00:50:55,610 --> 00:50:58,780 jo duke përdorur një të dhënave rafte Struktura sepse ty 1178 00:50:58,780 --> 00:51:03,070 do të armiqësohet me të gjithë të tjerët që është rreshtuar për të blerë disa lodër të re. 1179 00:51:03,070 --> 00:51:06,610 Përkundrazi, ju jeni me siguri duke përdorur çfarë lloj strukture të dhënave 1180 00:51:06,610 --> 00:51:10,050 ose çfarë lloj sistemi në botën reale? 1181 00:51:10,050 --> 00:51:13,493 Shpresojmë se kjo është një vijë, ose më shumë siç duhet ose më shumë britanike-si, një radhë. 1182 00:51:13,493 --> 00:51:17,700 Dhe kjo rezulton një radhë është edhe një Struktura e të dhënave në shkenca kompjuterike, 1183 00:51:17,700 --> 00:51:19,700 por një radhë ka një shumë të pronë të ndryshme. 1184 00:51:19,700 --> 00:51:20,820 Kjo nuk është LIFO. 1185 00:51:20,820 --> 00:51:21,990 Zgjasë në, nga e para. 1186 00:51:21,990 --> 00:51:22,800 Zoti na ruajt. 1187 00:51:22,800 --> 00:51:24,280 Është vend FIFO. 1188 00:51:24,280 --> 00:51:26,110 Së pari në, nga e para. 1189 00:51:26,110 --> 00:51:27,970 Dhe kjo është një gjë e mirë për hir të ndershmërisë " 1190 00:51:27,970 --> 00:51:30,428 sigurisht kur ju jeni rreshtim up super herët në mëngjes. 1191 00:51:30,428 --> 00:51:33,400 Nëse ju merrni atje të parë, ju doni të merrni nga e para si. 1192 00:51:33,400 --> 00:51:35,880 >> Dhe kështu të gjitha këto të dhëna strukturat, radhët e gjata dhe oxhaqet 1193 00:51:35,880 --> 00:51:39,220 dhe bunches e të tjerëve, rezulton nga ju mund të mendojnë për këtë si vetëm një grup. 1194 00:51:39,220 --> 00:51:41,820 Ky është një grup, ndoshta një madhësi fikse 4, por ajo do të 1195 00:51:41,820 --> 00:51:44,990 të jetë lloj i mirë në qoftë se ne mund vetëm grumbull tabaka pothuajse pafundësisht i gjatë, nëse ne 1196 00:51:44,990 --> 00:51:46,780 kanë që tabaka shumë ose numra. 1197 00:51:46,780 --> 00:51:48,840 Pra, ndoshta ne duam të përdorni një listë e lidhur këtu, 1198 00:51:48,840 --> 00:51:51,800 por tregti-off do të jetë potencialisht se ne kemi nevojë për më shumë memorie, 1199 00:51:51,800 --> 00:51:55,930 merr pak më shumë kohë, por ne nuk e kufizojnë lartësinë e rafte, 1200 00:51:55,930 --> 00:51:59,550 shumë si rast Mather ekranit mund të kufizojë madhësinë e rafte, 1201 00:51:59,550 --> 00:52:03,117 dhe kështu që këto janë vendime të projektimit ose opsione në dispozicion për ne fund të fundit. 1202 00:52:03,117 --> 00:52:04,950 Pra, me këto të dhëna strukturave, ne kemi filluar 1203 00:52:04,950 --> 00:52:09,360 shohim kufijtë e sipërm të reja potencialisht në atë që ishte më parë super të shpejtë 1204 00:52:09,360 --> 00:52:11,260 dhe ku ne do të largohet off sot dhe ku 1205 00:52:11,260 --> 00:52:13,200 ne do të shpresojmë për të marrë në është të mërkurën, ne do të 1206 00:52:13,200 --> 00:52:15,740 filloni të shikoni në një të dhënave strukturë që lejon të hetojmë 1207 00:52:15,740 --> 00:52:18,260 përmes të dhënave në log kohë në fund përsëri. 1208 00:52:18,260 --> 00:52:21,470 Dhe ne pamë se, kujtojnë, në javën zero dhe një me kërkimin binar apo ndarjes 1209 00:52:21,470 --> 00:52:22,180 dhe të pushtuar. 1210 00:52:22,180 --> 00:52:26,240 Ajo vjen mbrapa dhe më mirë akoma, Grail shenjtë për këtë të mërkurën 1211 00:52:26,240 --> 00:52:29,510 do të jetë për të dalë me Struktura e të dhënave që shkon me të vërtetë 1212 00:52:29,510 --> 00:52:32,070 ose teorikisht në kohë konstante, ku 1213 00:52:32,070 --> 00:52:34,760 kjo nuk ka rëndësi se sa shumë miliona apo miliarda gjërave 1214 00:52:34,760 --> 00:52:38,470 ne kemi në strukturën e të dhënave, ajo do të të na marrë kohë të vazhdueshme, ndoshta një hap 1215 00:52:38,470 --> 00:52:41,387 ose dy hapa, ose 10 hapa, por numrat e vazhdueshme të hapave 1216 00:52:41,387 --> 00:52:42,970 për të kërkuar përmes kësaj strukture të dhënave. 1217 00:52:42,970 --> 00:52:46,300 Kjo me të vërtetë do të jetë Grail shenjtë por më shumë se të mërkurën. 1218 00:52:46,300 --> 00:52:49,045 Shih ya pastaj. 1219 00:52:49,045 --> 00:52:53,704 >> [Muzika] 1220 00:52:53,704 --> 00:56:08,448