1 00:00:00,000 --> 00:00:02,310 [Powered by Google Translate] [Java 4, vazhdoi] 2 00:00:02,310 --> 00:00:04,240 [David J. Malan - Universiteti i Harvardit] 3 00:00:04,240 --> 00:00:07,290 [Kjo është CS50. - CS50.TV] 4 00:00:07,290 --> 00:00:11,290 >> Kjo është CS50, dhe kjo është fundi i javës 4. 5 00:00:11,290 --> 00:00:14,030 Pra, disa lajme të mira dhe disa lajme të këqija. 6 00:00:14,030 --> 00:00:26,240 Asnjë leksion të hënën, nuk ka problem vendosur javën e ardhshme. [Studentët brohorisnin] 7 00:00:26,240 --> 00:00:28,680 Ju nuk do të jeni si kjo ku po shkon. 8 00:00:28,680 --> 00:00:31,590 Por ne nuk kemi këtë vend e mërkura e ardhshme, 9 00:00:31,590 --> 00:00:37,740 dhe ka edhe sipas 1 leksionin e premte planin mësimor të premten tjetër në mënyrë që ne mund të qëndrojnë në rrugën e duhur. 10 00:00:37,740 --> 00:00:40,580 Por çdo gjë do të jetë filmuar si zakonisht, në mënyrë që të mos shqetësohen. 11 00:00:40,580 --> 00:00:44,100 >> Dhe në lidhje me quiz 0 çka ne do të bëjmë në drejtim fundi i javës 12 00:00:44,100 --> 00:00:47,140 është postuar në cs50.net kursin e homepage një shpjegim 13 00:00:47,140 --> 00:00:50,160 e çfarë lloj të pritjeve që ju duhet të keni kur është fjala për të quiz e parë. 14 00:00:50,160 --> 00:00:55,100 Në përgjithësi, kjo do të jetë zgjedhja shumta, e vërtetë-false, Përgjigja e shkurtër, probleme të shkurtër kodim. 15 00:00:55,100 --> 00:00:57,360 Ju nuk do të jeni të pritet që të zbatojë ekuivalent 16 00:00:57,360 --> 00:01:00,030 e një problemi që ju do të shihni në një pset, për të cilën ju keni një kompjuter 17 00:01:00,030 --> 00:01:03,240 dhe një Rregullues dhe si, por nuk do të ketë probleme të vogla kodim. 18 00:01:03,240 --> 00:01:06,900 >> Dhe me të vërtetë, udhëzues të mirë për të marrë një kuptim të asaj CS50 kuize janë si 19 00:01:06,900 --> 00:01:09,180 është të shkoni në cs50.net, shkoni në linkun kuize, 20 00:01:09,180 --> 00:01:11,920 dhe ju mund të shihni disa vitet e fundit me vlerë të kuize. 21 00:01:11,920 --> 00:01:16,600 Vetëm të kuptojnë se planprogrami nuk ka qenë gjithmonë e njëjtë me kalimin e viteve. 22 00:01:16,600 --> 00:01:18,510 Ndonjëherë ne shtoni, zbres ndonjëherë, 23 00:01:18,510 --> 00:01:20,670 kështu që nëse ju shihni ndonjë temë në një nga ato të vjetra kuize 24 00:01:20,670 --> 00:01:25,380 që ju nuk kanë idenë se çfarë është duke folur rreth, ajo është ose që ne nuk do ta mbulojë 25 00:01:25,380 --> 00:01:27,210 apo se ne nuk kemi mbuluar atë. 26 00:01:27,210 --> 00:01:31,110 Por në formë të rishikimeve, kjo diel, hënë, dhe të martën 27 00:01:31,110 --> 00:01:34,770 si dhe një kurs-gjerë seancën shqyrtimit në natën e diel - 28 00:01:34,770 --> 00:01:37,500 kohën dhe vendin që do të shpallet në faqen e kursit së - 29 00:01:37,500 --> 00:01:40,120 të gjithë ju keni një mundësi për të shqyrtuar me miqtë e kursit të mësimdhënies 30 00:01:40,120 --> 00:01:44,830 materiale për këtë vit, si në seksionin dhe si një klasë të plotë, 31 00:01:44,830 --> 00:01:48,400 dhe ata që do të filmohet si zakonisht si. 32 00:01:48,400 --> 00:01:53,380 >> Dakord. Kështu, pa zhurmë më tej, një koment mbi të kalojë / dështojnë dhe të shtoni / rënie. 33 00:01:53,380 --> 00:01:57,980 Ju mund të keni parë shënimet e mia natën e kaluar, dhe kjo është me të vërtetë vetëm disa siguri shtesë 34 00:01:57,980 --> 00:02:01,250 se në qoftë se ju jeni në mesin e atyre pak veçanërisht të rehatshme apo diku në mes 35 00:02:01,250 --> 00:02:04,870 dhe ju jeni ndjeheni vetëm pak në mbi kokën tuaj, 36 00:02:04,870 --> 00:02:08,430 të kuptojë se është me të vërtetë mjaft normale, dhe ka një strukturë të mjaftueshme mbështetje në vend, 37 00:02:08,430 --> 00:02:13,530 njëra prej të cilave orarit të punës ishin të përqendruar në përmirësimin e të gjithë për një natë shumë-mail tim të fundit, 38 00:02:13,530 --> 00:02:16,520 dhe të kuptojë gjithashtu se një opsion si të kalojë / dështojnë për një klasë si kjo 39 00:02:16,520 --> 00:02:21,540 vërtet është menduar si një mekanizëm për të marrë buzë off e një kurs si kjo, 40 00:02:21,540 --> 00:02:24,200 kështu që përsëri nëse ju jeni të shpenzimeve ato 10, 15, 20 orë 41 00:02:24,200 --> 00:02:28,160 vetëm duke u përpjekur për të marrë disa pset për të punuar dhe ju e dini që ju jeni 90-95% të rrugës ka 42 00:02:28,160 --> 00:02:32,100 por ju nuk mund të gjeni disa bug mallkuar, në një të kalojë / dështojnë modelin që është lloj rregull. 43 00:02:32,100 --> 00:02:36,230 >> Ideja është që me këtë mekanizëm atëherë ju mund të shkoni të përqëndrohet në psets tuaja të tjera 44 00:02:36,230 --> 00:02:39,530 ose fle apo çfarëdo qoftë ajo është që ju doni të përqëndrohet në. 45 00:02:39,530 --> 00:02:43,390 Pra, të kuptojnë se ju keni deri në këtë e marta vjen - teknikisht të hënën 5, 46 00:02:43,390 --> 00:02:50,840 por kjo është një festë, kështu që kjo e marta vjen - për të kaluar nga të kalojë / dështojnë të kundërta vlerësohet apo zv. 47 00:02:50,840 --> 00:02:54,450 Dhe në qoftë se jeni të vërtetë në greminë dhe janë duke menduar të rënë krejt, 48 00:02:54,450 --> 00:02:56,440 ju lutem kapur mua pas leksionit, ose të më bjerë një shënim. 49 00:02:56,440 --> 00:02:59,990 Ne do të duan të paktën chat para se të ofertës lamtumirë. 50 00:02:59,990 --> 00:03:03,470 Dakord. Pra, kemi filluar duke marrë rrota trajnimit off herë të fundit. 51 00:03:03,470 --> 00:03:06,030 Në veçanti, ne u përqendruam në varg. 52 00:03:06,030 --> 00:03:09,740 String është diçka që është deklaruar në bibliotekë CS50, 53 00:03:09,740 --> 00:03:14,340 veçanërisht në atë dosje të quajtur cs50.h të cilat ne do të fillojmë të shikojmë në këtë javë dhe të ardhshëm. 54 00:03:14,340 --> 00:03:17,250 Por string është me të vërtetë vetëm një thjeshtësim i diçka 55 00:03:17,250 --> 00:03:20,980 kjo është pak më shumë arcanely përshkruar si char *. 56 00:03:20,980 --> 00:03:24,090 Char ne jemi njohur me të. Është vetëm një karakter të vetme. 57 00:03:24,090 --> 00:03:28,010 Por * nga e hëna pėrcaktuara çfarë? >> [Student] A pointer. 58 00:03:28,010 --> 00:03:31,290 Një tregues. Dhe çfarë është një akrep? >> [Student] Një adresë. 59 00:03:31,290 --> 00:03:33,420 >> Është si një adresë, një vend në kujtesë. 60 00:03:33,420 --> 00:03:35,910 Çfarë është një adresë apo vendndodhja ose memorie? 61 00:03:35,910 --> 00:03:40,290 Përsëri, të gjithë prej nesh kanë laptopë me një koncert apo 2 gigabajt të RAM më shumë gjasa këto ditë, 62 00:03:40,290 --> 00:03:44,160 dhe që do të thotë se ju keni një miliardë, ose 2 miliardë bytes vlerë e kujtesës. 63 00:03:44,160 --> 00:03:46,240 Dhe kjo nuk ka rëndësi se çfarë ajo duket si fizikisht, 64 00:03:46,240 --> 00:03:51,220 por të marrë mbi besimin që ju mund të numërojmë të gjitha bytes individuale që laptop tuaj ka - 65 00:03:51,220 --> 00:03:54,580 kjo është byte 0, kjo është bajt 1, kjo është 2 miliard byte - 66 00:03:54,580 --> 00:03:56,100 dhe kjo është pikërisht ajo që e bën një kompjuter. 67 00:03:56,100 --> 00:04:00,030 Kur ju japë hapësirë ​​për një karakter të vetëm, për shembull, 68 00:04:00,030 --> 00:04:02,480 ajo padyshim ka për të jetuar diku në kujtesë të kompjuterit tuaj, 69 00:04:02,480 --> 00:04:05,860 dhe ndoshta kjo është në numrin 12345 byte, 70 00:04:05,860 --> 00:04:08,470 dhe kjo është diku deri këtu në kujtesën e kompjuterit tuaj. 71 00:04:08,470 --> 00:04:12,630 Dhe adresa e atë karakter është 12345. 72 00:04:12,630 --> 00:04:16,140 >> Tani, në javën 0 deri tani deri tani, ne nuk kemi me të vërtetë kujdesej 73 00:04:16,140 --> 00:04:19,170 ku në gjërat e kujtesës janë ruajtur, sepse ne zakonisht përdorin simbolet, 74 00:04:19,170 --> 00:04:22,540 variablave, dhe vargjeve të vërtetë të marrë në të dhënat tona. 75 00:04:22,540 --> 00:04:24,950 Por, nga e hëna dhe të gjithë më sot, ju jeni tani do të ketë 76 00:04:24,950 --> 00:04:27,710 të gjitha aftësitë më ekspresive me programet e shkruar 77 00:04:27,710 --> 00:04:31,330 me të vërtetë të manipuluar kujtesën e një kompjuteri megjithatë ju e gjykojnë të arsyeshme, 78 00:04:31,330 --> 00:04:33,720 për të dy qëllime të mira dhe të këqija, 79 00:04:33,720 --> 00:04:39,620 mete qenë një rezultat shumë të zakonshme në këtë pikë në të mësuar këtë stuff. 80 00:04:39,620 --> 00:04:42,460 Por ajo që e bën atë të vërtetë do të thotë të jetë një * char? 81 00:04:42,460 --> 00:04:46,140 Le të shkojnë përpara përsëri në - dhe ne do të kthehen në Binky siç kishte premtuar sot. 82 00:04:46,140 --> 00:04:48,670 Le të shkojnë në një shembull të thjeshtë këtu. 83 00:04:48,670 --> 00:04:53,060 Më lejoni të ruaj këtë foto si compare.c, dhe më lejoni vetëm të marrë disa kodin template këtu 84 00:04:53,060 --> 00:05:00,490 kështu përfshijnë stdio.h, më lejoni të jap edhe veten përfshijnë cs50.h. Unë do të zoom në deri atje. 85 00:05:00,490 --> 00:05:05,850 Më lejoni të filloni të shkruani int kryesor, kryesor (i pavlefshëm), dhe tani unë dua të bëj diçka si kjo: 86 00:05:05,850 --> 00:05:13,520 printf ("Më jepni një varg:") dhe pastaj unë do të përdorë s String merr getString 87 00:05:13,520 --> 00:05:16,750 për të marrë një varg nga përdoruesit, atëherë unë jam duke shkuar për të kërkojë nga shfrytëzuesi për një tjetër. 88 00:05:16,750 --> 00:05:21,870 ("Më jep edhe një varg:") dhe unë jam duke shkuar për të kërkuar atyre nëpërmjet getString për të marrë atë. 89 00:05:21,870 --> 00:05:27,020 Unë do të thërrasë atë për shkak t t vjen pas s dhe s është një emër i bukur për një varg qoftë se kjo është goxha gjenerike. 90 00:05:27,020 --> 00:05:30,030 Pra getString, dhe tani unë vetëm dua të bëj një kontroll mendje e shëndoshë dhe unë jam duke shkuar për të thënë 91 00:05:30,030 --> 00:05:39,770 në qoftë se (== s t), atëherë unë jam vetëm duke shkuar për të treguar përdorues printf ("Ju shtypen njëjtën gjë \ n"); 92 00:05:39,770 --> 00:05:45,520 tjetër unë jam duke shkuar për të shkruar diçka si ("keni shtypur diçka të ndryshme! \ n") 93 00:05:45,520 --> 00:05:48,460 apo çfarëdo dënimi do të jetë. Pra, diçka si kjo. 94 00:05:48,460 --> 00:05:52,200 Pastaj si zakonisht, unë do të kthehen 0 cilat vetëm treguan se asgjë e keqe nuk ka ndodhur, 95 00:05:52,200 --> 00:05:54,400 dhe unë jam duke shkuar për të shkuar përpara dhe të përpilojnë dhe të drejtuar këtë program. 96 00:05:54,400 --> 00:05:56,540 >> Por të hënën kemi vrapoi këtë program, 97 00:05:56,540 --> 00:06:00,420 dhe në fakt u është thënë se nuk është HELLO HELLO dhe lamtumirë nuk është lamtumirë. 98 00:06:00,420 --> 00:06:03,140 Sjellja ne pamë ishte një pak më shumë si kjo. 99 00:06:03,140 --> 00:06:11,450 Më lejoni të shkoj në directory time burim, zoom në këtu, dhe le të bëjnë krahasimin. 100 00:06:11,450 --> 00:06:14,570 Përpiluar në rregull. Më lejoni të drejtuar krahasuar. Më jepni një varg: HELLO. 101 00:06:14,570 --> 00:06:16,300 Më jepni një tjetër varg: HELLO. 102 00:06:16,300 --> 00:06:18,000 Ju shtypur diçka të ndryshme! 103 00:06:18,000 --> 00:06:22,650 E pra, më lejoni të provoni diçka të thjeshtë si 50, 50. Ju shtypur diçka të ndryshme! 104 00:06:22,650 --> 00:06:25,740 hi, hi. Mënyrë të qartë, diçka po ndodh këtu. 105 00:06:25,740 --> 00:06:28,440 Por ajo që ishte shpjegim se pse? 106 00:06:28,440 --> 00:06:33,850 Me sa duket, linjë 12 është krejtësisht jofunksionale. 107 00:06:34,300 --> 00:06:39,430 Çfarë është problemi themelor këtu? Po. >> [Student] Është krahasuar adresat. 108 00:06:39,430 --> 00:06:41,850 Po, pikërisht. Është e vërtetë krahasuar adresat 109 00:06:41,850 --> 00:06:44,580 në të cilën PËRSHËNDETJE dhe PËRSHËNDETJE janë ruajtur. 110 00:06:44,580 --> 00:06:48,290 Kjo nuk është krahasuar letra PËRSHËNDETJE përsëri dhe përsëri, 111 00:06:48,290 --> 00:06:52,370 sepse ajo që ka ndodhur me të vërtetë, e gjithë kjo kohë ne kemi qenë duke përdorur getString - 112 00:06:52,370 --> 00:06:56,130 Kjo dërrasë e zezë është përsëri kujtesën e kompjuterit tonë, 113 00:06:56,130 --> 00:07:00,100 dhe le të thonë se unë e quaj getString pas shpalljes së një e ndryshueshme. 114 00:07:00,100 --> 00:07:01,930 Çfarë do kujtesën time duken si? 115 00:07:01,930 --> 00:07:07,070 Le të themi se në mënyrë arbitrare s duket si ky. Kjo është një katror. 116 00:07:07,070 --> 00:07:09,040 Dhe shumë e shumë çdo herë që unë kam tërhequr një pjesë të kujtesës në ekran 117 00:07:09,040 --> 00:07:12,860 në qoftë se ajo është 32 bit Unë kam qenë i tërhequr sheshet si kjo, sepse me të vërtetë në aplikim, 118 00:07:12,860 --> 00:07:17,380 një tregues, një adresë, është 32 bit. Është e njëjtë si një int. 119 00:07:17,380 --> 00:07:19,420 Kjo mund të ndryshojnë bazuar në sistemin kompjuterik. 120 00:07:19,420 --> 00:07:24,630 Ata prej jush që janë paksa të njohur me faktin se Mac apo PC tuaj është 64 bit, 121 00:07:24,630 --> 00:07:28,120 që në fakt tregon se kompjuteri juaj është duke përdorur 64-bit pointers, 122 00:07:28,120 --> 00:07:33,730 64-bit adresat, dhe në mesin e upsides e që është kompjuterat tuaj 123 00:07:33,730 --> 00:07:35,560 RAM mund të ketë shumë më tepër se kaluar. 124 00:07:35,560 --> 00:07:39,240 Histori të gjatë të shkurtër, përsëri në ditën kur kompjuterat përdorur vetëm 32 bit 125 00:07:39,240 --> 00:07:42,740 për të përfaqësuar adresa, numri më i madh i bytes ju mund të përfaqësojë 126 00:07:42,740 --> 00:07:46,280 në këtë rast ishte, çfarë nëse ju keni 32 bit? 127 00:07:46,280 --> 00:07:49,590 Pra 4 miliardë, e drejtë, sepse 2 të 32 është 4 miliard dollarë. 128 00:07:49,590 --> 00:07:51,370 Ky numër ka qenë përsëritur në kurs. 129 00:07:51,370 --> 00:07:55,240 >> Pra, nëse ju keni vetem 32 bit, numri më i lartë ju mund të mbështeteni për të është rreth 4 miliardë. 130 00:07:55,240 --> 00:07:58,750 Por kjo ishte një kufizim themelore e kompjuterave deri disa vite më parë 131 00:07:58,750 --> 00:08:01,180 sepse në qoftë se ju mund të mbështeteni aq i lartë sa 4 miliardë, 132 00:08:01,180 --> 00:08:05,270 kjo nuk ka rëndësi nëse ju bleni 8 gigabajt RAM apo edhe 5 gigabajt të RAM; 133 00:08:05,270 --> 00:08:07,780 ju nuk mund të llogarisë që të lartë, kështu që ishte e kotë. 134 00:08:07,780 --> 00:08:11,430 Ju vetëm mund të hyni në të parë 3 ose 4 gigabajt të memories të kompjuterit tuaj. 135 00:08:11,430 --> 00:08:14,410 Kjo është më pak e një çështje tani, dhe ju mund të bleni Pro MacBook dhe Dells 136 00:08:14,410 --> 00:08:17,680 me 8 gigabajt RAM apo edhe më shumë këto ditë. 137 00:08:17,680 --> 00:08:24,100 Por në qoftë se unë ndajë fare thjesht në këtë program një tregues, një tregues i quajtur s, 138 00:08:24,100 --> 00:08:28,370 kjo mund të duket si ky në ekran, sepse me të vërtetë kemi nevojë për të zhvishem përsëri këtë shtresë. 139 00:08:28,370 --> 00:08:33,520 Unë mbaj duke thënë varg, por nga e hëna, string është me të vërtetë * char, 140 00:08:33,520 --> 00:08:35,590 Adresa e disa karakter. 141 00:08:35,590 --> 00:08:39,280 Pra, le të marrin atë rrota trajnimit jashtë, edhe pse ne do të vazhdojmë duke përdorur getString tani për tani. 142 00:08:39,280 --> 00:08:42,600 Kështu që unë kam deklaruar s, dhe kjo është një copë e kujtesës, 32 bit. 143 00:08:42,600 --> 00:08:47,370 Çfarë është këtu në kujtim by default? >> [Përgjigja e padëgjueshme Student] 144 00:08:47,370 --> 00:08:50,040 Çfarë është ajo? >> [Student] Garbage. Garbage. >> Saktësisht. 145 00:08:50,040 --> 00:08:54,610 Nëse ju programues nuk e vënë një vlerë në një variabël, që e di se çfarë është ajo? 146 00:08:54,610 --> 00:08:57,990 Ndonjëherë ju merrni me fat dhe kjo është 0, që është lloj i një vlerë të bukur, të pastër e parazgjedhur, 147 00:08:57,990 --> 00:09:00,310 por siç e pamë hënën, nganjëherë kjo është absurditet të plotë, 148 00:09:00,310 --> 00:09:04,130 disa Numri vërtetë e madhe pozitive apo negative që erdhi nga ku? 149 00:09:05,350 --> 00:09:07,010 Po. >> [Student] Funksioni parë. Po >>. 150 00:09:07,010 --> 00:09:10,170 >> Shpesh funksion që u bëri thirrje më parë për shkak të kujtuar, 151 00:09:10,170 --> 00:09:13,920 si ju telefononi funksionet në kujtesë, ata marrin shumë hapësirë ​​dhe më shumë nga poshtë lart, 152 00:09:13,920 --> 00:09:17,040 dhe sa më shpejt të kthimit funksionit, se kujtesa e merr ripërdoren 153 00:09:17,040 --> 00:09:20,890 nga djalë tjetër që merr quajtur, i cili është duke përdorur fetë tuaj e njëjtë të kujtesës. 154 00:09:20,890 --> 00:09:23,450 Dhe në qoftë se ju keni mbetur atje plehrat, vlerat e mëparshme, 155 00:09:23,450 --> 00:09:28,190 ne mund gabim s si ka disa vlera, kur me të vërtetë ne nuk e kemi vënë asgjë atje. 156 00:09:28,190 --> 00:09:30,960 Pra, RAM tonë në këtë pikë duket si ky. 157 00:09:30,960 --> 00:09:36,030 Tani në anën e djathtë të vijës 7 ne jemi duke bërë thirrje getString, 158 00:09:36,030 --> 00:09:40,150 të cilat ne kemi qenë duke bërë tani për disa javë, por ajo që është me të vërtetë duke bërë getString? 159 00:09:40,150 --> 00:09:43,350 GetString shkruar nga stafi CS50 është pak inteligjent 160 00:09:43,350 --> 00:09:46,500 në atë sa më shpejt si përdorues fillon çelësat shtypni dhe hits Enter, 161 00:09:46,500 --> 00:09:50,010 Shifrat getString se si shumë tasteve bëri hit përdoruesit, 162 00:09:50,010 --> 00:09:53,360 sa karaktere nuk kam nevojë të ndajë RAM për të. 163 00:09:53,360 --> 00:09:55,660 Dhe ku që vjen nga RAM, kush e di? 164 00:09:55,660 --> 00:09:58,930 Është diku në gigabajt 2 kompjuterit tuaj ose gjësend të kujtesës. 165 00:09:58,930 --> 00:10:05,200 Por le të supozojmë se kompjuteri gjeti hapësirë ​​për fjalën HELLO drejtë këtu. 166 00:10:05,200 --> 00:10:08,710 Fjala I shtypur ishte H-E-L-L-O. 167 00:10:08,710 --> 00:10:13,510 Dhe në qoftë se ne barazim këtë si një sekuencë të karaktereve, ne mund të tërheqë atë si kjo. 168 00:10:13,510 --> 00:10:17,860 Por unë duhet të bëni 1 gjë shtesë. Çka i përket në fund të çdo varg në C? 169 00:10:17,860 --> 00:10:20,710 Karakteri null, të cilat kemi shkruar sa \ 0. 170 00:10:20,710 --> 00:10:23,980 Kjo është teknikisht numrin 0, por backslash bën të gjitha më të qartë 171 00:10:23,980 --> 00:10:28,150 se kjo është fjalë për fjalë numri 0, 0 integer; 172 00:10:28,150 --> 00:10:32,440 nuk është, për shembull, të japin kuotën e 0-mbyll thonjëzat që ju mund të shkruani në tastierë. 173 00:10:32,440 --> 00:10:33,940 Pra, kjo është HELLO. 174 00:10:33,940 --> 00:10:36,350 >> Dhe çfarë u themi të hënën se një funksion si getString 175 00:10:36,350 --> 00:10:39,580 është në të vërtetë të gjitha këto kthehen javë? 176 00:10:39,580 --> 00:10:43,960 Kjo nuk është kthyer një varg në vetvete, sepse kjo nuk ka të vërtetë kanë kuptim 177 00:10:43,960 --> 00:10:47,710 sepse vargjet nuk ekzistojnë. Ata janë lloj i një trillim në bibliotekën CS50. 178 00:10:47,710 --> 00:10:51,300 Çfarë është me të vërtetë një varg, më teknikisht? >> [Student] Është karakteri i parë. 179 00:10:51,300 --> 00:10:55,950 Saktësisht. Kjo është mjaft e thjesht adresën e karakterit të parë që përdoruesi shtypen in 180 00:10:55,950 --> 00:11:02,810 Pra, nëse fjala ime PËRSHËNDETJE përfundon atë deri në 123 numri i bajt dhe pastaj në numrin 124 byte, 181 00:11:02,810 --> 00:11:08,320 125, 126, dhe kështu me radhë, në qoftë se unë vetëm numrin bytes mia nga 0 deri në, 182 00:11:08,320 --> 00:11:12,650 ajo me të vërtetë është kthyer getString është fjalë për fjalë 123 numri. 183 00:11:12,650 --> 00:11:19,270 Pra, çfarë merr vënë në s është 123 numri jo, H letër, jo fjala HELLO, 184 00:11:19,270 --> 00:11:23,130 thjesht adresa në të cilën unë mund të gjeni shkronjën e parë të HELLO. 185 00:11:23,130 --> 00:11:26,500 Por kjo nuk duket si e mjaftueshme. I pyetur ju për një varg, jo një karakter. 186 00:11:26,500 --> 00:11:32,970 Pra, si nuk kemi, ose kompjuteri di se Ello lloj i ardhur së bashku me H? 187 00:11:35,760 --> 00:11:37,460 Çfarë është lloj i marrëveshjes kemi? Po. 188 00:11:37,460 --> 00:11:40,100 [Student] Ajo mban thënë vetë për të gjetur karaktere disa më shumë. Pikërisht >>. 189 00:11:40,100 --> 00:11:44,570 >> Nuk është kjo konventë njeriut-kompjuter ku, kur ju jeni që kanë të bëjnë me vargjet, 190 00:11:44,570 --> 00:11:49,410 njohur ndryshe tani si yje char, ju thjesht duhet të kuptoj se 191 00:11:49,410 --> 00:11:54,350 ku në fund të çdo varg në jetën është me të vërtetë vetëm iterating mbi atë me një për lak, 192 00:11:54,350 --> 00:11:57,820 një lak, ndërsa, çfarëdo, në mënyrë që kur ju të gjeni në fund të vargut 193 00:11:57,820 --> 00:12:02,160 tani ju mund të konkludoj nga kjo, oh, fjala ishte tërë HELLO. 194 00:12:02,160 --> 00:12:04,820 Ata prej jush me përvojë programimit paraprake mund të dini në Java 195 00:12:04,820 --> 00:12:09,880 vetëm ju mund të telefononi. gjatësia dhe në gjuhë të tjera që ju mund të telefononi ose gjatësi të ngjashme. 196 00:12:09,880 --> 00:12:14,060 Kjo për shkak se në shumë gjuhë, veçanërisht gjëra të quhet object-oriented gjuhë, 197 00:12:14,060 --> 00:12:18,580 gjatësia e diçka është lloj i encapsulated brenda e copë e të dhënave vetë, 198 00:12:18,580 --> 00:12:24,000 shumë si ne kartat e identitetit encapsulated dhe emrat dhe shtëpitë brenda një studenti të hënën. 199 00:12:24,000 --> 00:12:28,700 Por C është niveli shumë i ulët. Nuk ka objekte apo klasa, në qoftë se ju keni dëgjuar këto terma më parë. 200 00:12:28,700 --> 00:12:31,490 Të gjithë ju duhet të vërtetë është adresa e memories. 201 00:12:31,490 --> 00:12:35,540 Pra, kjo është lloj i modës së vjetër mënyrë të përfaqësojnë të dhënat interesante struktura. 202 00:12:35,540 --> 00:12:38,760 Ju keni një vlerë të fillojë si adresën e karakterit parë 203 00:12:38,760 --> 00:12:42,340 dhe pastaj vetëm disa konventa arbitrare që të gjithë janë dakord që duhet të ndiqni. 204 00:12:42,340 --> 00:12:46,420 Pra, si është gjatësia string zbatohet, nuk kemi propozuar? 205 00:12:46,420 --> 00:12:51,360 Strlen, strlen, që disa prej jush kanë përdorur tashmë disa herë. Është shumë e thjeshtë, apo jo? 206 00:12:51,360 --> 00:12:53,060 Është si 2 rreshta të kodit. 207 00:12:53,060 --> 00:12:56,140 Kjo është shumë e shumë një lak për të disa lloj, ndoshta me një ndryshore shtesë lokale. 208 00:12:56,140 --> 00:13:00,540 Por strlen vetëm ka për të marrë një tregues dhe pastaj të fillojmë të shikojmë për \ 0. 209 00:13:00,540 --> 00:13:05,190 >> Dhe sa më shpejt që ajo e gjen atë, ai mund të kthehet në numrin e përgjithshëm të hapave që ajo është marrë në atë varg. 210 00:13:05,190 --> 00:13:07,150 Pra, ne mund të konkludoj nga kjo ajo që shkon mbi të ardhshëm. 211 00:13:07,150 --> 00:13:11,850 Supozoni atëherë unë deklaroj t si unë kam bërë në përputhje 10. 212 00:13:11,850 --> 00:13:14,280 Kjo është një vlerë e mbeturinave. Kush e di në fillim? 213 00:13:14,280 --> 00:13:18,490 Por, në anën e djathtë të vijës së 10 Unë jam duke bërë thirrje getString përsëri. 214 00:13:18,490 --> 00:13:20,050 Kush e di se ku përfundon kjo? 215 00:13:20,050 --> 00:13:23,830 Le të themi se në mënyrë arbitrare të sistemit operativ gjeti hapësirë ​​për atë mënyrë mbi këtu. 216 00:13:23,830 --> 00:13:28,610 Unë të ndodhë që rastësisht tipit H-E-L-L-O përsëri, 217 00:13:28,610 --> 00:13:31,260 dhe kështu që ne mund të tërheqë të njëjtin lloj foto. 218 00:13:31,260 --> 00:13:34,290 Por fakti që unë kam ribërë këtë foto është e qëllimshme 219 00:13:34,290 --> 00:13:37,720 sepse kjo është një tjetër PËRSHËNDETJE se ky. 220 00:13:37,720 --> 00:13:43,920 Kështu që këtu kjo mund të jetë vendndodhja 456, kjo është 457, dhe kështu me radhë. 221 00:13:43,920 --> 00:13:47,170 Pra, çfarë merr vënë pikëpyetje ku dikur ishte? 222 00:13:47,170 --> 00:13:50,190 Në këtë rast 456. 223 00:13:50,190 --> 00:13:53,540 Ne jemi picking këto numra në mënyrë arbitrare, sepse me të vërtetë, pasi sot 224 00:13:53,540 --> 00:13:57,110 ne nuk jemi duke shkuar për t'u kujdesur aq shumë për atë që adresa e çdo gjë është. 225 00:13:57,110 --> 00:14:02,690 Gjithcka ne lidhje me kujdes është se ne mund të kuptoj se adresa e një pjesë të të dhënave si HELLO. 226 00:14:02,690 --> 00:14:07,100 >> Pra, me të vërtetë ajo që shumica e njerëzve bëjnë në shkenca kompjuterike, kur flasim për adresat e memories 227 00:14:07,100 --> 00:14:10,210 dhe duke folur për pointers në mënyrë specifike, 228 00:14:10,210 --> 00:14:14,220 në vend se të shqetësojë duke parafytyruar se 123 - i cili kujdeset, ku kjo stuff është fakt, 229 00:14:14,220 --> 00:14:17,440 ne vetëm e di se ajo është në një adresë numerike - 230 00:14:17,440 --> 00:14:22,180 ne thjeshtojë botën dhe vetëm thonë se s është vënë në atë karakter 231 00:14:22,180 --> 00:14:25,080 dhe t është treguar në atë karakter. 232 00:14:25,080 --> 00:14:27,430 Dhe fakti se ajo është një shigjetë është mjaft i qëllimshëm 233 00:14:27,430 --> 00:14:31,610 sepse fjalë tani s është treguar në H dhe t është treguar në H tjetër 234 00:14:31,610 --> 00:14:34,720 sepse në fund të ditës, kjo nuk ka rëndësi se çfarë është adresa, 235 00:14:34,720 --> 00:14:40,240 por ka rëndësi që ne kemi aftësinë për të shprehur atë adresë me një copë të kodit. 236 00:14:40,240 --> 00:14:42,730 Ne nuk kemi manipuluar me të vërtetë këto adresa vetëm ende 237 00:14:42,730 --> 00:14:47,770 kështu që ne do të shohim se ku mund ndërkall dhe lloj të bëjnë gjëra me pointers, 238 00:14:47,770 --> 00:14:52,030 por tani për tani në përputhje fjalë për fjalë atë 12 Vlerat jemi krahasuar 239 00:14:52,030 --> 00:14:55,500 sipas kësaj historie në linjë 12? 240 00:14:56,570 --> 00:15:01,290 Ne jemi duke thënë është e barabartë me 123 456 të barabartë? Dhe kjo nuk është patjetër kështu. 241 00:15:01,290 --> 00:15:05,320 Dhe madje edhe konceptuale, ky tregues nuk është aspak e njëjtë si kjo 242 00:15:05,320 --> 00:15:09,500 sepse ju thirri getString dy herë, dhe getString nuk përpiqet të jetë super i zgjuar, 243 00:15:09,500 --> 00:15:12,470 nuk përpiqet për të realizuar, oh, ju typed PËRSHËNDETJE 5 minuta më parë; 244 00:15:12,470 --> 00:15:15,090 më lejoni t'ju jap treguesin e njëjtë si unë ju dha më parë, 245 00:15:15,090 --> 00:15:18,450 ajo vetëm ndan një pjesë të re të memories çdo kohë që ju e quani atë. 246 00:15:18,450 --> 00:15:20,350 >> Deri sa nuk kemi rregullojmë këtë problem? 247 00:15:20,350 --> 00:15:24,270 Nëse unë dua të nivelit të lartë për të krahasuar vargjet Përshëndetje dhe HELLO - 248 00:15:24,270 --> 00:15:28,680 Unë nuk e kujdesit në lidhje me pointers - si do të shkoj në lidhje me duke u përgjigjur në pyetjen, 249 00:15:28,680 --> 00:15:31,980 e përdoruesit të tipit të njëjtën gjë? Çfarë është e nevojshme këtu? Po. 250 00:15:31,980 --> 00:15:35,200 [Student] Përdorni një funksion. >> Kam mund përdorim një funksion nga kutisë. 251 00:15:35,200 --> 00:15:38,170 Unë mund të përdorur një funksion quajtur strcmp, s-T-R-c-m-p, 252 00:15:38,170 --> 00:15:41,190 vetëm versioni i shkurtuar për të thënë string krahasuar. 253 00:15:41,190 --> 00:15:45,070 Dhe në qoftë se ne do të shkojmë në, për shembull, krahasoni 2, e cila është ndër lëmosha e sotme, 254 00:15:45,070 --> 00:15:46,690 Bëj pikërisht këtë. 255 00:15:46,690 --> 00:15:51,750 I mbajtur gjithçka tjetër njëjtë nga linjë 1 më poshtë për 26 apo më shumë, 256 00:15:51,750 --> 00:15:54,360 dhe tani vini re kjo pjesë ka ndryshuar vetëm pak. 257 00:15:54,360 --> 00:15:57,690 Le të injorojë linjë 28 për një moment dhe të përqëndrohet vetëm në këtë. 258 00:15:57,690 --> 00:16:00,410 Çfarë të themi të hënën se str Krahaso bën? 259 00:16:00,410 --> 00:16:05,200 Ajo trajton procesin e marrjes së 2 pointers, s dhe t në këtë rast, 260 00:16:05,200 --> 00:16:08,480 lloj praktikisht vënë gishtin e saj në këto 2 letra, 261 00:16:08,480 --> 00:16:11,530 dhe atë që duhet të bëni është diçka si një lak, ndërsa një për lak ose, 262 00:16:11,530 --> 00:16:16,050 dhe ai thotë se janë këto të njëjta? Nëse është kështu, ajo lëviz gishtat ose pointers përpara. 263 00:16:16,050 --> 00:16:17,970 Janë këto të njëjta, këto të njëjtën gjë, këto të njëjta, 264 00:16:17,970 --> 00:16:22,710 këto të njëjta, këto të njëjtën gjë? Dhe ooh, unë jam në fund të vargut në të dy s dhe t. 265 00:16:22,710 --> 00:16:26,780 Unë nuk e kam gjetur ndonjë kundërthënie. Po, këto vargje janë të njëjta. 266 00:16:26,780 --> 00:16:31,940 Dhe çfarë bën str krahasoni kthimin në qoftë se 2 vargjet janë të njëjta, me sa duket? Zero. 267 00:16:31,940 --> 00:16:35,900 Pra, 0 është e mirë në këtë rast, sepse në qoftë se ajo kthehet -1 ose +1, 268 00:16:35,900 --> 00:16:40,560 që do të thotë se është vetëm ndodh që të vijnë para apo pas t alfabetike t. 269 00:16:40,560 --> 00:16:43,760 Dhe pse do që të jetë e dobishme që të ketë një funksion që ju tregon që vargu vjen para 270 00:16:43,760 --> 00:16:46,720 ose pas në një fjalor? 271 00:16:46,720 --> 00:16:48,740 [Student] kërkuar. Kërkimi >> dhe klasifikim. 272 00:16:48,740 --> 00:16:51,730 >> Kështu që ju mund të bëni gjëra të tilla si kërkim binar apo lloj lloj flluskë apo bashkojë 273 00:16:51,730 --> 00:16:53,230 ku ju keni për të krahasuar gjëra. 274 00:16:53,230 --> 00:16:56,420 Deri tani ne kemi lloj të prerë disa qoshe dhe bisedoi vetëm për klasifikim 275 00:16:56,420 --> 00:16:59,430 në kontekstin e numrave për shkak se ajo është e bukur dhe e lehtë për të folur rreth, 276 00:16:59,430 --> 00:17:02,430 por ju me siguri mund të krahasohen vargjet, mollë dhe banane, 277 00:17:02,430 --> 00:17:05,349 sepse në qoftë se Apple është i njohur për të ardhur para banane, në mënyrë të ngjashme, 278 00:17:05,349 --> 00:17:09,319 ju mund të lëvizin nëpër vargjet në kujtesë vetëm si Rob bëri me lloj bashkojë në video 279 00:17:09,319 --> 00:17:15,880 dhe ne e bëmë këtu në skenë me lloj lloj përzgjedhjes, futje, dhe lloj flluskë. 280 00:17:15,880 --> 00:17:18,710 Pra, ku tjetër mund të marrim këtë? Le të provoni këtë. 281 00:17:18,710 --> 00:17:23,980 Lloj Le të harrojmë se mësim për një moment dhe të përpiqemi tani dhe kopje 1.c të bëjë në vijim. 282 00:17:23,980 --> 00:17:26,800 21 Në përputhje unë jam duke thënë diçka të shtypura, 283 00:17:26,800 --> 00:17:28,520 atëherë unë jam duke marrë një varg nga përdoruesit, 284 00:17:28,520 --> 00:17:30,690 atëherë unë jam kontrolluar këtë. 285 00:17:30,690 --> 00:17:33,620 Ne nuk kemi marrë vërtetë në këtë zakon, por tani le të bëjmë këtë. 286 00:17:33,620 --> 00:17:40,990 Le të vërtetë zhvishem mbrapa shtresë këtë. Kjo është me të vërtetë * char. Ky djalë është me të vërtetë * char. 287 00:17:40,990 --> 00:17:45,690 Pra, çfarë do të thotë për të kontrolluar nëse s == NULL? 288 00:17:45,690 --> 00:17:48,380 Ajo rezulton se kur ju telefononi një funksion si getString 289 00:17:48,380 --> 00:17:51,540 ose më në përgjithësi kërkoni vetëm një kompjuter për të ju japin disa kujtesës, 290 00:17:51,540 --> 00:17:53,030 diçka mund të shkojnë keq. 291 00:17:53,030 --> 00:17:56,630 Ju mund të jetë i çmendur dhe të kërkojë kompjuterin për një terabyte e kujtesës 292 00:17:56,630 --> 00:18:01,780 duke kërkuar për triliona bytes e kujtesës që thjesht nuk ekzistojnë në kompjuter, 293 00:18:01,780 --> 00:18:05,130 por funksionet getString dhe të tjera kanë nevojë për disa mënyra të yelling në ju 294 00:18:05,130 --> 00:18:06,820 në qoftë se ju keni kërkuar shumë. 295 00:18:06,820 --> 00:18:10,450 Dhe mënyra getString e bën këtë është në qoftë se ju keni kërkuar për memorie më shumë 296 00:18:10,450 --> 00:18:14,250 se është në dispozicion në kompjuter, edhe në qoftë se është super, super probabilitet të ulët 297 00:18:14,250 --> 00:18:17,730 sepse askush prej nesh nuk do të shkruani një trilion karaktere dhe pastaj goditi Enter, 298 00:18:17,730 --> 00:18:21,980 por probabiliteti i ulët edhe pse ajo mund të jetë, unë ende dua të shikoni për atë vetëm në rast se, 299 00:18:21,980 --> 00:18:26,120 dhe vlera e veçantë që getString, përgjigje, dhe funksionet e tjera kthimit 300 00:18:26,120 --> 00:18:30,630 nëse diçka ka shkuar keq është NULL në të gjitha shkronja kapitale. 301 00:18:30,630 --> 00:18:36,520 >> Dhe çfarë është NULL? NULL ndodh pikërisht kështu që të përfaqësojë një akrep. Kjo është adresa e kujtesës 0. 302 00:18:36,520 --> 00:18:40,800 Bota vendosi që në mënyrë arbitrare, në qoftë se kjo është kujtesa e kompjuterit tim - ju e dini se çfarë? - 303 00:18:40,800 --> 00:18:46,260 ne jemi duke shkuar për të vjedhur vetëm 1 byte memorie të çdo kompjuter, dhe kjo është lokacioni 0. 304 00:18:46,260 --> 00:18:49,560 Ne jemi duke shkuar për të dhënë atë një pseudonim e NULL, dhe ne jemi duke shkuar për premtoj 305 00:18:49,560 --> 00:18:52,660 se ne kurrë nuk do të vërtetë të vënë të dhënat reale atje 306 00:18:52,660 --> 00:18:56,770 sepse ne vetëm arbitrarisht nevojë për një vlerë të veçantë, 0, NULL, aka 307 00:18:56,770 --> 00:19:00,230 kështu që ne mund të çirrem në përdoruesit, nëse diçka shkon keq. 308 00:19:00,230 --> 00:19:03,590 Përndryshe ju nuk mund të di do të thotë 0 vënë diçka këtu 309 00:19:03,590 --> 00:19:05,490 ose e bën atë të thotë diçka shkoi keq? 310 00:19:05,490 --> 00:19:09,190 Ne duhet të gjithë janë dakord se asgjë nuk do të thotë NULL u kthye, 311 00:19:09,190 --> 00:19:11,700 ka adresë aktuale u kthye. 312 00:19:11,700 --> 00:19:15,210 Tani, këtu unë jam vetëm miratimin konventën e mia njerëzore të kthehem nga 1 kryesore 313 00:19:15,210 --> 00:19:17,040 nëse diçka shkon keq. 314 00:19:17,040 --> 00:19:20,650 Kjo është për shkak se Konventa kryesor i kthimit është që Kthen 0 nëqoftëse mirë, 315 00:19:20,650 --> 00:19:22,990 1 ose disa vlera të tjera, nëse e keqe. 316 00:19:22,990 --> 00:19:28,200 Por getString dhe çdo funksion që merret në kthimin e kujtesës NULL nëse diçka shkon keq. 317 00:19:28,200 --> 00:19:33,480 >> Rregull. Kështu për fat të keq, linja 27, e thjeshtë super edhe pse ajo është plotësisht dështon të kopjoni string. 318 00:19:33,480 --> 00:19:35,740 Pse? Ne mund të shohim këtë si më poshtë. 319 00:19:35,740 --> 00:19:40,120 Unë jam duke pretenduar në linjë 27 të bërë një kopje të ve dhe duke e quajtur atë t. 320 00:19:40,120 --> 00:19:45,790 Kështu që unë nuk jam duke kërkuar përdorues për 2 vargjet këtë kohë, unë jam vetëm duke thënë se vlera në S 321 00:19:45,790 --> 00:19:47,870 duhet të vihet në t si. 322 00:19:47,870 --> 00:19:52,890 Deri tani vetëm për të demonstruar se si kjo është e thyer, në përputhje 29 e tutje çfarë jam unë duke bërë? 323 00:19:52,890 --> 00:19:56,980 Së pari unë jam duke kontrolluar, nëse gjatësia e t është më e madhe se 0. 324 00:19:56,980 --> 00:19:59,330 Ka disa string atje. Përdorues shtypur diçka in 325 00:19:59,330 --> 00:20:03,410 Çfarë është duke bërë 32 linja, me sa duket? 326 00:20:03,410 --> 00:20:08,910 [Përgjigja e padëgjueshme Student] E drejta. >> Ju mund të lloj të konkludoj atë nga ajo që kam thënë se është duke bërë. 327 00:20:08,910 --> 00:20:13,200 Por teknikisht, çfarë është kjo duke bërë? t [0] përfaqëson çfarë? 328 00:20:13,200 --> 00:20:15,140 [Student] Karakteri 0. >> [Malan] Karakteri 0. 329 00:20:15,140 --> 00:20:19,620 Ose, më shumë njeriut-si, karakteri i parë në t, çfarëdo që është, H ndoshta në këtë rast. 330 00:20:19,620 --> 00:20:24,990 Dhe toupper bën atë që thotë. Ajo capitalizes karakterin 0 t dhe ajo ndryshon atë. 331 00:20:24,990 --> 00:20:28,430 Pra, kjo do të thotë të marrë karakterin 0 t, e bëjnë atë uppercase, 332 00:20:28,430 --> 00:20:30,320 dhe e vënë atë përsëri në atë vend të njëjtë. 333 00:20:30,320 --> 00:20:35,540 Pra, nëse unë lloji përshëndetje në Fjala, kjo duhet të ndryshojë h vogle me një kapital H. 334 00:20:35,540 --> 00:20:41,400 Por problemi është se në linjat 35 dhe 36 atë që unë jam gati të bëni është të shtypura jashtë për të na s dhe t. 335 00:20:41,400 --> 00:20:43,120 Dhe çfarë është fetë juaj? 336 00:20:43,120 --> 00:20:47,250 Çfarë jam unë në fakt duke shkuar për të parë nëse unë shtypur në përshëndetje në të gjitha Fjala? 337 00:20:47,250 --> 00:20:52,280 Çfarë do të merrni shtypur? >> [Përgjigja e padëgjueshme Studenti] >> Çfarë është ajo? 338 00:20:52,280 --> 00:20:58,360 [Student] Big H dhe pjesa tjetër e vogël. H >> mëdha dhe pjesa tjetër e vogël për të cilin, s apo t? 339 00:20:58,360 --> 00:21:03,170 [Student] Të dyja. Të dyja >>. Saktësisht. Pra, le të shohim se çfarë po ndodh këtu. 340 00:21:03,170 --> 00:21:08,380 >> Më lejoni të shkoj përpara dhe të përpilojnë këtë. Kjo është copy1, prandaj sigurohuni copy1. Dakord. 341 00:21:08,380 --> 00:21:14,840 Zoom in lejoni të shkojnë përpara dhe për të drejtuar copy1, Enter, Thuaj diçka: hello në Fjala. 342 00:21:14,840 --> 00:21:19,570 Ajo kapitalizuar kopje, por ajo duket kapitalizohen origjinal, si edhe, 343 00:21:19,570 --> 00:21:22,070 sepse ajo që tani ndodh në këtë histori? 344 00:21:22,070 --> 00:21:27,030 Në linjë 27 Unë në fakt nuk duket të jetë kopjimi string, 345 00:21:27,030 --> 00:21:30,450 por edhe pse ju mund të keni shpresuar intuitive që të jetë rasti, 346 00:21:30,450 --> 00:21:33,680 në qoftë se ju mendoni për këtë foto, ajo me të vërtetë kam bërë? 347 00:21:33,680 --> 00:21:35,410 Gjysma e foto është e njëjtë. 348 00:21:35,410 --> 00:21:39,390 Kështu që le të rrokulliset prapa në kohë në mënyrë që t ende nuk ekziston në histori. 349 00:21:39,390 --> 00:21:43,160 S mund të ekzistojë në histori, por le me të vogla përshëndetje këtë kohë. 350 00:21:43,160 --> 00:21:46,710 Pra më lejoni të zgjidhur atë që unë shtypur në fakt in 351 00:21:46,710 --> 00:21:51,280 Në këtë rast këtu kemi h-e-l-L-o. 352 00:21:51,280 --> 00:21:58,050 Ne do të tërheqë atë si një sekuencë të karaktereve, vendos linja e mia këtu dhe ndarës 0 \ tim. 353 00:21:58,050 --> 00:22:05,980 Pra, kjo është ajo ku ne jemi sa më shpejt të vijë 1 deri 24-ish, japin ose të marrë, e kanë ekzekutuar. 354 00:22:05,980 --> 00:22:07,800 Kjo është fotografia e kujtesës sime. 355 00:22:07,800 --> 00:22:10,800 Kur të shkoj në linjë 27, çfarë ndodh? 356 00:22:10,800 --> 00:22:14,730 Ashtu si më parë, kam marrë një tregues, të cilën unë do të të nxjerrë në këtë shesh. 357 00:22:14,730 --> 00:22:19,740 Është quajtur t. Dhe çfarë është vlera e tij by default? Kush e di? Disa vlera mbeturina. 358 00:22:19,740 --> 00:22:22,060 >> Kështu që unë do abstrakte që larg si një pikëpyetje. 359 00:22:22,060 --> 00:22:27,670 Dhe sa më shpejt të djathtë anën e linjës 27 ekzekuton, çfarë jam unë vënë në brendësi të t? 360 00:22:27,670 --> 00:22:30,770 E njëjta gjë që është në s. 361 00:22:30,770 --> 00:22:34,120 Pra, nëse ne për një çast të hequr këtë abstraksion e shigjetës dhe ne themi, 362 00:22:34,120 --> 00:22:40,330 oh, kjo është ngarkesa e kujtesës adresa 123, kur ju thoni t merr s, pikëpresje, 363 00:22:40,330 --> 00:22:42,700 ju jeni fjalë për fjalë vënë 123 here. 364 00:22:42,700 --> 00:22:45,200 Tani në qoftë se ne lloj të thjeshtojë botën tonë përsëri me fotografi, 365 00:22:45,200 --> 00:22:48,750 atë që keni bërë me të vërtetë është shtuar vetëm një shigjetë në botën tuaj 366 00:22:48,750 --> 00:22:52,910 që është treguar nga t në vargun e njëjtë e saktë. 367 00:22:52,910 --> 00:22:59,730 Pra, kur në pajtim 31 dhe 32 Unë në fakt shkoni në lidhje me ndryshimin t [0] 368 00:22:59,730 --> 00:23:05,580 çfarë është t [0] duket sinonim me tani? s [0] 369 00:23:05,580 --> 00:23:07,030 Pra, kjo është gjithçka që po ndodh. 370 00:23:07,030 --> 00:23:09,900 Dhe, edhe pse ky lloj i ndjen një nivel pak më të ulët dhe misterioze 371 00:23:09,900 --> 00:23:12,760 dhe ky lloj ndjehet si ndoshta kjo duhet intuitive kanë punuar vetëm - 372 00:23:12,760 --> 00:23:15,410 Unë kam bërë kopje të gjërave para dhe vetëm ajo ka punuar - 373 00:23:15,410 --> 00:23:18,590 në qoftë se ju në të vërtetë mendoni se çka me të vërtetë është një varg, kjo është një char *. 374 00:23:18,590 --> 00:23:21,700 E pra, çfarë është kjo? Kjo është adresa e disa karakter. 375 00:23:21,700 --> 00:23:24,930 Atëherë ndoshta kjo e bën më shumë kuptim se kur ju të përpiqet të bëjë diçka 376 00:23:24,930 --> 00:23:29,220 super në dukje e thjeshtë si kjo, të gjithë ju jeni bërë është kopjuar një adresë memorie. 377 00:23:29,220 --> 00:23:32,530 Ju nuk jeni në të vërtetë duke bërë diçka me vargun vetë. 378 00:23:32,530 --> 00:23:37,500 Pra, edhe në qoftë se ju nuk keni ide se si ju do të zgjidhë këtë problem në kod, 379 00:23:37,500 --> 00:23:45,080 nivelit të lartë, konceptualisht, çfarë ne duhet të bëjmë në mënyrë që ta kopje e vërtetë e ve, me sa duket? 380 00:23:46,670 --> 00:23:48,820 Po. >> [Student] T'i jepte një vendndodhje të re? Pikërisht >>. 381 00:23:48,820 --> 00:23:50,800 >> Ne duhet të japim t një vend krejt të re. 382 00:23:50,800 --> 00:23:55,230 Ne kemi nevojë për të krijuar disi një botë në të cilën ne të marrë një pjesë të re të memories, 383 00:23:55,230 --> 00:24:00,090 të cilat vetëm për hir të qartësisë unë do të nxjerrë të drejtë poshtë këtë, por kjo nuk duhet të jetë atje. 384 00:24:00,090 --> 00:24:04,880 Por ajo duhet të jetë të njëjtën madhësi, kështu që unë do të nxjerrë këto linja vertikale në të njëjtin vend. 385 00:24:04,880 --> 00:24:09,720 Kjo është në rregull në qoftë se kjo është e gjitha mbeturinave fillimisht. Kush e di se çfarë ishte aty? 386 00:24:09,720 --> 00:24:13,850 Por hapi i 1 do të duhet të japin mua si kujtim sa kam nevojë 387 00:24:13,850 --> 00:24:18,630 të përshtaten një kopje të hello, atëherë të kuptoj se si për të kopjuar h këtu, të e këtu, 388 00:24:18,630 --> 00:24:20,390 l këtu dhe kështu me radhë. 389 00:24:20,390 --> 00:24:24,880 Por kjo tashmë duhet të mendojnë pak më qartë edhe në qoftë se disa nga detajet janë ende abstrakt. 390 00:24:24,880 --> 00:24:28,690 Për të kopjuar këtë varg në këtë, kjo është vetëm një për lak ose një lak, ndërsa 391 00:24:28,690 --> 00:24:31,580 apo diçka me të cilën ju keni bërë të gjitha më të njohur. 392 00:24:31,580 --> 00:24:35,970 Pra, le të provoni këtë. Më lejoni të shkoj në copy2.c. 393 00:24:35,970 --> 00:24:43,270 Në copy2.c ne kemi gati programin e njëjtë me përjashtim të linjës 27. 394 00:24:43,270 --> 00:24:47,260 Ajo duket një kompleks pak, por në qoftë se ne e thyer atë copë me copë, 395 00:24:47,260 --> 00:24:48,950 majtë anë është e njëjtë. 396 00:24:48,950 --> 00:24:52,790 Char * t krijon këtë gjë në kujtesë, megjithëse me një pikëpyetje 397 00:24:52,790 --> 00:24:54,680 sepse ne nuk kemi ide se çfarë është atje by default. 398 00:24:54,680 --> 00:24:57,920 Në anën e djathtë ne jemi tani duke futur një funksion të ri, malloc, 399 00:24:57,920 --> 00:25:00,640 për memorie ndajë, jepni kujtesës, 400 00:25:00,640 --> 00:25:06,900 dhe kjo me sa duket merr sa argumente, sa shumë gjëra brenda kllapa? 401 00:25:09,660 --> 00:25:12,130 Kam dëgjuar murmuritjet e 1 dhe 2, por kjo është vetëm 1. 402 00:25:12,130 --> 00:25:15,320 Nuk ka asnjë presje, që do të thotë se ka vetëm 1 gjë brenda kllapa. 403 00:25:15,320 --> 00:25:17,720 Edhe pse nuk ka kllapa të tjera, më lejoni të theksoj 404 00:25:17,720 --> 00:25:21,460 çfarë është brenda e kllapa outermost, dhe kjo është kjo shprehje: 405 00:25:21,460 --> 00:25:25,880 (Strlen (s) + 1) * sizeof (char). 406 00:25:25,880 --> 00:25:29,190 Pra, nëse ne fakt mendoj se kjo anë, ky është thënë jepni gjatësinë e s. 407 00:25:29,190 --> 00:25:34,440 Pse jam unë, edhe pse, duke shtuar 1 mbi gjatësinë? >> [Përgjigja e padëgjueshme Student] 408 00:25:34,440 --> 00:25:40,200 Saktësisht. Ne kemi nevojë për hapësirë ​​për këtë djalë në bisht, karakter i gjashtë që nuk ka asnjë kuptim anglisht 409 00:25:40,200 --> 00:25:42,250 por nuk kanë domethënie të veçantë programatike. 410 00:25:42,250 --> 00:25:46,800 >> Pra, ne kemi nevojë për një + 1 per shkak se strlen kthimit pritje njerëzore të gjatësisë, 411 00:25:46,800 --> 00:25:50,890 Përshëndetje ose 5, kjo nuk ju japin karakter shtesë null. 412 00:25:50,890 --> 00:25:52,980 Kështu që unë shtuar manualisht këtë me + 1. 413 00:25:52,980 --> 00:25:56,060 Dhe pastaj kjo, madhësia e * (char), ne nuk e kemi parë këtë më parë. 414 00:25:56,060 --> 00:25:57,480 Kjo nuk është teknikisht një funksion. 415 00:25:57,480 --> 00:26:04,150 Kjo është një fjalen veçantë që vetëm ju tregon se çfarë madhësia është i disa lloj të dhënave në një kompjuter 416 00:26:04,150 --> 00:26:06,980 sepse në të vërtetë, disa prej nesh kanë 32-bit kompjutera. 417 00:26:06,980 --> 00:26:10,900 Unë kam një kompjuter mjaft të vjetër në shtëpi, dhe ajo vetëm përdor 32 bit për të përfaqësuar pointers. 418 00:26:10,900 --> 00:26:13,900 Dhe kështu që nëse kam bërë madhësinë e një lloji të dhënave, mund të jetë 32 bit. 419 00:26:13,900 --> 00:26:18,300 Por në qoftë se unë jam duke përdorur kompjuterin tim të ri dashuroj, unë mund të kthehet një vlerë prej 64 bit 420 00:26:18,300 --> 00:26:20,510 për diçka si një adresë. 421 00:26:20,510 --> 00:26:25,400 Pra, në këtë rast, vetëm të jetë i sigurt super, ne nuk jemi duke shkuar për diçka të vështirë koduar si - 422 00:26:25,400 --> 00:26:28,740 mirë, çfarë është madhësia e një char sipas asaj që kemi thënë deri më tani? 423 00:26:28,740 --> 00:26:34,450 Ne kemi shumë e shumë të thënë gojarisht se është 1 byte, dhe kjo është shumë e shumë të vërtetë në të gjithë bordit. 424 00:26:34,450 --> 00:26:37,000 Por përsëri, supozime priren të jenë të këqija. 425 00:26:37,000 --> 00:26:40,850 Ata të çojë në software buggy nëse njerëzit përdorin softuer tuaj në mënyra që ju nuk ndërmend. 426 00:26:40,850 --> 00:26:44,750 Pra, le abstrakte kjo larg dhe vetëm më generically thonë 427 00:26:44,750 --> 00:26:46,830 Unë kam nevojë për këtë shumë chunks e kujtesës 428 00:26:46,830 --> 00:26:50,210 dhe çdo copë e kujtesës duhet të jetë e barabartë me madhësinë e një karakter, 429 00:26:50,210 --> 00:26:54,870 e cila është në fakt e barabartë me 1, në këtë rast, por kjo është një mënyrë më të përgjithshme e të shkruarit atë. 430 00:26:54,870 --> 00:27:00,460 Pra, nëse fjala është përshëndetje, sa bytes i malloc duket akordojë për përshëndetje? 431 00:27:00,460 --> 00:27:04,980 [Student] Gjashtë. Gjashtë >>. Pikërisht aq sa kemi pikëpyetje në ekran. 432 00:27:04,980 --> 00:27:07,800 Dhe pastaj të marrë një guess tani bazohen në të kuptuarit e juaj e getString 433 00:27:07,800 --> 00:27:12,790 çfarë do të malloc ndoshta kthehet? >> [Student] Një adresë. 434 00:27:12,790 --> 00:27:17,020 Një adresë të kujt? Nga copë e parë të kujtesës. 435 00:27:17,020 --> 00:27:20,670 >> Ne nuk kemi asnjë ide se çfarë është atje për shkak se disa funksion tjetër 436 00:27:20,670 --> 00:27:23,010 mund të ketë qenë përdorur këtë memorie më parë. 437 00:27:23,010 --> 00:27:28,380 Por malloc, si getString, kthen adresën e bajt parë e kujtesës 438 00:27:28,380 --> 00:27:30,540 se ka vënë mënjanë për ty. 439 00:27:30,540 --> 00:27:38,380 Megjithatë, ajo nuk ka të bëni është të plotësoni në bosh këtë me një karakter null backslash 440 00:27:38,380 --> 00:27:43,030 sepse kjo rezulton nga ju mund të përdorni malloc të ndajë asgjë: ints, vargjet, vargjeve, 441 00:27:43,030 --> 00:27:45,700 gjithandej, strukturat studentore. 442 00:27:45,700 --> 00:27:47,750 Ju mund të përdorni malloc plotësisht përgjithësi. 443 00:27:47,750 --> 00:27:51,470 Ajo nuk kujdeset apo duhet të dini se çfarë ju jeni alokimin e kujtesës për të. 444 00:27:51,470 --> 00:27:55,810 Pra, kjo do të jetë mendjemadhe për malloc për të vënë një \ 0 445 00:27:55,810 --> 00:27:58,340 në fund të çdo copë e kujtesës kjo është duke ju dhënë 446 00:27:58,340 --> 00:28:02,620 sepse kjo \ 0 gjë është vetëm një konventë për vargjet. 447 00:28:02,620 --> 00:28:06,310 Ajo nuk është përdorur për ints, ajo nuk është përdorur për gjithandej, nuk është përdorur për studentët. 448 00:28:06,310 --> 00:28:11,730 Dhe kështu Gotcha me malloc është se barra është tërësisht mbi ju programues 449 00:28:11,730 --> 00:28:16,790 për të kujtuar se sa shumë ju bytes ndarë dhe të mos e përdorin kurrë një për lak 450 00:28:16,790 --> 00:28:21,570 ose një lak, ndërsa dhe kaloj kufirin e copë e kujtesës që ju keni qenë të caktuar. 451 00:28:21,570 --> 00:28:23,540 Vendos një mënyrë tjetër, sa më shpejt që ju të kujtesës, 452 00:28:23,540 --> 00:28:28,510 ju nuk mund të kërkoni sistemin operativ, oh, nga rruga, si e madhe e një copë e kujtesës ishte kjo? 453 00:28:28,510 --> 00:28:32,080 Kjo është plotësisht deri në ju për të kujtuar nëse keni nevojë për atë vlerë. 454 00:28:32,080 --> 00:28:34,330 >> Pra, le të shohim se si unë të vazhdojë të përdorë këtë memorie. 455 00:28:34,330 --> 00:28:38,430 Në linjë 28 dhe 29 pse jam unë duke bërë këtë? 456 00:28:39,850 --> 00:28:42,260 Vetëm kontrolloni mendje e shëndoshë e përgjithshme. 457 00:28:42,260 --> 00:28:45,110 Vetëm në rast se diçka shkoi keq, unë kërkoj për disa sasi të çmendur e kujtesës 458 00:28:45,110 --> 00:28:48,690 ose unë kam kaq shumë gjëra në drejtimin e kompjuterit që ka vetëm nuk është kujtesë të mjaftueshme, 459 00:28:48,690 --> 00:28:51,780 diçka të tillë, unë të paktën të dëshironi të kontrolloni for null. 460 00:28:51,780 --> 00:28:55,260 Në realitet, shumica e kompjuterëve do t'ju japë iluzionin se çdo program 461 00:28:55,260 --> 00:28:57,080 mund të përdorni tërësinë e RAM tuaj, 462 00:28:57,080 --> 00:29:00,740 por edhe kështu, në qoftë se përdoruesi në disa lloje të vargut të gjatë të çmendur ndoshta për shkak se ata janë një djalë i keq 463 00:29:00,740 --> 00:29:03,440 dhe ata janë në fakt duke u përpjekur për të rrëzuar programin tuaj ose hack në të, 464 00:29:03,440 --> 00:29:07,300 ju doni që të paktën të kontrolloni vlerën e kthimit të malloc dhe nëse ajo është e barabartë null. 465 00:29:07,300 --> 00:29:11,630 Dhe nëse bën atë, le të vetëm të lë tani, sepse unë nuk e di se çfarë të bëjë në këtë rast. 466 00:29:11,630 --> 00:29:13,950 Si mund të kopjoni string? Ka disa mënyra për ta bërë këtë. 467 00:29:13,950 --> 00:29:18,850 Ka str kopjoni funksionet në C, por kjo është super e thjeshtë për ne për të bërë këtë mënyrë modës së vjetër. 468 00:29:18,850 --> 00:29:23,110 >> Së pari më lejoni të kuptoj se çfarë është gjatësia e s. 469 00:29:23,110 --> 00:29:26,930 Unë mund të ketë vënë këtë në lak, por në vend të kësaj unë vetëm vënë atë këtu për qartësi. 470 00:29:26,930 --> 00:29:30,610 Pra, n tani ruan gjatësinë e vargut origjinal, i cili është me sa duket 5. 471 00:29:30,610 --> 00:29:35,290 Pastaj në lak tim unë jam për iterating nga 0 deri në mbi n, 472 00:29:35,290 --> 00:29:40,940 dhe në çdo përsëritje unë jam duke s [i] në brendësi të t [i]. 473 00:29:40,940 --> 00:29:45,060 Pra, kjo është ajo që kam nënkuptuar me gishtat e mi 2 duke treguar në vargjet më parë. 474 00:29:45,060 --> 00:29:49,260 Si kjo për lak iterates si kjo, unë jam duke shkuar për të kopjuar h në këtu, 475 00:29:49,260 --> 00:29:52,890 e ne këtu, në l këtu sepse kjo është s, kjo është t. 476 00:29:52,890 --> 00:29:58,770 Dhe pastaj në fund, në përputhje 35 pse jam unë duke bërë këtë? 477 00:29:58,770 --> 00:30:03,770 Unë kam nevojë për të bërë të sigurtë që unë jam duke i dhënë fund t string. 478 00:30:03,770 --> 00:30:06,170 Dhe unë e bëri atë në këtë mënyrë të jetë super të qartë. 479 00:30:06,170 --> 00:30:09,510 Por propozojë, dikush, nëse ju mund të, një mënyrë të ndryshme për të bërë këtë. 480 00:30:09,510 --> 00:30:13,930 Unë vërtetë nuk kanë nevojë për linjë të 35. Nuk është një tjetër mënyrë për të bërë këtë. 481 00:30:13,930 --> 00:30:18,880 Po. >> [Përgjigja e padëgjueshme Studenti] >> Thuaj se louder. 482 00:30:18,880 --> 00:30:20,960 [Student] pak se ose e barabartë me. Pikërisht >>. 483 00:30:20,960 --> 00:30:24,450 Ne mund të them vetëm më pak se ose e barabartë me n, i cili në përgjithësi ka qenë e keqe 484 00:30:24,450 --> 00:30:28,190 sepse pothuajse gjithmonë kur të shkojmë deri në një të barabartë me gjë ne jemi të numërimit 485 00:30:28,190 --> 00:30:30,000 ne do të shkojmë 1 hap shumë larg. 486 00:30:30,000 --> 00:30:32,170 Por mos harroni, sa nuk kemi bytes ndajë? 487 00:30:32,170 --> 00:30:37,210 Ne e ndarë strlen s, kështu që 5 + 1 për një total prej 6. 488 00:30:37,210 --> 00:30:39,980 Pra, në këtë rast ne mund të bëjmë diçka si kjo 489 00:30:39,980 --> 00:30:46,450 kështu që ne jemi duke kopjuar jo vetëm përshëndetje, por edhe \ 0 në fund. 490 00:30:46,450 --> 00:30:49,860 Përndryshe, ne mund të përdorim një funksion të quajtur str kopje, strcpy, 491 00:30:49,860 --> 00:30:51,700 por që nuk do të jetë kënaqësi aq shumë. 492 00:30:51,700 --> 00:30:54,000 Por kjo është e gjitha ajo ka nën kapuç. 493 00:30:54,000 --> 00:30:56,050 Pastaj fundi, ne bëjmë të njëjtën gjë si më parë. 494 00:30:56,050 --> 00:31:01,620 Unë germa t dhe pastaj unë pretendojnë se origjinali duket si ky dhe kopja duket si kjo. 495 00:31:01,620 --> 00:31:08,570 Pra, le të provoni këtë tani. Më lejoni të shkoj në këtu. Bëni copy2. Ne do të zoom në dhe të drejtuar copy2. 496 00:31:08,570 --> 00:31:13,840 Unë jam duke shkuar të shkruani në përshëndetje në Fjala, dhe me të vërtetë kam marrë me të vogla përshëndetje si origjinale 497 00:31:13,840 --> 00:31:16,930 por kryeqyteti Përshëndetje për kopje. 498 00:31:16,930 --> 00:31:20,300 Por unë nuk jam bërë vetëm ende. Unë kam nevojë për të bërë 1 gjëja e fundit këtu. 499 00:31:20,300 --> 00:31:28,000 46 dhe 47 është e qartë çlirimin e kujtesës, por çfarë do të thotë që në të vërtetë? 500 00:31:28,000 --> 00:31:33,250 Çfarë jam unë duke bërë, a mendoni se, duke e quajtur linjë 46 dhe 47 linjë? 501 00:31:33,250 --> 00:31:38,900 Çfarë efekti do të ketë kjo? Po. 502 00:31:38,900 --> 00:31:43,140 [Përgjigja e padëgjueshme Student] >> Pikërisht. 503 00:31:43,140 --> 00:31:46,380 >> Ju jeni vetëm duke u thënë të sistemit operativ, hej, faleminderit për këtë kujtesë. 504 00:31:46,380 --> 00:31:48,320 Ju tani mund të përdorni atë për dikë tjetër. 505 00:31:48,320 --> 00:31:50,790 Dhe këtu është një shembull i përsosur i vlerave mbeturinash. 506 00:31:50,790 --> 00:31:55,430 Unë kam përdorur vetëm këtë memorie të shkruani fjalën përshëndetje në 2 vende, 507 00:31:55,430 --> 00:31:57,490 këtu, këtu, këtu dhe këtu. 508 00:31:57,490 --> 00:32:00,910 Kështu kjo është h-E-l-l-O-\ 0. 509 00:32:00,910 --> 00:32:06,960 Por pastaj unë e quaj linjë dhe linjës 46 47, dhe ju e dini se çfarë ndodh atje në aspektin e foto? 510 00:32:06,960 --> 00:32:10,010 Në fakt, prisni, kjo foto është e vjetër. 511 00:32:10,010 --> 00:32:12,550 Pasi të kemi bërë kopje, ky djalë është në fakt duke treguar këtu, 512 00:32:12,550 --> 00:32:16,110 kështu që le të hiqni numrat dhe vetëm abstrakte larg si shigjeta tona përsëri. 513 00:32:16,110 --> 00:32:19,370 Çfarë ndodh në këtë foto, kur unë e quaj të lirë? 514 00:32:19,370 --> 00:32:22,750 [Përgjigja e padëgjueshme Studenti] >> As. 515 00:32:22,750 --> 00:32:29,510 Nëse bëj thirrje të lirë në ve dhe t - lloj i një pyetje mashtrim - kete foto nuk do të ndryshojë në të gjitha 516 00:32:29,510 --> 00:32:33,880 sepse duke bërë thirrje dhe duke bërë thirrje t s vetëm tregon sistemit operativ, 517 00:32:33,880 --> 00:32:39,010 hej, ju mund të përdorni këtë memorie përsëri, por kjo nuk do të ndryshojë këtë null 518 00:32:39,010 --> 00:32:41,840 ose disa karakter të veçantë, kjo nuk do të ndryshojë këtë, 519 00:32:41,840 --> 00:32:47,350 kjo nuk do të ndryshojë h ose E ose l ose L ose O në ose vend me asgjë tjetër. 520 00:32:47,350 --> 00:32:51,610 Në kushtet e foto, sa më shpejt që ju e quani të lira, asgjë nuk ndryshon. 521 00:32:51,610 --> 00:32:56,570 Dhe aty qëndron origjinën e vlerave plehrash, sepse në qoftë se unë pastaj më vonë në këtë program 522 00:32:56,570 --> 00:33:01,010 kërkoni sistemit operativ për më shumë memorie me getString ose malloc ose diçka si kjo 523 00:33:01,010 --> 00:33:04,900 dhe sistemit operativ thotë, i sigurt, unë kam 12 bytes të memories liruar vetëm deri, 524 00:33:04,900 --> 00:33:08,080 përdorni këto, çfarë po ju do të dorëzohet? 525 00:33:08,080 --> 00:33:10,830 Ju do të jeni të dorëzuar një pjesë e kujtesës që ne zakonisht do të nxjerrë 526 00:33:10,830 --> 00:33:13,700 me pikëpyetje, por çfarë janë ato pikëpyetje? 527 00:33:13,700 --> 00:33:17,000 Ato ndodhë të jetë h-E-l-l-O, h-E-l-l-O. 528 00:33:17,000 --> 00:33:20,940 Këto janë vlerat tona të reja plehrash sa më shpejt që ju të lirë deri kujtesës atë. 529 00:33:20,940 --> 00:33:22,750 >> Ka një implikim i vërtetë botërore edhe këtu. 530 00:33:22,750 --> 00:33:24,720 Kjo ndodh të bëjë me RAM, por kompjuterat tuaj 531 00:33:24,720 --> 00:33:26,720 të vërtetë të bëjë të njëjtën gjë me disk. 532 00:33:26,720 --> 00:33:30,620 Ne do të flasim për këtë në veçanti me një sërë problemeve të ardhshme që fokusohet në mjekësinë ligjore. 533 00:33:30,620 --> 00:33:36,170 Por çfarë ndodh në të vërtetë në qoftë se ju keni disa fotografi të ndjeshme financiare në tavolinën e punës tuaj 534 00:33:36,170 --> 00:33:39,600 JPEG ose disa hollësira dhe ju zvarrit atë në plehra tuaj, 535 00:33:39,600 --> 00:33:44,390 çfarë ndodh kur ju drag atë në plehra apo Recycle Bin? 536 00:33:44,390 --> 00:33:47,240 Ju e dinte se çfarë isha duke folur rreth. [Qeshura] 537 00:33:47,240 --> 00:33:52,370 Çfarë ndodh kur ju keni zvarritur atë dëshmi në bin tuaj riciklimi apo plehra mund? 538 00:33:52,370 --> 00:33:55,920 [Përgjigja e padëgjueshme Student] 539 00:33:55,920 --> 00:33:58,000 E pra, në mënyrë të kujdesshme. Çfarë ndodh kur ju bëni këtë? 540 00:33:58,000 --> 00:34:01,030 Përgjigja e shkurtër është asgjë, e drejtë? 541 00:34:01,030 --> 00:34:04,790 Fotografi paqarta ose të ndjeshme është ende vetëm ulur atje diku në hard drive tuaj. 542 00:34:04,790 --> 00:34:07,940 Shumica prej nesh së paku kanë mësuar rrugën e vështirë që ju duhet të zbrazët plehra tuaj 543 00:34:07,940 --> 00:34:10,429 ose Recycle Bin tuaj në fakt fshini fotografi. 544 00:34:10,429 --> 00:34:13,440 Dhe me të vërtetë, kur ju right click ose kontroll klikoni mbi plehra tuaj mund të 545 00:34:13,440 --> 00:34:15,580 ose zgjidhni, plehra bosh apo çfarëdo të imazhit 546 00:34:15,580 --> 00:34:21,420 dhe ju të vërtetë bosh plehra mund ose Recycle Bin, çfarë në të vërtetë ndodh, atëherë në këtë foto? 547 00:34:22,810 --> 00:34:25,969 Asgjë më shumë. Pra, asgjë nuk ndodh në të vërtetë në disk. 548 00:34:25,969 --> 00:34:30,880 >> Dhe nëse ne vetëm përkohësisht dal nga tema dhe shkruani - I'll përdorni vetëm pjesën e prapme të kësaj. 549 00:34:30,880 --> 00:34:34,639 Deri tani historia po ndryshon nga RAM, i cili është ku ekzistojnë programe 550 00:34:34,639 --> 00:34:39,250 ndërsa ju jeni drejtimin e tyre, në disk, i cili është ku ata janë ruajtur afat të gjatë 551 00:34:39,250 --> 00:34:42,920 edhe kur pushteti shkon jashtë, tani për tani - dhe ne do të kthehen në këtë në të ardhmen - 552 00:34:42,920 --> 00:34:46,380 le të vetëm të pretendojë se kjo paraqet brenda hard drive e kompjuterit tuaj 553 00:34:46,380 --> 00:34:50,110 sepse mbrapa në ditë ato përdoren për të disqe rrethore, ashtu si floppy disqe. 554 00:34:50,110 --> 00:34:55,130 Pra, nëse ju keni disa fotografi të ndjeshme Excel, ajo mund të marrë këtë copë e kujtesës 555 00:34:55,130 --> 00:34:59,770 në diskun e kompjuterit tuaj, dhe unë jam vetëm duke tërhequr 1s dhe 0s njëjtin arbitrare. 556 00:34:59,770 --> 00:35:03,970 Kur ju drag fotografi si kjo në plehra tuaj mund ose riciklimi bin, 557 00:35:03,970 --> 00:35:07,750 fjalë për fjalë asgjë nuk ndodh sepse Apple dhe Microsoft kanë vendosur vetëm 558 00:35:07,750 --> 00:35:10,450 plehra mund dhe Recycle Bin është me të vërtetë vetëm një placeholder përkohshme. 559 00:35:10,450 --> 00:35:14,710 Ndoshta përfundimisht OS do të zbrazin atë për ju, por në mënyrë tipike, kjo nuk ka të bëjë asgjë, 560 00:35:14,710 --> 00:35:17,090 së paku deri sa ju jeni me të vërtetë të ulët në hapësirë. 561 00:35:17,090 --> 00:35:20,870 >> Megjithatë, kur ju shkoni në plehra bosh ose bosh Recycle Bin, 562 00:35:20,870 --> 00:35:23,460 Në mënyrë të ngjashme, asgjë nuk ndodh në këtë foto. 563 00:35:23,460 --> 00:35:28,590 Gjithçka që ndodh është diku tjetër në kompjuterin tuaj, nuk është një lloj i tabelës. 564 00:35:28,590 --> 00:35:35,400 Kjo është lloj i si një fletë mashtrojnë pak që thotë se, le të themi, resume.doc, 565 00:35:35,400 --> 00:35:40,920 kështu rinisë tuaj në një skedar në Microsoft Word përdorur për të jetuar në vendin 123 në diskun tuaj të vështirë, 566 00:35:40,920 --> 00:35:43,710 jo në kujtesën dhe jo në RAM, por në diskun tuaj të vështirë, 567 00:35:43,710 --> 00:35:49,050 dhe jeta paqarta tuaja JPEG në 456, dhe fotografi Excel tuaj jeton në 789 ose kudo. 568 00:35:49,050 --> 00:35:53,640 Kur ju fshini fotografi me të vërtetë zbrazja e plehra apo Recycle Bin, 569 00:35:53,640 --> 00:35:59,530 kete foto nuk ndryshon. The 0s dhe 1s në hard drive tuaj nuk shkojnë kudo. 570 00:35:59,530 --> 00:36:03,930 Por kjo tabelë, kjo bazë të dhënash pak terezi, e bën ndryshimin. 571 00:36:03,930 --> 00:36:08,750 Kur ju fshini rinisë tuaj, kjo është sikur file fshihet në një farë mënyre, 572 00:36:08,750 --> 00:36:12,790 por të gjithë kompjuteri nuk është harruar se ku jeton gjë në hard drive tuaj. 573 00:36:12,790 --> 00:36:17,870 The 0s dhe 1s që përbëjnë rinisë tuaj ose ndonjë nga këto fotografi të tjera janë ende të paprekura. 574 00:36:17,870 --> 00:36:21,960 >> Pra, nëse ju e bëri këtë aksidentalisht, nuk ka ende një jo-zero probabiliteti 575 00:36:21,960 --> 00:36:25,800 që ju mund të shërohen të dhënat tuaja duke përdorur Norton Utilities ose ndonjë softuer komercial 576 00:36:25,800 --> 00:36:29,810 Qëllimi i të cilit në jetë është për të gjetur 0s dhe 1s që kanë lloj qenë jetimë, 577 00:36:29,810 --> 00:36:33,300 harruar këtu, por la këtu, në mënyrë që ju mund të merrni të dhënat tuaja prapa. 578 00:36:33,300 --> 00:36:38,410 Ose hetuesit mjeko-ligjorë me policinë ose FBI në fakt do të marrë një hard drive 579 00:36:38,410 --> 00:36:42,550 dhe në fakt të shikoni për modelet e 0s dhe 1s që duken si JPEG, duken si fotografi Excel, 580 00:36:42,550 --> 00:36:46,400 dhe të shërohen ato në këtë mënyrë edhe në qoftë se kompjuteri ka harruar ata atje. 581 00:36:46,400 --> 00:36:49,820 Pra, mënyra e vetme me të vërtetë për të fshirë të dhënat, si ne do të diskutojmë në të ardhmen, 582 00:36:49,820 --> 00:36:54,190 është për pastrim ose fshirë skedarin ose hard disk duke - 583 00:36:54,190 --> 00:36:56,540 Ju nuk mund të vërtetë të hequr qafe të 0s dhe 1s 584 00:36:56,540 --> 00:36:59,440 sepse përndryshe ju do të fillojë me një hard drive Gigabyte 585 00:36:59,440 --> 00:37:02,380 dhe ju do të përfundojë me një makinë megabyte vështirë në qoftë se ju vazhdimisht janë fshirë, 586 00:37:02,380 --> 00:37:04,380 fjalë për fjalë, 0s dhe 1s. 587 00:37:04,380 --> 00:37:06,310 Pra, çfarë do të bëni nëse ju me të vërtetë të kërkuar për të mbuluar gjurmët tuaja 588 00:37:06,310 --> 00:37:10,510 dhe problemi themelor është se ka ende 0s dhe 1s në disk? 589 00:37:10,510 --> 00:37:14,930 Unë po të shoh dikë që ju do të gesticulating fizikisht thyejnë pajisjen. Që do të punojnë. 590 00:37:14,930 --> 00:37:19,600 [Qeshur] Por nëse kjo është lloj i një zgjidhje të shtrenjtë, ajo do të jetë më e arsyeshme? 591 00:37:19,600 --> 00:37:23,270 Po. >> [Student] Mbishkruaj ato. Mbishkruaj >> ato me çfarë? >> [Student] Të dhëna të tjera. 592 00:37:23,270 --> 00:37:29,070 Të dhëna të tjera. Ju vetëm mund të prishësh diskun tuaj me 0s 1s ose ose të gjitha 0s, 1s gjitha. 593 00:37:29,070 --> 00:37:31,230 >> Dhe kjo është me të vërtetë atë që disa prej programeve bën. 594 00:37:31,230 --> 00:37:33,570 Ju mund të bleni software apo edhe të merrni free software, 595 00:37:33,570 --> 00:37:36,610 dhe ndërtuar edhe në të Mac OS këto ditë, më pak në Windows, 596 00:37:36,610 --> 00:37:38,660 është aftësia për të sigurt fshihet. 597 00:37:38,660 --> 00:37:41,960 Në fakt, në qoftë se ju doni të drejtuar të gjithë në shtëpi sot, nëse ju keni një Mac dhe e bëjnë këtë, 598 00:37:41,960 --> 00:37:45,740 në qoftë se ju keni marrë disa sende në plehra tuaj mund të, ju mund të bëni Secure Empty Trash, 599 00:37:45,740 --> 00:37:47,610 që bën pikërisht këtë. 600 00:37:47,610 --> 00:37:53,350 Në vend se vetëm fotografi fshihet këtu, kjo nuk do të fshihet 0s dhe 1s këtu, 601 00:37:53,350 --> 00:38:01,240 përkundrazi, ajo vetëm ndryshon të gjithë ata, për shembull, për të 0s dhe dot, dot, dot. 602 00:38:01,240 --> 00:38:05,330 Pra, një nga psets tuaja në të ardhmen do të jetë në fakt për qëllim të mbulojë të dhënave - 603 00:38:05,330 --> 00:38:08,430 fotografitë që ne kemi marrë të njerëzve, vendeve, dhe gjërat në kampus 604 00:38:08,430 --> 00:38:12,810 për të cilat ne do të bëjë një imazh mjeko-ligjore të kartës një aparat fotografik dixhital të kujtesës, 605 00:38:12,810 --> 00:38:17,120 cila është ideja e saktë njëjtë - dhe ju do të keni për të sfiduar në fakt të gjetur 606 00:38:17,120 --> 00:38:20,160 modelet që përfaqësojnë jpegs në hard drive tuaj, 607 00:38:20,160 --> 00:38:23,610 shumë si student i atij të cilit ish-mail kam lexuar disa javë më parë ka 608 00:38:23,610 --> 00:38:25,860 për të rimarrë fotografi motrës së tij. 609 00:38:25,860 --> 00:38:30,300 Pse nuk kemi marrë një pushim 5-minutëshe këtu, dhe ne do të rigrupohen me më shumë memorie. 610 00:38:33,030 --> 00:38:38,610 Kështu që këtu është ajo ku gjërat marrin pak mendje-bending, por ky është një hap shumë i fuqishëm 611 00:38:38,610 --> 00:38:40,480 drejt të kuptuarit këtë të gjithë shumë. 612 00:38:40,480 --> 00:38:42,900 Këtu është një program i quajtur pointers.c. 613 00:38:42,900 --> 00:38:45,430 Ajo është ndër kodin e sotme mostrës. 614 00:38:45,430 --> 00:38:51,280 Vini re se në linjat e para, 19 deri 22, të gjithë ne po bëjmë është diçka si getString 615 00:38:51,280 --> 00:38:54,460 dhe kthimin e një adresë, ruajtjen atë në s. 616 00:38:54,460 --> 00:38:58,380 Tani e tutje për pset edhe 3 qoftë se ju doni, por pset 4 dhe në 617 00:38:58,380 --> 00:39:01,030 ku ju mund të fillojnë të marrin këto rrota trajnimit jashtë vetes, 618 00:39:01,030 --> 00:39:04,030 nuk ka asnjë arsye që të pretendojë se vargjet ekzistojnë më. 619 00:39:04,030 --> 00:39:07,030 Kjo është me siguri në rregull për të vetëm të fillojnë duke thënë se char *. 620 00:39:07,030 --> 00:39:12,610 >> Si një mënjanë, në referencat online dhe në libra ju mund të shihni shpesh yllin e ardhshëm të ndryshueshme. 621 00:39:12,610 --> 00:39:15,600 Ju mund të shikoni edhe hapësira rreth dy anët e saj. 622 00:39:15,600 --> 00:39:17,680 Të gjithë ata janë funksionalisht të sakta. 623 00:39:17,680 --> 00:39:21,180 Për tani, megjithatë, ne do të standardizohet në këtë qasje për të bërë super të qartë 624 00:39:21,180 --> 00:39:24,000 se * char është si duke thënë treguesin karakter. 625 00:39:24,000 --> 00:39:25,680 Kjo është lloj të dhënave. 626 00:39:25,680 --> 00:39:28,730 Dhe pastaj emri i variablit është s në këtë rast. 627 00:39:28,730 --> 00:39:31,180 Pra, ne kemi marrë një varg dhe ne kemi quajtur atë s. 628 00:39:31,180 --> 00:39:35,180 Dhe pastaj këtu poshtë vëreni se unë jam duke bërë në fakt një pak dinakëri. 629 00:39:35,180 --> 00:39:39,080 Kjo quhet aritmetike akrep, e cila është lloj i thjeshtë super. 630 00:39:39,080 --> 00:39:41,790 Kjo thjesht do të thotë të shtoni dhe zbres numrat për pointers. 631 00:39:41,790 --> 00:39:43,660 Por kjo në të vërtetë punon. 632 00:39:43,660 --> 00:39:49,170 Ky program duket printime 1 karakterin e vargut s për linjë e tillë që rezultati në fund - 633 00:39:49,170 --> 00:39:54,920 Vetëm kështu që ne mund të prishin ku po shkon kjo, të bëjë pointers, drejtuar pointers, më lejoni të zoom in 634 00:39:54,920 --> 00:39:58,940 Tani, më lejoni lloji në diçka si HELLO dhe tipi Shkruani 635 00:39:58,940 --> 00:40:01,080 dhe printime 1 karakter për linjë. 636 00:40:01,080 --> 00:40:04,730 Deri një të dytë më parë, ne do të kemi bërë këtë me simbol kllapa katrore. 637 00:40:04,730 --> 00:40:09,760 Ne do të kemi një për lak dhe ne do të bëjmë printf të s [i] dhe ne do të bëjmë këtë përsëri dhe përsëri dhe përsëri 638 00:40:09,760 --> 00:40:11,950 me n backslash në fund të çdo rreshti. 639 00:40:11,950 --> 00:40:16,800 Por ky program është i ndryshëm. Ky program është përdorur, fjalë për fjalë, aritmetikë. 640 00:40:16,800 --> 00:40:18,860 Pra, çfarë po ndodh këtu? 641 00:40:18,860 --> 00:40:24,720 Para së gjithash, para se ky lak edhe ekzekuton, çfarë, vetëm të jetë i qartë, është në fakt? 642 00:40:24,720 --> 00:40:27,270 S është? >> [Student] Një adresë. Një adresë >>. 643 00:40:27,270 --> 00:40:32,980 >> Dhe ajo është adresa e, në rastin e përshëndetje, karakter parë në atë fjale, e cila është h. 644 00:40:32,980 --> 00:40:37,370 Pra s është, në këtë shembull të veçantë, adresa e h. 645 00:40:37,370 --> 00:40:41,850 Pra, çfarë do të thotë për të bërë s + i? 646 00:40:41,850 --> 00:40:46,280 E pra, unë fillon në 0 për në këtë lak. Ne kemi bërë shumë herë se. 647 00:40:46,280 --> 00:40:49,760 I është do të shkojnë deri në gjatësinë e vargut, duket. 648 00:40:49,760 --> 00:40:53,950 Kështu në përsëritje e parë të këtij loop, i është padyshim 0. 649 00:40:53,950 --> 00:41:01,740 Pra kjo shprehje është thënë s + i - jo, s +0--kjo është padyshim vetëm s. 650 00:41:01,740 --> 00:41:04,320 Pra, çfarë është * s këtu? 651 00:41:04,320 --> 00:41:08,530 Tani ne jemi duke përdorur yll në një mënyrë paksa të ndryshme. 652 00:41:08,530 --> 00:41:13,080 Më lejoni të shkojnë përpara dhe të shpëtoj prej t, sepse ne jemi duke folur për t bërë dhe kopjet e s. 653 00:41:13,080 --> 00:41:15,540 Tani ne vetëm dua të them një histori që përfshin s. 654 00:41:15,540 --> 00:41:20,090 Dhe kështu në këtë moment, pasi string lloji, bota jonë duket fare si ajo e bëri para 655 00:41:20,090 --> 00:41:26,630 me vetëm s ruajtjen adresën e h dhe më në përgjithësi duke treguar në vargun hello. 656 00:41:26,630 --> 00:41:33,170 If Unë tani bëni një rresht si * (s + i), le të provoni këtë jashtë. 657 00:41:33,170 --> 00:41:40,140 Pra * (s + i). Më lejoni të lehtësuar këtë, sepse kjo është 0, kështu që kjo është * (s +0). 658 00:41:40,140 --> 00:41:43,790 E pra, prit një minutë. Lehtësuar më tej. Kjo është * (s). 659 00:41:43,790 --> 00:41:47,020 E pra, tani parentheses janë lloj i trashë, kështu që tani le të bëjë vetëm * s. 660 00:41:47,020 --> 00:41:50,540 Pra, në përsëritje e parë të këtij lak, atë linjë që nxorri në pah, 26, 661 00:41:50,540 --> 00:41:53,650 është shumë e shumë të barabartë me shtypjen këtë. 662 00:41:53,650 --> 00:41:56,040 Çfarë është lloji i të dhënave * s? 663 00:41:56,040 --> 00:42:00,770 Në këtë kontekst, sepse ylli ndodh të jetë pranë S vetë, 664 00:42:00,770 --> 00:42:04,930 por në mënyrë më specifike, sepse ne nuk janë më declaring s, 665 00:42:04,930 --> 00:42:09,730 ne nuk jemi duke krijuar një ndryshore më, nuk ka asnjë përmendje të char * në linjë 26, 666 00:42:09,730 --> 00:42:14,280 nuk ka përmendur vargun e fjalen, ne jemi vetëm duke përdorur një ndryshore të quajtur s, 667 00:42:14,280 --> 00:42:19,650 ajo rezulton tani ylli ka pak të ndryshme dhe, pa dyshim, konfuze kuptim. 668 00:42:19,650 --> 00:42:26,590 * S këtu do të thotë shkoni në adresën në të dhe të shtypura çdo gjë është atje. 669 00:42:26,590 --> 00:42:33,750 Pra s është këtu, * s është - lloj si Chutes dhe Ladders, ndiqni arrow - këtu. 670 00:42:33,750 --> 00:42:35,850 Pra, kjo është * s. 671 00:42:35,850 --> 00:42:39,060 >> Pra, çfarë merr shtypura në përsëritje e parë e atij lak në linjë 26? 672 00:42:39,060 --> 00:42:42,170 Unë të shtypura nga% C, e cila është placeholder për një karakter, 673 00:42:42,170 --> 00:42:48,520 atëherë një \ n për një linjë të re. * (S + I) ku I eshte 0 është vetëm kjo. 674 00:42:48,520 --> 00:42:53,670 Pra, çfarë mund të char vendin në për% c? H. 675 00:42:53,670 --> 00:42:56,900 Në përsëritje e ardhshëm të lak - ju ndoshta mund të shihni se ku po shkon kjo - 676 00:42:56,900 --> 00:43:01,350 përsëritje e ardhshëm është padyshim i 1, kështu që kjo do të thotë s 1, 677 00:43:01,350 --> 00:43:05,580 dhe pastaj tani unë kam nevojë për kllapa sepse tani ylli ka nevojë për të thënë 678 00:43:05,580 --> 00:43:08,620 shkoni në adresën e kujtesës s +1. 679 00:43:08,620 --> 00:43:14,170 Çfarë është s? Le të rrokulliset prapa në kohë dhe thonë se kjo shigjetë tani nuk është në të vërtetë duke bërë çdo të mirë na. 680 00:43:14,170 --> 00:43:18,450 Le është më specifike thonë se kjo është ruajtjen e 123 numrin 681 00:43:18,450 --> 00:43:25,110 sepse fillimi i këtij vargut hello, kjo është adresa 123, kjo është 124, dhe kështu me radhë. 682 00:43:25,110 --> 00:43:30,550 Pra, në përsëritje të dytë, kur unë jam duke thënë s 1, që është si të thuash 123 1, 683 00:43:30,550 --> 00:43:35,340 njohur ndryshe si 124, kështu që atë që merr char shtypur në përsëritje të dytë? 684 00:43:35,340 --> 00:43:37,850 E në adresën e kujtesës 124. 685 00:43:37,850 --> 00:43:44,440 Pastaj përsëri +, 125, 126, 127, dhe ky lak fatmirësisht ndalet përpara se ne të merrni këtu 686 00:43:44,440 --> 00:43:49,040 sepse unë jam duke përdorur strlen të bëni të sigurtë që unë nuk do të llogariten shumë të larta. 687 00:43:49,040 --> 00:43:50,810 Kështu që edhe është ajo. 688 00:43:50,810 --> 00:43:55,000 Përsëri, kjo është vetëm sikur të kishim bërë një javë më parë. 689 00:43:55,000 --> 00:43:59,200 Më lejoni të shkruaj në rreshtin më poshtë, edhe pse ne nuk duam të bëjmë të dyja. 690 00:43:59,200 --> 00:44:02,500 Kjo është identike tani për këtë. 691 00:44:02,500 --> 00:44:08,310 >> Pra, edhe pse s është një varg, si ne kemi qenë duke e quajtur atë për disa javë, s është me të vërtetë një * char. 692 00:44:08,310 --> 00:44:13,270 Pra, nëse ne duam të jetë super anal, është e vërtetë e duhur për të shkruar karakter të veçantë 693 00:44:13,270 --> 00:44:17,490 në vendin ith përdorur këto adresa numerike dhe këtë operator yll, 694 00:44:17,490 --> 00:44:20,470 por sinqerisht, kjo është më e pastër vetëm aq shumë. Pra, kjo nuk është e keqe. 695 00:44:20,470 --> 00:44:26,720 Nuk ka arsye për të ndaluar bërë line 27 here, por 26 është funksionalisht i njëjtë, 696 00:44:26,720 --> 00:44:31,570 dhe kjo është funksionalisht i njëjtë për të pikërisht arsyet që ne kemi diskutuar deri tani. 697 00:44:31,570 --> 00:44:33,650 Dhe së fundi, 29 vetëm është praktikë e mirë. 698 00:44:33,650 --> 00:44:38,420 Thirrja e pa s do të thotë se tani ju jeni duke i dhënë përsëri kujtesës që ju dha getString 699 00:44:38,420 --> 00:44:41,630 sepse përsëri, siç thashë hënë, getString për disa javë 700 00:44:41,630 --> 00:44:44,180 ka qenë futur një bug në kodin tuaj. 701 00:44:44,180 --> 00:44:46,490 Kodi juaj për javë të tëra ka pasur rrjedhjet e kujtesës 702 00:44:46,490 --> 00:44:49,970 ku ju keni qenë duke kërkuar getString për kujtesën, por ju nuk keni qenë duke i dhënë atë. 703 00:44:49,970 --> 00:44:53,410 Dhe kjo ishte zgjedhur qëllimisht nga ne pedagogjike 704 00:44:53,410 --> 00:44:55,880 sepse kjo është shumë vetëm për të menduar më herët. 705 00:44:55,880 --> 00:44:57,710 Por tani ne kemi nevojë për më shumë symmetry. 706 00:44:57,710 --> 00:45:00,830 Nëse ju kërkoni kompjuterin për kujtesën, siç është rasti për getString, 707 00:45:00,830 --> 00:45:02,820 siç është rasti me sa duket për malloc, 708 00:45:02,820 --> 00:45:07,970 ju duhet tani për pset tutje 4 edhe pa asnjë kujtim të tillë. 709 00:45:07,970 --> 00:45:11,650 Këtë njoftim është i ndryshëm nga thënë n Int. 710 00:45:11,650 --> 00:45:15,040 Ju nuk keni nevojë për të liruar këtë, sepse ju nuk e keni thirrur getString 711 00:45:15,040 --> 00:45:16,890 dhe ju nuk e keni thirrur malloc. 712 00:45:16,890 --> 00:45:20,610 >> Dhe edhe në qoftë se ju thirri GetInt si ne do të shohim përfundimisht, 713 00:45:20,610 --> 00:45:25,520 GetInt nuk kujtesës për ju, sepse ju në fakt mund të kalojë rreth integers 714 00:45:25,520 --> 00:45:29,430 dhe gjithandej dhe chars vetëm mënyrë ne kemi qenë bërë për disa javë. 715 00:45:29,430 --> 00:45:33,960 Vargjet, pse, janë të veçantë për shkak se me të vërtetë ata janë varg e karaktere të shumta. 716 00:45:33,960 --> 00:45:37,450 Pra, ata janë vetëm të ndryshëm from chars dhe gjithandej dhe ints dhe si. 717 00:45:37,450 --> 00:45:39,980 Por ne do të kthehen me atë para se të gjatë. 718 00:45:39,980 --> 00:45:44,920 Çfarëdo pyetjeje, atëherë në këtë fillim të pointers? Po. 719 00:45:44,920 --> 00:45:49,690 [Pyetja padëgjueshme Student] 720 00:45:49,690 --> 00:45:51,440 Ah, pyetje shumë e mirë. 721 00:45:51,440 --> 00:45:55,790 Një nga gjërat e pakta C fakt bën për ju, i cili është i përshtatshëm, 722 00:45:55,790 --> 00:46:00,110 është ajo shifra për ju atë që madhësia është i tipit të të dhënave 723 00:46:00,110 --> 00:46:03,060 dhe pastaj e bën atë lloj shumëzimit për ju. 724 00:46:03,060 --> 00:46:06,610 Kjo është e parëndësishme në rastin e karaktere, sepse pothuajse gjithmonë një char është 1 byte, 725 00:46:06,610 --> 00:46:08,150 kështu që kjo thjesht punon. 726 00:46:08,150 --> 00:46:11,220 Por, për hir të diskutimit, në qoftë se ju në të vërtetë janë integers shtypjen 727 00:46:11,220 --> 00:46:15,500 dhe ju ishin duke u përpjekur për të shtypur nga disa vlera s që ishte vënë në një numër të plotë, 728 00:46:15,500 --> 00:46:20,720 ju të ngjashme nuk do të duhet të bëjë + 4 * i vetëm sepse një është 4 int bytes. 729 00:46:20,720 --> 00:46:25,780 Aritmetike Pointer thotë se C dhe përpiluesit të bëjë të gjitha që math për ju. 730 00:46:25,780 --> 00:46:29,190 Të gjithë ju duhet të kujdesen rreth është numërimi në lloj kuptimin njerëzor. Po. 731 00:46:29,190 --> 00:46:35,200 [Student] Nëse ju të deklarojë një varg brenda një për lak, a keni për të liruar atë më vonë? 732 00:46:35,200 --> 00:46:36,760 Mirë pyetje. 733 00:46:36,760 --> 00:46:41,390 >> Nëse ju shpallur brenda varg e për lak, nuk keni nevojë për të liruar atë më vonë? 734 00:46:41,390 --> 00:46:47,520 Ju vetëm duhet të kujtesës të lirë që ju ndajnë me getString ose me malloc. 735 00:46:47,520 --> 00:46:53,110 Pra, nëse ju vetëm thoni diçka si - më lejoni të vënë formatimin e teksteve kaçurrel tani kështu që të gjitha kod është i lidhur. 736 00:46:53,110 --> 00:46:58,580 Nëse e keni kryer diçka, megjithëse buggily, si kjo, char * t = s, 737 00:46:58,580 --> 00:47:03,450 ju nuk keni nevojë që t lira t, sepse nuk përfshijnë ndonjë përmendje të malloc ose getString. 738 00:47:03,450 --> 00:47:08,960 Nëse nga ana tjetër ju e bëri këtë, getString, atëherë po, ju do të duhet për t lira. 739 00:47:08,960 --> 00:47:14,350 Dhe në fakt, shansi juaj e vetme për të bërë këtë është tani brenda këtij loop, për të njëjtën çështje të fushës 740 00:47:14,350 --> 00:47:16,060 që ne kemi diskutuar në të kaluarën. 741 00:47:16,060 --> 00:47:18,830 Përndryshe ju do të jetë ndarjen e kujtesës, e kujtesës ndarjen, shpërndarjen e kujtesës, 742 00:47:18,830 --> 00:47:21,230 dhe në fund të programit, sepse ju jeni jashtë atij lak, 743 00:47:21,230 --> 00:47:24,240 t nuk ekziston, por ju kurrë nuk u tha e sistemit operativ 744 00:47:24,240 --> 00:47:26,750 që ju nuk keni nevojë që kujtesë më. 745 00:47:26,750 --> 00:47:30,430 Dhe para se të gjatë, për pset 4 ose 5 ne do t'ju pajisë me një program të quajtur Shprehje, 746 00:47:30,430 --> 00:47:34,160 e cila është e ngjashme në frymë të gdb në atë që e mori disi e një ndërfaqe misterioze, 747 00:47:34,160 --> 00:47:35,750 por qëllimi i tij në jetë është që të ju ndihmojë. 748 00:47:35,750 --> 00:47:39,380 Dhe Shprehje është një program që do të në të ardhmen të kërkoni programet tuaja 749 00:47:39,380 --> 00:47:42,550 kërkoni për rrjedhjet e kujtesës, qoftë nga getString ose malloc, 750 00:47:42,550 --> 00:47:47,800 të cilat ne do të fillojnë duke përdorur të gjitha më shumë si ne të ndaluar përdorimin e bibliotekës CS50 sa më shumë. 751 00:47:47,800 --> 00:47:53,030 Ne fund tani kemi lloj e fjalorit dhe llojin e modelit mendor në teori 752 00:47:53,030 --> 00:47:55,170 me të cilat për të zgjidhur këtë program thyer. 753 00:47:55,170 --> 00:47:59,410 >> Pra, në këtë program të thyer, swap punon brenda swap, 754 00:47:59,410 --> 00:48:05,280 por ajo kurrë nuk ka punuar në të vërtetë në kryesore shkak kryesor kaluar në x dhe y, risjell, 755 00:48:05,280 --> 00:48:07,260 dhe ata ishin të kaluar në nga vlerat, kështu që të flasin. 756 00:48:07,260 --> 00:48:09,330 Kopjet e tyre janë dhënë në shkëmbim. 757 00:48:09,330 --> 00:48:12,520 Deri në fund të swap-it, a dhe b të vërtetë kishte qenë shkëmbyer, 758 00:48:12,520 --> 00:48:16,120 por sigurisht x dhe y, siç kemi diskutuar të hënën, nuk kishte qenë. 759 00:48:16,120 --> 00:48:19,940 Kështu që unë të propozojë në të gjelbër këtu se kjo është në të vërtetë zgjidhja këtu. 760 00:48:19,940 --> 00:48:22,640 Dhe në fakt, më lejoni të lëvizë yjet e mia vetëm të jenë në përputhje 761 00:48:22,640 --> 00:48:24,440 edhe pse, përsëri, funksionalisht kjo nuk ka rëndësi. 762 00:48:24,440 --> 00:48:28,730 Në javët e ardhshme ne do të shpjegojmë se kur dhe pse kjo ka rëndësi. 763 00:48:28,730 --> 00:48:30,600 Pra, në të gjelbër tani është një zgjidhje. 764 00:48:30,600 --> 00:48:33,700 Sinqerisht, kjo duket një tërësi shumë çrregullt, sepse unë kam të gjitha këto yje. 765 00:48:33,700 --> 00:48:35,380 Më lejoni të theksoj një gjë. 766 00:48:35,380 --> 00:48:40,040 Shkarko top këtu ku ai thotë int * a * b dhe int 767 00:48:40,040 --> 00:48:42,820 është krejtësisht bërë të njëjtën gjë si ajo gjithmonë ka. 768 00:48:42,820 --> 00:48:47,070 Ajo është shpallur argumente 2 ose parametrave të bie në ujdi, 769 00:48:47,070 --> 00:48:49,940 e parë e cila është një akrep int quajtur një, 770 00:48:49,940 --> 00:48:53,100 dytë e cila është një akrep int quajtur b. 771 00:48:53,100 --> 00:48:55,770 E vetmja gjë që është e re në këtë pikë është fakti se ka një yll atje. 772 00:48:55,770 --> 00:48:59,340 >> Çfarë do të thotë kjo? Një nuk është një int, b nuk është një int. 773 00:48:59,340 --> 00:49:04,100 Një është adresa e një int dhe b është adresa e një int ndryshme. 774 00:49:04,100 --> 00:49:06,980 Poshtë këtu, ky është vendi ku unë pranoj C merr konfuze. 775 00:49:06,980 --> 00:49:09,790 Tani ne jemi duke përdorur një yll, por ajo ka kuptim të ndryshëm në këtë kontekst. 776 00:49:09,790 --> 00:49:13,150 Sepse ne nuk jemi deklaruar pointers si ne jemi deri këtu, 777 00:49:13,150 --> 00:49:15,500 këtu ne jemi dereferencing gjëra. 778 00:49:15,500 --> 00:49:21,520 Pra teknikisht, yll në këtë kontekst të vijës së parë, të dytë, të tretë dhe në brendësi të swap-it 779 00:49:21,520 --> 00:49:24,560 është operatori dereference, që thjesht do të thotë të shkojnë atje. 780 00:49:24,560 --> 00:49:27,400 Pra, ashtu si gishti im ndjekur arrow për h, 781 00:49:27,400 --> 00:49:31,100 * Një mjet të shkojnë në atë adresë dhe për të gjetur mua int që është atje. 782 00:49:31,100 --> 00:49:34,250 * Mjetet b shkoni në adresën dhe të kalojë më se çfarë është atje. 783 00:49:34,250 --> 00:49:40,730 Pra, le të shlyen foto nga e hëna tani duke përdorur një pirg të kornizave, 784 00:49:40,730 --> 00:49:43,130 një fund i cili do të jetë kryesor, 785 00:49:43,130 --> 00:49:47,600 një sipërme e cila do të jetë swap, 786 00:49:47,600 --> 00:49:50,880 në mënyrë që bota jonë duket, ashtu si e hëna, si kjo. 787 00:49:50,880 --> 00:49:53,620 Këtu është një copë e kujtesës që kryesor është duke shkuar për t'u përdorur. 788 00:49:53,620 --> 00:49:56,520 >> Kujtojnë nga e hëna se programi kishte vetëm 2 variablave, 789 00:49:56,520 --> 00:50:01,930 e quajtur X dhe një i quajtur y, dhe unë kam vënë numrat 1 dhe 2 nuk ka. 790 00:50:01,930 --> 00:50:06,580 Tani kur unë e quaj swap si unë e bëri të hënën, 791 00:50:06,580 --> 00:50:11,000 më parë, kur kam përdorur versionin e kuqe e këtij programi, i cili duket si ky, 792 00:50:11,000 --> 00:50:17,470 I kam 2 parametra, a dhe b, dhe çfarë nuk e kemi shkruar këtu dhe këtu? 793 00:50:17,470 --> 00:50:21,160 Vetëm 1 dhe 2, fjalë për fjalë kopje të x dhe y. 794 00:50:21,160 --> 00:50:23,070 Sot ne ndryshojmë këtë. 795 00:50:23,070 --> 00:50:28,510 Sot në vend të kalimit në ints a dhe b ne jemi duke shkuar për të kaluar në 2 adresat. 796 00:50:28,510 --> 00:50:34,290 Këto adresa të ndodhë për pikë të ints, por ato nuk janë adresat ints veten. 797 00:50:34,290 --> 00:50:37,330 Ata janë adresat. Është si një adresë postare në vend. 798 00:50:37,330 --> 00:50:40,580 Pra, tani ne kemi nevojë për të vetëm të jap vetes pak më tepër hollësira në ekran. 799 00:50:40,580 --> 00:50:43,250 Kjo është e kujtesës kompjuterin tim si ajo ka qenë gjatë gjithë ditës. 800 00:50:43,250 --> 00:50:45,120 Tani ne kemi nevojë për disa skema arbitrar numeracionit. 801 00:50:45,120 --> 00:50:50,580 Pra, le të them vetëm, vetëm rastësisht, se kjo është adresa e kujtesës 123, 124. 802 00:50:50,580 --> 00:50:55,660 Le të thonë se kjo është 125, kjo është 126, dhe kështu me radhë, por kjo është krejtësisht arbitrare. 803 00:50:55,660 --> 00:50:58,590 Ne vetëm duhet disa skema që numëron në kujtesën time. 804 00:50:58,590 --> 00:51:04,030 Kështu që tani, kur unë në fakt të kalojë në x dhe y, unë nuk jam duke shkuar për të kaluar në x dhe y; 805 00:51:04,030 --> 00:51:08,400 Unë jam duke shkuar për të kaluar në adresën postare, kështu që të flasin, të x dhe y të 806 00:51:08,400 --> 00:51:11,870 kështu që ajo merr ruhet këtu dhe këtu nuk është 1 dhe 2, 807 00:51:11,870 --> 00:51:16,030 por në qoftë se ju mund të shihni tekstin tim të vogël, ajo merr kaluar në këtu dhe këtu? 808 00:51:16,030 --> 00:51:23,340 [Përgjigja e padëgjueshme Student] >> Pikërisht. 123 merr vënë këtu dhe 124 merr vënë këtu. 809 00:51:23,340 --> 00:51:28,910 >> Tani, sepse kam përdorur yllin e në këtë mënyrë linjë të parë deri këtu në majë, 810 00:51:28,910 --> 00:51:34,340 Programi time vetëm e di se 123 dhe 124, edhe pse ata janë padyshim integers 811 00:51:34,340 --> 00:51:40,160 që çdo njeri të mund të vëreni, ato duhet të interpretohen si adresat, adresat numerike. 812 00:51:40,160 --> 00:51:43,250 Ata nuk janë në vetvete ints, ata janë adresat, 813 00:51:43,250 --> 00:51:46,120 dhe kjo është për shkak se unë kam vënë në mënyrë eksplicite yjet atje. 814 00:51:46,120 --> 00:51:51,360 Deri tani në linjë tim të parë, të dytë dhe të tretë të kodit aktual çfarë ndodh këtu? 815 00:51:51,360 --> 00:51:53,380 Le të tërheqë pjesën tjetër e foto. 816 00:51:53,380 --> 00:51:56,980 Tmp është vetëm si ajo ishte të hënën. Asgjë të veçantë në lidhje me tmp. 817 00:51:56,980 --> 00:52:03,060 Kjo është vetëm një lokal 32 bit ndryshueshme, dhe brenda se unë jam në dukje ruajtjen e vlerës së * a. 818 00:52:03,060 --> 00:52:08,580 Tani, në qoftë se unë vetëm tha tmp = a, çfarë do të kam vënë këtu? >> [Student] 123. 819 00:52:08,580 --> 00:52:10,370 123. Por kjo nuk është ajo që unë jam duke bërë. 820 00:52:10,370 --> 00:52:13,670 Unë jam duke thënë tmp = * a. Mjetet Star shkojnë atje. 821 00:52:13,670 --> 00:52:19,370 Kështu që këtu është një, 123. Si mund të shkoj atje? Pretendon si ka një shigjetë. 822 00:52:19,370 --> 00:52:24,460 E pra, nuk është, 1. Pra, çfarë merr ruajtur në tmp, me sa duket? Vetëm 1. 823 00:52:24,460 --> 00:52:29,620 Pra, me fjalë të tjera, është tmp * a, * një mjet të shkoni në adresën që është aktualisht në një, 824 00:52:29,620 --> 00:52:31,320 cila është dukje 123. 825 00:52:31,320 --> 00:52:33,910 >> Mirë, këtu ne jemi në vend të 123, unë shoh numrin 1, 826 00:52:33,910 --> 00:52:35,670 kështu që unë jam duke shkuar për të vënë numrin 1 atje. 827 00:52:35,670 --> 00:52:39,020 Tani çfarë të bëj në përputhje 2, * a * b =? 828 00:52:39,020 --> 00:52:44,570 Kjo është pak më shumë të përfshira, sepse tani ajo është një? Kjo është 123. 829 00:52:44,570 --> 00:52:50,220 Pra * a është ku? Drejtë ku unë kam qenë më parë. Kështu që të shkojnë atje. Rregull. 830 00:52:50,220 --> 00:52:53,420 Tani, së fundi, dhe pastaj në fund kjo do të fillojë të bëjë kuptim, shpresë, 831 00:52:53,420 --> 00:53:00,280 * B thotë se çfarë është në b? 124. Kështu kam nevojë për të shkojnë atje, e cila është 2. 832 00:53:00,280 --> 00:53:03,430 Pra, çfarë kam vënë, ku? 833 00:53:03,430 --> 00:53:10,100 2 shkon në këtu, sepse * b * a shkon në. Kështu që unë do të bëj këtë. 834 00:53:10,100 --> 00:53:13,120 Dhe ju mund ta shihni tashmë, ndoshta, se ne jemi aq shumë afër 835 00:53:13,120 --> 00:53:17,710 për zgjidhjen e këtij problemi budalla, thjeshtë korrekte për herë të parë 836 00:53:17,710 --> 00:53:20,920 sepse tani ne ende kemi një kujtesë e asaj x ishte, 837 00:53:20,920 --> 00:53:23,230 ne kemi 2 kopje, pa dyshim, nga y, 838 00:53:23,230 --> 00:53:25,850 por tani thotë se linja 3 * b. 839 00:53:25,850 --> 00:53:31,080 Kështu që këtu është b. * Mjetet b shkojnë atje. Pra, ku është vendndodhja 124? 840 00:53:31,080 --> 00:53:35,560 Kjo është me sa duket këtu. Pra, çfarë mund të vënë këtu? Natyrisht, tmp. 841 00:53:35,560 --> 00:53:39,600 Deri tani unë e bëjnë këtë. Pra, unë kam këtu dhe 1 2 here. 842 00:53:39,600 --> 00:53:43,560 Dhe tani çfarë për të gjithë këtë, 123, 124, dhe 1? 843 00:53:43,560 --> 00:53:47,910 Sa më shpejt që kthimet shkëmbim, kjo memorie është aq i mirë sa e humbur 844 00:53:47,910 --> 00:53:51,070 sepse sa më shpejt të kthimit swap, sistemit operativ 845 00:53:51,070 --> 00:53:54,190 është i lirë të përdorin atë kujtesë përsëri në të ardhmen. 846 00:53:54,190 --> 00:53:58,870 Vetëm memorie kryesore së në fund të këtij rafte ashtuquajturës shkopinj rreth. 847 00:53:58,870 --> 00:54:01,470 >> Dhe kështu ne fund kemi tani një version pune. 848 00:54:01,470 --> 00:54:06,310 Më lejoni të shkoj në swap.c, dhe vini re në vijim. 849 00:54:06,310 --> 00:54:11,280 Në krye të programit kam ndryshuar prototip im të jetë int * a dhe int * b. 850 00:54:11,280 --> 00:54:15,000 Pra, e vetmja gjë që unë ndryshuar për të shkuar nga e kuqe, e cila ishte e keqe, të gjelbër, e cila është e mirë, 851 00:54:15,000 --> 00:54:17,350 po kam shtuar këtyre yjeve sot. 852 00:54:17,350 --> 00:54:21,520 Por pastaj këtu poshtë në shkëmbim të vetë unë kam për të kopjuar, ngjitur ajo ishte vetëm në rrëshqitje. 853 00:54:21,520 --> 00:54:24,140 Unë kam një yll këtu, yll ketu - që përputhet me prototipin - 854 00:54:24,140 --> 00:54:27,930 dhe pastaj të gjitha këto gjëra tani kanë yjet përveç tmp 855 00:54:27,930 --> 00:54:30,680 sepse përdorimi i një ndryshore të përkohshme, nuk ka asgjë të re atje. 856 00:54:30,680 --> 00:54:33,040 Unë vetëm nevojë për ruajtje të përkohshme për një int. 857 00:54:33,040 --> 00:54:34,820 Pra, ne nuk kemi nevojë për një yll atje. 858 00:54:34,820 --> 00:54:39,310 Ne vetëm duhet yll në mënyrë që ne mund të kalojnë këtë lloj të kufirit arbitrare 859 00:54:39,310 --> 00:54:42,900 midis këtyre 2 korniza në kujtesë të kompjuterit tim. 860 00:54:42,900 --> 00:54:45,630 Por një gjë e kaluar duhet të ndryshojë, dhe ju mund të keni atë tashmë glimpsed. 861 00:54:45,630 --> 00:54:48,810 Çfarë linjë tjetër është padyshim ndryshe tani? >> [Student] dhe x. 862 00:54:48,810 --> 00:54:53,270 >> Yeah, kështu që 25 është vija e fundit e kodit kam nevojë për të ndryshuar për këtë për të punuar. 863 00:54:53,270 --> 00:54:58,360 Një javë më parë dhe madje edhe të hënën Shkarko 25 dukej si kjo, shkëmbim X dhe Y, 864 00:54:58,360 --> 00:55:02,020 dhe kjo u thye vetëm për shkak se në qoftë se ju thonë swap (x, y) 865 00:55:02,020 --> 00:55:05,660 ju janë dhënë kopje të x dhe y të bie në ujdi, atëherë ajo është bërë gjë e saj, 866 00:55:05,660 --> 00:55:09,080 por ju nuk jeni në të vërtetë ndryshuar x dhe y vetë. 867 00:55:09,080 --> 00:55:12,880 Pra, edhe në qoftë se ju kurrë nuk kam parë këtë karakter para me simbolin komercial në kodin, 868 00:55:12,880 --> 00:55:15,860 vetëm të marrë një guess. Çfarë do të bëjë simbol, me sa duket? 869 00:55:15,860 --> 00:55:17,890 [Student] Merr adresën. Merr >> adresën. 870 00:55:17,890 --> 00:55:21,160 Pra simbol është thënë më jepni adresën e x. 871 00:55:21,160 --> 00:55:25,590 Kush e di se ku është ajo? Ajo ndodh të jetë 123. Unë nuk e kujdesit. Vetëm më jepni adresën e x. 872 00:55:25,590 --> 00:55:28,340 Dhe y do të thotë më jepni adresën e y. 873 00:55:28,340 --> 00:55:34,450 Dhe në këtë pikë historia është krejtësisht në përputhje me foto ne tërhoqi një moment më parë. 874 00:55:34,450 --> 00:55:38,310 >> Kështu që unë do të pranoj pointers, sigurisht për mua kur kam filluar të mësuar këtë, 875 00:55:38,310 --> 00:55:40,570 ishin padyshim një nga gjërat më të vështira për të mbyllur mendjen time rreth. 876 00:55:40,570 --> 00:55:43,760 Por e kuptojnë, veçanërisht si ne të mbajtur luajtur me këto llojet e gjërave, 877 00:55:43,760 --> 00:55:48,030 në qoftë se ju thyejnë atë poshtë për këto lloj super të thjeshtë intelektualisht jointeresant probleme 878 00:55:48,030 --> 00:55:52,270 e vetëm lëvizin numrat shikoj, përgjigje për një shumë të konfuzionit me pointers 879 00:55:52,270 --> 00:55:56,590 me të vërtetë mund të rrjedhin nga këto mekanikë shumë themelore. 880 00:55:56,590 --> 00:55:59,070 Këtu është një adresë. Shkoni atje me yllin. 881 00:55:59,070 --> 00:56:03,830 Ose anasjelltas, këtu është një simbol. Kuptoj se çfarë në të vërtetë është adresa. 882 00:56:03,830 --> 00:56:06,270 Dakord. 883 00:56:06,270 --> 00:56:09,000 Pra, ku është e gjithë kjo vjen nga kujtesa? 884 00:56:09,000 --> 00:56:12,360 Ne kemi tërhequr kete foto nja dy herë, dhe unë mbaj premtues ne do të kthehemi në të, 885 00:56:12,360 --> 00:56:14,920 por këtu është përfaqësimi i kujtesën e kompjuterit tuaj 886 00:56:14,920 --> 00:56:17,420 kjo është pak më shumë se etiketuar dërrasë tonë këtu është. 887 00:56:17,420 --> 00:56:21,590 Segmenti Teksti në krye përfaqëson atë në lidhje me programin tuaj? 888 00:56:21,590 --> 00:56:26,090 [Përgjigja e padëgjueshme Studenti] >> Na vjen keq? Thuaj përsëri. 889 00:56:26,090 --> 00:56:28,660 [Student] Programi aktual. Programi aktual >>. 890 00:56:28,660 --> 00:56:32,430 >> Pra tingëllimë 0s dhe 1s që ju keni hartuar pas shkruar kodin C dhe pastaj drejtimin 891 00:56:32,430 --> 00:56:35,910 dhe gjenerimin e përfundon 0s dhe 1s deri atje duke u tucked në kujtesë 892 00:56:35,910 --> 00:56:38,570 sepse kur ju klikoni dy herë një ikonë për Mac apo PC 893 00:56:38,570 --> 00:56:43,010 ose drejtuar një komandë në ftim si mario tuaj, 0s 1s juaj dhe nga disku 894 00:56:43,010 --> 00:56:45,700 merrni ngarkuar në memorie në mënyrë që kompjuteri mund të manipulojë ato 895 00:56:45,700 --> 00:56:47,540 dhe ekzekutuar ata më shpejt. 896 00:56:47,540 --> 00:56:50,880 Të dhënat nisur kështu dhe të dhënat uninitialized, ne nuk do të flasim shumë për ata, 897 00:56:50,880 --> 00:56:52,420 por ato janë vetëm variabla globale. 898 00:56:52,420 --> 00:56:54,710 Initialized thotë variablave globale që ju dha për vlerat; 899 00:56:54,710 --> 00:56:59,300 uninitialized thotë variablave globale se ju ende nuk japin vlera. 900 00:56:59,300 --> 00:57:01,900 Pastaj ka këto variabla mjedis të cilën unë do të plotësisht Vala dorën time në, 901 00:57:01,900 --> 00:57:04,860 por ata janë atje dhe se gjëra të tilla si dyqane emrin tuaj përdorues 902 00:57:04,860 --> 00:57:08,090 dhe lloj tjetër të detaje të nivelit të ulët. 903 00:57:08,090 --> 00:57:12,880 Por copa juiciest e shtrirjes kujtesën tuaj është kjo gjë quhet rafte dhe tog. 904 00:57:12,880 --> 00:57:17,470 Rafte përsëri, të jetë i qartë, është e kujtesës që është përdorur sa herë që funksionet janë të thirrur, 905 00:57:17,470 --> 00:57:19,710 sa herë që ka shumë variabla lokale 906 00:57:19,710 --> 00:57:22,120 dhe sa herë janë parametrat duke kaluar rreth. 907 00:57:22,120 --> 00:57:24,490 Të gjithë që ndodh në rafte. 908 00:57:24,490 --> 00:57:29,570 Tog ne nuk kemi biseduar rreth, por të marrë një guess i cili përdor sasi. 909 00:57:31,120 --> 00:57:32,690 Vetëm një copë e ndryshme të kujtesës. 910 00:57:32,690 --> 00:57:36,620 Kjo ndodh për të tërhequr këtu në krye, por kjo është një konventë arbitrare pikture. 911 00:57:36,620 --> 00:57:41,670 Kush është me sa duket duke përdorur kujtesën nga tog për javë të tëra? 912 00:57:41,670 --> 00:57:44,830 Kjo është teknikisht, por ju tërthorazi. >> [Student] getString. 913 00:57:44,830 --> 00:57:47,950 GetString dhe malloc. Kështu që këtu është dallimi themelor. 914 00:57:47,950 --> 00:57:51,300 >> Ju e dini për disa javëve të fundit se në qoftë se keni nevojë për kujtesën, vetëm të deklarojë një ndryshore. 915 00:57:51,300 --> 00:57:54,560 Nëse keni nevojë për shumë të kujtesës, mund të deklarojë një koleksion të drejtë brenda e funksionit tuaj. 916 00:57:54,560 --> 00:57:59,620 Por problemi që ne kemi mbajtur përballur është në qoftë se ju të deklarojë variablave lokale brenda funksioneve, 917 00:57:59,620 --> 00:58:05,340 sa më shpejt të kthimit të funksionit, se çfarë ndodh në kujtesën dhe atyre variablave? 918 00:58:05,340 --> 00:58:09,620 Vetëm lloj i tij nuk është më e juaja, e drejtë? Ajo thjesht zhduket lloj konceptualisht. 919 00:58:09,620 --> 00:58:13,950 Është ende fizikisht atje, natyrisht, por kjo nuk është më e drejta juaj për t'u përdorur. 920 00:58:13,950 --> 00:58:17,160 Kjo është padyshim problematike në qoftë se ju dëshironi të shkruani funksionet në jetën 921 00:58:17,160 --> 00:58:20,440 që në fakt i kujtesës dhe nuk japin atë menjëherë. 922 00:58:20,440 --> 00:58:24,180 Rasti në pikën: Qëllimi getString në jetë është që të kemi asnjë ide paraprakisht 923 00:58:24,180 --> 00:58:26,390 si e madhe e një varg që unë jam duke shkuar për të tipit në tastierë, 924 00:58:26,390 --> 00:58:30,390 por ajo e mori për të të jetë në gjendje të siguroj kujtesë për të mbajtur Davidin apo Tungjatjeta 925 00:58:30,390 --> 00:58:32,860 ose një ese të tërë që përdoruesi mund të keni shtypur in 926 00:58:32,860 --> 00:58:35,280 Pra getString ka qenë duke përdorur malloc. 927 00:58:35,280 --> 00:58:38,910 Malloc prandaj duhet të jetë duke përdorur jo rafte; 928 00:58:38,910 --> 00:58:40,770 vend të kësaj ajo është duke përdorur këtë gjë të quajtur grumbull. 929 00:58:40,770 --> 00:58:44,430 Nuk ka asgjë të ndryshme në lidhje me kujtesën. Kjo nuk është e shpejtë apo të ngadalshëm, ose diçka të tillë. 930 00:58:44,430 --> 00:58:46,570 Është vetëm fizikisht në një vend tjetër. 931 00:58:46,570 --> 00:58:50,120 >> Por rregulli është se kujtesa që është ndarë në tog 932 00:58:50,120 --> 00:58:56,180 kurrë nuk do të merren larg nga ju derisa ju telefononi - të marrë një guess - falas. 933 00:58:56,180 --> 00:59:00,510 Në të kundërt, çdo kujtim që ju kërkoni për në rafte vetëm me shpalljen e një grup 934 00:59:00,510 --> 00:59:03,320 ose deklaruar një ndryshore si ne kemi qenë bërë për disa javë, 935 00:59:03,320 --> 00:59:05,640 që nga default përfundon deri në rafte. 936 00:59:05,640 --> 00:59:09,550 Dhe që punon e madhe 90% të kohës, por në ato raste të rralla 937 00:59:09,550 --> 00:59:12,470 ku ju doni të caktojë kujtesës dhe për të mbajtur atë rreth, 938 00:59:12,470 --> 00:59:14,730 atëherë ju duhet të përdorni një funksion si malloc. 939 00:59:14,730 --> 00:59:19,370 Apo ne kemi përdorur një funksion si getString, e cila nga ana e përdor malloc. 940 00:59:19,370 --> 00:59:23,300 Le të shohim kur kjo mund të prishen dhe pastaj të marrë një vështrim në Binky. 941 00:59:23,300 --> 00:59:25,820 Ne do të kthehen me atë në të ardhmen. 942 00:59:25,820 --> 00:59:29,270 Këtu është një program super të thjeshtë që në 2 linja e parë e bën atë? 943 00:59:29,270 --> 00:59:33,460 Në anglisht, çfarë bëjnë këto para 2 rreshta të kodit të bëjë brenda kryesore? 944 00:59:33,460 --> 00:59:35,600 [Përgjigja e padëgjueshme Student] 945 00:59:35,600 --> 00:59:37,880 Kujdesshëm. Ajo nuk më jep adresën e x apo y. 946 00:59:37,880 --> 00:59:41,840 [Student] Jep pointers për ints. Mirë >>. Jepni 2 pointers të integers. 947 00:59:41,840 --> 00:59:45,130 Me fjalë të tjera, jepni 2 chunks e kujtesës që unë mbaj vizatim sot, 948 00:59:45,130 --> 00:59:46,950 edhe pse unë fshirë atë tani, si sheshe. 949 00:59:46,950 --> 00:59:50,000 Jepni 2 chunks e kujtesës, e quajtur x, një i quajtur y - 950 00:59:50,000 --> 00:59:54,320 më herët kam quajtur ata s dhe t - dhe çfarë është lloji i asaj copë e kujtesës? 951 00:59:54,320 --> 00:59:57,160 Kjo do të ruajtur një adresë. 952 00:59:57,160 --> 00:59:59,110 Kjo është e tipit int *. 953 00:59:59,110 --> 01:00:01,630 >> Pra, adresa e një int përfundimisht do të jetojnë në x, 954 01:00:01,630 --> 01:00:03,860 adresa e një int përfundimisht do të jetojnë në y, 955 01:00:03,860 --> 01:00:08,460 por fillimisht, ajo që është në brendësi të x dhe y? Kush e di? Vlerat e mbeturina. 956 01:00:08,460 --> 01:00:10,180 Ajo ka asgjë të bëjë me pointers. 957 01:00:10,180 --> 01:00:12,720 Në qoftë se ne nuk kemi vënë diçka atje, kush e di se çfarë është në të vërtetë atje? 958 01:00:12,720 --> 01:00:18,950 Tani, x. Çfarë ndodh këtu? Kjo është legit tani sepse x është një akrep. Kjo është një int *. 959 01:00:18,950 --> 01:00:21,870 Kështu që do të thotë unë mund të vënë në x adresën e disa copë e kujtesës. 960 01:00:21,870 --> 01:00:25,120 Çfarë do të malloc kthehet? Përsosur, ajo kthehet adresat, 961 01:00:25,120 --> 01:00:28,510 adresën e bajt parë në një copë tërë të kujtesës. 962 01:00:28,510 --> 01:00:31,140 Sa është kjo me sa duket bytes ndarjen, për shembull, në aplikim? 963 01:00:31,140 --> 01:00:33,510 Çfarë është madhësia e një int? 4. 964 01:00:33,510 --> 01:00:36,600 Nëse ju mendoni përsëri në 1 javë, kjo nuk është e super të rëndësishme të kujtojmë gjithmonë se, 965 01:00:36,600 --> 01:00:38,870 por në këtë rast është e dobishme të dinë, 4 bytes. 966 01:00:38,870 --> 01:00:41,770 Pra, kjo është ndarjes në 4 bytes grumbullosh 967 01:00:41,770 --> 01:00:46,110 dhe është kthyer adresën e një të parë për mua në mënyrë arbitrare. 968 01:00:46,110 --> 01:00:47,700 Tani, çfarë është duke bërë x? 969 01:00:47,700 --> 01:00:52,200 A * x = 42 është duke bërë çfarë? 970 01:00:52,200 --> 01:00:57,150 Nëse në këtë pikë në histori kemi x, e cila duket si ky me disa vlera e mbeturinave, 971 01:00:57,150 --> 01:01:04,120 ky është tani y me disa vlera mbeturinave, tani në përputhje 3 kam ndarë 4 bytes. 972 01:01:04,120 --> 01:01:06,950 Kjo foto thelb duket si ky. 973 01:01:06,950 --> 01:01:12,010 Ose më saktë, nëse kjo është adresa arbitrare 123, kjo është ajo që historia jonë tani duket si. 974 01:01:12,010 --> 01:01:23,940 * X = 42 tani do të thotë çfarë? Kjo do të thotë të shkojë në 123 adresën dhe të vënë numrin 42 atje. 975 01:01:23,940 --> 01:01:26,220 Unë nuk kam nevojë për të nxjerrë këto rreshta, sepse ne nuk jemi duke bërë vargjet. 976 01:01:26,220 --> 01:01:29,480 >> Unë duhet të ketë shkruar vetëm atë si kjo, dhe vetëm për hir të demonstratës së, 977 01:01:29,480 --> 01:01:33,240 42 si një lloj int të merr një shumë hapësirë, 4 bytes. 978 01:01:33,240 --> 01:01:35,960 Pra, kjo është ajo që ka ndodhur atje, por ka një problem tani. 979 01:01:35,960 --> 01:01:40,580 * Y = 13. Çfarë do të ndodhë këtu? 980 01:01:40,580 --> 01:01:46,470 Problemi është * y në botën tonë të thjeshtuar të thotë vetëm të shkoni në adresën në y. 981 01:01:46,470 --> 01:01:48,590 Çfarë është në y? Kjo është disa vlera mbeturina. 982 01:01:48,590 --> 01:01:53,150 Pra, le të supozojmë se kjo është vlera e mbeturinave 5551212, diçka të çmendur si kjo. 983 01:01:53,150 --> 01:01:56,750 * Mjetet y shkojnë për të adresuar 5.551.212. 984 01:01:56,750 --> 01:02:00,450 Kjo është si këtu. Ajo nuk ekziston, për shembull. 985 01:02:00,450 --> 01:02:05,310 Pra * y merr 13 mjete që unë jam duke u përpjekur për të nxjerrë 13 here. Ajo nuk ekziston. 986 01:02:05,310 --> 01:02:08,790 Unë e kam tejkaluar segmentin e dërrasën e zezë. Çfarë mund të shkoj? 987 01:02:08,790 --> 01:02:14,930 Kjo fshehtë segmentimit mesazh faji, sepse unë jam duke u përpjekur për të vënë në kujtesën 988 01:02:14,930 --> 01:02:19,470 si një vlerë 13 në një vend që nuk ekziston. 989 01:02:19,470 --> 01:02:23,900 Pjesa tjetër e programit mund të punojnë në rregull, por deri në atë moment ajo nuk ka. 990 01:02:23,900 --> 01:02:25,350 Pra, le të përpiqemi për të treguar këtë histori. 991 01:02:25,350 --> 01:02:27,830 Ne do të kthehen në se një herë ne kemi biseduar për magji. 992 01:02:27,830 --> 01:02:30,290 Le të kthehemi në këtë dhe të përfundojë me këtë gjë të quajtur Binky, 993 01:02:30,290 --> 01:02:33,710 i cili është një profesor risjell Stanford ulur në shtëpi duke luajtur me claymation, 994 01:02:33,710 --> 01:02:36,380 për të treguar historinë e pikërisht atij programi të njëjtë. 995 01:02:36,380 --> 01:02:40,580 Kjo është vetëm rreth 3 minuta gjatë. Këtu kemi Binky. 996 01:02:40,580 --> 01:02:45,030 [Gjuha mashkull në video] Hej Binky, zgjohen. Është koha për argëtim akrep. 997 01:02:45,030 --> 01:02:50,080 [Binky] Çfarë është ajo? Mësoni rreth pointers? Oh, me mirësi të shtrirë! 998 01:02:50,080 --> 01:02:53,700 [Gjuha mashkull] E pra, për të filluar, unë mendoj që ne do të jeni nevojë për një pointers çift. 999 01:02:53,700 --> 01:02:57,890 >> [Binky] Okay. Ky kod ndan 2 pointers që mund të tregojnë për integers. 1000 01:02:57,890 --> 01:03:02,220 [Gjuha mashkull] Okay. E pra, unë shoh 2 pointers, por ata nuk duket të jetë duke treguar për asgjë. 1001 01:03:02,220 --> 01:03:05,550 [Binky] Kjo është e drejtë. Fillimisht, pointers nuk tregojnë për ndonjë gjë. 1002 01:03:05,550 --> 01:03:09,270 Gjërat që çojnë tek quhen pointees, dhe vendosjen e tyre deri është një hap i veçantë. 1003 01:03:09,270 --> 01:03:12,330 [Gjuha mashkull] Oh, e drejtë, e drejtë. Unë e dinte se. Të pointees janë të ndara. 1004 01:03:12,330 --> 01:03:15,630 Eri, kështu si bëni ju akordojë një pointee? 1005 01:03:15,630 --> 01:03:21,510 [Binky] Okay. Ky kod ndan një pointee ri integer, dhe kjo pjesë vendos x për pikë për të. 1006 01:03:21,510 --> 01:03:23,500 [Gjuha mashkull] Hej, që duket më mirë. 1007 01:03:23,500 --> 01:03:26,030 Kështu që e bëjnë atë të bëjë diçka. >> [Binky] Okay. 1008 01:03:26,030 --> 01:03:30,300 Unë do të dereference X tregues për të ruajtur numrin 42 në pointee saj. 1009 01:03:30,300 --> 01:03:34,410 Për këtë mashtrim që unë do të duhet shkop magjik e dereferencing time. 1010 01:03:34,410 --> 01:03:38,610 [Gjuha mashkull] shkop magjik tuaj magjik të dereferencing? Kjo është e madhe. 1011 01:03:38,610 --> 01:03:44,230 [Binky] Kjo është ajo që duket si kodi. Unë vetëm do të ngritur numrin dhe ... [Popping tingull] 1012 01:03:44,230 --> 01:03:46,100 [Gjuha mashkull] Hej po, atje shkon. 1013 01:03:46,100 --> 01:03:50,990 Pra, duke bërë një dereference në vijim x shigjeta për të hyrë në pointee e saj, 1014 01:03:50,990 --> 01:03:53,230 në këtë rast për të ruajtur 42 në atje. 1015 01:03:53,230 --> 01:03:57,630 Hej, provoni duke e përdorur atë për të ruajtur numrin e 13 nëpërmjet treguesin tjetër, y. 1016 01:03:57,630 --> 01:04:03,250 [Binky] Okay. Unë vetëm do të shkoj këtu për y dhe për të marrë 13 numri ngritur 1017 01:04:03,250 --> 01:04:08,360 dhe pastaj të marrë shkopin e dereferencing dhe vetëm ... [Tingull gumëzhimë] Whoa! 1018 01:04:08,360 --> 01:04:10,980 [Gjuha mashkull] Oh hey, që nuk punojnë. 1019 01:04:10,980 --> 01:04:14,870 >> Thuaj, Binky, unë nuk mendoj se dereferencing y është një ide e mirë 1020 01:04:14,870 --> 01:04:17,880 sepse ngritjen e pointee është një hap i veçantë 1021 01:04:17,880 --> 01:04:19,850 dhe unë nuk mendoj se ne ndonjëherë e bëri atë. 1022 01:04:19,850 --> 01:04:21,770 [Binky] Hmm, pikë e mirë. 1023 01:04:21,770 --> 01:04:26,640 [Gjuha mashkull] Yeah. Ne ndarë y akrep, por ne kurrë nuk vënë atë në një pikë të pointee. 1024 01:04:26,640 --> 01:04:28,780 [Binky] Hmm, shumë i vëmendshëm. 1025 01:04:28,780 --> 01:04:30,690 [Gjuha mashkull] Hej, ju jeni në kërkim të mira atje, Binky. 1026 01:04:30,690 --> 01:04:34,160 Ju mund të rregullojmë atë mënyrë që pikë në y pointee njëjtë si x? >> [Binky] Sure. 1027 01:04:34,160 --> 01:04:37,100 Unë do të përdorin shkop magjik e detyrës time akrep. 1028 01:04:37,100 --> 01:04:39,070 [Mashkull Gjuha] është se do të jetë një problem si më parë? 1029 01:04:39,070 --> 01:04:40,840 [Binky] Jo, kjo nuk do të prekë pointees. 1030 01:04:40,840 --> 01:04:44,780 Ajo vetëm ndryshon një tregues për pikë për të njëjtën gjë si një tjetër. [Popping tingull] 1031 01:04:44,780 --> 01:04:48,570 [Gjuha mashkull] Oh, unë shoh. Tani y pikë në të njëjtin vend si x. 1032 01:04:48,570 --> 01:04:51,140 Pra prisni. Tani y është fikse. Ajo ka një pointee. 1033 01:04:51,140 --> 01:04:54,520 Kështu që ju mund të provoni shkopin e dereferencing përsëri për të dërguar më shumë se 13. 1034 01:04:54,520 --> 01:04:58,130 [Binky] Uh, në rregull. Këtu shkon. [Popping tingull] 1035 01:04:58,130 --> 01:05:01,250 [Gjuha mashkull] Hej, shikoni në atë. Tani dereferencing punimeve për y. 1036 01:05:01,250 --> 01:05:05,200 Dhe për shkak se janë për ndarjen e pointers se pointee një, ata të dy shohin 13. 1037 01:05:05,200 --> 01:05:06,910 [Binky] Yeah, ndarjen. Çfarëdo. 1038 01:05:06,910 --> 01:05:08,880 >> Pra, jemi ne do të kaloni vende tani? 1039 01:05:08,880 --> 01:05:11,420 [Gjuha mashkull] Oh shiko, ne jemi jashtë kohës. >> [Binky] Por - 1040 01:05:11,420 --> 01:05:13,880 [Gjuha mashkull] Vetëm mos harroni të 3 rregullat pointer. 1041 01:05:13,880 --> 01:05:18,630 Numri 1, struktura bazë është se ju keni një tregues dhe ajo tregon mbi një pointee. 1042 01:05:18,630 --> 01:05:23,120 Por tregues dhe pointee janë të ndara, dhe gabimi i përbashkët është për të ngritur një tregues 1043 01:05:23,120 --> 01:05:25,680 por për të harrojnë për të dhënë atë një pointee. 1044 01:05:25,680 --> 01:05:29,580 Numri 2, dereferencing akrep fillon në treguesin dhe ndjek shigjetën e tij mbi 1045 01:05:29,580 --> 01:05:31,060 për të hyrë në pointee saj. 1046 01:05:31,060 --> 01:05:34,340 Siç e dimë të gjithë, kjo funksionon vetëm nëse ka një pointee, 1047 01:05:34,340 --> 01:05:36,460 cili lloj i merr kthehet për të sunduar numër 1. 1048 01:05:36,460 --> 01:05:39,870 Numri 3, caktimi akrep merr një akrep dhe e ndryshon atë 1049 01:05:39,870 --> 01:05:42,390 për pikë në pointee njëjtën si një tjetër pointer. 1050 01:05:42,390 --> 01:05:45,890 Pra, pas caktimit, 2 pointers do të tregojë të njëjtën pointee. 1051 01:05:45,890 --> 01:05:47,800 Ndonjëherë që është quajtur ndarjen. 1052 01:05:47,800 --> 01:05:50,910 >> Dhe kjo është e gjitha nuk është për atë të vërtetë. Bye-bye tani. 1053 01:05:50,910 --> 01:05:55,840 Kjo është Binky. Kjo është CS50. Ne do të shohim se javën e ardhshme. [Duartrokitje] 1054 01:05:55,840 --> 01:05:59,000 >> [CS50.TV]