1 00:00:00,000 --> 00:00:11,200 2 00:00:11,200 --> 00:00:12,580 >> DAVID Malan: Të gjithë të drejtë, të mirëpritur mbrapa. 3 00:00:12,580 --> 00:00:13,290 Kjo është CS50. 4 00:00:13,290 --> 00:00:15,130 Ky është fillimi i javës së shtatë. 5 00:00:15,130 --> 00:00:18,890 Pra, ajo ka qenë një kohë, kështu që mendova që ne do të marrë një turne shakullinë e ku ne 6 00:00:18,890 --> 00:00:20,760 lënë jashtë dhe ku ne jemi duke shkuar tani. 7 00:00:20,760 --> 00:00:23,310 >> Pra, kjo gjë mund të ketë këtu shkaktuar disa Angst në fillim. 8 00:00:23,310 --> 00:00:27,680 Por, shpresojmë se, ju jeni duke filluar të acclimate për atë që kjo tregon këtu - 9 00:00:27,680 --> 00:00:32,670 yll përfaqëson një tregues, i cili është vetëm atë që, në kushtet e laik e më shumë? 10 00:00:32,670 --> 00:00:33,400 Pra, kjo është një adresë. 11 00:00:33,400 --> 00:00:35,490 >> Pra, kjo është adresa e diçka në kujtesë. 12 00:00:35,490 --> 00:00:38,260 Dhe kemi filluar të zhvishem përsëri shtresat nja dy javë më parë, gjëra të tilla si 13 00:00:38,260 --> 00:00:41,800 Funksionet getString dhe të tjera të tilla gjithë kësaj kohe kanë qenë të kthyer 14 00:00:41,800 --> 00:00:46,010 Adresat e gjërave në memorie, si Adresën e karakter pare ne 15 00:00:46,010 --> 00:00:46,990 disa sekuenca. 16 00:00:46,990 --> 00:00:50,360 >> Pra, ne gjithashtu paraqiti Shprehje, e cila që ju do të filloni të përdorni për këtë problem 17 00:00:50,360 --> 00:00:53,380 vendosur, veçanërisht për të ardhshëm Problemi vendosur si edhe. 18 00:00:53,380 --> 00:00:54,980 Dhe Shprehje çfarë bën për ne? 19 00:00:54,980 --> 00:00:57,520 20 00:00:57,520 --> 00:01:01,020 Ajo kontrollon për rrjedhjet e kujtesës, dhe kjo gjithashtu kontrollon për abuzim të kujtesës. 21 00:01:01,020 --> 00:01:05,890 >> Ajo mund, me disa gjasave, zbuluar nëse Kodi juaj do të prekë kujtesën 22 00:01:05,890 --> 00:01:07,100 se ajo thjesht nuk duhet. 23 00:01:07,100 --> 00:01:10,410 Pra jo domosdoshmërisht një rrjedhje, por në qoftë se ju shkojnë përtej kufijve të disa 24 00:01:10,410 --> 00:01:14,730 array, dhe ju në të vërtetë të kandidojë Shprehje dhe shkaktojnë këtë sjellje, ndërsa 25 00:01:14,730 --> 00:01:17,870 Shprehje po kandidon në programin tuaj është drejtimin në brendësi të saj, ju do të merrni 26 00:01:17,870 --> 00:01:21,460 mesazhe si ky - "pavlefshme shkruaj e Madhësia 4 ", e cila, kujtojnë një çift të 27 00:01:21,460 --> 00:01:25,880 javë më parë thoshte se kisha aksidentalisht si në një int shumë larg 28 00:01:25,880 --> 00:01:27,250 përtej kufijve të një rrjet. 29 00:01:27,250 --> 00:01:30,790 Dhe kështu madhësi 4 do të thotë këtu madhësinë e asaj int veçantë. 30 00:01:30,790 --> 00:01:35,260 >> Kështu që të marrin siguroheshin në faktin se Shprehje e prodhimit, formati i saj, 31 00:01:35,260 --> 00:01:36,170 është vetëm mizor. 32 00:01:36,170 --> 00:01:40,180 Është e vërtetë e vështirë për të parë përmes rrëmujë për informata interesante. 33 00:01:40,180 --> 00:01:42,910 Pra ajo që kemi bërë këtu është vetëm fragment disa prej dy prej më 34 00:01:42,910 --> 00:01:43,850 Linjat interesante. 35 00:01:43,850 --> 00:01:46,760 Por të kuptojë se 80% e së Shprehje prodhimi do të jetë pak e një 36 00:01:46,760 --> 00:01:47,650 çmenduri. 37 00:01:47,650 --> 00:01:52,820 >> Vetëm shikoni për modele si këto - pavlefshme të drejtë, e pavlefshme lexohen, 40 bytes 38 00:01:52,820 --> 00:01:56,690 dhe numrin e disa blloqe janë patjetër humbur, me fjalë kyçe si kjo. 39 00:01:56,690 --> 00:02:01,920 Dhe çfarë shpresojmë se ju do të shihni disa lloj gjurmë të asaj që të funksionojë 40 00:02:01,920 --> 00:02:03,340 Gabimi është në të vërtetë in 41 00:02:03,340 --> 00:02:07,195 Në këtë rast këtu, në atë linjë të kodi im ishte gabim me sa duket? 42 00:02:07,195 --> 00:02:09,729 43 00:02:09,729 --> 00:02:14,130 >> 26 në një dosje të quajtur memory.c, e cila ishte Shembulli ne ishim duke luajtur me 44 00:02:14,130 --> 00:02:14,890 në kohë. 45 00:02:14,890 --> 00:02:16,460 Pra, kjo nuk është ndoshta në malloc. 46 00:02:16,460 --> 00:02:18,630 Ajo ishte ndoshta në kodin tim në vend. 47 00:02:18,630 --> 00:02:20,910 Pra ne do të shohim këtë përsëri dhe përsëri para se të gjatë. 48 00:02:20,910 --> 00:02:24,080 >> Pra scanf, kjo erdhi deri në një Çifti i formave deri tani. 49 00:02:24,080 --> 00:02:26,410 Ne pamë sscanf shkurtimisht. 50 00:02:26,410 --> 00:02:28,330 Kjo ishte diçka që një numër i ti fetar në në tuaj 51 00:02:28,330 --> 00:02:29,535 përgatitjet për quiz. 52 00:02:29,535 --> 00:02:33,130 Dhe scanf është në të vërtetë ajo që CS50 Biblioteka ka qenë duke përdorur nën 53 00:02:33,130 --> 00:02:36,560 kapuç për mjaft kohë në mënyrë për të marrë të dhëna nga përdoruesi. 54 00:02:36,560 --> 00:02:40,420 >> Për shembull, në qoftë se unë të lëvizë mbi të CS50 aplikim këtu, më lejoni të hapur një 55 00:02:40,420 --> 00:02:45,315 Shembulli që sot quhet scanf 0.c- Dhe kjo është e thjeshtë super. 56 00:02:45,315 --> 00:02:46,590 Është vetëm disa rreshta të kodit. 57 00:02:46,590 --> 00:02:50,880 Por kjo tregon me të vërtetë se si getInt ka qenë duke punuar të gjithë këtë kohë. 58 00:02:50,880 --> 00:02:54,710 >> Në këtë program Këtu, në përputhje 16 , Njoftim se unë deklaroj një int. 59 00:02:54,710 --> 00:02:57,270 Pra, nuk ka asgjë magjike pointers, atje, vetëm një int. 60 00:02:57,270 --> 00:03:00,330 Pastaj në linjë 17, unë shkaktonte shfrytëzues për një numër, ju lutem. 61 00:03:00,330 --> 00:03:02,930 18 Pastaj në fund, unë përdorin scanf këtu. 62 00:03:02,930 --> 00:03:06,910 Dhe unë specifikuar, lloj si printf, që unë jam duke pritur kuotë 63 00:03:06,910 --> 00:03:08,110 i mbyll thonjëzat për qind. 64 00:03:08,110 --> 00:03:10,920 >> Pra qind Unë, natyrisht, tregon një int. 65 00:03:10,920 --> 00:03:14,580 Por njoftim se çfarë dytë Argumenti për scanf është. 66 00:03:14,580 --> 00:03:17,350 Si do ta përshkruanit dytë Argumenti pas presjes? 67 00:03:17,350 --> 00:03:19,450 Çfarë është kjo? 68 00:03:19,450 --> 00:03:20,670 >> Kjo është adresa e x. 69 00:03:20,670 --> 00:03:25,490 Pra, kjo është e dobishme për shkak se duke siguruar scanf me adresën e x, çfarë e bën 70 00:03:25,490 --> 00:03:29,560 që të fuqizojë atë funksion për të bërë? 71 00:03:29,560 --> 00:03:33,010 Jo vetëm të shkojnë atje, por edhe të bëjë çfarë? 72 00:03:33,010 --> 00:03:34,060 >> Bëni një ndryshim tek ajo. 73 00:03:34,060 --> 00:03:38,080 , Sepse ju mund të shkoni atje, kjo është lloj i si një hartë në një vend në kujtesë. 74 00:03:38,080 --> 00:03:41,900 Dhe për aq kohë sa ju japin scanf, ose ndonjë funksion me një hartë të tillë, që 75 00:03:41,900 --> 00:03:45,840 Funksioni mund të shkojë atje, dhe jo vetëm shikoni në vlerë, por ai gjithashtu mund të 76 00:03:45,840 --> 00:03:49,670 ndryshuar këtë vlerë, e cila është e dobishme në qoftë se Qëllimi i jetës është për të scanf 77 00:03:49,670 --> 00:03:53,060 scan dhëna nga përdoruesit, në mënyrë specifike nga keyboard. 78 00:03:53,060 --> 00:03:57,830 Dhe f tregon formatuar, ashtu si printf, f tregon një formatuar 79 00:03:57,830 --> 00:03:58,930 string që ju doni të shtypura. 80 00:03:58,930 --> 00:04:04,430 >> Pra me pak fjalë, kjo 18 linja thjesht thotë, përpiqen për të lexuar një int nga përdoruesit e 81 00:04:04,430 --> 00:04:10,420 tastierë dhe ruajtur atë brenda x, në Adresa çfarëdo x ndodh të jetojnë në të. 82 00:04:10,420 --> 00:04:14,860 Dhe pastaj së fundi, linjë 19 vetëm thotë, thanks for int, në këtë rast. 83 00:04:14,860 --> 00:04:15,940 >> Pra më lejoni të shkoj përpara dhe të bëjë këtë. 84 00:04:15,940 --> 00:04:18,570 Pra, të bëjë scanf 0. 85 00:04:18,570 --> 00:04:20,130 Më lejoni të shkojnë përpara dhe zoom in 86 00:04:20,130 --> 00:04:22,960 Unë do të shkoj dhe të drejtuar këtë me dots zvogëlojë scanf 0. 87 00:04:22,960 --> 00:04:24,020 Numri, ju lutëm? 88 00:04:24,020 --> 00:04:24,720 50. 89 00:04:24,720 --> 00:04:25,730 Faleminderit për 50. 90 00:04:25,730 --> 00:04:27,270 Pra, kjo është mjaft e thjeshtë. 91 00:04:27,270 --> 00:04:28,160 >> Tani çfarë nuk është bërë kjo? 92 00:04:28,160 --> 00:04:29,940 Kjo nuk është bërë një bandë e tërë e kontrollit të gabimit. 93 00:04:29,940 --> 00:04:33,000 Për shembull, në qoftë se unë nuk bashkëpunojnë, dhe unë nuk e shkruani në një numër, por 94 00:04:33,000 --> 00:04:37,860 në vend që unë shkruaj diçka si "hello", kjo është vetëm një lloj të çuditshme. 95 00:04:37,860 --> 00:04:41,130 Dhe kështu një nga gjërat CS50 Biblioteka ka qenë bërë për ne për disa 96 00:04:41,130 --> 00:04:43,440 Ora është se reprompting dhe reprompting. 97 00:04:43,440 --> 00:04:49,320 >> Rigjykuar risjell frazë ishte në cs50.c, dhe kjo është arsyeja që në getInt 98 00:04:49,320 --> 00:04:51,670 Biblioteka CS50 është në fakt një e tërë bandë e linjave të gjata, sepse ne jemi 99 00:04:51,670 --> 00:04:53,190 kontrolluar për gjëra idiote si kjo. 100 00:04:53,190 --> 00:04:55,730 A nuk të japë përdoruesit na, në fakt, një int? 101 00:04:55,730 --> 00:04:57,910 A ai ose ajo të na japë diçka si një letër të alfabetit? 102 00:04:57,910 --> 00:05:01,410 Nëse është kështu, ne duam të zbuluar se dhe bërtas në to. 103 00:05:01,410 --> 00:05:03,915 >> Por gjërat më interesante në këtë shembull tjetër. 104 00:05:03,915 --> 00:05:09,840 Nëse unë shkoj në scanf-1.c, çfarë është një gjë që është ndryshuar rrënjësisht në 105 00:05:09,840 --> 00:05:11,135 ky shembull tjetër? 106 00:05:11,135 --> 00:05:13,690 107 00:05:13,690 --> 00:05:16,010 Unë jam duke përdorur * char, natyrisht, në vend të int. 108 00:05:16,010 --> 00:05:19,210 >> Pra, kjo është interesante, sepse * char, kujtoj, është me të vërtetë vetëm 109 00:05:19,210 --> 00:05:20,190 e njëjta gjë si string. 110 00:05:20,190 --> 00:05:23,840 Pra, ai ndjehet si ndoshta kjo është një super Zbatimi i thjeshtë i getString. 111 00:05:23,840 --> 00:05:26,010 Por unë kam peeled prapa shtresa e bibliotekës CS50, kështu që unë jam 112 00:05:26,010 --> 00:05:27,550 char * duke e quajtur këtë tani. 113 00:05:27,550 --> 00:05:30,070 Pra, le të shohim se ku, nëse kudo, Ne të shkojnë keq. 114 00:05:30,070 --> 00:05:30,840 >> Line 17 - 115 00:05:30,840 --> 00:05:33,950 Unë them përsëri, ju lutem jepni diçka, në këtë rast, një varg. 116 00:05:33,950 --> 00:05:37,940 Dhe pastaj në vijën e ardhshëm, ju bëj thirrje scanf, përsëri, duke i dhënë asaj një kod format, 117 00:05:37,940 --> 00:05:39,310 por kjo s koha për qind. 118 00:05:39,310 --> 00:05:41,900 Dhe pastaj kjo kohë, unë jam duke i dhënë asaj tampon. 119 00:05:41,900 --> 00:05:43,550 >> Tani vini re, unë nuk jam duke përdorur simbol. 120 00:05:43,550 --> 00:05:47,120 Por pse është se ndoshta OK këtu? 121 00:05:47,120 --> 00:05:49,760 Sepse ajo është tampon tashmë? 122 00:05:49,760 --> 00:05:50,770 Kjo është tashmë një akrep. 123 00:05:50,770 --> 00:05:51,650 Kjo është tashmë një adresë. 124 00:05:51,650 --> 00:05:54,510 >> Dhe le kjo fjala "ngatërruar", më lejoni vetëm e quajti atë s, për shembull, për 125 00:05:54,510 --> 00:05:55,050 thjeshtësia. 126 00:05:55,050 --> 00:05:58,250 Por unë e kam quajtur atë tampon sepse në përgjithshëm, në programim, nëse ju keni një 127 00:05:58,250 --> 00:06:02,130 copë e kujtesës, e cila një varg të vërtetë vetëm është, ju mund të telefononi atë një tampon. 128 00:06:02,130 --> 00:06:04,460 Kjo është një vend për të ruajtur informacione. 129 00:06:04,460 --> 00:06:07,400 >> Ngjashëm me gjëra të tilla si YouTube, kur ata janë buffering, kështu që të flasin, që 130 00:06:07,400 --> 00:06:10,270 thjesht do të thotë ajo shkarkimit nga BITS internet dhe ruajtjen e tyre në një 131 00:06:10,270 --> 00:06:14,160 array lokal, një copë lokal i memories në mënyrë që ju mund të shikojnë atë më vonë pa 132 00:06:14,160 --> 00:06:16,830 ajo duke lënë mënjanë ose varur në jeni duke luajtur prapa. 133 00:06:16,830 --> 00:06:20,930 >> Pra ka një problem këtu pse, sepse unë jam i thënë scanf, presin një 134 00:06:20,930 --> 00:06:22,320 string nga përdoruesi. 135 00:06:22,320 --> 00:06:24,410 Këtu është adresa e një copë e kujtesës. 136 00:06:24,410 --> 00:06:26,180 Vendoseni atë varg atje. 137 00:06:26,180 --> 00:06:31,230 Pse është i detyruar që të japë na probleme, pse? 138 00:06:31,230 --> 00:06:33,490 >> Çfarë është ajo? 139 00:06:33,490 --> 00:06:35,510 Unë jam i lejuar për të hyrë se një pjesë e kujtesës? 140 00:06:35,510 --> 00:06:36,250 Ju e dini, unë nuk e di. 141 00:06:36,250 --> 00:06:39,210 Sepse ka qenë initialized tampon për asgjë? 142 00:06:39,210 --> 00:06:39,820 Jo me të vërtetë. 143 00:06:39,820 --> 00:06:43,090 Dhe kështu kjo është ajo që ne kemi qenë të thirrur një vlerë plehrash, e cila 144 00:06:43,090 --> 00:06:44,040 nuk është një fjalë formal. 145 00:06:44,040 --> 00:06:49,200 Ajo thjesht do të thotë që ne nuk kemi ide se çfarë bit janë brendësi prej kater bytes që 146 00:06:49,200 --> 00:06:51,240 Unë kam ndarë si tampon. 147 00:06:51,240 --> 00:06:52,450 >> Unë nuk e kam quajtur malloc. 148 00:06:52,450 --> 00:06:53,940 Unë nuk e kam quajtur definitivisht getString. 149 00:06:53,940 --> 00:06:56,380 Pra, kush e di se çfarë është në të vërtetë brenda tampon? 150 00:06:56,380 --> 00:07:00,550 Dhe akoma thënë scanf verbërisht, shkoni atje dhe vuri çdo gjë që përdoruesit shtypur. 151 00:07:00,550 --> 00:07:04,460 >> Pra, çfarë ka të ngjarë të shkaktojë në kodin tonë, nëse ne të drejtuar atë? 152 00:07:04,460 --> 00:07:05,700 Ndoshta një segfault. 153 00:07:05,700 --> 00:07:07,970 Ndoshta jo, por ndoshta një segfault. 154 00:07:07,970 --> 00:07:10,620 Dhe unë them ndoshta jo për shkak se nganjëherë ju bëni, nganjëherë 155 00:07:10,620 --> 00:07:11,380 ju nuk merrni një segfault. 156 00:07:11,380 --> 00:07:14,280 Ndonjëherë ju vetëm të merrni me fat, por ajo megjithatë do të jetë 157 00:07:14,280 --> 00:07:15,340 një bug në programin tonë. 158 00:07:15,340 --> 00:07:17,060 >> Pra më lejoni të shkoj përpara dhe të përpilojnë këtë. 159 00:07:17,060 --> 00:07:18,280 Unë jam duke shkuar për të bërë atë rrugën e vjetër e shkollës. 160 00:07:18,280 --> 00:07:23,825 Pra dash tingëllimë 0, scanf-1, scanf, 1.c, Enter. 161 00:07:23,825 --> 00:07:24,720 Oops, shkollë shumë e vjetër. 162 00:07:24,720 --> 00:07:26,550 Le të shohim. 163 00:07:26,550 --> 00:07:28,440 Ku të shkoj unë? 164 00:07:28,440 --> 00:07:29,700 Oh, tampon char *. 165 00:07:29,700 --> 00:07:33,595 166 00:07:33,595 --> 00:07:35,130 Oh, thank you - 167 00:07:35,130 --> 00:07:36,930 Save, OK - 168 00:07:36,930 --> 00:07:37,690 shkollë shumë e vjetër. 169 00:07:37,690 --> 00:07:38,900 Të gjithë të drejtë, ajo ka qenë një kohë. 170 00:07:38,900 --> 00:07:41,720 >> Kështu që unë kam ruajtur vetëm skedarin pas bërë që të përkohshëm 171 00:07:41,720 --> 00:07:42,700 ndryshojë një moment më parë. 172 00:07:42,700 --> 00:07:46,090 Dhe tani unë kam hartuar atë dorë me tingëllimë. 173 00:07:46,090 --> 00:07:49,500 Dhe tani unë jam duke shkuar për të shkuar përpara dhe të drejtuar scanf-1, Enter. 174 00:07:49,500 --> 00:07:50,290 String ju lutem. 175 00:07:50,290 --> 00:07:51,600 Unë do të shkruani në "hello". 176 00:07:51,600 --> 00:07:54,070 >> Dhe tani, këtu është ku, sinqerisht, printf mund eshte nje pak bezdisshëm. 177 00:07:54,070 --> 00:07:56,020 Kjo nuk është në të vërtetë do të segfault në këtë rast. 178 00:07:56,020 --> 00:07:59,860 Printf është pak e veçantë, sepse është kaq super i zakonshëm që përdoret që 179 00:07:59,860 --> 00:08:03,570 printf në thelb është duke bërë na një favor dhe realizimin, 180 00:08:03,570 --> 00:08:04,830 që nuk është një tregues i vlefshëm. 181 00:08:04,830 --> 00:08:09,080 Më lejoni të marrë atë me veten për të vetëm të shtypur në kllapa null, madje edhe 182 00:08:09,080 --> 00:08:13,340 edhe pse kjo nuk është domosdoshmërisht se çfarë ne vetë pritet. 183 00:08:13,340 --> 00:08:16,940 >> Pra, ne nuk mund të vërtetë e lehtë të shkaktoj një segfault me ​​këtë, por në mënyrë të qartë kjo 184 00:08:16,940 --> 00:08:18,600 nuk është sjellje që kam kërkuar. 185 00:08:18,600 --> 00:08:19,800 Pra, çfarë është zgjidhja më e thjeshtë? 186 00:08:19,800 --> 00:08:25,650 E pra, në scanf-2, më lejoni të propozoj që në vend të ndarjes në fakt vetëm një 187 00:08:25,650 --> 00:08:30,100 * char, më lejoni të jetë pak më të zgjuar në lidhje me kjo, dhe më lejoni të buffer 188 00:08:30,100 --> 00:08:32,940 si një sekuencë prej 16 chars. 189 00:08:32,940 --> 00:08:34,200 >> Kështu që unë mund ta bëjë këtë në disa mënyra. 190 00:08:34,200 --> 00:08:35,610 Unë mund të përdorin malloc absolutisht. 191 00:08:35,610 --> 00:08:38,980 Por unë mund të kthehem në dy javë, kur Unë vetëm nevojë për një bandë e tërë e 192 00:08:38,980 --> 00:08:39,620 karaktere. 193 00:08:39,620 --> 00:08:40,860 Kjo është vetëm një koleksion. 194 00:08:40,860 --> 00:08:44,870 Pra më lejoni të ripërcaktuar në vend buffer të jetë një grup prej 16 karaktereve. 195 00:08:44,870 --> 00:08:47,340 >> Dhe tani, kur kam kaluar tampon në - 196 00:08:47,340 --> 00:08:49,940 dhe kjo është diçka që ne nuk e bëri flasim në dy javë - 197 00:08:49,940 --> 00:08:53,730 por ju mund të trajtoni si një grup pse kjo është një adresë. 198 00:08:53,730 --> 00:08:56,390 Teknikisht, siç kemi parë, ata janë pak më ndryshe. 199 00:08:56,390 --> 00:09:01,290 Por scanf nuk do të ngurrojë në qoftë se ju të kalojë atë emri i një vargu, sepse ajo 200 00:09:01,290 --> 00:09:05,030 Tingëllimë do të bëjë për ne është në thelb trajtojnë emrin e atij luftojnë si 201 00:09:05,030 --> 00:09:08,280 Adresën e copë e 16 bajt. 202 00:09:08,280 --> 00:09:09,550 >> Pra kjo është më mirë. 203 00:09:09,550 --> 00:09:12,110 Kjo do të thotë tani që unë mund të shpresojmë të bëjë në vijim. 204 00:09:12,110 --> 00:09:16,800 Më lejoni të zoom jashtë për një moment dhe të nuk bëjnë scanf-2, përpiluar OK. 205 00:09:16,800 --> 00:09:19,390 Tani më lejoni të bëj mori plagë scanf-2. 206 00:09:19,390 --> 00:09:22,430 String ju lutem. "Hello". Dhe kjo dukej për të punuar këtë kohë. 207 00:09:22,430 --> 00:09:26,020 >> Por dikush mund të propozojë një skenar në të cilat ajo mund të mos punojnë ende? 208 00:09:26,020 --> 00:09:28,550 Vërtet? 209 00:09:28,550 --> 00:09:30,640 Diçka më shumë se 16 karaktere. 210 00:09:30,640 --> 00:09:32,020 Dhe në të vërtetë, ne mund të jetë pak më të saktë. 211 00:09:32,020 --> 00:09:36,540 Diçka më shumë se 15 karaktere, sepse me të vërtetë ne kemi nevojë për të mbajtur në mend 212 00:09:36,540 --> 00:09:39,920 se ne kemi nevojë për atë backslash zero implicite në fund të vargut, 213 00:09:39,920 --> 00:09:42,950 e cila është një mënjanë scanf do tipike të kujdeset për ne. 214 00:09:42,950 --> 00:09:46,210 >> Pra më lejoni të bëj diçka si - 215 00:09:46,210 --> 00:09:48,040 nganjëherë ne vetëm mund të lënë atë si kjo. 216 00:09:48,040 --> 00:09:50,630 OK, kështu që ne kemi detyruar tani faji ynë segmentimit. 217 00:09:50,630 --> 00:09:51,000 Pse? 218 00:09:51,000 --> 00:09:54,940 Sepse unë shtypur në më shumë se 15 karaktere, dhe kështu që ne kemi në fakt 219 00:09:54,940 --> 00:09:58,280 kujtesës prekur se unë në fakt nuk duhet të ketë. 220 00:09:58,280 --> 00:10:00,180 >> Pra, çfarë është me të vërtetë zgjidhja këtu? 221 00:10:00,180 --> 00:10:02,210 E pra, çfarë nëse ne kemi nevojë për një varg më të gjatë? 222 00:10:02,210 --> 00:10:03,960 E pra, ne ndoshta bëjnë atë 32 bytes. 223 00:10:03,960 --> 00:10:05,160 E pra, çka nëse kjo nuk është kohë e mjaftueshme? 224 00:10:05,160 --> 00:10:06,040 Si rreth 64 bytes? 225 00:10:06,040 --> 00:10:07,080 Çka në qoftë se nuk është kohë e mjaftueshme? 226 00:10:07,080 --> 00:10:09,640 Si rreth 128 ose 200 bytes? 227 00:10:09,640 --> 00:10:12,660 Çfarë është me të vërtetë zgjidhja këtu në Rasti i përgjithshëm, në qoftë se ne nuk e dimë në 228 00:10:12,660 --> 00:10:14,460 paraprakisht se çfarë përdoruesit do të shkruani? 229 00:10:14,460 --> 00:10:20,000 230 00:10:20,000 --> 00:10:23,050 >> Kjo është vetëm një lloj dhimbje e madhe në gomar, të jenë ndershëm, e cila është pse 231 00:10:23,050 --> 00:10:29,050 CS50 bibliotekë ka një duzinë disa rreshta të kodin që kolektivisht të zbatojë 232 00:10:29,050 --> 00:10:32,390 GetString string në një mënyrë që ne nuk duhet të dinë paraprakisht se çfarë 233 00:10:32,390 --> 00:10:33,430 përdoruesi është duke shkuar për të tipit. 234 00:10:33,430 --> 00:10:37,370 Në veçanti, në qoftë se ju shikoni mbrapa në cs50.c nga dy javë më parë, do të shihni 235 00:10:37,370 --> 00:10:40,480 që në fakt bën getString mos përdorin scanf në këtë mënyrë. 236 00:10:40,480 --> 00:10:43,720 Përkundrazi, ai lexon një karakter në një kohë. 237 00:10:43,720 --> 00:10:46,010 >> Për shkak se një gjë e bukur për lexuar një karakter është mundemi 238 00:10:46,010 --> 00:10:48,490 garantojë veten për gjithmonë kanë të paktën një char. 239 00:10:48,490 --> 00:10:51,740 Unë vetëm mund të deklaroj një char, dhe pastaj të marrë këto hapa të vërtetë fëmijë të vetëm 240 00:10:51,740 --> 00:10:54,380 lexuar një karakter në të një Ora nga keyboard. 241 00:10:54,380 --> 00:10:58,240 Dhe pastaj, çfarë ju do të shihni getString nuk është çdo herë që ajo shkon jashtë, 242 00:10:58,240 --> 00:11:02,280 themi, 16 bytes të kujtesës, ai përdor malloc, ose nje tij kushëri, te 243 00:11:02,280 --> 00:11:06,810 caktojë më shumë memorie, kopjimi i vjetër memorie në zvarritje të re, dhe pastaj 244 00:11:06,810 --> 00:11:09,900 së bashku, duke marrë një karakter në një kohë, dhe kur ajo shkon nga të cilat 245 00:11:09,900 --> 00:11:13,370 copë e kujtesës, hedh atë larg, grabs një copë të madhe të kujtesës, kopjon vjetër 246 00:11:13,370 --> 00:11:14,750 në të rinj, dhe përsëritësit. 247 00:11:14,750 --> 00:11:18,480 Dhe kjo është me të vërtetë një dhimbje të vërtetë zbatojë diçka e thjeshtë si 248 00:11:18,480 --> 00:11:19,710 duke marrë të dhëna nga një përdorues. 249 00:11:19,710 --> 00:11:21,090 >> Kështu që ju mund të përdorni scanf. 250 00:11:21,090 --> 00:11:22,430 Ju mund të përdorni funksione të tjera të ngjashme. 251 00:11:22,430 --> 00:11:25,420 Dhe shumë i teksteve dhe online Shembuj të bëjmë, por ata janë të gjithë 252 00:11:25,420 --> 00:11:27,210 prekshme për problemet si kjo. 253 00:11:27,210 --> 00:11:29,550 Dhe në fund të fundit, duke marrë një segfault është lloj i bezdisshëm. 254 00:11:29,550 --> 00:11:30,680 Kjo nuk është e mirë për përdoruesit. 255 00:11:30,680 --> 00:11:33,560 >> Por në rastin më të keq, çfarë bën ajo rrënjësisht vënë Juaj 256 00:11:33,560 --> 00:11:37,160 Kodi në rrezik? 257 00:11:37,160 --> 00:11:39,250 Disa lloj sulmi, potencialisht. 258 00:11:39,250 --> 00:11:41,680 Ne biseduam rreth një sulmi të tillë - tejmbushur rafte. 259 00:11:41,680 --> 00:11:44,660 Por në përgjithësi, në qoftë se ju jeni i lejuar për të një tampon del nga shtrati, si ne e bëmë një 260 00:11:44,660 --> 00:11:48,070 Nja dy javë më parë, vetëm me shkrim më shumë se "hello" në rafte, ju 261 00:11:48,070 --> 00:11:52,330 mund të vërtetë të marrë përsipër, potencialisht, një kompjuteri, ose të paktën të marrë në të dhëna që 262 00:11:52,330 --> 00:11:53,510 nuk i takon për ju. 263 00:11:53,510 --> 00:11:55,970 >> Pra me pak fjalë, kjo është arsyeja pse ne kemi ato rrota trajnimit. 264 00:11:55,970 --> 00:11:59,090 Por tani, ne fillojmë për të marrë ato jashtë, si programet tona nuk ka më nevojë, 265 00:11:59,090 --> 00:12:00,610 domosdoshmërisht, të dhëna nga përdoruesi. 266 00:12:00,610 --> 00:12:03,960 Por në rastin e problemit të vendosur gjashtë, input juaj do të vijë nga një i madh 267 00:12:03,960 --> 00:12:07,520 150 fotografi fjalor me disa rastësishëm mijë fjalë. 268 00:12:07,520 --> 00:12:10,330 >> Pra, ju nuk do të duhet të shqetësohen për input arbitrare e anëtarit. 269 00:12:10,330 --> 00:12:13,720 Ne do t'ju japë disa supozime në lidhje me këtë dosje. 270 00:12:13,720 --> 00:12:20,340 Çdo pyetje mbi pointers ose scanf ose input përdorues në përgjithësi? 271 00:12:20,340 --> 00:12:24,450 >> Të gjithë të drejtë, kështu që një vështrim i shpejtë pastaj në një zvarritës temë nga dy javë më parë. 272 00:12:24,450 --> 00:12:28,590 Dhe kjo ishte ky nocion i një struct. 273 00:12:28,590 --> 00:12:34,180 Jo se - ky nocion i një përpilohet, e cila ishte ajo? 274 00:12:34,180 --> 00:12:35,430 Çfarë bëri struct bënte për ne? 275 00:12:35,430 --> 00:12:39,280 276 00:12:39,280 --> 00:12:39,860 >> Define - 277 00:12:39,860 --> 00:12:41,710 Na vjen keq? 278 00:12:41,710 --> 00:12:42,820 Përcaktoni një lloj të ndryshueshme. 279 00:12:42,820 --> 00:12:44,410 Pra lloj i. 280 00:12:44,410 --> 00:12:46,180 Ne jemi të vërtetë duke kombinuar dy tema. 281 00:12:46,180 --> 00:12:49,510 Pra, me typedef, kujtojnë se ne mundemi shpallë një lloj të vetën tonë, si një 282 00:12:49,510 --> 00:12:51,500 sinonim, si për varg char *. 283 00:12:51,500 --> 00:12:56,200 Por duke përdorur typedef dhe struct, ne mund të të krijojë me të vërtetë strukturat e të dhënave tona. 284 00:12:56,200 --> 00:12:59,600 >> Për shembull, nëse unë kthehem në Gedit këtu vetëm për një moment, dhe të shkoj përpara 285 00:12:59,600 --> 00:13:08,230 dhe të bëjë diçka si, më lejoni të shpëtuar këtë si, le të themi, structs.c 286 00:13:08,230 --> 00:13:10,840 përkohësisht, unë jam vetëm duke shkuar të shkojnë përpara dhe të përfshijë 287 00:13:10,840 --> 00:13:14,360 standardio.h, i pavlefshëm kryesore int. 288 00:13:14,360 --> 00:13:18,960 Dhe pastaj në këtu, mendoj se unë dua të shkruaj një program që ruan 289 00:13:18,960 --> 00:13:21,840 Nxënësit të shumta nga të shumëfishtë shtëpi, për shembull. 290 00:13:21,840 --> 00:13:24,430 Pra, ajo është si një registrarial Baza e të dhënave të disa lloj. 291 00:13:24,430 --> 00:13:29,550 >> Pra, nëse kam nevojë për një student me emrin, unë mund të bëni diçka si emri * char, 292 00:13:29,550 --> 00:13:31,570 dhe unë do të bëj diçka si - 293 00:13:31,570 --> 00:13:34,410 në fakt, le të përdorin bibliotekën CS50 për vetëm një moment për të bërë këtë një 294 00:13:34,410 --> 00:13:38,380 pak të thjeshtë, kështu që ne mund të marrë hua ato dhjetra e linjave të kodit. 295 00:13:38,380 --> 00:13:39,340 Dhe le të vetëm ta mbani atë të thjeshtë. 296 00:13:39,340 --> 00:13:42,610 Ne do të vazhdojmë atë string, dhe tani getString. 297 00:13:42,610 --> 00:13:47,420 >> Kështu që unë pretendojnë tani që unë kam ruajtur emrin i disa nxënës, dhe shtëpisë së 298 00:13:47,420 --> 00:13:50,240 disa student, thjesht duke përdorur ndryshoret si ne e bëmë dhe në një javë. 299 00:13:50,240 --> 00:13:52,370 Por mendoj unë tani duan të mbështesin Nxënësit e shumta. 300 00:13:52,370 --> 00:13:58,460 Të gjithë të drejtë, kështu që instinktet e mia janë për të bërë string name2, merr getString varg, 301 00:13:58,460 --> 00:14:01,370 house2 merr getString. 302 00:14:01,370 --> 00:14:05,850 Dhe pastaj studenti ynë i tretë, le të bëjë name3 getString. 303 00:14:05,850 --> 00:14:09,170 >> Të gjithë të drejtë, kështu që shpresojmë se kjo është e habitshme ju si lloj i trashë, 304 00:14:09,170 --> 00:14:11,580 sepse ky proces është me të vërtetë kurrë do të përfundojë, dhe ajo është vetëm do të 305 00:14:11,580 --> 00:14:13,130 të bëjë kodi im duken më keq dhe më keq dhe më keq. 306 00:14:13,130 --> 00:14:14,810 Por ne kemi zgjidhur këtë shumë në dy javë. 307 00:14:14,810 --> 00:14:19,450 Cila ishte zgjidhja jonë relativisht të pastër kur ne kishim variabla të shumta të 308 00:14:19,450 --> 00:14:23,580 njëjtë të dhënave lloji që janë të lidhura të gjitha, por ne nuk e duam këtë rrëmujë mizor 309 00:14:23,580 --> 00:14:26,870 e variablave të quajtur në mënyrë të ngjashme? 310 00:14:26,870 --> 00:14:30,060 Çfarë bëjmë ne vend? 311 00:14:30,060 --> 00:14:31,260 >> Kështu që unë mendoj se kam dëgjuar disa vende. 312 00:14:31,260 --> 00:14:32,590 Ne patëm një rrjet. 313 00:14:32,590 --> 00:14:37,110 Nëse ju doni raste të shumta të diçka, pse nuk kemi pastruar këtë të gjithë 314 00:14:37,110 --> 00:14:39,540 up dhe vetëm thonë, më jep mua array quajtur emrat? 315 00:14:39,540 --> 00:14:41,640 >> Dhe tani për tani, le të 3 vështirë kod. 316 00:14:41,640 --> 00:14:44,450 Dhe pastaj jepni një tjetër rrjet quhet shtëpi, dhe le mua për 317 00:14:44,450 --> 00:14:45,800 tani Kodi vështirë 3. 318 00:14:45,800 --> 00:14:49,220 Dhe unë e kam pastruar deri masivisht bela që kam krijuar vetëm. 319 00:14:49,220 --> 00:14:52,400 Tani, unë e kam ende të vështirë të koduar me 3, por edhe 3 dinamike mund të vijnë nga 320 00:14:52,400 --> 00:14:54,350 përdoruesi, ose argv, apo si. 321 00:14:54,350 --> 00:14:55,720 Pra, kjo tashmë është e pastër. 322 00:14:55,720 --> 00:15:00,100 >> Por ajo që i bezdisshëm në lidhje me këtë është se tani, ndonëse emri është disi 323 00:15:00,100 --> 00:15:02,280 të lidhura thelbësisht të Shtëpia e nxënësit - 324 00:15:02,280 --> 00:15:04,720 kjo është një student që unë me të vërtetë duan të përfaqësojnë - 325 00:15:04,720 --> 00:15:08,080 Unë tani keni dy vargjeve që janë paralele në kuptimin që ata janë të 326 00:15:08,080 --> 00:15:13,930 të njëjtën madhësi, dhe emrat kllapa 0 me sa duket harta në shtëpitë kllapa 0, 327 00:15:13,930 --> 00:15:16,600 dhe emrat kllapa 1 hartat në shtëpitë e kllapa 1. 328 00:15:16,600 --> 00:15:19,280 Me fjalë të tjera, që studentore jeton në që shtëpia, dhe se studenti tjera 329 00:15:19,280 --> 00:15:20,530 jeton në atë shtëpi tjetër. 330 00:15:20,530 --> 00:15:23,720 Por sigurisht kjo mund të jetë bëhet edhe më e pastër. 331 00:15:23,720 --> 00:15:24,990 >> E pra, ajo mund, në fakt. 332 00:15:24,990 --> 00:15:28,730 Dhe më lejoni të shkoj përpara dhe të hapur structs.h lart, dhe ju do të 333 00:15:28,730 --> 00:15:31,130 shihni këtë ide këtu. 334 00:15:31,130 --> 00:15:34,905 Vini re se unë kam përdorur typedef, si ju aludoi për një moment më parë për të deklaruar tonë 335 00:15:34,905 --> 00:15:35,570 vetë lloji të dhëna. 336 00:15:35,570 --> 00:15:39,660 Por unë jam gjithashtu duke përdorur këtë fjalë kyçe të tjera quajtur struct e cila jep mua një të ri 337 00:15:39,660 --> 00:15:40,790 Struktura e të dhënave. 338 00:15:40,790 --> 00:15:43,980 >> Dhe kjo Struktura e të dhënave Unë pretendojnë po shkon të keni dy gjëra në brendësi të 339 00:15:43,980 --> 00:15:47,060 ajo - një varg të quajtur emrin, dhe një varg të quajtur shtëpi. 340 00:15:47,060 --> 00:15:49,820 Dhe emri që unë jam duke shkuar për të dhënë për kjo Struktura e të dhënave është duke shkuar 341 00:15:49,820 --> 00:15:51,005 për t'u quajtur studenti. 342 00:15:51,005 --> 00:15:54,030 Unë mund të telefononi atë gjë që unë dua, por kjo semantike të bëjnë 343 00:15:54,030 --> 00:15:55,810 kuptim për mua në mendjen time. 344 00:15:55,810 --> 00:15:59,160 >> Deri tani, në qoftë se unë i hapur deri një version më të mirë e programit Fillova shkrim 345 00:15:59,160 --> 00:16:00,390 atje, më lejoni të lëvizni në krye. 346 00:16:00,390 --> 00:16:03,190 Dhe ka disa linja shumë të kodit këtu, por më lejoni të përqëndrohet për 347 00:16:03,190 --> 00:16:04,160 në një moment. 348 00:16:04,160 --> 00:16:07,790 Unë e kam deklaruar një nxënës konstante ashtuquajturat dhe 3 koduar vështirë tani për tani. 349 00:16:07,790 --> 00:16:11,110 Por tani, vini re se si të pastër kodi im fillon të marrë. 350 00:16:11,110 --> 00:16:15,030 >> Në linjë 22, unë deklaroj Grup i nxënësve. 351 00:16:15,030 --> 00:16:18,760 Dhe vini re se studenti është me sa duket tani një lloj të dhënave. 352 00:16:18,760 --> 00:16:23,360 Sepse në krye të këtij file, njoftim Unë e kam përfshirë atë skedar header 353 00:16:23,360 --> 00:16:24,820 që unë u tërhoq deri vetëm një moment më parë. 354 00:16:24,820 --> 00:16:28,820 Dhe se dosja header mjaft thjesht kishte ky përkufizim i një studenti. 355 00:16:28,820 --> 00:16:32,470 >> Deri tani, unë kam krijuar dhënat e mi custom tip që autorët e viteve C 356 00:16:32,470 --> 00:16:33,890 më parë nuk mendojnë paraprakisht. 357 00:16:33,890 --> 00:16:34,570 Por, nuk ka problem. 358 00:16:34,570 --> 00:16:35,870 Unë mund të bëjë atë vetë. 359 00:16:35,870 --> 00:16:39,050 Pra, ky është një grup i quajtur studentëve, secili prej anëtarëve të të cilit 360 00:16:39,050 --> 00:16:41,100 është një strukturë studente. 361 00:16:41,100 --> 00:16:44,270 Dhe unë dua tre prej atyre ne vektorit. 362 00:16:44,270 --> 00:16:46,030 >> Dhe tani, çfarë e bën pjesa tjetër i këtij programi të bëni? 363 00:16:46,030 --> 00:16:47,550 Unë e nevojshme diçka pak arbitrar. 364 00:16:47,550 --> 00:16:51,450 Pra, nga 24 e tutje në internet, Unë iterate 0-3. 365 00:16:51,450 --> 00:16:54,000 Unë pastaj të kërkojë nga shfrytëzuesi për emri i studentit. 366 00:16:54,000 --> 00:16:56,110 Dhe atëherë unë përdorin getString si më parë. 367 00:16:56,110 --> 00:16:59,410 Pastaj unë kërkoj për shtëpinë e studentit, dhe unë përdor getString si më parë. 368 00:16:59,410 --> 00:17:01,780 >> Por njoftimi - pak e re copë e sintaksës - 369 00:17:01,780 --> 00:17:07,010 Unë ende mund të indeksit të studentit i-th, por si mund ta merrni në të dhënat specifike 370 00:17:07,010 --> 00:17:08,354 brendësi fusha e struct? 371 00:17:08,354 --> 00:17:11,770 E pra, ajo që është me sa duket pjesë të re të sintaksës? 372 00:17:11,770 --> 00:17:13,339 Është vetëm operator dot. 373 00:17:13,339 --> 00:17:14,510 >> Ne nuk e kam parë këtë para se të vërtetë. 374 00:17:14,510 --> 00:17:17,819 Ju kam parë atë në pset pesë qoftë se ju keni hodh në krahun tashmë me fotografi bitmap. 375 00:17:17,819 --> 00:17:22,372 Por dot thjesht do të thotë në brendësi të kësaj struct ose fusha të shumta, japin dot 376 00:17:22,372 --> 00:17:24,510 emri, ose më jepni dot shtëpinë. 377 00:17:24,510 --> 00:17:28,690 Kjo do të thotë të shkojnë në brendësi të struct dhe për të marrë ato fusha të veçanta. 378 00:17:28,690 --> 00:17:30,200 >> Çfarë tjetër e këtij programi të bëni? 379 00:17:30,200 --> 00:17:31,190 Kjo nuk është e gjitha që sexy. 380 00:17:31,190 --> 00:17:34,640 Vini re se unë iterate 0-3 përsëri, dhe unë thjesht të krijuar një anglisht 381 00:17:34,640 --> 00:17:40,500 fraza si kështu dhe kështu është në të tillë dhe tillë një shtëpi, duke kaluar në emrin dot nga 382 00:17:40,500 --> 00:17:43,320 i-th student i tyre dhe shtëpi si. 383 00:17:43,320 --> 00:17:47,560 >> Dhe pastaj së fundi, tani ne do të fillojë të marrë anal në lidhje me këtë, tani që ne jemi 384 00:17:47,560 --> 00:17:49,580 njohur me atë malloc dhe Funksionet e tjera kanë qenë 385 00:17:49,580 --> 00:17:50,570 bërë gjithë këtë kohë. 386 00:17:50,570 --> 00:17:54,220 Pse nuk kam për të liruar si emrin dhe shtëpia, megjithëse unë 387 00:17:54,220 --> 00:17:56,960 nuk e quajnë malloc? 388 00:17:56,960 --> 00:17:58,020 >> GetString bëri. 389 00:17:58,020 --> 00:18:00,930 Dhe kjo ishte e fshehtë pista pak për disa javë, por ka getString 390 00:18:00,930 --> 00:18:03,530 qenë rrjedhjen e kujtesës të gjithë të zhvillohet të gjitha semestër deri tani. 391 00:18:03,530 --> 00:18:05,990 Dhe në fund do valgrand zbulojë këtë për ne. 392 00:18:05,990 --> 00:18:10,730 >> Por kjo nuk është një punë e madhe, sepse unë e di që unë thjesht mund të lirojë emrin 393 00:18:10,730 --> 00:18:15,750 dhe shtëpia, edhe pse teknikisht, të jetë super, super të sigurt, unë duhet të jenë të 394 00:18:15,750 --> 00:18:17,890 bërë ndonjë gabim checking këtu. 395 00:18:17,890 --> 00:18:19,040 Çfarë janë instinktet tuaja ju thënë? 396 00:18:19,040 --> 00:18:22,480 Çfarë duhet unë të kontrolluar për para I liruar atë që është një 397 00:18:22,480 --> 00:18:25,470 string, aka cilën një * char? 398 00:18:25,470 --> 00:18:33,460 >> Unë me të vërtetë duhet të jenë të kontrolluar nëse nxënësit Unë kllapa emri dot nuk 399 00:18:33,460 --> 00:18:34,840 null barabartë. 400 00:18:34,840 --> 00:18:40,400 Atëherë ajo do të jetë në rregull për të shkuar përpara dhe të lirë që akrep, dhe të njëjta ose të tjera 401 00:18:40,400 --> 00:18:41,160 një si. 402 00:18:41,160 --> 00:18:46,860 Nëse studentët parantezë Unë dot shtëpi nuk është barabartë me null, kjo tani do të mbrojë 403 00:18:46,860 --> 00:18:52,520 kundër rastit këndi në të cilën GetString kthen diçka si null. 404 00:18:52,520 --> 00:18:57,310 Dhe ne pamë një moment më parë, do printf na mbrojnë deri këtu duke thënë se vetëm 405 00:18:57,310 --> 00:18:58,990 zero, e cila do te duket çuditshëm. 406 00:18:58,990 --> 00:19:02,340 Por të paktën ajo nuk do të segfault, siç e kemi parë. 407 00:19:02,340 --> 00:19:05,990 >> E pra, më lejoni të bëj një gjë tjetër këtu. structs-0 është lloj i një programi budallaqe 408 00:19:05,990 --> 00:19:09,700 sepse unë të hyjë gjitha këto të dhëna, dhe pastaj ajo ka humbur një herë përfundon programi. 409 00:19:09,700 --> 00:19:10,940 Por më lejoni të shkoj përpara dhe të bëjë këtë. 410 00:19:10,940 --> 00:19:12,830 Më lejoni të bëjë terminalin dritare pak më e madhe. 411 00:19:12,830 --> 00:19:17,000 Më lejoni të bëjë structs-1, e cila është një version të ri për këtë. 412 00:19:17,000 --> 00:19:18,520 >> Unë do të zoom në një grimë të vogël. 413 00:19:18,520 --> 00:19:21,620 Dhe tani më lejoni të kandidojë dot pakësojë structs-1. 414 00:19:21,620 --> 00:19:22,590 Emri i nxënësit - 415 00:19:22,590 --> 00:19:31,500 David Mather, le të bëjë Rob Kirkland, le të bëjë Lauren Leverett. 416 00:19:31,500 --> 00:19:33,650 Çfarë është interesante tani është njoftimi - 417 00:19:33,650 --> 00:19:35,540 dhe unë vetëm e di këtë, sepse I shkroi programin - 418 00:19:35,540 --> 00:19:38,930 ka një skedë tani në time aktuale Direktoria quajtur students.csv. 419 00:19:38,930 --> 00:19:40,420 Disa prej jush mund të keni parë këto në botën reale. 420 00:19:40,420 --> 00:19:42,980 >> Çfarë është një CSV file? 421 00:19:42,980 --> 00:19:44,170 Presje-të ndara vlerat. 422 00:19:44,170 --> 00:19:46,670 Është lloj si një njeri të varfër version i një file Excel. 423 00:19:46,670 --> 00:19:50,580 Kjo është një tabelë e rreshtave dhe kolonave që ju mund të hapë në një program si Excel, 424 00:19:50,580 --> 00:19:51,800 ose numrat në një Mac. 425 00:19:51,800 --> 00:19:55,180 >> Dhe nëse kam hapur këtë skedë këtu në Gedit, Njoftim - dhe numrat nuk janë atje. 426 00:19:55,180 --> 00:19:57,360 Kjo është vetëm Gedit thënë mua numrat e linjës. 427 00:19:57,360 --> 00:19:59,740 Vini re në vijën e parë të kësaj skedë është Davidi dhe Mather. 428 00:19:59,740 --> 00:20:01,450 Linja tjetër është Rob presje Kirkland. 429 00:20:01,450 --> 00:20:04,170 Dhe Linja e tretë është Lauren Leverett presje. 430 00:20:04,170 --> 00:20:05,480 >> Pra, çfarë kam krijuar? 431 00:20:05,480 --> 00:20:09,580 Unë kam shkruar tani që një program C në mënyrë efektive mund të gjenerojnë spreadsheets 432 00:20:09,580 --> 00:20:11,840 që mund të hapen në një program si Excel. 433 00:20:11,840 --> 00:20:15,520 Jo të gjithë që imponues një grup të dhënave, por në qoftë se ju keni chunks akoma më të mëdha 434 00:20:15,520 --> 00:20:18,440 Të dhënat që ju të vërtetë duan të manipuluar dhe të bëjë grafikët e dhe 435 00:20:18,440 --> 00:20:21,260 pëlqen, kjo është ndoshta një mënyrë që të dhënat për të krijuar. 436 00:20:21,260 --> 00:20:25,370 Për më tepër, CSVs vërtetë janë super të zakonshme vetëm për magazinimin e të dhënave të thjeshta - 437 00:20:25,370 --> 00:20:28,940 Yahoo Finance, per shembull, nëse ju merrni Kuotat e aksioneve nëpërmjet tyre të ashtuquajtura 438 00:20:28,940 --> 00:20:33,180 API, shërbim falas që ju lejon merrni aktuale të aksioneve up-to-date- 439 00:20:33,180 --> 00:20:35,650 kuotat për kompanitë, ata japin të dhënat përsëri në 440 00:20:35,650 --> 00:20:37,800 formatin CSV super e thjeshtë. 441 00:20:37,800 --> 00:20:39,380 >> Pra, si e bëjmë këtë? 442 00:20:39,380 --> 00:20:42,530 Well njoftim, shumica e këtij programi të pothuajse e njëjtë. 443 00:20:42,530 --> 00:20:46,870 Por vini re këtu poshtë, në vend se të shtypura studentët jashtë, on line 35 444 00:20:46,870 --> 00:20:51,040 tutje, unë pretendojnë se unë jam i kursyer Nxënësit në disk, kështu kursyer një skedar. 445 00:20:51,040 --> 00:20:53,630 >> Pra njoftim unë jam deklaruar një skedar * - 446 00:20:53,630 --> 00:20:57,260 tani, kjo është lloj i një anomali në C Për çfarëdo arsye, dosja është e gjitha shkronja kapitale, 447 00:20:57,260 --> 00:21:00,690 e cila nuk është si shumica e llojeve të të dhënave të tjera në C. Por kjo është një built-in 448 00:21:00,690 --> 00:21:02,320 Lloji i të dhënave, * FILE. 449 00:21:02,320 --> 00:21:05,900 Dhe unë jam deklaruar një pointer në një skedar, është se si ju mund të mendoni se. 450 00:21:05,900 --> 00:21:08,070 >> fopen thotë skedë të hapur. 451 00:21:08,070 --> 00:21:09,470 Çfarë fotografi nuk ju duan për të hapur? 452 00:21:09,470 --> 00:21:12,620 Unë dua për të hapur një skedar që unë do arbitrarisht telefononi students.csv. 453 00:21:12,620 --> 00:21:14,480 Unë mund të telefononi se çdo gjë që unë dua. 454 00:21:14,480 --> 00:21:15,200 >> Dhe pastaj të marrë një guess. 455 00:21:15,200 --> 00:21:18,960 Çfarë e bën Argumenti i dytë për fopen ndoshta do të thotë? 456 00:21:18,960 --> 00:21:21,480 E drejta, w për të shkruaj, mund të r për të lexuar. 457 00:21:21,480 --> 00:21:24,120 Ka një për Append në qoftë se ju dëshironi të shtoni rreshtave dhe jo 458 00:21:24,120 --> 00:21:25,200 prishësh gjithë gjë. 459 00:21:25,200 --> 00:21:28,005 >> Por unë vetëm dua të krijojë këtë fotografi një herë, kështu që unë do të përdorë quote mbyll thonjëzat w. 460 00:21:28,005 --> 00:21:31,880 Dhe unë e di se vetëm nga që ka lexuar dokumentacioni, apo faqja njeri. 461 00:21:31,880 --> 00:21:35,100 Nëse skedari nuk është i pavlefshëm - me fjalë të tjera, në qoftë se asgjë nuk shkoi keq atje - 462 00:21:35,100 --> 00:21:37,820 më lejoni të iterate mbi Nxënësit 0-3. 463 00:21:37,820 --> 00:21:40,410 >> Dhe tani vini re ka diçka ndonjëherë në mënyrë pak më të ndryshme 464 00:21:40,410 --> 00:21:42,110 rreth 41 linja këtu. 465 00:21:42,110 --> 00:21:42,960 Kjo nuk është printf. 466 00:21:42,960 --> 00:21:46,530 Është fprintf për dosjen printf. 467 00:21:46,530 --> 00:21:47,790 Pra, ajo do të shkruaj për file. 468 00:21:47,790 --> 00:21:48,860 Cila fotografi? 469 00:21:48,860 --> 00:21:53,630 Një akrep të cilit ju specifikoni si të argumentit pare. 470 00:21:53,630 --> 00:21:55,940 >> Pastaj ne të specifikoni një turmash. 471 00:21:55,940 --> 00:21:59,660 Pastaj ne të specifikojë se çfarë string ne duam të plug ne për s pare qind, dhe 472 00:21:59,660 --> 00:22:04,320 pastaj një tjetër variabël ose s dyti për qind. 473 00:22:04,320 --> 00:22:06,760 Pastaj ne mbyllë dosjen me Shkrimi. 474 00:22:06,760 --> 00:22:09,380 Se unë të liruar kujtesës si më parë, pse Unë duhet të shkoj përsëri në dhe të shtoni 475 00:22:09,380 --> 00:22:10,540 disa kontrolle for null. 476 00:22:10,540 --> 00:22:12,090 >> Dhe kjo është ajo. 477 00:22:12,090 --> 00:22:16,960 fopen, fprintf, Shkrimi më jep Aftësia për të krijuar fotografi tekst. 478 00:22:16,960 --> 00:22:19,640 Tani, ju do të shihni në grup problemit pesë, e cila përfshin imazhe, ju do të jetë duke përdorur 479 00:22:19,640 --> 00:22:20,990 fotografi binare këtu. 480 00:22:20,990 --> 00:22:24,200 Por në thelb, ideja është e njëjtë, edhe pse funksionet që ju do të 481 00:22:24,200 --> 00:22:28,710 shihni janë pak më ndryshe. 482 00:22:28,710 --> 00:22:32,580 >> Pra, turne shakullinë, por ju do të merrni të gjitha shumë të njohur me dosjen I/O-- 483 00:22:32,580 --> 00:22:34,960 input dhe output - me pset pesë. 484 00:22:34,960 --> 00:22:38,607 Dhe ndonjë pyetje rreth Bazat fillestare këtu? 485 00:22:38,607 --> 00:22:39,857 Po? 486 00:22:39,857 --> 00:22:41,880 487 00:22:41,880 --> 00:22:43,710 >> Çfarë nëse ju përpiqeni për të liruar një vlerë zero? 488 00:22:43,710 --> 00:22:48,880 Unë besoj se, nëse nuk ka marrë një pagesë pak më shumë user-friendly, ju mund të 489 00:22:48,880 --> 00:22:49,890 potencialisht segfault. 490 00:22:49,890 --> 00:22:54,160 Kalimi null ajo është e keqe, sepse unë nuk bëj besoj falas pengon për të kontrolluar për ju, 491 00:22:54,160 --> 00:22:57,330 sepse kjo do të jetë potencialisht një humbje nga koha që ajo të bëjë për veten 492 00:22:57,330 --> 00:22:59,022 të gjithë në botë. 493 00:22:59,022 --> 00:23:00,590 Pyetje e mirë, edhe pse. 494 00:23:00,590 --> 00:23:04,300 >> Të gjithë të drejtë, kështu që ky lloj i merr na në një temë interesante. 495 00:23:04,300 --> 00:23:07,010 Tema e problemit set pesë është mjeko-ligjore. 496 00:23:07,010 --> 00:23:08,420 Të paktën kjo është një pjesë i vendosur problemit. 497 00:23:08,420 --> 00:23:12,030 Mjekësinë Ligjore në përgjithësi i referohet rimëkëmbja e informacionit që mund ose 498 00:23:12,030 --> 00:23:14,110 mund të mos ketë qenë fshirë qëllimisht. 499 00:23:14,110 --> 00:23:18,680 Dhe kështu që unë mendova se do të ju jap një të shpejtë shije të asaj që po ndodh në të vërtetë të gjithë 500 00:23:18,680 --> 00:23:21,230 këtë herë nën individualitet e kompjuterit tuaj. 501 00:23:21,230 --> 00:23:23,960 >> Për shembull, nëse ju keni brenda tuaj laptop apo kompjuter desktop tuaj një 502 00:23:23,960 --> 00:23:28,040 hard drive, kjo është ose një mekanik pajisje që vishet në fakt - 503 00:23:28,040 --> 00:23:31,650 ka gjëra rrethore quajtur platters që duken mjaft të pëlqen ajo që unë 504 00:23:31,650 --> 00:23:34,540 kishte vetëm deri në ekran këtu, edhe pse kjo është gjithnjë e më e vjetër e shkollës. 505 00:23:34,540 --> 00:23:37,370 Kjo është një tri-dhe-a-gjysmë-inç hard drive. 506 00:23:37,370 --> 00:23:40,070 Dhe tre dhe një gjysmë inç i referohet me i sendit kur ju instaloni atë 507 00:23:40,070 --> 00:23:40,890 në një kompjuter. 508 00:23:40,890 --> 00:23:44,890 >> Shumë nga ju djema në laptopë tuaj tani kemi të ngurta-shtet drives, apo SSD, 509 00:23:44,890 --> 00:23:46,260 të cilat nuk kanë lëvizur pjesë. 510 00:23:46,260 --> 00:23:49,170 Ata janë më shumë si dhe më pak si RAM këto pajisje mekanike. 511 00:23:49,170 --> 00:23:51,450 Por idetë janë ende të njëjta, sigurisht si ato që lidhen 512 00:23:51,450 --> 00:23:52,790 Problemi për të ngritur pesë. 513 00:23:52,790 --> 00:23:57,400 >> Dhe në qoftë se ju mendoni rreth tani një hard drive përfaqëson qenë një rrethi, të cilat 514 00:23:57,400 --> 00:23:58,930 Unë do të tërheq si kjo këtu. 515 00:23:58,930 --> 00:24:02,290 Kur keni krijuar një skedar në kompjuterin tuaj, nëse kjo është një SSD, ose në 516 00:24:02,290 --> 00:24:06,610 Në këtë rast, një makinë të vjetër shkollor vështirë, se dosja përbëhet nga bit shumta. 517 00:24:06,610 --> 00:24:10,510 Le të thonë se kjo 0 dhe 1, një bandë e tërë e 0s dhe 1s. 518 00:24:10,510 --> 00:24:11,660 Pra, kjo është e tërë hard time e vështirë. 519 00:24:11,660 --> 00:24:13,225 Kjo është me sa duket një fotografi goxha i madh. 520 00:24:13,225 --> 00:24:18,080 Dhe kjo është përdorur deri 0s dhe 1s në atë pjesë të pjatës fizike. 521 00:24:18,080 --> 00:24:19,750 >> E pra, çfarë është ajo pjesë fizike? 522 00:24:19,750 --> 00:24:25,310 E pra, ajo rezulton se në një hard drive, të paktën i këtij lloji, ka 523 00:24:25,310 --> 00:24:27,340 këto grimca të vogël pak magnetike. 524 00:24:27,340 --> 00:24:32,630 Dhe ata në thelb kanë të Veriut dhe Polet në jug të tyre, kështu që nëse ju 525 00:24:32,630 --> 00:24:35,710 të kthehet një nga ato grimca magnetike këtë mënyrë, ju mund të thonë se kjo është 526 00:24:35,710 --> 00:24:36,720 përfaqëson një 1. 527 00:24:36,720 --> 00:24:39,340 Dhe në qoftë se kjo është me kokë poshtë në jug të në veri, ju mund të thoni se kjo është 528 00:24:39,340 --> 00:24:40,390 përfaqëson një 0. 529 00:24:40,390 --> 00:24:43,660 >> Pra në botën reale fizike, që është se si ju mund të përfaqësojë diçka në 530 00:24:43,660 --> 00:24:45,670 gjendja binar i 0 dhe a 1. 531 00:24:45,670 --> 00:24:46,720 Pra, kjo është e gjitha një skedar është. 532 00:24:46,720 --> 00:24:49,300 Ka një bandë e tërë e magnetike grimcat që janë rruga e tyre ky ose 533 00:24:49,300 --> 00:24:51,920 në këtë mënyrë, duke krijuar modele e 0s dhe 1s. 534 00:24:51,920 --> 00:24:56,760 >> Por kjo rezulton kur ju ruani një skedar, disa informata është ruajtur veçmas. 535 00:24:56,760 --> 00:25:00,000 Pra, kjo është një tabelë të vogël, një directory, kështu që të flasin. 536 00:25:00,000 --> 00:25:05,810 Dhe unë do të thërrasë këtë emër kolonë, dhe Unë do të thërrasë këtë vend kolonës. 537 00:25:05,810 --> 00:25:08,850 >> Dhe unë jam duke shkuar për të thënë, mendoj kjo është e rinisë time. 538 00:25:08,850 --> 00:25:14,050 Resume.doc im është ruajtur në vend, le të themi 123. 539 00:25:14,050 --> 00:25:15,390 Unë shkoj gjithmonë për atë numër. 540 00:25:15,390 --> 00:25:18,810 Por mjafton të themi se ashtu si në RAM, ju mund të merrni një hard drive 541 00:25:18,810 --> 00:25:22,350 kjo është një gigabajt Gigabyte ose 200 ose një terabyte, dhe ju mundeni 542 00:25:22,350 --> 00:25:23,750 Numri i të gjitha bytes. 543 00:25:23,750 --> 00:25:26,480 Ju mund të numërojmë të gjitha chunks e 8 bit. 544 00:25:26,480 --> 00:25:29,030 >> Pra, ne do të themi se kjo është 123 vend. 545 00:25:29,030 --> 00:25:32,070 Pra, kjo brenda Drejtoria e operimit tim Sistemi i kujton se im 546 00:25:32,070 --> 00:25:34,250 rinisë është në vendin 123. 547 00:25:34,250 --> 00:25:36,850 Por, ajo merr interesante kur ju fshini një skedar. 548 00:25:36,850 --> 00:25:37,820 >> Pra, për shembull - 549 00:25:37,820 --> 00:25:40,790 dhe fatmirësisht, shumica e botës ka kapur mbi këtë - çfarë ndodh kur 550 00:25:40,790 --> 00:25:45,040 ju drag një skedar për Mac OS plehra tuaj ose Recycle Bin tuaj të Windows? 551 00:25:45,040 --> 00:25:48,290 552 00:25:48,290 --> 00:25:50,510 Cili është qëllimi i bërë se? 553 00:25:50,510 --> 00:25:53,860 Është e qartë për të hequr qafe e dosjes, por çfarë e bën aktin e zvarritje dhe 554 00:25:53,860 --> 00:25:57,550 rënie në Plehra tuaj ose tuaj Recycle Bin bëni në një kompjuter? 555 00:25:57,550 --> 00:25:59,230 >> Absolutisht asgjë, të vërtetë. 556 00:25:59,230 --> 00:26:00,320 Është tamam si një dosje. 557 00:26:00,320 --> 00:26:01,800 Kjo është një dosje të veçantë, të jetë i sigurt. 558 00:26:01,800 --> 00:26:04,460 Por a është në fakt fshini skedar? 559 00:26:04,460 --> 00:26:06,780 >> E pra, jo, sepse disa nga ju ndoshta kanë qenë si, oh mallkuar, ju nuk e keni 560 00:26:06,780 --> 00:26:07,420 do të thotë për të bërë këtë. 561 00:26:07,420 --> 00:26:09,130 Pra, ju klikoni dy herë Plehra ose Recycle Bin. 562 00:26:09,130 --> 00:26:11,630 Ju keni poked përreth dhe ju keni shëruar skedar vetëm duke zvarritur atë 563 00:26:11,630 --> 00:26:12,110 nga atje. 564 00:26:12,110 --> 00:26:14,420 Pra, në mënyrë të qartë, nuk është domosdoshmërisht fshirjes atë. 565 00:26:14,420 --> 00:26:15,990 >> OK, ju jeni më të zgjuar se kaq. 566 00:26:15,990 --> 00:26:18,860 Ju e dini që vetëm zvarrit atë në Plehra ose Recycle Bin nuk nënkupton 567 00:26:18,860 --> 00:26:19,930 Youre zbrazjes plehra. 568 00:26:19,930 --> 00:26:24,110 Kështu që ju të shkoni deri në menu, dhe ju thoni: Empty Trash ose Empty Recycle Bin. 569 00:26:24,110 --> 00:26:25,360 Atëherë çfarë ndodh? 570 00:26:25,360 --> 00:26:29,070 571 00:26:29,070 --> 00:26:32,530 >> Yeah, kështu që është fshirë më shumë. 572 00:26:32,530 --> 00:26:37,660 Por gjithçka që ndodh është kjo. 573 00:26:37,660 --> 00:26:45,350 Kompjuteri harron ku resume.doc ishte. 574 00:26:45,350 --> 00:26:47,400 >> Por ajo që nuk ka ndryshuar sa duket në foto? 575 00:26:47,400 --> 00:26:51,390 576 00:26:51,390 --> 00:26:55,570 Pjesëzat, 0s dhe 1s që unë pretendojnë janë në faqen e disa aspektit fizik të 577 00:26:55,570 --> 00:26:56,280 hardware. 578 00:26:56,280 --> 00:26:57,110 Ata janë ende atje. 579 00:26:57,110 --> 00:26:58,930 Është vetëm kompjuteri ka harruar atë që ata janë. 580 00:26:58,930 --> 00:27:03,160 >> Pra, ajo është liruar në thelb fotografinë e bit në mënyrë që ata të mund të ripërdoren. 581 00:27:03,160 --> 00:27:06,940 Por jo deri sa ju e krijoni më shumë fotografi, më shumë fotografi dhe fotografi, dhe më shumë do të 582 00:27:06,940 --> 00:27:12,150 probabilistically, ata 0s dhe 1s, këto grimca magnetike, të merrni ripërdoren, 583 00:27:12,150 --> 00:27:16,220 Ana përmbysur ose djathtas lart, për fotografi të tjera, 0s dhe 1s. 584 00:27:16,220 --> 00:27:17,980 >> Pra, ju e keni këtë dritare të kohës. 585 00:27:17,980 --> 00:27:19,860 Dhe kjo nuk është e parashikueshme gjatësia, me të vërtetë. 586 00:27:19,860 --> 00:27:22,240 Kjo varet nga madhësia e hard juaj makinë dhe sa shumë fotografi që ju keni dhe 587 00:27:22,240 --> 00:27:23,490 sa shpejt ju bëni ato të reja. 588 00:27:23,490 --> 00:27:27,050 Por nuk është kjo dritare e kohës gjatë se dosja e cila është ende e përkryer 589 00:27:27,050 --> 00:27:27,770 rikuperueshme. 590 00:27:27,770 --> 00:27:31,050 >> Pra, nëse ju ndonjëherë të përdorni programe si McAfee Norton ose të përpiqen për të rimarrë 591 00:27:31,050 --> 00:27:35,680 Të dhënat, të gjithë ata po bëjnë është duke u përpjekur për të mbulojë këtë direktorium ashtuquajturin ndaj 592 00:27:35,680 --> 00:27:37,340 gjej ku dosja juaj ishte. 593 00:27:37,340 --> 00:27:40,605 Dhe nganjëherë Norton dhe do të thonë, skedë është 93% e rikuperueshme. 594 00:27:40,605 --> 00:27:42,020 E pra, çfarë do të thotë kjo? 595 00:27:42,020 --> 00:27:45,690 Kjo thjesht do të thotë se disa fotografi të tjera përfundoi rastësisht duke përdorur, të themi, 596 00:27:45,690 --> 00:27:48,920 ato jashtë bit e skedarin tuaj origjinal. 597 00:27:48,920 --> 00:27:51,950 >> Pra, çfarë është e përfshirë në të vërtetë në kthimin e të dhënave? 598 00:27:51,950 --> 00:27:55,720 E pra, në qoftë se ju nuk keni diçka si Norton para-instaluar në kompjuterin tuaj, 599 00:27:55,720 --> 00:27:59,510 mirë që ju mund ndonjëherë të bëni është të shikoni në të gjithë hard drive duke kërkuar për 600 00:27:59,510 --> 00:28:00,510 modele të BITS. 601 00:28:00,510 --> 00:28:05,350 Dhe njëra nga temat e problemit set pesë është se ju do të kërkoni 602 00:28:05,350 --> 00:28:09,570 ekuivalenti i një hard drive, një mjeko-ligjore Imazhi i një kartë compact flash nga një 603 00:28:09,570 --> 00:28:13,660 aparat fotografik dixhital, në kërkim për 0s dhe 1s që në mënyrë tipike, me të lartë 604 00:28:13,660 --> 00:28:16,720 probabiliteti, përfaqësojnë fillimin e një imazh JPEG. 605 00:28:16,720 --> 00:28:21,120 >> Dhe ju djema mund të shërohen ato imazhe nga supozuar, në qoftë se unë shoh këtë model të 606 00:28:21,120 --> 00:28:24,380 bit mbi imazhin mjeko-ligjor, me probabilitet të lartë, që shënon 607 00:28:24,380 --> 00:28:25,650 fillimi i nje JPEG. 608 00:28:25,650 --> 00:28:29,520 Dhe në qoftë se unë shoh të njëjtin model përsëri, që ndoshta shënon fillimin e 609 00:28:29,520 --> 00:28:32,440 tjetër JPEG, dhe një tjetër JPEG, JPEG dhe një tjetër. 610 00:28:32,440 --> 00:28:34,970 Dhe kjo është zakonisht si të dhënat e rimëkëmbjes do të punojnë. 611 00:28:34,970 --> 00:28:37,870 Çfarë është e bukur për JPEG është edhe pse format file në vetvete është disi 612 00:28:37,870 --> 00:28:44,400 komplekse, fillimi i çdo të tilla skedë është në të vërtetë mjaft të identifikueshme 613 00:28:44,400 --> 00:28:47,370 dhe të thjeshtë, si ju do të shihni, në qoftë se ju nuk e keni tashmë. 614 00:28:47,370 --> 00:28:50,270 >> Pra, le të marrin një vështrim më të afërt nën telajo individualitet si për të saktësisht se çfarë ka qenë 615 00:28:50,270 --> 00:28:53,360 ndodh, dhe çfarë janë këto 0s dhe 1s janë, për të ju jap pak më shumë një 616 00:28:53,360 --> 00:28:55,330 Konteksti për këtë sfidë të veçantë. 617 00:28:55,330 --> 00:28:55,510 >> [Video playback] 618 00:28:55,510 --> 00:28:58,700 >> -Ku PC tuaj ruan shumicën të dhënat e saj të përhershëm. 619 00:28:58,700 --> 00:29:03,390 Për ta bërë këtë, të dhënat udhëton nga RAM së bashku me sinjalet që tregojnë software 620 00:29:03,390 --> 00:29:06,110 hard drive si për të ruajtur të dhënat. 621 00:29:06,110 --> 00:29:09,410 Qarqet hard drive përkthehet këto sinjale në tension 622 00:29:09,410 --> 00:29:10,870 Luhatjet. 623 00:29:10,870 --> 00:29:14,970 Këto, nga ana tjetër, të kontrolluar hard drive-së lëvizin pjesët, disa prej pak 624 00:29:14,970 --> 00:29:17,910 pjesë lëviz majtas në kompjuter modern. 625 00:29:17,910 --> 00:29:22,130 >> Disa prej sinjaleve të kontrolluar një motor e cila vishet metalike-veshura platters. 626 00:29:22,130 --> 00:29:25,470 Të dhënat tuaja është ruajtur në të vërtetë në këto platters. 627 00:29:25,470 --> 00:29:28,610 Sinjale të tjera të lëvizin lexoni / shkruani kokat për të lexuar ose 628 00:29:28,610 --> 00:29:30,710 shkruani të dhënat mbi platters. 629 00:29:30,710 --> 00:29:35,450 Kjo makineri aq i saktë se një njeri flokët nuk mund edhe të kalojë në mes të 630 00:29:35,450 --> 00:29:37,280 kokat dhe platters tjerrje. 631 00:29:37,280 --> 00:29:40,316 Megjithatë, të gjitha punët në shpejtësi të frikshëm. 632 00:29:40,316 --> 00:29:40,660 >> [VIDEO END rishikim] 633 00:29:40,660 --> 00:29:42,190 >> DAVID Malan: Zoom në pak thellë tani në atë që është 634 00:29:42,190 --> 00:29:44,360 në të vërtetë në ato platters. 635 00:29:44,360 --> 00:29:44,720 >> [Video playback] 636 00:29:44,720 --> 00:29:47,660 >> -Le të shikojmë në atë që ne vetëm pashë në lëvizje të ngadaltë. 637 00:29:47,660 --> 00:29:51,710 Kur një impuls të shkurtër i energjisë elektrike është dërgohen kreut lexoni / shkruani, nëse flips 638 00:29:51,710 --> 00:29:54,650 elektromagnetike në një të vogël për një pjesë të një të dytë. 639 00:29:54,650 --> 00:29:58,970 Magneti krijon një fushë, e cila Ndryshimet polaritetin e një, tiny tiny 640 00:29:58,970 --> 00:30:02,850 pjesa e grimcave metalike që pallto çdo sipërfaqe pjatë. 641 00:30:02,850 --> 00:30:05,940 >> Një seri model i këtyre tiny, akuzuar-up zonat në disk 642 00:30:05,940 --> 00:30:08,470 paraqet një grimë të vetme të Të dhënat në numrin binar 643 00:30:08,470 --> 00:30:10,530 Sistemi i përdorur nga kompjuterat. 644 00:30:10,530 --> 00:30:13,775 Tani, në qoftë se tanishëm është dërguar në një mënyrë përmes lexoni / shkruani kokë, zonën 645 00:30:13,775 --> 00:30:15,970 është polarizuar në një drejtim. 646 00:30:15,970 --> 00:30:17,950 Nëse i tanishëm është dërguar në drejtim të kundërt, 647 00:30:17,950 --> 00:30:19,930 polarizimi është i kundërt. 648 00:30:19,930 --> 00:30:22,370 >> Si ju merrni të dhënat off hard disk? 649 00:30:22,370 --> 00:30:24,090 Vetëm procesin e kundërt. 650 00:30:24,090 --> 00:30:26,550 Pra, kjo është se grimcat në disk që të merrni aktuale në 651 00:30:26,550 --> 00:30:27,960 lexoni / shkruani kreu lëviz. 652 00:30:27,960 --> 00:30:30,700 Vendos së bashku miliona të këtyre Segmente magnetized, dhe 653 00:30:30,700 --> 00:30:32,160 ju keni marrë një skedar. 654 00:30:32,160 --> 00:30:36,060 >> Tani, copat e një skedar të vetëm mund të të shpërndara në të gjithë një makinë të 655 00:30:36,060 --> 00:30:39,970 platters, një lloj si në rrëmujë e letrave në tavolinën tuaj. 656 00:30:39,970 --> 00:30:43,500 Pra, një file të veçantë ekstra mban gjurmët e ku çdo gjë është. 657 00:30:43,500 --> 00:30:45,985 A nuk dëshironi ju kishte diçka si kjo? 658 00:30:45,985 --> 00:30:46,470 >> [VIDEO END rishikim] 659 00:30:46,470 --> 00:30:47,820 >> DAVID Malan: OK, ndoshta jo. 660 00:30:47,820 --> 00:30:52,070 Deri sa shumë prej jush djema u rrit me këto? 661 00:30:52,070 --> 00:30:53,970 OK, kështu që është më pak dhe më pak duart për çdo vit. 662 00:30:53,970 --> 00:30:56,550 Por unë jam i kënaqur që ju jeni të paktën të njohur me ta, sepse kjo dhe tonat 663 00:30:56,550 --> 00:31:00,520 demo libër, fatkeqësisht, po vdes një shumë të vdekje të ngadalshme këtu e familjaritetit. 664 00:31:00,520 --> 00:31:04,010 >> Por kjo është ajo që unë, të paktën, të kthehet në shkollë të lartë, përdorimi përdoret për backups. 665 00:31:04,010 --> 00:31:08,110 Dhe kjo ishte e mahnitshme, sepse ju mund të ruani 1.4 megabajt në 666 00:31:08,110 --> 00:31:08,930 ky disk veçanti. 667 00:31:08,930 --> 00:31:12,260 Dhe ky ishte versioni densitet të lartë, siç tregohet nga HD, e cila ka 668 00:31:12,260 --> 00:31:14,240 që do të thotë para se të videos HD sotme. 669 00:31:14,240 --> 00:31:16,400 >> Standard dendësia ishte 800 kilobytes. 670 00:31:16,400 --> 00:31:18,640 Dhe para se, ka pasur 400-kilobyte disqe. 671 00:31:18,640 --> 00:31:23,120 Dhe para se, ka pasur 5 dhe 1/4 disqe inç, të cilat ishin me të vërtetë floppy, 672 00:31:23,120 --> 00:31:25,680 dhe një pak më të gjerë dhe më shtatlartë përveç këtyre gjërave këtu. 673 00:31:25,680 --> 00:31:29,150 Por ju mund të shikoni në fakt ashtuquajtura Aspekti i këtyre floppy disqe. 674 00:31:29,150 --> 00:31:32,630 >> Dhe funksionalisht, ata janë në fakt goxha i ngjashëm me të në hard drives 675 00:31:32,630 --> 00:31:33,570 paktën ky lloj. 676 00:31:33,570 --> 00:31:37,270 Përsëri, SSD në kompjutera të reja punojnë pak ndryshe. 677 00:31:37,270 --> 00:31:41,530 Por nëse ju lëvizni se tab pak metalik, ju mund të shikoni në fakt një cookie pak, 678 00:31:41,530 --> 00:31:42,560 apo pjatë. 679 00:31:42,560 --> 00:31:43,830 >> Kjo nuk është metalike si ky. 680 00:31:43,830 --> 00:31:46,000 Kjo është në fakt disa të lirë materiale plastike. 681 00:31:46,000 --> 00:31:46,750 Dhe ju mund të lloj të luaj atë. 682 00:31:46,750 --> 00:31:50,310 Dhe ju keni trully fshihen vetëm jashtë disa Numri i bit apo grimcat magnetike 683 00:31:50,310 --> 00:31:51,220 nga ky disk. 684 00:31:51,220 --> 00:31:52,710 >> Pra, fatmirësisht, nuk ka asgjë në të. 685 00:31:52,710 --> 00:31:55,790 Nëse kjo gjë është në mënyrë të - dhe të mbuluar sytë tuaj dhe ato të afërmit tënd - 686 00:31:55,790 --> 00:31:58,865 vetëm ju mund të tërheqë këtë lloj off tërë mill si kjo. 687 00:31:58,865 --> 00:32:01,900 Por ka një pranverë e vogël, kështu që të jetë të vetëdijshëm se me sytë tuaj. 688 00:32:01,900 --> 00:32:03,620 Deri tani ju keni të vërtetë një floppy disk. 689 00:32:03,620 --> 00:32:07,090 >> Dhe çfarë është shquar në lidhje me këtë është se ne aq sa kjo eshte nje 690 00:32:07,090 --> 00:32:10,830 shkallë të vogël përfaqësimi i një më të madhe hard drive, këto gjëra janë super, 691 00:32:10,830 --> 00:32:11,590 thjeshtë super. 692 00:32:11,590 --> 00:32:15,170 Nëse ju çikë pjesën e poshtme të saj, tani që Gjëja që metali është jashtë, dhe zhvishem 693 00:32:15,170 --> 00:32:20,990 ato të hapur, të gjithë nuk është është dy copa të ndjerë dhe e ashtuquajtura floppy disk 694 00:32:20,990 --> 00:32:22,930 me një copë metali në brendësi. 695 00:32:22,930 --> 00:32:25,990 >> Dhe atje shkon gjysma e Përmbajtja Disk tim. 696 00:32:25,990 --> 00:32:27,540 Nuk shkon një tjetër gjysma e tyre. 697 00:32:27,540 --> 00:32:31,375 Por kjo është e gjitha që ishte tjerrje brenda e kaluar në kompjuterin tuaj. 698 00:32:31,375 --> 00:32:35,220 699 00:32:35,220 --> 00:32:38,310 >> Dhe përsëri, për të vënë këtë në perspektivë, sa e madhe është më e juaj 700 00:32:38,310 --> 00:32:39,560 hard drives këto ditë? 701 00:32:39,560 --> 00:32:41,960 702 00:32:41,960 --> 00:32:46,230 500 gigabajt, një terabyte, ndoshta në një kompjuter desktop, 2 terabytes, 3 703 00:32:46,230 --> 00:32:47,630 terabytes, 4 terabajt, e drejtë? 704 00:32:47,630 --> 00:32:52,480 Kjo është një megabyte, të japë ose të marrë, të cilat nuk mund të përshtaten edhe një MP3 tipike 705 00:32:52,480 --> 00:32:55,310 më këto ditë, apo disa muzikë fotografi të ngjashme. 706 00:32:55,310 --> 00:32:59,500 >> Pra një suvenir të vogël për ju sot, dhe gjithashtu për të ndihmuar kontekstualizuar çfarë 707 00:32:59,500 --> 00:33:03,570 Ne do të marrë për të dhënë tani në të problemit të ngritur pesë. 708 00:33:03,570 --> 00:33:04,820 Pra, ata janë tuajat për të mbajtur. 709 00:33:04,820 --> 00:33:07,340 710 00:33:07,340 --> 00:33:13,370 Pra më lejoni të tranzicionit të vendit ku do të jenë të shpenzimet e pset ardhshëm si. 711 00:33:13,370 --> 00:33:18,470 Pra, ne kemi vendosur tani këtë faqe për - oh, një çift i njoftimeve shpejt. 712 00:33:18,470 --> 00:33:21,730 >> Kjo e premte, në qoftë se ju do të donte të bashkohet CS50 për drekë, shkoni në vendin e zakonshëm, 713 00:33:21,730 --> 00:33:23,610 cs50.net/rsvp. 714 00:33:23,610 --> 00:33:25,100 Dhe projekti përfundimtar - 715 00:33:25,100 --> 00:33:28,520 kaq per planin mësimor, ne kemi postuar specifikim projekti përfundimtar tashmë. 716 00:33:28,520 --> 00:33:31,410 Kuptojnë se kjo nuk do të thotë kjo është për shkak veçanërisht shpejti. 717 00:33:31,410 --> 00:33:33,990 Ajo është postuar, me të vërtetë, vetëm për të marrë ju djema të menduarit rreth saj. 718 00:33:33,990 --> 00:33:37,620 Dhe me të vërtetë, një super i rëndësishëm përqindje prej jush do të trajtimin 719 00:33:37,620 --> 00:33:40,780 Projektet përfundimtare mbi materialit që ne nuk kanë marrë edhe në klasë, 720 00:33:40,780 --> 00:33:42,730 por do si fillim si javën e ardhshme. 721 00:33:42,730 --> 00:33:45,530 >> Njoftimi, edhe pse, se spekulim bën thirrje për një komponentë pak të ndryshme të 722 00:33:45,530 --> 00:33:46,190 Projekti përfundimtar. 723 00:33:46,190 --> 00:33:49,590 Pare, ne nje javësh, eshte nje para-propozim, një email goxha i rastësishëm për të 724 00:33:49,590 --> 00:33:52,760 TF juaj të tregoni atij ose asaj që ju jeni menduarit rreth për projektin tuaj, me 725 00:33:52,760 --> 00:33:53,650 asnjë angazhim. 726 00:33:53,650 --> 00:33:56,710 Propozimi do të jetë në veçanti e juaj angazhim, duke thënë, këtu, kjo është ajo që 727 00:33:56,710 --> 00:33:57,770 Unë do të doja të bëjë për projektin tim. 728 00:33:57,770 --> 00:33:58,250 Çfarë mendoni ju? 729 00:33:58,250 --> 00:33:58,650 Tepër i madh? 730 00:33:58,650 --> 00:33:59,145 Shumë e vogël? 731 00:33:59,145 --> 00:34:00,330 A është e menaxhueshme? 732 00:34:00,330 --> 00:34:02,230 Dhe ju shihni spekulim për më shumë detaje. 733 00:34:02,230 --> 00:34:05,060 >> Nja dy javë pasi që është statusi Raporti, i cili është një mënyrë të ngjashme 734 00:34:05,060 --> 00:34:08,260 Email rastësor për TF tuaj për të thënë se sa larg prapa ju jeni në finale juaj 735 00:34:08,260 --> 00:34:12,360 zbatimit të projektit, pasuar nga CS50 Hackathon për të cilat të gjithë 736 00:34:12,360 --> 00:34:17,520 është i ftuar, i cili do të jetë një ngjarje nga 20:00 në një mbrëmje deri 07:00 737 00:34:17,520 --> 00:34:19,150 PD mëngjes. 738 00:34:19,150 --> 00:34:22,560 Pizza, si unë mund të ketë përmendur në javë zero, Wil të shërbehet at 9:00 kryeministrit, 739 00:34:22,560 --> 00:34:24,120 Ushqimi kinez at 1:00 AM. 740 00:34:24,120 --> 00:34:27,929 Dhe në qoftë se ju jeni ende zgjuar at 5:00 AM, ne do të ju merr në IHOP për mëngjes. 741 00:34:27,929 --> 00:34:31,310 >> Kështu eshte Hackathon njëri prej më Përvojat paharrueshëm në klasë. 742 00:34:31,310 --> 00:34:35,290 Pastaj zbatimi është për shkak, dhe atëherë klimatik CS50 Fair. 743 00:34:35,290 --> 00:34:38,070 Më shumë detaje mbi të gjitha këto në javët që do të vijnë. 744 00:34:38,070 --> 00:34:40,739 >> Por le të kthehemi në diçka Shkolla e vjetër - 745 00:34:40,739 --> 00:34:41,920 përsëri, një koleksion. 746 00:34:41,920 --> 00:34:45,040 Pra, një grup ishte e bukur, sepse ajo zgjidh probleme si ne pamë thjesht një 747 00:34:45,040 --> 00:34:49,290 Momenti më parë me strukturat studentore duke marrë një nga pak të kontrollit, nëse ne 748 00:34:49,290 --> 00:34:52,405 duan të kenë një nxënës, student, dy Studenti tre, studenti dot dot dot, 749 00:34:52,405 --> 00:34:54,400 disa numër arbitrar të nxënësve. 750 00:34:54,400 --> 00:34:58,850 >> Pra vargjeve, disa javë më parë, swooped në dhe të zgjidhen të gjitha problemet tona nuk i 751 00:34:58,850 --> 00:35:03,340 duke e ditur paraprakisht se sa shumë gjëra i disa lloj që ne mund të duam. 752 00:35:03,340 --> 00:35:07,390 Dhe ne kemi parë se structs mund të na ndihmojë më tej organizojnë kodin tonë dhe për të mbajtur 753 00:35:07,390 --> 00:35:11,660 Variablat konceptualisht të ngjashme, si një emri dhe një shtëpi, së bashku, kështu që ne 754 00:35:11,660 --> 00:35:15,570 mund të trajtojnë ato si një entitet, brenda të cilat nuk janë copa të vogla. 755 00:35:15,570 --> 00:35:17,810 >> Por vargjeve kanë disa disavantazhe. 756 00:35:17,810 --> 00:35:19,780 Cilat janë disa nga disavantazhet ne kemi hasur 757 00:35:19,780 --> 00:35:22,320 me vargjeve deri tani? 758 00:35:22,320 --> 00:35:23,450 Çfarë është ajo? 759 00:35:23,450 --> 00:35:28,130 Madhësia fikse - kështu që, edhe pse ju mund të të jetë në gjendje të caktojë kujtesës për një 760 00:35:28,130 --> 00:35:32,310 array, pasi ju e dini se sa nxënës keni, sa karaktere keni 761 00:35:32,310 --> 00:35:35,460 nga përdoruesit, një herë ju kam ndarë array, ju keni lloj i pikturuar 762 00:35:35,460 --> 00:35:36,740 veten në një qoshe. 763 00:35:36,740 --> 00:35:40,600 >> Sepse ju nuk mund të futni elemente te rinj në mes të një rrjet. 764 00:35:40,600 --> 00:35:43,660 Ju nuk mund të futni elemente shumë në fund të një rrjet. 765 00:35:43,660 --> 00:35:47,750 Me të vërtetë, ju duhet të mbështetet në krijimin e një grup të tërë të re, siç kemi diskutuar, 766 00:35:47,750 --> 00:35:49,320 kopjimi i vjetër në të ri. 767 00:35:49,320 --> 00:35:52,610 Dhe përsëri, që është dhimbje koke që GetString merret me të për ju. 768 00:35:52,610 --> 00:35:56,170 >> Por përsëri, ju nuk mund edhe të futur diçka në mes të vektorit 769 00:35:56,170 --> 00:35:58,200 nëse norma nuk është e mbushur tërësisht. 770 00:35:58,200 --> 00:36:03,010 Për shembull, në qoftë se ky grup i madhësisë këtu gjashtë ka vetëm pesë gjëra në të, 771 00:36:03,010 --> 00:36:06,080 mirë, ju mund vetëm tack diçka të mbyllet në fund. 772 00:36:06,080 --> 00:36:08,200 Por, çfarë nëse ju doni të futur diçka në mes të 773 00:36:08,200 --> 00:36:11,280 array, edhe pse ajo mund të ketë pesë nga gjashtë gjëra në të? 774 00:36:11,280 --> 00:36:14,250 >> E pra, çfarë bëri që ne bëjmë kur ne kishim të gjithë i vullnetarëve tanë të njeriut në skenë 775 00:36:14,250 --> 00:36:15,110 javëve të fundit? 776 00:36:15,110 --> 00:36:18,710 Nëse ne të kërkuar për të vënë dikë këtu, qoftë këta njerëz se si për të lëvizur këtë 777 00:36:18,710 --> 00:36:22,540 mënyrë, apo këta njerëz se si për të lëvizur këtë mënyrë, dhe kjo u bë e shtrenjtë. 778 00:36:22,540 --> 00:36:26,950 Kalimi i njerëzve në brendësi të një array përfundoi shtuar deri dhe kushton 779 00:36:26,950 --> 00:36:31,240 ne koha, prandaj shumë prej katror ynë n running herë si lloj futje, për 780 00:36:31,240 --> 00:36:32,550 shkallës, ne rastin keq. 781 00:36:32,550 --> 00:36:36,520 Pra vargjeve janë të mëdha, por ju duhet të e di paraprakisht se sa i madh ju doni ta. 782 00:36:36,520 --> 00:36:38,030 >> Pra, OK, këtu është një zgjidhje. 783 00:36:38,030 --> 00:36:43,860 Nëse Unë nuk e di paraprakisht se sa Nxënësit që unë mund të ketë, dhe unë e di një herë 784 00:36:43,860 --> 00:36:47,870 Unë vendos, edhe pse, unë jam i mbërthyer me atë shumë studentë, pse nuk e bëni gjithmonë unë vetëm 785 00:36:47,870 --> 00:36:51,740 ndajë hapësirë ​​dy herë më shumë si unë mund të mendoj se kam nevojë? 786 00:36:51,740 --> 00:36:54,450 A nuk është kjo një zgjidhje e arsyeshme? 787 00:36:54,450 --> 00:36:58,240 >> Realisht, unë nuk mendoj se ne jemi do të ketë nevojë më shumë se 50 lojëra elektronike 788 00:36:58,240 --> 00:37:02,190 në një grup për një klasë të mesme, kështu që le të vetëm të rrumbullakosë më lart. 789 00:37:02,190 --> 00:37:07,040 Unë do të bëjë 100 lojëra elektronike në rrjet tim, vetëm kështu që ne mund të marrë patjetër 790 00:37:07,040 --> 00:37:10,330 Numri i nxënësve që unë pres për të të jetë në disa klasë të mesme. 791 00:37:10,330 --> 00:37:14,320 Pra, pse jo vetëm të rrumbullakosë më lart dhe të ndajë më shumë memorie, zakonisht, për një grup të 792 00:37:14,320 --> 00:37:16,290 se sa ju mendoni se ju mund edhe nevojë? 793 00:37:16,290 --> 00:37:20,190 Ç'është kjo Pushback thjeshtë për këtë ide? 794 00:37:20,190 --> 00:37:21,440 >> Ju jeni vetëm humbur kujtesës. 795 00:37:21,440 --> 00:37:25,350 Fjalë për fjalë çdo program që ju shkruani, atëherë është ndoshta duke përdorur memorie sa dyfishi 796 00:37:25,350 --> 00:37:26,680 ju në të vërtetë nevojë. 797 00:37:26,680 --> 00:37:28,990 Dhe kjo thjesht nuk do të ndjehen si një veçanërisht zgjidhje elegante. 798 00:37:28,990 --> 00:37:31,990 Më tepër, ajo vetëm ul Probabiliteti i një problemi. 799 00:37:31,990 --> 00:37:35,300 Nëse ju ndodh që të ketë një kurs popullore një semestër dhe ju keni 101 800 00:37:35,300 --> 00:37:39,610 Nxënësit, programi juaj është ende rrënjësisht përballet me të njëjtën çështje. 801 00:37:39,610 --> 00:37:44,280 >> Pra, fatmirësisht, ka një zgjidhje për Kjo ad gjitha problemet tona në formë 802 00:37:44,280 --> 00:37:46,790 i strukturave të të dhënave që janë më komplekse se ato 803 00:37:46,790 --> 00:37:47,970 ne kemi parë deri tani. 804 00:37:47,970 --> 00:37:50,530 Kjo, thonë, është një listë e lidhur. 805 00:37:50,530 --> 00:37:51,920 Kjo është një listë të numrave - 806 00:37:51,920 --> 00:37:54,970 9, 17, 22, 26, dhe 34 - 807 00:37:54,970 --> 00:38:00,120 që janë të lidhura së bashku me mënyrën të asaj që unë kam tërhequr si shigjeta. 808 00:38:00,120 --> 00:38:03,580 >> Me fjalë të tjera, nëse kam kërkuar për të përfaqësuar një grup, unë mund të bëj 809 00:38:03,580 --> 00:38:04,910 diçka si kjo. 810 00:38:04,910 --> 00:38:07,310 Dhe unë do të vënë këtë në lart në një moment të vetëm. 811 00:38:07,310 --> 00:38:09,970 Unë mund të bëj - 812 00:38:09,970 --> 00:38:12,520 hello, të gjithë të drejtë. 813 00:38:12,520 --> 00:38:14,470 Stand by. 814 00:38:14,470 --> 00:38:17,360 Kompjuter i ri këtu, e qartë - 815 00:38:17,360 --> 00:38:18,090 Dakord. 816 00:38:18,090 --> 00:38:21,730 >> Pra, nëse unë kam këto numra në rrjet - 817 00:38:21,730 --> 00:38:28,880 9, 17, 22, 26, 24 - 818 00:38:28,880 --> 00:38:30,530 jo domosdoshmërisht në shkallë. 819 00:38:30,530 --> 00:38:33,730 Të gjithë të drejtë, kështu që këtu është array ime - 820 00:38:33,730 --> 00:38:34,980 oh my god. 821 00:38:34,980 --> 00:38:38,700 822 00:38:38,700 --> 00:38:40,395 Të gjithë të drejtë, kështu që këtu është array im. 823 00:38:40,395 --> 00:38:44,110 824 00:38:44,110 --> 00:38:45,050 Oh my god. 825 00:38:45,050 --> 00:38:48,820 >> [Qeshura] 826 00:38:48,820 --> 00:38:49,440 >> DAVID Malan: Pretendon. 827 00:38:49,440 --> 00:38:52,330 Është shumë përpjekje për të shkuar mbrapa dhe të rregullojmë atë, kështu që nuk ka - 828 00:38:52,330 --> 00:38:54,290 26. 829 00:38:54,290 --> 00:38:57,650 Pra, ne kemi këtë rrjet të 9, 17, 22, 26, dhe 34. 830 00:38:57,650 --> 00:39:00,260 Për ata prej jush mund të shihni gabim turpshme Unë bëra vetëm, 831 00:39:00,260 --> 00:39:00,830 ajo është atje. 832 00:39:00,830 --> 00:39:04,490 >> Kështu që unë pretendojnë se kjo është një zgjidhje shumë efikase. 833 00:39:04,490 --> 00:39:07,310 Unë kam shpërndarë si ints shumë si Unë kam nevojë - një, dy, tre, 834 00:39:07,310 --> 00:39:09,100 kater, pese ose gjashte - 835 00:39:09,100 --> 00:39:11,660 dhe unë kam ruajtur pastaj numrat brenda këtij array. 836 00:39:11,660 --> 00:39:15,220 Por mendoj, atëherë, unë dua të futur një vlerë si numri 8? 837 00:39:15,220 --> 00:39:16,100 E pra, ku e bën atë të shkojnë? 838 00:39:16,100 --> 00:39:18,530 Supozoni se unë dua të futur një numër si 20. 839 00:39:18,530 --> 00:39:19,790 E pra, ku e bën atë të shkojnë? 840 00:39:19,790 --> 00:39:23,160 Diku aty në mes, ose numri 35 ka për të shkuar 841 00:39:23,160 --> 00:39:24,010 diku në fund. 842 00:39:24,010 --> 00:39:25,320 Por unë jam i të gjitha jashtë hapësirës. 843 00:39:25,320 --> 00:39:29,120 >> Dhe kështu që kjo është një sfidë themelore i vargjeve që nuk janë zgjidhje. 844 00:39:29,120 --> 00:39:32,280 Unë pohoi një moment më parë, getString zgjidh këtë problem. 845 00:39:32,280 --> 00:39:37,380 Nëse ju doni të futur një numër gjashtë në këtë grup, ajo është të paktën njëri 846 00:39:37,380 --> 00:39:40,090 zgjidhje që ju mund të bien përsëri në për të sigurtë, ashtu si bëjmë me getString? 847 00:39:40,090 --> 00:39:44,340 848 00:39:44,340 --> 00:39:46,030 Çfarë është ajo? 849 00:39:46,030 --> 00:39:48,190 >> E pra, e bëjnë atë më të mëdha është lehtë tha se bëhet. 850 00:39:48,190 --> 00:39:52,810 Ne nuk mund domosdoshmërisht të bëjë koleksion madhe, por çfarë mund të bëjmë? 851 00:39:52,810 --> 00:39:56,570 Bëni një koleksion të ri që është më e madhe, e madhësisë 6, ose ndoshta madhësia 10, nëse duam 852 00:39:56,570 --> 00:40:00,490 për të marrë përpara e gjërave, dhe pastaj të kopjoni array vjetra në të reja, dhe pastaj 853 00:40:00,490 --> 00:40:01,680 çlirojmë array vjetër. 854 00:40:01,680 --> 00:40:05,770 >> Por, çfarë është koha running tani i atij procesi? 855 00:40:05,770 --> 00:40:09,870 Është i madh o n, sepse kopjimi do të ju kushtojë disa njësi 856 00:40:09,870 --> 00:40:13,480 kohë, kështu që nuk është aq ideale, nëse ne duhet të caktojë një grup të ri, i cili do 857 00:40:13,480 --> 00:40:15,610 të konsumojnë dy herë më shumë kujtesës përkohësisht. 858 00:40:15,610 --> 00:40:16,660 Kopje të vjetra në të reja - 859 00:40:16,660 --> 00:40:18,800 Unë do të thotë, kjo është vetëm një dhimbje koke, e cila është, përsëri, pse kemi shkruar 860 00:40:18,800 --> 00:40:19,920 GetString për ju. 861 00:40:19,920 --> 00:40:21,380 >> Pra, çfarë mund të bëjmë në vend? 862 00:40:21,380 --> 00:40:25,000 E pra, çfarë nëse struktura e të dhënave tona në fakt ka boshllëqe në të? 863 00:40:25,000 --> 00:40:30,790 Le të supozojmë se unë relaksoheni qëllimin tim e të pasurit chunks puqur e kujtesës, ku 9 864 00:40:30,790 --> 00:40:34,500 është e drejtë tjetër për të 17, e cila është e drejta e ardhshme në 22, dhe kështu me radhë. 865 00:40:34,500 --> 00:40:39,570 >> Dhe mendoj se 9 mund të jetë mbi këtu në RAM, dhe 17 mund të jetë mbi këtu në RAM, 866 00:40:39,570 --> 00:40:40,990 dhe 22 mund të jetë mbi këtu në RAM. 867 00:40:40,990 --> 00:40:43,610 Me fjalë të tjera, unë nuk kam nevojë t'i madje edhe të kthehet prapa më. 868 00:40:43,610 --> 00:40:47,850 Unë vetëm duhet të disi pe në gjilpërë nëpërmjet secili prej këtyre numrave, ose secili 869 00:40:47,850 --> 00:40:51,010 prej këtyre nyjeve, si ne do të thërrasë rectangles si unë e kam tërhequr atyre, 870 00:40:51,010 --> 00:40:55,670 kujtohet se si për të marrë të fundit të tilla nga nyja e parë. 871 00:40:55,670 --> 00:40:59,940 >> Pra, çfarë është programimi ndërtojnë ne kemi parë mjaft kohët e fundit me të cilën unë 872 00:40:59,940 --> 00:41:03,030 mund të zbatojë atë fije, ose tërhequr këtu, me të cilin unë mund të 873 00:41:03,030 --> 00:41:05,430 zbatojë ato shigjeta? 874 00:41:05,430 --> 00:41:06,500 Pointers Pra, e drejtë? 875 00:41:06,500 --> 00:41:09,560 Nëse unë të mos ndajë vetëm një int, por një nyje - dhe nga 876 00:41:09,560 --> 00:41:10,810 nyje, unë do të thotë vetëm enë. 877 00:41:10,810 --> 00:41:12,900 Dhe me sy, unë do të thotë një drejtkëndësh. 878 00:41:12,900 --> 00:41:16,420 Pra, një nyje me sa duket ka nevojë për të përmbajë dy vlera - 879 00:41:16,420 --> 00:41:21,490 int vetvete, dhe pastaj, duke nënkuptuar si Gjysma e poshtme e drejtkëndësh, 880 00:41:21,490 --> 00:41:23,010 hapësirë ​​të mjaftueshme për një int. 881 00:41:23,010 --> 00:41:26,130 >> Pra, vetëm të menduarit përpara këtu, sa e madhe është kjo nyje, kjo 882 00:41:26,130 --> 00:41:27,170 enë në fjalë? 883 00:41:27,170 --> 00:41:29,250 Sa bytes për Int? 884 00:41:29,250 --> 00:41:31,310 4 Me sa duket, në qoftë se është njëjtë si zakonisht. 885 00:41:31,310 --> 00:41:33,270 Dhe pastaj sa bytes për treguesin? 886 00:41:33,270 --> 00:41:33,650 4. 887 00:41:33,650 --> 00:41:37,940 Pra, kjo enë, ose kjo nyje, është do të jetë një 8-bajt strukturë. 888 00:41:37,940 --> 00:41:41,760 Oh, dhe kjo është një rastësi e lumtur që ne sapo futur këtë nocion të 889 00:41:41,760 --> 00:41:44,400 a struct, ose një strukturë C. 890 00:41:44,400 --> 00:41:48,890 >> Kështu që unë pretendojnë se unë dua të të marrë një hap këtë drejtim më të sofistikuara 891 00:41:48,890 --> 00:41:52,560 zbatimi i një listë të numrave, një listë e lidhur e numrave, kam nevojë për të bërë një 892 00:41:52,560 --> 00:41:56,920 menduarit pak më shumë deri përpara dhe deklarojnë jo vetëm int një, por një struct 893 00:41:56,920 --> 00:41:58,620 që unë do të thërrasë, konvencionalisht këtu, nyje. 894 00:41:58,620 --> 00:42:01,630 Ne mund të telefononi atë diçka që duam, por nyje do të jetë tematike në një shumë 895 00:42:01,630 --> 00:42:03,560 nga gjërat që ne të fillojmë të shikojmë tani. 896 00:42:03,560 --> 00:42:06,480 >> Brendësi të këtij nyjes eshte nje n int. 897 00:42:06,480 --> 00:42:09,350 Dhe pastaj kjo sintaksë, pak pazakontë në shikim të parë - 898 00:42:09,350 --> 00:42:12,960 struct * nyjen e ardhshëm. 899 00:42:12,960 --> 00:42:16,900 E pra në pikturë, çfarë është ajo? 900 00:42:16,900 --> 00:42:21,000 Kjo është gjysma e poshtme e drejtkëndësh që pamë 901 00:42:21,000 --> 00:42:22,730 vetëm një moment më parë. 902 00:42:22,730 --> 00:42:27,600 >> Por, pse jam unë duke thënë struct nyje * në krahasim me vetëm * nyjen? 903 00:42:27,600 --> 00:42:31,370 Sepse në qoftë se treguesi është duke treguar në një tjetër nyje, kjo është vetëm 904 00:42:31,370 --> 00:42:32,760 Adresën e nje nyje. 905 00:42:32,760 --> 00:42:35,630 Kjo është në përputhje me atë që ne kemi diskutuan rreth pointers deri tani. 906 00:42:35,630 --> 00:42:39,690 Por pse, në qoftë se unë pretendojnë se kjo strukturë është quhet nyje, nuk kam për të thënë struct 907 00:42:39,690 --> 00:42:42,660 Nyja brenda këtu? 908 00:42:42,660 --> 00:42:43,190 >> Saktësisht. 909 00:42:43,190 --> 00:42:46,490 Kjo është lloj i një realiteti budallaqe e C. Typedef, kështu që të flasin, nuk ka 910 00:42:46,490 --> 00:42:47,220 ndodhur ende. 911 00:42:47,220 --> 00:42:48,510 C është super literal. 912 00:42:48,510 --> 00:42:51,050 Ajo lexon krye tuaj kod për fund, e majta në të djathtë. 913 00:42:51,050 --> 00:42:54,930 Dhe deri sa ajo godet atë pikëpresje në bottom line, me mend se çfarë nuk 914 00:42:54,930 --> 00:42:57,590 ekzistojë si një lloj të të dhënave? 915 00:42:57,590 --> 00:42:59,060 , Nyja quote mbyll thonjëzat nyje. 916 00:42:59,060 --> 00:43:03,050 >> Por për shkak të fjalëshumë më shumë Deklarata e kam bërë në rreshtin e parë - 917 00:43:03,050 --> 00:43:05,340 Nyja typedef struct - 918 00:43:05,340 --> 00:43:08,790 pasi që arriti i pari, para se të formatimin e teksteve kaçurrel, që është lloj i si 919 00:43:08,790 --> 00:43:11,800 para-edukimin tingëllimë se, ju e di se çfarë, më jep mua një struct 920 00:43:11,800 --> 00:43:13,570 struct quhet nyje. 921 00:43:13,570 --> 00:43:16,270 Sinqerisht, unë nuk pëlqen gjërat e quajtur struct, struct nyje nyje të gjithë 922 00:43:16,270 --> 00:43:17,090 të gjithë kodin tim. 923 00:43:17,090 --> 00:43:20,660 Por unë do ta përdorni atë vetëm një herë, vetëm brenda, kështu që unë mund të në mënyrë efektive 924 00:43:20,660 --> 00:43:25,010 krijuar një lloj reference rrethore jo, një tregues për veten time në vetvete, por një 925 00:43:25,010 --> 00:43:29,400 tregues për një tjetër një lloj identike. 926 00:43:29,400 --> 00:43:32,330 >> Pra, rezulton se në strukturën e të dhënave si ky, ka disa 927 00:43:32,330 --> 00:43:34,470 Operacionet që mund të jenë me interes deri ne Na. 928 00:43:34,470 --> 00:43:37,460 Ne mund të dëshironi të futni në një listë si kjo. 929 00:43:37,460 --> 00:43:39,850 Ne mund të dëshironi të fshini nga një listë si kjo. 930 00:43:39,850 --> 00:43:43,490 Ne mund të dëshironi të kërkoni në listën për një vlera, ose më në përgjithësi, kundërvënie. 931 00:43:43,490 --> 00:43:46,410 Dhe kundërvënie është vetëm një mënyrë e sofistikuar për duke thënë se në fillim të majtë dhe të lëvizë të gjithë 932 00:43:46,410 --> 00:43:47,650 mënyrë të drejtë. 933 00:43:47,650 --> 00:43:52,640 >> Dhe vini re, edhe me këtë pak më shumë Struktura e të dhënave të sofistikuar, le të 934 00:43:52,640 --> 00:43:56,510 mua propozojë që ne mund të marrë hua disa nga idetë e dy javëve të fundit dhe 935 00:43:56,510 --> 00:43:58,410 të zbatojë një funksion të quajtur kërkoni si kjo. 936 00:43:58,410 --> 00:44:01,360 Ajo do të kthehen e vërtetë apo false, duke treguar, po ose 937 00:44:01,360 --> 00:44:03,390 no, n eshte ne lista. 938 00:44:03,390 --> 00:44:05,960 Argumenti i dytë i saj është një akrep te lista vetvete, kështu një 939 00:44:05,960 --> 00:44:07,920 kursori te nje nyje. 940 00:44:07,920 --> 00:44:10,350 >> Të gjitha unë jam duke shkuar për të pastaj të bëni është të deklarojë një ndryshore të përkohshme. 941 00:44:10,350 --> 00:44:12,730 Ne do të thërrasë atë ptr nga Konventa, për treguesin. 942 00:44:12,730 --> 00:44:15,220 Dhe unë të caktojë atë të barabartë për të fillim të listës. 943 00:44:15,220 --> 00:44:16,680 >> Dhe tani vini re lak kohë. 944 00:44:16,680 --> 00:44:20,640 Deri sa akrep nuk është i barabartë të pavlefshëm, unë jam duke shkuar për të kontrolluar. 945 00:44:20,640 --> 00:44:24,520 Është shigjetë pointer n barabartë me n që u miratua në? 946 00:44:24,520 --> 00:44:26,410 Dhe prit një minutë - new copë e sintaksës. 947 00:44:26,410 --> 00:44:29,324 Çfarë është shigjetë të gjithë një e papritur? 948 00:44:29,324 --> 00:44:30,574 Po? 949 00:44:30,574 --> 00:44:34,200 950 00:44:34,200 --> 00:44:34,810 >> Saktësisht. 951 00:44:34,810 --> 00:44:38,860 Pra, ndërsa pak minuta më parë, ne kemi përdorur simbol dot për të hyrë në diçka 952 00:44:38,860 --> 00:44:43,080 brendësi të një struct së, nëse variabli ju keni nuk është struct 953 00:44:43,080 --> 00:44:47,420 në vetvete, por një tregues për një struct, fatmirësisht, një pjesë e sintaksës që 954 00:44:47,420 --> 00:44:48,620 më në fund bën kuptim intuitiv. 955 00:44:48,620 --> 00:44:52,360 Shigjetë do të thotë të ndjekë kursorin, Shigjetat tona si zakonisht do të thotë 956 00:44:52,360 --> 00:44:56,570 në pikturë, dhe të shkojnë në Të dhënat brenda fushë. 957 00:44:56,570 --> 00:44:59,700 Pra, shigjeta është e njëjta gjë si dot, por ju përdorni atë kur ju keni një pointer. 958 00:44:59,700 --> 00:45:05,270 >> Pra, vetëm për radhitje atëherë, në qoftë se fusha n në brendësi të struct quajtur treguesin 959 00:45:05,270 --> 00:45:07,760 barabartë barabartë n, kthehen vërtetë. 960 00:45:07,760 --> 00:45:11,970 Përndryshe, kjo vijë këtu - pointer barabartë treguesin e ardhshëm. 961 00:45:11,970 --> 00:45:17,540 Pra, çfarë është duke bërë këtë, njoftim, është në qoftë se unë jam duke vënë në struct 962 00:45:17,540 --> 00:45:21,430 përmbajnë 9, dhe 9 nuk është numri i Unë jam duke kërkuar për - mendoj unë jam duke kërkuar 963 00:45:21,430 --> 00:45:22,830 për n barabartë me 50 - 964 00:45:22,830 --> 00:45:25,930 Unë jam duke shkuar për të rinovuar treguesin time të përkohshme të mos theksoj në këtë nyje 965 00:45:25,930 --> 00:45:31,190 më, por akrep shigjetë tjetër, e cila është duke shkuar për të vënë mua deri këtu. 966 00:45:31,190 --> 00:45:34,270 >> Tani, kam kuptuar është një shakullinë hyrje. 967 00:45:34,270 --> 00:45:37,380 Të mërkurën, në fakt ne do të bëjmë këtë me disa njerëzve dhe me disa më shumë 968 00:45:37,380 --> 00:45:38,900 Kodi me një ritëm më të ngadaltë. 969 00:45:38,900 --> 00:45:42,990 Por e kuptojnë, ne jemi tani duke e bërë të dhënat tona struktura më komplekse në mënyrë që tonë 970 00:45:42,990 --> 00:45:45,780 Algoritme mund të merrni më të efektshme, e cila do të jetë e nevojshme për të 971 00:45:45,780 --> 00:45:50,500 pset gjashtë, kur ne të ngarkesës në, përsëri, ata 150,000 fjalë, por duhet të bëni kështu 972 00:45:50,500 --> 00:45:55,650 efikase, dhe në mënyrë ideale, të krijojë një program që shkon për përdoruesit tanë jo në 973 00:45:55,650 --> 00:46:00,460 linear, jo në n katror, ​​por në kohë konstante, ne idealin. 974 00:46:00,460 --> 00:46:02,300 >> Ne do të shihemi të mërkurën. 975 00:46:02,300 --> 00:46:07,240 >> Gjuha: Në CS50 ardhshëm, David harron rastin e tij bazë. 976 00:46:07,240 --> 00:46:12,770 >> DAVID Malan: Dhe kjo është se si ju të dërgoni Mesazhet me tekst C. Çfarë - 977 00:46:12,770 --> 00:46:14,020 >> [MESAZH NDRYSHME TEXT NJOFTIMI Sounds] 978 00:46:14,020 --> 00:46:19,734