1 00:00:00,000 --> 00:00:01,110 >> [Mūzikas atskaņošanai] 2 00:00:01,110 --> 00:00:10,567 3 00:00:10,567 --> 00:00:11,650 DAVID J. Malan: Nu labi. 4 00:00:11,650 --> 00:00:15,610 Tas ir CS50, un šis ir beigas Nedēļas Four. 5 00:00:15,610 --> 00:00:19,420 Un viens no tematiem šodien ir tas, ka ciparu kriminālistikas, 6 00:00:19,420 --> 00:00:20,989 māksla atgūt informāciju. 7 00:00:20,989 --> 00:00:22,780 Un tiešām, pat ja tu esi vidū 8 00:00:22,780 --> 00:00:25,070 šobrīd Miera pie Triju un Breakout, nākamnedēļ, 9 00:00:25,070 --> 00:00:27,880 uzmanība tiks pievērsta tieši šis domēns. 10 00:00:27,880 --> 00:00:30,686 >> Tātad viena no stilīgākais darbavietu es kādreiz bija bija atpakaļ absolvents skolā, 11 00:00:30,686 --> 00:00:33,560 kad es strādāju par vietējo Middlesex County District Attorney s 12 00:00:33,560 --> 00:00:34,950 biroja, dara kriminālistikas strādāt. 13 00:00:34,950 --> 00:00:37,450 Tātad būtībā, Massachusetts Valsts policija, reizēm, 14 00:00:37,450 --> 00:00:40,100 strādājot gadījumos būtu ienest lietām, piemēram, cieto disku 15 00:00:40,100 --> 00:00:42,185 un disketes un atmiņas kartes un tamlīdzīgi. 16 00:00:42,185 --> 00:00:44,060 Un viņi varētu nodot tās man un manam mentors, 17 00:00:44,060 --> 00:00:48,070 un mūsu mērķis bija atrast pierādījumus, ja ir kāds, par šiem medijiem. 18 00:00:48,070 --> 00:00:50,700 Tagad, iespējams, esat redzējuši ieskatu Šīs pasaules kriminālistikas 19 00:00:50,700 --> 00:00:53,000 medijos, TV un filmām. 20 00:00:53,000 --> 00:00:55,730 Bet darbs man bija, un daresay ka pasaule, 21 00:00:55,730 --> 00:00:57,550 nav gluži kā jūs varētu redzēt to. 22 00:00:57,550 --> 00:01:00,794 Pieņemsim to apskatīt to, kas Jūs droši vien esat redzējuši. 23 00:01:00,794 --> 00:01:01,460 [Video atskaņošana] 24 00:01:01,460 --> 00:01:02,930 -OK. 25 00:01:02,930 --> 00:01:05,380 Tagad, pieņemsim iegūt labu apskatīt jums. 26 00:01:05,380 --> 00:01:06,850 >> [Mūzikas atskaņošanai] 27 00:01:06,850 --> 00:01:12,260 28 00:01:12,260 --> 00:01:12,932 >> -Turiet To. 29 00:01:12,932 --> 00:01:13,657 Palaist šo atpakaļ. 30 00:01:13,657 --> 00:01:14,733 >> -Wait Minūti. 31 00:01:14,733 --> 00:01:15,233 Iet labi. 32 00:01:15,233 --> 00:01:16,371 33 00:01:16,371 --> 00:01:16,870 -Nav. 34 00:01:16,870 --> 00:01:17,369 Freeze, ka. 35 00:01:17,369 --> 00:01:17,930 -Pilna Ekrāns. 36 00:01:17,930 --> 00:01:18,376 >> -OK. 37 00:01:18,376 --> 00:01:18,875 Freeze, ka. 38 00:01:18,875 --> 00:01:20,160 Padarīta stingrāka līdzi, ka, jūs? 39 00:01:20,160 --> 00:01:22,126 >> -Vector Kas par ka puisis no pakaļējā riteņa. 40 00:01:22,126 --> 00:01:24,435 >> -Zoom In tepat šajā vietā. 41 00:01:24,435 --> 00:01:28,580 >> -ar Pareizo aprīkojumu, attēlu var tikt paplašināta un palielinājusi. 42 00:01:28,580 --> 00:01:29,330 >> -Ko Tas tāds? 43 00:01:29,330 --> 00:01:30,780 >> -Tas Ir veicināšanas programma. 44 00:01:30,780 --> 00:01:32,170 >> -Vai Jums skaidrs, ka pat tādi ir? 45 00:01:32,170 --> 00:01:33,070 >> -Es Nezinu. 46 00:01:33,070 --> 00:01:34,150 Pieņemsim uzlabot to. 47 00:01:34,150 --> 00:01:35,440 >> -Enhance A6 sadaļa. 48 00:01:35,440 --> 00:01:36,570 49 00:01:36,570 --> 00:01:38,562 Es uzlabota detalizēti, and-- 50 00:01:38,562 --> 00:01:40,020 -Es Domāju, tur ir pietiekami daudz, lai uzlabotu. 51 00:01:40,020 --> 00:01:40,976 Atlaidiet to uz mana ekrāna. 52 00:01:40,976 --> 00:01:42,559 >> -Es Uzlabota atspoguļojumu viņas acīs. 53 00:01:42,559 --> 00:01:44,322 -Ļaujiet Ir palaist to caur video uzlabošanu. 54 00:01:44,322 --> 00:01:45,210 >> -Edgar, Jūs varat uzlabot šo? 55 00:01:45,210 --> 00:01:45,710 >> -Hang On. 56 00:01:45,710 --> 00:01:47,570 57 00:01:47,570 --> 00:01:49,458 >> -I've Ir strādājuši pie šī pārdomām. 58 00:01:49,458 --> 00:01:50,402 >> -Nav S kāds ir atspulgs. 59 00:01:50,402 --> 00:01:50,902 >> -Reflection. 60 00:01:50,902 --> 00:01:52,870 -Nav Ir atspulgs no cilvēka sejas. 61 00:01:52,870 --> 00:01:53,694 >> -The Pārdomas! 62 00:01:53,694 --> 00:01:54,610 -Nav Ir atspulgs. 63 00:01:54,610 --> 00:01:55,880 -Zoom Kas par spoguli. 64 00:01:55,880 --> 00:01:57,860 Jūs varat redzēt pārdomas. 65 00:01:57,860 --> 00:01:59,630 >> -Var Jums uzlabot attēlu no šejienes? 66 00:01:59,630 --> 00:02:00,377 67 00:02:00,377 --> 00:02:01,210 -Var Jums uzlabot to? 68 00:02:01,210 --> 00:02:02,190 -Var Jums uzlabot to? 69 00:02:02,190 --> 00:02:03,066 -Var Mēs veicinām šo? 70 00:02:03,066 --> 00:02:03,898 -Var Jums uzlabot to? 71 00:02:03,898 --> 00:02:04,740 -Turiet Uz sekundi. 72 00:02:04,740 --> 00:02:05,281 Es uzlabot. 73 00:02:05,281 --> 00:02:06,470 -Zoom Jo uz durvīm. 74 00:02:06,470 --> 00:02:06,970 -Times 10. 75 00:02:06,970 --> 00:02:08,009 -Zoom. 76 00:02:08,009 --> 00:02:08,509 -Move In. 77 00:02:08,509 --> 00:02:09,340 -Vairāk. 78 00:02:09,340 --> 00:02:10,094 -Wait, Apstāties. 79 00:02:10,094 --> 00:02:10,750 -Stop. 80 00:02:10,750 --> 00:02:11,250 -Pause To. 81 00:02:11,250 --> 00:02:13,542 -Rotate Mums 75 grādus ap vertikāli, lūdzu. 82 00:02:13,542 --> 00:02:14,750 83 00:02:14,750 --> 00:02:16,127 >> -Stop. 84 00:02:16,127 --> 00:02:19,330 Iet atpakaļ uz daļu par durvīm vēlreiz. 85 00:02:19,330 --> 00:02:21,420 >> -Got Attēla pastiprinātāju, kas var Bitmap? 86 00:02:21,420 --> 00:02:24,420 >> -Maybe Mēs varam izmantot pradeep Singh metode, lai redzētu, uz logiem. 87 00:02:24,420 --> 00:02:25,902 >> -The Programmatūra ir jaunākie sasniegumi. 88 00:02:25,902 --> 00:02:26,866 >> -The Īpašvērtību ir izslēgts. 89 00:02:26,866 --> 00:02:29,758 >> -ar Labi kombinācija algorithms-- 90 00:02:29,758 --> 00:02:32,168 >> -Viņš Ir veikti apgaismojums algoritmi uz nākamo līmeni, 91 00:02:32,168 --> 00:02:34,110 un es varu izmantot tos, lai uzlabot šo fotogrāfiju. 92 00:02:34,110 --> 00:02:36,840 >> -Lock Par un palielinātu z ass. 93 00:02:36,840 --> 00:02:37,351 >> -Enhance. 94 00:02:37,351 --> 00:02:37,850 Uzlabot. 95 00:02:37,850 --> 00:02:38,720 -Enhance. 96 00:02:38,720 --> 00:02:40,070 -Freeze Un uzlabot. 97 00:02:40,070 --> 00:02:43,420 [END VIDEO PLAYBACK] 98 00:02:43,420 --> 00:02:45,830 DAVID J. Malan: Tātad tie ir visi vārdi, bet tie nebija 99 00:02:45,830 --> 00:02:47,870 izmanto teikumus pareizi. 100 00:02:47,870 --> 00:02:52,370 Un tiešām nākotnē, jebkurā laikā, lūdzu, jūs dzirdat kādu sakām vārdu, 101 00:02:52,370 --> 00:02:54,250 "Uzlabot", nosmieties tikai mazliet. 102 00:02:54,250 --> 00:02:57,190 Jo, kad jūs mēģināt uzlabot, Piemēram, tas ir tas, kas notiek. 103 00:02:57,190 --> 00:02:58,580 >> Tātad, šeit ir krāšņs foto. 104 00:02:58,580 --> 00:02:59,720 Tas ir CS50 paša Daven. 105 00:02:59,720 --> 00:03:03,740 Un pieņemsim, ka mēs vēlējāmies koncentrēsies uz zibsnīšana viņa acīs, 106 00:03:03,740 --> 00:03:05,870 vai atspoguļojums slikts puisis, kas bija nepārprotami 107 00:03:05,870 --> 00:03:07,820 piesavināties drošības kameru. 108 00:03:07,820 --> 00:03:10,330 Tas ir tas, kas notiek, kad jūs tuvinātu attēlu, kas 109 00:03:10,330 --> 00:03:14,060 ir tikai ierobežots skaits bitu, kas saistītas ar to. 110 00:03:14,060 --> 00:03:15,420 >> Tas ir tas, ko jūs varētu saņemt. 111 00:03:15,420 --> 00:03:19,190 Un tiešām, jo ​​Daven acīm ir tikai četri, varbūt seši pikseļi 112 00:03:19,190 --> 00:03:22,110 ka rakstīt tieši to, ko Tika glimmering tur. 113 00:03:22,110 --> 00:03:25,890 Tātad Problem Set Four galu galā būs jūs izpētīt šo pasauli, jo īpaši 114 00:03:25,890 --> 00:03:28,090 raksturs, kaut mēs saucam failu i / o, kur 115 00:03:28,090 --> 00:03:31,000 i / o ir tikai iedomātā veids sakot, ieejas un izejas. 116 00:03:31,000 --> 00:03:34,280 >> Tātad līdz šim, visi mijiedarbības mēs esam bija ar datoru 117 00:03:34,280 --> 00:03:36,770 ir lielā mērā ar savu klaviatūra un ekrāns, 118 00:03:36,770 --> 00:03:40,770 bet ne tik daudz ar cietā diska, vai saglabājot failu ārpus tiem, jūs 119 00:03:40,770 --> 00:03:41,620 sevi rakstīt. 120 00:03:41,620 --> 00:03:44,570 Jūsu programmas līdz šim ir nav radīt, un ietaupot, 121 00:03:44,570 --> 00:03:46,270 un atjaunināt savus failus. 122 00:03:46,270 --> 00:03:47,150 >> Nu, kas ir fails? 123 00:03:47,150 --> 00:03:48,105 Nu, kaut kā JPEG. 124 00:03:48,105 --> 00:03:50,520 Šis ir attēlu jūs varētu ir vai augšupielādēt Facebook, 125 00:03:50,520 --> 00:03:51,690 vai redzēt jebkur tīmeklī. 126 00:03:51,690 --> 00:03:54,460 Patiešām, ka foto mēs tikko zāģis no Daven bija JPEG. 127 00:03:54,460 --> 00:03:57,570 Un, kas ir interesanti par failiem, piemēram, JPEG 128 00:03:57,570 --> 00:04:02,170 ir tā, ka tos var identificēt, parasti, dažas modeļus bitiem. 129 00:04:02,170 --> 00:04:05,200 >> Citiem vārdiem sakot, to, kas ir tas, ka atšķir JPEG no GIF 130 00:04:05,200 --> 00:04:08,109 no Ping no Word dokuments Excel failu? 131 00:04:08,109 --> 00:04:09,900 Nu, tas ir tikai atšķirīgs modeļi bitiem. 132 00:04:09,900 --> 00:04:12,820 Un šie dažādie modeļi ir Parasti sākumā šiem failiem. 133 00:04:12,820 --> 00:04:18,200 >> Lai tad, kad jūsu dators atver Word doc, vai arī tad, kad dators atver JPEG, 134 00:04:18,200 --> 00:04:20,940 tas izskatās parasti pie Pirmie vairāki biti failā. 135 00:04:20,940 --> 00:04:24,059 Un, ja tā atzīst, modelis, tā saka, ak, tas ir attēlu. 136 00:04:24,059 --> 00:04:25,850 Ļaujiet man parādīt to lietotājs kā grafiks. 137 00:04:25,850 --> 00:04:27,870 Vai arī, ak, tas izskatās Word doc. 138 00:04:27,870 --> 00:04:30,480 Ļaujiet man parādīs to lietotājam kā eseju. 139 00:04:30,480 --> 00:04:33,020 >> Tā, piemēram, JPEG, izrādās, ir 140 00:04:33,020 --> 00:04:35,460 diezgan sarežģīta zem motora pārsega. 141 00:04:35,460 --> 00:04:40,140 Bet pirmie trīs baiti biežāk kā reizi JPEG sākt ar šiem trim skaitļiem. 142 00:04:40,140 --> 00:04:44,680 Tātad baits nulle, viens, un divi, kas lielākā katru JPEG, 255, tad numurs 143 00:04:44,680 --> 00:04:46,675 216, tad skaitlis 255. 144 00:04:46,675 --> 00:04:48,990 >> Un ko jūs varēsiet sākt darīt nākamnedēļ 145 00:04:48,990 --> 00:04:52,920 faktiski poking zem kapuci failus, piemēram JPEG 146 00:04:52,920 --> 00:04:57,210 un, piemēram, bitkartes failus, un redzot , kas vienmēr ir bijis tur tik ilgi 147 00:04:57,210 --> 00:04:58,650 kā jūs esat bijis, izmantojot datoru. 148 00:04:58,650 --> 00:05:01,860 >> Bet to, kas nav parasti rakstīts tāpat aiz skaitļiem, piemēram, šis. 149 00:05:01,860 --> 00:05:04,620 Datoru zinātnieki nav mēdz runāt aiz komata. 150 00:05:04,620 --> 00:05:06,139 Tie nav īsti runā bināro. 151 00:05:06,139 --> 00:05:07,930 Parasti, ja mēs vēlamies izteikt skaitļus, 152 00:05:07,930 --> 00:05:10,710 mēs faktiski izmantot heksadecimālo, kas jums var atgādināt 153 00:05:10,710 --> 00:05:13,027 no, teiksim, Problem Set Viens, kas apstrīdēja 154 00:05:13,027 --> 00:05:14,610 lai jūs domājat par citu sistēmu. 155 00:05:14,610 --> 00:05:17,170 >> Mēs, protams, ir pazīstami ar komata, nulles caur deviņi. 156 00:05:17,170 --> 00:05:18,215 Mēs runājām par bināro. 157 00:05:18,215 --> 00:05:20,710 Un mums nav īsti ir izmantot ka daudz šeit 158 00:05:20,710 --> 00:05:22,470 uz out, jo datori izmantos to. 159 00:05:22,470 --> 00:05:24,900 Bet programmētāji būs ļoti bieži, bet ne vienmēr, 160 00:05:24,900 --> 00:05:29,360 izmantot heksadecimālo, kas nozīmē tikai to, Jums ir 16 burti savā alfabētā, 161 00:05:29,360 --> 00:05:31,330 atšķirībā no diviem vai 10. 162 00:05:31,330 --> 00:05:34,530 >> Tātad, kā jūs rēķināties ar augstāku nekā deviņi heksadecimāli? 163 00:05:34,530 --> 00:05:41,120 Tu ej 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, tikai ar konvencijas. 164 00:05:41,120 --> 00:05:43,540 Bet to, kas ir galvenais ir tas, ka katrs no tiem ir viens simbols. 165 00:05:43,540 --> 00:05:44,340 Nav 10. 166 00:05:44,340 --> 00:05:48,400 Nav 11, per se, jo katrs Sava cipariem, tāpat patīk komata 167 00:05:48,400 --> 00:05:51,940 un tāpat kā binārā, būtu vienkārši būt vienu rakstzīmi, pēc vienošanās. 168 00:05:51,940 --> 00:05:55,280 >> Tāpēc, ka tad ir alfabēts mums mūsu rīcībā heksadecimālo. 169 00:05:55,280 --> 00:05:58,600 Tātad, ko tas JPEG izskatās, ja jūs bija rakstīt šo pirmo trīs 170 00:05:58,600 --> 00:06:01,980 baiti nevis kā aiz komata, bet, Piemēram, kā heksadecimālim? 171 00:06:01,980 --> 00:06:03,640 Un kāpēc ir hex pat viss, kas noder? 172 00:06:03,640 --> 00:06:05,290 >> Nu, ātri apskatīt piemēru. 173 00:06:05,290 --> 00:06:09,030 Tātad, ja es rakstīt, biti, kas pārstāvēt šos decimāldaļu numbers-- 174 00:06:09,030 --> 00:06:12,450 tas varētu būt nedaudz ierūsējis tagad no dažām nedēļām atpakaļ, 175 00:06:12,450 --> 00:06:14,820 bet pa kreisi vienu un labi viens ir diezgan viegli. 176 00:06:14,820 --> 00:06:17,990 255 bija lielākais skaits, mēs varētu būt ar astoņiem bitiem. 177 00:06:17,990 --> 00:06:18,820 Tas viss bija ones. 178 00:06:18,820 --> 00:06:21,320 Tātad vienīgais, kas ir nedaudz interesanti ir vidējā viena. 179 00:06:21,320 --> 00:06:24,700 Un, ja jūs veida darīt out math, jūs secināt, ka, protams, 180 00:06:24,700 --> 00:06:27,949 ka modelis viens un nullītes pārstāv 216. 181 00:06:27,949 --> 00:06:30,240 Tāpēc pieņemsim tikai nosaka, lai tagad, ka tie ir pareizi. 182 00:06:30,240 --> 00:06:31,730 Bet kāpēc tas ir interesanti? 183 00:06:31,730 --> 00:06:33,970 >> Nu, baitu, protams, ir astoņi biti. 184 00:06:33,970 --> 00:06:38,980 Un izrādās, ka, ja jūs domājat, ka par baitu kā divu gabalos četru biti, 185 00:06:38,980 --> 00:06:39,500 kā šis. 186 00:06:39,500 --> 00:06:41,000 Ļaujiet man vienkārši pievienojiet dažas vietas. 187 00:06:41,000 --> 00:06:42,550 Tātad, pirms, pēc. 188 00:06:42,550 --> 00:06:46,520 Esmu tikko pievienotās dažas balto laukumu vizualizācijai dēļ šeit. 189 00:06:46,520 --> 00:06:51,840 Kā mēs varētu tagad pārstāv, teiksim, heksadecimālo katrs quad biti, 190 00:06:51,840 --> 00:06:52,880 katrs komplekts no četriem bitiem? 191 00:06:52,880 --> 00:06:56,420 >> Tā, piemēram, pa kreisi Tagad, mums ir 1111 bināro. 192 00:06:56,420 --> 00:07:00,420 Kas ir tas, ka skaits aiz komata, ja jūs out math? 193 00:07:00,420 --> 00:07:03,780 Jums ir ones vieta, twos vietu, četrrāpus vietu, un astotnieki vietu. 194 00:07:03,780 --> 00:07:04,341 >> AUDITORIJA: 15. 195 00:07:04,341 --> 00:07:05,340 DAVID J. Malan: Tas ir 15. 196 00:07:05,340 --> 00:07:08,340 Tātad, ja mēs astoņi plus četri plus divi plus viens, mēs iegūstam 15. 197 00:07:08,340 --> 00:07:11,790 Lai es varētu pierakstīt 15 zemāk 1111, bet viss punkts šeit 198 00:07:11,790 --> 00:07:13,190 ir heksadecimālo, nav decimālo. 199 00:07:13,190 --> 00:07:17,310 Tā vietā, rakstot uz leju 15, 1-5, Es esmu gatavojas rakstīt, ka hex, 200 00:07:17,310 --> 00:07:22,311 kas, ja jūs domājat, ka atpakaļ, ja Jums ir nulle caur f, kas ir 15 būs? 201 00:07:22,311 --> 00:07:22,810 AUDITORIJA: f. 202 00:07:22,810 --> 00:07:24,434 DAVID J. Malan: Tātad izrādās, tas ir f. 203 00:07:24,434 --> 00:07:29,140 Un jūs varat strādāt, ka ārā, sakot, labi, ja ir 10, tad OK, f ir 15. 204 00:07:29,140 --> 00:07:33,250 Tik tiešām, mēs varētu pārrakstīt tas pats skaitļu kopums kā f f. 205 00:07:33,250 --> 00:07:35,750 Un tad, ja mēs mazliet par matemātiku, mēs secināt, ka tas ir d. 206 00:07:35,750 --> 00:07:38,650 Astoņi ir diezgan viegli, jo mēs ir viens no eights vietā. 207 00:07:38,650 --> 00:07:40,620 Un tad mums ir pāris vairāk f f s. 208 00:07:40,620 --> 00:07:44,669 >> Tātad, ko cilvēki mēdz darīt pēc vienošanās ja viņi izmanto sešpadsmitnieku ir viņi vienkārši 209 00:07:44,669 --> 00:07:47,710 rakstu šo nedaudz vairāk kodolīgi, atbrīvoties no lielākā daļa no šī baltā telpā. 210 00:07:47,710 --> 00:07:50,890 Un tikai, lai būtu super skaidrs lasītāji, ka šis ir heksadecimāla, 211 00:07:50,890 --> 00:07:54,670 vienkāršs konvencija vidū cilvēki ir rakstīt nulli 212 00:07:54,670 --> 00:07:58,000 x, kas nav nekādas citas nozīmes nekā vizuālo identifikatoru, 213 00:07:58,000 --> 00:07:59,590 šeit nāk Hex numuru. 214 00:07:59,590 --> 00:08:04,210 >> Un tad, jūs nodot divus ciparus, f f šajā gadījumā, tad d, tad f f. 215 00:08:04,210 --> 00:08:06,700 Tik garš stāsts īss, heksadecimālo vienkārši mēdz 216 00:08:06,700 --> 00:08:11,990 būt noderīgi, jo katra tās cipari, nulle caur f, perfekti līnijas 217 00:08:11,990 --> 00:08:13,880 klajā ar modeli četriem bitiem. 218 00:08:13,880 --> 00:08:18,080 >> Tātad, ja jums ir divas heksadecimālo cipari, nulle caur F, atkal un atkal, 219 00:08:18,080 --> 00:08:20,256 , kas dod jums perfekti astoņi biti vai viens baits. 220 00:08:20,256 --> 00:08:22,380 Tātad, tāpēc tai ir tendence būt konvencionāli noderīga. 221 00:08:22,380 --> 00:08:24,990 Nav intelektuālo saturs tiešām pārsniedz to, 222 00:08:24,990 --> 00:08:27,010 izņemot tās faktisko lietderību. 223 00:08:27,010 --> 00:08:29,310 >> Tagad JPEG ir ne tikai failu formātus grafikas. 224 00:08:29,310 --> 00:08:33,230 Jūs varētu atgādināt, ka pastāv failus, piemēram, tas pasaulē, 225 00:08:33,230 --> 00:08:34,830 vismaz no pāris gadus atpakaļ. 226 00:08:34,830 --> 00:08:37,580 >> Tātad tas faktiski bija uzstādīta Windows XP 227 00:08:37,580 --> 00:08:39,960 uz miljoniem datoru visā pasaulē. 228 00:08:39,960 --> 00:08:43,000 Un tas bija bitmap failu, BMP. 229 00:08:43,000 --> 00:08:47,690 Un bitmap failu, kā jūs redzēsiet nākamo nedēļa, nozīmē tikai modeli punkti, 230 00:08:47,690 --> 00:08:51,710 pikseļi kā viņi sauc, karti par bitiem, tiešām. 231 00:08:51,710 --> 00:08:55,160 >> Tātad, kas ir interesanti, lai gan, par šo faila formātu, BMP, ir 232 00:08:55,160 --> 00:08:58,590 ka zem motora pārsega, to ir vairāk nekā tikai trīs baitu 233 00:08:58,590 --> 00:09:01,020 ka izveidot savu galvenes, tāpēc runāt, dažus pirmos kodieniem. 234 00:09:01,020 --> 00:09:03,330 Tas tiešām izskatās mazliet sarežģīta pēc pirmā acu uzmetiena. 235 00:09:03,330 --> 00:09:04,704 Un jūs redzēsiet šo P komplektā. 236 00:09:04,704 --> 00:09:06,810 Un iegūt kaut ko īpaši no šo tagad 237 00:09:06,810 --> 00:09:10,720 nav tik svarīgi, jo tikai ar to ka sākumā katra bitmap 238 00:09:10,720 --> 00:09:13,823 fails, grafiskā formātā, tur ir viss ķekars numuriem. 239 00:09:13,823 --> 00:09:14,980 240 00:09:14,980 --> 00:09:16,720 >> Tagad Microsoft, autors šajā formātā, 241 00:09:16,720 --> 00:09:18,820 mēdz zvanīt tiem lietas ne ints un simboli 242 00:09:18,820 --> 00:09:22,259 un pludiņiem, bet vārdi un d vārdus un ilgojas un baiti. 243 00:09:22,259 --> 00:09:23,800 Lai viņi tikai dažādus datu tipus. 244 00:09:23,800 --> 00:09:25,170 Viņi dažādi nosaukumi par to pašu. 245 00:09:25,170 --> 00:09:26,740 Bet jūs redzēsiet, ka P Set Four. 246 00:09:26,740 --> 00:09:31,450 >> Bet tas ir tikai teikt, ka, ja cilvēkam double-noklikšķina kādu BMP failu uz viņa 247 00:09:31,450 --> 00:09:35,015 vai viņas cieto disku, un atveras logs parāda, viņam vai viņai, ka attēlu, 248 00:09:35,015 --> 00:09:38,500 ka noticis tāpēc, ka darbības sistēma, iespējams, pamanījuši ne tikai 249 00:09:38,500 --> 00:09:41,460 BMP faila paplašinājums faila nosaukumu, 250 00:09:41,460 --> 00:09:45,010 bet arī fakts, ka tur ir dažas konvencija modelis bitiem 251 00:09:45,010 --> 00:09:47,490 pašā sākumā Minētā bitkartes failu. 252 00:09:47,490 --> 00:09:50,270 >> Bet pieņemsim tagad jākoncentrējas uz šāda sarežģīta failu, 253 00:09:50,270 --> 00:09:52,120 bet gan par kaut ko līdzīgu šim. 254 00:09:52,120 --> 00:09:55,190 Pieņemsim, ka šeit gedit, I vienkārši ir iesākums 255 00:09:55,190 --> 00:09:57,070 no programmas, kas ir diezgan vienkārši. 256 00:09:57,070 --> 00:09:58,860 Man daži ietilpst līdz top. 257 00:09:58,860 --> 00:10:02,120 Tagad Man # include "structs.h", bet Es atgriezīšos, ka brīdi. 258 00:10:02,120 --> 00:10:03,974 Bet tas ir noderīgs tagad. 259 00:10:03,974 --> 00:10:05,890 Tātad, tas ir programma kas notiek, lai īstenotu 260 00:10:05,890 --> 00:10:07,335 tāpat dzimtsarakstu datu bāzē. 261 00:10:07,335 --> 00:10:09,710 Tātad datu bāze studentu, un katrs students pasaulē 262 00:10:09,710 --> 00:10:13,190 ir vārdu un māju un, iespējams, daži citas lietas, bet mēs saglabātu tā vienkārši. 263 00:10:13,190 --> 00:10:15,140 Katram studentam ir vārdu un māju. 264 00:10:15,140 --> 00:10:17,700 >> Tātad, ja es gribēju rakstīt programma, kuras mērķis dzīvē 265 00:10:17,700 --> 00:10:19,860 bija tikai atkārtot no nulle par līdz trim, 266 00:10:19,860 --> 00:10:22,070 ja tur ir trīs studentus Hārvarda universitātē. 267 00:10:22,070 --> 00:10:25,350 Un es tikai vēlos saņemt, izmantojot GetString, katra studenta vārds un mājas, 268 00:10:25,350 --> 00:10:26,600 un tad vienkārši izdrukāt tos out. 269 00:10:26,600 --> 00:10:28,630 >> Tas ir veida, piemēram, nedēļas Viens, Otrā nedēļa sīkumi tagad, 270 00:10:28,630 --> 00:10:30,810 kur es tikai gribu, lai cilpa, vai kaut kas tamlīdzīgs. 271 00:10:30,810 --> 00:10:34,500 Un es vēlos, lai izsauktu GetString maz reizes, un pēc tam izdrukāt f pāris reizes. 272 00:10:34,500 --> 00:10:37,340 Tātad, kā es varētu darīt, lai gan, kad gan nosaukumu un māju 273 00:10:37,340 --> 00:10:39,070 ir iesaistīti katram studentam? 274 00:10:39,070 --> 00:10:42,830 >> Tātad mans pirmais instinkts varētu būt darīt kaut kas līdzīgs šim. 275 00:10:42,830 --> 00:10:49,620 Es varētu vispirms pateikt, labi, man dot, saka, masīvs stīgas sauc par nosaukumiem. 276 00:10:49,620 --> 00:10:51,530 Un es nevēlos hardcode trīs šeit. 277 00:10:51,530 --> 00:10:53,064 Ko es gribu, lai tur? 278 00:10:53,064 --> 00:10:55,730 Tātad STUDENTIEM, jo tas ir tikai nemainīgs deklarēts augšpusē, 279 00:10:55,730 --> 00:10:57,860 tikai, lai man nav hardcode trīs vairākās vietās. 280 00:10:57,860 --> 00:11:00,859 Tādā veidā, es varu mainīt to vienu vietu, un tas ietekmē izmaiņas visur. 281 00:11:00,859 --> 00:11:04,470 Un tad, es varētu darīt string mājas studentiem. 282 00:11:04,470 --> 00:11:10,250 >> Un tagad, es varētu darīt kaut ko līdzīgu uz (int i = 0; i 00:11:14,390 Tāpēc es esmu rakstīt ātri, bet tas ir iespējams, iepazinies sintakse tagad. 284 00:11:14,390 --> 00:11:17,030 >> Un tagad, tas bija vēl nesen. 285 00:11:17,030 --> 00:11:22,890 Ja es gribu likt i-th studenta vārds, es domāju, ka es to izdarītu. 286 00:11:22,890 --> 00:11:26,480 Un tad, nevis vārdi bet mājas stiprinājuma i. 287 00:11:26,480 --> 00:11:29,930 Man šī, GetString, un ļaujiet man iet atpakaļ un noteikt šo līniju. 288 00:11:29,930 --> 00:11:30,430 Piekrītat? 289 00:11:30,430 --> 00:11:31,200 Nepiekrist? 290 00:11:31,200 --> 00:11:32,366 Tas nav ļoti draudzīga. 291 00:11:32,366 --> 00:11:33,890 Es neesmu teicis, ka lietotājam, ko darīt. 292 00:11:33,890 --> 00:11:36,520 >> Bet tagad, ja es arī gribēja vēlāk, pieņemsim 293 00:11:36,520 --> 00:11:40,060 teiksim, izdrukāt šīs lietas out-- tik TODO vēlāk. 294 00:11:40,060 --> 00:11:42,330 Es esmu gatavojas darīt vairāk ar this-- tas varbūt ti 295 00:11:42,330 --> 00:11:45,970 pareiza īstenošana iegūt nosaukumus un mājas, trīs 296 00:11:45,970 --> 00:11:48,870 no tiem kopā katra, no lietotāja. 297 00:11:48,870 --> 00:11:51,280 >> Bet tas nav ļoti labs dizains, labi? 298 00:11:51,280 --> 00:11:55,220 Ko darīt, ja studentam ir ne tikai vārdu un māja, bet arī ID numurs, 299 00:11:55,220 --> 00:11:57,770 un tālruņa numurs, un e-pasta adresi, 300 00:11:57,770 --> 00:12:00,280 un varbūt mājas lapā, un varbūt Twitter rokturis, 301 00:12:00,280 --> 00:12:03,730 un jebkurā no citām detaļām numurs saistīta ar students vai persona, 302 00:12:03,730 --> 00:12:04,610 kopumā. 303 00:12:04,610 --> 00:12:07,720 Kā mēs sākam pievienot funkcionalitāti, lai šo programmu? 304 00:12:07,720 --> 00:12:14,080 >> Nu, es jūtos kā vienkāršākā veidā varētu būt kaut ko darīt, piemēram, teiksim, 305 00:12:14,080 --> 00:12:16,490 int ids studentiem. 306 00:12:16,490 --> 00:12:18,380 Lai es varētu likt visu savu ID tur. 307 00:12:18,380 --> 00:12:22,240 Un tad, kaut ko piemēram, tālruņa numurus, 308 00:12:22,240 --> 00:12:24,400 Es neesmu pārliecināts, kā pārstāvēt, ka tikai pagaidām. 309 00:12:24,400 --> 00:12:30,280 Tāpēc iesim uz priekšu un tikai zvanu Tas Twitters studenti, kas 310 00:12:30,280 --> 00:12:33,550 ir mazliet dīvaini, but-- un ķekars vairāk lauki. 311 00:12:33,550 --> 00:12:36,360 >> Esmu sācis efektīvi kopēt un ielīmēt šeit. 312 00:12:36,360 --> 00:12:39,416 Un tas notiek, lai augt diezgan smagnēja diezgan ātri, labi? 313 00:12:39,416 --> 00:12:42,290 Vai tas nebūtu jauki, ja tur bija pasaules datu struktūra zināms 314 00:12:42,290 --> 00:12:45,600 nevis kā int vai auklas, bet kaut augstāks līmenis, abstrakcijas, tāpēc 315 00:12:45,600 --> 00:12:47,570 runāt, kas pazīstams kā students? 316 00:12:47,570 --> 00:12:50,220 C nenāca ar iebūvētu funkcionalitāte studentiem, 317 00:12:50,220 --> 00:12:52,260 bet, kas notiks, ja es gribēju, lai dotu to, piemēram? 318 00:12:52,260 --> 00:12:55,640 >> Nu, izrādās, es esmu gatavojas atveriet failu ar nosaukumu structs.h šeit 319 00:12:55,640 --> 00:12:57,090 un jūs varat darīt tieši to. 320 00:12:57,090 --> 00:12:58,290 Un mēs esam gatavojas sākt darīt to tagad. 321 00:12:58,290 --> 00:13:01,490 Un zem kapuces P Set Trīs, Jūs esat jau to izdarīt tagad. 322 00:13:01,490 --> 00:13:05,920 Nav tādas lietas kā g RECT vai g ovālas programmēšanas valodu C. 323 00:13:05,920 --> 00:13:10,570 >> Ļaudīm Stenfordas īstenoti tiem datu tipi, izmantojot šo pieeju, šeit, 324 00:13:10,570 --> 00:13:13,900 deklarējot savu jauno datu veidi, kuros izmanto jaunu atslēgvārdu 325 00:13:13,900 --> 00:13:16,744 sauc struktūrai un vēl viens sauc typedef. 326 00:13:16,744 --> 00:13:19,660 Un tiešām, pat ja sintakse izskatās nedaudz atšķiras no sīkumi 327 00:13:19,660 --> 00:13:23,550 mēs esam redzējuši iepriekš, principu, tas ir super vienkārši. 328 00:13:23,550 --> 00:13:25,297 >> Tas tikai nozīmē "noteiktu veidu." 329 00:13:25,297 --> 00:13:27,255 Kas notiek, lai būtu struktūru, un struktūra 330 00:13:27,255 --> 00:13:29,400 ir tāpat kā ar konteineru par vairākām lietām. 331 00:13:29,400 --> 00:13:31,780 Un, ka struktūra, kas notiek ir virkne sauc vārds, 332 00:13:31,780 --> 00:13:33,210 un stīgu sauc par māju. 333 00:13:33,210 --> 00:13:37,520 Un sauksim, tikai ērtības labad, tas viss datu struktūra students. 334 00:13:37,520 --> 00:13:40,320 >> Tātad, kad jūs nokļūt semikols, jums ir tagad 335 00:13:40,320 --> 00:13:43,280 izveidojis savu datu tips sauc students 336 00:13:43,280 --> 00:13:46,420 , kas tagad stāv līdzās int, un peldēt, un char, un stīgu, 337 00:13:46,420 --> 00:13:50,270 un g tiešās, un g ovālas, un jebkura numurs citas lietas, cilvēki ir izgudrots. 338 00:13:50,270 --> 00:13:53,340 >> Tātad, kas ir noderīgi, par šo Tagad ir tā, ka, ja es iet atpakaļ 339 00:13:53,340 --> 00:13:57,430 līdz struktūrai 0 un pabeigt šo īstenošanu, ko es uzrakstīju 340 00:13:57,430 --> 00:14:02,080 iepriekš šeit, ievērosiet, ka visi neizbēgama messiness ka 341 00:14:02,080 --> 00:14:05,490 bija gatavi sākt notiek kā es pievienotās tālruņu numurus un Twitters un visu 342 00:14:05,490 --> 00:14:07,370 šīs citas lietas, kas studenta definīcija, 343 00:14:07,370 --> 00:14:11,810 tagad tas ir īsumā apkopoja kā vienu masīva studentiem. 344 00:14:11,810 --> 00:14:15,500 >> Un katrs no tiem studentiem tagad ir vairākas lietas iekšpusē no tā. 345 00:14:15,500 --> 00:14:16,930 Tā, ka tikai atstāj vienu jautājumu. 346 00:14:16,930 --> 00:14:19,700 Kā jūs nokļūt pie vārda, un māja, un ID, 347 00:14:19,700 --> 00:14:21,640 un kāds cits ir iekšpusē students? 348 00:14:21,640 --> 00:14:22,930 Super vienkārši, kā labi. 349 00:14:22,930 --> 00:14:25,730 Jauns sintakse, bet vienkārša ideja. 350 00:14:25,730 --> 00:14:29,239 >> Jūs vienkārši indekss uz masīvs, kā mēs to darījām pagājušajā nedēļā, un šo. 351 00:14:29,239 --> 00:14:31,030 Un, kas ir skaidri jauns gabals sintakse? 352 00:14:31,030 --> 00:14:32,590 353 00:14:32,590 --> 00:14:35,880 Vienkārši., Kas nozīmē "iet iekšā struktūra un saņemt lauks sauc 354 00:14:35,880 --> 00:14:39,030 nosaukums, saņemt lauku sauc māja, saņemt lauku sauc students. " 355 00:14:39,030 --> 00:14:41,940 >> Tātad P Set Trīs, ja tu esi joprojām strādā uz to, 356 00:14:41,940 --> 00:14:44,020 un lielākā daļa cilvēku joprojām ir, saprast, ka jums 357 00:14:44,020 --> 00:14:46,130 sākt izmantot lietas, piemēram, g rects un g ovals 358 00:14:46,130 --> 00:14:50,201 un citas lietas, kas nešķiet nāk no Nedēļas nulle, viens, vai divi, 359 00:14:50,201 --> 00:14:52,950 saprotu, ka tas ir tāpēc, Stanford deklarēta dažas jaunas datu tipu. 360 00:14:52,950 --> 00:14:56,160 >> Un tiešām, tas ir tieši tas, ko mēs darīt, kā labi, jo P Set Four, kad 361 00:14:56,160 --> 00:14:59,880 sākam risināt ar lietām piemēram, attēlus, bitkartes, un vairāk. 362 00:14:59,880 --> 00:15:02,882 Tātad tas ir tikai teaser un garīgās modelis to, kas nāk. 363 00:15:02,882 --> 00:15:04,590 Tagad, es procrastinated mazliet šorīt. 364 00:15:04,590 --> 00:15:09,560 Es biju veida ziņkārīgs, lai redzētu, kas Microsoft wallpaper faktiski 365 00:15:09,560 --> 00:15:10,310 izskatās šodien. 366 00:15:10,310 --> 00:15:15,200 Un izrādās, kāds 2006.gadā faktiski devās gandrīz precīzi 367 00:15:15,200 --> 00:15:19,210 pats vietas nofotografēt realitātē kādi izskatās, ka šajās dienās. 368 00:15:19,210 --> 00:15:21,380 Lauks tagad nedaudz aizaugusi. 369 00:15:21,380 --> 00:15:24,850 >> Tātad, runājot tagad attēlu, pieņemsim atvest Daven šeit 370 00:15:24,850 --> 00:15:26,890 uz ekrāna un Niklasa un tikai atgādināt jums 371 00:15:26,890 --> 00:15:30,540 ka, ja jūs vēlaties pievienoties mums pusdienās šo piektdien, galvenais, lai mūsu parasto URL 372 00:15:30,540 --> 00:15:31,440 šeit. 373 00:15:31,440 --> 00:15:33,530 >> Tātad, ja mēs mitēties pirmdien? 374 00:15:33,530 --> 00:15:35,140 Mēs ieviesām šo problēmu, vai ne? 375 00:15:35,140 --> 00:15:37,610 Tas bija šķietami pareizs īstenošana mijmaiņas, 376 00:15:37,610 --> 00:15:40,460 , kurā jūs lietojat divas ints, viens sauc, viens sauc b, 377 00:15:40,460 --> 00:15:44,130 mijmaiņas tiem, tāpat kā Laura bija šeit uz skatuves ar pienu un ūdeni, 378 00:15:44,130 --> 00:15:46,820 izmantojot pagaidu mainīgs, vai tukša glāze, 379 00:15:46,820 --> 00:15:50,540 lai mēs varētu likt b ar, gan in b neveicot putru lietas. 380 00:15:50,540 --> 00:15:51,560 Mēs izmantojām mainīgo. 381 00:15:51,560 --> 00:15:52,870 To sauc temp. 382 00:15:52,870 --> 00:15:55,520 >> Bet to, kas bija būtisks Problēma ar šo kodu pirmdien? 383 00:15:55,520 --> 00:15:57,700 384 00:15:57,700 --> 00:15:58,870 Kāda bija problēma šeit? 385 00:15:58,870 --> 00:16:00,106 386 00:16:00,106 --> 00:16:00,605 Jā. 387 00:16:00,605 --> 00:16:01,970 >> AUDITORIJA: Tas aizņem vairāk vietas. 388 00:16:01,970 --> 00:16:04,719 >> DAVID J. Malan: Aizņem vairāk vietu, jo es esmu, izmantojot mainīgo, 389 00:16:04,719 --> 00:16:05,400 un tas ir OK. 390 00:16:05,400 --> 00:16:07,300 Tas ir taisnība, bet es esmu teiksiet, ka ir OK. 391 00:16:07,300 --> 00:16:10,030 Tas ir tikai 32 bitu grand shēma lietām, tāpēc nav liels darījumu. 392 00:16:10,030 --> 00:16:10,655 Citas domas? 393 00:16:10,655 --> 00:16:12,572 AUDITORIJA: Tas tikai mijmaiņas mainīgie lokāli. 394 00:16:12,572 --> 00:16:13,571 DAVID J. Malan: Tieši tā. 395 00:16:13,571 --> 00:16:15,090 Tas tikai mijmaiņas mainīgos lokāli. 396 00:16:15,090 --> 00:16:18,173 Tāpēc, ka jebkurā laikā jūs saucat function-- kad man bija paplātes no Annenberg 397 00:16:18,173 --> 00:16:19,840 pēdējo reizi, jums ir galvenais uz grunts. 398 00:16:19,840 --> 00:16:23,560 Tiklīdz jūs zvanīt funkciju sauc swap, swap nesaņem x un y, 399 00:16:23,560 --> 00:16:24,400 sākotnējie vērtības. 400 00:16:24,400 --> 00:16:26,392 Kāda swap get, vai mēs apgalvot? 401 00:16:26,392 --> 00:16:27,100 Mērķauditorija: kopijas. 402 00:16:27,100 --> 00:16:28,090 DAVID J. Malan: Tātad kopijas. 403 00:16:28,090 --> 00:16:31,120 Tātad, tas kļūst viens un divi, ja jums atgādināt piemēru no pēdējo reizi, 404 00:16:31,120 --> 00:16:34,730 bet kopiju viena un divu , kas tiek veiksmīgi samainīti. 405 00:16:34,730 --> 00:16:38,550 Bet Diemžēl šajā nolūkā šīs vērtības joprojām ir tāds pats. 406 00:16:38,550 --> 00:16:41,880 Tātad, mēs varam redzēt to ar mūsu jaunais draugs, cerams GDB, 407 00:16:41,880 --> 00:16:45,180 ka jūs vai TFS un Ca ir jābūt ir vadīt jūs pret šādi. 408 00:16:45,180 --> 00:16:51,210 >> Līdz ar to nav swap atsaukšana izskatās like-- pieņemsim atvērt this-- izskatās šādi. 409 00:16:51,210 --> 00:16:54,160 Mēs inicializēts x vienam, y līdz diviem. 410 00:16:54,160 --> 00:16:55,620 Bija ķekars drukas f s. 411 00:16:55,620 --> 00:16:58,080 Bet tad, galvenais zvans šeit bija swap, kas 412 00:16:58,080 --> 00:17:00,260 Tieši kods mēs tikko redzēju pirms brīža. 413 00:17:00,260 --> 00:17:03,180 Kas ir pareizs sākumā skatienu, bet funkcionāli, 414 00:17:03,180 --> 00:17:06,800 šī programma nedarbojas, jo tas nav neatgriezeniski swap x un y. 415 00:17:06,800 --> 00:17:10,190 >> Tātad, pieņemsim redzēt to, ātri silts šeit ar GDB, ir ./noswap. 416 00:17:10,190 --> 00:17:11,867 417 00:17:11,867 --> 00:17:15,200 Ķekars pārliecinošu informāciju, ka Es nopirkšu atbrīvoties no ar Control L tagad. 418 00:17:15,200 --> 00:17:17,516 Un tagad, es esmu gatavojas iet uz priekšu un palaist to. 419 00:17:17,516 --> 00:17:19,349 Un diemžēl, ka nebija, ka noderīgs. 420 00:17:19,349 --> 00:17:22,355 Tā skrēja programmu iekšpusē šis programmu, ko sauc GDB, atkļūdotājs, 421 00:17:22,355 --> 00:17:23,730 bet tas nav man kule apkārt. 422 00:17:23,730 --> 00:17:26,229 >> Tātad, kā es varu tiešām pauzēt izpilde iekšā šo programmu? 423 00:17:26,229 --> 00:17:27,410 424 00:17:27,410 --> 00:17:28,329 Tātad pārtraukums. 425 00:17:28,329 --> 00:17:32,340 Un es varētu lauzt jebkurā līniju skaits, kas ir viens, 10, 15. 426 00:17:32,340 --> 00:17:35,530 Bet es varu arī pauze simboliski sakot pārtraukuma Main. 427 00:17:35,530 --> 00:17:38,980 Un kas notiek, lai uzstādītu pārtraukuma punkts, acīmredzot pie 16 līnijas galvenais. 428 00:17:38,980 --> 00:17:40,050 Un kur ir 16 līnijas? 429 00:17:40,050 --> 00:17:42,960 Iesim līdz kodam un iet līdz noswap. 430 00:17:42,960 --> 00:17:46,930 Un tiešām, 16 līnija ir Pats pirmais programmā. 431 00:17:46,930 --> 00:17:52,130 >> Tāpēc tagad, ja man iet uz priekšu un tips palaist šo laiku, Enter, tas apturēta. 432 00:17:52,130 --> 00:17:53,080 Tātad pieņemsim kule apkārt. 433 00:17:53,080 --> 00:17:55,716 Izdrukāt X- kāpēc x nulle? 434 00:17:55,716 --> 00:17:56,705 435 00:17:56,705 --> 00:17:57,830 Un ignorēt dolāra zīmi. 436 00:17:57,830 --> 00:17:59,725 Tas ir tikai mīļotājs izmantošana programmas. 437 00:17:59,725 --> 00:18:00,780 438 00:18:00,780 --> 00:18:03,140 Kāpēc x nulle šobrīd? 439 00:18:03,140 --> 00:18:03,640 Jā. 440 00:18:03,640 --> 00:18:07,061 >> AUDITORIJA: Tas ir apturēta tieši pirms 16 līnija, nevis faktiski par 16 līnijas. 441 00:18:07,061 --> 00:18:08,060 DAVID J. Malan: Tieši tā. 442 00:18:08,060 --> 00:18:11,630 GDB, pēc noklusējuma, ir apturēta izpilde tieši pirms 16 līnijas. 443 00:18:11,630 --> 00:18:14,820 Tātad tas nav izpildīts, kas nozīmē x ir kādu nezināmu vērtību. 444 00:18:14,820 --> 00:18:17,150 Un mums paveicās, ka tā ir kaut kas tīrs līdzīgu nullei. 445 00:18:17,150 --> 00:18:20,310 Tāpēc tagad, ja es tipa nākamais, Tagad tas izpildīts 16. 446 00:18:20,310 --> 00:18:22,000 Tas gaida man izpildīt 17. 447 00:18:22,000 --> 00:18:23,400 Ļaujiet man iet uz priekšu un izdrukāt x. 448 00:18:23,400 --> 00:18:24,094 Tas ir viens. 449 00:18:24,094 --> 00:18:25,260 Ļaujiet man iet uz priekšu un izdrukāt y. 450 00:18:25,260 --> 00:18:26,176 Kas man būtu jāredz tagad? 451 00:18:26,176 --> 00:18:27,660 452 00:18:27,660 --> 00:18:28,560 >> Mērķauditorija: [dzirdams] 453 00:18:28,560 --> 00:18:29,165 >> DAVID J. Malan: mazliet skaļāk. 454 00:18:29,165 --> 00:18:30,040 >> Mērķauditorija: [dzirdams] 455 00:18:30,040 --> 00:18:30,537 456 00:18:30,537 --> 00:18:32,120 DAVID J. Malan: Ne gluži vienprātības. 457 00:18:32,120 --> 00:18:34,760 Tātad, jā, mēs redzam dažas atkritumu vērtību. 458 00:18:34,760 --> 00:18:37,862 Tagad, y ir 134514064 tur. 459 00:18:37,862 --> 00:18:39,320 Nu, tas ir tikai daži atkritumu vērtība. 460 00:18:39,320 --> 00:18:41,350 Mana programma izmanto RAM dažādiem mērķiem. 461 00:18:41,350 --> 00:18:42,350 Tur ir citas funkcijas. 462 00:18:42,350 --> 00:18:44,040 Citi cilvēki rakstīja iekšā manā datorā. 463 00:18:44,040 --> 00:18:46,789 Tātad šie biti ir izmantoti citas vērtības, un ko es esmu redzēt 464 00:18:46,789 --> 00:18:49,470 ir paliekas dažu pirms tad šo atmiņu. 465 00:18:49,470 --> 00:18:53,350 >> Līdz ar to nav liels galā, jo, tiklīdz kā es tipa blakus, un pēc tam izdrukāt y, 466 00:18:53,350 --> 00:18:55,640 tas ir inicializēts vērtība, ko es gribu. 467 00:18:55,640 --> 00:18:57,400 Tāpēc tagad, iesim uz priekšu mazliet ātrāk. 468 00:18:57,400 --> 00:18:58,540 N uz nākamo. 469 00:18:58,540 --> 00:18:59,570 Darīsim to vēlreiz. 470 00:18:59,570 --> 00:19:00,530 Darīsim to vēlreiz. 471 00:19:00,530 --> 00:19:02,404 Bet es nevēlos, lai sasniegtu to šeit, jo, ja I 472 00:19:02,404 --> 00:19:05,110 gribu redzēt, kas notiek iekšā noņemamo, kas ir komanda? 473 00:19:05,110 --> 00:19:05,520 >> AUDITORIJA: soļi. 474 00:19:05,520 --> 00:19:06,436 >> DAVID J. Malan: soļi. 475 00:19:06,436 --> 00:19:09,800 Tātad šis soļi mani funkcija, nevis pār to. 476 00:19:09,800 --> 00:19:12,270 Un tagad tas ir nedaudz noslēpumains godīgi, bet tas ir tikai 477 00:19:12,270 --> 00:19:14,581 saki man, es esmu 33 rindā tagad. 478 00:19:14,581 --> 00:19:15,580 Un pieņemsim darīt atkal. 479 00:19:15,580 --> 00:19:16,080 Print temp. 480 00:19:16,080 --> 00:19:17,129 481 00:19:17,129 --> 00:19:20,170 Atkritumu vērtība negatīva šoreiz, bet tas ir tikai vēl atkritumu vērtība. 482 00:19:20,170 --> 00:19:22,810 Tātad, pieņemsim darīt tālāk, drukas temp. 483 00:19:22,810 --> 00:19:27,130 Tas ir inicializēts līdz 1, kas ir vērtība x, aka. 484 00:19:27,130 --> 00:19:29,110 >> Tagad, kur ir mūsu un x nāk no? 485 00:19:29,110 --> 00:19:32,510 Nu, paziņojuma galvenais, mēs sauc šīs vērtības x un y. 486 00:19:32,510 --> 00:19:34,740 Mēs pēc tam laiž tos apmainīt šādi. 487 00:19:34,740 --> 00:19:37,010 X bija pirmais, komats y. 488 00:19:37,010 --> 00:19:40,020 Un tad, swap var zvanīt viņiem x un y. 489 00:19:40,020 --> 00:19:42,630 Bet skaidrības labad, tas ir zvanot viņiem un b. 490 00:19:42,630 --> 00:19:45,970 , Bet a un b ir tagad būs kopijas, x un y, attiecīgi. 491 00:19:45,970 --> 00:19:50,660 >> Tātad, ja es dodos atpakaļ uz GDB, temp tagad ir viena, un tagad ir viens. 492 00:19:50,660 --> 00:19:56,130 Bet, ja man blakus un tagad darīt drukāt , jau ir pārgājuši. 493 00:19:56,130 --> 00:20:00,030 Piens ir ielej bijušais Apelsīnu sula ir stikls, vai otrādi. 494 00:20:00,030 --> 00:20:04,750 >> Un, ja man darīt tālāk atkal, un tagad ja es izdrukāt kā veselība pārbaudītu, 495 00:20:04,750 --> 00:20:07,687 joprojām ir divi, bet tagad b ir viens. 496 00:20:07,687 --> 00:20:08,770 Atklāti sakot, tas ir joprojām. 497 00:20:08,770 --> 00:20:10,670 Man vienalga, ko temp ir. 498 00:20:10,670 --> 00:20:16,850 Bet, tiklīdz es tagad rakstot, teiksim, turpina iet atpakaļ, tagad es esmu beigās 499 00:20:16,850 --> 00:20:17,480 programma. 500 00:20:17,480 --> 00:20:20,730 Un diemžēl, x ir joprojām ir viens un y ir vēl divi. 501 00:20:20,730 --> 00:20:22,272 >> Tātad, kāds bija lietderība GDB tur? 502 00:20:22,272 --> 00:20:23,980 Tas nav man palīdzēt noteikt Problēma per se, 503 00:20:23,980 --> 00:20:26,265 bet cerams man palīdzēt saprotu realizējot 504 00:20:26,265 --> 00:20:30,000 ka jā, mana loģika ir taisnība, bet mans kods nav galu galā, kam 505 00:20:30,000 --> 00:20:31,450 pastāvīga ietekme. 506 00:20:31,450 --> 00:20:34,570 Tāpēc, ka ir problēma, mēs esam gatavojas tagad atrisināt šodien. 507 00:20:34,570 --> 00:20:37,870 >> Bet pieņemsim nokļūt, izmantojot šo. 508 00:20:37,870 --> 00:20:39,230 Virkne ir meli. 509 00:20:39,230 --> 00:20:41,860 Tā arī nav datu tips ka pastāv C. Tas ir 510 00:20:41,860 --> 00:20:44,750 bijis sinonīms dažiem laiks kaut ko citu, 511 00:20:44,750 --> 00:20:47,300 un mēs varam atklāt, ka šādi. 512 00:20:47,300 --> 00:20:53,282 >> Ļaujiet man iet uz priekšu un atvērt Programma sauc salīdzināt-0. 513 00:20:53,282 --> 00:20:56,240 Un nevis rakstīt šo vienu out, mēs sāksim staigāt pa kodu 514 00:20:56,240 --> 00:20:58,040 Es jau rakstīju, bet tas ir tikai dažas rindiņas. 515 00:20:58,040 --> 00:20:59,570 Tātad šis ir salīdzināt-0. 516 00:20:59,570 --> 00:21:02,380 Un pirmais, ko es daru kļūst teksta rindiņu. 517 00:21:02,380 --> 00:21:05,610 >> Bet paziņojums, ko es esmu darot pirmo reizi. 518 00:21:05,610 --> 00:21:07,910 Kas ir atšķirīgs acīmredzami par līnija 21? 519 00:21:07,910 --> 00:21:10,020 520 00:21:10,020 --> 00:21:11,402 Patiesībā, pagaidiet minūti. 521 00:21:11,402 --> 00:21:12,110 Tas ir divas kopija. 522 00:21:12,110 --> 00:21:13,568 Tas nav pat pareizo programmu. 523 00:21:13,568 --> 00:21:14,780 Nu labi, spoilers brīdinājumu. 524 00:21:14,780 --> 00:21:16,890 Labi, lai nekad prātā, ka. 525 00:21:16,890 --> 00:21:18,520 Tas ir uz nākotnes jautājumu. 526 00:21:18,520 --> 00:21:21,450 >> Te ir salīdzināt-0, un es esmu par to, lai iegūtu teksta rindiņu. 527 00:21:21,450 --> 00:21:22,435 Programma ir daudz vienkāršāk. 528 00:21:22,435 --> 00:21:23,560 Tātad tas ir vienkārši. 529 00:21:23,560 --> 00:21:28,070 Tas ir tāpat kā nedēļa One Week otrās sīkumi brīdī. String s = GetString. 530 00:21:28,070 --> 00:21:29,700 Tagad, es saku to vēlreiz uz leju šeit. 531 00:21:29,700 --> 00:21:31,830 string t = GetString. 532 00:21:31,830 --> 00:21:35,300 Un tad, pēdējā lieta šajā programmu, jo tā nosaukums liecina, 533 00:21:35,300 --> 00:21:37,090 ir Es esmu gatavojas izmēģināt, lai salīdzinātu tos. 534 00:21:37,090 --> 00:21:40,709 >> Tātad, ja s, pirmā rinda, vienāds = t, tad es esmu 535 00:21:40,709 --> 00:21:42,250 teiksiet rakstot to pašu. 536 00:21:42,250 --> 00:21:44,291 Else, es esmu gatavojas teikt Rakstot dažādas lietas. 537 00:21:44,291 --> 00:21:45,880 Tātad, pieņemsim apkopot un palaist šo programmu. 538 00:21:45,880 --> 00:21:48,481 Tātad, lai salīdzinātu nulle. 539 00:21:48,481 --> 00:21:48,980 Izskatās labi. 540 00:21:48,980 --> 00:21:50,490 Nav apkopošanas kļūdas. 541 00:21:50,490 --> 00:21:52,386 >> Ļaujiet man iet uz priekšu tagad un ierakstiet ./compare-0. 542 00:21:52,386 --> 00:21:55,230 543 00:21:55,230 --> 00:21:59,220 Ļaujiet man iet uz priekšu un kaut ko pateikt : Daven un kaut: Rob. 544 00:21:59,220 --> 00:22:00,450 Un es tipa dažādas lietas. 545 00:22:00,450 --> 00:22:01,250 Līdz šim tik labi. 546 00:22:01,250 --> 00:22:02,680 Programma, šķiet, ir pareizs. 547 00:22:02,680 --> 00:22:03,880 >> Bet pieņemsim palaist vēlreiz. 548 00:22:03,880 --> 00:22:05,800 Kaut ko pateikt: Gabe. 549 00:22:05,800 --> 00:22:07,140 Kaut ko pateikt: Gabe. 550 00:22:07,140 --> 00:22:08,520 551 00:22:08,520 --> 00:22:09,020 Viss labi. 552 00:22:09,020 --> 00:22:10,851 Varbūt es hit starpdevējs vai kaut bailīgs. 553 00:22:10,851 --> 00:22:11,600 Darīsim to vēlreiz. 554 00:22:11,600 --> 00:22:13,020 Tik Zamyla. 555 00:22:13,020 --> 00:22:13,970 556 00:22:13,970 --> 00:22:14,470 Zamyla. 557 00:22:14,470 --> 00:22:15,740 558 00:22:15,740 --> 00:22:17,330 Dažādas lietas. 559 00:22:17,330 --> 00:22:19,430 Tātad, kas notiek? 560 00:22:19,430 --> 00:22:23,200 >> Tāpēc mums ir šīs divas līnijas kods, GetString tiek saukta divreiz. 561 00:22:23,200 --> 00:22:25,760 Un tad, es esmu vienkārši mēģina salīdzināt s un t. 562 00:22:25,760 --> 00:22:28,370 Bet kas īsti tad notiek? 563 00:22:28,370 --> 00:22:31,180 Nu, mans rokraksts ir apmēram, lai miesnieks šo piemēru nedaudz. 564 00:22:31,180 --> 00:22:34,630 Un pieņemsim faktiski mest Tas veido vairāk nekā šeit, kā labi. 565 00:22:34,630 --> 00:22:37,390 566 00:22:37,390 --> 00:22:45,712 >> Tātad mums ir līnija, piemēram, String s = GetString. 567 00:22:45,712 --> 00:22:48,295 Tāpēc, ka ir vienkārši pirmais interesanti līnija no šīs programmas. 568 00:22:48,295 --> 00:22:49,920 569 00:22:49,920 --> 00:22:52,974 Bet to, kas visu šo laiku ir bijis notiek zem motora pārsega? 570 00:22:52,974 --> 00:22:55,890 Nu, kreisajā pusē ir virkne, kas ir daži no mainīgā tips, 571 00:22:55,890 --> 00:22:56,785 un to sauc s. 572 00:22:56,785 --> 00:23:00,019 Tāpēc es zinu, ka tas ir, izmantojot atmiņu, vai RAM, manā datorā kaut kā. 573 00:23:00,019 --> 00:23:02,060 Tāpēc es esmu gatavojas abstrakti izdarīt, ka kvadrātu. 574 00:23:02,060 --> 00:23:04,820 32 biti, izrādās, taču vairāk par to nākotnē. 575 00:23:04,820 --> 00:23:06,410 Un tad, kas notiek vairāk nekā šeit? 576 00:23:06,410 --> 00:23:08,700 >> Nu, protams GetString saņem virkni no lietotāja. 577 00:23:08,700 --> 00:23:11,360 Un GetString dabūja Zamyla vai Gabe vai Daven. 578 00:23:11,360 --> 00:23:14,640 Tātad, pieņemsim izvēlēties pirmais no tiem, kas bija Daven. 579 00:23:14,640 --> 00:23:19,174 Tik efektīvi, kādi GetString saņēmu me minētajā pirmajā gadījumā bija D-a-v-e-n. 580 00:23:19,174 --> 00:23:22,690 581 00:23:22,690 --> 00:23:25,045 Un tad, kas cits darīja tas dod man slepeni? 582 00:23:25,045 --> 00:23:25,920 Mērķauditorija: [dzirdams] 583 00:23:25,920 --> 00:23:28,720 DAVID J. Malan: Jā, / 0 vai null raksturs. 584 00:23:28,720 --> 00:23:30,550 Tātad tas faktiski deva man virkni. 585 00:23:30,550 --> 00:23:34,550 Bet mēs jau zinām no iepriekšējās izskatās, ka virkne ir tikai masīvs 586 00:23:34,550 --> 00:23:37,895 rakstzīmes, un tas ir izbeigts šis īpašais sargs tēlu / 0. 587 00:23:37,895 --> 00:23:39,220 588 00:23:39,220 --> 00:23:42,310 >> Bet, ja tā ir taisnība un tas ir kvadrātveida, 589 00:23:42,310 --> 00:23:44,160 tas ir acīmredzami daudz lielāks taisnstūris. 590 00:23:44,160 --> 00:23:46,830 Un tiešām, tas ir, Es apgalvo, tikai 32 bitus. 591 00:23:46,830 --> 00:23:49,500 Un tas ir acīmredzami vairāk nekā 32 biti, jo tas ir iespējams 592 00:23:49,500 --> 00:23:51,583 astoņi plus astoņi plus astoņi plus astoņi plus astoņi, 593 00:23:51,583 --> 00:23:53,320 tikai tāpēc, ka baitu ASCII. 594 00:23:53,320 --> 00:23:57,030 Kā heck mēs gatavojamies, lai ietilptu Daven šajā mazā kastīte šeit? 595 00:23:57,030 --> 00:23:59,880 >> Nu, kas ir GetString faktiski dara? 596 00:23:59,880 --> 00:24:03,680 Nu, šis režģis šeit ir mana datora atmiņas vai RAM. 597 00:24:03,680 --> 00:24:07,564 Tāpēc pieņemsim patvaļīgi teikt, ka, ja katra no tām pārstāv baitu, 598 00:24:07,564 --> 00:24:09,730 tad mēs varam domāt par katru baitu kā ar adresi, 599 00:24:09,730 --> 00:24:13,830 tāpat 33 Oxford Street, vai 34 Oxford Street, vai 35 Oxford Street. 600 00:24:13,830 --> 00:24:16,700 >> Tātad tāpat kā mājās ir adreses un ēkām ir adreses, 601 00:24:16,700 --> 00:24:19,810 tā darīt atsevišķas baiti atmiņa ir adreses vai ciparus 602 00:24:19,810 --> 00:24:21,042 , kas unikāli identificē tos. 603 00:24:21,042 --> 00:24:22,000 Tagad tas ir patvaļīgs. 604 00:24:22,000 --> 00:24:25,370 Bet, lai saglabātu tā vienkārši, es esmu gatavojas izmantot heksadecimālo tikai pēc vienošanās, 605 00:24:25,370 --> 00:24:28,200 bet 0x ir nekas cits nekā "šis ir heksadecimālo." 606 00:24:28,200 --> 00:24:31,030 un es esmu gatavojas apgalvot, ka "D" nonāks pie Byte One atmiņā. 607 00:24:31,030 --> 00:24:34,210 >> Man nekas cits notiek atmiņa, tāpēc Daven ieguva pirmo vietu 608 00:24:34,210 --> 00:24:35,509 pie Byte One. 609 00:24:35,509 --> 00:24:36,800 Tas tad būs 0x2. 610 00:24:36,800 --> 00:24:37,831 611 00:24:37,831 --> 00:24:38,705 Tas ir gatavojas 0x3. 612 00:24:38,705 --> 00:24:39,840 613 00:24:39,840 --> 00:24:41,800 Šis būs 0x4. 614 00:24:41,800 --> 00:24:43,025 Tas ir gatavojas 0x5. 615 00:24:43,025 --> 00:24:44,025 Šis būs 0x6. 616 00:24:44,025 --> 00:24:45,560 617 00:24:45,560 --> 00:24:48,290 >> Bet tad, kad jums sākt domāt par to, kāda datora vainas 618 00:24:48,290 --> 00:24:50,710 zem motora pārsega, Jūs varat sākt, lai noteiktu 619 00:24:50,710 --> 00:24:54,960 kā jūs, pirms dažiem gadiem, būtu ir īstenojušas C sevi. 620 00:24:54,960 --> 00:24:58,360 Kas ir GetString iespējams returning-- jo tas 621 00:24:58,360 --> 00:25:00,946 uzskata, tāpat kā tas nav atgriežoties Daven, per se, 622 00:25:00,946 --> 00:25:03,320 tāpēc, ka viņš, protams, nenāks lai ietilptu šajā maz box-- 623 00:25:03,320 --> 00:25:05,090 tā, kādi ir GetString iespējams atgriežas? 624 00:25:05,090 --> 00:25:07,958 625 00:25:07,958 --> 00:25:08,920 >> Mērķauditorija: [dzirdams] 626 00:25:08,920 --> 00:25:10,540 >> DAVID J. Malan: no Daven atrašanās vietu. 627 00:25:10,540 --> 00:25:12,770 Un tas ir bijis to izdarīt kopš nedēļas One. 628 00:25:12,770 --> 00:25:16,150 Kas GetString ir patiešām atgriešanās nav string, per se. 629 00:25:16,150 --> 00:25:17,780 Tas ir viens no baltiem meliem. 630 00:25:17,780 --> 00:25:22,520 Tā ir atgriešanās adresi string atmiņā, unikāla adrese. 631 00:25:22,520 --> 00:25:24,820 Daven dzīvo pie 33 Oxford Street. 632 00:25:24,820 --> 00:25:29,310 Bet vēl kodolīgi, Gavin dzīvo at 0x1, Adrese Number One. 633 00:25:29,310 --> 00:25:32,280 >> Tātad, kas izpaužas likts šajā mazā kastīte tad, lai būtu skaidrs, 634 00:25:32,280 --> 00:25:35,930 ir tikai adrese, virknes. 635 00:25:35,930 --> 00:25:38,110 Tātad visu šo laiku, tas ir bijis notiek. 636 00:25:38,110 --> 00:25:41,650 Bet ko tas mājiens Tagad ir tā, ka, ja viss s ir 637 00:25:41,650 --> 00:25:44,710 ir vairāki iekšpusē no tā, kurš ir pārtraukt jums, programmētājs, 638 00:25:44,710 --> 00:25:47,970 No liekot jebkuru numuru jebkurš mainīga un tikai lekt 639 00:25:47,970 --> 00:25:49,080 šai rieciens atmiņas? 640 00:25:49,080 --> 00:25:51,320 Un tiešām, mēs redzēsim tas ir drauds nākamajā reizē. 641 00:25:51,320 --> 00:25:53,500 >> Bet tagad, tas jūtas nepietiekami. 642 00:25:53,500 --> 00:25:55,630 Ja es saku, get me string, tu man Daven. 643 00:25:55,630 --> 00:25:57,230 Bet jums nav īsti man Daven. 644 00:25:57,230 --> 00:25:59,310 Viss, kas Jums dod man ir Daven adrese. 645 00:25:59,310 --> 00:26:04,310 Kā es varu, tad zināt kur Daven sākas un ends-- 646 00:26:04,310 --> 00:26:07,140 stāsts ir kļūst weird-- kur Daven sākas un beidzas, 647 00:26:07,140 --> 00:26:10,435 un tad, nākamais string atmiņā sākas? 648 00:26:10,435 --> 00:26:11,520 649 00:26:11,520 --> 00:26:13,620 >> Nu, ja jūs nododot man sākumā Daven, 650 00:26:13,620 --> 00:26:17,230 būtībā, kā es varu zināt kur beigās viņa vārds ir? 651 00:26:17,230 --> 00:26:20,550 Šis īpašais null raksturs, kas ir visi tagad vēl svarīgāk 652 00:26:20,550 --> 00:26:23,040 ja stīgas zem kapuce vienkārši identificēti 653 00:26:23,040 --> 00:26:25,820 unikāli to atrašanās vietu atmiņā. 654 00:26:25,820 --> 00:26:28,130 Tātad visu šo laiku, kas ir to, kas ir bijis notiek. 655 00:26:28,130 --> 00:26:32,470 >> Tātad, ja mēs skatāmies tagad kodu šeit, paskaidrojiet 656 00:26:32,470 --> 00:26:35,790 ja jums būtu kļūda rindā 26. 657 00:26:35,790 --> 00:26:39,560 Kāpēc Zamyla un Zamyla atšķiras? 658 00:26:39,560 --> 00:26:41,330 Kāpēc Gabe un Gabe atšķiras? 659 00:26:41,330 --> 00:26:42,154 Jā, aizmugurē. 660 00:26:42,154 --> 00:26:43,390 >> AUDITORIJA: Viņiem ir dažādas adreses. 661 00:26:43,390 --> 00:26:45,931 >> DAVID J. Malan: Vienkārši tāpēc, ka tās ir dažādas adreses. 662 00:26:45,931 --> 00:26:48,820 Jo, kad jūs zvanu GetString atkal, ko es darīšu ātri šeit, 663 00:26:48,820 --> 00:26:52,870 ja tas ir otrā rindā, string t, kas man bija šajā programmā, 664 00:26:52,870 --> 00:26:55,030 vienāds ar vēl vienu zvanu uz GetString. 665 00:26:55,030 --> 00:26:56,370 666 00:26:56,370 --> 00:26:58,670 Nākamajā reizē es aicinu GetString, es eju 667 00:26:58,670 --> 00:27:00,190 lai iegūtu atšķirīgu rieciens atmiņas. 668 00:27:00,190 --> 00:27:02,220 >> GetString ir atļauts lūgt darboties 669 00:27:02,220 --> 00:27:03,800 sistēma, lai iegūtu vairāk un vairāk atmiņas. 670 00:27:03,800 --> 00:27:07,894 Tas nav gatavojas atkārtoti pats seši baiti katru reizi. 671 00:27:07,894 --> 00:27:09,810 Tas notiek, lai saņemtu jaunu rieciens atmiņas, kas 672 00:27:09,810 --> 00:27:12,780 ir t gatavojas saņemt kāda cita vērtība, nekā šeit. 673 00:27:12,780 --> 00:27:15,380 >> Tātad, kad man s vienāds = t, jūs neesat salīdzinot 674 00:27:15,380 --> 00:27:17,880 D pret to un pret šo un V pret to. 675 00:27:17,880 --> 00:27:19,588 Jūs salīdzināt šo pret to, kas 676 00:27:19,588 --> 00:27:24,020 godīgi sakot, ir diezgan useful-- useless-- ir diezgan bezjēdzīgi, jo, kas tiešām 677 00:27:24,020 --> 00:27:25,830 cares kur stīgas ir atmiņā? 678 00:27:25,830 --> 00:27:26,850 >> Un tiešām, mums nav. 679 00:27:26,850 --> 00:27:28,980 Un mēs nebrauksim sāktu īpaši gādīga. 680 00:27:28,980 --> 00:27:34,180 Tikai tādā mērā, ka kļūdas var rasties un drošības apdraudējumiem var rasties griba 681 00:27:34,180 --> 00:27:36,100 mēs faktiski sākt rūpēties par to. 682 00:27:36,100 --> 00:27:37,230 Tātad, pieņemsim noteikt šo problēmu. 683 00:27:37,230 --> 00:27:39,650 Izrādās, jūs salabot super vienkārši. 684 00:27:39,650 --> 00:27:42,600 >> Un pieņemsim faktiski, pirms I atklāj, ka atkal, kāda būtu 685 00:27:42,600 --> 00:27:47,170 jūs darīt, ja kādā CS50 klasē, un jums bija īstenot 686 00:27:47,170 --> 00:27:48,600 salīdzinājums pret divām stīgām. 687 00:27:48,600 --> 00:27:51,440 Jūs noteikti varat ne tikai izmantot s vienāds = t. 688 00:27:51,440 --> 00:27:54,090 Bet tikai loģiski, cik jūs salīdzināt šo virkni 689 00:27:54,090 --> 00:27:56,370 pret šīs virknes, izmantojot C kodu? 690 00:27:56,370 --> 00:27:56,880 Jā. 691 00:27:56,880 --> 00:27:58,780 >> AUDITORIJA: Just do cilpa [nedzirdama] 692 00:27:58,780 --> 00:28:00,670 693 00:28:00,670 --> 00:28:01,670 DAVID J. Malan: Perfect. 694 00:28:01,670 --> 00:28:02,900 Mērķauditorija: [dzirdams] 695 00:28:02,900 --> 00:28:03,310 DAVID J. Malan: Jā. 696 00:28:03,310 --> 00:28:05,390 Tikai izmantot cilpas vai kamēr cilpa vai neatkarīgi. 697 00:28:05,390 --> 00:28:08,710 Bet vienkārši piemērot pamatideju, ka, ja tas ir rieciens atmiņas vai masīva 698 00:28:08,710 --> 00:28:11,590 un tas ir, atkārtot vairāk gan vienlaicīgi. 699 00:28:11,590 --> 00:28:12,960 Un tikai salīdzināt burtus. 700 00:28:12,960 --> 00:28:14,260 >> Un tev būs nedaudz uzmanīgiem, jo ​​jums 701 00:28:14,260 --> 00:28:16,247 negribu vienu pirkstu aiziet pagātnē otru 702 00:28:16,247 --> 00:28:18,080 jo viens virkne ir ilgāk par otru. 703 00:28:18,080 --> 00:28:21,380 Tātad jūs gatavojas vēlaties, lai pārbaudītu šī īpašā vērtība gada beigās, null. 704 00:28:21,380 --> 00:28:24,017 Bet tas tiešām ir, jo beigas, tik vienkārši. 705 00:28:24,017 --> 00:28:26,100 Un godīgi sakot, mums nav vajadzīga no jauna šo riteni. 706 00:28:26,100 --> 00:28:27,960 Te ir versija Two. 707 00:28:27,960 --> 00:28:32,910 Un tas, ko es esmu gatavojas teikt, šeit ir tas, ka vietā, salīdzinot s vienāds = t, 708 00:28:32,910 --> 00:28:38,964 Es esmu tā vietā gatavojas teikt, ja virkne salīdzinājums s komatu t vienāds = 0. 709 00:28:38,964 --> 00:28:40,130 Tagad, kas ir stīgu salīdzināt? 710 00:28:40,130 --> 00:28:43,046 >> Izrādās, tas ir funkcija, kas nāk ar C, kura mērķis dzīvē 711 00:28:43,046 --> 00:28:44,650 ir salīdzināt divas stīgas. 712 00:28:44,650 --> 00:28:48,300 Un maisa salīdzināt, ja mēs lasām tās man lapas vai dokumentus vai CS50 713 00:28:48,300 --> 00:28:50,630 atsauces, tā būs vienkārši pateikt, ka ažiotāžu 714 00:28:50,630 --> 00:28:55,730 salīdzināt atgriežas nu negatīvas numurs vai pozitīvs skaitlis vai nulle, 715 00:28:55,730 --> 00:28:57,660 kur nulle nozīmē, viņi vienādi. 716 00:28:57,660 --> 00:28:58,570 >> Tik vienkārši minējums. 717 00:28:58,570 --> 00:29:00,390 Ko tas varētu nozīmēt, ja maisīt salīdzināt atdevi 718 00:29:00,390 --> 00:29:02,110 negatīva vērtība vai pozitīva vērtība? 719 00:29:02,110 --> 00:29:02,785 720 00:29:02,785 --> 00:29:04,285 AUDITORIJA: Lielāks vai mazāks. 721 00:29:04,285 --> 00:29:05,570 DAVID J. Malan: Jā, lielāks vai mazāks. 722 00:29:05,570 --> 00:29:08,640 Tātad, ja jūs vēlaties, lai sakārtotu vienu veselumu ķekars virknes in dictionary-- 723 00:29:08,640 --> 00:29:12,975 kā mēs galu galā nosaka road-- ideāls funkciju izmantot iespējami, 724 00:29:12,975 --> 00:29:15,850 tāpēc, ka tas notiek, lai to izdarītu salīdzinājums stīgas jums, un pastāstīt 725 00:29:15,850 --> 00:29:20,060 Jums tas nāk pirms b, vai arī b nonāk līdz alfabēta. 726 00:29:20,060 --> 00:29:21,490 Mēs varam darīt tieši to. 727 00:29:21,490 --> 00:29:23,620 >> Un novērojat man bija viens otru lieta šajā piemērā. 728 00:29:23,620 --> 00:29:26,870 Kas vēl ir mainījies augstāka up šajā galvenā funkcija? 729 00:29:26,870 --> 00:29:28,500 730 00:29:28,500 --> 00:29:29,350 Char *. 731 00:29:29,350 --> 00:29:31,150 Un tas ir tas, ka citu balto meli. 732 00:29:31,150 --> 00:29:33,750 Visu šo laiku, kad jūs esat bijis rakstot virkni, 733 00:29:33,750 --> 00:29:38,350 mēs esam slepeni pārrakstīšana string kā char *, lai šķindēt faktiski 734 00:29:38,350 --> 00:29:39,270 saprot tevi. 735 00:29:39,270 --> 00:29:42,450 >> Citiem vārdiem sakot, CS50.h un kā mēs beidzot redzēt, 736 00:29:42,450 --> 00:29:45,950 mēs, sinonīmu sauc virkni tas ir tas pats, kas char *. 737 00:29:45,950 --> 00:29:49,910 Un tagad, zinu tikai to, ka *, Šajā sakarā vismaz 738 00:29:49,910 --> 00:29:51,286 nozīmē adresi. 739 00:29:51,286 --> 00:29:52,210 >> Par ko adrese? 740 00:29:52,210 --> 00:29:56,390 Nu, tas, ka es teicu char *, un nevis int * vai peldēt * 741 00:29:56,390 --> 00:30:00,820 nozīmē, ka char * ir adresi, char. 742 00:30:00,820 --> 00:30:06,770 Tātad šī mazā kastīte šeit, aka auklas, ir patiešām tipa char *, 743 00:30:06,770 --> 00:30:10,490 kas ir tikai iedomātā veids, kā pateikt, Šajā ailē dosies adresi. 744 00:30:10,490 --> 00:30:12,430 Un ko tas adrese attiecas uz? 745 00:30:12,430 --> 00:30:13,780 Acīmredzot, char. 746 00:30:13,780 --> 00:30:16,410 >> Bet mēs varētu absolūti ir int * un citas lietas. 747 00:30:16,410 --> 00:30:20,790 Bet tagad, char * ir patiešām visvairāk vienkāršs un vienu procentu. 748 00:30:20,790 --> 00:30:23,310 Tātad šī problēma notiek pieaugt, lai gan, atkal. 749 00:30:23,310 --> 00:30:24,830 >> Pieņemsim, ka man atvērt šo programmu. 750 00:30:24,830 --> 00:30:27,670 Let 's redzēt, ja tagad mēs varam prognozēt to, kas ir nepareizi ar šo kodu. 751 00:30:27,670 --> 00:30:31,140 Tātad šajā programmā, kopēt-0, es esmu gatavojas iet uz priekšu un atkal aicinu 752 00:30:31,140 --> 00:30:34,190 GetString un uzglabāt vērtību s. 753 00:30:34,190 --> 00:30:38,800 >> Un tad, kāpēc es daru to, tāpat kā atgādinājumu nedēļas agrāk? 754 00:30:38,800 --> 00:30:40,960 Mēs darījām teikt, ka GetString dažreiz atgriež null. 755 00:30:40,960 --> 00:30:42,793 Ko tas nozīmē, ja GetString atgriež null? 756 00:30:42,793 --> 00:30:45,040 757 00:30:45,040 --> 00:30:46,034 Kaut kas nogāja greizi. 758 00:30:46,034 --> 00:30:48,950 Tas droši vien nozīmē, virkne ir pārāk liels, datora atmiņas. 759 00:30:48,950 --> 00:30:51,724 Tā notiek, super, super, super reti, bet tas varētu notikt. 760 00:30:51,724 --> 00:30:53,890 Mēs vēlamies, lai pārbaudītu to, un tas ir viss, ko mēs darām. 761 00:30:53,890 --> 00:30:57,910 >> Tāpēc, ka mēs redzēsim, tagad, ja jums nav sākt pārbaudes parasti lietām 762 00:30:57,910 --> 00:31:00,870 piemēram, null, jūs varētu faktiski sākt iet 763 00:31:00,870 --> 00:31:03,106 uz adresēm atmiņā, kas ir nederīgi. 764 00:31:03,106 --> 00:31:05,980 Un jūs gatavojas sākt liekot vairāk un vairāk segmentācija defekti. 765 00:31:05,980 --> 00:31:08,360 Vai Mac vai PC, tikko izraisot datoru pakārt 766 00:31:08,360 --> 00:31:10,340 vai programmu, lai iesaldētu, potenciāli. 767 00:31:10,340 --> 00:31:14,930 >> Tāpēc tagad, es apgalvot, kopēt-0.c, ka I dodos uz pārkopēt virknes veidā 768 00:31:14,930 --> 00:31:15,685 līnijas 28. 769 00:31:15,685 --> 00:31:16,850 770 00:31:16,850 --> 00:31:18,750 Un tad, es esmu pieprasīt apakšā 771 00:31:18,750 --> 00:31:21,430 šeit, ka es esmu gatavojas mainīt vienu no tiem. 772 00:31:21,430 --> 00:31:22,330 >> Tātad paziņojums šo. 773 00:31:22,330 --> 00:31:24,370 Es esmu aicinot mūsu veco draugu strlen. 774 00:31:24,370 --> 00:31:28,960 Un tikai paskaidrot angliski Ko šī līnija 34 dara? 775 00:31:28,960 --> 00:31:32,480 Kāda t kronšteinu 0 pārstāvēt pa kreisi. 776 00:31:32,480 --> 00:31:32,980 Jā. 777 00:31:32,980 --> 00:31:34,339 >> AUDITORIJA: Pirmā raksturs t? 778 00:31:34,339 --> 00:31:35,880 DAVID J. Malan: First raksturs t. 779 00:31:35,880 --> 00:31:36,379 Tas arī viss. 780 00:31:36,379 --> 00:31:40,024 Pirmais simbols t, es gribu piešķirt lielais versiju 781 00:31:40,024 --> 00:31:41,190 pirmā rakstura t. 782 00:31:41,190 --> 00:31:43,200 Tātad tas ir kapitalizācijai pirmais burts. 783 00:31:43,200 --> 00:31:46,340 Un tad, ļoti pēdējā lieta, ko es daru jo šī programma ir man apgalvo lūk 784 00:31:46,340 --> 00:31:50,340 oriģinālu, s, un šeit ir kopija, t. 785 00:31:50,340 --> 00:31:54,610 >> Bet, pamatojoties uz stāstu, mēs tikko stāstīja par to, ko stīgas patiešām ir, 786 00:31:54,610 --> 00:31:57,520 kas ir līnija 28 patiešām darīt, un to, kas ir 787 00:31:57,520 --> 00:31:59,405 rezultātā bug notiek būt uz ekrāna? 788 00:31:59,405 --> 00:32:01,300 789 00:32:01,300 --> 00:32:03,500 >> Tātad, pirmkārt, pirmais jautājums, 28. 790 00:32:03,500 --> 00:32:09,040 Kas ir stīgu t = s īsti dara? 791 00:32:09,040 --> 00:32:16,430 Ja mums ir uz kreisās rokas side šeit string t = s; 792 00:32:16,430 --> 00:32:19,400 kas dod man vienu lodziņu šeit un viena kaste šeit. 793 00:32:19,400 --> 00:32:25,530 Un domāju, ka šī adrese ir 0x, teiksim, 50 šoreiz, patvaļīgi. 794 00:32:25,530 --> 00:32:28,847 Kāda string t = s darīt zem pārsega? 795 00:32:28,847 --> 00:32:30,340 >> Mērķauditorija: [dzirdams] 796 00:32:30,340 --> 00:32:34,100 >> DAVID J. Malan: Tā saglabā atmiņu risināt tur, tāpēc 0x50 iet tur. 797 00:32:34,100 --> 00:32:37,980 Tātad, ja tagad, es eju uz pirmā raksturs t un lielajiem burtiem to, 798 00:32:37,980 --> 00:32:39,535 ko es faktiski dara, lai s? 799 00:32:39,535 --> 00:32:41,300 800 00:32:41,300 --> 00:32:43,450 Es esmu patiešām dara to pašu, vai ne? 801 00:32:43,450 --> 00:32:47,680 Jo, ja adrese 0x50-- un vienkārši, es nav daudz vietas uz kuģa šeit 802 00:32:47,680 --> 00:32:51,750 bet pieņemu, ka tas ir 0x50 šeit lejā, kaut kur mana datora atmiņā. 803 00:32:51,750 --> 00:32:55,825 >> Un man ir, piemēram, Gabe ar mazajiem burtiem šeit, kā šis. 804 00:32:55,825 --> 00:32:57,120 805 00:32:57,120 --> 00:33:01,980 Un es jau teicu t kronšteins 0 izpaužas kapitalizētas. 806 00:33:01,980 --> 00:33:04,860 Nu, t skava 0 ir pirmais burts t. 807 00:33:04,860 --> 00:33:07,840 Tik maz g gatavojas kļūt liels G. Bet problēma 808 00:33:07,840 --> 00:33:09,410 ir, ko tas s arī norāda uz? 809 00:33:09,410 --> 00:33:10,300 >> AUDITORIJA: pats. 810 00:33:10,300 --> 00:33:11,841 >> DAVID J. Malan: pašu precīzu lieta. 811 00:33:11,841 --> 00:33:16,342 Tik vienkāršs izskaidrojums, iespējams, pat tad, ja sintakse ir mazliet dīvaini. 812 00:33:16,342 --> 00:33:17,050 Tāpēc pieņemsim to izdarītu. 813 00:33:17,050 --> 00:33:20,210 Veikt kopiju-0, un tad ./copy-0. 814 00:33:20,210 --> 00:33:21,820 815 00:33:21,820 --> 00:33:24,110 Kaut ko pateikt: Gabe. 816 00:33:24,110 --> 00:33:26,760 Un diemžēl, abi viņiem tagad ir kapitalizētas, 817 00:33:26,760 --> 00:33:29,500 bet, kas ir pamatā iemesla dēļ, ka mēs esam vienkārši 818 00:33:29,500 --> 00:33:32,350 Tagad nodarbojas ar adresēm. 819 00:33:32,350 --> 00:33:36,470 >> Tātad, kā mēs sākam address-- no pun intended-- 820 00:33:36,470 --> 00:33:39,270 Kā mēs sākam risināt Šī konkrētā problēma? 821 00:33:39,270 --> 00:33:44,400 Nu, kas copy1.c, lietas virzās lai iegūtu nedaudz sarežģītāka. 822 00:33:44,400 --> 00:33:49,310 Bet es varētu apgalvot konceptuāli vienkāršs risinājums. 823 00:33:49,310 --> 00:33:50,852 >> Tik grūti nokļūt pie pirmā acu uzmetiena. 824 00:33:50,852 --> 00:33:53,560 Nebūs viegli pirmais reizi, kad jūs ierakstiet to ārā, iespējams, 825 00:33:53,560 --> 00:33:57,440 bet, ja problēma ir tā, ka vienkārši darot t = s tikai 826 00:33:57,440 --> 00:33:59,694 kopijas adresi, ko, atkal, ja es varētu izvēlēties par jums, 827 00:33:59,694 --> 00:34:02,110 būs risinājums par faktiski kopējot virkni? 828 00:34:02,110 --> 00:34:04,906 829 00:34:04,906 --> 00:34:06,770 >> AUDITORIJA: Mēs ņemšu iespējams atkal izmanto cilpu. 830 00:34:06,770 --> 00:34:06,890 >> DAVID J. Malan: Jā. 831 00:34:06,890 --> 00:34:08,390 Tāpēc mēs ejam uz nepieciešamību cilpu vēlreiz. 832 00:34:08,390 --> 00:34:11,800 Un tāpēc, ka, ja mēs gribam, lai kopētu string s citā virknē, 833 00:34:11,800 --> 00:34:14,120 mēs, iespējams, vēlas to darīt raksturu pēc rakstura. 834 00:34:14,120 --> 00:34:17,199 Bet problēma ir tā, ja tas ir sākotnēji s, 835 00:34:17,199 --> 00:34:22,159 Tagad mums ir nepieciešams, lai sāktu nepārprotami piešķirot atmiņu t. 836 00:34:22,159 --> 00:34:24,320 >> Citiem vārdiem sakot, pieņemsim ievilktu šo pēdējo reizi. 837 00:34:24,320 --> 00:34:28,659 Ja tas ir String s = GetString. 838 00:34:28,659 --> 00:34:30,956 839 00:34:30,956 --> 00:34:32,455 Un pieņemsim likt šo šeit, kā labi. 840 00:34:32,455 --> 00:34:36,639 841 00:34:36,639 --> 00:34:37,420 Tas ir GetString. 842 00:34:37,420 --> 00:34:39,070 843 00:34:39,070 --> 00:34:43,860 Un tad, attēlu kaut ko piemēram, ka būs kā agrāk, 844 00:34:43,860 --> 00:34:44,360 g-a-b-e / 0. 845 00:34:44,360 --> 00:34:47,294 846 00:34:47,294 --> 00:34:48,960 Tas izskatās mazliet kaut kas līdzīgs šim. 847 00:34:48,960 --> 00:34:53,650 Un s tāpēc, mēs to saucam par 0x50, un kas notiek, lai būtu 51, 52. 848 00:34:53,650 --> 00:34:54,409 >> Tātad tas ir 0x50. 849 00:34:54,409 --> 00:34:55,679 850 00:34:55,679 --> 00:34:59,690 Un tad, man stīgu t. 851 00:34:59,690 --> 00:35:02,450 Atmiņā, kas ir tikai gatavojas dod man mazliet kvadrātu, kā šis. 852 00:35:02,450 --> 00:35:04,080 Tātad, kas ir nozīmīgs solis, tagad? 853 00:35:04,080 --> 00:35:09,870 Ja es gribu, lai kopētu s uz t, ko tukšs mums nepieciešams aizpildīt šeit? 854 00:35:09,870 --> 00:35:12,050 Vai to, ko mums vajag darīt augstā līmenī? 855 00:35:12,050 --> 00:35:14,101 856 00:35:14,101 --> 00:35:14,600 Yeah? 857 00:35:14,600 --> 00:35:16,200 858 00:35:16,200 --> 00:35:17,020 Kāds? 859 00:35:17,020 --> 00:35:17,690 Jā. 860 00:35:17,690 --> 00:35:19,214 >> AUDITORIJA: Mums [nedzirdama]. 861 00:35:19,214 --> 00:35:21,380 DAVID J. Malan: Jā, mēs nepieciešams aizpildīt šo tukšu. 862 00:35:21,380 --> 00:35:24,340 Es nevaru kopēt un tad kapitalizēt Gabe vārdu 863 00:35:24,340 --> 00:35:28,120 kamēr es lūgt operētājsistēmu citam rieciens atmiņas 864 00:35:28,120 --> 00:35:30,640 kas ir vismaz tikpat liela kā oriģinālam. 865 00:35:30,640 --> 00:35:32,130 Tā, ka atstāj mūs ar jautājumu. 866 00:35:32,130 --> 00:35:36,080 >> Kā es varu lūgt operētājsistēmu nav tikai vienkāršu maz pointer-- 867 00:35:36,080 --> 00:35:38,530 kā to sauc, adresi, pointer-- nav 868 00:35:38,530 --> 00:35:40,980 vienkāršu mazā kastīte piemēram, tas sauc virkni? 869 00:35:40,980 --> 00:35:44,200 Kā es varu jautāt darboties sistēma lielu rieciens atmiņas? 870 00:35:44,200 --> 00:35:48,430 Līdz šim es esmu tikai gotten, ka atpakaļ netieši zvanot GetString. 871 00:35:48,430 --> 00:35:50,740 Tātad, kā tiek GetString pat iegūt savu atmiņu? 872 00:35:50,740 --> 00:35:53,430 >> Nu, izrādās, ka tur ir šī citas funkcijas šeit 873 00:35:53,430 --> 00:35:55,160 ka mēs tagad sākam izmantot. 874 00:35:55,160 --> 00:35:59,780 Tagad, tas izskatās tā vairāk mistisks than-- un es esmu vienīgais, kurš var redzēt it-- 875 00:35:59,780 --> 00:36:03,150 šī līnija izskatās tā vairāk mistisks tad tā būtu pirmā acu uzmetiena. 876 00:36:03,150 --> 00:36:04,650 Bet pieņemsim diedelēt to intervālu. 877 00:36:04,650 --> 00:36:07,950 >> Kreisajā pusē, man ir char * t. 878 00:36:07,950 --> 00:36:13,280 Tātad angļu, sāksim formulēt pareizi teikumi tehnisko žargonu. 879 00:36:13,280 --> 00:36:19,757 Tātad tas ir piešķirot mainīgo tipa char * sauc t. 880 00:36:19,757 --> 00:36:21,090 Tagad, ko tas īsti nozīmē? 881 00:36:21,090 --> 00:36:23,881 >> Nu, tas nozīmē, ko es gatavojas likt šo mainīgo sauc t? 882 00:36:23,881 --> 00:36:24,780 883 00:36:24,780 --> 00:36:26,402 Adresi, char. 884 00:36:26,402 --> 00:36:28,360 Tāpēc, ka ir tikai vienkāršāk, vairāk saprātīgs veids 885 00:36:28,360 --> 00:36:29,930 aprakstīt kreiso pusi. 886 00:36:29,930 --> 00:36:32,890 Tā, kas rada šo aili tikai šeit. 887 00:36:32,890 --> 00:36:34,760 Tā labajā pusē, domājams, notiek 888 00:36:34,760 --> 00:36:37,170 piešķirt, ka lielāks rieciens atmiņas kā? 889 00:36:37,170 --> 00:36:38,340 Tāpēc pieņemsim diedelēt šo intervālu. 890 00:36:38,340 --> 00:36:41,131 >> Tas ir milzīgs pirmā acu uzmetiena, bet to, kas notiek iekšā šeit? 891 00:36:41,131 --> 00:36:43,740 Pirmkārt, tur ir malloc, kas acīmredzot mūsu jaunais draugs, 892 00:36:43,740 --> 00:36:45,450 "Atmiņas piešķirt." 893 00:36:45,450 --> 00:36:49,560 Tātad tas ir arguments, kas pāriet tajā, tāpēc tas ir diezgan liels arguments. 894 00:36:49,560 --> 00:36:50,970 Tāpēc pieņemsim diedelēt šo intervālu. 895 00:36:50,970 --> 00:36:53,410 >> strlen no s, protams, pārstāv the-- 896 00:36:53,410 --> 00:36:54,142 897 00:36:54,142 --> 00:36:55,600 AUDITORIJA: rakstzīmju skaits. 898 00:36:55,600 --> 00:36:56,710 DAVID J. Malan: Just rakstzīmju skaitu s. 899 00:36:56,710 --> 00:36:59,040 Tātad garums s, sākotnējā string. 900 00:36:59,040 --> 00:37:00,350 Tātad, G-a-b-e. 901 00:37:00,350 --> 00:37:02,320 Tātad, tas ir iespējams, četras šajā lietā. 902 00:37:02,320 --> 00:37:05,485 Kāpēc es daru +1 pēc zvanot strlen no s? 903 00:37:05,485 --> 00:37:06,360 Mērķauditorija: [dzirdams] 904 00:37:06,360 --> 00:37:07,590 DAVID J. Malan: Ka īpašais null raksturs. 905 00:37:07,590 --> 00:37:11,260 Ja tu man jautā, kas ir garums Gabe vārds, es esmu gatavojas teikt četri. 906 00:37:11,260 --> 00:37:14,480 Zem motora pārsega, lai gan, man vajag ka piektais baits par null raksturs. 907 00:37:14,480 --> 00:37:16,100 Tātad, tas ir iemesls, kāpēc es esmu dara +1. 908 00:37:16,100 --> 00:37:21,730 >> Tagad tikai gadījumā, ja jūs izmantojat šo programma uz datora, nevis, teiksim, 909 00:37:21,730 --> 00:37:24,610 CS50 ierīces, kur lielums char 910 00:37:24,610 --> 00:37:26,350 var būt atšķirīgs no manas computer-- 911 00:37:26,350 --> 00:37:30,590 Izrādās, ka es varu aicinu šo operators sizeof, vienkārši lūgt datoru, 912 00:37:30,590 --> 00:37:32,870 kāda ir lielums char šajā datorā? 913 00:37:32,870 --> 00:37:37,400 >> Un reizinot pieci šajā piemērs ar izmēru char, kas 914 00:37:37,400 --> 00:37:40,440 par lielāko datoru būs tikai viens, malloc 915 00:37:40,440 --> 00:37:44,830 gatavojas piešķirt man tas lielā rieciens atmiņas vairāk nekā šeit, labajā pusē. 916 00:37:44,830 --> 00:37:47,140 Un tas notiek, lai return-- tas ir function-- tāpēc ir 917 00:37:47,140 --> 00:37:48,265 atgriezīsies pie manis, ko? 918 00:37:48,265 --> 00:37:50,914 919 00:37:50,914 --> 00:37:51,830 AUDITORIJA: adrese? 920 00:37:51,830 --> 00:37:53,709 DAVID J. Malan: par ko adrese? 921 00:37:53,709 --> 00:37:55,250 AUDITORIJA: No atmiņu tas piešķirts? 922 00:37:55,250 --> 00:37:56,450 DAVID J. Malan: Of atmiņu tas piešķirts. 923 00:37:56,450 --> 00:37:59,189 Tāpēc man nav ne jausmas, atklāti sakot, , kur tas notiek, lai galu galā. 924 00:37:59,189 --> 00:38:01,480 Es esmu gatavojas ierosināt, ka tas notiek, lai galu galā pie 0x88. 925 00:38:01,480 --> 00:38:02,770 926 00:38:02,770 --> 00:38:06,009 Pilnīgi patvaļīga, bet kaut kas nav 0x50, 927 00:38:06,009 --> 00:38:08,800 jo operētājsistēmu, ko Windows un Mac OS darīt man, ir 928 00:38:08,800 --> 00:38:11,230 pārliecinieties, ka tā dodot me dažādas gabalos RAM. 929 00:38:11,230 --> 00:38:14,210 >> Tātad šis ir vērtība, ja tas rieciens atmiņas varētu beigties. 930 00:38:14,210 --> 00:38:16,060 Tātad, tas ir tas, nonāk šeit, 0x88. 931 00:38:16,060 --> 00:38:17,480 932 00:38:17,480 --> 00:38:21,570 Tāpēc tagad ir skaidri, es varu saprast , ka tas nav tas pats, kā tas, 933 00:38:21,570 --> 00:38:23,960 jo viņi norādot uz dažādi gabalos atmiņas. 934 00:38:23,960 --> 00:38:29,980 Tātad, ja es tagad tiešām vēlaties kopēt šo jo, pieņemsim darīt savu piedāvāto risinājumu. 935 00:38:29,980 --> 00:38:36,870 >> Pieņemsim tikai iet, izveidot cilpas, un darīt t kronšteinu i izpaužas s kronšteinu i. 936 00:38:36,870 --> 00:38:39,760 Jo tagad es varu izmantot šis masīvs līdzīgi notācija, 937 00:38:39,760 --> 00:38:43,390 jo, pat ja malloc ļoti vispārēji piešķir man atmiņu, 938 00:38:43,390 --> 00:38:45,290 atmiņa ir tikai kaimiņu baiti. 939 00:38:45,290 --> 00:38:47,240 Baitos, baits, baitu, atpakaļ atpakaļ atpakaļ. 940 00:38:47,240 --> 00:38:50,030 >> Es varu, protams, kā programmētājs pret to kā masīva, kas 941 00:38:50,030 --> 00:38:55,090 nozīmē, ka varu izmantot beidzot šī pazīstamā pieraksts tikai daži kvadrātiekavās. 942 00:38:55,090 --> 00:38:56,462 943 00:38:56,462 --> 00:39:00,020 >> Tāpēc ļaujiet man pauze tur, jo tas ir daudz visu uzreiz, pat 944 00:39:00,020 --> 00:39:03,530 lai gan pamatideja vēlreiz apkopot ir tas, ka virkne, visu šo laiku, 945 00:39:03,530 --> 00:39:05,550 nav jauna datu tips per se. 946 00:39:05,550 --> 00:39:10,150 Tas ir tikai tā sauktais rādītājs, adresi raksturs, 947 00:39:10,150 --> 00:39:12,650 kas tikai nozīmē, ka ir vairāki ka cilvēka konvencijas 948 00:39:12,650 --> 00:39:15,350 mums ir tendence rakstīt kā 0x kaut ko. 949 00:39:15,350 --> 00:39:18,590 >> Bet tas ir tikai skaitlis, tāpat 33 Oxford Street, 950 00:39:18,590 --> 00:39:20,530 kas notiek, CS ēkas adrese. 951 00:39:20,530 --> 00:39:22,000 952 00:39:22,000 --> 00:39:23,545 Jebkuri jautājumi par šo informāciju? 953 00:39:23,545 --> 00:39:24,790 954 00:39:24,790 --> 00:39:25,289 Yeah? 955 00:39:25,289 --> 00:39:28,530 >> AUDITORIJA: Kāpēc mēs pārbaudām t ir vienāda ar null? 956 00:39:28,530 --> 00:39:30,740 >> DAVID J. Malan: Kāpēc mēs pārbaudīt t vienāds ar null? 957 00:39:30,740 --> 00:39:33,250 Ja mēs lasām documentation-- liels question-- par malloc, 958 00:39:33,250 --> 00:39:37,020 tas gatavojas teikt fine print, dažreiz malloc varētu atgriezties null, 959 00:39:37,020 --> 00:39:38,080 tāpat kā GetString. 960 00:39:38,080 --> 00:39:41,820 Un tiešām, GetString atgriež null Ja, savukārt, malloc atgriež null, 961 00:39:41,820 --> 00:39:43,130 jo GetString izmanto malloc. 962 00:39:43,130 --> 00:39:46,400 >> Un, kas varētu notikt, ja OS, Mac OS, Windows, neatkarīgi, ir vienkārši 963 00:39:46,400 --> 00:39:48,130 no atmiņas jums. 964 00:39:48,130 --> 00:39:49,820 Tātad tas, kas tur notika. 965 00:39:49,820 --> 00:39:52,910 >> Un ļaujiet man atklāt vienu citu lietu kas varētu vienkārši trieciens jūsu prātā 966 00:39:52,910 --> 00:39:55,100 vai pilnīgi pārāk tālu pār līniju. 967 00:39:55,100 --> 00:39:59,770 Bet ļaujiet man uzvilkt pati cilpa kopēšanai, 968 00:39:59,770 --> 00:40:05,480 kas pirms brīdis, atsaukšana bija šo. t kronšteins i izpaužas s kronšteinu i. 969 00:40:05,480 --> 00:40:06,740 >> Jauka un draudzīga. 970 00:40:06,740 --> 00:40:09,330 Jūtas kā Otrā nedēļa atkal. 971 00:40:09,330 --> 00:40:14,920 Bet šis variants patiesībā var būt pārrakstīt, jo tas, kas izskatās noslēpumains. 972 00:40:14,920 --> 00:40:18,280 Tas ir paņēmiens, ko sauc rādītājs aritmētika, adrese aritmētika. 973 00:40:18,280 --> 00:40:19,600 Bet kāpēc tas darbojas? 974 00:40:19,600 --> 00:40:22,220 >> Tagad kaitinoši, autori C nolēma izmantot 975 00:40:22,220 --> 00:40:25,070 * simbols dažādiem mērķiem. 976 00:40:25,070 --> 00:40:29,020 Mēs esam redzējuši to izmanto jau vienreiz, char *, kas nozīmē "dod man mainīgais 977 00:40:29,020 --> 00:40:31,210 kas notiek, lai apturētu adresi, char. " 978 00:40:31,210 --> 00:40:33,990 Tātad char * šajā kontekstā nozīmē "man mainīgo." 979 00:40:33,990 --> 00:40:40,050 >> Diemžēl, ja jūs izmantojat * bez vārds priekšā tā, piemēram, palijas, 980 00:40:40,050 --> 00:40:41,905 tā tagad sauc dereference operators. 981 00:40:41,905 --> 00:40:43,530 Un mēs redzēsim vairāk par šo pirms ilgi. 982 00:40:43,530 --> 00:40:44,930 Bet tas tikai nozīmē "iet uz turieni." 983 00:40:44,930 --> 00:40:49,070 Tas ir tāpat kā teikt, ja kāds man pasniedza par kādu papīra "33 Oxford Street," 984 00:40:49,070 --> 00:40:53,830 ja man "* 33 Oxford Street", tas nozīmē, ka "Iet uz leju ceļu uz CS ēkā." 985 00:40:53,830 --> 00:40:57,220 >> Tik * vienkārši nozīmē iet uz turieni, ja tur neviens vārds tā priekšā. 986 00:40:57,220 --> 00:40:59,100 Tātad, kas ir t, lai būtu skaidrs? 987 00:40:59,100 --> 00:41:03,250 t ir adrese rieciens atmiņu, kas tika dots atpakaļ uz mani. 988 00:41:03,250 --> 00:41:06,650 s ir adrese, ko, lai būtu skaidrs, piemērā, mēs esam runājuši, 989 00:41:06,650 --> 00:41:07,500 par mazo Gabe? 990 00:41:07,500 --> 00:41:08,990 991 00:41:08,990 --> 00:41:10,005 s ir adrese of-- 992 00:41:10,005 --> 00:41:11,585 993 00:41:11,585 --> 00:41:12,460 AUDITORIJA: string. 994 00:41:12,460 --> 00:41:14,126 DAVID J. Malan: Of Gabe sākotnējo nosaukumu. 995 00:41:14,126 --> 00:41:16,660 Tātad, tas ir adrese šis rieciens atmiņas. 996 00:41:16,660 --> 00:41:22,220 Tātad, ja es saku t + i-- i, paziņojums, ir tikai mūsu vecais draugs. 997 00:41:22,220 --> 00:41:24,770 Tas ir tikai rādītājs mainīgais kas ir atkārtojot no nulles uz augšu 998 00:41:24,770 --> 00:41:26,960 ar garumu virknes s. 999 00:41:26,960 --> 00:41:30,367 Tātad tas būs nulle, tad vienu, tad divas, tad trīs, pēc tam četras. 1000 00:41:30,367 --> 00:41:33,200 Tātad, pieņemsim apkopot šo jauno Momentloterijas līdzīgi puzzle gabalus, ja jūs, 1001 00:41:33,200 --> 00:41:36,140 kaut gan, atkal, sintakse ir daudz mistisks nekā nulles. 1002 00:41:36,140 --> 00:41:39,522 Tātad, t ir adrese + i gatavojas sniegt man 1003 00:41:39,522 --> 00:41:42,480 numuru, jo tie visi ir skaitļi, kas mēs esam bijuši zīmēšanas kā Hex. 1004 00:41:42,480 --> 00:41:43,560 Bet viņi tikai ciparus. 1005 00:41:43,560 --> 00:41:49,960 >> Tātad, ja adrese t mēs minētā bija 0x88, kas ir 0x88 plus nulle. 1006 00:41:49,960 --> 00:41:51,564 1007 00:41:51,564 --> 00:41:53,980 Pat ja jūs neesat apmierināti ar hex vēl, ņem minējums. 1008 00:41:53,980 --> 00:41:54,410 >> AUDITORIJA: oriģināls. 1009 00:41:54,410 --> 00:41:55,850 >> DAVID J. Malan: Still 0x88. 1010 00:41:55,850 --> 00:41:58,910 Tātad, ko tas * 0x88 nozīmē? 1011 00:41:58,910 --> 00:42:02,670 Tas nozīmē, "iet tur", kas nozīmē efektīvi, "nodot savu pirkstu šeit." 1012 00:42:02,670 --> 00:42:06,930 Un tagad par labajā pusē šis izteiciens, * un tad parens, 1013 00:42:06,930 --> 00:42:11,586 s + i ir S, kas ir risinātu šeit par maz g. 1014 00:42:11,586 --> 00:42:16,220 s + 0, protams, s, neatkarīgi s ir. 1015 00:42:16,220 --> 00:42:21,230 >> Tātad tagad, tas * s, kas, tāpat kā * 33 Oxford Street nozīmē iet uz adresi 1016 00:42:21,230 --> 00:42:22,010 s. 1017 00:42:22,010 --> 00:42:24,170 Tātad, šeit ir šis pirkstu, labo roku. 1018 00:42:24,170 --> 00:42:26,050 Tātad, ko es esmu gatavojas iekopēt ko? 1019 00:42:26,050 --> 00:42:30,260 Lieta, par tiesībām, kas ir Gabe, maz g šeit, uz šeit. 1020 00:42:30,260 --> 00:42:32,750 >> Un tā iedarbība, kas pirmā atkārtojuma no cilpas, 1021 00:42:32,750 --> 00:42:36,200 kā jūs ierosināts, lai gan tas izskatās traks sarežģītāka nekā jebkas 1022 00:42:36,200 --> 00:42:42,110 mēs esam redzējuši iepriekš, ir vienkārši sakot iet šeit un kopēt, ka raksturu šeit. 1023 00:42:42,110 --> 00:42:44,700 Tas dod jums karti abām vietām. 1024 00:42:44,700 --> 00:42:46,130 >> Un mēs redzēsim daudz vairāk par to. 1025 00:42:46,130 --> 00:42:50,600 Bet tagad, cerība ir tikai ieviest dažas no šīm pamatidejām. 1026 00:42:50,600 --> 00:42:53,550 Un tiešām, aplūkosim viens galīgo programmu šeit 1027 00:42:53,550 --> 00:42:57,480 un tad apsolīja claymation, kas būs viss labi. 1028 00:42:57,480 --> 00:42:57,980 Viss labi. 1029 00:42:57,980 --> 00:43:01,680 Tāpēc ļaujiet man atvērt up-- tur mēs ejam. 1030 00:43:01,680 --> 00:43:02,850 1031 00:43:02,850 --> 00:43:05,440 Tāpēc ļaujiet me-- mēs atgriezties ar šo attēlu pirms ilgi. 1032 00:43:05,440 --> 00:43:08,360 Ļaujiet man atvērt šo galīgo piemēru šeit. 1033 00:43:08,360 --> 00:43:09,440 1034 00:43:09,440 --> 00:43:12,710 >> Tātad, šeit ir super, super programma, kas accomplishes 1035 00:43:12,710 --> 00:43:15,050 nekas dzīvē, kas dara sekojošo. 1036 00:43:15,050 --> 00:43:18,740 Tas pirmo reizi deklarē divi mainīgie, x un Y, kas nav skaitļi šajā laikā, 1037 00:43:18,740 --> 00:43:19,240 per se. 1038 00:43:19,240 --> 00:43:20,448 Viņi nav veseli skaitļi, per se. 1039 00:43:20,448 --> 00:43:22,899 Tie ir acīmredzami int *. 1040 00:43:22,899 --> 00:43:25,690 Tātad tikai kāds, ko tas nozīmē ja jūsu datu tipu, jūsu mainīgs, 1041 00:43:25,690 --> 00:43:26,860 ir veids int * zvaigzne? 1042 00:43:26,860 --> 00:43:30,240 Tas ir adrese int. 1043 00:43:30,240 --> 00:43:31,990 >> Tāpēc es nezinu, kur tas ir vēl. 1044 00:43:31,990 --> 00:43:35,150 Tas vienkārši nozīmē "izsakoties, galu galā, adrese int šeit. " 1045 00:43:35,150 --> 00:43:38,340 0x50, 0x88, kur tas ir atmiņa, adrese notiek tur. 1046 00:43:38,340 --> 00:43:40,200 Un tas, ko y būs, kā labi. 1047 00:43:40,200 --> 00:43:44,920 >> Ja tagad es saku x = malloc (sizeof (int)), tas ir iedomātā veids, kā pateikt, 1048 00:43:44,920 --> 00:43:49,000 hey operētājsistēma, izmantojot malloc, dod man pietiekami daudz atmiņas lielumam 1049 00:43:49,000 --> 00:43:52,370 no int, kas, iespējams būs 32 biti vai četri baiti. 1050 00:43:52,370 --> 00:43:53,680 >> Tātad, ko tas malloc atgriezties? 1051 00:43:53,680 --> 00:43:55,250 Malloc atgriež adresi. 1052 00:43:55,250 --> 00:43:57,020 Tātad, kas notiek, lai saņemtu glabājas x? 1053 00:43:57,020 --> 00:44:00,600 Par rieciens adrese atmiņa, četri baiti, ka malloc 1054 00:44:00,600 --> 00:44:03,360 tikko konstatēja man, lūdzot operētājsistēma. 1055 00:44:03,360 --> 00:44:08,240 >> Tagad tikmēr, rinda četri šeit * x = 42. 1056 00:44:08,240 --> 00:44:09,990 Tikai, lai būtu skaidrs, Kas notiek tur lejā? 1057 00:44:09,990 --> 00:44:11,530 Uz kreisajā pusē, * x. 1058 00:44:11,530 --> 00:44:13,610 tas ir tāpat kā * 33 Oxford Street. 1059 00:44:13,610 --> 00:44:15,523 Tātad * x nozīmē ko? 1060 00:44:15,523 --> 00:44:16,450 >> AUDITORIJA: Izlase. 1061 00:44:16,450 --> 00:44:17,908 >> DAVID J. Malan: Iet uz šo adresi. 1062 00:44:17,908 --> 00:44:20,466 Ja šī rieciens atmiņa ir, iet uz to. 1063 00:44:20,466 --> 00:44:21,979 Un īstenot to, ko tur, protams? 1064 00:44:21,979 --> 00:44:22,520 AUDITORIJA: 42. 1065 00:44:22,520 --> 00:44:23,580 DAVID J. Malan: 42. 1066 00:44:23,580 --> 00:44:25,650 Nu labi, * y, pati ideja. 1067 00:44:25,650 --> 00:44:26,860 Iet uz adresi y. 1068 00:44:26,860 --> 00:44:31,740 Nodot skaits 13 tur, bet to, kas ir y šobrīd? 1069 00:44:31,740 --> 00:44:33,172 1070 00:44:33,172 --> 00:44:34,630 AUDITORIJA: Nav atmiņas par y. 1071 00:44:34,630 --> 00:44:35,710 DAVID J. Malan: Ir nav atmiņas par y. 1072 00:44:35,710 --> 00:44:38,215 Tātad, ko y nav iespējams satur, kā mēs esam teicis? 1073 00:44:38,215 --> 00:44:38,520 >> AUDITORIJA: Atkritumu. 1074 00:44:38,520 --> 00:44:39,480 >> DAVID J. Malan: Daži atkritumu vērtība. 1075 00:44:39,480 --> 00:44:41,320 Tagad, atkritumu vērtība joprojām ir vairāki. 1076 00:44:41,320 --> 00:44:43,160 Tas joprojām var sajaukt adresi. 1077 00:44:43,160 --> 00:44:45,160 Tas ir tā, it kā kāds ierakstījis kaut uz leju, 1078 00:44:45,160 --> 00:44:48,002 un es nepareizi interpretēt to tādā veidā, daži ēku pa ielu. 1079 00:44:48,002 --> 00:44:50,460 Un, ja jūs vienkārši mēģināt iedziļināties daži ēka jums nepieder, 1080 00:44:50,460 --> 00:44:53,710 vai kādu rieciens atmiņas jums nav bijusi dota, sliktas lietas var notikt. 1081 00:44:53,710 --> 00:44:57,740 Dators var crash, vai kādu citu nenoteikts uzvedība varētu notikt. 1082 00:44:57,740 --> 00:45:01,310 >> Tātad intro, tad, lai Binky tas ir. 1083 00:45:01,310 --> 00:45:04,290 Es joprojām atceros, 20 daži nepāra gadus vēlāk, 1084 00:45:04,290 --> 00:45:07,200 kur es biju, kad es beidzot saprot norādes. 1085 00:45:07,200 --> 00:45:09,520 >> Kas ir, ja jūs atstāt šeit trīs minūtēs 1086 00:45:09,520 --> 00:45:12,170 un domāju, ka man nav saprotu norādes, saprotam 1087 00:45:12,170 --> 00:45:14,410 Es atcerējos par 20 gadi kādu traku iemeslu dēļ 1088 00:45:14,410 --> 00:45:17,140 kad un kāpēc tas beidzot nogrimis jo, sēžot ar manu mācību 1089 00:45:17,140 --> 00:45:19,501 puisis, Nishat Mehta in atpakaļ Eliot ēdamzālē. 1090 00:45:19,501 --> 00:45:21,250 Tagad, es esmu atcerējos tas tāpēc, ka tas bija 1091 00:45:21,250 --> 00:45:23,920 viens no tēmas I, kas īpaši, cīnījās ar. 1092 00:45:23,920 --> 00:45:26,470 Un tad, tas beidzot uzklikšķināt, piemēram, es uzdrošinos teikt daudz tēmām 1093 00:45:26,470 --> 00:45:27,460 galu galā būs. 1094 00:45:27,460 --> 00:45:32,590 Un tagad, lai padarītu ka jūtas visu laimīgāki, un vēl jo vairāk pārliecinošs, 1095 00:45:32,590 --> 00:45:35,360 pieņemsim galīgo izskatu mūsu Pēdējās trīs minūtes šeit pie Binky, 1096 00:45:35,360 --> 00:45:37,675 no mūsu draugs, Nick Parlante no Stenfordas. 1097 00:45:37,675 --> 00:45:38,910 1098 00:45:38,910 --> 00:45:41,580 >> [Video atskaņošana] 1099 00:45:41,580 --> 00:45:42,750 >> Hei, Binky. 1100 00:45:42,750 --> 00:45:43,500 Mosties! 1101 00:45:43,500 --> 00:45:45,960 Ir pienācis laiks, lai šautriņu jautri. 1102 00:45:45,960 --> 00:45:47,012 >> -Ko Tas tāds? 1103 00:45:47,012 --> 00:45:48,723 Uzziniet par norādes? 1104 00:45:48,723 --> 00:45:50,580 Ak, našķis! 1105 00:45:50,580 --> 00:45:53,563 >> -Labi, Lai sāktu, es domāju, mēs esam būs nepieciešama pāris norādes. 1106 00:45:53,563 --> 00:45:54,390 >> -OK. 1107 00:45:54,390 --> 00:45:57,930 Šis kods piešķir divas norādes, kas var norādīt uz veseliem skaitļiem. 1108 00:45:57,930 --> 00:45:58,430 -OK. 1109 00:45:58,430 --> 00:46:02,140 Nu, es redzu divas norādes, bet viņi nešķiet, ka norādot uz kaut ko. 1110 00:46:02,140 --> 00:46:02,980 >> -Tas Ir taisnība. 1111 00:46:02,980 --> 00:46:05,100 Sākotnēji, norādes neliecina neko. 1112 00:46:05,100 --> 00:46:08,030 Lietas, viņi norāda uz sauc pointees, un to izveidošanas 's 1113 00:46:08,030 --> 00:46:09,370 atsevišķs solis. 1114 00:46:09,370 --> 00:46:10,220 >> -OH, Labi, labi. 1115 00:46:10,220 --> 00:46:10,950 Es zināju, ka. 1116 00:46:10,950 --> 00:46:12,385 Šie pointees ir atsevišķi. 1117 00:46:12,385 --> 00:46:14,315 Er, tā kā jūs piešķirt pointee? 1118 00:46:14,315 --> 00:46:15,340 1119 00:46:15,340 --> 00:46:15,960 >> -OK. 1120 00:46:15,960 --> 00:46:18,970 Nu, šo kodu piešķir jauna skaitlis pointee, 1121 00:46:18,970 --> 00:46:20,950 un Šajā daļā ir x, lai norādītu uz to. 1122 00:46:20,950 --> 00:46:22,050 1123 00:46:22,050 --> 00:46:23,230 >> Hei, kas izskatās labāk. 1124 00:46:23,230 --> 00:46:25,060 Lai padarītu to kaut ko darīt. 1125 00:46:25,060 --> 00:46:25,990 >> -OK. 1126 00:46:25,990 --> 00:46:30,455 Es ņemšu dereference rādītāja x līdz uzglabāt numuru 42 savā pointee. 1127 00:46:30,455 --> 00:46:32,830 Par šo triks, man nāksies manu Magic Wand of dereferencing. 1128 00:46:32,830 --> 00:46:34,130 1129 00:46:34,130 --> 00:46:36,080 >> -Jūsu Magic Wand of dereferencing? 1130 00:46:36,080 --> 00:46:37,357 1131 00:46:37,357 --> 00:46:38,190 That-- tas ir lieliski. 1132 00:46:38,190 --> 00:46:39,340 1133 00:46:39,340 --> 00:46:41,080 >> -Tas Ir tas kods izskatās. 1134 00:46:41,080 --> 00:46:44,110 Es ņemšu tikai izveidoja numuru un [POP] 1135 00:46:44,110 --> 00:46:44,700 >> Hei, izskatās. 1136 00:46:44,700 --> 00:46:46,140 Tur tas notiek. 1137 00:46:46,140 --> 00:46:50,980 >> -Tātad Darot dereference par x šādi bultiņa, lai piekļūtu savu pointee. 1138 00:46:50,980 --> 00:46:53,160 Šajā gadījumā, veikals 42 tur. 1139 00:46:53,160 --> 00:46:57,710 Hey mēģiniet izmantot to, lai saglabātu numuru 13 caur otru rādītāju, y. 1140 00:46:57,710 --> 00:46:58,760 >> -OK. 1141 00:46:58,760 --> 00:47:03,270 Es ņemšu tikai iet nekā šeit uz y, un saņemt numuru 13 iestatīšanu. 1142 00:47:03,270 --> 00:47:07,930 Un tad, ņem zizlis Dereferencing un tikai [BUZZ] 1143 00:47:07,930 --> 00:47:08,960 >> OH! 1144 00:47:08,960 --> 00:47:09,500 >> OH, hey! 1145 00:47:09,500 --> 00:47:11,090 Tas nestrādāja. 1146 00:47:11,090 --> 00:47:15,630 Saka, Binky, es nedomāju dereferencing y ir laba ideja, jo jūs zināt, 1147 00:47:15,630 --> 00:47:17,850 izveido pointee ir atsevišķs solis. 1148 00:47:17,850 --> 00:47:20,450 Un es nedomāju, ka mēs kādreiz darīja. 1149 00:47:20,450 --> 00:47:21,480 >> -Laba Punkts. 1150 00:47:21,480 --> 00:47:21,980 -Jā. 1151 00:47:21,980 --> 00:47:25,680 Mēs piešķirti rādītāja y, bet mēs nekad iestatīt tā, lai norādītu uz pointee. 1152 00:47:25,680 --> 00:47:27,190 1153 00:47:27,190 --> 00:47:28,616 >> -Ļoti Uzmanīgu. 1154 00:47:28,616 --> 00:47:30,240 Hei, jūs meklējat labi tur, Binky. 1155 00:47:30,240 --> 00:47:33,400 Vai jūs varat salabot, lai y punkti uz to pašu pointee kā x? 1156 00:47:33,400 --> 00:47:34,000 >> -Sure. 1157 00:47:34,000 --> 00:47:36,780 Es izmantot savu burvju nūjiņu no Pointer uzdevumu. 1158 00:47:36,780 --> 00:47:38,740 >> -Vai Ka būs problēma, piemēram, pirms? 1159 00:47:38,740 --> 00:47:39,240 -No. 1160 00:47:39,240 --> 00:47:40,660 Tas nav pieskarties pointees. 1161 00:47:40,660 --> 00:47:44,450 Tas tikai maina vienu rādītāju uz norāda uz vienu un to pašu, kā citu. 1162 00:47:44,450 --> 00:47:45,450 >> OH, es redzu. 1163 00:47:45,450 --> 00:47:48,200 Tagad y norāda uz to pašu vietu, kā x. 1164 00:47:48,200 --> 00:47:48,910 Tik jāgaida. 1165 00:47:48,910 --> 00:47:49,950 Tagad, y ir fiksēts. 1166 00:47:49,950 --> 00:47:51,120 Tā ir pointee. 1167 00:47:51,120 --> 00:47:54,510 Tātad jūs varat mēģināt zizlis Dereferencing vēlreiz, lai nosūtītu 13 pārvērtībām. 1168 00:47:54,510 --> 00:47:56,510 >> -Uh, OK. 1169 00:47:56,510 --> 00:47:58,160 Šeit tas pats. [POP] 1170 00:47:58,160 --> 00:47:59,340 >> Hei, apskatīt to. 1171 00:47:59,340 --> 00:48:00,750 Tagad dereferencing darbus y. 1172 00:48:00,750 --> 00:48:04,991 Un tāpēc, ka norādes tiek daloties ka viena pointee, viņi gan redzēt 13. 1173 00:48:04,991 --> 00:48:05,490 -Jā. 1174 00:48:05,490 --> 00:48:06,870 Sharing, neatkarīgi. 1175 00:48:06,870 --> 00:48:08,820 Tātad mēs gatavojamies, lai pārslēgtos vietām tagad? 1176 00:48:08,820 --> 00:48:09,440 >> Ak, izskatās. 1177 00:48:09,440 --> 00:48:10,830 Mēs esam ārpus laika. 1178 00:48:10,830 --> 00:48:11,570 >> -But-- 1179 00:48:11,570 --> 00:48:13,530 >> -Just Atcerēties trīs bultiņu noteikumus. 1180 00:48:13,530 --> 00:48:16,560 Number One, pamatstruktūra ir tas, ka jums ir rādītājs, 1181 00:48:16,560 --> 00:48:18,680 un tas norāda vairāk nekā uz pointee. 1182 00:48:18,680 --> 00:48:20,640 Bet rādītājs un pointee ir atsevišķi, 1183 00:48:20,640 --> 00:48:22,610 un kopējā kļūda ir izveidot rādītāju, 1184 00:48:22,610 --> 00:48:25,000 bet aizmirst, lai dotu tai pointee. 1185 00:48:25,000 --> 00:48:28,170 >> Skaits Divi, rādītājs dereferencing sākas rādītāja 1186 00:48:28,170 --> 00:48:31,050 un seko tās bultiņas pār , lai piekļūtu savu pointee. 1187 00:48:31,050 --> 00:48:33,400 Kā mēs visi zinām, šis darbojas tikai tad, ja ir 1188 00:48:33,400 --> 00:48:36,270 pointee, kāda veida saņem atpakaļ ar Reglamenta Number One. 1189 00:48:36,270 --> 00:48:39,000 >> Numurs Trīs, rādītājs piešķiršana aizņem vienu rādītāju 1190 00:48:39,000 --> 00:48:42,320 un izmaiņas to norādīt uz pats pointee kā cits rādītājs. 1191 00:48:42,320 --> 00:48:44,160 Tātad, pēc uzdevuma, divas norādes 1192 00:48:44,160 --> 00:48:45,910 norādīs uz to pašu pointee. 1193 00:48:45,910 --> 00:48:47,990 Dažreiz, ka sauc dalīšana. 1194 00:48:47,990 --> 00:48:49,740 Un tas viss notiek ar to, tiešām. 1195 00:48:49,740 --> 00:48:50,277 Bye-bye tagad. 1196 00:48:50,277 --> 00:48:51,110 [END VIDEO PLAYBACK] 1197 00:48:51,110 --> 00:48:52,568 DAVID J. Malan: Tas ir tas CS50. 1198 00:48:52,568 --> 00:48:55,110 Mēs redzēsim tevi nākamnedēļ. 1199 00:48:55,110 --> 00:48:56,064