1 00:00:00,000 --> 00:00:03,381 >> [Muusika mängib] 2 00:00:03,381 --> 00:00:10,626 3 00:00:10,626 --> 00:00:11,610 >> [Video taasesitus] 4 00:00:11,610 --> 00:00:13,640 >> -Ta Valetab. 5 00:00:13,640 --> 00:00:14,380 >> -Millest? 6 00:00:14,380 --> 00:00:17,182 >> Ma ei tea. 7 00:00:17,182 --> 00:00:19,990 >> -Nii, Mida me teame? 8 00:00:19,990 --> 00:00:23,145 >> -See 9.15 järele, Ray Santoya oli ATM. 9 00:00:23,145 --> 00:00:23,644 Jah. 10 00:00:23,644 --> 00:00:27,030 Seega on küsimus selles, mida oli ta teinud on 9:16? 11 00:00:27,030 --> 00:00:29,720 >> -Shooting 9 millimeetri midagi. 12 00:00:29,720 --> 00:00:31,540 Võib-olla ta nägi snaiper. 13 00:00:31,540 --> 00:00:33,412 >> -or Töötas koos temaga. 14 00:00:33,412 --> 00:00:34,340 >> Oota. 15 00:00:34,340 --> 00:00:36,200 Mine tagasi ühe. 16 00:00:36,200 --> 00:00:36,975 >> -Mida sa näed? 17 00:00:36,975 --> 00:00:44,400 18 00:00:44,400 --> 00:00:47,805 >> -Bring Tema nägu üles täisekraanil. 19 00:00:47,805 --> 00:00:48,680 >> -Tema Prille. 20 00:00:48,680 --> 00:00:50,060 >> -On See peegeldus. 21 00:00:50,060 --> 00:01:00,455 22 00:01:00,455 --> 00:01:02,280 >> -See On Nuevitas pesapalli meeskond. 23 00:01:02,280 --> 00:01:03,110 See on nende logo. 24 00:01:03,110 --> 00:01:05,820 >> -Ja Ta räägib Kes kannab selle jope. 25 00:01:05,820 --> 00:01:06,670 >> [Taasesituse lõpetamiseks] 26 00:01:06,670 --> 00:01:07,628 >> DAVID Humala: Okei. 27 00:01:07,628 --> 00:01:11,210 See on CS50 ja see on natuke rohkem on [kuuldamatu], millega sa oled 28 00:01:11,210 --> 00:01:12,890 espalla probleem seatud neli. 29 00:01:12,890 --> 00:01:16,606 Täna hakkame vaatama natuke rohkem sügavalt neid asju nimetatakse suunanäitajaks, 30 00:01:16,606 --> 00:01:18,480 mis, kuigi see on päris kauge teema, 31 00:01:18,480 --> 00:01:20,813 Selgub, et see läheb olema vahendid, mille me 32 00:01:20,813 --> 00:01:24,320 võib alustada hoone ja kokkupanek palju keerukam programme. 33 00:01:24,320 --> 00:01:28,150 Aga me tegime seda eelmisel kolmapäeval teel mõned claymation esimene. 34 00:01:28,150 --> 00:01:30,190 Nii et see, meenutavad, on Binky ja me kasutasime teda 35 00:01:30,190 --> 00:01:33,148 võtta pilk programm, mis tegelikult ei tee midagi huvitavat, 36 00:01:33,148 --> 00:01:34,950 kuid ta tegi paljastada mõningaid probleeme. 37 00:01:34,950 --> 00:01:38,570 Nii algab täna, miks me ei kõnni kiiresti läbi mõned neist sammudest, 38 00:01:38,570 --> 00:01:41,920 proovida ajama inimese mõttes täpselt, mis toimub siin 39 00:01:41,920 --> 00:01:45,410 ja miks see on halb, ja seejärel liikuda ja tegelikult alustada hoone midagi 40 00:01:45,410 --> 00:01:46,309 seda tehnikat? 41 00:01:46,309 --> 00:01:48,350 Nii et need olid esimesed kaks rida selles programmis 42 00:01:48,350 --> 00:01:51,340 ja üldarusaadavat mõttes, mida on need kaks rida läheb? 43 00:01:51,340 --> 00:01:55,600 Keegi, kes on piisavalt mugav mida on deklareeritud ekraanil? 44 00:01:55,600 --> 00:01:58,340 45 00:01:58,340 --> 00:02:00,120 Mis on need kaks rida läheb? 46 00:02:00,120 --> 00:02:02,070 See pole veel kõik, mis erineb nädal üks, 47 00:02:02,070 --> 00:02:03,611 kuid seal on mõned uued eriline sümbol. 48 00:02:03,611 --> 00:02:04,152 Jah? 49 00:02:04,152 --> 00:02:05,628 Tagasi olemas. 50 00:02:05,628 --> 00:02:07,092 >> Sihtrühm: deklareerimine viiteid? 51 00:02:07,092 --> 00:02:08,050 DAVID Humala: Ütle uuesti? 52 00:02:08,050 --> 00:02:08,860 Sihtrühm: deklareerimine viiteid? 53 00:02:08,860 --> 00:02:11,776 DAVID Humala: deklareerimine viiteid ja olgem viimistleda natuke rohkem. 54 00:02:11,776 --> 00:02:14,050 Sihtrühm: [kuuldamatu] aadress x ja siis y. 55 00:02:14,050 --> 00:02:15,300 DAVID Humala: Ja siis tegeleda. 56 00:02:15,300 --> 00:02:18,550 Nii konkreetselt, mida me teeme on meie kuulutatakse kahe muutuja. 57 00:02:18,550 --> 00:02:21,252 Need muutujad, aga ei kavatse tüübiks int täht, mis 58 00:02:21,252 --> 00:02:23,210 täpsemalt tähendab nad ei kavatse hoida 59 00:02:23,210 --> 00:02:26,450 aadressi int, vastavalt x ja y. 60 00:02:26,450 --> 00:02:27,660 Nüüd on olemas väärtused? 61 00:02:27,660 --> 00:02:32,621 Kas on olemas tegelik aadressid nendes Kahe muutuja on sel hetkel? 62 00:02:32,621 --> 00:02:33,120 Ei. 63 00:02:33,120 --> 00:02:35,030 See on lihtsalt nn prügi väärtusi. 64 00:02:35,030 --> 00:02:38,120 Kui sul ei ole tegelikult määrata muutuja, mis iganes oli RAM 65 00:02:38,120 --> 00:02:42,224 Varem läheb täita nullidega ja need mõlemad need muutujad. 66 00:02:42,224 --> 00:02:44,140 Aga me ei tea veel mida nad on ja mis on 67 00:02:44,140 --> 00:02:47,060 saab olema võti, miks Binky kaotas pea eelmisel nädalal. 68 00:02:47,060 --> 00:02:49,980 >> Nii et see oli claymation kehastus selles 69 00:02:49,980 --> 00:02:53,580 millega sa pead lihtsalt kahe muutuja, väike ümmargune tükki savi, 70 00:02:53,580 --> 00:02:57,330 mida saab salvestada muutujad, kuid kuna Pakitud ülesnoolega näitavad, 71 00:02:57,330 --> 00:03:00,640 nad tegelikult ei juhtides kõikjal tuntud. 72 00:03:00,640 --> 00:03:03,670 Siis pidime selle rea, ja seda oli uus eelmisel nädalal, malloc mälu 73 00:03:03,670 --> 00:03:07,130 jaotamist, mis on lihtsalt fancy viis ütlen operatsioonisüsteem, Linux 74 00:03:07,130 --> 00:03:09,750 või Mac OS või Windows, hei, anna mulle mällu, 75 00:03:09,750 --> 00:03:11,780 ja kõik mida sa pead ütlema operatsioonisüsteemi 76 00:03:11,780 --> 00:03:14,699 mida küsides seda mälu. 77 00:03:14,699 --> 00:03:16,990 Ta ei kavatse huvita, mida sa lähed teha seda, 78 00:03:16,990 --> 00:03:19,786 aga sa ei pea ütlema operatsioonisüsteemi süsteem, mida teel malloc. 79 00:03:19,786 --> 00:03:20,286 Jah? 80 00:03:20,286 --> 00:03:21,078 >> Sihtrühm: Kui palju? 81 00:03:21,078 --> 00:03:21,994 DAVID Humala: Kui palju? 82 00:03:21,994 --> 00:03:25,280 Kui palju baite ja nii see jällegi kunstlik Näiteks on lihtsalt öeldes, 83 00:03:25,280 --> 00:03:27,360 mulle suurust int. 84 00:03:27,360 --> 00:03:30,550 Nüüd suurust int on nelja baiti ehk 32 bitti. 85 00:03:30,550 --> 00:03:32,850 Nii et see on lihtsalt viis öeldes, hei, operatsioonisüsteemi, 86 00:03:32,850 --> 00:03:37,290 mulle neli baiti mälu et ma saan kasutada minu käsutuses, 87 00:03:37,290 --> 00:03:40,560 ja konkreetselt, mida ei malloc tagastamise osas 88 00:03:40,560 --> 00:03:41,795 Selle tüki neli baiti? 89 00:03:41,795 --> 00:03:44,110 90 00:03:44,110 --> 00:03:44,860 Sihtrühm: Aadress? 91 00:03:44,860 --> 00:03:45,901 DAVID Humala: aadress. 92 00:03:45,901 --> 00:03:47,580 Aadress, et patakas neli baiti. 93 00:03:47,580 --> 00:03:48,190 Täpselt. 94 00:03:48,190 --> 00:03:51,430 Ja nii see on, mida on salvestatud lõpuks x ja see on põhjus, miks me tegelikult ei 95 00:03:51,430 --> 00:03:55,240 huvita, mida arv, mis aadress on, kas see on ox1 või OX2 96 00:03:55,240 --> 00:03:57,110 või mõne segasena kuueteistkümnendsüsteemis aadress. 97 00:03:57,110 --> 00:03:59,850 Me lihtsalt hoolitseda piltlikult et selle muutuja x on nüüd 98 00:03:59,850 --> 00:04:01,630 osutades, et patakas mälu. 99 00:04:01,630 --> 00:04:05,570 Nii nool näitab osuti või täpsemalt mälu aadress. 100 00:04:05,570 --> 00:04:09,120 Aga jälle, me tavaliselt ei huvita millised need tegelikud aadressid. 101 00:04:09,120 --> 00:04:11,780 Nüüd, see rida ütleb Mis üldarusaadavat mõttes? 102 00:04:11,780 --> 00:04:14,330 Star x saab 42 semikooloniga. 103 00:04:14,330 --> 00:04:17,390 Mida see tähendab? 104 00:04:17,390 --> 00:04:18,200 Tahad minna? 105 00:04:18,200 --> 00:04:20,102 Ärge kraapige oma kaela. 106 00:04:20,102 --> 00:04:22,360 >> Sihtrühm: aadress x on kell 42. 107 00:04:22,360 --> 00:04:24,300 >> DAVID Humala: aadress x on 42. 108 00:04:24,300 --> 00:04:25,190 Mitte päris. 109 00:04:25,190 --> 00:04:28,485 Nii lähedal, kuid mitte päris, sest seal on täht, mis on prefixing see x. 110 00:04:28,485 --> 00:04:29,860 Seega on meil vaja kohendada natuke. 111 00:04:29,860 --> 00:04:31,032 Jah? 112 00:04:31,032 --> 00:04:36,044 >> Sihtrühm: väärtus, et pointer x osutades on 42. 113 00:04:36,044 --> 00:04:36,710 DAVID Humala: OK. 114 00:04:36,710 --> 00:04:40,840 Väärtus, et osuti x on osutades, oletame, peab olema 42, 115 00:04:40,840 --> 00:04:44,165 või teisisõnu täht x ütleb, minna ükskõik aadress 116 00:04:44,165 --> 00:04:48,340 on x, kas see on 1 Oxford Street või 33 Oxford Street 117 00:04:48,340 --> 00:04:51,850 või ox1 või ox33, olenemata et numbriline aadress on 118 00:04:51,850 --> 00:04:54,380 star x on dereferencing x. 119 00:04:54,380 --> 00:04:57,297 Nii et minge sellele aadressile ja siis pane number 42 sinna. 120 00:04:57,297 --> 00:04:59,380 Nii et oleks samaväärne viis öelda, et. 121 00:04:59,380 --> 00:05:01,860 Nii et kõik on hästi ja siis me kujutaks pilt 122 00:05:01,860 --> 00:05:05,370 järgmiselt kus oleme lisanud 42 selle tüki neli 123 00:05:05,370 --> 00:05:09,370 baiti paremas servas, kuid Selle liini kus asjad läksid viltu 124 00:05:09,370 --> 00:05:11,120 ja Binky pea lõhki lüüa ära sel hetkel, 125 00:05:11,120 --> 00:05:15,290 sest halvad asjad juhtuvad, kui sa apparent prügi väärtused 126 00:05:15,290 --> 00:05:18,210 või sa apparent kehtetuks suunanäitajaks, ja ma ütlen kehtetuks 127 00:05:18,210 --> 00:05:21,020 sest sel hetkel Lugu, mis on seestpoolt y? 128 00:05:21,020 --> 00:05:24,440 Mis väärtus y põhineb mineviku mõne sammu? 129 00:05:24,440 --> 00:05:25,360 Jah? 130 00:05:25,360 --> 00:05:26,115 Mis see on? 131 00:05:26,115 --> 00:05:26,990 >> Sihtrühm: aadressi. 132 00:05:26,990 --> 00:05:28,460 DAVID Humala: aadressi. 133 00:05:28,460 --> 00:05:31,910 Peaks olema aadress aga ma olen tuleb kõigepealt? 134 00:05:31,910 --> 00:05:32,800 Nii et ma ei ole veel. 135 00:05:32,800 --> 00:05:35,430 Mis on teadaolevalt seal? 136 00:05:35,430 --> 00:05:37,590 See on lihtsalt mõned prügi väärtus. 137 00:05:37,590 --> 00:05:41,500 See võib olla ka muu aadress nullist 2 miljardit, kui teil on kaks kontserti RAM, 138 00:05:41,500 --> 00:05:44,289 või null 4 miljardi, kui olete sai neli gigabaiti muutmälu. 139 00:05:44,289 --> 00:05:46,080 See on mõned prügi väärtus, kuid probleem on 140 00:05:46,080 --> 00:05:48,200 et operatsioonisüsteem, kui ta ei ole andnud teile 141 00:05:48,200 --> 00:05:51,140 et patakas mälu spetsiaalselt et sa üritad minna, 142 00:05:51,140 --> 00:05:54,650 see on tavaliselt läheb põhjustada, mida oleme näinud ka killustatust süü. 143 00:05:54,650 --> 00:05:57,810 Nii et tegelikult keegi teist, kes on võitlesid probleeme tööaega 144 00:05:57,810 --> 00:06:00,393 või probleeme, mis on rohkem üldiselt püüdnud aru saada, 145 00:06:00,393 --> 00:06:02,150 laevastikuosi süü, mis tähendab üldiselt 146 00:06:02,150 --> 00:06:05,017 Sa puudutad segment mälu, et sa ei peaks olema. 147 00:06:05,017 --> 00:06:07,350 Sa puudutad mälu operatsioonisüsteem ei ole 148 00:06:07,350 --> 00:06:10,450 Lubatud sa puudutada, kas see on minnes liiga kaugele oma valikut 149 00:06:10,450 --> 00:06:12,870 või algavad nüüd, kas sellepärast sa puudutades 150 00:06:12,870 --> 00:06:14,780 mälu, et lihtsalt on mõned prügi väärtus. 151 00:06:14,780 --> 00:06:18,230 >> Seejuures star x siin omamoodi määratlemata käitumine. 152 00:06:18,230 --> 00:06:22,030 Te ei tohiks kunagi teha, sest koefitsiendid on programm lihtsalt läheb krahhi, 153 00:06:22,030 --> 00:06:24,050 sest sa räägid, minge sellele aadressile 154 00:06:24,050 --> 00:06:27,000 ja sa ei tea, kus sellele aadressile tegelikult on. 155 00:06:27,000 --> 00:06:30,300 Nii operatsioonisüsteem on tõenäoliselt läheb krahhi programmi 156 00:06:30,300 --> 00:06:33,840 tulemusena ja tõepoolest, see on Mis seal juhtus, et Binky. 157 00:06:33,840 --> 00:06:37,210 Nii lõpuks Binky fikseeritud Selle probleemi sellega. 158 00:06:37,210 --> 00:06:38,909 Nii et programm ise oli ekslik. 159 00:06:38,909 --> 00:06:41,450 Aga kui sa mingi pürgida ja täidab selle joone asemel, 160 00:06:41,450 --> 00:06:45,580 y võrdub x tähendab lihtsalt iganes aadress on x, samuti pane see y. 161 00:06:45,580 --> 00:06:48,740 >> Ja nii piltlikult oleme esindatud see kahe noolega 162 00:06:48,740 --> 00:06:51,570 alates x ja y juhtides samas kohas. 163 00:06:51,570 --> 00:06:55,760 Nii semantiliselt, x on võrdne y, sest need mõlemad 164 00:06:55,760 --> 00:07:00,300 ladustamiseks sama aadress, ergo osutades 42, 165 00:07:00,300 --> 00:07:04,910 ja nüüd, kui sa ütled täht y, minge aadressile y, 166 00:07:04,910 --> 00:07:06,790 Selle on huvitav kõrvaltoime. 167 00:07:06,790 --> 00:07:10,320 Nii aadress y on sama asi nagu aadress x. 168 00:07:10,320 --> 00:07:15,060 Nii et kui sa ütled minna aadressile y ja väärtust muuta kuni 13, 169 00:07:15,060 --> 00:07:17,140 kes veel mõjutab? 170 00:07:17,140 --> 00:07:21,100 X on punkti D, nii et rääkida, peaks samuti olla mõjutatud. 171 00:07:21,100 --> 00:07:24,340 >> Ja tõepoolest, kuidas Nick juhtis seda pilti in claymation oli just nii. 172 00:07:24,340 --> 00:07:28,665 Kuigi me järgime pointer y, oleme jõudnud samasse kohta, 173 00:07:28,665 --> 00:07:32,780 ja nii kui me printida välja x või y pointee, 174 00:07:32,780 --> 00:07:35,720 siis me näeksime väärtus 13. 175 00:07:35,720 --> 00:07:37,927 Nüüd, ma ütlen pointee olla kooskõlas video. 176 00:07:37,927 --> 00:07:39,760 Programmeerijad, et minu teadmised, tegelikult kunagi 177 00:07:39,760 --> 00:07:42,460 öelda sõna pointee, seda, mis on terava 178 00:07:42,460 --> 00:07:44,650 kell, kuid järjepidevuse videoga, mõistad 179 00:07:44,650 --> 00:07:47,520 see on kõik, mis oli tähendas, et olukord. 180 00:07:47,520 --> 00:07:54,190 Nii lisaküsimusi claymation või viiteid või malloc lihtsalt veel? 181 00:07:54,190 --> 00:07:54,850 No? 182 00:07:54,850 --> 00:07:55,470 Hästi. 183 00:07:55,470 --> 00:07:58,560 >> Nii edasise jututa, võtame pilk 184 00:07:58,560 --> 00:08:00,700 kell, kus see on tegelikult on mõnda aega kasutatud. 185 00:08:00,700 --> 00:08:03,580 Nii et me oleme olnud selles CS50 raamatukogu et ju kõik need funktsioonid. 186 00:08:03,580 --> 00:08:06,810 Oleme kasutanud GetInt palju, getString, ilmselt GetLongLong varem 187 00:08:06,810 --> 00:08:09,840 minu pset ühe või nii, kuid mis tegelikult kestnud? 188 00:08:09,840 --> 00:08:12,920 Noh, olgem võtta Kiire pilk all kapuuts on programm, mis 189 00:08:12,920 --> 00:08:17,017 inspireerib miks me anname teile CS50 raamatukogu ja tõepoolest, nagu eelmisel nädalal, 190 00:08:17,017 --> 00:08:18,850 meil hakkasid need abirattad maha. 191 00:08:18,850 --> 00:08:21,080 Nii et see on nüüd järjestatud ja Surmajärgne mida 192 00:08:21,080 --> 00:08:23,690 on kestnud sees CS50 raamatukogu 193 00:08:23,690 --> 00:08:27,250 kuigi nüüd hakkab liikuma eemale enamiku programmide. 194 00:08:27,250 --> 00:08:29,460 >> Nii et see on programm nimega scanf 0. 195 00:08:29,460 --> 00:08:30,510 See on super lühike. 196 00:08:30,510 --> 00:08:33,909 See lihtsalt on need read, kuid see tutvustab funktsioon nimega scanf 197 00:08:33,909 --> 00:08:36,909 et me tegelikult näeme in hetkel sees CS50 raamatukogu 198 00:08:36,909 --> 00:08:38,600 ent veidi teistsuguses vormis. 199 00:08:38,600 --> 00:08:41,330 Nii et see programm on line 16 deklareerib muutuja x. 200 00:08:41,330 --> 00:08:43,150 Nii et anna mulle neli baiti int. 201 00:08:43,150 --> 00:08:45,750 See on rääkinud kasutaja, number palun, ja seejärel 202 00:08:45,750 --> 00:08:49,010 see on huvitav joon, mis tegelikult seob kokku eelmisel nädalal 203 00:08:49,010 --> 00:08:49,790 ja see. 204 00:08:49,790 --> 00:08:53,230 Scanf ja siis märkate kulub stringi, nagu printf, 205 00:08:53,230 --> 00:08:57,480 % i tähendab int ja seejärel kulub Teine argument, mis tundub veidi 206 00:08:57,480 --> 00:08:58,260 funky. 207 00:08:58,260 --> 00:09:01,880 See on ampersand x, ja meenutada, me ainult nägin seda, kui eelmisel nädalal. 208 00:09:01,880 --> 00:09:03,465 Mida ampersand x esindavad? 209 00:09:03,465 --> 00:09:06,210 210 00:09:06,210 --> 00:09:08,450 Mida ampersand teha C? 211 00:09:08,450 --> 00:09:08,950 Jah? 212 00:09:08,950 --> 00:09:10,024 >> Sihtrühm: aadress. 213 00:09:10,024 --> 00:09:11,190 DAVID Humala: aadress. 214 00:09:11,190 --> 00:09:13,190 Nii et see on vastupidine Tähe operaator, 215 00:09:13,190 --> 00:09:17,270 samas tähe operaator ütleb, minna Selle aadressi, ampersand operaator 216 00:09:17,270 --> 00:09:20,280 ütleb, nuputada aadress muutuja, 217 00:09:20,280 --> 00:09:23,530 ja nii on see võti, sest scanf on elu mõte 218 00:09:23,530 --> 00:09:26,320 on skaneerida kasutaja sisend klaviatuurilt, 219 00:09:26,320 --> 00:09:29,970 sõltuvalt iganes ta tüüpi, ja siis lugesin, et kasutaja sisend 220 00:09:29,970 --> 00:09:32,970 muutujaks, kuid me nägin viimase kahe nädala jooksul 221 00:09:32,970 --> 00:09:36,080 et see swap funktsiooni, et me Üritasin vaevata rakendada 222 00:09:36,080 --> 00:09:37,110 oli lihtsalt katki. 223 00:09:37,110 --> 00:09:42,470 Tuletame meelde, et swap funktsiooni, kui me lihtsalt deklareeritud A- ja B-ints, 224 00:09:42,470 --> 00:09:47,040 Me ei edukalt vahetada Kahe muutuja sees swap 225 00:09:47,040 --> 00:09:50,080 Just nagu piim ja talitus, kuid niipea, kui swap tagasi, 226 00:09:50,080 --> 00:09:55,200 milline oli tulemus seoses to x ja y, esialgseid väärtusi? 227 00:09:55,200 --> 00:09:55,700 Mitte midagi. 228 00:09:55,700 --> 00:09:56,200 Jah. 229 00:09:56,200 --> 00:09:59,754 Midagi ei juhtunud, et aeg, sest vahetustehingute muuta ainult oma kohalikku koopiat, 230 00:09:59,754 --> 00:10:01,670 mis tähendab, kes kõik Sel ajal, kui me olen 231 00:10:01,670 --> 00:10:04,010 on liikuvate argumendid funktsioonidele, me oleme 232 00:10:04,010 --> 00:10:05,939 sõidame koopiad neile argumentidele. 233 00:10:05,939 --> 00:10:07,980 Võite teha, et mida iganes sa tahad nendega, 234 00:10:07,980 --> 00:10:10,890 aga nad ei kavatse ei ole mõju algväärtused. 235 00:10:10,890 --> 00:10:13,650 Nii et see on problemaatiline, kui teil tahad olla funktsioon nagu scanf 236 00:10:13,650 --> 00:10:17,170 elus, mille eesmärk on otsida kasutaja sisend klaviatuurilt 237 00:10:17,170 --> 00:10:22,010 ja siis täitke lüngad, nii et räägivad, et on, anda muutuva nagu x 238 00:10:22,010 --> 00:10:25,410 väärtus, sest kui ma oleksin lihtsalt mööda x scanf, 239 00:10:25,410 --> 00:10:28,790 kui teie arvates loogika viimase nädalas, scanf saab teha mida iganes ta tahab 240 00:10:28,790 --> 00:10:33,100 koopia x, kuid see ei suutnud jäädavalt muuta x, kui me ei anna 241 00:10:33,100 --> 00:10:37,120 scanf aare kaart, nii et rääkida, kus x tähistab kohapeal, kusjuures 242 00:10:37,120 --> 00:10:41,860 võtame in aadress x nii, et scanf saa sinna minna ja tegelikult muutus 243 00:10:41,860 --> 00:10:42,920 väärtuse x. 244 00:10:42,920 --> 00:10:45,080 Ja nii tõepoolest kõik et see programm ei 245 00:10:45,080 --> 00:10:53,180 kui ma teen scanf 0, minu allikas 5m kataloog, teha scanf 0, 246 00:10:53,180 --> 00:10:57,730 dot kaldkriips scanf, number palun 50, aitäh 50. 247 00:10:57,730 --> 00:11:01,020 >> Nii see ei ole kõik, et huvitav, Aga mis on tegelikult toimub 248 00:11:01,020 --> 00:11:04,820 on see, et niipea, kui ma nimetan scanf siin, väärtus x 249 00:11:04,820 --> 00:11:06,410 on jäädavalt muutunud. 250 00:11:06,410 --> 00:11:08,335 Nüüd tundub, et see kena ja hea, ja tegelikult see 251 00:11:08,335 --> 00:11:11,200 Tundub, nagu me tegelikult ei vaja CS50 raamatukogu üldse enam. 252 00:11:11,200 --> 00:11:13,960 Näiteks oletame, joosta see veel kord siin. 253 00:11:13,960 --> 00:11:15,750 Lubage mul uuesti avada teist. 254 00:11:15,750 --> 00:11:20,600 Proovime mitmeid palun ja selle asemel, et öelda 50 nagu enne, 255 00:11:20,600 --> 00:11:22,810 Ütleme ole. 256 00:11:22,810 --> 00:11:24,000 OK, see on natuke imelik. 257 00:11:24,000 --> 00:11:25,270 OKEI. 258 00:11:25,270 --> 00:11:28,680 Ja just mõned jama siin. 259 00:11:28,680 --> 00:11:31,170 Seega ei tundu hakkama ekslik olukordades. 260 00:11:31,170 --> 00:11:33,620 Seega peame minimaalselt algus lisades mõned Tõrkekontroll 261 00:11:33,620 --> 00:11:37,460 veenduda, et kasutaja on sisestatud tegelik number nagu 50, 262 00:11:37,460 --> 00:11:40,720 sest ilmselt kirjutades sõnad ei avastatud problemaatiline, 263 00:11:40,720 --> 00:11:42,020 kuid ilmselt peaks olema. 264 00:11:42,020 --> 00:11:46,450 >> Vaatame seda versiooni nüüd, et minu katse implementeerid getString. 265 00:11:46,450 --> 00:11:48,437 Kui scanf on see kõik funktsionaalsust ehitatud, 266 00:11:48,437 --> 00:11:51,270 miks on meil olnud espalla nende Apupyörät nagu getString? 267 00:11:51,270 --> 00:11:55,450 Noh, siin on ehk oma Lihtne versioon getString 268 00:11:55,450 --> 00:12:00,766 kusjuures nädal tagasi, ma oleks võinud öelda, mulle string ja nimetavad seda puhverdada. 269 00:12:00,766 --> 00:12:03,390 Täna ma hakkan lihtsalt öeldes char täht, mis meenutavad, 270 00:12:03,390 --> 00:12:04,400 see on lihtsalt sünonüüm. 271 00:12:04,400 --> 00:12:06,629 Tundub scarier kuid see on täpselt sama asi. 272 00:12:06,629 --> 00:12:09,420 Nii et anna mulle muutuja nimega puhver et läheb salvestada string, 273 00:12:09,420 --> 00:12:12,780 rääkige kasutaja string palun, ja siis, nagu enne, 274 00:12:12,780 --> 00:12:17,760 Proovime seda laenata õppetund scanf % s sel ajal ja siis edasi puhvris. 275 00:12:17,760 --> 00:12:19,310 Nüüd, kiire meelerahu kontrolli. 276 00:12:19,310 --> 00:12:22,120 Miks ma ei ütle, ampersand puhver seekord? 277 00:12:22,120 --> 00:12:25,190 278 00:12:25,190 --> 00:12:26,625 Järeldada eelmises näites. 279 00:12:26,625 --> 00:12:28,000 Sihtrühm: Char täht on osuti. 280 00:12:28,000 --> 00:12:29,920 DAVID Humala: Täpselt, sest seekord paalia 281 00:12:29,920 --> 00:12:34,080 star on juba osuti, aadressi, määratluse kohta, et täht on seal. 282 00:12:34,080 --> 00:12:37,530 Ja kui scanf ootab aadress, piisab lihtsalt läbida puhvris. 283 00:12:37,530 --> 00:12:39,260 Ma ei pea ütlema ampersand puhvri. 284 00:12:39,260 --> 00:12:42,177 Sest uudishimulik, siis võiks midagi sellist. 285 00:12:42,177 --> 00:12:43,510 See oleks erinev tähendus. 286 00:12:43,510 --> 00:12:47,240 See annaks sulle pointer kuni osuti, mis on tegelikult 287 00:12:47,240 --> 00:12:50,050 kehtiv asi C, kuid Nüüd saab hoida lihtsa 288 00:12:50,050 --> 00:12:51,750 ja hoida lugu järjekindel. 289 00:12:51,750 --> 00:12:54,100 Ma lihtsalt läbida puhver ja see on õige. 290 00:12:54,100 --> 00:12:56,487 Probleem aga on selles. 291 00:12:56,487 --> 00:12:58,820 Lubage mul minna ja teha selle programmi pärast kompileerimisel. 292 00:12:58,820 --> 00:13:00,902 Tee scanf 1. 293 00:13:00,902 --> 00:13:02,610 Kurat, minu koostaja püüdmine minu viga. 294 00:13:02,610 --> 00:13:04,090 Anna mulle üks sekund. 295 00:13:04,090 --> 00:13:05,460 Rõkkama. 296 00:13:05,460 --> 00:13:06,990 Oletame scanf-1.c. 297 00:13:06,990 --> 00:13:10,880 298 00:13:10,880 --> 00:13:11,380 OKEI. 299 00:13:11,380 --> 00:13:12,720 Seal me läheme. 300 00:13:12,720 --> 00:13:14,280 Ma vajan seda. 301 00:13:14,280 --> 00:13:16,750 CS50 ID on erinevad seadistusi 302 00:13:16,750 --> 00:13:18,280 et sind kaitsta ennast. 303 00:13:18,280 --> 00:13:21,300 Mul oli vaja keelata neid poolt töötab rõkkama käsitsi seekord. 304 00:13:21,300 --> 00:13:22,140 Nii string palun. 305 00:13:22,140 --> 00:13:25,560 Ma lähen edasi minna ja kirjutada minu lemmik hello world. 306 00:13:25,560 --> 00:13:26,490 OK, null. 307 00:13:26,490 --> 00:13:27,700 See ei ole see, mida ma kirjutada. 308 00:13:27,700 --> 00:13:29,690 Nii et see on soovituslik midagi on valesti. 309 00:13:29,690 --> 00:13:33,920 Lubage mul minna ja kirjuta on tõesti pikk jada. 310 00:13:33,920 --> 00:13:37,210 Täname null ja ma ei tea, kui ma lähen, et oleks võimalik murdma. 311 00:13:37,210 --> 00:13:40,240 Proovime veidi koopia pasta ja vaata, kas see aitab. 312 00:13:40,240 --> 00:13:43,290 Just kleebi palju seda. 313 00:13:43,290 --> 00:13:47,310 See on kindlasti suurem string kui tavaliselt. 314 00:13:47,310 --> 00:13:51,450 Lihtsalt tõesti kirjutada. 315 00:13:51,450 --> 00:13:51,950 Ei. 316 00:13:51,950 --> 00:13:52,650 Pagan võtaks. 317 00:13:52,650 --> 00:13:53,480 Käsi ei leitud. 318 00:13:53,480 --> 00:13:54,550 Nii et see ei ole seotud. 319 00:13:54,550 --> 00:13:56,440 Seda sellepärast, et ma kleebitud halbu tähemärki 320 00:13:56,440 --> 00:13:59,780 kuid see osutub ei hakka tööle. 321 00:13:59,780 --> 00:14:03,510 >> Proovime veelkord, sest see on lõbusam kui me tegelikult murdma. 322 00:14:03,510 --> 00:14:09,116 Olgem tüüp seda ja nüüd, ma olen läheb kopeerida tõesti pikk string 323 00:14:09,116 --> 00:14:10,990 ja nüüd vaatame, kas me võib krahhi see asi. 324 00:14:10,990 --> 00:14:14,235 Pange tähele, ma jätta ruumid ja uued liinid ja semikoolonid 325 00:14:14,235 --> 00:14:16,035 ja kõik funky tähemärki. 326 00:14:16,035 --> 00:14:16,535 Sisesta. 327 00:14:16,535 --> 00:14:21,090 328 00:14:21,090 --> 00:14:22,880 Ja nüüd võrgu lihtsalt on aeglane. 329 00:14:22,880 --> 00:14:27,460 Ma hoitakse Command-V liiga pikk, selgelt. 330 00:14:27,460 --> 00:14:28,190 Pagan võtaks! 331 00:14:28,190 --> 00:14:29,260 Käsi ei leitud. 332 00:14:29,260 --> 00:14:29,780 >> OKEI. 333 00:14:29,780 --> 00:14:32,240 Noh, asi on siiski järgmist. 334 00:14:32,240 --> 00:14:36,910 Mis siis tegelikult toimub kohta käesoleva avaldusega 335 00:14:36,910 --> 00:14:39,240 Söe star puhver real 16? 336 00:14:39,240 --> 00:14:41,820 Mida ma saan kui ma kuulutada osuti? 337 00:14:41,820 --> 00:14:47,440 Kõik Saan on neli baiti väärtus nimetatakse puhver, kuid mis on sees see 338 00:14:47,440 --> 00:14:49,540 hetkel? 339 00:14:49,540 --> 00:14:50,930 See on lihtsalt mõned prügi väärtus. 340 00:14:50,930 --> 00:14:54,170 Sest iga kord, kui kuulutada muutuja C, see on lihtsalt mõned prügi väärtus, 341 00:14:54,170 --> 00:14:56,220 ja me hakanud komistada see reaalsus. 342 00:14:56,220 --> 00:14:59,720 Nüüd, kui ma ütlen scanf, minge sellele aadressile 343 00:14:59,720 --> 00:15:01,520 ja pane olenemata kasutaja liigid. 344 00:15:01,520 --> 00:15:06,400 Kui kasutaja liigid hello maailma, noh, kus ma pane see? 345 00:15:06,400 --> 00:15:07,750 Puhver on prügi väärtus. 346 00:15:07,750 --> 00:15:11,510 >> Nii et see on selline nagu nool mis on suunatud kes teab kus. 347 00:15:11,510 --> 00:15:13,880 Võib-olla see osutavad siinsamas minu mälu. 348 00:15:13,880 --> 00:15:16,560 Ja nii, kui kasutaja liigid hello world, 349 00:15:16,560 --> 00:15:22,380 programm püüab panna string hello world kurakriips 0 350 00:15:22,380 --> 00:15:23,910 et patakas mälu. 351 00:15:23,910 --> 00:15:27,070 Aga suure tõenäosusega, kuid ilmselgelt ei ole 100% tõenäosusega, 352 00:15:27,070 --> 00:15:30,440 arvuti läheb siis krahhi Programmi kuna tegemist ei ole 353 00:15:30,440 --> 00:15:32,490 mälu ma peaks tohi puudutada. 354 00:15:32,490 --> 00:15:36,330 Lühidalt öeldes on see programm vigane täpselt sel põhjusel. 355 00:15:36,330 --> 00:15:38,070 Ma põhimõtteliselt ei tee seda, mida? 356 00:15:38,070 --> 00:15:42,366 Milliseid samme on mul jätta, nagu me jätta koos Binky esimene näide? 357 00:15:42,366 --> 00:15:42,866 Jah? 358 00:15:42,866 --> 00:15:43,710 >> Sihtrühm: Memory eraldamise? 359 00:15:43,710 --> 00:15:45,001 >> DAVID Humala: Memory jaotamine. 360 00:15:45,001 --> 00:15:48,400 Ma ei ole tegelikult eraldatud mis tahes mälu, et string. 361 00:15:48,400 --> 00:15:50,270 Nii saame parandada seda paar võimalust. 362 00:15:50,270 --> 00:15:52,700 Üks, suudame hoida seda lihtne ja tegelikult, nüüd sa oled 363 00:15:52,700 --> 00:15:55,116 hakkan nägema ähmastumine read vahel, mida 364 00:15:55,116 --> 00:15:58,520 massiivi on, mida string on, mida char täht, mida array tähemärki 365 00:15:58,520 --> 00:15:59,020 on. 366 00:15:59,020 --> 00:16:02,450 Siin on üks näide kaasates stringid ja teate 367 00:16:02,450 --> 00:16:05,690 ma olen teinud on line 16 on, selle asemel, et öelda 368 00:16:05,690 --> 00:16:09,530 et puhver saab olema char star, kursor patakas mälu 369 00:16:09,530 --> 00:16:14,057 Ma väga ennetavalt anda mina puhver 16 märki, 370 00:16:14,057 --> 00:16:16,390 ja tegelikult, kui te olete juba tuttav mõistega puhverdusvõime, 371 00:16:16,390 --> 00:16:20,570 arvatavasti maailma videos, Kui video on puhverdusvõime, puhverdamine, 372 00:16:20,570 --> 00:16:21,175 puhverdusvõime. 373 00:16:21,175 --> 00:16:22,550 Noh, mis on seotud siin? 374 00:16:22,550 --> 00:16:24,960 Noh, Inside of YouTube ja seest video mängijad 375 00:16:24,960 --> 00:16:27,200 üldiselt on massiiv see on suurem kui 16. 376 00:16:27,200 --> 00:16:30,340 See võib olla hulgaliselt suurus ühe megabaidi, võibolla 10 megabaiti, 377 00:16:30,340 --> 00:16:34,330 ja sellesse massiivi teeb oma brauseri lae alla terve hunnik baiti, 378 00:16:34,330 --> 00:16:37,500 terve hunnik MB video ja video mängija, 379 00:16:37,500 --> 00:16:40,930 YouTube'i või kes on, hakkab Lugedes baitide et massiiv, 380 00:16:40,930 --> 00:16:43,530 ja iga kord, kui näete Sõna puhverdusvõime, puhverdamine, 381 00:16:43,530 --> 00:16:46,350 see tähendab, et mängija peab saanud lõpuks, et massiivi. 382 00:16:46,350 --> 00:16:50,430 Võrk on nii aeglane, et see ei ole uuesti täita massiivi rohkem baiti 383 00:16:50,430 --> 00:16:55,610 ja et sa oled out of bits kuvada kasutajale. 384 00:16:55,610 --> 00:16:59,430 >> Nii puhver on apt terminit siin, et see on lihtsalt massiivi, patakas mälu. 385 00:16:59,430 --> 00:17:02,530 Ja see parandada sest selgub, 386 00:17:02,530 --> 00:17:07,410 mis saab ravida massiivid, nagu oleks nad on aadressid, kuigi puhvris 387 00:17:07,410 --> 00:17:10,710 on lihtsalt sümbol, see on märgijada, puhver, 388 00:17:10,710 --> 00:17:14,760 see on kasulik mulle, programmeerija, sa ei liigu oma nime ümber 389 00:17:14,760 --> 00:17:17,079 nagu ta oli pointer, nagu ta 390 00:17:17,079 --> 00:17:21,000 olid aadressi patakas mälu 16 tähemärki. 391 00:17:21,000 --> 00:17:24,530 Nii et öelda, ma ei liigu scanf täpselt, et sõna 392 00:17:24,530 --> 00:17:30,670 ja nii nüüd, kui ma teen seda programmi, teha scanf 2 dot kaldkriipsuga scanf 2, 393 00:17:30,670 --> 00:17:35,386 ja kirjuta hello world, Sisesta, et AEG_ 394 00:17:35,386 --> 00:17:37,590 >> Hmm, mis juhtus? 395 00:17:37,590 --> 00:17:39,340 String palun. 396 00:17:39,340 --> 00:17:41,430 Mida ma valesti tegin? 397 00:17:41,430 --> 00:17:43,800 Tere maailm, puhvri. 398 00:17:43,800 --> 00:17:44,705 Tere, Maailm. 399 00:17:44,705 --> 00:17:48,201 400 00:17:48,201 --> 00:17:49,420 Ah, ma tean, mida ta teeb. 401 00:17:49,420 --> 00:17:49,920 OKEI. 402 00:17:49,920 --> 00:17:51,628 Seega loeb üles kuni esimese ruumi. 403 00:17:51,628 --> 00:17:55,680 Nii saab petta hetkeks ja öelda tahtsin kirjutada midagi 404 00:17:55,680 --> 00:18:01,408 tõesti kaua nagu see on pikk lause see on üks, kaks, kolm, neli, viis, 405 00:18:01,408 --> 00:18:04,420 kuus, seitse, kaheksa, üheksa, 10, 11, 12, 13, 14, 15, 16. 406 00:18:04,420 --> 00:18:05,300 OKEI. 407 00:18:05,300 --> 00:18:07,600 See on tõesti pikk lause. 408 00:18:07,600 --> 00:18:10,710 Nii et see lause on enam kui 16 tähemärki 409 00:18:10,710 --> 00:18:13,670 ja nii kui ma Enter, Mis juhtub? 410 00:18:13,670 --> 00:18:16,940 Noh, sel juhul on lugu, mul oli deklareeritud puhver 411 00:18:16,940 --> 00:18:22,190 tegelikult on hulgaliselt 16 tähemärki valmis minema. 412 00:18:22,190 --> 00:18:27,426 Nii üks, kaks, kolm, neli, viis, kuus, seitsme, kaheksa, üheksa, 10, 11, 12, 13, 14, 413 00:18:27,426 --> 00:18:29,440 15, 16. 414 00:18:29,440 --> 00:18:34,410 Nii 16 märki, ja nüüd, kui ma lugeda midagi sellist on pikk 415 00:18:34,410 --> 00:18:43,950 lause, mida juhtub on et ma lähen lugema see on pikk 416 00:18:43,950 --> 00:18:49,660 S-E-N-T-E-N-C-E, lause. 417 00:18:49,660 --> 00:18:52,270 >> Nii et see on sihilikult halb asi, mis ma 418 00:18:52,270 --> 00:18:55,060 hoida kirjalikult kaugemale piirid minu rida, 419 00:18:55,060 --> 00:18:56,660 piiridest minu puhvri. 420 00:18:56,660 --> 00:19:00,100 Ma võiks saada õnnelik ja programm hoiab töötab ja ei hooli, 421 00:19:00,100 --> 00:19:03,450 kuid üldiselt, selle tõepoolest krahhi minu programm, 422 00:19:03,450 --> 00:19:06,440 ja see on viga minu kood praegu astun 423 00:19:06,440 --> 00:19:08,576 piiridest Selle massiivi, sest ma 424 00:19:08,576 --> 00:19:10,450 ei tea, kas see on tingimata kukku 425 00:19:10,450 --> 00:19:12,120 või kui ma lihtsalt hakka õnnelik. 426 00:19:12,120 --> 00:19:15,750 Nii et see on problemaatiline, sest Sel juhul ei tundu töö 427 00:19:15,750 --> 00:19:20,931 ja olgem kiusate saatus siin, kuigi IDE tundub talu üsna vähe 428 00:19:20,931 --> 00:19:21,430 of-- 429 00:19:21,430 --> 00:19:22,040 >> Seal me läheme. 430 00:19:22,040 --> 00:19:23,240 Lõpuks. 431 00:19:23,240 --> 00:19:26,470 Nii et ma olen ainus, kes seda näeb. 432 00:19:26,470 --> 00:19:29,630 Nii et ma lihtsalt pidin lõbus kirjutades välja tõesti pikk tegelik fraasi 433 00:19:29,630 --> 00:19:32,800 et see kindlasti ületanud 16 baiti, sest ma 434 00:19:32,800 --> 00:19:38,050 trükitud selles hull pikk mitmeliiniline lause ja siis pane tähele, mis juhtus. 435 00:19:38,050 --> 00:19:41,110 Programm proovinud printimine ja siis sain killustatust süü 436 00:19:41,110 --> 00:19:44,430 ja killustatust vead on kui midagi sellist juhtub 437 00:19:44,430 --> 00:19:47,650 ja operatsioonisüsteemi ütleb Ei, ei puuduta see mälestus. 438 00:19:47,650 --> 00:19:49,570 Me läheme tappa programmi kokku. 439 00:19:49,570 --> 00:19:51,180 >> Nii et see tundub problemaatiline. 440 00:19:51,180 --> 00:19:54,540 Olen parandanud programm, mille vähemalt mõned mälu 441 00:19:54,540 --> 00:19:58,000 aga see tundub piirata funktsiooni getString saada 442 00:19:58,000 --> 00:20:00,780 stringe mõned piiratud pikkusega 16. 443 00:20:00,780 --> 00:20:04,200 Nii et kui sa tahad, et toetada enam lauseid kui 16 tähemärki, 444 00:20:04,200 --> 00:20:04,880 mida sa teed? 445 00:20:04,880 --> 00:20:07,970 Noh, saate suurendada mõõtmed selles puhvris kuni 32 446 00:20:07,970 --> 00:20:09,190 või mis tundub selline lühike. 447 00:20:09,190 --> 00:20:12,260 Miks me lihtsalt ei tee see 1000, kuid tagurdamise. 448 00:20:12,260 --> 00:20:17,100 Mis on vastuseks intuitiivselt kohta lihtsalt seda probleemi vältida, muutes 449 00:20:17,100 --> 00:20:20,660 minu puhver suurem, nagu 1000 tähemärki? 450 00:20:20,660 --> 00:20:23,470 Rakendades getString sel viisil. 451 00:20:23,470 --> 00:20:27,130 Mis on hea või halb siin? 452 00:20:27,130 --> 00:20:28,033 Jah? 453 00:20:28,033 --> 00:20:30,574 Sihtrühm: Kui te kel palju ruumi ja te ei kasuta seda, 454 00:20:30,574 --> 00:20:33,500 siis ei saa ümber, et ruumi. 455 00:20:33,500 --> 00:20:34,500 DAVID Humala: Absoluutselt. 456 00:20:34,500 --> 00:20:38,480 See on mõttetu, sest kui sa seda ei tee tegelikult vaja 900 neist baiti 457 00:20:38,480 --> 00:20:41,057 ja veel sa küsida 1000 kokku niikuinii, 458 00:20:41,057 --> 00:20:44,140 sa oled lihtsalt tarbivad rohkem mälu kasutaja arvutisse kui teil on vaja, 459 00:20:44,140 --> 00:20:45,740 ja lõppude lõpuks mõned oled juba kokku puutunud 460 00:20:45,740 --> 00:20:47,620 elus, et kui sa oled töötab palju programme 461 00:20:47,620 --> 00:20:50,470 ja nad söövad palju mälu, see võib tegelikult mõjutada tulemuslikkust 462 00:20:50,470 --> 00:20:52,220 ja kasutaja kogemus arvuti. 463 00:20:52,220 --> 00:20:56,090 Nii et selline laisk lahendus, kindlasti, ja vastupidi, 464 00:20:56,090 --> 00:21:00,140 see ei ole ainult mõttetu, mida probleemi endiselt, isegi siis, kui ma oma puhver 465 00:21:00,140 --> 00:21:02,100 1000? 466 00:21:02,100 --> 00:21:02,600 Jah? 467 00:21:02,600 --> 00:21:04,475 >> Sihtrühm: String pikkusega 1001. 468 00:21:04,475 --> 00:21:05,350 DAVID Humala: Täpselt. 469 00:21:05,350 --> 00:21:08,280 Kui teie string on pikkus 1001, sul on täpselt sama probleem, 470 00:21:08,280 --> 00:21:10,705 ja minu argument, oleksin just siis oleks 2000 471 00:21:10,705 --> 00:21:12,830 kuid sa ei tea edasi, kui suur see peaks olema, 472 00:21:12,830 --> 00:21:16,890 ja veel, ma ei pea koostama oma programmi enne rendile inimesed kasutavad ja alla 473 00:21:16,890 --> 00:21:17,390 seda. 474 00:21:17,390 --> 00:21:21,490 Nii et see on täpselt selline värk, et CS50 raamatukogu üritab 475 00:21:21,490 --> 00:21:24,750 aidata meil ja me ainult lühidalt mõningaid aluseks rakendamine 476 00:21:24,750 --> 00:21:29,790 siin, kuid see on CS50 dot C. See on fail, mis on olnud CS50 IDE 477 00:21:29,790 --> 00:21:31,420 kõik need nädalat, et olete kasutanud. 478 00:21:31,420 --> 00:21:34,280 See on eelnevalt kompileeritud ja olete kasutanud seda automaatselt 479 00:21:34,280 --> 00:21:38,780 olemuse põhjal, mille kriips L CS50 lipp rõkkama, 480 00:21:38,780 --> 00:21:42,300 aga kui ma kerige läbi kõik neid funktsioone, siin on getString, 481 00:21:42,300 --> 00:21:44,636 ja lihtsalt teile maitse, mis toimub, 482 00:21:44,636 --> 00:21:46,760 Võtame pilgu suhteline keerukus. 483 00:21:46,760 --> 00:21:48,870 See ei ole super pikk funktsiooni, kuid me ei 484 00:21:48,870 --> 00:21:52,530 on mõelda kõik kõvasti kuidas minna saan stringid. 485 00:21:52,530 --> 00:21:55,660 >> Nii et siin on minu puhver ja ma ilmselt initsialiseerida see tühjaks. 486 00:21:55,660 --> 00:21:57,990 See muidugi on sama asi nagu char star, 487 00:21:57,990 --> 00:22:00,585 aga ma otsustanud rakendamise CS50 raamatukogu 488 00:22:00,585 --> 00:22:02,460 et kui me läheme täiesti dünaamiline, 489 00:22:02,460 --> 00:22:05,770 Ma ei tea ette, kui suurt string kasutajad ei kavatse taha. 490 00:22:05,770 --> 00:22:08,140 Nii et ma hakkan lihtsalt tühi string 491 00:22:08,140 --> 00:22:11,507 ja ma lähen üles ehitada nii palju mälu nagu mul on vaja sobitada kasutaja string 492 00:22:11,507 --> 00:22:13,340 ja kui mul ei ole piisavalt, ma küsin 493 00:22:13,340 --> 00:22:15,010 Operatsioonisüsteem rohkem mälu. 494 00:22:15,010 --> 00:22:17,510 Ma lähen liikuda oma string suuremasse patakas mälu 495 00:22:17,510 --> 00:22:21,847 ja ma lähen vabastada või vabastada piisavalt suure tüki mälu 496 00:22:21,847 --> 00:22:23,680 ja me lihtsalt läheb seda teha korduvalt. 497 00:22:23,680 --> 00:22:25,570 >> Nii kiire pilgu, siin on lihtsalt muutuja 498 00:22:25,570 --> 00:22:28,780 kellega ma lähen jälgida võimsuse minu puhvri. 499 00:22:28,780 --> 00:22:30,071 Mitu baiti mahub? 500 00:22:30,071 --> 00:22:32,070 Siin on muutuja n koos mis ma lähen hoida 501 00:22:32,070 --> 00:22:36,200 jälgida, kui palju baite on tegelikult puhver või et kasutaja on trükitud. 502 00:22:36,200 --> 00:22:39,900 Kui oled ei näinud seda enne, siis on võimalik määrata, et muutuv nagu int 503 00:22:39,900 --> 00:22:46,370 on allkirjastamata, mis nagu nimigi ütleb, tähendab see mitte negatiivne, ja miks 504 00:22:46,370 --> 00:22:50,590 Ma taha kunagi viitsinud täpsustatakse et int pole lihtsalt int, 505 00:22:50,590 --> 00:22:52,540 aga see on allkirjastamata int? 506 00:22:52,540 --> 00:22:55,064 See on mitte-negatiivne int. 507 00:22:55,064 --> 00:22:56,355 Mida teeb [kuuldamatu] tähendab? 508 00:22:56,355 --> 00:22:58,910 >> Sihtrühm: See kirjeldab summa mälu, mis võib olla [kuuldamatu]. 509 00:22:58,910 --> 00:22:59,660 >> DAVID Humala: Jah. 510 00:22:59,660 --> 00:23:03,710 Nii et kui ma ütlen allkirjastamata, see on tegelikult annab teile üks natuke extra mälu 511 00:23:03,710 --> 00:23:07,440 ja tundub selline rumal, kuid kui te üks natuke lisamälu, et 512 00:23:07,440 --> 00:23:09,940 tähendab, et pead kaks korda rohkem väärtused saab esindada, 513 00:23:09,940 --> 00:23:11,570 sest see võib olla 0 või 1. 514 00:23:11,570 --> 00:23:14,660 Nii vaikimisi int võib laias laastus negatiivne 2 miljardit kogu tee 515 00:23:14,660 --> 00:23:16,030 kuni positiivsete 2 miljardit. 516 00:23:16,030 --> 00:23:18,540 Need on suured vahemikud, kuid see on ikka mingi mõttetu 517 00:23:18,540 --> 00:23:21,280 kui te ainult hoolid suurused, mis lihtsalt intuitiivselt 518 00:23:21,280 --> 00:23:24,620 peaks olema mitte-negatiivne või positiivne või 0, ka siis, 519 00:23:24,620 --> 00:23:28,884 miks sa raiskad 2 miljardit võimalikud väärtused negatiivsed arvud 520 00:23:28,884 --> 00:23:30,300 kui sa kunagi neid kasutada? 521 00:23:30,300 --> 00:23:35,350 Nii öeldes allkirjastamata, nüüd on mu Int võib olla vahemikus 0 kuni umbes 4 miljardit. 522 00:23:35,350 --> 00:23:39,280 >> Nii et siin on lihtsalt int C põhjustel me ei hakka just nagu 523 00:23:39,280 --> 00:23:42,280 miks see int asemel on char, kuid siin on 524 00:23:42,280 --> 00:23:44,630 põhisisu, mis toimub kohta, ning mõned teist 525 00:23:44,630 --> 00:23:48,340 võivad olla kasutades, näiteks kui fgetc funktsiooni isegi pset neli 526 00:23:48,340 --> 00:23:51,580 või pärast seda, siis me näeme seda jälle probleem määrata viis, 527 00:23:51,580 --> 00:23:55,410 fgetc on tore, sest nagu nimigi selline, justkui arcanely ütleb, 528 00:23:55,410 --> 00:23:57,940 see on funktsioon, mis saab iseloomu ja nii, 529 00:23:57,940 --> 00:24:00,690 Mis põhimõtteliselt erinev mida me teeme getString 530 00:24:00,690 --> 00:24:03,110 on meil parajasti ei kasuta scanf samamoodi. 531 00:24:03,110 --> 00:24:07,550 Me lihtsalt hiiliva mööda samm-sammult üle olenemata kasutaja sisestatud, 532 00:24:07,550 --> 00:24:10,970 sest meil on alati võimalik eraldada ühe char, ja nii saame alati turvaliselt 533 00:24:10,970 --> 00:24:15,599 vaadata ühe char korraga, ja magic hakkab juhtuma siin. 534 00:24:15,599 --> 00:24:17,890 Ma lähen keri Keset seda funktsiooni 535 00:24:17,890 --> 00:24:20,360 lihtsalt tutvustada lühidalt selle funktsiooni. 536 00:24:20,360 --> 00:24:22,670 Palju nagu seal on malloc funktsioon, seal on 537 00:24:22,670 --> 00:24:27,740 RealLOC funktsioon, kus RealLOC võimaldab teil suunata patakas mälu 538 00:24:27,740 --> 00:24:29,570 ja teha see suuremaks või väiksemaks. 539 00:24:29,570 --> 00:24:33,060 Nii pikk lugu lühike ja laine mu käest täna, 540 00:24:33,060 --> 00:24:35,620 tean, et see, mida getString teeb on see omamoodi 541 00:24:35,620 --> 00:24:39,720 of võluväel kasvab või kahanemine puhvri kui kasutaja 542 00:24:39,720 --> 00:24:41,440 tüüpi tema string. 543 00:24:41,440 --> 00:24:43,962 >> Nii et kui kasutaja sisestab lühike string see kood 544 00:24:43,962 --> 00:24:45,920 Ainult eraldab piisavalt mälu sobib stringi. 545 00:24:45,920 --> 00:24:48,086 Kui kasutaja hoiab kirjutades nagu ma tegin seda jälle ja jälle 546 00:24:48,086 --> 00:24:50,330 ja jälle hästi, kui puhver on esialgu see suur 547 00:24:50,330 --> 00:24:53,310 ja programmi mõistab, et oota üks hetk, ma olen läbi ruumi, 548 00:24:53,310 --> 00:24:55,410 see saab kahekordistada suurust puhvrit 549 00:24:55,410 --> 00:24:59,110 ja seejärel kahekordistada puhver ja kood, mis kahekordistumine, 550 00:24:59,110 --> 00:25:03,170 Kui me vaatame seda siin, see on lihtsalt see tark Sutkaus. 551 00:25:03,170 --> 00:25:06,830 Sa ei pruugi näinud seda süntaksit Enne, aga kui sa ütled star võrdne, 552 00:25:06,830 --> 00:25:10,470 see on sama asi nagu öeldes võimet korda 2. 553 00:25:10,470 --> 00:25:13,390 Nii see lihtsalt hoiab kahekordistada suutlikkust puhvris 554 00:25:13,390 --> 00:25:17,480 ja siis ütlen RealLOC anda ise, et palju mälu. 555 00:25:17,480 --> 00:25:19,720 >> Nüüd, kui kõrvale, seal on ka teisi funktsioone siin 556 00:25:19,720 --> 00:25:23,680 et me ei vaata ühtegi detail peale näidata GetInt, 557 00:25:23,680 --> 00:25:26,150 Me kasutame getString in GetInt. 558 00:25:26,150 --> 00:25:28,192 Me kontrollime, et see ei ole null, mis meenutavad, 559 00:25:28,192 --> 00:25:30,400 on eriline väärtus, mis tähendab midagi läks valesti. 560 00:25:30,400 --> 00:25:31,233 Oleme mälu. 561 00:25:31,233 --> 00:25:32,310 Parem vaadake selle eest. 562 00:25:32,310 --> 00:25:33,710 Ja me tagasi valvur väärtus. 563 00:25:33,710 --> 00:25:37,850 Aga ma edasi lükata kuni kommentaaridega miks ja siis me kasutame seda nõbu scanf 564 00:25:37,850 --> 00:25:42,100 nimetatakse sscanf ja selgub, et sscanf või string scanf, 565 00:25:42,100 --> 00:25:45,310 võimaldab teil võtta pilk line, et kasutaja on sisestanud ja teile 566 00:25:45,310 --> 00:25:49,610 analüüsida sisuliselt ja mida ma olen teeme siin räägin ma sscanf, 567 00:25:49,610 --> 00:25:54,440 analüüsida olenemata kasutaja trükitud ja veenduge% i, 568 00:25:54,440 --> 00:25:59,250 seal on täisarv, ja me ei sattuda täna täpselt, miks seal on ka 569 00:25:59,250 --> 00:26:03,760 A% c siin, kuid lühikokkuvõte võimaldab meil avastada, kui kasutaja on sisestanud 570 00:26:03,760 --> 00:26:06,050 midagi võltsi pärast arvu. 571 00:26:06,050 --> 00:26:11,766 Nii seetõttu, et GetInt ja getString ütlen sulle uuesti proovida, uuesti, uuesti 572 00:26:11,766 --> 00:26:13,640 Sellepärast, et kõik Selle koodiga oleme kirjutatud, 573 00:26:13,640 --> 00:26:17,900 See on selline vaadates kasutaja sisend hoolitsedes see on täiesti numbriline 574 00:26:17,900 --> 00:26:21,700 või see on tegelik ujuv Punkti väärtus vms, 575 00:26:21,700 --> 00:26:24,233 sõltuvalt sellest, milline väärtus toimida te kasutate. 576 00:26:24,233 --> 00:26:25,060 >> Whew. 577 00:26:25,060 --> 00:26:25,710 OKEI. 578 00:26:25,710 --> 00:26:27,592 See oli suutäie kuid siinkohal on 579 00:26:27,592 --> 00:26:29,550 et põhjus oli meil need abirattad 580 00:26:29,550 --> 00:26:32,880 on seetõttu madalaimal tasemel, seal on lihtsalt nii palju asju, 581 00:26:32,880 --> 00:26:35,674 võib valesti minna, et me tahtsime ennetavalt tegelema 582 00:26:35,674 --> 00:26:38,090 need asjad kindlasti ka esimesel nädalal klassi, 583 00:26:38,090 --> 00:26:42,230 kuid nüüd pset neli ja pset viis ja kaugemale sa näed, et see on rohkem juurde 584 00:26:42,230 --> 00:26:45,570 sa ka oled võimekam lahendada neid erinevaid probleeme 585 00:26:45,570 --> 00:26:47,180 ise. 586 00:26:47,180 --> 00:26:51,770 Iga küsimustele getString või GetInt? 587 00:26:51,770 --> 00:26:52,630 Jah? 588 00:26:52,630 --> 00:26:55,130 >> Sihtrühm: Miks sa kahekordistada suutlikkust puhvris 589 00:26:55,130 --> 00:26:57,630 mitte ainult suureneb see täpne summa? 590 00:26:57,630 --> 00:26:58,100 >> DAVID Humala: Hea küsimus. 591 00:26:58,100 --> 00:27:00,474 Miks me kahekordistada võimsust puhvri vastandina 592 00:27:00,474 --> 00:27:02,800 lihtsalt suureneb see Mõned püsiv väärtus? 593 00:27:02,800 --> 00:27:03,900 See oli disaini otsuse. 594 00:27:03,900 --> 00:27:08,590 Me lihtsalt otsustas, et kuna see kipub olla natuke kallim aja mõistlik küsida 595 00:27:08,590 --> 00:27:10,440 operatsioonisüsteemi mälu, me ei 596 00:27:10,440 --> 00:27:13,210 taha lõpuks sattumist Olukorras suur stringid 597 00:27:13,210 --> 00:27:14,960 et Palusime OS uuesti ja uuesti 598 00:27:14,960 --> 00:27:17,500 ja ikka ja jälle üksteise järel mälu. 599 00:27:17,500 --> 00:27:20,387 Nii et me lihtsalt otsustas, mõnevõrra meelevaldselt kuid loodame, mõistlikult, 600 00:27:20,387 --> 00:27:22,720 et sa tead, mida, olgem proovida saada enne ise 601 00:27:22,720 --> 00:27:25,520 ja lihtsalt duubeldada seda nii, et meil minimiseerida korda 602 00:27:25,520 --> 00:27:29,010 meil helistada malloc või RealLOC, kuid kokku kohtuotsus 603 00:27:29,010 --> 00:27:31,820 helistada ilma teades mida kasutajad võiksid sisestada. 604 00:27:31,820 --> 00:27:33,600 Mõlemad viisid võivad olla vaieldav. 605 00:27:33,600 --> 00:27:35,430 Väidetavalt hea. 606 00:27:35,430 --> 00:27:39,240 >> Võtame pilk mõned muud kõrvaltoimed mälu, 607 00:27:39,240 --> 00:27:41,610 asju, mida saab valesti minna ja vahendid, mida saab 608 00:27:41,610 --> 00:27:43,880 kasuta püüda selliseid vigu. 609 00:27:43,880 --> 00:27:47,800 Selgub, te kõik, kuigi check50 ei öelnud sulle nii palju, 610 00:27:47,800 --> 00:27:50,050 on kirjalikult lollakas koodi kuna nädalal üks, 611 00:27:50,050 --> 00:27:53,630 isegi kui kõik check50 testid möödas, ja isegi siis, kui teie ja teie TF 612 00:27:53,630 --> 00:27:56,010 on super kindel, et Sinu kood töötab nagu ette nähtud. 613 00:27:56,010 --> 00:27:59,190 Sinu kood on vigane või ekslik, et te kõik, 614 00:27:59,190 --> 00:28:02,540 kasutamisel CS50 raamatukogu on lekib mälu. 615 00:28:02,540 --> 00:28:06,040 Sa oled palunud operatsioonisüsteemi mälu enamikus programmide 616 00:28:06,040 --> 00:28:08,850 olete kirjutanud, kuid sa oled tegelikult ei antud tagasi. 617 00:28:08,850 --> 00:28:12,110 Olete kutsutud getString ja GetInt ja GetFloat, 618 00:28:12,110 --> 00:28:15,270 kuid getString, olete ei helistanud unGetString või Anna 619 00:28:15,270 --> 00:28:19,890 String Tagasi vms, kuid me oleme näinud et getString ei mälu eraldada 620 00:28:19,890 --> 00:28:22,810 teel malloc või selle funktsiooni RealLOC, mis on lihtsalt 621 00:28:22,810 --> 00:28:25,670 väga sarnase sisuga, ja veel, me oleme olnud 622 00:28:25,670 --> 00:28:28,629 küsib operatsioonisüsteemi mälu ja uuesti ja uuesti 623 00:28:28,629 --> 00:28:29,670 kuid mitte kunagi anna seda tagasi. 624 00:28:29,670 --> 00:28:33,550 >> Nüüd, kui kõrvale, selgub, et kui programm sulgub, kes kõik mälu 625 00:28:33,550 --> 00:28:34,870 automaatselt vabastatud. 626 00:28:34,870 --> 00:28:36,150 Nii see ei ole suur asi. 627 00:28:36,150 --> 00:28:38,590 Ta ei kavatse murda IDE või aeglane asju ette, 628 00:28:38,590 --> 00:28:40,670 aga kui programmid ei üldiselt lekkida mälu 629 00:28:40,670 --> 00:28:42,170 ja nad töötavad juba pikka aega. 630 00:28:42,170 --> 00:28:45,640 Kui sa oled kunagi näinud loll väike rannas palli Mac OS või liivakell 631 00:28:45,640 --> 00:28:51,160 Windows kus see on selline aeglustub või mõelnud või mõtlemine 632 00:28:51,160 --> 00:28:53,770 või lihtsalt tõesti hakkab aeglane indekseerimine, 633 00:28:53,770 --> 00:28:56,960 on väga võimalik, et võiks olla tulemus Mälulekke. 634 00:28:56,960 --> 00:28:59,970 Programmeerijad, kes kirjutas tarkvara te kasutate 635 00:28:59,970 --> 00:29:03,570 küsida operatsioonisüsteemi mälu iga paari minuti, iga tund. 636 00:29:03,570 --> 00:29:05,570 Aga kui sa oled töötab tarkvara, isegi kui see on 637 00:29:05,570 --> 00:29:08,680 minimaalne arvuti mitu tundi või päeva lõpus, 638 00:29:08,680 --> 00:29:11,980 võite küsida rohkem ja rohkem mälu ja tegelikult ei kasuta seda 639 00:29:11,980 --> 00:29:15,180 ja nii oma kood võiks olla, või programmid võivad olla lekkivad mälu 640 00:29:15,180 --> 00:29:18,350 ja kui hakkad lekkida mälu seal on vähem mälu teisi programme, 641 00:29:18,350 --> 00:29:21,220 ja tagajärjeks on aeglane kõike ette. 642 00:29:21,220 --> 00:29:23,600 >> Nüüd on see siiani üks kõige metsik programmid 643 00:29:23,600 --> 00:29:26,350 siis on võimalused joosta CS50 niivõrd 644 00:29:26,350 --> 00:29:31,650 kui selle väljund on isegi rohkem esoteeriline kui rõkkama on või teha või mõne käsu 645 00:29:31,650 --> 00:29:35,930 line programme oleme kulgema enne, kuid õnneks põimitud oma toodangut 646 00:29:35,930 --> 00:29:39,810 on mõned super kasulikke näpunäiteid, et on kasulik kas pset nelja 647 00:29:39,810 --> 00:29:41,510 või kindlasti pset viis. 648 00:29:41,510 --> 00:29:44,250 Nii valgrind on vahend mida saab kasutada otsima 649 00:29:44,250 --> 00:29:46,930 mälu lekked oma programmi. 650 00:29:46,930 --> 00:29:48,570 See on suhteliselt lihtne sõita. 651 00:29:48,570 --> 00:29:51,420 Sa jooksed valgrind ja seejärel ka kuigi see on natuke paljusõnaline, 652 00:29:51,420 --> 00:29:54,440 kriips kriips lekke kontrolli võrdub täis ja siis dot 653 00:29:54,440 --> 00:29:56,320 kaldkriips ja oma programmi nime. 654 00:29:56,320 --> 00:30:00,010 Nii valgrind siis käivitada oma programmi ja päris lõpus oma programmi 655 00:30:00,010 --> 00:30:02,240 töötab, enne kui see sulgub ja annab teile teise kiire, 656 00:30:02,240 --> 00:30:04,980 see saab analüüsida oma programmi, kui see on kestnud 657 00:30:04,980 --> 00:30:07,740 ja öelda, sa lekkima mis tahes mälu ja veel parem, 658 00:30:07,740 --> 00:30:10,610 sa puudutage mälu ei kuulu sulle? 659 00:30:10,610 --> 00:30:13,700 See ei saagi kõike, kuid see on päris hea püüdmine enamik asju. 660 00:30:13,700 --> 00:30:19,700 >> Nii et siin on näide minu jooksis Selles programmis, mille run valgrind, 661 00:30:19,700 --> 00:30:21,470 kohta programmi nimega mälu, ja ma lähen 662 00:30:21,470 --> 00:30:24,730 rõhutada read, mis on lõppkokkuvõttes meid huvitab. 663 00:30:24,730 --> 00:30:27,690 Nii et isegi rohkem distractions et ma olen kustutatakse slide. 664 00:30:27,690 --> 00:30:30,930 Aga olgem lihtsalt näha, mida see Programm on võimeline meile. 665 00:30:30,930 --> 00:30:34,800 See on võimeline meile asju nagu vigane kirjutada suuruse 4. 666 00:30:34,800 --> 00:30:38,020 Teisisõnu, kui te puudutage mälu spetsiaalselt 4 baiti mälu 667 00:30:38,020 --> 00:30:40,350 et sa ei tohiks olla, valgrind võin öelda, et. 668 00:30:40,350 --> 00:30:41,660 Vale kirjutada suuruse 4. 669 00:30:41,660 --> 00:30:43,640 Sa puudutasid nelja baiti et sa ei tohiks olla. 670 00:30:43,640 --> 00:30:44,840 Kus sa seda tegid? 671 00:30:44,840 --> 00:30:45,900 See on ilu. 672 00:30:45,900 --> 00:30:50,000 Mälu dot c line 21 on koht, kus sa silmamunad ja sellepärast on kasulik. 673 00:30:50,000 --> 00:30:53,410 Sarnaselt GDB, see aitab juhtida teid tegelik viga. 674 00:30:53,410 --> 00:30:57,170 >> Nüüd on see üks on natuke rohkem lobise, kui ei ole segane. 675 00:30:57,170 --> 00:31:01,307 40 baiti 1 plokid on kindlasti kadunud kaotus rekord 1 1. 676 00:31:01,307 --> 00:31:02,140 Mida see tähendab? 677 00:31:02,140 --> 00:31:05,920 Noh, see lihtsalt tähendab, et sa palusid 40 baiti ja sa ei ole kunagi andnud selle tagasi. 678 00:31:05,920 --> 00:31:08,930 Sa kutsusid malloc või siis nn GetString ja operatsioonisüsteemi 679 00:31:08,930 --> 00:31:12,450 saatis sulle 40 baiti, kuid kunagi vabanenud või vabaneb selle mälu, 680 00:31:12,450 --> 00:31:15,400 ja kui aus olla, siis pole kunagi näidata kuidas anda tagasi mälu. 681 00:31:15,400 --> 00:31:17,910 Selgub, seal on super lihtne funktsioon nimega tasuta. 682 00:31:17,910 --> 00:31:21,170 Võtab üks argument, asi tahad tasuta või tagasi anda, 683 00:31:21,170 --> 00:31:23,430 kuid 40 baiti ilmselt Selles programmis 684 00:31:23,430 --> 00:31:27,300 on kadunud real 20 mälu dot c. 685 00:31:27,300 --> 00:31:28,650 >> Vaatame seda programmi. 686 00:31:28,650 --> 00:31:31,020 See on super kasutu. 687 00:31:31,020 --> 00:31:33,980 See ainult näitab, see konkreetne viga. 688 00:31:33,980 --> 00:31:34,920 Võtame pilk. 689 00:31:34,920 --> 00:31:39,920 Siin on peamine ja peamine, teate, kõned Funktsiooni nimetatakse f ja siis tagasi. 690 00:31:39,920 --> 00:31:41,550 Nii ei ole sugugi nii huvitav. 691 00:31:41,550 --> 00:31:42,664 Mida f teha? 692 00:31:42,664 --> 00:31:44,330 Pange tähele, et ma ei viitsinud prototüüp. 693 00:31:44,330 --> 00:31:46,520 Ma tahtsin hoida kood võimalikult väike. 694 00:31:46,520 --> 00:31:49,530 Nii panin f eespool põhi- ja see on hea, kindlasti, 695 00:31:49,530 --> 00:31:51,500 lühikese programmid nagu see. 696 00:31:51,500 --> 00:31:56,910 Nii f ei tagasta midagi ja ei ei võta midagi, kuid see ei tee seda. 697 00:31:56,910 --> 00:31:59,620 See kinnitab, meelega on Binky näiteks 698 00:31:59,620 --> 00:32:02,682 osuti nimetatakse x, et läheb salvestada aadress int. 699 00:32:02,682 --> 00:32:03,890 Nii et vasakul pool. 700 00:32:03,890 --> 00:32:07,230 Inglise keeles, mis on parempoolne teed? 701 00:32:07,230 --> 00:32:09,770 Igaüks? 702 00:32:09,770 --> 00:32:13,665 Mis on selle teinud meie jaoks? 703 00:32:13,665 --> 00:32:14,651 Jah? 704 00:32:14,651 --> 00:32:16,623 >> Sihtrühm: [kuuldamatu] korda suurem int 705 00:32:16,623 --> 00:32:19,175 mis on 10 korda suurem [kuuldamatu] 706 00:32:19,175 --> 00:32:20,800 DAVID Humala: Hea ja andke mulle kokku. 707 00:32:20,800 --> 00:32:25,480 Nii eraldada piisavalt ruumi 10 täisarvud või 10, mis on suurus int, 708 00:32:25,480 --> 00:32:29,340 see on neli baiti, seega 10 korda 4 on 40, nii et paremal küljel, et ma olen 709 00:32:29,340 --> 00:32:33,930 Märgitud on mulle 40 baiti ja Hoida aadressi esimene bait 710 00:32:33,930 --> 00:32:34,940 arvesse x. 711 00:32:34,940 --> 00:32:38,380 Ja nüüd viimaks, ja siin on, kus see programm on vigane, mis on 712 00:32:38,380 --> 00:32:41,540 valesti line 21 põhineb loogika? 713 00:32:41,540 --> 00:32:45,197 714 00:32:45,197 --> 00:32:46,280 Mis sul viga on line 21? 715 00:32:46,280 --> 00:32:46,780 Jah? 716 00:32:46,780 --> 00:32:49,550 Sihtrühm: Sa ei saa indeksi x [kuuldamatu]. 717 00:32:49,550 --> 00:32:50,300 DAVID Humala: Jah. 718 00:32:50,300 --> 00:32:52,270 Ma ei peaks indeksi x niimoodi. 719 00:32:52,270 --> 00:32:53,850 Nii süntaktiliselt, see on OK. 720 00:32:53,850 --> 00:32:56,990 Mis on tore on, palju nagu sina ravib nimi massiivi 721 00:32:56,990 --> 00:33:01,080 nagu ta on osuti, sarnaselt saab ravida osuti, nagu oleks see 722 00:33:01,080 --> 00:33:06,425 massiivi, ja nii ma ei süntaktiliselt öelda x sulg midagi, x sulg i, 723 00:33:06,425 --> 00:33:07,800 kuid 10 on problemaatiline. 724 00:33:07,800 --> 00:33:09,096 Miks? 725 00:33:09,096 --> 00:33:10,910 >> Sihtrühm: Sest see ei ole sees. 726 00:33:10,910 --> 00:33:12,390 >> DAVID Humala: See ei ole sees, et patakas mälu. 727 00:33:12,390 --> 00:33:15,306 Mis on suurim väärtus ma peaks võimalik saavutada nendes nurksulgudes? 728 00:33:15,306 --> 00:33:16,870 9, 0 kuni 9. 729 00:33:16,870 --> 00:33:18,160 Kuna null indekseerimine. 730 00:33:18,160 --> 00:33:20,190 Nii 0 kuni 9 oleks trahvi. 731 00:33:20,190 --> 00:33:23,960 Bracket 10 ei ole hea ja aga meenutada küll, iga kord 732 00:33:23,960 --> 00:33:27,017 Mulle tundub, et proovida teha CS50 IDE crash kirjutades fiktiivseid väärtusi, 733 00:33:27,017 --> 00:33:29,100 see ei ole alati koostööd, ja tõesti, siis sageli 734 00:33:29,100 --> 00:33:31,460 saada õnnelik lihtsalt sellepärast, operatsioonisüsteem ei 735 00:33:31,460 --> 00:33:35,467 märgata, et sa kunagi nii veidi edasi mõned patakas mälu 736 00:33:35,467 --> 00:33:38,300 sest sa jäid jooksul tehniliselt Sinu segment, kuid rohkem, et 737 00:33:38,300 --> 00:33:40,940 ühes operatsioonisüsteemid klassi, ja nii midagi sellist 738 00:33:40,940 --> 00:33:43,000 võib väga kergesti märkamata jääda. 739 00:33:43,000 --> 00:33:48,120 Teie programm pole kunagi kukku järjekindlalt, kuid äkki kord aega. 740 00:33:48,120 --> 00:33:50,610 >> Ja nii proovime valgrind Sellel, ja siin on 741 00:33:50,610 --> 00:33:52,870 kus me saada ülekoormatud poolt väljund korraks. 742 00:33:52,870 --> 00:34:00,810 Nii et mälu valgrind lekke kontrolli võrdub täispunktmaatriks kaldkriipsuga mälu. 743 00:34:00,810 --> 00:34:03,040 Ja siin on põhjus, miks ma luban see uputama. 744 00:34:03,040 --> 00:34:05,700 Siin on, mida valgrind, siin on, mida programmeerija, mõned aastad ago- 745 00:34:05,700 --> 00:34:08,469 otsustasin, et see oleks hea mõte toodangu nägema. 746 00:34:08,469 --> 00:34:09,750 Nii saab sellest aru. 747 00:34:09,750 --> 00:34:13,120 Nii et kõik viis kohta vasakul pool mingit põhjust 748 00:34:13,120 --> 00:34:16,620 on protsess ID programmi me lihtsalt joosta, kordumatu tunnus 749 00:34:16,620 --> 00:34:18,030 programmi me lihtsalt jooksis. 750 00:34:18,030 --> 00:34:19,738 Me kustutatakse et alates slaidi, kuid 751 00:34:19,738 --> 00:34:22,190 on mõned kasulikku teavet siin. 752 00:34:22,190 --> 00:34:24,684 >> Olgem kerida kuni ülaservas. 753 00:34:24,684 --> 00:34:25,600 Siin, kus hakkasime. 754 00:34:25,600 --> 00:34:27,040 Nii see ei ole kõik, et palju toodangut. 755 00:34:27,040 --> 00:34:30,429 Siin on, et vigane kirjutada suurus 4 real 21. 756 00:34:30,429 --> 00:34:31,760 Noh, mis oli line 21? 757 00:34:31,760 --> 00:34:34,500 Line 21 oli täpselt seda ja see on mõistlik 758 00:34:34,500 --> 00:34:37,290 et ma olen kehtivalt kirjalikult 4 baiti, sest ma olen 759 00:34:37,290 --> 00:34:40,389 üritab panna see täisarv, mis võiks olla midagi, 760 00:34:40,389 --> 00:34:42,370 see lihtsalt juhtub olema null, kuid ma üritan 761 00:34:42,370 --> 00:34:44,940 pane see kohas mis ei kuulu mulle. 762 00:34:44,940 --> 00:34:50,900 Lisaks siia, 40 baiti ühes klotsid on kindlasti kaotanud rekordiliselt 1. 763 00:34:50,900 --> 00:34:56,500 Seda sellepärast, et kui ma kutsun malloc siin, ma ei ole kunagi tegelikult vaba mälu. 764 00:34:56,500 --> 00:34:58,140 >> Niisiis, kuidas me saame parandada? 765 00:34:58,140 --> 00:35:02,970 Lubage mul minna ja olla veidi turvalisem ja teha 9 sinna ja laske mul siin vabalt x. 766 00:35:02,970 --> 00:35:04,820 See on uus funktsioon täna. 767 00:35:04,820 --> 00:35:11,520 Kui ma nüüd uuesti, et mälu dot kaldkriipsuga Laseme valgrind seda uuesti, 768 00:35:11,520 --> 00:35:14,990 maksimeerida oma aken ja vajuta Enter. 769 00:35:14,990 --> 00:35:16,900 Nüüd, see on hea. 770 00:35:16,900 --> 00:35:19,590 Nad matta hea uudis kõik selle toodangut. 771 00:35:19,590 --> 00:35:20,810 Kõik hunnik plokid olid vabad. 772 00:35:20,810 --> 00:35:23,604 Me tuleme tagasi, mida hunnik on, kuid lekked on võimalikud. 773 00:35:23,604 --> 00:35:25,520 Nii et see on lihtsalt üks vahend oma tööriistakomplekt 774 00:35:25,520 --> 00:35:30,220 millega saab hakkama leida nüüd viga niimoodi. 775 00:35:30,220 --> 00:35:34,532 >> Aga vaatame, mis rohkem võib siin olla. 776 00:35:34,532 --> 00:35:38,890 Olgem üleminek nüüd tegelikult probleemi lahendamisel. 777 00:35:38,890 --> 00:35:42,440 Selle kõrvale, kui see leevendada natuke segadust või pinge, 778 00:35:42,440 --> 00:35:43,430 see on nüüd naljakas. 779 00:35:43,430 --> 00:35:46,400 780 00:35:46,400 --> 00:35:46,900 Jah. 781 00:35:46,900 --> 00:35:49,040 See on päris hea. 782 00:35:49,040 --> 00:35:50,890 Kuna suunanäitajaks on aadressid ja aadressid 783 00:35:50,890 --> 00:35:53,098 on üldiselt kombeks kirjutatud kuueteistkümnendsüsteemis. 784 00:35:53,098 --> 00:35:54,650 Ha, ha, see on naljakas nüüd. 785 00:35:54,650 --> 00:35:58,390 Igatahes, nii et vaatame nüüd tegelikult lahendada probleemi. 786 00:35:58,390 --> 00:36:00,840 See on super, super madala seni, 787 00:36:00,840 --> 00:36:03,950 ja me saame tegelikult teha kasulikke asju nende madala üksikasjad. 788 00:36:03,950 --> 00:36:06,710 >> Nii me tutvustas paar nädalat tagasi mõiste massiivi. 789 00:36:06,710 --> 00:36:09,177 Hulgaliselt oli tore, sest see on raske puhastada meie koodi 790 00:36:09,177 --> 00:36:11,760 sest kui me tahtsime kirjutada Programm mitme õpilased 791 00:36:11,760 --> 00:36:15,270 või mitu nime ja maja ja üliõpilaselamu ja kolledžid ja kõik see, 792 00:36:15,270 --> 00:36:19,430 me võiks salvestada kõike rohkem puhtalt sees massiivi. 793 00:36:19,430 --> 00:36:23,039 Aga ettepanek ühe negatiivsed massiivi siiani. 794 00:36:23,039 --> 00:36:26,080 Isegi kui sa oled ei kannatanud seda ise programmis, vaid instinktiivselt, 795 00:36:26,080 --> 00:36:30,870 Mis on halb umbes massiivi, ehk? 796 00:36:30,870 --> 00:36:32,337 Kuulen murmurs. 797 00:36:32,337 --> 00:36:34,170 Sihtrühm: See on raske suurust muuta. 798 00:36:34,170 --> 00:36:36,128 DAVID Humala: See on raske suurust muuta. 799 00:36:36,128 --> 00:36:38,660 Sa ei saa muuta suurust massiivi tegelikult iseenesest 800 00:36:38,660 --> 00:36:43,040 C. Võite eraldab massiiv, liikuda kõike vana 801 00:36:43,040 --> 00:36:45,380 uude ja nüüd on mõned ekstra ruumi, 802 00:36:45,380 --> 00:36:47,469 kuid see ei meeldi keelt nagu Java või Python 803 00:36:47,469 --> 00:36:49,760 või mõnel teisel keeles, mille mõned teist 804 00:36:49,760 --> 00:36:52,070 Võib olla kursis, kus te lihtsalt hoida lisades asju 805 00:36:52,070 --> 00:36:53,930 tüütuseni lõpuni massiivi. 806 00:36:53,930 --> 00:36:57,880 Kui teil on hulgaliselt suurus 6, mis on selle suurus, 807 00:36:57,880 --> 00:37:01,970 ja nii palju nagu idee varem võttes puhvrit teatav suurus, 808 00:37:01,970 --> 00:37:05,940 sa pead vist väravast läbi millise suurusega sa tahad seda? 809 00:37:05,940 --> 00:37:07,880 Kui sa vist liiga suur, sa raiskad ruumi. 810 00:37:07,880 --> 00:37:10,950 Kui sa vist liiga väike, siis ei saa salvestada, et andmete puhul vähemalt 811 00:37:10,950 --> 00:37:12,940 ilma palju rohkem tööd. 812 00:37:12,940 --> 00:37:18,180 >> Nii et täna, tänu suunanäitajaks, saame alustada õmblemisega koos oma custom 813 00:37:18,180 --> 00:37:20,989 andmestruktuurid ja Tegelikult siin on midagi 814 00:37:20,989 --> 00:37:23,030 mis näeb natuke rohkem segasena esimesel pilgul, 815 00:37:23,030 --> 00:37:26,440 aga see on see, mida me nimetame seotud nimekirja ja selle nimi selline esitatakse kokkuvõtlikult 816 00:37:26,440 --> 00:37:26,940 seda. 817 00:37:26,940 --> 00:37:29,550 See on nimekiri numbrid, või Sel juhul numbrite loendi, 818 00:37:29,550 --> 00:37:33,480 kuid see võiks olla nimekirja midagi, aga see on omavahel ühendatud nii, nooled, 819 00:37:33,480 --> 00:37:36,380 ja lihtsalt võtta vist mida tehnika 820 00:37:36,380 --> 00:37:38,310 me läheme, et oleks võimalik õmblema kokku 821 00:37:38,310 --> 00:37:42,540 omamoodi nagu popcorn niit, lingitud nimekirjad ristkülikud siin? 822 00:37:42,540 --> 00:37:43,936 Selle arvu? 823 00:37:43,936 --> 00:37:45,560 Mis on aluseks keele funktsioon? 824 00:37:45,560 --> 00:37:46,350 >> Sihtrühm: Pointer. 825 00:37:46,350 --> 00:37:47,308 >> DAVID Humala: Pointer. 826 00:37:47,308 --> 00:37:51,700 Nii kõik need nooled näitab siin osuti või lihtsalt aadressi. 827 00:37:51,700 --> 00:37:54,590 Nii teisisõnu, kui ma tahan salvestada numbrite loendi, 828 00:37:54,590 --> 00:37:59,040 Ma ei saa lihtsalt salvestada see, kui ma tahan võime kasvada ja kahaneb 829 00:37:59,040 --> 00:38:00,990 minu andmete struktuuri massiivi. 830 00:38:00,990 --> 00:38:03,000 Nii et ma pean olema natuke rafineeritumalt, 831 00:38:03,000 --> 00:38:05,720 aga märgata, et see pilt selline soovitab 832 00:38:05,720 --> 00:38:08,650 et kui oled just vähe teemasid ühendades kõike koos, 833 00:38:08,650 --> 00:38:13,100 Ilmselt ei ole nii raske teha ruumi vahele kaks nendest ristkülikud 834 00:38:13,100 --> 00:38:16,750 või kaks neist sõlmed, kui hakkame kutsudes neid, pane uus sõlm, 835 00:38:16,750 --> 00:38:19,547 ja siis mõned uut teemat, vaid kraavi kolm tipud kokku 836 00:38:19,547 --> 00:38:22,880 esimene, viimane, ja teiselt et sa lihtsalt lisada keskel. 837 00:38:22,880 --> 00:38:26,000 >> Ja tõepoolest seotud nimekirja, Erinevalt massiivi, on dünaamiline. 838 00:38:26,000 --> 00:38:27,840 Ta võib kasvada ja see võib kahaneb ja sa ei 839 00:38:27,840 --> 00:38:32,434 on teada, või hooli ette, kuidas palju andmeid sa lähed tuleb ladustamiseks, 840 00:38:32,434 --> 00:38:35,600 Aga selgub, et me peame olema natuke ettevaatlik, kuidas rakendada seda. 841 00:38:35,600 --> 00:38:39,070 Nii esimese Vaatleme, kuidas me ellu üks neist vähe ristkülikud. 842 00:38:39,070 --> 00:38:40,690 See on lihtne rakendada int. 843 00:38:40,690 --> 00:38:44,000 Sa lihtsalt öelda, int n ja seejärel sa saad 4 baiti int, 844 00:38:44,000 --> 00:38:49,089 aga kuidas ma saan int, nimetame seda n, ja siis osuti, olgem kutsuvad seda edasi. 845 00:38:49,089 --> 00:38:50,880 Võiksime nimetame neid asjad midagi tahame 846 00:38:50,880 --> 00:38:53,590 aga mul on vaja kohandatud andmete struktuuri. 847 00:38:53,590 --> 00:38:54,257 Jah? 848 00:38:54,257 --> 00:38:57,020 >> Sihtrühm: Ampersand [kuuldamatu]. 849 00:38:57,020 --> 00:39:00,940 >> DAVID Humala: Nii ampersand me kasutame saada aadressile sõlme potentsiaalselt. 850 00:39:00,940 --> 00:39:02,740 Aga me peame teise funktsioon C, et 851 00:39:02,740 --> 00:39:06,700 mulle võime luua See komme ristkülik, see custom 852 00:39:06,700 --> 00:39:08,919 varieeruv kui soovite, mälu. 853 00:39:08,919 --> 00:39:09,710 PUBLIKU a struct. 854 00:39:09,710 --> 00:39:10,626 DAVID Humala a struct. 855 00:39:10,626 --> 00:39:14,310 Meenuta eelmisel nädalal tutvustasime struct, seda suhteliselt lihtne märksõna 856 00:39:14,310 --> 00:39:16,254 mis võimaldab meil teha selliseid asju. 857 00:39:16,254 --> 00:39:18,420 C ei tulnud andmebaasi struktuuri nimetatakse õpilane. 858 00:39:18,420 --> 00:39:22,190 Kaasas int ja float ja char ja selline, kuid see ei tule koos õpilase, 859 00:39:22,190 --> 00:39:26,750 kuid me saame luua õpilaste andmete tüübi, üliõpilane struktuuri, selle süntaks 860 00:39:26,750 --> 00:39:27,250 siin. 861 00:39:27,250 --> 00:39:28,350 Ja te näete seda ikka ja jälle. 862 00:39:28,350 --> 00:39:30,426 Nii et ärge muretsege meeldejätmist märksõnu 863 00:39:30,426 --> 00:39:33,300 aga märksõna, mis on oluline on lihtsalt sellest, et me ütlesime struct 864 00:39:33,300 --> 00:39:37,590 ja siis me kutsusime ta õpilane ja sees õpilase oli nimi ja maja 865 00:39:37,590 --> 00:39:39,390 või ühiselamus vms. 866 00:39:39,390 --> 00:39:41,980 >> Ja nii nüüd täna teeme ettepaneku see. 867 00:39:41,980 --> 00:39:45,240 Olen lisanud mõned sõnad, aga kui ma tahan rakendada seda ristkülik, mis on 868 00:39:45,240 --> 00:39:48,440 sain nii int ja pointer, sa tead, mida ma olen 869 00:39:48,440 --> 00:39:51,540 läheb kuulutada struct nimetatakse sõlme. 870 00:39:51,540 --> 00:39:55,630 Ma olen ka sees on, ütled mis sõlme, see ristkülik, on int 871 00:39:55,630 --> 00:39:59,730 ja me nimetame seda n ja tal on järgmisel osuti. 872 00:39:59,730 --> 00:40:02,540 Ja see on natuke paljusõnaline, aga kui sa arvad, 873 00:40:02,540 --> 00:40:07,300 nooled, mis olid pildil Hetk tagasi on, mida andmete tüübi? 874 00:40:07,300 --> 00:40:12,330 Kui kõik need nooled on suunatud millist tüüpi andmestruktuuri? 875 00:40:12,330 --> 00:40:14,332 See ei ole suunatud ainult int per se. 876 00:40:14,332 --> 00:40:16,165 See osutab Kogu ristkülikukujuline asi 877 00:40:16,165 --> 00:40:18,720 ja et ristkülikukujuline asi, me ütlesime, nimetatakse sõlme. 878 00:40:18,720 --> 00:40:21,720 Ja nii me mingi pea rekursiivselt määratleda seda, nagu 879 00:40:21,720 --> 00:40:26,270 et sõlm, ütleme, sisaldab int nimetatakse n 880 00:40:26,270 --> 00:40:31,070 ja osuti nimetas tuleva ja tüüpi andmestruktuuri, mille 881 00:40:31,070 --> 00:40:35,770 et osuti punktid on ilmselt saab olema struct node. 882 00:40:35,770 --> 00:40:41,550 >> Nii et see on tüütult paljusõnaline ja lihtsalt olla pedantne, 883 00:40:41,550 --> 00:40:44,100 põhjus, miks me ei saa lihtsalt öelda seda, mis ausalt öeldes 884 00:40:44,100 --> 00:40:46,860 tundub palju loetavamaks seetõttu, meenutavad, et C lugeda 885 00:40:46,860 --> 00:40:48,710 asju ülevalt alla, vasakult paremale. 886 00:40:48,710 --> 00:40:54,120 See ei ole kuni saame semikoolonit et märksõna sõlme tegelikult olemas. 887 00:40:54,120 --> 00:40:57,980 Nii et kui me tahame sellist tsükliline viide sees andmed 888 00:40:57,980 --> 00:41:02,120 struktuuri, me peame seda tegema, kus ütleme struct node ülaosas, mis 889 00:41:02,120 --> 00:41:06,770 annab meile enam viis kirjeldada seda asi, siis sees ütleme struct node, 890 00:41:06,770 --> 00:41:09,560 ja siis kõige viimane rida ütleme, kõik õige, C, muide, 891 00:41:09,560 --> 00:41:12,060 lihtsalt nimetame seda kogu kuradi asi sõlme ja lõpetage 892 00:41:12,060 --> 00:41:14,360 kasutades märksõna struct kokku. 893 00:41:14,360 --> 00:41:18,030 Nii et see on lihtsalt omamoodi süntaktilise trikk, mis lõppkokkuvõttes võimaldab meil luua 894 00:41:18,030 --> 00:41:21,370 midagi, mis näeb välja täpselt nagu see. 895 00:41:21,370 --> 00:41:25,010 >> Nii et kui me eeldame, nüüd saame rakendada seda asja C, 896 00:41:25,010 --> 00:41:28,040 kuidas me tegelikult alustada liiklevad see? 897 00:41:28,040 --> 00:41:32,360 Noh, tegelikult kõik me peame tegema, on itereerima vasakult paremale ja lihtsalt 898 00:41:32,360 --> 00:41:35,960 Selline sisestada sõlmede või kustutada sõlmed või otsida asju kus me tahame, 899 00:41:35,960 --> 00:41:39,560 aga et seda teha, lähme edasi ja teha asju veidi rohkem reaalne, sest see 900 00:41:39,560 --> 00:41:42,560 on super madala siiani. 901 00:41:42,560 --> 00:41:45,700 Kas keegi sõna otseses mõttes meeldib olla esimene? 902 00:41:45,700 --> 00:41:46,200 OKEI. 903 00:41:46,200 --> 00:41:47,092 Tule üles. 904 00:41:47,092 --> 00:41:47,800 Mis su nimi on? 905 00:41:47,800 --> 00:41:48,499 >> DAVID: David. 906 00:41:48,499 --> 00:41:49,290 DAVID Humala: David. 907 00:41:49,290 --> 00:41:49,998 Meeldiv tutvuda. 908 00:41:49,998 --> 00:41:50,960 Mina ka. 909 00:41:50,960 --> 00:41:52,450 Hästi. 910 00:41:52,450 --> 00:41:53,990 Ja me vajame number 9. 911 00:41:53,990 --> 00:41:55,240 Mitte nii hea kui esimene, ehk. 912 00:41:55,240 --> 00:41:56,430 OK, number 9. 913 00:41:56,430 --> 00:41:59,667 Mitmed 17, palun. 914 00:41:59,667 --> 00:42:01,000 Lubage mul minna tagasi veidi kaugemal. 915 00:42:01,000 --> 00:42:03,980 Number 22, palun, ja kuidas kaugemal tagasi 916 00:42:03,980 --> 00:42:06,344 kui ma ei näe käed kõik väikesed või ei. 917 00:42:06,344 --> 00:42:08,010 Keegi on vabatahtlikult seal. 918 00:42:08,010 --> 00:42:08,968 Kas sa tahad tulla? 919 00:42:08,968 --> 00:42:10,450 Sinu küünarvarre vägisi läheb üles. 920 00:42:10,450 --> 00:42:12,340 OK, 17. 921 00:42:12,340 --> 00:42:13,690 22. 922 00:42:13,690 --> 00:42:15,120 26 on tulemas alla. 923 00:42:15,120 --> 00:42:18,450 Kas keegi tahaks forcefully-- Tule üles. 924 00:42:18,450 --> 00:42:21,030 Tegelik vabatahtlikuna. 925 00:42:21,030 --> 00:42:23,330 >> Nii väga kiiresti, kui kutid võiks korraldada 926 00:42:23,330 --> 00:42:26,550 ise lihtsalt meeldib sõlmed ekraanil. 927 00:42:26,550 --> 00:42:27,510 Aitäh. 928 00:42:27,510 --> 00:42:29,234 Ja sa pead olema 26. 929 00:42:29,234 --> 00:42:30,650 Kõik õige ja kiire asustamise. 930 00:42:30,650 --> 00:42:32,139 Nii et ma olen David ja sa oled ka? 931 00:42:32,139 --> 00:42:32,680 DAVID: David. 932 00:42:32,680 --> 00:42:33,721 DAVID Humala: Ja sa oled? 933 00:42:33,721 --> 00:42:34,229 JAKE: Jake. 934 00:42:34,229 --> 00:42:34,729 Sue: Sue. 935 00:42:34,729 --> 00:42:35,229 ALEX: Alex. 936 00:42:35,229 --> 00:42:36,475 Raphael: Raphael. 937 00:42:36,475 --> 00:42:37,100 TAYLOR: Taylor. 938 00:42:37,100 --> 00:42:37,466 DAVID Humala: Taylor. 939 00:42:37,466 --> 00:42:37,590 Suurepärane. 940 00:42:37,590 --> 00:42:39,810 Nii et need on meie vabatahtlikud täna ja minna 941 00:42:39,810 --> 00:42:43,090 ja vahetustega natuke niimoodi, ja lihtsalt minna ja hoida 942 00:42:43,090 --> 00:42:47,024 kellel oma numbrid olete või teie Esimene märk ja vasaku käega, 943 00:42:47,024 --> 00:42:48,940 minna ja lihtsalt ellu Nende nooled, lihtsalt 944 00:42:48,940 --> 00:42:51,360 nii, et vasak käsi on sõna otseses mõttes osutades iganes sa peaksid meelde 945 00:42:51,360 --> 00:42:54,610 kell, ja anda endale ruumi, nii et saame visuaalselt näha oma käsi tegelikult 946 00:42:54,610 --> 00:42:58,120 juhtides, ja te saate lihtsalt meelde omamoodi maapinnal on hea. 947 00:42:58,120 --> 00:43:03,040 >> Nii et siin on meil ahelloend ühe, kaks, kolm, neli, viis sõlmede esialgu 948 00:43:03,040 --> 00:43:05,860 ja teate, meil on see eriline pointer alguses, kes on 949 00:43:05,860 --> 00:43:09,770 võti, sest meil on jälgida kogu pikkuses nimekirja kuidagi. 950 00:43:09,770 --> 00:43:13,590 Need poisid, kuigi nad oled jäänud paremale, seljad mälu, 951 00:43:13,590 --> 00:43:15,950 nad võivad tegelikult olla kuskil in arvuti mällu. 952 00:43:15,950 --> 00:43:18,240 Nii et need poisid olla seisab kuskil laval 953 00:43:18,240 --> 00:43:20,960 ja see on hea, nii kaua, kui nad tegelikult osutades üksteisest 954 00:43:20,960 --> 00:43:22,770 aga hoida asjad puhas ja lihtne, siis me 955 00:43:22,770 --> 00:43:25,728 lihtsalt juhtida neid vasakult paremale, nagu Selles, kuid seal võib olla tohutu lüngad 956 00:43:25,728 --> 00:43:26,790 nende vahel sõlmi. 957 00:43:26,790 --> 00:43:30,710 >> Nüüd, kui ma tahan tegelikult lisada mõned uus väärtus, lähme edasi ja tee seda. 958 00:43:30,710 --> 00:43:33,720 Meil on võimalus nüüd valida teise sõlme. 959 00:43:33,720 --> 00:43:39,820 Ütle alustame koos mallocing 55. 960 00:43:39,820 --> 00:43:41,320 Kas keegi mind on malloc? 961 00:43:41,320 --> 00:43:42,280 OK, tulge sisse. 962 00:43:42,280 --> 00:43:42,992 Mis su nimi on? 963 00:43:42,992 --> 00:43:43,700 RAINBOW: Rainbow. 964 00:43:43,700 --> 00:43:44,050 DAVID Humala: Rainbow? 965 00:43:44,050 --> 00:43:44,810 Hästi. 966 00:43:44,810 --> 00:43:46,600 Malloc Rainbow. 967 00:43:46,600 --> 00:43:47,450 Tule üles. 968 00:43:47,450 --> 00:43:51,610 Nüüd peame endalt küsima algoritmiliselt kus saame panna 55. 969 00:43:51,610 --> 00:43:53,610 Nii et kõik meist ei tea, Ilmselt kus ta ilmselt 970 00:43:53,610 --> 00:43:55,401 kuulub, kui me üritame hoida seda järjestatud 971 00:43:55,401 --> 00:43:58,299 ja kui te poisid võiksid ühe samm tagasi, et me ei jääks välja 972 00:43:58,299 --> 00:43:59,590 laval, et oleks tore. 973 00:43:59,590 --> 00:44:01,420 Seega tegelikult Rainbow, alustada siin koos minuga, 974 00:44:01,420 --> 00:44:04,200 sest me arvuti nüüd saab näha ainult üks muutuja korraga. 975 00:44:04,200 --> 00:44:05,190 Nii et kui see on esimese sõlme. 976 00:44:05,190 --> 00:44:07,160 Pange tähele, et ta ei ole sõlme, ta on lihtsalt kursoriga 977 00:44:07,160 --> 00:44:10,270 ja sellepärast on ta juhtinud olla ainult suurus osuti, mitte 978 00:44:10,270 --> 00:44:11,780 üks neist täis ristkülikud. 979 00:44:11,780 --> 00:44:16,650 Nii et me läheme vaadata igal iteratsiooni on 55 alla 9? 980 00:44:16,650 --> 00:44:17,150 Ei. 981 00:44:17,150 --> 00:44:19,060 Kas 55 alla 17? 982 00:44:19,060 --> 00:44:19,720 Ei. 983 00:44:19,720 --> 00:44:20,800 Vähem kui 22? 984 00:44:20,800 --> 00:44:22,020 Vähem kui 26? 985 00:44:22,020 --> 00:44:23,390 Vähem kui 34? 986 00:44:23,390 --> 00:44:25,890 Ja nii nüüd, muidugi Rainbow kuulub lõpus. 987 00:44:25,890 --> 00:44:27,270 Nii et on selge, ja mida oli oma nimi, Taylor? 988 00:44:27,270 --> 00:44:27,895 >> TAYLOR: Taylor. 989 00:44:27,895 --> 00:44:32,510 DAVID Humala: Nii hulgast Taylori vasak käsi ja Rainbow käed siin 990 00:44:32,510 --> 00:44:38,324 kelle käest tuleb märkida, mida on Selleks, et lisada 55 sellesse nimekirja? 991 00:44:38,324 --> 00:44:39,240 Mida me peame tegema? 992 00:44:39,240 --> 00:44:39,700 Jah? 993 00:44:39,700 --> 00:44:41,140 >> Sihtrühm: Taylor käsi peab käsk vasakule. 994 00:44:41,140 --> 00:44:41,680 >> DAVID Humala: Täpselt. 995 00:44:41,680 --> 00:44:43,800 Nii sisestamist sõlme meie nimekirja lõppu 996 00:44:43,800 --> 00:44:47,140 on üsna lihtne, sest Taylor lihtsalt on punkti asemel maapinnal 997 00:44:47,140 --> 00:44:49,640 või me nimetame seda null, null on omamoodi puudumisel 998 00:44:49,640 --> 00:44:51,640 pointer või spetsiaalse null pointer, sa oled 999 00:44:51,640 --> 00:44:53,740 läheb meelde oma vasaku kätt Rainbow ja siis Rainbow, 1000 00:44:53,740 --> 00:44:55,910 Kuhu vasak Samas ilmselt juhtida? 1001 00:44:55,910 --> 00:44:56,570 Alla. 1002 00:44:56,570 --> 00:45:00,140 See ei ole hea, kui tema käsi on omamoodi juhtides siin maha või mingi tahes 1003 00:45:00,140 --> 00:45:00,640 mis teed. 1004 00:45:00,640 --> 00:45:02,407 See võiks pidada prügi väärtus, 1005 00:45:02,407 --> 00:45:04,240 aga kui ta osutab mõned tuntud väärtust, siis me 1006 00:45:04,240 --> 00:45:07,360 nimetame seda nulli või null, see on OK sest meil on mõiste selle 1007 00:45:07,360 --> 00:45:09,390 ja me teame nimekirja nüüd on lõppenud. 1008 00:45:09,390 --> 00:45:11,550 >> Mis siis veel üks suhteliselt lihtne juhul? 1009 00:45:11,550 --> 00:45:13,125 Kas me malloc 5? 1010 00:45:13,125 --> 00:45:14,010 Tule üles. 1011 00:45:14,010 --> 00:45:14,782 Mis su nimi on? 1012 00:45:14,782 --> 00:45:15,490 Tiffany: Tiffany. 1013 00:45:15,490 --> 00:45:16,000 DAVID Humala: Vabandust? 1014 00:45:16,000 --> 00:45:16,470 Tiffany: Tiffany. 1015 00:45:16,470 --> 00:45:16,880 DAVID Humala: Tiffany. 1016 00:45:16,880 --> 00:45:17,110 Hästi. 1017 00:45:17,110 --> 00:45:19,071 Tiffany on malloced väärtusega 5. 1018 00:45:19,071 --> 00:45:19,570 Tule üles. 1019 00:45:19,570 --> 00:45:23,820 See üks on suhteliselt lihtne liiga, kuid Vaatleme et operatsioonide nüüd. 1020 00:45:23,820 --> 00:45:25,820 See oli päris lihtne Taylor lõpus. 1021 00:45:25,820 --> 00:45:30,302 Number 5 on muidugi alla 9, ja nii on meil David meil Tiffany, 1022 00:45:30,302 --> 00:45:31,260 ja mis oli su nimi on? 1023 00:45:31,260 --> 00:45:31,680 >> JAKE: Jake. 1024 00:45:31,680 --> 00:45:32,470 >> DAVID Humala: Jake. 1025 00:45:32,470 --> 00:45:34,300 Tiffany, Jake ja David. 1026 00:45:34,300 --> 00:45:36,580 Kelle poolt tuleks ajakohastada esimesena? 1027 00:45:36,580 --> 00:45:39,260 1028 00:45:39,260 --> 00:45:40,590 Mida sa tahad teha siin? 1029 00:45:40,590 --> 00:45:45,244 Seal on paar võimalusi, kuid seal on ka üks või mitu viga viisil. 1030 00:45:45,244 --> 00:45:46,620 >> Sihtrühm: Alusta vasakpoolsem. 1031 00:45:46,620 --> 00:45:47,800 >> DAVID Humala: Alusta vasakpoolsem. 1032 00:45:47,800 --> 00:45:49,008 Kes on kõige vasakpoolsem siin siis on? 1033 00:45:49,008 --> 00:45:49,700 Sihtrühm: Esiteks. 1034 00:45:49,700 --> 00:45:50,366 >> DAVID Humala: OK. 1035 00:45:50,366 --> 00:45:53,781 Seega tuleb alustada esimesel ja kus sa soovite värskendada Davidi käsi olema? 1036 00:45:53,781 --> 00:45:54,780 Sihtrühm: Teel 5. 1037 00:45:54,780 --> 00:45:55,446 DAVID Humala: OK. 1038 00:45:55,446 --> 00:45:59,026 Taavet punkt kell viis või Tiffany siin ja praegu? 1039 00:45:59,026 --> 00:46:01,072 >> Sihtrühm: Tiffany viitab 9? 1040 00:46:01,072 --> 00:46:04,030 DAVID Humala: Perfect, välja arvatud Binky on Pea lihtsalt selline kukkus, eks? 1041 00:46:04,030 --> 00:46:06,820 Sest see, mis sul viga on see pilt sõna otseses mõttes? 1042 00:46:06,820 --> 00:46:08,070 Sihtrühm: Midagi on suunatud. 1043 00:46:08,070 --> 00:46:09,945 DAVID Humala: Miski pole osutades Jake nüüd. 1044 00:46:09,945 --> 00:46:13,360 Me oleme sõna otseses mõttes orvuks 9 ja 17, ja me oleme sõna otseses mõttes 1045 00:46:13,360 --> 00:46:18,450 lekkinud kõik see mälu, sest ajakohastamine Davidi käsi esimene, mis on 1046 00:46:18,450 --> 00:46:21,660 fine, kuivõrd see on õigesti osutades Tiffany nüüd, 1047 00:46:21,660 --> 00:46:25,410 aga kui keegi oli prognoos osutavad Jake, 1048 00:46:25,410 --> 00:46:27,490 siis me kaotasime kogu selles nimekirjas. 1049 00:46:27,490 --> 00:46:28,200 Nii saab tagasi võtta. 1050 00:46:28,200 --> 00:46:30,950 Nii et oli hea asi komistada, kuid olgem korrigeerida nüüd. 1051 00:46:30,950 --> 00:46:33,624 Mida me peaksime tegema esimese asemel? 1052 00:46:33,624 --> 00:46:34,124 Jah? 1053 00:46:34,124 --> 00:46:35,791 >> Sihtrühm: Tiffany nentima kell 9? 1054 00:46:35,791 --> 00:46:37,582 DAVID Humala: ma ei saa saada, et close to you. 1055 00:46:37,582 --> 00:46:38,720 Kes peaks viitama kell 9? 1056 00:46:38,720 --> 00:46:39,220 >> Sihtrühm: Tiffany. 1057 00:46:39,220 --> 00:46:39,390 >> DAVID Humala: Okei. 1058 00:46:39,390 --> 00:46:41,200 Nii Tiffany peaks esimese punkti juures 9. 1059 00:46:41,200 --> 00:46:43,550 Nii Tiffany peaks samasugusele väärtus 1060 00:46:43,550 --> 00:46:45,820 David, mis tundub koondatud hetkeks, 1061 00:46:45,820 --> 00:46:48,820 aga see on hea, sest nüüd, teisel samm, saame uuendada Davidi käsi 1062 00:46:48,820 --> 00:46:52,680 punkti Tiffany juures, ja siis, kui me lihtsalt selline puhas asju 1063 00:46:52,680 --> 00:46:55,740 nagu oleks see mingi kevadel nagu, Nüüd see on õige sisestamise. 1064 00:46:55,740 --> 00:46:56,700 Nii hea. 1065 00:46:56,700 --> 00:46:57,970 Nüüd me oleme peaaegu kohal. 1066 00:46:57,970 --> 00:47:01,075 Lisame veel ühe väärtus, nagu väärtus 20. 1067 00:47:01,075 --> 00:47:03,010 Kui meil oleks malloc üks lõplik vabatahtliku? 1068 00:47:03,010 --> 00:47:04,140 Tule üles. 1069 00:47:04,140 --> 00:47:06,224 Nii et see üks on natuke rohkem keeruline. 1070 00:47:06,224 --> 00:47:08,390 Aga tõesti, kood oleme kirjalikult, kuigi sõnades, 1071 00:47:08,390 --> 00:47:10,610 on nagu võttes kamp ja kui tingimused on nüüd, eks? 1072 00:47:10,610 --> 00:47:12,318 Meil oli tingimus kontrollida, kas see kuulub 1073 00:47:12,318 --> 00:47:13,840 lõpus, võibolla alguses. 1074 00:47:13,840 --> 00:47:15,940 Me peame mingi silmuse leida kohapeal keskel. 1075 00:47:15,940 --> 00:47:17,400 Nii saab teha, et mis su nimi on? 1076 00:47:17,400 --> 00:47:17,700 >> ERIC: Eric. 1077 00:47:17,700 --> 00:47:18,340 >> DAVID Humala: Eric? 1078 00:47:18,340 --> 00:47:18,660 Eric. 1079 00:47:18,660 --> 00:47:19,368 Meeldiv tutvuda. 1080 00:47:19,368 --> 00:47:20,490 Nii et meil on 20. 1081 00:47:20,490 --> 00:47:21,220 Vähem kui viis? 1082 00:47:21,220 --> 00:47:21,530 Ei. 1083 00:47:21,530 --> 00:47:22,160 Vähem kui üheksa? 1084 00:47:22,160 --> 00:47:22,410 Ei. 1085 00:47:22,410 --> 00:47:23,050 Vähem kui 17? 1086 00:47:23,050 --> 00:47:23,550 Ei. 1087 00:47:23,550 --> 00:47:23,740 OKEI. 1088 00:47:23,740 --> 00:47:25,701 Ta kuulub siin Teie nimed jälle on? 1089 00:47:25,701 --> 00:47:26,200 Sue: Sue. 1090 00:47:26,200 --> 00:47:26,880 DAVID Humala: Sue. 1091 00:47:26,880 --> 00:47:27,379 ALEX: Alex. 1092 00:47:27,379 --> 00:47:28,790 DAVID Humala: Sue, Alex ja? 1093 00:47:28,790 --> 00:47:29,290 ERIC: Eric. 1094 00:47:29,290 --> 00:47:30,120 DAVID Humala: Eric. 1095 00:47:30,120 --> 00:47:32,140 Kelle käes on vaja saada ajakohastatud esimesena? 1096 00:47:32,140 --> 00:47:32,930 >> Sihtrühm: Eric. 1097 00:47:32,930 --> 00:47:33,429 OKEI. 1098 00:47:33,429 --> 00:47:35,200 Nii Ericu peaks osutavad, kus? 1099 00:47:35,200 --> 00:47:35,930 Kell 22. 1100 00:47:35,930 --> 00:47:36,430 Väga hea. 1101 00:47:36,430 --> 00:47:38,180 Ja nüüd mis järgmiseks? 1102 00:47:38,180 --> 00:47:40,800 Sue saab siis osutavad Eric ja nüüd, kui te poisid lihtsalt 1103 00:47:40,800 --> 00:47:44,077 tegema ruumi, mis on hea visuaalselt, nüüd me oleme teinud sisestamist. 1104 00:47:44,077 --> 00:47:47,160 Nii saab nüüd arutama küsimust, kuid Tänan sind nii palju vabatahtlikke. 1105 00:47:47,160 --> 00:47:48,090 Väga hästi tehtud. 1106 00:47:48,090 --> 00:47:50,831 Saate hoida neid, kui soovite. 1107 00:47:50,831 --> 00:47:54,140 Ja meil on ilus lahkuminek kingitus, kui sa iga meeldib teha stressi pall. 1108 00:47:54,140 --> 00:47:56,030 Lubage mul taolist alla. 1109 00:47:56,030 --> 00:47:58,430 Mis on Buffee seda? 1110 00:47:58,430 --> 00:48:02,430 See tundub olevat hämmastav kuivõrd meil nüüd 1111 00:48:02,430 --> 00:48:06,360 kasutusele alternatiivina massiivi ei ole nii piiratud 1112 00:48:06,360 --> 00:48:07,780 massiivi mõned fikseeritud suurus. 1113 00:48:07,780 --> 00:48:09,380 Nad võivad kasvada dünaamiliselt. 1114 00:48:09,380 --> 00:48:13,220 >> Aga palju nagu oleme näinud nädalat Varem me ei saa kunagi midagi tasuta, 1115 00:48:13,220 --> 00:48:15,740 nagu kindlasti seal on kompromiss siin. 1116 00:48:15,740 --> 00:48:18,890 Nii tagurpidi on seotud nimekirja, on see dünaamika? 1117 00:48:18,890 --> 00:48:21,590 See võime kasvada ja ausalt öeldes Me oleks võinud teha delete 1118 00:48:21,590 --> 00:48:23,570 ja me võiks väheneda, kui vaja. 1119 00:48:23,570 --> 00:48:24,710 Mis hind on meil maksavad? 1120 00:48:24,710 --> 00:48:28,510 1121 00:48:28,510 --> 00:48:30,340 Kaks korda nii palju ruumi, esiteks. 1122 00:48:30,340 --> 00:48:34,010 Kui te vaatate pilti, enam olen ma talletamise täisarvud. 1123 00:48:34,010 --> 00:48:36,740 Ma talletamise täisarvud pluss suunanäitajaks. 1124 00:48:36,740 --> 00:48:38,240 Nii et ma kahekordistada palju ruumi. 1125 00:48:38,240 --> 00:48:40,740 Nüüd, võibolla see ei ole selline suur asi 4 baiti, 8 baiti, 1126 00:48:40,740 --> 00:48:43,160 kuid see võiks kindlasti lisada kuni suurte andmekogumite. 1127 00:48:43,160 --> 00:48:45,570 Mis on veel puudusi? 1128 00:48:45,570 --> 00:48:46,070 Jah? 1129 00:48:46,070 --> 00:48:48,010 >> Sihtrühm: Me peame läbida neist üks-by-one. 1130 00:48:48,010 --> 00:48:48,760 DAVID Humala: Jah. 1131 00:48:48,760 --> 00:48:50,260 Me peame läbida neist üks-by-one. 1132 00:48:50,260 --> 00:48:53,860 Tead mis, loobusime sellest super mugav funktsioon nurksulg 1133 00:48:53,860 --> 00:48:57,240 märke, õigemini tuntud muutmälu, 1134 00:48:57,240 --> 00:48:59,280 kus saame lihtsalt hüpata indiviidile element 1135 00:48:59,280 --> 00:49:01,470 kuid nüüd, kui ma veel olnud minu vabatahtlike siin 1136 00:49:01,470 --> 00:49:04,660 kui ma tahtsin leida number 22, ma ei saa lihtsalt 1137 00:49:04,660 --> 00:49:06,620 hüpata sulg midagi midagi. 1138 00:49:06,620 --> 00:49:10,530 Mul on üle vaatama nimekirja, palju nagu meie otsides näiteid lineaarselt, 1139 00:49:10,530 --> 00:49:12,260 leida number 22. 1140 00:49:12,260 --> 00:49:14,340 Nii näib, et oleme maksis seal. 1141 00:49:14,340 --> 00:49:16,430 Aga me ei saa siiski lahendada muid probleeme. 1142 00:49:16,430 --> 00:49:18,587 >> Tegelikult, las ma tutvustan vaid paar visuaale. 1143 00:49:18,587 --> 00:49:20,920 Nii et kui sa oled olnud alla Ema söögisaalis hiljuti, 1144 00:49:20,920 --> 00:49:23,320 sa meenutada, et nende korstnad plaate nagu see, 1145 00:49:23,320 --> 00:49:26,300 oleme laenanud need alates Annenberg enne klassi. 1146 00:49:26,300 --> 00:49:28,930 Nii et see virn, kuigi esindab tegelikult 1147 00:49:28,930 --> 00:49:30,860 arvuti teadust andmete struktuuri. 1148 00:49:30,860 --> 00:49:32,910 On andmeid struktuur infotehnoloogia 1149 00:49:32,910 --> 00:49:38,010 tuntakse virna, mis väga kenasti sobiv just see visuaalne. 1150 00:49:38,010 --> 00:49:41,380 Nii et kui kõik need kandikud ei ole salve, kuid nagu number ja ma tahtsin 1151 00:49:41,380 --> 00:49:45,010 salvestada numbreid, ma võiks panna ühte siin, 1152 00:49:45,010 --> 00:49:48,320 ja ma võiks panna teise siia, ja jätkata virnastamine numbrid 1153 00:49:48,320 --> 00:49:53,180 peal üksteist, ja mis potentsiaalselt kasulikke sellest 1154 00:49:53,180 --> 00:49:55,450 on see, et milline on mõju Käesoleva andmestruktuur? 1155 00:49:55,450 --> 00:49:58,045 Milline number ma tõmmake Esimene kõige mugavam? 1156 00:49:58,045 --> 00:50:00,640 1157 00:50:00,640 --> 00:50:03,030 Kõige hiljuti ühe panna seal. 1158 00:50:03,030 --> 00:50:06,430 >> Nii et see on see, mida me nimetame sisse arvuti teadusele LIFO andmete struktuuri. 1159 00:50:06,430 --> 00:50:08,070 Viimane, first out. 1160 00:50:08,070 --> 00:50:10,800 Ja me näeme peagi, miks mis võib olla kasulik, kuid nüüd, 1161 00:50:10,800 --> 00:50:12,200 lihtsalt kaaluda vara. 1162 00:50:12,200 --> 00:50:15,158 Ja see on selline loll, kui te arvate, kuidas söögisaal teeb. 1163 00:50:15,158 --> 00:50:17,910 Iga kord, kui nad puhtad plaate ja pane uuemad need peal, 1164 00:50:17,910 --> 00:50:22,160 sa oleks võinud varem puhas kuid lõpuks väga määrdunud ja tolmune 1165 00:50:22,160 --> 00:50:24,360 salve väga põhjas kui sa tegelikult kunagi 1166 00:50:24,360 --> 00:50:26,820 põhjani selle stack, sest sa lihtsalt 1167 00:50:26,820 --> 00:50:29,380 hoida paneb uue ja puhas need peal. 1168 00:50:29,380 --> 00:50:31,840 Sama asi võib juhtuda supermarket liiga. 1169 00:50:31,840 --> 00:50:35,450 Kui teil on ekraani puhul Piima ja iga kord CVS 1170 00:50:35,450 --> 00:50:37,610 või kes saab rohkem piima, sa lihtsalt pista piimad 1171 00:50:37,610 --> 00:50:39,880 sul on juba tahapoole ja paned uued, kuni ees, 1172 00:50:39,880 --> 00:50:43,088 sa lähed on päris vastik piima lõpus andmestruktuuri, 1173 00:50:43,088 --> 00:50:46,390 sest see on alati allosas või samaväärselt see alati tagasi. 1174 00:50:46,390 --> 00:50:50,407 >> Aga seal on veel üks võimalus mõelda vooder andmed ja näiteks see. 1175 00:50:50,407 --> 00:50:53,490 Kui sa oled üks neist inimestest, kellele meeldib rivistama väljaspool Apple kauplustes 1176 00:50:53,490 --> 00:50:55,610 kui uus toode on läbi, siis oled ilmselt 1177 00:50:55,610 --> 00:50:58,780 ei kasuta virna andmeid struktuuri, sest sa 1178 00:50:58,780 --> 00:51:03,070 oleks võõrandada kõigile teistele, kes on vooder osta mõned uued mänguasjad. 1179 00:51:03,070 --> 00:51:06,610 Pigem oled ilmselt kasutades millist andmestruktuuri 1180 00:51:06,610 --> 00:51:10,050 või millist süsteemi reaalses maailmas? 1181 00:51:10,050 --> 00:51:13,493 Loodetavasti on see rida või rohkem korralikult või rohkem Briti-like, järjekorda. 1182 00:51:13,493 --> 00:51:17,700 Ja selgub järjekorras on ka andmestruktuur infotehnoloogia, 1183 00:51:17,700 --> 00:51:19,700 kuid järjekord on väga atribuut. 1184 00:51:19,700 --> 00:51:20,820 See ei ole LIFO. 1185 00:51:20,820 --> 00:51:21,990 Viimane, first out. 1186 00:51:21,990 --> 00:51:22,800 Jumal hoidku. 1187 00:51:22,800 --> 00:51:24,280 See on vaid FIFO. 1188 00:51:24,280 --> 00:51:26,110 Esiteks on esimene välja. 1189 00:51:26,110 --> 00:51:27,970 Ja see on hea asi õigluse "nimel 1190 00:51:27,970 --> 00:51:30,428 kindlasti, kui sa vooder up super varahommikul. 1191 00:51:30,428 --> 00:51:33,400 Kui teil seal esimene, siis saada tahame kõigepealt hästi. 1192 00:51:33,400 --> 00:51:35,880 >> Ja nii kõik need andmed struktuure, järjekorrad ja korstnad 1193 00:51:35,880 --> 00:51:39,220 ja kobarad teised, selgub sa ei mõtle seda lihtsalt massiivi. 1194 00:51:39,220 --> 00:51:41,820 See on massiiv, võibolla fikseeritud suurus 4, aga see tahaks 1195 00:51:41,820 --> 00:51:44,990 olla omamoodi tore, kui me võiks lihtsalt hunnikusse plaate peaaegu lõpmatult pikk, kui me 1196 00:51:44,990 --> 00:51:46,780 on, et paljud plaate või numbrid. 1197 00:51:46,780 --> 00:51:48,840 Ehk me tahame kasuta ahelloend siin 1198 00:51:48,840 --> 00:51:51,800 kuid kompromiss saab olema potentsiaalselt et meil on vaja rohkem mälu, 1199 00:51:51,800 --> 00:51:55,930 võtab veidi rohkem aega, kuid me ei piirata kõrgust virna, 1200 00:51:55,930 --> 00:51:59,550 meelega Mather ekraani puhul Võib mahtu piirata virna 1201 00:51:59,550 --> 00:52:03,117 ja nii need disaini otsuseid või võimalusi meile lõpuks. 1202 00:52:03,117 --> 00:52:04,950 Nii need andmed struktuure, oleme alustanud 1203 00:52:04,950 --> 00:52:09,360 näha uusi ülemised piirid potentsiaalselt mida varem oli super kiire 1204 00:52:09,360 --> 00:52:11,260 ja kus me jätan välja täna ja kus 1205 00:52:11,260 --> 00:52:13,200 Loodame saada on kolmapäeval, siis me 1206 00:52:13,200 --> 00:52:15,740 hakkavad vaadata andmebaasi struktuur, mis võimaldab meil otsida 1207 00:52:15,740 --> 00:52:18,260 läbi andmete log lõpuks jälle. 1208 00:52:18,260 --> 00:52:21,470 Ja me nägime, et meenutavad nädalal null ja üks binaarne otsing või lõhe 1209 00:52:21,470 --> 00:52:22,180 ja vallutada. 1210 00:52:22,180 --> 00:52:26,240 See tuleb tagasi ja veel parem, Püha Graal jaoks sel kolmapäeval 1211 00:52:26,240 --> 00:52:29,510 saab tulla koos andmestruktuur, mis töötab tõesti 1212 00:52:29,510 --> 00:52:32,070 või teoreetiliselt konstantse ajaga, kusjuures 1213 00:52:32,070 --> 00:52:34,760 see ei ole oluline, kui palju miljoneid või miljardeid asju 1214 00:52:34,760 --> 00:52:38,470 meil on andmestruktuur, siis meid konstantset aega, võib-olla üks samm 1215 00:52:38,470 --> 00:52:41,387 või kaks sammu või 10 sammu, kuid pidev hulga samme 1216 00:52:41,387 --> 00:52:42,970 otsida, et andmete struktuuri. 1217 00:52:42,970 --> 00:52:46,300 See tõepoolest on Püha Graal kuid rohkem, et kolmapäeval. 1218 00:52:46,300 --> 00:52:49,045 Näeme siis. 1219 00:52:49,045 --> 00:52:53,704 >> [Muusika mängib] 1220 00:52:53,704 --> 00:56:08,448