1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:11,261 [MUSIC Playing] 3 00:00:11,261 --> 00:00:12,640 >> DAVID J. Malan: Në rregull. 4 00:00:12,640 --> 00:00:14,525 Kjo është CS50. 5 00:00:14,525 --> 00:00:16,009 Dhe ky është fillimi i javës 5. 6 00:00:16,009 --> 00:00:18,050 Dhe si ju mund të keni vënë re, disa prej materialit 7 00:00:18,050 --> 00:00:21,050 po bëhet pak më shumë komplekse, pak më e dendur. 8 00:00:21,050 --> 00:00:24,560 >> Dhe kjo është shumë e lehtë, sidomos nëse ju keni qenë në zakonin për disa kohë, 9 00:00:24,560 --> 00:00:28,600 të jetë duke u përpjekur për të shkarravitje poshtë më çdo gjë që ne bëjmë, ne jemi duke thënë në klasë. 10 00:00:28,600 --> 00:00:31,626 Por e kuptojnë, se nuk është ndoshta Qasja ideal pedagogjik 11 00:00:31,626 --> 00:00:34,250 për të mësuar këtë lloj të materialit, dhe materiale në përgjithësi. 12 00:00:34,250 --> 00:00:37,250 Dhe kështu që ne jemi të kënaqur për të shpallë vet Gheng atij CS50-së 13 00:00:37,250 --> 00:00:39,780 Gong ka filluar të përgatisë një grup kanonik i shënimeve 14 00:00:39,780 --> 00:00:42,100 për kursin, shpresa e e cila është se, e, këto 15 00:00:42,100 --> 00:00:44,030 jo vetëm të shërbejë si një referencë dhe një burim 16 00:00:44,030 --> 00:00:47,410 për shqyrtimin e materialit dhe duke shkuar prapa përmes materialit që mund të ketë 17 00:00:47,410 --> 00:00:51,230 ju shpëtoi herën e parë, por Gjithashtu në mënyrë që krerët tuaj mund të jetë më 18 00:00:51,230 --> 00:00:53,740 lart se poshtë, kur ajo vjen koha për të leksion, 19 00:00:53,740 --> 00:00:56,960 kështu që ju mund të angazhohen më shumë mendueshëm, si 20 00:00:56,960 --> 00:00:59,170 krahasim me më shumë scribbly. 21 00:00:59,170 --> 00:01:02,510 >> Me tha se, ajo që do të gjeni në internetit është dokumente të tilla si kjo. 22 00:01:02,510 --> 00:01:04,660 Dhe vini re, në krye të majtë, nuk ka jo vetëm një tabelë e përmbajtjes, 23 00:01:04,660 --> 00:01:06,920 por edhe kodet kohë që menjëherë do të hidhen 24 00:01:06,920 --> 00:01:09,077 në pjesën e duhur në videove online. 25 00:01:09,077 --> 00:01:11,410 Dhe çfarë Chang këtu ka bërë është, në thelb, të dokumentuara 26 00:01:11,410 --> 00:01:13,340 çfarë ka ndodhur në këtë leksion të veçantë. 27 00:01:13,340 --> 00:01:16,370 Dhe shumë prej leksioneve janë tashmë në linjë me këtë URL. 28 00:01:16,370 --> 00:01:20,110 Dhe ne do të vazhdojmë të postoni mbetur e atyre që deri në fund të kësaj jave, 29 00:01:20,110 --> 00:01:22,380 kështu që të përfitojnë nga ky burim. 30 00:01:22,380 --> 00:01:25,740 >> Pra, pa zhurmë më tej, kemi filluar të zhvishem përsëri 31 00:01:25,740 --> 00:01:28,180 shtresa që ka qenë string për disa kohë. 32 00:01:28,180 --> 00:01:30,670 Dhe çfarë bëri themi një varg në të vërtetë është javën e kaluar? 33 00:01:30,670 --> 00:01:31,720 34 00:01:31,720 --> 00:01:32,900 Yll Pra char. 35 00:01:32,900 --> 00:01:34,900 Dhe yll char, mirë, çfarë e që me të vërtetë do të thotë? 36 00:01:34,900 --> 00:01:37,150 E pra, të gjithë këtë kohë, në qoftë se ne kemi bërë thirrje një funksion, 37 00:01:37,150 --> 00:01:40,450 si getString, dhe ruajtjen e ashtuquajtura kthimit 38 00:01:40,450 --> 00:01:42,910 Vlera e getString në një variable-- është quajtur 39 00:01:42,910 --> 00:01:47,721 s lloj string-- ne kemi qenë të shkruar linjë e kodit deri atje lart. 40 00:01:47,721 --> 00:01:49,970 Dhe kjo është vetëm kur shoh tim shkrim dore zmadhuar këtu 41 00:01:49,970 --> 00:01:51,930 bëj që unë të kuptojë se sa e tmerrshme është kjo. 42 00:01:51,930 --> 00:01:54,180 >> Megjithatë, le të supozojmë se, në anën e djathtë 43 00:01:54,180 --> 00:01:57,070 është, megjithatë, një të arsyeshme përshkrim të asaj që është 44 00:01:57,070 --> 00:01:58,880 vazhduar gjithë këtë Ora me getString. 45 00:01:58,880 --> 00:02:00,380 getString, natyrisht, merr një varg. 46 00:02:00,380 --> 00:02:01,691 Por çfarë do që me të vërtetë do të thotë? 47 00:02:01,691 --> 00:02:04,190 Kjo do të thotë ajo merr një copë të memorie nga sistemi operues 48 00:02:04,190 --> 00:02:06,040 duke e quajtur një funksion, të quajtur malloc. 49 00:02:06,040 --> 00:02:07,390 Por më shumë se më vonë. 50 00:02:07,390 --> 00:02:09,139 Dhe atëherë ajo populates se copë e kujtesës 51 00:02:09,139 --> 00:02:11,764 me letra përdorues ka shtypur në, e ndjekur nga, natyrisht, 52 00:02:11,764 --> 00:02:14,800 një karakter null, ose backslash zero në fund. 53 00:02:14,800 --> 00:02:18,280 >> Ndërkohë, në anën e majtë e këtë histori, të gjithë këtë kohë, 54 00:02:18,280 --> 00:02:20,850 ne kemi qenë deklaruar një ndryshore, si s. 55 00:02:20,850 --> 00:02:24,770 Dhe kjo variabël është ajo tani do të fillojnë duke e quajtur një akrep. 56 00:02:24,770 --> 00:02:29,190 Kjo nuk është një kuti brenda të cilave ne kemi vënë string, Daven, në vetvete, 57 00:02:29,190 --> 00:02:32,550 por ne kemi vënë në atë shesh kuti në të majtë çfarë saktësisht? 58 00:02:32,550 --> 00:02:34,890 59 00:02:34,890 --> 00:02:35,390 Po? 60 00:02:35,390 --> 00:02:37,118 >> Audienca: Adresa e ku është e vendosur në kujtesën. 61 00:02:37,118 --> 00:02:38,118 >> DAVID J. Malan: Pikërisht. 62 00:02:38,118 --> 00:02:40,690 Adresa e ku Daven është e vendosur në memorie. 63 00:02:40,690 --> 00:02:44,650 Dhe jo ku të gjithë Daven është e vendosur, në vetvete, por në mënyrë specifike adresa 64 00:02:44,650 --> 00:02:45,150 e kujt? 65 00:02:45,150 --> 00:02:46,311 66 00:02:46,311 --> 00:02:46,810 Po? 67 00:02:46,810 --> 00:02:47,460 >> Audienca: Karakteri i parë. 68 00:02:47,460 --> 00:02:50,209 >> DAVID J. Malan: Karakteri i parë në Daven, i cili, në këtë rast, 69 00:02:50,209 --> 00:02:53,820 I propozuar ishte në mënyrë arbitrare dhe jorealiste 1, OX1, 70 00:02:53,820 --> 00:02:55,910 e cila vetëm do të thotë numri heksadecimal i 1. 71 00:02:55,910 --> 00:02:57,993 Por kjo ndoshta do të jetë një numër shumë më të madhe 72 00:02:57,993 --> 00:03:01,260 që të mund të tërheqë me një 0x si një parashtesë, 73 00:03:01,260 --> 00:03:02,806 përfaqësojnë një karakter hexadecimal. 74 00:03:02,806 --> 00:03:05,930 Dhe për shkak se ne nuk kemi nevojë të dini se ku Pjesa tjetër e personazheve të Daven 75 00:03:05,930 --> 00:03:09,860 janë, për shkak të asaj dizajn të thjeshtë Vendimi që është bërë shumë vite më parë? 76 00:03:09,860 --> 00:03:10,548 Po? 77 00:03:10,548 --> 00:03:11,651 >> Audienca: Backslash 0. 78 00:03:11,651 --> 00:03:12,900 DAVID J. Malan: Po, pikërisht. 79 00:03:12,900 --> 00:03:18,100 Backslash 0 ju lejon, megjithëse në koha lineare, të kaloj nëpër varg, 80 00:03:18,100 --> 00:03:20,400 këmbë nga e majta në të djathtë, me nje lak, ose një kohë 81 00:03:20,400 --> 00:03:22,608 loop, ose diçka si se, dhe të përcaktojë, oh, këtu 82 00:03:22,608 --> 00:03:24,751 është fundi i këtij vargut të veçantë. 83 00:03:24,751 --> 00:03:27,000 Pra, me vetëm adresën në fillimi i një varg, 84 00:03:27,000 --> 00:03:30,290 ne mund të hyni në tërësinë e kjo, për shkak se të gjithë këtë kohë, 85 00:03:30,290 --> 00:03:32,030 një varg ka qenë vetëm një yll char. 86 00:03:32,030 --> 00:03:36,370 >> Pra, kjo është me siguri e mirë për të vazhduar përdorimin biblioteka CS50 dhe ky abstraksion, 87 00:03:36,370 --> 00:03:38,440 mënyrë që të flasin, por ne do të të fillojnë për të parë saktësisht 88 00:03:38,440 --> 00:03:41,230 çfarë po u ndodh nën këtë kohë e tërë. 89 00:03:41,230 --> 00:03:45,260 Kështu që ju mund të kujtojnë këtë shembull, shumë, nga hera e fundit, krahasuar 0, 90 00:03:45,260 --> 00:03:47,300 e cila në fakt nuk krahasohen. 91 00:03:47,300 --> 00:03:49,070 Por, kemi filluar për të zgjidhur këtë. 92 00:03:49,070 --> 00:03:52,020 >> Por si ndoshta një përmendore, mund të I interesojnë dikë 93 00:03:52,020 --> 00:03:54,261 në një elefant rozë sot, bërë edhe nga Chang? 94 00:03:54,261 --> 00:03:55,760 Si për ju përpara? [E padëgjueshme]. 95 00:03:55,760 --> 00:03:56,660 Eja lart. 96 00:03:56,660 --> 00:03:58,740 >> Dhe në ndërkohë, si keni dalë, le të 97 00:03:58,740 --> 00:04:01,670 konsiderojnë për vetëm një moment se çfarë ky kod në të vërtetë kishte bërë. 98 00:04:01,670 --> 00:04:04,917 Është deklaruar dy variabla up lartë, s dhe t, dhe duke e quajtur getString. 99 00:04:04,917 --> 00:04:08,250 Kjo nuk është një program shumë përdorues-miqësor, sepse ajo nuk do të ju tregojnë se çfarë duhet të bëni. 100 00:04:08,250 --> 00:04:10,541 Por, le të vetëm të supozojmë se ne jemi duke u fokusuar në pjesën lëng. 101 00:04:10,541 --> 00:04:14,470 Dhe atëherë ne bëjmë, në qoftë s është e barabartë me është e barabartë me t, ai duhet të them printf, 102 00:04:14,470 --> 00:04:16,170 keni shtypur të njëjtën gjë. 103 00:04:16,170 --> 00:04:16,670 Përshëndetje. 104 00:04:16,670 --> 00:04:17,050 Si e keni emrin? 105 00:04:17,050 --> 00:04:17,779 >> Janelle: Janelle. 106 00:04:17,779 --> 00:04:19,529 DAVID J. Malan: Janelle, nice to meet you. 107 00:04:19,529 --> 00:04:21,800 Pra, sfidën tuaj në dorë për këtë elefant 108 00:04:21,800 --> 00:04:25,230 është që së pari të na tërheqë një foto të asaj që është duke u përfaqësuar në ato dy të parat 109 00:04:25,230 --> 00:04:25,970 linja. 110 00:04:25,970 --> 00:04:28,139 Pra, s dhe t mund të jetë përfaqësuar si në ekran? 111 00:04:28,139 --> 00:04:30,680 Dhe vetëm ju mund të tërheqë atë me gishtin tuaj në këtë ekran të madh. 112 00:04:30,680 --> 00:04:31,780 113 00:04:31,780 --> 00:04:34,510 >> Pra, ka dy gjysmave të secila anë e atij ekuacionit. 114 00:04:34,510 --> 00:04:37,760 Pra, ka s në të majtë, dhe pastaj getString në të djathtë. 115 00:04:37,760 --> 00:04:40,540 Dhe pastaj nuk ka t në të majtë, dhe pastaj getString në të djathtë. 116 00:04:40,540 --> 00:04:42,630 Pra, si mund të fillojmë duke tërhequr një foto që 117 00:04:42,630 --> 00:04:46,340 përfaqëson çfarë po ndodh këtu në kujtesë, do të thoni? 118 00:04:46,340 --> 00:04:49,150 Dhe më lejoni të ju shpjegoj çfarë jeni duke bërë si ju shkoni. 119 00:04:49,150 --> 00:04:49,820 >> Janelle: OK. 120 00:04:49,820 --> 00:04:58,890 E pra, së pari, do të jetë i kërkuar që ju të merrni string input. 121 00:04:58,890 --> 00:05:00,439 Dhe kjo do të store-- oh, sorry. 122 00:05:00,439 --> 00:05:01,230 DAVID J. Malan: OK. 123 00:05:01,230 --> 00:05:01,730 Mirë. 124 00:05:01,730 --> 00:05:03,330 Dhe kjo quhet ajo? 125 00:05:03,330 --> 00:05:03,950 Oh, OK. 126 00:05:03,950 --> 00:05:04,450 Do të mbajë. 127 00:05:04,450 --> 00:05:05,575 Unë nuk do të thotë për të ndërprerë. 128 00:05:05,575 --> 00:05:07,060 Janelle: Na vjen keq. 129 00:05:07,060 --> 00:05:14,237 Pra, kjo do të input atë në Adresa nuk of-- sigurt. 130 00:05:14,237 --> 00:05:17,320 Unë nuk mund të mbani mend saktësisht numrin, por unë besoj se ajo ishte duke filluar me 0. 131 00:05:17,320 --> 00:05:18,420 >> DAVID J. Malan: Kjo është e gjitha e drejtë, sepse unë i kam detyruar numrat lart, 132 00:05:18,420 --> 00:05:19,650 kështu që nuk ka asnjë përgjigje të drejtë. 133 00:05:19,650 --> 00:05:22,105 >> Janelle: Duke filluar me 0 hark. 134 00:05:22,105 --> 00:05:24,000 >> DAVID J. Malan: OK, kështu element 0. 135 00:05:24,000 --> 00:05:24,765 Sigurt. 136 00:05:24,765 --> 00:05:28,295 >> Janelle: Atëherë, nëse është si vetëm një dy-letter-- 137 00:05:28,295 --> 00:05:30,496 >> DAVID J. Malan: OK, përsëri tek ju. 138 00:05:30,496 --> 00:05:33,629 >> Janelle: Pra element 0, dhe atëherë element 1 ose element 2. 139 00:05:33,629 --> 00:05:36,670 DAVID J. Malan: Dhe cila pjesë e foto jeni tërhequr tani? 140 00:05:36,670 --> 00:05:37,690 Thirrja për getString? 141 00:05:37,690 --> 00:05:38,830 Ose deklarata e s? 142 00:05:38,830 --> 00:05:42,890 >> Janelle: Deklarata i s, unë besoj. 143 00:05:42,890 --> 00:05:45,980 Oh, getString, sepse kjo do të të futur në çdo [? zonë. ?] 144 00:05:45,980 --> 00:05:46,510 >> DAVID J. Malan: Mirë. 145 00:05:46,510 --> 00:05:47,051 Pikërisht. 146 00:05:47,051 --> 00:05:49,300 Edhe pse kjo mënyrë efektive kthehet një grup, kujtojnë, 147 00:05:49,300 --> 00:05:53,300 kur ne të kthehemi një varg, ne mund Indeksi në atë varg duke përdorur 01 dhe 2. 148 00:05:53,300 --> 00:05:56,180 Teknikisht, këto janë ndoshta përfaqësuar nga adresat individuale, 149 00:05:56,180 --> 00:05:57,100 por kjo është në rregull. 150 00:05:57,100 --> 00:06:00,170 >> Pra mendoj, në qoftë se unë mund vetëm të shpejtë përpara për të ku ne u ndërpre 151 00:06:00,170 --> 00:06:04,320 Herën e fundit, në qoftë se një nga vargjet ishte g a b e, 152 00:06:04,320 --> 00:06:10,337 backslash 0, duke përfaqësuar Gabe-së input, si mund ne përfaqësojmë s tani? 153 00:06:10,337 --> 00:06:12,670 Nëse kjo është e kujtesës që është janë kthyer nga getString? 154 00:06:12,670 --> 00:06:14,415 155 00:06:14,415 --> 00:06:17,610 >> Janelle: A do të ishte përfaqësuar nga një hark? 156 00:06:17,610 --> 00:06:18,750 >> DAVID J. Malan: Me një hark? 157 00:06:18,750 --> 00:06:19,130 E pra, nuk ka. 158 00:06:19,130 --> 00:06:21,171 Le të them vetëm, në pikturë, më lejoni vetëm të shkojnë përpara 159 00:06:21,171 --> 00:06:25,710 dhe të propozojnë se, në qoftë se kjo është s, kjo është vlera kthimi i getString. 160 00:06:25,710 --> 00:06:29,482 Dhe ke tërhequr kjo si 0, 1, 2, e cila është krejtësisht e arsyeshme, sepse ne 161 00:06:29,482 --> 00:06:30,940 mund indeksi në varg, si të tillë. 162 00:06:30,940 --> 00:06:33,340 Por vetëm që të jenë në përputhje me Herën e fundit, më lejoni të shkoj përpara 163 00:06:33,340 --> 00:06:37,310 dhe në mënyrë arbitrare të propozojë që kjo është adresa 1, kjo është adresa 2, 164 00:06:37,310 --> 00:06:39,597 kjo është adresa 3, dhe kështu me radhë. 165 00:06:39,597 --> 00:06:41,430 Dhe kështu, vetëm që të jetë super qartë, se çfarë po ndodh 166 00:06:41,430 --> 00:06:44,580 për të shkuar në s si rezultat i se Linja e parë e kodit, do të thoni? 167 00:06:44,580 --> 00:06:45,420 >> Janelle: Adresa 1? 168 00:06:45,420 --> 00:06:46,420 >> DAVID J. Malan: Pikërisht. 169 00:06:46,420 --> 00:06:47,190 Pra adresuar 0x1. 170 00:06:47,190 --> 00:06:48,220 171 00:06:48,220 --> 00:06:51,230 Dhe ndërkohë, më lejoni të shkoj përpara dhe të kopjuar shumë nga ajo që ju keni bërë 172 00:06:51,230 --> 00:06:52,740 dhe shtoni t tim këtu. 173 00:06:52,740 --> 00:06:56,340 Nëse unë do të shkruani në Gabe përsëri për herë të dytë, 174 00:06:56,340 --> 00:07:01,530 kur e bëri me getString, ku, natyrisht, është Gabe do të shkojnë? 175 00:07:01,530 --> 00:07:02,280 E pra, presumably-- 176 00:07:02,280 --> 00:07:04,935 177 00:07:04,935 --> 00:07:05,975 >> Janelle: Ashtu si në këtu? 178 00:07:05,975 --> 00:07:06,850 DAVID J. Malan: Po. 179 00:07:06,850 --> 00:07:08,516 Janelle: Ose ajo është gjithashtu në të njëjtat kuti? 180 00:07:08,516 --> 00:07:11,940 DAVID J. Malan: Më lejoni të propozojë, vërtet, pikërisht, kështu që në këto kuti shtesë. 181 00:07:11,940 --> 00:07:15,230 Por ajo që është kryesore tani është se, edhe edhe pse unë kam tërhequr këto mjaft të ngushtë 182 00:07:15,230 --> 00:07:18,650 together-- 0x1, kjo është 0x2-- në realitet, 183 00:07:18,650 --> 00:07:25,750 kjo tani mund të jetë adresa 0x10, për shembull, dhe 0x11 dhe 0x12, 184 00:07:25,750 --> 00:07:26,870 dhe kështu me radhë. 185 00:07:26,870 --> 00:07:29,955 Dhe kështu, në qoftë se është e rastit, çfarë do të përfundojnë këtu në t? 186 00:07:29,955 --> 00:07:30,830 >> Janelle: 0x10? 187 00:07:30,830 --> 00:07:31,830 DAVID J. Malan: Pikërisht. 188 00:07:31,830 --> 00:07:33,180 Pra 0x10. 189 00:07:33,180 --> 00:07:34,570 Dhe kështu që tani, pyetja e fundit. 190 00:07:34,570 --> 00:07:37,510 Ju keni, nga larg, kishte për të punuar më e vështirë për një elefant deri tani. 191 00:07:37,510 --> 00:07:42,650 Deri tani, në qoftë se unë tërheq lart kodin përsëri, kur unë bëj, në përputhje tre, 192 00:07:42,650 --> 00:07:47,630 në qoftë se s barabartë barabartë t, çfarë jam unë në të vërtetë Krahasimi që ne kemi tërhequr këtu? 193 00:07:47,630 --> 00:07:49,271 >> Janelle: Dy adresat? 194 00:07:49,271 --> 00:07:50,270 DAVID J. Malan: Pikërisht. 195 00:07:50,270 --> 00:07:53,350 Kështu që unë jam duke thënë është s barabartë barabartë me t? 196 00:07:53,350 --> 00:07:56,210 Në fjalë të tjera, është 1 barabartë barabartë me 10? 197 00:07:56,210 --> 00:07:59,710 Dhe sigurisht, Përgjigja e qartë është tani, nuk ka. 198 00:07:59,710 --> 00:08:02,920 Dhe kështu që ky program është në fund të fundit duke shkuar për të shkruar atë, do të thoni? 199 00:08:02,920 --> 00:08:05,770 200 00:08:05,770 --> 00:08:08,405 >> Janelle: A do të ishte, keni shtypur të njëjtën gjë? 201 00:08:08,405 --> 00:08:11,446 >> DAVID J. Malan: Pra, nëse s është 1 dhe t është 10? 202 00:08:11,446 --> 00:08:13,320 >> Janelle: Ju shtypur gjëra të ndryshme. 203 00:08:13,320 --> 00:08:13,570 >> DAVID J. Malan: Pikërisht. 204 00:08:13,570 --> 00:08:14,480 Ju shtypur gjëra të ndryshme. 205 00:08:14,480 --> 00:08:14,850 Të gjithë të drejtë. 206 00:08:14,850 --> 00:08:16,714 Pra, një raund të duartrokitje, në qoftë se ne mund të, këtu. 207 00:08:16,714 --> 00:08:17,214 [Duartrokitje] 208 00:08:17,214 --> 00:08:17,708 Kjo ishte e dhimbshme. 209 00:08:17,708 --> 00:08:18,208 Unë e di. 210 00:08:18,208 --> 00:08:19,684 Bërë mirë. 211 00:08:19,684 --> 00:08:24,690 Pra, tani le të shohim nëse ne nuk mund të vë në lojë përveç asaj fix ishte. 212 00:08:24,690 --> 00:08:28,040 Dhe sigurisht, kur ne fiks this-- që unë tani do të përfaqësojë në green-- 213 00:08:28,040 --> 00:08:29,690 ne e bëmë disa përmirësimeve këtu. 214 00:08:29,690 --> 00:08:32,409 Së pari, ashtu si një mendje e shëndoshë shikoni, unë jam i pari kontrolluar 215 00:08:32,409 --> 00:08:35,110 në qoftë se s barabartë pavlefshme dhe t barabartë null. 216 00:08:35,110 --> 00:08:39,440 Dhe vetëm të jetë i qartë, kur mund s ose t jetë null në kod si kjo? 217 00:08:39,440 --> 00:08:43,140 218 00:08:43,140 --> 00:08:44,490 Kur mund të s ose t jetë null. 219 00:08:44,490 --> 00:08:44,990 Po? 220 00:08:44,990 --> 00:08:45,990 >> Audienca: [padëgjueshme]. 221 00:08:45,990 --> 00:08:49,490 222 00:08:49,490 --> 00:08:50,510 >> DAVID J. Malan: Pikërisht. 223 00:08:50,510 --> 00:08:52,840 Nëse vargu që përdoruesi shtypur në është mënyrë shumë e gjatë 224 00:08:52,840 --> 00:08:56,140 për të përshtaten në kujtesë, ose disa Rasti i çuditshëm qoshe si kjo, 225 00:08:56,140 --> 00:08:59,010 getString, si ne do të shohim, fjalë për fjalë sot, në dokumentacion, 226 00:08:59,010 --> 00:09:02,330 thotë se ajo do të kthehet null si një vlerë të veçantë rojtar, 227 00:09:02,330 --> 00:09:05,417 ose vetëm lloj i një simboli të veçantë që do të thotë diçka shkoi keq. 228 00:09:05,417 --> 00:09:07,500 Pra, ne duam të kontrolloni për se, për shkak se ajo rezulton 229 00:09:07,500 --> 00:09:09,720 që null është një vlerë shumë e rrezikshme. 230 00:09:09,720 --> 00:09:14,250 >> Shpesh, në qoftë se ju të përpiqet të bëjë diçka me null përfshin një function-- kalon atë 231 00:09:14,250 --> 00:09:17,470 si input, për instance-- atë funksion shumë mund do të rrëzimit dhe, me të, 232 00:09:17,470 --> 00:09:19,090 marrë poshtë të tërë programin tuaj. 233 00:09:19,090 --> 00:09:22,570 Pra, kjo linjë e tretë tani është vetëm një mendje e shëndoshë kontrolloni, kontrollin gabim, nëse ju do. 234 00:09:22,570 --> 00:09:25,450 Kjo është një zakon i mirë tani për ne për të marrë në çdo kohë ne 235 00:09:25,450 --> 00:09:28,050 provoni të përdorni një vlerë që mund, potencialisht, të jetë null. 236 00:09:28,050 --> 00:09:32,000 >> Tani, në vijën e katërt këtu, "Nëse strcmp (s, t)," mirë, 237 00:09:32,000 --> 00:09:33,180 çfarë është që duke iu referuar? 238 00:09:33,180 --> 00:09:36,750 E pra, ne kemi thënë se kjo është një shumë e ngjeshur Funksioni i quajtur për krahasim string. 239 00:09:36,750 --> 00:09:40,370 Dhe qëllimi i tij në jetë është për të krahasuar Argumenti i tij i parë kundër tij të dytë, 240 00:09:40,370 --> 00:09:44,640 por jo në aspektin e adresat e tyre, si ne e bëmë pa qëllim një moment 241 00:09:44,640 --> 00:09:48,270 më parë me kodin kuqe, por vend për të krahasuar këto dy 242 00:09:48,270 --> 00:09:53,210 vargjet në humanizëm intuitiv mënyrë duke e krahasuar këtë, kundër kësaj, 243 00:09:53,210 --> 00:09:56,690 kundër këtij, kundër kësaj, dhe pastaj ndalimin nëse dhe kur një 244 00:09:56,690 --> 00:09:59,590 ose të dy gishtat e mi godet një backslash 0. 245 00:09:59,590 --> 00:10:04,530 Pra dikush vjet më parë zbatohet strcmp për të zbatuar për ne funksionalitetin 246 00:10:04,530 --> 00:10:08,890 që kemi shpresuar ne do të ketë marrë nga vetëm krahasuar dy vlera të thjeshta. 247 00:10:08,890 --> 00:10:14,929 >> Tani sinqerisht, unë mbaj vizatim të gjitha këto numra të ndryshme. 248 00:10:14,929 --> 00:10:17,470 Por realiteti është, unë kam qenë duke e bërë këto deri gjithë kohës. 249 00:10:17,470 --> 00:10:19,580 Dhe kështu që më lejoni vetëm të shkojnë përpara dhe shkarravitje këto jashtë 250 00:10:19,580 --> 00:10:23,100 për të bërë një pikë që, në fund e ditës dhe duke shkuar përpara, 251 00:10:23,100 --> 00:10:30,160 ne nuk jemi me të vërtetë do të kujdeset për çfarë trajton gjërat janë në të vërtetë 252 00:10:30,160 --> 00:10:30,790 në kujtesën. 253 00:10:30,790 --> 00:10:34,320 Pra, unë nuk jam duke shkuar për të nxjerrë këto llojet e numrave në mënyrë shumë më, 254 00:10:34,320 --> 00:10:38,970 Unë jam vetëm një abstrakt ky larg një pak më shumë miqësore me vetëm shigjeta. 255 00:10:38,970 --> 00:10:42,060 >> Me fjalë të tjera, në qoftë se është një tregues, mirë, le të vetëm të tërheqë atë, fjalë për fjalë, 256 00:10:42,060 --> 00:10:45,430 si një tregues, një shigjetë duke treguar nga vetë për diçka tjetër, 257 00:10:45,430 --> 00:10:48,280 dhe mos u shqetësoni shumë më shumë për minutia e këtyre adresave 258 00:10:48,280 --> 00:10:49,910 e cila, përsëri, unë përbërë gjithsesi. 259 00:10:49,910 --> 00:10:52,680 Por ne do të shohim ato adresat, ndonjëherë, kur debugging kodin. 260 00:10:52,680 --> 00:10:56,450 >> Tani ndërkohë, ky program këtu fixes, sigurisht, 261 00:10:56,450 --> 00:10:58,720 se problemi duke krahasuar ato dy vargjet. 262 00:10:58,720 --> 00:11:00,260 Por ne u përplas me një tjetër problem. 263 00:11:00,260 --> 00:11:03,180 Kjo ishte nga kopja programit për herë të fundit, 264 00:11:03,180 --> 00:11:06,880 ku, unë kam qenë duke u përpjekur për të përfituar vetëm karakteri i parë në një varg. 265 00:11:06,880 --> 00:11:09,620 Por ajo që ishte simptomë kemi parë për herë të fundit kur 266 00:11:09,620 --> 00:11:14,150 një përdorues shtypur në një vlerë, si Gabe në Fjala, për s, 267 00:11:14,150 --> 00:11:19,310 atëherë ne caktuar s në t, si në vijën e tretë, 268 00:11:19,310 --> 00:11:22,900 dhe pastaj unë u përpoq për të germa t parantezë 0? 269 00:11:22,900 --> 00:11:25,950 Cili ishte efekti i ndryshimit t parantezë 0 këtu? 270 00:11:25,950 --> 00:11:27,150 >> Audienca: Ajo ndryshoi s. 271 00:11:27,150 --> 00:11:29,360 >> DAVID J. Malan: Po, I ndryshuar s, si. 272 00:11:29,360 --> 00:11:31,050 Për shkak se ajo është me të vërtetë ndodh? 273 00:11:31,050 --> 00:11:34,130 E pra, më lejoni të shohim nëse unë mund të pastër up këtë foto, si më poshtë. 274 00:11:34,130 --> 00:11:41,390 >> Nëse është, përsëri, fjala g, a, b, e, backslash, 0, dhe s 275 00:11:41,390 --> 00:11:44,084 ne do të vazhdojmë vizatimi si një kuti këtu, por jo më shumë adresa. 276 00:11:44,084 --> 00:11:45,250 Le të mos e bërë gjërat. 277 00:11:45,250 --> 00:11:47,510 Le të vetëm të nxjerrë një foto për të lehtësuar botën. 278 00:11:47,510 --> 00:11:52,640 >> Kur unë deklaroj t me varg t, që krijon atë copë e kujtesës. 279 00:11:52,640 --> 00:11:55,850 Sheshi ndodh të jetë 32 bit në shumicën e kompjuterëve. 280 00:11:55,850 --> 00:11:59,530 Në fakt, në qoftë se ju keni dëgjuar ndonjëherë për një kompjuter që ka një arkitekturë të 32-bit, 281 00:11:59,530 --> 00:12:03,000 me të vërtetë dashuroj-flasin, që vetëm do të thotë ai përdor 32-bit adresa. 282 00:12:03,000 --> 00:12:05,370 Dhe si një teknik mënjanë, në qoftë se ju keni menduar ndonjëherë 283 00:12:05,370 --> 00:12:09,630 pse kompjuterët më të vjetër, në qoftë se ju në të vërtetë u përpoq të supë ato me shumë RAM, 284 00:12:09,630 --> 00:12:12,360 mund të ketë vetëm një maksimum nga katër gigabajt të RAM, 285 00:12:12,360 --> 00:12:14,860 dhe kjo është për shkak se, fjalë për fjalë, kompjuterin tuaj të vjetër mund vetëm 286 00:12:14,860 --> 00:12:17,250 llogarisin të larta deri 4 miliard, 4 miliard byte, 287 00:12:17,250 --> 00:12:20,590 sepse ai ishte duke përdorur 32-bit numrat për adresat. 288 00:12:20,590 --> 00:12:23,260 >> Por në çdo rast, në këtë shembull, historia e shumë më të thjeshtë. 289 00:12:23,260 --> 00:12:27,250 t është vetëm një tjetër tregues, ose me të vërtetë një yll char, aka string. 290 00:12:27,250 --> 00:12:30,860 Dhe si mund të dua të rinovuar këtë foto tani me këtë linjë të dytë të kodit, 291 00:12:30,860 --> 00:12:31,950 pas dot, dot, dot? 292 00:12:31,950 --> 00:12:35,845 Kur unë bëj varg t barabartë s pikëpresje, si e bën të ndryshojë kjo foto? 293 00:12:35,845 --> 00:12:37,500 294 00:12:37,500 --> 00:12:38,000 Po? 295 00:12:38,000 --> 00:12:38,916 >> Audienca: [padëgjueshme]. 296 00:12:38,916 --> 00:12:41,087 297 00:12:41,087 --> 00:12:42,020 >> DAVID J. Malan: Po. 298 00:12:42,020 --> 00:12:42,600 Pikërisht. 299 00:12:42,600 --> 00:12:45,620 Unë vetëm vënë një shigjetë nga kuti t të njëjtë adrese, 300 00:12:45,620 --> 00:12:47,570 njëjtë letra e parë i dha. 301 00:12:47,570 --> 00:12:50,850 Ose teknikisht, në qoftë se kjo djalë ishin ende në 0x1, 302 00:12:50,850 --> 00:12:53,052 kjo është sikur të kisha 0x1 këtu dhe 0x1 këtu. 303 00:12:53,052 --> 00:12:54,760 Por përsëri, i cili kujdeset në lidhje me adresat? 304 00:12:54,760 --> 00:12:56,345 Është vetëm ideja që tani ka rëndësi. 305 00:12:56,345 --> 00:12:57,720 Pra, kjo është ajo që po ndodh këtu. 306 00:12:57,720 --> 00:13:02,690 Pra, natyrisht, në qoftë se ju bëni t kllapa 0, e cila është grup simbol, 307 00:13:02,690 --> 00:13:05,650 i course-- dhe sinqerisht, kjo duket si ka një koleksion të gjatë këtu, 308 00:13:05,650 --> 00:13:07,340 por tani ka kjo gjë e pazakontë. 309 00:13:07,340 --> 00:13:11,160 E di që gjuhën e programimit, C, ju ofron këtë funksion, 310 00:13:11,160 --> 00:13:14,650 ku, edhe në qoftë se t është një akrep, apo është një tregues, 311 00:13:14,650 --> 00:13:18,050 ju ende mund të përdorni që të njohur, rehatshme kllapa katrore 312 00:13:18,050 --> 00:13:22,520 simbol për të shkuar në elementin e parë, ose element të dytë, apo çdo element 313 00:13:22,520 --> 00:13:26,130 se që akrep është duke treguar për shkak se, me sa duket, atë 314 00:13:26,130 --> 00:13:29,410 është, si në këtë rast, duke treguar në një rrjet. 315 00:13:29,410 --> 00:13:30,340 >> Deri sa nuk kemi rregullojmë këtë? 316 00:13:30,340 --> 00:13:33,660 Sinqerisht, ky është vendi ku ajo mori një pak e madhe në shikim të parë. 317 00:13:33,660 --> 00:13:35,340 Por këtu është një version i ri dhe i përmirësuar. 318 00:13:35,340 --> 00:13:37,460 >> Pra, së pari, unë jam marrë qafe e bibliotekës CS50, 319 00:13:37,460 --> 00:13:41,170 vetëm të vë në dukje se është i vërtetë një yll char, vetëm një sinonim. 320 00:13:41,170 --> 00:13:43,540 Dhe t eshte yll char. 321 00:13:43,540 --> 00:13:48,290 Por çfarë po ndodh në Ana e djathtë e atij linjë 322 00:13:48,290 --> 00:13:49,970 ku t është caktuar një vlerë? 323 00:13:49,970 --> 00:13:50,790 >> Çfarë është e malloc? 324 00:13:50,790 --> 00:13:51,630 Çfarë është e strlen? 325 00:13:51,630 --> 00:13:52,547 Çfarë është sizeof (char)? 326 00:13:52,547 --> 00:13:54,380 Pse dreq e bën këtë vështrim aq komplekse linjë? 327 00:13:54,380 --> 00:13:55,713 Çfarë është ajo duke bërë në një nivel të lartë? 328 00:13:55,713 --> 00:13:56,482 329 00:13:56,482 --> 00:13:57,440 Çfarë është ajo ruajtjen në t? 330 00:13:57,440 --> 00:13:58,646 Po? 331 00:13:58,646 --> 00:14:01,104 Audienca: Është alokimin një sasi të caktuar të hapësirës kujtesës. 332 00:14:01,104 --> 00:14:03,032 Është për të ruajtur, unë mendoj, letra [e padëgjueshme]. 333 00:14:03,032 --> 00:14:04,032 >> DAVID J. Malan: Perfect. 334 00:14:04,032 --> 00:14:04,540 Perfect. 335 00:14:04,540 --> 00:14:06,650 Është caktimin e një të caktuar sasia e hapësirës së kujtesës 336 00:14:06,650 --> 00:14:08,940 për të ruajtur, me sa duket, letra e ardhshme. 337 00:14:08,940 --> 00:14:11,310 Dhe në veçanti, malloc prandaj po kthehet ajo? 338 00:14:11,310 --> 00:14:13,114 339 00:14:13,114 --> 00:14:14,851 >> Audienca: Kthimi i [e padëgjueshme]? 340 00:14:14,851 --> 00:14:15,850 DAVID J. Malan: Pikërisht. 341 00:14:15,850 --> 00:14:18,850 Kthimi adresën e atij kujtesës, e cila është një mënyrë e sofistikuar për të thënë, 342 00:14:18,850 --> 00:14:21,640 kthen adresën e bajt i parë i këtij kujtesës. 343 00:14:21,640 --> 00:14:25,460 Barra bie mbi mua për të kujtuar sa memorie kam në të vërtetë 344 00:14:25,460 --> 00:14:27,140 ndarë ose pyeti malloc për. 345 00:14:27,140 --> 00:14:28,384 >> Tani se sa është kjo? 346 00:14:28,384 --> 00:14:30,550 E pra, edhe pse ka një shumë e kllapa këtu, 347 00:14:30,550 --> 00:14:32,970 malloc merr vetëm një argument të vetëm. 348 00:14:32,970 --> 00:14:37,250 Dhe unë jam duke specifikuar strlen të s, kështu që të japë mua si shumë bytes si ka në s, 349 00:14:37,250 --> 00:14:37,800 por të shtuar një. 350 00:14:37,800 --> 00:14:38,300 Pse? 351 00:14:38,300 --> 00:14:39,030 352 00:14:39,030 --> 00:14:39,530 Po? 353 00:14:39,530 --> 00:14:40,840 >> Audienca: backslash 0. 354 00:14:40,840 --> 00:14:41,840 DAVID J. Malan: Pikërisht. 355 00:14:41,840 --> 00:14:43,423 Ne kemi marrë për të bërë një mbajtje e shtëpisë pak. 356 00:14:43,423 --> 00:14:45,970 Pra, për shkak se ka një backslash 0, ne do të më mirë të mbani mend se. 357 00:14:45,970 --> 00:14:47,310 Përndryshe, ne jemi duke shkuar për të krijuar një varg që 358 00:14:47,310 --> 00:14:49,170 nuk e kanë atë terminator të veçantë. 359 00:14:49,170 --> 00:14:52,640 >> Ndërkohë, vetëm që të jetë super anal, unë kam sizeof (char), 360 00:14:52,640 --> 00:14:55,730 vetëm në rast se dikush shkon vëllezërit e mi Kodi jo në aplikim CS50, 361 00:14:55,730 --> 00:14:58,220 por ndoshta një kompjuter tjetër krejt ku chars 362 00:14:58,220 --> 00:15:01,470 janë një bajt, nga konventa, por dy bytes, ose diçka më e madhe se kaq. 363 00:15:01,470 --> 00:15:04,490 Është vetëm për të qenë super, super urrejtës të gabimeve. 364 00:15:04,490 --> 00:15:06,940 Edhe pse, në realitet, është e më shumë gjasa do të jetë një 1. 365 00:15:06,940 --> 00:15:11,490 >> Tani, ndërkohë, unë të shkojnë përpara dhe kopje string, t simboli i barabartë t kllapa s. 366 00:15:11,490 --> 00:15:14,962 Dhe unë do të shtyjë për javën e kaluar Kodi burim për të parë se çfarë po ndodh. 367 00:15:14,962 --> 00:15:17,670 Por takeaway kyç, dhe arsye kam vënë kodin tani në të gjelbër, 368 00:15:17,670 --> 00:15:22,520 është për shkak se atë linjë shumë e fundit, t kllapa 0 barabartë toupper, 369 00:15:22,520 --> 00:15:25,230 ka efektin e kapitalizimin e cila string? 370 00:15:25,230 --> 00:15:26,960 t dhe / ose s? 371 00:15:26,960 --> 00:15:29,280 372 00:15:29,280 --> 00:15:30,580 Kjo linjë e fundit e kodit. 373 00:15:30,580 --> 00:15:32,930 374 00:15:32,930 --> 00:15:35,560 >> Vetëm t, sepse ajo që është ndodhi këtë herë, 375 00:15:35,560 --> 00:15:41,500 në qoftë se kam pak të ndrequr atë hapin e fundit, ajo që ka ndodhur është, kur unë e quaj malloc, 376 00:15:41,500 --> 00:15:45,380 Unë në thelb të merrni një copë e kujtesës që është të njëjtën madhësi si origjinale, 377 00:15:45,380 --> 00:15:47,020 sepse kjo është aritmetike kam bërë. 378 00:15:47,020 --> 00:15:50,920 Unë jam ruajtjen në t adresën i asaj copë e kujtesës. 379 00:15:50,920 --> 00:15:53,370 Edhe pse kjo duket e bukur dhe goxha, e bukur dhe bosh, 380 00:15:53,370 --> 00:15:56,882 realiteti është se ka, ajo që ne do të mbajtur duke e quajtur, vlerat e plehrave në këtu. 381 00:15:56,882 --> 00:15:59,340 Kjo copë e kujtesës mund shumë dhe kanë qenë përdorur më parë, 382 00:15:59,340 --> 00:16:00,940 disa sekonda, pak minuta më parë. 383 00:16:00,940 --> 00:16:04,410 Pra, nuk mund të jetë absolutisht numrat ose letra atje, vetëm nga aksident. 384 00:16:04,410 --> 00:16:08,580 Por ata nuk janë të vlefshme, deri sa unë veten populloj këtë copë e kujtesës 385 00:16:08,580 --> 00:16:12,510 me karaktere aktuale, si unë bëjë në se për lak atje. 386 00:16:12,510 --> 00:16:13,180 Të gjithë të drejtë? 387 00:16:13,180 --> 00:16:16,180 >> Deri tani, kulmi i këto tre shembuj 388 00:16:16,180 --> 00:16:20,730 që me sa duket u thyer për herë të fundit, ky shembull Swap, ky funksion 389 00:16:20,730 --> 00:16:23,670 punuar në kuptimin se ajo swapped a dhe b. 390 00:16:23,670 --> 00:16:25,620 Por ajo nuk ka punë në çfarë kuptimi tjetër? 391 00:16:25,620 --> 00:16:27,616 392 00:16:27,616 --> 00:16:28,614 Po? 393 00:16:28,614 --> 00:16:29,612 >> Audienca: [padëgjueshme]. 394 00:16:29,612 --> 00:16:35,600 395 00:16:35,600 --> 00:16:36,700 >> DAVID J. Malan: Pikërisht. 396 00:16:36,700 --> 00:16:39,530 Nëse unë do të thërrasë këtë funksion nga another-- për shembull, 397 00:16:39,530 --> 00:16:42,870 nga një funksion si kryesor, ku Unë kam një ndryshueshme, X dhe Y, si unë 398 00:16:42,870 --> 00:16:46,160 bëri javën e kaluar, njëjtë Kodi, dhe unë të kalojë në x dhe y 399 00:16:46,160 --> 00:16:49,860 të bie në ujdi, dhe pastaj e quajnë Swap-- këtë, natyrisht, është versioni i saktë 400 00:16:49,860 --> 00:16:52,220 është ajo që ne jemi gati për të see-- ajo nuk ka punë. 401 00:16:52,220 --> 00:16:53,770 Pra, çfarë është fix? 402 00:16:53,770 --> 00:16:56,850 >> E pra, në mënyrë të drejtë të jenë të qartë, më lejoni të shkoj përpara 403 00:16:56,850 --> 00:17:05,450 and-- më jepni një të dytë këtu, dhe të shohim në qoftë se unë mund të ju tregojnë një të fundit, e cila 404 00:17:05,450 --> 00:17:12,464 do të jetë in-- le të shohim nëse unë mund të gjeni kjo OK vërtetë fast--, [e padëgjueshme]. 405 00:17:12,464 --> 00:17:18,440 406 00:17:18,440 --> 00:17:19,240 OK, nuk është. 407 00:17:19,240 --> 00:17:21,000 Pra injorojnë komandat Unë jam vetëm typing. 408 00:17:21,000 --> 00:17:23,780 Unë dua që ajo të tërhequr në minutën e fundit një shembull 409 00:17:23,780 --> 00:17:27,960 nga hera e fundit, e cila tani quhet jo Swap. 410 00:17:27,960 --> 00:17:30,200 >> Pra, nuk ka Swap është ku ne u ndërpre për herë të fundit, 411 00:17:30,200 --> 00:17:32,930 ku, kam nisur x dhe y me 1 në 2. 412 00:17:32,930 --> 00:17:35,840 Unë pastaj e quajnë Swap, duke kaluar në 1 dhe 2. 413 00:17:35,840 --> 00:17:37,930 Dhe pastaj ky funksion punuar në një kuptim, 414 00:17:37,930 --> 00:17:40,750 por ajo nuk kishte të përhershme efekt në x dhe y. 415 00:17:40,750 --> 00:17:45,430 Pra, pyetja e parë është, se si tani nuk kemi të vërtetë të zgjidhur këtë problem? 416 00:17:45,430 --> 00:17:47,820 Cila është zgjidhja në dorë? 417 00:17:47,820 --> 00:17:53,150 >> E pra, në swap.c, e cila është e re sot, vini re disa dallime. 418 00:17:53,150 --> 00:17:54,700 x dhe y jane njëjta. 419 00:17:54,700 --> 00:17:57,250 Por ajo që është e qartë ndryshme rreth linjë 25? 420 00:17:57,250 --> 00:17:58,880 421 00:17:58,880 --> 00:18:01,715 Çfarë ka të re atje, nëse ju kujtohet atë që dukej si një të dytë më parë? 422 00:18:01,715 --> 00:18:02,565 >> Audienca: [padëgjueshme]. 423 00:18:02,565 --> 00:18:03,440 >> DAVID J. Malan: Po. 424 00:18:03,440 --> 00:18:06,680 Pra ampersands janë një pjesë e re i sintaksës, jo vetëm në këtë program, 425 00:18:06,680 --> 00:18:08,560 por edhe në përgjithësi në CS50. 426 00:18:08,560 --> 00:18:10,680 Deri më sot, unë nuk mendoj se ne kemi parë shembuj 427 00:18:10,680 --> 00:18:14,070 ose të vërtetë të folur për ta në çdo hollësi, përveç, ndoshta, preemptively 428 00:18:14,070 --> 00:18:16,467 në pjesë, një simbol si kjo. 429 00:18:16,467 --> 00:18:19,300 E pra, ajo rezulton simbol është një nga pjesët e fundit të sintaksës së re 430 00:18:19,300 --> 00:18:20,174 ne jemi duke shkuar për të mësuar. 431 00:18:20,174 --> 00:18:23,500 Të gjitha kjo do të thotë është adresa e një variable. 432 00:18:23,500 --> 00:18:25,070 Në çfarë adresa e x jetojnë? 433 00:18:25,070 --> 00:18:26,510 Por ajo që adresa e y jetojnë? 434 00:18:26,510 --> 00:18:28,700 Sepse në qoftë se Problemi themelor para 435 00:18:28,700 --> 00:18:32,970 u se x dhe y janë duke kaluar si kopje, ajo që ne me të vërtetë duan të bëjnë 436 00:18:32,970 --> 00:18:38,780 është të sigurojë Swap me si një thesar Harta që çon në ku x dhe y në fakt 437 00:18:38,780 --> 00:18:41,910 janë në RAM, kështu që Swap mund të ndiqni këtë hartë 438 00:18:41,910 --> 00:18:47,760 dhe shkoni për të kudo x apo y shënon vend dhe për të ndryshuar vlerat aktuale 1 dhe 2 439 00:18:47,760 --> 00:18:48,270 atje. 440 00:18:48,270 --> 00:18:50,710 >> Pra Swap duhet të ndryshojë pak shumë. 441 00:18:50,710 --> 00:18:53,760 Dhe në shikim të parë, kjo mund të të duket e ngjashme pak me yll char. 442 00:18:53,760 --> 00:18:54,850 Dhe në të vërtetë është. 443 00:18:54,850 --> 00:18:59,635 Pra, a është një tregues për çfarë lloji i të dhënave, bazuar në këtë pjesë të theksuar? 444 00:18:59,635 --> 00:19:00,810 445 00:19:00,810 --> 00:19:01,620 Pra, kjo është një int. 446 00:19:01,620 --> 00:19:04,880 >> Pra, a nuk është më një int, kjo është adresa e një int. 447 00:19:04,880 --> 00:19:07,910 Dhe në mënyrë të ngjashme, b është tani duke shkuar të jetë adresa e një int. 448 00:19:07,910 --> 00:19:12,470 Pra, kur Unë tani e quajnë Swap nga faqja kryesore, Unë nuk jam duke shkuar për të dhënë bie në ujdi 1 dhe 2. 449 00:19:12,470 --> 00:19:15,540 Unë jam duke shkuar për të dhënë atë si Dem-diçka dhe dem-diçka, 450 00:19:15,540 --> 00:19:19,820 dy adresat që do të çojnë Swap në vendet e tyre aktuale 451 00:19:19,820 --> 00:19:21,310 në kujtesën e kompjuterit tim. 452 00:19:21,310 --> 00:19:25,580 >> Deri tani, zbatimi im mbetur duhet të ndryshojë një fëmijë. 453 00:19:25,580 --> 00:19:28,650 Çfarë është padyshim e ndryshme tani në këto tre rreshta të kodit? 454 00:19:28,650 --> 00:19:31,350 Ka këto yje mallkuar të gjithë vendin, të gjithë të drejtë? 455 00:19:31,350 --> 00:19:33,014 Pra, çfarë po ndodh këtu? 456 00:19:33,014 --> 00:19:33,514 Po? 457 00:19:33,514 --> 00:19:35,055 >> Audienca: Është e qartë [padëgjueshme]. 458 00:19:35,055 --> 00:19:36,832 459 00:19:36,832 --> 00:19:37,990 >> DAVID J. Malan: Pikërisht. 460 00:19:37,990 --> 00:19:41,560 Pra, në këtë context-- dhe kjo nuk ishte e vendimi më i mirë dizajn, pa dyshim, 461 00:19:41,560 --> 00:19:42,530 vjet më parë. 462 00:19:42,530 --> 00:19:45,110 Në këtë kontekst, ku ju vetëm duhet një yll, 463 00:19:45,110 --> 00:19:48,240 dhe ju nuk keni një lloj të dhënave, si int, menjëherë në të majtë, 464 00:19:48,240 --> 00:19:53,146 në vend të kësaj ju keni një shenjë të barabartë, në mënyrë të qartë, në këtë kontekst, kur ju thoni yll a, 465 00:19:53,146 --> 00:19:56,980 që do të thotë të shkojnë në Adresa e kjo është në një. 466 00:19:56,980 --> 00:19:58,870 Ndiqni hartë e thesarit, kështu që të flasin. 467 00:19:58,870 --> 00:20:01,720 >> Dhe ndërkohë, në përputhje 37, kjo do të thotë të njëjtën gjë. 468 00:20:01,720 --> 00:20:05,460 Shko tek adresa në a, dhe e vënë atë atje? 469 00:20:05,460 --> 00:20:09,520 Çfarëdo që është në vend që b specifikon. 470 00:20:09,520 --> 00:20:10,980 Me fjalë të tjera, të shkojnë për të b. 471 00:20:10,980 --> 00:20:12,130 Merrni atë vlerë. 472 00:20:12,130 --> 00:20:15,620 Shkoni në një dhe, per barabartë nënshkruajë, operatori detyra, 473 00:20:15,620 --> 00:20:17,010 vënë atë vlerë atje. 474 00:20:17,010 --> 00:20:19,272 >> Në mënyrë të ngjashme, int temp është vetëm një int. 475 00:20:19,272 --> 00:20:20,730 Asgjë nuk duhet të ndryshojë në lidhje me temp. 476 00:20:20,730 --> 00:20:24,810 Është vetëm një gotë rezervë nga Annenberg për disa qumësht ose lëng portokalli. 477 00:20:24,810 --> 00:20:27,630 Por unë duhet të them, të shkojnë në b. 478 00:20:27,630 --> 00:20:31,449 Shko në atë destinacion dhe vënë vlerën në temp atje. 479 00:20:31,449 --> 00:20:32,490 Pra, çfarë po ndodh më pas? 480 00:20:32,490 --> 00:20:36,540 Kur unë në fakt e quajnë Swap këtë kohë, në qoftë se kjo tabaka e parë këtu përfaqëson Main, 481 00:20:36,540 --> 00:20:42,270 kjo tabaka dytë paraqet Swap, kur Unë kalojë simbol x dhe y ampersand 482 00:20:42,270 --> 00:20:47,150 nga Main në Swap, vetëm të jetë i qartë, çfarë është kjo rafte kornizë pranues? 483 00:20:47,150 --> 00:20:48,700 484 00:20:48,700 --> 00:20:49,200 Po? 485 00:20:49,200 --> 00:20:50,180 >> Audienca: [padëgjueshme]. 486 00:20:50,180 --> 00:20:51,180 DAVID J. Malan: Pikërisht. 487 00:20:51,180 --> 00:20:53,129 Adresa e x dhe adresa e y. 488 00:20:53,129 --> 00:20:55,170 Dhe ju mund të mendoni për këto si adresat postare. 489 00:20:55,170 --> 00:20:58,772 33 Oxford Street dhe 35 Oxford Street, dhe ju 490 00:20:58,772 --> 00:21:01,230 duan të lëvizin të dy ndërtesave që janë në ato vende. 491 00:21:01,230 --> 00:21:04,680 >> Kjo është lloj i një ide qesharake, por kjo është e gjitha ne do të thotë nga adresë. 492 00:21:04,680 --> 00:21:07,000 Ku në botë mund të ju gjeni këto dy Ints? 493 00:21:07,000 --> 00:21:09,470 Ku në botë mund të ju gjeni ato dy ndërtesa? 494 00:21:09,470 --> 00:21:15,170 Pra, nëse më në fund, pas gjithë kësaj kohe unë shkojnë në kodin e sotme burim dhe të përpilojnë 495 00:21:15,170 --> 00:21:22,110 Swap dhe drejtuar ./swap, më në fund, për hera e parë që ne në fakt shohim se 496 00:21:22,110 --> 00:21:25,330 vlerat e mia kanë me të vërtetë janë swapped sukses. 497 00:21:25,330 --> 00:21:30,860 Dhe tani, ne edhe mund të marrë Shënimi i kësaj në, të themi, Gdb. 498 00:21:30,860 --> 00:21:32,740 >> Pra më lejoni të shkoj në të njëjtin skedar. 499 00:21:32,740 --> 00:21:35,010 Më lejoni të shkojnë përpara dhe të drejtuar gdb e ./swap. 500 00:21:35,010 --> 00:21:36,590 501 00:21:36,590 --> 00:21:40,547 Dhe tani, në Swap, unë jam duke shkuar për të shkuar përpara dhe të vendosur një pikë pushim në Main. 502 00:21:40,547 --> 00:21:42,630 Dhe tani unë jam duke shkuar për të shkuar përpara dhe të drejtuar programin. 503 00:21:42,630 --> 00:21:45,810 Dhe tani ne shohim kodin tim ndaluar në atë linjë. 504 00:21:45,810 --> 00:21:48,330 >> Nëse unë të shkojnë përpara dhe të shtypura x, çfarë duhet të shoh këtu? 505 00:21:48,330 --> 00:21:49,314 506 00:21:49,314 --> 00:21:49,980 Kjo është një pyetje. 507 00:21:49,980 --> 00:21:51,030 508 00:21:51,030 --> 00:21:51,530 Thuaj përsëri? 509 00:21:51,530 --> 00:21:52,295 >> Audienca: [padëgjueshme]. 510 00:21:52,295 --> 00:21:53,910 >> DAVID J. Malan: Pra numrat e rastit, ndoshta. 511 00:21:53,910 --> 00:21:56,010 Ndoshta unë të marrë me fat, dhe kjo është bukur dhe të thjeshtë, si 0. 512 00:21:56,010 --> 00:21:57,230 Por ndoshta kjo është ndonjë numër të rastit. 513 00:21:57,230 --> 00:21:58,090 Në këtë rast, unë kam fat. 514 00:21:58,090 --> 00:21:59,030 Ajo vetëm ndodh të jetë 0. 515 00:21:59,030 --> 00:22:00,780 Por kjo është me të vërtetë fat, sepse jo deri sa unë 516 00:22:00,780 --> 00:22:06,280 lloji tjetër dhe pastaj të shtypura x ka se linjë e kodit, linjë 19, janë ekzekutuar. 517 00:22:06,280 --> 00:22:10,942 >> Ndërkohë, në qoftë se unë lloji tjetër përsëri, dhe tani të shtypura nga y, unë jam duke shkuar për të parë 2. 518 00:22:10,942 --> 00:22:13,900 Tani, në qoftë se unë lloji tjetër, ajo do të të marrë një pak konfuze, sepse tani, 519 00:22:13,900 --> 00:22:17,250 printf do të shfaqen në ekran, ashtu siç bëri. x është 1. 520 00:22:17,250 --> 00:22:18,606 >> Le të bëjë këtë përsëri. 521 00:22:18,606 --> 00:22:20,480 Dhe tani, ja ku gjërat interesante. 522 00:22:20,480 --> 00:22:21,580 523 00:22:21,580 --> 00:22:26,580 Para se të telefononi Swap ose edhe hapin në të, le të marrin një vështrim të vogël. 524 00:22:26,580 --> 00:22:28,980 x është, përsëri, 1. 525 00:22:28,980 --> 00:22:33,240 Y është, natyrisht, mendje e shëndoshë të shpejtë kontrolloni, 2, jo aq shumë atje. 526 00:22:33,240 --> 00:22:35,740 Por ajo që është simbol x? 527 00:22:35,740 --> 00:22:36,760 528 00:22:36,760 --> 00:22:39,350 Përgjigje, kjo është lloj i shokuar në kërkim. 529 00:22:39,350 --> 00:22:43,500 Por ylli int në kllapa është vetëm mënyrë e PKB-së e duke thënë se kjo është një adresë. 530 00:22:43,500 --> 00:22:48,290 Kjo nuk është një int, kjo është një tregues për një int, ose i njohur ndryshe si një adresë. 531 00:22:48,290 --> 00:22:49,742 >> Çfarë është kjo gjë i çmendur? 532 00:22:49,742 --> 00:22:51,825 Ne kurrë nuk kam parë diçka të krejt si kjo para. 533 00:22:51,825 --> 00:22:53,650 534 00:22:53,650 --> 00:22:58,120 Pra, kjo është adresa në të kompjuterit tim Kujtim të ku x ndodh të jetojnë. 535 00:22:58,120 --> 00:22:59,040 Është dem-diçka. 536 00:22:59,040 --> 00:23:01,290 Dhe kjo është, sinqerisht, pse Unë kam filluar vizatim shigjeta, 537 00:23:01,290 --> 00:23:03,340 në vend të numrave, pasi që me të vërtetë kujdeset 538 00:23:03,340 --> 00:23:06,890 se int juaj është në një të veçantë Adresa e kjo është që e madhe. 539 00:23:06,890 --> 00:23:12,160 Por bffff0c4, këto janë të gjitha vërtetë shifra hexadecimal, 540 00:23:12,160 --> 00:23:13,720 cilat janë 0 deri f. 541 00:23:13,720 --> 00:23:16,590 >> Pra, ne nuk do të ndalem shumë kohë të gjatë në atë që këto gjëra janë. 542 00:23:16,590 --> 00:23:19,400 Por në qoftë se unë të shtypura nga y, natyrisht, e shoh 2. 543 00:23:19,400 --> 00:23:22,440 Por y simbol, unë shoh këtë adresë. 544 00:23:22,440 --> 00:23:26,527 Dhe vini re, për kurioz, sa larg jeni x dhe y? 545 00:23:26,527 --> 00:23:27,985 Ju mund të injorojë më të adresën. 546 00:23:27,985 --> 00:23:29,330 547 00:23:29,330 --> 00:23:29,920 Katër bytes. 548 00:23:29,920 --> 00:23:33,510 Dhe kjo është në përputhje me tonë më parë pretendojnë se sa e madhe është një int? 549 00:23:33,510 --> 00:23:34,130 Katër bytes. 550 00:23:34,130 --> 00:23:37,420 Pra, duket si rreshtim çdo gjë është deri bukur, si ju mund të shpresojnë, në kujtesë. 551 00:23:37,420 --> 00:23:40,010 >> Deri tani, le të vetëm të shpejtë përpara deri në fund të kësaj historie. 552 00:23:40,010 --> 00:23:43,290 Le të shkojnë përpara dhe të shkruani hap, të zhyten në funksion Swap. 553 00:23:43,290 --> 00:23:46,880 Tani vini re, në qoftë se unë lloji një, është e identike adrese te x. 554 00:23:46,880 --> 00:23:52,130 Nëse unë lloji b, është e njëjtë në adresën e y. 555 00:23:52,130 --> 00:23:57,020 Pra, çfarë duhet të shohim nëse unë thonë, shkoni në adresën e një? 556 00:23:57,020 --> 00:23:58,120 Pra, të shtypura yll a. 557 00:23:58,120 --> 00:24:00,130 Pra yll do të thotë të shkojnë atje, në këtë kontekst. 558 00:24:00,130 --> 00:24:02,730 Simbol do të thotë ajo që është adresa e. 559 00:24:02,730 --> 00:24:05,000 Pra yll një mjet 1. 560 00:24:05,000 --> 00:24:09,590 Dhe yll print b jep mua 2. 561 00:24:09,590 --> 00:24:15,750 >> Dhe më lejoni të supozojmë, për momentin, që të paktën kodi që 562 00:24:15,750 --> 00:24:18,950 vazhdon të ekzekutuar tani mund të jenë të arsyetuar nëpërmjet në këtë mënyrë. 563 00:24:18,950 --> 00:24:21,150 Por ne do të rishqyrtojnë këtë ide para se të gjatë. 564 00:24:21,150 --> 00:24:23,850 Pra, ky version i Swap tani është e saktë dhe lejon 565 00:24:23,850 --> 00:24:26,650 ne që të bie në ujdi këtë lloj të veçantë të dhënave. 566 00:24:26,650 --> 00:24:29,120 >> Pra, ndonjë pyetje atëherë në Swap? 567 00:24:29,120 --> 00:24:29,890 Në yll? 568 00:24:29,890 --> 00:24:30,690 Në adresën e? 569 00:24:30,690 --> 00:24:33,270 Dhe ju do të shihni, me Problemi vendosur 4, lloj, 570 00:24:33,270 --> 00:24:37,310 por problemi vendosur 5, patjetër, se si këto gjërat janë të dobishme dhe për të marrë shumë më tepër 571 00:24:37,310 --> 00:24:39,584 rehat me ta, si rezultat i kësaj. 572 00:24:39,584 --> 00:24:40,430 Çdo gjë në të gjitha? 573 00:24:40,430 --> 00:24:40,930 Të gjithë të drejtë. 574 00:24:40,930 --> 00:24:44,350 Pra malloc është, përsëri, ky funksion se vetëm ndan kujtesës, e kujtesës 575 00:24:44,350 --> 00:24:45,330 Alokimi. 576 00:24:45,330 --> 00:24:47,024 Dhe pse është kjo e dobishme? 577 00:24:47,024 --> 00:24:48,940 E pra, të gjithë këtë kohë, ju keni qenë duke përdorur malloc. 578 00:24:48,940 --> 00:24:52,230 Nëse ju e konsideroni tani se si getString vepra, me sa duket, është e 579 00:24:52,230 --> 00:24:56,140 qenë duke kërkuar dikë për një copë të kujtesës, në çdo kohë nga llojet e përdoruesve një varg 580 00:24:56,140 --> 00:24:59,040 në, sepse ne me siguri nuk e di, si staf CS50, 581 00:24:59,040 --> 00:25:02,710 sa e madhe ato vargjet që njerëzit do të tipit mund të jetë. 582 00:25:02,710 --> 00:25:07,910 >> Pra, le të, për herë të parë, të fillojë të zhvishem mbrapa se si punon bibliotekës CS50, 583 00:25:07,910 --> 00:25:10,990 me anë të disa shembujve që do të na çojë atje. 584 00:25:10,990 --> 00:25:15,300 Pra, nëse unë të hapur gedit dhe të hapur scanf 0, 585 00:25:15,300 --> 00:25:17,055 ne jemi duke shkuar për të parë kodin e mëposhtëm. 586 00:25:17,055 --> 00:25:18,720 587 00:25:18,720 --> 00:25:23,530 Scanf 0, në dispozicion në faqen e internetit për sot, ka relativisht pak rreshta të kodit 588 00:25:23,530 --> 00:25:25,351 këtu, 14 me 20. 589 00:25:25,351 --> 00:25:26,600 Dhe le të shohim se çfarë ajo është duke bërë. 590 00:25:26,600 --> 00:25:28,920 Ajo deklaron një int, të quajtur x. 591 00:25:28,920 --> 00:25:30,850 Ai thotë diçka si, numri ju lutem. 592 00:25:30,850 --> 00:25:33,940 Dhe tani ajo thotë, scanf% i, dhe x. 593 00:25:33,940 --> 00:25:35,620 Pra, ka një bandë e gjëra të reja atje. 594 00:25:35,620 --> 00:25:38,420 >> Por scanf, ju lloj i mund të mendoni e si e kundërta e printf. 595 00:25:38,420 --> 00:25:40,090 printf, natyrisht, printime në ekran. 596 00:25:40,090 --> 00:25:44,410 lloj scanf i skanime nga përdoruesit e diçka keyboard ai ose ajo i ka shtypur. 597 00:25:44,410 --> 00:25:46,550 >> % I është vetëm si printf. 598 00:25:46,550 --> 00:25:49,410 Kjo do të thotë të presin përdoruesit të tipit një int. 599 00:25:49,410 --> 00:25:52,820 Dhe tani, pse mendoni se unë mund të jetë duke kaluar scanf & X? 600 00:25:52,820 --> 00:25:54,030 601 00:25:54,030 --> 00:25:57,770 Nëse qëllimi në jetën e scanf është për të marrë diçka nga përdoruesit, 602 00:25:57,770 --> 00:26:02,480 çfarë është kuptimi i duke kaluar atë, dhe x, tani? 603 00:26:02,480 --> 00:26:02,980 Po? 604 00:26:02,980 --> 00:26:03,896 >> Audienca: [padëgjueshme]. 605 00:26:03,896 --> 00:26:05,540 606 00:26:05,540 --> 00:26:06,540 DAVID J. Malan: Pikërisht. 607 00:26:06,540 --> 00:26:12,900 Çfarëdo që unë, njerëzore, shkruani, input tim do të jetë i shpëtuar në atë vend. 608 00:26:12,900 --> 00:26:17,660 Kjo nuk është e mjaftueshme, kujtojnë, të vetëm kalojë në x, sepse ne kemi parë tashmë, 609 00:26:17,660 --> 00:26:21,630 çdo herë që të kalojë vetëm një variabël të papërpunuara, si një int, në një funksion tjetër, 610 00:26:21,630 --> 00:26:25,640 i sigurt, ajo mund të ndryshojë që variabël, por jo përgjithmonë. 611 00:26:25,640 --> 00:26:27,360 Ajo nuk mund të ketë një efekt mbi Main. 612 00:26:27,360 --> 00:26:29,420 Ajo vetëm mund të ndryshojë kopjen e vet lokal. 613 00:26:29,420 --> 00:26:32,560 Por në qoftë se, në vend të kësaj, ju nuk e bëni më jep int aktuale, 614 00:26:32,560 --> 00:26:36,640 por të më jepni udhëzime për se int, unë tani, duke qenë scanf, 615 00:26:36,640 --> 00:26:41,050 me siguri, unë mund të ndiqni se adresuar dhe të vënë një numër atje 616 00:26:41,050 --> 00:26:43,280 kështu që ju keni qasje në atë si të mirë. 617 00:26:43,280 --> 00:26:45,120 >> Pra, kur unë të drejtuar këtë program, le të shohim. 618 00:26:45,120 --> 00:26:49,660 Bëni scanf 0 dot plagë, scanf 0. 619 00:26:49,660 --> 00:26:54,030 Dhe në qoftë se unë tani shkruani një numër si 50, faleminderit për 50. 620 00:26:54,030 --> 00:26:58,150 Nëse unë tani shkruani një numër si negative 1, per negativ 1. 621 00:26:58,150 --> 00:27:04,200 Tani shtypni një numër si 1.5, hm. 622 00:27:04,200 --> 00:27:06,030 Pse programi im injorojë mua? 623 00:27:06,030 --> 00:27:07,300 624 00:27:07,300 --> 00:27:09,880 E pra, sepse thjesht, i thashë ajo për të presin një int vetëm. 625 00:27:09,880 --> 00:27:10,380 Të gjithë të drejtë. 626 00:27:10,380 --> 00:27:11,630 Pra, kjo është një version i këtij. 627 00:27:11,630 --> 00:27:16,600 Le të marrin gjërat një nivel dhe propozojmë që kjo nuk është e mirë. 628 00:27:16,600 --> 00:27:20,530 Dhe këtu qëndron një shembull shumë të thjeshtë se si ne mund të fillojë kodin e shkrimit 629 00:27:20,530 --> 00:27:24,450 që njerëzit e tjerë mund të shfrytëzojnë ose kompromis duke bërë gjëra të këqija. 630 00:27:24,450 --> 00:27:28,336 Pra linjë 16, në mënyrë të ngjashme në frymë të para, 631 00:27:28,336 --> 00:27:29,960 por unë nuk jam deklaruar se int këtë kohë. 632 00:27:29,960 --> 00:27:32,970 Unë jam deklaruar atë char yll, aka string. 633 00:27:32,970 --> 00:27:35,190 >> Por çfarë do që me të vërtetë do të thotë? 634 00:27:35,190 --> 00:27:38,790 Pra, në qoftë se unë nuk e specifikon një address-- dhe Unë jam duke e quajtur atë në mënyrë arbitrare, tampon, 635 00:27:38,790 --> 00:27:43,370 por unë mund të telefononi ajo s, të jetë simple-- dhe pastaj të bëj këtë, të shpjegojë për mua, 636 00:27:43,370 --> 00:27:48,630 në qoftë se ju mund të, në bazë të mëparshme logjikë, ajo që është scanf bërë në përputhje 18, 637 00:27:48,630 --> 00:27:55,000 nëse kalojnë% s dhe buffer, cila është një adresë? 638 00:27:55,000 --> 00:27:58,210 Çfarë është scanf, në qoftë se ju aplikoni njëjta logjikë e saktë si version 0, 639 00:27:58,210 --> 00:28:00,640 do të përpiqen për të bërë këtu, kur lloje përdorues në diçka? 640 00:28:00,640 --> 00:28:02,630 641 00:28:02,630 --> 00:28:03,409 Po? 642 00:28:03,409 --> 00:28:04,407 >> Audienca: [padëgjueshme]. 643 00:28:04,407 --> 00:28:07,401 644 00:28:07,401 --> 00:28:08,890 >> DAVID J. Malan: Pikërisht. 645 00:28:08,890 --> 00:28:11,577 Scanf, nga logjika më parë, do të marrë string 646 00:28:11,577 --> 00:28:13,410 që të shtypur e njeriut in-- kjo është tani një varg, 647 00:28:13,410 --> 00:28:15,790 kjo nuk është një numër, me sa duket, në qoftë se ai ose ajo cooperates-- 648 00:28:15,790 --> 00:28:19,310 dhe ajo do të përpiqet për të vënë që string në kujtim në çfarëdo adresën 649 00:28:19,310 --> 00:28:20,340 tampon specifikon. 650 00:28:20,340 --> 00:28:23,870 Dhe kjo është e madhe, sepse tampon është me të vërtetë qëllim që të jetë një adresë. 651 00:28:23,870 --> 00:28:30,470 >> Por unë pretendojnë ky program është buggy në një mënyrë shumë serioze, sepse atë vlerë të 652 00:28:30,470 --> 00:28:31,330 tampon nga default? 653 00:28:31,330 --> 00:28:33,380 654 00:28:33,380 --> 00:28:34,790 Çfarë kam nisur në? 655 00:28:34,790 --> 00:28:35,770 Çfarë copë e kujtesës? 656 00:28:35,770 --> 00:28:37,480 657 00:28:37,480 --> 00:28:38,620 Unë nuk e kanë, apo jo? 658 00:28:38,620 --> 00:28:42,265 >> Pra, edhe pse unë kam ndarë një yll char që nuk quhet s, 659 00:28:42,265 --> 00:28:48,030 është quajtur në vend të kësaj, buffer-- kështu le të nxjerrë emrin e ndryshueshme të 660 00:28:48,030 --> 00:28:53,380 tani si buffer-- në qoftë se unë nuk kanë quajtur getString ose malloc këtu, 661 00:28:53,380 --> 00:28:56,030 që në mënyrë efektive do të thotë se tampon është vetëm disa vlera e mbeturinave. 662 00:28:56,030 --> 00:28:57,030 >> Tani çfarë do të thotë kjo? 663 00:28:57,030 --> 00:29:00,220 Kjo do të thotë se unë kam thënë scanf të presin një varg nga përdoruesit. 664 00:29:00,220 --> 00:29:01,300 Dhe ju e dini se çfarë? 665 00:29:01,300 --> 00:29:03,883 Çfarëdo që kjo gjë është duke treguar to-- dhe kam nxjerrë pikëpyetje, 666 00:29:03,883 --> 00:29:07,060 por në realitet, ajo do të jetë e diçka si OX1, 2, 3, apo jo? 667 00:29:07,060 --> 00:29:10,730 Është disa vlera fals që vetëm ndodh të jetë atje para. 668 00:29:10,730 --> 00:29:13,440 Pra, thënë ndryshe, kjo është sikur buffer është vetëm 669 00:29:13,440 --> 00:29:16,180 duke treguar diçka në kujtesë. 670 00:29:16,180 --> 00:29:17,610 Unë nuk kam asnjë ide se çfarë. 671 00:29:17,610 --> 00:29:24,130 >> Pra, nëse unë lloji në Gabe tani, ajo do në përpjekje për të vënë g-a-b-e / 0 atje. 672 00:29:24,130 --> 00:29:25,530 Por kush e di se çka është? 673 00:29:25,530 --> 00:29:27,480 Dhe në të kaluarën, çdo herë ne kemi provuar për të prekur 674 00:29:27,480 --> 00:29:29,770 kujtesës që nuk i përket për ne, çfarë ka ndodhur? 675 00:29:29,770 --> 00:29:31,020 676 00:29:31,020 --> 00:29:32,870 Ose pothuajse çdo herë. 677 00:29:32,870 --> 00:29:34,310 Faji segmentimit, e drejtë? 678 00:29:34,310 --> 00:29:37,829 >> Kjo shigjetë, unë nuk kam asnjë ide se ku është e treguar. kjo është vetëm disa vlera të rastit. 679 00:29:37,829 --> 00:29:40,370 Dhe sigurisht, në qoftë se ju të interpretuar një vlerë të rastit si një adresë, 680 00:29:40,370 --> 00:29:42,610 ju jeni do të shkojnë në disa destinacion të rastit. 681 00:29:42,610 --> 00:29:46,810 Pra Gabe mund të vërtetë përplasje Programi im në këtë rast këtu. 682 00:29:46,810 --> 00:29:50,600 >> Pra, çfarë mund të bëjmë që është pothuajse aq e keqe? 683 00:29:50,600 --> 00:29:52,660 Konsideroni këtë e tretë dhe Shembulli i fundit i scanf. 684 00:29:52,660 --> 00:29:53,890 685 00:29:53,890 --> 00:29:56,870 Ky version është më e mirë në çfarë kuptimi? 686 00:29:56,870 --> 00:29:57,990 687 00:29:57,990 --> 00:30:01,400 Nëse ju jeni të kënaqur me Problemi i mëparshëm, kjo është më e mirë. 688 00:30:01,400 --> 00:30:02,250 Pse? 689 00:30:02,250 --> 00:30:03,250 >> Audienca: [padëgjueshme]. 690 00:30:03,250 --> 00:30:06,235 691 00:30:06,235 --> 00:30:07,110 DAVID J. Malan: Mirë. 692 00:30:07,110 --> 00:30:09,970 Pra ky rast i linjës 16 është më e mirë, në kuptimin 693 00:30:09,970 --> 00:30:12,030 se ne jemi në mënyrë të qartë caktimin e disa kujtesës. 694 00:30:12,030 --> 00:30:14,190 Ne nuk jemi duke përdorur malloc, ne jemi duke përdorur java 2 695 00:30:14,190 --> 00:30:16,060 Qasja e vetëm të deklaruar një grup. 696 00:30:16,060 --> 00:30:18,130 Dhe ne kemi thënë më parë se një varg është vetëm një grup të karaktereve, 697 00:30:18,130 --> 00:30:19,690 kështu që kjo është krejtësisht e ligjshme. 698 00:30:19,690 --> 00:30:22,910 Por kjo është, sigurisht, si ju vini re, madhësi të caktuar, 16. 699 00:30:22,910 --> 00:30:25,440 >> Pra, ky program është krejtësisht e sigurt, nëse unë lloji 700 00:30:25,440 --> 00:30:29,760 në vargjet një karakter, dy karakter vargjet, 15 vargjet karakter. 701 00:30:29,760 --> 00:30:34,970 Por sa më shpejt që unë të fillojë shtypur 16, 17, 18, 1000 vargjet karakter, 702 00:30:34,970 --> 00:30:37,390 ku është se varg do të përfundojë? 703 00:30:37,390 --> 00:30:39,570 Ajo do të përfundojnë pjesërisht këtu. 704 00:30:39,570 --> 00:30:42,820 Por pastaj kush e di çfarë tjetër është përtej kufijve 705 00:30:42,820 --> 00:30:44,270 i këtij grup të veçantë? 706 00:30:44,270 --> 00:30:48,015 >> Është sikur unë kam deklaroi 16 kuti këtu. 707 00:30:48,015 --> 00:30:49,300 708 00:30:49,300 --> 00:30:52,690 Pra, në vend se të nxjerrë nga të gjitha 16, ne do të vetëm pretendojë se unë kam tërhequr 16. 709 00:30:52,690 --> 00:30:56,540 Por në qoftë se unë pastaj të përpiqet për të lexuar një varg kjo është shumë më e gjatë, si 50 karaktere, 710 00:30:56,540 --> 00:31:01,270 Unë jam duke shkuar për të filluar vënien a, b, c, d, x, y, z. 711 00:31:01,270 --> 00:31:04,916 Dhe kjo është me sa duket disa segment të tjera kujtesës 712 00:31:04,916 --> 00:31:06,790 që, përsëri, mund të shkaktojë Programi im për të rrëzuar, 713 00:31:06,790 --> 00:31:10,600 sepse unë nuk e kam kërkuar asgjë më shumë se vetëm 16 bytes. 714 00:31:10,600 --> 00:31:12,260 >> Pra, kush kujdeset? 715 00:31:12,260 --> 00:31:13,880 E pra, këtu është biblioteka CS50. 716 00:31:13,880 --> 00:31:17,220 Dhe shumica e kjo është vetëm si udhëzime deri krye. 717 00:31:17,220 --> 00:31:21,670 Biblioteka CS50, të gjithë këtë kohë, ka pasur këtë linjë në linjë 52. 718 00:31:21,670 --> 00:31:23,680 Ne e kemi parë typedef, ose ju do të shihni typedef 719 00:31:23,680 --> 00:31:27,930 në pset 4, e cila vetëm krijon një sinonim ku yll char mund të jenë më të 720 00:31:27,930 --> 00:31:29,290 thjesht të referuara si string. 721 00:31:29,290 --> 00:31:31,540 Pra, kjo është një nga disa rrota trajnimit 722 00:31:31,540 --> 00:31:34,120 ne kemi përdorur në mënyrë të fshehtë nën kapuç. 723 00:31:34,120 --> 00:31:36,490 >> Ndërkohë, këtu është funksioni, getchar. 724 00:31:36,490 --> 00:31:38,190 Tani me sa duket, nuk ka asnjë organ të tij. 725 00:31:38,190 --> 00:31:40,273 Dhe në fakt, në qoftë se unë mbaj scrolling, unë nuk e bëj të vërtetë 726 00:31:40,273 --> 00:31:42,080 shohin ndonjë Implementimi e këtyre funksioneve. 727 00:31:42,080 --> 00:31:43,140 728 00:31:43,140 --> 00:31:45,516 Si një kontroll mendje e shëndoshë, pse është se? 729 00:31:45,516 --> 00:31:46,795 >> Audienca: [padëgjueshme]. 730 00:31:46,795 --> 00:31:47,670 DAVID J. Malan: Po. 731 00:31:47,670 --> 00:31:48,950 Pra, kjo është header fotografi. 732 00:31:48,950 --> 00:31:52,520 Dhe header fotografi përmbajnë prototipe, plus disa sende të tjera, me sa duket, 733 00:31:52,520 --> 00:31:53,780 si typedefs. 734 00:31:53,780 --> 00:31:56,910 Por në CS50.c, të cilat ne kemi nuk ju dhënë të drejta të plota, 735 00:31:56,910 --> 00:32:02,100 por ka qenë në aplikim CS50 gjithë këtë herë, thellë brenda e dosjeve të saj, 736 00:32:02,100 --> 00:32:04,990 vini re se ka një të tërë bandë e funksioneve në këtu. 737 00:32:04,990 --> 00:32:06,720 >> Në fakt, le të lëvizni poshtë. 738 00:32:06,720 --> 00:32:08,810 Le të injorojnë shumica e tyre, tani për tani. 739 00:32:08,810 --> 00:32:12,670 Por lëviz nëpër getInt dhe të shohim se si punon getInt. 740 00:32:12,670 --> 00:32:13,890 Kështu që këtu është getInt. 741 00:32:13,890 --> 00:32:17,727 Dhe nëse ndonjëherë me të vërtetë kujdeset se si të merrni int punon, këtu është dokumentacioni i saj. 742 00:32:17,727 --> 00:32:19,560 Dhe në mesin e gjërave ajo thotë se është ajo ju tregon 743 00:32:19,560 --> 00:32:21,340 çfarë shkon e vlerave që mund të kthehen. 744 00:32:21,340 --> 00:32:24,400 Kjo është në thelb negativ 2 miliard në 2 miliardë pozitiv, të japë ose të marrë. 745 00:32:24,400 --> 00:32:26,420 >> Dhe kjo rezulton, e gjithë kjo kohë, edhe pse ne kurrë nuk kemi 746 00:32:26,420 --> 00:32:28,570 kishte të kontrolloni për të, nëse diçka shkon keq, 747 00:32:28,570 --> 00:32:30,680 rezulton se të gjitha këtë herë, getInt ka 748 00:32:30,680 --> 00:32:33,600 janë kthyer një të veçantë konstante, nuk null, 749 00:32:33,600 --> 00:32:36,760 por int_max, e cila është Konventa vetëm një programues-së. 750 00:32:36,760 --> 00:32:38,846 Kjo do të thotë këtu është një vlerë të veçantë. 751 00:32:38,846 --> 00:32:41,470 Sigurohuni që të kontrolloni për këtë, vetëm në rast se diçka shkon keq. 752 00:32:41,470 --> 00:32:43,261 Por ne kurrë nuk kam shqetësuar me se deri më sot, 753 00:32:43,261 --> 00:32:45,200 sepse përsëri, kjo ka për qëllim për të lehtësuar. 754 00:32:45,200 --> 00:32:46,950 >> Por si e bën getInt të zbatohet? 755 00:32:46,950 --> 00:32:48,450 E pra, e, ajo merr nuk ka argumente. 756 00:32:48,450 --> 00:32:49,390 Ne e dimë se. 757 00:32:49,390 --> 00:32:50,820 Ajo kthehet një int. 758 00:32:50,820 --> 00:32:51,950 Ne e dimë se. 759 00:32:51,950 --> 00:32:54,460 Pra, si e bën këtë punë nën kapuç? 760 00:32:54,460 --> 00:32:58,290 >> Pra, nuk ka me sa duket një pafund loop, të paktën pamja e një. 761 00:32:58,290 --> 00:33:00,290 Vini re se ne jemi duke përdorur getString. 762 00:33:00,290 --> 00:33:04,000 Pra, kjo është interesante. getInt e quan vetë funksioni ynë, getString. 763 00:33:04,000 --> 00:33:05,645 Dhe tani pse mund të jetë ky rast? 764 00:33:05,645 --> 00:33:07,400 765 00:33:07,400 --> 00:33:09,842 Pse jam unë duke qenë mbrojtëse këtu në linjë 165? 766 00:33:09,842 --> 00:33:11,390 767 00:33:11,390 --> 00:33:15,639 Çfarë mund të ndodhë në linjë 164, vetëm të jetë i qartë? 768 00:33:15,639 --> 00:33:16,930 Është e njëjta përgjigje si më parë. 769 00:33:16,930 --> 00:33:18,660 770 00:33:18,660 --> 00:33:20,089 Mund të jetë vetëm jashtë kujtesës. 771 00:33:20,089 --> 00:33:23,130 Diçka shkon keq me getString, ne kemi marrë të jetë në gjendje për të trajtuar atë. 772 00:33:23,130 --> 00:33:27,070 Dhe arsyeja nuk kthehen null është se, teknikisht, null është një akrep. 773 00:33:27,070 --> 00:33:29,120 getInt ka për t'u kthyer një int. 774 00:33:29,120 --> 00:33:31,060 Kështu që unë kam në mënyrë arbitrare vendosi, në thelb, 775 00:33:31,060 --> 00:33:34,600 se 2 miliardë, të japë ose të marrë, do të jetë një vlerë të veçantë që unë kurrë nuk mund të 776 00:33:34,600 --> 00:33:35,970 në të vërtetë marrë nga përdoruesit. 777 00:33:35,970 --> 00:33:39,930 Është vetëm një vlerë e unë jam duke shkuar për të humbur për të përfaqësuar një kod gabimi. 778 00:33:39,930 --> 00:33:41,540 >> Deri tani, gjërat të marrë një dashuroj pak. 779 00:33:41,540 --> 00:33:44,670 Dhe kjo nuk është krejt njëjtë funksion si më parë, por është shumë e ngjashme. 780 00:33:44,670 --> 00:33:50,120 Pra vini re, unë deklaroj këtu, në përputhje 172, si një n int dhe një char c. 781 00:33:50,120 --> 00:33:53,600 Dhe pastaj unë e përdorin këtë linjë shokuar, sscanf, e cila rezulton 782 00:33:53,600 --> 00:33:55,990 nuk scan një varg nga tastierë. 783 00:33:55,990 --> 00:33:59,226 Ajo qëndron një varg ekzistuese që përdoruesi ka shtypur tashmë në. 784 00:33:59,226 --> 00:34:02,100 Kështu që unë tashmë e quajtur getString, e cila do të thotë unë kam një varg në kujtesën. 785 00:34:02,100 --> 00:34:05,020 sscanf është ajo që ju do të thërrasë një funksion parsing. 786 00:34:05,020 --> 00:34:07,760 Ajo duket në vargun e kam shtypur në, karakter nga karakteri, 787 00:34:07,760 --> 00:34:09,250 dhe bën diçka të dobishme. 788 00:34:09,250 --> 00:34:10,969 Ky varg është ruajtur në linjë. 789 00:34:10,969 --> 00:34:13,560 Dhe unë e di se vetëm duke shkuar mbështetur këtu dhe duke thënë, oh, OK, 790 00:34:13,560 --> 00:34:15,143 Unë e quajti atë nuk e këtë herë, por linja. 791 00:34:15,143 --> 00:34:15,989 792 00:34:15,989 --> 00:34:18,080 >> Dhe tani kjo është pak më ndryshe. 793 00:34:18,080 --> 00:34:22,480 Por kjo në mënyrë efektive do të thotë, për arsye ne do disi të tundë duart tona në sot, 794 00:34:22,480 --> 00:34:26,070 se ne jemi të kontrolluar të të parë nëse përdoruesi shtypur në 795 00:34:26,070 --> 00:34:29,909 dhe int dhe ndoshta një tjetër karakter. 796 00:34:29,909 --> 00:34:33,610 Nëse përdoruesi shtypur në një int, është e do të ruhen në n, sepse unë jam 797 00:34:33,610 --> 00:34:36,739 kalon këtë duke adresën, mashtrim i ri ne kemi parë sot. 798 00:34:36,739 --> 00:34:41,570 Nëse përdoruesi shtypur edhe në si 123x, se x 799 00:34:41,570 --> 00:34:45,060 do të përfundojë deri në letër në karakter c. 800 00:34:45,060 --> 00:34:48,739 >> Tani del se sscanf do të më thoni, inteligjente, 801 00:34:48,739 --> 00:34:54,750 sa variabla u sscanf sukses në gjendje për të mbushur. 802 00:34:54,750 --> 00:34:58,770 Pra, sipas kësaj logjike, nëse funksioni Unë jam i zbatimit është getInt, 803 00:34:58,770 --> 00:35:00,900 por unë jam duke kontrolluar, potencialisht, për përdoruesin 804 00:35:00,900 --> 00:35:04,190 që kanë shtypur në një int ndjekur nga diçka tjetër, 805 00:35:04,190 --> 00:35:08,580 çfarë unë dua sscanf-së Vlera e kthyer me të vërtetë në jetë? 806 00:35:08,580 --> 00:35:10,950 Nëse qëllimi është për të marrë vetëm një int nga përdoruesit? 807 00:35:10,950 --> 00:35:13,980 808 00:35:13,980 --> 00:35:19,300 >> Pra, nëse sscanf kthimit 2, çfarë do të thotë kjo? 809 00:35:19,300 --> 00:35:21,660 Përdorues shtypur në diçka si, fjalë për fjalë, 810 00:35:21,660 --> 00:35:24,770 123x, e cila është vetëm e pakuptimtë. 811 00:35:24,770 --> 00:35:27,490 Është një kusht gabim, dhe Unë dua për të kontrolluar për këtë. 812 00:35:27,490 --> 00:35:32,960 >> Pra, nëse llojet e përdoruesve këtë në, duke kjo logjikë, ajo që e bën sscanf kthehen, 813 00:35:32,960 --> 00:35:33,740 do të thoni? 814 00:35:33,740 --> 00:35:35,070 815 00:35:35,070 --> 00:35:39,130 Pra, ajo do të kthehet 2, sepse 123 do të shkojnë në këtu, 816 00:35:39,130 --> 00:35:41,580 dhe x do të përfundojë deri në këtu. 817 00:35:41,580 --> 00:35:43,970 Por unë nuk dua x për të marrë mbushur. 818 00:35:43,970 --> 00:35:48,580 Unë dua të sscanf të vetëm të ketë sukses në mbushjen e parë e variablave të saj. 819 00:35:48,580 --> 00:35:52,490 Dhe në mënyrë që është arsyeja pse unë duan sscanf të kthehen 1. 820 00:35:52,490 --> 00:35:55,750 >> Dhe në qoftë se kjo është pak mbi kokë për momentin, kjo është krejtësisht në rregull. 821 00:35:55,750 --> 00:36:00,030 Të kuptojë pse, se një nga vlerat e getInt dhe getString 822 00:36:00,030 --> 00:36:03,630 është se ne jemi duke bërë një dreq e një Shumë gabim kontrolluar si kjo në mënyrë 823 00:36:03,630 --> 00:36:07,130 se, deri më sot, ju mund të pretty much shkruani asgjë në tastierën tuaj, 824 00:36:07,130 --> 00:36:08,490 dhe ne do të kapur atë. 825 00:36:08,490 --> 00:36:10,592 Dhe ne me siguri, Stafi, definitivisht nuk do të 826 00:36:10,592 --> 00:36:13,300 të jetë burim i një bug në tuaj program, sepse ne jemi në mbrojtje 827 00:36:13,300 --> 00:36:16,270 kontrolluar për të gjithë budallenj gjëra që një përdorues mund të bëni, 828 00:36:16,270 --> 00:36:18,900 si shtypja e një varg, kur ju të vërtetë donte int. 829 00:36:18,900 --> 00:36:21,350 Pra, për now-- ne do të vijë përsëri në këtë para long-- 830 00:36:21,350 --> 00:36:23,710 por të gjithë këtë kohë, getString dhe getInt kanë 831 00:36:23,710 --> 00:36:29,950 qenë nën kapuç duke përdorur këtë Ideja themelore e adresave të kujtesës. 832 00:36:29,950 --> 00:36:32,580 >> Deri tani, le të bëjë gjëra pak më shumë përdorues-miqësor. 833 00:36:32,580 --> 00:36:38,740 Siç mund ta kujtoni, nga Binky fundit time-- nëse miu im do cooperate-- kështu 834 00:36:38,740 --> 00:36:42,560 kemi pasur këtë kod, i cili sinqerisht, është mjaft absurd. 835 00:36:42,560 --> 00:36:45,330 Ky kod arrin asgjë dobishme, por ishte shembulli 836 00:36:45,330 --> 00:36:48,330 se profesor Parlante përdoret në mënyrë të përfaqësojnë 837 00:36:48,330 --> 00:36:51,840 atë që po ndodhte në një Programi përfshin kujtesës. 838 00:36:51,840 --> 00:36:54,850 >> Pra, le të thotë prapë kjo Historia super shkurtimisht. 839 00:36:54,850 --> 00:36:58,720 Këto dy linja e parë, në Anglisht, e çfarë, do të thoni? 840 00:36:58,720 --> 00:37:01,230 841 00:37:01,230 --> 00:37:05,430 Vetëm në mënyrë të arsyeshme të njeriut, por pak termat teknike, të marrë një goditje me thikë. 842 00:37:05,430 --> 00:37:06,346 Audienca: [padëgjueshme]. 843 00:37:06,346 --> 00:37:07,705 844 00:37:07,705 --> 00:37:11,080 >> DAVID J. Malan: OK, ju jeni vendosjen Adresat për x tuaj dhe variablat y. 845 00:37:11,080 --> 00:37:15,520 Jo shumë, sepse x dhe y nuk janë Variablat në kuptimin tradicional. 846 00:37:15,520 --> 00:37:18,054 x dhe y janë adresat ose do të ruajtur adresën. 847 00:37:18,054 --> 00:37:19,220 Pra, le të provoni këtë një herë më shumë. 848 00:37:19,220 --> 00:37:21,010 Nuk është një fillim i keq, edhe pse. 849 00:37:21,010 --> 00:37:21,510 Po? 850 00:37:21,510 --> 00:37:22,426 >> Audienca: [padëgjueshme]. 851 00:37:22,426 --> 00:37:23,966 852 00:37:23,966 --> 00:37:24,840 DAVID J. Malan: Mirë. 853 00:37:24,840 --> 00:37:26,173 Unë mendoj se është një pastruese pak. 854 00:37:26,173 --> 00:37:28,630 Shpallja dy pointers, dy integers. 855 00:37:28,630 --> 00:37:30,150 Dhe ne jemi duke i quajtur ato x dhe y. 856 00:37:30,150 --> 00:37:32,790 Ose në qoftë se ne ishim për të nxjerrë këtë si një foto, përsëri, 857 00:37:32,790 --> 00:37:36,410 kujtojnë mjaft e thjeshtë që të gjithë ne jemi duke bërë me atë vijë të parë 858 00:37:36,410 --> 00:37:39,690 është duke tërhequr një kuti si kjo, me një vlerë të mbeturinave në të, 859 00:37:39,690 --> 00:37:41,920 dhe duke e quajtur atë x, dhe pastaj një tjetër kuti si kjo, 860 00:37:41,920 --> 00:37:43,880 me disa vlera e mbeturinave në të, duke e quajtur atë y. 861 00:37:43,880 --> 00:37:45,810 Ne kemi deklaruar dy pointers që në fund të fundit 862 00:37:45,810 --> 00:37:47,860 do të ruajtur adresën e një int. 863 00:37:47,860 --> 00:37:49,170 Pra, kjo është e gjitha atje. 864 00:37:49,170 --> 00:37:53,290 >> Pra, kur Binky bëri këtë, balta ashtu dukej si kjo. 865 00:37:53,290 --> 00:37:55,350 Dhe Nick vetëm lloji i përfundoi shigjetat, 866 00:37:55,350 --> 00:37:57,590 sikur ata nuk janë vënë kudo në mënyrë të veçantë, për shkak se ata janë vetëm 867 00:37:57,590 --> 00:37:58,250 Vlerat e plehrave. 868 00:37:58,250 --> 00:38:01,670 Ata nuk janë nisur në mënyrë të qartë kudo në veçanti. 869 00:38:01,670 --> 00:38:03,980 >> Tani linjë tjetër e Kodi, kujtojnë, ishte kjo. 870 00:38:03,980 --> 00:38:07,510 Pra, në mënyrë të arsyeshme në përdorim, por anglisht disi teknike, 871 00:38:07,510 --> 00:38:09,790 çfarë është kjo linjë e kodit duke bërë? 872 00:38:09,790 --> 00:38:10,391 Po? 873 00:38:10,391 --> 00:38:11,333 >> Audienca: [padëgjueshme]. 874 00:38:11,333 --> 00:38:12,746 875 00:38:12,746 --> 00:38:13,950 >> DAVID J. Malan: Perfect. 876 00:38:13,950 --> 00:38:17,016 Është shpërndarjen e copë e kujtesës që është madhësia e një int. 877 00:38:17,016 --> 00:38:18,140 Dhe kjo është gjysma përgjigje. 878 00:38:18,140 --> 00:38:20,056 Ju përgjigj të drejtën gjysma e shprehjes. 879 00:38:20,056 --> 00:38:22,473 Ajo që po ndodh në majtë anë e shenjë të barabartë? 880 00:38:22,473 --> 00:38:22,972 Po? 881 00:38:22,972 --> 00:38:24,814 Audienca: dhe cakton ajo te ndryshueshme X? 882 00:38:24,814 --> 00:38:27,690 >> DAVID J. Malan: dhe cakton ajo te ndryshueshme x. 883 00:38:27,690 --> 00:38:31,650 Pra, për radhitje, djathtë ndan anësore memorie të mjaftueshme për të ruajtur një int. 884 00:38:31,650 --> 00:38:34,150 Por malloc specifike kthen adresë 885 00:38:34,150 --> 00:38:37,270 i asaj copë e kujtesës, të cilat ju keni propozuar vetëm merr ruajtur në x. 886 00:38:37,270 --> 00:38:42,560 >> Pra, çfarë Nick e bëri për herë të fundit me Binky është ai zvarritur atë treguesin jashtë, balta, 887 00:38:42,560 --> 00:38:46,820 për pikë tani në një copë të bardhë të kujtesës që është e barabartë me madhësinë e një int. 888 00:38:46,820 --> 00:38:49,360 Dhe me të vërtetë, që është menduar për të përfaqësuar katër bytes. 889 00:38:49,360 --> 00:38:55,310 >> Tani, linja tjetër e kodit e bëri këtë, yll x merr 42. 890 00:38:55,310 --> 00:38:58,530 Pra, 42 është e drejtpërdrejtë në right-hand side, kuptimi i jetës. 891 00:38:58,530 --> 00:39:00,500 Left-hand side, yll x do të thotë çfarë? 892 00:39:00,500 --> 00:39:01,600 893 00:39:01,600 --> 00:39:03,280 Kjo shumë mund të ketë gone-- kjo është OK. 894 00:39:03,280 --> 00:39:04,220 OK. 895 00:39:04,220 --> 00:39:06,875 >> Audienca: Në thelb, shkoni në [e padëgjueshme] 896 00:39:06,875 --> 00:39:07,750 DAVID J. Malan: Mirë. 897 00:39:07,750 --> 00:39:08,760 Audienca: [padëgjueshme]. 898 00:39:08,760 --> 00:39:09,760 DAVID J. Malan: Pikërisht. 899 00:39:09,760 --> 00:39:11,979 Left-hand side do të thotë të shkojnë në x. 900 00:39:11,979 --> 00:39:12,520 x është adresa. 901 00:39:12,520 --> 00:39:15,520 Është si 33 Rruga e Oksfordit, ose OX1. 902 00:39:15,520 --> 00:39:18,690 Dhe yll x do të thotë të shkojnë në se adresuar dhe të vënë atë atje? 903 00:39:18,690 --> 00:39:19,520 42. 904 00:39:19,520 --> 00:39:21,290 >> Pra me të vërtetë, kjo është pikërisht ajo që bëri Nick. 905 00:39:21,290 --> 00:39:23,740 Ai filloi me Nga, në thelb, mendërisht 906 00:39:23,740 --> 00:39:26,270 duke treguar një gisht në x, pas shigjetë 907 00:39:26,270 --> 00:39:30,670 në kutinë e bardhë në të djathtë anë, dhe vënien e numrit 42 atje. 908 00:39:30,670 --> 00:39:34,120 Por pastaj gjërat mori një pak e rrezikshme, apo jo? 909 00:39:34,120 --> 00:39:35,860 Binky-së gati për të humbur kokën e tij. 910 00:39:35,860 --> 00:39:39,465 >> Y Star barabartë me 13, fat i keq, do të thotë çfarë? 911 00:39:39,465 --> 00:39:43,620 Pra, do të thotë yll y shkoni në adresën në y. 912 00:39:43,620 --> 00:39:45,630 Por ajo që është adresa në y? 913 00:39:45,630 --> 00:39:47,899 914 00:39:47,899 --> 00:39:49,440 Në rregull, kjo është vlera e plehrave, e drejtë? 915 00:39:49,440 --> 00:39:50,800 I tërhoqi atë si një pikëpyetje. 916 00:39:50,800 --> 00:39:54,850 Nick tërhoqi atë si një shigjetë më bëni. 917 00:39:54,850 --> 00:39:59,600 Dhe, sa më shpejt që ju të përpiqen për të bëjë y yll, duke thënë të shkojnë atje, 918 00:39:59,600 --> 00:40:03,872 por nuk ka një legjitime adresën, kjo është disa vend fals, 919 00:40:03,872 --> 00:40:05,080 programi do të rrëzuar. 920 00:40:05,080 --> 00:40:08,580 Dhe kreu Binky-së do të fluturojnë jashtë këtu, ashtu siç bëri. 921 00:40:08,580 --> 00:40:12,130 >> Pra, në fund, këtë program ishte vetëm krisje banesë jashtë. 922 00:40:12,130 --> 00:40:13,540 Ishte një program buggy. 923 00:40:13,540 --> 00:40:14,760 Dhe kjo nevojë të jetë fikse. 924 00:40:14,760 --> 00:40:18,260 Dhe e vetmja mënyrë, me të vërtetë, për të rregulluar atë do të ishte, për shembull, kjo linjë, 925 00:40:18,260 --> 00:40:21,010 të cilat ne nuk e merrni edhe për të, sepse Programi u rrëzua shumë shpejt. 926 00:40:21,010 --> 00:40:26,170 Por në qoftë se ne ishim për të rregulluar këtë, çfarë efekti ka bërë y x barabarta keni? 927 00:40:26,170 --> 00:40:30,010 E pra, ajo në thelb tregon y në çfarëdo vlera x është duke treguar. 928 00:40:30,010 --> 00:40:32,430 >> Pra, në historinë e Nick, ose histori Binky-së, të dy 929 00:40:32,430 --> 00:40:34,640 x dhe y janë treguar në copë të bardhë të kujtesës, 930 00:40:34,640 --> 00:40:38,300 në mënyrë që, më në fund, kur ju e yll y barabartë 13 përsëri, 931 00:40:38,300 --> 00:40:43,080 ju deri në fund duke i dhënë 13 në vend i përshtatshëm. 932 00:40:43,080 --> 00:40:47,640 Pra, të gjitha këto linja janë të përkryer ligjshme, me përjashtim për këtë, 933 00:40:47,640 --> 00:40:51,730 kur kjo ka ndodhur para jush fakt caktuar y disa vlera. 934 00:40:51,730 --> 00:40:54,290 >> Tani fatmirësisht, ju nuk e bëni duhet për arsye nëpër të gjitha 935 00:40:54,290 --> 00:40:56,560 e këtyre llojeve të çështjeve në tuaj. 936 00:40:56,560 --> 00:40:59,310 Më lejoni të shkoj përpara dhe të hapur up ndonjë terminali këtu 937 00:40:59,310 --> 00:41:03,050 dhe të hapur, për vetëm një moment, një program super të shkurtër që 938 00:41:03,050 --> 00:41:04,360 gjithashtu është lloj i pakuptimtë. 939 00:41:04,360 --> 00:41:05,152 Është e shëmtuar. 940 00:41:05,152 --> 00:41:06,610 Ajo nuk ka arritur asgjë të dobishme. 941 00:41:06,610 --> 00:41:10,180 Por kjo do të tregojë çështjet e kujtesës, kështu që le të marrin një sy. 942 00:41:10,180 --> 00:41:11,830 >> Kryesore, super e thjeshtë. 943 00:41:11,830 --> 00:41:14,830 Ai me sa duket e quan një funksion, F, dhe pastaj kthen 0. 944 00:41:14,830 --> 00:41:16,310 Kjo është lloj i vështirë për të bela deri këtë. 945 00:41:16,310 --> 00:41:18,540 Pra, kryesore është shumë e mirë, deri më tani. 946 00:41:18,540 --> 00:41:20,100 >> Pra, f është problematike. 947 00:41:20,100 --> 00:41:22,120 Dhe thjesht nuk e vënë shumë përpjekje në emërtimin atë 948 00:41:22,120 --> 00:41:23,990 këtu, për të mbajtur fokusin në kodin. 949 00:41:23,990 --> 00:41:25,740 f ka dy linja. 950 00:41:25,740 --> 00:41:27,610 Dhe le të shohim se çfarë po ndodh tani. 951 00:41:27,610 --> 00:41:29,840 Pra, nga njëra anë here-- dhe më lejoni të bëjë 952 00:41:29,840 --> 00:41:32,680 kjo në përputhje me paraardhëse example-- në njërën anë, 953 00:41:32,680 --> 00:41:35,830 anën e majtë është duke bërë atë, në gjuhën angleze? 954 00:41:35,830 --> 00:41:36,493 Ajo is-- 955 00:41:36,493 --> 00:41:37,701 Audienca: Krijimi i një akrep. 956 00:41:37,701 --> 00:41:40,830 DAVID J. Malan: Krijimi i një akrep në një int dhe duke e quajtur atë x. 957 00:41:40,830 --> 00:41:43,789 Pra, kjo është duke krijuar një nga ato kuti Unë mbaj duke tërhequr në ekran touch. 958 00:41:43,789 --> 00:41:45,913 Dhe tani, në të djathtë anë, malloc, natyrisht, 959 00:41:45,913 --> 00:41:47,420 është shpërndarë me një copë e kujtesës. 960 00:41:47,420 --> 00:41:49,989 Dhe vetëm të jetë e qartë, se si sa memorie është ajo me sa duket 961 00:41:49,989 --> 00:41:52,030 ndarjes, në qoftë se ju vetëm të lloj bëjë matematikë këtu? 962 00:41:52,030 --> 00:41:53,200 963 00:41:53,200 --> 00:41:54,040 >> Pra, kjo është 40 bytes. 964 00:41:54,040 --> 00:41:57,400 Dhe unë e di se vetëm për shkak se unë e di një int, në aplikim CS50, të paktën, 965 00:41:57,400 --> 00:41:58,060 është katër bytes. 966 00:41:58,060 --> 00:41:59,610 Pra, 10 herë 4 është 40. 967 00:41:59,610 --> 00:42:04,924 Pra, kjo është ruajtjen e një x, adresa e jashtë e parë të 40 ints se 968 00:42:04,924 --> 00:42:07,340 janë ndarë hapësirën përsëri, për të mbështetur, për të mbështetur, për të pasme. 969 00:42:07,340 --> 00:42:08,470 >> Dhe kjo është ajo që është kyç për malloc. 970 00:42:08,470 --> 00:42:11,261 Ajo nuk ka marrë një kujtesë të vogël këtu, pak këtu, pak këtu. 971 00:42:11,261 --> 00:42:14,220 Kjo ju jep një copë e kujtesës, pranë njëri tjetrit, nga operative 972 00:42:14,220 --> 00:42:15,240 sistemit. 973 00:42:15,240 --> 00:42:18,500 >> Tani ajo që për këtë, x kllapa 10 është e barabartë me 0? 974 00:42:18,500 --> 00:42:19,470 Linjë arbitrare e kodit. 975 00:42:19,470 --> 00:42:21,100 Ajo nuk ka arritur asgjë të dobishme. 976 00:42:21,100 --> 00:42:26,128 Por është interesante, sepse x kllapa 10--? 977 00:42:26,128 --> 00:42:26,628 Po? 978 00:42:26,628 --> 00:42:27,912 >> Audienca: [padëgjueshme]? 979 00:42:27,912 --> 00:42:30,500 >> DAVID J. Malan: x kllapa 10 nuk duhet të jetë null. 980 00:42:30,500 --> 00:42:35,070 Detaje null vetëm vjen në lojë me tela, në fund të një varg. 981 00:42:35,070 --> 00:42:36,700 Por një mendim i mirë. 982 00:42:36,700 --> 00:42:39,615 >> Sa i madh është ky grup, edhe edhe pse unë e kam ndarë 40 bytes? 983 00:42:39,615 --> 00:42:42,560 984 00:42:42,560 --> 00:42:43,690 Është 0 përmes nëntë, e drejtë? 985 00:42:43,690 --> 00:42:45,120 Është 10 Ints, total. 986 00:42:45,120 --> 00:42:48,790 40 bytes, por 10 Ints, indeksuar 0 deri 0. 987 00:42:48,790 --> 00:42:50,930 >> Pra, çfarë është se x parantezë 10? 988 00:42:50,930 --> 00:42:53,090 Është në fakt disa Vlera panjohur mbeturinave. 989 00:42:53,090 --> 00:42:54,780 Është e kujtesës që nuk i përket mua. 990 00:42:54,780 --> 00:42:59,650 Unë nuk duhet të prekur se byte numër 41, 42, 43, 44. 991 00:42:59,650 --> 00:43:01,420 Unë jam duke shkuar pak më shumë larg. 992 00:43:01,420 --> 00:43:04,490 >> Dhe me të vërtetë, në qoftë se unë të drejtuar këtë program, ajo mund shumë mirë të rrëzimit. 993 00:43:04,490 --> 00:43:05,790 Por ndonjëherë, ne do të merrni me fat. 994 00:43:05,790 --> 00:43:07,706 Dhe kështu vetëm për të treguar this-- dhe sinqerisht, 995 00:43:07,706 --> 00:43:11,000 ju nuk e dini se para jush e it-- le të drejtuar këtë. 996 00:43:11,000 --> 00:43:12,480 Ajo nuk ka të vërtetë të rrëzimit. 997 00:43:12,480 --> 00:43:15,032 >> Por në qoftë se unë të ndryshojë këtë, për shembull, të jetë si 1000, 998 00:43:15,032 --> 00:43:16,740 për të bërë këtë të vërtetë qëllimshme, le të shohim 999 00:43:16,740 --> 00:43:18,710 në qoftë se ne mund të merrni atë për të rrëzuar këtë kohë. 1000 00:43:18,710 --> 00:43:20,070 OK, ajo nuk e rrëzimit. 1001 00:43:20,070 --> 00:43:22,600 Si për 100.000? 1002 00:43:22,600 --> 00:43:25,000 Le të ribërë atë, dhe tani përsëritje atë. 1003 00:43:25,000 --> 00:43:25,500 OK. 1004 00:43:25,500 --> 00:43:25,960 Uh. 1005 00:43:25,960 --> 00:43:26,460 Të gjithë të drejtë. 1006 00:43:26,460 --> 00:43:29,090 Pra me sa duket, përsëri, këto segmentet e kujtesës, si të thuash, 1007 00:43:29,090 --> 00:43:32,660 janë të arsyeshme të mëdha, kështu që ne mund merrni me fat përsëri dhe përsëri. 1008 00:43:32,660 --> 00:43:36,510 Por përfundimisht, sapo ju të merrni qesharake dhe me të vërtetë të shkojnë larg jashtë në ekran, 1009 00:43:36,510 --> 00:43:39,120 ju prek kujtesën se me të vërtetë, të vërtetë nuk i përket ju. 1010 00:43:39,120 --> 00:43:40,870 >> Por sinqerisht, këto llojet e mete do 1011 00:43:40,870 --> 00:43:43,020 të jetë më e vështirë dhe më e vështirë të kuptoj se në tuaj. 1012 00:43:43,020 --> 00:43:47,880 Por fatmirësisht, si programuesit, ne kemi mjete që të na lejojë për të bërë këtë për ne. 1013 00:43:47,880 --> 00:43:50,140 Pra, kjo është, ndoshta, një nga programet më të dëmshëm, 1014 00:43:50,140 --> 00:43:52,060 edhe shëmtuar se prodhimit Gdb-së. 1015 00:43:52,060 --> 00:43:55,670 Por ajo gjithmonë ka një linjë apo dy që janë super të dobishme. 1016 00:43:55,670 --> 00:44:00,310 >> Valgrind është një program që ndihmon ju nuk korrigjoj një program, në vetvete, 1017 00:44:00,310 --> 00:44:03,500 por gjeni kujtesës të lidhura probleme, në mënyrë specifike. 1018 00:44:03,500 --> 00:44:07,590 Kjo automatikisht do të kandidojë kodin tuaj për ju dhe të kërkoni për të paktën dy gjëra. 1019 00:44:07,590 --> 00:44:10,680 Një, keni bërë diçka aksidentale si kujtim touch 1020 00:44:10,680 --> 00:44:11,980 që nuk i përkasin për ju? 1021 00:44:11,980 --> 00:44:13,590 Kjo do t'ju ndihmojë të gjeni ato raste. 1022 00:44:13,590 --> 00:44:15,710 >> Dhe dy, ajo do të ndihmojë ju gjeni diçka të quajtur 1023 00:44:15,710 --> 00:44:19,270 rrjedhjet e kujtesës, të cilat ne kemi plotësisht të injoruar, naivitet, 1024 00:44:19,270 --> 00:44:21,380 për disa kohë dhe blissfully. 1025 00:44:21,380 --> 00:44:23,140 Por kjo rezulton, të gjithë këtë herë, sa herë që 1026 00:44:23,140 --> 00:44:26,620 ju keni quajtur getString në kështu që shumë nga programet tona, 1027 00:44:26,620 --> 00:44:28,930 ju jeni duke i kërkuar operative sistem për kujtesën, 1028 00:44:28,930 --> 00:44:32,070 por ju keni ndonjë kujtesë e ndonjëherë duke i dhënë atë 1029 00:44:32,070 --> 00:44:36,169 prapa, duke bërë unalloc, ose pa pagesë, siç është quajtur. 1030 00:44:36,169 --> 00:44:37,960 Jo, sepse ne kurrë nuk kemi pyetur ju për të bërë këtë. 1031 00:44:37,960 --> 00:44:41,250 >> Por e gjithë kjo kohë, programet ju keni qenë i shkruar në C 1032 00:44:41,250 --> 00:44:43,800 kanë bërë të rrjedhin memorie, duke i kërkuar operative 1033 00:44:43,800 --> 00:44:46,190 sistem për gjithnjë e më shumë kujtesës për vargjet dhe gjësend, 1034 00:44:46,190 --> 00:44:47,870 por kurrë dorëzimin atë. 1035 00:44:47,870 --> 00:44:50,080 Dhe tani kjo është pak e një oversimplification, 1036 00:44:50,080 --> 00:44:53,550 por në qoftë se ju keni ndonjëherë të kandidojë Mac tuaj ose PC tuaj për mjaft kohë, hapja 1037 00:44:53,550 --> 00:44:55,790 shumë programe, ndoshta duke mbyllur programet, 1038 00:44:55,790 --> 00:44:57,795 dhe edhe pse tuaj kompjuteri nuk u prish, 1039 00:44:57,795 --> 00:45:01,690 është marrë aq shumë më e ngadalshme, sikur është e vërtetë 1040 00:45:01,690 --> 00:45:04,290 duke përdorur një shumë të kujtesës ose burimeve, edhe pse, 1041 00:45:04,290 --> 00:45:06,070 në qoftë se ju nuk jeni edhe prekur tastierë, 1042 00:45:06,070 --> 00:45:10,430 që mund be-- por nuk always-- mund të jetë se programet xhironi 1043 00:45:10,430 --> 00:45:11,920 kanë vetë rrjedhjet e kujtesës. 1044 00:45:11,920 --> 00:45:15,645 Dhe ata mbajnë kërkuar OS për më shumë dhe më shumë memorie, por duke harruar në lidhje me të, 1045 00:45:15,645 --> 00:45:18,470 jo të vërtetë duke e përdorur atë, por Prandaj, duke marrë kujtesës larg 1046 00:45:18,470 --> 00:45:20,500 nga programet e tjera që mund të duan atë. 1047 00:45:20,500 --> 00:45:23,940 Pra, kjo është një shpjegim i përbashkët. 1048 00:45:23,940 --> 00:45:25,940 Tani këtu është ku Valgrind-së Prodhimi është plotësisht 1049 00:45:25,940 --> 00:45:29,290 tmerrshme për ata më pak të dhe më të rehatshme njësoj. 1050 00:45:29,290 --> 00:45:32,690 Por interesante stuff është e drejtë deri këtu. 1051 00:45:32,690 --> 00:45:37,060 Ajo është e thënë mua një shkruaj pavlefshme të Madhësia e katër ndodh në këtë program, 1052 00:45:37,060 --> 00:45:40,640 në veçanti në përputhje 21 të memory.c. 1053 00:45:40,640 --> 00:45:45,450 >> Nëse unë shkoj për të vijë 21, hm, ka me të vërtetë është një shkruaj pavlefshme të madhësisë katër. 1054 00:45:45,450 --> 00:45:46,250 Pse Madhësia katër? 1055 00:45:46,250 --> 00:45:49,500 E pra, kjo number-- dhe ajo mund të jetë anything-- është një int. 1056 00:45:49,500 --> 00:45:50,450 Pra, kjo është katër bytes. 1057 00:45:50,450 --> 00:45:52,550 Kështu që unë jam duke i dhënë katër bytes ku ata nuk i përkasin. 1058 00:45:52,550 --> 00:45:55,080 Kjo është ajo që Valgrind është në të vërtetë thënë mua. 1059 00:45:55,080 --> 00:45:57,600 Për më tepër, ajo gjithashtu do të më thoni, si ne do të shohim, 1060 00:45:57,600 --> 00:46:01,490 si ju drejtuar këtë në një pset të ardhmen, në qoftë se dhe kur ju keni rrjedhur kujtesën, që nga 1061 00:46:01,490 --> 00:46:05,300 Unë kam, sepse unë e kam quajtur malloc, por unë nuk duhet të vërtetë 1062 00:46:05,300 --> 00:46:08,010 quajtur, në këtë rast, të lirë, të cilat ne përfundimisht do të shohim 1063 00:46:08,010 --> 00:46:09,830 është e kundërta e malloc. 1064 00:46:09,830 --> 00:46:10,860 1065 00:46:10,860 --> 00:46:12,930 >> Deri tani, unë mendoj se, një shembull përfundimtar. 1066 00:46:12,930 --> 00:46:14,050 1067 00:46:14,050 --> 00:46:16,690 Pra, kjo është pak më e errët, por kjo është ndoshta 1068 00:46:16,690 --> 00:46:19,180 Arsyeja më e madhe për të jenë të kujdesshëm me memorie, 1069 00:46:19,180 --> 00:46:24,490 dhe arsyeja që shumë programe dhe / ose web servers, edhe në këtë ditë, 1070 00:46:24,490 --> 00:46:28,200 janë marrë përsipër nga liq diku në internet të cilët janë disi 1071 00:46:28,200 --> 00:46:33,390 dërguar pako fals në serverin tuaj duke u përpjekur të bëjë kompromis llogaritë tuaja, 1072 00:46:33,390 --> 00:46:36,420 ose të marrë të dhënat tuaja, ose thjesht në përgjithësi të marrë mbi një makinë. 1073 00:46:36,420 --> 00:46:38,910 Tampon del nga shtrati, si emri sugjeron, mjete 1074 00:46:38,910 --> 00:46:40,740 tejmbushur jo një int, por një tampon. 1075 00:46:40,740 --> 00:46:43,490 Dhe një tampon është vetëm një mënyrë e sofistikuar e duke thënë se kjo është një bandë e kujtesës. 1076 00:46:43,490 --> 00:46:46,710 >> Dhe me të vërtetë, unë e quajti një varg para buffer, në vend të s. 1077 00:46:46,710 --> 00:46:49,234 Sepse në qoftë se kjo është një tampon, si në kuptimin YouTube, 1078 00:46:49,234 --> 00:46:52,400 ose çdo herë që jeni duke shikuar një video, ju mund të keni parë fjalën buffering, 1079 00:46:52,400 --> 00:46:53,040 dot, dot, dot. 1080 00:46:53,040 --> 00:46:54,240 Është tepër i bezdisshëm. 1081 00:46:54,240 --> 00:46:55,990 Dhe kjo vetëm do të thotë se lojtar video tuaj 1082 00:46:55,990 --> 00:46:58,710 është duke u përpjekur për të shkarkuar shumë e bytes, shumë bytes 1083 00:46:58,710 --> 00:47:00,170 nga një video nga interneti. 1084 00:47:00,170 --> 00:47:02,920 Por është e ngadaltë, kështu që është duke u përpjekur për të shkarkuar një bandë e tyre 1085 00:47:02,920 --> 00:47:06,430 për të mbushur një tampon, një enë, kështu që ju keni bytes të mjaftueshme që të mund pastaj 1086 00:47:06,430 --> 00:47:09,174 ju tregojnë video, pa pushuar vazhdimisht. 1087 00:47:09,174 --> 00:47:11,340 Por kjo rezulton, ju mund të kanë një tampon për këtë të mëdha. 1088 00:47:11,340 --> 00:47:15,710 Por të përpiqet për të vënë këto të dhëna shumë në ajo, dhe shumë gjëra të këqija mund të ndodhë. 1089 00:47:15,710 --> 00:47:22,780 Kështu për shembull, le të shohim në kjo ngacmues përfundimtare e një shembull. 1090 00:47:22,780 --> 00:47:24,720 Ky është një tjetër program që, në shikim të parë, 1091 00:47:24,720 --> 00:47:26,540 nuk bën asgjë super të dobishme. 1092 00:47:26,540 --> 00:47:29,590 Ajo e mori një funksion kryesor që e quan atë funksion, f. 1093 00:47:29,590 --> 00:47:36,640 Dhe që funksion, f, deri këtu, ka një array char, i quajtur c, e madhësisë 12. 1094 00:47:36,640 --> 00:47:39,340 Dhe pastaj është duke përdorur këtë funksion të ri të quajtur strncpy. 1095 00:47:39,340 --> 00:47:40,430 1096 00:47:40,430 --> 00:47:45,190 >> Ajo rezulton se, me këtë të thjeshtë, linjë të thjeshtë të kodit, vetëm dy linja, 1097 00:47:45,190 --> 00:47:49,130 ne kemi bërë gjithë programin tim, dhe për këtë arsye, tërë kompjuterin tim, 1098 00:47:49,130 --> 00:47:54,000 dhe llogaria ime përdoruesit, dhe vështirë e mia përzënë potencialisht të prekshme për të gjithë 1099 00:47:54,000 --> 00:47:58,170 kush e di dhe është mjaft e mirë për të drejtuar ky program me një linjë të caktuar komandës 1100 00:47:58,170 --> 00:47:58,900 argumenti. 1101 00:47:58,900 --> 00:48:03,400 Me fjalë të tjera, në qoftë se ky djalë i keq vë brenda argvargv [1] duke shtypur 1102 00:48:03,400 --> 00:48:08,750 në tastierë një shumë e posaçërisht hartuar string, jo abc, 123, por në thelb, 1103 00:48:08,750 --> 00:48:15,180 simbole binare që përfaqësojnë ekzekutueshme Kodi, një program që ai ose ajo ka shkruar, 1104 00:48:15,180 --> 00:48:19,190 me këtë program thjeshtë, që është përfaqësues i mijëra të programeve 1105 00:48:19,190 --> 00:48:23,610 që janë të ngjashme të prekshme, guxoj të them, ai ose ajo në fund të fundit mund të fshini të gjitha 1106 00:48:23,610 --> 00:48:26,680 fotografi në hard drive time, të marrë një keq të shpejtë në mënyrë që ai ose ajo mund të 1107 00:48:26,680 --> 00:48:30,170 të shkruani komandat të tyre, email gjitha dosjet për veten time. 1108 00:48:30,170 --> 00:48:34,660 Çdo gjë që unë mund të bëjë, ai ose ajo mund të bëjë me këtë kod. 1109 00:48:34,660 --> 00:48:36,575 >> Ne nuk do të mjaft të zgjidhë këtë ende. 1110 00:48:36,575 --> 00:48:38,700 Dhe në fakt, kjo do të përfshijë një foto të vogël 1111 00:48:38,700 --> 00:48:41,470 si kjo, të cilën ne do të vijë së shpejti për të kuptuar të gjithë më mirë. 1112 00:48:41,470 --> 00:48:44,480 Por për sot, le të përfundojë në çfarë është, me shpresë, një pak më të 1113 00:48:44,480 --> 00:48:48,360 kuptueshme shaka RockSonte, deri sa të rifillojë herën tjetër. 1114 00:48:48,360 --> 00:48:51,100 1115 00:48:51,100 --> 00:48:51,600 Të gjithë të drejtë. 1116 00:48:51,600 --> 00:48:53,446 Shihemi të mërkurën. 1117 00:48:53,446 --> 00:48:54,754 >> [MUSIC Playing] 1118 00:48:54,754 --> 00:48:57,790 >> Gjuha: Dhe tani, thellë Mendimet, nga Daven Farnham. 1119 00:48:57,790 --> 00:49:00,890 1120 00:49:00,890 --> 00:49:04,770 Memory është si hedhur në një grumbull të lë artë në një e diel pasdite. 1121 00:49:04,770 --> 00:49:09,000 Era defekt, hedhur tuaj hair-- oh, I miss ditët when-- 1122 00:49:09,000 --> 00:49:11,100 1123 00:49:11,100 --> 00:49:12,650 >> [Qeshura] 1124 00:49:12,650 --> 00:49:13,750