1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:11,261 [Mūzikas atskaņošanai] 3 00:00:11,261 --> 00:00:12,640 >> DAVID J. Malan: Nu labi. 4 00:00:12,640 --> 00:00:14,525 Tas ir CS50. 5 00:00:14,525 --> 00:00:16,009 Un tas ir sākums nedēļas 5. 6 00:00:16,009 --> 00:00:18,050 Un kā jums var būt ievērojuši, daži no materiāla 7 00:00:18,050 --> 00:00:21,050 kļūst nedaudz vairāk sarežģīts, maz blīvāks. 8 00:00:21,050 --> 00:00:24,560 >> Un tas ir ļoti viegli, jo īpaši, ja jūs esat bijis ieradums kādu laiku, 9 00:00:24,560 --> 00:00:28,600 , ir mēģināt ķeburs leju visvairāk kaut ko mēs darām, mēs esam sakot klasē. 10 00:00:28,600 --> 00:00:31,626 Bet saprast, ka nav iespējams ideāls pedagoģiskā pieeja 11 00:00:31,626 --> 00:00:34,250 mācīšanās šāda veida materiālu, un materiāli kopumā. 12 00:00:34,250 --> 00:00:37,250 Un tāpēc mēs esam priecīgi paziņot, ka CS50 pašu Gheng 13 00:00:37,250 --> 00:00:39,780 Gong ir sākusi sagatavot kanonisko kopums piezīmes 14 00:00:39,780 --> 00:00:42,100 kursam, cerība kas ir tā, ka viens, šie 15 00:00:42,100 --> 00:00:44,030 kalpo ne tikai kā atsauce un resurss 16 00:00:44,030 --> 00:00:47,410 pārskatīšanai materiālu un dodas atpakaļ caur materiāla, kas varētu būt 17 00:00:47,410 --> 00:00:51,230 izbēguši jums pirmo reizi apkārt, bet arī tāpēc, ka jūsu galvas var būt vairāk 18 00:00:51,230 --> 00:00:53,740 uz augšu nekā uz leju, kad to runa ir laiks, lekciju, 19 00:00:53,740 --> 00:00:56,960 lai jūs varētu iesaistīties vairāk domīgi, jo 20 00:00:56,960 --> 00:00:59,170 pretstatā vairāk scribbly. 21 00:00:59,170 --> 00:01:02,510 >> Ar to teica, tas, ko jūs atradīsiet par mājas lapa ir šādi dokumenti, jo tas. 22 00:01:02,510 --> 00:01:04,660 Un paziņojums, kreisajā augšējā stūrī, tur ir ne tikai satura, 23 00:01:04,660 --> 00:01:06,920 bet arī laika kodi uzreiz lēkt jums 24 00:01:06,920 --> 00:01:09,077 uz attiecīgo daļu šajā video tiešsaistē. 25 00:01:09,077 --> 00:01:11,410 Un ko Chang šeit ir paveicis ir, būtībā, dokumentēts 26 00:01:11,410 --> 00:01:13,340 kas notika šajā īpaši lekcija. 27 00:01:13,340 --> 00:01:16,370 Un daudzi no lekcijām ir jau ir tiešsaistē tagad ar šo URL. 28 00:01:16,370 --> 00:01:20,110 Un mēs turpināsim to post atlikušo no tām, kuras nedēļas beigām, 29 00:01:20,110 --> 00:01:22,380 tāpēc izmantot šo resursu. 30 00:01:22,380 --> 00:01:25,740 >> Tātad bez papildu ADO, mēs sākām lobīties atpakaļ 31 00:01:25,740 --> 00:01:28,180 slānis, kas ir bijis string kādu laiku. 32 00:01:28,180 --> 00:01:30,670 Un ko mēs sakām virkni patiesībā ir pagājušajā nedēļā? 33 00:01:30,670 --> 00:01:31,720 34 00:01:31,720 --> 00:01:32,900 Tik char zvaigzne. 35 00:01:32,900 --> 00:01:34,900 Un char zvaigzne, labi, kādi bija, ka īsti nozīmē? 36 00:01:34,900 --> 00:01:37,150 Nu, visu šo laiku, ja mēs esam aicinājuši funkciju, 37 00:01:37,150 --> 00:01:40,450 piemēram getString un uzglabāšanai tā sauktās atgriešanās 38 00:01:40,450 --> 00:01:42,910 vērtība getString in variable-- tā sauc 39 00:01:42,910 --> 00:01:47,721 s tips string-- mēs esam rakstiski līnija koda tur augstāk. 40 00:01:47,721 --> 00:01:49,970 Un tas ir tikai tad, kad es redzu manu rokraksts šeit palielināts 41 00:01:49,970 --> 00:01:51,930 es varu saprast, cik šausmīgi tas ir. 42 00:01:51,930 --> 00:01:54,180 >> Taču pieņemsim, ka, uz labajā pusē 43 00:01:54,180 --> 00:01:57,070 ir, tomēr saprātīgs attēlojums, kas ir 44 00:01:57,070 --> 00:01:58,880 nu jau tas viss laiku ar getString. 45 00:01:58,880 --> 00:02:00,380 getString, protams, saņem virkni. 46 00:02:00,380 --> 00:02:01,691 Bet ko tas īsti nozīmē? 47 00:02:01,691 --> 00:02:04,190 Tas nozīmē, ka tā izpaužas rieciens atmiņas no operētājsistēmas 48 00:02:04,190 --> 00:02:06,040 zvanot funkciju, ko sauc malloc. 49 00:02:06,040 --> 00:02:07,390 Bet vairāk par to vēlāk. 50 00:02:07,390 --> 00:02:09,139 Un tad tas aizpilda ka rieciens atmiņas 51 00:02:09,139 --> 00:02:11,764 ar burtiem lietotājam ir ierakstījāt, kam seko, protams, 52 00:02:11,764 --> 00:02:14,800 null raksturs, vai slīpsvītru nulle pašās beigās. 53 00:02:14,800 --> 00:02:18,280 >> Tikmēr kreisajā pusē šajā stāstā, visu šo laiku, 54 00:02:18,280 --> 00:02:20,850 mēs esam deklarējot mainīgo, piemēram, s. 55 00:02:20,850 --> 00:02:24,770 Un, ka mainīgais ir tas, ko tagad sāks aicinot rādītāju. 56 00:02:24,770 --> 00:02:29,190 Tas nav kastē iekšā kas mēs uzdodam virkni, Daven, per se, 57 00:02:29,190 --> 00:02:32,550 bet mēs ieliekam šajā laukumā kaste pa kreisi, ko tieši? 58 00:02:32,550 --> 00:02:34,890 59 00:02:34,890 --> 00:02:35,390 Yeah? 60 00:02:35,390 --> 00:02:37,118 >> AUDITORIJA: of adrese kur tas atrodas atmiņā. 61 00:02:37,118 --> 00:02:38,118 >> DAVID J. Malan: Tieši tā. 62 00:02:38,118 --> 00:02:40,690 , Kur Daven adrese atrodas atmiņā. 63 00:02:40,690 --> 00:02:44,650 Un nav, ja visi Daven atrodas, per se, bet īpaši adresi 64 00:02:44,650 --> 00:02:45,150 par ko? 65 00:02:45,150 --> 00:02:46,311 66 00:02:46,311 --> 00:02:46,810 Yeah? 67 00:02:46,810 --> 00:02:47,460 >> AUDITORIJA: First raksturs. 68 00:02:47,460 --> 00:02:50,209 >> DAVID J. Malan: pirmā zīme in Daven, kura, šajā gadījumā, 69 00:02:50,209 --> 00:02:53,820 Man ieteica bija patvaļīgi un nereāli 1, OX1, 70 00:02:53,820 --> 00:02:55,910 kas tikai nozīmē, heksadecimālais skaits 1. 71 00:02:55,910 --> 00:02:57,993 Bet tas ir iespējams, gatavojas būt daudz lielāks skaits 72 00:02:57,993 --> 00:03:01,260 ka mēs varētu izdarīt ar 0x kā prefiksu, 73 00:03:01,260 --> 00:03:02,806 pārstāv heksadecimālo raksturs. 74 00:03:02,806 --> 00:03:05,930 Un tāpēc, ka mums nav nepieciešams zināt, kur pārējie rakstzīmes Daven 75 00:03:05,930 --> 00:03:09,860 ir, jo to, ko vienkāršs dizains lēmums, kas tika pieņemts pirms daudziem gadiem? 76 00:03:09,860 --> 00:03:10,548 Yeah? 77 00:03:10,548 --> 00:03:11,651 >> AUDITORIJA: reversā slīpsvītra 0. 78 00:03:11,651 --> 00:03:12,900 DAVID J. Malan: Jā, tieši tā. 79 00:03:12,900 --> 00:03:18,100 Slīpsvītru 0 ļauj jums, lai gan lineārā laika, lai šķērsotu virkni, 80 00:03:18,100 --> 00:03:20,400 gājienā no kreisās uz labo, ar par cilpu, vai uz brīdi 81 00:03:20,400 --> 00:03:22,608 cilpa, vai kaut kas tamlīdzīgs ka, un noteikt, oh, šeit 82 00:03:22,608 --> 00:03:24,751 gals ir šajā konkrētajā virkni. 83 00:03:24,751 --> 00:03:27,000 Tātad tikai adresi, sākums virknes, 84 00:03:27,000 --> 00:03:30,290 mēs varam piekļūt veselumu tas, ka visu šo laiku, 85 00:03:30,290 --> 00:03:32,030 string tikko ir char zvaigzne. 86 00:03:32,030 --> 00:03:36,370 >> Tātad, tas ir, protams, naudas sods, lai turpinātu izmantot CS50 bibliotēku, un tas abstrakcija, 87 00:03:36,370 --> 00:03:38,440 tā teikt, bet mēs sāk redzēt, tieši 88 00:03:38,440 --> 00:03:41,230 kas ir bijis notiek zem visu šo laiku. 89 00:03:41,230 --> 00:03:45,260 Lai jūs varētu atgādināt šo piemēru, Arī no pēdējo reizi salīdzināt 0, 90 00:03:45,260 --> 00:03:47,300 , kas nav reāli salīdzināt. 91 00:03:47,300 --> 00:03:49,070 Bet mēs sākām, lai atrisinātu šo. 92 00:03:49,070 --> 00:03:52,020 >> Bet kā varbūt atsvaidzināšanas, Es varētu interesēt kādu 93 00:03:52,020 --> 00:03:54,261 rozā ziloni šodien arī veic Chang? 94 00:03:54,261 --> 00:03:55,760 Kā par jums priekšā? [Nedzirdama]. 95 00:03:55,760 --> 00:03:56,660 Nāciet uz augšu. 96 00:03:56,660 --> 00:03:58,740 >> Un tajā pašā laikā, kā jūs nākt klajā, pieņemsim 97 00:03:58,740 --> 00:04:01,670 izskatīt tikai brīdi, ko šis kods faktiski dara. 98 00:04:01,670 --> 00:04:04,917 Tas ir deklarēt divus mainīgos augšu top, s un t, un aicinot getString. 99 00:04:04,917 --> 00:04:08,250 Tas nav ļoti draudzīga programma jo tas nav pateikt, ko darīt. 100 00:04:08,250 --> 00:04:10,541 Bet pieņemsim tikai pieņemt, mēs esam koncentrējoties uz sulīgs puses. 101 00:04:10,541 --> 00:04:14,470 Un tad mēs, ja s vienāds vienāds t, tai vajadzētu teikt printf, 102 00:04:14,470 --> 00:04:16,170 jūs ierakstījāt to pašu. 103 00:04:16,170 --> 00:04:16,670 Sveiki. 104 00:04:16,670 --> 00:04:17,050 Kāds ir tavs vārds? 105 00:04:17,050 --> 00:04:17,779 >> Janelle: Janelle. 106 00:04:17,779 --> 00:04:19,529 DAVID J. Malan: Janelle, nice to meet you. 107 00:04:19,529 --> 00:04:21,800 Tātad jūsu uzdevums pie roku šai zilonis 108 00:04:21,800 --> 00:04:25,230 ir vispirms izdarīt mums priekšstatu par to, kas ir attēlot tiem pirmie divi 109 00:04:25,230 --> 00:04:25,970 līnijas. 110 00:04:25,970 --> 00:04:28,139 Tik s un t varētu būt pārstāvētas, kā uz ekrāna? 111 00:04:28,139 --> 00:04:30,680 Un jūs varat vienkārši izdarīt to ar pirkstu uz šo lielo ekrānu. 112 00:04:30,680 --> 00:04:31,780 113 00:04:31,780 --> 00:04:34,510 >> Tātad tur ir divas puses, lai katra puse no šī vienādojuma. 114 00:04:34,510 --> 00:04:37,760 Tātad tur ir s pa kreisi, un tad getString labajā pusē. 115 00:04:37,760 --> 00:04:40,540 Un tad tur ir t pa kreisi, un tad getString labajā pusē. 116 00:04:40,540 --> 00:04:42,630 Tātad, kā mēs varbūt sākt zīmēšanas attēlu, kas 117 00:04:42,630 --> 00:04:46,340 atspoguļo to, kas notiek šeit atmiņā, jūs teiktu? 118 00:04:46,340 --> 00:04:49,150 Un ļaujiet man jums paskaidrot ko jūs darāt, kā jums iet. 119 00:04:49,150 --> 00:04:49,820 >> Janelle: OK. 120 00:04:49,820 --> 00:04:58,890 Nu, pirmkārt, tas būtu jautā Jums iegūt ieejas virkni. 121 00:04:58,890 --> 00:05:00,439 Un tas store-- oh, sorry. 122 00:05:00,439 --> 00:05:01,230 DAVID J. Malan: OK. 123 00:05:01,230 --> 00:05:01,730 Labs. 124 00:05:01,730 --> 00:05:03,330 Un to sauc par ko? 125 00:05:03,330 --> 00:05:03,950 Ak, OK. 126 00:05:03,950 --> 00:05:04,450 Uzglabāt iet. 127 00:05:04,450 --> 00:05:05,575 Es negribēju pārtraukt. 128 00:05:05,575 --> 00:05:07,060 Janelle: Sorry. 129 00:05:07,060 --> 00:05:14,237 Tātad, tas būtu ieguldījums to adrese of-- nav pārliecināts. 130 00:05:14,237 --> 00:05:17,320 Es nevaru precīzi atcerēties numuru, bet es uzskatu, ka tas bija, sākot ar 0. 131 00:05:17,320 --> 00:05:18,420 >> DAVID J. Malan: Tas viss ir labi, tāpēc, ka es skaitu uz augšu, 132 00:05:18,420 --> 00:05:19,650 tāpēc nav pareizā atbilde. 133 00:05:19,650 --> 00:05:22,105 >> Janelle: Sākot ar 0 loka. 134 00:05:22,105 --> 00:05:24,000 >> DAVID J. Malan: Labi, tā elements 0. 135 00:05:24,000 --> 00:05:24,765 Pārliecināts. 136 00:05:24,765 --> 00:05:28,295 >> Janelle: Un tad, ja ir piemēram, tikai divu letter-- 137 00:05:28,295 --> 00:05:30,496 >> DAVID J. Malan: Labi, atpakaļ uz jums. 138 00:05:30,496 --> 00:05:33,629 >> Janelle: Tātad elements 0, un tad elements 1 vai elements 2. 139 00:05:33,629 --> 00:05:36,670 DAVID J. Malan: Un kas gabals attēlu jūs zīmēšanas tieši tagad? 140 00:05:36,670 --> 00:05:37,690 Aicinājums getString? 141 00:05:37,690 --> 00:05:38,830 Vai deklarācija s? 142 00:05:38,830 --> 00:05:42,890 >> Janelle: deklarācija no s, es uzskatu. 143 00:05:42,890 --> 00:05:45,980 Ak, getString, jo tas būtu ievadīšana katrā [? zona. ?] 144 00:05:45,980 --> 00:05:46,510 >> DAVID J. Malan: Labi. 145 00:05:46,510 --> 00:05:47,051 Tieši tā. 146 00:05:47,051 --> 00:05:49,300 Pat ja tas reāli atgriež masīvs, atgādināt, 147 00:05:49,300 --> 00:05:53,300 kad mēs saņemam atpakaļ virkni, mēs varam indekss vērā, ka virknē, izmantojot 01 un 2. 148 00:05:53,300 --> 00:05:56,180 Tehniski, tie, iespējams, ir pārstāv atsevišķu adresēm, 149 00:05:56,180 --> 00:05:57,100 bet tas ir jauki. 150 00:05:57,100 --> 00:06:00,170 >> Tātad pieņemsim, ja es varu tikai ātri nosūtīt kur mēs left off 151 00:06:00,170 --> 00:06:04,320 pēdējā laikā, tad, ja viena no stīgas bija g b e, 152 00:06:04,320 --> 00:06:10,337 slīpsvītru 0, tādējādi pārstāvot gabe s ievadi, kā varētu mēs pārstāvam s tagad? 153 00:06:10,337 --> 00:06:12,670 Ja tas ir atmiņu, kas ir atdota ar getString? 154 00:06:12,670 --> 00:06:14,415 155 00:06:14,415 --> 00:06:17,610 >> Janelle: Vai tas būtu pārstāv loka? 156 00:06:17,610 --> 00:06:18,750 >> DAVID J. Malan: Ar loka? 157 00:06:18,750 --> 00:06:19,130 Nu, nē. 158 00:06:19,130 --> 00:06:21,171 Pieņemsim tikai teikt, gleznieciski, ļaujiet man tikai iet uz priekšu 159 00:06:21,171 --> 00:06:25,710 un ierosina, ka, ja tas ir s, tas ir atgriešanās vērtība getString. 160 00:06:25,710 --> 00:06:29,482 Un jums izdarīt to kā 0, 1, 2, kas ir pilnīgi pamatota, jo mēs 161 00:06:29,482 --> 00:06:30,940 var indekss vērā virkni, kā tādu. 162 00:06:30,940 --> 00:06:33,340 Bet tikai, lai tie atbilstu pēdējo reizi, ļaujiet man iet uz priekšu 163 00:06:33,340 --> 00:06:37,310 un patvaļīgi ierosinās šo ir adrese 1, tas ir adrese 2, 164 00:06:37,310 --> 00:06:39,597 tas ir adrese, 3, un tā tālāk. 165 00:06:39,597 --> 00:06:41,430 Un tā, tikai, lai būtu super skaidrs, kas notiek 166 00:06:41,430 --> 00:06:44,580 iet s, kā rezultātā, kas pirmajā rindā kodu, jūs teiktu? 167 00:06:44,580 --> 00:06:45,420 >> Janelle: Adrese 1? 168 00:06:45,420 --> 00:06:46,420 >> DAVID J. Malan: Tieši tā. 169 00:06:46,420 --> 00:06:47,190 Tā adrese 0x1. 170 00:06:47,190 --> 00:06:48,220 171 00:06:48,220 --> 00:06:51,230 Un tikmēr, ļaujiet man iet uz priekšu un dublēt daudz no tā, ko jūs esat darījuši 172 00:06:51,230 --> 00:06:52,740 un pievienot savu t šeit. 173 00:06:52,740 --> 00:06:56,340 Ja es būtu rakstīt Gabe atkal, otrreiz 174 00:06:56,340 --> 00:07:01,530 kad tiek piedāvāts ar getString, kur, protams, ir Gabe gatavojas doties? 175 00:07:01,530 --> 00:07:02,280 Nu, presumably-- 176 00:07:02,280 --> 00:07:04,935 177 00:07:04,935 --> 00:07:05,975 >> Janelle: Tāpat kā šeit? 178 00:07:05,975 --> 00:07:06,850 DAVID J. Malan: Jā. 179 00:07:06,850 --> 00:07:08,516 Janelle: Vai tas ir arī tajās pašās? 180 00:07:08,516 --> 00:07:11,940 DAVID J. Malan: Ļaujiet man ieteikt, jā, tieši tā, tāpēc šo papildu kastēs. 181 00:07:11,940 --> 00:07:15,230 Bet kas ir galvenais šobrīd ir tas, ka, pat lai gan es esmu sastādīts šos diezgan tuvu 182 00:07:15,230 --> 00:07:18,650 together-- 0x1, šis ir 0x2-- realitātē, 183 00:07:18,650 --> 00:07:25,750 tagad tas varētu būt adresi 0x10, Piemēram, un 0x11 un 0x12, 184 00:07:25,750 --> 00:07:26,870 un tā tālāk. 185 00:07:26,870 --> 00:07:29,955 Un tā, ja tas ir gadījumā, kas notiek, lai galu galā šeit t? 186 00:07:29,955 --> 00:07:30,830 >> Janelle: 0x10? 187 00:07:30,830 --> 00:07:31,830 DAVID J. Malan: Tieši tā. 188 00:07:31,830 --> 00:07:33,180 Tātad 0x10. 189 00:07:33,180 --> 00:07:34,570 Un tāpēc tagad, pēdējais jautājums. 190 00:07:34,570 --> 00:07:37,510 Jūs, neapšaubāmi, bija jāstrādā vissmagāk par ziloni līdz šim. 191 00:07:37,510 --> 00:07:42,650 Līdz šim, ja es uzvilkt kodu atkal, kad es daru, atbilst trīs, 192 00:07:42,650 --> 00:07:47,630 ja s vienāds vienāds t, ko es esmu patiešām salīdzinātu, ka mēs esam izdarīt šeit? 193 00:07:47,630 --> 00:07:49,271 >> Janelle: Abi adreses? 194 00:07:49,271 --> 00:07:50,270 DAVID J. Malan: Tieši tā. 195 00:07:50,270 --> 00:07:53,350 Tāpēc es saku, ir s vienāds vienāds ar t? 196 00:07:53,350 --> 00:07:56,210 Citiem vārdiem, ir 1 vienāda vienāds ar 10? 197 00:07:56,210 --> 00:07:59,710 Un, protams, Acīmredzama atbilde tagad ir, nav. 198 00:07:59,710 --> 00:08:02,920 Un tāpēc šī programma ir galu galā gatavojas drukāt, ko Jūs teiktu? 199 00:08:02,920 --> 00:08:05,770 200 00:08:05,770 --> 00:08:08,405 >> Janelle: Vai tas būtu, jūs ierakstījāt to pašu? 201 00:08:08,405 --> 00:08:11,446 >> DAVID J. Malan: Tātad, ja s ir 1, un t ir 10? 202 00:08:11,446 --> 00:08:13,320 >> Janelle: Tu drukāti dažādas lietas. 203 00:08:13,320 --> 00:08:13,570 >> DAVID J. Malan: Tieši tā. 204 00:08:13,570 --> 00:08:14,480 Jūs ierakstījāt dažādas lietas. 205 00:08:14,480 --> 00:08:14,850 Viss labi. 206 00:08:14,850 --> 00:08:16,714 Tātad kārta aplausi, ja mēs varētu, šeit. 207 00:08:16,714 --> 00:08:17,214 [Aplausi] 208 00:08:17,214 --> 00:08:17,708 Tas bija sāpīgi. 209 00:08:17,708 --> 00:08:18,208 Es zinu. 210 00:08:18,208 --> 00:08:19,684 Labi darīts. 211 00:08:19,684 --> 00:08:24,690 Tātad tagad pieņemsim redzēt, ja mēs nevaram ķircināt izņemot kāda fix bija. 212 00:08:24,690 --> 00:08:28,040 Un, protams, kad mēs fiksēts this-- ko es ņemšu tagad pārstāvu green-- 213 00:08:28,040 --> 00:08:29,690 mēs darījām pāris uzlabojumiem šeit. 214 00:08:29,690 --> 00:08:32,409 Pirmkārt, tāpat kā vesels saprāts pārbaudiet, es esmu pirmā pārbaude 215 00:08:32,409 --> 00:08:35,110 ja s vienāds spēku un t vienāds null. 216 00:08:35,110 --> 00:08:39,440 Un tikai, lai būtu skaidrs, kad varētu s vai t ir spēkā koda līdzīgs šim? 217 00:08:39,440 --> 00:08:43,140 218 00:08:43,140 --> 00:08:44,490 Kad varētu s vai t būt nulle. 219 00:08:44,490 --> 00:08:44,990 Yeah? 220 00:08:44,990 --> 00:08:45,990 >> AUDITORIJA: [nedzirdama]. 221 00:08:45,990 --> 00:08:49,490 222 00:08:49,490 --> 00:08:50,510 >> DAVID J. Malan: Tieši tā. 223 00:08:50,510 --> 00:08:52,840 Ja virkne, ka lietotājs drukāti ir pārāk garš 224 00:08:52,840 --> 00:08:56,140 lai ietilptu atmiņā, vai kādu dīvaini stūra gadījums, piemēram, ka, 225 00:08:56,140 --> 00:08:59,010 getString, kā mēs redzēsim, burtiski šodien, tā dokumentāciju, 226 00:08:59,010 --> 00:09:02,330 saka tā atgriezīsies null kā īpašu sargs vērtība, 227 00:09:02,330 --> 00:09:05,417 vai vienkārši veida īpašs simbols tas nozīmē, ka kaut kas nogāja greizi. 228 00:09:05,417 --> 00:09:07,500 Tāpēc mēs vēlamies, lai pārbaudītu ka, jo izrādās 229 00:09:07,500 --> 00:09:09,720 ka null ir ļoti bīstams vērtību. 230 00:09:09,720 --> 00:09:14,250 >> Bieži vien, ja jūs mēģināt kaut ko darīt ar null iesaistot function-- iet to 231 00:09:14,250 --> 00:09:17,470 kā ievade, lai instance-- šo funkciju varētu ļoti būs crash, un ar to, 232 00:09:17,470 --> 00:09:19,090 ņemtu nosaka jūsu visu programmu. 233 00:09:19,090 --> 00:09:22,570 Tātad šis trešais rindā tagad ir tikai vesels saprāts pārbaudiet, kļūdu pārbaudi, ja Jums gribas. 234 00:09:22,570 --> 00:09:25,450 Tas ir labs ieradums tagad mums nokļūt jebkurā laikā mēs 235 00:09:25,450 --> 00:09:28,050 mēģināt izmantot vērtību, kas , varētu, iespējams, būt nulle. 236 00:09:28,050 --> 00:09:32,000 >> Tagad, ceturtajā rindā šeit "Ja strcmp (s, t)," labi, 237 00:09:32,000 --> 00:09:33,180 to, kas ir, ka atsaucoties uz? 238 00:09:33,180 --> 00:09:36,750 Nu, mums teica, ka tas bija ļoti kodolīgi nosaukts funkcija stīgu salīdzinājumu. 239 00:09:36,750 --> 00:09:40,370 Un tās mērķis dzīvē ir, lai salīdzinātu tā pirmais arguments pret to, otrkārt, 240 00:09:40,370 --> 00:09:44,640 bet ne uz to adreses, kā mēs to darījām netīšām brīdis 241 00:09:44,640 --> 00:09:48,270 Pirms ar sarkanu kodu, bet drīzāk, lai salīdzinātu šos divus 242 00:09:48,270 --> 00:09:53,210 virknes cilvēcīgi intuitīvi veids, salīdzinot to, pret to, 243 00:09:53,210 --> 00:09:56,690 pret to, pret to, un tad apstāšanos, ja un kad 244 00:09:56,690 --> 00:09:59,590 vai abiem maniem pirkstiem hits slīpsvītru 0. 245 00:09:59,590 --> 00:10:04,530 Tātad pirms kāds gadus īsteno strcmp īstenot mums funkcionalitāte 246 00:10:04,530 --> 00:10:08,890 ka mēs cerējām mēs būtu gotten , tikai salīdzinot divus vienkāršus vērtības. 247 00:10:08,890 --> 00:10:14,929 >> Tagad godīgi sakot, es glabāt zīmējumu visas šīs dažādās skaitļiem. 248 00:10:14,929 --> 00:10:17,470 Bet realitāte ir tāda, es esmu bijis padarot tās veido visu laiku. 249 00:10:17,470 --> 00:10:19,580 Un tāpēc ļaujiet man tikai iet uz priekšu un ķeburs šos out 250 00:10:19,580 --> 00:10:23,100 lai punktu, ka beigās dienu un virzās uz priekšu, 251 00:10:23,100 --> 00:10:30,160 mēs īsti gatavojas rūp kādi adreses lietas ir patiesībā 252 00:10:30,160 --> 00:10:30,790 atmiņā. 253 00:10:30,790 --> 00:10:34,320 Tāpēc es neesmu gatavojas izdarīt šos veidu skaita tik daudz vairs, 254 00:10:34,320 --> 00:10:38,970 Es esmu tikai abstrakta šo prom mazliet vairāk draudzīgs tikai ar bultiņām. 255 00:10:38,970 --> 00:10:42,060 >> Citiem vārdiem, ja S ir rādītājs, labi, pieņemsim tikai izdarīt to, burtiski, 256 00:10:42,060 --> 00:10:45,430 kā rādītājs, bulta no pati uz kaut ko citu, 257 00:10:45,430 --> 00:10:48,280 un nav jāuztraucas pārāk daudz vairāk par minutia no šīm adresēm 258 00:10:48,280 --> 00:10:49,910 kas, atkal, es veido vienalga. 259 00:10:49,910 --> 00:10:52,680 Bet mēs redzēsim šīs adreses, Dažreiz, kad debugging kodu. 260 00:10:52,680 --> 00:10:56,450 >> Tagad tikmēr, šī programma šeit labojumi, protams, 261 00:10:56,450 --> 00:10:58,720 ka problēma salīdzinot šie divi stīgas. 262 00:10:58,720 --> 00:11:00,260 Bet mēs uzbrauca citu problēmu. 263 00:11:00,260 --> 00:11:03,180 Tas bija no kopijas programmēt pēdējo reizi, 264 00:11:03,180 --> 00:11:06,880 kuru, es centos kapitalizēt tikai pirmais simbols virknē. 265 00:11:06,880 --> 00:11:09,620 Bet to, kas bija simptoms mēs redzējām pēdējo reizi 266 00:11:09,620 --> 00:11:14,150 lietotājs ierakstījāt vērtību, piemēram, Gabe ar mazajiem, lai s, 267 00:11:14,150 --> 00:11:19,310 tad mēs piešķirts s uz t, kā trešajā rindā tur, 268 00:11:19,310 --> 00:11:22,900 un tad es mēģināju kapitalizēt t kronšteinu 0? 269 00:11:22,900 --> 00:11:25,950 , Kas bija efekts mainot t kronšteinu 0 šeit? 270 00:11:25,950 --> 00:11:27,150 >> AUDITORIJA: Tā ir mainījusi s. 271 00:11:27,150 --> 00:11:29,360 >> DAVID J. Malan: Jā, Es izmainīju s, kā arī. 272 00:11:29,360 --> 00:11:31,050 Tāpēc, ka to, kas īsti notiek? 273 00:11:31,050 --> 00:11:34,130 Nu, ļaujiet man redzēt, ja es varētu tīrīt up šo attēlu, šādi. 274 00:11:34,130 --> 00:11:41,390 >> Ja s ir, atkal, vārds g, a, b, e, slīpsvītra, 0 un S 275 00:11:41,390 --> 00:11:44,084 mēs turpināsim zīmējumu kā kastē šeit, bet ne vairāk adreses. 276 00:11:44,084 --> 00:11:45,250 Pieņemsim apstāties padarot lietas uz augšu. 277 00:11:45,250 --> 00:11:47,510 Pieņemsim tikai uzzīmēt vienkāršot pasauli. 278 00:11:47,510 --> 00:11:52,640 >> Kad es apliecinu, t ar stīgu t, kas rada šo rieciens atmiņas. 279 00:11:52,640 --> 00:11:55,850 Square notiek, ir 32 biti vairumā datoriem. 280 00:11:55,850 --> 00:11:59,530 Patiesībā, ja jūs esat kādreiz dzirdējuši par dators ar 32 bitu arhitektūru, 281 00:11:59,530 --> 00:12:03,000 tiešām fancy-runā, ka tikai nozīmē, ka tā izmanto 32-bitu adreses. 282 00:12:03,000 --> 00:12:05,370 Un kā tehnisku malā, ja jūs esat kādreiz domājuši 283 00:12:05,370 --> 00:12:09,630 kāpēc vecākiem datoriem, ja jūs faktiski mēģināja zupa tos ar daudz RAM, 284 00:12:09,630 --> 00:12:12,360 varēja tikai maksimālais četru gigabaitu RAM, 285 00:12:12,360 --> 00:12:14,860 labi, ka ir, jo, burtiski, savu veco datoru varētu tikai 286 00:12:14,860 --> 00:12:17,250 skaitās kā augsta kā 4 miljards, 4 miljardi baiti, 287 00:12:17,250 --> 00:12:20,590 jo tas bija, izmantojot 32-bit numuri adresēm. 288 00:12:20,590 --> 00:12:23,260 >> Bet jebkurā gadījumā, jo tas Piemēram, stāsts ir daudz vienkāršāk. 289 00:12:23,260 --> 00:12:27,250 t ir tikai vēl viens rādītājs, vai tiešām char zvaigzne, aka stīgu. 290 00:12:27,250 --> 00:12:30,860 Un kā es gribu, lai atjauninātu šo attēlu tagad ar šo otro rindiņu kodu, 291 00:12:30,860 --> 00:12:31,950 pēc dot, dot, dot? 292 00:12:31,950 --> 00:12:35,845 Kad man stīgu t vienāds s semikolu, kā tas aina mainās? 293 00:12:35,845 --> 00:12:37,500 294 00:12:37,500 --> 00:12:38,000 Yeah? 295 00:12:38,000 --> 00:12:38,916 >> AUDITORIJA: [nedzirdama]. 296 00:12:38,916 --> 00:12:41,087 297 00:12:41,087 --> 00:12:42,020 >> DAVID J. Malan: Jā. 298 00:12:42,020 --> 00:12:42,600 Tieši tā. 299 00:12:42,600 --> 00:12:45,620 Es tikko likts bultu no t kaste uz to pašu adresi, 300 00:12:45,620 --> 00:12:47,570 pats pirmais burts deva. 301 00:12:47,570 --> 00:12:50,850 Vai tehniski, ja tas puisis vēl bija 0x1, 302 00:12:50,850 --> 00:12:53,052 tas ir tā, it kā man bija 0x1 šeit un 0x1 šeit. 303 00:12:53,052 --> 00:12:54,760 Bet atkal, kas rūpējas par adresēm? 304 00:12:54,760 --> 00:12:56,345 Tas ir tikai ideja, ka tagad svarīgi. 305 00:12:56,345 --> 00:12:57,720 Tātad, tas ir tas, kas notiek šeit. 306 00:12:57,720 --> 00:13:02,690 Tātad, protams, ja tu dari t kronšteinu 0, kas ir masīvs apzīmējums, 307 00:13:02,690 --> 00:13:05,650 no course-- un godīgi sakot, tas izskatās kā tur ir masīvs nekā šeit, 308 00:13:05,650 --> 00:13:07,340 bet tagad tur ir tas dīvaini lieta. 309 00:13:07,340 --> 00:13:11,160 Zināt, ka programmēšanas valodu, C, piedāvā šo funkciju, 310 00:13:11,160 --> 00:13:14,650 , saskaņā ar kuru, pat tad, ja t ir rādītāju, vai i ir rādītājs, 311 00:13:14,650 --> 00:13:18,050 Jūs joprojām varat izmantot, ka pazīstami, ērts kvadrātiekava 312 00:13:18,050 --> 00:13:22,520 notācija doties uz pirmo elementu, vai otrais elements, vai kāds no elementiem 313 00:13:22,520 --> 00:13:26,130 ka šis rādītājs ir vērsta līdz, jo, iespējams, to 314 00:13:26,130 --> 00:13:29,410 ir, kā šajā gadījumā, norādot kādā masīvs. 315 00:13:29,410 --> 00:13:30,340 >> Tātad, kā mēs varam noteikt šo? 316 00:13:30,340 --> 00:13:33,660 Atklāti sakot, tas ir, ja tas got nedaudz milzīgs pie pirmā acu uzmetiena. 317 00:13:33,660 --> 00:13:35,340 Bet šeit ir jauna un uzlabota versija. 318 00:13:35,340 --> 00:13:37,460 >> Tātad, pirmkārt, es saņemu atbrīvoties no CS50 bibliotēkas, 319 00:13:37,460 --> 00:13:41,170 tikai, lai atklātu, ka viņam ir patiešām char zvaigzne, tikai sinonīms. 320 00:13:41,170 --> 00:13:43,540 Un t ir arī char zvaigzne. 321 00:13:43,540 --> 00:13:48,290 Bet to, kas notiek uz labajā pusē no minētās līnijas 322 00:13:48,290 --> 00:13:49,970 kur t ir piešķirta vērtība? 323 00:13:49,970 --> 00:13:50,790 >> Kas ir malloc? 324 00:13:50,790 --> 00:13:51,630 Kas tas ir strlen? 325 00:13:51,630 --> 00:13:52,547 Kas ir sizeof (char)? 326 00:13:52,547 --> 00:13:54,380 Kāpēc heck dara līnija izskatās tik sarežģīti? 327 00:13:54,380 --> 00:13:55,713 Ko tas dara augstā līmenī? 328 00:13:55,713 --> 00:13:56,482 329 00:13:56,482 --> 00:13:57,440 Kas tas uzglabāt t? 330 00:13:57,440 --> 00:13:58,646 Yeah? 331 00:13:58,646 --> 00:14:01,104 AUDITORIJA: Tas ir piešķirot zināma atmiņas vietas. 332 00:14:01,104 --> 00:14:03,032 Tas ir, lai uzglabātu, es domāju, burti [nedzirdama]. 333 00:14:03,032 --> 00:14:04,032 >> DAVID J. Malan: Perfect. 334 00:14:04,032 --> 00:14:04,540 Perfekta. 335 00:14:04,540 --> 00:14:06,650 Tas piešķirot noteiktu daudzums atmiņas telpa 336 00:14:06,650 --> 00:14:08,940 uzglabāt, iespējams, nākotnes vēstules. 337 00:14:08,940 --> 00:14:11,310 Un jo īpaši, malloc Tāpēc atgriežas ko? 338 00:14:11,310 --> 00:14:13,114 339 00:14:13,114 --> 00:14:14,851 >> AUDITORIJA: Atgriežoties uz [nedzirdama]? 340 00:14:14,851 --> 00:14:15,850 DAVID J. Malan: Tieši tā. 341 00:14:15,850 --> 00:14:18,850 Atgriežoties adresi šīs atmiņas, kas ir iedomātā veids, kā pateikt, 342 00:14:18,850 --> 00:14:21,640 atgriež adresi Pirmais baits šīs atmiņas. 343 00:14:21,640 --> 00:14:25,460 Pienākums ir man atcerēties cik daudz atmiņas man tiešām 344 00:14:25,460 --> 00:14:27,140 piešķirti vai lūdza malloc par. 345 00:14:27,140 --> 00:14:28,384 >> Tagad, cik daudz tas ir? 346 00:14:28,384 --> 00:14:30,550 Nu, kaut arī tur ir daudz iekavās šeit 347 00:14:30,550 --> 00:14:32,970 malloc aizņem tikai vienu argumentu. 348 00:14:32,970 --> 00:14:37,250 Un es esmu norādot strlen no s, lai dotu man tik daudz baiti, kā tur ir s, 349 00:14:37,250 --> 00:14:37,800 bet pievienot vienu. 350 00:14:37,800 --> 00:14:38,300 Kāpēc? 351 00:14:38,300 --> 00:14:39,030 352 00:14:39,030 --> 00:14:39,530 Yeah? 353 00:14:39,530 --> 00:14:40,840 >> AUDITORIJA: slīpsvītru 0. 354 00:14:40,840 --> 00:14:41,840 DAVID J. Malan: Tieši tā. 355 00:14:41,840 --> 00:14:43,423 Mēs esam ieguvuši, lai darīt nedaudz mājturība. 356 00:14:43,423 --> 00:14:45,970 Tāpēc, ka tur ir slīpsvītru 0, mēs labāk atcerēties. 357 00:14:45,970 --> 00:14:47,310 Pretējā gadījumā mēs ejam izveidot virkni, kas 358 00:14:47,310 --> 00:14:49,170 nav, ka īpaša terminators. 359 00:14:49,170 --> 00:14:52,640 >> Tikmēr, tikai, lai būtu super anālais, man ir sizeof (char), 360 00:14:52,640 --> 00:14:55,730 tikai gadījumā, ja kāds iet MY kods nav uz CS50 ierīces, 361 00:14:55,730 --> 00:14:58,220 bet varbūt atšķirīgs dators kopā kur simboli 362 00:14:58,220 --> 00:15:01,470 ir viens baits, pēc vienošanās, bet divi baiti, vai kaut kas lielāks nekā. 363 00:15:01,470 --> 00:15:04,490 Tas ir vienkārši, lai būtu super, super izvairās kļūdas. 364 00:15:04,490 --> 00:15:06,940 Kaut gan, patiesībā, tas ir visbiežāk būs 1. 365 00:15:06,940 --> 00:15:11,490 >> Tagad, tikmēr, man iet uz priekšu un kopēt string, t kronšteins i vienāds t bracket s. 366 00:15:11,490 --> 00:15:14,962 Un es piekāpjas pagājušajā nedēļā avota kodu, lai redzētu, kas notiek. 367 00:15:14,962 --> 00:15:17,670 Bet galvenais takeaway, un Iemesls Man kodu tagad zaļā krāsā, 368 00:15:17,670 --> 00:15:22,520 ir tāpēc, ka ļoti pēdējā rindā, t kronšteins 0 vienāds toupper, 369 00:15:22,520 --> 00:15:25,230 ir sekas gūstot kas string? 370 00:15:25,230 --> 00:15:26,960 T, un / vai i? 371 00:15:26,960 --> 00:15:29,280 372 00:15:29,280 --> 00:15:30,580 Ka pēdējā rindā kodu. 373 00:15:30,580 --> 00:15:32,930 374 00:15:32,930 --> 00:15:35,560 >> Tikai t, jo tas, kas ir notika šoreiz, 375 00:15:35,560 --> 00:15:41,500 ja es mazliet atsaukt šo pēdējo soli, to, kas ir noticis, ir, kad es aicinu malloc, 376 00:15:41,500 --> 00:15:45,380 Man būtībā saņemt rieciens atmiņas kas ir tāda paša izmēra kā oriģinālam, 377 00:15:45,380 --> 00:15:47,020 jo tas ir aritmētiskā es to darīju. 378 00:15:47,020 --> 00:15:50,920 Es esmu uzglabāt t adresi Minētā rieciens atmiņas. 379 00:15:50,920 --> 00:15:53,370 Pat ja tas izskatās jauki un skaista, jauka un tukšs, 380 00:15:53,370 --> 00:15:56,882 realitāte ir tur, ko mēs ņemšu saglabāt zvanot, atkritumu vērtības šeit. 381 00:15:56,882 --> 00:15:59,340 Ka rieciens atmiņas varētu ļoti arī ir tikusi izmantota iepriekš, 382 00:15:59,340 --> 00:16:00,940 dažas sekundes, pirms dažām minūtēm. 383 00:16:00,940 --> 00:16:04,410 Tātad pilnīgi varētu būt skaitļi vai burti tur, tikai nejauši. 384 00:16:04,410 --> 00:16:08,580 Bet viņi nav derīgs, kamēr es pats aizpildīt šo rieciens atmiņas 385 00:16:08,580 --> 00:16:12,510 ar faktiskajām rakstzīmēm, kā es darīt, ka cilpa tur. 386 00:16:12,510 --> 00:16:13,180 Labi? 387 00:16:13,180 --> 00:16:16,180 >> Tāpēc tagad, kulminācija šie trīs piemēri 388 00:16:16,180 --> 00:16:20,730 , kas bija šķietami sadalīti pēdējo reizi, šis Swap Piemēram, šī funkcija 389 00:16:20,730 --> 00:16:23,670 strādāja nozīmē ka samainās a un b. 390 00:16:23,670 --> 00:16:25,620 Bet tas nestrādāja kādā citā ziņā? 391 00:16:25,620 --> 00:16:27,616 392 00:16:27,616 --> 00:16:28,614 Yeah? 393 00:16:28,614 --> 00:16:29,612 >> AUDITORIJA: [nedzirdama]. 394 00:16:29,612 --> 00:16:35,600 395 00:16:35,600 --> 00:16:36,700 >> DAVID J. Malan: Tieši tā. 396 00:16:36,700 --> 00:16:39,530 Ja es būtu, lai izsauktu šo funkciju no another-- piemēram, 397 00:16:39,530 --> 00:16:42,870 no funkciju, piemēram, galvenais, kur Man ir mainīgs, x un y, kā I 398 00:16:42,870 --> 00:16:46,160 darīja pagājušajā nedēļā, tas pats kods, un es pass x un y 399 00:16:46,160 --> 00:16:49,860 līdz Swap, un tad zvana Swap-- tas, protams, ir pareizais variants 400 00:16:49,860 --> 00:16:52,220 ir tas, ko mēs esam par to, lai see-- tas nestrādāja. 401 00:16:52,220 --> 00:16:53,770 Tātad, kas ir noteikt? 402 00:16:53,770 --> 00:16:56,850 >> Nu, tāpēc, tikai, lai būtu skaidrs, ļaujiet man iet uz priekšu 403 00:16:56,850 --> 00:17:05,450 and-- dod man vienu otru šeit, un redzēt ja es varu parādīt jums pēdējais, kas 404 00:17:05,450 --> 00:17:12,464 Būs in-- pieņemsim redzēt, ja es varētu atrast tas ir reāls fast-- OK, [nedzirdama]. 405 00:17:12,464 --> 00:17:18,440 406 00:17:18,440 --> 00:17:19,240 Labi, tur tas ir. 407 00:17:19,240 --> 00:17:21,000 Tātad ignorēt komandas es esmu tikai rakstīt. 408 00:17:21,000 --> 00:17:23,780 Es gribu, lai ielādētu pie pēdējā minūte piemērs 409 00:17:23,780 --> 00:17:27,960 no pēdējo reizi, kas tagad sauc nē Swap. 410 00:17:27,960 --> 00:17:30,200 >> Līdz ar to nav Swap ir vieta, kur mēs left off pēdējo reizi, 411 00:17:30,200 --> 00:17:32,930 saskaņā ar kuru, es inicializēts x ir 1 un Y ir 2. 412 00:17:32,930 --> 00:17:35,840 Tad es aicinu Swap, kas iet 1 un 2. 413 00:17:35,840 --> 00:17:37,930 Un tad šī funkcija strādāja kādā ziņā, 414 00:17:37,930 --> 00:17:40,750 bet tas nebija pastāvīga Ietekme uz x un y. 415 00:17:40,750 --> 00:17:45,430 Tātad jautājums pie rokas ir, kā tagad mēs faktiski noteikt šo problēmu? 416 00:17:45,430 --> 00:17:47,820 Kāds ir risinājums, pie rokas? 417 00:17:47,820 --> 00:17:53,150 >> Nu, kas swap.c, kas ir jauns šodien pamanīt pāris atšķirības. 418 00:17:53,150 --> 00:17:54,700 X un Y ir vienādi. 419 00:17:54,700 --> 00:17:57,250 Bet kas ir skaidri atšķirīgs par līnijas 25? 420 00:17:57,250 --> 00:17:58,880 421 00:17:58,880 --> 00:18:01,715 Kas jauns tur, ja jūs atceraties kas tas izskatījās kā otrs atpakaļ? 422 00:18:01,715 --> 00:18:02,565 >> AUDITORIJA: [nedzirdama]. 423 00:18:02,565 --> 00:18:03,440 >> DAVID J. Malan: Jā. 424 00:18:03,440 --> 00:18:06,680 Tātad ampersands ir jauns gabals no sintakse ne tikai šajā programmā, 425 00:18:06,680 --> 00:18:08,560 bet arī vispārīgāk CS50. 426 00:18:08,560 --> 00:18:10,680 Līdz šim, es nedomāju, ka mēs esam redzējuši nevienu piemēru 427 00:18:10,680 --> 00:18:14,070 vai tiešām runāja par viņiem jebkurā detaļa, izņemot, varbūt, preemptively 428 00:18:14,070 --> 00:18:16,467 iedaļā, Ampersand kā šis. 429 00:18:16,467 --> 00:18:19,300 Nu, izrādās Ampersand ir viens pēdējo gabalu jaunā sintakse 430 00:18:19,300 --> 00:18:20,174 mēs ejam mācīties. 431 00:18:20,174 --> 00:18:23,500 Viss, tas nozīmē, adrese kādu mainīgā. 432 00:18:23,500 --> 00:18:25,070 Pēc kāda adrese nav x dzīvot? 433 00:18:25,070 --> 00:18:26,510 Bet ko adrese tas y dzīvot? 434 00:18:26,510 --> 00:18:28,700 Jo, ja pamatproblēma pirms 435 00:18:28,700 --> 00:18:32,970 tika, ka x un y tika nodots kā kopijas, ko mēs patiešām vēlamies darīt 436 00:18:32,970 --> 00:18:38,780 ir nodrošināt Swap ar kā dārgumu karte, kas noved pie ja x un y faktiski 437 00:18:38,780 --> 00:18:41,910 ir RAM, tā ka Swap var sekot šo karti 438 00:18:41,910 --> 00:18:47,760 un doties, kur vien x vai y iezīmē vietas un mainīt faktiskās vērtības 1 un 2 439 00:18:47,760 --> 00:18:48,270 tur. 440 00:18:48,270 --> 00:18:50,710 >> Tātad Swap jāmaina nedaudz too. 441 00:18:50,710 --> 00:18:53,760 Un pēc pirmā acu uzmetiena, tas var likties mazliet līdzīgs char zvaigzni. 442 00:18:53,760 --> 00:18:54,850 Un tas patiešām ir. 443 00:18:54,850 --> 00:18:59,635 Tāpēc ir pointers uz kāda veida datu pamatojoties uz šo iezīmētā daļu? 444 00:18:59,635 --> 00:19:00,810 445 00:19:00,810 --> 00:19:01,620 Tātad, tas ir int. 446 00:19:01,620 --> 00:19:04,880 >> Tātad vairs int, tas ir adrese int. 447 00:19:04,880 --> 00:19:07,910 Un tāpat, b tagad gatavojas būt adresi int. 448 00:19:07,910 --> 00:19:12,470 Tātad, kad es tagad aicinu Swap no Main, Es neesmu gatavojas sniegt Swap 1 un 2. 449 00:19:12,470 --> 00:19:15,540 Es esmu gatavojas sniegt to kā Ox-kaut un Vērsis-kaut ko, 450 00:19:15,540 --> 00:19:19,820 divas adreses, kas novedīs Swap to faktiskajiem vietās 451 00:19:19,820 --> 00:19:21,310 mana datora atmiņā. 452 00:19:21,310 --> 00:19:25,580 >> Tāpēc tagad, mans paliekot īstenošana jāmaina a tad. 453 00:19:25,580 --> 00:19:28,650 Kas, protams, savādāka Šajās trīs rindiņas kodu? 454 00:19:28,650 --> 00:19:31,350 Tur šie nopelt zvaigznes visas pār vietu, labi? 455 00:19:31,350 --> 00:19:33,014 Tātad, kas notiek šeit? 456 00:19:33,014 --> 00:19:33,514 Yeah? 457 00:19:33,514 --> 00:19:35,055 >> AUDITORIJA: Tas ir acīmredzami [nedzirdama]. 458 00:19:35,055 --> 00:19:36,832 459 00:19:36,832 --> 00:19:37,990 >> DAVID J. Malan: Tieši tā. 460 00:19:37,990 --> 00:19:41,560 Tātad šajā context--, un tas nebija labākais dizains lēmums, protams, 461 00:19:41,560 --> 00:19:42,530 gadus atpakaļ. 462 00:19:42,530 --> 00:19:45,110 Šajā kontekstā, kur Jums vienkārši ir zvaigzne, 463 00:19:45,110 --> 00:19:48,240 un jums nav datu tipu, piemēram, int, uzreiz pa kreisi, 464 00:19:48,240 --> 00:19:53,146 vietā jums ir vienādības zīmi, skaidri, šajā kontekstā, kad jūs sakāt zvaigzne, 465 00:19:53,146 --> 00:19:56,980 tas nozīmē, ka iet uz adresi, kas ir kas. 466 00:19:56,980 --> 00:19:58,870 Sekojiet dārgumu karti, lai runāt. 467 00:19:58,870 --> 00:20:01,720 >> Un tikmēr, atbilst 37, tas nozīmē to pašu. 468 00:20:01,720 --> 00:20:05,460 Iet uz adresi a, un īstenot to, ko tur? 469 00:20:05,460 --> 00:20:09,520 Kāds ir vietu, kas b precizēts. 470 00:20:09,520 --> 00:20:10,980 Citiem vārdiem sakot, dodieties uz b. 471 00:20:10,980 --> 00:20:12,130 Saņemt šo vērtību. 472 00:20:12,130 --> 00:20:15,620 Iet uz un, katru vienāds parakstīt, uzdevums operators, 473 00:20:15,620 --> 00:20:17,010 nodot šo vērtību tur. 474 00:20:17,010 --> 00:20:19,272 >> Tāpat int temp ir tikai int. 475 00:20:19,272 --> 00:20:20,730 Nekas jāmaina par temp. 476 00:20:20,730 --> 00:20:24,810 Tas ir tikai rezerves stikls no Annenberg kādu pienu vai apelsīnu sulu. 477 00:20:24,810 --> 00:20:27,630 Bet man jāsaka, dodieties uz b. 478 00:20:27,630 --> 00:20:31,449 Iet uz šo galamērķi un ielieciet vērtību temp tur. 479 00:20:31,449 --> 00:20:32,490 Tātad, kas notiek pēc tam? 480 00:20:32,490 --> 00:20:36,540 Kad es tiešām aicinu Swap šo laiku, ja šis pirmais paplāte šeit pārstāv Main, 481 00:20:36,540 --> 00:20:42,270 šis otrais tray pārstāv Swap, kad Es iet Ampersand x un aizvieto & zīmes y 482 00:20:42,270 --> 00:20:47,150 no Main līdz Swap, tikai, lai būtu skaidrs, Kas tas ir kaudze rāmis saņemšana? 483 00:20:47,150 --> 00:20:48,700 484 00:20:48,700 --> 00:20:49,200 Yeah? 485 00:20:49,200 --> 00:20:50,180 >> AUDITORIJA: [nedzirdama]. 486 00:20:50,180 --> 00:20:51,180 DAVID J. Malan: Tieši tā. 487 00:20:51,180 --> 00:20:53,129 X adrese un adrese y. 488 00:20:53,129 --> 00:20:55,170 Un jūs varat iedomāties šos piemēram, pasta adresēm. 489 00:20:55,170 --> 00:20:58,772 33 Oxford Street un 35 Oxford Street, un jūs 490 00:20:58,772 --> 00:21:01,230 vēlaties pārvietot divas ēkas , kas ir šajās vietās. 491 00:21:01,230 --> 00:21:04,680 >> Tas ir sava veida smieklīgi idejas, bet tas ir viss, ko mēs saprotam ar adresi. 492 00:21:04,680 --> 00:21:07,000 Kur pasaulē var jums atrast šos divus ints? 493 00:21:07,000 --> 00:21:09,470 Kur pasaulē jūs varat atrast šīs divas ēkas? 494 00:21:09,470 --> 00:21:15,170 Tātad, ja beidzot, pēc visu šo laiku I iedziļināties šodienas pirmkodu un apkopot 495 00:21:15,170 --> 00:21:22,110 Swap un palaist ./swap, visbeidzot, lai Pirmo reizi mēs patiešām redzam, ka 496 00:21:22,110 --> 00:21:25,330 manas vērtības ir patiešām veiksmīgi aizstāja. 497 00:21:25,330 --> 00:21:30,860 Un tagad, mēs varam pat ņemt piezīmi šajā, teiksim, gdb. 498 00:21:30,860 --> 00:21:32,740 >> Tāpēc ļaujiet man iet uz pašu failu. 499 00:21:32,740 --> 00:21:35,010 Ļaujiet man iet uz priekšu un palaist gdb no ./swap. 500 00:21:35,010 --> 00:21:36,590 501 00:21:36,590 --> 00:21:40,547 Un tagad, Swap, es iešu priekšu un noteikt lūzuma punktu in Main. 502 00:21:40,547 --> 00:21:42,630 Un tagad es iešu priekšu un palaist programmu. 503 00:21:42,630 --> 00:21:45,810 Un tagad mēs redzam savu kodu apstājās pie šīs līnijas. 504 00:21:45,810 --> 00:21:48,330 >> Ja es iet uz priekšu un izdrukāt x, ko man vajadzētu redzēt šeit? 505 00:21:48,330 --> 00:21:49,314 506 00:21:49,314 --> 00:21:49,980 Tas ir jautājums. 507 00:21:49,980 --> 00:21:51,030 508 00:21:51,030 --> 00:21:51,530 Saku vēlreiz? 509 00:21:51,530 --> 00:21:52,295 >> AUDITORIJA: [nedzirdama]. 510 00:21:52,295 --> 00:21:53,910 >> DAVID J. Malan: Tātad izlases numuri, varbūt. 511 00:21:53,910 --> 00:21:56,010 Varbūt man paveicās, un tas ir jauki un vienkārši, piemēram, 0. 512 00:21:56,010 --> 00:21:57,230 Bet varbūt tas ir daži izlases numurs. 513 00:21:57,230 --> 00:21:58,090 Šajā gadījumā, es saņēmu laimīgs. 514 00:21:58,090 --> 00:21:59,030 Tā vienkārši notiek, ir 0. 515 00:21:59,030 --> 00:22:00,780 Bet tas tiešām ir laime, tāpēc, ka, līdz es 516 00:22:00,780 --> 00:22:06,280 ierakstiet nākamo un pēc tam izdrukāt x ir, ka rindā kodu, līnija 19, tika izpildīts. 517 00:22:06,280 --> 00:22:10,942 >> Tajā pašā laikā, ja es tipa blakus atkal, un Tagad izdrukāt y, es esmu gatavojas, lai redzētu 2. 518 00:22:10,942 --> 00:22:13,900 Tagad, ja es tipa blakus, tas būs get nedaudz mulsinoši, jo tagad, 519 00:22:13,900 --> 00:22:17,250 printf gatavojas parādīties ekrāns, kā tas notika. x ir 1. 520 00:22:17,250 --> 00:22:18,606 >> Darīsim to vēlreiz. 521 00:22:18,606 --> 00:22:20,480 Un tagad, lūk, kur lietas iegūt interesantu. 522 00:22:20,480 --> 00:22:21,580 523 00:22:21,580 --> 00:22:26,580 Pirms es aicinu Swap vai pat soli tajā, pieņemsim nedaudz palūrēt. 524 00:22:26,580 --> 00:22:28,980 x ir, atkal, 1. 525 00:22:28,980 --> 00:22:33,240 Y ir, protams, ātri vesels saprāts pārbaudiet, 2, tāpēc nav grūti tur. 526 00:22:33,240 --> 00:22:35,740 Bet kāda ir Ampersand x? 527 00:22:35,740 --> 00:22:36,760 528 00:22:36,760 --> 00:22:39,350 Atbilde, tas ir sava veida bailīgs meklējat. 529 00:22:39,350 --> 00:22:43,500 Bet int zvaigzne iekavās ir tikai GDP veids, kā sakot, šī ir adrese. 530 00:22:43,500 --> 00:22:48,290 Tas nav int, tas ir rādītājs, lai int, vai citādi pazīstams kā adresi. 531 00:22:48,290 --> 00:22:49,742 >> Kas tas ir traks lieta? 532 00:22:49,742 --> 00:22:51,825 Mēs nekad neesmu redzējis kaut ko gluži tāpat, ka pirms. 533 00:22:51,825 --> 00:22:53,650 534 00:22:53,650 --> 00:22:58,120 Tātad šī ir adrese mans dators ir atmiņa, kur x notiek dzīvot. 535 00:22:58,120 --> 00:22:59,040 Tas ir Ox-kaut kas. 536 00:22:59,040 --> 00:23:01,290 Un tas ir, atklāti sakot, kāpēc Esmu sācis zīmēšanas bultas, 537 00:23:01,290 --> 00:23:03,340 nevis par skaitļiem, jo, kas tiešām rūpējas 538 00:23:03,340 --> 00:23:06,890 ka jūsu int ir īpaši adresi, kas ir tik liels. 539 00:23:06,890 --> 00:23:12,160 Bet bffff0c4, tie visi Patiešām heksadecimālcipariem, 540 00:23:12,160 --> 00:23:13,720 , kas ir no 0 līdz f. 541 00:23:13,720 --> 00:23:16,590 >> Tāpēc mēs nebrauksim kavēties pārāk sen par to, kas šīs lietas ir. 542 00:23:16,590 --> 00:23:19,400 Bet, ja es izdrukāt y, Protams, es redzu 2. 543 00:23:19,400 --> 00:23:22,440 Bet Ampersand y, es redzu šo adresi. 544 00:23:22,440 --> 00:23:26,527 Un paziņojums, par ziņkārīgs, cik tālu ir x un y? 545 00:23:26,527 --> 00:23:27,985 Jūs varat ignorēt lielāko daļu adresi. 546 00:23:27,985 --> 00:23:29,330 547 00:23:29,330 --> 00:23:29,920 Četras baiti. 548 00:23:29,920 --> 00:23:33,510 Un tas ir saskaņā ar mūsu agrāk, apgalvo, ka, cik liela ir int? 549 00:23:33,510 --> 00:23:34,130 Četras baiti. 550 00:23:34,130 --> 00:23:37,420 Tā izskatās viss ir odere augšu labi, kā jūs varētu cerēt, atmiņā. 551 00:23:37,420 --> 00:23:40,010 >> Tāpēc tagad, pieņemsim tikai ātri uz priekšu līdz beigām šo stāstu. 552 00:23:40,010 --> 00:23:43,290 Iesim uz priekšu un ierakstiet soli, nodoties Swap funkciju. 553 00:23:43,290 --> 00:23:46,880 Tagad paziņojums, ja es tipa, tas ir identiska adresei x. 554 00:23:46,880 --> 00:23:52,130 Ja es tipa b, tas ir identisks uz adresi y. 555 00:23:52,130 --> 00:23:57,020 Tātad, ko man vajadzētu redzēt, ja es teikt, dodieties uz adresi a? 556 00:23:57,020 --> 00:23:58,120 Tātad izdrukāt zvaigzne. 557 00:23:58,120 --> 00:24:00,130 Tātad zvaigzne nozīmē iet tur, šajā kontekstā. 558 00:24:00,130 --> 00:24:02,730 Ampersand nozīmē, kāda ir adrese. 559 00:24:02,730 --> 00:24:05,000 Tātad zvaigzne līdzekļus 1. 560 00:24:05,000 --> 00:24:09,590 Un drukas zvaigzne b dod man 2. 561 00:24:09,590 --> 00:24:15,750 >> Un ļaujiet man pieņemt, uz šo brīdi, ka vismaz kods, kas 562 00:24:15,750 --> 00:24:18,950 ieņēmumus izpildīt tagad var būt pamatots ar šādā veidā. 563 00:24:18,950 --> 00:24:21,150 Bet mēs pārskatīt šo ideju pirms ilgi. 564 00:24:21,150 --> 00:24:23,850 Tātad šī versija Swap tagad ir pareizs un ļauj 565 00:24:23,850 --> 00:24:26,650 mums apmainīt šo konkrēto datu tipu. 566 00:24:26,650 --> 00:24:29,120 >> Tātad, kādi jautājumi, tad uz Swap? 567 00:24:29,120 --> 00:24:29,890 Par zvaigzne? 568 00:24:29,890 --> 00:24:30,690 Par adreses? 569 00:24:30,690 --> 00:24:33,270 Un jūs redzēsiet, ar problēma noteikti 4, veida, 570 00:24:33,270 --> 00:24:37,310 bet problēma noteikti 5, noteikti, kā šie lietas ir noderīgi un iegūt daudz vairāk 571 00:24:37,310 --> 00:24:39,584 apmierināti ar tiem, kā rezultātā. 572 00:24:39,584 --> 00:24:40,430 Kaut ko vispār? 573 00:24:40,430 --> 00:24:40,930 Viss labi. 574 00:24:40,930 --> 00:24:44,350 Tātad malloc ir, atkal, šī funkcija ka tikai piešķir atmiņas, atmiņas 575 00:24:44,350 --> 00:24:45,330 sadali. 576 00:24:45,330 --> 00:24:47,024 Un kāpēc tas ir noderīgi? 577 00:24:47,024 --> 00:24:48,940 Nu, visu šo laiku, jūs esat bijis, izmantojot malloc. 578 00:24:48,940 --> 00:24:52,230 Ja jūs uzskatāt, tagad, kā getString darbi, iespējams, tas ir 579 00:24:52,230 --> 00:24:56,140 lūdzis kādam rieciens atmiņa, jebkurā laikā lietotājs veidiem string 580 00:24:56,140 --> 00:24:59,040 in, jo mēs, protams, nezināja, kā CS50 darbiniekiem, 581 00:24:59,040 --> 00:25:02,710 cik liels šīs virknes, kas cilvēkus gatavojas rakstīt varētu būt. 582 00:25:02,710 --> 00:25:07,910 >> Tātad pieņemsim, pirmo reizi, sāciet mizu atpakaļ cik tad CS50 bibliotēka darbi, 583 00:25:07,910 --> 00:25:10,990 veidā pāris piemēri kas novedīs mūs tur. 584 00:25:10,990 --> 00:25:15,300 Tātad, ja es atvērt gedit un atvērt scanf 0, 585 00:25:15,300 --> 00:25:17,055 Mēs ejam, lai redzētu šādu kodu. 586 00:25:17,055 --> 00:25:18,720 587 00:25:18,720 --> 00:25:23,530 Scanf 0, kas pieejams tīmekļa vietnē šodien, ir samērā dažas rindiņas kodu 588 00:25:23,530 --> 00:25:25,351 šeit, 14 līdz 20. 589 00:25:25,351 --> 00:25:26,600 Un redzēsim, ko tas dara. 590 00:25:26,600 --> 00:25:28,920 Tā paziņo par int, ko sauc par x. 591 00:25:28,920 --> 00:25:30,850 Tā saka kaut ko līdzīgu, numuru lūdzu. 592 00:25:30,850 --> 00:25:33,940 Un tagad tā saka, scanf% i, un x. 593 00:25:33,940 --> 00:25:35,620 Tātad tur ir ķekars jaunu stuff tur. 594 00:25:35,620 --> 00:25:38,420 >> Bet scanf, jūs varat veida domāt no kā pretstatu printf. 595 00:25:38,420 --> 00:25:40,090 printf, protams, izdrukas uz ekrāna. 596 00:25:40,090 --> 00:25:44,410 scanf veida skenē no lietotāja tastatūra kaut ko viņš vai viņa ir drukāti. 597 00:25:44,410 --> 00:25:46,550 >> % I ir tāpat kā printf. 598 00:25:46,550 --> 00:25:49,410 Tas nozīmē, sagaida lietotājs rakstīt int. 599 00:25:49,410 --> 00:25:52,820 Un tagad, kāpēc jūs domājat, ka es varētu iet scanf & X? 600 00:25:52,820 --> 00:25:54,030 601 00:25:54,030 --> 00:25:57,770 Ja dzīves jēgu no scanf ir, lai saņemtu kaut ko no lietotāja, 602 00:25:57,770 --> 00:26:02,480 , kas ir nozīme iet to, un x, tagad? 603 00:26:02,480 --> 00:26:02,980 Yeah? 604 00:26:02,980 --> 00:26:03,896 >> AUDITORIJA: [nedzirdama]. 605 00:26:03,896 --> 00:26:05,540 606 00:26:05,540 --> 00:26:06,540 DAVID J. Malan: Tieši tā. 607 00:26:06,540 --> 00:26:12,900 Kāds man, cilvēkam, tipa, mans ievadi tiks saglabāts šajā vietā. 608 00:26:12,900 --> 00:26:17,660 Tas nav pietiekami, atgādināt, lai tikai caurlaide x, jo mēs esam redzējuši jau, 609 00:26:17,660 --> 00:26:21,630 jebkurā laikā jums iet tikai jēlu mainīgo, tāpat kā int, uz kādu citu funkciju, 610 00:26:21,630 --> 00:26:25,640 Protams, tas var mainīt, ka mainīgs, bet ne pastāvīgi. 611 00:26:25,640 --> 00:26:27,360 Tā nevar ietekmēt Main. 612 00:26:27,360 --> 00:26:29,420 To var mainīt tikai savu lokālo kopiju. 613 00:26:29,420 --> 00:26:32,560 Bet, ja tā vietā, jums nav iedodiet man faktisko int, 614 00:26:32,560 --> 00:26:36,640 bet tu man norādījumus ka int, es tagad, būdams scanf, 615 00:26:36,640 --> 00:26:41,050 protams, es varētu sekot, ka risinātu un nodot vairākus tur 616 00:26:41,050 --> 00:26:43,280 tāpēc jums ir piekļuve to, kā labi. 617 00:26:43,280 --> 00:26:45,120 >> Tātad, kad es palaist šo programmu, redzēsim. 618 00:26:45,120 --> 00:26:49,660 Padarīt scanf 0 dot slīpsvītra, scanf 0. 619 00:26:49,660 --> 00:26:54,030 Un, ja es tagad ierakstiet numuru piemēram, 50, paldies par 50. 620 00:26:54,030 --> 00:26:58,150 Ja es tagad ierakstiet numuru, piemēram, negatīvs 1, par negatīvo 1. 621 00:26:58,150 --> 00:27:04,200 Es tagad ierakstiet skaitli, piemēram, 1.5, hm. 622 00:27:04,200 --> 00:27:06,030 Kāpēc mana programma ignorēt mani? 623 00:27:06,030 --> 00:27:07,300 624 00:27:07,300 --> 00:27:09,880 Nu, tāpēc, ka vienkārši, es teicu tas sagaidīt tikai int. 625 00:27:09,880 --> 00:27:10,380 Viss labi. 626 00:27:10,380 --> 00:27:11,630 Tāpēc, ka ir viena versija par to. 627 00:27:11,630 --> 00:27:16,600 Paņemsim lietas uz augšu robs un ierosina, ka tas nav labi. 628 00:27:16,600 --> 00:27:20,530 Un šeit slēpjas ļoti vienkāršu piemēru par to, kā mēs varam sākt rakstīšanas kodu 629 00:27:20,530 --> 00:27:24,450 , ka citi cilvēki var izmantot vai kompromitēt darot sliktas lietas. 630 00:27:24,450 --> 00:27:28,336 Tātad 16 līnija, tik līdzīgas garā pirms, 631 00:27:28,336 --> 00:27:29,960 bet es neesmu atzīts par int šoreiz. 632 00:27:29,960 --> 00:27:32,970 Es esmu deklarējot it char zvaigzne, aka virkni. 633 00:27:32,970 --> 00:27:35,190 >> Bet ko tas īsti nozīmē? 634 00:27:35,190 --> 00:27:38,790 Tātad, ja man nav norādiet address-- un Es esmu aicinot to patvaļīgi, buferis, 635 00:27:38,790 --> 00:27:43,370 bet es varētu saukt to s, būt simple-- un tad es to izdarītu, paskaidrojiet man, 636 00:27:43,370 --> 00:27:48,630 ja jūs varētu, balstoties uz iepriekšējā loģika, kas ir scanf dara 18 līniju, 637 00:27:48,630 --> 00:27:55,000 ja pass% s un buferi, kas ir adrese? 638 00:27:55,000 --> 00:27:58,210 Kas ir scanf, ja jūs pieteikties Precīzs pati loģika kā versiju 0, 639 00:27:58,210 --> 00:28:00,640 mēģināšu darīt šeit, ja lietotājs kaut kas? 640 00:28:00,640 --> 00:28:02,630 641 00:28:02,630 --> 00:28:03,409 Yeah? 642 00:28:03,409 --> 00:28:04,407 >> AUDITORIJA: [nedzirdama]. 643 00:28:04,407 --> 00:28:07,401 644 00:28:07,401 --> 00:28:08,890 >> DAVID J. Malan: Tieši tā. 645 00:28:08,890 --> 00:28:11,577 Scanf, ko loģika agrāk, gatavojas veikt virkni 646 00:28:11,577 --> 00:28:13,410 ka cilvēka drukāti in-- tas tagad virkne, 647 00:28:13,410 --> 00:28:15,790 tas nav numuru, iespējams, ja viņš vai viņa cooperates-- 648 00:28:15,790 --> 00:28:19,310 un tas notiek, lai mēģinātu likt ka string atmiņā brīdī jebkurā adresē 649 00:28:19,310 --> 00:28:20,340 buferis precizēts. 650 00:28:20,340 --> 00:28:23,870 Un tas ir lieliski, jo buferis patiešām ir domāts, lai būtu adresi. 651 00:28:23,870 --> 00:28:30,470 >> Bet es varu pieprasīt šī programma ir buggy ļoti nopietns veids, jo kāda vērtība ir 652 00:28:30,470 --> 00:28:31,330 buferis pēc noklusējuma? 653 00:28:31,330 --> 00:28:33,380 654 00:28:33,380 --> 00:28:34,790 Ko es esmu inicializēts vērā? 655 00:28:34,790 --> 00:28:35,770 Kāda rieciens atmiņas? 656 00:28:35,770 --> 00:28:37,480 657 00:28:37,480 --> 00:28:38,620 Man nav, vai ne? 658 00:28:38,620 --> 00:28:42,265 >> Tātad, pat ja es esmu piešķirti char zvaigzne, kas ir vairs sauc s, 659 00:28:42,265 --> 00:28:48,030 tā vietā sauc, buffer-- tāpēc pieņemsim vērst mainīgā vārds 660 00:28:48,030 --> 00:28:53,380 tagad, kā buffer-- ja man nav sauc getString vai malloc šeit 661 00:28:53,380 --> 00:28:56,030 , kas faktiski nozīmē, ka buferis ir tikai daži atkritumu vērtība. 662 00:28:56,030 --> 00:28:57,030 >> Tagad, ko tas nozīmē? 663 00:28:57,030 --> 00:29:00,220 Tas nozīmē, ka es esmu teicis scanf sagaidīt virkni no lietotāja. 664 00:29:00,220 --> 00:29:01,300 Un jūs zināt, ko? 665 00:29:01,300 --> 00:29:03,883 Neatkarīgi no šī lieta ir vērsta kuri paredzēti, un es izdarīt jautājuma zīmi, 666 00:29:03,883 --> 00:29:07,060 bet patiesībā, tas būs kaut kas līdzīgs OX1, 2, 3, vai ne? 667 00:29:07,060 --> 00:29:10,730 Tas ir daži viltus vērtību, kas tikko notiek, ir tur, no pirms tam. 668 00:29:10,730 --> 00:29:13,440 Tātad citiem vārdiem sakot, tas ir it kā buferis ir tikai 669 00:29:13,440 --> 00:29:16,180 norādot uz kaut ko atmiņā. 670 00:29:16,180 --> 00:29:17,610 Man nav ne jausmas, kāda. 671 00:29:17,610 --> 00:29:24,130 >> Tātad, ja es tipa Gabe tagad, tas būs mēģināt likt g-a-b-e / 0 tur. 672 00:29:24,130 --> 00:29:25,530 Bet kas zina, kas tas ir? 673 00:29:25,530 --> 00:29:27,480 Un agrāk, jebkura reize, kad mēs esam mēģinājuši pieskarties 674 00:29:27,480 --> 00:29:29,770 atmiņu, kas nepieder mums, kas ir noticis? 675 00:29:29,770 --> 00:29:31,020 676 00:29:31,020 --> 00:29:32,870 Vai gandrīz katru reizi. 677 00:29:32,870 --> 00:29:34,310 Segmentāciju vaina, vai ne? 678 00:29:34,310 --> 00:29:37,829 >> Šī bulta, man nav ne jausmas, kur tas ir norādot. tas ir tikai daži izlases vērtība. 679 00:29:37,829 --> 00:29:40,370 Un, protams, ja jūs interpretēt izlases vērtība adresi, 680 00:29:40,370 --> 00:29:42,610 jūs gatavojas doties uz daži izlases galamērķis. 681 00:29:42,610 --> 00:29:46,810 Tātad Gabe varētu patiešām crash mana programma šajā gadījumā šeit. 682 00:29:46,810 --> 00:29:50,600 >> Tātad, ko mēs varam darīt, ir gandrīz tikpat slikti? 683 00:29:50,600 --> 00:29:52,660 Uzskata, ka tas trešais un final piemērs scanf. 684 00:29:52,660 --> 00:29:53,890 685 00:29:53,890 --> 00:29:56,870 Šī versija ir labāk kādā nozīmē? 686 00:29:56,870 --> 00:29:57,990 687 00:29:57,990 --> 00:30:01,400 Ja Jums ir apmierināti ar iepriekšējā problēma, tas ir labāk. 688 00:30:01,400 --> 00:30:02,250 Kāpēc? 689 00:30:02,250 --> 00:30:03,250 >> AUDITORIJA: [nedzirdama]. 690 00:30:03,250 --> 00:30:06,235 691 00:30:06,235 --> 00:30:07,110 DAVID J. Malan: Labi. 692 00:30:07,110 --> 00:30:09,970 Tātad šis gadījums 16 līnijas ir labāks, ar to saprotot 693 00:30:09,970 --> 00:30:12,030 ka mēs esam skaidri piešķirot daļu atmiņas. 694 00:30:12,030 --> 00:30:14,190 Mēs nelietojat malloc, mēs esam izmantojot nedēļa 2 695 00:30:14,190 --> 00:30:16,060 pieeja vienkārši deklarēt masīvu. 696 00:30:16,060 --> 00:30:18,130 Un mēs esam teicu, ka virkne ir tikai masīvs rakstzīmes, 697 00:30:18,130 --> 00:30:19,690 tāpēc tas ir pilnīgi likumīga. 698 00:30:19,690 --> 00:30:22,910 Bet tas, protams, kā Jūs ņemiet vērā, fiksētu lielumu, 16. 699 00:30:22,910 --> 00:30:25,440 >> Tātad šī programma ir pilnīgi droši, ja es tipa 700 00:30:25,440 --> 00:30:29,760 vienā rakstzīmju virknes, divi raksturs stīgas, 15 rakstzīmju virknes. 701 00:30:29,760 --> 00:30:34,970 Bet, tiklīdz es sāku rakstīt 16, 17, 18, 1000 rakstzīmju virknes, 702 00:30:34,970 --> 00:30:37,390 ja ir tā, ka virkne gatavojas galu galā? 703 00:30:37,390 --> 00:30:39,570 Tas notiek, lai galu galā daļēji šeit. 704 00:30:39,570 --> 00:30:42,820 Bet tad, kas zina, kāds cits ir ārpus robežām 705 00:30:42,820 --> 00:30:44,270 Šī konkrētā masīva? 706 00:30:44,270 --> 00:30:48,015 >> Tas ir tā, it kā es esmu deklarēta 16 kastes šeit. 707 00:30:48,015 --> 00:30:49,300 708 00:30:49,300 --> 00:30:52,690 Tātad, nevis izņemt visus 16, mēs ņemšu tikai izlikties, ka es esmu sastādīts 16. 709 00:30:52,690 --> 00:30:56,540 Bet, ja es tad mēģiniet lasīt virkni tas ir daudz ilgāk, piemēram, 50 rakstzīmes, 710 00:30:56,540 --> 00:31:01,270 Es esmu gatavojas sākt liekot a, b, c, d, x, y, z. 711 00:31:01,270 --> 00:31:04,916 Un tas ir iespējams, daži citi atmiņas segmentu 712 00:31:04,916 --> 00:31:06,790 ka, atkal, var izraisīt mana programma crash, 713 00:31:06,790 --> 00:31:10,600 tāpēc, ka es esmu ne lūdza kaut kas vairāk nekā tikai 16 baitu. 714 00:31:10,600 --> 00:31:12,260 >> Tātad, kurš rūpējas? 715 00:31:12,260 --> 00:31:13,880 Nu, šeit ir CS50 bibliotēka. 716 00:31:13,880 --> 00:31:17,220 Un lielākā daļa no tā ir tikai tāpat norādījumiem augšu augšas. 717 00:31:17,220 --> 00:31:21,670 CS50 bibliotēka, visu šo laiku, ir bijusi šī līnija 52 rindā. 718 00:31:21,670 --> 00:31:23,680 Mēs esam redzējuši typedef, vai Jūs redzēsiet typedef 719 00:31:23,680 --> 00:31:27,930 in PSET 4, kas tikai rada sinonīms kuru char zvaigzne var būt vairāk 720 00:31:27,930 --> 00:31:29,290 vienkārši sauc par virkni. 721 00:31:29,290 --> 00:31:31,540 Tātad, tas ir viens no daži mācību riteņi 722 00:31:31,540 --> 00:31:34,120 mēs esam izmantojuši slepeni zem motora pārsega. 723 00:31:34,120 --> 00:31:36,490 >> Tikmēr, šeit ir funkcija, getchar. 724 00:31:36,490 --> 00:31:38,190 Tagad acīmredzot, nav organismam to. 725 00:31:38,190 --> 00:31:40,273 Un patiesībā, ja es glabāt ritināšanu, man nav reāli 726 00:31:40,273 --> 00:31:42,080 redzat realizācijas no šīm funkcijām. 727 00:31:42,080 --> 00:31:43,140 728 00:31:43,140 --> 00:31:45,516 Kā veselība pārbaudītu, kāpēc tā? 729 00:31:45,516 --> 00:31:46,795 >> AUDITORIJA: [nedzirdama]. 730 00:31:46,795 --> 00:31:47,670 DAVID J. Malan: Jā. 731 00:31:47,670 --> 00:31:48,950 Tātad šis ir header fails. 732 00:31:48,950 --> 00:31:52,520 Un header faili satur prototipus, kā arī dažas citas lietas, šķiet, 733 00:31:52,520 --> 00:31:53,780 piemēram typedefs. 734 00:31:53,780 --> 00:31:56,910 Bet CS50.c, kurā mēs esam nekad dota jums tieši, 735 00:31:56,910 --> 00:32:02,100 bet ir bijis CS50 ierīces visu šoreiz, dziļi iekšā no tās mapes, 736 00:32:02,100 --> 00:32:04,990 ievērosiet, ka tur ir viss ķekars funkcijas šeit. 737 00:32:04,990 --> 00:32:06,720 >> Faktiski, pieņemsim ritiniet uz leju. 738 00:32:06,720 --> 00:32:08,810 Pieņemsim ignorēt lielākā daļa no tiem, kas tagad. 739 00:32:08,810 --> 00:32:12,670 Bet, ritiniet uz leju līdz getInt un redzēt, kā getInt darbojas. 740 00:32:12,670 --> 00:32:13,890 Tātad, šeit ir getInt. 741 00:32:13,890 --> 00:32:17,727 Un, ja jūs kādreiz tiešām rūpējas, kā nokļūt int darbi, šeit ir tā dokumentāciju. 742 00:32:17,727 --> 00:32:19,560 Un starp lietām tā saka, ir tā stāsta jums 743 00:32:19,560 --> 00:32:21,340 kāda vērtību diapazons tā var atgriezties. 744 00:32:21,340 --> 00:32:24,400 Tas ir īpaši negatīva 2 miljardus pozitīvu 2 miljardiem, sniegt vai pieņemt. 745 00:32:24,400 --> 00:32:26,420 >> Un izrādās, tas viss laiks, lai gan mēs esam nekad 746 00:32:26,420 --> 00:32:28,570 bija jums pārbaudīt to, ja kaut kas noiet greizi, 747 00:32:28,570 --> 00:32:30,680 izrādās, ka visi šoreiz, getInt ir 748 00:32:30,680 --> 00:32:33,600 ir atkal īpaša nemainīgs, nav Null, 749 00:32:33,600 --> 00:32:36,760 bet int_max, kas ir Tikai programmētāja konvencija. 750 00:32:36,760 --> 00:32:38,846 Tas nozīmē, šeit ir īpaša vērtība. 751 00:32:38,846 --> 00:32:41,470 Pārliecinieties, lai pārbaudītu šo, vienkārši gadījumā, ja kaut kas noiet greizi. 752 00:32:41,470 --> 00:32:43,261 Bet mēs nekad bothered ar to līdz šim, 753 00:32:43,261 --> 00:32:45,200 jo atkal, tas ir domāts, lai vienkāršotu. 754 00:32:45,200 --> 00:32:46,950 >> Bet kā tas getInt iegūt īstenoti? 755 00:32:46,950 --> 00:32:48,450 Nu, viens, tas aizņem nekādus argumentus. 756 00:32:48,450 --> 00:32:49,390 Mēs zinām, ka. 757 00:32:49,390 --> 00:32:50,820 Tā atgriež int. 758 00:32:50,820 --> 00:32:51,950 Mēs zinām, ka. 759 00:32:51,950 --> 00:32:54,460 Tātad, kā tas darbojas zem pārsega? 760 00:32:54,460 --> 00:32:58,290 >> Tātad tur ir acīmredzot bezgalīgs cilpa, vismaz izskatu vienu. 761 00:32:58,290 --> 00:33:00,290 Ievērojiet, ka mēs esam izmantojot getString. 762 00:33:00,290 --> 00:33:04,000 Tāpēc, ka ir interesanti. getInt prasa mūsu pašu funkciju, getString. 763 00:33:04,000 --> 00:33:05,645 Un tagad, kāpēc tas varētu būt gadījums? 764 00:33:05,645 --> 00:33:07,400 765 00:33:07,400 --> 00:33:09,842 Kāpēc man ir piesardzīga šeit līnijas 165? 766 00:33:09,842 --> 00:33:11,390 767 00:33:11,390 --> 00:33:15,639 Kas varētu notikt saskaņā 164, tikai, lai būtu skaidrs? 768 00:33:15,639 --> 00:33:16,930 Tā ir pati atbilde kā pirms tam. 769 00:33:16,930 --> 00:33:18,660 770 00:33:18,660 --> 00:33:20,089 Var tikai no atmiņas. 771 00:33:20,089 --> 00:33:23,130 Kaut kas noiet greizi ar getString, mēs esam ieguvuši, lai varētu rīkoties, ka. 772 00:33:23,130 --> 00:33:27,070 Un iemesls, kāpēc es nedomāju atgriezties null ir ka, tehniski, null ir rādītājs. 773 00:33:27,070 --> 00:33:29,120 getInt ir atgriezties int. 774 00:33:29,120 --> 00:33:31,060 Tāpēc es esmu patvaļīgi nolēma, būtībā, 775 00:33:31,060 --> 00:33:34,600 ka 2 miljardiem, sniegt vai pieņemt, gatavojas būt īpaša vērtība, ka es nekad nevar 776 00:33:34,600 --> 00:33:35,970 faktiski nokļūt no lietotāja. 777 00:33:35,970 --> 00:33:39,930 Tā ir tikai viena vērtība es eju tērēt pārstāvēt kļūdas kodu. 778 00:33:39,930 --> 00:33:41,540 >> Tāpēc tagad, lietas iegūt nedaudz iedomātā. 779 00:33:41,540 --> 00:33:44,670 Un tas nav gluži tas pats funkcija kā iepriekš, bet tas ir ļoti līdzīgs. 780 00:33:44,670 --> 00:33:50,120 Tātad paziņojums, es apliecinu šeit, saskaņā 172, gan int n un char c. 781 00:33:50,120 --> 00:33:53,600 Un tad es izmantot šo bailīgs līniju, sscanf, kas izrādās 782 00:33:53,600 --> 00:33:55,990 neskenē virkni no klaviatūras. 783 00:33:55,990 --> 00:33:59,226 Tā stāv esošo virkni, kas lietotājs jau drukāti. 784 00:33:59,226 --> 00:34:02,100 Tāpēc es jau sauc getString, kas nozīmē, ka man ir virkne atmiņā. 785 00:34:02,100 --> 00:34:05,020 sscanf ir tas, ko jūs vēlaties izsaukt parsēšana funkciju. 786 00:34:05,020 --> 00:34:07,760 Tas izskatās pēc virknes es esmu ierakstījāt, burtu pa burtam, 787 00:34:07,760 --> 00:34:09,250 un dara kaut ko noderīgu. 788 00:34:09,250 --> 00:34:10,969 Ka virkne tiek glabāta līniju. 789 00:34:10,969 --> 00:34:13,560 Un es zinu, ka tikai, dodoties dublēt šeit un saka, oh, OK, 790 00:34:13,560 --> 00:34:15,143 I sauc par to nav s šoreiz, bet līnijas. 791 00:34:15,143 --> 00:34:15,989 792 00:34:15,989 --> 00:34:18,080 >> Un tagad tas ir nedaudz atšķirīgs. 793 00:34:18,080 --> 00:34:22,480 Bet tas faktiski nozīmē, dēļ mēs nedaudz vilnis mūsu rokās ir šodien, 794 00:34:22,480 --> 00:34:26,070 ka mēs esam pārbaudi, lai redzēt, ja lietotājs drukāti 795 00:34:26,070 --> 00:34:29,909 un int un varbūt vēl raksturs. 796 00:34:29,909 --> 00:34:33,610 Ja lietotājs ierakstījāt int, tas ir būs jāuzglabā n, jo es esmu 797 00:34:33,610 --> 00:34:36,739 iet šo pēc adreses, Jaunais triks mēs esam redzējuši jau šodien. 798 00:34:36,739 --> 00:34:41,570 Ja lietotājs arī drukāti līdzīgā 123x, ka x 799 00:34:41,570 --> 00:34:45,060 gatavojas galu galā vēstule rakstzīmju c. 800 00:34:45,060 --> 00:34:48,739 >> Tagad izrādās, ka sscanf man pateikt, inteliģenti, 801 00:34:48,739 --> 00:34:54,750 cik mainīgie tika sscanf veiksmīgi spēj aizpildīt. 802 00:34:54,750 --> 00:34:58,770 Tātad, šīs loģikas, ja funkcija Es esmu īstenošanas ir getInt, 803 00:34:58,770 --> 00:35:00,900 bet es esmu pārbaudot, iespējams, lietotājam 804 00:35:00,900 --> 00:35:04,190 , ir drukāti int seko kaut ko citu, 805 00:35:04,190 --> 00:35:08,580 Ko es gribu sscanf s atgriešanās vērtība patiešām būtu? 806 00:35:08,580 --> 00:35:10,950 Ja mērķis ir iegūt tikai int no lietotāja? 807 00:35:10,950 --> 00:35:13,980 808 00:35:13,980 --> 00:35:19,300 >> Tātad, ja sscanf atdevi 2, ko tas nozīmē? 809 00:35:19,300 --> 00:35:21,660 Lietotājs drukāti kaut kas līdzīgs, burtiski, 810 00:35:21,660 --> 00:35:24,770 123x, kas ir vienkārši absurds. 811 00:35:24,770 --> 00:35:27,490 Tas ir kļūdas stāvoklis, un Es gribu, lai pārbaudītu to. 812 00:35:27,490 --> 00:35:32,960 >> Tātad, ja lietotājs veidiem tas, ko šī loģika, ko dara sscanf atgriezties, 813 00:35:32,960 --> 00:35:33,740 jūs teiktu? 814 00:35:33,740 --> 00:35:35,070 815 00:35:35,070 --> 00:35:39,130 Tātad, tas ir gatavojas atgriezties 2, jo 123 gatavojas iet šeit 816 00:35:39,130 --> 00:35:41,580 un x gatavojas galu galā šeit. 817 00:35:41,580 --> 00:35:43,970 Bet es nevēlos x saņemt piepildīta. 818 00:35:43,970 --> 00:35:48,580 Es gribu, lai sscanf tikai panākumus iepildīšanas pirmais tās mainīgo. 819 00:35:48,580 --> 00:35:52,490 Un tā tas ir iemesls, kāpēc es vēlas sscanf atgriezties 1. 820 00:35:52,490 --> 00:35:55,750 >> Un, ja tas ir mazliet virs galvas uz brīdi, ka ir pilnīgi naudas sodu. 821 00:35:55,750 --> 00:36:00,030 Saprast, lai gan, ka viens no vērtības getInt un getString 822 00:36:00,030 --> 00:36:03,630 ir tas, ka mēs darām heck kļūdu daudz pārbaudes, piemēram, tas, lai 823 00:36:03,630 --> 00:36:07,130 , ka līdz šim, jūs varat diezgan daudz kaut ko tipa tastatūras, 824 00:36:07,130 --> 00:36:08,490 un mēs nozvejas to. 825 00:36:08,490 --> 00:36:10,592 Un mēs, protams, darbinieki, būs noteikti nav 826 00:36:10,592 --> 00:36:13,300 būt avots bug jūsu programma, jo mēs esam aizsardzībai 827 00:36:13,300 --> 00:36:16,270 pārbaudes visiem stulba lietas, ko lietotājs var darīt, 828 00:36:16,270 --> 00:36:18,900 piemēram, ierakstot virkni, kad jūs patiešām vēlējās int. 829 00:36:18,900 --> 00:36:21,350 Tātad now-- mēs nāksim atpakaļ uz šo pirms long-- 830 00:36:21,350 --> 00:36:23,710 bet visu šo laiku, getString un getInt ir 831 00:36:23,710 --> 00:36:29,950 bijis zem pārsega, izmantojot šo Pamatideja adreses atmiņas. 832 00:36:29,950 --> 00:36:32,580 >> Tāpēc tagad, pieņemsim darīt lietas nedaudz vairāk lietotājam draudzīgu. 833 00:36:32,580 --> 00:36:38,740 Kā jūs varbūt atceraties, no Binky pēdējās LAIKU_ ja mana pele būs cooperate-- tik 834 00:36:38,740 --> 00:36:42,560 mums bija šo kodu, kas godīgi sakot, ir diezgan muļķīgi. 835 00:36:42,560 --> 00:36:45,330 Šis kods sasniedz neko noderīga, bet tas bija piemērs 836 00:36:45,330 --> 00:36:48,330 ka profesors Parlante izmanto, lai pārstāvēt 837 00:36:48,330 --> 00:36:51,840 kas notiek ar programma, kurā atmiņu. 838 00:36:51,840 --> 00:36:54,850 >> Tātad pieņemsim atstāstīt šī Stāsts super īsi. 839 00:36:54,850 --> 00:36:58,720 Šīs pirmās divas rindas, jo Angļu, vai ko, jūs teiktu? 840 00:36:58,720 --> 00:37:01,230 841 00:37:01,230 --> 00:37:05,430 Tikai samērā cilvēku, bet nedaudz tehniskie termini, pieņemt stab. 842 00:37:05,430 --> 00:37:06,346 AUDITORIJA: [nedzirdama]. 843 00:37:06,346 --> 00:37:07,705 844 00:37:07,705 --> 00:37:11,080 >> DAVID J. Malan: Labi, jūs izveidi adreses jūsu x un y mainīgajiem. 845 00:37:11,080 --> 00:37:15,520 Ne visai, ka x un y ir ne mainīgie tradicionālajā izpratnē. 846 00:37:15,520 --> 00:37:18,054 x un y ir adreses vai arī uzglabāt adresi. 847 00:37:18,054 --> 00:37:19,220 Tāpēc pamēģināsim to vēl vienu reizi. 848 00:37:19,220 --> 00:37:21,010 Nav slikts sākums, though. 849 00:37:21,010 --> 00:37:21,510 Yeah? 850 00:37:21,510 --> 00:37:22,426 >> AUDITORIJA: [nedzirdama]. 851 00:37:22,426 --> 00:37:23,966 852 00:37:23,966 --> 00:37:24,840 DAVID J. Malan: Labi. 853 00:37:24,840 --> 00:37:26,173 Es domāju, ka nedaudz tīrāku. 854 00:37:26,173 --> 00:37:28,630 Deklarēt divus norādes, divi veseli skaitļi. 855 00:37:28,630 --> 00:37:30,150 Un mēs aicinām viņus x un y. 856 00:37:30,150 --> 00:37:32,790 Vai, ja mēs būtu izdarīt to kā attēlu, atkal, 857 00:37:32,790 --> 00:37:36,410 atgādināt, gluži vienkārši, ka visi mēs darām ar šo pirmajā rindā 858 00:37:36,410 --> 00:37:39,690 ir zīmēšanas kaste, piemēram, tas, ar kādu atkritumu vērtību tajā, 859 00:37:39,690 --> 00:37:41,920 un aicinot to x, un pēc tam vēl kaste, piemēram, tas, 860 00:37:41,920 --> 00:37:43,880 ar kādu atkritumu vērtību tajā, aicinot to y. 861 00:37:43,880 --> 00:37:45,810 Mēs esam deklarētas divas norādes, ka galu galā 862 00:37:45,810 --> 00:37:47,860 saglabās adresi int. 863 00:37:47,860 --> 00:37:49,170 Tāpēc, ka viss tur. 864 00:37:49,170 --> 00:37:53,290 >> Tātad, ja Binky izdarīja, māla tāpat izskatījās. 865 00:37:53,290 --> 00:37:55,350 Un Nick tikko veida apkopoja bultas, 866 00:37:55,350 --> 00:37:57,590 it kā viņi nav norādot nekur it īpaši tāpēc, ka viņi vienkārši 867 00:37:57,590 --> 00:37:58,250 atkritumu vērtības. 868 00:37:58,250 --> 00:38:01,670 Viņi nav skaidri inicializēts jebkur īpaši. 869 00:38:01,670 --> 00:38:03,980 >> Tagad nākamais līnija kods, atgādināt, bija šī. 870 00:38:03,980 --> 00:38:07,510 Tātad samērā draudzīga, bet nedaudz tehniskās angļu, 871 00:38:07,510 --> 00:38:09,790 kāda ir šī līnija kods dara? 872 00:38:09,790 --> 00:38:10,391 Yeah? 873 00:38:10,391 --> 00:38:11,333 >> AUDITORIJA: [nedzirdama]. 874 00:38:11,333 --> 00:38:12,746 875 00:38:12,746 --> 00:38:13,950 >> DAVID J. Malan: Perfect. 876 00:38:13,950 --> 00:38:17,016 Tas piešķirot rieciens atmiņu, kas ir lielums int. 877 00:38:17,016 --> 00:38:18,140 Un tas ir puse atbilde. 878 00:38:18,140 --> 00:38:20,056 Jūs atbildēja tiesības puse no izteiksmes. 879 00:38:20,056 --> 00:38:22,473 Kas notiek kreisā pusē vienādības zīmi? 880 00:38:22,473 --> 00:38:22,972 Yeah? 881 00:38:22,972 --> 00:38:24,814 AUDITORIJA: Un pēcteči to mainīgo x? 882 00:38:24,814 --> 00:38:27,690 >> DAVID J. Malan: Un pēcteči to mainīgo x. 883 00:38:27,690 --> 00:38:31,650 Tātad, lai Atgādinājums, labajā pusē piešķir pietiekami daudz atmiņas, lai saglabātu int. 884 00:38:31,650 --> 00:38:34,150 Bet malloc īpaši atgriež adresi 885 00:38:34,150 --> 00:38:37,270 Minētā rieciens atmiņas, kas jūs esat tikko ierosināja izpaužas uzglabā x. 886 00:38:37,270 --> 00:38:42,560 >> Tātad, ko Niks darīja pēdējo reizi ar Binky ir viņš vilka šo rādītāju, kas, māls, 887 00:38:42,560 --> 00:38:46,820 norādīt tagad baltu rieciens atmiņas , kas ir vienāds ar izmēru int. 888 00:38:46,820 --> 00:38:49,360 Un, protams, ka ir domāts pārstāvēt četri baiti. 889 00:38:49,360 --> 00:38:55,310 >> Tagad, nākamais rindā kodu to izdarīja, zvaigzne x izpaužas 42. 890 00:38:55,310 --> 00:38:58,530 Tātad 42 ir vienkārša uz labajā pusē, dzīves jēga. 891 00:38:58,530 --> 00:39:00,500 Kreisajā pusē, zvaigzne x nozīmē ko? 892 00:39:00,500 --> 00:39:01,600 893 00:39:01,600 --> 00:39:03,280 Ka pārāk varētu būt gone-- tas ir OK. 894 00:39:03,280 --> 00:39:04,220 OK. 895 00:39:04,220 --> 00:39:06,875 >> AUDITORIJA: Būtībā, dodieties uz [nedzirdama] 896 00:39:06,875 --> 00:39:07,750 DAVID J. Malan: Labi. 897 00:39:07,750 --> 00:39:08,760 AUDITORIJA: [nedzirdama]. 898 00:39:08,760 --> 00:39:09,760 DAVID J. Malan: Tieši tā. 899 00:39:09,760 --> 00:39:11,979 Kreisā puse nozīmē iet ar x. 900 00:39:11,979 --> 00:39:12,520 x ir adrese. 901 00:39:12,520 --> 00:39:15,520 Tas ir tāpat kā 33 Oxford Street, vai OX1. 902 00:39:15,520 --> 00:39:18,690 Un zvaigzne x nozīmē doties, ka risināt un īstenot to, ko tur? 903 00:39:18,690 --> 00:39:19,520 42. 904 00:39:19,520 --> 00:39:21,290 >> Tik tiešām, tas ir tieši tas, ko Niks darīja. 905 00:39:21,290 --> 00:39:23,740 Viņš sāka ar BY, būtībā, garīgi 906 00:39:23,740 --> 00:39:26,270 norādot pirkstu pie x, pēc bultiņas 907 00:39:26,270 --> 00:39:30,670 uz balto lodziņā labajā pusē, un liekot numuru 42 tur. 908 00:39:30,670 --> 00:39:34,120 Bet tad lietas got mazliet bīstami, vai ne? 909 00:39:34,120 --> 00:39:35,860 Binky ir apmēram, lai zaudēt galvu. 910 00:39:35,860 --> 00:39:39,465 >> Star y vienāds 13, nelaime, nozīmē ko? 911 00:39:39,465 --> 00:39:43,620 Tātad zvaigžņu y līdzekļi doties uz adresi y. 912 00:39:43,620 --> 00:39:45,630 Bet kāda ir adrese y? 913 00:39:45,630 --> 00:39:47,899 914 00:39:47,899 --> 00:39:49,440 Nu labi, tas ir atkritumu vērtību, vai ne? 915 00:39:49,440 --> 00:39:50,800 Es vērsa to kā jautājuma zīmi. 916 00:39:50,800 --> 00:39:54,850 Niks izvilka to kā sarullēta augšu bultiņu. 917 00:39:54,850 --> 00:39:59,600 Un, tiklīdz jūs mēģināt do zvaigzne y, sakot iet uz turieni, 918 00:39:59,600 --> 00:40:03,872 bet nav likumīgs adrese, tas ir daži viltus atrašanās vietu, 919 00:40:03,872 --> 00:40:05,080 programma gatavojas crash. 920 00:40:05,080 --> 00:40:08,580 Un Binky galva dodas aizlidot šeit, kā tas notika. 921 00:40:08,580 --> 00:40:12,130 >> Tātad galu galā, šajā programmā bija tikai dzīvoklis, plaisāt. 922 00:40:12,130 --> 00:40:13,540 Tas bija buggy programmu. 923 00:40:13,540 --> 00:40:14,760 Un tas nepieciešams, lai tiktu fiksēts. 924 00:40:14,760 --> 00:40:18,260 Un vienīgais veids, patiešām, to salabot varētu būt, piemēram, šī līnija, 925 00:40:18,260 --> 00:40:21,010 kas mums nav pat nokļūt, jo programma avarēja pārāk ātri. 926 00:40:21,010 --> 00:40:26,170 Bet, ja mēs būtu noteikt to, kādi efekts nav darot y vienāds x ir? 927 00:40:26,170 --> 00:40:30,010 Nu, tā būtībā norāda y at kāda vērtība x ir vērsta uz. 928 00:40:30,010 --> 00:40:32,430 >> Tātad Nika stāsts, vai Binky stāsts, gan 929 00:40:32,430 --> 00:40:34,640 x un y ir pavērsts balta rieciens atmiņas, 930 00:40:34,640 --> 00:40:38,300 tā, ka, beidzot, ja jums Vai zvaigzne y vienāds 13 atkal, 931 00:40:38,300 --> 00:40:43,080 jūs galu galā liekot 13 in piemērotu vietu. 932 00:40:43,080 --> 00:40:47,640 Tātad visas šīs līnijas ir perfekti pamatotas, izņemot šo vienu, 933 00:40:47,640 --> 00:40:51,730 kad tas notika pirms jums faktiski piešķirts y dažas vērtības. 934 00:40:51,730 --> 00:40:54,290 >> Tagad par laimi, jums nav ir spriest cauri visiem 935 00:40:54,290 --> 00:40:56,560 no šiem jautājumiem veida uz savu. 936 00:40:56,560 --> 00:40:59,310 Ļaujiet man iet uz priekšu un atvērt up termināla logā šeit 937 00:40:59,310 --> 00:41:03,050 un atvērt, tikai brīdi, super īsa programma, kas 938 00:41:03,050 --> 00:41:04,360 arī ir sava veida bezjēdzīgi. 939 00:41:04,360 --> 00:41:05,152 Tas ir neglīts. 940 00:41:05,152 --> 00:41:06,610 Tas nav sasniegt kaut ko noderīgu. 941 00:41:06,610 --> 00:41:10,180 Bet tas jāpierāda jautājumus atmiņas, tāpēc pieņemsim to apskatīt. 942 00:41:10,180 --> 00:41:11,830 >> Galvenais, super vienkārši. 943 00:41:11,830 --> 00:41:14,830 Tā acīmredzot aicina funkciju, f, un pēc tam atgriež 0. 944 00:41:14,830 --> 00:41:16,310 Tas ir sava veida grūti sajaukt šo augšu. 945 00:41:16,310 --> 00:41:18,540 Tātad galvenais ir diezgan labs, līdz šim. 946 00:41:18,540 --> 00:41:20,100 >> Tātad f ir problemātiska. 947 00:41:20,100 --> 00:41:22,120 Un vienkārši nelika daudz pūles uz nosaucot to 948 00:41:22,120 --> 00:41:23,990 šeit, lai saglabātu koncentrēties uz kodu. 949 00:41:23,990 --> 00:41:25,740 f ir divas līnijas. 950 00:41:25,740 --> 00:41:27,610 Un pieņemsim redzēt, kas tagad notiek. 951 00:41:27,610 --> 00:41:29,840 Tātad, no vienas puses here-- un ļaujiet man 952 00:41:29,840 --> 00:41:32,680 tas saskaņā ar iepriekšējo example--, no vienas puses, 953 00:41:32,680 --> 00:41:35,830 kreisā puse ir dara to, ko angļu valodā? 954 00:41:35,830 --> 00:41:36,493 Tā is-- 955 00:41:36,493 --> 00:41:37,701 AUDITORIJA: Radīt rādītāju. 956 00:41:37,701 --> 00:41:40,830 DAVID J. Malan: Radīt rādītāju int un aicinot to x. 957 00:41:40,830 --> 00:41:43,789 Tātad, tas ir radīt vienu no šiem kastes Es turpinu zīmēšanas skārienekrānā. 958 00:41:43,789 --> 00:41:45,913 Un tagad, uz labās rokas pusē, malloc, protams, 959 00:41:45,913 --> 00:41:47,420 novirza rieciens atmiņas. 960 00:41:47,420 --> 00:41:49,989 Un tikai, lai būtu skaidrs, cik daudz atmiņas ir tas acīmredzot 961 00:41:49,989 --> 00:41:52,030 piešķirot, ja jūs vienkārši veida do math šeit? 962 00:41:52,030 --> 00:41:53,200 963 00:41:53,200 --> 00:41:54,040 >> Tātad, tas ir 40 baiti. 964 00:41:54,040 --> 00:41:57,400 Un es zinu, ka tikai tāpēc, ka es zinu int, uz CS50 ierīces, vismaz 965 00:41:57,400 --> 00:41:58,060 ir četri baiti. 966 00:41:58,060 --> 00:41:59,610 SO 10 reizes 4 ir 40. 967 00:41:59,610 --> 00:42:04,924 Tātad šis ir uzglabāt par x, adrese no pirmā no 40 ints, ka 968 00:42:04,924 --> 00:42:07,340 ir piešķirti telpu atpakaļ, atpakaļ, atpakaļ, uz muguras. 969 00:42:07,340 --> 00:42:08,470 >> Un tas, kas ir galvenais par malloc. 970 00:42:08,470 --> 00:42:11,261 Tas neņem maz atmiņas šeit, mazliet šeit, mazliet šeit. 971 00:42:11,261 --> 00:42:14,220 Tas dod jums vienu rieciens atmiņas, contiguously, no pamatdarbības 972 00:42:14,220 --> 00:42:15,240 sistēmu. 973 00:42:15,240 --> 00:42:18,500 >> Tagad to, ko par šo, x kronšteins 10 ir vienāds ar 0? 974 00:42:18,500 --> 00:42:19,470 Patvaļīga līnija kodu. 975 00:42:19,470 --> 00:42:21,100 Tas nav sasniegt kaut ko noderīgu. 976 00:42:21,100 --> 00:42:26,128 Bet tas ir interesanti, jo x kronšteinu 10--? 977 00:42:26,128 --> 00:42:26,628 Yeah? 978 00:42:26,628 --> 00:42:27,912 >> Mērķauditorija: [dzirdams]? 979 00:42:27,912 --> 00:42:30,500 >> DAVID J. Malan: x kronšteins 10 nav jābūt null. 980 00:42:30,500 --> 00:42:35,070 Null detaļa tikai nāk spēlēt ar stīgām, beigās virknes. 981 00:42:35,070 --> 00:42:36,700 Bet laba doma. 982 00:42:36,700 --> 00:42:39,615 >> Cik liels tas ir masīvs, pat lai gan es esmu piešķirti 40 baiti? 983 00:42:39,615 --> 00:42:42,560 984 00:42:42,560 --> 00:42:43,690 Tas ir 0 līdz deviņi, vai ne? 985 00:42:43,690 --> 00:42:45,120 Tas ir 10 ints, kopā. 986 00:42:45,120 --> 00:42:48,790 40 baiti, bet 10 ints, indeksētas 0 caur 0. 987 00:42:48,790 --> 00:42:50,930 >> Tātad, kas ir tas, ka x stiprinājums 10? 988 00:42:50,930 --> 00:42:53,090 Tas ir tiešām daži nezināms atkritumu vērtība. 989 00:42:53,090 --> 00:42:54,780 Tas ir atmiņu, kas nepieder man. 990 00:42:54,780 --> 00:42:59,650 Es nebūtu aizkustinošs, ka baitu skaitu 41, 42, 43, 44. 991 00:42:59,650 --> 00:43:01,420 Es esmu mazliet pārāk tālu. 992 00:43:01,420 --> 00:43:04,490 >> Un tiešām, ja es palaistu šo programmas, tas varētu ļoti labi crash. 993 00:43:04,490 --> 00:43:05,790 Bet dažreiz, mēs saņemsiet laimīgs. 994 00:43:05,790 --> 00:43:07,706 Un tā tikai, lai pierādītu this-- un atklāti, 995 00:43:07,706 --> 00:43:11,000 Jūs nekad zināt, pirms jums do it-- pieņemsim palaist šo. 996 00:43:11,000 --> 00:43:12,480 Tas faktiski nav crash. 997 00:43:12,480 --> 00:43:15,032 >> Bet, ja es to mainītu, lai Piemēram, lai būtu tāpat kā 1000, 998 00:43:15,032 --> 00:43:16,740 lai tas tiešām apzināta, redzēsim 999 00:43:16,740 --> 00:43:18,710 ja mēs varam iegūt to crash šoreiz. 1000 00:43:18,710 --> 00:43:20,070 Labi, tas nav crash. 1001 00:43:20,070 --> 00:43:22,600 Kā par 100,000? 1002 00:43:22,600 --> 00:43:25,000 Pieņemsim pārtaisīt to, un tagad atkārto to. 1003 00:43:25,000 --> 00:43:25,500 OK. 1004 00:43:25,500 --> 00:43:25,960 Phew. 1005 00:43:25,960 --> 00:43:26,460 Viss labi. 1006 00:43:26,460 --> 00:43:29,090 Tātad acīmredzot, atkal, tie segmenti atmiņas, tā teikt, 1007 00:43:29,090 --> 00:43:32,660 ir pietiekami liels, lai mēs varam saņemt laimīgs atkal un atkal. 1008 00:43:32,660 --> 00:43:36,510 Bet galu galā, kad jūs saņemsiet smieklīgi un tiešām iet tālu uz ekrāna, 1009 00:43:36,510 --> 00:43:39,120 jūs pieskarties atmiņu, ka tiešām, tiešām nav pieder jums. 1010 00:43:39,120 --> 00:43:40,870 >> Bet atklāti sakot, šie veidu bugs gatavojas 1011 00:43:40,870 --> 00:43:43,020 būt grūtāk un grūtāk , lai noskaidrotu par savu. 1012 00:43:43,020 --> 00:43:47,880 Bet, par laimi, jo programmētāji, mums ir rīki, kas ļauj mums to darīt mums. 1013 00:43:47,880 --> 00:43:50,140 Tātad šis ir, iespējams, viens no ugliest programmu, 1014 00:43:50,140 --> 00:43:52,060 pat neglītāks nekā GDB izlaidi. 1015 00:43:52,060 --> 00:43:55,670 Bet tas vienmēr ir līnija vai divi, kas ir super noderīga. 1016 00:43:55,670 --> 00:44:00,310 >> Valgrind ir programma, kas palīdz Jums nav atkļūdot programmu, per se, 1017 00:44:00,310 --> 00:44:03,500 bet atrast atmiņas saistīto problēmas, jo īpaši. 1018 00:44:03,500 --> 00:44:07,590 Tas automātiski palaist savu kodu Jūs un meklēt vismaz divām lietām. 1019 00:44:07,590 --> 00:44:10,680 Viens, jūs kaut ko darīt nejauša patīk touch atmiņu 1020 00:44:10,680 --> 00:44:11,980 kas nepiederēja pie jums? 1021 00:44:11,980 --> 00:44:13,590 Tas palīdzēs jums atrast šos gadījumus. 1022 00:44:13,590 --> 00:44:15,710 >> Un divas, tas palīdzēs jūs atradīsiet kaut ko sauc par 1023 00:44:15,710 --> 00:44:19,270 atmiņas noplūdes, kas mums ir pilnīgi ignorēts, naivi, 1024 00:44:19,270 --> 00:44:21,380 kādu laiku un svētlaimīgi. 1025 00:44:21,380 --> 00:44:23,140 Bet izrādās, viss šoreiz, kad 1026 00:44:23,140 --> 00:44:26,620 esat sauc getString in tik daudzi no mūsu programmas, 1027 00:44:26,620 --> 00:44:28,930 tu jautā darboties sistēmas atmiņā, 1028 00:44:28,930 --> 00:44:32,070 bet jums ir jauna savākt no kādreiz piešķirot tai 1029 00:44:32,070 --> 00:44:36,169 atpakaļ, darot NEPIEŠĶ, vai bez maksas, kā to sauc. 1030 00:44:36,169 --> 00:44:37,960 Nē, jo mēs esam nekad lūdza jums to darīt. 1031 00:44:37,960 --> 00:44:41,250 >> Bet visu šo laiku, programmas jūs esat rakstiski C 1032 00:44:41,250 --> 00:44:43,800 Ir noplūde atmiņu, lūdzot darboties 1033 00:44:43,800 --> 00:44:46,190 sistēma vairāk un vairāk atmiņa stīgām un plauktiņš, 1034 00:44:46,190 --> 00:44:47,870 bet nekad nododot to atpakaļ. 1035 00:44:47,870 --> 00:44:50,080 Un tagad tas ir nedaudz par realitātei, 1036 00:44:50,080 --> 00:44:53,550 bet, ja jūs esat kādreiz palaist jūsu Mac vai datora uz ilgu laiku, atvēršanu 1037 00:44:53,550 --> 00:44:55,790 daudz programmu, varbūt slēdzot programmas, 1038 00:44:55,790 --> 00:44:57,795 un pat ja jūsu dators nav crashed, 1039 00:44:57,795 --> 00:45:01,690 tas kļūst tik daudz lēnāk, it kā tas ir patiešām 1040 00:45:01,690 --> 00:45:04,290 izmantojot daudz atmiņas vai resursi, lai gan, 1041 00:45:04,290 --> 00:45:06,070 Ja jūs neesat pat pieskaras tastatūra, 1042 00:45:06,070 --> 00:45:10,430 kas varētu be-- bet always-- varētu būt, ka programmas jūs strādājat 1043 00:45:10,430 --> 00:45:11,920 ir paši atmiņas noplūde. 1044 00:45:11,920 --> 00:45:15,645 Un viņi pastāvīgi lūdzot OS vairāk un vairāk atmiņas, bet aizmirstot par to, 1045 00:45:15,645 --> 00:45:18,470 faktiski nelietojat, bet Tāpēc, ņemot atmiņu prom 1046 00:45:18,470 --> 00:45:20,500 no citām programmām, kas varētu to vēlas. 1047 00:45:20,500 --> 00:45:23,940 Tā ka ir kopīga izskaidrojums. 1048 00:45:23,940 --> 00:45:25,940 Tagad šeit ir, ja Valgrind s produkcija ir pilnīgi 1049 00:45:25,940 --> 00:45:29,290 zvērīgās tiem mazāk un ērtāku līdzīgi. 1050 00:45:29,290 --> 00:45:32,690 Bet interesanti sīkumi ir labi šeit. 1051 00:45:32,690 --> 00:45:37,060 Tā stāsta man nederīgu rakstīt par lielums četras notiek šajā programmā, 1052 00:45:37,060 --> 00:45:40,640 it īpaši, ir no memory.c 21 līnijas. 1053 00:45:40,640 --> 00:45:45,450 >> Ja es eju uz 21 līnija, hm, tur patiešām ir nederīgs rakstīt izmēru četri. 1054 00:45:45,450 --> 00:45:46,250 Kāpēc lielums četras? 1055 00:45:46,250 --> 00:45:49,500 Nu, tas number-- un tas varētu būt anything-- ir int. 1056 00:45:49,500 --> 00:45:50,450 Tātad, tas ir četri baiti. 1057 00:45:50,450 --> 00:45:52,550 Tāpēc es esmu liekot četri baiti ja tie nepieder. 1058 00:45:52,550 --> 00:45:55,080 Tas ir kāda Valgrind faktiski stāsta man. 1059 00:45:55,080 --> 00:45:57,600 Turklāt, tas būs arī man pateikt, kā mēs redzēsim, 1060 00:45:57,600 --> 00:46:01,490 kā jūs darbināt šo nākotnes PSET, ja un kad esat noplūda atmiņu, kas patiešām 1061 00:46:01,490 --> 00:46:05,300 Man ir, jo es esmu sauc malloc, bet man nav reāli 1062 00:46:05,300 --> 00:46:08,010 sauc, šajā gadījumā, brīva ko mēs galu galā redzēt 1063 00:46:08,010 --> 00:46:09,830 ir pretējs malloc. 1064 00:46:09,830 --> 00:46:10,860 1065 00:46:10,860 --> 00:46:12,930 >> Tāpēc tagad, es domāju, galīgo piemēru. 1066 00:46:12,930 --> 00:46:14,050 1067 00:46:14,050 --> 00:46:16,690 Tāpēc šī ir nedaudz vairāk mistisks, bet tas ir iespējams 1068 00:46:16,690 --> 00:46:19,180 Lielākais iemesls jābūt uzmanīgiem ar atmiņu, 1069 00:46:19,180 --> 00:46:24,490 un iemesls tam, ka daudzas programmas un / vai web serveri, pat līdz šai dienai, 1070 00:46:24,490 --> 00:46:28,200 pārņem sliktajiem puišiem kaut kur internetā, kas ir kaut kādā veidā 1071 00:46:28,200 --> 00:46:33,390 nosūtot viltus paketes uz jūsu serveri mēģinot apdraudēt savus kontus, 1072 00:46:33,390 --> 00:46:36,420 vai veikt savus datus, vai vienkārši parasti pārņemt mašīnu. 1073 00:46:36,420 --> 00:46:38,910 Bufera pārpildes, jo nosaukums liecina, līdzekļus 1074 00:46:38,910 --> 00:46:40,740 pārpildīta nevis int, bet buferi. 1075 00:46:40,740 --> 00:46:43,490 Un buferis ir tikai iedomātā veids no sakot, ka tas ir ķekars atmiņas. 1076 00:46:43,490 --> 00:46:46,710 >> Un tiešām, es sauc string Pirms buferi, nevis s. 1077 00:46:46,710 --> 00:46:49,234 Jo, ja tas ir buferis, tāpat kā YouTube nozīmē, 1078 00:46:49,234 --> 00:46:52,400 vai jebkurā laikā, skatoties video, Jums varētu būt redzējis vārdu buferizācijas, 1079 00:46:52,400 --> 00:46:53,040 dot, dot, dot. 1080 00:46:53,040 --> 00:46:54,240 Tas ir neticami kaitinošas. 1081 00:46:54,240 --> 00:46:55,990 Un tas tikai nozīmē, ka jūsu video atskaņotājs 1082 00:46:55,990 --> 00:46:58,710 mēģina lejupielādēt daudz baitu, daudz baitu 1083 00:46:58,710 --> 00:47:00,170 no video no interneta. 1084 00:47:00,170 --> 00:47:02,920 Bet tas ir lēns, tāpēc tas mēģina lai lejupielādētu ķekars no tiem 1085 00:47:02,920 --> 00:47:06,430 aizpildīt buferi, konteinera tā, ka Jums ir pietiekami daudz baiti, ka tas ir iespējams, tad 1086 00:47:06,430 --> 00:47:09,174 parādīs video, bez pauzes pastāvīgi. 1087 00:47:09,174 --> 00:47:11,340 Bet izrādās, jūs varat ir buferis, lai šī lielā. 1088 00:47:11,340 --> 00:47:15,710 Bet mēģināt likt šo daudz datus tā, un ļoti sliktas lietas var notikt. 1089 00:47:15,710 --> 00:47:22,780 Tātad, piemēram, aplūkosim šo galīgo teaser par piemēru. 1090 00:47:22,780 --> 00:47:24,720 Šī ir vēl viena programma ka, pēc pirmā acu uzmetiena, 1091 00:47:24,720 --> 00:47:26,540 nedara neko super noderīgu. 1092 00:47:26,540 --> 00:47:29,590 Tas ir ieguvuši galveno funkciju , kas aicina šo funkciju, f. 1093 00:47:29,590 --> 00:47:36,640 Un, ka funkcija, f, šeit, ir char masīvs, sauc c, no to lieluma 12. 1094 00:47:36,640 --> 00:47:39,340 Un tad tas ir, izmantojot šo jauna funkcija sauc strncpy. 1095 00:47:39,340 --> 00:47:40,430 1096 00:47:40,430 --> 00:47:45,190 >> Izrādās, ka ar šo vienkāršo, vienkāršu līniju kodu, tikai divas līnijas, 1097 00:47:45,190 --> 00:47:49,130 mēs esam veikuši visu savu programmu, un tāpēc visa mana datora, 1098 00:47:49,130 --> 00:47:54,000 un mans lietotāja konts, un mans cietais vadīt potenciāli neaizsargāti ikvienam 1099 00:47:54,000 --> 00:47:58,170 kas zina, un ir pietiekami labs, lai palaistu šī programma ar noteiktu komandrindu 1100 00:47:58,170 --> 00:47:58,900 arguments. 1101 00:47:58,900 --> 00:48:03,400 Citiem vārdiem sakot, ja tas slikts puisis liek iekšā argvargv [1], ierakstot 1102 00:48:03,400 --> 00:48:08,750 pie klaviatūras ļoti speciāli izstrādāts string, nevis abc, 123, bet būtībā, 1103 00:48:08,750 --> 00:48:15,180 binārās simboli izpildāmā kods, programma, kas viņš vai viņa rakstīja, 1104 00:48:15,180 --> 00:48:19,190 ar šo vienkāršo programmu, kas pārstāvis tūkstošiem programmu 1105 00:48:19,190 --> 00:48:23,610 kas ir līdzīgi neaizsargāti, daresay, viņš vai viņa galu galā var izdzēst visu 1106 00:48:23,610 --> 00:48:26,680 failus uz manu cieto disku, iegūt mirgo ātri, lai viņš vai viņa var 1107 00:48:26,680 --> 00:48:30,170 tipa komandas par to pašu, rakstiet visus failus pie sevis. 1108 00:48:30,170 --> 00:48:34,660 Jebkas, ko es varu darīt, viņš vai viņa var darīt ar šo kodu. 1109 00:48:34,660 --> 00:48:36,575 >> Mēs ne gluži atrisināt šo ziņu. 1110 00:48:36,575 --> 00:48:38,700 Un patiesībā, tas būs iesaistīt mazliet attēlu 1111 00:48:38,700 --> 00:48:41,470 kā šis, ko mēs drīz nāks saprast visu labāk. 1112 00:48:41,470 --> 00:48:44,480 Bet šodien, pieņemsim beidzas to, kas ir, cerams, nedaudz vairāk 1113 00:48:44,480 --> 00:48:48,360 saprotams xkcd joks, kamēr mēs atsākt nākamreiz. 1114 00:48:48,360 --> 00:48:51,100 1115 00:48:51,100 --> 00:48:51,600 Viss labi. 1116 00:48:51,600 --> 00:48:53,446 Tiekamies trešdien. 1117 00:48:53,446 --> 00:48:54,754 >> [Mūzikas atskaņošanai] 1118 00:48:54,754 --> 00:48:57,790 >> SPEAKER: Un tagad, dziļi domas, ko Daven Farnham. 1119 00:48:57,790 --> 00:49:00,890 1120 00:49:00,890 --> 00:49:04,770 Atmiņa ir kā lekt kaudzē zelta atstāj uz svētdienas pēcpusdienā. 1121 00:49:04,770 --> 00:49:09,000 Vējš pūš, tossing savu hair-- ak, es garām dienas when-- 1122 00:49:09,000 --> 00:49:11,100 1123 00:49:11,100 --> 00:49:12,650 >> [Smiekli] 1124 00:49:12,650 --> 00:49:13,750