1 00:00:00,000 --> 00:00:10,970 >> [Duke luajtur muzikë] 2 00:00:10,970 --> 00:00:12,536 >> DAVID J. Malan: Të gjithë të drejtë. 3 00:00:12,536 --> 00:00:13,392 >> [Qeshura] 4 00:00:13,392 --> 00:00:14,240 >> Mirë se vini mbrapa. 5 00:00:14,240 --> 00:00:14,990 Kjo është CS50. 6 00:00:14,990 --> 00:00:16,890 Dhe ky fundi i javës pesë. 7 00:00:16,890 --> 00:00:20,020 Dhe deri tani, ne kemi goxha shumë qenë duke marrë të mirëqenë se ka 8 00:00:20,020 --> 00:00:23,480 ekziston në këtë përpilues, tingëllimë, që e keni qenë të thirrur me anë të kësaj 9 00:00:23,480 --> 00:00:27,100 mjet tjetër i quajtur Sigurohuni që në njëfarë mënyre magjike konverton kodin tuaj burim 10 00:00:27,100 --> 00:00:31,350 në kodin e objektit, zero dhe ato se CPU kompjuterat tuaj, qendrore 11 00:00:31,350 --> 00:00:33,410 përpunimit njësi, në të vërtetë e kupton. 12 00:00:33,410 --> 00:00:36,770 Por kjo rezulton se ka një numër që është ndodh nën kapuç në 13 00:00:36,770 --> 00:00:38,690 mes input dhe output. 14 00:00:38,690 --> 00:00:41,800 >> Dhe unë do të doja të propozojë që ne mish që në një detaj më shumë në 15 00:00:41,800 --> 00:00:45,130 këto katër hapa, kanë diçka të quajtur para-përpunimit, diçka 16 00:00:45,130 --> 00:00:48,300 Përpilimi i quajtur, të cilat ne kemi parë, diçka që quhet montimi, si dhe 17 00:00:48,300 --> 00:00:49,420 diçka që quhet lidh. 18 00:00:49,420 --> 00:00:53,270 Pra, deri tani, në disa prej tonë programe, ne kemi pasur përfshin mprehtë. 19 00:00:53,270 --> 00:00:56,650 Kohët e fundit ne kemi pasur disa mprehtë përcakton për konstantet. 20 00:00:56,650 --> 00:01:00,660 Pra, rezulton se ato gjëra që janë prefixed me simbolin hash apo 21 00:01:00,660 --> 00:01:04,150 simbol funt janë të para-procesor direktiva. 22 00:01:04,150 --> 00:01:07,960 Kjo është vetëm një mënyrë e sofistikuar për të thënë se është një linjë e kodit që është në fakt 23 00:01:07,960 --> 00:01:12,280 konvertuar në diçka tjetër para kompjuteri edhe të përpiqet për të kthyer tuaj 24 00:01:12,280 --> 00:01:13,800 Programi në zero dhe ato. 25 00:01:13,800 --> 00:01:19,000 >> Për shembull, të mprehtë përfshin standardin I / O. H, pretty much thjesht do të thotë të shkojnë 26 00:01:19,000 --> 00:01:24,010 përpara, kap përmbajtjen e dosjeve stdio.h dhe ngjiti ato të drejtë atje. 27 00:01:24,010 --> 00:01:25,880 Pra, nuk ka zero dhe ato ende në atë pikë. 28 00:01:25,880 --> 00:01:27,470 Është me të vërtetë vetëm një zëvendësim. 29 00:01:27,470 --> 00:01:30,790 Dhe kjo është bërë gjatë ashtuquajtura para-përpunimit fazë, kur ju 30 00:01:30,790 --> 00:01:34,230 të vërtetë të drejtuar tingëllimë ose në mënyrë specifike Bëni në shumicën e rasteve. 31 00:01:34,230 --> 00:01:36,950 Pra, e gjithë kjo ka ndodhur së pari automatikisht deri tani. 32 00:01:36,950 --> 00:01:38,800 >> Pastaj vjen hapi përpilimi. 33 00:01:38,800 --> 00:01:40,920 Por ne kemi qenë të thjeshtëzuar Përpilimi. 34 00:01:40,920 --> 00:01:45,060 Hartimin e një programi të vërtetë do të thotë të marrë atë nga diçka si C, 35 00:01:45,060 --> 00:01:48,430 source code ne kemi qenë të shkruar, poshtë për diçka që quhet kuvend. 36 00:01:48,430 --> 00:01:52,900 Gjuha e Kuvendit është një nivel më i ulët gjuhë që, fatmirësisht, ne nuk do të 37 00:01:52,900 --> 00:01:55,480 kanë shumë rast për të shkruaj këtë semestër. 38 00:01:55,480 --> 00:01:59,100 Por kjo është në nivelin më të ulët në Ndjenja që ju të filloni të shkruani fjalë për fjalë 39 00:01:59,100 --> 00:02:04,270 shtoni dhe zbres dhe të shumohen dhe të ngarkesës nga kujtesa dhe të ruajtur në kujtesë, 40 00:02:04,270 --> 00:02:08,259 udhëzime shumë themelore që një kompjuter, nën kapuç, 41 00:02:08,259 --> 00:02:09,639 në të vërtetë e kupton. 42 00:02:09,639 --> 00:02:14,930 >> Së fundi, montimi merr atë gjuhë me zero dhe ato që ne kemi qenë 43 00:02:14,930 --> 00:02:16,190 përshkruar deri tani. 44 00:02:16,190 --> 00:02:19,270 Dhe me të vërtetë së fundi, ka ashtuquajtura lidh fazë, të cilat ne do të 45 00:02:19,270 --> 00:02:22,360 shohin në një moment të vetëm, e cila kombinon zero tuaja dhe ato me zero dhe 46 00:02:22,360 --> 00:02:24,870 ato të njerëzve të tjerë para ju keni krijuar. 47 00:02:24,870 --> 00:02:26,660 >> Kështu që e konsiderojnë këtë program super të thjeshtë. 48 00:02:26,660 --> 00:02:27,560 Ajo ishte nga Javës-1. 49 00:02:27,560 --> 00:02:29,610 Ajo thjesht tha, Hello World, në ekran. 50 00:02:29,610 --> 00:02:30,920 Ne u zhvillua këtë nëpërmjet tingëllimë. 51 00:02:30,920 --> 00:02:33,200 Ose ne vrapoi atë nëpërmjet Bëni e cila u zhvillua tingëllimë. 52 00:02:33,200 --> 00:02:36,170 Dhe outputted në kohën kur disa zero dhe ato. 53 00:02:36,170 --> 00:02:38,100 Por kjo rezulton se ka një hap i ndërmjetëm. 54 00:02:38,100 --> 00:02:40,460 Nëse unë shkoj gjatë këtu - oops, nuk duan të shohin atë ende. 55 00:02:40,460 --> 00:02:44,800 Nëse unë shkoj mbi këtu për aplikim tim dhe unë i hapur deri hello.c, këtu 56 00:02:44,800 --> 00:02:46,160 është se programi i njëjtë. 57 00:02:46,160 --> 00:02:48,600 Dhe ajo që unë jam duke shkuar për të bërë në terminalin e mia Dritarja këtu unë jam duke shkuar për 58 00:02:48,600 --> 00:02:51,430 tingëllimë të kandidojë në vend se të bërë, e cila automatizojnë të gjitha katër prej 59 00:02:51,430 --> 00:02:52,870 këto hapa për ne. 60 00:02:52,870 --> 00:02:58,620 Dhe unë jam duke shkuar për të bërë tingëllimë dhe S- pastaj hello.c dhe pastaj të hyjë. 61 00:02:58,620 --> 00:03:00,590 >> Dhe unë të marrë një të shpejtë keq përsëri, e cila është e mirë. 62 00:03:00,590 --> 00:03:05,280 Dhe tani në një dritare pak më të madhe, Unë jam duke shkuar për të hapur deri në Gedit këtu. 63 00:03:05,280 --> 00:03:09,610 Dhe unë jam duke shkuar për të hapur një skedar që, rezulton, është quajtur kjo hello.s 64 00:03:09,610 --> 00:03:11,870 përmban këtë gjuhë kuvendit I përmendur më herët. 65 00:03:11,870 --> 00:03:15,060 Dhe kjo është ajo që quhet kuvendi gjuha, niveli mjaft i ulët 66 00:03:15,060 --> 00:03:18,470 udhëzimet që CPU Intel tuaj apo çfarëdo qoftë ajo që është brenda 67 00:03:18,470 --> 00:03:19,350 kupton. 68 00:03:19,350 --> 00:03:24,480 Dhe mov është për lëvizje. thirrje është për thirrje, një funksion shumë të ulët të nivelit të lartë. 69 00:03:24,480 --> 00:03:26,380 nën është për zbres. 70 00:03:26,380 --> 00:03:30,370 >> Pra, kur ju keni një CPU të veçantë brenda e kompjuterit tuaj, çfarë e bën atë 71 00:03:30,370 --> 00:03:34,300 CPUs të dallueshme, kundrejt të tjera mbi tregu, është ajo e cila udhëzime 72 00:03:34,300 --> 00:03:39,460 e kupton se sa efikase dhe shpesh ajo është, se sa shpejt ajo është në ekzekutimin e disa 73 00:03:39,460 --> 00:03:40,380 i këtyre udhëzimeve. 74 00:03:40,380 --> 00:03:45,150 Tani për më shumë për këtë, ju mund të merrni CS61 ardhshme Fall në kolegj. 75 00:03:45,150 --> 00:03:48,170 Por këtu kemi, për shembull, disa identifikues që mund të duket i njohur. 76 00:03:48,170 --> 00:03:50,150 hello.c është emri i programit. 77 00:03:50,150 --> 00:03:51,070 >> . Teksti - 78 00:03:51,070 --> 00:03:54,190 nuk ka shumë interes atje vetëm tani, kujtojmë se teksti 79 00:03:54,190 --> 00:03:59,190 segment, nga e hëna, ku është në kujtesës programi juaj të vërtetë përfundon. 80 00:03:59,190 --> 00:04:01,330 Pra, kjo është të paktën paksa njohur atje. 81 00:04:01,330 --> 00:04:03,730 Këtu, natyrisht, është një përmendje nga funksioni ynë kryesor. 82 00:04:03,730 --> 00:04:07,220 Scroll poshtë, këto i referohen gjërave Regjistrat thirrur, chunks shumë të vogla të 83 00:04:07,220 --> 00:04:09,190 brenda kujtim të CPU tuaj aktuale. 84 00:04:09,190 --> 00:04:12,930 Dhe në qoftë se unë lëviz poshtë edhe më tej, unë shoh disa lloj 85 00:04:12,930 --> 00:04:14,240 përmendje indirekte e ASCII. 86 00:04:14,240 --> 00:04:17,120 Dhe atje, në të vërtetë, është se string, hello, presje, bota. 87 00:04:17,120 --> 00:04:20,079 >> Pra, histori të gjatë të shkurtër, kjo ka qenë ndodh për ju, automatikisht, 88 00:04:20,079 --> 00:04:22,140 nën kapuç gjithë kësaj kohe. 89 00:04:22,140 --> 00:04:26,450 Dhe çfarë është duke ndodhur me të vërtetë dikur ju keni drejtuar tingëllimë, ose me anë të 90 00:04:26,450 --> 00:04:29,150 Bëni, ju jeni marrë të parë, nga kodi burim, 91 00:04:29,150 --> 00:04:30,700 ashtuquajtura gjuha kuvendi. 92 00:04:30,700 --> 00:04:35,210 Pastaj tingëllimë është konvertimin këtë asamble gjuha e poshtë për zero dhe ato. 93 00:04:35,210 --> 00:04:38,340 Dhe kjo është rrëshqitje që kemi filluar diskutimi ynë në Javën 0 në - 94 00:04:38,340 --> 00:04:39,840 dhe pastaj Jave 1 on. 95 00:04:39,840 --> 00:04:44,030 Dhe pastaj në fund, ato zero dhe ato janë të kombinuara me zero dhe ato 96 00:04:44,030 --> 00:04:47,190 nga ato biblioteka që ne kemi qenë duke marrë për të dhënë si standard I / O ose 97 00:04:47,190 --> 00:04:50,010 Biblioteka String apo edhe CS50 bibliotekë. 98 00:04:50,010 --> 00:04:54,200 >> Pra, për të pikturuar këtë foto më shumë vizualisht, ne kemi hello.c. 99 00:04:54,200 --> 00:04:57,220 Dhe kjo, sigurisht, përdor printf funksionojë për të thënë, përshëndetje bota. 100 00:04:57,220 --> 00:05:01,810 Hapi hartimi merr atë poshtë për të se dosja ne vetëm e pa hello.s, madje edhe 101 00:05:01,810 --> 00:05:04,290 pse se po fshihen në mënyrë tipike automatikisht për ju. 102 00:05:04,290 --> 00:05:06,050 Por kjo është kodi kuvendi në hapin e mesme. 103 00:05:06,050 --> 00:05:09,750 Dhe pastaj, kur Ne i tubojmë të kuvendit gjuhës, kështu që të flasin, se kur ju 104 00:05:09,750 --> 00:05:10,830 merrni ato zero dhe ato. 105 00:05:10,830 --> 00:05:13,920 Pra, ne kemi zoomed në mënyrë efektive sot në atë që ne kemi qenë duke marrë për të dhënë, 106 00:05:13,920 --> 00:05:16,430 do të thotë duke shkuar kodin burimor të kundërshtojë kodin. 107 00:05:16,430 --> 00:05:18,850 >> Por së fundi, tani që picture njëjtë - le të fus atë mbi të 108 00:05:18,850 --> 00:05:20,020 anën e majtë. 109 00:05:20,020 --> 00:05:22,880 Dhe vini re se në krye ka I përmendur stdio.h. 110 00:05:22,880 --> 00:05:25,030 Kjo është një fotografi që ne kemi përfshirë pothuajse në të gjitha 111 00:05:25,030 --> 00:05:26,250 Programet ne kemi shkruar. 112 00:05:26,250 --> 00:05:28,830 Dhe kjo është skedar përmbajtja e së cilës Merrni një kopje ngjit, 113 00:05:28,830 --> 00:05:30,350 efektivisht në majë kodin tuaj. 114 00:05:30,350 --> 00:05:34,170 Por kjo rezulton se, në një kompjuter Sistemi diku, me sa duket ka një 115 00:05:34,170 --> 00:05:39,150 fotografi stdio.c se dikush shkroi vjet më parë se zbaton të gjitha 116 00:05:39,150 --> 00:05:41,870 Funksionet që janë të deklaruara në stdio.h. 117 00:05:41,870 --> 00:05:45,465 >> Tani në realitet ajo nuk është ndoshta më Mac tuaj apo PC tuaj apo edhe në 118 00:05:45,465 --> 00:05:47,660 CS50 aplikim është një kod C papërpunuara. 119 00:05:47,660 --> 00:05:52,710 Dikush përpiluar tashmë atë dhe përfshihen . O fotografi për kodit objekt apo a. 120 00:05:52,710 --> 00:05:56,020 fotografinë, e cila i referohet një bibliotekë të përbashkët që është para-instaluar dhe 121 00:05:56,020 --> 00:05:57,240 para-hartuar për ju. 122 00:05:57,240 --> 00:06:01,950 Por mendoj se ka të vërtetë ekziston on stdio.c tonë kompjuter në paralel 123 00:06:01,950 --> 00:06:02,650 me tingëllimë. 124 00:06:02,650 --> 00:06:04,960 Kodi juaj është duke u hartuar dhe të mbledhur. 125 00:06:04,960 --> 00:06:09,200 stdio.c 's kodi është duke u hartuar dhe mbledhur, në mënyrë që kjo e fundit shumë e 126 00:06:09,200 --> 00:06:13,730 hap, këtu poshtë, ne kemi në një farë mënyre Lidhje, kështu që të flasin, zero tuaja dhe ato 127 00:06:13,730 --> 00:06:18,430 e tij ose të saj me zero dhe ato në një program i thjeshtë që në fund të fundit është 128 00:06:18,430 --> 00:06:20,540 quajtur vetëm Hello. 129 00:06:20,540 --> 00:06:23,340 >> Pra, kjo është e gjitha e magjisë që është ndodhur deri tani. 130 00:06:23,340 --> 00:06:26,430 Dhe do të vazhdojë të marrë këto proceset për të dhënë, por të kuptojë 131 00:06:26,430 --> 00:06:28,750 ka një shumë detaje lëng zihej atje. 132 00:06:28,750 --> 00:06:31,920 Dhe kjo është ajo që e bën tuaj kompjuter me Intel brenda 133 00:06:31,920 --> 00:06:33,940 veçanërisht të dallueshme. 134 00:06:33,940 --> 00:06:37,020 >> Pra, në këtë shënim, në qoftë se ju do të donte për të bashkohen me ne për drekë kjo e premte, do të shkojnë 135 00:06:37,020 --> 00:06:41,570 në cs50.net/rsvp zakonshme vend, 13:15 kjo e premte. 136 00:06:41,570 --> 00:06:43,400 Dhe tani a disa njoftime. 137 00:06:43,400 --> 00:06:44,670 Pra, ne kemi disa lajme të mira. 138 00:06:44,670 --> 00:06:45,970 Dhe ne kemi disa lajme të këqija. 139 00:06:45,970 --> 00:06:47,260 Filloni me disa lajme të mira këtu. 140 00:06:47,260 --> 00:06:52,038 141 00:06:52,038 --> 00:06:54,510 >> [Rënkuari] 142 00:06:54,510 --> 00:06:54,710 >> Dakord. 143 00:06:54,710 --> 00:06:56,670 E pra, kjo është teknikisht një festë, kështu që kjo nuk është aq shumë një dhuratë nga ne. 144 00:06:56,670 --> 00:06:58,030 Por pastaj lajmi i keq natyrisht. 145 00:06:58,030 --> 00:07:00,550 146 00:07:00,550 --> 00:07:01,880 >> [Rënkuari] 147 00:07:01,880 --> 00:07:03,530 >> Kam shpenzuar shumë kohë në këto animacione. 148 00:07:03,530 --> 00:07:04,690 >> [Qeshura] 149 00:07:04,690 --> 00:07:07,000 >> Nuk do të jetë një seancë shqyrtim kjo vjen të hënën. 150 00:07:07,000 --> 00:07:08,340 Ajo do të jetë në orën 05:30. 151 00:07:08,340 --> 00:07:11,210 Ne do t'ju kujtojë të gjitha këto detaje përmes emailit në kurs të 152 00:07:11,210 --> 00:07:13,470 faqen e internetit në vetëm nja dy ditë kohë. 153 00:07:13,470 --> 00:07:16,610 Ajo do të jetë filmuar dhe të vihen në dispozicion menjëherë pas kësaj. 154 00:07:16,610 --> 00:07:19,200 Pra, nëse ju nuk mund të bëjë që e hëna slot natë, mos u shqetësoni. 155 00:07:19,200 --> 00:07:22,270 Seksionet këtë javë që vjen gjithashtu do të përqëndrohet në shqyrtim për quiz. 156 00:07:22,270 --> 00:07:25,670 Nëse pjesa juaj është të hënën, e cila është vërtet universitar pushime, ne do 157 00:07:25,670 --> 00:07:26,920 ende takohen në seksion. 158 00:07:26,920 --> 00:07:28,890 Nëse ju thjesht nuk mund të bëjë që seksioni për shkak se ju jeni duke shkuar 159 00:07:28,890 --> 00:07:29,860 larg, kjo është në rregull. 160 00:07:29,860 --> 00:07:33,710 Marrë pjesë në një e diel ose seksion martën ose të mendje-ne te seksionit të Jason, i cili eshte 161 00:07:33,710 --> 00:07:35,110 në dispozicion online. 162 00:07:35,110 --> 00:07:37,490 >> Pra, më shumë lajme të këqija. 163 00:07:37,490 --> 00:07:41,960 Kështu sipas syllabus, ne kemi ligjëratën e premtja e ardhshme. 164 00:07:41,960 --> 00:07:43,690 Por lajm i mirë - 165 00:07:43,690 --> 00:07:44,860 në mënyrë të qartë, kam shpenzuar shumë kohë për këtë. 166 00:07:44,860 --> 00:07:45,280 >> [Qeshura] 167 00:07:45,280 --> 00:07:47,140 >> Ne do të anulojë ardhshëm ligjëratave të së premtes. 168 00:07:47,140 --> 00:07:50,590 Kështu që do të jetë një dhuratë për ne, kështu që ju mund të vërtetë kanë një afat të bukur në 169 00:07:50,590 --> 00:07:52,990 në mes të kësaj jave dhe dy javët e këtej. 170 00:07:52,990 --> 00:07:57,460 Pra nuk javën e ardhshme ligjërata, vetëm një të vogël quiz pak, për të cilat ju duhet të jetë 171 00:07:57,460 --> 00:07:59,030 duke u ngacmuar gjithnjë. 172 00:07:59,030 --> 00:08:03,870 >> Pra, le të tani kthejmë vëmendjen tonë në diçka që është me të vërtetë shumë vizuale 173 00:08:03,870 --> 00:08:06,990 dhe më emocionuese dhe për të ngritur bazën për atë që do të jetë në horizont 174 00:08:06,990 --> 00:08:08,420 në vetëm nja një javë kohë. 175 00:08:08,420 --> 00:08:12,160 Pas quiz e parë, ne do të kthehet fokus grupe tona i problemit në një tjetër 176 00:08:12,160 --> 00:08:16,710 Problemi domain specifike, që i mjekësinë ligjore apo të sigurisë në përgjithësi. 177 00:08:16,710 --> 00:08:19,550 >> Në fakt, tradita me këtë problem grup eshte per më njëri prej 178 00:08:19,550 --> 00:08:24,850 CAS-i mësonte shokët apo të ecin nëpër Kampusi marrë disa fotografi të 179 00:08:24,850 --> 00:08:29,450 njerëz të identifikueshme, por jo të dukshme, vende, apo gjëra, atëherë çdo vit unë 180 00:08:29,450 --> 00:08:34,520 disi të menaxhuar për të fshini aksidentalisht ose të dëmtojë kartën e mediave digjitale 181 00:08:34,520 --> 00:08:35,720 kjo është brenda kameras sonë. 182 00:08:35,720 --> 00:08:36,860 Por asnjë marrëveshje e madhe. 183 00:08:36,860 --> 00:08:39,200 Unë mund të shkoni përpara dhe plug që në kompjuterin tim. 184 00:08:39,200 --> 00:08:43,010 Unë mund të bëjë një imazh të mjekësisë ligjore të saj, kështu që që të flasin, duke kopjuar zero dhe 185 00:08:43,010 --> 00:08:46,830 ato off e atij kartën e kujtesës, qofshin e saj një kartë SD ose kartë compact flash ose 186 00:08:46,830 --> 00:08:48,100 çdo gjë që ju jeni të njohur me të. 187 00:08:48,100 --> 00:08:49,300 Dhe atëherë ne mund të dorëzojë atë jashtë. 188 00:08:49,300 --> 00:08:53,190 >> Dhe kështu sfida përpara, ndër të tjera gjëra për ju, do të jetë për të shkruar 189 00:08:53,190 --> 00:08:58,630 Kodi C që rimëkëmbet një bandë e tërë e JPEG për mua dhe do të jenë të shpallura 190 00:08:58,630 --> 00:09:00,190 ata njerëz, vende, apo gjëra. 191 00:09:00,190 --> 00:09:03,340 Dhe ne gjithashtu do të flasim, në këtë problem vendosur dhe në ditët që do të vijnë, në lidhje me 192 00:09:03,340 --> 00:09:04,440 Grafika më të përgjithshme. 193 00:09:04,440 --> 00:09:06,140 Ne kemi përdorur ato, një kurs, për shpërthen. 194 00:09:06,140 --> 00:09:09,080 Por ju keni lloj i marrë për të dhënë ekziston këto nocione të nivelit të lartë 195 00:09:09,080 --> 00:09:10,680 i rectangles dhe ovale. 196 00:09:10,680 --> 00:09:12,450 Por nën kapuç ka pixels. 197 00:09:12,450 --> 00:09:14,370 Dhe ju keni pasur për të filluar duke menduar rreth atyre. 198 00:09:14,370 --> 00:09:18,800 Ose ju do të për p-set 4 duhet të mendojnë për hendekun në mes të tullave, si 199 00:09:18,800 --> 00:09:21,990 më shpejt që ju jeni topin po lëviz nëpër ekran për të thyer jashtë. 200 00:09:21,990 --> 00:09:24,830 Pra, nuk është ky nocion i dots në ekranin tuaj që është 201 00:09:24,830 --> 00:09:26,290 të hyjë në lojë tashmë. 202 00:09:26,290 --> 00:09:29,430 >> Tani ajo që ju shihni, edhe pse, është ajo që ju të merrni në një ekran kompjuteri. 203 00:09:29,430 --> 00:09:33,680 Nëse e keni shikuar ndonjëherë një të mirë apo TV keqe, shanset janë që ata goxha shumë 204 00:09:33,680 --> 00:09:36,280 trajtojnë audiencën si technophobes të cilët nuk të vërtetë 205 00:09:36,280 --> 00:09:37,630 di shumë rreth informatikes. 206 00:09:37,630 --> 00:09:40,840 Dhe kështu kjo është shumë e lehtë për policinë detektivë të them, mund të ju 207 00:09:40,840 --> 00:09:41,710 pastruar se deri për mua? 208 00:09:41,710 --> 00:09:42,710 Ose të rritur, e drejtë? 209 00:09:42,710 --> 00:09:45,550 Rritja është si fjala lëvizje në shumica e ndonjë show krim të lidhura. 210 00:09:45,550 --> 00:09:49,240 Dhe realiteti është në qoftë se ju merrni një shumë të foto blurry e një të dyshuari bërë 211 00:09:49,240 --> 00:09:51,620 diçka e keqe, ju nuk mund të vetëm të rrisë atë. 212 00:09:51,620 --> 00:09:53,080 Ju nuk mund të zoom në pafundësisht. 213 00:09:53,080 --> 00:09:56,350 Ju nuk mund të shihni në shkëlqim e dikujt syri i cili angazhohet që 214 00:09:56,350 --> 00:09:59,860 Krimi i veçantë, pavarësisht Prevalenca e kësaj në TV. 215 00:09:59,860 --> 00:10:04,110 >> Dhe kështu me këtë le të motivojë që Problemi ardhshme të vendosur me një paraqitje e shkurtër në 216 00:10:04,110 --> 00:10:05,765 disa shfaqje me të cilat ju mund të jetë e njohur. 217 00:10:05,765 --> 00:10:06,500 >> [Video playback] 218 00:10:06,500 --> 00:10:07,835 >> -OK. 219 00:10:07,835 --> 00:10:09,956 Tani, le të marrë një sy të mirë në ju. 220 00:10:09,956 --> 00:10:17,060 221 00:10:17,060 --> 00:10:17,766 >> -Do ta mbajë atë. 222 00:10:17,766 --> 00:10:18,658 Run atë përsëri. 223 00:10:18,658 --> 00:10:19,550 >> -Prisni një minutë. 224 00:10:19,550 --> 00:10:21,580 Shkojnë drejtë. 225 00:10:21,580 --> 00:10:21,800 >> -Ka. 226 00:10:21,800 --> 00:10:22,690 Ngrijë se. 227 00:10:22,690 --> 00:10:23,692 >> -Full ekran. 228 00:10:23,692 --> 00:10:23,846 >> -OK. 229 00:10:23,846 --> 00:10:24,154 Ngrijë se. 230 00:10:24,154 --> 00:10:25,140 >> -Shtrënguar deri në atë, do ya? 231 00:10:25,140 --> 00:10:27,090 >> Vector-it në atë djalë nga rrota e pasme. 232 00:10:27,090 --> 00:10:29,730 >> Zoom-në të drejtë këtu në këtë vend. 233 00:10:29,730 --> 00:10:33,700 >> -Me pajisje të drejtë, fotografuan mund të zgjerohet dhe të mprehur. 234 00:10:33,700 --> 00:10:34,490 >> -Çfarë është ajo? 235 00:10:34,490 --> 00:10:35,870 >> -Është një program zgjerimin. 236 00:10:35,870 --> 00:10:36,793 >> -Mund të jeni të qartë se deri ndonjë? 237 00:10:36,793 --> 00:10:38,560 >> -Unë nuk e di. 238 00:10:38,560 --> 00:10:39,090 Le të rritur atë. 239 00:10:39,090 --> 00:10:41,690 >> -Rritja seksioni A-6. 240 00:10:41,690 --> 00:10:43,510 >> -I rritur dhe detaje - 241 00:10:43,510 --> 00:10:44,456 >> -Unë mendoj se nuk është e mjaftueshme për të rritur. 242 00:10:44,456 --> 00:10:45,402 Release atë në ekranin tim. 243 00:10:45,402 --> 00:10:47,300 >> -Rritja reflektimin në syrin e saj. 244 00:10:47,300 --> 00:10:49,330 >> -Le të drejtuar këtë përmes Rritja Video. 245 00:10:49,330 --> 00:10:50,340 >> -Edgar, ju mund të rrisë kjo? 246 00:10:50,340 --> 00:10:52,320 >> -Hang on. 247 00:10:52,320 --> 00:10:54,290 >> -I've qenë duke punuar në këtë reflektim. 248 00:10:54,290 --> 00:10:55,560 >> Dikushi-reflektim-së. 249 00:10:55,560 --> 00:10:56,440 >> -Reflection. 250 00:10:56,440 --> 00:10:57,940 >> -Ka një reflektim e fytyrës së njeriut. 251 00:10:57,940 --> 00:10:58,860 >> -Reflektim. 252 00:10:58,860 --> 00:10:59,710 >> -Ka një reflektim. 253 00:10:59,710 --> 00:11:00,900 >> -Zoom në pasqyrë. 254 00:11:00,900 --> 00:11:03,500 >> -Ju mund të shihni një reflektim. 255 00:11:03,500 --> 00:11:04,700 >> -A mund të përmirësuar imazhin nga këtu? 256 00:11:04,700 --> 00:11:05,700 >> -A mund të rrisë atë të drejtë këtu? 257 00:11:05,700 --> 00:11:06,500 >> -Mund ta rritur atë? 258 00:11:06,500 --> 00:11:07,380 >> -Mund ta rritur atë? 259 00:11:07,380 --> 00:11:08,190 >> -A mund ta përmirësojë këtë? 260 00:11:08,190 --> 00:11:08,940 >> -Mund ta rritur atë? 261 00:11:08,940 --> 00:11:10,280 >> -Mbajë në një të dytë, unë do të të rritur. 262 00:11:10,280 --> 00:11:11,570 >> -Zoom në derë. 263 00:11:11,570 --> 00:11:12,180 >> -X10. 264 00:11:12,180 --> 00:11:13,052 >> -Zoom. 265 00:11:13,052 --> 00:11:13,197 >> [Qeshura] 266 00:11:13,197 --> 00:11:14,360 >> Leviz-in 267 00:11:14,360 --> 00:11:15,100 >> -Prit, stop. 268 00:11:15,100 --> 00:11:15,740 >> -Stop. 269 00:11:15,740 --> 00:11:16,290 >> -Pauzë atë. 270 00:11:16,290 --> 00:11:19,390 >> Rotate një 75-gradë përreth ju lutem vertikale. 271 00:11:19,390 --> 00:11:19,886 >> [Qeshura] 272 00:11:19,886 --> 00:11:24,350 >> -Stop, dhe mbrapsht tek pjesa rreth derës përsëri. 273 00:11:24,350 --> 00:11:26,330 >> Got një enhancer-image që mund të bitmap? 274 00:11:26,330 --> 00:11:28,990 >> -Ndoshta ne mund të përdorni Sen Pradeep Metoda për të parë në dritare. 275 00:11:28,990 --> 00:11:30,680 >> -Ky software është shtet i artit. 276 00:11:30,680 --> 00:11:31,676 >> -Vlera ikonë është off. 277 00:11:31,676 --> 00:11:34,166 >> -Me kombinimin e duhur e algoritme. 278 00:11:34,166 --> 00:11:38,399 >> -Ai është marrë në algoritme ndriçim nivelin e ardhshëm dhe unë mund t'i përdorë ato për të 279 00:11:38,399 --> 00:11:38,648 rritur këtë fotografi. 280 00:11:38,648 --> 00:11:42,050 >> Lock-në dhe zgjeruar Z-aks. 281 00:11:42,050 --> 00:11:42,760 >> -Rritja. 282 00:11:42,760 --> 00:11:43,060 >> -Rritja. 283 00:11:43,060 --> 00:11:43,760 >> -Rritja. 284 00:11:43,760 --> 00:11:45,010 >> -Freeze dhe të rritur. 285 00:11:45,010 --> 00:11:47,470 286 00:11:47,470 --> 00:11:47,910 >> [VIDEO END rishikim] 287 00:11:47,910 --> 00:11:51,470 >> DAVID J. Malan: Set Pra Problem 5 është çfarë shtrihet përpara atje. 288 00:11:51,470 --> 00:11:55,260 Pra, ne së shpejti do të marrë një kuptim më të mirë prej kur dhe pse ju mund të 289 00:11:55,260 --> 00:11:57,300 tonë dhe nuk mund të rrisë në atë mënyrë. 290 00:11:57,300 --> 00:12:00,090 Por së pari, le të kthejë vëmendjen tonë për disa nga blloqet e ndërtimit ne do të 291 00:12:00,090 --> 00:12:02,250 duhet të jenë në gjendje për të të treguar atë histori. 292 00:12:02,250 --> 00:12:05,580 >> Pra, kujtoj se ne tërhoqi këtë foto në E hënë dhe e pak javën e kaluar. 293 00:12:05,580 --> 00:12:09,970 Dhe kjo përshkruan paraqitjen e gjërave në kujtesën e kompjuterit tuaj, kur 294 00:12:09,970 --> 00:12:11,000 running ndonjë program. 295 00:12:11,000 --> 00:12:14,310 Segmenti i teknologjisë up krye, risjell, i referohet me zero aktuale dhe atyre të 296 00:12:14,310 --> 00:12:16,000 që përbëjnë programin tuaj. 297 00:12:16,000 --> 00:12:19,340 Ka, më poshtë se, disa initialized ose Të dhënat uninitialized, të cilat në mënyrë tipike 298 00:12:19,340 --> 00:12:22,910 referohet për gjëra të tilla si konstantet apo strings ose variablave globale që kanë 299 00:12:22,910 --> 00:12:24,200 është deklaruar paraprakisht. 300 00:12:24,200 --> 00:12:26,500 Ka grumbull, por ne do të vijnë përsëri në se në një grimë. 301 00:12:26,500 --> 00:12:27,410 >> Dhe pastaj nuk ka rafte. 302 00:12:27,410 --> 00:12:30,660 Shumë si një pirg e tabaka në mensë, ky është vendi ku merr memorie 303 00:12:30,660 --> 00:12:33,610 shtresa dhe shtresa kurdo ju bëni atë në një program? 304 00:12:33,610 --> 00:12:36,380 305 00:12:36,380 --> 00:12:37,730 Çfarë është përdorimi i rafte për të? 306 00:12:37,730 --> 00:12:39,320 >> Po? 307 00:12:39,320 --> 00:12:40,000 >> Tërhiqni vëmendjen e funksionit. 308 00:12:40,000 --> 00:12:42,890 Çdo herë që ju e quani një funksion, kjo është jepet copë e kujtesës për vet 309 00:12:42,890 --> 00:12:45,020 Variablat lokale ose parametrat e saj. 310 00:12:45,020 --> 00:12:48,810 Dhe në pikturë, ne shohim se me njëri- funksion të njëpasnjëshme të thirrur, kur A 311 00:12:48,810 --> 00:12:52,520 thirrjet B thirrjet C D thirrjet, ata merrni shtresëzuar mbi rafte. 312 00:12:52,520 --> 00:12:55,630 Dhe brenda secilit prej këtyre feta memorie është në thelb një hapësirë ​​unike 313 00:12:55,630 --> 00:12:58,590 për atë funksion, e cila, sigurisht, është problematike në qoftë se ju doni të dorëzojë 314 00:12:58,590 --> 00:13:01,850 nga një funksion në një tjetër Një copë e të dhënave që ju dëshironi që ajo 315 00:13:01,850 --> 00:13:03,500 të shndrrohet ose të ndryshojë. 316 00:13:03,500 --> 00:13:08,060 >> Pra, çfarë ishte zgjidhja jonë për të mundësuar Një funksion i përfaqësuar nga një mullar 317 00:13:08,060 --> 00:13:11,390 kornizë për të ndryshuar kujtesën brenda e një tjetër kornizë rafte? 318 00:13:11,390 --> 00:13:14,590 Si të bëni ato flasin 0:58 tjetrin? 319 00:13:14,590 --> 00:13:18,510 Pra, me anë të pointers ose adresat, e cila, përsëri, vetëm të përshkruani ku në 320 00:13:18,510 --> 00:13:22,280 , kujtesës me anë të një specifike Numri i kafshoj, veçanërisht 321 00:13:22,280 --> 00:13:23,830 vlera mund të gjendet. 322 00:13:23,830 --> 00:13:26,860 Pra, kujtojnë kohën e fundit shumë ne kemi vazhduar historinë dhe shikoi një 323 00:13:26,860 --> 00:13:28,280 program mjaft buggy. 324 00:13:28,280 --> 00:13:32,900 Dhe ky program është për një buggy pak arsye, por një nga më shqetësuese është 325 00:13:32,900 --> 00:13:34,620 sepse ajo dështon për të kontrolluar se çfarë? 326 00:13:34,620 --> 00:13:39,111 327 00:13:39,111 --> 00:13:40,450 >> Yeah, ajo dështon për të kontrolluar input. 328 00:13:40,450 --> 00:13:41,870 Na vjen keq? 329 00:13:41,870 --> 00:13:43,880 >> Në qoftë se kjo është më shumë se 12 karaktere. 330 00:13:43,880 --> 00:13:47,260 Pra, shumë smartly, kur e quan memcopy, e cila, siç sugjeron emri, vetëm 331 00:13:47,260 --> 00:13:50,630 kopje memorie nga argumentin e saj të dytë në argumentit të saj të parë. 332 00:13:50,630 --> 00:13:54,730 Argumenti i tretë, shumë smartly, është kontrolluar për të siguruar që ju nuk e bëni 333 00:13:54,730 --> 00:13:59,400 kopje më shumë se, në këtë rast, gjatësia e bar, numri i karaktereve, 334 00:13:59,400 --> 00:14:03,810 në destinacion, i cili eshte ky array C. Por problemi është se çfarë 335 00:14:03,810 --> 00:14:07,230 në qoftë se C në vetvete nuk është mjaft e madhe për të trajtuar atë? 336 00:14:07,230 --> 00:14:09,900 Ju do të jeni të kopjoni numrin e bytes që ju keni qenë dhënë. 337 00:14:09,900 --> 00:14:13,040 Por çfarë bëni ju në të vërtetë kanë më shumë bytes se ju keni hapësirë ​​për të? 338 00:14:13,040 --> 00:14:16,770 >> E pra, ky program shumë pa mend vetëm verbërisht vazhdon të marrë çfarëdo qoftë ajo e 339 00:14:16,770 --> 00:14:20,650 dhënë, përshëndetje backslash 0 është madh nëse vargu është i shkurtër 340 00:14:20,650 --> 00:14:22,040 mjaftueshme, si pesë karaktere. 341 00:14:22,040 --> 00:14:26,470 Por nëse kjo është në fakt 12 karaktere ose 1.200 karaktere, pamë herën e fundit 342 00:14:26,470 --> 00:14:29,380 se ju jeni vetëm duke shkuar për të krejtësisht të prishësh kujtesës që 343 00:14:29,380 --> 00:14:30,470 nuk i takon për ju. 344 00:14:30,470 --> 00:14:34,390 Dhe në rastin më të keq, në qoftë se ju të prishësh atë pjesa e kuqe atje se ne e quanim 345 00:14:34,390 --> 00:14:35,380 kthehen adresë - 346 00:14:35,380 --> 00:14:38,370 kjo është vetëm kur kompjuteri automatikisht, për ju, pas 347 00:14:38,370 --> 00:14:43,130 tucks larg skenave, një 32-bit vlerë që kujton atë për çfarë adresa ajo duhet 348 00:14:43,130 --> 00:14:47,080 kthehen kur foo, ky funksion tjetër, është bërë ekzekutimin. 349 00:14:47,080 --> 00:14:49,320 Kjo është një thërrime bukë në terezi për të cilën ai jep. 350 00:14:49,320 --> 00:14:52,490 Nëse ju prishësh që, potencialisht, në qoftë se ju jeni djalë i keq, mund të mund të 351 00:14:52,490 --> 00:14:54,750 potencialisht të marrë përsipër kompjuterin e dikujt. 352 00:14:54,750 --> 00:14:58,020 Dhe ju do të më siguri të rrëzuar atë në shumicën e rasteve. 353 00:14:58,020 --> 00:15:01,690 >> Tani ky problem u përkeqësua vetëm siç kemi filluar duke folur për kujtesën 354 00:15:01,690 --> 00:15:03,010 menaxhim më në përgjithësi. 355 00:15:03,010 --> 00:15:07,150 Dhe malloc, për dhenie e kujtesës, është një funksion që ne mund të përdorim për të alokuar 356 00:15:07,150 --> 00:15:11,260 kujtim kur ne nuk e dimë paraprakisht që ne mund të kenë nevojë disa. 357 00:15:11,260 --> 00:15:13,960 Kështu, për shembull, nëse unë kthehem te pajisjes këtu. 358 00:15:13,960 --> 00:15:21,010 Dhe unë i hapur deri nga hello2.c herë të fundit, kujtojnë këtë program këtu, e cila dukej 359 00:15:21,010 --> 00:15:23,500 një diçka të vogël si kjo, vetëm tre rreshta - 360 00:15:23,500 --> 00:15:27,940 thoni emrin tuaj, atëherë emri i vargut, në të majtë, e barabartë me getString. 361 00:15:27,940 --> 00:15:29,690 Dhe atëherë ne print it out, Emri i përdoruesit. 362 00:15:29,690 --> 00:15:31,170 >> Pra, kjo ishte një program super të thjeshtë. 363 00:15:31,170 --> 00:15:34,870 Për të qenë të qartë, më lejoni të shkoj përpara dhe të bëjnë përshëndetje-2. 364 00:15:34,870 --> 00:15:36,680 Unë jam duke shkuar për të bërë dot slash Hello-2. 365 00:15:36,680 --> 00:15:37,750 Shënoni emrin tuaj - 366 00:15:37,750 --> 00:15:38,140 David. 367 00:15:38,140 --> 00:15:38,840 Enter. 368 00:15:38,840 --> 00:15:39,540 Përshëndetje David. 369 00:15:39,540 --> 00:15:41,060 Kjo duket për të punuar OK. 370 00:15:41,060 --> 00:15:43,140 Por çfarë ndodh në të vërtetë nën kapuç këtu? 371 00:15:43,140 --> 00:15:44,670 Së pari le të zhvishem përsëri disa shtresa. 372 00:15:44,670 --> 00:15:48,380 String është vetëm një sinonim ne kemi realizuar për çfarë? 373 00:15:48,380 --> 00:15:49,110 Yll Char. 374 00:15:49,110 --> 00:15:52,740 Pra, le të bëjë atë një pak më misterioze por më teknikisht të saktë se kjo 375 00:15:52,740 --> 00:15:55,570 eshte nje yll char, që do të thotë se emri, po, është një ndryshore. 376 00:15:55,570 --> 00:15:59,920 Por çfarë dyqane emri është adresa e një char, e cila ndihet pak e çuditshme 377 00:15:59,920 --> 00:16:01,050 sepse unë jam marrë përsëri një varg. 378 00:16:01,050 --> 00:16:03,580 Unë jam duke u kthyer shumëfishtë chars jo një char. 379 00:16:03,580 --> 00:16:07,400 >> Por sigurisht, ju duhet vetëm për të parë Adresa Char për të mbani mend se ku 380 00:16:07,400 --> 00:16:08,870 vargut të tërë është për shkak se pse? 381 00:16:08,870 --> 00:16:12,700 Si mendoni ju kuptoj se ku fundi i string është të dish se fillimi? 382 00:16:12,700 --> 00:16:13,630 Zero backslash. 383 00:16:13,630 --> 00:16:17,260 Pra, me këto dy të dhëna të kuptoj se para fillimit dhe në fund të 384 00:16:17,260 --> 00:16:20,280 çdo string janë, për aq kohë sa ata janë të formuar siç duhet me atë null 385 00:16:20,280 --> 00:16:22,110 terminator, se zero backslash. 386 00:16:22,110 --> 00:16:24,520 >> Por kjo është thirrje getString. 387 00:16:24,520 --> 00:16:28,020 Dhe kjo rezulton se getString gjithë kësaj kohe ka qenë lloj i 388 00:16:28,020 --> 00:16:28,820 cheating për ne. 389 00:16:28,820 --> 00:16:32,460 Ajo ka qenë duke e bërë këtë punë, të jetë i sigurt, marrjen e një varg nga përdoruesit. 390 00:16:32,460 --> 00:16:34,580 Por ku është se kujtesa qenë që vijnë nga? 391 00:16:34,580 --> 00:16:38,440 Nëse ne do të shkojmë përsëri në foto këtu dhe zbatojë përkufizimin nga vetëm një 392 00:16:38,440 --> 00:16:42,610 moment pare, qe pirg është ku kujtesës shkon kur funksionet janë të thirrur, 393 00:16:42,610 --> 00:16:45,370 nga kjo logjikë, kur ju telefononi getString, dhe pastaj shkruani në 394 00:16:45,370 --> 00:16:50,900 D-A-V-I-D Futni, ku eshte D-A-V-I-D backslash zero ruajtur, bazuar në 395 00:16:50,900 --> 00:16:53,480 histori ne kemi na tha larg? 396 00:16:53,480 --> 00:16:55,190 >> Ajo do të duket të jetë në rafte, e drejtë? 397 00:16:55,190 --> 00:16:58,120 Kur ju telefononi merrni vargun që ju të merrni një fetë të vogël të kujtesës në rafte. 398 00:16:58,120 --> 00:17:01,630 Pra, ajo qëndron për arsye se D-A-V-I-D backslash zero është ruajtur 399 00:17:01,630 --> 00:17:02,770 atje në rafte. 400 00:17:02,770 --> 00:17:07,680 Por prisni një minutë, getString kthimit që varg, kështu që flet, që do të thotë 401 00:17:07,680 --> 00:17:11,700 kjo është tabaka nga lokali është marrë off rafte. 402 00:17:11,700 --> 00:17:14,560 Dhe ne i thamë herën e fundit që sa më shpejt si një Kthimet funksionojë, dhe ju merrni se 403 00:17:14,560 --> 00:17:20,109 tabaka, kështu që të flasin, jashtë rafte, çfarë ju mund të marrë në lidhje me mbeturinat e 404 00:17:20,109 --> 00:17:21,819 se kujtesa? 405 00:17:21,819 --> 00:17:25,160 Unë lloj i redrew ato si pikëpyetjesh sepse bëhet në mënyrë efektive 406 00:17:25,160 --> 00:17:26,250 Vlerat panjohur. 407 00:17:26,250 --> 00:17:29,500 Ata mund të ripërdoren kur disa Funksioni tjetër quhet. 408 00:17:29,500 --> 00:17:31,870 >> Me fjalë të tjera, në qoftë se ne të ndodhë të jetë ruajtjen - 409 00:17:31,870 --> 00:17:34,350 Unë do të nxjerrë një tablo të shpejtë ketu i pirg. 410 00:17:34,350 --> 00:17:38,690 Në qoftë se ne të ndodhë për të tërhequr pjesën e poshtme i segmentit kujtesën time, dhe ne do të themi 411 00:17:38,690 --> 00:17:42,230 se ky është vendi i kujtesës pushtuar nga kryesore dhe ndoshta ARG c dhe 412 00:17:42,230 --> 00:17:46,790 arg v dhe çdo gjë tjetër në program, kur getString quhet, 413 00:17:46,790 --> 00:17:51,120 me sa duket getString merr një copë e kujtesës këtu. 414 00:17:51,120 --> 00:17:53,940 Dhe pastaj D-A-V-I-D disi përfundon deri në këtë funksion. 415 00:17:53,940 --> 00:17:55,320 Dhe unë jam duke shkuar për të thjeshtëzoj. 416 00:17:55,320 --> 00:18:00,050 Por le të supozojmë se tij D-A-V-I-D backslash zero. 417 00:18:00,050 --> 00:18:03,500 Pra, kjo bytes shumë janë përdorur në kornizë për getString. 418 00:18:03,500 --> 00:18:08,270 >> Por, sa më shpejt që kthimet getString, ne tha se koha e fundit që kjo memorie gjatë 419 00:18:08,270 --> 00:18:11,340 këtu të gjithë të bëhet - woops! - 420 00:18:11,340 --> 00:18:14,270 fshirë të gjitha të bëhet në mënyrë efektive. 421 00:18:14,270 --> 00:18:17,220 Dhe ne mund të mendojmë për këtë tani si pyetje Shënon sepse kush e di 422 00:18:17,220 --> 00:18:18,720 çfarë do të bëhet i atij kujtesës. 423 00:18:18,720 --> 00:18:22,130 Në të vërtetë, Unë shumë shpesh i quajnë funksione përveç getString. 424 00:18:22,130 --> 00:18:24,750 Dhe sa më shpejt që unë e quaj disa të tjera Funksioni se getString, ndoshta jo në 425 00:18:24,750 --> 00:18:28,860 ky program të veçantë që ne vetëm shikuar por në disa të tjera, me siguri disa të tjera 426 00:18:28,860 --> 00:18:34,180 Funksioni mund të përfundojnë duke u dhënë ky spot tjetër në rafte. 427 00:18:34,180 --> 00:18:39,410 >> Pra, ajo nuk mund të jetë që ruan getString D-A-V-I-D në rafte, sepse unë do 428 00:18:39,410 --> 00:18:41,040 menjëherë të humbasin qasje në të. 429 00:18:41,040 --> 00:18:43,720 Por ne e dimë se ata getString vetëm kthen çfarë? 430 00:18:43,720 --> 00:18:47,220 Kjo nuk është kthyer në mua gjashtë shkronja. 431 00:18:47,220 --> 00:18:51,090 Çfarë është me të vërtetë e ka kthyer ne konkludojmë herën e fundit? 432 00:18:51,090 --> 00:18:52,480 Adresën e parë. 433 00:18:52,480 --> 00:18:56,650 Pra, në njëfarë mënyre, kur ju thirri getString, kjo është një copë alokimin e kujtesës për 434 00:18:56,650 --> 00:18:59,620 string se lloji përdoruesit dhe Adresa pastaj kthimi i saj. 435 00:18:59,620 --> 00:19:02,930 Dhe kjo rezulton se kur ju doni të funksionojë për të alokuar kujtesës në këtë 436 00:19:02,930 --> 00:19:08,390 Mënyra dhe kthimi tek personi i cili quhet se funksioni, adresa e 437 00:19:08,390 --> 00:19:11,870 se copë e kujtesës, ju absolutisht nuk mund të vënë atë në rafte në 438 00:19:11,870 --> 00:19:14,750 fund, sepse kjo është vetëm funksionalisht duke shkuar për të mos bëhet shumë juaji 439 00:19:14,750 --> 00:19:17,800 shpejt, kështu që ju mund ndoshta me mend se ku ne jeni me siguri do të hedh atë 440 00:19:17,800 --> 00:19:20,130 në vend të kësaj, e ashtuquajtura grumbull. 441 00:19:20,130 --> 00:19:25,290 >> Pra, në mes të poshtme të së kujtesës tuaj faqosja dhe maja e së kujtesës tuaj 442 00:19:25,290 --> 00:19:26,820 Layout janë një bandë e tërë e segmenteve. 443 00:19:26,820 --> 00:19:29,270 Njëra është rafte, dhe të drejtën sipër saj është tog. 444 00:19:29,270 --> 00:19:33,680 Dhe tog është vetëm një copë e ndryshme të kujtesës që nuk është përdorur për funksione të 445 00:19:33,680 --> 00:19:34,770 kur ata janë quajtur. 446 00:19:34,770 --> 00:19:38,100 Është përdorur për kujtesën afatgjatë, kur ju doni një funksion për të rrëmbyer disa 447 00:19:38,100 --> 00:19:42,700 kujtesës dhe të jenë në gjendje për të ul receptorin e telefonit në atë pa humbur kontrollin mbi të. 448 00:19:42,700 --> 00:19:45,550 >> Tani ju ndoshta mund të menjëherë shohim se kjo nuk është 449 00:19:45,550 --> 00:19:48,060 domosdoshmërisht një dizajn të përsosur. 450 00:19:48,060 --> 00:19:51,350 Si programi juaj ndarë në kujtesë rafte, ose si ju e quani më dhe 451 00:19:51,350 --> 00:19:55,540 më shumë funksione, ose si ju të ndajë memorie në grumbull me malloc off si 452 00:19:55,540 --> 00:20:00,690 getString është duke bërë, çfarë në mënyrë të qartë duket të jetë problemi i pashmangshëm? 453 00:20:00,690 --> 00:20:00,860 >> Drejtë. 454 00:20:00,860 --> 00:20:03,150 Ashtu si fakti se këto shigjeta janë vënë në njëri-tjetrin 455 00:20:03,150 --> 00:20:04,380 nuk shenjë e mirë. 456 00:20:04,380 --> 00:20:08,630 Dhe me të vërtetë, ne mund shumë shpejt të rrëzimit një program në çdo numër mënyrash. 457 00:20:08,630 --> 00:20:12,050 Në fakt, unë mendoj se ne mund të kemi bërë këtë aksidentalisht një herë. 458 00:20:12,050 --> 00:20:14,020 Ose në qoftë se jo, le ta bëjmë atë qëllimisht tani. 459 00:20:14,020 --> 00:20:21,330 Më lejoni të shkojnë përpara dhe të shkruajnë super të shpejtë një program të quajtur dontdothis.c. 460 00:20:21,330 --> 00:20:26,730 Dhe tani unë do të shkoj në këtu dhe e mprehtë përfshijnë stdio.h. 461 00:20:26,730 --> 00:20:32,620 Le të deklarojnë funksion foo merr nuk ka argumente, e cila është 462 00:20:32,620 --> 00:20:34,040 pėrcaktuara si edhe nga pavlefshme. 463 00:20:34,040 --> 00:20:37,830 >> Dhe gjëja e vetme foo do të bëni është të thirrje foo, e cila ndoshta nuk është 464 00:20:37,830 --> 00:20:39,100 ide e zgjuar, por kështu të jetë ajo. 465 00:20:39,100 --> 00:20:40,490 Void Ent kryesore. 466 00:20:40,490 --> 00:20:45,270 Tani e vetmja gjë që po ndodh kryesore për të bëni është të telefononi foo si. 467 00:20:45,270 --> 00:20:51,050 Dhe vetëm për shkelma, unë jam duke shkuar për të shkuar përpara këtu dhe thonë printf "Përshëndetje nga 468 00:20:51,050 --> 00:20:52,340 foo ". 469 00:20:52,340 --> 00:20:52,890 >> OK. 470 00:20:52,890 --> 00:21:00,160 Pra, në qoftë se unë nuk e ka bërë gabime, Bëni dontdothis dot slash. 471 00:21:00,160 --> 00:21:01,960 Dhe le ta bëjmë atë në një dritare të madhe - 472 00:21:01,960 --> 00:21:03,210 dot plagë, dontdothis. 473 00:21:03,210 --> 00:21:07,590 474 00:21:07,590 --> 00:21:08,840 Come on. 475 00:21:08,840 --> 00:21:10,940 476 00:21:10,940 --> 00:21:11,890 Uh oh. 477 00:21:11,890 --> 00:21:13,100 Me sa duket, ju mund ta bëni këtë. 478 00:21:13,100 --> 00:21:15,190 Damn it. 479 00:21:15,190 --> 00:21:16,190 OK. 480 00:21:16,190 --> 00:21:16,580 Prisni. 481 00:21:16,580 --> 00:21:17,370 Stand by. 482 00:21:17,370 --> 00:21:18,270 A ne - 483 00:21:18,270 --> 00:21:20,110 Ne e përdorin atë me të bërë. 484 00:21:20,110 --> 00:21:22,050 >> [Psherëtin] 485 00:21:22,050 --> 00:21:25,110 >> Unë e di, por unë mendoj se ne fshihet vetëm se. 486 00:21:25,110 --> 00:21:28,410 Uh, vërtet. 487 00:21:28,410 --> 00:21:30,660 Damn it. 488 00:21:30,660 --> 00:21:32,640 Zgjidhur këtë Rob. 489 00:21:32,640 --> 00:21:34,678 Çfarë? 490 00:21:34,678 --> 00:21:35,928 Është shumë e thjeshtë. 491 00:21:35,928 --> 00:21:43,820 492 00:21:43,820 --> 00:21:47,360 Yeah, ne u kthye off optimization. 493 00:21:47,360 --> 00:21:48,970 OK, të qëndrojë bye. 494 00:21:48,970 --> 00:21:49,950 Tani ndihem më mirë. 495 00:21:49,950 --> 00:21:51,390 OK. 496 00:21:51,390 --> 00:21:51,780 Dakord. 497 00:21:51,780 --> 00:21:53,430 >> Pra, le të përpiluar këtë - 498 00:21:53,430 --> 00:21:55,880 Sigurohuni që ju dontdothis. 499 00:21:55,880 --> 00:22:00,090 Ju mund të keni për të riemërtoni këtë për dothis.c në një moment të vetëm. 500 00:22:00,090 --> 00:22:00,710 Ka të shkojmë. 501 00:22:00,710 --> 00:22:01,240 Falemnderit. 502 00:22:01,240 --> 00:22:02,050 OK. 503 00:22:02,050 --> 00:22:05,480 Pra, fakti që unë u shtypjen nga diçka ishte e vërtetë vetëm 504 00:22:05,480 --> 00:22:08,150 ngadalësuar procesin me të cilin ne do të kishte arritur në këtë pikë. 505 00:22:08,150 --> 00:22:08,510 OK. 506 00:22:08,510 --> 00:22:08,870 Uh! 507 00:22:08,870 --> 00:22:11,180 >> Pra, çfarë është në të vërtetë ndodh? 508 00:22:11,180 --> 00:22:14,440 Arsyeja atje, ashtu si një mënjanë, është duke bërë asgjë në aspektin e input dhe 509 00:22:14,440 --> 00:22:17,270 prodhimi ka tendencë të jetë më e ngadaltë për shkak se ju duhet të shkruani karakteret që 510 00:22:17,270 --> 00:22:18,600 ekran, Ajo ka të lëvizni. 511 00:22:18,600 --> 00:22:21,720 Pra, histori të gjatë të shkurtër, unë në fakt kishte ndodhi kaq i padurueshëm, ne do të kemi 512 00:22:21,720 --> 00:22:23,260 kjo shihet rezultati përfundimtar si. 513 00:22:23,260 --> 00:22:26,220 Tani që kam marrë udhëtim të print-ups, ne e shohim atë menjëherë. 514 00:22:26,220 --> 00:22:28,410 Pra, pse po ndodh kjo. 515 00:22:28,410 --> 00:22:31,300 E pra, shpjegim të thjeshtë, natyrisht, foo është se ndoshta nuk duhet të 516 00:22:31,300 --> 00:22:32,500 të quan veten. 517 00:22:32,500 --> 00:22:34,470 >> Tani në terma të përgjithshme, kjo është recursion. 518 00:22:34,470 --> 00:22:36,970 Dhe ne kemi menduar nja dy javë recursive më parë është e mirë. 519 00:22:36,970 --> 00:22:40,330 Recursion është kjo rruga magjike e shprehur veten super shkurtimisht. 520 00:22:40,330 --> 00:22:41,400 Dhe vetëm ajo punon. 521 00:22:41,400 --> 00:22:45,060 Por ka një tipar kryesor i të gjithë programet e gjithkund rekursive ne kemi biseduar 522 00:22:45,060 --> 00:22:48,260 rreth dhe shikoi deri tani, e cila ishte se ata kishin çfarë? 523 00:22:48,260 --> 00:22:52,610 Një rast bazë, e cila ishte disa hard coded rast tha se në disa situata 524 00:22:52,610 --> 00:22:56,210 mos telefononi foo, e cila është në mënyrë të qartë nuk është rasti këtu. 525 00:22:56,210 --> 00:22:58,920 >> Pra, çfarë është me të vërtetë ndodh në kuptim të këtij foto? 526 00:22:58,920 --> 00:23:01,790 E pra, kur e quan kryesor foo, ajo merr një fetë e kujtesës. 527 00:23:01,790 --> 00:23:04,150 Kur e quan foo foo, ajo merr një fetë e kujtesës. 528 00:23:04,150 --> 00:23:06,430 Kur e quan foo foo, ajo merr një fetë. 529 00:23:06,430 --> 00:23:07,080 Ajo merr një fetë. 530 00:23:07,080 --> 00:23:08,120 Ajo merr një fetë. 531 00:23:08,120 --> 00:23:09,460 Sepse foo kurrë nuk është kthyer. 532 00:23:09,460 --> 00:23:12,160 Ne kurrë nuk jemi të fshirja një prej atyre korniza nga rafte. 533 00:23:12,160 --> 00:23:15,930 Pra, ne jemi defekt nëpërmjet një mase jo, për të përmendur kush e di çfarë tjetër, dhe 534 00:23:15,930 --> 00:23:19,600 ne jemi duke tejkaluar kufijtë e tonë ashtuquajturat segment i kujtesës. 535 00:23:19,600 --> 00:23:21,790 Error shkoni segmentimit të rreme. 536 00:23:21,790 --> 00:23:24,110 >> Pra, zgjidhja ekziston në mënyrë të qartë nuk e bëjmë këtë. 537 00:23:24,110 --> 00:23:28,830 Por implikimi i madh është se, po, nuk ka absolutisht është një kufi, 538 00:23:28,830 --> 00:23:32,470 edhe nëse ajo nuk është e përcaktuar mirë, se si shumë funksione ju mund të telefononi në një 539 00:23:32,470 --> 00:23:34,970 , programi sa herë një funksion mund të telefononi veten. 540 00:23:34,970 --> 00:23:38,430 Pra, edhe pse ne nuk predikojmë recursion pasi këtë gjë magjike potencialisht një 541 00:23:38,430 --> 00:23:41,870 Nja dy javë më parë për Sigma funksion, dhe kur ne të merrni të dhënat e 542 00:23:41,870 --> 00:23:45,270 strukturat dhe CS50, ju do të shihni të tjera aplikacionet për këtë, ajo nuk është 543 00:23:45,270 --> 00:23:46,500 domosdoshmërisht gjëja më e mirë. 544 00:23:46,500 --> 00:23:50,070 Sepse nëse një funksion quan veten, e quan veten, edhe në qoftë se ka një bazë 545 00:23:50,070 --> 00:23:54,860 rast, në qoftë se ju nuk e goditi atë rastin bazë thirrjet për 1.000 apo 10.000 telefonata, nga 546 00:23:54,860 --> 00:23:58,800 koha që ju mund të keni drejtuar nga dhoma on ashtuquajturës rafte tuaj dhe e goditi 547 00:23:58,800 --> 00:24:00,400 disa segmente të tjera të kujtesës. 548 00:24:00,400 --> 00:24:03,950 Pra, edhe ajo është një dizajn të tregtisë-off në mes të hijeshi dhe në mes të 549 00:24:03,950 --> 00:24:06,920 Fuqia e veçantë tuaj zbatimi. 550 00:24:06,920 --> 00:24:10,780 >> Pra, ka një downside ose tjetër Gotcha për atë që ne kemi 551 00:24:10,780 --> 00:24:11,720 qenë bërë deri tani. 552 00:24:11,720 --> 00:24:12,980 Kur kam quajtur getString - 553 00:24:12,980 --> 00:24:15,120 më lejoni të kthehem në Hello-2. 554 00:24:15,120 --> 00:24:18,170 Vini re se unë jam duke e quajtur getString, e cila është kthyer një adresë. 555 00:24:18,170 --> 00:24:20,730 Dhe ne sot pretendojnë se adresa eshte nga pirgut. 556 00:24:20,730 --> 00:24:24,480 Dhe tani unë jam i shtypjes nga string në atë adresë. 557 00:24:24,480 --> 00:24:27,000 Por ne kurrë nuk e kam quajtur kundërta e getString. 558 00:24:27,000 --> 00:24:30,850 Ne kurrë nuk kam pasur për të CALLL një funksion si ungetstring, ku ju dora mbrapa 559 00:24:30,850 --> 00:24:31,610 se kujtesa. 560 00:24:31,610 --> 00:24:33,250 Por sinqerisht ne ndoshta duhet të ketë qenë. 561 00:24:33,250 --> 00:24:37,390 Sepse në qoftë se ne vazhdojmë të kërkuar kompjuterin për kujtesën, nga mënyra e dikujt si 562 00:24:37,390 --> 00:24:40,830 getString por kurrë nuk jepni atë përsëri, me siguri që gjithashtu është i detyruar të çojë në 563 00:24:40,830 --> 00:24:42,970 Problemet ku kemi drejtuar jashtë kujtesës. 564 00:24:42,970 --> 00:24:46,140 >> Dhe në fakt, ne mund të shikoni për këto Problemet me mjet të ri e të cilit përdorimi 565 00:24:46,140 --> 00:24:47,640 eshte nje kriptuar pak te tipit. 566 00:24:47,640 --> 00:24:50,960 Por më lejoni të shkoj përpara dhe spërkatje atë në ekran në një moment të vetëm. 567 00:24:50,960 --> 00:24:56,940 Unë jam duke shkuar për të shkuar përpara dhe të drejtuar Rregullat e ndërprerjes me parametrin e parë e të cilit komandë 568 00:24:56,940 --> 00:25:00,260 Argumenti linjë është emri e atij programi Hello-2. 569 00:25:00,260 --> 00:25:02,650 Dhe për fat të keq kjo është prodhimi është atrociously 570 00:25:02,650 --> 00:25:04,290 komplekse për asnjë arsye të mirë. 571 00:25:04,290 --> 00:25:06,280 Pra, ne shohim të gjitha rrëmujë atë. 572 00:25:06,280 --> 00:25:07,530 Davidi është deklarojë emrin tim. 573 00:25:07,530 --> 00:25:09,760 Pra, kjo është programi në fakt running. 574 00:25:09,760 --> 00:25:11,180 Dhe tani ne kemi marrë këtë prodhim. 575 00:25:11,180 --> 00:25:13,400 >> Shprehje Pra është e ngjashme në shpirt ndaj GDB. 576 00:25:13,400 --> 00:25:14,950 Kjo nuk është një debugger në vetvete. 577 00:25:14,950 --> 00:25:16,270 Por kjo është një checker kujtesës. 578 00:25:16,270 --> 00:25:20,140 Është një program që do të drejtuar tuaj programojnë dhe të ju tregojnë nëse ju kërkohet një 579 00:25:20,140 --> 00:25:23,860 kompjuter për kujtesën dhe kurrë nuk dorëzuar atë mbrapa, në këtë mënyrë do të thotë se ju keni 580 00:25:23,860 --> 00:25:24,570 një rrjedhje kujtim. 581 00:25:24,570 --> 00:25:26,240 Dhe rrjedhjet e kujtesës priren të jenë të këqija. 582 00:25:26,240 --> 00:25:29,120 Dhe ju është përdoruesit e kompjuterave kanë ndoshta mendonin këtë, nëse ju keni një 583 00:25:29,120 --> 00:25:30,300 Mac apo PC. 584 00:25:30,300 --> 00:25:33,730 A keni përdorur ndonjëherë kompjuterin tuaj për ndërkohë që nuk restartohet dhe në disa 585 00:25:33,730 --> 00:25:36,820 ditë, ose ju keni vetëm mori një shumë të drejtimin e programeve, dhe gjë damn 586 00:25:36,820 --> 00:25:42,360 ngadalëson për të ndalur një kërcëllimë, ose të paktën kjo është super i bezdisshëm për t'u përdorur, sepse 587 00:25:42,360 --> 00:25:44,350 çdo gjë mori vetëm super të ngadalshëm. 588 00:25:44,350 --> 00:25:46,260 >> Tani që mund të jetë çdo numër arsyesh. 589 00:25:46,260 --> 00:25:49,600 Kjo mund të jetë një lak të pafund, një bug në Kodi i dikujt, ose, më thjesht, kjo 590 00:25:49,600 --> 00:25:53,250 mund të thotë se ju jeni duke përdorur më shumë kujtesës, ose duke u përpjekur për të, se sa tuaj 591 00:25:53,250 --> 00:25:54,920 kompjuteri në fakt ka. 592 00:25:54,920 --> 00:25:57,770 Dhe ndoshta ka një bug në një program që mbajnë kërkuar për kujtesën. 593 00:25:57,770 --> 00:26:02,480 Browsers për vitet ishin të njohur për kjo, duke kërkuar për më shumë memorie dhe më shumë 594 00:26:02,480 --> 00:26:03,870 por kurrë dorëzimin atë përsëri. 595 00:26:03,870 --> 00:26:07,220 Sigurisht, në qoftë se ju keni vetëm një kufizuaren shuma e kujtesës, ju nuk mund të kërkoni 596 00:26:07,220 --> 00:26:09,990 pafundësisht shumë herë për disa prej se kujtesa. 597 00:26:09,990 --> 00:26:13,070 >> Dhe kështu që ajo që ju shihni këtu, edhe pse Shprehje përsëri prodhimi është 598 00:26:13,070 --> 00:26:17,490 panevojshme kompleks për shikim në Së pari, kjo është pjesë interesante. 599 00:26:17,490 --> 00:26:18,890 Heap - 600 00:26:18,890 --> 00:26:20,060 në përdorim në dalje. 601 00:26:20,060 --> 00:26:22,810 Kështu që këtu është se sa memorie ishte në përdorim në grumbujt 602 00:26:22,810 --> 00:26:24,300 Ora programi im exited - 603 00:26:24,300 --> 00:26:27,280 me sa duket gjashtë bytes në një bllok. 604 00:26:27,280 --> 00:26:28,710 Kështu që unë jam duke shkuar për të tundë duart e mia në çfarë një bllok është. 605 00:26:28,710 --> 00:26:31,270 Mendoni se është vetëm një copë, një më shumë Fjala teknike për copë. 606 00:26:31,270 --> 00:26:33,140 Por gjashtë bytes - 607 00:26:33,140 --> 00:26:36,870 çfarë janë gjashtë bytes që ishin ende në përdorim? 608 00:26:36,870 --> 00:26:37,390 >> Saktësisht. 609 00:26:37,390 --> 00:26:41,520 D-A-V-I-D backslash zero, pesë letër Emri plus Terminator null. 610 00:26:41,520 --> 00:26:46,350 Pra, ky program Shprehje vënë re se unë pyeti për gjashtë bytes, me sa duket, nga 611 00:26:46,350 --> 00:26:48,950 Mënyra e getString, por kurrë dha ato mbrapa. 612 00:26:48,950 --> 00:26:52,030 Dhe në fakt, kjo nuk mund të jetë aq e qartë nëse programi im nuk është tre 613 00:26:52,030 --> 00:26:53,590 linjat, por kjo është 300 rreshta. 614 00:26:53,590 --> 00:26:56,920 Pra, ne në fakt mund të japin një tjetër komandë Argumenti linjë Rregullat e ndërprerjes të të 615 00:26:56,920 --> 00:26:58,290 bëjë atë më të fjalëshumë. 616 00:26:58,290 --> 00:26:59,760 Është pak i bezdisshëm për të kujtuar. 617 00:26:59,760 --> 00:27:01,580 Por në qoftë se unë bëj - 618 00:27:01,580 --> 00:27:01,930 le të shohim. 619 00:27:01,930 --> 00:27:03,540 Rrjedhje - 620 00:27:03,540 --> 00:27:05,030 Ishte ajo del në shesh - 621 00:27:05,030 --> 00:27:07,580 edhe unë nuk e mbani mend çfarë është ajo off dorë. 622 00:27:07,580 --> 00:27:08,550 >> - Rrjedhje-check barabartë plotë. 623 00:27:08,550 --> 00:27:10,180 Yep, thank you. 624 00:27:10,180 --> 00:27:12,520 - Rrjedhje-check barabartë plotë. 625 00:27:12,520 --> 00:27:13,800 Enter. 626 00:27:13,800 --> 00:27:14,940 Programi i njëjtë është i rrjedhshëm. 627 00:27:14,940 --> 00:27:16,180 Shkruani në të Davidit përsëri. 628 00:27:16,180 --> 00:27:17,660 Tani unë shoh pak më tepër hollësira. 629 00:27:17,660 --> 00:27:20,890 Por më poshtë përmbledhjen tog gurësh, i cili është identike me katër - ah, 630 00:27:20,890 --> 00:27:22,120 kjo është lloj i bukur. 631 00:27:22,120 --> 00:27:25,460 Shprehje Tani është në të vërtetë në kërkim pak më e vështirë në kodin tim. 632 00:27:25,460 --> 00:27:29,580 Dhe kjo është thënë se, me sa duket, malloc në linjë - 633 00:27:29,580 --> 00:27:30,580 ne zoom out. 634 00:27:30,580 --> 00:27:31,980 Në linjë - 635 00:27:31,980 --> 00:27:32,930 ne nuk shohim se çfarë linjë është ajo. 636 00:27:32,930 --> 00:27:35,110 Por malloc është fajtori parë. 637 00:27:35,110 --> 00:27:38,630 Ka një blog në malloc. 638 00:27:38,630 --> 00:27:39,810 >> Të gjithë të drejtë? 639 00:27:39,810 --> 00:27:40,450 OK, nr. 640 00:27:40,450 --> 00:27:40,940 E drejta? 641 00:27:40,940 --> 00:27:42,520 I quajtur getString. 642 00:27:42,520 --> 00:27:44,460 getString duket quan malloc. 643 00:27:44,460 --> 00:27:47,800 Pra, çfarë linjë e kodit është me sa duket në faj për të paturit e 644 00:27:47,800 --> 00:27:49,050 ndarë këtë kujtesë? 645 00:27:49,050 --> 00:27:51,560 646 00:27:51,560 --> 00:27:55,540 Le të supozojmë se kushdo që shkroi malloc ka qenë rreth kohë të mjaftueshme që ajo është 647 00:27:55,540 --> 00:27:56,390 nuk është faji i tyre. 648 00:27:56,390 --> 00:27:57,520 Pra, kjo është ndoshta imja. 649 00:27:57,520 --> 00:28:02,000 getString në cs50.c - kështu që është një paraqesë diku në kompjuter - 650 00:28:02,000 --> 00:28:05,210 në përputhje 286 duket të jetë fajtori. 651 00:28:05,210 --> 00:28:08,140 Tani le të supozojmë se CS50 ka qenë rreth e rrotull për sasi të mirë të kohës, kështu që 652 00:28:08,140 --> 00:28:09,720 edhe ne jemi të pagabueshëm. 653 00:28:09,720 --> 00:28:14,080 Dhe kështu që nuk është ndoshta në getString se bug qëndron, por më tepër në 654 00:28:14,080 --> 00:28:17,810 Hello-2.c linjë 18. 655 00:28:17,810 --> 00:28:20,670 >> Pra, le të marrin një vështrim në se çfarë linjë ishte 18. 656 00:28:20,670 --> 00:28:21,130 Oh. 657 00:28:21,130 --> 00:28:27,130 Disi kjo linjë nuk është domosdoshmërisht buggy, në vetvete, por kjo është arsyeja 658 00:28:27,130 --> 00:28:28,630 prapa atë rrjedhje kujtesës. 659 00:28:28,630 --> 00:28:32,140 Pra thjesht super, çfarë do intuitivisht të jetë zgjidhja këtu? 660 00:28:32,140 --> 00:28:34,710 Nëse ne jemi duke kërkuar për kujtesën, asnjëherë nuk ishin duke i dhënë atë përsëri, dhe që duket të jetë një 661 00:28:34,710 --> 00:28:37,940 problem, sepse me kalimin e kohës kompjuterin tim mund të dalë jashtë kujtesës, mund të ngadalësojë 662 00:28:37,940 --> 00:28:42,110 poshtë, gjëra të këqija mund të ndodhë, mirë, çfarë është zgjidhje e thjeshtë intuitiv? 663 00:28:42,110 --> 00:28:43,140 Vetëm jepni atë përsëri. 664 00:28:43,140 --> 00:28:44,770 >> Si mendoni ju se lirë deri memorie? 665 00:28:44,770 --> 00:28:49,970 Well, fatmirësisht kjo është mjaft e thjeshtë të them vetëm emrin lirë. 666 00:28:49,970 --> 00:28:51,260 Dhe ne kurrë nuk kam bërë këtë më parë. 667 00:28:51,260 --> 00:28:55,890 Por ju mund të thelb të mendojnë për pa pagesë si e kundërta e malloc. 668 00:28:55,890 --> 00:28:58,030 lirë është e kundërta e alokimin e kujtesës. 669 00:28:58,030 --> 00:28:59,540 Pra, tani më lejoni të përpiluar këtë. 670 00:28:59,540 --> 00:29:02,050 Bëni Hello-2. 671 00:29:02,050 --> 00:29:04,620 Më lejoni të drejtuar atë përsëri. Hello-2 Davidi. 672 00:29:04,620 --> 00:29:07,290 Pra, kjo duket për të punuar në saktësisht të njëjtën mënyrë. 673 00:29:07,290 --> 00:29:11,180 Por, nëse unë kthehem në Rregullat e ndërprerjes dhe ri-drejtuar se urdhërimi i njëjtë në të sapo ime 674 00:29:11,180 --> 00:29:14,720 përpiluar, programi typing në emrin tim si më parë - 675 00:29:14,720 --> 00:29:15,370 bukur. 676 00:29:15,370 --> 00:29:16,760 Permbledhja Heap - 677 00:29:16,760 --> 00:29:17,740 në përdorim në dalje - 678 00:29:17,740 --> 00:29:19,370 zero bytes në blloqe zero. 679 00:29:19,370 --> 00:29:21,840 Dhe kjo është super e bukur, të gjithë blloqe të grumbullosh u liruan. 680 00:29:21,840 --> 00:29:23,480 Asnjë rrjedhjet janë të mundshme. 681 00:29:23,480 --> 00:29:27,200 >> Pra vjen, jo me Set Problem 4, por me Set Problem 5, mjeko-ligjore 682 00:29:27,200 --> 00:29:30,740 dhe tutje, kjo shumë do të bëhet një Masa e korrektësinë e juaj 683 00:29:30,740 --> 00:29:33,630 Programi, nëse janë apo jo ju keni ose nuk kanë rrjedhjet e kujtesës. 684 00:29:33,630 --> 00:29:36,900 Por fatmirësisht, jo vetëm ju mund të arsyetojë nëpërmjet atyre intuitivisht, e cila 685 00:29:36,900 --> 00:29:40,430 është, ndoshta, i lehtë për programe të vogla por më e vështirë për programet më të mëdha, 686 00:29:40,430 --> 00:29:43,860 Rregullat e ndërprerjes, për ato programe më të mëdha, mund të ju ndihmojë të identifikojnë 687 00:29:43,860 --> 00:29:45,360 problem i veçantë. 688 00:29:45,360 --> 00:29:47,500 >> Por ka një problem tjetër që mund të lindin. 689 00:29:47,500 --> 00:29:51,245 Më lejoni të hapur këtë skedë këtu, e cila është, përsëri, një shembull i thjeshtë disi. 690 00:29:51,245 --> 00:29:53,760 Por le të përqëndrohen në atë ky program bën. 691 00:29:53,760 --> 00:29:55,190 Kjo është quajtur memory.c. 692 00:29:55,190 --> 00:29:58,380 Ne do të postoj këtë sot më vonë në zip e kodit burimor të sotëm. 693 00:29:58,380 --> 00:30:01,610 Dhe vëreni se unë kam një funksion të quajtur f që merr asnjë argumentet dhe 694 00:30:01,610 --> 00:30:02,800 kthen asgjë. 695 00:30:02,800 --> 00:30:07,240 Në linjë 20, unë jam deklaruar me sa duket një tregues për një int dhe ta quanin x. 696 00:30:07,240 --> 00:30:09,570 Unë jam caktimin është kthimi Vlera e malloc. 697 00:30:09,570 --> 00:30:14,590 Dhe vetëm të jetë i qartë, sa bytes am Unë ndoshta duke u kthyer nga malloc 698 00:30:14,590 --> 00:30:17,080 në këtë situatë? 699 00:30:17,080 --> 00:30:18,040 >> Ndoshta 40. 700 00:30:18,040 --> 00:30:18,840 Ku ju merrni se nga? 701 00:30:18,840 --> 00:30:22,410 E pra, nëse ju kujtohet se një int shpesh është 4 bytes, te pakten ajo eshte ne 702 00:30:22,410 --> 00:30:25,110 aplikim, 10 herë 4 është padyshim 40. 703 00:30:25,110 --> 00:30:28,920 Pra malloc po kthehet një adresë të një copë e kujtesës dhe ruajtjen që 704 00:30:28,920 --> 00:30:30,800 adresuar në fund të fundit në x. 705 00:30:30,800 --> 00:30:32,570 Pra, të jetë i qartë, çfarë atëherë po ndodh? 706 00:30:32,570 --> 00:30:34,990 E pra, më lejoni të kaloni mbrapa për foto tonë këtu. 707 00:30:34,990 --> 00:30:38,150 Më lejoni të tërheq jo vetëm fundin e mia memorie të kompjuterit, më lejoni të shkoj përpara dhe të 708 00:30:38,150 --> 00:30:42,990 barazim drejtkëndësh tërë që përfaqëson të gjithë RAM tim. 709 00:30:42,990 --> 00:30:44,790 >> Ne do të themi se rafte është në pjesën e poshtme. 710 00:30:44,790 --> 00:30:47,010 Dhe ka një segment në tekst të dhënat uninitialized. 711 00:30:47,010 --> 00:30:49,880 Por unë jam vetëm duke shkuar për të abstrakte ato gjëra të tjera larg si dot, dot dot. 712 00:30:49,880 --> 00:30:53,470 Unë jam vetëm duke shkuar për të referuar në këtë si tog në krye. 713 00:30:53,470 --> 00:30:57,070 Dhe pastaj në fund të kësaj tabloje, për të përfaqësuar kryesor, unë jam duke shkuar 714 00:30:57,070 --> 00:30:59,880 për të dhënë atë një kujtim feta në pirg. 715 00:30:59,880 --> 00:31:03,150 Për f, unë jam duke shkuar për të dhënë atë një fetë e kujtesës në rafte. 716 00:31:03,150 --> 00:31:05,140 Tani, unë kam për të konsultuar e mia; kodi burim përsëri. 717 00:31:05,140 --> 00:31:07,170 Cilat janë variablat lokale për kryesor? 718 00:31:07,170 --> 00:31:10,710 Me sa duket asgjë, kështu që fetë është efektivisht bosh ose jo edhe aq i madh 719 00:31:10,710 --> 00:31:11,600 si unë e kam tërhequr atë. 720 00:31:11,600 --> 00:31:15,730 Por në f, unë kam një ndryshore lokale, e cila është quajtur x. 721 00:31:15,730 --> 00:31:20,410 Kështu që unë jam duke shkuar për të shkuar përpara dhe për t'u dhënë f një copë e kujtesës, duke e quajtur atë x. 722 00:31:20,410 --> 00:31:24,680 >> Dhe tani malloc i 10 herë 4, Pra malloc 40, ku se 723 00:31:24,680 --> 00:31:25,430 kujtesës që vijnë nga? 724 00:31:25,430 --> 00:31:27,530 Ne nuk kemi tërhequr një foto si kjo para. 725 00:31:27,530 --> 00:31:31,140 Por le të supozojmë se kjo është në mënyrë efektive vijnë nga këtu, kështu që një, 726 00:31:31,140 --> 00:31:33,170 dy, tre, katër, pesë. 727 00:31:33,170 --> 00:31:34,680 Dhe tani kam nevojë për 40 nga këto. 728 00:31:34,680 --> 00:31:37,540 Kështu që unë vetëm do të bëj dot, dot, dot të sugjerojnë se ka edhe më shumë memorie 729 00:31:37,540 --> 00:31:39,350 vijnë nga togu. 730 00:31:39,350 --> 00:31:40,710 Tani çfarë është adresa? 731 00:31:40,710 --> 00:31:42,620 Le të zgjedhin arbitrare tonë adresuar si gjithmonë - 732 00:31:42,620 --> 00:31:46,310 Ox123, edhe pse ajo ndoshta do të jetë diçka krejtësisht të ndryshme. 733 00:31:46,310 --> 00:31:50,420 Kjo është adresa e parë në bajt kujtesës që unë jam duke kërkuar për malloc. 734 00:31:50,420 --> 00:31:53,630 >> Pra, në linjë të shkurtër, dikur 20 ekzekuton, çfarë është fjalë për fjalë 735 00:31:53,630 --> 00:31:57,170 ruhen brenda x këtu? 736 00:31:57,170 --> 00:31:58,730 Ox123. 737 00:31:58,730 --> 00:32:00,370 Ox123. 738 00:32:00,370 --> 00:32:01,550 Dhe Dem është jointeresant. 739 00:32:01,550 --> 00:32:03,200 Ajo thjesht do të thotë këtu është një numër heksadecimal. 740 00:32:03,200 --> 00:32:06,490 Por ajo që është kryesore është se ajo që unë kam dyqan në X, i cili eshte nje variabli lokal. 741 00:32:06,490 --> 00:32:10,260 Por lloji të dhënave të saj, përsëri, eshte nje adrese e nje int. 742 00:32:10,260 --> 00:32:12,710 E pra, unë jam duke shkuar për të ruajtur Ox123. 743 00:32:12,710 --> 00:32:16,610 Por përsëri, në qoftë se kjo është pak a shumë të komplikuar të panevojshme, në qoftë se unë lëviz 744 00:32:16,610 --> 00:32:21,490 përsëri, ne mund të abstrakt ky mjaft larg të arsyeshme dhe të them vetëm se x është një 745 00:32:21,490 --> 00:32:23,910 tregues për atë copë të kujtesës. 746 00:32:23,910 --> 00:32:24,070 >> OK. 747 00:32:24,070 --> 00:32:26,230 Tani pyetja në dorë eshte mëposhtme - 748 00:32:26,230 --> 00:32:29,910 Linja 21, ajo rezulton, është buggy. 749 00:32:29,910 --> 00:32:31,160 Pse? 750 00:32:31,160 --> 00:32:34,890 751 00:32:34,890 --> 00:32:36,930 >> Na vjen keq? 752 00:32:36,930 --> 00:32:38,640 Ajo nuk duhet - 753 00:32:38,640 --> 00:32:40,390 thonë se një herë më shumë. 754 00:32:40,390 --> 00:32:41,240 E pra, kjo nuk e bën lirë. 755 00:32:41,240 --> 00:32:42,350 Pra, kjo është e dytë, por. 756 00:32:42,350 --> 00:32:45,000 Pra, ka një tjetër, por në mënyrë specifike në linjë 21. 757 00:32:45,000 --> 00:32:49,480 758 00:32:49,480 --> 00:32:50,040 >> Saktësisht. 759 00:32:50,040 --> 00:32:54,980 Kjo linjë e kodit është thjeshtë vetëm një del nga shtrati tampon, tampon një muar. 760 00:32:54,980 --> 00:32:57,050 Një tampon të thotë vetëm një copë e kujtesës. 761 00:32:57,050 --> 00:33:01,520 Por kjo copë e kujtesës është i madhësisë 10, 10 integers, që do të thotë në qoftë se ne 762 00:33:01,520 --> 00:33:05,350 indeksi në atë duke përdorur sheqer sintaktik e simbol array, sheshi 763 00:33:05,350 --> 00:33:09,220 kllapa, ju keni qasje në x kllapa 0 x 1 x parantezë, 764 00:33:09,220 --> 00:33:10,390 parantezë dot, dot, dot. 765 00:33:10,390 --> 00:33:13,270 x 9 parantezë është një më i madh. 766 00:33:13,270 --> 00:33:17,680 Pra, nëse unë bëj x parantezë 10, ku Unë në fakt jam duke shkuar në kujtesën? 767 00:33:17,680 --> 00:33:19,120 >> E pra, nëse unë kam 10 int - 768 00:33:19,120 --> 00:33:21,070 le të vërtetë të tërheqë të gjithë nga këto këtu. 769 00:33:21,070 --> 00:33:22,700 Kështu që ishte pesë të parë. 770 00:33:22,700 --> 00:33:24,660 Ja pesë të tjerë ints. 771 00:33:24,660 --> 00:33:29,580 Pra x kllapa 0 është këtu. 1 x kllapa është këtu. x parantezë 9 është këtu. x kllapa 772 00:33:29,580 --> 00:33:37,960 10 është këtu, që do të thotë unë jam i thënë, në linjë 21, kompjuter për të vënë 773 00:33:37,960 --> 00:33:39,400 numri ku? 774 00:33:39,400 --> 00:33:42,010 Numri 0, ku? 775 00:33:42,010 --> 00:33:43,380 E pra, kjo është 0, po. 776 00:33:43,380 --> 00:33:45,460 Por vetëm fakti se 0 i saj është lloj i një rastësi. 777 00:33:45,460 --> 00:33:47,140 Kjo mund të jetë numri i 50, për të gjithë ne kujdes. 778 00:33:47,140 --> 00:33:50,480 Por ne jemi duke u përpjekur për ta vënë atë në x kllapa 10, e cila eshte ku ky 779 00:33:50,480 --> 00:33:53,700 pikëpyetje është tërhequr, e cila nuk është një gjë e mirë. 780 00:33:53,700 --> 00:33:57,070 Ky program mund shumë mirë rrëzimit si rezultat. 781 00:33:57,070 --> 00:33:59,400 >> Tani, le të shkojë përpara dhe të shohim nëse kjo është, në të vërtetë, se çfarë ndodh. 782 00:33:59,400 --> 00:34:02,600 Bëni kujtesë, pasi fotografinë quhet memory.c. 783 00:34:02,600 --> 00:34:05,950 Le të shkojnë përpara dhe të drejtuar kujtesës program. 784 00:34:05,950 --> 00:34:08,239 Pra, kemi marrë me fat, në fakt, kjo duket. 785 00:34:08,239 --> 00:34:09,340 Ne morëm me fat. 786 00:34:09,340 --> 00:34:11,060 Por le të shohim nëse ne tani të drejtuar Shprehje. 787 00:34:11,060 --> 00:34:14,170 Në shikim të parë, programi im mund duket të jetë krejtësisht e saktë. 788 00:34:14,170 --> 00:34:18,010 Por më lejoni të drejtuar Rregullat e ndërprerjes me - Rrjedhje-check barabartë plotë në kujtesë. 789 00:34:18,010 --> 00:34:20,110 >> Dhe tani, kur kam drejtuar këtë - 790 00:34:20,110 --> 00:34:21,030 interesante. 791 00:34:21,030 --> 00:34:26,800 Invalid shkruaj e madhësisë 4 në Linja 21 e memory.c. 792 00:34:26,800 --> 00:34:29,284 Linja 21 e memory.c e cila është një? 793 00:34:29,284 --> 00:34:30,340 Oh, interesante. 794 00:34:30,340 --> 00:34:31,080 Por prisni. 795 00:34:31,080 --> 00:34:32,389 Size 4, çfarë është ajo duke iu referuar? 796 00:34:32,389 --> 00:34:34,969 Unë kam vetëm një shkruaj, por kjo është e madhësisë 4. 797 00:34:34,969 --> 00:34:36,889 Pse është 4? 798 00:34:36,889 --> 00:34:39,280 Kjo është për shkak se ajo është një int, e cila është, përsëri, katër bytes. 799 00:34:39,280 --> 00:34:42,510 Pra Rregullat e ndërprerjes gjetur një bug që unë, glancing në kodin tim, nuk e bëri. 800 00:34:42,510 --> 00:34:45,040 Dhe ndoshta TF juaj do apo nuk do. 801 00:34:45,040 --> 00:34:48,469 Çfarë Por, për të gjetur Rregullat e ndërprerjes sigurt se ne kemi bërë një gabim atje, madje edhe 802 00:34:48,469 --> 00:34:52,719 edhe pse kemi marrë me fat, dhe kompjuteri vendosi, eh, unë nuk jam duke shkuar për të rrëzuar 803 00:34:52,719 --> 00:34:57,470 vetëm për shkak se keni prekur një bajt, një vlerë Int i kujtesës që ju nuk e keni 804 00:34:57,470 --> 00:34:58,550 në fakt vetë. 805 00:34:58,550 --> 00:35:00,380 >> E pra, çfarë tjetër është buggy këtu. 806 00:35:00,380 --> 00:35:01,180 Adresa - 807 00:35:01,180 --> 00:35:03,190 kjo është një adresë çmendur në kërkim në heksadecimal. 808 00:35:03,190 --> 00:35:06,890 Kjo thjesht do të thotë diku në tog është zero bytes pas një bllok të madhësisë 40 809 00:35:06,890 --> 00:35:07,620 është e ndarë. 810 00:35:07,620 --> 00:35:10,610 Më lejoni të zoom out këtu dhe të shohim nëse kjo është pak më e dobishme. 811 00:35:10,610 --> 00:35:11,410 Interesting. 812 00:35:11,410 --> 00:35:15,600 40 bytes janë të humbur definitivisht në humbje rekord 1 prej 1. 813 00:35:15,600 --> 00:35:17,840 Përsëri, më shumë fjalë se është e dobishme këtu. 814 00:35:17,840 --> 00:35:21,350 Por, bazuar në linjat e theksuara, ku duhet unë ndoshta fokusi im 815 00:35:21,350 --> 00:35:24,070 Vëmendje për një tjetër bug? 816 00:35:24,070 --> 00:35:26,570 Duket si një linjë 20 të memory.c. 817 00:35:26,570 --> 00:35:30,990 >> Pra, nëse ne kthehemi në linjë 20, që është një që ju të identifikuar më herët. 818 00:35:30,990 --> 00:35:33,030 Dhe kjo nuk është domosdoshmërisht buggy. 819 00:35:33,030 --> 00:35:35,160 Por ne e kemi këtë përmbyset efektet e saj. 820 00:35:35,160 --> 00:35:38,790 Pra, si nuk kam korrigjuar të paktën një nga ato gabime? 821 00:35:38,790 --> 00:35:42,240 Çfarë mund të bëj unë pas vijës 21? 822 00:35:42,240 --> 00:35:47,110 Unë mund të bëjë pa x, kështu që është e për t'i kthyer atë kujtesës. 823 00:35:47,110 --> 00:35:49,230 Dhe si mund ta rregullojmë këtë bug? 824 00:35:49,230 --> 00:35:52,120 Unë duhet patjetër të shkoni jo më larg se 0. 825 00:35:52,120 --> 00:35:53,670 Pra më lejoni të përpiqen dhe të ri-drejtuar këtë. 826 00:35:53,670 --> 00:35:56,080 Na vjen keq, patjetër të shkoni jo më larg se 9. 827 00:35:56,080 --> 00:35:57,510 Bëni kujtesës. 828 00:35:57,510 --> 00:36:00,650 Më lejoni ribërjen Rregullat e ndërprerjes në një dritare të madhe. 829 00:36:00,650 --> 00:36:01,580 Dhe tani shohim. 830 00:36:01,580 --> 00:36:02,250 Bukur. 831 00:36:02,250 --> 00:36:03,270 Të gjitha blloqet grumbullosh u liruan. 832 00:36:03,270 --> 00:36:04,270 Asnjë rrjedhjet janë të mundshme. 833 00:36:04,270 --> 00:36:07,520 Dhe deri këtu më sipër, nuk ka asnjë përmendje cilido më i drejte pavlefshme. 834 00:36:07,520 --> 00:36:09,820 >> Vetëm të merrni lakmitar, dhe le të shohim nëse një tjetër demonstratë 835 00:36:09,820 --> 00:36:11,050 nuk shkojnë si qëllim - 836 00:36:11,050 --> 00:36:12,560 Unë e kam marrë me fat një moment më parë. 837 00:36:12,560 --> 00:36:15,530 Dhe fakti që kjo është 0 është ndoshta panevojshme mashtruese. 838 00:36:15,530 --> 00:36:20,650 Le të vetëm të bëjë 50 vjeç, një disi arbitrar numrin, të bëjë dot kujtesës memorie vizë-- 839 00:36:20,650 --> 00:36:21,410 ende të merrni me fat. 840 00:36:21,410 --> 00:36:22,510 Asgjë nuk është crashing. 841 00:36:22,510 --> 00:36:26,150 Supozoni se unë vetëm të bëjë diçka të vërtetë qesharake, dhe unë bëj 100. 842 00:36:26,150 --> 00:36:30,360 Më lejoni të ribërë kujtesën, dot kujtesës slash - 843 00:36:30,360 --> 00:36:31,075 mori me fat përsëri. 844 00:36:31,075 --> 00:36:32,800 Si rreth 1,000? 845 00:36:32,800 --> 00:36:35,370 ints përtej, afërsisht, ku unë duhet të jetë? 846 00:36:35,370 --> 00:36:37,410 Bëni kujtesës - 847 00:36:37,410 --> 00:36:38,570 mallkonte atë. 848 00:36:38,570 --> 00:36:39,920 >> [Qeshura] 849 00:36:39,920 --> 00:36:41,270 >> OK. 850 00:36:41,270 --> 00:36:43,920 Le të mos bela rreth anymore. 851 00:36:43,920 --> 00:36:45,120 Ribërjen kujtesës. 852 00:36:45,120 --> 00:36:45,840 Ka të shkojmë. 853 00:36:45,840 --> 00:36:46,410 Dakord. 854 00:36:46,410 --> 00:36:52,500 Pra, me sa duket ju indeksi 100.000 ints përtej ku ju duhet të keni qenë në 855 00:36:52,500 --> 00:36:54,410 kujtesës, ndodhin gjëra të këqija. 856 00:36:54,410 --> 00:36:56,430 Pra, kjo nuk është e qartë një vështirë, rregull të shpejtë. 857 00:36:56,430 --> 00:36:58,190 Unë kam qenë duke përdorur lloj i gjykimit dhe gabim për të arritur atje. 858 00:36:58,190 --> 00:37:02,230 Por kjo është për shkak se, histori të gjatë të shkurtër, memorie kompjuteri juaj është e ndarë edhe 859 00:37:02,230 --> 00:37:03,580 në këto gjëra quhet segmente. 860 00:37:03,580 --> 00:37:07,260 Dhe ndonjëherë, në fakt kompjuteri ju ka dhënë një memorie pak më shumë 861 00:37:07,260 --> 00:37:08,400 se ju kërkoni. 862 00:37:08,400 --> 00:37:12,170 Por për efikasitet, kjo është vetëm e lehtë për të merrni më shumë memorie, por vetëm t'ju them 863 00:37:12,170 --> 00:37:13,780 se ju jeni duke marrë një pjesë të saj. 864 00:37:13,780 --> 00:37:16,370 >> Dhe në qoftë se ju merrni me fat ndonjëherë, Prandaj, ju mund të jetë në gjendje për të prekur 865 00:37:16,370 --> 00:37:17,795 kujtesës që nuk i takon për ju. 866 00:37:17,795 --> 00:37:21,860 Ju keni asnjë garanci se ajo që vlera e ju vënë atje do të qëndrojnë atje, sepse 867 00:37:21,860 --> 00:37:25,080 kompjuteri ende mendon se kjo nuk është e juaji, por kjo nuk është domosdoshmërisht do 868 00:37:25,080 --> 00:37:29,910 për të goditur një tjetër segment të kujtesës në kompjuter dhe të shkaktoj një gabim si 869 00:37:29,910 --> 00:37:31,710 kjo këtu. 870 00:37:31,710 --> 00:37:32,060 Dakord. 871 00:37:32,060 --> 00:37:37,240 Çfarëdo pyetjeje pastaj në kujtesë? 872 00:37:37,240 --> 00:37:37,590 >> Dakord. 873 00:37:37,590 --> 00:37:40,610 Le të hidhni një sy këtu, atëherë, në diçka që ne kemi qenë duke marrë për 874 00:37:40,610 --> 00:37:48,361 dhënë për mjaft kohë, e cila është në këtë dosje të quajtur cs50.h. 875 00:37:48,361 --> 00:37:49,420 Pra, kjo është një file i. 876 00:37:49,420 --> 00:37:51,130 Këto janë vetëm një bandë e tërë Komentet e deri të lartë. 877 00:37:51,130 --> 00:37:53,900 Dhe ju mund të keni shikuar në këtë, nëse ju poked rreth në aplikim. 878 00:37:53,900 --> 00:37:57,000 Por kjo rezulton se gjatë gjithë kohës, kur kemi përdorur për të përdorur si një varg 879 00:37:57,000 --> 00:38:01,130 sinonim, mjetet me të cilat ne kemi deklaruar që ishte sinonim me këtë 880 00:38:01,130 --> 00:38:03,990 fjalen typedef, për përcaktimin e tipit. 881 00:38:03,990 --> 00:38:07,500 Dhe ne jemi në thelb duke thënë, të bëjë string sinonim për yllin char. 882 00:38:07,500 --> 00:38:11,190 Që mjetet me të cilat rafte krijuar këto rrota trajnimit të njohura si 883 00:38:11,190 --> 00:38:12,040 string. 884 00:38:12,040 --> 00:38:14,830 >> Tani këtu është vetëm një prototip për getchar. 885 00:38:14,830 --> 00:38:17,350 Ne mund të keni parë atë më parë, por kjo është me të vërtetë atë që bën. getchar 886 00:38:17,350 --> 00:38:19,070 nuk merr argumente, kthen një char. 887 00:38:19,070 --> 00:38:21,340 getdouble nuk merr argumente, kthen një të dyfishtë. 888 00:38:21,340 --> 00:38:24,440 getfloat merr nuk ka argumente, kthimet një noton, dhe kështu me radhë. 889 00:38:24,440 --> 00:38:27,270 getint eshte ne ketu. getlonglong eshte ne ketu. 890 00:38:27,270 --> 00:38:28,820 Dhe getString është këtu. 891 00:38:28,820 --> 00:38:29,420 Dhe kjo është ajo. 892 00:38:29,420 --> 00:38:33,080 Kjo linjë purple është një tjetër preprocessor direktivë për shkak të 893 00:38:33,080 --> 00:38:35,550 hashtag në fillim të saj. 894 00:38:35,550 --> 00:38:35,870 >> Dakord. 895 00:38:35,870 --> 00:38:38,380 Deri tani më lejoni të shkoj në cs50.c. 896 00:38:38,380 --> 00:38:40,400 Dhe ne nuk do të flasim shumë kohë për këtë. 897 00:38:40,400 --> 00:38:43,280 Por, për të ju jap një paraqitje e shkurtër e asaj që është qenë duke shkuar në të gjithë këtë 898 00:38:43,280 --> 00:38:46,434 kohë, më lejoni të shkoj në - 899 00:38:46,434 --> 00:38:48,250 le të bëjmë getchar. 900 00:38:48,250 --> 00:38:51,050 Pra, është më së shumti getchar komente. 901 00:38:51,050 --> 00:38:52,060 Por kjo duket si ky. 902 00:38:52,060 --> 00:38:54,800 Pra, ky është funksioni aktual getchar se ne kemi qenë 903 00:38:54,800 --> 00:38:56,055 duke marrë për të dhënë ekziston. 904 00:38:56,055 --> 00:38:59,370 Dhe edhe pse ne nuk e kemi përdorur këtë një që shpesh, në qoftë se ndonjëherë, kjo është të paktën 905 00:38:59,370 --> 00:39:00,470 relativisht e thjeshtë. 906 00:39:00,470 --> 00:39:02,580 Pra, kjo është me vlerë duke marrë një vështrim i shpejtë në këtu. 907 00:39:02,580 --> 00:39:06,540 >> Pra getchar ka një lak të pafund, qëllimisht kështu duket. 908 00:39:06,540 --> 00:39:10,050 Ajo pastaj e quan - dhe kjo është lloj i një ripërdorimin e kodit bukur ne vetë shkruajtur. 909 00:39:10,050 --> 00:39:11,220 Ajo e quan getString. 910 00:39:11,220 --> 00:39:12,460 Sepse ajo që e bën atë do të thotë për të marrë një char? 911 00:39:12,460 --> 00:39:14,730 E pra, si edhe ju mund të përpiqen për të marrë një linjë e tërë e tekstit nga përdoruesit dhe 912 00:39:14,730 --> 00:39:16,940 atëherë vetëm shikoni në njërën e këtyre karaktereve. 913 00:39:16,940 --> 00:39:19,170 Në linjë 60, këtu është pak pak e një kontroll sanitar. 914 00:39:19,170 --> 00:39:21,610 Nëse getString kthye null, le të mos vazhdojë. 915 00:39:21,610 --> 00:39:22,820 Diçka shkoi keq. 916 00:39:22,820 --> 00:39:28,120 >> Tani kjo është disi i bezdisshëm, por konvencionale në char C. max ndoshta 917 00:39:28,120 --> 00:39:29,960 përfaqëson atë vetëm bazuar mbi emrin e saj? 918 00:39:29,960 --> 00:39:31,670 Kjo është një konstante. 919 00:39:31,670 --> 00:39:36,040 Është si me vlerën numerike të madh char ju mund të përfaqësojë me 920 00:39:36,040 --> 00:39:40,370 një pickim, e cila është ndoshta numri 255, i cili është numri më i madh që ju 921 00:39:40,370 --> 00:39:42,720 përfaqësojnë tetë bit, duke filluar nga zero. 922 00:39:42,720 --> 00:39:47,460 Kështu që unë kam përdorur këtë, në këtë funksion, kur shkruar këtë kod, vetëm për shkak se 923 00:39:47,460 --> 00:39:51,753 nëse diçka shkon keq në getchar por qëllimi i tij në jetë është që të kthehen një 924 00:39:51,753 --> 00:39:54,830 char, ju duhet të jetë në gjendje disi te sinjal te te perdoruesit asaj 925 00:39:54,830 --> 00:39:55,840 diçka shkoi keq. 926 00:39:55,840 --> 00:39:56,970 Ne nuk mund të kthehen null. 927 00:39:56,970 --> 00:39:58,480 Ajo rezulton se null është një akrep. 928 00:39:58,480 --> 00:40:01,030 Dhe përsëri, getchar ka të kthehen një char. 929 00:40:01,030 --> 00:40:04,760 >> Pra konventë, nëse diçka shkon keq, eshte qe, programues, ose në 930 00:40:04,760 --> 00:40:08,160 Në këtë rast, mua me bibliotekën, kam pasur vetëm një të vendosë në mënyrë arbitrare, në qoftë se 931 00:40:08,160 --> 00:40:12,230 diçka shkon keq, unë jam duke shkuar për kthehen në numrin 255, e cila është me të vërtetë 932 00:40:12,230 --> 00:40:17,240 do të thotë që ne nuk mund, përdoruesi nuk mund të shtypni karakter përfaqësuar nga 933 00:40:17,240 --> 00:40:21,410 numër 255, sepse kemi pasur një vjedhin atë si një vlerë ashtuquajturës sentinel për 934 00:40:21,410 --> 00:40:23,410 paraqesin një problem. 935 00:40:23,410 --> 00:40:27,010 Tani del se karakteri 255 nuk është diçka që ju mund të shtypni në 936 00:40:27,010 --> 00:40:28,380 tastierës tuaj, kështu që nuk është punë e madhe. 937 00:40:28,380 --> 00:40:30,910 Shfrytëzuesi nuk vëreni se Unë e kam vjedhur këtë karakter. 938 00:40:30,910 --> 00:40:34,620 Por në qoftë se keni parë ndonjëherë në faqet e njeri në një Sistemi kompjuterik disa referenca tek një 939 00:40:34,620 --> 00:40:38,560 të gjitha shkronja kapitale të vazhdueshme si kjo që thotë, në rastet e gabimit kjo mund konstante 940 00:40:38,560 --> 00:40:42,720 të kthehen, që të gjithë e njeriut bëri disa vjet më parë u vendos në mënyrë arbitrare për të 941 00:40:42,720 --> 00:40:45,680 kthyer këtë vlerë të veçantë dhe e quajnë atë një konstante në rast 942 00:40:45,680 --> 00:40:46,840 diçka shkon keq. 943 00:40:46,840 --> 00:40:48,580 >> Tani magjike ndodh këtu poshtë. 944 00:40:48,580 --> 00:40:52,600 Së pari, unë jam deklaruar në linjë 67 Dy karaktere, C1 dhe C2. 945 00:40:52,600 --> 00:40:57,080 Dhe pastaj në linjë 68, nuk ka të vërtetë një linjë e kodit që e kujton 946 00:40:57,080 --> 00:41:01,140 miku ynë printf, duke pasur parasysh se ajo sexsy do deshiroja qind Cs në thonjëza. 947 00:41:01,140 --> 00:41:06,490 Por vini re se çfarë po ndodh këtu. sscanf thotë scan string - 948 00:41:06,490 --> 00:41:11,690 do të thotë të skanoni një formatuar string, sscanf ergo. 949 00:41:11,690 --> 00:41:12,590 Çfarë do të thotë kjo? 950 00:41:12,590 --> 00:41:16,310 Kjo do të thotë që ju të kalojë në sscanf një varg. 951 00:41:16,310 --> 00:41:18,420 Dhe linja është çdo gjë lloje përdorues in 952 00:41:18,420 --> 00:41:23,520 Ju sscanf të kalojë në një varg format si kjo tregon se çfarë janë scanf 953 00:41:23,520 --> 00:41:25,870 ju duke shpresuar se përdoruesi ka shtypur in 954 00:41:25,870 --> 00:41:29,730 Ju pastaj të kalojë-në adresat e dy chunks e kujtesës, në këtë rast, 955 00:41:29,730 --> 00:41:31,150 sepse unë kam dy placeholders. 956 00:41:31,150 --> 00:41:34,610 Kështu që unë jam duke shkuar për të dhënë atë adresë i C1 dhe i adreses C2. 957 00:41:34,610 --> 00:41:37,700 >> Dhe kujtoj se ju jepni një funksion Adresa e disa ndryshore, çfarë është 958 00:41:37,700 --> 00:41:38,950 implikimi? 959 00:41:38,950 --> 00:41:41,400 960 00:41:41,400 --> 00:41:45,050 Çfarë mund të bëjë që funksionojnë si rezultat i dhënë asaj një adresë të një 961 00:41:45,050 --> 00:41:48,170 variabël, në krahasim me ndryshueshme në vetvete? 962 00:41:48,170 --> 00:41:49,450 Ajo mund të ndryshojë atë, e drejtë? 963 00:41:49,450 --> 00:41:53,250 Nëse keni pasur një hartë dikë për një fizik adresën, ata mund të shkojnë atje dhe të bëjë 964 00:41:53,250 --> 00:41:54,750 çdo gjë që ata duan në atë adresë. 965 00:41:54,750 --> 00:41:55,800 Ideja e njëjtë këtu. 966 00:41:55,800 --> 00:41:59,950 Nëse ne të kalojë në sscanf, adresa e dy chunks e kujtesës, edhe këto tiny 967 00:41:59,950 --> 00:42:03,585 chunks vogla e kujtesës, C1 dhe C2, por ne tregoni adresën e tyre, 968 00:42:03,585 --> 00:42:05,170 sscanf mund ta ndryshoni atë. 969 00:42:05,170 --> 00:42:08,530 >> Pra, qëllimi sscanf në jetën, nëse lexojmë Faqja njeriu, është për të lexuar se çfarë 970 00:42:08,530 --> 00:42:13,420 përdorues shtypen në, shpresë për përdorues pasur shtypur në një karakter dhe ndoshta 971 00:42:13,420 --> 00:42:16,470 një tjetër karakter, dhe çdo gjë përdorues shtypen, karakteri i parë shkon 972 00:42:16,470 --> 00:42:19,310 këtu, personazhi i dytë shkon këtu. 973 00:42:19,310 --> 00:42:22,470 Tani, si një mënjanë, kjo, dhe ju do të vetëm e di këtë nga dokumentacioni, 974 00:42:22,470 --> 00:42:25,570 Fakti që unë kam vënë një hapësirë ​​bosh aty thjesht do të thotë se unë nuk e kujdesit në qoftë se 975 00:42:25,570 --> 00:42:28,440 përdoruesit hits space bar një pakice herë para se ai ose ajo merr një 976 00:42:28,440 --> 00:42:30,400 karakter, unë jam duke shkuar për të injorojë ndonjë hapësirë ​​të bardhë. 977 00:42:30,400 --> 00:42:32,510 Kështu që, unë e di nga dokumentacionin. 978 00:42:32,510 --> 00:42:36,570 >> Fakti që ka një të dytë c% ndjekur nga hapësirë ​​të bardhë është në të vërtetë 979 00:42:36,570 --> 00:42:37,410 qëllimshme. 980 00:42:37,410 --> 00:42:41,190 Unë dua të jem në gjendje për të zbuluar nëse përdoruesi dehur ose nuk bashkëpunojnë. 981 00:42:41,190 --> 00:42:45,630 Kështu që unë jam duke shpresuar se përdoruesi typed vetëm në një karakter, prandaj unë jam duke shpresuar 982 00:42:45,630 --> 00:42:50,640 sscanf se është vetëm do të kthehen Vlera e 1 sepse, përsëri, në qoftë se kam lexuar 983 00:42:50,640 --> 00:42:55,400 dokumentacioni, qëllimi sscanf në jeta është për t'u kthyer në numrin e 984 00:42:55,400 --> 00:42:59,170 Variablat që janë të mbushura me user input. 985 00:42:59,170 --> 00:43:02,270 >> Kam kaluar në dy variablave trajton, C1 dhe C2. 986 00:43:02,270 --> 00:43:06,420 Unë jam duke shpresuar, edhe pse, se vetëm njëri prej ata të vritet, sepse nëse sscanf 987 00:43:06,420 --> 00:43:11,130 Kthimet 2, çfarë është me sa duket implikimi logjikisht? 988 00:43:11,130 --> 00:43:14,600 Se përdoruesi nuk ka të jepni vetëm një Karakteri si unë i thashë atij apo të saj. 989 00:43:14,600 --> 00:43:17,860 Ata shtypur ndoshta në paku dy karaktere. 990 00:43:17,860 --> 00:43:22,430 Pra, në qoftë se unë nuk kanë vend të dytë C%, unë vetëm e kishte një të tillë, e cila 991 00:43:22,430 --> 00:43:25,370 sinqerisht do të jetë më intuitiv qasje, unë mendoj se një shikim të parë, 992 00:43:25,370 --> 00:43:30,220 ju nuk jeni do të jetë në gjendje për të zbuluar në qoftë se përdoruesi ka qenë duke ju dhënë më shumë 993 00:43:30,220 --> 00:43:31,780 input se ju në të vërtetë të kërkuar. 994 00:43:31,780 --> 00:43:34,100 Pra, kjo është një formë implicite e kontrollit të gabimit. 995 00:43:34,100 --> 00:43:35,640 >> Por njoftim se çfarë bëj unë këtu. 996 00:43:35,640 --> 00:43:39,970 Pasi unë jam i sigurt që përdoruesi më dha një karakteri, kam liruar linjë, duke bërë 997 00:43:39,970 --> 00:43:44,450 kundërta e getString, e cila nga ana përdor malloc, dhe pastaj unë kthehem 998 00:43:44,450 --> 00:43:51,030 C1, karakteri që kam shpresuar User dhënë dhe siguruar vetëm. 999 00:43:51,030 --> 00:43:54,680 Pra, një të shpejtë rrëshqitazi vetëm, por ndonjë pyetje në getchar? 1000 00:43:54,680 --> 00:43:57,450 1001 00:43:57,450 --> 00:43:59,590 Ne do të vijnë përsëri në disa nga të tjerët. 1002 00:43:59,590 --> 00:44:03,770 >> E pra, më lejoni të shkoj përpara dhe të bëjë këtë - mendoj tani, vetëm për të motivuar tonë 1003 00:44:03,770 --> 00:44:08,910 Diskutimi në një javë plus kohës, kjo është një file i quajtur structs.h. 1004 00:44:08,910 --> 00:44:11,440 Dhe përsëri, kjo është vetëm një shije i diçkaje që shtrihet përpara. 1005 00:44:11,440 --> 00:44:13,090 Por vini re se një shumë e kjo është e komente. 1006 00:44:13,090 --> 00:44:17,440 Pra më lejoni të theksoj vetëm Pjesa interesante tani për tani. 1007 00:44:17,440 --> 00:44:18,020 typedef - 1008 00:44:18,020 --> 00:44:19,700 nuk ka se fjalen e njëjtë përsëri. 1009 00:44:19,700 --> 00:44:23,100 typedef ne përdorim për të deklaruar varg si një lloj të veçantë të të dhënave. 1010 00:44:23,100 --> 00:44:27,490 Ju mund të përdorni për të krijuar typedef krejt të re Llojet e të dhënave që nuk ekzistojnë, kur 1011 00:44:27,490 --> 00:44:28,570 C u shpik. 1012 00:44:28,570 --> 00:44:32,520 Për shembull, int vjen me C. char vjen me C. dyfishtë vjen me C. Por, 1013 00:44:32,520 --> 00:44:34,000 nuk ka asnjë nocioni i një studenti. 1014 00:44:34,000 --> 00:44:37,230 Dhe ende ajo do të jetë mjaft e dobishme që të jetë në gjendje të shkruaj një program që ruan 1015 00:44:37,230 --> 00:44:40,440 në një variabël, numri i ID e nxënësit, emri i tyre, dhe shtëpia e tyre. 1016 00:44:40,440 --> 00:44:42,890 Me fjalë të tjera, tre copë e të dhënave, si një int dhe një 1017 00:44:42,890 --> 00:44:44,420 dhe një tjetër string string. 1018 00:44:44,420 --> 00:44:48,220 >> Me typedef, çfarë është goxha i fuqishëm në lidhje me këtë dhe sturct fjalen per 1019 00:44:48,220 --> 00:44:53,660 Struktura, ju, programues në vitin 2013, në fakt mund të përcaktojë tuaj 1020 00:44:53,660 --> 00:44:57,530 Llojet e të dhënave që nuk ekzistojnë vjet më parë, por që i përshtaten qëllimet tuaja. 1021 00:44:57,530 --> 00:45:01,910 Dhe kështu që këtu, në linjat 13 deri 19, ne jemi duke deklaruar një lloj të ri të dhënave, si 1022 00:45:01,910 --> 00:45:04,320 një int, por duke e quajtur atë nxënës. 1023 00:45:04,320 --> 00:45:09,310 Dhe brenda këtij variabli do të të jetë tre gjëra - një int, një varg, 1024 00:45:09,310 --> 00:45:09,930 dhe nje varg. 1025 00:45:09,930 --> 00:45:13,040 Kështu që ju mund të mendoni se çfarë është me të vërtetë ka ndodhur këtu, edhe pse kjo është një 1026 00:45:13,040 --> 00:45:17,160 pak e një thjeshtëzim për sot, një student është në thelb shkon 1027 00:45:17,160 --> 00:45:19,450 për të duket si ky. 1028 00:45:19,450 --> 00:45:22,580 Saj do të jetë një copë e memorie me nje ID, nje Emri 1029 00:45:22,580 --> 00:45:25,580 fushë, dhe një fushë shtëpia. 1030 00:45:25,580 --> 00:45:30,670 Dhe ne do të jetë në gjendje të përdorin ato chunks e kujtesës dhe qasjen e tyre si më poshtë. 1031 00:45:30,670 --> 00:45:38,870 >> Nëse unë shkoj në struct0.c, këtu është një relativisht të gjatë, por pas një 1032 00:45:38,870 --> 00:45:42,630 model, të kodit që përdor këtë mashtrim të ri. 1033 00:45:42,630 --> 00:45:45,790 Pra, së pari, më lejoni të tërheq vëmendjen tuaj në pjesët interesante deri të lartë. 1034 00:45:45,790 --> 00:45:49,670 Sharp përcakton studentët 3, deklaron një Nxënësit e vazhdueshme quajtur dhe cakton 1035 00:45:49,670 --> 00:45:53,450 ajo arbitrarisht numër 3, vetëm kështu që unë kam tre nxënësit duke përdorur 1036 00:45:53,450 --> 00:45:54,830 ky program tani për tani. 1037 00:45:54,830 --> 00:45:55,960 Këtu vjen Main. 1038 00:45:55,960 --> 00:45:58,860 Dhe vini re, se si unë deklaroj një grup i nxënësve? 1039 00:45:58,860 --> 00:46:00,480 E pra, unë vetëm përdorni sintaksë e njëjtë. 1040 00:46:00,480 --> 00:46:02,110 Studenti Fjala është padyshim i ri. 1041 00:46:02,110 --> 00:46:04,790 Por, nxënëse të klasës, simboli i studentëve. 1042 00:46:04,790 --> 00:46:06,720 >> Pra, për fat të keq nuk ka shumë i ripërdorimin e termave këtu. 1043 00:46:06,720 --> 00:46:07,660 Kjo është vetëm një numër. 1044 00:46:07,660 --> 00:46:09,040 Pra, kjo është si duke thënë se tre. 1045 00:46:09,040 --> 00:46:11,430 Klasa është vetëm ajo që unë dua për të thirrur ndryshore. 1046 00:46:11,430 --> 00:46:12,840 Unë mund të telefononi atë studentët. 1047 00:46:12,840 --> 00:46:15,880 Por klasa, kjo nuk është një klasë në një objekt orientuar lloj Java e rrugës. 1048 00:46:15,880 --> 00:46:17,220 Është vetëm një klasë të nxënësve. 1049 00:46:17,220 --> 00:46:20,590 Dhe lloji i të dhënave çdo element në atë array është studenti. 1050 00:46:20,590 --> 00:46:23,040 Pra, kjo është pak më ndryshe dhe nga thënë diçka 1051 00:46:23,040 --> 00:46:25,250 si kjo, kjo është vetëm - 1052 00:46:25,250 --> 00:46:29,500 Unë jam duke thënë se më jepni tre studentë dhe të thërrasë atë klasë vektorit. 1053 00:46:29,500 --> 00:46:29,800 >> Dakord. 1054 00:46:29,800 --> 00:46:30,680 Tani këtu është një lak katër. 1055 00:46:30,680 --> 00:46:33,480 Ky djalosh i njohur s - iterate nga zero në deri në tre. 1056 00:46:33,480 --> 00:46:35,160 Dhe këtu është pjesë e re e sintaksës. 1057 00:46:35,160 --> 00:46:37,710 Programi do të shkaktonte mua, njerëzore, për të dhënë atë një student 1058 00:46:37,710 --> 00:46:39,200 ID, e cila eshte nje int. 1059 00:46:39,200 --> 00:46:44,650 Dhe këtu është sintaksë me të cilën ju mund të ruajtur diçka në fushën e identifikimit të 1060 00:46:44,650 --> 00:46:48,630 klasë Vendndodhja parantezë I. Pra, Sintaksa kjo nuk është e re. 1061 00:46:48,630 --> 00:46:51,450 Kjo thjesht do të thotë jepni teta studenti në klasë. 1062 00:46:51,450 --> 00:46:52,940 Por ky simbol është e re. 1063 00:46:52,940 --> 00:46:56,320 Deri tani, ne kemi nuk mund të përdoret dot, të paktën në kod si kjo. 1064 00:46:56,320 --> 00:47:01,490 Kjo do të thotë shkoni në struct njohur si një student dhe vënë diçka atje. 1065 00:47:01,490 --> 00:47:05,670 Në mënyrë të ngjashme, në këtë linjë e ardhshëm, 31, shkoni përpara dhe të vënë çdo gjë që përdoruesi lloje 1066 00:47:05,670 --> 00:47:10,530 për një emër këtu dhe atë që bëjnë ata për një shtëpi, të njëjtën gjë, të shkojnë përpara dhe të 1067 00:47:10,530 --> 00:47:13,230 vënë atë në. shtëpinë. 1068 00:47:13,230 --> 00:47:15,955 >> Pra, çfarë e bën këtë program në fund të fundit të bëjë? 1069 00:47:15,955 --> 00:47:17,220 Ju mund të shihni një ngacmues pak atje. 1070 00:47:17,220 --> 00:47:24,780 Më lejoni të shkojnë përpara dhe të bëjnë structs 0 dot slash struct 0, ID studentit 1, 1071 00:47:24,780 --> 00:47:28,250 thonë David Mather, studenti ID 2. 1072 00:47:28,250 --> 00:47:32,070 Rob Kirkland, studenti ID 3. 1073 00:47:32,070 --> 00:47:35,010 Lauren Leverit - 1074 00:47:35,010 --> 00:47:38,380 dhe e vetmja gjë që ky program e bëri, e cila është vetëm krejtësisht arbitrare, është 1075 00:47:38,380 --> 00:47:40,980 Doja të bëjë diçka me këto të dhëna, tani që unë kam na mësoi se si të 1076 00:47:40,980 --> 00:47:43,450 përdorni structs, është që unë vetëm e kishte loop kjo shtesë këtu. 1077 00:47:43,450 --> 00:47:45,260 Unë iterate mbi array e nxënësve. 1078 00:47:45,260 --> 00:47:49,170 I përdorur, miku ynë i njohur, ndoshta tani string krahasoni, stircomp të 1079 00:47:49,170 --> 00:47:53,780 çeku është shtëpia e studentit 8 barabartë me Mather? 1080 00:47:53,780 --> 00:47:56,760 Dhe nëse është kështu, vetëm të printuar diçka arbitrarisht pëlqen, po, ai është. 1081 00:47:56,760 --> 00:47:59,430 Por përsëri, vetëm duke i dhënë mua mundësi të përdorin dhe ripërdorimin dhe 1082 00:47:59,430 --> 00:48:02,270 ripërdorimin këtë simbol të ri dot. 1083 00:48:02,270 --> 00:48:03,250 >> Pra, kush kujdeset, e drejtë? 1084 00:48:03,250 --> 00:48:06,270 Vjen me një program studentore është disi arbitrare, por ajo rezulton 1085 00:48:06,270 --> 00:48:09,800 që ne mund të bëjmë gjëra të dobishme me kjo, për shembull si më poshtë. 1086 00:48:09,800 --> 00:48:14,600 Kjo është një struct shumë më e komplikuar në C. Ajo ka një duzinë apo më shumë fusha, 1087 00:48:14,600 --> 00:48:15,880 disi quajtur cryptically. 1088 00:48:15,880 --> 00:48:20,110 Por në qoftë se ju keni dëgjuar ndonjëherë një grafikë Formati i file i quajtur bitmap, BMP, ajo 1089 00:48:20,110 --> 00:48:22,830 rezulton se format bitmap fotografi pretty much duket se ky. 1090 00:48:22,830 --> 00:48:24,200 Kjo është një budalla pak përballen me smiley. 1091 00:48:24,200 --> 00:48:27,840 Është një imazh i vogël që unë kam zoomed në on goxha i madh në mënyrë që unë mund të shoh çdo 1092 00:48:27,840 --> 00:48:30,410 i dots individuale ose pixels. 1093 00:48:30,410 --> 00:48:33,800 Tani, ajo del ne mund të përfaqësojë një dot zi me, të themi, numri 0. 1094 00:48:33,800 --> 00:48:35,520 Dhe një të bardhë dot me numrin 1. 1095 00:48:35,520 --> 00:48:39,140 >> Pra, me fjalë të tjera, në qoftë se ju doni për të nxjerrë një Përballen me smiley dhe për të shpëtuar atë në një imazh 1096 00:48:39,140 --> 00:48:42,680 kompjuteri, kjo mjafton për të ruajtur zero dhe ato që duken si ky, ku, 1097 00:48:42,680 --> 00:48:45,250 përsëri, ato janë të bardhë dhe zero janë të zeza. 1098 00:48:45,250 --> 00:48:48,290 Dhe së bashku, në qoftë se ju në mënyrë efektive kanë ngjeshuni, një nga ato dhe zero, ju keni një 1099 00:48:48,290 --> 00:48:51,030 Grid i pixels, dhe në qoftë se ju vë ata jashtë, ju keni një cute 1100 00:48:51,030 --> 00:48:52,560 pak përballen me smiley. 1101 00:48:52,560 --> 00:48:58,150 Tani, format bitmap fotografi, BMP, është efektive se nën kapuç, 1102 00:48:58,150 --> 00:49:00,970 por me pixels Sot më shumë se ju në fakt mund të përfaqësojë ngjyrat. 1103 00:49:00,970 --> 00:49:05,170 >> Por kur ju keni më të sofistikuara file formats si PKM dhe JPEG dhe GIF 1104 00:49:05,170 --> 00:49:09,360 me të cilat ju mund të jenë të njohura, ato fotografi në disk në mënyrë tipike jo vetëm 1105 00:49:09,360 --> 00:49:13,760 të ketë zero dhe ato për pixels, por ata kanë disa të meta-data si dhe - 1106 00:49:13,760 --> 00:49:16,960 Meta në kuptimin që nuk është me të vërtetë të dhënave, por kjo është e dobishme që të ketë. 1107 00:49:16,960 --> 00:49:21,370 Pra, këto fusha janë duke nënkuptuar këtu, dhe ne do të shohim këtë më në hollësi në P-set 1108 00:49:21,370 --> 00:49:25,810 5, që para se zero dhe ato që përfaqësojnë piksele në një imazh, 1109 00:49:25,810 --> 00:49:29,110 ka një bandë e metadata si madhësinë e imazhin dhe 1110 00:49:29,110 --> 00:49:30,250 Gjerësia e imazhit. 1111 00:49:30,250 --> 00:49:32,910 Dhe vini re unë jam plucking off disa gjërat arbitrare këtu - 1112 00:49:32,910 --> 00:49:34,260 gjerësia dhe lartësia. 1113 00:49:34,260 --> 00:49:36,160 Numërimin Bit dhe disa gjëra të tjera. 1114 00:49:36,160 --> 00:49:37,840 Pra, ka disa metadata në një skedar. 1115 00:49:37,840 --> 00:49:41,470 >> Por, duke e kuptuar se sa fotografi janë të paraqitura në këtë mënyrë, ju mund të vërtetë 1116 00:49:41,470 --> 00:49:45,890 pastaj manipuluar imazhet, shërohen imazhe nga disku, resize images. 1117 00:49:45,890 --> 00:49:47,560 Por ju nuk mund domosdoshmërisht zgjeruar ato. 1118 00:49:47,560 --> 00:49:48,480 Unë e nevojshme një fotografi. 1119 00:49:48,480 --> 00:49:52,840 Kështu që unë u ktheva në RJ këtu, që ti ke parë në ekran mjaft disa kohë më parë. 1120 00:49:52,840 --> 00:49:57,160 Dhe në qoftë se unë i hapur deri kryesor këtu, kjo është çfarë ndodh nëse ju përpiqeni të zoom në dhe 1121 00:49:57,160 --> 00:49:59,380 RJ rritur. 1122 00:49:59,380 --> 00:50:01,480 Ai nuk ka marrë ndonjë më të mirë të vërtetë. 1123 00:50:01,480 --> 00:50:06,240 Tani Kryesor është lloj i mjegulluar atë një pak, vetëm për të komentoj mbi 1124 00:50:06,240 --> 00:50:11,040 Fakti që RJ nuk ka marrë veçanërisht zgjeruara, kur ju zoom in 1125 00:50:11,040 --> 00:50:13,310 Dhe në qoftë se bëni atë në këtë mënyrë, shikoni sheshet? 1126 00:50:13,310 --> 00:50:15,490 Yeah, ju mund të patjetër të shihni sheshet në një projektor. 1127 00:50:15,490 --> 00:50:17,690 >> Kjo është ajo që ju merrni kur ju të rritur. 1128 00:50:17,690 --> 00:50:22,570 Por në të kuptuarit se si RJ tonë apo Përballen me smiley është zbatuar do të le të 1129 00:50:22,570 --> 00:50:24,950 në fakt shkruani kodin që manipulon këto gjëra. 1130 00:50:24,950 --> 00:50:29,970 Dhe unë mendova se do të përfundojë në këtë shënim, me 55 sekonda të një të rritur që është, 1131 00:50:29,970 --> 00:50:31,230 Unë guxoj, thonë më tepër mashtruese. 1132 00:50:31,230 --> 00:50:32,990 >> [Video playback] 1133 00:50:32,990 --> 00:50:34,790 >> -Ai po gënjen. 1134 00:50:34,790 --> 00:50:38,310 Rreth çfarë, unë nuk e di. 1135 00:50:38,310 --> 00:50:41,200 >> -Pra, çfarë dimë? 1136 00:50:41,200 --> 00:50:45,280 >> -Se at 09:15 Ray Santoya ishte në ATM. 1137 00:50:45,280 --> 00:50:47,830 >> -Pra, pyetja është se çfarë ai është duke bërë at 9:16? 1138 00:50:47,830 --> 00:50:50,750 >> Xhirimi-nëntë milimetër në diçka. 1139 00:50:50,750 --> 00:50:52,615 Ndoshta ai e pa snajper. 1140 00:50:52,615 --> 00:50:54,760 >> -Apo ishte duke punuar me të. 1141 00:50:54,760 --> 00:50:56,120 >> -Prisni. 1142 00:50:56,120 --> 00:50:57,450 Kthehu prapa një. 1143 00:50:57,450 --> 00:50:58,700 >> -Çfarë e shihni ju? 1144 00:50:58,700 --> 00:51:05,530 1145 00:51:05,530 --> 00:51:09,490 >> -Sillni fytyrën e tij lart, ekran të plotë. 1146 00:51:09,490 --> 00:51:09,790 >> -Syzet e tij. 1147 00:51:09,790 --> 00:51:11,040 >> -Ka një reflektim. 1148 00:51:11,040 --> 00:51:21,790 1149 00:51:21,790 --> 00:51:23,520 >> -Kjo është ekipi baseball Neuvitas. 1150 00:51:23,520 --> 00:51:24,530 Kjo është logo e tyre. 1151 00:51:24,530 --> 00:51:27,040 >> -Dhe ai është duke folur për këdo që është xhaketë veshur atë. 1152 00:51:27,040 --> 00:51:27,530 >> [VIDEO END rishikim] 1153 00:51:27,530 --> 00:51:29,180 >> DAVID J. Malan: Ky do të jetë Set Problem 5. 1154 00:51:29,180 --> 00:51:30,720 Ne do të shihemi javën e ardhshme. 1155 00:51:30,720 --> 00:51:32,330 >> Kryetari MASHKULL: Në CS50 ardhshëm. 1156 00:51:32,330 --> 00:51:39,240 >> [Crickets chirping] 1157 00:51:39,240 --> 00:51:41,270 >> [Duke luajtur muzikë]