1 00:00:00,000 --> 00:00:11,242 >> [Mūzikas atskaņošanas] 2 00:00:11,242 --> 00:00:16,630 >> DAVID J. Malan: Nu labi, tas ir CS50 un tas ir sākums piecu nedēļu. 3 00:00:16,630 --> 00:00:21,480 Tātad šodien, zem jūsu sēdekļu spilveni, Jūs neatradīsiet neko. 4 00:00:21,480 --> 00:00:24,790 Bet iepriekš, jums vajadzētu atrast šos, maz simbolisku mūsu atzinību par 5 00:00:24,790 --> 00:00:26,970 visu darbu, ka jūs varat ievietot spēlei piecpadsmit. 6 00:00:26,970 --> 00:00:30,290 Vienkārši izņemiet maz aplis apakšas, lai sāktu spēlēt 7 00:00:30,290 --> 00:00:31,680 Atlikušo klasē. 8 00:00:31,680 --> 00:00:38,930 >> Tā atgādina, ka, vai zināt, ka noteikto problēmu četri, kas izgāja šīs nedēļas nogalē, 9 00:00:38,930 --> 00:00:40,340 ietver rakstot citu spēli. 10 00:00:40,340 --> 00:00:43,740 Bet šoreiz tas nozīmē, izmantojot Faktiskais grafisko lietotāja interfeisu, kas nav 11 00:00:43,740 --> 00:00:46,310 tekstuālā interfeiss, piemēram, Spēle piecpadsmit bija. 12 00:00:46,310 --> 00:00:50,210 Un spēle, kas ir priekšā no jums, ja jūs esat vēl nav redzējis šo nākamo, 13 00:00:50,210 --> 00:00:52,310 izskatās mazliet kaut kas līdzīgs šim. 14 00:00:52,310 --> 00:00:55,170 Es iešu uz manu terminālā logs šeit gdb. 15 00:00:55,170 --> 00:00:58,600 Un es iešu uz priekšu un palaist personāla risinājumu, kas var piekļūt 16 00:00:58,600 --> 00:01:01,010 pēc darbības atjauninājumu 50, kā parasti. 17 00:01:01,010 --> 00:01:04,090 >> Bet es esmu gatavojas nodot to nedaudz noslēpums režīmā, nedaudz Lieldienu olu, 18 00:01:04,090 --> 00:01:08,480 tā sauktās Dieva režīms, ko liekot Dievu argv1. 19 00:01:08,480 --> 00:01:12,920 Un man ir sekot mana virzienos, darbojas to mana 20 00:01:12,920 --> 00:01:14,220 problēma, kas direktorijā. 21 00:01:14,220 --> 00:01:19,190 Tātad tagad jūs redzat pilnu versiju par spēli Breakout. 22 00:01:19,190 --> 00:01:21,090 Faktiski, tas ir no-rokas režīmā. 23 00:01:21,090 --> 00:01:24,850 Tātad, tas ir tiešām - 24 00:01:24,850 --> 00:01:26,470 wowed gan jūs varētu būt - 25 00:01:26,470 --> 00:01:30,850 diezgan niecīgs, lai īstenotu Dievs režīmā Breakout, atšķirībā no spēles Piecpadsmit 26 00:01:30,850 --> 00:01:33,590 ko daži no jums, iespējams, ir jārisina par hakeru valodā. 27 00:01:33,590 --> 00:01:37,890 >> Jo Breakout pietiek Dievam režīmā, lai vienkārši darīt to, kas, 28 00:01:37,890 --> 00:01:41,220 intuitīvi ar bradāt? 29 00:01:41,220 --> 00:01:45,630 Tikai padara to vienāda neatkarīgi horizontālā stāvoklī ir bumbu. 30 00:01:45,630 --> 00:01:49,220 Un tik ilgi, kamēr jūs darīt to lockstep ar bumbu pārvietojas šo spēli būs 31 00:01:49,220 --> 00:01:53,100 nekad, nekad, nekad garām bumbu un jūs uzvarēt katru reizi. 32 00:01:53,100 --> 00:01:55,430 >> Bet šīs nedēļas hakeru izdevuma tur ir vairāk nekā tikai Dievs režīmā. 33 00:01:55,430 --> 00:01:56,720 Tur ir citas funkcijas skaits. 34 00:01:56,720 --> 00:01:58,140 Starp tiem, lāzeri. 35 00:01:58,140 --> 00:02:01,070 Tā ka, ja jūs patiešām iegūt nepacietīgs jums var sākt notriekšanu ķieģeļu 36 00:02:01,070 --> 00:02:02,120 un daži citi. 37 00:02:02,120 --> 00:02:04,560 Un tiem no jums, kuri vēlētos kalibrēt standarts pret hakeru 38 00:02:04,560 --> 00:02:08,750 izdevums, es redzu, ka šonedēļ ir hakeris izdevums apzināti ir 39 00:02:08,750 --> 00:02:12,830 nedaudz vairāk veicams, teiksim, par Dievu režīms bija ar spēli piecpadsmit. 40 00:02:12,830 --> 00:02:15,300 >> Tātad, ja jūs meklējat, lai stiept un jūs meklējat dažas papildu fun 41 00:02:15,300 --> 00:02:18,400 iezīmes darīt, nirt, ja interesē. 42 00:02:18,400 --> 00:02:21,280 Tagad vairāk praktiski, ļaujiet man norādīt no vienas puses, kā arī. 43 00:02:21,280 --> 00:02:24,780 GDB, ko daži no jums var nebūt vēl nav aizskāra personīgi, kas ir labi. 44 00:02:24,780 --> 00:02:28,530 Bet tagad ir patiešām pienācis laiks, lai pierastu šo un apmierināti ar šo rīku 45 00:02:28,530 --> 00:02:31,510 jo tas padarīs jūsu dzīvi daudz vieglāk, patiesi. 46 00:02:31,510 --> 00:02:34,900 >> Per Rob lekciju par gdb pāris nedēļas atpakaļ, atgādināt 47 00:02:34,900 --> 00:02:36,810 ka GDB ir atkļūdotājs. 48 00:02:36,810 --> 00:02:41,230 Tas ir instruments, kas ļauj jums vadīt savu programma, bet palaist to soli pa solim, līnija 49 00:02:41,230 --> 00:02:45,680 pa līniju, lai jūs varētu pabāzt apkārt, tā, ka jūs redzat lietas notiek, tāpēc 50 00:02:45,680 --> 00:02:47,310 ka jūs varat izdrukāt mainīgo lielumu vērtības. 51 00:02:47,310 --> 00:02:50,580 Īsāk sakot, tas dod jums tik daudz enerģijas nekā printDef dara. 52 00:02:50,580 --> 00:02:52,900 >> Tagad, protams, interfeiss ir diezgan mistisks. 53 00:02:52,900 --> 00:02:55,180 Melnā un baltā tekstuālo saskarni par lielāko daļu. 54 00:02:55,180 --> 00:02:57,400 Šīs komandas ir diezgan grūts atcerēties sākumā. 55 00:02:57,400 --> 00:03:01,230 Bet pat ja tas varētu tevi pusi stunda, stunda, nodot, ka sākumā 56 00:03:01,230 --> 00:03:02,940 ieguldījums laika uz to, ticiet man. 57 00:03:02,940 --> 00:03:06,440 Protams līdz semestra beigām, tas ļaus ietaupīt Jūs kārtu vairāk 58 00:03:06,440 --> 00:03:07,600 laiks nekā, ka. 59 00:03:07,600 --> 00:03:09,200 >> Tik agri Nedēļas nirt iekšā 60 00:03:09,200 --> 00:03:13,200 Un attiecībā uz Breakout, zinu, ka tu var darīt tik ilgi, kamēr jums ir 61 00:03:13,200 --> 00:03:18,230 sadales kodu vai savu kodu Notiek jūsu Pst4 direktorijā. 62 00:03:18,230 --> 00:03:21,680 Ziniet, ka jūs varat palaist gdb. / Starplaikos. 63 00:03:21,680 --> 00:03:23,490 >> Tas notiek, lai atvērtu logs kā šis. 64 00:03:23,490 --> 00:03:25,530 Ļaujiet man sniegt sevi vairāk no termināļa logā. 65 00:03:25,530 --> 00:03:27,770 Un tad ko es esmu gatavojas iet uz priekšu un darīt, tas nav tikai palaist to. 66 00:03:27,770 --> 00:03:30,690 Es esmu gatavojas vispirms noteikt lūzuma punkts atgādināt, kas ļauj jums, lai apturētu 67 00:03:30,690 --> 00:03:32,500 izpilde konkrētā vietā. 68 00:03:32,500 --> 00:03:35,750 >> Tikai, lai saglabātu lietas vienkārši es esmu gatavojas lauzt vienā rindā tikai, ierakstot 69 00:03:35,750 --> 00:03:37,000 numur viens. 70 00:03:37,000 --> 00:03:40,080 71 00:03:40,080 --> 00:03:43,250 Ļaujiet man faktiski no jauna atvērt šo logu jo tas kļūst 72 00:03:43,250 --> 00:03:45,700 nedaudz mazu tur. 73 00:03:45,700 --> 00:03:53,270 Tātad, ko es esmu tagad gatavojas darīt, šeit ir ja es atvērt manu termināla logu. 74 00:03:53,270 --> 00:03:53,910 Come on, tur mēs ejam. 75 00:03:53,910 --> 00:03:59,850 >> Tāpēc tagad, ja es dodos atpakaļ uz Dropbox, Pst4 un palaist gdb. / breakout ieiet, paziņojums 76 00:03:59,850 --> 00:04:02,600 Es esmu gatavojas lauzt vienu, kas lūzuma punkts vienā rindā. 77 00:04:02,600 --> 00:04:04,840 Un tagad es iešu priekšu un tips darboties. 78 00:04:04,840 --> 00:04:07,370 Un, kad es darīt, pamanīt neko šķiet, notiek. 79 00:04:07,370 --> 00:04:08,120 >> Nav pop up. 80 00:04:08,120 --> 00:04:09,790 Nav grafiskā lietotāja interfeiss vēl. 81 00:04:09,790 --> 00:04:13,340 Bet tas ir saprotams, jo es esmu burtiski manā programmā vienā rindā. 82 00:04:13,340 --> 00:04:17,110 Un ievēroju, ka es esmu ātri pārsūtīt, īpaši tagad līdz 62, jo visi 83 00:04:17,110 --> 00:04:20,600 augšpusē šo failu sīkumi lietas, piemēram, komentāri un konstantes un 84 00:04:20,600 --> 00:04:22,460 neinteresanti stuff tagad. 85 00:04:22,460 --> 00:04:25,840 >> Tāpēc tagad es esmu iekšā main, šķiet, ir 62 līnijas. 86 00:04:25,840 --> 00:04:27,960 Un tas ir tikai sadales kods, atgādināt. 87 00:04:27,960 --> 00:04:33,810 Ja es atvērt šo augšu, dodoties, līdzīgi, manā piliens kastē direktorijā stāšanās Pst4, 88 00:04:33,810 --> 00:04:35,450 uz breakout.c. 89 00:04:35,450 --> 00:04:40,670 Un, ja es ritiniet uz leju un uz leju un uz leju, un ļaujiet man iet uz priekšu un ieslēgt 90 00:04:40,670 --> 00:04:44,990 mans līniju numuri. 91 00:04:44,990 --> 00:04:50,300 >> Ko es redzēsit, ja es ritiniet uz leju, lai līnija 62, ir tieši līnija, kas 92 00:04:50,300 --> 00:04:50,910 mēs esam apturēta tālāk. 93 00:04:50,910 --> 00:04:53,720 Tātad, šī līnija šeit, 62, ir kur mēs esam par to, lai būtu. 94 00:04:53,720 --> 00:04:57,470 Tāpēc tagad gdb, ja man iet uz priekšu un tips Tagad nākamais, ievadiet tas notiek 95 00:04:57,470 --> 00:04:58,450 izpildīt šo līniju. 96 00:04:58,450 --> 00:05:00,610 Un voila, mums ir tā saukto g logu. 97 00:05:00,610 --> 00:05:02,800 Ja svešs ar to, GWindow ir, nav jāuztraucas. 98 00:05:02,800 --> 00:05:05,740 Spec būs jūs iepazīstināt ar to, kā arī vairāki walkthrough video 99 00:05:05,740 --> 00:05:06,830 iestrādāta spec. 100 00:05:06,830 --> 00:05:08,610 >> Bet tagad pieņemsim šo nedaudz vairāk interesants. 101 00:05:08,610 --> 00:05:10,960 Ļaujiet man pāriet šo logu pa uz sāniem mazliet. 102 00:05:10,960 --> 00:05:13,480 Ļaujiet man loga nedaudz lielāks, tāpēc es redzu vairāk. 103 00:05:13,480 --> 00:05:16,140 >> Un tagad ļaujiet man iet uz priekšu un darīt tālāk atkal. 104 00:05:16,140 --> 00:05:17,550 Un tur ir manas ķieģeļi. 105 00:05:17,550 --> 00:05:20,490 Ja es rakstīt nākamo atkal Tagad es redzu bumbu. 106 00:05:20,490 --> 00:05:23,520 Un, ja es rakstīt nākamo atkal Tagad es redzu bradāt. 107 00:05:23,520 --> 00:05:26,690 >> Un par laimi tas gedit nav patiešām sadarbojās, parādot mani 108 00:05:26,690 --> 00:05:27,660 viss, ko es gribu. 109 00:05:27,660 --> 00:05:30,820 Bet tagad, ja man darīt tālāk atkal, nākamais atkal, es esmu tikai 110 00:05:30,820 --> 00:05:32,260 atzīstot dažus mainīgos. 111 00:05:32,260 --> 00:05:34,750 Un es varu izdrukāt kādu no šiem guys out. 112 00:05:34,750 --> 00:05:37,170 Drukāt ķieģeļi, izdrukas dzīvi. 113 00:05:37,170 --> 00:05:39,910 >> Un tagad, ja es turpinu to darīt Nākamais, ievēroju, ka es būšu 114 00:05:39,910 --> 00:05:40,870 iekšā šī cilpa. 115 00:05:40,870 --> 00:05:43,380 Bet kods ir gatavojas izpildīt tieši tā, kā es gaidīt. 116 00:05:43,380 --> 00:05:45,810 Tātad, kad es hit šo funkciju, Wait par klikšķi, tas būs jādara 117 00:05:45,810 --> 00:05:46,830 tas burtiski, ka. 118 00:05:46,830 --> 00:05:48,870 Tāpēc man šķiet, ir zaudējuši kontroli pār programmas. 119 00:05:48,870 --> 00:05:50,480 >> GDB nedod man citu ātri. 120 00:05:50,480 --> 00:05:51,500 Bet ne jāuztraucas. 121 00:05:51,500 --> 00:05:53,720 Iet uz manu spēli, noklikšķiniet kaut kur. 122 00:05:53,720 --> 00:05:56,270 >> Un voila, tagad tas ieņēmumus 86 līniju. 123 00:05:56,270 --> 00:05:59,460 Tātad vēlreiz, tas ir nenovērtējams, galu galā, debugging problēmas. 124 00:05:59,460 --> 00:06:03,050 Tāpēc, ka jūs varat burtiski soli pa savu kodu, drukāt lietas, un daudz, 125 00:06:03,050 --> 00:06:03,640 daudz, vairāk. 126 00:06:03,640 --> 00:06:07,210 Bet tagad, tie instrumenti vien vajadzētu saņemt jūs diezgan tālu. 127 00:06:07,210 --> 00:06:10,050 >> Tāpēc mēs esam, protams, ņemot apskatīt pie Grafikas tagad, visi pēkšņi. 128 00:06:10,050 --> 00:06:12,350 Un tagad mūsu pasaule kļūst nedaudz vairāk interesants. 129 00:06:12,350 --> 00:06:15,680 Un jūs zināt, iespējams, no dažām video tiešsaistē, kas mums ir šie 130 00:06:15,680 --> 00:06:18,280 šorti, ka jūs esat bijis skatīties kā daļa no problēmu kopas. 131 00:06:18,280 --> 00:06:20,460 >> Un viņi ir nošauts, apzināti, uz balta fona. 132 00:06:20,460 --> 00:06:23,380 Un daži no tiem ir mācību Stipendiātiem zīmēšanas kādu tekstu uz 133 00:06:23,380 --> 00:06:25,490 ekrāns, kas ir pārklāts par pusi no tiem. 134 00:06:25,490 --> 00:06:27,760 Bet, protams, tas nav viss, kas interesanti reālajā pasaulē. 135 00:06:27,760 --> 00:06:30,520 Tas ir tikai lekciju zāle liels balts ekrāns un fons. 136 00:06:30,520 --> 00:06:33,330 Un mūsu pārsteidzošs ražošanas komanda kārtošanas gada padara viss izskatās skaisti 137 00:06:33,330 --> 00:06:36,620 pēc tam, kad to, pēc ražas out vai pārklāj neko 138 00:06:36,620 --> 00:06:37,840 mēs darām vai negribam. 139 00:06:37,840 --> 00:06:41,560 >> Tagad tikai, lai motivētu šonedēļ, un tiešām, kur jūs varat iet, galu galā, 140 00:06:41,560 --> 00:06:42,560 ar datorzinātnēs. 141 00:06:42,560 --> 00:06:44,260 Ne tikai pēc tam, kad problēma noteikti četri. 142 00:06:44,260 --> 00:06:48,240 Bet pēc cita kursa vai visa mācību tas ir pārsteidzošs, ko jūs varat 143 00:06:48,240 --> 00:06:51,090 darīt šajās dienās ziņā grafikas, jo īpaši. 144 00:06:51,090 --> 00:06:53,440 >> Daži no jums varētu būt redzējuši šo plūst apkārt tiešsaistē. 145 00:06:53,440 --> 00:06:56,240 Bet es domāju, ka man parādīs, lai tikai pāris minūtes, ieskatu par to, ko 146 00:06:56,240 --> 00:07:01,890 datoru tehnoloģijas un kāda CGI, datorgrafika var darīt šajās dienās 147 00:07:01,890 --> 00:07:04,510 ar pazīstamo dziesmu un varbūt filmu. 148 00:07:04,510 --> 00:07:05,760 >> [MUSIC - LANA DEL RAY, "Jauna un skaista] 149 00:07:05,760 --> 00:10:50,270 150 00:10:50,270 --> 00:10:52,470 >> SPEAKER 1: Tas ir tikai nedaudz pārsteidzošs, varbūt, cik 151 00:10:52,470 --> 00:10:52,857 visuresošs - 152 00:10:52,857 --> 00:10:57,040 >> [Aplausi] 153 00:10:57,040 --> 00:10:59,230 >> SPEAKER 1: Es tikai lejupielādēt to. 154 00:10:59,230 --> 00:11:02,920 Bet tas ir patiešām pārsteidzošs, es domāju, ka, tikko kā visuresošs programmatūras un kodu un 155 00:11:02,920 --> 00:11:04,230 instrumentus, piemēram, tas tiešām ir. 156 00:11:04,230 --> 00:11:07,685 Tātad, kas ir no virziena garša kurā jūs varat iet. 157 00:11:07,685 --> 00:11:10,620 Ak, ne vairāk Appliance šodien. 158 00:11:10,620 --> 00:11:14,640 Nu, tas ir tiešām traģisks laiks ņemot vērā punktu es tikai centos darīt. 159 00:11:14,640 --> 00:11:18,670 >> Labi, tāpēc pieņemsim sākt Fusion vēlreiz. 160 00:11:18,670 --> 00:11:20,800 Atgādināt vēlāk. 161 00:11:20,800 --> 00:11:24,190 Visas tiesības, un jums ir ieguvuši e-pastu, kā malā, ja jūs saņemsiet 162 00:11:24,190 --> 00:11:25,460 pamanīt, piemēram, ka. 163 00:11:25,460 --> 00:11:29,940 Visas tiesības, lai atgādināt, ka pagājušajā nedēļā mēs sākām mizu atpakaļ šajā 164 00:11:29,940 --> 00:11:31,380 vēlāk pazīstams kā virkni. 165 00:11:31,380 --> 00:11:34,700 >> string atgādina datu tipu, kas ir deklarēto CS50 bibliotēkā. 166 00:11:34,700 --> 00:11:37,740 Un tā ir daļa no mācību riteņi kas tagad sāk pacelties. 167 00:11:37,740 --> 00:11:41,280 Tas bija lietderīgs jēdziens sākumā. 168 00:11:41,280 --> 00:11:43,750 Bet tagad tas notiek, lai iegūtu vairāk interesantu un jaudīgākas 169 00:11:43,750 --> 00:11:48,330 patiešām redzēt, ka zem motora pārsega, virkne ir tieši tas, ko, tomēr mēs teicām? 170 00:11:48,330 --> 00:11:50,500 >> Jā, tāpēc tas ir tā sauktais char *. 171 00:11:50,500 --> 00:11:53,860 Un * tur norāda, ka tur ir dažas adreses veida iesaistīti. 172 00:11:53,860 --> 00:11:58,690 Un tā, kad jūs sakāt char * tu tikai nozīmē mainīgais, kura datu tips ir 173 00:11:58,690 --> 00:11:59,290 rādītājs tagad. 174 00:11:59,290 --> 00:12:01,770 Tas, ka tur ir zvaigzne tur tikai nozīmē, ka jūs deklarējat 175 00:12:01,770 --> 00:12:03,020 tā saukto rādītājs. 176 00:12:03,020 --> 00:12:06,220 Un tas rādītājs gatavojas acīmredzot uzglabāt adresi, no 177 00:12:06,220 --> 00:12:07,810 protams, char. 178 00:12:07,810 --> 00:12:08,960 >> Tagad, kāpēc tas ir jēga? 179 00:12:08,960 --> 00:12:11,200 Nu, kas ir virkne zem pārsega? 180 00:12:11,200 --> 00:12:15,130 Nu, kādu laiku mēs esam bijuši pasakot ka zem motora pārsega virkne ir 181 00:12:15,130 --> 00:12:18,460 tikko h-e-l-l-o, piemēram. 182 00:12:18,460 --> 00:12:21,585 >> Bet mēs esam runājuši par to, kā ir, būtībā, masīvs. 183 00:12:21,585 --> 00:12:25,410 Un masīvs tad izskatās mazliet vairāk kā tas, ar katru no šiem 184 00:12:25,410 --> 00:12:26,460 sākšanu uzkost. 185 00:12:26,460 --> 00:12:28,710 Un tad mēs jau teicām, ka tur ir kaut kas īpašs atpakaļ šeit, 186 00:12:28,710 --> 00:12:31,270 slīpsvītru 0 vai null terminators. 187 00:12:31,270 --> 00:12:35,230 >> Tātad, visu šo laiku, tas šeit ir bijusi virkne. 188 00:12:35,230 --> 00:12:38,320 Bet tiešām, virkne ir patiesībā adresi. 189 00:12:38,320 --> 00:12:43,210 Un adreses, kā mēs redzēsim, bieži prefiksu ar 0x pēc vienošanās. 190 00:12:43,210 --> 00:12:44,540 Kāda 0x apzīmē? 191 00:12:44,540 --> 00:12:45,970 Vai kāds zina? 192 00:12:45,970 --> 00:12:47,320 >> Tātad, tas tikai nozīmē, heksadecimālo. 193 00:12:47,320 --> 00:12:52,360 Lai jūs varētu atcerēties, patiesībā, no PST 1, manuprāt, ir viens no iesildīšanās 194 00:12:52,360 --> 00:12:55,740 jautājumi faktiski jautāja par heksadecimālo notācija papildus 195 00:12:55,740 --> 00:12:57,100 binārā un decimālā. 196 00:12:57,100 --> 00:13:00,460 Un motivācija ir tāda, ka ar heksadecimālo Jums ir 16 197 00:13:00,460 --> 00:13:01,770 ciparus jūsu rīcībā. 198 00:13:01,770 --> 00:13:07,900 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, kam seko ar a, b, c, d, e, f. 199 00:13:07,900 --> 00:13:10,430 >> Un, ja skaita visus tos uz augšu, jums kopā 16. 200 00:13:10,430 --> 00:13:13,200 Tātad tas ir pretrunā ar decimāldaļskaitlis, kur mums ir 10 201 00:13:13,200 --> 00:13:14,690 cipari, 0 līdz deviņi. 202 00:13:14,690 --> 00:13:17,750 Tas ir pretstatā ar bināro kur mēs vienkārši ir 0 un 1. 203 00:13:17,750 --> 00:13:21,450 >> Bet beigās, dienā, jums var vienkārši pārstāv to pašu numuru, bet 204 00:13:21,450 --> 00:13:22,500 nedaudz savādāk. 205 00:13:22,500 --> 00:13:25,840 Un sešpadsmitnieku ir kopīgs, jo, kā izrādās - un mēs redzam 206 00:13:25,840 --> 00:13:28,790 vēlāk protams, - pat tad, kad mēs web programmēšanas kontekstā 207 00:13:28,790 --> 00:13:32,100 HTML un krāsu kodiem, heksadecimālo ir jauki. 208 00:13:32,100 --> 00:13:36,390 Jo katrs cipars, izrādās, pārstāv četri biti perfekti. 209 00:13:36,390 --> 00:13:39,280 Tātad, tas tikai veida līniju pat labi kā mēs galu galā redzēt. 210 00:13:39,280 --> 00:13:44,720 Tātad tas varētu būt Ox123 vai kaut ko piemēram, ka, apzīmējot adrese 123 211 00:13:44,720 --> 00:13:47,050 kaut kur iekšpusē no manām datora atmiņā. 212 00:13:47,050 --> 00:13:50,600 >> Bet, protams, dažas problēmas rodas tādēļ pamatā esošo 213 00:13:50,600 --> 00:13:51,520 īstenošanu. 214 00:13:51,520 --> 00:13:55,930 Un atceros, ka man bija stab pie īstenojot funkciju, piemēram, šo - 215 00:13:55,930 --> 00:14:00,260 salīdzināt domuzīme 0 dot c pagājušajā nedēļā, ka pat ja tas izskatījās kā tas bija 216 00:14:00,260 --> 00:14:04,270 labi, tas vienkārši nav salīdzināt divas stīgas pareizi. 217 00:14:04,270 --> 00:14:07,470 >> Es esmu izmest galvenais, un es esmu izmet prom komentārus vienkārši vērsta uz 218 00:14:07,470 --> 00:14:08,970 kodu, kas ir interese šeit. 219 00:14:08,970 --> 00:14:10,660 Un tas ir sarkans, jo tas ir buggy. 220 00:14:10,660 --> 00:14:11,670 Kāda iemesla dēļ? 221 00:14:11,670 --> 00:14:15,890 >> Nu, top tur, kad es paziņoju string, kas īsti notiek 222 00:14:15,890 --> 00:14:17,260 zem pārsega? 223 00:14:17,260 --> 00:14:19,530 Nu, ļaujiet man iet vairāk nekā uz ekrāns šeit un izdarīt to. 224 00:14:19,530 --> 00:14:23,230 Tāpēc es paziņoja, atkal, String s GetString. 225 00:14:23,230 --> 00:14:26,640 >> Tāpēc es esmu gatavojas iet uz priekšu tagad izdarīt s par to, kas tas īsti ir. 226 00:14:26,640 --> 00:14:28,590 Tas būs kvadrātveida šeit. 227 00:14:28,590 --> 00:14:30,490 Un es esmu gatavojas pieprasīt ka tas ir 32 biti. 228 00:14:30,490 --> 00:14:32,890 Vismaz tas parasti ir, vismaz uz CS50 ar 229 00:14:32,890 --> 00:14:34,520 ierīce ir daudz datoru. 230 00:14:34,520 --> 00:14:35,980 Es esmu gatavojas, lai izsauktu to s. 231 00:14:35,980 --> 00:14:39,070 >> Bet tagad atgādināt, ka mēs sauc GetString. 232 00:14:39,070 --> 00:14:41,430 Tātad GetString atgriežas, Protams, virkne. 233 00:14:41,430 --> 00:14:45,790 Ja lietotājs veidu h-e-l-l-o ievadīt stīgu sveiki izpaužas atpakaļ. 234 00:14:45,790 --> 00:14:51,010 Un tas stīgu, kā mēs tikko teica, beidzas kaut kur jūsu datora atmiņā 235 00:14:51,010 --> 00:14:53,240 ar slīpsvītru 0 beigās. 236 00:14:53,240 --> 00:14:56,650 Es izdarīt to, piemēram, masīvs - vai blakus bloka rakstzīmēm - 237 00:14:56,650 --> 00:14:58,330 ka tas patiesībā ir. 238 00:14:58,330 --> 00:15:01,790 >> Un tagad, kas ir GetString faktiski atgriežas? 239 00:15:01,790 --> 00:15:04,340 Kas ir GetString ir atgriešanās visu laiku? 240 00:15:04,340 --> 00:15:07,520 Nu, mēs teiksim, nedēļu pirms, tā atgriež virkni. 241 00:15:07,520 --> 00:15:10,250 Bet vēl tehniski, ko dara GetString peļņu acīmredzot? 242 00:15:10,250 --> 00:15:11,610 >> Mērķauditorija: adresi. 243 00:15:11,610 --> 00:15:12,600 >> SPEAKER 1: adresi. 244 00:15:12,600 --> 00:15:16,630 Konkrēti tas atgriež adresi Pati pirmā kodums, kāds tas ir. 245 00:15:16,630 --> 00:15:18,830 Es tikai glabāt, izmantojot vienu, divas, trīs jo tas ir ērti. 246 00:15:18,830 --> 00:15:21,380 >> Tā atgriež adresi, kura pirmā rakstzīmju virknē. 247 00:15:21,380 --> 00:15:23,510 Un mēs teicām pagājušajā nedēļā, ka , kas ir pietiekams. 248 00:15:23,510 --> 00:15:26,710 Tāpēc, ka mēs vienmēr varam izdomāt, kur beigām virknes vienkārši 249 00:15:26,710 --> 00:15:30,150 atkārtojot pār to, varbūt, ar par cilpa, vai kamēr cilpa, vai kaut kas tamlīdzīgs 250 00:15:30,150 --> 00:15:34,990 ka tikai meklē "slīpsvītru 0", īpašais sargs raksturs. 251 00:15:34,990 --> 00:15:37,220 >> Un tad mēs zinām, ka virkne notiek, garuma - 252 00:15:37,220 --> 00:15:37,980 šajā gadījumā - 253 00:15:37,980 --> 00:15:38,670 pieci. 254 00:15:38,670 --> 00:15:43,800 Tātad, tehniski kādi GetString dara tas atgriežas Ox123 šajā lietā. 255 00:15:43,800 --> 00:15:53,670 Un tehniski to, kas tad notiek, ir ka mēs glabāt, iekšpusē s, Ox123. 256 00:15:53,670 --> 00:15:56,460 Beigās, dienā, pat tad, ja šis ir jauns jēdziens, norādes, viņi 257 00:15:56,460 --> 00:15:57,350 tikai mainīgie. 258 00:15:57,350 --> 00:16:00,440 Bet tie notiek, lai saglabātu biti, kolektīvi pārstāv adresi. 259 00:16:00,440 --> 00:16:03,700 Tātad tehniski visi tie izpaužas glabājas s ir Ox123. 260 00:16:03,700 --> 00:16:04,680 >> Bet mēs kā cilvēki - 261 00:16:04,680 --> 00:16:06,020 ieskaitot šodien Tālāka - 262 00:16:06,020 --> 00:16:09,290 tiešām nav gatavojas aprūpi, parasti, kāda faktiskā adrese ir 263 00:16:09,290 --> 00:16:10,520 Dažu rieciens atmiņas. 264 00:16:10,520 --> 00:16:14,040 Tas ir tikai, lai zemo sīki būt intelektuāli interesanti. 265 00:16:14,040 --> 00:16:15,440 Tāpēc es esmu gatavojas atsaukt to. 266 00:16:15,440 --> 00:16:19,810 Un tā vietā vairāk augsta līmeņa, vienkārši pateikt ka tad, kad mēs runājam par norādes 267 00:16:19,810 --> 00:16:22,170 Es esmu gatavojas tikai izdarīt vairāk lietotājam draudzīgu bultiņa, kas rada 268 00:16:22,170 --> 00:16:26,060 pati ideja un tēzes prom ziņas par to, ko faktiskā 269 00:16:26,060 --> 00:16:27,700 bāzes adrese ir. 270 00:16:27,700 --> 00:16:33,290 >> Tagad, ja mēs ejam atpakaļ uz kodu, ko notika pagājušajā nedēļā, ja mums ir virkne t 271 00:16:33,290 --> 00:16:34,510 vienāds GetString? 272 00:16:34,510 --> 00:16:38,630 Nu, ja es atkal, ierakstiet sveiki šoreiz es esmu gatavojas saņemt 273 00:16:38,630 --> 00:16:40,460 vēl rieciens atmiņas. 274 00:16:40,460 --> 00:16:44,820 h-e-l-l-o slīpsvītru 0. 275 00:16:44,820 --> 00:16:48,320 >> Bet tāpēc, ka es sauc GetString otro reizi - 276 00:16:48,320 --> 00:16:51,100 un es zinu, tas no apskatot pirmkods GetString - pat 277 00:16:51,100 --> 00:16:54,350 lai gan tā ir nejaušība, ka sveiki bija drukāti divreiz, GetString nav 278 00:16:54,350 --> 00:16:55,890 gatavojas izmēģināt, lai optimizētu un būt gudrs. 279 00:16:55,890 --> 00:16:58,550 Tas ir tikai gatavojas saņemt otru rieciens atmiņas no datora, kas ir 280 00:16:58,550 --> 00:16:59,640 būs citā adresē. 281 00:16:59,640 --> 00:17:02,330 Pieņemsim patvaļīgi tikai teikt 456. 282 00:17:02,330 --> 00:17:04,079 >> Un tad tas notiek, lai atgrieztos? 283 00:17:04,079 --> 00:17:08,030 Tas notiek, lai atgrieztos 456 un uzglabāt to t. 284 00:17:08,030 --> 00:17:12,010 Tātad, kas īsti notiek, par kreisā puse ir tā, man ir vēl viens gabals 285 00:17:12,010 --> 00:17:14,260 atmiņas, 32 biti parasti. 286 00:17:14,260 --> 00:17:16,720 Un tur ir gatavojas iet Ox456. 287 00:17:16,720 --> 00:17:20,140 Bet atkal, es neesmu ieinteresēts šajās konkrēti skaitļi vairs. 288 00:17:20,140 --> 00:17:23,069 Es esmu tikai gatavojas abstrakti izdarīt to kā bulta. 289 00:17:23,069 --> 00:17:25,202 >> Tātad tagad tas ir jauns skaidrojums. 290 00:17:25,202 --> 00:17:28,735 Bet tas ir pats precīzu ideja, ka ir noticis visu šo laiku. 291 00:17:28,735 --> 00:17:33,150 Un tā iemesls tam, ka šis pirmais versija salīdzināt bija bagijs 292 00:17:33,150 --> 00:17:34,480 pagājušajā nedēļā ir iemesls, kāpēc? 293 00:17:34,480 --> 00:17:38,000 Kad jūs darīt, ja s vienāds vienāds t, kas ir jūs patiešām 294 00:17:38,000 --> 00:17:40,550 zem motora pārsegs salīdzinot? 295 00:17:40,550 --> 00:17:41,910 >> Jūs esat salīdzinot adreses. 296 00:17:41,910 --> 00:17:47,950 Un tikai intuitīvi, skaidri, Ox123 nav gatavojas Ox456 vienāda. 297 00:17:47,950 --> 00:17:49,380 Šie skaitļi, šie biti ir tikai atšķirīgs. 298 00:17:49,380 --> 00:17:53,220 >> Un tā pastāvīgi, pagājušajā nedēļā tā teica Rakstot dažādas lietas, pat tad, ja 299 00:17:53,220 --> 00:17:55,360 vārdi bija burtiski pats. 300 00:17:55,360 --> 00:17:58,770 Tāpēc mēs noteikt šo. 301 00:17:58,770 --> 00:18:00,120 In lajs izteiksmē, kas bija noteikt? 302 00:18:00,120 --> 00:18:02,110 >> Mērķauditorija: Izmantojiet funkciju. 303 00:18:02,110 --> 00:18:02,870 >> SPEAKER 1: Izmantojiet funkciju. 304 00:18:02,870 --> 00:18:05,190 Vai zvaigznes ir noteikti iesaistīts, bet izmantot funkciju darīt? 305 00:18:05,190 --> 00:18:05,962 >> Mērķauditorija: Lai salīdzinātu stīgas. 306 00:18:05,962 --> 00:18:07,390 >> SPEAKER 1: Lai salīdzinātu stīgas. 307 00:18:07,390 --> 00:18:11,030 Tātad būtiska problēma šeit bija ka man bija tikai apsver 308 00:18:11,030 --> 00:18:15,870 kvalitātes stīgas jādefinē Salīdzinot to adreses. 309 00:18:15,870 --> 00:18:18,540 Un, protams, tas ir tikai mēms tagad, kad jūs saprotat, kas notiek 310 00:18:18,540 --> 00:18:19,510 zem motora pārsega. 311 00:18:19,510 --> 00:18:23,270 Lai patiesi salīdzināt virknes, lai redzētu, vai viņi vienādi tādā veidā, ka cilvēka 312 00:18:23,270 --> 00:18:26,680 apsvērtu divām stīgām, ir vienāda mums ir nepieciešams, lai salīdzinātu tos rakstzīmi 313 00:18:26,680 --> 00:18:28,070 rakstzīme raksturs. 314 00:18:28,070 --> 00:18:30,020 >> Tagad es varētu būt izdarīt tas ir ļoti tediously. 315 00:18:30,020 --> 00:18:32,240 Bet familiarly, mēs esam izmantojot uz cilpas. 316 00:18:32,240 --> 00:18:36,050 Un tikai salīdzināt s skavu i pret t bracket i. 317 00:18:36,050 --> 00:18:39,590 s kronšteins i plus 1 pret t grupā i plus 1, un tā tālāk, iekšpusē 318 00:18:39,590 --> 00:18:40,580 sava veida cilpa. 319 00:18:40,580 --> 00:18:44,950 Un, ja es uz vietas nekādas divas rakstzīmes, ka atšķiras, vai, ja es saprotu, ka ooh, s 320 00:18:44,950 --> 00:18:48,410 īsāks nekā t vai garāks nekā t Es varu uzreiz pateikt nepatiesa, 321 00:18:48,410 --> 00:18:49,390 viņi nav tas pats. 322 00:18:49,390 --> 00:18:55,370 >> Bet, ja es pa s un t un teikt tas pats, pats, pats, pats, pats, beigas 323 00:18:55,370 --> 00:18:58,520 abas virknes, es varu teikt, taisnība, tie ir vienādi. 324 00:18:58,520 --> 00:19:01,040 Nu, par laimi, gadus atpakaļ kāds rakstīja, ka kodu par mums. 325 00:19:01,040 --> 00:19:03,790 >> Un viņi to sauca StrComp par stīgu salīdzināt. 326 00:19:03,790 --> 00:19:11,900 Un, pat ja tas ir mazliet counter intuitīvs, StrComp atgriež 0, ja tie 327 00:19:11,900 --> 00:19:14,520 divas virknes, s un t ir vienādi. 328 00:19:14,520 --> 00:19:18,090 Bet tas atgriež negatīvu vērtību, ja s ir jānāk pirms t alfabēta vai 329 00:19:18,090 --> 00:19:20,610 pozitīva vērtība, ja tā būtu jānāk Pēc t alfabēta. 330 00:19:20,610 --> 00:19:24,030 >> Tātad, ja jūs kādreiz vēlaties kārtot kaut ko, izrādās, ka StrComp ir noderīga. 331 00:19:24,030 --> 00:19:26,660 Jo tas nav tikai teikt jā vai nē, ir vienāds vai ne. 332 00:19:26,660 --> 00:19:30,440 Tas dod jums sajūtu pasūtīšanu patīk vārdnīca varenību. 333 00:19:30,440 --> 00:19:33,770 Tātad StrComp, s komats t vienāds ir vienāds ar 0 nozīmē, ka 334 00:19:33,770 --> 00:19:35,200 stīgas ir patiesi vienlīdzīgi. 335 00:19:35,200 --> 00:19:38,680 Tāpēc, ka tas, kurš rakstīja šo funkciju gadus atpakaļ, iespējams, izmanto, lai cilpa 336 00:19:38,680 --> 00:19:42,840 vai kamēr cilpa, vai kaut kas tamlīdzīgs integrēt pa burtiem atkal 337 00:19:42,840 --> 00:19:45,270 un atkal un atkal. 338 00:19:45,270 --> 00:19:47,300 >> Bet problēma divas radās šeit. 339 00:19:47,300 --> 00:19:48,750 Tas bija copy0.c. 340 00:19:48,750 --> 00:19:51,680 Un sarkanā krāsā abiem ir tāpēc, ka tas ir kļūdains. 341 00:19:51,680 --> 00:19:52,800 Un ko mēs darām šeit? 342 00:19:52,800 --> 00:19:54,310 Nu, vispirms es sauc GetString. 343 00:19:54,310 --> 00:19:56,255 Un es saglabāti atgriezto vērtību s. 344 00:19:56,255 --> 00:20:00,260 Tātad tas ir diezgan daudz tāds pats kā šī augšējā daļa no attēla. 345 00:20:00,260 --> 00:20:01,490 >> Bet to, kas nāk pēc tam? 346 00:20:01,490 --> 00:20:04,980 Nu, ļaujiet man iet uz priekšu un tikt vaļā no visa ķekars šo. 347 00:20:04,980 --> 00:20:09,650 Mēs attītu laikā, kur mēs vienkārši ir S, kas ir tagad ir vienādi ar 348 00:20:09,650 --> 00:20:10,940 line vienu tur. 349 00:20:10,940 --> 00:20:11,400 >> Es varētu pārbaudīt. 350 00:20:11,400 --> 00:20:13,450 Ja s vienāds vienāds ar 0. 351 00:20:13,450 --> 00:20:18,670 Tagad, ātri pusē piezīmi, kad varētu GetString atgriezīsies 0? 352 00:20:18,670 --> 00:20:19,580 Tur nav pietiekami daudz atmiņas. 353 00:20:19,580 --> 00:20:19,880 Labi? 354 00:20:19,880 --> 00:20:22,310 >> Tas ir reti, ka tas notiks, protams, par datoru, kas ir 355 00:20:22,310 --> 00:20:24,740 saņēmu simtiem megs vai pat gigs RAM. 356 00:20:24,740 --> 00:20:27,080 Bet tas varētu, teorētiski, atgriezties 0, it īpaši, ja 357 00:20:27,080 --> 00:20:28,080 lietotājs nesadarbojas. 358 00:20:28,080 --> 00:20:31,640 Ir veidi, kā izlikties, piemēram, jums ir ne ienākošā vizuālā kaut ko un triks 359 00:20:31,640 --> 00:20:34,100 GetString par atgriešanos 0 efektīvi. 360 00:20:34,100 --> 00:20:35,470 >> Tātad, tas notiek, lai pārbaudītu to. 361 00:20:35,470 --> 00:20:39,430 Jo, ja kāds no jums ir sākuši get, kas jau, segmentācijas kļūdas - 362 00:20:39,430 --> 00:20:42,280 kas, iespējams, bijis avots zināma vilšanās - 363 00:20:42,280 --> 00:20:46,150 tie ir gandrīz vienmēr rezultāts atmiņas saistītas kļūdas. 364 00:20:46,150 --> 00:20:50,440 Kaut kā jums messed up attiecībā uz rādītājs, pat ja Jums nav saprast 365 00:20:50,440 --> 00:20:51,530 tur bija rādītājs. 366 00:20:51,530 --> 00:20:55,260 Tātad, jūs varētu būt izraisa segmentāciju kļūdas, kā jau nedēļu vienu, izmantojot 367 00:20:55,260 --> 00:21:02,100 kaut kas līdzīgs, lai cilpas vai atrodoties cilpas un masīvs, dodoties pārāk tālu 368 00:21:02,100 --> 00:21:05,900 garām dažu masīva robežas, kas Jums paziņoja, divās nedēļā 369 00:21:05,900 --> 00:21:06,690 īpaši. 370 00:21:06,690 --> 00:21:09,220 >> Jūs, iespējams, ir darījuši to pat problēmu noteikti četri ar Breakout. 371 00:21:09,220 --> 00:21:12,910 Pat ja jūs, iespējams, neesat redzējuši visas zvaigznes izplatīšanas kodu par 372 00:21:12,910 --> 00:21:17,410 Breakout, izrādās, ka tie GRect un GOval un citas tādas lietas, 373 00:21:17,410 --> 00:21:19,650 tie ir faktiski norādes zem motora pārsega. 374 00:21:19,650 --> 00:21:23,430 >> Bet Stanford, tāpat kā mums, kārtot Ādu ka detaļa vismaz par bibliotēku 375 00:21:23,430 --> 00:21:26,540 mērķiem, daudz, tāpat kā mēs teksta un char *. 376 00:21:26,540 --> 00:21:30,060 Bet GRect un GOval un visiem tiem, lietas, jūs puiši ir vai būs, izmantojot 377 00:21:30,060 --> 00:21:32,630 šonedēļ galu galā atmiņas adreses. 378 00:21:32,630 --> 00:21:33,650 Jūs vienkārši nezināt to. 379 00:21:33,650 --> 00:21:37,240 >> Tātad, tas nav pārsteigums, tad, iespējams, ka jūs varētu paklupt dažus 380 00:21:37,240 --> 00:21:38,580 segmentācijas kļūdas. 381 00:21:38,580 --> 00:21:41,290 Bet kas ir interesanti šeit tagad, ja pēc tam, kad mēs pārbaudītu 0 mēs darām 382 00:21:41,290 --> 00:21:43,460 stīgu t izpaužas s. 383 00:21:43,460 --> 00:21:44,690 Nu, ļaujiet man paziņot, t. 384 00:21:44,690 --> 00:21:47,730 Es esmu gatavojas izdarīt to kā laukumā, 32 biti, to sauc par t. 385 00:21:47,730 --> 00:21:49,740 Un tad es esmu gatavojas darīt izpaužas s. 386 00:21:49,740 --> 00:21:51,130 >> Nu, ko tas nozīmē? 387 00:21:51,130 --> 00:21:53,280 Nu, tas ir mazliet grūti iedomāties par to attēlu gudrs. 388 00:21:53,280 --> 00:21:55,025 Bet pieņemsim domāt par kas ir iekšā no x? 389 00:21:55,025 --> 00:21:59,430 Kas ir burtiski iekšā šo mainīgo? 390 00:21:59,430 --> 00:22:01,500 Vērtību Ox123. 391 00:22:01,500 --> 00:22:05,815 >> Tātad, kad es saku virkne t izpaužas s, ka tikai burtiski nozīmē veikt numurs 392 00:22:05,815 --> 00:22:10,070 s, kas ir Ox123 un nodot to Ox123. 393 00:22:10,070 --> 00:22:13,740 Vai gleznieciski, ja es veida abstrakti prom no minētā detalizēti tas ir 394 00:22:13,740 --> 00:22:16,600 efekts burtiski darīt šis kā labi. 395 00:22:16,600 --> 00:22:22,110 >> Tāpēc tagad, domāju, ka atpakaļ uz pagājušajā nedēļā, kad mēs turpināja kapitālisma T. I 396 00:22:22,110 --> 00:22:23,800 darīja T bracket 0. 397 00:22:23,800 --> 00:22:27,150 Nu, T kronšteins 0, pat ja tas ir rādītāju, jūs varat uzskatīt to kā gan 398 00:22:27,150 --> 00:22:29,220 tas ir masīvs, ar kvadrātveida kronšteins notācija. 399 00:22:29,220 --> 00:22:31,550 >> Tātad, kur ir T kronšteins 0? 400 00:22:31,550 --> 00:22:32,990 Nu, tas ir h. 401 00:22:32,990 --> 00:22:36,800 Un tad, kad mēs izmantojam šo rindiņu kodu, divi augšējais, kas ir, ka C type.h 402 00:22:36,800 --> 00:22:38,460 header failu, tas ir, ja tas ir deklarētas. 403 00:22:38,460 --> 00:22:44,410 Jūs esat gūstot šo H. Bet, protams, tas ir pats precīzu h, kas ir 404 00:22:44,410 --> 00:22:46,540 iekšpusē no s, tā sakot. 405 00:22:46,540 --> 00:22:51,930 Un tā tagad jums ir mainījušies vai kapitalizētas gan oriģināls un 406 00:22:51,930 --> 00:22:53,120 tā saukto kopiju. 407 00:22:53,120 --> 00:22:56,620 Tāpēc, ka jums nav padarīt kopiju veids, ka cilvēks gribētu, lai to. 408 00:22:56,620 --> 00:22:59,710 >> Tātad, kāds bija noteikt šeit, jo copy1.c pagājušajā nedēļā? 409 00:22:59,710 --> 00:23:03,070 410 00:23:03,070 --> 00:23:05,580 Funkcijas, lai mēs varētu tiešām kopēt virkni. 411 00:23:05,580 --> 00:23:08,700 Un būtībā, ko mums vajag darīt, lai kopētu string? 412 00:23:08,700 --> 00:23:12,070 >> Nu, šajā zaļajā versijā šeit es esmu gatavojas to darīt diezgan zema līmeņa. 413 00:23:12,070 --> 00:23:14,260 Ir faktiski funkcijas viņi varētu palīdzēt ar to. 414 00:23:14,260 --> 00:23:17,710 Bet visvairāk pamata viens, un visvairāk pazīstams viens, vismaz, drīz būs 415 00:23:17,710 --> 00:23:19,600 pazīstams ar mums, ir šādi - 416 00:23:19,600 --> 00:23:21,910 tā viens no pirmās rindas koda zaļā krāsā tagad. 417 00:23:21,910 --> 00:23:23,970 >> Es tikai pārrakstīja s kā char *. 418 00:23:23,970 --> 00:23:25,250 Nav funkcionālas atšķirība tur. 419 00:23:25,250 --> 00:23:28,790 Es tikko aizmeta CS50 bibliotēku un Es esmu aicinot to, kas tas ir, char *. 420 00:23:28,790 --> 00:23:31,640 >> Tagad dot, dot, dot, jo bija daži kļūdu pārbaude, ka tas nav 421 00:23:31,640 --> 00:23:33,200 interesanti runāt vēlreiz. 422 00:23:33,200 --> 00:23:34,710 Tāpēc tagad t ir deklarēta. 423 00:23:34,710 --> 00:23:35,780 Tas arī ir char *. 424 00:23:35,780 --> 00:23:38,280 Tāpēc es vērsa maz kvadrātu uz ekrāns kā agrāk. 425 00:23:38,280 --> 00:23:41,870 >> Bet uz labajā pusē, malloc, mēs teicām, ir atmiņa piešķirt. 426 00:23:41,870 --> 00:23:44,130 Tātad piešķirt kādu gabalu no atmiņas. 427 00:23:44,130 --> 00:23:48,830 Un cik daudz baitu vai mēs patiešām vēlas piešķirt, tas šķiet? 428 00:23:48,830 --> 00:23:50,340 >> Nu, virknes garums s. 429 00:23:50,340 --> 00:23:52,310 Tātad, ja tas ir sveiki kas ir būs pieci. 430 00:23:52,310 --> 00:23:53,950 Mēs teikt h-e-l-l-o. 431 00:23:53,950 --> 00:23:55,090 Tātad pieci baiti. 432 00:23:55,090 --> 00:23:57,960 >> Bet tad plus 1, kāpēc 1? 433 00:23:57,960 --> 00:23:58,830 0 raksturs. 434 00:23:58,830 --> 00:24:03,640 Ja mums nav jāatstāj šo puisis, mēs var nejauši radīt situāciju 435 00:24:03,640 --> 00:24:05,600 kur virkne ir h-e-l-l-o. 436 00:24:05,600 --> 00:24:08,470 Un tad nākamreiz GetString ir sauc, un es rakstīt, piemēram, 437 00:24:08,470 --> 00:24:14,020 David, D--v-i-d, dators ir iet domāt, ka s ir faktiski 438 00:24:14,020 --> 00:24:18,900 h-e-l-l-o-d-a-v-i-d jo tur nav pauze starp šiem vārdiem. 439 00:24:18,900 --> 00:24:19,810 >> Tāpēc mums ir nepieciešams šo pārtraukumu. 440 00:24:19,810 --> 00:24:20,720 Tāpēc mēs nevēlamies pieci. 441 00:24:20,720 --> 00:24:22,100 Mēs vēlamies sešas baiti. 442 00:24:22,100 --> 00:24:23,110 >> Un baiti es saku. 443 00:24:23,110 --> 00:24:25,220 Bet tas tiešām laiks lielums char. 444 00:24:25,220 --> 00:24:28,040 Tehniski simbols ir gandrīz vienmēr viens baits. 445 00:24:28,040 --> 00:24:31,030 >> Bet tikai, lai padarītu mūsu kodu portatīvie, tā sakot, lai tas darbojas uz 446 00:24:31,030 --> 00:24:33,750 dažādiem datoriem, pat tad, ja tie varētu būt nedaudz atšķirīgs zem 447 00:24:33,750 --> 00:24:36,590 kapuce, es esmu gatavojas vispārīgi saka lielums char, lai 448 00:24:36,590 --> 00:24:37,660 mans kods vienmēr strādā. 449 00:24:37,660 --> 00:24:40,610 Un man nav recompile to tikai jo es uzlabot manu datoru vai izmantojiet 450 00:24:40,610 --> 00:24:42,140 daži dažādas platformas. 451 00:24:42,140 --> 00:24:45,300 >> Tāpēc es esam ieguvuši 6 reizes lielāka char, kas notiek, ir 1. 452 00:24:45,300 --> 00:24:47,440 Tātad tas nozīmē, ka malloc varētu man sešas baiti. 453 00:24:47,440 --> 00:24:49,140 Kas ir tas, ka patiesībā dara? 454 00:24:49,140 --> 00:24:52,810 Nu, ļaujiet man roll atpakaļ laikā šeit , kur mēs esam stāstā. 455 00:24:52,810 --> 00:24:57,620 >> Tātad, ja es dodos atpakaļ šeit, es esmu deklarēta char * ko sauc par t. 456 00:24:57,620 --> 00:25:00,280 Esmu tagad sauc malloc sešus baitu. 457 00:25:00,280 --> 00:25:06,400 Un tagad es esmu gatavojas izdarīt šo sešu baiti tāpat kā masīvs agrāk. 458 00:25:06,400 --> 00:25:10,570 Bet es tiešām nezinu, kas ir iekšā šajā masīvā. 459 00:25:10,570 --> 00:25:14,640 >> Ja jūs piešķirt atmiņu izrādās, ka Jūs nevarat uzticēties, ka tur ir dažas 460 00:25:14,640 --> 00:25:15,810 zināma tur. 461 00:25:15,810 --> 00:25:18,400 Tas varēja izmantot kaut ko cits, dažas citas funkcijas, daži citi 462 00:25:18,400 --> 00:25:19,630 rindā kodu, ka jūs wrote. 463 00:25:19,630 --> 00:25:22,870 Tāpēc mēs parasti saucam šos atkritumus vērtības un izdarīt to, varbūt, jo 464 00:25:22,870 --> 00:25:26,170 jautājuma zīmes, tikai norādot, ka mēs nezinu, kas tas patiesībā ir. 465 00:25:26,170 --> 00:25:30,390 Un tas nav liels galā, tik ilgi, kamēr mēs ir pietiekami gudrs, lai pārrakstītu tiem 466 00:25:30,390 --> 00:25:34,550 atkritumu vērtības ar numuriem vai simboli, kas mums rūp. 467 00:25:34,550 --> 00:25:36,340 >> Tātad šajā gadījumā to, ko es esmu gatavojas darīt? 468 00:25:36,340 --> 00:25:38,670 Nu, mana līnija kods Nākamais, man ir četri. 469 00:25:38,670 --> 00:25:41,350 int man 0, n izpaužas virknes garums s. 470 00:25:41,350 --> 00:25:42,750 Tāpēc pārzina cilpu. 471 00:25:42,750 --> 00:25:45,875 Man ir mazāks par vai vienāds ar n, , kas parasti ir iepriekš. 472 00:25:45,875 --> 00:25:47,500 >> Bet šoreiz tas ir apzināts. 473 00:25:47,500 --> 00:25:51,890 I + +, un tad es vienkārši darīt t kronšteins i izpaužas s. 474 00:25:51,890 --> 00:25:56,320 Tāpēc, ka mana bilde izskatās kā šis šis brīdis, glabājas t ir 475 00:25:56,320 --> 00:25:59,530 adrese, tāpat izlases rieciens atmiņas , kuru vērtības ir zināma. 476 00:25:59,530 --> 00:26:03,030 Bet, tiklīdz es t skavu 0, kas liek man šeit. 477 00:26:03,030 --> 00:26:07,430 >> Un kas beidzas līdz kļūst sastādīts tur? 478 00:26:07,430 --> 00:26:08,740 Mēs galu galā liekot h. 479 00:26:08,740 --> 00:26:11,170 Jo tas, kas ir pie s skavas 0. 480 00:26:11,170 --> 00:26:14,300 Un tad tas pats par e, un l, un l, un o. 481 00:26:14,300 --> 00:26:17,930 >> n, kāpēc man iet uz augšu cauri vienāds ar n? 482 00:26:17,930 --> 00:26:19,200 Sakarā ar 0 raksturs. 483 00:26:19,200 --> 00:26:23,580 Tik vienkārši, lai būtu skaidrs, tad, ja es tiešām dzēst neatkarīgi no šo atkritumu 484 00:26:23,580 --> 00:26:28,870 vērtības, un tad faktiski izdarīt ko es gaidīt, tas ir s kronšteins 1, 2, 485 00:26:28,870 --> 00:26:32,440 3, 4, kā arī, kas ir trailing jaunu raksturu. 486 00:26:32,440 --> 00:26:36,080 >> Un tāpēc tagad, ja mēs turpinājām garām dot, dot, dot šajā pareizo versiju 487 00:26:36,080 --> 00:26:41,930 un lielais t kronšteins 0 Es, protams, var gūstot tikai šo 488 00:26:41,930 --> 00:26:47,050 puisis šeit, kas konceptuāli, galu galā bija mērķis. 489 00:26:47,050 --> 00:26:48,040 Tā ka viss rādītājs ir. 490 00:26:48,040 --> 00:26:51,430 >> Un jūs esat bijis, izmantojot tos nedēļas Tagad saistībā ar stīgām. 491 00:26:51,430 --> 00:26:53,530 Bet zem pārsega viņi nedaudz sarežģītāka. 492 00:26:53,530 --> 00:26:57,520 Bet, ja jūs domājat par tiem šajā ilustrētā veidā es ierosinu, ka viņi 493 00:26:57,520 --> 00:27:01,720 iespējams, ne visi, ka biedējošu, jo tie varētu likties no pirmā acu uzmetiena, 494 00:27:01,720 --> 00:27:04,730 it īpaši ar šādu jaunu sintaksi. 495 00:27:04,730 --> 00:27:07,290 Kādi jautājumi par norādes, stīgas, vai chars? 496 00:27:07,290 --> 00:27:07,580 Yeah? 497 00:27:07,580 --> 00:27:09,252 >> Mērķauditorija: Vai jūs iet atpakaļ līdz [nedzirdamajā]? 498 00:27:09,252 --> 00:27:10,502 >> SPEAKER 1: Protams. 499 00:27:10,502 --> 00:27:14,058 500 00:27:14,058 --> 00:27:19,525 >> Mērķauditorija: Tātad, cik nāk jūsu ļoti pēdējā line, jums nav * t līnija 501 00:27:19,525 --> 00:27:21,513 un * s ar līniju? 502 00:27:21,513 --> 00:27:23,004 Vai nav jums ir atsauce uz - 503 00:27:23,004 --> 00:27:24,640 >> SPEAKER 1: Ah, patiešām labs jautājums. 504 00:27:24,640 --> 00:27:26,800 Kāpēc man ir * t un * s? 505 00:27:26,800 --> 00:27:30,340 Jo īsi, pagājušajā nedēļā, tāpat kā mūsu swap funkcija, man bija teikt, ka tad, kad 506 00:27:30,340 --> 00:27:33,350 Jūs esat ieguvuši rādītāju līdzekļus, ar ko jūs iet tur, kā mēs to darījām 507 00:27:33,350 --> 00:27:36,590 fiziski uz skatuves, bija faktiski izmantot zvaigzne operatoru. 508 00:27:36,590 --> 00:27:40,570 >> Izrādās, ka šis square-kronšteins notācija ir tas, ko mēs saucam sintaktisko 509 00:27:40,570 --> 00:27:44,190 cukurs, kas ir tikai sexy veids sakot, ka tas ir stenogrāfija notāciju 510 00:27:44,190 --> 00:27:45,950 tieši to, ko jūs apraksta. 511 00:27:45,950 --> 00:27:49,385 Bet tas ir nedaudz vairāk intuitīvi. 512 00:27:49,385 --> 00:27:53,510 Un pastāv risks, ka tas, šķiet, vairāk sarežģīta, nekā tai vajadzētu būt, 513 00:27:53,510 --> 00:27:56,990 to, kas īsti notiek šeit ir šādas - 514 00:27:56,990 --> 00:28:01,450 Ja es saku * t, tas nozīmē, ka iet uz adrese uzglabā t. 515 00:28:01,450 --> 00:28:04,350 >> Tik burtiski, ja t ir uzglabātu adresi, h 516 00:28:04,350 --> 00:28:07,300 Sākotnēji, * t nozīmē iet šeit. 517 00:28:07,300 --> 00:28:10,730 Tagad, ko tas t kronšteins 0 nozīmē? 518 00:28:10,730 --> 00:28:11,560 Pats precīzu lieta. 519 00:28:11,560 --> 00:28:13,510 Tas ir tikai nedaudz vairāk lietotāju draudzīgi rakstīt. 520 00:28:13,510 --> 00:28:14,430 >> Bet es neesmu darīts vēl. 521 00:28:14,430 --> 00:28:17,800 Es nevaru vienkārši pateikt * t izpaužas * s. 522 00:28:17,800 --> 00:28:19,440 Jo tas, ko man darīt pēc tam? 523 00:28:19,440 --> 00:28:22,950 Es gribētu būt liekot h, h, h, h, h visa lieta. 524 00:28:22,950 --> 00:28:22,995 Labi? 525 00:28:22,995 --> 00:28:26,020 >> Jo * t ir doties uz adresi t. 526 00:28:26,020 --> 00:28:27,580 Bet mēs esam iekšpusē cilpas. 527 00:28:27,580 --> 00:28:32,150 Un kāda vērtība es palielināšanai, Protams, katrā atkārtojuma? 528 00:28:32,150 --> 00:28:32,690 i. 529 00:28:32,690 --> 00:28:34,590 >> Bet tur ir iespēja šeit, vai ne? 530 00:28:34,590 --> 00:28:37,870 Pat ja tas uzskata, tāpat kā tas kļūst nedaudz sarežģītākas 531 00:28:37,870 --> 00:28:40,730 nekā kvadrātveida stiprinājuma notācijas mēs esam izmanto kādu laiku - 532 00:28:40,730 --> 00:28:43,840 ļaujiet man atsaukt manu h izmaiņas tur - 533 00:28:43,840 --> 00:28:48,870 pat ja tas ir tagad kļūst nedaudz mīļotājs, pamatideja, ja * t 534 00:28:48,870 --> 00:28:53,630 ir šeit un * t ir tikai dodieties uz adresi t. 535 00:28:53,630 --> 00:28:54,990 >> Bet kāda bija adrese t? 536 00:28:54,990 --> 00:28:56,850 Skaitlis mēs turpinām izmantot? 537 00:28:56,850 --> 00:29:00,540 Tāpat Ox456, pieņemsim panākt, ka atkal tikai dēļ diskusiju. 538 00:29:00,540 --> 00:29:05,380 Nu, ja es vēlos saņemt pie e in t stīgu, es tikai gribu, lai dotos uz, 539 00:29:05,380 --> 00:29:06,460 būtībā, 456. 540 00:29:06,460 --> 00:29:09,230 >> Vai drīzāk, 457. 541 00:29:09,230 --> 00:29:10,590 Man vienkārši vajag pievienot. 542 00:29:10,590 --> 00:29:11,790 Bet es varu darīt, labi? 543 00:29:11,790 --> 00:29:14,680 Jo t, kaut gan es glabāt zīmējumu tagad kā bulta, tas ir tikai 544 00:29:14,680 --> 00:29:16,570 numuru, Ox456. 545 00:29:16,570 --> 00:29:21,400 Un, ja es pievienot vienu, ka, vai vairāk Parasti, ja es varu pievienot I līdz, ka es varu 546 00:29:21,400 --> 00:29:24,350 faktiski nokļūt tieši tur, kur es gribu. 547 00:29:24,350 --> 00:29:26,260 Tātad, ja es patiešām to dara - 548 00:29:26,260 --> 00:29:28,970 un tas ir tas, ko tagad sauc rādītājs aritmētika - 549 00:29:28,970 --> 00:29:30,375 Es varu noņemt šo līniju. 550 00:29:30,375 --> 00:29:33,550 Kas ir, atklāti sakot, es domāju, ka skaidrāka un nedaudz vairāk lietotājam draudzīgs, lai lasītu. 551 00:29:33,550 --> 00:29:35,970 Bet tas nav tik pareizs. 552 00:29:35,970 --> 00:29:38,570 >> Šī koda līnija tagad izmanto rādītājs aritmētika. 553 00:29:38,570 --> 00:29:40,920 Tas ir saprotams, dodieties uz Pēc adrese - 554 00:29:40,920 --> 00:29:44,670 neatkarīgi no t sākums ir, kas ir t plus i, kas sākotnēji 555 00:29:44,670 --> 00:29:45,730 ir 0, kas ir liels. 556 00:29:45,730 --> 00:29:49,280 Jo tas nozīmē, ka sākumā t plus 1, 2 plus, plus 3, un tā tālāk. 557 00:29:49,280 --> 00:29:51,030 Un pats nodarbojas ar s. 558 00:29:51,030 --> 00:29:52,750 >> Tātad sintaktisko cukuru par to. 559 00:29:52,750 --> 00:29:55,900 Bet izpratne par to, kas īsti notiek zem motora pārsega, es teiktu, 560 00:29:55,900 --> 00:29:57,410 ir faktiski noderīga, un pats par sevi. 561 00:29:57,410 --> 00:30:00,620 Jo tas nozīmē, tagad tur nav daudz burvju notiek 562 00:30:00,620 --> 00:30:01,620 zem motora pārsega. 563 00:30:01,620 --> 00:30:03,920 Tur nav būs daudz vairāk slāņi, ka mēs varam mizu atpakaļ uz jums. 564 00:30:03,920 --> 00:30:04,810 Tas ir c. 565 00:30:04,810 --> 00:30:06,410 Un tas ir programmēšana. 566 00:30:06,410 --> 00:30:08,002 Tiešām labs jautājums. 567 00:30:08,002 --> 00:30:11,570 >> Visas tiesības, tāpēc tas bija bagijs programma man bija atsaucoties uz agrāk. 568 00:30:11,570 --> 00:30:12,650 swap bija kļūdaina. 569 00:30:12,650 --> 00:30:14,070 Ja tomēr šķiet, darbu. 570 00:30:14,070 --> 00:30:17,390 Atgādināt, ka tāpat kā ar pienu un apelsīnu sula - ko es sāku 571 00:30:17,390 --> 00:30:18,660 dzeramā šodienas demonstrāciju. 572 00:30:18,660 --> 00:30:22,220 Tik vienkārši kā ar apelsīnu sulu un piens, mums nebija ir jāizmanto 573 00:30:22,220 --> 00:30:26,200 pagaidu mainīgo, TPP, turēt uz laiku, lai mēs varētu pēc tam 574 00:30:26,200 --> 00:30:28,820 mainīt savu vērtību, un pēc tam atjaunināt b. 575 00:30:28,820 --> 00:30:32,870 >> Bet šī funkcija, mēs teicām, vai šis programma, kurā šī funkcija bija 576 00:30:32,870 --> 00:30:35,670 rakstīts bija nepareizi un kļūdaini, kāpēc? 577 00:30:35,670 --> 00:30:38,870 578 00:30:38,870 --> 00:30:39,090 Jā? 579 00:30:39,090 --> 00:30:42,471 >> Mērķauditorija: [nedzirdama]. 580 00:30:42,471 --> 00:30:44,940 >> SPEAKER 1: Tieši tā, ja zvanāt swap - 581 00:30:44,940 --> 00:30:47,820 vai, plašākā nozīmē, ja jūs zvanīt visvairāk jebkuru funkciju - 582 00:30:47,820 --> 00:30:51,210 ja argumenti, lai šo funkciju, ir primitīvas, tā sakot, Ints un chars 583 00:30:51,210 --> 00:30:56,740 un divvietīgi un plosti, lietas, bez zvaigznēm, jums ir iet ar kopiju 584 00:30:56,740 --> 00:30:57,540 arguments. 585 00:30:57,540 --> 00:31:01,580 Tātad, ja x ir 1 un y ir 2, kas notiek līdz būt 1 un b būs 2. 586 00:31:01,580 --> 00:31:05,250 Bet viņi būs dažādi gabali par biti, dažādu gabalos 587 00:31:05,250 --> 00:31:07,540 atmiņu, kas gadās būt uzglabāšanai identiskas vērtības. 588 00:31:07,540 --> 00:31:12,160 >> Tātad šis kods ir super perfekta pie pārnešana a un b. 589 00:31:12,160 --> 00:31:13,850 Tas nav labi pārnešana - 590 00:31:13,850 --> 00:31:15,290 pagājušās nedēļas piemērs - 591 00:31:15,290 --> 00:31:16,390 x un y. 592 00:31:16,390 --> 00:31:18,780 Jo atkal, viņi nepareizā jomā. 593 00:31:18,780 --> 00:31:21,310 >> Tagad, kā mēs iet par nosakot šo? 594 00:31:21,310 --> 00:31:23,140 Mums nācās veikt funkcijas izskatās nedaudz neglītāks. 595 00:31:23,140 --> 00:31:25,250 Bet atkal, jāapsver, ko tas tikai nozīmē. 596 00:31:25,250 --> 00:31:27,840 597 00:31:27,840 --> 00:31:31,500 >> Un patiesībā, ļaujiet man, konsekvences, mainīt viena lieta, tāpēc tas ir identisks 598 00:31:31,500 --> 00:31:33,200 ko mēs tikko izdarījām. 599 00:31:33,200 --> 00:31:35,690 Kā jau es teicu pagājušajā nedēļā, tā nav svarīgi, kur tas notiek. 600 00:31:35,690 --> 00:31:38,120 Patiesībā, parasti jūs liktu zvaigzne pie mainīgā nosaukums. 601 00:31:38,120 --> 00:31:40,750 Bet es domāju, ka būtu mazliet vieglāk apsvērt * blakus 602 00:31:40,750 --> 00:31:44,910 datu tips, kas nozīmē, tas ir rādītājs līdz int šajā gadījumā. 603 00:31:44,910 --> 00:31:46,270 >> Tātad, ko es te daru? 604 00:31:46,270 --> 00:31:49,590 Es saku, nedod man int sekoja vēl viena int, 605 00:31:49,590 --> 00:31:50,810 aicinot viņus un b. 606 00:31:50,810 --> 00:31:52,460 Dodiet man adresi int. 607 00:31:52,460 --> 00:31:53,960 Iedodiet man adresi citā int. 608 00:31:53,960 --> 00:31:56,330 Sauktu pie adreses a un b. 609 00:31:56,330 --> 00:32:00,860 >> Un tad, izmantojot * apzīmējumu leju zemāk, iet uz katru no šīm adresēm 610 00:32:00,860 --> 00:32:05,290 kā nepieciešams vai nu saņemt vai noteikt tā vērtību. 611 00:32:05,290 --> 00:32:07,400 Bet tur ir izņēmums šeit. 612 00:32:07,400 --> 00:32:11,130 Kāpēc man nav * blakus TMP? 613 00:32:11,130 --> 00:32:15,070 Kāpēc man nav darīt, piemēram,? 614 00:32:15,070 --> 00:32:19,370 Tā uzskata, piemēram, es būtu tikai iet visiem , un labot visa lieta. 615 00:32:19,370 --> 00:32:19,752 Yeah? 616 00:32:19,752 --> 00:32:21,002 >> Mērķauditorija: [nedzirdama]. 617 00:32:21,002 --> 00:32:23,280 618 00:32:23,280 --> 00:32:25,480 >> SPEAKER 1: Man nav deklarējuši tmp kā virkni. 619 00:32:25,480 --> 00:32:28,830 620 00:32:28,830 --> 00:32:34,950 Tātad, tas paziņo, šajā gadījumā, TMP būt adresi int. 621 00:32:34,950 --> 00:32:37,380 Bet tas nav gluži tas, ko es gribu, uz pāris iemeslu dēļ. 622 00:32:37,380 --> 00:32:38,616 >> Mērķauditorija: Jūs nevēlaties, lai mijmaiņas tiem. 623 00:32:38,616 --> 00:32:41,800 >> SPEAKER 1: Tieši tā, es nevēlos, lai mijmaiņas kaut kas ar TMP. tmp ir tikai 624 00:32:41,800 --> 00:32:42,790 nedēļu vienu sīkumi. 625 00:32:42,790 --> 00:32:45,150 Viss, ko es vēlos, ir mainīgs uzglabāt kādu numuru. 626 00:32:45,150 --> 00:32:47,330 Man nav pat rūp adresēm šajā brīdī. 627 00:32:47,330 --> 00:32:50,530 >> Man tikai vajag 32 bitu vai tāpēc, lai saglabātu int. 628 00:32:50,530 --> 00:32:56,690 Un es gribu, lai šajos 32 bitiem kāds nav, tā teikt, bet 629 00:32:56,690 --> 00:33:01,260 kas ir, tikai, lai būtu precīzāks. 630 00:33:01,260 --> 00:33:06,420 Jo, ja ir adrese, * nozīmē, iet tur un saņemt vērtību 1. 631 00:33:06,420 --> 00:33:10,560 Piemēram, pagājušās nedēļas piemērs vai saskaņā ar B gadījumā, saņemt vērtību 2. 632 00:33:10,560 --> 00:33:11,750 >> Tātad, kas īsti notiek? 633 00:33:11,750 --> 00:33:15,070 Ļaujiet man uzzīmēt attēlu šeit, kas tikai kaitināt izņemot daļu no šodienas. 634 00:33:15,070 --> 00:33:18,580 Bet tas turpinās parādīties jau ilgu laiku. 635 00:33:18,580 --> 00:33:22,430 >> Tas, es apgalvo, ir tas, kas jūsu datora atmiņas izskatās, kad jūs darbināt 636 00:33:22,430 --> 00:33:24,060 programmu, jebkuru programmu. 637 00:33:24,060 --> 00:33:28,340 Palaižot programmu, tajā pašā augšā no jūsu datora RAM - tāpēc domāju, ka 638 00:33:28,340 --> 00:33:33,530 šis taisnstūris, patiesi, kā savu Datora RAM vai atmiņas, visi 101 639 00:33:33,530 --> 00:33:36,920 miljards baitu no tā, viss divus miljardus baiti, visas divi gigabaiti no tā, 640 00:33:36,920 --> 00:33:39,910 kāds daudzums, jums ir, pieņemsim izdarīt to kā taisnstūris. 641 00:33:39,910 --> 00:33:43,260 Un es apgalvo, ka tad, kad jūs darbināt programmu piemēram, Microsoft Word vai Chrome 642 00:33:43,260 --> 00:33:49,220 vai kaut kas tamlīdzīgs, biti, kas Microsoft vai Google rakstīja - 643 00:33:49,220 --> 00:33:50,910 jo par minēto programmu gadījumos - 644 00:33:50,910 --> 00:33:54,490 tiek ielādēts datora atmiņā kur viņi var izpildīt vairāk 645 00:33:54,490 --> 00:33:57,520 ātri un iepludināt CPU, kas ir smadzenes no datora. 646 00:33:57,520 --> 00:34:00,940 >> Un TAM viņi uzglabā ļoti top savu programmu, lai runāt. 647 00:34:00,940 --> 00:34:03,300 Citiem vārdiem sakot, ja tas ir rieciens atmiņas, kad jūs dubultklikšķi uz 648 00:34:03,300 --> 00:34:05,740 Microsoft Word, biti nāk no cietā diska. 649 00:34:05,740 --> 00:34:06,680 Viņiem iekrauj RAM. 650 00:34:06,680 --> 00:34:10,330 Un mēs bāzt tos pašā augšā Šī taisnstūra konceptuāli. 651 00:34:10,330 --> 00:34:13,010 >> Nu, jūsu atmiņas pārējais ir izmanto dažādas lietas. 652 00:34:13,010 --> 00:34:16,460 Tajā pašā augšā jūs redzat sāktu dati un uninitialize datus. 653 00:34:16,460 --> 00:34:20,500 Tas ir jādara, lai lielākā daļa, ar konstantes vai globālie mainīgie 654 00:34:20,500 --> 00:34:21,340 kas ir vērtības. 655 00:34:21,340 --> 00:34:22,980 Bet vairāk par tiem citā laikā. 656 00:34:22,980 --> 00:34:25,150 >> Tad jums ir kaudze, kas mēs atgriezties. 657 00:34:25,150 --> 00:34:28,420 Bet apakšā ir daļa, kas ir Īpaši Germane tiesības tagad. 658 00:34:28,420 --> 00:34:30,210 Tas ir tā sauktais kaudze. 659 00:34:30,210 --> 00:34:33,850 Tātad, tāpat kā lielākā daļa jebkurā D zālē šeit Campus, jums ir tās paplātes, ka 660 00:34:33,850 --> 00:34:37,210 vienkārši kaudze virs otra, uz kura Jūs varat nodot pārtikas un plauktiņš. 661 00:34:37,210 --> 00:34:40,139 Kaudze datorsistēmā ir ļoti līdzīgs. 662 00:34:40,139 --> 00:34:42,679 Izņemot tā kā paplātes, kā mēs izmantojam ēdamzāle, protams, ir domāta 663 00:34:42,679 --> 00:34:45,710 veikt lietas paplātes vai rāmji - 664 00:34:45,710 --> 00:34:49,469 kā mēs tos saucam - jo datora atmiņa tiek izmantota, lai noturētu 665 00:34:49,469 --> 00:34:51,610 mainīgos un vērtības. 666 00:34:51,610 --> 00:34:53,929 >> Tātad, kas īsti notiek zem pārsega? 667 00:34:53,929 --> 00:34:55,820 Nu, ļaujiet man uzsist pa uz ekrāna šeit. 668 00:34:55,820 --> 00:34:58,370 Un pieņemsim koncentrēties tikai uz apakšējā daļa, uz brīdi. 669 00:34:58,370 --> 00:35:02,770 Ja tas ir apakšējā daļa no manām datora atmiņā izrādās, kad es 670 00:35:02,770 --> 00:35:05,350 zvanu funkcija galvenā - kas notiek, atklāti sakot, 671 00:35:05,350 --> 00:35:06,950 automātiski man - 672 00:35:06,950 --> 00:35:10,510 Man rieciens atmiņas par Apakšā mana RAM, lai runāt. 673 00:35:10,510 --> 00:35:13,390 Un tas ir, ja galvenais ir vietējās mainīgie iet. 674 00:35:13,390 --> 00:35:16,770 Tas ir, ja argc un argv varbūt iet, un visi mainīgie I 675 00:35:16,770 --> 00:35:18,170 atzīt iekšpusē galvenais. 676 00:35:18,170 --> 00:35:20,260 Viņi galu galā apakšā no mana datora RAM. 677 00:35:20,260 --> 00:35:25,040 >> Tagad pieņemsim, ka galvenie zvanus funkcijas piemēram, swap, tāpat kā tas bija pagājušajā nedēļā? 678 00:35:25,040 --> 00:35:30,620 Nu, mēs būtībā izvirza jaunu paplāti, jauns rāmis, uz manu rieciens atmiņas. 679 00:35:30,620 --> 00:35:34,160 Un es esmu gatavojas, lai aprakstītu to, kā , kas pieder uz apmaiņas funkciju. 680 00:35:34,160 --> 00:35:35,770 >> Tagad to, kas ir iekšpusē swap? 681 00:35:35,770 --> 00:35:39,240 Nu, balstoties uz pagājušās nedēļas programmu un Vienu mēs tikko redzējām fragmentu no, 682 00:35:39,240 --> 00:35:46,590 iekšpusē nomaiņu uz rāmja, vai mijmaiņas s paplāte, ir kādi mainīgie? 683 00:35:46,590 --> 00:35:47,970 Labi, un b. 684 00:35:47,970 --> 00:35:51,850 Tāpēc, ka tie bija tās vietējās argumenti, plus treškārt, tmp. 685 00:35:51,850 --> 00:35:54,470 Tik tiešām, es varētu izdarīt to nedaudz vairāk tīri. 686 00:35:54,470 --> 00:35:56,680 Ļaujiet man iet uz priekšu un atsaukt etiķeti. 687 00:35:56,680 --> 00:35:58,520 Un ļaujiet man apgalvot, ka jūs zināt, ko? 688 00:35:58,520 --> 00:36:00,560 >> ir iespējams, gatavojas, lai galu galā šeit. 689 00:36:00,560 --> 00:36:02,160 B gatavojas galu galā šeit. 690 00:36:02,160 --> 00:36:03,810 Un tmp gatavojas galu galā šeit. 691 00:36:03,810 --> 00:36:05,160 Tagad, pasūtījumi varētu būt nedaudz atšķirīgs. 692 00:36:05,160 --> 00:36:06,840 Bet konceptuāli tas ir ideja. 693 00:36:06,840 --> 00:36:11,490 >> Un tikai kolektīvi, tas ir tas, ko mēs saucam Mijmaiņas darījuma rāmi, vai 694 00:36:11,490 --> 00:36:12,136 ēdamzāle paplāte. 695 00:36:12,136 --> 00:36:13,150 Un tas pats galā ar galveno. 696 00:36:13,150 --> 00:36:14,040 Bet es ne ievilktu to. 697 00:36:14,040 --> 00:36:17,810 Bet tas ir, ja argc un argv un jebkuru tās vietējās mainīgo, piemēram, x un y 698 00:36:17,810 --> 00:36:18,940 varētu būt kā labi. 699 00:36:18,940 --> 00:36:22,170 >> Tātad tagad uzskata to, kas īsti notiek kad jūs zvanu swap. 700 00:36:22,170 --> 00:36:26,370 Kad zvanāt mijmaiņas, izpildot kodu, piemēram, tas, jūs iet uz, jo 701 00:36:26,370 --> 00:36:30,670 buggy versiju, un b kā kopijas x un y. 702 00:36:30,670 --> 00:36:34,300 Tātad, ja es tagad izdarīt to uz ekrāna - 703 00:36:34,300 --> 00:36:36,700 got labāk, šo - 704 00:36:36,700 --> 00:36:40,850 tāpēc stāsts man bija spēcīgi, lai sevi bija šajā buggy versijas, kad mēs 705 00:36:40,850 --> 00:36:46,130 zvanīt mijmaiņas iet burtiski un b kā veseli skaitļi, kas īsti notiek? 706 00:36:46,130 --> 00:36:48,250 >> Nu, kas īsti notiek, ir tas. 707 00:36:48,250 --> 00:36:52,850 Ļaujiet man iet uz priekšu un atsaukt tikai noskaidrot dažas vietas šeit. 708 00:36:52,850 --> 00:36:54,720 Tātad šī ir mana datora atmiņu. 709 00:36:54,720 --> 00:36:57,510 >> Tātad, ja man ir, piemēram, - 710 00:36:57,510 --> 00:36:58,910 faktiski pieņemsim darīt to šādā veidā - 711 00:36:58,910 --> 00:37:02,690 ja man apgalvo, ka tas ir x, uzglabājot vērtību 1, tāpat kā pagājušajā nedēļā. 712 00:37:02,690 --> 00:37:05,930 Un tas ir y, uzglabātu vērtību 2 tāpat kā pagājušajā nedēļā. 713 00:37:05,930 --> 00:37:11,370 Un tas ir galvenais, kad es zvanu swap, tādējādi nodrošinot sev pieeju un 714 00:37:11,370 --> 00:37:15,150 b un tmp, es esmu gatavojas apgalvot, ka Tas ir, un tas ir 1. 715 00:37:15,150 --> 00:37:16,080 >> Tas ir b. 716 00:37:16,080 --> 00:37:17,010 Tas ir 2. 717 00:37:17,010 --> 00:37:18,370 To sauc par TMP. 718 00:37:18,370 --> 00:37:23,360 >> Un sākumā, tā ir kāda atkritumu vērtība kamēr es tiešām uzglabāt tā, 719 00:37:23,360 --> 00:37:24,450 kas ir 1. 720 00:37:24,450 --> 00:37:28,320 Tad es iet uz priekšu un mainīt lai tas, ko? 721 00:37:28,320 --> 00:37:29,720 B s vērtību. 722 00:37:29,720 --> 00:37:31,980 >> Un tāpēc tagad man ir divi šeit. 723 00:37:31,980 --> 00:37:34,050 Un tad mēs teicām b izpaužas tmp. 724 00:37:34,050 --> 00:37:37,670 Atkal, tāpat kā veselība pārbaudītu, trešais rindā kodu šeit ir vienkārši šo 725 00:37:37,670 --> 00:37:39,440 viens, b izpaužas tmp. 726 00:37:39,440 --> 00:37:41,730 >> Un tā visbeidzot, ko man darīt? 727 00:37:41,730 --> 00:37:46,800 Es iet uz priekšu un mainīt b būt neatkarīgi no TMP vērtība ir, kas ir 1. 728 00:37:46,800 --> 00:37:48,390 Man nav pieskarties tmp vēlreiz. 729 00:37:48,390 --> 00:37:54,100 >> Bet tagad, problēma ir, tiklīdz aizstāšanas atgriežas, jo tas nav pārdalīšana 730 00:37:54,100 --> 00:37:57,540 atpakaļ uz kādu vērtību, nav atgriešanās paziņojums skaidri tajā. 731 00:37:57,540 --> 00:37:59,080 Kas patiesībā notiek? 732 00:37:59,080 --> 00:38:03,480 Nu, būtībā tas viss atmiņas - 733 00:38:03,480 --> 00:38:07,410 Labi, acīmredzot dzēšgumiju patīk tikai viens pirksts laikā, - 734 00:38:07,410 --> 00:38:08,180 vienkārši pazūd. 735 00:38:08,180 --> 00:38:10,070 >> Tagad patiesībā tas nav iet visur. 736 00:38:10,070 --> 00:38:11,810 Bet jūs varat domāt par to tagad, kā jautājuma zīmes. 737 00:38:11,810 --> 00:38:14,040 Jo tas vairs nav faktiski izmanto. 738 00:38:14,040 --> 00:38:17,470 Un nekas netiek darīts ar šīm vērtībām. 739 00:38:17,470 --> 00:38:21,920 >> Tātad, šajā gadījumā, ir zaļā versiju šis kods, kas tā vietā tiek 740 00:38:21,920 --> 00:38:24,640 pagājis vērā swap? 741 00:38:24,640 --> 00:38:25,770 Tātad adreses. 742 00:38:25,770 --> 00:38:28,520 Lai no x adrese un adresi y. 743 00:38:28,520 --> 00:38:35,790 Tātad, ja mēs vēlreiz pateikt, šis stāsts viena pēdējā laiku, un es tiešām izdarīt swap atkal, 744 00:38:35,790 --> 00:38:44,620 bet ar norādes, tas ir, šī ir b, un tas ir TMP, kas ir 745 00:38:44,620 --> 00:38:49,080 faktiski uzglabā šajā zaļa versija manas kodu, kur es esmu iet 746 00:38:49,080 --> 00:38:52,110 ar adresēm? 747 00:38:52,110 --> 00:38:53,780 >> Tas būs rādītāju x. 748 00:38:53,780 --> 00:38:54,890 Lai es varētu izdarīt bultiņu. 749 00:38:54,890 --> 00:38:57,310 Bet pieņemsim izmantot pašu patvaļīgu piemēram, kā iepriekš. 750 00:38:57,310 --> 00:39:01,220 Pieņemsim, ka tas ir kaut kas līdzīgs Ox123. 751 00:39:01,220 --> 00:39:04,970 Un tas būs Ox127, jo tas ir četri baiti prom, jo ​​tas ir 752 00:39:04,970 --> 00:39:07,370 int, tāpēc Ox127. 753 00:39:07,370 --> 00:39:09,080 >> Un atkal, es esmu ņemot dažas brīvību ar skaitļiem. 754 00:39:09,080 --> 00:39:11,430 Viņi ir daudz mazākas, nekā tās būtu faktiski un citā secībā. 755 00:39:11,430 --> 00:39:14,350 Bet tas ir kā attēls Tagad ir atšķirīgs. 756 00:39:14,350 --> 00:39:19,060 >> Bet, kad es izmantot šo zaļo kodu un man int tmp saņemt *. 757 00:39:19,060 --> 00:39:25,010 * Līdzeklis, kā darīt tālāk, ņem adresi, kas ir kas un iet uz to, 758 00:39:25,010 --> 00:39:26,190 kas ir 1. 759 00:39:26,190 --> 00:39:28,480 Un tas, ko es tad ieliek TPP. 760 00:39:28,480 --> 00:39:32,480 Tikmēr nākamajā līniju kodu šeit * saņem b, ko tas nozīmē? 761 00:39:32,480 --> 00:39:36,910 >> Nu, *, lai iet šeit izpaužas * b, kas nozīmē iet uz turieni. 762 00:39:36,910 --> 00:39:39,310 Un tas nozīmē nodot vērtību tur. 763 00:39:39,310 --> 00:39:43,670 Visbeidzot, pēdējā rindā kodu vienkārši teica * b izpaužas tmp. 764 00:39:43,670 --> 00:39:48,900 >> Tātad b saka iet uz turieni, un pārrakstīt to ar TMP, kas, šajā gadījumā, ir iet 765 00:39:48,900 --> 00:39:51,520 līdz būt, atkal, 1. 766 00:39:51,520 --> 00:39:54,920 Un tas ir iemesls, kāpēc zaļā versija mūsu kods strādā, bet sarkanais 767 00:39:54,920 --> 00:39:56,010 versija nekad nebija. 768 00:39:56,010 --> 00:39:59,020 Tas viss ir tikai vārīties uz leju, lai cik atmiņa ir izdevies, un, ja tas ir 769 00:39:59,020 --> 00:40:02,580 faktiski ievietots jūsu Datora RAM. 770 00:40:02,580 --> 00:40:07,270 Un par tagad, kas ir viens no lietām ka stack tiek izmantota, lai. 771 00:40:07,270 --> 00:40:09,225 >> Jautājumi par izkārtojumu? 772 00:40:09,225 --> 00:40:10,380 Par norādes? 773 00:40:10,380 --> 00:40:11,630 Vai par swap? 774 00:40:11,630 --> 00:40:13,740 775 00:40:13,740 --> 00:40:17,043 >> Labi, tāpēc malloc, atsaukšana, tomēr kaut kas līdzīgs šim. 776 00:40:17,043 --> 00:40:18,260 Tas bija super vienkāršs piemērs. 777 00:40:18,260 --> 00:40:20,550 Un tas bija viens, ka mīkstās iepazīstināja mūs, kaut arī diezgan 778 00:40:20,550 --> 00:40:21,870 ātri, beigās klases. 779 00:40:21,870 --> 00:40:24,480 Dammit, tur mēs aiziet vēlreiz. 780 00:40:24,480 --> 00:40:28,780 >> Tik atceros, ka tas bija piemērs, kas Mīkstās iepazīstināja mūs, lai gan 781 00:40:28,780 --> 00:40:30,360 nedaudz ātri beigās klases. 782 00:40:30,360 --> 00:40:33,640 Un šeit mēs izmantojām malloc patiešām otro reizi. 783 00:40:33,640 --> 00:40:37,330 Jo pirmo reizi mēs to izmanto, lai izveidot pietiekami daudz RAM, piešķirt pietiekami daudz RAM 784 00:40:37,330 --> 00:40:38,340 uzglabāt virkni. 785 00:40:38,340 --> 00:40:40,250 >> Šoreiz mīkstās tur tā vienkārši. 786 00:40:40,250 --> 00:40:42,465 Tātad, tas ir, lai saglabātu tikai int, acīmredzot. 787 00:40:42,465 --> 00:40:43,510 Un tas ir pilnīgi naudas sodu. 788 00:40:43,510 --> 00:40:46,560 Tas ir mazliet dīvaini, godīgi sakot, lai izmantot malloc piešķirt vienu int. 789 00:40:46,560 --> 00:40:50,650 Bet Nika claymation punkts bija tiešām tikai pastāstīt stāstu par to, kas 790 00:40:50,650 --> 00:40:53,830 notiek vai nenotiek, ja Jūs kaitina atmiņu. 791 00:40:53,830 --> 00:40:56,520 >> Tātad, šajā gadījumā, šī programma bija dažas lietas. 792 00:40:56,520 --> 00:41:01,580 Pirmajā gadījumā šeit, tā paziņo rādītāju sauc par x, lai int. 793 00:41:01,580 --> 00:41:04,480 Pēc tam tā paziņo rādītāju ko sauc par y uz int. 794 00:41:04,480 --> 00:41:06,150 Pēc tam tā saglabā in x, ko? 795 00:41:06,150 --> 00:41:07,110 Kāds cits tagad. 796 00:41:07,110 --> 00:41:09,685 Kas izpaužas uzglabā x atbilstoši trešais līnija no šīs programmas? 797 00:41:09,685 --> 00:41:12,380 >> Mērķauditorija: [nedzirdama]. 798 00:41:12,380 --> 00:41:14,130 >> SPEAKER 1: Nu, ne gluži baiti, vienu pateikt. 799 00:41:14,130 --> 00:41:16,760 Precīzāk tagad. 800 00:41:16,760 --> 00:41:18,325 Kas izpaužas uzglabā x? 801 00:41:18,325 --> 00:41:21,000 802 00:41:21,000 --> 00:41:22,060 Adresi, es domāju, ka es dzirdēju to. 803 00:41:22,060 --> 00:41:23,570 >> Tātad, ko tas malloc atgriezties? 804 00:41:23,570 --> 00:41:26,030 malloc behaviorally piešķir rieciens atmiņas. 805 00:41:26,030 --> 00:41:27,850 Bet kā tas ļauj piekļūt tai? 806 00:41:27,850 --> 00:41:29,460 Tā atgriež ko? 807 00:41:29,460 --> 00:41:32,000 Adrese pirmo baitu ar gabalu no atmiņas. 808 00:41:32,000 --> 00:41:33,020 >> Tagad tas ir super vienkārši. 809 00:41:33,020 --> 00:41:35,380 Tas ir tikai viens baits, kas nozīmē, risinātu mēs esam nonākuši atpakaļ ir 810 00:41:35,380 --> 00:41:37,300 adresi no visa lieta. 811 00:41:37,300 --> 00:41:42,070 Tātad uzglabā x tad ir adrese Šī rieciens atmiņas. 812 00:41:42,070 --> 00:41:43,400 Tikmēr, kas notiek tālāk? 813 00:41:43,400 --> 00:41:45,890 Tik tiešām, iesim uz priekšu un zīmēt šo out reālā ātri. 814 00:41:45,890 --> 00:41:52,490 >> Tātad, ja mēs ejam pāri uz ekrāna šeit un mēs spēlējam šo out int * x un int * y 815 00:41:52,490 --> 00:41:53,740 gatavojas darīt to, kas man? 816 00:41:53,740 --> 00:41:58,280 Man apgalvo, ka tas ir tikai gatavojas to darīt kaut kas līdzīgs šim, un to sauc par x, un 817 00:41:58,280 --> 00:42:00,010 šo un to sauc y. 818 00:42:00,010 --> 00:42:03,110 Tikmēr trešajā rindā kods ir gatavojas piešķirt lielumu int, 819 00:42:03,110 --> 00:42:06,160 kas notiek, - žēl, ja es teicu vienu pirms es nozīmēja vienu int - 820 00:42:06,160 --> 00:42:08,280 četri baiti uz tipisku datorā. 821 00:42:08,280 --> 00:42:09,720 Vismaz ar CS50 ierīci. 822 00:42:09,720 --> 00:42:11,490 >> Tātad tas ir gatavojas piešķirt tas, kurš zina? 823 00:42:11,490 --> 00:42:12,800 Kaut kur šeit. 824 00:42:12,800 --> 00:42:15,780 Un tas tiek uzglabāts dažas adrese Vērsis, kas zina? 825 00:42:15,780 --> 00:42:18,330 Bet to, kas notiek, lai saņemtu atpakaļ ir tā, ka adrese. 826 00:42:18,330 --> 00:42:22,270 Bet mēs izdarīt šo gleznieciski kā tikko bulta tāpat. 827 00:42:22,270 --> 00:42:25,430 >> Tagad nākamajā rindā * x izpaužas 42. 828 00:42:25,430 --> 00:42:29,400 Kāda * x nozīmē lajs izteiksmē? 829 00:42:29,400 --> 00:42:30,040 Vienkārši iet uz turieni. 830 00:42:30,040 --> 00:42:30,960 Iet uz šo adresi. 831 00:42:30,960 --> 00:42:35,900 Vai, citiem vārdiem sakot, sekojiet arrow un nodot 42 tur. 832 00:42:35,900 --> 00:42:38,140 Bet tad kaut kas slikts ir noticis uz mīkstās, vai ne? 833 00:42:38,140 --> 00:42:43,950 >> Atgādināt, ka līnija pieci šeit, * y izpaužas 13, patiešām nelaimīgs skaitlis, 834 00:42:43,950 --> 00:42:44,760 darīja to, ko par mums? 835 00:42:44,760 --> 00:42:47,320 Nu, * y nozīmē iet uz turieni. 836 00:42:47,320 --> 00:42:50,460 Nu, tas nav sniegta vērtība vēl, vai ne? 837 00:42:50,460 --> 00:42:54,090 Kods nav y ir inicializēts neko. 838 00:42:54,090 --> 00:42:56,120 Mums bija x tiek inicializēts uz kādu adresi. 839 00:42:56,120 --> 00:42:57,640 Bet y tika atzīts up top. 840 00:42:57,640 --> 00:43:00,250 Bet tad semikolu, nav vērtības faktiski tika likts tajā. 841 00:43:00,250 --> 00:43:02,330 Tātad tas ir godīgi, lai izsauktu šo atkritumu vērtību. 842 00:43:02,330 --> 00:43:03,430 Kurš zina, kas tur ir? 843 00:43:03,430 --> 00:43:07,160 Tas ir paliekas no bitiem, kas tika izmantoti ar kādu iepriekšējo līniju kodu 844 00:43:07,160 --> 00:43:08,300 mana programma. 845 00:43:08,300 --> 00:43:13,250 >> Tātad, ja es saku iet uz turieni, tas ir, piemēram, Man nav ne jausmas, kur tas bulta ir 846 00:43:13,250 --> 00:43:14,490 gatavojas galu galā. 847 00:43:14,490 --> 00:43:17,720 Un tas ir tad, kad jūs parasti saņemt segmentāciju vaina. 848 00:43:17,720 --> 00:43:22,430 Ja jūs nejauši dereference, tāpēc, lai runā, vai iet uz adresi, kas ir ne 849 00:43:22,430 --> 00:43:25,400 faktiski likumīga adrese, sliktas lietas notiek. 850 00:43:25,400 --> 00:43:27,550 >> Un tas ir tieši tas, kas notika domāt Binky. 851 00:43:27,550 --> 00:43:31,060 Tāpēc atgādina, ka stāsts, kas Nick bija stāsta šeit bija pati ideja, kāds 852 00:43:31,060 --> 00:43:34,050 Esmu izdarīt ar ilūziju krītu uz tāfeles tur. 853 00:43:34,050 --> 00:43:35,960 X un Y ir paziņots. 854 00:43:35,960 --> 00:43:39,690 >> Tad mēs piešķirti izmēru int un uzglabā to x. 855 00:43:39,690 --> 00:43:42,130 Tad nākamais rindā mēs * x. 856 00:43:42,130 --> 00:43:46,070 Tas bija Nika burvju nūjiņa no dereferencing. 857 00:43:46,070 --> 00:43:49,780 Kas izvirzīti 42 atmiņā norādīja x. 858 00:43:49,780 --> 00:43:51,600 >> Bet tas ir, ja lietas gāja briesmīgi nepareizi. 859 00:43:51,600 --> 00:43:51,820 Labi? 860 00:43:51,820 --> 00:43:53,550 Mēs mēģinājām dereference y. 861 00:43:53,550 --> 00:43:55,620 Bet y bija daži viltus vērtību, vai ne? 862 00:43:55,620 --> 00:43:57,720 >> Ka bultiņa apakšā kreisajā stūra, ir ne 863 00:43:57,720 --> 00:43:58,950 faktiski norādot uz kaut ko. 864 00:43:58,950 --> 00:44:01,520 Tas ir veids, kā darīt to, ko es bija šeit uz kuģa. 865 00:44:01,520 --> 00:44:05,900 Tātad sliktas lietas notiek, segmentācija vaina, vai mīkstās vaina, šajā gadījumā. 866 00:44:05,900 --> 00:44:10,800 >> Bet, ja mēs pēc tam noteikt, ka, veicot x izpaužas y kā tas stāsts pārmaiņas? 867 00:44:10,800 --> 00:44:15,760 Nu, ja man x izpaužas y, kas ir efektīvi Tikpat labi var teikt 868 00:44:15,760 --> 00:44:19,235 kāds tas ir, Vērsis, kaut būs tas pats šeit, 869 00:44:19,235 --> 00:44:20,080 Ox-kaut ko. 870 00:44:20,080 --> 00:44:22,970 Vai gleznieciski mēs izdarīt bultiņu. 871 00:44:22,970 --> 00:44:25,530 >> Tātad, šeit uz kuģa ar mīkstās, ar nākamo rindu 872 00:44:25,530 --> 00:44:28,350 kods, * y nozīmē iet uz turieni. 873 00:44:28,350 --> 00:44:29,400 Kur ir tur? 874 00:44:29,400 --> 00:44:30,820 Tas nozīmē, vairāk nekā šeit. 875 00:44:30,820 --> 00:44:36,050 >> Un, kad mēs atjaunināt ka, lai būtu 13 tas tikai nozīmē iet un 876 00:44:36,050 --> 00:44:39,470 rakstiski 13 šeit un tagad. 877 00:44:39,470 --> 00:44:44,130 Tātad, varbūt ne pilnīgi vienkārši pēc pirmā acu uzmetiena. 878 00:44:44,130 --> 00:44:47,740 Bet, lai vēlreiz apkopot un izmantot to pašu žargonu ka mīkstās bija, izmantojot šeit, tāpēc 879 00:44:47,740 --> 00:44:50,485 Pirmie divi piešķirt norādes, x un y, bet ne uz pointees. 880 00:44:50,485 --> 00:44:54,750 Un pointees ir ne parasti izmanto terminu. 881 00:44:54,750 --> 00:44:56,120 Bet rādītājs absolūti ir. 882 00:44:56,120 --> 00:44:59,200 Bet tas ir to, kas tiek norādīts pie in mīkstās s nomenklatūrā. 883 00:44:59,200 --> 00:45:01,660 >> Šis nākamais rindā, protams, piešķir int pointee. 884 00:45:01,660 --> 00:45:04,840 Tātad rieciens atmiņas - kā es vērsa pār labajā pusē tur - un komplekts 885 00:45:04,840 --> 00:45:06,470 x ir vienāds, lai norādītu uz to. 886 00:45:06,470 --> 00:45:11,350 Tas dereferences x uzglabāt 42 atmiņā, ka tas ir pavērsts. 887 00:45:11,350 --> 00:45:13,380 Un tad tas, protams, bija slikta lieta. 888 00:45:13,380 --> 00:45:15,600 Jo y netika norādot pie visa vēl. 889 00:45:15,600 --> 00:45:16,530 Tas nosaka to. 890 00:45:16,530 --> 00:45:18,240 Tātad tas joprojām buggy programma. 891 00:45:18,240 --> 00:45:21,580 Tikai tāpēc, ka mēs esam pūš cauri koda rindu pa rindai un sakot, oh labi, 892 00:45:21,580 --> 00:45:22,690 ļaujiet tai crash tur. 893 00:45:22,690 --> 00:45:23,420 Tas ir slikti. 894 00:45:23,420 --> 00:45:26,790 Izredzes ir programma, ir tikai gatavojas pārtraukt vispār šajā rindā. 895 00:45:26,790 --> 00:45:30,550 Bet, ja tu būtu, lai novērstu avarēja līnijā un aizstāt to ar pēdējo divu 896 00:45:30,550 --> 00:45:32,470 līnijas tur jūs piešķirat - 897 00:45:32,470 --> 00:45:35,310 izmantojot rādītāja uzdevumu - y norādīt uz X kā punktu t. 898 00:45:35,310 --> 00:45:39,280 Un tad jūs dereference y ir ļoti drošā veidā. 899 00:45:39,280 --> 00:45:41,520 >> Tātad, ja tas atstāj mūs? 900 00:45:41,520 --> 00:45:45,350 Nu, izrādās, ka zem motora pārsega ar CS50 bibliotēkā, norādes ir 901 00:45:45,350 --> 00:45:46,320 izmanto visā. 902 00:45:46,320 --> 00:45:48,910 Un mēs faktiski sākt lobīties atpakaļ, ka slānis pirms ilgi. 903 00:45:48,910 --> 00:45:51,740 Bet izrādās arī izteiksmi, ka daži no jums varētu būt pazīstams ar, 904 00:45:51,740 --> 00:45:54,580 jo īpaši ērtāk, ir faktiski, ka ļoti populārs 905 00:45:54,580 --> 00:45:56,390 mājas lapā, vai kaudze pārplūdes, šajās dienās. 906 00:45:56,390 --> 00:45:58,720 >> Bet tas tiešām ir ļoti tehniska nozīme. 907 00:45:58,720 --> 00:46:00,160 Mēs tagad zinām, kas kaudze ir. 908 00:46:00,160 --> 00:46:02,550 Tas ir tāpat kā kaudze paplātes iekšpusē ēdamzālē. 909 00:46:02,550 --> 00:46:05,140 >> Vai iekšpusē jūsu datora Atmiņas its šos rāmjus 910 00:46:05,140 --> 00:46:06,900 , kas tiek izmantots ar funkciju. 911 00:46:06,900 --> 00:46:10,760 Nu, izrādās, ka, jo to ļoti vienkārši īstenošana 912 00:46:10,760 --> 00:46:14,970 atmiņu un par tā saukto rāmji kaudze, jūs faktiski var kontrolēt 913 00:46:14,970 --> 00:46:17,050 no datorsistēmas diezgan viegli. 914 00:46:17,050 --> 00:46:22,180 Jūs varat kapāt sistēmā, ja cilvēki tāpat kā mums nav rakstīts mūsu kodu 915 00:46:22,180 --> 00:46:23,300 īpaši labi. 916 00:46:23,300 --> 00:46:26,670 >> Ja cilvēki kā mēs izmantot gabalos atmiņas vai izmantošanu masīvi - 917 00:46:26,670 --> 00:46:27,810 pat vairāk parasti - 918 00:46:27,810 --> 00:46:31,800 bet dažreiz aizmirst, lai pārbaudītu robežas mūsu masīvs, kā jūs varētu 919 00:46:31,800 --> 00:46:38,470 ir sevi reizēm, un atkārtoja pārāk tālu pagātnē beigām masīva. 920 00:46:38,470 --> 00:46:40,520 Labākajā gadījumā, jūsu programma var tikai crash. 921 00:46:40,520 --> 00:46:42,280 Segmentāciju vaina, kind mulsinošu. 922 00:46:42,280 --> 00:46:45,480 Nav liels, bet tas nav obligāti ļoti slikta lieta. 923 00:46:45,480 --> 00:46:49,480 >> Bet, ja jūsu programma ir faktiski uz reālā lietotāju datorus, ja tas darbojas 924 00:46:49,480 --> 00:46:53,070 uz mājas lapu, kas faktiski izlases cilvēki internetā ir hitting, ļaujot 925 00:46:53,070 --> 00:46:56,690 cilvēki izraisīt sliktas lietas jūsu kods ir parasti nav laba lieta, jo 926 00:46:56,690 --> 00:46:59,930 tas nozīmē iespēju veikt kontrole no datora. 927 00:46:59,930 --> 00:47:01,350 Un tas skatīsies nedaudz mistisks. 928 00:47:01,350 --> 00:47:04,570 Bet es domāju, ka man skandāla jums šis pēdējais piemērs šeit. 929 00:47:04,570 --> 00:47:05,650 >> Lūk koda piemērs. 930 00:47:05,650 --> 00:47:07,370 Un tur ir labs Wikipedia raksts, kas iet caur 931 00:47:07,370 --> 00:47:08,530 šo sīkāk. 932 00:47:08,530 --> 00:47:13,890 Man ir galvenais apakšā zvana foo, iet uz ARGV 1. 933 00:47:13,890 --> 00:47:15,750 Un tas ir tikai tāpēc, ka jūs varat palaist programmu un pāriet 934 00:47:15,750 --> 00:47:17,080 patvaļīgu ieejas. 935 00:47:17,080 --> 00:47:20,180 >> Un tad foo ir deklarēta up top kā pieņemot virkni, vai vairāk 936 00:47:20,180 --> 00:47:21,700 precīzi, char *. 937 00:47:21,700 --> 00:47:23,860 Pēc tam tā paziņo masīvu simboli. 938 00:47:23,860 --> 00:47:27,130 Call to buferi, plašākā nozīmē, no 12 izmēra. 939 00:47:27,130 --> 00:47:30,900 Līdz 12 simboli var ielikt Šī masīva sauc c. 940 00:47:30,900 --> 00:47:33,510 >> Un tad izmanto šo jauno funkciju, kas ir jauns, bet nav grūti 941 00:47:33,510 --> 00:47:34,930 saprotu, atmiņas kopiju. 942 00:47:34,930 --> 00:47:39,290 Tā kopijas atmiņu, no bāra, kas bija mainīgo pagātnes n, neatkarīgi 943 00:47:39,290 --> 00:47:42,080 lietotājs ievadījis 1 ARGV uz c. 944 00:47:42,080 --> 00:47:43,090 Cik baiti? 945 00:47:43,090 --> 00:47:44,260 Virknes garums bar. 946 00:47:44,260 --> 00:47:48,380 >> Tātad, citiem vārdiem sakot, ja lietotājs ir h-e-l-l-o ievadītu, virknes garums 947 00:47:48,380 --> 00:47:49,260 gada sveiki ir pieci. 948 00:47:49,260 --> 00:47:52,790 Tātad, pieci no tiem baitu gatavojas saņemt kopēt masīva sauc c, kas 949 00:47:52,790 --> 00:47:54,110 ir no 12 izmēra. 950 00:47:54,110 --> 00:47:58,710 Bet ko lietotājs veidu daudz ilgāk vārdu, kas ir 13 burti vai 14 951 00:47:58,710 --> 00:48:01,250 rakstzīmes vai 100 rakstzīmes, vai vairāk? 952 00:48:01,250 --> 00:48:02,660 >> Kur viņi gatavojas iet? 953 00:48:02,660 --> 00:48:06,090 Labi, ka rāmis, ka paplāte ar ēdamzāle steku, 954 00:48:06,090 --> 00:48:06,930 viņi gatavojas iet uz turieni. 955 00:48:06,930 --> 00:48:10,080 Un tas ir tikai gatavojas sākt pārrakstot citi sīkumi, kas jau ir 956 00:48:10,080 --> 00:48:12,880 par šo steku, pārpildīta kaudze, lai runāt. 957 00:48:12,880 --> 00:48:14,780 >> Tātad gleznieciski, domāt par to šādā veidā. 958 00:48:14,780 --> 00:48:17,970 Tas ir tikai krāsains versija attēlu mēs esam zīmēšanas. 959 00:48:17,970 --> 00:48:20,060 Apakšā, teiksim, ir galvenais. 960 00:48:20,060 --> 00:48:24,690 Un uz augšu, ko jūs redzēt tagad ir rāmis, krāsu kodēti tagad, lai 961 00:48:24,690 --> 00:48:26,090 funkciju sauc foo. 962 00:48:26,090 --> 00:48:30,170 Bet kas ir interesanti šeit par foo ir tas, ka šeit ir tā rāmis. 963 00:48:30,170 --> 00:48:32,860 Tātad, tas ir sagatavots tāpat kā I darīju, bet gaiši zilā krāsā. 964 00:48:32,860 --> 00:48:35,220 Un tagad tas ir, ja c kronšteins 0 iet. 965 00:48:35,220 --> 00:48:37,410 Un tas ir, ja c kronšteins 11 gatavojas galu galā. 966 00:48:37,410 --> 00:48:39,670 >> Citiem vārdiem sakot, tas notiek ar tiks attēlots kā kvadrātu. 967 00:48:39,670 --> 00:48:42,320 Bet, ja jūs vienkārši glabāt plopping baiti uz leju - vai simboli - viņi gatavojas galu 968 00:48:42,320 --> 00:48:46,070 līdz atrašanās vietā 0 visu ceļu augšup līdz 11, jo tas ir 0 indeksēti. 969 00:48:46,070 --> 00:48:49,170 >> Bet kur ir 13 rakstzīmju gatavojas galu galā? 970 00:48:49,170 --> 00:48:50,310 Kur ir 14? 971 00:48:50,310 --> 00:48:52,430 Kur ir 50 rakstzīmju gatavojas galu galā? 972 00:48:52,430 --> 00:48:54,070 >> Tas notiek, lai saglabātu iet uz leju. 973 00:48:54,070 --> 00:48:57,350 Jo, pat ja mēs esam izdarīt attēlu ar kaudze aug, 974 00:48:57,350 --> 00:48:59,920 adreses, izrādās, iet no mazie adreses, mazie 975 00:48:59,920 --> 00:49:01,830 norādes, lieliem adresēm. 976 00:49:01,830 --> 00:49:03,540 Tātad tas tikai tur iet uz augšu un uz augšu. 977 00:49:03,540 --> 00:49:05,660 >> Tātad, ja lietotājs veidiem Sveiki, tas ir lieliski. 978 00:49:05,660 --> 00:49:08,650 Nav bug, nekādu problēmu, ikviena droši. 979 00:49:08,650 --> 00:49:11,940 Bet, ja lietotājs veidiem, ko mēs zvanu sacīkstes kodu, kuru pārstāv 980 00:49:11,940 --> 00:49:16,040 vispārīgi, kā, uzbrukums, uzbrukums, uzbrukums, uzbrukums, kas var notikt? 981 00:49:16,040 --> 00:49:19,760 >> Labi, ja visi no ieejas, ka lietotājs drukāti ir ne tikai daži draudzīgi 982 00:49:19,760 --> 00:49:21,540 vai aizskarošu rakstzīmju virkne. 983 00:49:21,540 --> 00:49:24,050 Tas ir tiešām rakstzīmju secība ka, ja jūs apkopot to, 984 00:49:24,050 --> 00:49:26,050 tas patiesībā ir kods. 985 00:49:26,050 --> 00:49:29,570 Varbūt tas ir kods, kas izdzēš visu failus uz jūsu cietā diska vai sūta surogātpastu 986 00:49:29,570 --> 00:49:30,810 vai kaut kas tamlīdzīgs. 987 00:49:30,810 --> 00:49:35,110 Ievērojiet, ka to, kas ir galvenais šeit ir tas, ka Ja slikts puisis got paveicies 988 00:49:35,110 --> 00:49:37,830 pārrakstīt sarkano rieciens atmiņas - 989 00:49:37,830 --> 00:49:41,080 kas man nebija izmantot manu attēlu, bet tas Wikipedia attēlu šeit ir - 990 00:49:41,080 --> 00:49:42,890 tā saukto atgriešanās adresi. 991 00:49:42,890 --> 00:49:47,470 >> Ja pārtikas atgriežas, kad mijmaiņas atdevi, kā tas dators zina, iet no 992 00:49:47,470 --> 00:49:49,790 šeit, lai šeit lejā? 993 00:49:49,790 --> 00:49:52,920 Vai par tehnoloģiju segmentā līdz iepriekš, kā tas zina, iet no mijmaiņas 994 00:49:52,920 --> 00:49:54,870 kods - 0 s un 1 s ka sacerēt swap - 995 00:49:54,870 --> 00:49:56,020 Atpakaļ uz galveno? 996 00:49:56,020 --> 00:50:00,450 Tur ir tā sauktās atgriešanās adrese glabājas tajā pašā kaudze rāmi, uz 997 00:50:00,450 --> 00:50:02,140 pats kafetērija paplāte. 998 00:50:02,140 --> 00:50:06,080 >> Tātad, ja slikts puisis ir pietiekami gudri, lai likts uzbrukuma kods, uzbrukums kods, uzbrukums 999 00:50:06,080 --> 00:50:07,960 kodu, un saņemt paveicies - 1000 00:50:07,960 --> 00:50:11,630 bieži izmantojot izmēģinājumu un kļūdu - līdz pārrakstīt, ka sarkanā atpakaļadresi, 1001 00:50:11,630 --> 00:50:14,360 ar adresi un paziņojums ļoti top. 1002 00:50:14,360 --> 00:50:16,830 Paziņojums 0835C080. 1003 00:50:16,830 --> 00:50:20,650 Tas ir rakstīts atpakaļ uz augšu top par iemesli, mēs, iespējams, pārskatīt. 1004 00:50:20,650 --> 00:50:22,050 Tas ir, ka numurs. 1005 00:50:22,050 --> 00:50:25,790 >> Tātad, ja slikts puisis izpaužas paveicies vai ir pietiekami gudrs, lai pārrakstītu sarkano 1006 00:50:25,790 --> 00:50:29,480 atņemt atmiņas ar adresi kods, ka viņš vai viņa ir kaut kā 1007 00:50:29,480 --> 00:50:34,980 ievada datorā, domāju, kura kods būs jāatdod 1008 00:50:34,980 --> 00:50:38,260 tiklīdz foo tiek darīts izpildes? 1009 00:50:38,260 --> 00:50:39,440 >> Slikts puisis kods. 1010 00:50:39,440 --> 00:50:43,610 Tātad šī uzbrukuma kods, AAA, atkal varētu sūtīt mēstules, var dzēst visus failus 1011 00:50:43,610 --> 00:50:44,500 uz jūsu cietā diska. 1012 00:50:44,500 --> 00:50:48,740 Bet tas ir tas, kas patiešām kaudze pārplūdes ir, vai buferis pārsniegts, vai 1013 00:50:48,740 --> 00:50:51,060 bufera pārpildes uzbrukumu. 1014 00:50:51,060 --> 00:50:54,400 >> Un tas ir neticami, neticami bieži līdz šai dienai ar programmām rakstīts 1015 00:50:54,400 --> 00:50:58,220 C, C + +, un pat dažas citas valodas. 1016 00:50:58,220 --> 00:51:02,275 Uz šo baiso piezīmi, mēs ņemšu beidzas ar joks. 1017 00:51:02,275 --> 00:51:03,230 >> [Smiekli] 1018 00:51:03,230 --> 00:51:04,550 >> Tiekamies trešdien. 1019 00:51:04,550 --> 00:51:07,920 1020 00:51:07,920 --> 00:51:10,310 Pie nākamā CS50 - 1021 00:51:10,310 --> 00:51:15,920 Tāpēc es esmu visu no diska lampas šodien, bet pagaidiet, beztauku pienu, puse tālrunis 1022 00:51:15,920 --> 00:51:17,850 grāmata, apelsīnu sula ka es dzēru šodien. 1023 00:51:17,850 --> 00:51:20,370 1024 00:51:20,370 --> 00:51:22,780 USB kabelis, uzgriežņu atslēgu. 1025 00:51:22,780 --> 00:51:24,800 >> [Mūzikas atskaņošanas]