1 00:00:00,000 --> 00:00:11,242 >> [Duke luajtur muzikë] 2 00:00:11,242 --> 00:00:16,630 >> DAVID J. Malan: E gjithë kjo është e drejtë CS50 dhe ky është fillimi i javës pesë. 3 00:00:16,630 --> 00:00:21,480 Pra sot, nën jastekë tuaj vend, ju nuk do të gjeni asgjë. 4 00:00:21,480 --> 00:00:24,790 Por më lart, ju duhet të gjeni këto, një shenjë e vogël e vlerësimit tonë për 5 00:00:24,790 --> 00:00:26,970 të gjithë punën që keni vënë në lojë prej pesëmbëdhjetë. 6 00:00:26,970 --> 00:00:30,290 Thjesht hiqni rrethin e vogël në Përfundimtar të fillojë të luajë për 7 00:00:30,290 --> 00:00:31,680 Pjesa e mbetur e klasës. 8 00:00:31,680 --> 00:00:38,930 >> Pra kujtoj se, ose e di atë problem të caktuar katër, e cila doli këtë fundjavë, 9 00:00:38,930 --> 00:00:40,340 përfshin shkrim një tjetër lojë. 10 00:00:40,340 --> 00:00:43,740 Por këtë herë ajo përfshin përdorimin e një aktuale grafik user interface, jo një 11 00:00:43,740 --> 00:00:46,310 ndërfaqe tekstuale si Loja e pesëmbëdhjetë ishte. 12 00:00:46,310 --> 00:00:50,210 Dhe loja që shtrihet përpara jush, në qoftë se ju nuk e keni parë ende kjo e ardhshëm, 13 00:00:50,210 --> 00:00:52,310 duket një diçka të vogël si kjo. 14 00:00:52,310 --> 00:00:55,170 Unë jam duke shkuar për të shkuar në terminalin e mia dritare këtu në GDB. 15 00:00:55,170 --> 00:00:58,600 Dhe unë jam duke shkuar për të shkuar përpara dhe të drejtuar zgjidhja e personelit, të cilat ju mund të hyni 16 00:00:58,600 --> 00:01:01,010 pas drejtimin përditësim 50 si zakonisht. 17 00:01:01,010 --> 00:01:04,090 >> Por unë jam duke shkuar për të vënë atë në një pak Mënyra e fshehtë, pak vezë të Pashkëve, 18 00:01:04,090 --> 00:01:08,480 ashtu-quajtur mënyra Perëndia, nga vënë Perëndinë në argv1. 19 00:01:08,480 --> 00:01:12,920 Dhe unë duhet të ndiqni udhëzimet e mi, atë në drejtimin e mi 20 00:01:12,920 --> 00:01:14,220 Problemi vendosur directory. 21 00:01:14,220 --> 00:01:19,190 Pra, tani që ju të shihni një version të plotë i lojës së Breakout. 22 00:01:19,190 --> 00:01:21,090 Në fakt, kjo nuk është duart-mode. 23 00:01:21,090 --> 00:01:24,850 Pra, kjo është në fakt - 24 00:01:24,850 --> 00:01:26,470 kënaqën edhe pse ju mund të jetë - 25 00:01:26,470 --> 00:01:30,850 goxha i parëndësishëm për të zbatuar mënyrën Perëndisë në Breakout, ndryshe nga pesëmbëdhjetë lojë, 26 00:01:30,850 --> 00:01:33,590 që disa prej jush mund të ketë prekur për edicionin e hacker. 27 00:01:33,590 --> 00:01:37,890 >> Në Breakout mjafton në Perëndinë Mënyra për të thjesht të bëjë çfarë, 28 00:01:37,890 --> 00:01:41,220 intuitivisht me pallë? 29 00:01:41,220 --> 00:01:45,630 Vetëm të bëjë atë të barabartë për çfarëdo pozita horizontale është e topit. 30 00:01:45,630 --> 00:01:49,220 Dhe për aq kohë sa ju të bëni këtë në analizohen përkrah me topin duke lëvizur Kjo lojë do të 31 00:01:49,220 --> 00:01:53,100 kurrë, kurrë, kurrë humbasë topin dhe ju do të fitojë çdo kohë. 32 00:01:53,100 --> 00:01:55,430 >> Por në edicionin e kësaj jave hacker ka më shumë se vetëm regjimin Perëndisë. 33 00:01:55,430 --> 00:01:56,720 Ka një numër të karakteristikave të tjera. 34 00:01:56,720 --> 00:01:58,140 Midis tyre, lasers. 35 00:01:58,140 --> 00:02:01,070 Kështu që nëse ju me të vërtetë të merrni të padurueshëm ju mund të fillojnë të shtënat poshtë tulla 36 00:02:01,070 --> 00:02:02,120 dhe disa të tjerë. 37 00:02:02,120 --> 00:02:04,560 Dhe për ata prej jush që do të doja të kalibruar standardin kundrejt Hacker 38 00:02:04,560 --> 00:02:08,750 edition, unë mund të shoh se kjo javës së Edicioni hacker qëllimisht është një 39 00:02:08,750 --> 00:02:12,830 pak më shumë që mund të bëhet, thonë se, përveç Perëndisë Regjimi ishte me lojë pesëmbëdhjetë. 40 00:02:12,830 --> 00:02:15,300 >> Pra, nëse ju jeni duke kërkuar për një shtrirje dhe ju jeni duke kërkuar për disa argëtim shtesë 41 00:02:15,300 --> 00:02:18,400 Karakteristika të bëni pikiatë në qoftë se të interesit. 42 00:02:18,400 --> 00:02:21,280 Tani më shumë praktikisht, më lejoni të theksoj nga një gjë si. 43 00:02:21,280 --> 00:02:24,780 GDB, të cilën disa prej jush nuk mund të ketë ende prekur personalisht, e cila është e mirë. 44 00:02:24,780 --> 00:02:28,530 Por tani është me të vërtetë koha për të marrë të përdoret për këtë dhe të rehatshme me këtë mjet 45 00:02:28,530 --> 00:02:31,510 sepse kjo do të bëjë jetën tuaj shumë më e lehtë, në të vërtetë. 46 00:02:31,510 --> 00:02:34,900 >> Per leksion Rob mbi GDB një çift javë më parë, e kujtojnë 47 00:02:34,900 --> 00:02:36,810 se GDB eshte nje debugger. 48 00:02:36,810 --> 00:02:41,230 Është një mjet që ju lejon të kandidojë tuaj Programi por të drejtuar atë hap pas hapi, linjë 49 00:02:41,230 --> 00:02:45,680 nga linjë, kështu që ju mund të thes rreth, në mënyrë që ju të shihni gjëra të ndodh, kështu që 50 00:02:45,680 --> 00:02:47,310 që ju mund të shtypura jashtë vlerat e variablave. 51 00:02:47,310 --> 00:02:50,580 Me pak fjalë, kjo ju jep shumë më shumë Fuqia se printDef bën. 52 00:02:50,580 --> 00:02:52,900 >> Tani pa dyshim, ndërfaqe është goxha misterioze. 53 00:02:52,900 --> 00:02:55,180 Ndërfaqja e zezë dhe e bardhë tekstual për pjesën më të madhe. 54 00:02:55,180 --> 00:02:57,400 Komandat janë disi të vështira për të kujtuar në fillim. 55 00:02:57,400 --> 00:03:01,230 Por edhe pse kjo mund të ju merr gjysmën e një orë, një orë, për të vënë atë upfront 56 00:03:01,230 --> 00:03:02,940 investimi i kohës në atë, besoni mua. 57 00:03:02,940 --> 00:03:06,440 Sigurisht që deri në fund të semestër ajo do të shpëtojë ju një urdhër të magnitudë më shumë 58 00:03:06,440 --> 00:03:07,600 Ora se kaq. 59 00:03:07,600 --> 00:03:09,200 >> Pra, në fillim të javës pikiatë in 60 00:03:09,200 --> 00:03:13,200 Dhe në aspektin e Breakout, e di se ju mund ta bëjë këtë për aq kohë sa ju keni 61 00:03:13,200 --> 00:03:18,230 Kodi shpërndarja ose kodin tuaj në progres në directory tuaj Pst4. 62 00:03:18,230 --> 00:03:21,680 E di se ju mund të kandidojë gdb. / Breakout. 63 00:03:21,680 --> 00:03:23,490 >> Kjo do të hapë deri një dritare si kjo. 64 00:03:23,490 --> 00:03:25,530 Më lejoni t'ju jap vetes më shumë e nje dritare terminali. 65 00:03:25,530 --> 00:03:27,770 Dhe pastaj çfarë unë jam duke shkuar për të shkuar përpara dhe të bëjë, ajo nuk është vetëm drejtuar atë. 66 00:03:27,770 --> 00:03:30,690 Unë jam duke shkuar për të parë të vendosur një pikë pushim Recall, e cila ju lejon të pauzë 67 00:03:30,690 --> 00:03:32,500 Ekzekutimi në një vend të veçantë. 68 00:03:32,500 --> 00:03:35,750 >> Vetëm për të mbajtur gjërat e thjeshta që unë jam duke shkuar për të thyer në një vijë vetëm nga shtypja 69 00:03:35,750 --> 00:03:37,000 numër një. 70 00:03:37,000 --> 00:03:40,080 71 00:03:40,080 --> 00:03:43,250 Më lejoni të vërtetë të ri-hapur këtë dritare për shkak se ajo është duke marrë një 72 00:03:43,250 --> 00:03:45,700 pak e vogël atje. 73 00:03:45,700 --> 00:03:53,270 Pra, ajo që unë jam tani do të bëjmë këtu është në qoftë se unë të hapur dritaren time terminali. 74 00:03:53,270 --> 00:03:53,910 Come on, ne do të shkojmë atje. 75 00:03:53,910 --> 00:03:59,850 >> Deri tani, nëse unë kthehem në Dropbox, Pst4 dhe të drejtuar gdb. / Breakout hyjë, njoftim 76 00:03:59,850 --> 00:04:02,600 Unë jam duke shkuar për të thyer një për të vendosur një pikë pushim në një linjë. 77 00:04:02,600 --> 00:04:04,840 Dhe tani unë jam duke shkuar për të shkuar përpara dhe lloji kandidojë. 78 00:04:04,840 --> 00:04:07,370 Dhe kur unë bëj, asgjë njoftim duket të ndodhë. 79 00:04:07,370 --> 00:04:08,120 >> Nuk ka pop up. 80 00:04:08,120 --> 00:04:09,790 Nuk ka asnjë grafike Ndërfaqja e përdoruesit ende. 81 00:04:09,790 --> 00:04:13,340 Por kjo është e kuptueshme sepse unë jam fjalë për fjalë në një linjë në programin tim. 82 00:04:13,340 --> 00:04:17,110 Dhe vëreni se unë kam përcjellë të shpejtë, posaçërisht tani për 62, sepse të gjithë 83 00:04:17,110 --> 00:04:20,600 sende në krye të këtij file është gjëra të tilla si komente dhe konstantet dhe 84 00:04:20,600 --> 00:04:22,460 jointeresant gjëra për tani. 85 00:04:22,460 --> 00:04:25,840 >> Deri tani unë jam në brendësi të kryesore, me sa duket, në linjë 62. 86 00:04:25,840 --> 00:04:27,960 Dhe kjo është vetëm shpërndarja , kodi kujtojnë. 87 00:04:27,960 --> 00:04:33,810 Nëse kam hapur këtë ide duke shkuar, në mënyrë të ngjashme, në directory kutinë time të bjerë në Pst4, 88 00:04:33,810 --> 00:04:35,450 në breakout.c. 89 00:04:35,450 --> 00:04:40,670 Dhe në qoftë se unë lëvizni poshtë dhe poshtë dhe poshtë, dhe më lejoni të shkoj përpara dhe të kthehet në 90 00:04:40,670 --> 00:04:44,990 numrat e mi të linjës. 91 00:04:44,990 --> 00:04:50,300 >> Ajo që unë do të shohim, nëse unë lëvizni poshtë për të Linja 62, është pikërisht vija që 92 00:04:50,300 --> 00:04:50,910 ne kemi ndaluar në. 93 00:04:50,910 --> 00:04:53,720 Pra, kjo vijë këtu, 62 vjeç, është ku ne jemi gati të jetë. 94 00:04:53,720 --> 00:04:57,470 Deri tani në gdb, në qoftë se unë të shkojnë përpara dhe të shtypni tani e ardhshëm, ajo do të hyjë në 95 00:04:57,470 --> 00:04:58,450 ekzekutojë atë linjë. 96 00:04:58,450 --> 00:05:00,610 Dhe voila, ne kemi ashtuquajtura dritare g. 97 00:05:00,610 --> 00:05:02,800 Nëse panjohur me atë që një GWindow është jo te shqetësoni. 98 00:05:02,800 --> 00:05:05,740 Spekulim do ju prezantoj me të, si edhe një numër të videos Walkthrough 99 00:05:05,740 --> 00:05:06,830 ngulitur në spekulim. 100 00:05:06,830 --> 00:05:08,610 >> Por tani le të bëjnë këtë një pak më shumë interesante. 101 00:05:08,610 --> 00:05:10,960 Më lejoni të lëvizë mbi këtë dritare në anën pak. 102 00:05:10,960 --> 00:05:13,480 Më lejoni të bëjë një dritare pak madhe kështu që unë mund të shoh më shumë. 103 00:05:13,480 --> 00:05:16,140 >> Dhe tani më lejoni të shkoj përpara dhe të bëjë ardhshëm përsëri. 104 00:05:16,140 --> 00:05:17,550 Dhe nuk janë tulla e mi. 105 00:05:17,550 --> 00:05:20,490 Nëse unë lloji ardhshëm përsëri tani unë shoh topin. 106 00:05:20,490 --> 00:05:23,520 Dhe në qoftë se unë lloji ardhshëm përsëri tani unë shoh vozis. 107 00:05:23,520 --> 00:05:26,690 >> Dhe për fat të mirë kjo nuk është gedit bashkëpunuar me të vërtetë duke treguar mua 108 00:05:26,690 --> 00:05:27,660 çdo gjë që unë dua. 109 00:05:27,660 --> 00:05:30,820 Por tani, në qoftë se unë bëj ardhshëm përsëri, ardhshëm përsëri, unë jam vetëm 110 00:05:30,820 --> 00:05:32,260 deklaruar disa variablave. 111 00:05:32,260 --> 00:05:34,750 Dhe unë mund të shtypura çdo njëri nga këta njerëz jashtë. 112 00:05:34,750 --> 00:05:37,170 Tulla Print, printime jeton. 113 00:05:37,170 --> 00:05:39,910 >> Dhe tani, nëse unë të vazhdojmë të bëjmë ardhshëm, vëreni se unë do të jetë 114 00:05:39,910 --> 00:05:40,870 brenda asaj lak. 115 00:05:40,870 --> 00:05:43,380 Por kodi është duke shkuar për të ekzekutuar saktësisht si unë presin. 116 00:05:43,380 --> 00:05:45,810 Pra, kur kam goditur këtë funksion, Prisni Kliko për të, ajo do të bëjë 117 00:05:45,810 --> 00:05:46,830 ajo që fjalë për fjalë. 118 00:05:46,830 --> 00:05:48,870 Kështu që unë duket se kanë humbur kontrollin mbi programin. 119 00:05:48,870 --> 00:05:50,480 >> GDB nuk është dhënë mua një tjetër të shpejtë. 120 00:05:50,480 --> 00:05:51,500 Por jo për t'u shqetësuar. 121 00:05:51,500 --> 00:05:53,720 Shko tek lojës sime, klikoni diku. 122 00:05:53,720 --> 00:05:56,270 >> Dhe voila, tani ajo vazhdon të linjës 86. 123 00:05:56,270 --> 00:05:59,460 Pra, përsëri, kjo është e paçmueshme, në fund të fundit, për problemet debugging. 124 00:05:59,460 --> 00:06:03,050 Sepse ju mund të vërtetë të hap nëpër Kodi juaj, gjëra të shtypura jashtë dhe shumë, 125 00:06:03,050 --> 00:06:03,640 shumë, më shumë. 126 00:06:03,640 --> 00:06:07,210 Por tani për tani, vetëm ato mjete ju duhet të merrni goxha larg. 127 00:06:07,210 --> 00:06:10,050 >> Pra, ne jemi, natyrisht, duke marrë një vështrim në Graphics Tani, të gjithë një e papritur. 128 00:06:10,050 --> 00:06:12,350 Dhe tani bota jonë merr pak më interesante. 129 00:06:12,350 --> 00:06:15,680 Dhe ju e dini, ndoshta, nga disa prej videos online se ne kemi këto 130 00:06:15,680 --> 00:06:18,280 pantallona të shkurtra që ju keni qenë të shikuar si pjesë e përcakton problem. 131 00:06:18,280 --> 00:06:20,460 >> Dhe ata kanë qenë të qëlluar, qëllimisht, kundër një sfond të bardhë. 132 00:06:20,460 --> 00:06:23,380 Dhe disa prej tyre kanë mësimin Fellows tërhequr disa tekst në 133 00:06:23,380 --> 00:06:25,490 ekran që e veshi në anën e tyre. 134 00:06:25,490 --> 00:06:27,760 Por sigurisht, kjo nuk është e gjitha që interesante në botën reale. 135 00:06:27,760 --> 00:06:30,520 Kjo është vetëm një sallë leksion me një ekran të madh të bardhë dhe një sfond. 136 00:06:30,520 --> 00:06:33,330 Dhe mahnitshme tonë ekipi i prodhimit lloj e bën gjithçka duket e bukur 137 00:06:33,330 --> 00:06:36,620 pas faktit nga prodhues jashtë ose veshur asgjë 138 00:06:36,620 --> 00:06:37,840 ne bëjmë apo nuk duan. 139 00:06:37,840 --> 00:06:41,560 >> Tani vetëm për të motivuar këtë javë dhe me të vërtetë, ku ju mund të shkoni, në fund të fundit, 140 00:06:41,560 --> 00:06:42,560 me shkencën kompjuterike. 141 00:06:42,560 --> 00:06:44,260 Jo vetëm pas problemit të ngritur katër. 142 00:06:44,260 --> 00:06:48,240 Por, pas një tjetër kurs apo një të tërë Planprogrami Është e mahnitshme se çfarë ju mund të 143 00:06:48,240 --> 00:06:51,090 të bëjë këto ditë në drejtim të grafika në veçanti. 144 00:06:51,090 --> 00:06:53,440 >> Disa prej jush mund të keni parë këtë rrjedhin rreth online. 145 00:06:53,440 --> 00:06:56,240 Por unë mendova se do të ju tregojnë, për vetëm një Nja dy minuta, një paraqitje e shkurtër e asaj që 146 00:06:56,240 --> 00:07:01,890 teknologji kompjuterike dhe çfarë CGI, grafika kompjuterike mund të bëjë këto ditë 147 00:07:01,890 --> 00:07:04,510 me një këngë të njohur dhe ndoshta film. 148 00:07:04,510 --> 00:07:05,760 >> [MUSIC - LANA DEL RAY, "Rinj dhe të bukur] 149 00:07:05,760 --> 00:10:50,270 150 00:10:50,270 --> 00:10:52,470 >> Kryetari 1: Kjo është vetëm pak mahnitshme, ndoshta, vetëm sa 151 00:10:52,470 --> 00:10:52,857 gjithëpranishëm - 152 00:10:52,857 --> 00:10:57,040 >> [Duartrokitje] 153 00:10:57,040 --> 00:10:59,230 >> Gjuha 1: Unë vetëm shkarkuar atë. 154 00:10:59,230 --> 00:11:02,920 Por kjo është me të vërtetë e mahnitshme, unë mendoj se, vetëm si software i gjithëpranishëm dhe kodin dhe 155 00:11:02,920 --> 00:11:04,230 mjete si kjo me të vërtetë janë. 156 00:11:04,230 --> 00:11:07,685 Pra, kjo është një shije të drejtimit në të cilën ju mund të shkoni. 157 00:11:07,685 --> 00:11:10,620 Oh, jo Appliance më sot. 158 00:11:10,620 --> 00:11:14,640 E pra, kjo është koha në të vërtetë tragjike duke pasur parasysh pikën Unë vetëm u përpoq të bëjë. 159 00:11:14,640 --> 00:11:18,670 >> Të gjithë të drejtë, kështu që le të fillojë Fusion përsëri. 160 00:11:18,670 --> 00:11:20,800 Kujtoj mua më vonë. 161 00:11:20,800 --> 00:11:24,190 Të gjithë të drejtë, dhe ju duhet të keni marrë një email si një mënjanë, nëse ju e bëri të marrë një 162 00:11:24,190 --> 00:11:25,460 vëreni si kjo. 163 00:11:25,460 --> 00:11:29,940 Të gjithë të drejtë, kështu që kujtojnë se javën e kaluar kemi filluar të zhvishem përsëri këtë 164 00:11:29,940 --> 00:11:31,380 i njohur më vonë si string. 165 00:11:31,380 --> 00:11:34,700 >> string kujton një lloj të të dhënave që është deklaruar në bibliotekë CS50. 166 00:11:34,700 --> 00:11:37,740 Dhe kjo është pjesë e rrotave të trajnimit që tani do të fillojë të marrë jashtë. 167 00:11:37,740 --> 00:11:41,280 Kjo ishte një koncept i dobishëm në fillim. 168 00:11:41,280 --> 00:11:43,750 Por tani ajo do të merrni më shumë interesante dhe më të fuqishme për 169 00:11:43,750 --> 00:11:48,330 në të vërtetë shohim se nën kapuç, një varg është vetëm ajo, nuk kemi thënë? 170 00:11:48,330 --> 00:11:50,500 >> Yeah, kështu që kjo është një e ashtuquajtura * char. 171 00:11:50,500 --> 00:11:53,860 * Dhe aty tregon se ka disa lloj adresën e përfshira. 172 00:11:53,860 --> 00:11:58,690 Dhe kështu, kur ju thoni * char ju vetëm do të thotë një ndryshore dhënat e të cilit është një lloj 173 00:11:58,690 --> 00:11:59,290 pointer tani. 174 00:11:59,290 --> 00:12:01,770 Fakti se ka yll atje thjesht do të thotë se ju jeni duke deklaruar një 175 00:12:01,770 --> 00:12:03,020 ashtuquajturat pointer. 176 00:12:03,020 --> 00:12:06,220 Dhe ky tregues do të duket ruajtur adresën e, i 177 00:12:06,220 --> 00:12:07,810 Natyrisht, një char. 178 00:12:07,810 --> 00:12:08,960 >> Tani pse e bën këtë kuptim? 179 00:12:08,960 --> 00:12:11,200 E pra, çfarë është një varg nën kapuç? 180 00:12:11,200 --> 00:12:15,130 E pra, për një farë kohe ne kemi qenë duke thënë se se një varg nën kapuç është 181 00:12:15,130 --> 00:12:18,460 vetëm h-E-l-l-o, per shembull. 182 00:12:18,460 --> 00:12:21,585 >> Por ne kemi biseduar në lidhje me këtë si qenë, në thelb, një koleksion. 183 00:12:21,585 --> 00:12:25,410 Dhe një koleksion pastaj do të shohim pak më shumë si kjo, me secilin prej këtyre 184 00:12:25,410 --> 00:12:26,460 duke marrë një pickim. 185 00:12:26,460 --> 00:12:28,710 Dhe pastaj ne kemi thënë se ka diçka e veçantë kthehen këtu, 186 00:12:28,710 --> 00:12:31,270 backslash 0, ose null Terminator. 187 00:12:31,270 --> 00:12:35,230 >> Pra, të gjithë këtë kohë, ky këtu ka qenë një varg. 188 00:12:35,230 --> 00:12:38,320 Por me të vërtetë, është një varg në fakt një adresë. 189 00:12:38,320 --> 00:12:43,210 Dhe adresat, siç do të shohim, janë shpesh të prefixed me 0x nga Konventa. 190 00:12:43,210 --> 00:12:44,540 Çfarë do 0x treguar? 191 00:12:44,540 --> 00:12:45,970 A e di ndokush? 192 00:12:45,970 --> 00:12:47,320 >> Pra, kjo thjesht do të thotë heksadecimal. 193 00:12:47,320 --> 00:12:52,360 Kështu që ju mund të kujtojnë, në fakt, nga PST 1, I besoj, njëra prej të ngrohtë-lart 194 00:12:52,360 --> 00:12:55,740 Pyetjet fakt pyetur rreth simbol heksadecimal përveç 195 00:12:55,740 --> 00:12:57,100 binare dhe dhjetore. 196 00:12:57,100 --> 00:13:00,460 Dhe këtu është se motivimi me heksadecimal ju keni 16 197 00:13:00,460 --> 00:13:01,770 shifrat në dispozicionin tuaj. 198 00:13:01,770 --> 00:13:07,900 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, pasuar nga a, b, c, d, e, f. 199 00:13:07,900 --> 00:13:10,430 >> Dhe në qoftë se ju numërimin e të gjitha deri ato, që ju të merrni një total prej 16. 200 00:13:10,430 --> 00:13:13,200 Pra, kjo është në kontrast me decimal, ku ne kemi 10 201 00:13:13,200 --> 00:13:14,690 0 shifra, përmes nëntë. 202 00:13:14,690 --> 00:13:17,750 Kjo është në kontrast me binar ku ne kemi vetëm 0 dhe 1. 203 00:13:17,750 --> 00:13:21,450 >> Por në fund të ditës ju mund të thjesht përfaqësojnë numrat e njëjtë, por 204 00:13:21,450 --> 00:13:22,500 disi më ndryshe. 205 00:13:22,500 --> 00:13:25,840 Dhe heksadecimal është e zakonshme sepse si ajo rezulton jashtë - dhe ne do të shohim këtë 206 00:13:25,840 --> 00:13:28,790 më vonë në rrjedhën - madje edhe kur marrim për programimin e web në kontekstin e 207 00:13:28,790 --> 00:13:32,100 HTML dhe kodet ngjyra, heksadecimal është e bukur. 208 00:13:32,100 --> 00:13:36,390 Sepse çdo shifra, rezulton, përfaqëson katër bit përkryer. 209 00:13:36,390 --> 00:13:39,280 Pra, vetëm ajo lloj e linjave deri bukur si ne përfundimisht do të shohim. 210 00:13:39,280 --> 00:13:44,720 Pra, kjo mund të jetë Ox123 apo diçka si kjo, 123 denoting adresë 211 00:13:44,720 --> 00:13:47,050 diku brenda e mia kujtesës kompjuterit. 212 00:13:47,050 --> 00:13:50,600 >> Por sigurisht, disa probleme lindin për shkak të kësaj themelor 213 00:13:50,600 --> 00:13:51,520 zbatimi. 214 00:13:51,520 --> 00:13:55,930 Dhe kujtojnë se unë mora një goditje me thikë në implementimit të një funksioni si kjo - 215 00:13:55,930 --> 00:14:00,260 krahasoni dash 0 dot c javën e kaluar, që edhe pse ajo dukej si ajo ishte 216 00:14:00,260 --> 00:14:04,270 drejtë, ai thjesht nuk krahasohen dy vargjet saktë. 217 00:14:04,270 --> 00:14:07,470 >> Unë e kam hedhur tutje kryesor, dhe unë e kam hedhur larg komentet vetëm për të përqëndrohet në në 218 00:14:07,470 --> 00:14:08,970 kodin që është me interes këtu. 219 00:14:08,970 --> 00:14:10,660 Dhe kjo është në të kuqe, sepse kjo është buggy. 220 00:14:10,660 --> 00:14:11,670 Për çfarë arsye? 221 00:14:11,670 --> 00:14:15,890 >> E pra, në krye atje kur kam deklaruar një varg, çfarë po ndodh në të vërtetë 222 00:14:15,890 --> 00:14:17,260 nën kapuç? 223 00:14:17,260 --> 00:14:19,530 E pra, më lejoni të shkoj mbi të ekran këtu dhe të tërheqë atë. 224 00:14:19,530 --> 00:14:23,230 Kështu që unë deklaruar, përsëri, getString varg s. 225 00:14:23,230 --> 00:14:26,640 >> Kështu që unë jam duke shkuar për të shkuar përpara dhe tani barazim s për atë që është me të vërtetë. 226 00:14:26,640 --> 00:14:28,590 Ajo do të jetë një shesh këtu. 227 00:14:28,590 --> 00:14:30,490 Dhe unë jam duke shkuar për të kërkuar se kjo është 32 bit. 228 00:14:30,490 --> 00:14:32,890 Të paktën ajo zakonisht është, të paktën në CS50 229 00:14:32,890 --> 00:14:34,520 aplikim në një shumë të kompjuterëve. 230 00:14:34,520 --> 00:14:35,980 Unë jam duke shkuar për të thirrur atë s. 231 00:14:35,980 --> 00:14:39,070 >> Por tani kujtojnë se ne quajtur getString. 232 00:14:39,070 --> 00:14:41,430 Kthimet Pra getString, Natyrisht, një varg. 233 00:14:41,430 --> 00:14:45,790 Nëse lloje përdorues në h-e-l-l-o hyjë string përshëndetje merr kthyer. 234 00:14:45,790 --> 00:14:51,010 Dhe kjo string, si ne vetëm tha, përfundon deri diku në kujtesën e kompjuterit tuaj 235 00:14:51,010 --> 00:14:53,240 me nje 0 backslash në fund. 236 00:14:53,240 --> 00:14:56,650 Unë do të nxjerrë këtë si array - ose bllok puqur e karaktereve - 237 00:14:56,650 --> 00:14:58,330 se ajo në fakt është. 238 00:14:58,330 --> 00:15:01,790 >> Dhe tani, ajo që është getString në fakt kthehej? 239 00:15:01,790 --> 00:15:04,340 Çfarë ka qenë i kthyer getString të gjithë këtë kohë? 240 00:15:04,340 --> 00:15:07,520 E pra, të themi, në javët e para, ajo kthen një varg. 241 00:15:07,520 --> 00:15:10,250 Por më teknikisht, çfarë bën GetString kthimin duket? 242 00:15:10,250 --> 00:15:11,610 >> Audienca: Një adresë. 243 00:15:11,610 --> 00:15:12,600 >> Kryetari 1: Një adresë. 244 00:15:12,600 --> 00:15:16,630 Në mënyrë të veçantë ai kthehet adresën e kafshimit të parë, çfarëdo qoftë ajo. 245 00:15:16,630 --> 00:15:18,830 Unë vetëm i mbajnë duke përdorur një, dy, tre për shkak se është i përshtatshëm. 246 00:15:18,830 --> 00:15:21,380 >> Ajo kthen adresa e parë karakter në vargun. 247 00:15:21,380 --> 00:15:23,510 Dhe ne tha javën e kaluar se që është e mjaftueshme. 248 00:15:23,510 --> 00:15:26,710 Sepse ne gjithmonë mund të kuptoj se ku fundi i vargut thjesht duke 249 00:15:26,710 --> 00:15:30,150 iterating mbi të, ndoshta, me një për loop ose një lak, ndërsa ose diçka si 250 00:15:30,150 --> 00:15:34,990 se, vetëm në kërkim për "backslash 0", karakter të veçantë Sentinel. 251 00:15:34,990 --> 00:15:37,220 >> Dhe atëherë ne e dimë se string ndodh të jenë të gjatësisë - 252 00:15:37,220 --> 00:15:37,980 në këtë rast - 253 00:15:37,980 --> 00:15:38,670 pesë. 254 00:15:38,670 --> 00:15:43,800 Pra, teknikisht çfarë bën getString është ajo kthehet Ox123 në këtë rast. 255 00:15:43,800 --> 00:15:53,670 Dhe teknikisht se çfarë ndodh atëherë është se ne dyqan, brenda S, Ox123. 256 00:15:53,670 --> 00:15:56,460 Në fund të ditës, edhe pse kjo është koncept i ri, pointers, ata janë 257 00:15:56,460 --> 00:15:57,350 vetëm variablave. 258 00:15:57,350 --> 00:16:00,440 Por ato ndodhin për të ruajtur bit që kolektivisht përfaqësojnë një adresë. 259 00:16:00,440 --> 00:16:03,700 Pra, teknikisht të gjithë ata merr ruhen në s është Ox123. 260 00:16:03,700 --> 00:16:04,680 >> Por ne si njerëzit - 261 00:16:04,680 --> 00:16:06,020 përfshirë tutje sot - 262 00:16:06,020 --> 00:16:09,290 nuk janë me të vërtetë do të kujdesen, në mënyrë tipike, çfarë është adresa aktuale 263 00:16:09,290 --> 00:16:10,520 e disa copë e kujtesës. 264 00:16:10,520 --> 00:16:14,040 Kjo është vetëm për nivelin e ulët të detajuar për të jetë intelektualisht interesante. 265 00:16:14,040 --> 00:16:15,440 Kështu që unë jam duke shkuar për të ndrequr këtë. 266 00:16:15,440 --> 00:16:19,810 Dhe në vend, niveli më i lartë, vetëm të thonë se se kur ne jemi duke folur për pointers 267 00:16:19,810 --> 00:16:22,170 Unë jam duke shkuar të vetëm të tërheqë më shumë user-friendly shigjetë që përcjell 268 00:16:22,170 --> 00:16:26,060 Ideja e njëjtë dhe abstraktet larg Veçoritë e asaj aktuale 269 00:16:26,060 --> 00:16:27,700 Adresa themelor është. 270 00:16:27,700 --> 00:16:33,290 >> Tani në qoftë se ne do të shkojmë përsëri në kod, çfarë ndodhi javën e kaluar në qoftë se ne kemi string t 271 00:16:33,290 --> 00:16:34,510 barabartë getString? 272 00:16:34,510 --> 00:16:38,630 E pra, nëse unë përsëri, lloji në përshëndetje këtë herë unë jam duke shkuar për të marrë 273 00:16:38,630 --> 00:16:40,460 një tjetër copë e kujtesës. 274 00:16:40,460 --> 00:16:44,820 h-E-l-l-o backslash 0. 275 00:16:44,820 --> 00:16:48,320 >> Por për shkak se unë e quajti getString një herë të dytë - 276 00:16:48,320 --> 00:16:51,100 dhe unë e di këtë nga të shikuarit kodi burim për getString - edhe 277 00:16:51,100 --> 00:16:54,350 pse kjo është rastësi që ishte përshëndetje shtypen në dy herë, nuk është getString 278 00:16:54,350 --> 00:16:55,890 do të përpiqen për të optimizuar dhe të jetë i zgjuar. 279 00:16:55,890 --> 00:16:58,550 Është vetëm do të merrni një copë të memorie nga kompjuter, e cila është 280 00:16:58,550 --> 00:16:59,640 do të jetë në një adresë tjetër. 281 00:16:59,640 --> 00:17:02,330 Le të them vetëm arbitrarisht 456. 282 00:17:02,330 --> 00:17:04,079 >> Dhe pastaj çfarë është ajo do të kthehet? 283 00:17:04,079 --> 00:17:08,030 Ajo do të kthehen 456 dhe ruajtur atë në t. 284 00:17:08,030 --> 00:17:12,010 Pra, çfarë po ndodh në të vërtetë, në Ana e majtë është që unë kam një tjetër copë 285 00:17:12,010 --> 00:17:14,260 e kujtesës, 32 bit zakonisht. 286 00:17:14,260 --> 00:17:16,720 Dhe atje do të shkojë Ox456. 287 00:17:16,720 --> 00:17:20,140 Por përsëri, unë nuk jam i interesuar në këto Numrat më të veçanta. 288 00:17:20,140 --> 00:17:23,069 Unë jam vetëm duke shkuar për të abstrakte tërheqë atë si një shigjetë. 289 00:17:23,069 --> 00:17:25,202 >> Pra, kjo është tani një shpjegim të ri. 290 00:17:25,202 --> 00:17:28,735 Por kjo ide e njëjtë e saktë kjo është ndodhur gjithë këtë kohë. 291 00:17:28,735 --> 00:17:33,150 Dhe kështu, atëherë arsyeja, që kjo e parë version i Krahaso ishte buggy 292 00:17:33,150 --> 00:17:34,480 javën e kaluar është arsyeja pse? 293 00:17:34,480 --> 00:17:38,000 Kur ju bëni në qoftë se s barabartë barabartë t Çfarë jeni ju me të vërtetë 294 00:17:38,000 --> 00:17:40,550 nën kapuç krahasuar? 295 00:17:40,550 --> 00:17:41,910 >> Ju jeni duke krahasuar adresat. 296 00:17:41,910 --> 00:17:47,950 Dhe vetëm intuitive, në mënyrë të qartë, Ox123 nuk është duke shkuar për të Ox456 barabartë. 297 00:17:47,950 --> 00:17:49,380 Këto numra, ato bit janë vetëm të ndryshëm. 298 00:17:49,380 --> 00:17:53,220 >> Dhe kështu vazhdimisht, javën e kaluar ai tha se ju shkruani gjëra të ndryshme, madje edhe në qoftë se 299 00:17:53,220 --> 00:17:55,360 Fjalët ishin tekstualisht njëjtë. 300 00:17:55,360 --> 00:17:58,770 Pra, ne të rregullojmë këtë. 301 00:17:58,770 --> 00:18:00,120 Në terma laik, çfarë ishte fix? 302 00:18:00,120 --> 00:18:02,110 >> Audienca: Përdorni një funksion. 303 00:18:02,110 --> 00:18:02,870 >> Kryetari 1: Përdorni një funksion. 304 00:18:02,870 --> 00:18:05,190 Apo yjet janë të përfshirë patjetër, por përdorin një funksion për të bërë çfarë? 305 00:18:05,190 --> 00:18:05,962 >> Audienca: Për të krahasoni strings. 306 00:18:05,962 --> 00:18:07,390 >> Kryetari 1: Për të krahasoni strings. 307 00:18:07,390 --> 00:18:11,030 Pra, problemi themelor këtu ishte se unë isha vetëm duke pasur parasysh 308 00:18:11,030 --> 00:18:15,870 cilësinë e vargjeve te përcaktohet duke Krahasimi i adresat e tyre. 309 00:18:15,870 --> 00:18:18,540 Dhe padyshim kjo është vetëm memec tani dikur ju e kuptoni se çfarë po ndodh 310 00:18:18,540 --> 00:18:19,510 nën kapuç. 311 00:18:19,510 --> 00:18:23,270 Për të vërtetë krahasoni strings për të parë nëse ata janë të barabartë në mënyrë që një njeriut 312 00:18:23,270 --> 00:18:26,680 do të marrin në konsideratë dy vargjet të jetë e barabartë ne kemi nevojë për të krahasuar atyre karakterin për 313 00:18:26,680 --> 00:18:28,070 karakter për karakter. 314 00:18:28,070 --> 00:18:30,020 >> Tani unë mund të ketë bërë kjo shumë tediously. 315 00:18:30,020 --> 00:18:32,240 Por ceremoni, ne jemi duke përdorur një për lak. 316 00:18:32,240 --> 00:18:36,050 Dhe vetëm krahasoni parantezë s Unë kundër t kllapa i. 317 00:18:36,050 --> 00:18:39,590 s parantezë Unë plus 1 kundër t kllapa I plus 1, dhe kështu me radhë, brenda 318 00:18:39,590 --> 00:18:40,580 disa lloj lak. 319 00:18:40,580 --> 00:18:44,950 Dhe nëse kam ndonjë vend dy karaktere që ndryshojnë, ose në qoftë se unë të kuptojë se ooh, s është 320 00:18:44,950 --> 00:18:48,410 shkurtër se T ose më shumë se sa t Unë mund të them menjëherë të rreme, 321 00:18:48,410 --> 00:18:49,390 ata nuk janë të njëjtë. 322 00:18:49,390 --> 00:18:55,370 >> Por në qoftë se unë të marrë përmes s dhe t dhe thonë njëjta, të njëjtën, të njëjtën, të njëjtën, të njëjtën, fundi i 323 00:18:55,370 --> 00:18:58,520 të dy vargjet, unë mund të them Vërtetë, ata janë të barabartë. 324 00:18:58,520 --> 00:19:01,040 Well, fatmirësisht, vjet më parë dikush shkroi që kodi për ne. 325 00:19:01,040 --> 00:19:03,790 >> Dhe ata e quajti atë StrComp string për të krahasuar. 326 00:19:03,790 --> 00:19:11,900 Dhe, edhe pse kjo është një counter pak intuitive, StrComp returns 0, nëse ata 327 00:19:11,900 --> 00:19:14,520 dy vargjet, s dhe t janë të njëjta. 328 00:19:14,520 --> 00:19:18,090 Por ajo kthehet vlera negative nëse s duhet të vijë para se t alfabetikisht ose 329 00:19:18,090 --> 00:19:20,610 Vlera pozitive nëse ajo duhet të vijë pas t rendit alfabetik. 330 00:19:20,610 --> 00:19:24,030 >> Pra, nëse ju ndonjëherë të dëshironi për të zgjidhur diçka, kjo rezulton se StrComp është e dobishme. 331 00:19:24,030 --> 00:19:26,660 Për shkak se ajo nuk e them vetëm po ose jo, të barabartë ose jo. 332 00:19:26,660 --> 00:19:30,440 Kjo ju jep një ndjenjë të urdhërimin donte një fjalor fuqinë. 333 00:19:30,440 --> 00:19:33,770 Pra StrComp, s presje t barabartë është e barabartë me 0 do të thotë se 334 00:19:33,770 --> 00:19:35,200 vargjet janë me të vërtetë të barabartë. 335 00:19:35,200 --> 00:19:38,680 Sepse kushdo që e shkroi këtë funksion vjet më parë e përdorur me sa duket një për lak 336 00:19:38,680 --> 00:19:42,840 ose një lak, ndërsa ose diçka si kjo të integrojë mbi personazhet përsëri 337 00:19:42,840 --> 00:19:45,270 dhe përsëri dhe përsëri. 338 00:19:45,270 --> 00:19:47,300 >> Por problemi u ngrit dy here. 339 00:19:47,300 --> 00:19:48,750 Kjo ishte copy0.c. 340 00:19:48,750 --> 00:19:51,680 Dhe dy në të kuqe është sepse ajo është me të meta. 341 00:19:51,680 --> 00:19:52,800 Dhe, çka të bëjmë këtu? 342 00:19:52,800 --> 00:19:54,310 E pra, së pari kam thirrur getString. 343 00:19:54,310 --> 00:19:56,255 Dhe unë ruajtur vlerën e kthimit në S. 344 00:19:56,255 --> 00:20:00,260 Pra, kjo është shumë e shumë të njëjtë si kjo pjesë e lartë e foto. 345 00:20:00,260 --> 00:20:01,490 >> Por çfarë vjen pas kësaj? 346 00:20:01,490 --> 00:20:04,980 E pra, më lejoni të shkoj përpara dhe të shpëtoj i një bandë e tërë kjo. 347 00:20:04,980 --> 00:20:09,650 Ne do Rewind në kohë për të, ku ne vetëm kemi s, e cila tani është në përputhje me 348 00:20:09,650 --> 00:20:10,940 Linja një deri atje. 349 00:20:10,940 --> 00:20:11,400 >> I kontrolloni. 350 00:20:11,400 --> 00:20:13,450 Nëse është e barabartë s është e barabartë me 0. 351 00:20:13,450 --> 00:20:18,670 Tani, një shënim të shpejtë anë, kur mund të kthehen getString 0? 352 00:20:18,670 --> 00:20:19,580 Nuk ka kujtesë të mjaftueshme. 353 00:20:19,580 --> 00:20:19,880 E drejta? 354 00:20:19,880 --> 00:20:22,310 >> Është e rrallë që kjo do të ndodhë, sigurisht në një kompjuter që është 355 00:20:22,310 --> 00:20:24,740 mori qindra e Megs ose madje edhe koncerte e RAM. 356 00:20:24,740 --> 00:20:27,080 Por ajo mund, në teori, të kthehen 0, sidomos nëse 357 00:20:27,080 --> 00:20:28,080 përdoruesi nuk bashkëpunojnë. 358 00:20:28,080 --> 00:20:31,640 Ka mënyra të pretendojë sikur ju nuk e keni asgjë futur dhe mashtrim 359 00:20:31,640 --> 00:20:34,100 GetString në kthimin 0 në mënyrë efektive. 360 00:20:34,100 --> 00:20:35,470 >> Pra, kjo do të kontrolloni për këtë. 361 00:20:35,470 --> 00:20:39,430 Sepse në qoftë se ndonjëri prej jush kanë filluar të marrë, tashmë, gabimet e segmentimit - 362 00:20:39,430 --> 00:20:42,280 e cila ka qenë ndoshta një burim e disa frustrimit - 363 00:20:42,280 --> 00:20:46,150 ato janë pothuajse gjithmonë rezultat i lidhur kujtesës gabimit. 364 00:20:46,150 --> 00:20:50,440 Disi ju messed up në lidhje me një akrep, edhe në qoftë se ju nuk e kuptojnë 365 00:20:50,440 --> 00:20:51,530 atje ishte një akrep. 366 00:20:51,530 --> 00:20:55,260 Kështu që ju mund të keni detyruar segmentim gabimet si në fillim si një javë duke përdorur 367 00:20:55,260 --> 00:21:02,100 diçka si një lak ose për një kohë lak dhe një array duke shkuar shumë larg 368 00:21:02,100 --> 00:21:05,900 kaluar kufijtë e një grup që ju deklaruat, në dy javë në 369 00:21:05,900 --> 00:21:06,690 veçanti. 370 00:21:06,690 --> 00:21:09,220 >> Ju mund të keni bërë atë edhe në problemin vendosur me katër Breakout. 371 00:21:09,220 --> 00:21:12,910 Edhe pse ju ndoshta nuk e keni parë ndonjë yjet në Kodin e Shpërndarjes për 372 00:21:12,910 --> 00:21:17,410 Breakout, ajo rezulton se ata GRect dhe gjërat GOval dhe të tjera të tilla, 373 00:21:17,410 --> 00:21:19,650 ata në të vërtetë janë pointers nën kapuç. 374 00:21:19,650 --> 00:21:23,430 >> Por Stanford, si ne, lloj i fsheh se detajuar te pakten per te biblioteka 375 00:21:23,430 --> 00:21:26,540 qëllime, ashtu si bëjmë ne për vargun dhe * char. 376 00:21:26,540 --> 00:21:30,060 Por GRect dhe GOval dhe të gjithë ata që Gjërat që ju djema janë ose do të jetë duke përdorur 377 00:21:30,060 --> 00:21:32,630 këtë javë janë përfundimisht adresat e memories. 378 00:21:32,630 --> 00:21:33,650 Ju thjesht nuk e di atë. 379 00:21:33,650 --> 00:21:37,240 >> Pra, kjo nuk është për t'u habitur atëherë, ndoshta, që ju mund të udhëtim mbi disa 380 00:21:37,240 --> 00:21:38,580 gabimet segmentimit. 381 00:21:38,580 --> 00:21:41,290 Por ajo që është interesante këtu tani, nëse pas ne kontrolloni për 0 bëjmë 382 00:21:41,290 --> 00:21:43,460 string t merr s. 383 00:21:43,460 --> 00:21:44,690 E pra, më lejoni të deklaroj t. 384 00:21:44,690 --> 00:21:47,730 Unë jam duke shkuar për të nxjerrë atë si një shesh, 32 bit, e quajti atë t. 385 00:21:47,730 --> 00:21:49,740 Dhe atëherë unë jam duke shkuar për të bërë merr s. 386 00:21:49,740 --> 00:21:51,130 >> E pra, çfarë do të thotë kjo? 387 00:21:51,130 --> 00:21:53,280 E pra, kjo është pak e vështirë për të menduar në lidhje me atë foto e mençur. 388 00:21:53,280 --> 00:21:55,025 Por le të mendojmë për çfarë është brenda x? 389 00:21:55,025 --> 00:21:59,430 Çfarë është fjalë për fjalë brenda kësaj variable? 390 00:21:59,430 --> 00:22:01,500 Ox123 vlerë. 391 00:22:01,500 --> 00:22:05,815 >> Pra, kur unë them string t merr s, që vetëm fjalë për fjalë do të thotë të marrë numrin 392 00:22:05,815 --> 00:22:10,070 në s, e cila është Ox123 dhe e vënë atë Ox123. 393 00:22:10,070 --> 00:22:13,740 Ose në pikturë, në qoftë se unë lloj i abstract larg nga ajo detaje ajo ka 394 00:22:13,740 --> 00:22:16,600 Efekti i bërë fjalë për fjalë kjo si. 395 00:22:16,600 --> 00:22:22,110 >> Deri tani, mendoj se mbrapa me javën e kaluar, kur ne vazhduam për kapitalist T. I 396 00:22:22,110 --> 00:22:23,800 bëri T parantezë 0. 397 00:22:23,800 --> 00:22:27,150 E pra, T 0 parantezë, edhe pse kjo është një akrep, ju mund të trajtojë atë sikur 398 00:22:27,150 --> 00:22:29,220 kjo është një grup, me një shesh simbol kllapa. 399 00:22:29,220 --> 00:22:31,550 >> Pra, ku eshte T kllapa 0? 400 00:22:31,550 --> 00:22:32,990 E pra, kjo është h. 401 00:22:32,990 --> 00:22:36,800 Dhe kështu, kur ne e përdorim këtë linjë e kodit, dy sipërme, e cila është në atë type.h c 402 00:22:36,800 --> 00:22:38,460 fotografi header, se ku ajo është deklaruar. 403 00:22:38,460 --> 00:22:44,410 Ju jeni duke kapitalizuar këtë H. Por i Sigurisht, kjo është h njëjtë e saktë kjo është 404 00:22:44,410 --> 00:22:46,540 brenda s, kështu që të flasin. 405 00:22:46,540 --> 00:22:51,930 Dhe kështu që tani ju keni ndryshuar ose kapitalizohen si origjinale dhe 406 00:22:51,930 --> 00:22:53,120 ashtu-quajtur kopje. 407 00:22:53,120 --> 00:22:56,620 Sepse ju nuk keni bërë një kopje në Mënyra se si një njeri do të duan që ajo të jetë. 408 00:22:56,620 --> 00:22:59,710 >> Pra, çfarë ishte fix këtu, copy1.c në javën e kaluar? 409 00:22:59,710 --> 00:23:03,070 410 00:23:03,070 --> 00:23:05,580 Funksionet, kështu që ne mund të vërtetë kopjoni string. 411 00:23:05,580 --> 00:23:08,700 Dhe rrënjësisht, çfarë nuk kemi nevojë për bëni në mënyrë që të kopjoni string? 412 00:23:08,700 --> 00:23:12,070 >> E pra, në këtë version gjelbër këtu unë jam do të bëni atë nivel mjaft të ulët. 413 00:23:12,070 --> 00:23:14,260 Ka të vërtetë janë funksionet ata mund të ndihmojë me këtë. 414 00:23:14,260 --> 00:23:17,710 Por një më themelor, dhe më e njohur, së paku, do të jetë së shpejti 415 00:23:17,710 --> 00:23:19,600 njohur për ne, është në vijim - 416 00:23:19,600 --> 00:23:21,910 kështu një në vijën e parë e kodit në të gjelbër tani. 417 00:23:21,910 --> 00:23:23,970 >> Unë thjesht rishkroi s si * char. 418 00:23:23,970 --> 00:23:25,250 Nuk ka asnjë funksionale Dallimi atje. 419 00:23:25,250 --> 00:23:28,790 Unë vetëm hodhën larg bibliotekën CS50 dhe Unë jam duke e quajtur atë se çfarë është ajo, një char *. 420 00:23:28,790 --> 00:23:31,640 >> Tani dot, dot, dot, sepse nuk ka pasur disa kontrolluar gabim që nuk është 421 00:23:31,640 --> 00:23:33,200 interesante për të folur rreth përsëri. 422 00:23:33,200 --> 00:23:34,710 Deri tani t është deklaruar. 423 00:23:34,710 --> 00:23:35,780 Ajo gjithashtu është një char *. 424 00:23:35,780 --> 00:23:38,280 Kështu që unë tërhoqi një shesh të vogël në ekran si më parë. 425 00:23:38,280 --> 00:23:41,870 >> Por, në anën e djathtë, malloc, kemi thënë është e kujtesës ndajë. 426 00:23:41,870 --> 00:23:44,130 Pra ndajë disa copë e kujtesës. 427 00:23:44,130 --> 00:23:48,830 Dhe sa bytes bëjmë ne fakt doni të ndajë, nuk duket? 428 00:23:48,830 --> 00:23:50,340 >> E pra, gjatësia varg s. 429 00:23:50,340 --> 00:23:52,310 Pra, nëse kjo është përshëndetje që është do të jenë pesë. 430 00:23:52,310 --> 00:23:53,950 Ne do të thotë h-E-l-l-o. 431 00:23:53,950 --> 00:23:55,090 Pra, pesë bytes. 432 00:23:55,090 --> 00:23:57,960 >> Por pastaj plus 1, pse 1? 433 00:23:57,960 --> 00:23:58,830 0 karakteri. 434 00:23:58,830 --> 00:24:03,640 Nëse ne nuk lënë hapësirë ​​për këtë djalë ne mund të aksidentalisht krijuar një situatë 435 00:24:03,640 --> 00:24:05,600 ku vargu është h-E-l-l-o. 436 00:24:05,600 --> 00:24:08,470 Dhe pastaj getString herën tjetër është quajtur dhe unë lloji në, për shembull, 437 00:24:08,470 --> 00:24:14,020 David, D-nje-v-i-d, kompjuteri është duke shkuar të mendojnë se s është në fakt 438 00:24:14,020 --> 00:24:18,900 h-E-l-l-O-d-a-V-I-d pasi ka asnjë pushim në mes të këtyre fjalëve. 439 00:24:18,900 --> 00:24:19,810 >> Pra, ne kemi nevojë për këtë pushim. 440 00:24:19,810 --> 00:24:20,720 Pra, ne nuk duam pesë. 441 00:24:20,720 --> 00:24:22,100 Ne duam gjashtë bytes. 442 00:24:22,100 --> 00:24:23,110 >> Dhe unë them bytes. 443 00:24:23,110 --> 00:24:25,220 Por kjo është me të vërtetë koha madhësia e shkrumb. 444 00:24:25,220 --> 00:24:28,040 Teknikisht char është pothuajse gjithmonë një bajt vetme. 445 00:24:28,040 --> 00:24:31,030 >> Por vetëm për të bërë kodi ynë i lëvizshëm, kështu që të flasin, në mënyrë që ajo punon në 446 00:24:31,030 --> 00:24:33,750 kompjutera të ndryshme edhe në qoftë se ata mund të jetë disi të ndryshme nën 447 00:24:33,750 --> 00:24:36,590 individualitet, unë jam duke shkuar për generically thonë se madhësia e char në mënyrë që 448 00:24:36,590 --> 00:24:37,660 kodi im gjithmonë punë. 449 00:24:37,660 --> 00:24:40,610 Dhe unë nuk keni për të përpiluar atë vetëm sepse unë të përmirësuar kompjuterin tim ose përdorin 450 00:24:40,610 --> 00:24:42,140 disa platforma të ndryshme. 451 00:24:42,140 --> 00:24:45,300 >> Kështu që unë kam marrë 6 herë e madhësisë së nje char, e cila ndodh tek jenë 1. 452 00:24:45,300 --> 00:24:47,440 Kështu që do të thotë mund të malloc jepni gjashtë bytes. 453 00:24:47,440 --> 00:24:49,140 Çfarë është që në fakt duke bërë? 454 00:24:49,140 --> 00:24:52,810 E pra, më lejoni të rrokulliset prapa në kohë këtu ku ne jemi në histori. 455 00:24:52,810 --> 00:24:57,620 >> Pra, nëse unë kthehem këtu, unë kam deklaruar një * char quajtur t. 456 00:24:57,620 --> 00:25:00,280 Unë e kam quajtur tani malloc për gjashtë bytes. 457 00:25:00,280 --> 00:25:06,400 Dhe tani unë jam duke shkuar për të nxjerrë ato gjashtë bytes ashtu si array herët. 458 00:25:06,400 --> 00:25:10,570 Por unë në fakt nuk e di se çfarë është brenda këtij array. 459 00:25:10,570 --> 00:25:14,640 >> Nëse ju siguroj kujtesë rezulton se ju nuk mund të besojnë se ka disa 460 00:25:14,640 --> 00:25:15,810 Vlera e njohur atje. 461 00:25:15,810 --> 00:25:18,400 Ajo mund të ketë qenë përdorur nga diçka tjetër, disa funksion tjetër, disa të tjera 462 00:25:18,400 --> 00:25:19,630 linjë e kodit që ju ka shkruajtur. 463 00:25:19,630 --> 00:25:22,870 Pra, ne do të në përgjithësi quajmë këto mbeturina Vlerat dhe t'i tërheqim, ndoshta, si 464 00:25:22,870 --> 00:25:26,170 pikëpyetjet, vetëm duke treguar se ne nuk e di se çfarë është në të vërtetë atje. 465 00:25:26,170 --> 00:25:30,390 Dhe kjo nuk është punë e madhe për aq kohë sa ne janë të zgjuar të mjaftueshme për të prishësh ato 466 00:25:30,390 --> 00:25:34,550 Vlerat mbeturinash me numra ose chars se ne lidhje me kujdes. 467 00:25:34,550 --> 00:25:36,340 >> Pra, në këtë rast çfarë jam unë do të bëni? 468 00:25:36,340 --> 00:25:38,670 E pra, linjë e kodit ime tjetër, unë kam katër. 469 00:25:38,670 --> 00:25:41,350 int i merrni 0, n merr Gjatësia e string s. 470 00:25:41,350 --> 00:25:42,750 Pra, një të njohur për lak. 471 00:25:42,750 --> 00:25:45,875 Unë është më pak se ose e barabartë me n, cila zakonisht eshte sipër. 472 00:25:45,875 --> 00:25:47,500 >> Por këtë herë kjo është e qëllimshme. 473 00:25:47,500 --> 00:25:51,890 I + +, dhe atëherë unë thjesht të bëjë t simboli i merr s. 474 00:25:51,890 --> 00:25:56,320 Sepse fotografia ime duket si ky në ky moment, të ruhet në t është 475 00:25:56,320 --> 00:25:59,530 adresa e asaj copë të rastësishme të memories vlerat e të cilëve janë të panjohur. 476 00:25:59,530 --> 00:26:03,030 Por, sa më shpejt që të bëj unë t kllapa 0 që i vë mua këtu. 477 00:26:03,030 --> 00:26:07,430 >> Dhe çfarë përfundon duke u tërhequr atje? 478 00:26:07,430 --> 00:26:08,740 Ne deri në fund duke vënë h. 479 00:26:08,740 --> 00:26:11,170 Sepse kjo është ajo që është në kllapa 0 s. 480 00:26:11,170 --> 00:26:14,300 Dhe pastaj e njëjta gjë për E, dhe l, dhe l, dhe o. 481 00:26:14,300 --> 00:26:17,930 >> n, pse nuk kam shkuar deri me një të barabartë me n? 482 00:26:17,930 --> 00:26:19,200 Për shkak të karakter 0. 483 00:26:19,200 --> 00:26:23,580 Pra, vetëm të jetë i qartë, atëherë, në qoftë se unë në fakt fshihet çfarëdo këto mbeturina 484 00:26:23,580 --> 00:26:28,870 Vlerat janë dhe pastaj të vërtetë të tërheqë në ajo I presim, kjo është s grupim 1, 2, 485 00:26:28,870 --> 00:26:32,440 3, 4, plus që është zvarritës Karakteri i ri. 486 00:26:32,440 --> 00:26:36,080 >> Dhe kështu që tani në qoftë se ne kemi vazhduar kaluara dot, dot, dot në këtë version korrekt 487 00:26:36,080 --> 00:26:41,930 kapitalizuar dhe kllapa 0 Unë do t, i kurs, të kapitalizuar vetëm këtë 488 00:26:41,930 --> 00:26:47,050 djalosh këtu, e cila konceptualisht, ishte në fund të fundit qëllimi. 489 00:26:47,050 --> 00:26:48,040 Pra, kjo është e gjitha akrep është. 490 00:26:48,040 --> 00:26:51,430 >> Dhe ju keni qenë duke përdorur ato për javë tani në kontekstin e strings. 491 00:26:51,430 --> 00:26:53,530 Por nën kapuç ata janë pak më komplekse. 492 00:26:53,530 --> 00:26:57,520 Por në qoftë se ju mendoni rreth tyre në këtë formë pikture Unë propozoj që ata janë të 493 00:26:57,520 --> 00:27:01,720 ndoshta jo të gjithë ata që e frikshme si parë mund të duket në shikim të parë, 494 00:27:01,720 --> 00:27:04,730 veçanërisht me sintaksë të tillë të re. 495 00:27:04,730 --> 00:27:07,290 Ndonjë pyetje mbi pointers, vargjet, ose karktereve? 496 00:27:07,290 --> 00:27:07,580 Po? 497 00:27:07,580 --> 00:27:09,252 >> Audienca: Mund të ju shkoni mbrapa për [padëgjueshme]? 498 00:27:09,252 --> 00:27:10,502 >> Kryetari 1: Sigurisht. 499 00:27:10,502 --> 00:27:14,058 500 00:27:14,058 --> 00:27:19,525 >> Audienca: Deri sa të vijë në shumë të fundit tuaj line, ju nuk keni një linjë * T 501 00:27:19,525 --> 00:27:21,513 dhe një * s në linjë? 502 00:27:21,513 --> 00:27:23,004 A nuk e keni referencë ndaj - 503 00:27:23,004 --> 00:27:24,640 >> Kryetari 1: Ah, një pyetje me të vërtetë mirë. 504 00:27:24,640 --> 00:27:26,800 Pse nuk kam një T * dhe a * s? 505 00:27:26,800 --> 00:27:30,340 Sepse shkurtimisht, javën e kaluar, si në tonë bie në ujdi funksion, unë nuk them se kur 506 00:27:30,340 --> 00:27:33,350 ju keni marrë një pointer mjeti me anë të të cilat ju shkoni atje si ne e bëmë 507 00:27:33,350 --> 00:27:36,590 fizikisht në skenë, ishte në fakt përdorni operatorin yll. 508 00:27:36,590 --> 00:27:40,570 >> Ajo rezulton se ky kllapa katrore- simbol është ajo që ne do të thërrasë sintaktik 509 00:27:40,570 --> 00:27:44,190 sheqer, e cila është vetëm një mënyrë sexy duke thënë se është simbol stenografi për 510 00:27:44,190 --> 00:27:45,950 pikërisht ajo që ju jeni duke e përshkruar. 511 00:27:45,950 --> 00:27:49,385 Por kjo është një pak më shumë intuitiv. 512 00:27:49,385 --> 00:27:53,510 Dhe në rrezik për të bërë këtë të duken më komplikuar se ajo duhet të jetë, 513 00:27:53,510 --> 00:27:56,990 çfarë po ndodh në të vërtetë këtu eshte mëposhtme - 514 00:27:56,990 --> 00:28:01,450 Nëse unë them t * që do të thotë të shkojnë në Adresa e ruajtur në t. 515 00:28:01,450 --> 00:28:04,350 >> Pra, fjalë për fjalë, në qoftë se është t ruajtjen adresa e asaj h 516 00:28:04,350 --> 00:28:07,300 fillimisht, * do të thotë t shkoni këtu. 517 00:28:07,300 --> 00:28:10,730 Tani, çfarë do t kllapa 0 do të thotë? 518 00:28:10,730 --> 00:28:11,560 Të njëjtën gjë e saktë. 519 00:28:11,560 --> 00:28:13,510 Është vetëm një përdorues pak më shumë miqësore për të shkruar. 520 00:28:13,510 --> 00:28:14,430 >> Por unë nuk jam bërë ende. 521 00:28:14,430 --> 00:28:17,800 Unë nuk mund të them vetëm * t * s merr. 522 00:28:17,800 --> 00:28:19,440 Sepse çfarë do të jetë bërë atëherë? 523 00:28:19,440 --> 00:28:22,950 Unë do të vënë h, h, h, h, h gjatë gjithë gjë. 524 00:28:22,950 --> 00:28:22,995 E drejta? 525 00:28:22,995 --> 00:28:26,020 >> Sepse * t është të shkoni në adresën në t. 526 00:28:26,020 --> 00:28:27,580 Por ne jemi në brendësi të një lak. 527 00:28:27,580 --> 00:28:32,150 Dhe çfarë vlera jam unë rrisim, natyrisht, në çdo përsëritje? 528 00:28:32,150 --> 00:28:32,690 i. 529 00:28:32,690 --> 00:28:34,590 >> Por ka një mundësi këtu, e drejtë? 530 00:28:34,590 --> 00:28:37,870 Edhe pse kjo ndjehet si ajo është duke u pak më të sofistikuar 531 00:28:37,870 --> 00:28:40,730 se shënim sheshin-kllapa ne kemi përdorur për disa kohë - 532 00:28:40,730 --> 00:28:43,840 më lejoni të undo ndryshime time h atje - 533 00:28:43,840 --> 00:28:48,870 Edhe pse ky është tani duke marrë një pak njohës, ideja themelore, në qoftë se * t 534 00:28:48,870 --> 00:28:53,630 do të thotë këtu dhe * t është vetëm shkoni në adresën në t. 535 00:28:53,630 --> 00:28:54,990 >> Por ajo që ishte adresa në t? 536 00:28:54,990 --> 00:28:56,850 Numri i kemi mbajtur duke përdorur? 537 00:28:56,850 --> 00:29:00,540 Ashtu si Ox456, le të sjellë që mbrapa vetëm për hir të diskutimit. 538 00:29:00,540 --> 00:29:05,380 E pra, në qoftë se unë dua të merrni në e në t string, Unë vetëm dua të shkojë në, 539 00:29:05,380 --> 00:29:06,460 në thelb, 456. 540 00:29:06,460 --> 00:29:09,230 >> Ose më mirë, 457. 541 00:29:09,230 --> 00:29:10,590 Unë vetëm duhet të shtoni një të tillë. 542 00:29:10,590 --> 00:29:11,790 Por unë mund të bëjë atë, e drejtë? 543 00:29:11,790 --> 00:29:14,680 Sepse t, edhe pse unë mbaj vizatim ajo tani si një shigjetë, kjo është vetëm një 544 00:29:14,680 --> 00:29:16,570 numrin, Ox456. 545 00:29:16,570 --> 00:29:21,400 Dhe në qoftë se unë të shtoni një se, ose më shumë në përgjithësi, në qoftë se unë shtoj unë për të se unë mund të 546 00:29:21,400 --> 00:29:24,350 në fakt të merrni pikërisht aty ku unë dua. 547 00:29:24,350 --> 00:29:26,260 Pra, nëse unë në fakt e bëjnë këtë - 548 00:29:26,260 --> 00:29:28,970 dhe kjo është ajo që tani quhet aritmetike pointer - 549 00:29:28,970 --> 00:29:30,375 Unë mund të hiqni këtë linjë. 550 00:29:30,375 --> 00:29:33,550 Cila është, sinqerisht, unë mendoj se të qartë dhe një pak më shumë përdorues miqësore për të lexuar. 551 00:29:33,550 --> 00:29:35,970 Por kjo nuk është më pak i saktë. 552 00:29:35,970 --> 00:29:38,570 >> Kjo linjë e kodit tani është duke përdorur aritmetike pointer. 553 00:29:38,570 --> 00:29:40,920 Është thënë se të shkojnë për të adresën e mëposhtme - 554 00:29:40,920 --> 00:29:44,670 çfarëdo fillimi i T eshte, e cila eshte T plus I, që fillimisht 555 00:29:44,670 --> 00:29:45,730 eshte 0, e cila është e madhe. 556 00:29:45,730 --> 00:29:49,280 Sepse kjo do të thotë fillimi të t plus 1, 2 plus, plus 3, dhe kështu me radhë. 557 00:29:49,280 --> 00:29:51,030 Dhe marrëveshje të njëjtë me s. 558 00:29:51,030 --> 00:29:52,750 >> Pra, sheqeri sintaktik për këtë. 559 00:29:52,750 --> 00:29:55,900 Por të kuptuarit se çfarë ndodh në të vërtetë nën kapuç, unë do të argumentojnë, 560 00:29:55,900 --> 00:29:57,410 është në të vërtetë e dobishme në vetvete. 561 00:29:57,410 --> 00:30:00,620 Sepse kjo do të thotë tani nuk është magic shumë më tepër në vazhdim e sipër 562 00:30:00,620 --> 00:30:01,620 nën kapuç. 563 00:30:01,620 --> 00:30:03,920 Nuk do të jetë shumë më tepër Shtresat që ne mund të zhvishem mbrapa për ju. 564 00:30:03,920 --> 00:30:04,810 Kjo është c. 565 00:30:04,810 --> 00:30:06,410 Dhe kjo është programimi. 566 00:30:06,410 --> 00:30:08,002 Pyetja me të vërtetë mirë. 567 00:30:08,002 --> 00:30:11,570 >> Të gjithë të drejtë, kështu që kjo ishte se kaloshin Programi Unë isha duke iu referuar më herët. 568 00:30:11,570 --> 00:30:12,650 swap ishte me të meta. 569 00:30:12,650 --> 00:30:14,070 Nëse nuk duket për të punuar. 570 00:30:14,070 --> 00:30:17,390 Kujtojnë se ashtu si me qumësht dhe lëng portokalli - e cila kam filluar 571 00:30:17,390 --> 00:30:18,660 pijshëm demonstratën e sotme. 572 00:30:18,660 --> 00:30:22,220 Pra, ashtu si me lëng portokalli dhe qumësht, ne nuk duhet të përdorin një 573 00:30:22,220 --> 00:30:26,200 ndryshore të përkohshme, tmp, për të mbajtur një përkohësisht në mënyrë që ne të mund pastaj 574 00:30:26,200 --> 00:30:28,820 të ndryshojë vlerën e saj dhe pastaj përditësimin b. 575 00:30:28,820 --> 00:30:32,870 >> Por ky funksion, kemi thënë, ose ky program në të cilin ky funksion ishte 576 00:30:32,870 --> 00:30:35,670 shkruar ishte e gabuar dhe me të meta, pse? 577 00:30:35,670 --> 00:30:38,870 578 00:30:38,870 --> 00:30:39,090 Po? 579 00:30:39,090 --> 00:30:42,471 >> Audienca: [padëgjueshme]. 580 00:30:42,471 --> 00:30:44,940 >> Kryetari 1: Pikërisht, kur ju telefononi swap - 581 00:30:44,940 --> 00:30:47,820 ose më në përgjithësi, kur ju thirrja më ndonjë funksion - 582 00:30:47,820 --> 00:30:51,210 nëse argumentet që funksionojnë janë primitiv, kështu që të flasin, ints dhe chars 583 00:30:51,210 --> 00:30:56,740 dhe dyshe dhe gjithandej, gjëra pa yjet, ju jeni duke kaluar në një kopje të 584 00:30:56,740 --> 00:30:57,540 argumenti. 585 00:30:57,540 --> 00:31:01,580 Pra, nëse ishte 1 x dhe y ishte 2, një është duke shkuar të jetë 1 dhe B është do të jetë 2. 586 00:31:01,580 --> 00:31:05,250 Por ata do të jenë të chunks të ndryshme të bit, chunks të ndryshme të 587 00:31:05,250 --> 00:31:07,540 memorie që të ndodhë të jetë ruajtjen Vlerat identike. 588 00:31:07,540 --> 00:31:12,160 >> Pra, ky kod është super i përsosur në një shkëmbimi dhe b. 589 00:31:12,160 --> 00:31:13,850 Ajo nuk është e mirë në të shkëmbejnë - 590 00:31:13,850 --> 00:31:15,290 në shembullin e javës së kaluar - 591 00:31:15,290 --> 00:31:16,390 x dhe y. 592 00:31:16,390 --> 00:31:18,780 Sepse përsëri, ata janë në fushën e gabuar. 593 00:31:18,780 --> 00:31:21,310 >> Tani, si nuk kemi shkuar në lidhje me fiksimin kjo? 594 00:31:21,310 --> 00:31:23,140 Ne kishim për të bërë funksionin duken shëmtuar pak. 595 00:31:23,140 --> 00:31:25,250 Por përsëri, e konsiderojnë atë kjo thjesht do të thotë. 596 00:31:25,250 --> 00:31:27,840 597 00:31:27,840 --> 00:31:31,500 >> Dhe në fakt, më lejoni, për qëndrueshmëri, ndryshojë një gjë kështu që është identike me 598 00:31:31,500 --> 00:31:33,200 ajo që ne vetëm e bëri. 599 00:31:33,200 --> 00:31:35,690 Siç e përmenda javën e kaluar, ajo nuk e bën rëndësi se ku shkon. 600 00:31:35,690 --> 00:31:38,120 Në fakt, në mënyrë tipike ju do të vënë yll e ardhshme për emrin e ndryshueshme. 601 00:31:38,120 --> 00:31:40,750 Por unë mendoj se kjo do të jetë pak më e lehtë të marrin në konsideratë * e ardhshme për të 602 00:31:40,750 --> 00:31:44,910 Të dhënat tipi si do të thotë kjo është një akrep në një int në këtë rast. 603 00:31:44,910 --> 00:31:46,270 >> Pra, çfarë po bëj unë këtu? 604 00:31:46,270 --> 00:31:49,590 Unë jam duke thënë se nuk më jepni një int pasuar nga një tjetër int, 605 00:31:49,590 --> 00:31:50,810 quajtur ato a dhe b. 606 00:31:50,810 --> 00:31:52,460 Ma jep adresën e një int. 607 00:31:52,460 --> 00:31:53,960 Ma jep adresën e një tjetër int. 608 00:31:53,960 --> 00:31:56,330 Thirrni ata që adreson a dhe b. 609 00:31:56,330 --> 00:32:00,860 >> Dhe pastaj duke përdorur * simbol poshtë poshtë, të shkojë në secilën prej këtyre adresave 610 00:32:00,860 --> 00:32:05,290 si të nevojshme ose të marrë ose të ngritur vlerën e saj. 611 00:32:05,290 --> 00:32:07,400 Por ka një përjashtim këtu. 612 00:32:07,400 --> 00:32:11,130 Pse nuk kam një * tjetër për tmp? 613 00:32:11,130 --> 00:32:15,070 Pse nuk e bëj këtë, për shembull? 614 00:32:15,070 --> 00:32:19,370 Ajo ndjehet si unë duhet vetëm të shkojnë të gjithë jashtë dhe korrigjuar të gjithë gjë. 615 00:32:19,370 --> 00:32:19,752 Po? 616 00:32:19,752 --> 00:32:21,002 >> Audienca: [padëgjueshme]. 617 00:32:21,002 --> 00:32:23,280 618 00:32:23,280 --> 00:32:25,480 >> Gjuha 1: Unë nuk e kanë deklaruar tmp si një varg. 619 00:32:25,480 --> 00:32:28,830 620 00:32:28,830 --> 00:32:34,950 Pra, kjo do të deklarojnë, në këtë rast, a tmp të jenë adresa e nje int. 621 00:32:34,950 --> 00:32:37,380 Por kjo nuk është krejt ajo që unë dua, për disa arsye. 622 00:32:37,380 --> 00:32:38,616 >> Audienca: Ju nuk doni të bie në ujdi tyre. 623 00:32:38,616 --> 00:32:41,800 >> Kryetari 1: Pikërisht, unë nuk dua të bie në ujdi asgjë me tmp. tmp është vetëm 624 00:32:41,800 --> 00:32:42,790 Javën-një stuff. 625 00:32:42,790 --> 00:32:45,150 Të gjitha unë dua është një variabël për të ruajtur disa numrin. 626 00:32:45,150 --> 00:32:47,330 Edhe unë nuk e kujdesit në lidhje me adresat e në këtë moment. 627 00:32:47,330 --> 00:32:50,530 >> Unë vetëm nevojë për 32bits, ose në mënyrë për të ruajtur një int. 628 00:32:50,530 --> 00:32:56,690 Dhe unë dua të vënë në ato 32 bit çdo gjë që nuk është në një, kështu që të flasin, por 629 00:32:56,690 --> 00:33:01,260 çfarë është në një, vetëm për të qenë më të saktë. 630 00:33:01,260 --> 00:33:06,420 Sepse në qoftë se një është një adresë, * një do të thotë shkoni atje dhe të marrë vlerën 1. 631 00:33:06,420 --> 00:33:10,560 Për shembull, në shembullin e javës së kaluar ose në rastin e B-së, të marrë vlerën prej 2. 632 00:33:10,560 --> 00:33:11,750 >> Pra, çfarë ndodh në të vërtetë? 633 00:33:11,750 --> 00:33:15,070 Më lejoni të nxjerrë një foto këtu që do të vetëm vë në lojë përveç një pjesë të sotme. 634 00:33:15,070 --> 00:33:18,580 Por kjo do të vazhdojë të shfaqet për mjaft kohë. 635 00:33:18,580 --> 00:33:22,430 >> Këtë, unë pretendojnë, është ajo që kompjuteri juaj të kujtesës duket si kur ju drejtuar një 636 00:33:22,430 --> 00:33:24,060 Programi, çdo program. 637 00:33:24,060 --> 00:33:28,340 Kur ju drejtuar një program në krye e RAM kompjuterit tuaj - kështu që mendoj se i 638 00:33:28,340 --> 00:33:33,530 kjo drejtkëndësh, në të vërtetë, siç tuaj RAM kompjuterit ose memorie, të gjithë 101 639 00:33:33,530 --> 00:33:36,920 miliardi bytes prej tij të gjithë dy bilion bytes, të gjitha dy gigabajt të saj, 640 00:33:36,920 --> 00:33:39,910 çdo gjë që ju keni është sasia, le të tërheqë atë si një drejtkëndësh. 641 00:33:39,910 --> 00:33:43,260 Dhe unë pretendojnë se kur ju drejtuar një program si Microsoft Word ose krom 642 00:33:43,260 --> 00:33:49,220 apo diçka të tillë, BITS që Microsoft apo Google që shkroi - 643 00:33:49,220 --> 00:33:50,910 në rastet e këtyre programeve - 644 00:33:50,910 --> 00:33:54,490 janë të ngarkuar në kujtesën e kompjuterit tuaj ku ata mund të ekzekutohet më shumë 645 00:33:54,490 --> 00:33:57,520 shpejt dhe ushqyer në CPU, e cila eshte trurin e kompjuterit. 646 00:33:57,520 --> 00:34:00,940 >> Dhe në TAM ata janë ruajtur në shumë Fillimi i programit tuaj, kështu që të flasin. 647 00:34:00,940 --> 00:34:03,300 Me fjalë të tjera, në qoftë se kjo është një copë e kujtesës, kur ju klikoni dy herë mbi 648 00:34:03,300 --> 00:34:05,740 Microsoft Word, BITS vijnë off hard drive. 649 00:34:05,740 --> 00:34:06,680 Ata të merrni ngarkuar në RAM. 650 00:34:06,680 --> 00:34:10,330 Dhe ne do të fus ato deri në shumë të lartë i këtij drejtkëndësh konceptualisht. 651 00:34:10,330 --> 00:34:13,010 >> Well, pjesa tjetër e kujtesës suaj është përdoret për gjëra të ndryshme. 652 00:34:13,010 --> 00:34:16,460 Në shumë të lartë që ju shihni nisja dhënave dhe uninitialize dhënave. 653 00:34:16,460 --> 00:34:20,500 Kjo ka të bëjë, për pjesën më të madhe, me konstanta ose variablave globale 654 00:34:20,500 --> 00:34:21,340 që kanë vlera. 655 00:34:21,340 --> 00:34:22,980 Por më shumë në ato kohë tjetër. 656 00:34:22,980 --> 00:34:25,150 >> Pastaj ju keni tog gurësh, i cili ne do të vijnë përsëri në. 657 00:34:25,150 --> 00:34:28,420 Por në fund është pjesa që është veçanërisht i përshtatshëm tani. 658 00:34:28,420 --> 00:34:30,210 Kjo është e ashtuquajtura rafte. 659 00:34:30,210 --> 00:34:33,850 Pra, ashtu si në çdo sallë më të madhe këtu në D kampus, ju keni ato tabaka që 660 00:34:33,850 --> 00:34:37,210 vetëm rafte në krye të njëri-tjetrit në të cilën ju mund të vënë ushqim dhe gjësend. 661 00:34:37,210 --> 00:34:40,139 Rafte në një sistem kompjuterik është shumë e ngjashme. 662 00:34:40,139 --> 00:34:42,679 Përveç ndërsa tabaka, si ne i përdorim në sallë ngrënie, natyrisht, është menduar 663 00:34:42,679 --> 00:34:45,710 për të kryer gjëra tabaka ose korniza - 664 00:34:45,710 --> 00:34:49,469 si ne do të thërrasë ato - në një kompjuter të memorie është përdorur për të mbajtur 665 00:34:49,469 --> 00:34:51,610 variablave dhe vlerat. 666 00:34:51,610 --> 00:34:53,929 >> Pra, çfarë me të vërtetë shkon më nën kapuç? 667 00:34:53,929 --> 00:34:55,820 E pra, më lejoni të rrokullisje mbi me ekran këtu. 668 00:34:55,820 --> 00:34:58,370 Dhe le të përqëndrohet vetëm në pjesa e poshtme për një moment. 669 00:34:58,370 --> 00:35:02,770 Nëse kjo është pjesa e poshtme e mia kujtesës kompjuterit ajo del kur unë 670 00:35:02,770 --> 00:35:05,350 telefononi Funksioni kryesor - që ndodh, sinqerisht, 671 00:35:05,350 --> 00:35:06,950 automatikisht për mua - 672 00:35:06,950 --> 00:35:10,510 Kam marrë një copë e kujtesës në Fundi i RAM tim kështu që të flasin. 673 00:35:10,510 --> 00:35:13,390 Dhe ky është vendi ku kryesor është Variablat lokale të shkojnë. 674 00:35:13,390 --> 00:35:16,770 Kjo është ku argc dhe argv ndoshta të shkojnë, dhe çdo ndryshore I 675 00:35:16,770 --> 00:35:18,170 deklarojnë brenda kryesore. 676 00:35:18,170 --> 00:35:20,260 Ata përfundojnë deri në fund e RAM kompjuterit tim. 677 00:35:20,260 --> 00:35:25,040 >> Tani mendoj se thirrjet kryesore një funksion si swap, si ajo e bëri javën e kaluar? 678 00:35:25,040 --> 00:35:30,620 E pra, ne thelb vënë një tabaka të re, një kornizë të re, mbi copë time të kujtesës. 679 00:35:30,620 --> 00:35:34,160 Dhe unë jam duke shkuar për të përshkruar këtë si që i përkasin funksionit swap. 680 00:35:34,160 --> 00:35:35,770 >> Tani çfarë ka brenda e swap-it? 681 00:35:35,770 --> 00:35:39,240 E pra, bazuar në programin e javës së kaluar dhe një ne vetëm e pa një ekstrakt nga, 682 00:35:39,240 --> 00:35:46,590 brenda kornizës swap-së, apo në swap-së tabaka, janë ato variabla? 683 00:35:46,590 --> 00:35:47,970 Mirë, a dhe b. 684 00:35:47,970 --> 00:35:51,850 Sepse ata ishin argumentet e saj lokale, plus një të tretë, tmp. 685 00:35:51,850 --> 00:35:54,470 Pra, me të vërtetë, unë mund të tërheqë këtë pak më të pastër. 686 00:35:54,470 --> 00:35:56,680 Më lejoni të shkojnë përpara dhe të prish etiketën. 687 00:35:56,680 --> 00:35:58,520 Dhe më lejoni të pretendojnë se ju e dini se çfarë? 688 00:35:58,520 --> 00:36:00,560 >> një është ndoshta do të përfundojnë këtu. 689 00:36:00,560 --> 00:36:02,160 B do të përfundojnë këtu. 690 00:36:02,160 --> 00:36:03,810 Dhe tmp do të përfundojnë këtu. 691 00:36:03,810 --> 00:36:05,160 Tani, renditja mund të jetë pak më ndryshe. 692 00:36:05,160 --> 00:36:06,840 Por konceptualisht kjo është ideja. 693 00:36:06,840 --> 00:36:11,490 >> Dhe vetëm kolektivisht, kjo është ajo që ne do të thërrasë kornizë SWAp-it, ose 694 00:36:11,490 --> 00:36:12,136 ngrënie-sallë tray. 695 00:36:12,136 --> 00:36:13,150 Dhe marrëveshje të njëjtë me kryesore. 696 00:36:13,150 --> 00:36:14,040 Por unë nuk e shlyen atë. 697 00:36:14,040 --> 00:36:17,810 Por kjo është ajo ku argc dhe argv dhe çdo e variablave të saj lokale si x dhe y 698 00:36:17,810 --> 00:36:18,940 mund të jenë si edhe. 699 00:36:18,940 --> 00:36:22,170 >> Pra, tani e konsiderojnë se çfarë po ndodh realisht kur ju telefononi shkëmbim. 700 00:36:22,170 --> 00:36:26,370 Kur ju telefononi swap, kodi ekzekutimin si kjo, ju jeni duke kaluar, në 701 00:36:26,370 --> 00:36:30,670 version buggy, a dhe b si kopjet e x dhe y. 702 00:36:30,670 --> 00:36:34,300 Pra, në qoftë se tani unë do të nxjerrë këtë në ekran - 703 00:36:34,300 --> 00:36:36,700 marrë për të marrë më të mirë në këtë - 704 00:36:36,700 --> 00:36:40,850 kështu që historia unë u thënë për veten time ishte në këtë version buggy, kur ne 705 00:36:40,850 --> 00:36:46,130 telefononi swap kalon në fjalë për fjalë a dhe b si integers, çfarë po ndodh me të vërtetë? 706 00:36:46,130 --> 00:36:48,250 >> E pra, çfarë po ndodh me të vërtetë është kjo. 707 00:36:48,250 --> 00:36:52,850 Më lejoni të shkojnë përpara dhe të zhbëjë vetëm për të pastruar disa hapësirë ​​këtu. 708 00:36:52,850 --> 00:36:54,720 Pra, kjo është e kujtesës kompjuterin tim. 709 00:36:54,720 --> 00:36:57,510 >> Pra, nëse unë kam, për shembull - 710 00:36:57,510 --> 00:36:58,910 në fakt, le të bëjë atë në këtë mënyrë - 711 00:36:58,910 --> 00:37:02,690 në qoftë se unë pretendojnë se kjo është x, ruajtjen Vlera e 1 ashtu si javën e kaluar. 712 00:37:02,690 --> 00:37:05,930 Dhe kjo është y, ruajtjen e vlerës 2 ashtu si javën e kaluar. 713 00:37:05,930 --> 00:37:11,370 Dhe kjo është kryesore, kur unë e quaj swap, duke i dhënë vetes një qasje për të dhe 714 00:37:11,370 --> 00:37:15,150 b dhe tmp, unë jam duke shkuar për të pretendojnë se kjo është një dhe kjo është 1. 715 00:37:15,150 --> 00:37:16,080 >> Kjo është b. 716 00:37:16,080 --> 00:37:17,010 Kjo është 2. 717 00:37:17,010 --> 00:37:18,370 Kjo është quajtur tmp. 718 00:37:18,370 --> 00:37:23,360 >> Dhe fillimisht, ajo ka disa vlera plehrash deri sa unë në fakt të ruajtur në atë, 719 00:37:23,360 --> 00:37:24,450 cila eshte 1. 720 00:37:24,450 --> 00:37:28,320 Pastaj unë të shkojnë përpara dhe për të ndryshuar një të jetë ajo? 721 00:37:28,320 --> 00:37:29,720 Vlera e B-së. 722 00:37:29,720 --> 00:37:31,980 >> Dhe kështu që tani unë kam dy ketu. 723 00:37:31,980 --> 00:37:34,050 Dhe atëherë ne i thamë b merr tmp. 724 00:37:34,050 --> 00:37:37,670 Përsëri, ashtu si një mendje e shëndoshë kontrolloni, tretë linjë e kodit këtu është thjesht kjo 725 00:37:37,670 --> 00:37:39,440 një, b merr tmp. 726 00:37:39,440 --> 00:37:41,730 >> Dhe kështu së fundi, çfarë të bëj? 727 00:37:41,730 --> 00:37:46,800 Unë shkoj përpara dhe të ndryshojë b të jetë çdo gjë vlera e TMP eshte, e cila eshte 1. 728 00:37:46,800 --> 00:37:48,390 Unë nuk prek tmp përsëri. 729 00:37:48,390 --> 00:37:54,100 >> Por tani, problemi është sa më shpejt swap kthimit, sepse ajo nuk është dorëzimin 730 00:37:54,100 --> 00:37:57,540 mbrapa disa vlera, nuk ka kthim deklaratë eksplicite në të. 731 00:37:57,540 --> 00:37:59,080 Çfarë është në të vërtetë ndodh? 732 00:37:59,080 --> 00:38:03,480 E pra, në thelb e gjithë kjo memorie - 733 00:38:03,480 --> 00:38:07,410 OK, me sa duket gomë pëlqen vetëm një gisht në një kohë - 734 00:38:07,410 --> 00:38:08,180 vetëm të zhduket. 735 00:38:08,180 --> 00:38:10,070 >> Tani në realitet ajo nuk është duke shkuar kudo. 736 00:38:10,070 --> 00:38:11,810 Por ju mund të mendoni për atë tani si pikëpyetjesh. 737 00:38:11,810 --> 00:38:14,040 Për shkak se ajo nuk është më aktualisht në përdorim. 738 00:38:14,040 --> 00:38:17,470 Dhe asgjë nuk është bërë me ato vlera. 739 00:38:17,470 --> 00:38:21,920 >> Pra, në rastin e versionit të gjelbër të ky kod, çfarë vend është duke u 740 00:38:21,920 --> 00:38:24,640 kaloi në shkëmbim? 741 00:38:24,640 --> 00:38:25,770 Pra trajton. 742 00:38:25,770 --> 00:38:28,520 Pra, adresa e X dhe adresa e y. 743 00:38:28,520 --> 00:38:35,790 Pra, nëse ne ri-them kjo histori e fundit kohë, dhe unë në fakt tërheq swap përsëri, 744 00:38:35,790 --> 00:38:44,620 por me pointers, kjo duke qenë një, kjo duke qenë b, dhe kjo tmp qenit, çfarë është 745 00:38:44,620 --> 00:38:49,080 ruhen në të vërtetë në një në këtë gjelbër version i kodit time, ku unë jam duke kaluar 746 00:38:49,080 --> 00:38:52,110 në adresat? 747 00:38:52,110 --> 00:38:53,780 >> Ajo do të jetë një tregues për x. 748 00:38:53,780 --> 00:38:54,890 Kështu që unë mund të tërheqë një shigjetë. 749 00:38:54,890 --> 00:38:57,310 Por, le të përdorim arbitrar njëjtë shembull si më parë. 750 00:38:57,310 --> 00:39:01,220 Le të thonë se kjo është diçka si Ox123. 751 00:39:01,220 --> 00:39:04,970 Dhe kjo do të jetë për shkak Ox127 kjo është katër bytes më larg, sepse kjo është një 752 00:39:04,970 --> 00:39:07,370 int, kështu Ox127. 753 00:39:07,370 --> 00:39:09,080 >> Dhe përsëri, unë jam duke marrë disa lirive me numrat. 754 00:39:09,080 --> 00:39:11,430 Ata janë shumë më të vogla se sa ata do të jetë në fakt dhe në një mënyrë të ndryshme. 755 00:39:11,430 --> 00:39:14,350 Por kjo është se si foto është tashmë e ndryshme. 756 00:39:14,350 --> 00:39:19,060 >> Por kur unë të përdorni këtë kod gjelbër dhe unë do të merrni tmp int * a. 757 00:39:19,060 --> 00:39:25,010 * Një mjet për të bërë në vijim, të marrë adresojë se është në një dhe të shkojnë në atë, 758 00:39:25,010 --> 00:39:26,190 cila eshte 1. 759 00:39:26,190 --> 00:39:28,480 Dhe kjo është ajo që unë pastaj të vënë në tmp. 760 00:39:28,480 --> 00:39:32,480 Ndërkohë, në rreshtin tjetër të kodit këtu, merr një * b, çfarë do të thotë kjo? 761 00:39:32,480 --> 00:39:36,910 >> E pra, * një, kështu që të shkojnë këtu merr * b, që do të thotë të shkojnë atje. 762 00:39:36,910 --> 00:39:39,310 Dhe kjo do të thotë për të vënë në vlerën atje. 763 00:39:39,310 --> 00:39:43,670 Së fundi, vija e fundit e kodit thjesht tha * b merr tmp. 764 00:39:43,670 --> 00:39:48,900 >> B Kështu thotë shkojnë atje dhe të prishësh atë me tmp e cila, në këtë rast, është duke shkuar 765 00:39:48,900 --> 00:39:51,520 që të jetë, përsëri, 1. 766 00:39:51,520 --> 00:39:54,920 Dhe kjo është arsyeja pse versioni i gjelbër Punimet tona kodi, ndërsa kuqe 767 00:39:54,920 --> 00:39:56,010 version kurrë nuk e bëri. 768 00:39:56,010 --> 00:39:59,020 Ajo të gjitha boils poshtë për të vetëm se si kujtesës është menaxhuar dhe ku është 769 00:39:59,020 --> 00:40:02,580 vendosur në të vërtetë në tuaj RAM kompjuterit. 770 00:40:02,580 --> 00:40:07,270 Dhe tani për tani, kjo është një nga gjërat se rafte është duke u përdorur për të. 771 00:40:07,270 --> 00:40:09,225 >> Pyetjet mbi layout? 772 00:40:09,225 --> 00:40:10,380 Në pointers? 773 00:40:10,380 --> 00:40:11,630 Ose në shkëmbim? 774 00:40:11,630 --> 00:40:13,740 775 00:40:13,740 --> 00:40:17,043 >> Të gjithë të drejtë, kështu që malloc, risjell, bëri diçka si kjo. 776 00:40:17,043 --> 00:40:18,260 Ky ishte një shembull i thjeshtë super. 777 00:40:18,260 --> 00:40:20,550 Dhe kjo ishte ajo që Binky na futi në, megjithëse mjaft 778 00:40:20,550 --> 00:40:21,870 shpejt, në fund të klasës. 779 00:40:21,870 --> 00:40:24,480 Dammit, atje ne do të shkojmë përsëri. 780 00:40:24,480 --> 00:40:28,780 >> Pra, kujtojnë se ky ishte shembulli që Binky na futi në, megjithëse 781 00:40:28,780 --> 00:40:30,360 disi shpejt në fund të klasës. 782 00:40:30,360 --> 00:40:33,640 Dhe këtu kemi përdorur malloc vërtetë për herë të dytë. 783 00:40:33,640 --> 00:40:37,330 Sepse herë të parë ne kemi përdorur atë për të krijuar RAM të mjaftueshëm, ndajë RAM të mjaftueshëm 784 00:40:37,330 --> 00:40:38,340 për të ruajtur një varg. 785 00:40:38,340 --> 00:40:40,250 >> Këtë herë Binky mbajtur atë të thjeshtë. 786 00:40:40,250 --> 00:40:42,465 Pra, kjo është vetëm për të ruajtur një int, me sa duket. 787 00:40:42,465 --> 00:40:43,510 Dhe kjo është krejtësisht e mirë. 788 00:40:43,510 --> 00:40:46,560 Është pak i çuditshëm, sinqerisht, për të përdorni malloc të ndajë një int. 789 00:40:46,560 --> 00:40:50,650 Por pika e claymation Nick ishte me të vërtetë vetëm të tregojë historinë e asaj 790 00:40:50,650 --> 00:40:53,830 ndodh ose nuk ndodh kur ju keqtrajtojnë kujtesës. 791 00:40:53,830 --> 00:40:56,520 >> Pra, në këtë rast, ky program bëri disa gjëra. 792 00:40:56,520 --> 00:41:01,580 Në rastin e parë këtu, ajo deklaron një tregues i quajtur X për të një int. 793 00:41:01,580 --> 00:41:04,480 Ajo pastaj deklaron një pointer quajtur y në një int. 794 00:41:04,480 --> 00:41:06,150 Ajo pastaj ruan në x, çfarë? 795 00:41:06,150 --> 00:41:07,110 Dikush tjetër tani. 796 00:41:07,110 --> 00:41:09,685 Çfarë merr ruajtur në X sipas Linja e tretë e këtij programi? 797 00:41:09,685 --> 00:41:12,380 >> Audienca: [padëgjueshme]. 798 00:41:12,380 --> 00:41:14,130 >> Kryetari 1: E pra, jo fare bytes, per thonë. 799 00:41:14,130 --> 00:41:16,760 Jetë më i saktë tani. 800 00:41:16,760 --> 00:41:18,325 Çfarë merr ruajtur në X? 801 00:41:18,325 --> 00:41:21,000 802 00:41:21,000 --> 00:41:22,060 Një adresë, unë mendoj se kam dëgjuar atë. 803 00:41:22,060 --> 00:41:23,570 >> Pra, çfarë do malloc kthehet? 804 00:41:23,570 --> 00:41:26,030 malloc sjellurit alokon një copë e kujtesës. 805 00:41:26,030 --> 00:41:27,850 Por si e bën atë të ju jap qasje në të? 806 00:41:27,850 --> 00:41:29,460 Ajo kthen çfarë? 807 00:41:29,460 --> 00:41:32,000 Adresën e bajt pare në copë e memories. 808 00:41:32,000 --> 00:41:33,020 >> Tani, kjo është e thjeshtë super. 809 00:41:33,020 --> 00:41:35,380 Është vetëm një bajt, që do të thotë adresuar ne jemi duke marrë përsëri është 810 00:41:35,380 --> 00:41:37,300 adresa e gjithë gjë. 811 00:41:37,300 --> 00:41:42,070 Pra ruhen në X atëherë, është adresa e asaj copë e kujtesës. 812 00:41:42,070 --> 00:41:43,400 Ndërkohë, çfarë ndodh më pas? 813 00:41:43,400 --> 00:41:45,890 Pra, në fakt, le të shkojnë përpara dhe të nxjerrë këtë të shpejtë të vërtetë jashtë. 814 00:41:45,890 --> 00:41:52,490 >> Pra, nëse ne kalojmë në ekranin këtu dhe luajmë this out int * x * y dhe int 815 00:41:52,490 --> 00:41:53,740 do të bëjë çfarë për mua? 816 00:41:53,740 --> 00:41:58,280 Unë pretendojnë se kjo është vetëm do të bëjë diçka si kjo dhe e quajti atë x, dhe 817 00:41:58,280 --> 00:42:00,010 këtë dhe e quajnë atë y. 818 00:42:00,010 --> 00:42:03,110 Ndërkohë, Linja e tretë e kodit është do të ndajë madhësinë e një int, 819 00:42:03,110 --> 00:42:06,160 i cili ndodh të jetë - sorry nëse kam thënë një para se unë do të thotë një int - 820 00:42:06,160 --> 00:42:08,280 katër bytes në një kompjuter tipike. 821 00:42:08,280 --> 00:42:09,720 Së paku me aplikim CS50. 822 00:42:09,720 --> 00:42:11,490 >> Pra, kjo do të ndajë ajo, kush e di? 823 00:42:11,490 --> 00:42:12,800 Diku këtu. 824 00:42:12,800 --> 00:42:15,780 Dhe kjo është ruajtur në disa Dem adresa, kush e di? 825 00:42:15,780 --> 00:42:18,330 Por çfarë do të merrni kthyer është se adresa. 826 00:42:18,330 --> 00:42:22,270 Por ne do të tërheqë këtë në pikturë si vetëm një shigjetë si kjo. 827 00:42:22,270 --> 00:42:25,430 >> Tani, në vijën e ardhshme merr 42 * x. 828 00:42:25,430 --> 00:42:29,400 Çfarë do të thotë * x në kushtet e laik? 829 00:42:29,400 --> 00:42:30,040 Vetëm të shkojnë atje. 830 00:42:30,040 --> 00:42:30,960 Shko në atë adresë. 831 00:42:30,960 --> 00:42:35,900 Ose me fjalë të tjera, ndiqni shigjetë dhe të vënë 42 atje. 832 00:42:35,900 --> 00:42:38,140 Por pastaj diçka e keqe ka ndodhur për Binky, e drejtë? 833 00:42:38,140 --> 00:42:43,950 >> Kujtojnë se vijë pesë këtu, * y merr 13, me të vërtetë një numër i pafat, 834 00:42:43,950 --> 00:42:44,760 e bëri atë për ne? 835 00:42:44,760 --> 00:42:47,320 E pra, do të thotë * y shkojnë atje. 836 00:42:47,320 --> 00:42:50,460 E pra, kjo nuk ka qenë e dhënë një vlerë ende, e drejtë? 837 00:42:50,460 --> 00:42:54,090 Kodi nuk kanë qenë y initialized për asgjë. 838 00:42:54,090 --> 00:42:56,120 Ne kishim x qenë initialized në adrese. 839 00:42:56,120 --> 00:42:57,640 Por y ishte shpallur deri të lartë. 840 00:42:57,640 --> 00:43:00,250 Por pastaj një pikëpresje, asnjë vlerë është vënë vërtetë në të. 841 00:43:00,250 --> 00:43:02,330 Pra, kjo është e drejtë për të thirrur këtë një vlerë e plehrave. 842 00:43:02,330 --> 00:43:03,430 Kush e di se çfarë është atje? 843 00:43:03,430 --> 00:43:07,160 Është mbetjet e copa që janë përdorur nga disa përputhje të mëparshëm të kodit në 844 00:43:07,160 --> 00:43:08,300 Programi im. 845 00:43:08,300 --> 00:43:13,250 >> Pra, nëse unë them të shkojnë atje, kjo është si, Unë nuk kam asnjë ide se ku kjo është shigjetë 846 00:43:13,250 --> 00:43:14,490 do të përfundojnë. 847 00:43:14,490 --> 00:43:17,720 Dhe kjo është kur ju zakonisht merrni një defekt segmentimit. 848 00:43:17,720 --> 00:43:22,430 Nëse ju aksidentalisht dereference, në mënyrë që të flasin, ose të shkojnë në një adresë që nuk është 849 00:43:22,430 --> 00:43:25,400 në fakt një adresë legjitime, ndodhin gjëra të këqija. 850 00:43:25,400 --> 00:43:27,550 >> Dhe kjo është pikërisht ajo që ndodhi të mendojnë Binky. 851 00:43:27,550 --> 00:43:31,060 Kështu që kujtojnë se historia se Nick ishte thënë këtu ishte ide e njëjtë si ajo 852 00:43:31,060 --> 00:43:34,050 Unë e kam tërhequr me iluzionin e shkumës në bordin atje. 853 00:43:34,050 --> 00:43:35,960 X dhe y janë deklaruar. 854 00:43:35,960 --> 00:43:39,690 >> Pastaj ne ndarë madhësinë e një int dhe ruajtur atë në x. 855 00:43:39,690 --> 00:43:42,130 Pastaj linjë tjetër që ne e bëmë * x. 856 00:43:42,130 --> 00:43:46,070 Kjo ishte shkop magjik Nick i dereferencing. 857 00:43:46,070 --> 00:43:49,780 Që vënë 42 në kujtesën vuri në dukje nga x. 858 00:43:49,780 --> 00:43:51,600 >> Por kjo është ajo ku gjërat shkoi tmerrësisht keq. 859 00:43:51,600 --> 00:43:51,820 E drejta? 860 00:43:51,820 --> 00:43:53,550 Ne u përpoq për të y dereference. 861 00:43:53,550 --> 00:43:55,620 Por kishte disa vlera y fals, e drejtë? 862 00:43:55,620 --> 00:43:57,720 >> Kjo shigjetë në pjesën e poshtme të majtë qoshe, nuk është 863 00:43:57,720 --> 00:43:58,950 në të vërtetë asgjë për të treguar. 864 00:43:58,950 --> 00:44:01,520 Kjo është lloj i bërë atë që unë bëri këtu në bord. 865 00:44:01,520 --> 00:44:05,900 Pra, ndodhin gjëra të këqija, segmentimit faji, apo Binky faji, në këtë rast. 866 00:44:05,900 --> 00:44:10,800 >> Por nëse ne pastaj të rregullojmë se duke bërë X merr y si e bën ndryshimin histori? 867 00:44:10,800 --> 00:44:15,760 E pra, në qoftë se unë bëj merr x y, që është efektivisht njëlloj si të thuash 868 00:44:15,760 --> 00:44:19,235 çka është kjo, dem-diçka do të jetë e njëjtë edhe këtu, 869 00:44:19,235 --> 00:44:20,080 Ox-diçka. 870 00:44:20,080 --> 00:44:22,970 Ose në pikturë ne do të nxjerrë një shigjetë. 871 00:44:22,970 --> 00:44:25,530 >> Kështu që këtu në bordin me Binky, me vijën e ardhshme të 872 00:44:25,530 --> 00:44:28,350 Kodi, * y do të thotë të shkojnë atje. 873 00:44:28,350 --> 00:44:29,400 Ku është atje? 874 00:44:29,400 --> 00:44:30,820 Kjo do të thotë mbi këtu. 875 00:44:30,820 --> 00:44:36,050 >> Dhe kur ne update që të jenë 13 ajo përfshin vetëm duke shkuar dhe 876 00:44:36,050 --> 00:44:39,470 shkrim 13 këtu tani. 877 00:44:39,470 --> 00:44:44,130 Pra, ndoshta jo plotësisht drejtpërdrejtë në shikim të parë. 878 00:44:44,130 --> 00:44:47,740 Por për radhitje dhe për të përdorur zhargonin e njëjtë Binky që ishte përdorur këtu, kështu që 879 00:44:47,740 --> 00:44:50,485 dy të parët ndajë pointers, x dhe y, por jo pointees. 880 00:44:50,485 --> 00:44:54,750 Dhe pointees nuk eshte nje në përgjithësi përdoret term. 881 00:44:54,750 --> 00:44:56,120 Por është absolutisht pointer. 882 00:44:56,120 --> 00:44:59,200 Por kjo është ajo që është duke u theksuar në në nomenklaturë Binky së. 883 00:44:59,200 --> 00:45:01,660 >> Kjo linjë e ardhshme, natyrisht, alokon një pointee int. 884 00:45:01,660 --> 00:45:04,840 Pra, një copë e kujtesës - si unë tërhoqi mbi të Ana e djathtë atje - dhe të vendosur 885 00:45:04,840 --> 00:45:06,470 x barabartë të tregojnë për atë. 886 00:45:06,470 --> 00:45:11,350 Kjo x 42 dereferences për të ruajtur në kujtesës që ajo është vënë në. 887 00:45:11,350 --> 00:45:13,380 Dhe pastaj kjo, natyrisht, ishte një gjë e keqe. 888 00:45:13,380 --> 00:45:15,600 Sepse y nuk ishte treguar në ende asgjë. 889 00:45:15,600 --> 00:45:16,530 Kjo fixes atë. 890 00:45:16,530 --> 00:45:18,240 Pra, kjo është ende program buggy. 891 00:45:18,240 --> 00:45:21,580 Vetëm për shkak se ne jemi defekt nëpërmjet Linja Kodi me vijën dhe duke thënë, oh mirë, 892 00:45:21,580 --> 00:45:22,690 le të rrëzimit atje. 893 00:45:22,690 --> 00:45:23,420 Kjo është një gjë e keqe. 894 00:45:23,420 --> 00:45:26,790 Shanset janë programi i vetëm do të abortojë krejt në atë linjë. 895 00:45:26,790 --> 00:45:30,550 Por në qoftë se keni qenë për të hequr rrëzua të vijë dhe ta zëvendësojë atë me dy të fundit 896 00:45:30,550 --> 00:45:32,470 Linjat atje ju caktojnë - 897 00:45:32,470 --> 00:45:35,310 duke përdorur detyrën akrep - y të tregojnë për x si t pikë. 898 00:45:35,310 --> 00:45:39,280 Dhe pastaj ju dereference y në një mënyrë shumë të sigurt. 899 00:45:39,280 --> 00:45:41,520 >> Pra, ku e bën këtë na lënë? 900 00:45:41,520 --> 00:45:45,350 E pra, rezulton se nën kapuç në bibliotekë CS50, pointers janë 901 00:45:45,350 --> 00:45:46,320 përdoret në të gjithë. 902 00:45:46,320 --> 00:45:48,910 Dhe ne fakt do të fillojë të zhvishem mbrapa se shtresa para se të gjatë. 903 00:45:48,910 --> 00:45:51,740 Por kjo rezulton edhe një shprehje që disa prej jush mund të jetë njohur me të, 904 00:45:51,740 --> 00:45:54,580 veçanërisht ato më të rehatshme, është fakt se e një shumë të popullarizuara 905 00:45:54,580 --> 00:45:56,390 website, apo rafte del nga shtrati, këto ditë. 906 00:45:56,390 --> 00:45:58,720 >> Por ky fakt ka shumë Kuptimi teknik. 907 00:45:58,720 --> 00:46:00,160 Ne tani e dimë se çfarë është një pirg. 908 00:46:00,160 --> 00:46:02,550 Është si një pirg e tabaka brendësi të një sallë ngrënies. 909 00:46:02,550 --> 00:46:05,140 >> Ose në brendësi të së kompjuteri juaj kujtesën e tij ato korniza 910 00:46:05,140 --> 00:46:06,900 që janë përdorur nga funksionet. 911 00:46:06,900 --> 00:46:10,760 E pra, ajo rezulton se për shkak të kësaj Zbatimi shumë e thjeshtë e 912 00:46:10,760 --> 00:46:14,970 kujtesës dhe korniza në të ashtuquajturat rafte, ju në fakt mund të marrë kontrollin 913 00:46:14,970 --> 00:46:17,050 e një sistemi kompjuterik mjaft lehtë. 914 00:46:17,050 --> 00:46:22,180 Ju mund të kollitem në një sistem në qoftë se njerëzit si ne nuk e keni shkruar kodin tonë 915 00:46:22,180 --> 00:46:23,300 veçanërisht mirë. 916 00:46:23,300 --> 00:46:26,670 >> Nëse njerëz si nesh përdorin chunks e kujtesës ose përdorimi i vargjeve - 917 00:46:26,670 --> 00:46:27,810 edhe më shpesh - 918 00:46:27,810 --> 00:46:31,800 por ndonjëherë harroni të kontrolloni kufijtë e array tona si ju mund 919 00:46:31,800 --> 00:46:38,470 kanë veten ndonjëherë, dhe rikonfirmoi mënyrë shumë larg kaluara fund një array. 920 00:46:38,470 --> 00:46:40,520 Në rastin më të mirë, programi juaj vetëm mund të rrëzimit. 921 00:46:40,520 --> 00:46:42,280 Faji segmentimit, lloj e turpshme. 922 00:46:42,280 --> 00:46:45,480 Jo e madhe, por kjo nuk është domosdoshmërisht një gjë jashtëzakonisht e keqe. 923 00:46:45,480 --> 00:46:49,480 >> Por në qoftë se programi juaj është në të vërtetë në të vërtetë kompjuterët e përdoruesve, nëse ajo është running 924 00:46:49,480 --> 00:46:53,070 në një faqe interneti që njerëzit aktuale të rastit në internet janë të goditur, duke i lënë 925 00:46:53,070 --> 00:46:56,690 njerëz të shkaktoj gjëra të këqija në kodin tuaj është në përgjithësi nuk është një gjë e mirë, sepse 926 00:46:56,690 --> 00:46:59,930 kjo do të thotë një mundësi për të marrë kontrollin e kompjuterit. 927 00:46:59,930 --> 00:47:01,350 Dhe kjo do të shikojmë pak fshehtë. 928 00:47:01,350 --> 00:47:04,570 Por unë mendova se do të trembë ju me ky shembull e fundit këtu. 929 00:47:04,570 --> 00:47:05,650 >> Ja një shembull të kodit. 930 00:47:05,650 --> 00:47:07,370 Dhe ka një të mirë Wikipedia artikull që ecën nëpër 931 00:47:07,370 --> 00:47:08,530 kjo më në detaje. 932 00:47:08,530 --> 00:47:13,890 Unë kam kryesor në thirrjen e poshtme foo, duke kaluar në argv e 1. 933 00:47:13,890 --> 00:47:15,750 Dhe kjo është vetëm mënyrë që ju mund të drejtuar programin dhe të kalojë 934 00:47:15,750 --> 00:47:17,080 një input arbitrare. 935 00:47:17,080 --> 00:47:20,180 >> Dhe pastaj foo është deklaruar deri të lartë siç pranuar nje varg, ose më shumë 936 00:47:20,180 --> 00:47:21,700 Pikërisht, një char *. 937 00:47:21,700 --> 00:47:23,860 Ajo pastaj deklaron një sërë chars. 938 00:47:23,860 --> 00:47:27,130 Tërhiqni vëmendjen se një tampon, më në përgjithësi, e madhësisë 12. 939 00:47:27,130 --> 00:47:30,900 Pra, 12 chars mund të përshtaten brenda e atij grup të quajtur c. 940 00:47:30,900 --> 00:47:33,510 >> Dhe pastaj ai e përdor këtë funksion të ri, e cila është e re, por jo e vështirë për të 941 00:47:33,510 --> 00:47:34,930 kuptuar, kopje e kujtesës. 942 00:47:34,930 --> 00:47:39,290 Kjo kopje kujtesën nga bar, i cili ishte n ndryshueshme kaluara, çfarëdo 943 00:47:39,290 --> 00:47:42,080 përdorues shtypen në argv 1 në c. 944 00:47:42,080 --> 00:47:43,090 Sa bytes? 945 00:47:43,090 --> 00:47:44,260 Gjatësia varg bar. 946 00:47:44,260 --> 00:47:48,380 >> Pra, me fjalë të tjera, në qoftë se përdoruesi lloje në h-E-l-l-o lloza, gjatësia vargu 947 00:47:48,380 --> 00:47:49,260 e përshëndetje është pesë. 948 00:47:49,260 --> 00:47:52,790 Pra, pesë prej këtyre bytes është duke shkuar për të marrë kopjuar në grup të quajtur c, e cila 949 00:47:52,790 --> 00:47:54,110 është e madhësisë 12. 950 00:47:54,110 --> 00:47:58,710 Por ajo që përdoruesi lloje në një shumë më të gjatë fjalë që është 13 karaktere ose 14 951 00:47:58,710 --> 00:48:01,250 karaktere ose 100 karaktere apo më shumë? 952 00:48:01,250 --> 00:48:02,660 >> Ku janë ata do të shkojnë? 953 00:48:02,660 --> 00:48:06,090 E pra, kjo kornizë, që tabaka në rafte ngrënie-sallë, 954 00:48:06,090 --> 00:48:06,930 ata do të shkojnë atje. 955 00:48:06,930 --> 00:48:10,080 Dhe kjo është vetëm do të fillojë overwriting sende të tjera që është tashmë 956 00:48:10,080 --> 00:48:12,880 në atë rafte, tejmbushur rafte, kështu që të flasin. 957 00:48:12,880 --> 00:48:14,780 >> Pra, në pikturë, mendoj se në këtë mënyrë. 958 00:48:14,780 --> 00:48:17,970 Kjo është vetëm një version i gjallë i foto ne kemi qenë të tërhequr. 959 00:48:17,970 --> 00:48:20,060 Në fund, le të themi, është kryesore. 960 00:48:20,060 --> 00:48:24,690 Dhe në krye, çfarë ju jeni duke parë tani po, frame color kodifikua tani, për një 961 00:48:24,690 --> 00:48:26,090 funksion të quajtur foo. 962 00:48:26,090 --> 00:48:30,170 Por ajo që është interesante këtu në lidhje foo është se këtu është korniza e saj. 963 00:48:30,170 --> 00:48:32,860 Pra, kjo është përpiluar ashtu si unë bëri, por në ngjyrë blu të lehta. 964 00:48:32,860 --> 00:48:35,220 Dhe tani kjo është ajo ku c kllapa 0 shkon. 965 00:48:35,220 --> 00:48:37,410 Dhe ky është vendi ku c kllapa 11 do të përfundojë. 966 00:48:37,410 --> 00:48:39,670 >> Me fjalë të tjera, kjo ndodh për të përfaqësohet si një shesh. 967 00:48:39,670 --> 00:48:42,320 Por në qoftë se ju vetëm i mbajnë plopping bytes poshtë - ose chars - ata janë duke shkuar për t'i dhënë fund 968 00:48:42,320 --> 00:48:46,070 deri në lokacionin 0 të gjithë rrugën deri 11 për shkak se ajo është 0 indeksuar. 969 00:48:46,070 --> 00:48:49,170 >> Por, ku është karakteri 13 do të përfundojë? 970 00:48:49,170 --> 00:48:50,310 Ku është 14? 971 00:48:50,310 --> 00:48:52,430 Ku është karakteri 50 do të përfundojë? 972 00:48:52,430 --> 00:48:54,070 >> Ajo do të mbajë duke shkuar poshtë. 973 00:48:54,070 --> 00:48:57,350 Sepse edhe pse ne kemi tërhequr fotografia me rafte rritur, 974 00:48:57,350 --> 00:48:59,920 adresat, ajo rezulton, shkojnë nga Adresat e të vogla, të vogla 975 00:48:59,920 --> 00:49:01,830 pointers, në adresat e mëdha. 976 00:49:01,830 --> 00:49:03,540 Pra, vetëm ajo mban shkuar deri dhe deri. 977 00:49:03,540 --> 00:49:05,660 >> Pra, nëse përdoruesi lloje në hello, kjo është e madhe. 978 00:49:05,660 --> 00:49:08,650 Asnjë bug, nuk ka problem, të sigurt e të gjithëve. 979 00:49:08,650 --> 00:49:11,940 Por në qoftë se përdoruesi lloje në atë që ne do telefononi kodin kundërshtues, të përfaqësuara 980 00:49:11,940 --> 00:49:16,040 generically si një,, sulm sulm, sulm, sulm, çfarë mund të ndodhë? 981 00:49:16,040 --> 00:49:19,760 >> E pra, nëse të gjithë e kontributit që përdoruesi shtypur në nuk është vetëm disa miqësore 982 00:49:19,760 --> 00:49:21,540 ose varg i karaktereve ofenduese. 983 00:49:21,540 --> 00:49:24,050 Kjo është në fakt një sekuencë e karaktere se në qoftë se ju të hartuar atë, 984 00:49:24,050 --> 00:49:26,050 ai në fakt është kodi. 985 00:49:26,050 --> 00:49:29,570 Ndoshta kjo është kodin që fshin të gjitha fotografi në hard drive tuaj ose dërgon Spam 986 00:49:29,570 --> 00:49:30,810 ose diçka të tillë. 987 00:49:30,810 --> 00:49:35,110 Vini re se çfarë është çelësi këtu është se në qoftë se djalë i keq mori me fat të mjaftueshme për të 988 00:49:35,110 --> 00:49:37,830 prishësh copë të kuqe e kujtesës - 989 00:49:37,830 --> 00:49:41,080 të cilat unë nuk të nxjerrë në foton time, por kjo foto këtu Wikipedia ka - 990 00:49:41,080 --> 00:49:42,890 Adresa e ashtuquajtura saj kthimit. 991 00:49:42,890 --> 00:49:47,470 >> Kur të kthehet ushqimit, kur të kthehet swap, si e bën kompjuterin di për të shkuar nga 992 00:49:47,470 --> 00:49:49,790 deri këtu për këtu poshtë? 993 00:49:49,790 --> 00:49:52,920 Ose në segmentin e teknologjisë së lart, si ajo nuk e di për të shkuar nga swap-in 994 00:49:52,920 --> 00:49:54,870 Kodi - 0-së dhe e 1 që përbëjnë swap - 995 00:49:54,870 --> 00:49:56,020 Kthehu tek Qendrori? 996 00:49:56,020 --> 00:50:00,450 Ka një të ashtuquajtur Adresa e kthimit ruhet në atë kornizë të njëjtën rafte, në 997 00:50:00,450 --> 00:50:02,140 tabaka njëjtën mensë. 998 00:50:02,140 --> 00:50:06,080 >> Pra, në qoftë se djalë i keq është i mençur të mjaftueshme për të vënë kodin sulm, kodi sulm, sulm 999 00:50:06,080 --> 00:50:07,960 Kodi, dhe për të marrë me fat të mjaftueshme - 1000 00:50:07,960 --> 00:50:11,630 shpesh përmes gjykimit dhe gabim - në prishësh atë adresë kuqe e kthimit, 1001 00:50:11,630 --> 00:50:14,360 me adresën dhe njoftimi shumë të lartë. 1002 00:50:14,360 --> 00:50:16,830 Njoftim 0835C080. 1003 00:50:16,830 --> 00:50:20,650 Është e shkruar prapa deri të lartë për Arsyet ndoshta ne do të rishqyrtojnë. 1004 00:50:20,650 --> 00:50:22,050 Kjo është se numri i. 1005 00:50:22,050 --> 00:50:25,790 >> Pra, në qoftë se djalë i keq merr me fat të mjaftueshme ose është mjaft i zgjuar për të prishësh kuqe 1006 00:50:25,790 --> 00:50:29,480 zhvesh e kujtesës me adresën e kodin që ai ose ajo ka disi 1007 00:50:29,480 --> 00:50:34,980 injektuar në kompjuterin tuaj, me mend e të cilit Kodi është duke shkuar për t'u kthyer në 1008 00:50:34,980 --> 00:50:38,260 sa më shpejt që foo është bërë ekzekutimin? 1009 00:50:38,260 --> 00:50:39,440 >> Kodi djalë i keq e. 1010 00:50:39,440 --> 00:50:43,610 Pra këtë kod sulm, AAA, përsëri, mund të dërgojnë spam, mund të fshini të gjitha dosjet 1011 00:50:43,610 --> 00:50:44,500 në hard drive tuaj. 1012 00:50:44,500 --> 00:50:48,740 Por kjo është ajo që me të vërtetë një stack overflow është, ose një tampon muar, ose një 1013 00:50:48,740 --> 00:50:51,060 sulm tampon del nga shtrati. 1014 00:50:51,060 --> 00:50:54,400 >> Dhe kjo është tepër, tepër e zakonshme në këtë ditë me programet e shkruara në 1015 00:50:54,400 --> 00:50:58,220 C, C + +, dhe madje edhe disa gjuhë të tjera. 1016 00:50:58,220 --> 00:51:02,275 Në atë shënim të frikshme, ne do të të përfundojë me një shaka. 1017 00:51:02,275 --> 00:51:03,230 >> [Qeshura] 1018 00:51:03,230 --> 00:51:04,550 >> Shihemi të mërkurën. 1019 00:51:04,550 --> 00:51:07,920 1020 00:51:07,920 --> 00:51:10,310 Në CS50 e ardhshëm - 1021 00:51:10,310 --> 00:51:15,920 Kështu që unë jam i të gjitha llambat nga disk sot, por prisni, pa yndyrë, qumështi gjysma telefon 1022 00:51:15,920 --> 00:51:17,850 libër, lëng portokalli që unë piva sot. 1023 00:51:17,850 --> 00:51:20,370 1024 00:51:20,370 --> 00:51:22,780 USB kabllo, një pikëllim. 1025 00:51:22,780 --> 00:51:24,800 >> [Duke luajtur muzikë]