1 00:00:00,000 --> 00:00:03,395 >> [Muzika] 2 00:00:03,395 --> 00:00:11,031 3 00:00:11,031 --> 00:00:13,280 DAVID J. Malan: Kjo është si një seminar fillestar sot. 4 00:00:13,280 --> 00:00:14,060 NE RREGULL. 5 00:00:14,060 --> 00:00:15,024 Pra, shumë shi jashtë. 6 00:00:15,024 --> 00:00:17,690 Kjo ka tendencë të ndodhë të mërkurën, por të gjithë më shumë mundësi e 7 00:00:17,690 --> 00:00:18,700 për pyetje sot. 8 00:00:18,700 --> 00:00:22,210 Pra, le të vihem në fakt me filmin në një moment të vetëm. 9 00:00:22,210 --> 00:00:24,560 Por ne do të fillojmë grandly si gjithmonë. 10 00:00:24,560 --> 00:00:28,000 >> Kjo është CS50, dhe kjo është fundi i javës 4. 11 00:00:28,000 --> 00:00:30,820 Pra, nëse ju keni shikuar ndonjëherë TV ose një film ku 12 00:00:30,820 --> 00:00:34,690 ka disa ekspertë të kompjuterit dhe policia, apo FBI, ose ndonjë agjenci 13 00:00:34,690 --> 00:00:36,930 është duke u përpjekur për të kapur disa kundërshtar, pra, ju keni 14 00:00:36,930 --> 00:00:40,850 ndoshta dëgjuar shprehjen "të rritur" ku se tekniku disi 15 00:00:40,850 --> 00:00:44,750 magjike zooms në pafundësisht larg për të parë kriminelët 16 00:00:44,750 --> 00:00:48,640 identitetit ose numrin targë në edhe shimmer e një pasqyre 17 00:00:48,640 --> 00:00:50,390 ose shkëlqim i syrit dikujt. 18 00:00:50,390 --> 00:00:55,196 Pra me të vërtetë, le të marrin një vështrim në disa skena të tilla nga Hollywood. 19 00:00:55,196 --> 00:00:55,862 [VIDEO rishikim] 20 00:00:55,862 --> 00:00:59,243 -OK, Tani le të marrë një sy të mirë në ju. 21 00:00:59,243 --> 00:01:06,488 22 00:01:06,488 --> 00:01:07,415 >> -Mbaje. 23 00:01:07,415 --> 00:01:08,267 Run atë prapa. 24 00:01:08,267 --> 00:01:09,121 >> -Prit një minutë. 25 00:01:09,121 --> 00:01:11,300 Shkojnë drejtë. 26 00:01:11,300 --> 00:01:12,209 >> -Nuk, Ngrijë atë. 27 00:01:12,209 --> 00:01:12,750 -Ekran i plotë. 28 00:01:12,750 --> 00:01:13,558 -OK, Ngrijë atë. 29 00:01:13,558 --> 00:01:14,820 -Tighten Deri në atë, do ju? 30 00:01:14,820 --> 00:01:16,530 -Vector Në më se djalë nga rrota e pasme. 31 00:01:16,530 --> 00:01:19,400 -Zoom Në të drejtë këtu në këtë vend. 32 00:01:19,400 --> 00:01:22,846 -Me Pajisje të drejtë, imazhi mund të zgjerohet dhe të mprehur. 33 00:01:22,846 --> 00:01:24,065 -Cfare eshte kjo? 34 00:01:24,065 --> 00:01:25,600 -Ajo Është një program zgjerimin. 35 00:01:25,600 --> 00:01:26,860 -A Mund të qartë se deri ndonjë? 36 00:01:26,860 --> 00:01:27,890 -Une nuk e di. 37 00:01:27,890 --> 00:01:29,050 Le të rritur atë. 38 00:01:29,050 --> 00:01:31,575 >> Seksioni A6 -Enhance. 39 00:01:31,575 --> 00:01:33,642 >> -Unë Zgjeruara detaje, and-- Unë mendoj se ka 40 00:01:33,642 --> 00:01:35,433 të mjaftueshme për të rritur, lirimin e tij në ekranin tim. 41 00:01:35,433 --> 00:01:37,080 -Unë Zgjeruara reflektimin në sytë e saj. 42 00:01:37,080 --> 00:01:38,830 >> -Le E drejtuar këtë përmes zgjerimin Video. 43 00:01:38,830 --> 00:01:40,100 -Edgar, Mund të rrisë këtë? 44 00:01:40,100 --> 00:01:41,875 >> -Mbahu. 45 00:01:41,875 --> 00:01:44,010 >> -Ve Qenë duke punuar në këtë reflektim. 46 00:01:44,010 --> 00:01:44,995 >> Reflektim -Someone së. 47 00:01:44,995 --> 00:01:45,495 -Reflection. 48 00:01:45,495 --> 00:01:47,399 -Nuk Është një pasqyrim i fytyrës së njeriut. 49 00:01:47,399 --> 00:01:48,065 Reflektim -The. 50 00:01:48,065 --> 00:01:48,981 -Nuk Është një reflektim. 51 00:01:48,981 --> 00:01:50,600 -Zoom Në në pasqyrë. 52 00:01:50,600 --> 00:01:52,712 -Ju Mund të shihni një reflektim. 53 00:01:52,712 --> 00:01:54,350 -Mund Të përmirësuar imazhin nga këtu? 54 00:01:54,350 --> 00:01:55,370 -Mund Të rritur atë të drejtë këtu? 55 00:01:55,370 --> 00:01:56,210 -Mund Të rritur atë? 56 00:01:56,210 --> 00:01:56,900 Mund ta rritur atë? 57 00:01:56,900 --> 00:01:57,870 >> -Mund Kemi rritur kjo? 58 00:01:57,870 --> 00:01:58,717 >> -Mund Të rritur atë? 59 00:01:58,717 --> 00:02:00,050 Qëndroj në një të dytë, unë do të rritur. 60 00:02:00,050 --> 00:02:00,924 -Zoom Në në derë. 61 00:02:00,924 --> 00:02:01,700 -Times 10. 62 00:02:01,700 --> 00:02:02,586 -Zoom. 63 00:02:02,586 --> 00:02:03,490 -Leviz. 64 00:02:03,490 --> 00:02:03,990 -Më Shumë. 65 00:02:03,990 --> 00:02:04,690 -Wait, Të ndaluar. 66 00:02:04,690 --> 00:02:05,190 -stop. 67 00:02:05,190 --> 00:02:05,970 -Pause Atë. 68 00:02:05,970 --> 00:02:09,460 Na -Rotate 75 gradë rreth vertikale, ju lutem. 69 00:02:09,460 --> 00:02:10,962 -stop. 70 00:02:10,962 --> 00:02:14,040 Kthehu mbrapa në pjesën përpara derës, përsëri. 71 00:02:14,040 --> 00:02:15,860 >> -Got Një enhancer imazhit që mund të bitmap? 72 00:02:15,860 --> 00:02:18,776 >> Hej, ndoshta ne mund të përdorni Pradeep Metodë sen për të parë në dritare. 73 00:02:18,776 --> 00:02:20,372 Software -Kjo është shtet i artit. 74 00:02:20,372 --> 00:02:21,845 >> -The Eigenvalue është off. 75 00:02:21,845 --> 00:02:24,300 >> -Me Të djathtë Kombinimi i algorithm-- 76 00:02:24,300 --> 00:02:26,755 >> Eliminimi marrë -Ai-së algoritme në nivelin e ardhshëm, 77 00:02:26,755 --> 00:02:28,730 dhe unë mund t'i përdorë ato për të rritur këtë fotografi. 78 00:02:28,730 --> 00:02:31,286 >> -Lock Mbi dhe zgjeruar aks-z. 79 00:02:31,286 --> 00:02:32,560 >> -Enhance. 80 00:02:32,560 --> 00:02:33,100 >> -Enhance. 81 00:02:33,100 --> 00:02:33,600 >> -Enhance. 82 00:02:33,600 --> 00:02:34,960 -Freeze Dhe të rritur. 83 00:02:34,960 --> 00:02:37,180 >> [END rishikim] 84 00:02:37,180 --> 00:02:41,160 >> DAVID J. Malan: Të gjithë të drejtë, kështu që të gjithë ata në të vërtetë janë fjalë. 85 00:02:41,160 --> 00:02:44,450 Ata janë vetëm duke lidhur së bashku në një mënyrë që nuk është në të vërtetë të ndjeshme. 86 00:02:44,450 --> 00:02:48,400 Dhe, në fakt, CS50 dhe kurse si ajo tenton të prish një shumë të TV dhe filma 87 00:02:48,400 --> 00:02:48,900 për ty. 88 00:02:48,900 --> 00:02:52,330 Sepse kur këto ekspertët e kompjuterave janë të vrullshëm jashtë termat dhe duke thënë: 89 00:02:52,330 --> 00:02:56,860 gjëra të dashuroj si eigenvectors, dhe z-aks, 90 00:02:56,860 --> 00:02:59,572 dhe çdo numër të tjetër në fakt terma më teknike, 91 00:02:59,572 --> 00:03:02,030 ata janë me të vërtetë vetëm stringing fjalë së bashku të gjithë shumë shpesh. 92 00:03:02,030 --> 00:03:05,020 Është se një nga shpresat tona është se, si një efekt anësor i kurseve të marrjes 93 00:03:05,020 --> 00:03:08,245 si kjo, do të më shumë njerëz në Bota në fakt të jetë në gjendje për të peshojnë në 94 00:03:08,245 --> 00:03:12,040 dhe vetëm ndonjëherë në mënyrë pak të ndikojnë në cilësia dhe saktësia e këtyre filmave? 95 00:03:12,040 --> 00:03:14,350 >> Në fakt, le të marrin një vështrim në realitet. 96 00:03:14,350 --> 00:03:18,070 Kështu që këtu është foto stafi i Mary, një nga miqtë tanë të mësimdhënies. 97 00:03:18,070 --> 00:03:20,050 Dhe mendoj se ajo është dyshuar për diçka. 98 00:03:20,050 --> 00:03:23,730 Dhe megjithatë, ka një dritëz e disa pjesë të provave në sytë e saj, 99 00:03:23,730 --> 00:03:25,480 ose në reflektimin e syze të saj. 100 00:03:25,480 --> 00:03:30,760 E pra, në qoftë se ne bëjmë pikërisht si filmat propozojë, ku ne zoom dhe "rritur", 101 00:03:30,760 --> 00:03:34,080 kjo është se si shumë informacion është në fytyrën e Marisë 102 00:03:34,080 --> 00:03:36,795 kur ju të kapur një imazh me këtë rezolutë origjinale. 103 00:03:36,795 --> 00:03:39,120 >> Dhe, në fakt, ju mund të shihni këto pika. 104 00:03:39,120 --> 00:03:41,900 Dhe këto janë ato që janë quajtur pixels, P-I-X-E-L-S, 105 00:03:41,900 --> 00:03:45,740 e cila është vetëm një katror në mënyrë tipike kjo është një pikë që përbënë një imazh. 106 00:03:45,740 --> 00:03:49,200 Dhe mbrapa në ditë, dhe në fakt edhe sot me disa nga LED TV sotme 107 00:03:49,200 --> 00:03:51,950 ose TV LCD, në qoftë se ju keni marrë një në dhomën tuaj ose në shtëpi, 108 00:03:51,950 --> 00:03:55,100 në qoftë se ju shkoni deri super të afërt me të, dhe sidomos nëse është një TV disi më të vjetër, 109 00:03:55,100 --> 00:03:58,760 ju ndoshta mund të shihni edhe këto pika dhe kjo është ajo që kompozoj një imazh. 110 00:03:58,760 --> 00:04:00,980 >> Dhe nuk ka më informacion se sa kjo. 111 00:04:00,980 --> 00:04:05,400 Ne mund të "rritur", në kuptimin e zbutjen gjëra mbi dhe lloj 112 00:04:05,400 --> 00:04:09,040 inferring lloj, lloj i asaj që ngjyra duhet të jetë tjetër për syrin e Marisë 113 00:04:09,040 --> 00:04:10,910 në mënyrë që ajo nuk është në fakt aq pixelated. 114 00:04:10,910 --> 00:04:14,510 Por në qoftë se unë mbaj zooming në, atje është djalë i keq në sytë e saj. 115 00:04:14,510 --> 00:04:16,600 Si kjo është e gjitha informacion ne kemi. 116 00:04:16,600 --> 00:04:18,920 Ju nuk mund të krijoni informacion nga asgjëja. 117 00:04:18,920 --> 00:04:20,790 Ka vetëm një i caktuar Numri i bit atje. 118 00:04:20,790 --> 00:04:22,873 >> Pra, në problemit Set 4, ku ju keni një mundësi 119 00:04:22,873 --> 00:04:24,580 për të luajtur me këtë lloj bote. 120 00:04:24,580 --> 00:04:27,610 Në Problem Set 4, ju do të eksplorojnë Bota e grafika, dhe mjekësinë ligjore, 121 00:04:27,610 --> 00:04:30,870 dhe në fakt shkruani kodin që rimëkëmbet imazhe humbur. 122 00:04:30,870 --> 00:04:33,510 Ju do të shkruani kodin që manipulon imazhe ekzistuese 123 00:04:33,510 --> 00:04:36,120 dhe në fund të fundit e kuptojnë se çfarë është ndodh nën kapuç. 124 00:04:36,120 --> 00:04:38,540 >> Dhe, ajo rezulton, është e vërtetë jo të gjitha që e komplikuar. 125 00:04:38,540 --> 00:04:41,320 Për shembull, në qoftë se ne të kërkuar për përfaqësojnë një fytyrë smiley ku 126 00:04:41,320 --> 00:04:44,160 me këto pixels zeza, ose këto pika të zeza, 127 00:04:44,160 --> 00:04:47,230 mirë, ne mund thjesht të përfaqësojë ata si të vërtetë një bitmap. 128 00:04:47,230 --> 00:04:50,040 Dhe në qoftë se ju kishte dëgjuar ndonjëherë që bitmap shprehje, ndoshta 129 00:04:50,040 --> 00:04:52,330 ajo tani fillon për të bërë një pak më shumë kuptim sot. 130 00:04:52,330 --> 00:04:53,580 >> Ne tashmë e dimë se çfarë është pak. 131 00:04:53,580 --> 00:04:54,160 Kjo është 0 ose 1. 132 00:04:54,160 --> 00:04:56,201 Dhe një hartë është vetëm diçka si një copë letër 133 00:04:56,201 --> 00:04:59,180 që ju jep udhëzime dhe ka ndoshta një rrjet i x- dhe Y-koordinatat. 134 00:04:59,180 --> 00:05:00,540 Kështu që këtu është një bitmap. 135 00:05:00,540 --> 00:05:03,680 Kjo është një hartë e BITS ku një 1 është me sa duket 136 00:05:03,680 --> 00:05:07,857 do të përfaqësojnë një piksel bardhë dhe a 0 do të përfaqësojë një pixel zi. 137 00:05:07,857 --> 00:05:09,440 Por ne me siguri mund të rrokullisje atë rreth. 138 00:05:09,440 --> 00:05:11,648 Kjo nuk ka rëndësi aq përderisa ne jemi në përputhje. 139 00:05:11,648 --> 00:05:15,570 Dhe këtu është se si, në binary-- brenda e kujtesës një kompjuter, apo edhe brenda 140 00:05:15,570 --> 00:05:18,160 e një skedar në hard tuaj drive-- mund të ruajë 141 00:05:18,160 --> 00:05:20,240 thjeshte e imazheve fytyrë smiley. 142 00:05:20,240 --> 00:05:23,990 Por ne çfarë jemi, natyrisht, mungon në këtë imazh? 143 00:05:23,990 --> 00:05:24,610 Ngjyra, e drejtë? 144 00:05:24,610 --> 00:05:28,220 Është një hap i qartë tjetër ose zgjerimin për të përmirësuar këtë me ngjyra. 145 00:05:28,220 --> 00:05:32,230 Pra, për fat të keq me vetëm një të vetme bit, 0 ose 1, ne mund të përfaqësojë ngjyrë. 146 00:05:32,230 --> 00:05:36,100 Kjo mund të jetë e kuqe, ose blu, ose zi, ose të bardhë, ose të gjelbër, apo rozë, 147 00:05:36,100 --> 00:05:37,420 ose ndonjë palë e ngjyrave. 148 00:05:37,420 --> 00:05:40,860 Por, për hir të thjeshtësisë, ne do të vetëm të supozojmë zezë dhe e bardhë. 149 00:05:40,860 --> 00:05:45,930 >> Pra, ajo që logjikisht nuk kemi nevojë në qoftë se ne duan të zbatojnë ngjyrë në një imazh? 150 00:05:45,930 --> 00:05:49,080 Çfarë duhet të bëjmë? 151 00:05:49,080 --> 00:05:51,900 Ashtu si në qoftë se faktor kufizues këtu është se me një pak ju mund vetëm 152 00:05:51,900 --> 00:05:55,977 përfaqësojnë dy shtete, 0 ose 1, e bardhë apo i zi, çfarë ju doni të bëni? 153 00:05:55,977 --> 00:05:56,810 Audienca: Më shumë të dhëna. 154 00:05:56,810 --> 00:05:58,813 DAVID J. Malan: Më bit, vërtet më shumë të dhëna, shumë bit. 155 00:05:58,813 --> 00:06:01,440 Dhe, me të vërtetë, kjo është pikërisht se si Imazhet ngjyra janë të përfaqësuara. 156 00:06:01,440 --> 00:06:05,120 Në vend se të përdorin një grimë të vetme, një 0 ose 1 për çdo piksel, secili pikë, 157 00:06:05,120 --> 00:06:06,170 ju vetëm përdorni shumëfish. 158 00:06:06,170 --> 00:06:09,660 Ndoshta përdorin 8, ndoshta, më së shpeshti përdorin 24, dhe në të vërtetë, në problemit Set 159 00:06:09,660 --> 00:06:13,300 4, do të luajë me një fotografi format që përdor 24 bit në mënyrë tipike. 160 00:06:13,300 --> 00:06:15,430 >> Por shumica prej jush ndoshta janë njohur me JPEG. 161 00:06:15,430 --> 00:06:17,460 Nëse ju keni marrë ndonjëherë një foto në telefonin tuaj, 162 00:06:17,460 --> 00:06:20,360 ose ngarkuar apo parë diçka në Facebook, apo Flickr, ndonjë numër 163 00:06:20,360 --> 00:06:24,882 faqet e internetit foto-bazuar, ju keni ndoshta shihet një imazh JPEG para. 164 00:06:24,882 --> 00:06:27,840 Dhe kjo rezulton, ky është skedari format ne jemi duke shkuar për të përdorur në pset 4, 165 00:06:27,840 --> 00:06:30,340 ku ju do të jeni duhet të shërohen imazhe 166 00:06:30,340 --> 00:06:35,160 që unë e kam fshirë aksidentalisht nga një kartën e kujtesës korruptuar në kamera, 167 00:06:35,160 --> 00:06:35,800 nëse ju do. 168 00:06:35,800 --> 00:06:38,490 >> Dhe kjo rezulton se edhe pse JPEG është shumë sophisticated-- 169 00:06:38,490 --> 00:06:40,906 është shumë më e sofistikuar se pika të zeza dhe të bardha 170 00:06:40,906 --> 00:06:44,480 ne pamë një moment më parë, sepse nuk ka Algoritme fakt dashuroj se 171 00:06:44,480 --> 00:06:47,410 janë përdorur për të compress një JPEG, kështu që ju mund të ketë një të vërtetë e bukur, 172 00:06:47,410 --> 00:06:49,832 foto cilësisë por duke përdorur relativisht pak bit. 173 00:06:49,832 --> 00:06:51,790 Dhe ne do të kthehen në compression para se të gjatë. 174 00:06:51,790 --> 00:06:56,280 Ajo rezulton se i pari tre bytes në një image-- JPEG 175 00:06:56,280 --> 00:07:02,750 pa marrë parasysh se çfarë ju keni marrë një fotografi of-- janë vlerat 255, 216, 255. 176 00:07:02,750 --> 00:07:05,990 >> Me fjalë të tjera, në qoftë se ju vetëm shohim se modeli i bit, 177 00:07:05,990 --> 00:07:09,180 përfaqësuar këtu si tre bytes, ose 24 bit gjithsej, 178 00:07:09,180 --> 00:07:13,810 me probabilitet të lartë ju mund të konkludoj se jeni duke kërkuar në të këtë tre e parë 179 00:07:13,810 --> 00:07:15,230 bytes e një JPEG. 180 00:07:15,230 --> 00:07:18,040 Dhe kjo është ajo që është e njohur si nënshkrimin e një JPEG. 181 00:07:18,040 --> 00:07:20,540 Një shumë e file formats atje kanë tendencë për të filluar 182 00:07:20,540 --> 00:07:23,735 me modele të caktuara të 0s dhe 1s, kështu që Windows dhe Mac OS, dhe iOS, 183 00:07:23,735 --> 00:07:28,272 dhe Android di se çfarë lloj të dosjes ata janë, përveç të ashtuquajturës fotografi 184 00:07:28,272 --> 00:07:29,730 extension se një shumë e dosjeve kanë. 185 00:07:29,730 --> 00:07:32,590 Nëse keni .jpg, kjo është një tjetër çelës në kompjuter. 186 00:07:32,590 --> 00:07:35,310 >> Pra, le të shohim tani në këtë pak më teknikisht. 187 00:07:35,310 --> 00:07:37,390 Ne e dimë decimal Sistemi është 0 deri 9. 188 00:07:37,390 --> 00:07:38,740 Ne e dimë binar është 0 dhe 1. 189 00:07:38,740 --> 00:07:41,842 Dhe në qoftë se ju mendoni përsëri në pset 0, kemi pasur të luftoj me të, 190 00:07:41,842 --> 00:07:43,800 për një pak, diçka quajtur heksadecimal, 191 00:07:43,800 --> 00:07:47,320 ku ju keni 16 shifra, në vend të 10, ose në vend të 2. 192 00:07:47,320 --> 00:07:50,405 Dhe këto shifra, nga konventa, janë 0 deri 9 dhe pastaj a 193 00:07:50,405 --> 00:07:55,040 përmes f, ku f përfaqëson çfarë Numri dhjetor, ashtu si një mendje e shëndoshë të shpejtë 194 00:07:55,040 --> 00:07:56,640 kontrolloni? 195 00:07:56,640 --> 00:07:57,610 Pra, 15. 196 00:07:57,610 --> 00:08:01,390 Dhe një duhet të përfaqësojë 10, vetëm nga Natyra e urdhërimin që unë kam dhënë. 197 00:08:01,390 --> 00:08:04,350 Kjo është vetëm një konventë arbitrare, por kjo është mjaft standarde. 198 00:08:04,350 --> 00:08:06,870 >> Pra, nëse ne shikojmë në këtë model e tre bytes-- le 199 00:08:06,870 --> 00:08:09,620 sapo të fillojë për të parë atë në mënyrë të pajtueshme me sa 200 00:08:09,620 --> 00:08:12,450 Shkencëtarët kompjuter në përgjithësi shikoni në dhe të mendojnë për fotografi. 201 00:08:12,450 --> 00:08:15,580 Ju me siguri mund të mendoni për fotografi në 0s dhe 1s, dhe dhjetore, 202 00:08:15,580 --> 00:08:19,340 por në realitet, ne priren të përdorin binar ose më shumë zakonisht hexadecimal-- 203 00:08:19,340 --> 00:08:20,760 prapa nga pset 0. 204 00:08:20,760 --> 00:08:25,857 Pra më lejoni të propozojnë se 255, 216, dhe 255 janë vetëm këto modelet e 0s dhe 1s. 205 00:08:25,857 --> 00:08:28,440 Dhe ju mund të kontrolloni këtë në qoftë se ju dua të bëjë matematikë nga Javës 0. 206 00:08:28,440 --> 00:08:30,810 Por, tani për tani, vetëm të supozojmë se kjo është me të vërtetë e saktë. 207 00:08:30,810 --> 00:08:33,850 Kam rishkruar vetëm tre decimal Numrat si tre vlerat binare. 208 00:08:33,850 --> 00:08:36,100 Tani ajo që unë jam duke shkuar për të bërë është vetëm të shtoni një hapësirë ​​të bardhë, 209 00:08:36,100 --> 00:08:37,266 vetëm për hir të lehtësi leximi së. 210 00:08:37,266 --> 00:08:39,940 Dhe vini re, unë jam vetëm duke shkuar për të lëvizur gjërat përveç. 211 00:08:39,940 --> 00:08:43,090 Pra, para, pas, para, pas. 212 00:08:43,090 --> 00:08:46,180 Unë jam duke bërë asgjë interesante tjetër se vetëm përhapjen gjëra jashtë në mënyrë 213 00:08:46,180 --> 00:08:50,380 se njoftimi secili grup i tetë bit është tani dy grupe të katër copa. 214 00:08:50,380 --> 00:08:54,920 Kjo është e dobishme për shkak se heksadecimal është veçanërisht në modë 215 00:08:54,920 --> 00:09:00,930 sepse çdo shifër heksadecimal 0 përmes f, ose më konkretisht 0 deri 15, 216 00:09:00,930 --> 00:09:03,430 mund të përfaqësohet me tamam katër copa. 217 00:09:03,430 --> 00:09:07,960 Me fjalë të tjera, në qoftë se ju heksadecimal duan të përfaqësojnë një 0, kjo është vetëm 0000, 218 00:09:07,960 --> 00:09:08,780 katër zero. 219 00:09:08,780 --> 00:09:13,997 Dhe në qoftë se ju doni për të përfaqësuar 15, është 1111, e cila është katër bit. 220 00:09:13,997 --> 00:09:16,080 Dhe në qoftë se ju bëni matematikë, në qoftë se ky është vendi ato, 221 00:09:16,080 --> 00:09:18,210 ky është vendi 16s, që do të japë ju, duke filluar 222 00:09:18,210 --> 00:09:19,960 në vend që po ndodh to-- keq, në binar, 223 00:09:19,960 --> 00:09:23,660 që do të ju jap 15, ato vend, twos vend, katër këmbët dhe tetë vend. 224 00:09:23,660 --> 00:09:26,821 Pra më lejoni të propozojë që kjo të vendosur nga katër bit në të majtë 225 00:09:26,821 --> 00:09:28,070 është ajo që ne jemi duke shkuar për të thirrur f. 226 00:09:28,070 --> 00:09:30,110 Është numri më i madh që mund të përfaqësojnë me katër copa. 227 00:09:30,110 --> 00:09:33,300 Dhe ne tashmë e dimë nga heksadecimal, f është shifra më e madhe në heksadecimal. 228 00:09:33,300 --> 00:09:36,020 Ne kemi marrë një f atje, dy më shumë atje. 229 00:09:36,020 --> 00:09:38,980 Dhe tani për tani, vetëm të marrin në besim që i kam bërë të drejtë të matematikës 230 00:09:38,980 --> 00:09:41,890 dhe se gjysma e majtë nga ato pjesë, 1101, 231 00:09:41,890 --> 00:09:43,980 është e njëjta gjë si d në heksadecimal. 232 00:09:43,980 --> 00:09:46,490 Dhe dora e djathtë, 1000, është vetëm 8. 233 00:09:46,490 --> 00:09:48,140 >> Dhe se një e lehtë për të parë, apo jo? 234 00:09:48,140 --> 00:09:51,670 8 represents-- është e drejtë nën atë vend tetë. 235 00:09:51,670 --> 00:09:56,040 Pra, ne kemi një në kolonën e tetë dhe asgjë në katërkëmbëshe, twos apo ato. 236 00:09:56,040 --> 00:09:59,830 Deri tani më konvencionale, njerëzit priren për të shkruar shifra heksadecimal si kjo, 237 00:09:59,830 --> 00:10:03,000 ju vetëm pllaquris ato së bashku, dhe pastaj ju prefiksit ato me 0x. 238 00:10:03,000 --> 00:10:05,920 Kjo do të thotë asgjë tjetër përveç një çelës vizuale në një human-- 239 00:10:05,920 --> 00:10:10,350 këtu vjen një value-- heksadecimal sepse ajo nuk mund të ndryshe të jetë e qartë. 240 00:10:10,350 --> 00:10:13,629 >> Që do të thotë, në fund të fundit, që modeli i zero dhe ato, 241 00:10:13,629 --> 00:10:16,170 ose modeli i heksadecimal shifrat ekuivalente që ju jeni 242 00:10:16,170 --> 00:10:18,990 do të fillojmë të shikojmë për në problemit Set 4 është this-- 243 00:10:18,990 --> 00:10:22,120 dhe Problem Set 4 spekulim do të ecin ju përmes kësaj në shumë detail-- 244 00:10:22,120 --> 00:10:25,344 por e kupton si lloj misterioze si kjo mund të duket në shikim të parë, 245 00:10:25,344 --> 00:10:27,010 ju jeni do të fillojmë të shohim këtë shumë. 246 00:10:27,010 --> 00:10:30,320 Dhe në fakt, edhe në GDB, The Rregullues ne kemi prezantuar të hënën 247 00:10:30,320 --> 00:10:35,440 dhe Dan fut në pset 3, po shkon për të shpesh të ju tregojnë vlerat heksadecimal 248 00:10:35,440 --> 00:10:39,910 vetëm për shkak se ata kanë tendencë të jenë më të konvencionale se dhjetore ose binar 249 00:10:39,910 --> 00:10:41,157 në botën e kompjuterëve. 250 00:10:41,157 --> 00:10:42,490 Tani le të vënë këtë në kontekst. 251 00:10:42,490 --> 00:10:48,040 Shumë nga ju mund të mbani mend këtë foto këtu, i cili erdhi nga çfarë? 252 00:10:48,040 --> 00:10:51,240 Vista, kështu që edhe më herët se se, Windows XP e bëri këtë debutimin. 253 00:10:51,240 --> 00:10:52,620 Pra, kjo është një peizazh i bukur. 254 00:10:52,620 --> 00:10:55,940 Dhe në fakt, në qoftë se ju thes rreth online-- Unë mendoj se është një artikull Wikipedia, 255 00:10:55,940 --> 00:11:00,110 ku dikush shumë amazingly doli gjetur këtë vend në botë të ngritur 256 00:11:00,110 --> 00:11:02,240 e tij ose të saj në kamera pikërisht place-- drejtë 257 00:11:02,240 --> 00:11:06,510 dhe kjo sot duket like-- por kjo është saktësisht e njëjtë vendosjen. 258 00:11:06,510 --> 00:11:10,060 Ky imazh, megjithatë, është në një skedar format i quajtur bitmap, b-m-f. 259 00:11:10,060 --> 00:11:12,910 Dhe ne jemi duke shkuar për të marrë një super vështrim i shpejtë në çfarë do të thotë. 260 00:11:12,910 --> 00:11:17,770 >> Por bitmap është vetëm një mënyrë të ndryshme të Imazhet përfaqësojnë ende duke përdorur piksele 261 00:11:17,770 --> 00:11:19,580 në 0s dhe 1s, në fund të fundit. 262 00:11:19,580 --> 00:11:23,282 Por në shikim të shpejtë, ajo ka një nënshkrim më interesante 263 00:11:23,282 --> 00:11:24,490 në fillim të file. 264 00:11:24,490 --> 00:11:26,670 Kjo nuk është vetëm tre bytes, në vend ka 265 00:11:26,670 --> 00:11:30,770 një bandë e tërë e modeleve të bytes që kanë paracaktuara kuptim. 266 00:11:30,770 --> 00:11:34,490 Për shembull, diku në Disa bytes para të një imazhi bitmap 267 00:11:34,490 --> 00:11:37,440 do të jetë madhësia e image, gjerësia e imazhit, 268 00:11:37,440 --> 00:11:40,390 lartësia e imazhit, kështu metadata dobishme, nëse ju do. 269 00:11:40,390 --> 00:11:43,940 Informacione të dobishme se Photoshop ose ndonjë grafikë programi ju jeni duke përdorur 270 00:11:43,940 --> 00:11:45,180 në fakt mund të intereson. 271 00:11:45,180 --> 00:11:47,170 >> Pra, më shumë për këtë në Problem Set 4, por kjo 272 00:11:47,170 --> 00:11:49,220 është vetëm për të thënë se ne fund te ditës 273 00:11:49,220 --> 00:11:52,390 të gjitha formatet e skedarëve që ju keni qenë duke përdorur për years-- fotografi Microsoft Word, 274 00:11:52,390 --> 00:11:55,820 Numrat fotografi, fotografi Excel, çdo numër i file formats 275 00:11:55,820 --> 00:11:57,770 që mund të ketë disa njohur file extension 276 00:11:57,770 --> 00:12:00,130 janë vetëm 0s dhe 1s nën kapuç. 277 00:12:00,130 --> 00:12:02,970 Dhe njerëzit kanë vendosur çfarë konventat janë, 278 00:12:02,970 --> 00:12:08,340 çfarë modelet e 0s dhe 1s përfaqësojnë një Word file kundrejt një file Excel, 279 00:12:08,340 --> 00:12:10,322 kundrejt çdo numër të formate të tjera fotografi. 280 00:12:10,322 --> 00:12:12,780 Pra, në pset 4, ju do të keni një mundësi për të luajtur me atë. 281 00:12:12,780 --> 00:12:14,405 >> Por çfarë do të thotë të ketë një e strukturës. 282 00:12:14,405 --> 00:12:18,012 Kjo është në fakt një Segue bukur tani në C, e cila ka vetëm një çift 283 00:12:18,012 --> 00:12:20,220 Karakteristika të tjera që ne nuk kemi shikuar ende. 284 00:12:20,220 --> 00:12:24,230 Kjo është një gjuhë mjaft të vogël dhe një nga karakteristikat e bukur rreth C është një struct. 285 00:12:24,230 --> 00:12:27,300 Për shembull, në qoftë se ju të kërkuar për represent-- le 286 00:12:27,300 --> 00:12:33,690 thonë se ju të kërkuar për të ketë një ndryshore që përfaqëson një student në ndonjë program. 287 00:12:33,690 --> 00:12:37,330 Ndoshta ju jeni duke shkruar një kurs programi regjistrimi, ose pazar thelbi 288 00:12:37,330 --> 00:12:38,870 mjet, ose diçka të tillë. 289 00:12:38,870 --> 00:12:42,922 Cilat janë pjesë e të dhënave të lidhura për një student që vjen në mendje? 290 00:12:42,922 --> 00:12:44,880 Si një student është përfaqësuar me çfarë vlerat? 291 00:12:44,880 --> 00:12:45,732 Po? 292 00:12:45,732 --> 00:12:46,940 Ju keni një emër si një student. 293 00:12:46,940 --> 00:12:48,900 Çfarë tjetër bën një student tipik të ketë? 294 00:12:48,900 --> 00:12:49,320 >> Audienca: [padëgjueshme] 295 00:12:49,320 --> 00:12:50,200 >> DAVID J. Malan: Pra, sorry. 296 00:12:50,200 --> 00:12:50,660 >> Audienca: Age. 297 00:12:50,660 --> 00:12:52,980 >> DAVID J. Malan: Një moshë apo ditëlindjen ekuivalente, yep. 298 00:12:52,980 --> 00:12:53,557 Çfarë tjetër? 299 00:12:53,557 --> 00:12:54,390 Audienca: Numri ID? 300 00:12:54,390 --> 00:12:57,460 DAVID J. Malan: Pra, një numër ID, ndoshta një numër telefoni, ndoshta një konvikt, apo shtëpi, 301 00:12:57,460 --> 00:12:58,670 apo kolegj, ose diçka të tillë. 302 00:12:58,670 --> 00:13:01,820 Çdo numër i pjesëve të dhënave që ju mund të keni në listën tuaj të kontakteve 303 00:13:01,820 --> 00:13:03,890 është ajo që mund të përcaktojë një student. 304 00:13:03,890 --> 00:13:08,490 Pra, nëse ne të kërkuar për të bërë këtë, në kod, ne mund të bëjmë diçka të thjeshtë si kjo. 305 00:13:08,490 --> 00:13:15,670 Ne mund të kemi një program në mënyrë që ka le të themi, int kryesor (i pavlefshëm). 306 00:13:15,670 --> 00:13:18,920 Dhe në qoftë se unë dua të përfaqësoj një Studenti unë mund të ketë, për shembull, 307 00:13:18,920 --> 00:13:24,330 një varg quajti për këtë student, një varg të quajtur konvikt për këtë student, 308 00:13:24,330 --> 00:13:26,900 ndoshta një int quajtur ID për atë student. 309 00:13:26,900 --> 00:13:30,840 Dhe për shkak se unë jam duke përdorur string, unë duhet të kthehemi dhe të vënë CS50.h. 310 00:13:30,840 --> 00:13:33,300 Ndoshta unë jam duke shkuar për nevojë stdio.h. 311 00:13:33,300 --> 00:13:38,190 Pra më lejoni të bëj preemptively ata dhe unë jam do të thërrasë këtë student.c për tani 312 00:13:38,190 --> 00:13:40,080 dhe për të shpëtuar këtë. 313 00:13:40,080 --> 00:13:44,206 >> Dhe tani unë mund të bëjë diçka me këto variabla. 314 00:13:44,206 --> 00:13:46,830 Dhe ne jemi vetëm duke shkuar për të shkruar se si një koment në pseudo kodi, 315 00:13:46,830 --> 00:13:48,829 sepse kjo nuk është interesante çfarë të bëjmë tani për tani. 316 00:13:48,829 --> 00:13:51,242 OK, kështu që ky është një program që disi ruan një student. 317 00:13:51,242 --> 00:13:53,450 Çfarë unë dua të bëj në qoftë se unë duan për të ruajtur dy studentë? 318 00:13:53,450 --> 00:13:55,991 Pra instinkti im i parë do të jetë në rregull, prit një minutë, 319 00:13:55,991 --> 00:14:01,920 në qoftë se unë kam një tjetër nxënës pse nuk kam vetëm të bëjë emër string 2, string fjetore 2, 320 00:14:01,920 --> 00:14:04,190 id2 int. 321 00:14:04,190 --> 00:14:06,540 Dhe ne kemi bërë Gone poshtë këtë rrugë para 322 00:14:06,540 --> 00:14:10,890 dhe çfarë ishte zgjidhja jonë për atë që duket të jetë lloj i një paste hackish kopje 323 00:14:10,890 --> 00:14:11,555 punë këtu? 324 00:14:11,555 --> 00:14:12,346 Audienca: Një grup. 325 00:14:12,346 --> 00:14:13,830 DAVID J. Malan: Yeah, ne mund të përdorni një rrjet. 326 00:14:13,830 --> 00:14:15,620 E drejtë kjo shumë shpejt bëhet i ngathët. 327 00:14:15,620 --> 00:14:18,453 Ju keni për të zgjidhur në mënyrë arbitrare të fillojnë emërtimin gjitha këtyre variablave. 328 00:14:18,453 --> 00:14:22,190 Dhe ti, njerëzore, duhet të mbajnë udhë, që korrespondon OK name2 329 00:14:22,190 --> 00:14:25,060 me dorm2 korrespondon me id2. 330 00:14:25,060 --> 00:14:26,200 Ajo vetëm bëhet një rrëmujë. 331 00:14:26,200 --> 00:14:29,350 Pra, kjo është një shumë më e lehtë, kujtojnë nga disa javë më parë, 332 00:14:29,350 --> 00:14:34,300 për të vetëm ka për të quajtur emrat string dhe ndoshta na japin tre prej atyre. 333 00:14:34,300 --> 00:14:36,940 Dhe pastaj ndoshta ne kemi dorms string dhe kanë 334 00:14:36,940 --> 00:14:41,900 tre nga ata, ose me një konstante, int IDS dhe kanë tre prej atyre. 335 00:14:41,900 --> 00:14:45,250 Por edhe tani kjo ndjehet pak i lëngshëm, e drejtë. 336 00:14:45,250 --> 00:14:49,440 Ne jemi duke folur për studentët dhe ende Unë jam me të vërtetë u ndalur në nivelin e ulët 337 00:14:49,440 --> 00:14:50,470 Detajet e zbatimit. 338 00:14:50,470 --> 00:14:52,790 Studenti është një emër dhe një fjetore dhe ID. 339 00:14:52,790 --> 00:14:59,814 >> Pse nuk mundem vetëm të deklarojë një ndryshore quajtur nxënës dhe e quajti ajo s. 340 00:14:59,814 --> 00:15:02,230 Dhe në qoftë se unë dua një tjetër student, pse nuk e kam vetëm e quajti atë t. 341 00:15:02,230 --> 00:15:05,260 Ose në qoftë se unë dua një bandë e tërë e studentëve, pse nuk e bëjmë unë vetëm 342 00:15:05,260 --> 00:15:09,740 thonë se unë kam një klasë të tërë të studentëve, dhe kjo është tre prej tyre. 343 00:15:09,740 --> 00:15:12,470 Me fjalë të tjera, pse nuk mund të vij me vetë llojin tim të të dhënave, të quajtur 344 00:15:12,470 --> 00:15:15,641 Studentët, brenda së cilës është një emër, është një ID, është një konvikt, 345 00:15:15,641 --> 00:15:16,890 është ndonjë numër të fushave të tjera. 346 00:15:16,890 --> 00:15:19,030 Dhe kjo rezulton nga ju mund të bëjë pikërisht këtë. 347 00:15:19,030 --> 00:15:21,850 >> Pra, C e ka këtë funksion të quajtur struct. 348 00:15:21,850 --> 00:15:24,700 Kjo është një tipar gjuhë që na lejon të bëjmë pikërisht këtë. 349 00:15:24,700 --> 00:15:28,370 Unë jam duke shkuar për të shkuar përpara dhe të hapë structs.h 350 00:15:28,370 --> 00:15:32,299 ku ne jemi duke shkuar për të parë pas përkufizimit të një studenti. 351 00:15:32,299 --> 00:15:35,215 Ajo rezulton - dhe kjo është edhe thjeshtë se ai përfshin një ID 352 00:15:35,215 --> 00:15:36,080 një moment më parë. 353 00:15:36,080 --> 00:15:39,120 Nëse ju doni të dalë me shtëpi lloji juaj e të dhënave, 354 00:15:39,120 --> 00:15:42,750 dhe përveç int, dhe char dhe noton dhe të gjitha këto të tjerët që ekzistojnë, 355 00:15:42,750 --> 00:15:45,810 ju mund ta bëni këtë duke fjalë për fjalë shkrim typedef e strukturës, 356 00:15:45,810 --> 00:15:47,880 pastaj disa formatimin e teksteve kaçurrel, brenda të cilave ju 357 00:15:47,880 --> 00:15:51,460 lista e variablave që ju doni të të lidhen me këto të dhëna të re me porosi 358 00:15:51,460 --> 00:15:55,670 shkruani si një emër dhe një konvikt, dhe pastaj pas formatimin e teksteve kaçurrel 359 00:15:55,670 --> 00:15:57,860 ju jepni një emër për llojin e ri të të dhënave. 360 00:15:57,860 --> 00:15:59,220 Kështu, për shembull, student. 361 00:15:59,220 --> 00:16:03,247 >> Dhe çfarë është e mirë për këtë është se tani nëse ne shikojmë në kodin përkatës, 362 00:16:03,247 --> 00:16:05,080 kongresi, i parë së gjithash, është për të vënë këtë 363 00:16:05,080 --> 00:16:08,230 në një skedar të quajtur diçka dot h, një header file, të cilat ne nuk kemi 364 00:16:08,230 --> 00:16:09,780 filloi duke përdorur veten shumë. 365 00:16:09,780 --> 00:16:12,120 Por ne jemi duke shkuar për të filluar duke përdorur mjaft tani. 366 00:16:12,120 --> 00:16:18,650 Dhe çfarë mund të bëjmë me këtë, në fund të fundit, në këto pak rreshta të kodit 367 00:16:18,650 --> 00:16:22,130 është pikërisht deklaroj se llojin e të dhënave, një student. 368 00:16:22,130 --> 00:16:23,230 Dhe tani le të përdorin atë. 369 00:16:23,230 --> 00:16:27,274 >> Unë jam duke shkuar për të shkuar tani në një file i quajtur structs1.c. 370 00:16:27,274 --> 00:16:29,440 Dhe le të marrin një vështrim në një Disa karakteristika këtu. 371 00:16:29,440 --> 00:16:32,250 Pra gjëra deri këtu është kryesisht të njohur, dhe ne do të 372 00:16:32,250 --> 00:16:35,040 të kthehen në atë që nuk është i njohur në një moment të vetëm. 373 00:16:35,040 --> 00:16:39,880 Kjo natyrisht është përfshirë timen header file, e cila është e re, si dhe, 374 00:16:39,880 --> 00:16:42,580 me përjashtim të pset 3 ku, Recall, ne kemi helpers.h. 375 00:16:42,580 --> 00:16:45,150 Kështu që ju mund të kujtojnë helpers.h #include. 376 00:16:45,150 --> 00:16:49,381 >> Pse pse jam unë duke përdorur kuotat në vend të kllapa angled? 377 00:16:49,381 --> 00:16:50,630 Kur të zgjedh mes tyre? 378 00:16:50,630 --> 00:16:52,310 Pothuajse gjithmonë I duket për t'u përdorur kllapa angled. 379 00:16:52,310 --> 00:16:55,040 Dhe pastaj, të gjithë një e papritur për Linja e gjashtë Unë jam duke përdorur kuotat e dyfishtë. 380 00:16:55,040 --> 00:16:55,860 Pse mund që të jetë? 381 00:16:55,860 --> 00:16:56,700 Po? 382 00:16:56,700 --> 00:16:57,725 >> Audienca: [padëgjueshme] 383 00:16:57,725 --> 00:16:59,350 DAVID J. Malan: Kjo është një aktuale, çfarë? 384 00:16:59,350 --> 00:17:00,559 Audienca: Kjo është në IDE tuaj. 385 00:17:00,559 --> 00:17:02,475 DAVID J. Malan: Yeah, kjo është në IDE time aktuale. 386 00:17:02,475 --> 00:17:05,690 Dhe le të mos ndalem në IDE, sepse kjo është vetëm një mjet që unë jam duke përdorur. 387 00:17:05,690 --> 00:17:08,119 Kjo është në rrymën e mia Lista, në veçanti. 388 00:17:08,119 --> 00:17:11,647 Pra structs.h është dosja ime nuk instaluar në IDE, 389 00:17:11,647 --> 00:17:14,480 në sistemin operativ vetvete, por ajo është në directory time aktuale. 390 00:17:14,480 --> 00:17:16,910 Pra, konventa është në qoftë se ju doni për të përfshirë vetë dosjen tuaj header, 391 00:17:16,910 --> 00:17:18,200 ju vetëm përdorni kuotat e dyfishtë. 392 00:17:18,200 --> 00:17:23,290 >> Çfarë ne e quajmë këtë gjë në Linja 8, në përgjithësi? 393 00:17:23,290 --> 00:17:25,200 Kjo është ajo? 394 00:17:25,200 --> 00:17:28,220 diçka #define. 395 00:17:28,220 --> 00:17:31,040 Kjo paraqet konstanta, e drejtë? 396 00:17:31,040 --> 00:17:33,140 Në qoftë se ju dëshironi të keni një Vlera në programin tuaj 397 00:17:33,140 --> 00:17:35,110 se ju përdorni një të tërë bandë e herë, kjo është 398 00:17:35,110 --> 00:17:39,330 Konventa e mirë për të faktor atë, shpallin atë, me simbolin hash 399 00:17:39,330 --> 00:17:43,340 përcaktuar, atëherë, nga konventa, në të gjitha uppercase word-- pse kjo nuk është 400 00:17:43,340 --> 00:17:45,320 shumë e nevojshme, por është konventë e njeriut 401 00:17:45,320 --> 00:17:47,210 për të përfituar konstante në mënyrë që ata të hidhen jashtë 402 00:17:47,210 --> 00:17:50,380 në ju visually-- hapësirë ​​dhe atëherë vlera e ju doni të jetë 403 00:17:50,380 --> 00:17:52,250 ekuivalente me emër që konstante së. 404 00:17:52,250 --> 00:17:56,110 Jo pikëpresje, por ju thjesht ndjekin këtë model atje. 405 00:17:56,110 --> 00:17:57,770 >> Pra, çfarë jam unë duke bërë në këtë kod aktuale. 406 00:17:57,770 --> 00:18:00,660 Pra, le të marrin një vështrim në Programi kryesor këtu. 407 00:18:00,660 --> 00:18:04,080 Në përputhje 12 sepse kanë përfshirë structs.h, 408 00:18:04,080 --> 00:18:06,492 Unë tani kam magjike në tim dispozicion një tip të ri të dhënave. 409 00:18:06,492 --> 00:18:09,200 Unë nuk do të vetëm kanë qasje në int, dhe char, dhe noton, dhe string, 410 00:18:09,200 --> 00:18:10,060 dhe blu dhe të tjerët. 411 00:18:10,060 --> 00:18:12,470 Unë tani kanë qasje në një lloj i të dhënave të studentëve. 412 00:18:12,470 --> 00:18:17,740 Pra, në përputhje 12, unë jam duke kombinuar dy ideas-- një një lloj të dhënave doganore dhe dy, 413 00:18:17,740 --> 00:18:18,940 duke përdorur një rrjet. 414 00:18:18,940 --> 00:18:21,700 Dhe kështu në këtë program, nëse Unë dua të mbështetur në fakt 415 00:18:21,700 --> 00:18:24,320 tre studentë të ndryshme në programin tim, unë 416 00:18:24,320 --> 00:18:30,480 thjesht mund të them më jepni një variabël quajtur i studentëve, secila prej të cilave 417 00:18:30,480 --> 00:18:32,970 është e studentëve të tipit, të cilat is my lloj të dhënave doganore. 418 00:18:32,970 --> 00:18:35,890 Dhe, në veçanti, më jep mua tre prej atyre në grup tim. 419 00:18:35,890 --> 00:18:37,750 >> Pra, tani çfarë bëjmë ne në këtë program? 420 00:18:37,750 --> 00:18:40,670 Këtu është vetëm një për lak iterating nga 0 deri në 3, që është për shkak 421 00:18:40,670 --> 00:18:42,110 çfarë vlera e studentëve është. 422 00:18:42,110 --> 00:18:44,420 Unë jam vetëm duke bërë që përdoruesit më jep emrin e studentit. 423 00:18:44,420 --> 00:18:48,090 Dhe pastaj në linjë 17, ne kanë një linjë më së shumti të njohur. 424 00:18:48,090 --> 00:18:50,370 Ne kemi mikun tonë të vjetër GetString në të djathtë. 425 00:18:50,370 --> 00:18:52,345 Dhe çfarë pjesë e sintaksës është me sa duket i ri, 426 00:18:52,345 --> 00:18:55,130 në qoftë se ju nuk keni programuar në C përpara, dhe kurrë nuk kanë përdorur structs? 427 00:18:55,130 --> 00:18:55,510 Po? 428 00:18:55,510 --> 00:18:56,417 >> AUDIENCA: The .name. 429 00:18:56,417 --> 00:18:57,500 DAVID J. Malan: The .name. 430 00:18:57,500 --> 00:19:01,220 Por kjo nuk është shumë e një kërcim, sepse tani studentët kllapa I 431 00:19:01,220 --> 00:19:02,590 ju jep studenti i-th. 432 00:19:02,590 --> 00:19:04,730 Dhe në qoftë se ju doni të zhyten brenda kësaj strukture, 433 00:19:04,730 --> 00:19:09,490 ju përdorni vetëm një periudhë të vetme dhe atëherë emri i variablit brenda, 434 00:19:09,490 --> 00:19:11,900 ose prona që brenda ju doni të merrni qasje në. 435 00:19:11,900 --> 00:19:14,816 Në mënyrë të ngjashme, atëherë, në qoftë se unë atëherë e nxit përdorues, jepni konvikt e studentit, 436 00:19:14,816 --> 00:19:18,390 ju në mënyrë të ngjashme mund të ruajë atë string në variablin konvikt brenda 437 00:19:18,390 --> 00:19:19,940 e kësaj strukture studentore. 438 00:19:19,940 --> 00:19:21,410 >> Dhe tani gjërat të merrni një dashuroj pak. 439 00:19:21,410 --> 00:19:24,420 Dhe kjo do të shikojmë në ndoshta një shumë shumë shpejt. 440 00:19:24,420 --> 00:19:27,970 Por ju do të shihni këtë shumë më tepër në pset 4, kështu që le të vetëm të të shikoj në atë tani. 441 00:19:27,970 --> 00:19:33,364 Ajo rezulton se në përputhje me 23 38, çfarë mendoni se unë jam ndoshta duke bërë? 442 00:19:33,364 --> 00:19:35,530 Unë e kam hequr komentet për sot, por versioni 443 00:19:35,530 --> 00:19:38,660 e kodit online për referencë ka të gjitha komentet. 444 00:19:38,660 --> 00:19:40,171 Çfarë mund të duket të jetë bërë? 445 00:19:40,171 --> 00:19:42,530 >> Audienca: Ruajtja skedarin me të gjitha informacioni që përdoruesi ka hyrë. 446 00:19:42,530 --> 00:19:44,530 >> DAVID J. Malan: Yeah, pikërisht, kjo është një mënyrë të re 447 00:19:44,530 --> 00:19:46,370 që ne jemi duke parë dy, Një tjetër tipar i C, 448 00:19:46,370 --> 00:19:48,700 ku unë mund të krijojë fotografi mia. 449 00:19:48,700 --> 00:19:51,580 Deri më tani, pothuajse çdo program ju keni shkruar është pa shtetësi. 450 00:19:51,580 --> 00:19:53,334 Sa më shpejt që është bërë punë, kjo është ajo. 451 00:19:53,334 --> 00:19:55,000 Nuk ka asnjë kujtim apo kujtesë e saj. 452 00:19:55,000 --> 00:19:56,110 Nuk ka asnjë skedar ruajtur. 453 00:19:56,110 --> 00:19:58,120 Por në qoftë se ju nuk doni të ruani të dhëna që ka 454 00:19:58,120 --> 00:20:02,100 ndodhi, si në një lojë ose një program si kjo, rezulton ne mund të bëjmë kështu. 455 00:20:02,100 --> 00:20:04,360 Dhe ju do të shihni këtë më shumë në pset 4 dhe në nenin. 456 00:20:04,360 --> 00:20:08,661 Por kjo linjë 23 thelb krijon një skedar të quajtur students.csv. 457 00:20:08,661 --> 00:20:10,160 Dhe ju mund të keni parë këtë më parë. 458 00:20:10,160 --> 00:20:14,250 Edhe në qoftë se ju kurrë nuk kam studiuar CS më parë, CSV është Variablat presje-të ndara. 459 00:20:14,250 --> 00:20:19,000 Është si një njeriu shumë të varfër version i një file Excel, 460 00:20:19,000 --> 00:20:22,270 që do të thotë se ajo mund të jetë e hapur në Excel dhe në Numrat Apple, 461 00:20:22,270 --> 00:20:23,830 dhe ajo ka rreshtave dhe kolonave. 462 00:20:23,830 --> 00:20:26,485 Por kjo nuk është një pronarit format si Microsoft apo Apple. 463 00:20:26,485 --> 00:20:29,840 Kjo është vetëm presje ndarjen e Vlerat që ne do të shohim në një moment. 464 00:20:29,840 --> 00:20:31,010 >> Dhe vetëm të marrë një guess. 465 00:20:31,010 --> 00:20:33,480 Në linjë 23, në fund të fundi, argumenti im i dytë 466 00:20:33,480 --> 00:20:37,700 për këtë funksion të ri të quajtur f hapur për fotografi të hapur është w. 467 00:20:37,700 --> 00:20:39,430 Çfarë mund w treguar? 468 00:20:39,430 --> 00:20:40,022 Po? 469 00:20:40,022 --> 00:20:41,260 >> Audienca: Kjo ju lejon të shkruani në dosjen? 470 00:20:41,260 --> 00:20:42,630 >> DAVID J. Malan: Kjo ju lejon ju shkruani në dosjen. 471 00:20:42,630 --> 00:20:44,810 Pra, ka disa variante që ne mund të vihet në prizë këtu. 472 00:20:44,810 --> 00:20:47,184 Por vetëm nëse ju doni të lexoni fotografi, që është të shikoni në atë 473 00:20:47,184 --> 00:20:50,010 dhe lexoni atë në kujtesë, ju vetëm përdorni quote mbyll thonjëzat "r". 474 00:20:50,010 --> 00:20:53,110 Nëse ju doni të shkruani të skedar, ju përdorni kuotë mbyll thonjëzat "w". 475 00:20:53,110 --> 00:20:55,190 Ka edhe append dhe disa gjëra të tjera 476 00:20:55,190 --> 00:20:57,356 në qoftë se ju dëshironi të modifikoni skedarët ekzistues. 477 00:20:57,356 --> 00:21:00,480 Tani ne jemi duke shkuar për të mbajtur duke parë këtë gjë, atëherë ne do të kthehen të vijë 24. 478 00:21:00,480 --> 00:21:02,640 NULL, ajo rezulton, është një vlerë të veçantë që 479 00:21:02,640 --> 00:21:06,070 mund të kthehen nga disa funksione nëse diçka ka shkuar wrong-- 480 00:21:06,070 --> 00:21:08,490 Nëse skedari nuk ekziston, në qoftë se ju keni dalë jashtë kujtesës, 481 00:21:08,490 --> 00:21:09,620 ose një bandë e gabimeve të tjera. 482 00:21:09,620 --> 00:21:13,470 Por tani për tani, le të supozojmë se kjo është kontrolluar vetëm konvencionale gabim. 483 00:21:13,470 --> 00:21:17,090 Këtu në linjë 26, unë jam iterating nga 0 deri ne 3 mbi të gjithë nxënës mi. 484 00:21:17,090 --> 00:21:20,470 Dhe kjo është lloj i lloj i funksionit të ri, fprintf, 485 00:21:20,470 --> 00:21:21,460 por vetëm të marrë një guess. 486 00:21:21,460 --> 00:21:24,370 Nëse printf është vetëm të shtypura një varg formatuar, 487 00:21:24,370 --> 00:21:26,507 çfarë do të fprintf ndoshta do të thotë? 488 00:21:26,507 --> 00:21:27,590 Audienca: Printo në një skedar. 489 00:21:27,590 --> 00:21:29,290 DAVID J. Malan: Print një varg i formatuar në një skedar. 490 00:21:29,290 --> 00:21:31,180 Kjo është ajo shtesë f mjeti është skedar. 491 00:21:31,180 --> 00:21:36,420 Dhe argumenti i ri i parë duhet të jetë ndryshorja që përfaqëson dosjen tuaj. 492 00:21:36,420 --> 00:21:38,866 Atëherë ne vetëm duhet një format string ashtu si printf. 493 00:21:38,866 --> 00:21:40,740 Dhe, edhe pse kjo Sintaksa është e re, kjo vetëm 494 00:21:40,740 --> 00:21:44,610 do të thotë plug në emër të studentit, plug-në konvikt të studentëve, dhe pastaj 495 00:21:44,610 --> 00:21:47,160 me fclose, të mbyllur dosjen. 496 00:21:47,160 --> 00:21:49,730 Dhe pastaj lastly-- kjo është e re dhe ne do të kthehen në këtë 497 00:21:49,730 --> 00:21:53,240 para long-- unë jam liruar studenti për arsye 498 00:21:53,240 --> 00:21:54,860 që ka ndodhur deri më lart atje. 499 00:21:54,860 --> 00:21:56,820 Por ne do të kthehem në se para long-- 500 00:21:56,820 --> 00:21:59,820 kjo është për shkak të asaj se si është getString në fakt duke punuar nën kapuç. 501 00:21:59,820 --> 00:22:01,280 >> Pra, le të marrin një vështrim të shpejtë këtu. 502 00:22:01,280 --> 00:22:04,380 Nëse unë lloji ls në directory time, vëreni se unë nuk e bëj 503 00:22:04,380 --> 00:22:09,360 të ketë një skedar të quajtur students.csv, jo vetëm atje, nuk ekziston. 504 00:22:09,360 --> 00:22:14,965 Pra, nëse unë tani hartojnë këtë program, bëjnë structs-1,. / structs-1, 505 00:22:14,965 --> 00:22:20,570 dhe unë jam duke shkuar për të shkuar përpara dhe shkruani Andi, i cili jeton në Berkeley në Yale. 506 00:22:20,570 --> 00:22:26,350 Ne do të kemi Rob i cili jeton në Thayer këto ditë. 507 00:22:26,350 --> 00:22:33,760 Dhe le të dalë me ku është, unë mendoj se, Maria është në Mather, 508 00:22:33,760 --> 00:22:35,100 në qoftë se kam mend saktë. 509 00:22:35,100 --> 00:22:36,460 >> Pra, asgjë nuk duket të ndodhë. 510 00:22:36,460 --> 00:22:40,680 Por në qoftë se unë lloji ls tani, ka students.csv. 511 00:22:40,680 --> 00:22:43,080 Le të shkojnë përpara dhe të students.csv hapur. 512 00:22:43,080 --> 00:22:46,050 Kjo është përsëri një shumë format lehtë skedar. 513 00:22:46,050 --> 00:22:49,570 Por unë e kam miratuar thjesht një konventë që unë kam dy rreshtave dhe kolonave këtu. 514 00:22:49,570 --> 00:22:52,020 Kolona e parë është emrat e parë Popullit. 515 00:22:52,020 --> 00:22:55,740 Kolona e dytë është studentit fjetore, apo kolegj, apo shtëpi, apo gjësend. 516 00:22:55,740 --> 00:22:57,900 Dhe tani unë e kam ruajtur këtë të përhershme në një skedar. 517 00:22:57,900 --> 00:22:59,280 >> Pra, kjo nuk është e gjitha se interesante. 518 00:22:59,280 --> 00:23:02,980 Por kjo është vetëm një gur shkelën tani për të qenë në gjendje të vazhdojnë informacione 519 00:23:02,980 --> 00:23:04,040 përgjithmonë. 520 00:23:04,040 --> 00:23:08,340 Pra, le të shohim tani se çfarë më shumë që ne mund të të bëjë me këto dhe të tjera karakteristika. 521 00:23:08,340 --> 00:23:10,729 Por së pari, ndonjë pyetje? 522 00:23:10,729 --> 00:23:12,145 Kjo ishte një shumë, dhe se ishte i shpejtë. 523 00:23:12,145 --> 00:23:16,131 Por ju do të shihni një shumë më shumë në pset 4, si. 524 00:23:16,131 --> 00:23:16,630 Po? 525 00:23:16,630 --> 00:23:19,360 >> Audienca: A ka ndonjë mënyrë për të vazhdojë duke shtuar emra për këtë dosje? 526 00:23:19,360 --> 00:23:19,880 >> DAVID J. Malan: Pyetje e mirë. 527 00:23:19,880 --> 00:23:21,800 A ka ndonjë mënyrë për të vazhduar duke shtuar emra për këtë dosje? 528 00:23:21,800 --> 00:23:22,340 Po. 529 00:23:22,340 --> 00:23:24,630 Dhe, në fakt, në qoftë se ju të përfundojë up ri-hapur dosjen, 530 00:23:24,630 --> 00:23:26,780 ju do të përdorni kuotë mbyll thonjëzat "një" për bashkangjit, 531 00:23:26,780 --> 00:23:31,090 e cila vetëm do të shtojë një linjë të re, një Linja e re përsëri dhe përsëri, pikërisht. 532 00:23:31,090 --> 00:23:32,010 Pyetje e mirë. 533 00:23:32,010 --> 00:23:32,950 Pyetje të tjera? 534 00:23:32,950 --> 00:23:33,450 Po? 535 00:23:33,450 --> 00:23:35,580 Audienca: Nëse ju u Programi përsëri tani, 536 00:23:35,580 --> 00:23:38,000 do të mbajë duke shtuar emra të fotografi apo do të hapë një skedë të re? 537 00:23:38,000 --> 00:23:38,740 >> DAVID J. Malan: Ah, pyetje e mirë. 538 00:23:38,740 --> 00:23:41,448 Në qoftë se ju u zhvillua programin përsëri djathtas tani, shtypur ndoshta në emra të rinj, 539 00:23:41,448 --> 00:23:44,820 do të shtojë në dosjen ose të prishësh file? 540 00:23:44,820 --> 00:23:47,420 Ky i fundit, sepse unë jam i jo duke përdorur mënyrën append. 541 00:23:47,420 --> 00:23:49,930 Dhe për shkak se unë jam vetëm verbërisht hapjes së kartelës për shkrim, 542 00:23:49,930 --> 00:23:51,310 ajo është vetëm do të prishësh file. 543 00:23:51,310 --> 00:23:54,570 Kështu që unë me të vërtetë do të duhet të bëni është append, në qoftë se unë dua që në fakt të ketë një afat të gjatë 544 00:23:54,570 --> 00:23:55,350 bazës së të dhënave. 545 00:23:55,350 --> 00:23:58,220 >> Tani CSV është e dobishme, sinqerisht, madje për si në qoftë se ju jeni writing-- 546 00:23:58,220 --> 00:24:00,100 dhe ne do të shohim përfundimisht këtë më vonë në semestrin kur 547 00:24:00,100 --> 00:24:01,455 ne përdorim CSVs për qëllime të tjera. 548 00:24:01,455 --> 00:24:04,920 Nëse ju doni për të ruajtur të gjithë njerëzit të cilët janë regjistruar për një ngjarje, 549 00:24:04,920 --> 00:24:07,420 ose nënshkruar për nxënësin tuaj grup, ose diçka të tillë, 550 00:24:07,420 --> 00:24:10,330 ruajtjen e të dhënave në këtë lloj i formatit është super i përshtatshëm. 551 00:24:10,330 --> 00:24:12,580 Sepse fjalë për fjalë, në qoftë se unë ishin për të shkarkuar këtë skedar. 552 00:24:12,580 --> 00:24:14,540 Unë mund të double-- dhe le të vërtetë të provoni këtë 553 00:24:14,540 --> 00:24:16,720 në qoftë se unë kam Excel ose numrat në këtu. 554 00:24:16,720 --> 00:24:19,130 >> Unë jam duke shkuar për të right-click ose kontroll-klikoni dosjen time. 555 00:24:19,130 --> 00:24:20,020 Uh. 556 00:24:20,020 --> 00:24:21,830 Djathtas-klikoni ose kontroll-click dosjen time. 557 00:24:21,830 --> 00:24:24,960 Come on, miu im nuk është duke bashkëpunuar. 558 00:24:24,960 --> 00:24:32,694 Download-- unë jam duke shkuar për shkarko të gjitha dosjet këtu kështu 559 00:24:32,694 --> 00:24:33,860 vetëm kështu që unë mund të rrëmbej këtë një të tillë. 560 00:24:33,860 --> 00:24:37,850 Dhe le të shohim nëse kjo punon hera e parë students.csv-- 561 00:24:37,850 --> 00:24:39,310 Unë e kam aktivizuar. 562 00:24:39,310 --> 00:24:41,360 Tani ata duan të shohin kontaktet e mia. 563 00:24:41,360 --> 00:24:44,310 Tani, unë duhet të regjistroheni. 564 00:24:44,310 --> 00:24:47,620 Shih se sa e lehtë është për t'u përdorur CSVs? 565 00:24:47,620 --> 00:24:50,840 Po, të mbajtur atë deri në datën. 566 00:24:50,840 --> 00:24:52,375 OK, tani ne jemi gati për klasë. 567 00:24:52,375 --> 00:24:58,750 568 00:24:58,750 --> 00:25:00,370 OK, oh, çfarë ka të re? 569 00:25:00,370 --> 00:25:02,920 OK, afër. 570 00:25:02,920 --> 00:25:04,750 Kjo ishte magjike. 571 00:25:04,750 --> 00:25:07,280 OK, tani ne kemi për të rinovuar. 572 00:25:07,280 --> 00:25:10,890 Dhe tani, ajo harruan çfarë paraqesë Kam hapur fillimisht, 573 00:25:10,890 --> 00:25:13,090 por ajo që a-- atje ne do të shkojmë. 574 00:25:13,090 --> 00:25:16,341 OK, kështu që tani kemi një file Excel. 575 00:25:16,341 --> 00:25:18,290 Faleminderit. 576 00:25:18,290 --> 00:25:20,764 >> OK, kështu që ajo që unë bëra ishte pjesa më e lehtë. 577 00:25:20,764 --> 00:25:23,930 Sigurisht unë mund të ketë para-instaluar Excel, ose numrat, apo çfarëdo programi. 578 00:25:23,930 --> 00:25:25,846 Por kjo është e bukur, sepse tani unë mund të manipulojë 579 00:25:25,846 --> 00:25:28,090 të dhënat në një format standard. 580 00:25:28,090 --> 00:25:30,294 >> Konteksti Pra, tani le të kaloni në ku ne u ndërpre 581 00:25:30,294 --> 00:25:32,710 Herën e fundit, e cila ishte për të filluar për të marrë off rrota trajnimit. 582 00:25:32,710 --> 00:25:34,543 Por së pari, ju nuk e keni shihni këtë drekë më parë 583 00:25:34,543 --> 00:25:38,150 po ndodh prapë këtu në zjarr dhe Akull në Kembrixh, Sitar në New Haven. 584 00:25:38,150 --> 00:25:43,150 Sign up në faqen CS50s ASAP për t'u bashkuar me studentët CS50 dhe stafin. 585 00:25:43,150 --> 00:25:46,090 >> Pra, ne e mori rrota trajnimit off të hënën si follows-- 586 00:25:46,090 --> 00:25:49,120 string është deklaruar në Biblioteka CS50s për disa kohë. 587 00:25:49,120 --> 00:25:52,650 Dhe kjo është e bukur, sepse ai ua mundëson ne që të flasim për variablat si 588 00:25:52,650 --> 00:25:54,660 Fjalët plotë dhe fjali dhe më shumë. 589 00:25:54,660 --> 00:25:56,710 Por kjo rezulton string nuk ekziston. 590 00:25:56,710 --> 00:26:00,200 Kjo është vetëm një sinonim, ose një pseudonim, që kemi krijuar për diçka që 591 00:26:00,200 --> 00:26:03,780 në fakt është një pak më shumë teknik quhet char *. 592 00:26:03,780 --> 00:26:07,900 >> Dhe me të vërtetë, ne pamë një shembull e një programi të hënën 593 00:26:07,900 --> 00:26:11,200 që nuk sillen si mjaft kemi pritur. 594 00:26:11,200 --> 00:26:13,630 Kjo ishte skedar, krahasoni-0. 595 00:26:13,630 --> 00:26:17,910 Dhe kujtoj se krahasojnë-0, në qoftë se I përpiluar programin e së hënës 596 00:26:17,910 --> 00:26:22,670 dhe drejtuar krahasojnë-0 dhe shkruani mom në vogle, dhe nëna në Fjala përsëri. 597 00:26:22,670 --> 00:26:25,320 Programi këmbënguli I shkruani gjëra të ndryshme, 598 00:26:25,320 --> 00:26:29,210 edhe pse mom, të gjitha në Fjala, është identike me sy. 599 00:26:29,210 --> 00:26:31,990 Pra, çfarë ishte përgjigja e shkurtër pse kompjuteri mendon 600 00:26:31,990 --> 00:26:34,500 këto dy vargjet janë të ndryshme? 601 00:26:34,500 --> 00:26:35,250 Po? 602 00:26:35,250 --> 00:26:36,534 >> Audienca: [padëgjueshme] 603 00:26:36,534 --> 00:26:37,450 DAVID J. Malan: E drejta. 604 00:26:37,450 --> 00:26:39,600 Pra, nëna, hera e parë I shkruani atë në, është duke u 605 00:26:39,600 --> 00:26:42,710 ruhet diku në kompjuterin My kujtim por në një vend tjetër 606 00:26:42,710 --> 00:26:44,690 sesa të dytën herë unë lloji në mom. 607 00:26:44,690 --> 00:26:46,580 Tani ajo sigurisht mund të jetë i optimizuar. 608 00:26:46,580 --> 00:26:49,205 Kompjuteri mund të jetë i zgjuar dhe realizuar këto dy vargje, hej, 609 00:26:49,205 --> 00:26:49,954 ata janë identike. 610 00:26:49,954 --> 00:26:51,520 Më lejoni të mos redundantly ruajtur atë. 611 00:26:51,520 --> 00:26:54,229 Por kompjuterat nuk e bëjmë atë optimization nëse ju tregoni atyre për të. 612 00:26:54,229 --> 00:26:56,061 Pra, si parazgjedhje, ata janë vetëm do të përfundojë deri 613 00:26:56,061 --> 00:26:57,670 në dy vende të ndryshme në kujtesë. 614 00:26:57,670 --> 00:27:01,570 Dhe në mënyrë që të jetë më i qartë, kur ne krahasim me dy vargjet, 615 00:27:01,570 --> 00:27:03,950 I pari ishte quajtur s, e dytë u quajt 616 00:27:03,950 --> 00:27:08,530 t, çfarë konkretisht isha unë krahasuar këtu on line 13? 617 00:27:08,530 --> 00:27:09,494 Po. 618 00:27:09,494 --> 00:27:12,390 >> Audienca: Është vendi në kujtesën se variabli do të tregojë për. 619 00:27:12,390 --> 00:27:14,900 >> DAVID J. Malan: Pikërisht, unë kam qenë krahasuar vend në kujtesën e 620 00:27:14,900 --> 00:27:16,300 që këto variabla vuri në dukje. 621 00:27:16,300 --> 00:27:20,560 Pra konkretisht, në qoftë se nëna ishte në numër bajt 1 dhe 2, dhe 3, 622 00:27:20,560 --> 00:27:24,020 dhe 4-- sepse kujtohet backslash 0 duhet të jetë mbi të gjitha rrugën në fund. 623 00:27:24,020 --> 00:27:29,420 Dhe shembull tjetër i Mami, m-o-m, ishte në adresën 10, 11, 12, dhe 13. 624 00:27:29,420 --> 00:27:33,100 Unë u krahasuar 1, që adresa, që lokacioni në kujtesë, 625 00:27:33,100 --> 00:27:35,160 kundër 10, i cili është natyrisht që nuk është e njëjtë. 626 00:27:35,160 --> 00:27:36,260 1 nuk është 10. 627 00:27:36,260 --> 00:27:39,620 >> Pra, kjo është e bukur në atë kjo është goxha e drejtpërdrejtë. 628 00:27:39,620 --> 00:27:42,870 Por kjo është problematike për aq sa ne nuk mund të duket për të krahasuar vargjet. 629 00:27:42,870 --> 00:27:44,930 Pra fundamentally-- dhe në këtë nivel të ulët, 630 00:27:44,930 --> 00:27:47,300 në qoftë se ju të kërkuar për të zbatuar një program për të krahasuar 631 00:27:47,300 --> 00:27:50,270 dy fjalë të veçanta që përdoruesi ka shtypur në për cilësinë, 632 00:27:50,270 --> 00:27:53,944 ata vargoj char për char, vetëm në terma të përgjithshme, 633 00:27:53,944 --> 00:27:55,360 çfarë duhet të bëjmë, me sa duket? 634 00:27:55,360 --> 00:27:57,940 Kjo nuk është e mjaftueshme vetëm për të shikoni në këto dy adresa. 635 00:27:57,940 --> 00:27:58,860 Çfarë duhet të bëjmë? 636 00:27:58,860 --> 00:27:59,360 Po? 637 00:27:59,360 --> 00:28:01,120 >> Audienca: Iterate përmes string [e padëgjueshme]. 638 00:28:01,120 --> 00:28:02,600 >> DAVID J. Malan: Po, le të iterate përmes vargut. 639 00:28:02,600 --> 00:28:05,808 Le të përdorim një për lak, një lak, ndërsa, ose Çfarëdo që ju jeni më të rehatshme me. 640 00:28:05,808 --> 00:28:08,840 Dhe në qoftë se ne kemi marrë dy vargjet diku në kujtesë, le të shohim në çdo-së 641 00:28:08,840 --> 00:28:11,770 karakteri i parë, atëherë çdo e dytë karakter, pastaj të tretë, dhe të katërt, 642 00:28:11,770 --> 00:28:15,206 dhe të pestë, derisa ne goditi çfarë vlere të veçantë rojtar? 643 00:28:15,206 --> 00:28:16,080 Audienca: [padëgjueshme] 644 00:28:16,080 --> 00:28:18,800 DAVID J. Malan: Yeah, backslash zero, në të cilën pikë në secilin varg 645 00:28:18,800 --> 00:28:20,100 ne mund të vendosë se është ajo. 646 00:28:20,100 --> 00:28:21,970 A e kemi përputhet çdo karakter të vetëm? 647 00:28:21,970 --> 00:28:22,990 Nëse jo, kthimit të rreme. 648 00:28:22,990 --> 00:28:24,770 Nëse është kështu, kthimi i vërtetë. 649 00:28:24,770 --> 00:28:28,800 Dhe kështu kjo është pikërisht ajo që ky version i programit të krahasuar-1.c bën. 650 00:28:28,800 --> 00:28:31,677 Kjo është identike me atë që ne shikoi hënën përveç që unë e kam 651 00:28:31,677 --> 00:28:34,760 gotten shpëtoj e fjalës string-- pse që nuk ka impact-- funksionale të gjithë 652 00:28:34,760 --> 00:28:37,450 Unë jam duke bërë tani është hequr disa rrota vizuale trajnimit, 653 00:28:37,450 --> 00:28:40,880 por për të parë qartë se s dhe t janë adresat. 654 00:28:40,880 --> 00:28:43,020 Dhe kjo është ajo që ylli, asterisk, përfaqëson 655 00:28:43,020 --> 00:28:46,690 është një adresë, i njohur ndryshe më shumë teknikisht si një tregues. 656 00:28:46,690 --> 00:28:49,880 >> Kështu që kur unë deklaroj s në Linja 9 dhe them char * s, 657 00:28:49,880 --> 00:28:52,160 kjo nuk do të thotë më jepni një varg. 658 00:28:52,160 --> 00:28:56,360 Kjo do të thotë më jepni një variabël të cilit qëllimi në jetë është për të ruajtur një adresë. 659 00:28:56,360 --> 00:29:00,400 Sepse unë jam gati për të vënë adresa e një varg në të. 660 00:29:00,400 --> 00:29:03,500 Dhe me të vërtetë, getString, të jetë i qartë, nuk do të kthehet një varg. 661 00:29:03,500 --> 00:29:06,110 Ajo nuk kthehet mom backslash zero, në vetvete. 662 00:29:06,110 --> 00:29:10,005 Çfarë do getString specifike dhe pikërisht të kthehet? 663 00:29:10,005 --> 00:29:10,880 Audienca: [padëgjueshme] 664 00:29:10,880 --> 00:29:14,080 DAVID J. Malan: një adresë, Adresa e karakterit parë 665 00:29:14,080 --> 00:29:16,070 në disa varg ajo ka marrë. 666 00:29:16,070 --> 00:29:19,250 Dhe kështu që tani që ne jemi duke parë një fjalen veçantë përsëri. 667 00:29:19,250 --> 00:29:20,640 Dhe, unë përmendur tërthorazi këtë më herët. 668 00:29:20,640 --> 00:29:23,620 Kjo do të jetë konventa e mirë se ne do të shohim përsëri dhe përsëri tani. 669 00:29:23,620 --> 00:29:27,540 Unë jam duke kontrolluar për të siguruar që s nuk është i pavlefshëm dhe t nuk është i pavlefshëm. 670 00:29:27,540 --> 00:29:30,100 Sepse bazuar në tim të vërtetë Përmendja shpejtë më herët, 671 00:29:30,100 --> 00:29:35,510 çfarë mund të thotë nëse getString nuk kthehet një adresë por N-U-L-L, e cila është një herë, 672 00:29:35,510 --> 00:29:36,990 disa vlera të veçanta? 673 00:29:36,990 --> 00:29:37,890 >> Audienca: Gabim. 674 00:29:37,890 --> 00:29:38,600 >> DAVID J. Malan: Kjo është një gabim. 675 00:29:38,600 --> 00:29:39,550 Dicka shkoi keq. 676 00:29:39,550 --> 00:29:41,341 Dhe çfarë mënyrë tipike mund të ndodhë, sidomos 677 00:29:41,341 --> 00:29:45,162 me strings-- që mund të jetë e gjatësisë panjohur në advance-- 678 00:29:45,162 --> 00:29:46,870 ndoshta kompjuterët ' jashtë kujtesës, ndoshta 679 00:29:46,870 --> 00:29:49,280 ju shtypur në një të tillë fjalë të gjatë ose fjali 680 00:29:49,280 --> 00:29:51,880 ose ngjit një ese të tillë të madh ka jo vetëm kujtesë të mjaftueshme. 681 00:29:51,880 --> 00:29:55,340 Dhe kështu getString nuk mund të kthehen adresa e të gjithë gjë, 682 00:29:55,340 --> 00:29:56,620 kështu që vetëm të kthehet asgjë. 683 00:29:56,620 --> 00:30:00,580 Dhe ai thotë se një gabim ka ndodhur duke u kthyer në vlerë të veçantë null. 684 00:30:00,580 --> 00:30:02,890 Kjo është adresa zero, kështu që të flasin. 685 00:30:02,890 --> 00:30:06,157 >> Tani del C vjen me një funksion që e bën këtë përsëritje. 686 00:30:06,157 --> 00:30:09,240 Ne nuk duhet të zbatojnë këtë me një për lak ose një lak, ndërsa veten. 687 00:30:09,240 --> 00:30:11,150 Ne mund të përdorim një funksion, quajtur shkurtimisht, 688 00:30:11,150 --> 00:30:15,400 llokoçis comp, ose varg të krahasuar, të cilit qëllimi në jetë është që të bëjë pikërisht këtë. 689 00:30:15,400 --> 00:30:19,990 Ju jepte dy pointers, dy adresa, dhe ai do të shkojë në këto adresa 690 00:30:19,990 --> 00:30:23,130 dhe pastaj krahasoni letër për letër për letër për cilësinë, 691 00:30:23,130 --> 00:30:26,610 ndalur vetëm kur ajo është e vërtetë? 692 00:30:26,610 --> 00:30:31,540 Kur intuitive duhet ndezur comp ndaluar iterating, vetëm të jetë i qartë? 693 00:30:31,540 --> 00:30:35,400 Kur ajo godet një backslash 0 në ose string, në të cilën pikë ajo mund të vendosë 694 00:30:35,400 --> 00:30:38,910 ka gjithçka përputhet, ose ka qenë atje një mospërputhje? 695 00:30:38,910 --> 00:30:42,740 >> Pra, në qoftë se kemi drejtuar këtë tani dhe provoni lojë tonë të vogël kapitalizimin, 696 00:30:42,740 --> 00:30:49,260 kështu që e bëjnë të krahasuar-1, ./compare-1, dhe shkruani mom në Fjala dy herë. 697 00:30:49,260 --> 00:30:50,560 Tani kjo është e njëjta gjë. 698 00:30:50,560 --> 00:30:54,080 Dhe në qoftë se unë të bëjë atë përsëri me vogle dhe pastaj ndoshta uppercase. 699 00:30:54,080 --> 00:30:56,720 Tani ajo me të vërtetë e dallon në mes të sipërme dhe të vogla. 700 00:30:56,720 --> 00:31:00,440 Pra, jo të gjitha se e vështirë ose magjike, por kjo nuk shpjegoj tani 701 00:31:00,440 --> 00:31:03,140 çfarë po ndodh nën kapuç. 702 00:31:03,140 --> 00:31:07,640 >> Pra, ajo që më shumë mund të ekstrakt nga ky lloj të mësimit? 703 00:31:07,640 --> 00:31:08,980 Pra, le të marrin një vështrim në këtë. 704 00:31:08,980 --> 00:31:15,380 Unë jam duke shkuar për të shkuar përpara dhe të shkruajnë një Programi i shpejtë këtu quhet kopje-0. 705 00:31:15,380 --> 00:31:21,594 Dhe tani le të shkojnë përpara dhe në fakt le të bëjmë this-- me kopje-0, 706 00:31:21,594 --> 00:31:23,010 hidhini një sy në atë që unë kam marrë këtu. 707 00:31:23,010 --> 00:31:24,712 Unë së pari them përdorues, thonë diçka. 708 00:31:24,712 --> 00:31:26,420 Pastaj unë të marrë një varg dhe kam ruajtur atë në s. 709 00:31:26,420 --> 00:31:29,810 Pastaj unë kontrolloj nëse s barabartë barabartë NULL, vetëm të kthehet 1. 710 00:31:29,810 --> 00:31:31,590 Pra, kjo është vetëm kontrolluar standarde gabim. 711 00:31:31,590 --> 00:31:33,112 Asgjë interesante ka ndodhur. 712 00:31:33,112 --> 00:31:36,320 Dhe në fakt, në qoftë se ne të shpëtoj prej gabimit kontrolluar, kjo duket si javë 1 Kodi 713 00:31:36,320 --> 00:31:36,985 momentin. 714 00:31:36,985 --> 00:31:39,110 Por unë kam filluar të marrë një pak më të mirë për këtë. 715 00:31:39,110 --> 00:31:43,340 >> Tani në linjë 16, një javë më parë, ndoshta ditë edhe një çift ose minuta më parë, 716 00:31:43,340 --> 00:31:46,720 ju mund të thoni linja 16 është duke krijuar një ndryshore të quajtur t 717 00:31:46,720 --> 00:31:48,219 dhe kopjimi s në të. 718 00:31:48,219 --> 00:31:50,010 Dhe kjo është një mënyrë të përkryer takeaway arsyeshme. 719 00:31:50,010 --> 00:31:51,560 Por të jenë më të saktë tani. 720 00:31:51,560 --> 00:31:54,190 Çfarë po ndodh në linjë 16? 721 00:31:54,190 --> 00:31:56,170 Çfarë është duke u kopjuar nga djathta në të majtë? 722 00:31:56,170 --> 00:31:56,669 Po? 723 00:31:56,669 --> 00:31:58,490 Audienca: është t duke marrë një adresë të s? 724 00:31:58,490 --> 00:32:01,220 >> DAVID J. Malan: Pikërisht, t është duke adresën e s. 725 00:32:01,220 --> 00:32:05,170 Pra, të jetë i qartë tani, nëse unë shkoj përsëri për këtë shembull më parë 726 00:32:05,170 --> 00:32:08,520 dhe unë të nxjerr gjë unë kam shtypur në. 727 00:32:08,520 --> 00:32:11,640 Dhe ajo që unë kam shtypur in-- këtu është s, dhe këtu 728 00:32:11,640 --> 00:32:15,830 është ajo që unë kam shtypur në diku në kujtesës, mom dhe pastaj një backslash 729 00:32:15,830 --> 00:32:17,840 0 që është shtuar për mua. 730 00:32:17,840 --> 00:32:23,060 Ajo që unë ruhet në këtu, kujtoj, kjo është në vendin e 1, 2, 3, 4, 731 00:32:23,060 --> 00:32:24,655 kjo është ajo që është aktualisht në s. 732 00:32:24,655 --> 00:32:29,220 Pra, nëse on line 16, unë them më jep mua një tjetër variabël i quajtur t dhe dyqan 733 00:32:29,220 --> 00:32:33,590 në të vlerë prej s, ajo merr ruajtur këtu nuk do të mom 734 00:32:33,590 --> 00:32:35,480 por vetëm numri 1. 735 00:32:35,480 --> 00:32:38,520 >> Pra, nëse ne shikojmë përpara në këtë program tani, çfarë do të ndodhë? 736 00:32:38,520 --> 00:32:40,690 Pra, vini re se nuk ka ky funksion ju fuqi 737 00:32:40,690 --> 00:32:44,410 e kanë përdorur këtë disa kohë më parë për Cezarit, ose Vigenere, apo ndoshta aspak. 738 00:32:44,410 --> 00:32:48,170 Unë pretendojnë me printf tim, unë jam duke shkuar për të përfituar kopja t. 739 00:32:48,170 --> 00:32:51,616 Së pari në linjë 19, mendje e shëndoshë të shpejtë kontrolloni, kontrolle strlen gjatësinë e t. 740 00:32:51,616 --> 00:32:53,740 Sepse unë nuk dua të përpiqen për të përfituar diçka 741 00:32:53,740 --> 00:32:55,104 në qoftë se nuk ka asnjë varg atje. 742 00:32:55,104 --> 00:32:57,520 Nëse shfrytëzuesi vetëm hit Enter, nuk ka asgjë për të përfituar. 743 00:32:57,520 --> 00:33:01,100 Kështu që unë nuk dua të bëj linjë 21. 744 00:33:01,100 --> 00:33:05,758 Pra, linja 21 është kapitalizuar e cila letër, me sa duket, në t? 745 00:33:05,758 --> 00:33:06,514 >> Audienca: m? 746 00:33:06,514 --> 00:33:08,722 DAVID J. Malan: Ajo duket si ajo e kopjimit të cilën një? 747 00:33:08,722 --> 00:33:09,486 Audienca: m. 748 00:33:09,486 --> 00:33:10,450 DAVID J. Malan: Uh, M. 749 00:33:10,450 --> 00:33:12,685 OK, kështu që m parë, sepse njoftim që unë jam 750 00:33:12,685 --> 00:33:14,935 duke kaluar në toupper, e cila në qoftë se ju kurrë nuk kam parë atë është 751 00:33:14,935 --> 00:33:16,980 vetëm një funksion të germa të mëdha si input saj. 752 00:33:16,980 --> 00:33:20,240 t kllapa zero do të thotë të dhënë mua karakteri zero t. 753 00:33:20,240 --> 00:33:22,550 Dhe kështu si e bën këtë ndryshim foto, të jetë i qartë? 754 00:33:22,550 --> 00:33:25,490 755 00:33:25,490 --> 00:33:29,160 Çfarë duhet të marrë rishkruar apo ndryshuar në lidhje me s dhe t dhe mom 756 00:33:29,160 --> 00:33:30,097 zero backslash. 757 00:33:30,097 --> 00:33:31,470 >> Audienca: [padëgjueshme] 758 00:33:31,470 --> 00:33:34,030 >> DAVID J. Malan: Yeah, kështu që kjo këtu thjesht 759 00:33:34,030 --> 00:33:40,860 nevojë për të marrë ndryshuar to-- rregulluar this-- nevojë për të marrë ndryshuar për një m kapitalit. 760 00:33:40,860 --> 00:33:44,330 Por tani, të shohim më vonë në Programi, në qoftë se unë të shtypura nga 761 00:33:44,330 --> 00:33:49,800 s dhe t si unë të pastër këtu, të shikojnë se çfarë është do të ndodhë shtypjen nga s dhe t. 762 00:33:49,800 --> 00:33:54,310 Pra, të bëjë kopje-0, ./copy-0. 763 00:33:54,310 --> 00:33:57,140 Më lejoni të shkoj përpara dhe të shtypni në mom në të gjitha Fjala. 764 00:33:57,140 --> 00:34:00,140 Vini re dy origjinale dhe kopja janë kapitalizuar. 765 00:34:00,140 --> 00:34:00,850 Përse? 766 00:34:00,850 --> 00:34:04,431 E pra, s dhe t janë të dyja të treguar, në qoftë se ju do, e njëjta copë e kujtesës. 767 00:34:04,431 --> 00:34:06,930 Dhe sinqerisht, kjo është duke u me të vërtetë uninteresting-- faktin 768 00:34:06,930 --> 00:34:09,150 që ne jemi duke përdorur adresën zero këtu. 769 00:34:09,150 --> 00:34:11,719 Unë do të thotë, unë nuk e kujdesit të vërtetë ku stuff është në kujtesën. 770 00:34:11,719 --> 00:34:13,550 Na vjen keq Unë jam duke fshirë një shumë pak. 771 00:34:13,550 --> 00:34:15,674 Por unë nuk e kujdesit të vërtetë ku gjërat janë në kujtesën. 772 00:34:15,674 --> 00:34:18,510 Dhe kështu, me të vërtetë, çfarë programuesit kanë tendencë të mendojnë për 773 00:34:18,510 --> 00:34:21,080 është se kur ju flisni për një adresë, apo një tregues, 774 00:34:21,080 --> 00:34:22,679 kush kujdeset ku ajo është në kujtesë. 775 00:34:22,679 --> 00:34:24,989 Unë nuk e kujdesit në qoftë se është në byte një ose një miliard. 776 00:34:24,989 --> 00:34:27,920 Unë vetëm kujdes se kjo variabël është efektivisht 777 00:34:27,920 --> 00:34:29,620 duke treguar në atë copë e kujtesës. 778 00:34:29,620 --> 00:34:33,350 Dhe kështu, tani e tutje, në vend se bejne lojera fjalesh mbi kujtesës adresat arbitrare, le të 779 00:34:33,350 --> 00:34:36,710 sapo të fillojë të nxjerrë pointers si pointers, si shigjeta. 780 00:34:36,710 --> 00:34:39,340 Pra, çfarë s dhe t vërtetë janë, sipas këtij programi, 781 00:34:39,340 --> 00:34:42,130 për shkak të asaj se si kam krijuar t, kjo është vetëm dy variablave të veçanta 782 00:34:42,130 --> 00:34:43,840 vënë në të njëjtën copë të memories. 783 00:34:43,840 --> 00:34:45,215 Dhe ne nuk e kujdesit se ku janë ata. 784 00:34:45,215 --> 00:34:47,130 Pra, ne mund abstrakte larg asaj detaje. 785 00:34:47,130 --> 00:34:48,780 >> Pra, si mund ta fix this? 786 00:34:48,780 --> 00:34:54,120 Nëse unë dua të shkruaj një version të kopjes program që në fakt kopje string 787 00:34:54,120 --> 00:34:56,840 dhe kapitalizon vetëm kopje, vetëm intuitive, 788 00:34:56,840 --> 00:34:59,766 ajo e mori të jetë një përbërës të zgjidhje tonë? 789 00:34:59,766 --> 00:35:00,640 Audienca: [padëgjueshme] 790 00:35:00,640 --> 00:35:01,420 DAVID J. Malan: Ne kemi nevojë për çfarë? 791 00:35:01,420 --> 00:35:01,820 Audienca: copë e kujtesës. 792 00:35:01,820 --> 00:35:03,280 DAVID J. Malan: Ne kemi nevojë për një tjetër copë e kujtesës, e drejtë? 793 00:35:03,280 --> 00:35:05,360 Ne nuk e dimë se si për të bëjë atë ende, domosdoshmërisht. 794 00:35:05,360 --> 00:35:11,330 Por unë lloj i duhet kjo të ndodhë kështu se nëna origjinal në rastin më të ulët 795 00:35:11,330 --> 00:35:14,170 përfundon në atë copë shtesë e kujtesës. 796 00:35:14,170 --> 00:35:19,770 Dhe pastaj kur unë të ndryshojë kopje, unë nuk duan të ndryshojnë këtë kopje këtu. 797 00:35:19,770 --> 00:35:26,020 Unë në vend që dua të ndryshojë vetëm këtë kopje në mënyrë që origjinali është i pandryshuar. 798 00:35:26,020 --> 00:35:27,980 >> Pra, le të shohim se si ne mund të bëjmë këtë. 799 00:35:27,980 --> 00:35:31,800 Në kopje-1, e cila ka tashmë është zhveshur nga komenti, 800 00:35:31,800 --> 00:35:33,250 por është komentuar online. 801 00:35:33,250 --> 00:35:36,710 Ne vend bëjmë të following-- këto Linjat janë identike, të merrni mua një varg 802 00:35:36,710 --> 00:35:38,340 dhe e quajti atë s. 803 00:35:38,340 --> 00:35:43,500 Por tani le të shohim në një nga më të tona komplekse por e fundit e kompleksitetit 804 00:35:43,500 --> 00:35:47,340 për pak kohë, linja 16 e bën pikërisht këtë. 805 00:35:47,340 --> 00:35:49,400 Pra, nëse i qetë juaj me foto ne vetëm drew-- 806 00:35:49,400 --> 00:35:51,790 më jepni një copë e re e kujtesës, kopjoni çdo gjë në të, 807 00:35:51,790 --> 00:35:53,730 le të shohim se si ne të përkthehet se të kodit. 808 00:35:53,730 --> 00:35:59,400 >> Pra linjë 16, në anën e majtë, char * t ma jep këtë kuti mbi këtu. 809 00:35:59,400 --> 00:36:00,230 Kjo është e gjitha ajo ka. 810 00:36:00,230 --> 00:36:03,240 Në anën e djathtë, m alloc, ose malloc, 811 00:36:03,240 --> 00:36:06,480 është kujtese, super të dashuroj, një mënyrë e fshehtë e vetëm duke thënë 812 00:36:06,480 --> 00:36:07,640 më jepni një copë e kujtesës. 813 00:36:07,640 --> 00:36:09,290 Sa memorie nuk kemi nevojë? 814 00:36:09,290 --> 00:36:10,910 E pra, është lloj i një shprehje të madhe. 815 00:36:10,910 --> 00:36:12,570 Por le të shohim se çfarë do të thotë këtu. 816 00:36:12,570 --> 00:36:15,940 Pra kjo, natyrisht, është të japë mua gjatësia varg s. 817 00:36:15,940 --> 00:36:19,094 Pra, nëna ajo duhet të jetë ajo? 818 00:36:19,094 --> 00:36:21,010 Pra, vetëm tre, apo jo? nëna është tre karaktere. 819 00:36:21,010 --> 00:36:22,830 Ju nuk numëroni backslash zero kur ju 820 00:36:22,830 --> 00:36:25,960 flasin për gjatësinë e një varg kjo është Aktualisht letra dukshme njerëzore. 821 00:36:25,960 --> 00:36:28,020 Pra nëna, kështu që kjo më jep 3. 822 00:36:28,020 --> 00:36:31,170 Por prisni një minutë, unë jam tani duke shtuar 1. 823 00:36:31,170 --> 00:36:34,861 Përse të vërtetë duan të ndajë 4 bytes dhe jo vetëm 3? 824 00:36:34,861 --> 00:36:35,360 Po? 825 00:36:35,360 --> 00:36:36,910 >> Audienca: Për vlerën sentinel? 826 00:36:36,910 --> 00:36:38,951 >> DAVID J. Malan: Pikërisht, për këtë vlerë sentinel. 827 00:36:38,951 --> 00:36:40,840 Për backslash zero, Unë kam nevojë për 4 bytes gjithsej. 828 00:36:40,840 --> 00:36:42,870 Kështu që kam nevojë për gjatësinë e vargut plus 1. 829 00:36:42,870 --> 00:36:45,400 Dhe pastaj vetëm për measure-- mirë edhe pse në këtë sistem, 830 00:36:45,400 --> 00:36:49,390 ajo gjithmonë do të jetë 1-- unë jam duke thënë shumohen kjo nga madhësia e një char. 831 00:36:49,390 --> 00:36:51,552 Rezulton se sizeof është një operator në C që 832 00:36:51,552 --> 00:36:53,260 vetëm ju e tregon Numri i bytes kjo është 833 00:36:53,260 --> 00:36:54,700 e nevojshme për një lloj të caktuar të të dhënave. 834 00:36:54,700 --> 00:36:57,740 Ajo nuk punon për vargjeve, në mënyrë tipike, nganjëherë ajo bën. 835 00:36:57,740 --> 00:36:59,210 Por në rastin e përgjithshëm, nr. 836 00:36:59,210 --> 00:37:02,330 Por kjo do të më thoni se sa bytes një char është, që rezulton është gjithmonë 1. 837 00:37:02,330 --> 00:37:04,080 Pra, kjo është si të shumëzuar me 1. 838 00:37:04,080 --> 00:37:05,900 >> Linja Pra, super i fshehtë në kërkim të kodit. 839 00:37:05,900 --> 00:37:09,320 Por e gjithë kjo nuk është e jep mua një copë e kujtesës. 840 00:37:09,320 --> 00:37:13,590 Por nuk duket të jetë kopjimin çdo gjë në atë kujtim? 841 00:37:13,590 --> 00:37:14,560 Ende. 842 00:37:14,560 --> 00:37:22,040 Dhe kështu çfarë unë on line 22, dhe 23, 24, 25, mirë, unë thjesht bëj këtë. 843 00:37:22,040 --> 00:37:23,760 Dhe kjo është lloj i sende të vjetër e shkollës tani. 844 00:37:23,760 --> 00:37:26,010 Kjo është si pset 2, ku ju jeni vetëm duke lëvizur gjërat 845 00:37:26,010 --> 00:37:28,620 rreth në kujtesë, ose më mirë në vargjet. 846 00:37:28,620 --> 00:37:31,920 >> Kështu që unë jam iterating nga 0 deri në gjatësia e vargut s. 847 00:37:31,920 --> 00:37:37,820 Dhe unë jam kopjimi karakterin i-th në s në karakterin i-të në t. 848 00:37:37,820 --> 00:37:41,820 Dhe për shkak se unë, programues, bëri Sigurohuni që të ndajë saktësisht sa më shumë bytes 849 00:37:41,820 --> 00:37:44,600 si kam nevojë, është e përsosur një-për-një marrëdhënie. 850 00:37:44,600 --> 00:37:47,060 Dhe unë kopje mom në vogle për një të ri. 851 00:37:47,060 --> 00:37:50,170 Dhe pastaj në fund, unë e bëj këtë linjë. 852 00:37:50,170 --> 00:37:54,637 Dhe kështu që efekti është vetëm për të përfituar këtë t këtu. 853 00:37:54,637 --> 00:37:56,470 Pra, shumë për të absorbuar, por në qoftë se ju vetëm të marrin në konsideratë 854 00:37:56,470 --> 00:37:58,220 çfarë po ndodh në nën kapuç 855 00:37:58,220 --> 00:38:00,880 është vetëm duke lëvizur këto bytes përreth, të gjithë që 856 00:38:00,880 --> 00:38:06,617 është e nevojshme për të zgjidhur këtë problem është vetëm për të na dhënë këtë copë e kujtesës. 857 00:38:06,617 --> 00:38:08,450 Tani në rrezikun e madhe, më lejoni të tregoj 858 00:38:08,450 --> 00:38:13,200 Një shembull tjetër që është pothuajse identik, përveç për këtë një 859 00:38:13,200 --> 00:38:14,350 linjë e kodit. 860 00:38:14,350 --> 00:38:18,870 Pra, ky është versioni hacker e këtij programi, nëse ju do. 861 00:38:18,870 --> 00:38:21,050 Por le të vetëm të gjej ajo në çfarë po ndodh. 862 00:38:21,050 --> 00:38:28,920 Linja 24 përdoret për të jetë kjo t kllapa i merr s kllapa unë. 863 00:38:28,920 --> 00:38:33,370 Tani, unë jam duke ndryshuar këtë për aq shumë të më fshehtë t yll 864 00:38:33,370 --> 00:38:36,280 plus 1 barabartë yll s plus 1. 865 00:38:36,280 --> 00:38:38,702 >> Pra, çfarë po ndodh dhe pse nuk kemi një karakter yll? 866 00:38:38,702 --> 00:38:41,410 Ne e kemi parë yllin më parë, dhe ajo është duke u përdorur në mënyra të ndryshme këtu. 867 00:38:41,410 --> 00:38:45,490 Ne më parë pamë char *, tani unë jam duke parë Një yll në fillim, dhe kjo është në rregull. 868 00:38:45,490 --> 00:38:48,190 Sepse ajo rezulton ne lloj frymërash nuk mund të konkludoj vetëm 869 00:38:48,190 --> 00:38:50,280 nga ato parë Parimet çfarë po ndodh. 870 00:38:50,280 --> 00:38:53,860 Pra, vetëm të jetë i qartë, ajo që është s? 871 00:38:53,860 --> 00:38:55,052 Javën e kaluar, ajo ishte një varg. 872 00:38:55,052 --> 00:38:56,260 Kjo nuk mjafton më. 873 00:38:56,260 --> 00:38:57,690 Çfarë është s, konkretisht? 874 00:38:57,690 --> 00:38:58,590 >> Audienca: [padëgjueshme] 875 00:38:58,590 --> 00:38:59,881 >> DAVID J. Malan: Kjo është një akrep. 876 00:38:59,881 --> 00:39:02,610 Kjo është adresa e karakteri i parë ne shtypur në. 877 00:39:02,610 --> 00:39:04,780 OK, ajo që është t? 878 00:39:04,780 --> 00:39:05,660 >> Audienca: [padëgjueshme] 879 00:39:05,660 --> 00:39:07,950 >> DAVID J. Malan: The adresën e bajt parë 880 00:39:07,950 --> 00:39:10,490 në t, atë copë e kujtesës rialokuar. 881 00:39:10,490 --> 00:39:14,720 Pra, rezulton se kur ne iterate nga 0 deri në vargun 882 00:39:14,720 --> 00:39:17,424 length-- para së gjithash, unë fillon në 0, sepse 883 00:39:17,424 --> 00:39:18,840 e kësaj shkolle të vjetër për një gjë të loop. 884 00:39:18,840 --> 00:39:22,400 Pra, vetëm për thjeshtësi, le të supozojmë se rreshtin e parë të kodit 885 00:39:22,400 --> 00:39:23,760 është me të vërtetë vetëm kjo, e drejtë. 886 00:39:23,760 --> 00:39:26,080 Nëse i është zero, duke shtuar zero diçka me sa duket 887 00:39:26,080 --> 00:39:27,540 nuk do të ketë një efekt. 888 00:39:27,540 --> 00:39:28,560 >> Pra, çfarë është kjo thënie? 889 00:39:28,560 --> 00:39:31,600 Ajo rezulton se ylli operator në këtë kontekst 890 00:39:31,600 --> 00:39:33,700 është dereference operator, i cili është vetëm 891 00:39:33,700 --> 00:39:37,530 një mënyrë e sofistikuar për të thënë të shkojë në adresën e mëposhtme. 892 00:39:37,530 --> 00:39:42,080 Pra, nëse s është adresa e parë karakter në këtë copë e kujtesës, 893 00:39:42,080 --> 00:39:43,630 * s do të thotë të shkojë atje. 894 00:39:43,630 --> 00:39:45,630 Dhe për shkak se ne kemi tërhequr fotografia në këtë mënyrë, 895 00:39:45,630 --> 00:39:47,430 ju mund të miratojë duke ndjekur modelin mendor. 896 00:39:47,430 --> 00:39:51,030 Nëse kjo është s, dhe ju thoni * s, * s lloj si Chutes dhe Ladders, 897 00:39:51,030 --> 00:39:54,540 në qoftë se ju kujtohet lojë nga fëmijëria, është si të ndjekin atë shigjetë dhe shkoni 898 00:39:54,540 --> 00:39:55,570 në adresën. 899 00:39:55,570 --> 00:39:57,080 >> * t është e njëjta gjë. 900 00:39:57,080 --> 00:39:59,855 Pra, fillojë këtu, shkoni në copë të saj. 901 00:39:59,855 --> 00:40:03,350 Unë nuk mund të nxjerrë në ky ekran në këtë mënyrë. 902 00:40:03,350 --> 00:40:05,560 * t do të thotë për të shkuar këtu. 903 00:40:05,560 --> 00:40:08,830 Dhe pastaj, për lak është vetëm duke thënë lëvizur këtë karakter këtu, 904 00:40:08,830 --> 00:40:11,330 lëvizur këtë karakter këtu, lëvizur këtë karakter këtu. 905 00:40:11,330 --> 00:40:12,890 Por si mund ta bëj këtë Incrementation? 906 00:40:12,890 --> 00:40:15,430 Unë kam nevojë për të ndrequr atë që unë sapo fshihet. 907 00:40:15,430 --> 00:40:18,140 Kjo është ajo që quhet përgjithësisht aritmetike akrep, e cila 908 00:40:18,140 --> 00:40:20,040 nënkupton matematikë me adresat. 909 00:40:20,040 --> 00:40:22,460 >> Nëse, në këtë për lak, Unë mbaj bën rritjen I, 910 00:40:22,460 --> 00:40:26,880 dhe s është një adresë dhe t është një adresa, në qoftë se unë vetëm i mbajnë duke shtuar 1, 911 00:40:26,880 --> 00:40:31,406 që vetëm do të thotë të mbajtur lëvizur përpara, dhe përpara, dhe përpara në kujtesën. 912 00:40:31,406 --> 00:40:34,030 Është si Oxford Street, rrugë se ndërtesa CS është në. 913 00:40:34,030 --> 00:40:36,490 Ndërtesat CS është në 33 Oxford Street. 914 00:40:36,490 --> 00:40:39,870 Pra, nëse ju do të bëni 33 Oxford Street plus 1, 915 00:40:39,870 --> 00:40:42,870 që ju sjell në 34 Oksford Rruga, atëherë 35 Oxford Street, 916 00:40:42,870 --> 00:40:46,380 pastaj 36 Oxford Street, çfarëdo që ata Ndërtesat në fakt janë - në qoftë se ato ekzistojnë. 917 00:40:46,380 --> 00:40:50,540 Dhe kështu, kjo është e gjitha ne jemi duke bërë këtu me akrep aritmetikë. 918 00:40:50,540 --> 00:40:53,820 >> Pra, kjo është një mënyrë super misterioze të shprehur veten. 919 00:40:53,820 --> 00:40:56,160 Por e gjithë kjo po ndodh nën kapuç 920 00:40:56,160 --> 00:40:59,330 është vetëm ndjekur këto adresa, si pas një hartë, në qoftë se ju do të, 921 00:40:59,330 --> 00:41:02,692 ose pas shigjeta si ne kemi tërhequr në ekran. 922 00:41:02,692 --> 00:41:04,910 OK, një shumë për të tretet. 923 00:41:04,910 --> 00:41:10,410 Çdo pyetje në sintaksë, konceptet, pointers, malloc, ose si. 924 00:41:10,410 --> 00:41:11,480 Po, këtu për herë të parë. 925 00:41:11,480 --> 00:41:13,755 >> Audienca: Pra, ku që thotë se * t barabartë toupper * t, 926 00:41:13,755 --> 00:41:15,575 është se duke shkuar për të përfituar të gjitha letrat apo just-- 927 00:41:15,575 --> 00:41:17,283 >> DAVID J. Malan: Ah, pyetje me të vërtetë mirë. 928 00:41:17,283 --> 00:41:19,805 Pra, në këtë linjë këtu, 31, është kjo do të kapitalizojë 929 00:41:19,805 --> 00:41:21,430 Letra e parë ose të gjitha letrat. 930 00:41:21,430 --> 00:41:23,460 Pra, le të përgjigjen se duke shkuar Mbrapsht në parimet e parë. 931 00:41:23,460 --> 00:41:26,168 Dhe parimet e para këtu dua të them thjesht shkoni përcaktimeve themelore 932 00:41:26,168 --> 00:41:27,000 e çfarë është e përfshirë. 933 00:41:27,000 --> 00:41:29,770 Pra toupper është një funksion që kontribuon një char. 934 00:41:29,770 --> 00:41:30,530 Kjo eshte e gjitha. 935 00:41:30,530 --> 00:41:36,740 * t do të thotë të shkojnë në first-- shkoni në adresën në t. 936 00:41:36,740 --> 00:41:40,350 Pra, në foto, në qoftë se kjo është copë e kujtesës kemi ndarë me malloc, 937 00:41:40,350 --> 00:41:43,310 dhe kjo është t, * t do të thotë shkoni këtu. 938 00:41:43,310 --> 00:41:46,710 >> Ndërkohë, ju jeni duke kaluar që vlera, M vogle 939 00:41:46,710 --> 00:41:50,040 për toupper, ju jeni duke u kthyer Kapitali M, ku ju vënë atë? 940 00:41:50,040 --> 00:41:52,410 Ju jeni duke e vënë atë në të njëjtin lokacion. 941 00:41:52,410 --> 00:41:55,540 Dhe kështu nga kjo logjikë e atyre përkufizimet themelore kjo është vetëm 942 00:41:55,540 --> 00:41:58,792 kapitalizuar letrën e parë nëse ju iterate me I ose një 943 00:41:58,792 --> 00:42:02,000 për lak ose një lak, ndërsa, kjo nuk po ndodh për të bërë asgjë më shumë se ju kërkoni atë. 944 00:42:02,000 --> 00:42:02,583 Pyetje e mirë. 945 00:42:02,583 --> 00:42:03,237 Po? 946 00:42:03,237 --> 00:42:05,369 >> Audienca: Pse ju përdorni dereference metodë jo 947 00:42:05,369 --> 00:42:05,979 array? 948 00:42:05,979 --> 00:42:07,395 >> DAVID J. Malan: Ah, pyetje e mirë. 949 00:42:07,395 --> 00:42:10,672 Pse do të ju përdorni dereference Metoda vend të metodës vektorit? 950 00:42:10,672 --> 00:42:12,130 Nuk ka arsye të veçantë, të jetë i sinqertë. 951 00:42:12,130 --> 00:42:15,290 Dhe, në fakt, për këtë lloj shembull, të drejtë, 952 00:42:15,290 --> 00:42:17,556 Unë jam vetëm duke argumentuar duke e bërë Programi më të komplikuara, 953 00:42:17,556 --> 00:42:19,680 më shumë sytë janë mbi lustrim, njerëzit janë të kontrolluar nga 954 00:42:19,680 --> 00:42:22,830 sepse kjo duket super misterioze, por edhe pse ajo është duke bërë të njëjtën gjë. 955 00:42:22,830 --> 00:42:26,695 Dhe kështu, sinqerisht, ky është një zgjidhje të panevojshme vizualisht kompleks 956 00:42:26,695 --> 00:42:27,320 për problemin. 957 00:42:27,320 --> 00:42:29,580 >> Është ende dizajn të mirë, pesë nga pesë për dizajn, 958 00:42:29,580 --> 00:42:33,140 nëse kjo është në kllapa simbol apo simbol pointer. 959 00:42:33,140 --> 00:42:36,299 But-- sidomos kur marrim më vonë gjatë në pset 5 960 00:42:36,299 --> 00:42:39,340 kur ne zbatimin që fjalorin që Unë e kam përmendur disa Times-- 961 00:42:39,340 --> 00:42:42,300 ne fakt do të kujdesen për nivelit të ulët adresat e kujtesës 962 00:42:42,300 --> 00:42:44,140 që ne me të vërtetë e kuptojmë Çfarë po ndodh. 963 00:42:44,140 --> 00:42:48,300 >> Por, tani për tani, rezulton se ky linjë e kodit kllapa katrore këtu 964 00:42:48,300 --> 00:42:49,900 të vërtetë nuk ekzistojnë. 965 00:42:49,900 --> 00:42:52,230 Ata janë atë që quhet sheqer sintaktik, e cila 966 00:42:52,230 --> 00:42:58,390 është vetëm një mënyrë të çuditshme të ftohtë e duke thënë se përpilues konverton kllapa katrore të jetë 967 00:42:58,390 --> 00:43:00,420 kjo shprehje matematikore. 968 00:43:00,420 --> 00:43:02,660 Pra, kjo është një konventë e njeriut të jenë në gjendje për të vetëm të shkruar 969 00:43:02,660 --> 00:43:04,220 këto shumë user-friendly kllapa. 970 00:43:04,220 --> 00:43:06,850 Por ajo që përpiluesit, tingëllimë, është me të vërtetë duke bërë në çdo kohë 971 00:43:06,850 --> 00:43:10,970 ju shkruani se çfarë është theksuar në linjë 24, nën kapuç është e vërtetë 972 00:43:10,970 --> 00:43:12,330 konvertimin e tij në këtë. 973 00:43:12,330 --> 00:43:16,200 Është vetëm më të pëlqyeshëm si një njeri të lexojnë dhe shkruajnë kod si linjë 24. 974 00:43:16,200 --> 00:43:18,530 Por në fund ata rrota trajnimit shumë të vijnë off 975 00:43:18,530 --> 00:43:21,780 kur dikujt ngushëllim vetë merr të fortë. 976 00:43:21,780 --> 00:43:27,240 >> Të gjithë të drejtë, kështu kujtohet atëherë që kjo ishte lloj i problemit më të madh 977 00:43:27,240 --> 00:43:27,807 ne u përplas. 978 00:43:27,807 --> 00:43:30,640 Dhe kjo është ajo që shkaktoi këtë tërësi bisedë mallkim për pointers, 979 00:43:30,640 --> 00:43:32,340 dhe adresat, dhe kopjimi gjëra. 980 00:43:32,340 --> 00:43:35,410 Kjo ishte për shkak se ne morën mbi kjo budalla, budalla çështje, ku 981 00:43:35,410 --> 00:43:38,830 I zbatuar logically-- me Lauren deri këtu në demo dhe lëng portokalli 982 00:43:38,830 --> 00:43:43,770 në milk-- një mënyrë të përkryer Funksioni algoritmikisht e saktë 983 00:43:43,770 --> 00:43:47,010 për shkëmbejnë dy variabla ' Vlerat, por gjëja mallkuar 984 00:43:47,010 --> 00:43:50,550 nuk ka pasur asnjë të vazhdueshme, ose i përhershëm, efekti në kodin tim. 985 00:43:50,550 --> 00:43:51,820 >> Dhe pse ishte ajo? 986 00:43:51,820 --> 00:43:54,650 Në pak fjalë, pse është kjo zbatimi i swap 987 00:43:54,650 --> 00:43:58,740 logjikisht e saktë, por nuk ka asnjë ndikim mbi variablat që janë kaluar me të, 988 00:43:58,740 --> 00:44:01,119 si x dhe y për kryesor? 989 00:44:01,119 --> 00:44:02,410 Cili ishte thelbi i çështjes? 990 00:44:02,410 --> 00:44:02,909 Po? 991 00:44:02,909 --> 00:44:05,532 Audienca: Sepse ndryshueshme bërë kopje të ndryshueshme në të kalojë 992 00:44:05,532 --> 00:44:06,240 përmes funksionit. 993 00:44:06,240 --> 00:44:09,060 >> DAVID J. Malan: Pikërisht, kur ju të kalojë Ndryshoret në një funksion, apo argumentet 994 00:44:09,060 --> 00:44:11,030 në një funksion, ata janë miratuar nga kopje, të cilat 995 00:44:11,030 --> 00:44:14,770 do të thotë që ju të merrni një identik kërkim model i bit për të dy X dhe Y, 996 00:44:14,770 --> 00:44:15,955 quajtur këtu a dhe b. 997 00:44:15,955 --> 00:44:18,080 Dhe ju mund të bëni asgjë ju doni me këto kopje, 998 00:44:18,080 --> 00:44:20,657 por ata do të kenë asnjë efekt në funksionin e quajtur. 999 00:44:20,657 --> 00:44:22,990 Dhe, në fakt, ne tërhoqi atë fotografia në ekran, risjell 1000 00:44:22,990 --> 00:44:25,520 Herën e fundit, ku në qoftë se ju me të vërtetë mendoni se çka është 1001 00:44:25,520 --> 00:44:28,570 ndodh nën hood-- nëse kjo është memorie kompjuteri juaj, 1002 00:44:28,570 --> 00:44:31,650 dhe këtu poshtë është copë e kujtesës duke u përdorur për kryesor, 1003 00:44:31,650 --> 00:44:34,020 kjo është copë e kujtesës duke u përdorur për shkëmbim, 1004 00:44:34,020 --> 00:44:37,090 dhe kështu që edhe nëse kryesor ka dy variablat, x dhe y, 1005 00:44:37,090 --> 00:44:41,840 shkëmbim mund të ketë identike kërkim vlerat, dy nga të cilat janë 1 dhe 2, 1006 00:44:41,840 --> 00:44:44,520 por ata janë plotësisht chunks të ndryshme të kujtesës. 1007 00:44:44,520 --> 00:44:46,130 >> Pra, ne kemi nevojë për një zgjidhje për këtë. 1008 00:44:46,130 --> 00:44:51,580 Dhe sinqerisht, kjo do të duket se ne tani kanë një zgjidhje për këtë problem, e drejtë. 1009 00:44:51,580 --> 00:44:55,760 Në qoftë se ne tani kemi aftësinë për manipuluar gjërat me anë të adresave 1010 00:44:55,760 --> 00:44:59,310 dhe, lloj Chutes dhe Shkalle stil, ndiqni këto shigjeta 1011 00:44:59,310 --> 00:45:02,820 dhe shkoni kudo ne duam në kujtesë, nuk mund të kemi 1012 00:45:02,820 --> 00:45:06,220 zgjidhur këtë problem duke duke kaluar nga kryesore të bie në ujdi 1013 00:45:06,220 --> 00:45:09,650 jo vlerat që ne duam të shkëmbim, por vetëm intuitive 1014 00:45:09,650 --> 00:45:11,630 çfarë mund të kalojë të bie në ujdi në vend? 1015 00:45:11,630 --> 00:45:12,620 >> [Ndërhynte ZËRA] 1016 00:45:12,620 --> 00:45:15,244 >> DAVID J. Malan: Pse nuk vetëm kalojë ajo adresat, e drejtë? 1017 00:45:15,244 --> 00:45:17,470 Pse nuk japin shkëmbim një Harta thesar, në qoftë se ju do të, 1018 00:45:17,470 --> 00:45:20,950 që të çon atë në vlerat x dhe y. aktuale 1019 00:45:20,950 --> 00:45:24,340 Le të bie në ujdi, në të vërtetë të ndryshojë ato pjesë origjinale, në vend se 1020 00:45:24,340 --> 00:45:26,797 vetëm duke kaluar kopjet e copa. 1021 00:45:26,797 --> 00:45:29,130 Dhe kështu, në fakt, kjo është ajo që është do të jetë zgjidhje. 1022 00:45:29,130 --> 00:45:31,899 Ky version këtu është në mënyrë të qartë e keqe dhe me të meta. 1023 00:45:31,899 --> 00:45:35,190 Dhe tani, në shikim të parë, ajo vetëm duket si kemi shtuar një bandë e yjeve rastësisht 1024 00:45:35,190 --> 00:45:37,106 dhe kaloi gishtat tonë se ai do të hartojnë. 1025 00:45:37,106 --> 00:45:38,460 Por, ajo tani do të hartojnë. 1026 00:45:38,460 --> 00:45:40,090 >> Por le të shohim se çfarë kuptimi kanë këto gjëra. 1027 00:45:40,090 --> 00:45:43,990 Dhe, për fat të keq, autorët e C mund të kishte zgjedhur një tjetër simbol 1028 00:45:43,990 --> 00:45:46,380 për të bërë këtë pak qartë, por operatori ylli 1029 00:45:46,380 --> 00:45:48,610 ka kuptim të ndryshëm në dy kontekste të ndryshme. 1030 00:45:48,610 --> 00:45:50,890 Dhe ne kemi parë të dy, por le të dalluar. 1031 00:45:50,890 --> 00:45:55,310 >> Pra, deri në krye atje, kur unë kam ndryshuar dhe b 1032 00:45:55,310 --> 00:46:00,470 nga të qenit int në të këqija version të int yje, a dhe b, 1033 00:46:00,470 --> 00:46:01,740 më parë, ishin të integers. 1034 00:46:01,740 --> 00:46:05,752 Cilat janë A dhe B tani në e mira version, të gjelbër? 1035 00:46:05,752 --> 00:46:06,900 Ata janë adresat. 1036 00:46:06,900 --> 00:46:09,610 Adresat e çfarë, që të jetë i qartë? 1037 00:46:09,610 --> 00:46:10,770 Adresat e integers. 1038 00:46:10,770 --> 00:46:12,520 Pra, fakti që unë jam duke thënë se do të thotë yll int 1039 00:46:12,520 --> 00:46:15,440 kjo është adresa e një numër të plotë, në mënyrë të veçantë. 1040 00:46:15,440 --> 00:46:19,120 >> Deri tani vini re në rreshta të kodit, diçka tjetër ka ndryshuar shumë. 1041 00:46:19,120 --> 00:46:22,770 TMP qëndron e njëjtë, sepse kjo është vetëm numër i plotë i përkohshëm, 1042 00:46:22,770 --> 00:46:24,110 nuk ka magji kujtim atje. 1043 00:46:24,110 --> 00:46:26,370 Por një tani ka nevojë për një yll. 1044 00:46:26,370 --> 00:46:28,560 Dhe, në fakt, çdo përmendje të tjera të A dhe B, 1045 00:46:28,560 --> 00:46:31,780 vini re se të gjitha që është e ndryshon nga e kuqe në të gjelbër 1046 00:46:31,780 --> 00:46:34,209 është se unë jam prefixing këto variabla me yjet. 1047 00:46:34,209 --> 00:46:35,750 Sepse unë nuk dua të kopjoni a dhe b. 1048 00:46:35,750 --> 00:46:40,350 Sepse në qoftë se unë thjesht kopjoni një dhe b dhe swap a dhe b, çfarë jam unë në fakt shkëmbejnë? 1049 00:46:40,350 --> 00:46:43,760 Vetëm adresat, unë dua të bie në ujdi çfarë është në ato adresa. 1050 00:46:43,760 --> 00:46:44,860 Dua te shkoj atje. 1051 00:46:44,860 --> 00:46:48,000 Dhe kështu operatori yll brenda funksionit tim, 1052 00:46:48,000 --> 00:46:51,700 jo brenda listës së parametrave, do të thotë që ju të shkoni në këto adresa 1053 00:46:51,700 --> 00:46:54,490 dhe në fakt të ndryshojë këto vlera. 1054 00:46:54,490 --> 00:46:56,500 >> Pra, çfarë e bën foton tani duken si në vend. 1055 00:46:56,500 --> 00:47:03,250 E pra, në qoftë se në vend të kësaj unë jam duke kaluar në për një dhe B nuk 1 dhe 2-- 1056 00:47:03,250 --> 00:47:05,790 Unë në fakt duhet të shtoni një përkufizim tjetër këtu. 1057 00:47:05,790 --> 00:47:09,030 Pra, mendoj se këtë copë e kujtesës është në vend të 10. 1058 00:47:09,030 --> 00:47:12,960 >> Kjo është në vend të 11, por kjo është pak e një thjeshtësim, 1059 00:47:12,960 --> 00:47:18,900 Unë tani kanë dy zgjedhje bëj unë kaloj x dhe y ose mund ta kaloj adresat e tyre? 1060 00:47:18,900 --> 00:47:22,500 Nëse unë të kalojë adresat e tyre si kjo, unë vetëm 1061 00:47:22,500 --> 00:47:25,390 tani duhet të zbatojë swap sipas kodit të gjelbër 1062 00:47:25,390 --> 00:47:29,080 kështu që kur ajo e sheh një dhe kur ajo sheh b, ai nuk ka vetëm të kopjoni a dhe b 1063 00:47:29,080 --> 00:47:30,540 dhe lëvizur qumësht dhe lëng portokalli. 1064 00:47:30,540 --> 00:47:32,664 Qumësht dhe lëng portokalli metaforë tani prishet, 1065 00:47:32,664 --> 00:47:35,060 sepse ato janë gota e hartave të lëngshme dhe jo. 1066 00:47:35,060 --> 00:47:37,750 Ne kemi në vend të kësaj duhet të shkoni për të adresuar 10 dhe 1067 00:47:37,750 --> 00:47:42,420 duhet të shkoni për të adresuar 11, dhe pastaj të kryejë këtë logjikë shkëmbejnë. 1068 00:47:42,420 --> 00:47:45,580 >> Pra, logjika është e njëjtë, por ne kemi nevojë për një mënyrë pak më të ndryshme 1069 00:47:45,580 --> 00:47:47,160 e qasjes atyre variablave. 1070 00:47:47,160 --> 00:47:52,400 Dhe kështu në fund, çfarë Programi ka për të parë si është kjo. 1071 00:47:52,400 --> 00:47:56,610 Në swap.c kopjuar fjalë për fjalë dhe ngjit versionin e gjelbër. 1072 00:47:56,610 --> 00:47:58,450 Por kam nevojë për të bërë një ndryshim. 1073 00:47:58,450 --> 00:48:00,180 Kjo nuk është e mjaftueshme vetëm për të ndryshuar swap. 1074 00:48:00,180 --> 00:48:03,830 Çfarë linja të tjera të kodit nuk kam nevojë për të ndryshuar? 1075 00:48:03,830 --> 00:48:04,330 Po? 1076 00:48:04,330 --> 00:48:05,770 >> Audienca: Aty ku ajo merr argumentet. 1077 00:48:05,770 --> 00:48:07,603 >> DAVID J. Malan: Ku ajo merr argumentin e saj. 1078 00:48:07,603 --> 00:48:09,985 Pra, nëse unë lëviz deri në kryesor, unë nuk mund vetëm të kalojë në x dhe y, 1079 00:48:09,985 --> 00:48:12,820 dhe, unë premtoj, i fundit pjesë e sintaksë të re sot. 1080 00:48:12,820 --> 00:48:17,200 Unë kam nevojë për të kaluar në jo x dhe y por adresa e x dhe y. 1081 00:48:17,200 --> 00:48:20,400 Dhe kjo rezulton, simbolin se autorët e C zgjodhi 1082 00:48:20,400 --> 00:48:23,860 është në qoftë se ju përdorni një 'e këtu, për të mos të ngatërrohet me simbolin komercial bitwise, 1083 00:48:23,860 --> 00:48:27,130 në qoftë se ju përdorni një 'e këtu dhe një simbol këtu, 1084 00:48:27,130 --> 00:48:29,570 kjo kupton për ju, çfarë është adresa e X, 1085 00:48:29,570 --> 00:48:31,740 ndoshta kjo është 10, çfarë është adresa e y, ndoshta është 1086 00:48:31,740 --> 00:48:35,400 11, dhe kalon ato në vend. 1087 00:48:35,400 --> 00:48:37,210 >> Pra, shumë për të absorbuar të gjitha përnjëherë. 1088 00:48:37,210 --> 00:48:40,190 Por le të shohim tani shpejt në tona katër minuta të mbetura 1089 00:48:40,190 --> 00:48:42,150 ku gjërat mund të shkojnë shtrembër. 1090 00:48:42,150 --> 00:48:45,120 Dhe si një mënjanë, në të vërtetë Mora këtë foto, 1091 00:48:45,120 --> 00:48:46,920 TF mori këtë foto një vit apo dy më parë. 1092 00:48:46,920 --> 00:48:49,190 Pra, kjo është këndi prapa i Eliot Dining Hall. 1093 00:48:49,190 --> 00:48:52,310 Pointers janë ndoshta më të vështirat temë që ne të mbuluar në CS50. 1094 00:48:52,310 --> 00:48:54,810 Pra, nëse keni merak lloj i pjerrësisë është si ndoshta është 1095 00:48:54,810 --> 00:48:56,770 më shumë një shkop hokej si kjo, të kuptojë 1096 00:48:56,770 --> 00:49:00,160 ne jemi lloj i afrohet një kulm në kushtet e kompleksitetit konceptuale. 1097 00:49:00,160 --> 00:49:02,300 >> Dhe nxjerr këtë foto, sepse unë betohem 1098 00:49:02,300 --> 00:49:05,920 Perëndia, në vjeshtë të vitit 1996, kur mora CS50 me shokët time të mësimdhënies, 1099 00:49:05,920 --> 00:49:09,620 Nishat Mehta, ai u ul më poshtë në qoshe e Eliot D. Sallën gjatë drekës, 1100 00:49:09,620 --> 00:49:12,330 apo darkë, apo diçka të provoni për të ndihmuar mua të kuptoj pointers. 1101 00:49:12,330 --> 00:49:16,520 Dhe ky është vendi ku unë kam qenë javë pas ajo u prezantua në leksion kur është 1102 00:49:16,520 --> 00:49:18,170 Unë më në fund e kuptoi pointers. 1103 00:49:18,170 --> 00:49:20,590 Dhe unë jam me shpresë se kjo do të klikoni larg më shpejt për ju. 1104 00:49:20,590 --> 00:49:23,540 Por e kuptojnë këtë absolutisht ndër temat më të sofistikuara 1105 00:49:23,540 --> 00:49:24,420 ne kemi shikuar. 1106 00:49:24,420 --> 00:49:25,819 Por kjo është ndër më të fuqishme. 1107 00:49:25,819 --> 00:49:28,860 Dhe kur ju të merrni atë, kjo është me të vërtetë të gjithë vetëm do të në fund të vijnë së bashku. 1108 00:49:28,860 --> 00:49:31,460 Pra, pjesa tjetër e siguroi se nuk ka nevojë për të gjitha lavaman në sot. 1109 00:49:31,460 --> 00:49:32,980 >> Kështu që këtu është programi i fundit ne jemi duke shkuar për të parë. 1110 00:49:32,980 --> 00:49:35,605 Dhe ne jemi duke shkuar për t'i dhënë fund me një shpejtë tre minuta e claymation 1111 00:49:35,605 --> 00:49:37,030 bërë nga miku ynë, Nick Parlante. 1112 00:49:37,030 --> 00:49:41,440 Këtu ka një program, që në dy krye Linjat e deklaron një x ndryshueshme dhe y. 1113 00:49:41,440 --> 00:49:44,780 Dy prej të cilave janë adresat e integers, AKA pointers. 1114 00:49:44,780 --> 00:49:48,125 Ne pastaj të ndajë të mjaftueshme kujtesës për të ruajtur një int 1115 00:49:48,125 --> 00:49:51,344 dhe ruajtur adresën i atij kujtesës në x. 1116 00:49:51,344 --> 00:49:53,260 Pra, kjo është edhe më të thjeshta se shembullin e para. 1117 00:49:53,260 --> 00:49:56,100 Më jep katër byte memorje, kjo është madhësia e një int, 1118 00:49:56,100 --> 00:49:58,000 dhe të vënë atë adresë në x. 1119 00:49:58,000 --> 00:50:01,070 Kjo linjë do të thotë këtu shkoni në adresën në x 1120 00:50:01,070 --> 00:50:05,270 dhe vënë në kuptimin e jeta, numri 42 atje. 1121 00:50:05,270 --> 00:50:07,710 Por kjo linjë shqetëson mua. 1122 00:50:07,710 --> 00:50:12,620 Star y do të thotë të shkojnë në adresën në y, dhe të vënë numrin pafat 13 atje. 1123 00:50:12,620 --> 00:50:15,780 Pse është e rrezikshme, në këtë pikë në story-- megjithëse tha shpejt 1124 00:50:15,780 --> 00:50:17,980 në minutat tona te zbehta here-- pse është e keqe 1125 00:50:17,980 --> 00:50:19,660 për mua të them, shkoni në adresën në y? 1126 00:50:19,660 --> 00:50:21,077 >> Audienca: Nuk Keni [e padëgjueshme]. 1127 00:50:21,077 --> 00:50:22,910 DAVID J. Malan: Unë nuk kam vënë asgjë në y. 1128 00:50:22,910 --> 00:50:25,520 Pra, çfarë është vlera e y, në këtë pikë në histori? 1129 00:50:25,520 --> 00:50:26,570 Ne nuk kemi asnjë ide. 1130 00:50:26,570 --> 00:50:29,190 Kjo është disa vlera mbeturina dhe as nuk e di Binky. 1131 00:50:29,190 --> 00:50:32,532 Në qoftë se ne mund të përfundojë në këtë shënim. 1132 00:50:32,532 --> 00:50:34,832 >> [VIDEO rishikim] 1133 00:50:34,832 --> 00:50:36,500 >> Hej, Binky, zgjoheni. 1134 00:50:36,500 --> 00:50:39,140 Është koha për argëtim akrep. 1135 00:50:39,140 --> 00:50:40,210 >> -Cfare eshte kjo? 1136 00:50:40,210 --> 00:50:41,690 Mësoni rreth pointers? 1137 00:50:41,690 --> 00:50:43,570 Oh, Goody. 1138 00:50:43,570 --> 00:50:46,600 >> Paj, për të filluar, unë mendoj që ne jemi do të ketë nevojë për një çift pointers. 1139 00:50:46,600 --> 00:50:47,380 >> -NE RREGULL. 1140 00:50:47,380 --> 00:50:51,120 Ky kod ndan dy pointers të cilat mund të tregojnë për integers. 1141 00:50:51,120 --> 00:50:53,557 >> -OK, Edhe unë shoh dy pointers, por ata 1142 00:50:53,557 --> 00:50:55,140 nuk duket të jetë duke treguar për çdo gjë. 1143 00:50:55,140 --> 00:50:55,970 >> -Kjo Është e drejtë. 1144 00:50:55,970 --> 00:50:58,100 Fillimisht pointers nuk tregojnë asgjë. 1145 00:50:58,100 --> 00:51:00,950 Gjërat që ata tregojnë për të quajtur pointees dhe vendosjen e tyre deri 1146 00:51:00,950 --> 00:51:02,330 është një hap i veçantë. 1147 00:51:02,330 --> 00:51:03,210 >> -Oh, E drejtë, e drejtë. 1148 00:51:03,210 --> 00:51:03,940 E dija. 1149 00:51:03,940 --> 00:51:05,730 Të pointees janë të ndara. 1150 00:51:05,730 --> 00:51:08,310 Pra, si ju akordojë një pointee? 1151 00:51:08,310 --> 00:51:11,960 >> -OK, Pra ky kodi sistemimin një pointee ri numër i plotë, 1152 00:51:11,960 --> 00:51:15,050 dhe kjo pjesë përcakton x të tregojnë për të. 1153 00:51:15,050 --> 00:51:16,240 >> Hej, kjo duket më mirë. 1154 00:51:16,240 --> 00:51:17,743 Kështu që e bëjnë atë të bëjë diçka. 1155 00:51:17,743 --> 00:51:23,580 >> -OK, Unë do dereference x tregues për ruajtur numrin 42 në pointee saj. 1156 00:51:23,580 --> 00:51:27,130 Për këtë mashtrim, unë do të duhet tim shkop magjik e dereferencing. 1157 00:51:27,130 --> 00:51:30,200 >> Shkop magjik sa I përket të dereferencing? 1158 00:51:30,200 --> 00:51:32,310 Uh, kjo, kjo është e madhe. 1159 00:51:32,310 --> 00:51:34,270 >> -Kjo Është ajo që kodi duket si. 1160 00:51:34,270 --> 00:51:35,970 Unë do të vendosur vetëm numrin and-- 1161 00:51:35,970 --> 00:51:37,070 >> [POP SOUND] 1162 00:51:37,070 --> 00:51:39,140 >> Hej, shikoni atje ajo shkon. 1163 00:51:39,140 --> 00:51:43,980 Pra, duke bërë një dereference në x poshtë shigjeta për të hyrë në pointee saj. 1164 00:51:43,980 --> 00:51:46,150 Në këtë rast, për të ruajtur 42 në atje. 1165 00:51:46,150 --> 00:51:50,700 Hej, provoni duke e përdorur atë për të ruajtur numrin 13 përmes treguesin tjetër, y. 1166 00:51:50,700 --> 00:51:51,840 >> -NE RREGULL. 1167 00:51:51,840 --> 00:51:56,270 Unë do të shkoj vetëm mbi këtu për y, dhe për të marrë numrin 13 ngritur. 1168 00:51:56,270 --> 00:52:00,380 Dhe pastaj të marrin shkop magjik e dereferencing dhe just-- 1169 00:52:00,380 --> 00:52:01,646 >> [Sirenë të shëndoshë] 1170 00:52:01,646 --> 00:52:04,080 >> -Oh, Hej se nuk keni punuar. 1171 00:52:04,080 --> 00:52:06,470 Thuaj, uh, Binky, unë nuk e bëj mendoj dereferencing 1172 00:52:06,470 --> 00:52:10,850 y është një ide e mirë, sepse vendosjen deri në pointee është një hap i veçantë. 1173 00:52:10,850 --> 00:52:12,480 Dhe unë nuk mendoj se ne ndonjëherë e bëri atë. 1174 00:52:12,480 --> 00:52:14,620 >> -Hmm, Pikë e mirë. 1175 00:52:14,620 --> 00:52:19,810 >> -Yeah, Ne ndarë treguesin, y, por ne kurrë nuk e vendosi atë në tregojnë për një pointee. 1176 00:52:19,810 --> 00:52:21,590 >> -Hmm, Shumë i vëmendshëm. 1177 00:52:21,590 --> 00:52:23,215 Hej, ju jeni në kërkim të mira atje, Binky. 1178 00:52:23,215 --> 00:52:26,390 Mund të rregullohet në mënyrë që pikat y në të njëjtin pointee si x. 1179 00:52:26,390 --> 00:52:29,290 >> -Sigurisht, Unë përdorin shkop magjik e mia e caktimit akrep. 1180 00:52:29,290 --> 00:52:31,970 >> -A Është se do të jetë një Problemi, si më parë? 1181 00:52:31,970 --> 00:52:33,790 >> -Jo, Kjo nuk prek pointees. 1182 00:52:33,790 --> 00:52:35,840 Ajo thjesht ndryshon një akrep për pikë në të njëjtën thing-- 1183 00:52:35,840 --> 00:52:36,465 >> [Popping SOUND] 1184 00:52:36,465 --> 00:52:37,450 --as tjetër. 1185 00:52:37,450 --> 00:52:38,440 >> -Oh, Unë shoh. 1186 00:52:38,440 --> 00:52:41,200 Tani pikë y në të njëjtin vend si x. 1187 00:52:41,200 --> 00:52:42,950 Pra, prisni, tani y është fikse. 1188 00:52:42,950 --> 00:52:44,110 Ajo ka një pointee. 1189 00:52:44,110 --> 00:52:47,779 Kështu që ju mund të provoni shkop magjik e dereferencing përsëri për të dërguar 13 gjatë. 1190 00:52:47,779 --> 00:52:51,110 >> -Oh, OK, këtu shkon. 1191 00:52:51,110 --> 00:52:52,330 >> Hej, shikoni në atë. 1192 00:52:52,330 --> 00:52:53,570 Tani dereferencing punimeve në y. 1193 00:52:53,570 --> 00:52:57,900 Dhe për shkak pointers janë të ndarë se një pointee, ata të dy e shohin 13. 1194 00:52:57,900 --> 00:52:59,952 >> -Yeah, Ndarjen, uh, çfarëdo. 1195 00:52:59,952 --> 00:53:01,535 Pra, do të shkojmë për të kaluar vende tani? 1196 00:53:01,535 --> 00:53:03,730 >> -Oh, Shikoni ne jemi jashtë kohe. 1197 00:53:03,730 --> 00:53:04,660 >> -But-- 1198 00:53:04,660 --> 00:53:06,520 >> -Vetëm Mbani mend tre rregullat akrep. 1199 00:53:06,520 --> 00:53:09,550 Numër 1, struktura bazë është se ju keni një tregues, 1200 00:53:09,550 --> 00:53:11,630 dhe kjo tregon mbi një pointee. 1201 00:53:11,630 --> 00:53:13,740 Por tregues dhe pointee janë të ndara. 1202 00:53:13,740 --> 00:53:15,620 Dhe gabim i zakonshëm është për të ngritur një akrep 1203 00:53:15,620 --> 00:53:18,000 por për të harruar për të dhënë atë një pointee. 1204 00:53:18,000 --> 00:53:21,170 >> Numri 2, dereferencing akrep fillon në treguesin 1205 00:53:21,170 --> 00:53:24,020 dhe ndjek shigjetën e saj mbi për të hyrë në pointee saj. 1206 00:53:24,020 --> 00:53:27,815 Siç e dimë të gjithë, kjo punon vetëm nëse ka është një pointee, cili lloj i merr përsëri 1207 00:53:27,815 --> 00:53:29,260 për të sunduar numrin 1. 1208 00:53:29,260 --> 00:53:31,990 >> Numri 3, akrep Detyra merr një akrep 1209 00:53:31,990 --> 00:53:35,330 dhe ndryshon atë për pikë në njëjtë pointee si një tjetër tregues. 1210 00:53:35,330 --> 00:53:37,150 Pra, pas detyrës, dy pointers 1211 00:53:37,150 --> 00:53:40,927 do pikë të njëjtin pointee, nganjëherë kjo quhet ndarja. 1212 00:53:40,927 --> 00:53:42,510 Dhe kjo është e gjitha nuk është për atë, me të vërtetë. 1213 00:53:42,510 --> 00:53:43,130 Bye-bye tani. 1214 00:53:43,130 --> 00:53:43,475 >> [END rishikim] 1215 00:53:43,475 --> 00:53:44,830 >> DAVID J. Malan: Kjo është ajo për CS50. 1216 00:53:44,830 --> 00:53:46,246 Falë Profesor Nick Parlante. 1217 00:53:46,246 --> 00:53:47,730 Ne do të shihemi javën e ardhshme. 1218 00:53:47,730 --> 00:53:51,706 1219 00:53:51,706 --> 00:53:56,435 >> [Duke luajtur elektronike Muzikë] 1220 00:53:56,435 --> 00:57:22,775