1 00:00:00,000 --> 00:00:03,381 >> [Mūzikas atskaņošanai] 2 00:00:03,381 --> 00:00:10,626 3 00:00:10,626 --> 00:00:11,610 >> [Video atskaņošana] 4 00:00:11,610 --> 00:00:13,640 >> -Viņš Guļ. 5 00:00:13,640 --> 00:00:14,380 >> -Par ko? 6 00:00:14,380 --> 00:00:17,182 >> -Es Nezinu. 7 00:00:17,182 --> 00:00:19,990 >> -Tātad Ko mēs zinām? 8 00:00:19,990 --> 00:00:23,145 >> -That At 9:15, Ray Santoya bija pie ATM. 9 00:00:23,145 --> 00:00:23,644 -Yeah. 10 00:00:23,644 --> 00:00:27,030 Tātad jautājums ir, ko viņš dara at 9:16? 11 00:00:27,030 --> 00:00:29,720 >> -Shooting Par 9 milimetru kaut ko. 12 00:00:29,720 --> 00:00:31,540 Varbūt viņš redzēja snaiperis. 13 00:00:31,540 --> 00:00:33,412 >> -OR Strādāja kopā ar viņu. 14 00:00:33,412 --> 00:00:34,340 >> -Wait. 15 00:00:34,340 --> 00:00:36,200 Iet atpakaļ viens. 16 00:00:36,200 --> 00:00:36,975 >> -Ko tu redzi? 17 00:00:36,975 --> 00:00:44,400 18 00:00:44,400 --> 00:00:47,805 >> -Bring Viņa seju uz augšu visu ekrānu. 19 00:00:47,805 --> 00:00:48,680 >> -His Brilles. 20 00:00:48,680 --> 00:00:50,060 >> -Ir Ir atspulgs. 21 00:00:50,060 --> 00:01:00,455 22 00:01:00,455 --> 00:01:02,280 >> -Tas Ir Nuevitas beisbola komanda. 23 00:01:02,280 --> 00:01:03,110 Tas ir viņu logo. 24 00:01:03,110 --> 00:01:05,820 >> -Un Viņš runā ar kurš ir valkājot, ka jaka. 25 00:01:05,820 --> 00:01:06,670 >> [Beigtu atskaņošanu] 26 00:01:06,670 --> 00:01:07,628 >> DAVID Malan: Labi. 27 00:01:07,628 --> 00:01:11,210 Tas ir CS50, un tas ir nedaudz vairāk no [dzirdams], ar kuru jūs esat 28 00:01:11,210 --> 00:01:12,890 dabbling ar problēmu noteikti četri. 29 00:01:12,890 --> 00:01:16,606 Šodien mēs sākam izskatīties mazliet vairāk dziļi pie šīm lietām, ko sauc norādes, 30 00:01:16,606 --> 00:01:18,480 kas, lai gan tas ir diezgan arcane tēmu, 31 00:01:18,480 --> 00:01:20,813 izrādās, ka tas notiek būt līdzeklis, ar kuru mēs 32 00:01:20,813 --> 00:01:24,320 var sākt veidot un montāža daudz sarežģītākus programmas. 33 00:01:24,320 --> 00:01:28,150 Bet mēs to izdarījām pagājušajā trešdienā veicot kādu Claymation pirmās. 34 00:01:28,150 --> 00:01:30,190 Tātad tas, atsaukšana, ir Mīkstās un mēs izmantojām viņu 35 00:01:30,190 --> 00:01:33,148 lai apskatīt programmu, kas nav īsti darīt kaut ko interesantu, 36 00:01:33,148 --> 00:01:34,950 bet tas bija atklāt dažas problēmas. 37 00:01:34,950 --> 00:01:38,570 Tātad, lai sāktu šodien, kāpēc nav mēs staigāt ātri cauri daži no šiem pasākumiem, 38 00:01:38,570 --> 00:01:41,920 mēģināt destilēt uz cilvēka izteiksmē tieši to, kas notiek šeit 39 00:01:41,920 --> 00:01:45,410 un kāpēc tas ir slikti, un tad pāriet uz un faktiski sākt veidot kaut ko 40 00:01:45,410 --> 00:01:46,309 ar šo metodi? 41 00:01:46,309 --> 00:01:48,350 Tātad tie bija pirmie divas līnijas šajā programmā 42 00:01:48,350 --> 00:01:51,340 un lajs izteiksmē, ko Vai šīs divas līnijas dara? 43 00:01:51,340 --> 00:01:55,600 Kāds, kurš ir pietiekami ērts ar to, kas norādīts uz ekrāna? 44 00:01:55,600 --> 00:01:58,340 45 00:01:58,340 --> 00:02:00,120 Kādas ir šīs divas līnijas dara? 46 00:02:00,120 --> 00:02:02,070 Tas vēl nav viss, kas atšķiras no nedēļas viena, 47 00:02:02,070 --> 00:02:03,611 bet ir dažas jaunas īpašs simbols. 48 00:02:03,611 --> 00:02:04,152 Yeah? 49 00:02:04,152 --> 00:02:05,628 Atpakaļ tur. 50 00:02:05,628 --> 00:02:07,092 >> Mērķauditorija: deklarēšana norādes? 51 00:02:07,092 --> 00:02:08,050 DAVID Malan: Say atkal? 52 00:02:08,050 --> 00:02:08,860 Mērķauditorija: deklarēšana norādes? 53 00:02:08,860 --> 00:02:11,776 DAVID Malan: deklarēšana norādes un pieņemsim noslīpēt mazliet vairāk. 54 00:02:11,776 --> 00:02:14,050 Mērķauditorija: [dzirdams] adrese x un pēc tam y. 55 00:02:14,050 --> 00:02:15,300 DAVID Malan: Un tad risināt. 56 00:02:15,300 --> 00:02:18,550 Tātad, tieši to, ko mēs darām ir mēs deklarēt divus mainīgos. 57 00:02:18,550 --> 00:02:21,252 Šie mainīgie, lai gan, gatavojas būt int tipa zvaigzne, kas 58 00:02:21,252 --> 00:02:23,210 konkrētāk nozīmē viņi gatavojas glabāt 59 00:02:23,210 --> 00:02:26,450 adresi int, attiecīgi, x un y. 60 00:02:26,450 --> 00:02:27,660 Tagad ir vēl kādas vērtības? 61 00:02:27,660 --> 00:02:32,621 Vai ir kādas faktiskās adreses šajās divi mainīgie šajā brīdī? 62 00:02:32,621 --> 00:02:33,120 Nē. 63 00:02:33,120 --> 00:02:35,030 Tas ir tikai tā sauktais atkritumu vērtības. 64 00:02:35,030 --> 00:02:38,120 Ja jums nav faktiski piešķirt mainīgs, kāds bija RAM 65 00:02:38,120 --> 00:02:42,224 iepriekš gatavojas aizpildīt ar nullēm un tie abi no šiem mainīgajiem. 66 00:02:42,224 --> 00:02:44,140 Bet mēs vēl nezinām kādi tie ir, un tas ir 67 00:02:44,140 --> 00:02:47,060 būs galvenais, kāpēc mīkstās zaudējis galvu pagājušajā nedēļā. 68 00:02:47,060 --> 00:02:49,980 >> Tātad tas bija claymation iemiesojums šis 69 00:02:49,980 --> 00:02:53,580 saskaņā ar kuru jums ir tikai divas mainīgie, maz apļveida gabali māla, 70 00:02:53,580 --> 00:02:57,330 ka var saglabāt mainīgos, bet kā tad apkopoja bultas liecina, 71 00:02:57,330 --> 00:03:00,640 viņi nav faktiski norādot jebkur zināms per se. 72 00:03:00,640 --> 00:03:03,670 Tātad mums bija šo līniju, un tas bija jauns pagājušajā nedēļā, malloc atmiņu 73 00:03:03,670 --> 00:03:07,130 piešķiršana, kas ir tikai iedomātā veids stāsta operētājsistēmu, Linux 74 00:03:07,130 --> 00:03:09,750 vai Mac OS vai Windows, hey, dod man kādu atmiņu, 75 00:03:09,750 --> 00:03:11,780 un viss, kas jums ir, lai pastāstītu operētājsistēma 76 00:03:11,780 --> 00:03:14,699 ir tas, kas, kad jautā to atmiņu. 77 00:03:14,699 --> 00:03:16,990 Tas nav gatavojas aprūpi, ko jūs gatavojas darīt ar to, 78 00:03:16,990 --> 00:03:19,786 bet jums ir nepieciešams, lai pastāstītu par apkalpojošā Sistēma, ko veidā malloc. 79 00:03:19,786 --> 00:03:20,286 Yeah? 80 00:03:20,286 --> 00:03:21,078 >> Mērķauditorija: Cik daudz? 81 00:03:21,078 --> 00:03:21,994 DAVID Malan: Cik daudz? 82 00:03:21,994 --> 00:03:25,280 Cik daudz baitos, un tāpēc, tas, atkal, izdomāts piemērs, ir tikai saku, 83 00:03:25,280 --> 00:03:27,360 iedodiet man lielumu int. 84 00:03:27,360 --> 00:03:30,550 Tagad, izmērs int ir četri baiti vai 32 biti. 85 00:03:30,550 --> 00:03:32,850 Tātad tas ir tikai veids, kā sakot, hey, operētājsistēmas, 86 00:03:32,850 --> 00:03:37,290 iedodiet man četri baiti atmiņas ka es varu izmantot manā rīcībā, 87 00:03:37,290 --> 00:03:40,560 un konkrēti, ko dara malloc atgriešanās attiecībā 88 00:03:40,560 --> 00:03:41,795 šai rieciens četru baitu? 89 00:03:41,795 --> 00:03:44,110 90 00:03:44,110 --> 00:03:44,860 Mērķauditorija: Adrese? 91 00:03:44,860 --> 00:03:45,901 DAVID Malan: norādīto adresi. 92 00:03:45,901 --> 00:03:47,580 Šīs rieciens četru baitu adrese. 93 00:03:47,580 --> 00:03:48,190 Tieši tā. 94 00:03:48,190 --> 00:03:51,430 Un tā tas ir to, kas glabājas galu galā X un tas ir iemesls, kāpēc mums nav īsti 95 00:03:51,430 --> 00:03:55,240 vienalga kāds skaits, kas adrese ir, vai tas ir OX1 vai ox2 96 00:03:55,240 --> 00:03:57,110 vai kāds mistisks heksadecimālo adrese. 97 00:03:57,110 --> 00:03:59,850 Mēs vienkārši rūp gleznieciski ka mainīgais x ir tagad 98 00:03:59,850 --> 00:04:01,630 norādot uz šo rieciens atmiņas. 99 00:04:01,630 --> 00:04:05,570 Tātad bulta apzīmē rādītāju, vai konkrētāk, atmiņas adrese. 100 00:04:05,570 --> 00:04:09,120 Bet atkal, mums nav parasti aprūpi kādi ir šie faktiskie adreses. 101 00:04:09,120 --> 00:04:11,780 Tagad šī līnija saka ko lajs izteiksmē? 102 00:04:11,780 --> 00:04:14,330 Star x saņem 42 semikolu. 103 00:04:14,330 --> 00:04:17,390 Ko tas nozīmē? 104 00:04:17,390 --> 00:04:18,200 Jūs vēlaties doties? 105 00:04:18,200 --> 00:04:20,102 Vai nav ieskrāpēt savu kaklu. 106 00:04:20,102 --> 00:04:22,360 >> Mērķauditorija: No x adrese ir pie 42. 107 00:04:22,360 --> 00:04:24,300 >> DAVID Malan: No x adrese ir 42. 108 00:04:24,300 --> 00:04:25,190 Ne gluži. 109 00:04:25,190 --> 00:04:28,485 Tik tuvu, bet ne gluži, jo tur ir zvaigzne, kas ir prefixing šo x. 110 00:04:28,485 --> 00:04:29,860 Tāpēc mums ir nepieciešams, lai kniebiens mazliet. 111 00:04:29,860 --> 00:04:31,032 Yeah? 112 00:04:31,032 --> 00:04:36,044 >> Mērķauditorija: Vērtība, ka rādītājs x ir vērsta uz ir 42. 113 00:04:36,044 --> 00:04:36,710 DAVID Malan: OK. 114 00:04:36,710 --> 00:04:40,840 Vērtība, ka rādītājs ir x norādot uz, teiksim, ir 42, 115 00:04:40,840 --> 00:04:44,165 vai citiem vārdiem sakot, zvaigzne x saka, dodieties uz jebkādu adresi 116 00:04:44,165 --> 00:04:48,340 ir X, vai tas ir 1 Oxford Street vai 33 Oxford Street 117 00:04:48,340 --> 00:04:51,850 vai OX1 vai ox33, kāds ka ciparu adrese ir, 118 00:04:51,850 --> 00:04:54,380 zvaigžņu x ir dereferencing x. 119 00:04:54,380 --> 00:04:57,297 Tā iet uz šo adresi un tad ielieciet numuru 42 tur. 120 00:04:57,297 --> 00:04:59,380 Tā, ka būtu ekvivalents veids, kā pateikt, ka. 121 00:04:59,380 --> 00:05:01,860 Tā ka viss ir labi, un pēc tam mēs pārstāvam attēlu 122 00:05:01,860 --> 00:05:05,370 šādi kur mēs esam pievienojuši 42 uz šo rieciens četriem 123 00:05:05,370 --> 00:05:09,370 baiti uz labajā pusē, bet Šī līnija bija, kad viss gāja greizi 124 00:05:09,370 --> 00:05:11,120 un mīkstās galva popped off šajā brīdī, 125 00:05:11,120 --> 00:05:15,290 jo sliktas lietas notiek, kad Jūs dereference atkritumu vērtībām 126 00:05:15,290 --> 00:05:18,210 vai jūs dereference nederīgs norādes, un es saku nederīgs 127 00:05:18,210 --> 00:05:21,020 jo šajā brīdī Stāsts, kas ir iekšā y? 128 00:05:21,020 --> 00:05:24,440 Kas ir y vērtība balstās par pēdējo pāris soļus? 129 00:05:24,440 --> 00:05:25,360 Yeah? 130 00:05:25,360 --> 00:05:26,115 Kas tas ir? 131 00:05:26,115 --> 00:05:26,990 >> Mērķauditorija: adrese. 132 00:05:26,990 --> 00:05:28,460 DAVID Malan: An adrese. 133 00:05:28,460 --> 00:05:31,910 Būtu jābūt adrese bet es inicializēts to? 134 00:05:31,910 --> 00:05:32,800 Tāpēc man vēl nav. 135 00:05:32,800 --> 00:05:35,430 Tātad, kas ir zināms, ka tur? 136 00:05:35,430 --> 00:05:37,590 Tas ir tikai daži atkritumu vērtība. 137 00:05:37,590 --> 00:05:41,500 Tas varētu būt arī jebkura cita adrese, no nulles līdz 2 miljardi, ja jums ir divi gigs RAM, 138 00:05:41,500 --> 00:05:44,289 vai nulles līdz 4 miljardiem, ja esat ieguva četras gigabaiti RAM. 139 00:05:44,289 --> 00:05:46,080 Tas ir daži atkritumu vērtība, bet problēma ir 140 00:05:46,080 --> 00:05:48,200 ka operētājsistēmas, ja tas nav devis jums 141 00:05:48,200 --> 00:05:51,140 ka rieciens atmiņas, kas īpaši ka jūs mēģināt doties uz, 142 00:05:51,140 --> 00:05:54,650 tas parasti notiek, lai radītu ko mēs esam redzējuši, kā segmentācijas vaina. 143 00:05:54,650 --> 00:05:57,810 Tātad faktiski, kāds no jums, kuri ir cīnījās par problēmām darba laika 144 00:05:57,810 --> 00:06:00,393 vai problēmas, kas ir vairāk parasti ar mēģina izdomāt 145 00:06:00,393 --> 00:06:02,150 segmentācija vaina, tas parasti nozīmē, 146 00:06:02,150 --> 00:06:05,017 jūs pieskaroties segmentu atmiņu, kas jums nevajadzētu būt. 147 00:06:05,017 --> 00:06:07,350 Jūs esat pieskaroties atmiņa, kas operētājsistēma ir ne 148 00:06:07,350 --> 00:06:10,450 ļāva jums pieskarties, vai tas ir dodoties pārāk tālu savā masīvs 149 00:06:10,450 --> 00:06:12,870 vai jau šodien, vai tas ir tāpēc, ka jūs esat pieskaroties 150 00:06:12,870 --> 00:06:14,780 atmiņa, kas vienkārši ir daži atkritumu vērtība. 151 00:06:14,780 --> 00:06:18,230 >> To darot zvaigzne x šeit veida nenoteiktu uzvedību. 152 00:06:18,230 --> 00:06:22,030 Jums nekad nevajadzētu darīt, jo izredzes ir, programma ir tikai gatavojas crash, 153 00:06:22,030 --> 00:06:24,050 jo tu saki, dodieties uz šo adresi 154 00:06:24,050 --> 00:06:27,000 un jums nav ne jausmas, kur šī adrese faktiski ir. 155 00:06:27,000 --> 00:06:30,300 Tātad operētājsistēma ir iespējams gatavojas crash savu programmu 156 00:06:30,300 --> 00:06:33,840 kā rezultātā un, protams, tas ir kas noticis tur mīkstās. 157 00:06:33,840 --> 00:06:37,210 Tātad galu galā, mīkstās fiksēts šī problēma ar šo. 158 00:06:37,210 --> 00:06:38,909 Tātad šajā programmā pati bija kļūdains. 159 00:06:38,909 --> 00:06:41,450 Bet, ja jūs veida veidot uz priekšu un izpildīt šo līniju vietā, 160 00:06:41,450 --> 00:06:45,580 y vienāds x tikai nozīmē, neatkarīgi adrese ir x, arī nodot to y. 161 00:06:45,580 --> 00:06:48,740 >> Un tā gleznieciski, mēs esam pārstāvēta ar divām bultām 162 00:06:48,740 --> 00:06:51,570 no x un y no norādot tajā pašā vietā. 163 00:06:51,570 --> 00:06:55,760 Tātad semantiski, x ir vienāds uz y jo gan no tiem 164 00:06:55,760 --> 00:07:00,300 Uzglabājam pats adrese, ergo norādot 42, 165 00:07:00,300 --> 00:07:04,910 un tagad, kad jūs sakāt zvaigzne y, dodieties uz adresi y, 166 00:07:04,910 --> 00:07:06,790 Tas ir interesants blakus efekts. 167 00:07:06,790 --> 00:07:10,320 Tā adrese y ir pats kā adresi x. 168 00:07:10,320 --> 00:07:15,060 Tātad, ja jūs sakāt doties uz adresi Y un mainīt vērtību līdz 13, 169 00:07:15,060 --> 00:07:17,140 kurš gan cits ietekmē? 170 00:07:17,140 --> 00:07:21,100 X ir, D punktu, tā sakot, būtu jāietekmē arī. 171 00:07:21,100 --> 00:07:24,340 >> Un tiešām, kā Nick vērsa šo attēlu in Claymation bija tieši tā. 172 00:07:24,340 --> 00:07:28,665 Pat ja mēs sekojam rādītāju y, mēs beidzās vienā un tajā pašā vietā, 173 00:07:28,665 --> 00:07:32,780 un tāpēc, ja mēs drukāt out X vai Y ir pointee, 174 00:07:32,780 --> 00:07:35,720 tad mēs varētu redzēt vērtību 13. 175 00:07:35,720 --> 00:07:37,927 Tagad, es saku pointee būt saskan ar video. 176 00:07:37,927 --> 00:07:39,760 Programmētāji, lai mana zināšanas, nekad faktiski 177 00:07:39,760 --> 00:07:42,460 teikt vārdu pointee, to, kas ir norādīts 178 00:07:42,460 --> 00:07:44,650 at, bet konsekvences ar video, saprotam 179 00:07:44,650 --> 00:07:47,520 tas ir viss, kas bija nozīmēja šajā situācijā. 180 00:07:47,520 --> 00:07:54,190 Tātad kādi jautājumi par Claymation vai norādes vai malloc tikai vēl? 181 00:07:54,190 --> 00:07:54,850 Nē? 182 00:07:54,850 --> 00:07:55,470 Viss kārtībā. 183 00:07:55,470 --> 00:07:58,560 >> Tātad bez turpmāka ADO, pieņemsim to apskatīt 184 00:07:58,560 --> 00:08:00,700 at ja tas ir reāli ticis izmantots kādu laiku. 185 00:08:00,700 --> 00:08:03,580 Tāpēc mēs esam bija šo CS50 bibliotēku kas ir ieguvuši visas šīs funkcijas. 186 00:08:03,580 --> 00:08:06,810 Mēs esam izmantojuši GetInt daudz, GetString, Iespējams GetLongLong agrāk 187 00:08:06,810 --> 00:08:09,840 manā PSET vienu vai tā, bet Kas patiesībā ir notiek? 188 00:08:09,840 --> 00:08:12,920 Nu, pieņemsim ātri apskatīt zem motora pārsega pie programmas, kas 189 00:08:12,920 --> 00:08:17,017 iedvesmo kāpēc mēs jums CS50 bibliotēka, un pat kā pagājušajā nedēļā, 190 00:08:17,017 --> 00:08:18,850 mēs sākām veikt tiem mācību riteņi off. 191 00:08:18,850 --> 00:08:21,080 Tātad tas ir tagad sakārtots no sekciju, ko 192 00:08:21,080 --> 00:08:23,690 turpinās jau iekšpusē CS50 bibliotēkā, 193 00:08:23,690 --> 00:08:27,250 pat ja mēs tagad sāksim pārvietojas prom no tā, lai lielākā daļa programmu. 194 00:08:27,250 --> 00:08:29,460 >> Tātad šī ir programma, ko sauc scanf 0. 195 00:08:29,460 --> 00:08:30,510 Tas ir super īss. 196 00:08:30,510 --> 00:08:33,909 Tas vienkārši ir šīs rindas, bet tas ievieš funkciju sauc scanf 197 00:08:33,909 --> 00:08:36,909 ka mēs patiešām gatavojas redzēt brīdis iekšpusē CS50 bibliotēkā, 198 00:08:36,909 --> 00:08:38,600 kaut arī nedaudz citā formā. 199 00:08:38,600 --> 00:08:41,330 Tātad šī programma par 16 līniju tiek atzīta par mainīgo x. 200 00:08:41,330 --> 00:08:43,150 Tātad man četri baiti uz int. 201 00:08:43,150 --> 00:08:45,750 Tas ir bijis stāsta lietotājs, numuru, lūdzu, un pēc tam 202 00:08:45,750 --> 00:08:49,010 Tas ir interesants līnija, kas faktiski saites kopā pagājušajā nedēļā 203 00:08:49,010 --> 00:08:49,790 un šis. 204 00:08:49,790 --> 00:08:53,230 Scanf, un tad pamanāt, ka tas aizņem formāta virkne, tāpat kā printf, 205 00:08:53,230 --> 00:08:57,480 % i ir int, un tad tas aizņem Otrs arguments, kas izskatās mazliet 206 00:08:57,480 --> 00:08:58,260 bailīgs. 207 00:08:58,260 --> 00:09:01,880 Tas ir Ampersand x, un atgādināt, mēs redzējām tikai šo vienu reizi pagājušajā nedēļā. 208 00:09:01,880 --> 00:09:03,465 Kāda Ampersand x pārstāv? 209 00:09:03,465 --> 00:09:06,210 210 00:09:06,210 --> 00:09:08,450 Kāda Ampersand darīt C? 211 00:09:08,450 --> 00:09:08,950 Yeah? 212 00:09:08,950 --> 00:09:10,024 >> Mērķauditorija: Par adrese. 213 00:09:10,024 --> 00:09:11,190 DAVID Malan: Par adrese. 214 00:09:11,190 --> 00:09:13,190 Tātad, tas ir pretējs no zvaigzne operatora, 215 00:09:13,190 --> 00:09:17,270 tā kā zvaigzne operators saka, dodieties uz šī adrese, tad Ampersand operators 216 00:09:17,270 --> 00:09:20,280 saka, izrēķināt adrese šo mainīgo, 217 00:09:20,280 --> 00:09:23,530 un tāpēc tas ir galvenais, jo scanf nolūks dzīvē 218 00:09:23,530 --> 00:09:26,320 ir, lai skenētu lietotāja ieeja no klaviatūras, 219 00:09:26,320 --> 00:09:29,970 atkarībā no tā, kāds viņš vai viņa veidiem, un pēc tam izlasīju, ka lietotāja ievadi 220 00:09:29,970 --> 00:09:32,970 uz mainīgo, taču mēs redzēja pēdējo divu nedēļu laikā 221 00:09:32,970 --> 00:09:36,080 ka mijmaiņas funkcija, kas mums mēģināja pūlēm īstenot 222 00:09:36,080 --> 00:09:37,110 bija tikai sadalīti. 223 00:09:37,110 --> 00:09:42,470 Atgādināt, ka ar mijmaiņas funkciju, ja mēs tikko paziņoja, A un B, kā ints, 224 00:09:42,470 --> 00:09:47,040 mums nebija veiksmīgi mijmaiņas divi mainīgie iekšpusē mijmaiņas 225 00:09:47,040 --> 00:09:50,080 tāpat kā ar pienu un OV, bet tiklīdz swap atgriezās, 226 00:09:50,080 --> 00:09:55,200 kāds bija rezultāts attiecībā uz x un y, sākotnējās vērtības? 227 00:09:55,200 --> 00:09:55,700 Nekas. 228 00:09:55,700 --> 00:09:56,200 Jā. 229 00:09:56,200 --> 00:09:59,754 Nekas nav noticis, ka laiks, jo mijmaiņas mainīt tikai savus vietējos kopijas, 230 00:09:59,754 --> 00:10:01,670 kas ir, visi šoreiz, kad mēs esam 231 00:10:01,670 --> 00:10:04,010 ir iet uz argumentiem uz funkcijām, mēs esam 232 00:10:04,010 --> 00:10:05,939 tikai iet kopijas šiem argumentiem. 233 00:10:05,939 --> 00:10:07,980 Jūs varat darīt ar to neatkarīgi vēlaties ar viņiem, 234 00:10:07,980 --> 00:10:10,890 bet viņi nāksies nē Ietekme uz sākotnējās vērtības. 235 00:10:10,890 --> 00:10:13,650 Tātad tas ir problemātiski, ja jums vēlas, lai ir funkcija, piemēram scanf 236 00:10:13,650 --> 00:10:17,170 dzīvē, kuras mērķis ir, lai skenētu lietotāja ievadi no klaviatūras 237 00:10:17,170 --> 00:10:22,010 un tad aizpildiet sagataves, tāpēc, lai runā, tas ir, dot mainīgo līdzīgi X 238 00:10:22,010 --> 00:10:25,410 vērtība, jo, ja es būtu lai tikai iet X scanf, 239 00:10:25,410 --> 00:10:28,790 ja jūs uzskatāt loģiku pēdējais nedēļa, scanf var darīt, ko vien tā vēlas 240 00:10:28,790 --> 00:10:33,100 kopiju, X, bet tas nevarēja pastāvīgi mainās x, ja mēs dodam 241 00:10:33,100 --> 00:10:37,120 scanf dārgumu karti, tā sakot, kur x iezīmē vietas, kur 242 00:10:37,120 --> 00:10:41,860 mēs caurlaide adresi x tā, ka scanf var iet tur un faktiski maiņa 243 00:10:41,860 --> 00:10:42,920 vērtība x. 244 00:10:42,920 --> 00:10:45,080 Un tā patiešām, visi ka šī programma nav 245 00:10:45,080 --> 00:10:53,180 ja es drīkstu scanf 0, manā avotā 5m katalogs, veikt scanf 0, 246 00:10:53,180 --> 00:10:57,730 dot slash scanf, skaits lūdzu 50, paldies par 50. 247 00:10:57,730 --> 00:11:01,020 >> Tātad, tas nav viss, kas interesanti, Bet kas ir patiešām notiek 248 00:11:01,020 --> 00:11:04,820 ir tā, ka, tiklīdz es aicinu scanf šeit, vērtību x 249 00:11:04,820 --> 00:11:06,410 tiek neatgriezeniski mainījusies. 250 00:11:06,410 --> 00:11:08,335 Tagad tas šķiet jauki un labs, un patiesībā, tas 251 00:11:08,335 --> 00:11:11,200 Šķiet, tāpat kā mums nav tiešām ir nepieciešams CS50 bibliotēka vispār vairs. 252 00:11:11,200 --> 00:11:13,960 Piemēram, pieņemsim palaist Tas vēlreiz šeit. 253 00:11:13,960 --> 00:11:15,750 Ļaujiet man atvērt to uz otru. 254 00:11:15,750 --> 00:11:20,600 Pamēģināsim numuru, lūdzu, un tā vietā, lai sakot, 50 kā agrāk, 255 00:11:20,600 --> 00:11:22,810 pieņemsim tikai teikt nē. 256 00:11:22,810 --> 00:11:24,000 Labi, ka ir mazliet dīvaini. 257 00:11:24,000 --> 00:11:25,270 LABI. 258 00:11:25,270 --> 00:11:28,680 Un tikai daži muļķības šeit. 259 00:11:28,680 --> 00:11:31,170 Tātad tas, šķiet, nav rīkoties kļūdainus situācijās. 260 00:11:31,170 --> 00:11:33,620 Tāpēc mums ir nepieciešams, lai minimāli sākumu pievienojot dažas kļūdām pārbaudi 261 00:11:33,620 --> 00:11:37,460 lai pārliecinātos, ka lietotājs ir drukāti faktisko skaitu, piemēram, 50, 262 00:11:37,460 --> 00:11:40,720 jo acīmredzot rakstīt vārdu netiek atpazīta kā problemātiska, 263 00:11:40,720 --> 00:11:42,020 bet tas, iespējams, vajadzētu būt. 264 00:11:42,020 --> 00:11:46,450 >> Apskatīsim šo versiju, tagad tas ir mans mēģinājums reimplement GetString. 265 00:11:46,450 --> 00:11:48,437 Ja scanf ir tas viss funkcionalitāte celta, 266 00:11:48,437 --> 00:11:51,270 kāpēc mēs tika dabbling ar šiem mācību riteņi piemēram GetString? 267 00:11:51,270 --> 00:11:55,450 Nu, šeit ir iespējams mana vienkāršs versija GetString 268 00:11:55,450 --> 00:12:00,766 saskaņā ar kuru pirms nedēļas, es varētu teikt, man stīgu un sauc to bufera. 269 00:12:00,766 --> 00:12:03,390 Šodien, es esmu gatavojas sākt tikai sakot char zvaigzne, kas, atsaukšanu, 270 00:12:03,390 --> 00:12:04,400 tas ir tikai sinonīms. 271 00:12:04,400 --> 00:12:06,629 Tas izskatās scarier bet tas ir tieši tas pats. 272 00:12:06,629 --> 00:12:09,420 Tātad man mainīgo sauc buferis kas notiek, lai saglabātu virkni, 273 00:12:09,420 --> 00:12:12,780 pateikt lietotāja virkni lūdzu, un tad, tāpat kā līdz šim, 274 00:12:12,780 --> 00:12:17,760 pamēģināsim aizņemties šo nodarbību scanf % s šoreiz un tad iet buferī. 275 00:12:17,760 --> 00:12:19,310 Tagad, ātri veselība pārbaudītu. 276 00:12:19,310 --> 00:12:22,120 Kādēļ es nesaku Ampersand bufera šoreiz? 277 00:12:22,120 --> 00:12:25,190 278 00:12:25,190 --> 00:12:26,625 Secināt no iepriekšējā piemērā. 279 00:12:26,625 --> 00:12:28,000 Mērķauditorija: Char zvaigzne ir rādītājs. 280 00:12:28,000 --> 00:12:29,920 DAVID Malan: Tieši tā, jo šoreiz, palijas 281 00:12:29,920 --> 00:12:34,080 zvaigzne jau ir rādītājs, adrese, pēc definīcijas minētā zvaigzne ir tur. 282 00:12:34,080 --> 00:12:37,530 Un, ja scanf sagaida adresi, pietiek tikai nodot buferī. 283 00:12:37,530 --> 00:12:39,260 Man nevajag teikt aizvieto & zīmes buferi. 284 00:12:39,260 --> 00:12:42,177 Par ziņkārīgs, jūs varētu darīt kaut kas līdzīgs šim. 285 00:12:42,177 --> 00:12:43,510 Tas ir cita nozīme. 286 00:12:43,510 --> 00:12:47,240 Tas dotu jums rādītāju uz rādītāju, kas ir faktiski 287 00:12:47,240 --> 00:12:50,050 derīga lieta C, bet Tagad, pieņemsim glabā to vienkārši 288 00:12:50,050 --> 00:12:51,750 un uzturēt stāstu konsekventa. 289 00:12:51,750 --> 00:12:54,100 Es esmu tikai gatavojas pāriet bufera un tas ir pareizi. 290 00:12:54,100 --> 00:12:56,487 Problēma gan ir šis. 291 00:12:56,487 --> 00:12:58,820 Ļaujiet man iet uz priekšu un palaist šo Programma pēc apkopojot to. 292 00:12:58,820 --> 00:13:00,902 Padarīt scanf 1. 293 00:13:00,902 --> 00:13:02,610 Damn tas, mana kompilators s noķert manu kļūdu. 294 00:13:02,610 --> 00:13:04,090 Dodiet man vienu sekundi. 295 00:13:04,090 --> 00:13:05,460 Šķindēt. 296 00:13:05,460 --> 00:13:06,990 Teiksim scanf-1.c. 297 00:13:06,990 --> 00:13:10,880 298 00:13:10,880 --> 00:13:11,380 LABI. 299 00:13:11,380 --> 00:13:12,720 Tur mēs ejam. 300 00:13:12,720 --> 00:13:14,280 Man to vajag. 301 00:13:14,280 --> 00:13:16,750 CS50 ID ir dažādi konfigurācijas uzstādījumi 302 00:13:16,750 --> 00:13:18,280 kas aizsargā jūs pret sevi. 303 00:13:18,280 --> 00:13:21,300 Man vajadzēja atslēgt tiem, ko darbojas šķindēt manuāli šoreiz. 304 00:13:21,300 --> 00:13:22,140 Tātad stīgu lūdzu. 305 00:13:22,140 --> 00:13:25,560 Es iešu uz priekšu un tips mana mīļākā Hello World. 306 00:13:25,560 --> 00:13:26,490 OK, null. 307 00:13:26,490 --> 00:13:27,700 Tas nav tas, ko es drukāti. 308 00:13:27,700 --> 00:13:29,690 Tātad, tas ir orientējošs kaut kas ir nepareizi. 309 00:13:29,690 --> 00:13:33,920 Ļaujiet man iet uz priekšu un tips kas patiešām ilgu virkni. 310 00:13:33,920 --> 00:13:37,210 Paldies par spēkā es nezinu ja es esmu gatavojas, lai varētu crash to. 311 00:13:37,210 --> 00:13:40,240 Pamēģināsim nedaudz kopiju pastas un redzēt, ja tas palīdz. 312 00:13:40,240 --> 00:13:43,290 Vienkārši ielīmējiet daudz šo. 313 00:13:43,290 --> 00:13:47,310 Tas noteikti ir lielāks stīgu nekā parasti. 314 00:13:47,310 --> 00:13:51,450 Pieņemsim tikai tiešām rakstīt to. 315 00:13:51,450 --> 00:13:51,950 Nē. 316 00:13:51,950 --> 00:13:52,650 Sasodīts. 317 00:13:52,650 --> 00:13:53,480 Komanda nav atrasts. 318 00:13:53,480 --> 00:13:54,550 Tātad tas ir nesaistīti. 319 00:13:54,550 --> 00:13:56,440 Tas ir tāpēc, ka es ielīmēts daži slikti rakstzīmes, 320 00:13:56,440 --> 00:13:59,780 bet tas izrādās nav dodas uz darbu. 321 00:13:59,780 --> 00:14:03,510 >> Mēģināsim to vēl vienu reizi, jo tas ir vairāk jautri, ja mēs faktiski crash to. 322 00:14:03,510 --> 00:14:09,116 Pieņemsim rakstīt šo un tagad, es esmu gatavojas kopēt patiešām ilgi virkni 323 00:14:09,116 --> 00:14:10,990 un tagad pieņemsim redzēt, ja mēs var crash šī lieta. 324 00:14:10,990 --> 00:14:14,235 Paziņojums Es izlaist telpas un Jaunās līnijas un semikoliem 325 00:14:14,235 --> 00:14:16,035 un visas funky rakstzīmes. 326 00:14:16,035 --> 00:14:16,535 Enter. 327 00:14:16,535 --> 00:14:21,090 328 00:14:21,090 --> 00:14:22,880 Un tagad tīkls ir vienkārši ir lēns. 329 00:14:22,880 --> 00:14:27,460 Es tur nospiestu Ctrl-V ir pārāk garš, skaidri. 330 00:14:27,460 --> 00:14:28,190 Sasodīts! 331 00:14:28,190 --> 00:14:29,260 Komanda nav atrasts. 332 00:14:29,260 --> 00:14:29,780 >> LABI. 333 00:14:29,780 --> 00:14:32,240 Nu, jautājums ir tomēr šādi. 334 00:14:32,240 --> 00:14:36,910 Tātad, kas patiesībā notiek ar šo deklarāciju 335 00:14:36,910 --> 00:14:39,240 no char zvaigžņu bufera uz 16 līnijas? 336 00:14:39,240 --> 00:14:41,820 Tātad, ko es saņemu kad es apliecinu rādītāju? 337 00:14:41,820 --> 00:14:47,440 Viss, ko es saņemu ir četru baitu vērtība sauc buferis, bet to, kas ir iekšpusē no tā 338 00:14:47,440 --> 00:14:49,540 pašlaik? 339 00:14:49,540 --> 00:14:50,930 Tas ir tikai daži atkritumu vērtība. 340 00:14:50,930 --> 00:14:54,170 Tāpēc, ka jebkurā laikā jūs deklarēt mainīgo C, tas ir tikai daži atkritumu vērtība, 341 00:14:54,170 --> 00:14:56,220 un mēs sākam paklupt šo realitāti. 342 00:14:56,220 --> 00:14:59,720 Tagad, kad es saku scanf, dodieties uz šo adresi 343 00:14:59,720 --> 00:15:01,520 un nodot neatkarīgi lietotājs veidiem. 344 00:15:01,520 --> 00:15:06,400 Ja lietotājs veidiem sveiki pasaule, labi, kur es varu likt to? 345 00:15:06,400 --> 00:15:07,750 Buffer ir atkritumu vērtība. 346 00:15:07,750 --> 00:15:11,510 >> Tātad tas ir veids kā bulta kas ir norādot, kurš zina, kur. 347 00:15:11,510 --> 00:15:13,880 Varbūt tas ir norādot tepat manā atmiņā. 348 00:15:13,880 --> 00:15:16,560 Un tad, kad lietotājs veidi Hello pasaulē, 349 00:15:16,560 --> 00:15:22,380 Programma mēģina ielieciet stīgu hello world slīpsvītra 0 350 00:15:22,380 --> 00:15:23,910 šajā rieciens atmiņas. 351 00:15:23,910 --> 00:15:27,070 Bet ar lielu varbūtību, bet protams, nav 100% varbūtība, 352 00:15:27,070 --> 00:15:30,440 dators gatavojas tad crash programma jo tas nav 353 00:15:30,440 --> 00:15:32,490 atmiņas man būtu atļauts pieskarties. 354 00:15:32,490 --> 00:15:36,330 Tātad īsumā, šī programma ir kļūdains un tieši šī iemesla dēļ. 355 00:15:36,330 --> 00:15:38,070 Es esmu pilnīgi nedara to, ko? 356 00:15:38,070 --> 00:15:42,366 Kādi pasākumi ir man izlaist, tāpat kā mēs izlaist ar mīkstās pirmo piemēru? 357 00:15:42,366 --> 00:15:42,866 Yeah? 358 00:15:42,866 --> 00:15:43,710 >> Mērķauditorija: Memory sadalījums? 359 00:15:43,710 --> 00:15:45,001 >> DAVID Malan: Atmiņas piešķiršana. 360 00:15:45,001 --> 00:15:48,400 Es neesmu faktiski piešķirti jebkurš atmiņas par šo virkni. 361 00:15:48,400 --> 00:15:50,270 Tātad, mēs varam noteikt šo pāris veidos. 362 00:15:50,270 --> 00:15:52,700 Viens, mēs varam saglabāt to vienkārši un patiesībā, tagad jūs esat 363 00:15:52,700 --> 00:15:55,116 gatavojas sākt, lai redzētu neskaidrākas no līnijas starp to, ko 364 00:15:55,116 --> 00:15:58,520 masīvs ir, ko virkne ir, ko char zvaigzne ir, ko masīvs chars 365 00:15:58,520 --> 00:15:59,020 ir. 366 00:15:59,020 --> 00:16:02,450 Lūk Otrs piemērs iesaistot stīgām un paziņojumu 367 00:16:02,450 --> 00:16:05,690 viss, ko es esmu darījusi tiešsaistē 16 ir, nevis sakot 368 00:16:05,690 --> 00:16:09,530 ka buferis būs char zvaigzne, rādītājs uz rieciens atmiņas, 369 00:16:09,530 --> 00:16:14,057 Es esmu gatavojas ļoti aktīvi dot pats buferis 16 rakstzīmes, 370 00:16:14,057 --> 00:16:16,390 un patiesībā, ja jūs esat iepazinušies ar terminu buferizācijas, 371 00:16:16,390 --> 00:16:20,570 droši vien no pasaules video, ja video ir buferizācijas, buferizācijas, 372 00:16:20,570 --> 00:16:21,175 buferizācijas. 373 00:16:21,175 --> 00:16:22,550 Nu, kāda ir saistība šeit? 374 00:16:22,550 --> 00:16:24,960 Nu, iekšpuse YouTube un iekšpusē video atskaņotāji 375 00:16:24,960 --> 00:16:27,200 parasti ir masīvs kas ir lielāks par 16. 376 00:16:27,200 --> 00:16:30,340 Tas varētu būt masīvs izmēra vienas megabaitu, varbūt 10 megabaiti, 377 00:16:30,340 --> 00:16:34,330 un uz šī masīvā dara savu pārlūkprogrammu lejupielādēt visu ķekars baitu, 378 00:16:34,330 --> 00:16:37,500 visu ķekars megabaitu video, un video atskaņotājs, 379 00:16:37,500 --> 00:16:40,930 YouTube ir vai kurš ir, sākas izlasot baiti no šī masīva, 380 00:16:40,930 --> 00:16:43,530 un jebkurā laikā jūs redzat Vārds buferizācijas, buferizācijas, 381 00:16:43,530 --> 00:16:46,350 tas nozīmē, ka spēlētājs ir gotten līdz gada beigām šī masīva. 382 00:16:46,350 --> 00:16:50,430 Tīkls ir tik lēni, ka tas ir ne uzpildīt masīvs ar vairāk baitu 383 00:16:50,430 --> 00:16:55,610 un tā jūs no bitiem lai parādītu lietotājam. 384 00:16:55,610 --> 00:16:59,430 >> Tātad buferis ir piemērots termins, šeit, ka tas ir tikai masīvs, rieciens atmiņas. 385 00:16:59,430 --> 00:17:02,530 Un tas būs salabot jo izrādās 386 00:17:02,530 --> 00:17:07,410 ka jūs varat ārstēt bloki, it kā tie ir adreses, lai gan buferis 387 00:17:07,410 --> 00:17:10,710 ir tikai simbols, tas ir rakstzīmju sekvence, buferis, 388 00:17:10,710 --> 00:17:14,760 tas ir noderīgs man, programmētājs, Jūs varat iet savu nosaukumu apkārt 389 00:17:14,760 --> 00:17:17,079 it kā tas būtu rādītājs, it kā tā 390 00:17:17,079 --> 00:17:21,000 bija adrese rieciens atmiņas par 16 chars. 391 00:17:21,000 --> 00:17:24,530 Tātad tas ir teikt, es varu iet scanf tieši šis vārds 392 00:17:24,530 --> 00:17:30,670 un tāpēc tagad, ja es drīkstu šo programmu, padarīt scanf 2, dot slīpsvītra scanf 2, 393 00:17:30,670 --> 00:17:35,386 un ierakstiet hello world, Ievadiet, ka LAIKU_ 394 00:17:35,386 --> 00:17:37,590 >> Hmm, kas notika? 395 00:17:37,590 --> 00:17:39,340 String lūdzu. 396 00:17:39,340 --> 00:17:41,430 Ko es daru nepareizi? 397 00:17:41,430 --> 00:17:43,800 Hello pasaulē, buferis. 398 00:17:43,800 --> 00:17:44,705 Sveika pasaule. 399 00:17:44,705 --> 00:17:48,201 400 00:17:48,201 --> 00:17:49,420 Ah, es zinu, ko tas dara. 401 00:17:49,420 --> 00:17:49,920 LABI. 402 00:17:49,920 --> 00:17:51,628 Tātad, tas ir lasījums up līdz pirmajā telpā. 403 00:17:51,628 --> 00:17:55,680 Tātad pieņemsim apkrāptu tikai brīdi un teikt, es tikai gribēju kaut ko rakstīt 404 00:17:55,680 --> 00:18:01,408 tiešām ilgi, piemēram, tas ir garš teikums tas ir viens, divi, trīs, četri, pieci, 405 00:18:01,408 --> 00:18:04,420 seši, septiņi, astoņi, deviņi, 10, 11, 12, 13, 14, 15, 16. 406 00:18:04,420 --> 00:18:05,300 LABI. 407 00:18:05,300 --> 00:18:07,600 Tas ir patiešām garš teikums. 408 00:18:07,600 --> 00:18:10,710 Tātad šis teikums ir ilgāk nekā 16 rakstzīmes 409 00:18:10,710 --> 00:18:13,670 un tad, kad es hit Enter, kas notiek varētu notikt? 410 00:18:13,670 --> 00:18:16,940 Nu, šajā gadījumā stāsts, man bija deklarēta buferis 411 00:18:16,940 --> 00:18:22,190 faktiski ir masīvs ar 16 chars gatavi iet. 412 00:18:22,190 --> 00:18:27,426 Tātad, viens, divi, trīs, četri, pieciem, sešiem, septiņi, astoņi, deviņi, 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 Tātad 16 rakstzīmes, un tagad, kad es lasīt kaut kā šis ir garš 415 00:18:34,410 --> 00:18:43,950 teikums, kas notiek varētu notikt, ir ka es esmu gatavojas jālasa tas ir garš 416 00:18:43,950 --> 00:18:49,660 S-E-N-T-E-N-C-E, teikums. 417 00:18:49,660 --> 00:18:52,270 >> Tātad šis ir apzināti slikta lieta, ka es 418 00:18:52,270 --> 00:18:55,060 glabāt rakstveidā aiz robežas mana masīvs, 419 00:18:55,060 --> 00:18:56,660 ārpus robežām manu buferi. 420 00:18:56,660 --> 00:19:00,100 Es varētu saņemt laimīgs un programma turpināsim darbojas un ir vienalga, 421 00:19:00,100 --> 00:19:03,450 bet vispārīgi runājot, šis patiešām crash savu programmu, 422 00:19:03,450 --> 00:19:06,440 un tā ir kļūda manā kodēt mirkli es solis 423 00:19:06,440 --> 00:19:08,576 aiz robežām Minētās masīvs, jo I 424 00:19:08,576 --> 00:19:10,450 nezinu, vai tas ir vienmēr gatavojas crash 425 00:19:10,450 --> 00:19:12,120 vai ja es esmu tikai gatavojas saņemt laimīgs. 426 00:19:12,120 --> 00:19:15,750 Tātad tas ir problemātiski, jo šajā gadījumā, tas, šķiet, strādāt 427 00:19:15,750 --> 00:19:20,931 un pieņemsim kārdināt liktenis šeit, lai gan IDE, šķiet paciest diezgan daudz 428 00:19:20,931 --> 00:19:21,430 of-- 429 00:19:21,430 --> 00:19:22,040 >> Tur mēs ejam. 430 00:19:22,040 --> 00:19:23,240 Beidzot. 431 00:19:23,240 --> 00:19:26,470 Tāpēc es esmu vienīgais, kas var redzēt. 432 00:19:26,470 --> 00:19:29,630 Tāpēc es tikko bija daudz jautrības rakstīt out patiešām ilgu faktisko frāzi 433 00:19:29,630 --> 00:19:32,800 ka tas noteikti pārsniedza 16 baiti, jo I 434 00:19:32,800 --> 00:19:38,050 drukāti šajā trakajā ilgi multi-line frāze, un tad pamanīt to, kas noticis. 435 00:19:38,050 --> 00:19:41,110 Programma izmēģināju drukāšana un tad saņēmu segmentāciju vaina 436 00:19:41,110 --> 00:19:44,430 un segmentācijas kļūdas ir tad, kad kaut kā tas notiek 437 00:19:44,430 --> 00:19:47,650 un operētājsistēma saka nē, nevar pieskarties šo atmiņu. 438 00:19:47,650 --> 00:19:49,570 Mēs ejam, lai nogalinātu Programma kopumā. 439 00:19:49,570 --> 00:19:51,180 >> Tātad tas šķiet problemātiska. 440 00:19:51,180 --> 00:19:54,540 Es esmu uzlabojis programmā, kurā vismaz ir dažas atmiņas, 441 00:19:54,540 --> 00:19:58,000 bet tas, šķiet, vienīgi funkcija GetString, lai iegūtu 442 00:19:58,000 --> 00:20:00,780 virknes kādu ierobežotu garumu 16. 443 00:20:00,780 --> 00:20:04,200 Tātad, ja jūs vēlaties, lai atbalstītu ilgāk teikumi nekā 16 rakstzīmes, 444 00:20:04,200 --> 00:20:04,880 ko tu dari? 445 00:20:04,880 --> 00:20:07,970 Nu, jūs varat palielināt izmērs šo buferi līdz 32. 446 00:20:07,970 --> 00:20:09,190 vai kas šķiet veida īss. 447 00:20:09,190 --> 00:20:12,260 Kāpēc ne mēs tikai veikt tas 1000, bet virzīt atpakaļ. 448 00:20:12,260 --> 00:20:17,100 Kāda ir atbilde intuitīvi par tikko izvairoties no šo problēmu, padarot 449 00:20:17,100 --> 00:20:20,660 mans buferis lielāks, piemēram, 1000 chars? 450 00:20:20,660 --> 00:20:23,470 Īstenojot GetString šādā veidā. 451 00:20:23,470 --> 00:20:27,130 Kas ir labi vai slikti šeit? 452 00:20:27,130 --> 00:20:28,033 Yeah? 453 00:20:28,033 --> 00:20:30,574 Mērķauditorija: Ja jūs saistīt pat daudz vietas un jums nav to izmantot, 454 00:20:30,574 --> 00:20:33,500 tad jūs nevarat pārdalīt šo vietu. 455 00:20:33,500 --> 00:20:34,500 DAVID Malan: Protams. 456 00:20:34,500 --> 00:20:38,480 Tas ir izšķērdīgs, ciktāl, ja jums nav tiešām ir nepieciešams 900 no šiem baitu 457 00:20:38,480 --> 00:20:41,057 un tomēr jūs lūdzot 1000 kopā anyway, 458 00:20:41,057 --> 00:20:44,140 jūs vienkārši patērē vairāk atmiņas par lietotāja datorā, nekā jums nepieciešams, 459 00:20:44,140 --> 00:20:45,740 un galu galā, daži jūs jau esat saskārušās 460 00:20:45,740 --> 00:20:47,620 dzīvē, ka tad, kad jūs esat darbojas daudz programmas 461 00:20:47,620 --> 00:20:50,470 un viņi ēd up daudz atmiņu, Tas faktiski var ietekmēt veiktspēju 462 00:20:50,470 --> 00:20:52,220 un lietotāja pieredze uz datora. 463 00:20:52,220 --> 00:20:56,090 Tātad tas ir sava veida slinks risinājums, lai pārliecinātos, un otrādi, 464 00:20:56,090 --> 00:21:00,140 tas nav tikai izšķērdīgs, kāda problēma joprojām, pat ja es darīt manu buferi 465 00:21:00,140 --> 00:21:02,100 1000? 466 00:21:02,100 --> 00:21:02,600 Yeah? 467 00:21:02,600 --> 00:21:04,475 >> Mērķauditorija: virkne ir garums 1001. 468 00:21:04,475 --> 00:21:05,350 DAVID Malan: Tieši tā. 469 00:21:05,350 --> 00:21:08,280 Ja jūsu virkne ir garums 1001, Jums ir tieši tāda pati problēma, 470 00:21:08,280 --> 00:21:10,705 un mans arguments, es tikai tad dara to 2000, 471 00:21:10,705 --> 00:21:12,830 bet jūs nezināt, kas pārietu cik liels tas būtu, 472 00:21:12,830 --> 00:21:16,890 un vēl, man ir apkopot savu programmu pirms izīrēšanas cilvēki izmanto un lejuplādēt 473 00:21:16,890 --> 00:21:17,390 tā. 474 00:21:17,390 --> 00:21:21,490 Tātad tas ir tieši tāda veida sīkumi, ka CS50 bibliotēku mēģina 475 00:21:21,490 --> 00:21:24,750 lai palīdzētu mums ar, un mēs tikai skatiens dažas no pamatā esošā īstenošanu 476 00:21:24,750 --> 00:21:29,790 šeit, bet tas ir CS50 dot C. Tas ir fails, kas ir bijis par CS50 IDE 477 00:21:29,790 --> 00:21:31,420 Visas šīs nedēļas, kas jūs esat, izmantojot. 478 00:21:31,420 --> 00:21:34,280 Tas ir iepriekš apkopoti un jūs esat bijis, izmantojot to automātiski 479 00:21:34,280 --> 00:21:38,780 pēc būtības kam ir domuzīme L CS50 karogu ar šķindēt, 480 00:21:38,780 --> 00:21:42,300 bet, ja es ritiniet uz leju cauri visiem šīs funkcijas, šeit ir GetString, 481 00:21:42,300 --> 00:21:44,636 un tikai, lai dotu jums garša Kas notiek, 482 00:21:44,636 --> 00:21:46,760 pieņemsim ātri apskatīt relatīvā sarežģītība. 483 00:21:46,760 --> 00:21:48,870 Tas nav super garš funkcija, bet mēs neesam 484 00:21:48,870 --> 00:21:52,530 ir jādomā visu grūti par kā iet par iegūt stīgas. 485 00:21:52,530 --> 00:21:55,660 >> Tātad, šeit ir mana buferis un es acīmredzot inicializēt to null. 486 00:21:55,660 --> 00:21:57,990 Tas, protams, ir pats kā char zvaigzne, 487 00:21:57,990 --> 00:22:00,585 bet es nolēma Īstenojot CS50 bibliotēku 488 00:22:00,585 --> 00:22:02,460 ka, ja mēs ejam būt pilnīgi dinamiska, 489 00:22:02,460 --> 00:22:05,770 Es nezinu, iepriekš cik liels ir stīgu lietotājiem gatavojas vēlaties saņemt. 490 00:22:05,770 --> 00:22:08,140 Tāpēc es esmu gatavojas sākt tikai ar tukšu virkni 491 00:22:08,140 --> 00:22:11,507 un es esmu gatavojas izveidot tik daudz atmiņa kā man ir nepieciešams, lai ietilptu lietotāja string 492 00:22:11,507 --> 00:22:13,340 un ja man nav pietiekami, es esmu gatavojas lūgt 493 00:22:13,340 --> 00:22:15,010 operētājsistēma vairāk atmiņas. 494 00:22:15,010 --> 00:22:17,510 Es esmu gatavojas pārvietot savu string uz lielāku rieciens atmiņas 495 00:22:17,510 --> 00:22:21,847 un es esmu gatavojas atbrīvot vai atbrīvotu nepietiekami liels rieciens atmiņas 496 00:22:21,847 --> 00:22:23,680 un mēs esam tikai gatavojas lai to paveiktu iteratīvi. 497 00:22:23,680 --> 00:22:25,570 >> Tik ātrs skatiens, šeit ir tikai mainīga 498 00:22:25,570 --> 00:22:28,780 ar kuru es esmu gatavojas, lai sekotu kapacitātes mana bufera. 499 00:22:28,780 --> 00:22:30,071 Cik baiti var fit? 500 00:22:30,071 --> 00:22:32,070 Lūk mainīgs n ar kas es esmu gatavojas glabāt 501 00:22:32,070 --> 00:22:36,200 līdzi, cik baiti ir faktiski bufera vai ka lietotājs ir ievadījis. 502 00:22:36,200 --> 00:22:39,900 Ja jūs esat nav redzējis šo pirms, jums var norādīt, ka mainīgais, piemēram, int 503 00:22:39,900 --> 00:22:46,370 ir neparakstīts, kas, kā norāda nosaukums, nozīmē, ka tas ir ne-negatīvs, un kāpēc būtu 504 00:22:46,370 --> 00:22:50,590 Es kādreiz vēlaties apgrūtināt precizējot ka int ir ne tikai int, 505 00:22:50,590 --> 00:22:52,540 bet tas ir neparakstīts int? 506 00:22:52,540 --> 00:22:55,064 Tas ir ne-negatīvs int. 507 00:22:55,064 --> 00:22:56,355 Ko [dzirdams] nozīmē? 508 00:22:56,355 --> 00:22:58,910 >> Mērķauditorija: Tas apraksta summu atmiņas, kas var būt [nedzirdama]. 509 00:22:58,910 --> 00:22:59,660 >> DAVID Malan: Jā. 510 00:22:59,660 --> 00:23:03,710 Tātad, ja es saku neparakstīts, tas ir faktiski sniedzot jums vienu mazliet papildus atmiņas 511 00:23:03,710 --> 00:23:07,440 un šķiet, ka sava veida dumjš, bet, ja jums ir viena mazliet papildu atmiņas, ka 512 00:23:07,440 --> 00:23:09,940 nozīmē, ka jums ir divreiz vairāk vērtības var pārstāvēt, 513 00:23:09,940 --> 00:23:11,570 jo tas var būt 0 vai 1. 514 00:23:11,570 --> 00:23:14,660 Tātad pēc noklusējuma, int var būt aptuveni negatīvs 2 miljardi visu ceļu 515 00:23:14,660 --> 00:23:16,030 līdz pozitīvu 2 miljardiem. 516 00:23:16,030 --> 00:23:18,540 Tie ir lieli diapazoni, bet tas joprojām ir sava veida izšķērdīgs 517 00:23:18,540 --> 00:23:21,280 ja jūs tikai rūp izmēri, kas vienkārši intuitīvi 518 00:23:21,280 --> 00:23:24,620 vajadzētu būt ne-negatīvs vai pozitīvs vai 0, arī tad, 519 00:23:24,620 --> 00:23:28,884 kāpēc jūs izšķērdēt 2 miljardus iespējamās vērtības negatīviem skaitļiem 520 00:23:28,884 --> 00:23:30,300 ja jūs nekad gatavojas tās lietot? 521 00:23:30,300 --> 00:23:35,350 Tātad, sakot neparakstītu, tagad mans int var jābūt starp 0 un aptuveni 4 miljardus. 522 00:23:35,350 --> 00:23:39,280 >> Tātad, šeit ir tikai int C dēļ mums nebūs iekļuvuši tikai tagad, jo 523 00:23:39,280 --> 00:23:42,280 kāpēc tas ir int vietā no char, bet šeit ir 524 00:23:42,280 --> 00:23:44,630 kopsavilkums par to, kas notiek gada, un daži no jums 525 00:23:44,630 --> 00:23:48,340 varētu būt, izmantojot, piemēram, fgetc funkcija pat PSET četrās 526 00:23:48,340 --> 00:23:51,580 vai pēc tam, mēs redzēsim to atkal problēma noteikti pieci, 527 00:23:51,580 --> 00:23:55,410 fgetc ir jauki, jo kā nosaukums veida, veida arcanely liecina, 528 00:23:55,410 --> 00:23:57,940 tas ir funkcija, kas izpaužas raksturs un tā, 529 00:23:57,940 --> 00:24:00,690 kas ir būtiski atšķiras par to, ko mēs darām ar GetString 530 00:24:00,690 --> 00:24:03,110 ir, mēs nelietojat scanf tādā pašā veidā. 531 00:24:03,110 --> 00:24:07,550 Mēs esam tikai Ložņu gar soli pa solim vairāk nekā kāds lietotājs ir drukāti, 532 00:24:07,550 --> 00:24:10,970 jo mēs vienmēr varam piešķirt vienu char, un tāpēc mēs vienmēr varat droši 533 00:24:10,970 --> 00:24:15,599 apskatīt vienu char laikā, un burvju sāk notikt šeit. 534 00:24:15,599 --> 00:24:17,890 Es esmu gatavojas, lai ritinātu uz leju, lai vidū šīs funkcijas 535 00:24:17,890 --> 00:24:20,360 tikai īsumā iepazīstināt šo funkciju. 536 00:24:20,360 --> 00:24:22,670 Daudz, piemēram, tur ir malloc funkcija, tur ir 537 00:24:22,670 --> 00:24:27,740 realloc funkcija kur realloc ļauj jums pārdalīt rieciens atmiņas 538 00:24:27,740 --> 00:24:29,570 un dara to lielāks vai mazāks. 539 00:24:29,570 --> 00:24:33,060 Tik garš stāsts īss, un ar vilnis manu roku uz šodienu, 540 00:24:33,060 --> 00:24:35,620 zinu, ka tas, ko GetString dara tas ir sava veida 541 00:24:35,620 --> 00:24:39,720 no maģiski aug vai sarūk bufera kā lietotājs 542 00:24:39,720 --> 00:24:41,440 veidi viņa virkni. 543 00:24:41,440 --> 00:24:43,962 >> Tātad, ja lietotājs ievada Īsumā string, šis kods 544 00:24:43,962 --> 00:24:45,920 tikai piešķir pietiekami atmiņa, lai ietilptu virkni. 545 00:24:45,920 --> 00:24:48,086 Ja lietotājs tur rakstīt kā es to darīja atkal un atkal 546 00:24:48,086 --> 00:24:50,330 un atkal, labi, ja buferis ir sākotnēji šī lielā 547 00:24:50,330 --> 00:24:53,310 un programma saprot, lai pagaidiet minūti, es esmu no vietas, 548 00:24:53,310 --> 00:24:55,410 tas notiek dubultot lielums bufera 549 00:24:55,410 --> 00:24:59,110 un pēc tam divtik bufera un kods, kas dara divkāršošanu, 550 00:24:59,110 --> 00:25:03,170 ja mēs skatāmies uz to šeit, tas ir tikai šo gudrs viena līnijpārvadātāju. 551 00:25:03,170 --> 00:25:06,830 Jūs, iespējams, ir redzējuši šo sintaksi agrāk, bet, ja jūs sakāt zvaigzne ir vienāds, 552 00:25:06,830 --> 00:25:10,470 tas ir tas pats, kas sakot jaudas reizes 2. 553 00:25:10,470 --> 00:25:13,390 Tātad tas tikai tur divkāršojies ietilpība bufera 554 00:25:13,390 --> 00:25:17,480 un pēc tam stāsta realloc dot Pati, ka daudz vairāk atmiņas. 555 00:25:17,480 --> 00:25:19,720 >> Tagad, kā malā, tur ir citas funkcijas šeit 556 00:25:19,720 --> 00:25:23,680 ka mēs neizskatās jebkurā detalizēti izņemot rādīt GetInt, 557 00:25:23,680 --> 00:25:26,150 mēs izmantojam GetString in GetInt. 558 00:25:26,150 --> 00:25:28,192 Mēs pārbaudām, ka tas nav null, kas, atgādināt, 559 00:25:28,192 --> 00:25:30,400 ir īpaša vērtība, kas ir kaut kas nogāja greizi. 560 00:25:30,400 --> 00:25:31,233 Mēs esam no atmiņas. 561 00:25:31,233 --> 00:25:32,310 Labāk pārbaudīt, ka. 562 00:25:32,310 --> 00:25:33,710 Un mēs atgrieztu Sentinel vērtību. 563 00:25:33,710 --> 00:25:37,850 Bet es ņemšu atlikt uz komentāriem par to, kāpēc tad mēs izmantojam šo brālēns scanf 564 00:25:37,850 --> 00:25:42,100 sauc sscanf un izrādās ka sscanf, vai string scanf, 565 00:25:42,100 --> 00:25:45,310 ļauj jums apskatīt līnijas, kas lietotājs ir drukāti, un ļaut jums 566 00:25:45,310 --> 00:25:49,610 analizēt to būtībā un to, ko es esmu darot šeit es esmu stāsta sscanf, 567 00:25:49,610 --> 00:25:54,440 analizēt kāds lietotājs ir drukāti un pārliecinieties% i, 568 00:25:54,440 --> 00:25:59,250 ir vesels skaitlis, kas tajā, un mēs ne nokļūt šodien tieši tāpēc tur ir arī 569 00:25:59,250 --> 00:26:03,760 A% c šeit, bet īsumā pieļauj mums atklāt, ja lietotājs ir ievadījis 570 00:26:03,760 --> 00:26:06,050 kaut fiktīvu pēc skaita. 571 00:26:06,050 --> 00:26:11,766 Tātad iemesls tam, ka GetInt un GetString pateiks, lai mēģinātu vēlreiz, retry, retry 572 00:26:11,766 --> 00:26:13,640 ir tāpēc, ka visi ka kods mēs esam rakstīts, 573 00:26:13,640 --> 00:26:17,900 Tas ir sava veida apskatot lietotāja ievadi in pārliecinoties, ka tas ir pilnīgi ciparu 574 00:26:17,900 --> 00:26:21,700 vai tā ir faktiskā peldošā punkts vērtība vai tamlīdzīgi, 575 00:26:21,700 --> 00:26:24,233 Atkarībā no vērtības funkcionēt jūs izmantojat. 576 00:26:24,233 --> 00:26:25,060 >> Whew. 577 00:26:25,060 --> 00:26:25,710 LABI. 578 00:26:25,710 --> 00:26:27,592 Tas bija kumoss bet jautājums šeit ir 579 00:26:27,592 --> 00:26:29,550 ka iemesls mums bija šie apmācību riteņus 580 00:26:29,550 --> 00:26:32,880 ir tāpēc pēc iespējas zemākā līmenī, tur ir tikai tik daudz lietas, kas 581 00:26:32,880 --> 00:26:35,674 var noiet greizi, ka mēs vēlējāmies uz preemptively rīkoties 582 00:26:35,674 --> 00:26:38,090 šīs lietas noteikti ir Agrākais nedēļas šķiras, 583 00:26:38,090 --> 00:26:42,230 bet tagad ar PSET četriem un pieciem PSET un tālāk jūs redzēsiet, ka tas ir vairāk pie 584 00:26:42,230 --> 00:26:45,570 Jūs taču arī jūs esat vairāk spējīgs risināšanas šos veida problēmas 585 00:26:45,570 --> 00:26:47,180 yourself. 586 00:26:47,180 --> 00:26:51,770 Visus jautājumus par GetString vai GetInt? 587 00:26:51,770 --> 00:26:52,630 Yeah? 588 00:26:52,630 --> 00:26:55,130 >> Mērķauditorija: Kāpēc jūs dubultā ietilpība bufera 589 00:26:55,130 --> 00:26:57,630 nevis tikai palielinot tas ar precīzu summu? 590 00:26:57,630 --> 00:26:58,100 >> DAVID Malan: Labs jautājums. 591 00:26:58,100 --> 00:27:00,474 Kāpēc mēs dubultot jaudas no bufera pretstatā 592 00:27:00,474 --> 00:27:02,800 vienkārši palielinot to ar kādu konstantu vērtību? 593 00:27:02,800 --> 00:27:03,900 Tas bija dizaina lēmums. 594 00:27:03,900 --> 00:27:08,590 Mēs tikko nolēma, ka tāpēc, ka tai ir tendence būt nedaudz dārgāka laika gudrs jautāt 595 00:27:08,590 --> 00:27:10,440 operētājsistēma atmiņu, mēs neesam 596 00:27:10,440 --> 00:27:13,210 vēlaties, lai galu galā nokļūst situācija lieliem stīgām 597 00:27:13,210 --> 00:27:14,960 ka mēs jautāji OS atkal un atkal 598 00:27:14,960 --> 00:27:17,500 un atkal un atkal straujā atmiņu. 599 00:27:17,500 --> 00:27:20,387 Tāpēc mēs tikko nolēma, nedaudz patvaļīgi, bet mēs ceram, ka pamatoti, 600 00:27:20,387 --> 00:27:22,720 ka jūs zināt, ko, pieņemsim mēģināt iegūt priekšā sevi 601 00:27:22,720 --> 00:27:25,520 un tikai glabāt dubultojot tā, ka mēs samazinātu summu reizes 602 00:27:25,520 --> 00:27:29,010 mums ir, lai izsauktu malloc vai realloc, bet kopējais spriedums 603 00:27:29,010 --> 00:27:31,820 piezvanīt, ja nav zinot ko lietotāji varētu vēlēties rakstīt. 604 00:27:31,820 --> 00:27:33,600 Abi veidi varētu būt apstrīdams. 605 00:27:33,600 --> 00:27:35,430 Varbūt labi. 606 00:27:35,430 --> 00:27:39,240 >> Tātad, pieņemsim to apskatīt pāris Citu blakusparādības atmiņu, 607 00:27:39,240 --> 00:27:41,610 lietas, kas var noiet greizi un rīki, ko varat 608 00:27:41,610 --> 00:27:43,880 izmantot noķert šos kļūdām veidus. 609 00:27:43,880 --> 00:27:47,800 Izrādās, jums visiem, lai gan check50 nav teicis jums tik daudz, 610 00:27:47,800 --> 00:27:50,050 ir rakstot bagijs kods kopš nedēļas vienā, 611 00:27:50,050 --> 00:27:53,630 pat ja visi check50 testi pagājis, un pat tad, ja jūs un jūsu TF 612 00:27:53,630 --> 00:27:56,010 Ir super pārliecināti, ka Jūsu kods darbojas kā paredzēts. 613 00:27:56,010 --> 00:27:59,190 Jūsu kods ir buggy vai kļūdains, ka jums visiem, 614 00:27:59,190 --> 00:28:02,540 izmantošanā CS50 bibliotēku, Ir noplūde atmiņu. 615 00:28:02,540 --> 00:28:06,040 Jūs esat lūdzot operētājsistēmas atmiņu vairumā programmu 616 00:28:06,040 --> 00:28:08,850 jūs esat uzrakstījis, bet jūs esat nekad faktiski, ņemot vērā to atpakaļ. 617 00:28:08,850 --> 00:28:12,110 Jūs esat sauc GetString un GetInt un GetFloat, 618 00:28:12,110 --> 00:28:15,270 bet ar GetString, jūs esat nekad sauc unGetString vai dot 619 00:28:15,270 --> 00:28:19,890 String Atpakaļ vai tamlīdzīgi, bet mēs esam redzējuši ka GetString dara piešķirt atmiņu 620 00:28:19,890 --> 00:28:22,810 veidā malloc vai šī funkcija realloc, kas ir tikai 621 00:28:22,810 --> 00:28:25,670 ļoti līdzīgs garā, un vēl, mēs esam bijuši 622 00:28:25,670 --> 00:28:28,629 lūdzot operētājsistēmu atmiņa un atmiņas atkal un atkal 623 00:28:28,629 --> 00:28:29,670 bet nekad dod to atpakaļ. 624 00:28:29,670 --> 00:28:33,550 >> Tagad, kā malā, izrādās, ka kad programma tiek aizvērta, visi no atmiņas 625 00:28:33,550 --> 00:28:34,870 tiek automātiski atbrīvots. 626 00:28:34,870 --> 00:28:36,150 Tātad tas nav bijis milzīgs galā. 627 00:28:36,150 --> 00:28:38,590 Tas nav gatavojas, lai izjauktu IDE vai lēni lietas leju, 628 00:28:38,590 --> 00:28:40,670 Bet, kad programmas darīt parasti noplūde atmiņu 629 00:28:40,670 --> 00:28:42,170 un viņi darbojas uz ilgu laiku. 630 00:28:42,170 --> 00:28:45,640 Ja esat kādreiz redzējuši stulba Little pludmales bumba Mac OS vai smilšu pulksteņa 631 00:28:45,640 --> 00:28:51,160 Windows kur tas ir sava veida palēninot vai domāšana vai domāšana 632 00:28:51,160 --> 00:28:53,770 vai tikai tiešām sāk lēni uz rāpošana, 633 00:28:53,770 --> 00:28:56,960 tas ļoti iespējams, varētu būt rezultāts atmiņas noplūde. 634 00:28:56,960 --> 00:28:59,970 Programmētāji, kas rakstīja programmatūra jūs izmantojat 635 00:28:59,970 --> 00:29:03,570 lūgt operētājsistēma atmiņu ik pēc dažām minūtēm, katru stundu. 636 00:29:03,570 --> 00:29:05,570 Bet, ja jūs darbojas programmatūru, pat tad, ja tas ir 637 00:29:05,570 --> 00:29:08,680 minimāla savā datorā uz stundu vai dienu ilgi, 638 00:29:08,680 --> 00:29:11,980 Jums varētu būt jautā vairāk un vairāk atmiņu un nekad faktiski izmanto 639 00:29:11,980 --> 00:29:15,180 un tāpēc jūsu kods varētu būt, vai programmas var būt noplūde atmiņu, 640 00:29:15,180 --> 00:29:18,350 un, ja jūs sākat noplūdes atmiņu, tur ir mazāk atmiņas par citām programmām, 641 00:29:18,350 --> 00:29:21,220 un efekts ir lēni viss uz leju. 642 00:29:21,220 --> 00:29:23,600 >> Tagad, tas ir līdz šim viens no visnežēlīgākajiem programmas 643 00:29:23,600 --> 00:29:26,350 Jums būs iespējas palaist CS50 tiktāl 644 00:29:26,350 --> 00:29:31,650 kā tās produkcija ir pat vairāk nekā nesaprotams šķindēt s vai veikt vai jebkuras komandu 645 00:29:31,650 --> 00:29:35,930 line programmas mēs esam palaist agrāk, bet par laimi, iestrādāti tās produkciju 646 00:29:35,930 --> 00:29:39,810 ir daži super noderīgi padomi, kas būs noderīga nu PSET četru 647 00:29:39,810 --> 00:29:41,510 vai noteikti PSET pieci. 648 00:29:41,510 --> 00:29:44,250 Tātad Valgrind ir instruments kas var tikt izmantoti, lai meklētu 649 00:29:44,250 --> 00:29:46,930 atmiņas noplūdes jūsu programmā. 650 00:29:46,930 --> 00:29:48,570 Tas ir samērā vienkāršs, lai palaistu. 651 00:29:48,570 --> 00:29:51,420 Palaižot Valgrind un tad, pat lai gan tas ir nedaudz runīgs, 652 00:29:51,420 --> 00:29:54,440 domuzīme domuzīme noplūdes pārbaude vienāds pilna, un pēc tam dot 653 00:29:54,440 --> 00:29:56,320 slīpsvītra un nosaukumu jūsu programmā. 654 00:29:56,320 --> 00:30:00,010 Tātad Valgrind tad palaist savu programmu un pašās beigās savu programmu 655 00:30:00,010 --> 00:30:02,240 darbojas, pirms tas aizveras, un dod jums citu ātru, 656 00:30:02,240 --> 00:30:04,980 tas notiek, lai analizētu savu programma, bet tas ir bijis darbojas 657 00:30:04,980 --> 00:30:07,740 un pateikt jums jūs noplūde jebkurš atmiņa un vēl labāk, 658 00:30:07,740 --> 00:30:10,610 jūs pieskarties atmiņa, kas nepiederēja jums? 659 00:30:10,610 --> 00:30:13,700 To nevar panākt visu, bet tas ir diezgan labi iepatikusies visvairāk lietām. 660 00:30:13,700 --> 00:30:19,700 >> Tātad, šeit ir piemērs no manas nebūdami Šī programma, nebūdami Valgrind, 661 00:30:19,700 --> 00:30:21,470 par programmu, ko sauc atmiņa, un es esmu gatavojas 662 00:30:21,470 --> 00:30:24,730 izcelt līnijas, kas ir galu galā, kas interesē mūs. 663 00:30:24,730 --> 00:30:27,690 Tātad tur ir vēl vairāk traucējošos ka es esmu svītrots no slaida. 664 00:30:27,690 --> 00:30:30,930 Bet pieņemsim tikai redzēt, ko tas programma spēj stāsta mums. 665 00:30:30,930 --> 00:30:34,800 Tas spēj stāsta mums lietas tāpat nederīgu rakstīt izmēru 4. 666 00:30:34,800 --> 00:30:38,020 Citiem vārdiem sakot, ja jūs pieskarties atmiņu, konkrētāk 4 baiti atmiņas 667 00:30:38,020 --> 00:30:40,350 ka jums nevajadzētu būt, Valgrind var pateikt, ka. 668 00:30:40,350 --> 00:30:41,660 Nederīga rakstīt lieluma 4. 669 00:30:41,660 --> 00:30:43,640 Jūs pieskārās četri baiti ka jums nevajadzētu būt. 670 00:30:43,640 --> 00:30:44,840 Kur jūs to darīt? 671 00:30:44,840 --> 00:30:45,900 Tas ir skaistums. 672 00:30:45,900 --> 00:30:50,000 Atmiņas dot c līnija 21 ir vieta, kur jūs ieskrūvē up un tas ir iemesls, kāpēc tas ir noderīgi. 673 00:30:50,000 --> 00:30:53,410 Daudz, piemēram GDB, tas var palīdzēt norādīt jums faktisko kļūdu. 674 00:30:53,410 --> 00:30:57,170 >> Tagad, šis viens ir nedaudz vairāk runīgs, ja ne mulsinoši. 675 00:30:57,170 --> 00:31:01,307 40 baiti 1 blokiem ir noteikti zaudēts zaudējumu ierakstā 1 no 1. 676 00:31:01,307 --> 00:31:02,140 Ko tas nozīmē? 677 00:31:02,140 --> 00:31:05,920 Nu, tas tikai nozīmē, ka jūs lūdza 40 baiti, un jūs nekad deva to atpakaļ. 678 00:31:05,920 --> 00:31:08,930 Tu sauc malloc vai jūs sauc GetString un operētājsistēmas 679 00:31:08,930 --> 00:31:12,450 deva jums 40 baiti, bet jūs nekad atbrīvots vai atbrīvo šo atmiņu, 680 00:31:12,450 --> 00:31:15,400 un lai būtu godīgi, mēs nekad parādīt jums, kā atdot atmiņu. 681 00:31:15,400 --> 00:31:17,910 Izrādās tur ir super vienkārša funkcija sauc bezmaksas. 682 00:31:17,910 --> 00:31:21,170 Stājas Viens arguments, lieta Jūs vēlaties, lai atbrīvotu vai atdot, 683 00:31:21,170 --> 00:31:23,430 bet 40 baiti, acīmredzot, šajā programmas 684 00:31:23,430 --> 00:31:27,300 ir pazuduši rindā 20 no atmiņas dot c. 685 00:31:27,300 --> 00:31:28,650 >> Tātad, pieņemsim redzēt šo programmu. 686 00:31:28,650 --> 00:31:31,020 Tas ir super bezjēdzīgi. 687 00:31:31,020 --> 00:31:33,980 Tas tikai pierāda, Tas īpaši kļūda. 688 00:31:33,980 --> 00:31:34,920 Tātad, pieņemsim to apskatīt. 689 00:31:34,920 --> 00:31:39,920 Šeit ir galvenās un galvenie, uzraksta, zvani funkcija sauc F un tad atgriežas. 690 00:31:39,920 --> 00:31:41,550 Tātad nav tik interesanti. 691 00:31:41,550 --> 00:31:42,664 Kāda f darīt? 692 00:31:42,664 --> 00:31:44,330 Ievērojiet, man nav apnikt ar prototipu. 693 00:31:44,330 --> 00:31:46,520 Es gribēju, lai saglabātu kodu pēc iespējas minimālas. 694 00:31:46,520 --> 00:31:49,530 Tāpēc man f iepriekš galvenais un tas ir jauki, protams, 695 00:31:49,530 --> 00:31:51,500 īsiem programmām, piemēram, šis. 696 00:31:51,500 --> 00:31:56,910 Tātad f neatgriežas neko, un tas neņem neko, bet tas to izdarītu. 697 00:31:56,910 --> 00:31:59,620 Tas apliecina, līdzīgi ar mīkstās piemēram, 698 00:31:59,620 --> 00:32:02,682 rādītājs sauc x, kas notiek uzglabāt adresi int. 699 00:32:02,682 --> 00:32:03,890 Tā ka ir kreisā puse. 700 00:32:03,890 --> 00:32:07,230 Angļu valodā, kas ir labajā pusē dara? 701 00:32:07,230 --> 00:32:09,770 Kāds? 702 00:32:09,770 --> 00:32:13,665 Kas ir tas dara mums? 703 00:32:13,665 --> 00:32:14,651 Yeah? 704 00:32:14,651 --> 00:32:16,623 >> Mērķauditorija: [dzirdams] reizes lielāka par int 705 00:32:16,623 --> 00:32:19,175 kas ir 10 reizes [nedzirdama] 706 00:32:19,175 --> 00:32:20,800 DAVID Malan: Labi un ļaujiet man apkopot. 707 00:32:20,800 --> 00:32:25,480 Tātad piešķirt pietiekami daudz vietas, 10 veseliem skaitļiem vai 10, kas ir lielums int, 708 00:32:25,480 --> 00:32:29,340 tas ir četri baiti, arī tā 10 reizes 4 ir 40, tā ka labajā pusē, kas es esmu 709 00:32:29,340 --> 00:32:33,930 iezīmēto ir dot man 40 baiti un uzglabātu adresi, kura pirmā baits 710 00:32:33,930 --> 00:32:34,940 uz x. 711 00:32:34,940 --> 00:32:38,380 Un tagad visbeidzot, un šeit ir, ja Šī programma ir buggy, kas ir 712 00:32:38,380 --> 00:32:41,540 nepareizi ar līniju 21 balstoties uz šo loģiku? 713 00:32:41,540 --> 00:32:45,197 714 00:32:45,197 --> 00:32:46,280 Kas ir nepareizi ar līniju 21? 715 00:32:46,280 --> 00:32:46,780 Yeah? 716 00:32:46,780 --> 00:32:49,550 Mērķauditorija: Jūs nevarat indekss par x [nedzirdama]. 717 00:32:49,550 --> 00:32:50,300 DAVID Malan: Jā. 718 00:32:50,300 --> 00:32:52,270 Man nevajadzētu indekss par x, piemēram, ka. 719 00:32:52,270 --> 00:32:53,850 Tātad sintaktiski, tas ir OK. 720 00:32:53,850 --> 00:32:56,990 Kas ir jauki, ir, daudz, piemēram, jūs var ārstēt nosaukumu masīva 721 00:32:56,990 --> 00:33:01,080 it kā tas ir rādītājs, līdzīgi Jūs varat ārstēt rādītāju, it kā tas ir 722 00:33:01,080 --> 00:33:06,425 masīvs, un tāpēc es varu sintaktiski teikt x bracket kaut ko, x kronšteins i, 723 00:33:06,425 --> 00:33:07,800 bet 10 ir problemātiska. 724 00:33:07,800 --> 00:33:09,096 Kāpēc? 725 00:33:09,096 --> 00:33:10,910 >> Mērķauditorija: Tā tas nav iekšā. 726 00:33:10,910 --> 00:33:12,390 >> DAVID Malan: Tas nav iekšā, ka rieciens atmiņas. 727 00:33:12,390 --> 00:33:15,306 Kas ir lielākā vērtība man vajadzētu liekot tajās kvadrātiekavās? 728 00:33:15,306 --> 00:33:16,870 9, no 0 līdz 9. 729 00:33:16,870 --> 00:33:18,160 Sakarā ar nulles indeksācija. 730 00:33:18,160 --> 00:33:20,190 Tātad 0 līdz 9 būtu labi. 731 00:33:20,190 --> 00:33:23,960 Bracket 10 nav laba un bet, atceros gan, katru reizi 732 00:33:23,960 --> 00:33:27,017 Man šķiet, lai mēģinātu padarīt CS50 IDE crash ierakstot viltus vērtībām, 733 00:33:27,017 --> 00:33:29,100 tas ne vienmēr sadarbojas, un, protams, jūs bieži 734 00:33:29,100 --> 00:33:31,460 saņemt laimīgs tikai tāpēc, ka operētājsistēma nav 735 00:33:31,460 --> 00:33:35,467 paziņojums, ka jūs kādreiz tik nedaudz iet kādu gabalu no atmiņas, 736 00:33:35,467 --> 00:33:38,300 jo jums palika laikā tehniski Jūsu segments, bet vairāk par to 737 00:33:38,300 --> 00:33:40,940 kādā operētājsistēmu klasē, un tā kaut kas līdzīgs šim 738 00:33:40,940 --> 00:33:43,000 varētu ļoti viegli iet neatklāti. 739 00:33:43,000 --> 00:33:48,120 Jūsu programmas nekad gatavojas crash konsekventi bet varbūt reizi awhile. 740 00:33:48,120 --> 00:33:50,610 >> Un tāpēc pamēģināsim Valgrind par to, un šeit ir 741 00:33:50,610 --> 00:33:52,870 kur mēs nokļūt overwhelmed ar izejas momentāni. 742 00:33:52,870 --> 00:34:00,810 Tātad, lai atmiņas Valgrind noplūdes pārbaudi vienāds pilnu dot slash atmiņu. 743 00:34:00,810 --> 00:34:03,040 Un šeit ir iemesls, kāpēc es apsolu tas varētu pārņemt. 744 00:34:03,040 --> 00:34:05,700 Lūk, ko Valgrind, lūk, ko programmētājs, dažus gadus ago- 745 00:34:05,700 --> 00:34:08,469 nolēma, ka būtu laba ideja par izejas izskatās. 746 00:34:08,469 --> 00:34:09,750 Tātad pieņemsim jēgas par to. 747 00:34:09,750 --> 00:34:13,120 Tātad visu ceļu no kreisās puses sānu nesaprotamu iemeslu dēļ 748 00:34:13,120 --> 00:34:16,620 ir process ID programmas mēs vienkārši palaist, unikālo identifikatoru 749 00:34:16,620 --> 00:34:18,030 programmai mēs vienkārši skrēja. 750 00:34:18,030 --> 00:34:19,738 Mēs svītrots, ka no slide, bet tur 751 00:34:19,738 --> 00:34:22,190 ir daži noderīgu informāciju šeit. 752 00:34:22,190 --> 00:34:24,684 >> Pieņemsim ritiniet līdz ļoti top. 753 00:34:24,684 --> 00:34:25,600 Lūk, kur mēs sākām. 754 00:34:25,600 --> 00:34:27,040 Tātad, tas nav viss, kas daudz produkciju. 755 00:34:27,040 --> 00:34:30,429 Lūk, kas nederīgs rakstīt 4 izmērā uz līnijas 21. 756 00:34:30,429 --> 00:34:31,760 Nu, kas bija līnija 21? 757 00:34:31,760 --> 00:34:34,500 Line 21 bija tieši šis un tas ir jēga 758 00:34:34,500 --> 00:34:37,290 ka es esmu likumīgi rakstiski 4 baiti, jo es esmu 759 00:34:37,290 --> 00:34:40,389 cenšas nodot šo skaitli, kas varētu būt kaut kas, 760 00:34:40,389 --> 00:34:42,370 tas vienkārši notiek, ir nulle, bet es cenšos 761 00:34:42,370 --> 00:34:44,940 likt to vietā kas nepieder man. 762 00:34:44,940 --> 00:34:50,900 Turklāt šeit lejā, 40 baiti vienā bloki ir noteikti zaudēti ierakstā 1. 763 00:34:50,900 --> 00:34:56,500 Tas ir tāpēc, ka tad, kad es aicinu malloc šeit, es nekad patiesībā atbrīvotu atmiņu. 764 00:34:56,500 --> 00:34:58,140 >> Tātad, kā mēs varam noteikt šo? 765 00:34:58,140 --> 00:35:02,970 Ļaujiet man iet uz priekšu un būt mazliet drošāk un darīt 9 tur un ļaujiet man šeit bezmaksas X. 766 00:35:02,970 --> 00:35:04,820 Tas ir jauns funkcija šodien. 767 00:35:04,820 --> 00:35:11,520 Ja es tagad atkārto darīt atmiņa dot slīpsvītra, pieņemsim palaist Valgrind uz to vēlreiz, 768 00:35:11,520 --> 00:35:14,990 maksimizētu savu logu un hit Enter. 769 00:35:14,990 --> 00:35:16,900 Tagad, tas ir labi. 770 00:35:16,900 --> 00:35:19,590 Viņi apglabāt labas ziņas visās šo produkciju. 771 00:35:19,590 --> 00:35:20,810 Visi kaudze bloki bija brīvas. 772 00:35:20,810 --> 00:35:23,604 Mēs būsim atpakaļ uz to, ko kaudze ir, bet nav noplūdes ir iespējamas. 773 00:35:23,604 --> 00:35:25,520 Tātad tas ir tikai vēl viens līdzeklis, lai jūsu rīku komplektu 774 00:35:25,520 --> 00:35:30,220 ar kuru jūs varat sākt atrast tagad kļūdas, piemēram, ka. 775 00:35:30,220 --> 00:35:34,532 >> Bet pieņemsim redzēt, kas vairāk var noiet greizi šeit. 776 00:35:34,532 --> 00:35:38,890 Pieņemsim pāreju tagad faktiski atrisinot problēmu. 777 00:35:38,890 --> 00:35:42,440 Kā malā, ja tas būs atbrīvot Mazliet apjukums vai spriedzes, 778 00:35:42,440 --> 00:35:43,430 tas tagad ir smieklīgi. 779 00:35:43,430 --> 00:35:46,400 780 00:35:46,400 --> 00:35:46,900 Jā. 781 00:35:46,900 --> 00:35:49,040 Tas ir diezgan labs. 782 00:35:49,040 --> 00:35:50,890 Tā kā norādes ir adreses un adreses 783 00:35:50,890 --> 00:35:53,098 parasti pēc vienošanās rakstīts ar heksadecimālo. 784 00:35:53,098 --> 00:35:54,650 Ha, ha, tas ir smieklīgi tagad. 785 00:35:54,650 --> 00:35:58,390 Jebkurā gadījumā, tāpēc pieņemsim tagad faktiski atrisinātu problēmu. 786 00:35:58,390 --> 00:36:00,840 Tas ir super, super zema līmeņa līdz šim, 787 00:36:00,840 --> 00:36:03,950 un mēs faktiski var darīt noderīgs lietas ar šīm zema līmeņa informāciju. 788 00:36:03,950 --> 00:36:06,710 >> Tātad mēs ieviesa dažas nedēļas Pirms jēdziens masīva. 789 00:36:06,710 --> 00:36:09,177 Masīvs bija jauki, jo tas ir grūti, lai attīrītu mūsu kodu 790 00:36:09,177 --> 00:36:11,760 jo, ja mēs vēlējāmies rakstīt programma ar vairākiem studentiem 791 00:36:11,760 --> 00:36:15,270 vai vairāki nosaukumi un māju un dorms un koledžas un visu, kas, 792 00:36:15,270 --> 00:36:19,430 mēs varētu uzglabāt viss vairāk tīri iekšpusē masīva. 793 00:36:19,430 --> 00:36:23,039 Bet ierosināt vienu negatīvie no masīva līdz šim. 794 00:36:23,039 --> 00:36:26,080 Pat ja jūs esat nav cietis pats programmā, vienkārši instinktīvi, 795 00:36:26,080 --> 00:36:30,870 kas ir slikta lieta par masīvu, varbūt? 796 00:36:30,870 --> 00:36:32,337 Es dzirdu dažus murmina. 797 00:36:32,337 --> 00:36:34,170 Mērķauditorija: Tas ir grūti lai mainītu izmēru. 798 00:36:34,170 --> 00:36:36,128 DAVID Malan: Tas ir grūti lai mainītu izmēru. 799 00:36:36,128 --> 00:36:38,660 Jūs nevarat mainīt izmēru no masīva, patiesībā, per se 800 00:36:38,660 --> 00:36:43,040 C. Jūs varat piešķirt vēl vienu masīvu, pārvietot visu no vecā 801 00:36:43,040 --> 00:36:45,380 jaunajā, un tagad ir dažas papildu telpas, 802 00:36:45,380 --> 00:36:47,469 bet tas nav, piemēram, valoda, piemēram, Java vai Python 803 00:36:47,469 --> 00:36:49,760 vai kādu citu skaits valodas ar kuru daži no jums 804 00:36:49,760 --> 00:36:52,070 varētu būt pazīstami, kur jūs var tikai glabāt pievienojot lietas 805 00:36:52,070 --> 00:36:53,930 ad nauseam līdz beigām masīva. 806 00:36:53,930 --> 00:36:57,880 Ja jums ir masīvs izmērs 6, kas ir tās izmērs, 807 00:36:57,880 --> 00:37:01,970 un tik daudz, piemēram, ideja agrāk kam buferi noteiktu lielumu, 808 00:37:01,970 --> 00:37:05,940 Jums ir uzminēt no vārtiem kāda izmēra jūs vēlaties, lai to? 809 00:37:05,940 --> 00:37:07,880 Ja jūs uzminēt pārāk liels, jūs izšķērdēt telpā. 810 00:37:07,880 --> 00:37:10,950 Ja jūs uzminēt pārāk mazs, jūs nevar saglabāt datus, vismaz 811 00:37:10,950 --> 00:37:12,940 bez daudz vairāk darba. 812 00:37:12,940 --> 00:37:18,180 >> Tātad šodien, pateicoties norādes, mēs varam sākt izšūšanas kopā mūsu pašu pasūtījuma 813 00:37:18,180 --> 00:37:20,989 datu struktūras, un kas Patiesībā, šeit ir kaut kas 814 00:37:20,989 --> 00:37:23,030 kas izskatās mazliet vairāk mistisks pēc pirmā acu uzmetiena, 815 00:37:23,030 --> 00:37:26,440 bet tas ir tas, ko mēs saucam saistīts sarakstu, un tā nosaukums veida apkopots 816 00:37:26,440 --> 00:37:26,940 tā. 817 00:37:26,940 --> 00:37:29,550 Tas ir saraksts ar numuriem, vai šis gadījums, sarakstu numurus, 818 00:37:29,550 --> 00:37:33,480 bet tas varētu būt saraksts ar kaut ko, bet tas ir saistīts kopā veidā bultām, 819 00:37:33,480 --> 00:37:36,380 un lietojiet tikai minējums ar ko paņēmiens 820 00:37:36,380 --> 00:37:38,310 mēs gatavojamies, lai varētu dūriens kopā, 821 00:37:38,310 --> 00:37:42,540 veida, piemēram, popkorns ar vītni, saistītais saraksti taisnstūri šeit? 822 00:37:42,540 --> 00:37:43,936 Tās numuri? 823 00:37:43,936 --> 00:37:45,560 Kas ir pamatā valoda funkcija? 824 00:37:45,560 --> 00:37:46,350 >> Mērķauditorija: Rādītājs. 825 00:37:46,350 --> 00:37:47,308 >> DAVID Malan: Rādītājs. 826 00:37:47,308 --> 00:37:51,700 Tātad katrs no šiem bultām šeit apzīmē rādītājs vai tikai adrese. 827 00:37:51,700 --> 00:37:54,590 Tātad citiem vārdiem sakot, ja es gribu uzglabāt numuru sarakstu, 828 00:37:54,590 --> 00:37:59,040 Es nevaru vienkārši saglabāt to, ja es gribu spēja augt un sarauties 829 00:37:59,040 --> 00:38:00,990 mans datu struktūra masīvā. 830 00:38:00,990 --> 00:38:03,000 Tāpēc man ir nepieciešams, lai būtu nedaudz vairāk izsmalcinātība, 831 00:38:03,000 --> 00:38:05,720 bet paziņo, ka šis bilde veida iesaka 832 00:38:05,720 --> 00:38:08,650 ka, ja jūs esat tikko got maz pavedieni savieno visu kopā, 833 00:38:08,650 --> 00:38:13,100 iespējams, nav tik grūti, lai atbrīvotu vietu starp diviem no šiem taisnstūriem 834 00:38:13,100 --> 00:38:16,750 vai divi no šiem punktiem, jo ​​mēs sāksim aicinot tos, izveidot jaunu mezglu, 835 00:38:16,750 --> 00:38:19,547 un tad ar kādu jaunu pavedienu, tikai grāvis trīs mezglus kopā, 836 00:38:19,547 --> 00:38:22,880 pirmais, pēdējais, un viens ka jūs vienkārši ievietota vidū. 837 00:38:22,880 --> 00:38:26,000 >> Un tiešām saistīts saraksts, atšķirībā no masīva, ir dinamisks. 838 00:38:26,000 --> 00:38:27,840 Tā var augt, un tas var sarauties un jums nav 839 00:38:27,840 --> 00:38:32,434 ir jāzina, vai aprūpi iepriekš, kā daudz datu, jūs būs uzglabāšanai, 840 00:38:32,434 --> 00:38:35,600 bet izrādās, mums jābūt mazliet uzmanīgiem par to, kā īstenot šo. 841 00:38:35,600 --> 00:38:39,070 Tātad vispirms pieņemsim apsvērt, kā mēs ieviest viens no šiem mazajiem taisnstūri. 842 00:38:39,070 --> 00:38:40,690 Tas ir viegli īstenot int. 843 00:38:40,690 --> 00:38:44,000 Jūs vienkārši teikt int n un tad jūs saņemsiet 4 baiti uz int, 844 00:38:44,000 --> 00:38:49,089 bet kā es varu saņemt int, to sauc par n, un tad rādītājs, sauksim to blakus. 845 00:38:49,089 --> 00:38:50,880 Mēs varētu aicināt šos lietas, kaut ko mēs gribam 846 00:38:50,880 --> 00:38:53,590 bet man ir nepieciešams pasūtījuma datu struktūra. 847 00:38:53,590 --> 00:38:54,257 Yeah? 848 00:38:54,257 --> 00:38:57,020 >> Mērķauditorija: Ampersand [nedzirdama]. 849 00:38:57,020 --> 00:39:00,940 >> DAVID Malan: Tātad Ampersand mēs izmantosim, lai iegūt adresi mezglā potenciāli. 850 00:39:00,940 --> 00:39:02,740 Bet mums ir vēl viens iezīme C kārtība 851 00:39:02,740 --> 00:39:06,700 sniegt man iespēju izveidot Šī tradīcija taisnstūris, šis pasūtījuma 852 00:39:06,700 --> 00:39:08,919 mainīgais ja jūs, atmiņā. 853 00:39:08,919 --> 00:39:09,710 Mērķauditorija: struct. 854 00:39:09,710 --> 00:39:10,626 DAVID Malan: struct. 855 00:39:10,626 --> 00:39:14,310 Atsaukt no pagājušajā nedēļā, mēs iepazīstinājām struct, šis samērā vienkāršs atslēgvārds 856 00:39:14,310 --> 00:39:16,254 kas ļauj mums padarīt lietas, kā šis. 857 00:39:16,254 --> 00:39:18,420 C nenāca ar datiem struktūru sauc students. 858 00:39:18,420 --> 00:39:22,190 Tas nāk ar int un peldēt un palijas un piemēram, bet tas nenāk ar studentu, 859 00:39:22,190 --> 00:39:26,750 bet mēs varam radīt students datu tipu, students struktūra, ar šo sintaksi 860 00:39:26,750 --> 00:39:27,250 šeit. 861 00:39:27,250 --> 00:39:28,350 Un jūs redzēsiet šajā atkal un atkal. 862 00:39:28,350 --> 00:39:30,426 Tāpēc nav jāuztraucas par iegaumēšanas atslēgvārdus, 863 00:39:30,426 --> 00:39:33,300 bet atslēgvārds, kas ir svarīgi, ir tikai fakts, ka mēs teica struct 864 00:39:33,300 --> 00:39:37,590 un tad mēs to sauca students un iekšpusē Studenta bija vārds un māja 865 00:39:37,590 --> 00:39:39,390 vai kopmītnes vai tamlīdzīgi. 866 00:39:39,390 --> 00:39:41,980 >> Un tā nu šodien, pieņemsim ierosināt šo. 867 00:39:41,980 --> 00:39:45,240 Es esmu pievienojis dažus vārdus, bet, ja es gribu lai īstenotu šo taisnstūri, kas ir 868 00:39:45,240 --> 00:39:48,440 ieguva gan int un A rādītājs, jūs zināt, ko, es esmu 869 00:39:48,440 --> 00:39:51,540 gatavojas pasludināt struct sauc mezglā. 870 00:39:51,540 --> 00:39:55,630 Es esmu arī, iekšpusē tā, gatavojas teikt ka mezglā, šis taisnstūris, ir int 871 00:39:55,630 --> 00:39:59,730 un mēs to saucam n un tas ir nākamais rādītāju. 872 00:39:59,730 --> 00:40:02,540 Un tas ir nedaudz runīgs, bet, ja jūs domājat par to, 873 00:40:02,540 --> 00:40:07,300 bultas, kas bija attēlā pirms brīža ir kāda datu tipu? 874 00:40:07,300 --> 00:40:12,330 Ja katra no šīm bultām ir vērsta uz ko datu struktūras veidu? 875 00:40:12,330 --> 00:40:14,332 Tas nav norādot tikai uz int per se. 876 00:40:14,332 --> 00:40:16,165 Tas norāda uz Visa taisnstūra lieta 877 00:40:16,165 --> 00:40:18,720 un ka taisnstūra lieta, mēs teicām, sauc par mezglu. 878 00:40:18,720 --> 00:40:21,720 Un tā mēs veida ir rekursīvi definēt šo tādas 879 00:40:21,720 --> 00:40:26,270 ka mezglā, mēs sakām, būs int sauc n 880 00:40:26,270 --> 00:40:31,070 un rādītāju sauc blakus un datu struktūras veidu, kurai 881 00:40:31,070 --> 00:40:35,770 ka rādītājs punkti ir acīmredzami būs struct mezglā. 882 00:40:35,770 --> 00:40:41,550 >> Tātad tas ir kaitinoši runīgs un tikai, lai būtu pedantiska, 883 00:40:41,550 --> 00:40:44,100 iemesls, kāpēc mēs nevaram vienkārši saku, kas atklāti 884 00:40:44,100 --> 00:40:46,860 izskatās daudz vieglāk lasāmu, ir tāpēc, atgādināt, ka C lasīt 885 00:40:46,860 --> 00:40:48,710 lietas, no augšas uz leju, no kreisās uz labo. 886 00:40:48,710 --> 00:40:54,120 Tas nav, kamēr mēs iegūtu semikolu ka atslēgvārds mezglā patiešām pastāv. 887 00:40:54,120 --> 00:40:57,980 Tātad, ja mēs vēlamies, lai būtu šāda veida ciklisks atsauce iekšpusē datu 888 00:40:57,980 --> 00:41:02,120 struktūra, mums tas ir jādara, ja mēs sakām struct mezglā augšpusē, kas 889 00:41:02,120 --> 00:41:06,770 dod mums garāku ceļu aprakstot šo lieta, tad iekšā mēs sakām struct mezglā, 890 00:41:06,770 --> 00:41:09,560 un pēc tam tajā pašā pēdējā rindā mēs sakām, labi, C, starp citu, 891 00:41:09,560 --> 00:41:12,060 zvaniet šo visu nopelt lieta mezglā un apstāties 892 00:41:12,060 --> 00:41:14,360 izmantojot atslēgvārdu struct vispār. 893 00:41:14,360 --> 00:41:18,030 Tātad tas ir tikai sava veida sintaktisko triks, kas galu galā ļauj mums izveidot 894 00:41:18,030 --> 00:41:21,370 kaut kas izskatās tieši tāpat kā šis. 895 00:41:21,370 --> 00:41:25,010 >> Tātad, ja mēs pieņemam, tagad mēs varam īstenot šo lietu C, 896 00:41:25,010 --> 00:41:28,040 Kā mēs patiesībā sākt šķērso šo? 897 00:41:28,040 --> 00:41:32,360 Nu, patiesībā, viss, kas mums ir jādara, ir atkārtot no kreisās uz labo pusi, un tikai 898 00:41:32,360 --> 00:41:35,960 veida ievietot mezglus vai dzēst mezglus vai meklēt lietas, kur mēs gribam, 899 00:41:35,960 --> 00:41:39,560 bet, lai to paveiktu, iesim uz priekšu un padarīt lietas mazliet vairāk reālu, jo tas 900 00:41:39,560 --> 00:41:42,560 ir super zema līmeņa līdz šim. 901 00:41:42,560 --> 00:41:45,700 Vai kāds burtiski gribētu būt pirmais? 902 00:41:45,700 --> 00:41:46,200 LABI. 903 00:41:46,200 --> 00:41:47,092 Nāciet uz augšu. 904 00:41:47,092 --> 00:41:47,800 Kā tevi sauc? 905 00:41:47,800 --> 00:41:48,499 >> DAVID: David. 906 00:41:48,499 --> 00:41:49,290 DAVID Malan: David. 907 00:41:49,290 --> 00:41:49,998 Prieks iepazīties. 908 00:41:49,998 --> 00:41:50,960 ES arī. 909 00:41:50,960 --> 00:41:52,450 Viss kārtībā. 910 00:41:52,450 --> 00:41:53,990 Un mums ir nepieciešama virkne 9. 911 00:41:53,990 --> 00:41:55,240 Ne tik labi, kā pirmais, varbūt. 912 00:41:55,240 --> 00:41:56,430 OK, skaits 9. 913 00:41:56,430 --> 00:41:59,667 Skaitlis 17, lūdzu. 914 00:41:59,667 --> 00:42:01,000 Ļaujiet man iet atpakaļ nedaudz tālāk. 915 00:42:01,000 --> 00:42:03,980 Number 22, lūdzu, un Kā par tālāk atpakaļ 916 00:42:03,980 --> 00:42:06,344 ja es redzu kādi rokās ar visu gaismas vai nē. 917 00:42:06,344 --> 00:42:08,010 Kāds ir tiek brīvprātīgi turpat. 918 00:42:08,010 --> 00:42:08,968 Vai jūs vēlaties, lai nākt klajā? 919 00:42:08,968 --> 00:42:10,450 Jūsu apakšdelma tiek piespiedu kārtā iet uz augšu. 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 nāk uz leju. 923 00:42:15,120 --> 00:42:18,450 Vai kāds cits gribētu forcefully-- Nāc uz augšu. 924 00:42:18,450 --> 00:42:21,030 Faktiskā brīvprātīgo. 925 00:42:21,030 --> 00:42:23,330 >> Tik ļoti ātri, ja jūs puiši varētu organizēt 926 00:42:23,330 --> 00:42:26,550 paši tāpat kā mezgli uz ekrāna. 927 00:42:26,550 --> 00:42:27,510 Paldies. 928 00:42:27,510 --> 00:42:29,234 Un jums būs 26. 929 00:42:29,234 --> 00:42:30,650 Visas tiesības un ātri ievads. 930 00:42:30,650 --> 00:42:32,139 Tāpēc es esmu Dāvids un jums ir arī? 931 00:42:32,139 --> 00:42:32,680 DAVID: David. 932 00:42:32,680 --> 00:42:33,721 DAVID Malan: Un jūs esat? 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 Malan: Taylor. 939 00:42:37,466 --> 00:42:37,590 Excellent. 940 00:42:37,590 --> 00:42:39,810 Tātad šie ir mūsu brīvprātīgie par šodienu un iet uz priekšu 941 00:42:39,810 --> 00:42:43,090 un novirzīt maz, ka veids, un tikai iet uz priekšu un saglabāt 942 00:42:43,090 --> 00:42:47,024 turot savus numurus, kā jūs vai jūsu Pirmā pazīme un, izmantojot savu kreiso roku, 943 00:42:47,024 --> 00:42:48,940 iet uz priekšu un vienkārši īstenot šīs bultas, tikko 944 00:42:48,940 --> 00:42:51,360 lai jūsu kreisā roka ir burtiski norādot kāds ir jānorāda 945 00:42:51,360 --> 00:42:54,610 at, un dot sev kādu, lai istabas mēs varam vizuāli redzēt jūsu rokas faktiski 946 00:42:54,610 --> 00:42:58,120 norādot, un jūs vienkārši varat norādīt veida pie zemes ir labi. 947 00:42:58,120 --> 00:43:03,040 >> Tātad šeit mums ir saistīts saraksts vienu, divi, trīs, četri, pieci mezgli sākotnēji, 948 00:43:03,040 --> 00:43:05,860 un paziņojums, mums ir šis īpašais rādītāju sākumā, kurš ir 949 00:43:05,860 --> 00:43:09,770 Galvenais jo mums ir sekot no visa garuma sarakstā kaut kā. 950 00:43:09,770 --> 00:43:13,590 Šie puiši, pat ja viņi atstājuši uz labo, atpakaļ atpakaļ atmiņā, 951 00:43:13,590 --> 00:43:15,950 tie faktiski var būt jebkur jo datora atmiņā. 952 00:43:15,950 --> 00:43:18,240 Tātad šie puiši varētu būt stāvot jebkurā vietā uz skatuves 953 00:43:18,240 --> 00:43:20,960 un tas ir labi, tik ilgi, kamēr viņi faktiski norādot uz viena no otras, 954 00:43:20,960 --> 00:43:22,770 bet, lai saglabātu lietas tīrs un vienkāršs, mēs 955 00:43:22,770 --> 00:43:25,728 vienkārši izdarīt tos kreisās uz labo, piemēram, tas, bet tur varētu būt masveida trūkumi 956 00:43:25,728 --> 00:43:26,790 starp šiem mezgliem. 957 00:43:26,790 --> 00:43:30,710 >> Tagad, ja es gribu, lai faktiski ievietot dažus jaunā vērtība, iesim uz priekšu un darīt to. 958 00:43:30,710 --> 00:43:33,720 Mums ir iespēja tagad izvēlēties citu mezglu. 959 00:43:33,720 --> 00:43:39,820 Informējiet Sāksim off ar mallocing 55. 960 00:43:39,820 --> 00:43:41,320 Vai kāds prātā, ir malloc? 961 00:43:41,320 --> 00:43:42,280 OK, nākt uz augšu. 962 00:43:42,280 --> 00:43:42,992 Kā tevi sauc? 963 00:43:42,992 --> 00:43:43,700 RAINBOW: Rainbow. 964 00:43:43,700 --> 00:43:44,050 DAVID Malan: Rainbow? 965 00:43:44,050 --> 00:43:44,810 Viss kārtībā. 966 00:43:44,810 --> 00:43:46,600 Malloc Rainbow. 967 00:43:46,600 --> 00:43:47,450 Nāciet uz augšu. 968 00:43:47,450 --> 00:43:51,610 Tāpēc tagad mums ir jāuzdod sev algorithmically kur mēs varam likt 55. 969 00:43:51,610 --> 00:43:53,610 Tātad mēs visi zinām, protams, ja viņa, iespējams, 970 00:43:53,610 --> 00:43:55,401 pieder, ja mēs cenšamies saglabāt šo sakārtoti 971 00:43:55,401 --> 00:43:58,299 Un, ja jūs puiši varētu veikt vienu soli atpakaļ tāpēc mums nav nokrist 972 00:43:58,299 --> 00:43:59,590 posms, tas būtu lieliski. 973 00:43:59,590 --> 00:44:01,420 Tātad faktiski, Rainbow, sāktu vairāk šeit kopā ar mani, 974 00:44:01,420 --> 00:44:04,200 jo mēs kā datoru tagad varat redzēt tikai vienu mainīgo laikā. 975 00:44:04,200 --> 00:44:05,190 Tātad, ja tas ir pirmais mezgls. 976 00:44:05,190 --> 00:44:07,160 Ievērojiet, viņš nav mezglu, viņš ir tikai rādītājs, 977 00:44:07,160 --> 00:44:10,270 un tas ir iemesls, kāpēc viņš ir izstrādāts, lai būtu tikai lielums rādītājs, ne 978 00:44:10,270 --> 00:44:11,780 viens no tiem pilna taisnstūri. 979 00:44:11,780 --> 00:44:16,650 Tātad mēs ejam, lai pārbaudītu katrā atkārtojuma ir 55 mazāk nekā 9? 980 00:44:16,650 --> 00:44:17,150 Nē. 981 00:44:17,150 --> 00:44:19,060 Ir 55 mazāk nekā 17? 982 00:44:19,060 --> 00:44:19,720 Nē. 983 00:44:19,720 --> 00:44:20,800 Mazāk nekā 22? 984 00:44:20,800 --> 00:44:22,020 Mazāk nekā 26? 985 00:44:22,020 --> 00:44:23,390 Mazāk nekā 34? 986 00:44:23,390 --> 00:44:25,890 Un tāpēc tagad, acīmredzot Rainbow pieder beigās. 987 00:44:25,890 --> 00:44:27,270 Tātad, lai būtu skaidrs, un to, kas bija jūsu vārds, Taylor? 988 00:44:27,270 --> 00:44:27,895 >> TAYLOR: Taylor. 989 00:44:27,895 --> 00:44:32,510 DAVID Malan: Tātad starp Taylor kreiso roku un varavīksnes rokas šeit, 990 00:44:32,510 --> 00:44:38,324 kuru puses ir nepieciešams norādīt uz to, kas Lai ievietotu 55. šajā sarakstā? 991 00:44:38,324 --> 00:44:39,240 Kas mums jādara? 992 00:44:39,240 --> 00:44:39,700 Yeah? 993 00:44:39,700 --> 00:44:41,140 >> Mērķauditorija: Taylor hand nepieciešams norādīt kreisi. 994 00:44:41,140 --> 00:44:41,680 >> DAVID Malan: Tieši tā. 995 00:44:41,680 --> 00:44:43,800 Tātad ievietojot mezglu uz saraksta beigās 996 00:44:43,800 --> 00:44:47,140 ir diezgan vienkārša, jo Taylor tikko ir punktam, tā vietā, lai pie zemes 997 00:44:47,140 --> 00:44:49,640 vai mēs to saucam null, null ir sava veida trūkuma 998 00:44:49,640 --> 00:44:51,640 par rādītāju vai īpašu nulle rādītājs, jūs esat 999 00:44:51,640 --> 00:44:53,740 gatavojas atzīmēt ar kreiso roku pie varavīksnes un tad Rainbow, 1000 00:44:53,740 --> 00:44:55,910 Kur kreiso roku iespējams norādīt? 1001 00:44:55,910 --> 00:44:56,570 Down. 1002 00:44:56,570 --> 00:45:00,140 Tas nav labi, ja viņas roka ir sava no norādot off šeit vai veida jebkurš 1003 00:45:00,140 --> 00:45:00,640 kādā veidā. 1004 00:45:00,640 --> 00:45:02,407 Tas būtu jāuzskata atkritumu vērtība, 1005 00:45:02,407 --> 00:45:04,240 bet, ja viņa norāda uz daži zināmā vērtība, mēs 1006 00:45:04,240 --> 00:45:07,360 to sauc nulle vai null, tas ir OK jo mums ir terminu šis 1007 00:45:07,360 --> 00:45:09,390 un mēs zinām saraksts tagad ir pabeigta. 1008 00:45:09,390 --> 00:45:11,550 >> Tātad, kas ir vēl viens samērā vienkārša lieta? 1009 00:45:11,550 --> 00:45:13,125 Mēs varētu malloc 5? 1010 00:45:13,125 --> 00:45:14,010 Nāciet uz augšu. 1011 00:45:14,010 --> 00:45:14,782 Kā tevi sauc? 1012 00:45:14,782 --> 00:45:15,490 Tiffany: Tiffany. 1013 00:45:15,490 --> 00:45:16,000 DAVID Malan: Es atvainojos? 1014 00:45:16,000 --> 00:45:16,470 Tiffany: Tiffany. 1015 00:45:16,470 --> 00:45:16,880 DAVID Malan: Tiffany. 1016 00:45:16,880 --> 00:45:17,110 Viss kārtībā. 1017 00:45:17,110 --> 00:45:19,071 Tiffany ir malloced ar vērtību 5. 1018 00:45:19,071 --> 00:45:19,570 Nāciet uz augšu. 1019 00:45:19,570 --> 00:45:23,820 Tas viens ir salīdzinoši viegli pārāk, bet pieņemsim apsvērt kārtību operāciju tagad. 1020 00:45:23,820 --> 00:45:25,820 Tas bija diezgan viegli ar Taylor beigās. 1021 00:45:25,820 --> 00:45:30,302 Skaits 5, protams mazāks par 9, un tāpēc mums ir Dāvidu, mums ir Tiffany, 1022 00:45:30,302 --> 00:45:31,260 un kāda bija jūsu vārds? 1023 00:45:31,260 --> 00:45:31,680 >> JAKE: Jake. 1024 00:45:31,680 --> 00:45:32,470 >> DAVID Malan: Jake. 1025 00:45:32,470 --> 00:45:34,300 Tiffany, Jake, un David. 1026 00:45:34,300 --> 00:45:36,580 Kuru roka būtu jāatjaunina vispirms? 1027 00:45:36,580 --> 00:45:39,260 1028 00:45:39,260 --> 00:45:40,590 Ko jūs vēlaties darīt šeit? 1029 00:45:40,590 --> 00:45:45,244 Tur ir pāris iespējamie veidi, bet tur ir arī viens vai vairāki nepareizi veidi. 1030 00:45:45,244 --> 00:45:46,620 >> Mērķauditorija: Sāciet ar visvairāk pa kreisi. 1031 00:45:46,620 --> 00:45:47,800 >> DAVID Malan: Sāciet ar kreisās malas. 1032 00:45:47,800 --> 00:45:49,008 Kurš ir visvairāk pa kreisi šeit tad? 1033 00:45:49,008 --> 00:45:49,700 Mērķauditorija: First. 1034 00:45:49,700 --> 00:45:50,366 >> DAVID Malan: OK. 1035 00:45:50,366 --> 00:45:53,781 Tātad, sākt ar pirmo un kur jūs vēlaties atjaunot Dāvida rokās būt? 1036 00:45:53,781 --> 00:45:54,780 Mērķauditorija: Ceļā uz 5. 1037 00:45:54,780 --> 00:45:55,446 DAVID Malan: OK. 1038 00:45:55,446 --> 00:45:59,026 Tātad David, punkts, pieci vai Tiffany šeit, un tagad? 1039 00:45:59,026 --> 00:46:01,072 >> Mērķauditorija: Tiffany norāda uz 9? 1040 00:46:01,072 --> 00:46:04,030 DAVID Malan: Perfect, izņemot mīkstās s vadītājs tikko veida nokrita, vai ne? 1041 00:46:04,030 --> 00:46:06,820 Jo to, kas ir nepareizi ar šo attēlu burtiski? 1042 00:46:06,820 --> 00:46:08,070 Mērķauditorija: Nekas ir vērsta. 1043 00:46:08,070 --> 00:46:09,945 DAVID Malan: Nekas nav norādot uz Jake tagad. 1044 00:46:09,945 --> 00:46:13,360 Mēs esam burtiski bāreņiem 9 un 17, un mēs esam burtiski 1045 00:46:13,360 --> 00:46:18,450 noplūda visu šo atmiņu, jo, atjaunināšanu Dāvida roku pirmkārt, tas ir 1046 00:46:18,450 --> 00:46:21,660 fine ciktāl tas ir pareizi norādot Tiffany tagad, 1047 00:46:21,660 --> 00:46:25,410 bet, ja neviens nebija Foresight norādīt uz Jake, 1048 00:46:25,410 --> 00:46:27,490 tad mēs esam zaudējuši kopums šajā sarakstā. 1049 00:46:27,490 --> 00:46:28,200 Tātad pieņemsim atsaukt. 1050 00:46:28,200 --> 00:46:30,950 Tā, ka bija laba lieta paklupt bet pieņemsim labot tagad. 1051 00:46:30,950 --> 00:46:33,624 Ko mums vajadzētu darīt vispirms vietā? 1052 00:46:33,624 --> 00:46:34,124 Yeah? 1053 00:46:34,124 --> 00:46:35,791 >> Mērķauditorija: Tiffany ir jānorāda pie 9? 1054 00:46:35,791 --> 00:46:37,582 DAVID Malan: Es nevaru iegūt, ka jums tuvu. 1055 00:46:37,582 --> 00:46:38,720 Kas jānorāda uz 9? 1056 00:46:38,720 --> 00:46:39,220 >> Mērķauditorija: Tiffany. 1057 00:46:39,220 --> 00:46:39,390 >> DAVID Malan: Labi. 1058 00:46:39,390 --> 00:46:41,200 Tātad Tiffany būtu pirmais punkts pie 9. 1059 00:46:41,200 --> 00:46:43,550 Tātad Tiffany jāņem uz identisku vērtību 1060 00:46:43,550 --> 00:46:45,820 Dāvidam, kas, šķiet, lieks uz brīdi, 1061 00:46:45,820 --> 00:46:48,820 bet tas ir labi, jo tagad, otrais solis, mēs varam atjaunināt Dāvida roku 1062 00:46:48,820 --> 00:46:52,680 norādīt pie Tiffany, un pēc tam, ja Mēs tikko veida tīras lietas augšu 1063 00:46:52,680 --> 00:46:55,740 it kā tas ir sava veida pavasara līdzīgu, tagad tas ir pareizs ievietošanas. 1064 00:46:55,740 --> 00:46:56,700 Tik lielisks. 1065 00:46:56,700 --> 00:46:57,970 Tāpēc tagad mēs esam gandrīz tur. 1066 00:46:57,970 --> 00:47:01,075 Pieņemsim ievietot vienu gala vērtība kā vērtību 20. 1067 00:47:01,075 --> 00:47:03,010 Ja mēs varētu malloc vienu pēdējo brīvprātīgais? 1068 00:47:03,010 --> 00:47:04,140 Nāciet uz augšu. 1069 00:47:04,140 --> 00:47:06,224 Tātad šis ir nedaudz vairāk viltīgs. 1070 00:47:06,224 --> 00:47:08,390 Bet tiešām, kodu mēs esam rakstiski, gan mutiski, 1071 00:47:08,390 --> 00:47:10,610 ir tāpat kā ar ķekars no tā, ja apstākļi tagad, vai ne? 1072 00:47:10,610 --> 00:47:12,318 Mums bija nosacījums pārbaudot, vai tā pieder 1073 00:47:12,318 --> 00:47:13,840 beigās, varbūt sākumā. 1074 00:47:13,840 --> 00:47:15,940 Mums vajag kādu cilpa uz atrast savu vietu vidū. 1075 00:47:15,940 --> 00:47:17,400 Tātad, pieņemsim darīt ar to, kas ir jūsu vārds? 1076 00:47:17,400 --> 00:47:17,700 >> ERIC: Eric. 1077 00:47:17,700 --> 00:47:18,340 >> DAVID Malan: Eric? 1078 00:47:18,340 --> 00:47:18,660 Eric. 1079 00:47:18,660 --> 00:47:19,368 Prieks iepazīties. 1080 00:47:19,368 --> 00:47:20,490 Tātad mums ir 20. 1081 00:47:20,490 --> 00:47:21,220 Mazāk nekā pieci? 1082 00:47:21,220 --> 00:47:21,530 Nē. 1083 00:47:21,530 --> 00:47:22,160 Mazāk nekā deviņi? 1084 00:47:22,160 --> 00:47:22,410 Nē. 1085 00:47:22,410 --> 00:47:23,050 Mazāk nekā 17? 1086 00:47:23,050 --> 00:47:23,550 Nē. 1087 00:47:23,550 --> 00:47:23,740 LABI. 1088 00:47:23,740 --> 00:47:25,701 Viņš pieder šeit un Jūsu vārdi atkal ir? 1089 00:47:25,701 --> 00:47:26,200 SUE: Sue. 1090 00:47:26,200 --> 00:47:26,880 DAVID Malan: Sue. 1091 00:47:26,880 --> 00:47:27,379 ALEX: Alex. 1092 00:47:27,379 --> 00:47:28,790 DAVID Malan: Sue, Alex, un? 1093 00:47:28,790 --> 00:47:29,290 ERIC: Eric. 1094 00:47:29,290 --> 00:47:30,120 DAVID Malan: Eric. 1095 00:47:30,120 --> 00:47:32,140 Kuru rokās ir nepieciešams, lai saņemtu atjauninātu vispirms? 1096 00:47:32,140 --> 00:47:32,930 >> Mērķauditorija: Eric. 1097 00:47:32,930 --> 00:47:33,429 LABI. 1098 00:47:33,429 --> 00:47:35,200 Tātad Ērika jānorāda pie kur? 1099 00:47:35,200 --> 00:47:35,930 Pie 22. 1100 00:47:35,930 --> 00:47:36,430 Labs. 1101 00:47:36,430 --> 00:47:38,180 Un tagad ko tālāk? 1102 00:47:38,180 --> 00:47:40,800 Sue tad var norādīt pie Eric un tagad, ja jūs puiši vienkārši 1103 00:47:40,800 --> 00:47:44,077 veikt dažas telpa, kas ir labi vizuāli, tagad mēs esam darījuši ievietošanas. 1104 00:47:44,077 --> 00:47:47,160 Tātad pieņemsim tagad izskatīt kādu jautājumu, bet paldies jums tik daudz par mūsu brīvprātīgajiem. 1105 00:47:47,160 --> 00:47:48,090 Ļoti labi darīts. 1106 00:47:48,090 --> 00:47:50,831 Jūs varat saglabāt tos, ja vēlaties. 1107 00:47:50,831 --> 00:47:54,140 Un mums ir jauki atvadīšanās dāvana, ja jūs katrs vēlētos izmantot stresa bumbiņu. 1108 00:47:54,140 --> 00:47:56,030 Ļaujiet man tikai nodot šo leju. 1109 00:47:56,030 --> 00:47:58,430 Tātad, kas ir takeaway par šo? 1110 00:47:58,430 --> 00:48:02,430 Tas, šķiet, ir pārsteidzošs ciktāl mēs esam tagad 1111 00:48:02,430 --> 00:48:06,360 ieviesa par alternatīvu masīvs, kas nav tik ierobežota 1112 00:48:06,360 --> 00:48:07,780 masīvs kādu noteiktu lielumu. 1113 00:48:07,780 --> 00:48:09,380 Tās var augt dinamiski. 1114 00:48:09,380 --> 00:48:13,220 >> Bet, līdzīgi kā mēs esam redzējuši nedēļās pagātnē, mēs nekad neko par brīvu, 1115 00:48:13,220 --> 00:48:15,740 tāpat protams tur ir kompromiss šeit. 1116 00:48:15,740 --> 00:48:18,890 Tātad ar otrādi par saistītu saraksts, tas ir dinamisms? 1117 00:48:18,890 --> 00:48:21,590 Šī spēja augt un atklāti, mēs būtu varējuši izdarīt izdzēst 1118 00:48:21,590 --> 00:48:23,570 un mēs varētu sarukt, kā nepieciešams. 1119 00:48:23,570 --> 00:48:24,710 Ko cena mēs maksā? 1120 00:48:24,710 --> 00:48:28,510 1121 00:48:28,510 --> 00:48:30,340 Divreiz tik daudz telpu, pirmkārt. 1122 00:48:30,340 --> 00:48:34,010 Ja paskatās uz attēlu, vairs es esmu uzglabājot sarakstu veseli skaitļi. 1123 00:48:34,010 --> 00:48:36,740 Es esmu uzglabājot sarakstu skaitļu plus norādes. 1124 00:48:36,740 --> 00:48:38,240 Tāpēc es esmu dubultojot daudzumu telpā. 1125 00:48:38,240 --> 00:48:40,740 Tagad, varbūt, ka tas nav tāds liels galā 4 baiti, 8 baiti, 1126 00:48:40,740 --> 00:48:43,160 bet tas, protams, var pievienot up lielu datu kopu. 1127 00:48:43,160 --> 00:48:45,570 Kas ir vēl viens mīnuss? 1128 00:48:45,570 --> 00:48:46,070 Yeah? 1129 00:48:46,070 --> 00:48:48,010 >> Mērķauditorija: Mums traversa viņiem vienu pa vienam. 1130 00:48:48,010 --> 00:48:48,760 DAVID Malan: Jā. 1131 00:48:48,760 --> 00:48:50,260 Mums ir traversa viņiem vienu pa vienam. 1132 00:48:50,260 --> 00:48:53,860 Jūs zināt, kas mēs pametusi šo super ērts iezīme kvadrātiekava 1133 00:48:53,860 --> 00:48:57,240 apzīmējums, pareizāk pazīstams kā brīvpiekļuves, 1134 00:48:57,240 --> 00:48:59,280 kur mēs varam vienkārši lēkt atsevišķam elementam 1135 00:48:59,280 --> 00:49:01,470 bet tagad, ja man vēl bija Mani brīvprātīgie šeit, 1136 00:49:01,470 --> 00:49:04,660 ja es gribēju atrast skaitlis 22, es nevaru vienkārši 1137 00:49:04,660 --> 00:49:06,620 pāriet uz kronšteins kaut ko kaut ko. 1138 00:49:06,620 --> 00:49:10,530 Man ir jāskatās pāri sarakstam, daudz tāpat kā mūsu meklējot piemērus lineāri, 1139 00:49:10,530 --> 00:49:12,260 lai atrastu numuru 22. 1140 00:49:12,260 --> 00:49:14,340 Tāpēc mēs, šķiet, ir jāmaksā cena tur. 1141 00:49:14,340 --> 00:49:16,430 Bet mēs varam tomēr risināt citas problēmas. 1142 00:49:16,430 --> 00:49:18,587 >> Patiesībā, ļaujiet man iepazīstināt tikai pāris Visuals. 1143 00:49:18,587 --> 00:49:20,920 Tātad, ja jūs esat bijis uz leju, lai Mather s Dining Hall nesen, 1144 00:49:20,920 --> 00:49:23,320 jums atgādināt, ka viņu skursteņi paplātes kā šis, 1145 00:49:23,320 --> 00:49:26,300 mēs aizgūts no šiem Annenberg pirms klasē. 1146 00:49:26,300 --> 00:49:28,930 Tātad šī kaudze paplātes, lai gan, tiek uzrādīts faktiski 1147 00:49:28,930 --> 00:49:30,860 par datorzinātņu datu struktūra. 1148 00:49:30,860 --> 00:49:32,910 Ir datu struktūra datorzinātnēs 1149 00:49:32,910 --> 00:49:38,010 pazīstams kā kaudze, kas ļoti labi pakļauj sevi tieši šis vizuālais. 1150 00:49:38,010 --> 00:49:41,380 Tātad, ja katrs no šiem paplātes nav paplāte bet, piemēram, vairākām un es gribēju 1151 00:49:41,380 --> 00:49:45,010 uzglabāt skaitļus, es varētu likt vienu uz leju šeit, 1152 00:49:45,010 --> 00:49:48,320 un es varētu likt citu šeit lejā, un turpināt kraušanas numurus 1153 00:49:48,320 --> 00:49:53,180 par vienu virs otra, un kas ir potenciāli noderīgi par šo 1154 00:49:53,180 --> 00:49:55,450 ir tas, kāda ir saistība Šīs datu struktūras? 1155 00:49:55,450 --> 00:49:58,045 Kuru skaits var izraut Pirmais visvairāk ērti? 1156 00:49:58,045 --> 00:50:00,640 1157 00:50:00,640 --> 00:50:03,030 Visvairāk nesen viens Uzvelciet tur. 1158 00:50:03,030 --> 00:50:06,430 >> Tātad, tas ir tas, ko mēs varētu zvanīt datorzinātnes LIFO datu struktūra. 1159 00:50:06,430 --> 00:50:08,070 Pēdējais iekšā, pirmais ārā. 1160 00:50:08,070 --> 00:50:10,800 Un mēs redzēsim pirms ilgi, kāpēc kas varētu būt noderīga, bet tagad, 1161 00:50:10,800 --> 00:50:12,200 vienkārši apsvērt īpašumu. 1162 00:50:12,200 --> 00:50:15,158 Un tas ir sava veida stulba, ja jūs domājat, ka par to, kā ēdamzāle to dara. 1163 00:50:15,158 --> 00:50:17,910 Katru reizi, kad viņi tīras paplātes un likt svaigi tiem virsū, 1164 00:50:17,910 --> 00:50:22,160 Jums varētu būt iepriekš tīrs bet galu galā ļoti netīrs un putekļains 1165 00:50:22,160 --> 00:50:24,360 paplāte pašā apakšā ja jums nekad nav 1166 00:50:24,360 --> 00:50:26,820 nokļūt uz apakšā, kas kaudze, jo jūs vienkārši 1167 00:50:26,820 --> 00:50:29,380 paturēt liekot jauno un tīro tie uz augšu no tā. 1168 00:50:29,380 --> 00:50:31,840 Tas pats varētu notikt lielveikalā too. 1169 00:50:31,840 --> 00:50:35,450 Ja jums ir displeja apvalks piena un katru reizi CVS 1170 00:50:35,450 --> 00:50:37,610 vai kurš saņem vairāk piena, jūs vienkārši bāzt piens 1171 00:50:37,610 --> 00:50:39,880 Jums jau ir atpakaļ un jūs varat ievietot jaunas up front, 1172 00:50:39,880 --> 00:50:43,088 Jums nāksies dažas diezgan šķebinošs piens beigās datu struktūru, 1173 00:50:43,088 --> 00:50:46,390 jo tas vienmēr apakšā vai līdzvērtīgi tas vienmēr ir aizmugurē. 1174 00:50:46,390 --> 00:50:50,407 >> Bet tur ir vēl viens veids, kā domāt par uzliku up datus un, piemēram, šis. 1175 00:50:50,407 --> 00:50:53,490 Ja jūs esat viens no tiem cilvēkiem, kam patīk rindā ārpus Apple veikalu 1176 00:50:53,490 --> 00:50:55,610 kad jauns produkts nāk out, jūs, iespējams, 1177 00:50:55,610 --> 00:50:58,780 neizmantojat kaudze datu struktūra, jo jums 1178 00:50:58,780 --> 00:51:03,070 varētu atsavināt visi, kas ir uzliku up iegādāties kādu jaunu rotaļlietu. 1179 00:51:03,070 --> 00:51:06,610 Drīzāk, jūs, iespējams, izmantojot kāda veida datu struktūras 1180 00:51:06,610 --> 00:51:10,050 vai kāda veida sistēmas reālajā pasaulē? 1181 00:51:10,050 --> 00:51:13,493 Cerams, ka tas ir līnija, vai vairāk pareizi vai vairāk britu, piemēram, rindā. 1182 00:51:13,493 --> 00:51:17,700 Un izrādās, rinda ir arī datu struktūra datorzinātnēs, 1183 00:51:17,700 --> 00:51:19,700 bet rinda ir ļoti atšķirīgs īpašums. 1184 00:51:19,700 --> 00:51:20,820 Tas nav LIFO. 1185 00:51:20,820 --> 00:51:21,990 Pēdējais iekšā, pirmais ārā. 1186 00:51:21,990 --> 00:51:22,800 Dievs pasarg. 1187 00:51:22,800 --> 00:51:24,280 Tā vietā FIFO. 1188 00:51:24,280 --> 00:51:26,110 Pirmais iekšā, pirmais ārā. 1189 00:51:26,110 --> 00:51:27,970 Un tas ir labi par taisnīguma "dēļ 1190 00:51:27,970 --> 00:51:30,428 protams, ja jūs uzliku up super agri no rīta. 1191 00:51:30,428 --> 00:51:33,400 Ja jums tur, pirmkārt, jūs vēlas izkļūt vispirms kā arī. 1192 00:51:33,400 --> 00:51:35,880 >> Un tā visus šos datus konstrukcijas, rindas un skursteņi 1193 00:51:35,880 --> 00:51:39,220 un ķekarus citiem, izrādās tevi var domāt par to kā tikai masīva. 1194 00:51:39,220 --> 00:51:41,820 Tas ir masīvs, varbūt fiksēts izmērs 4, bet tas lūdzu 1195 00:51:41,820 --> 00:51:44,990 būt sava veida jauki, ja mēs varētu tikai pāļu paplātes gandrīz bezgalīgi garš, ja mēs 1196 00:51:44,990 --> 00:51:46,780 ir, ka daudzi paplātes vai ciparus. 1197 00:51:46,780 --> 00:51:48,840 Tātad, varbūt mēs gribam izmantojiet saistīts sarakstu šeit, 1198 00:51:48,840 --> 00:51:51,800 bet kompromiss būs potenciāli ka mums ir nepieciešams vairāk atmiņas, 1199 00:51:51,800 --> 00:51:55,930 aizņem nedaudz vairāk laika, bet mēs neierobežo krāvuma augstums, 1200 00:51:55,930 --> 00:51:59,550 līdzīgi Mather s displeja apvalks varētu ierobežot izmērs kaudze, 1201 00:51:59,550 --> 00:52:03,117 un tāpēc tie ir dizaina lēmumus vai pieejamās iespējas, lai mums galu galā. 1202 00:52:03,117 --> 00:52:04,950 Tātad ar šiem datiem struktūrām, mēs esam sākuši 1203 00:52:04,950 --> 00:52:09,360 redzot jaunas augšējās robežas potenciāli par to, kas agrāk bija super ātri 1204 00:52:09,360 --> 00:52:11,260 un kur mēs ņemšu atvaļinājumu off šodien un kur 1205 00:52:11,260 --> 00:52:13,200 mēs ceram, ka, lai nokļūtu ir trešdien, mēs 1206 00:52:13,200 --> 00:52:15,740 sāk apskatīt datus struktūra, kas ļauj mums meklēt 1207 00:52:15,740 --> 00:52:18,260 caur datiem log beigu laiku atkal. 1208 00:52:18,260 --> 00:52:21,470 Un mēs redzējām, ka, atgādināt, nedēļā nulles un viens ar bināro meklēšanu vai plaisa 1209 00:52:21,470 --> 00:52:22,180 un iekarot. 1210 00:52:22,180 --> 00:52:26,240 Tas nāk atpakaļ, un vēl labāk, Svētais Grāls par šo trešdien 1211 00:52:26,240 --> 00:52:29,510 būs nākt klajā ar datu struktūra, kas darbojas patiešām 1212 00:52:29,510 --> 00:52:32,070 vai teorētiski pastāvīgs laiks, kurā 1213 00:52:32,070 --> 00:52:34,760 tas nav svarīgi, cik daudz miljoniem vai miljardiem lietas 1214 00:52:34,760 --> 00:52:38,470 mums ir datu struktūru, tas tiks ņemt mums pastāvīgu laiku, varbūt viens solis 1215 00:52:38,470 --> 00:52:41,387 vai divi soļi vai 10 soļi, bet pastāvīga skaits soļiem 1216 00:52:41,387 --> 00:52:42,970 meklēt, izmantojot šo datu struktūru. 1217 00:52:42,970 --> 00:52:46,300 Tas patiešām būs Svētais Grāls bet vairāk par to trešdien. 1218 00:52:46,300 --> 00:52:49,045 Skatīt ya tad. 1219 00:52:49,045 --> 00:52:53,704 >> [Mūzikas atskaņošanai] 1220 00:52:53,704 --> 00:56:08,448