1 00:00:00,000 --> 00:00:01,110 >> [Musika nagpe-play] 2 00:00:01,110 --> 00:00:10,567 3 00:00:10,567 --> 00:00:11,650 David J. MALAN: Lahat ng karapatan. 4 00:00:11,650 --> 00:00:15,610 Ito ay CS50, at ito ay ang pagtatapos ng Linggo Four. 5 00:00:15,610 --> 00:00:19,420 At ang isa sa mga paksa ngayong araw ay na ng digital forensics, 6 00:00:19,420 --> 00:00:20,989 ang sining ng Pagbawi impormasyon. 7 00:00:20,989 --> 00:00:22,780 At sa katunayan, kahit na ikaw ay nasa kalagitnaan 8 00:00:22,780 --> 00:00:25,070 ngayon ng Kapayapaan sa Tatlong at Breakout, sa susunod na linggo, 9 00:00:25,070 --> 00:00:27,880 ang focus ay magiging sa tiyak domain na ito. 10 00:00:27,880 --> 00:00:30,686 >> Kaya isa sa mga pinakaastig na trabaho kailanman ko Nagkaroon noon ay bumalik sa nagtapos ng paaralan, 11 00:00:30,686 --> 00:00:33,560 kapag ako ay nagtatrabaho para sa mga lokal na Middlesex County District Attorney ni 12 00:00:33,560 --> 00:00:34,950 opisina, ang paggawa forensics gumagana. 13 00:00:34,950 --> 00:00:37,450 Kaya mahalagang, ang Massachusetts Estado Police, sa okasyon, 14 00:00:37,450 --> 00:00:40,100 kapag nagtatrabaho sa mga kaso ng gagawin magdala ng mga bagay tulad ng matapang na drive 15 00:00:40,100 --> 00:00:42,185 at floppy disk at memory card at ang tulad ng. 16 00:00:42,185 --> 00:00:44,060 At ang mga ito ay ipasa ang mga ito sa akin at sa aking Mentor, 17 00:00:44,060 --> 00:00:48,070 at ang aming layunin ay upang mahanap ang katibayan, kung nagkaroon man, sa mga media. 18 00:00:48,070 --> 00:00:50,700 Ngayon, maaari na nakita mo glimpses sa mundong ito ng forensics 19 00:00:50,700 --> 00:00:53,000 sa media, TV at pelikula. 20 00:00:53,000 --> 00:00:55,730 Ngunit ang trabaho ko ay nagkaroon, at daresay mundo na, 21 00:00:55,730 --> 00:00:57,550 ay hindi masyadong tulad ng gusto mong makita ito. 22 00:00:57,550 --> 00:01:00,794 Tingnan natin ang isang pagtingin sa kung ano malamang na nakita mo. 23 00:01:00,794 --> 00:01:01,460 [VIDEO pag-playback] 24 00:01:01,460 --> 00:01:02,930 -OK. 25 00:01:02,930 --> 00:01:05,380 Ngayon, sabihin makakuha ng isang mahusay na pagtingin sa iyo. 26 00:01:05,380 --> 00:01:06,850 >> [Musika nagpe-play] 27 00:01:06,850 --> 00:01:12,260 28 00:01:12,260 --> 00:01:12,932 >> -Hold Ito. 29 00:01:12,932 --> 00:01:13,657 Patakbuhin ang na bumalik. 30 00:01:13,657 --> 00:01:14,733 >> -Wait Ng isang minuto. 31 00:01:14,733 --> 00:01:15,233 Pumunta sa kanan. 32 00:01:15,233 --> 00:01:16,371 33 00:01:16,371 --> 00:01:16,870 -There. 34 00:01:16,870 --> 00:01:17,369 I-freeze na iyon. 35 00:01:17,369 --> 00:01:17,930 -buong-Screen. 36 00:01:17,930 --> 00:01:18,376 >> -OK. 37 00:01:18,376 --> 00:01:18,875 I-freeze na iyon. 38 00:01:18,875 --> 00:01:20,160 -Tighten Up sa na, ikaw? 39 00:01:20,160 --> 00:01:22,126 >> -Vector In sa na tao sa pamamagitan ng likod wheel. 40 00:01:22,126 --> 00:01:24,435 >> -Zoom In dito mismo sa lugar na ito. 41 00:01:24,435 --> 00:01:28,580 >> -With Ang karapatan kagamitan, ang imahe ay maaaring pinalaki at sharpened. 42 00:01:28,580 --> 00:01:29,330 >> -What Iyan? 43 00:01:29,330 --> 00:01:30,780 >> -It Ang isang programa ng pagpapabuti. 44 00:01:30,780 --> 00:01:32,170 >> -Can Mo malinaw na up anumang? 45 00:01:32,170 --> 00:01:33,070 >> Hindi -I kilala. 46 00:01:33,070 --> 00:01:34,150 Paghusayin ni ito Hayaan. 47 00:01:34,150 --> 00:01:35,440 >> -Enhance Seksyon A6. 48 00:01:35,440 --> 00:01:36,570 49 00:01:36,570 --> 00:01:38,562 Pinahusay ko ang detalye, and-- 50 00:01:38,562 --> 00:01:40,020 Sa tingin -I mayroong sapat na upang mapahusay. 51 00:01:40,020 --> 00:01:40,976 Palabasin ito sa aking screen. 52 00:01:40,976 --> 00:01:42,559 >> -I Pinahusay na ang pagmuni-muni sa kanyang mga mata. 53 00:01:42,559 --> 00:01:44,322 -Let Ay tumakbo na ito sa pamamagitan ng Pagpapabuti ng video. 54 00:01:44,322 --> 00:01:45,210 >> -Edgar, Maaari mong pagandahin ito? 55 00:01:45,210 --> 00:01:45,710 >> -Hang Sa. 56 00:01:45,710 --> 00:01:47,570 57 00:01:47,570 --> 00:01:49,458 >> -I've Nagtatrabaho sa pagmuni-muni. 58 00:01:49,458 --> 00:01:50,402 >> Panganganinag ng isang tao -There ni. 59 00:01:50,402 --> 00:01:50,902 >> -Reflection. 60 00:01:50,902 --> 00:01:52,870 -There Ay isang salamin ng mukha ng tao. 61 00:01:52,870 --> 00:01:53,694 >> -Ang Salamin! 62 00:01:53,694 --> 00:01:54,610 -There Ay isang pagsasalamin. 63 00:01:54,610 --> 00:01:55,880 -Zoom In sa mirror. 64 00:01:55,880 --> 00:01:57,860 Maaari mong makita ang isang pagsasalamin. 65 00:01:57,860 --> 00:01:59,630 >> -Can Mong mapahusay ang mga imahe mula dito? 66 00:01:59,630 --> 00:02:00,377 67 00:02:00,377 --> 00:02:01,210 -Can Mong mapahusay ito? 68 00:02:01,210 --> 00:02:02,190 -Can Mong mapahusay ito? 69 00:02:02,190 --> 00:02:03,066 -Can Namin mapahusay ito? 70 00:02:03,066 --> 00:02:03,898 -Can Mong mapahusay ito? 71 00:02:03,898 --> 00:02:04,740 -Hold Sa isang segundo. 72 00:02:04,740 --> 00:02:05,281 Kukunin ko paghusayin. 73 00:02:05,281 --> 00:02:06,470 -Zoom In sa pinto. 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 -More. 78 00:02:09,340 --> 00:02:10,094 -Wait, Itigil. 79 00:02:10,094 --> 00:02:10,750 -Stop. 80 00:02:10,750 --> 00:02:11,250 -Pause Ito. 81 00:02:11,250 --> 00:02:13,542 -Rotate Sa amin 75 degrees sa paligid ng vertical, mangyaring. 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 Bumalik sa bahagi tungkol sa pinto muli. 85 00:02:19,330 --> 00:02:21,420 >> -Got Isang Enhancer larawang maaaring bitmap? 86 00:02:21,420 --> 00:02:24,420 >> -Maybe Na maaari naming gamitin ang Pradeep Singh pamamaraan upang makita sa bintana. 87 00:02:24,420 --> 00:02:25,902 >> -Ang Software ay estado ng art. 88 00:02:25,902 --> 00:02:26,866 >> -Ang Eigenvalue Naka-off. 89 00:02:26,866 --> 00:02:29,758 >> -With Ang karapatan kumbinasyon ng algorithms-- 90 00:02:29,758 --> 00:02:32,168 >> Kinuha pag-iilaw -He ni algorithm sa susunod na antas, 91 00:02:32,168 --> 00:02:34,110 at maaari ko bang gamitin ang mga ito sa mapapahusay ang larawan. 92 00:02:34,110 --> 00:02:36,840 >> -Lock Sa at palakihin ang z-axis. 93 00:02:36,840 --> 00:02:37,351 >> -Enhance. 94 00:02:37,351 --> 00:02:37,850 Pagandahin. 95 00:02:37,850 --> 00:02:38,720 -Enhance. 96 00:02:38,720 --> 00:02:40,070 -Freeze At paghusayin. 97 00:02:40,070 --> 00:02:43,420 [END VIDEO pag-playback] 98 00:02:43,420 --> 00:02:45,830 David J. MALAN: Kaya mga ay lahat ng mga salita, ngunit sila ay hindi 99 00:02:45,830 --> 00:02:47,870 ginamit sa mga pangungusap nang tama. 100 00:02:47,870 --> 00:02:52,370 At sa katunayan sa hinaharap, anumang oras, mangyaring, maririnig mo ang isang tao ang sinasabi ng mga salita, 101 00:02:52,370 --> 00:02:54,250 "Paghusayin," chuckle lang nang kaunti. 102 00:02:54,250 --> 00:02:57,190 Dahil kapag sinusubukan mong paghusayin, halimbawa, ito ay kung ano ang mangyayari. 103 00:02:57,190 --> 00:02:58,580 >> Kaya narito ang isang gorgeous larawan. 104 00:02:58,580 --> 00:02:59,720 Ito ay sariling Daven CS50 ni. 105 00:02:59,720 --> 00:03:03,740 At ipagpalagay na gusto naming tumuon in sa twinkle sa kanyang mga mata, 106 00:03:03,740 --> 00:03:05,870 o ang salamin ng masamang tao na noon ay malinaw na 107 00:03:05,870 --> 00:03:07,820 nakunan ng seguridad camera. 108 00:03:07,820 --> 00:03:10,330 Ito ay kung ano ang mangyayari kapag mag-zoom in ka sa isang imahe na 109 00:03:10,330 --> 00:03:14,060 mayroon lamang isang tiyak na numero ng mga bit na nauugnay dito. 110 00:03:14,060 --> 00:03:15,420 >> Iyon ay kung ano ang iyong makukuha. 111 00:03:15,420 --> 00:03:19,190 At sa katunayan, sa Daven ng mata ay ngunit apat, siguro anim na mga pixel 112 00:03:19,190 --> 00:03:22,110 na bumuo ng kung ano mismo ang ay glimmering doon. 113 00:03:22,110 --> 00:03:25,890 Kaya Problema Set Four ay sa huli ay may mong galugarin ang mundo na ito, lalo na 114 00:03:25,890 --> 00:03:28,090 sa pamamagitan ng likas na katangian ng isang bagay tinatawag naming file i / o, kung saan 115 00:03:28,090 --> 00:03:31,000 i / o lamang magarbong paraan ng sinasabi ng input at output. 116 00:03:31,000 --> 00:03:34,280 >> Kaya kaya sa ngayon, ang lahat ng mga pakikipag-ugnayan nagkaroon kami sa isang computer na 117 00:03:34,280 --> 00:03:36,770 naging sa kalakhan sa iyong keyboard at ang screen, 118 00:03:36,770 --> 00:03:40,770 ngunit hindi kaya magkano na may mga hard disk, o pagse-save ng mga file na higit pa sa iyong mga nai 119 00:03:40,770 --> 00:03:41,620 isulat ang iyong sarili. 120 00:03:41,620 --> 00:03:44,570 Ang iyong mga programa sa gayon ay malayo mayroon Hindi pa paglikha, at pagse-save, 121 00:03:44,570 --> 00:03:46,270 at pag-update ng kanilang sariling mga file. 122 00:03:46,270 --> 00:03:47,150 >> Well, kung ano ang isang file? 123 00:03:47,150 --> 00:03:48,105 Well, isang bagay tulad ng isang JPEG. 124 00:03:48,105 --> 00:03:50,520 Ito ay isang imahe na maaari mong mayroon o i-upload sa Facebook, 125 00:03:50,520 --> 00:03:51,690 o makita kahit saan sa web. 126 00:03:51,690 --> 00:03:54,460 Sa katunayan, na larawan namin lamang nakita ng Daven ay isang JPEG. 127 00:03:54,460 --> 00:03:57,570 At kung ano ang kawili-wiling tungkol sa mga file tulad ng mga JPEG 128 00:03:57,570 --> 00:04:02,170 ay na sila ay nakilala, karaniwan, sa pamamagitan ng ilang mga pattern ng bits. 129 00:04:02,170 --> 00:04:05,200 >> Sa ibang salita, ano ito na Tinutukoy ang isang JPEG mula sa isang GIF 130 00:04:05,200 --> 00:04:08,109 mula sa isang ping mula sa isang Word dokumento mula sa isang Excel file? 131 00:04:08,109 --> 00:04:09,900 Well, iba ito lamang pattern ng bits. 132 00:04:09,900 --> 00:04:12,820 At ang mga iba't ibang mga pattern ay karaniwan ay sa simula ng mga file na iyon. 133 00:04:12,820 --> 00:04:18,200 >> Kaya na kapag binubuksan ng Salita ng iyong computer doc, o kapag nagbukas ng isang JPEG isang computer, 134 00:04:18,200 --> 00:04:20,940 ito mukhang karaniwang sa unang ilang mga piraso sa file. 135 00:04:20,940 --> 00:04:24,059 At kung kinikilala nito ang isang pattern, sinasabi nito, oh, ito ay isang larawan. 136 00:04:24,059 --> 00:04:25,850 Hayaan akong ipakita ito sa ang gumagamit na ito bilang isang graphic. 137 00:04:25,850 --> 00:04:27,870 O kaya naman, oh, ito mukhang isang Word doc. 138 00:04:27,870 --> 00:04:30,480 Hayaan akong ipakita ito sa mga gumagamit na ito bilang isang sanaysay. 139 00:04:30,480 --> 00:04:33,020 >> Kaya halimbawa, mga JPEG, ito ay lumiliko out, ay 140 00:04:33,020 --> 00:04:35,460 medyo sopistikadong sa ilalim ng hood. 141 00:04:35,460 --> 00:04:40,140 Subalit ang unang tatlong bytes sa karamihan ng mga araw- JPEG magsimula sa mga tatlong numero. 142 00:04:40,140 --> 00:04:44,680 Kaya byte zero, isa, at dalawang mga, sa karamihan sa bawat JPEG, 255, at pagkatapos ay ang numero 143 00:04:44,680 --> 00:04:46,675 216, pagkatapos ay ang numero 255. 144 00:04:46,675 --> 00:04:48,990 >> At kung ano ang magagawa mong upang simulan ang paggawa sa susunod na linggo 145 00:04:48,990 --> 00:04:52,920 ay talagang poking sa ilalim ng hood ng mga file tulad ng mga JPEG 146 00:04:52,920 --> 00:04:57,210 at tulad ng bitmap na file, at nakakakita kung ano ang palagi nang naging doon para sa hangga't 147 00:04:57,210 --> 00:04:58,650 bilang ka pa gamit ang isang computer. 148 00:04:58,650 --> 00:05:01,860 >> Ngunit kung ano ang doon ay hindi karaniwan nakasulat na tulad ng mga numero ng decimal tulad nito. 149 00:05:01,860 --> 00:05:04,620 Mga siyentipiko computer na hindi ay may posibilidad na makipag-usap sa decimal. 150 00:05:04,620 --> 00:05:06,139 Hindi nila talaga makipag-usap sa binary. 151 00:05:06,139 --> 00:05:07,930 Karaniwan, kapag gusto naming upang ipahayag ang mga numero, 152 00:05:07,930 --> 00:05:10,710 talaga naming gamitin hexadecimal, saan ay maaari mong isipin 153 00:05:10,710 --> 00:05:13,027 mula sa, sabihin nating, Problema Set Ang isa, na hinamon 154 00:05:13,027 --> 00:05:14,610 mong isipin ang tungkol sa ibang system. 155 00:05:14,610 --> 00:05:17,170 >> Kami, siyempre, ang pamilyar may decimal, zero sa pamamagitan ng siyam. 156 00:05:17,170 --> 00:05:18,215 Usapan natin ang tungkol sa binary. 157 00:05:18,215 --> 00:05:20,710 At hindi kami talaga mayroon gamitin ang ganoong karaming dito 158 00:05:20,710 --> 00:05:22,470 sa labas, dahil computer ay gagamit na iyon. 159 00:05:22,470 --> 00:05:24,900 Ngunit programmer ay napaka madalas, ngunit hindi laging, 160 00:05:24,900 --> 00:05:29,360 gumamit ng hexadecimal, na kung saan ay nangangahulugan lamang mayroon kang 16 na titik sa iyong alpabeto, 161 00:05:29,360 --> 00:05:31,330 bilang kabaligtaran sa dalawa o 10. 162 00:05:31,330 --> 00:05:34,530 >> Kaya paano mo bilangin sa mas mataas na kaysa sa siyam sa hexadecimal? 163 00:05:34,530 --> 00:05:41,120 Pumunta kang 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, sa pamamagitan lamang ng convention. 164 00:05:41,120 --> 00:05:43,540 Ngunit kung ano ang key ay na ang bawat ng mga ay isang solong simbolo. 165 00:05:43,540 --> 00:05:44,340 Walang 10. 166 00:05:44,340 --> 00:05:48,400 Walang 11, per se, dahil bawat ng iyong mga digit, gusto lamang sa decimal 167 00:05:48,400 --> 00:05:51,940 at tulad lamang ng sa binary, dapat lamang maging isang solong character, sa pamamagitan ng convention. 168 00:05:51,940 --> 00:05:55,280 >> Kaya na pagkatapos ay ang alpabeto mayroon kami sa aming pagtatapon para sa hexadecimal. 169 00:05:55,280 --> 00:05:58,600 Kaya kung ano ang hitsura ng isang JPEG tulad ng kung ay upang isulat ang mga unang tatlong 170 00:05:58,600 --> 00:06:01,980 Bytes hindi bilang decimal ngunit, halimbawa, bilang hexadecimal? 171 00:06:01,980 --> 00:06:03,640 At kung bakit ay hex kahit lahat na kapaki-pakinabang? 172 00:06:03,640 --> 00:06:05,290 >> Well, isang mabilis na pagtingin sa isang halimbawa. 173 00:06:05,290 --> 00:06:09,030 Kaya kung isulat ko ang mga bit na kumakatawan sa mga decimal numbers-- 174 00:06:09,030 --> 00:06:12,450 maaaring ito ay isang maliit na kalawangin ngayon mula sa ilang linggo likod, 175 00:06:12,450 --> 00:06:14,820 ngunit sa kaliwa ng isa at ang karapatan isa ay medyo madali. 176 00:06:14,820 --> 00:06:17,990 255 ay ang pinakamalaking bilang namin maaaring kumatawan sa walong bits. 177 00:06:17,990 --> 00:06:18,820 Iyon ay ang lahat ng mga bago. 178 00:06:18,820 --> 00:06:21,320 Kaya ang isa lamang na mildly kawili-wiling ay ang isa gitna. 179 00:06:21,320 --> 00:06:24,700 At kung uri ng mong gawin ang matematika, ikaw deduce na, sa katunayan, 180 00:06:24,700 --> 00:06:27,949 na pattern ng isa at mga zero ay kumakatawan sa 216. 181 00:06:27,949 --> 00:06:30,240 Kaya ipaalam stipulate lamang para sa ngayon na ang mga ito ay tama. 182 00:06:30,240 --> 00:06:31,730 Ngunit bakit kagiliw-giliw na ito? 183 00:06:31,730 --> 00:06:33,970 >> Well, isang byte, siyempre, ay walong bits. 184 00:06:33,970 --> 00:06:38,980 At ito ay lumiliko out na kung sa tingin mo ng isang byte bilang dalawang chunks ng apat na piraso, 185 00:06:38,980 --> 00:06:39,500 tulad nito. 186 00:06:39,500 --> 00:06:41,000 Hayaan akong magdagdag lang ng ilang espasyo. 187 00:06:41,000 --> 00:06:42,550 Kaya bago, pagkatapos. 188 00:06:42,550 --> 00:06:46,520 Lamang ako nagdagdag ng ilang mga puting espasyo alang-alang sa visualization dito. 189 00:06:46,520 --> 00:06:51,840 Paano maaari naming kumakatawan na ngayon sa, sabihin nating, hexadecimal bawat Quad ng mga piraso, 190 00:06:51,840 --> 00:06:52,880 bawat hanay ng mga apat na piraso? 191 00:06:52,880 --> 00:06:56,420 >> Kaya halimbawa, sa kaliwa ngayon, mayroon kaming 1111 sa binary. 192 00:06:56,420 --> 00:07:00,420 Ano ang na numero sa decimal, kung gagawin mo ang matematika? 193 00:07:00,420 --> 00:07:03,780 Kayo ay may lugar sa buhay, ang lugar twos, ang lugar fours, at ang lugar eights. 194 00:07:03,780 --> 00:07:04,341 >> Madla: 15. 195 00:07:04,341 --> 00:07:05,340 David J. MALAN: Ito ay 15. 196 00:07:05,340 --> 00:07:08,340 Kaya kung ang ginagawa namin walong plus apat plus dalawang plus isa, makakakuha tayo ng 15. 197 00:07:08,340 --> 00:07:11,790 Kaya maaari kong isulat 15 sa ibaba 1111, ngunit ang buong punto dito 198 00:07:11,790 --> 00:07:13,190 ay hexadecimal, hindi decimal. 199 00:07:13,190 --> 00:07:17,310 Kaya sa halip na pagsusulat down na 15, 1-5, Pupunta ako sa isulat iyon sa hex, 200 00:07:17,310 --> 00:07:22,311 na kung sa tingin mo pabalik, kung mayroon kang zero sa pamamagitan ng f, kung ano ang 15 ng pagpunta sa maging? 201 00:07:22,311 --> 00:07:22,810 Madla: f. 202 00:07:22,810 --> 00:07:24,434 David J. MALAN: Kaya ito ay lumiliko out ito ni f. 203 00:07:24,434 --> 00:07:29,140 At maaari kang magtrabaho na sumali sa pamamagitan ng sinasabi, na rin, kung ang isang 10, pagkatapos ay OK, f ay 15. 204 00:07:29,140 --> 00:07:33,250 Kaya nga, maaari naming muling isulat ang ang parehong hanay ng mga numero bilang f f. 205 00:07:33,250 --> 00:07:35,750 At pagkatapos ay kung gumawa kami ng kaunting matematika, ipapakita namin deduce na iyon d. 206 00:07:35,750 --> 00:07:38,650 Eight ay medyo madali, dahil kami magkaroon ng isa sa lugar eights. 207 00:07:38,650 --> 00:07:40,620 At pagkatapos, mayroon kaming higit pang f f ng ilang. 208 00:07:40,620 --> 00:07:44,669 >> Kaya kung ano ang mga tao ay may posibilidad na gawin sa pamamagitan ng convention kapag gumamit sila ng hexadecimal ay lang nila 209 00:07:44,669 --> 00:07:47,710 isulat ito ng kaunti pa succinctly, mapupuksa ang karamihan sa mga na white space. 210 00:07:47,710 --> 00:07:50,890 At upang maging napaka malinaw sa makatarungan mga mambabasa na ito ay hexadecimal, 211 00:07:50,890 --> 00:07:54,670 ang simpleng convention sa mga tao ay isulat mo zero 212 00:07:54,670 --> 00:07:58,000 x, na walang kahulugan ng iba pang mga kaysa sa isang visual na tagatukoy ng, 213 00:07:58,000 --> 00:07:59,590 dito ay isang hex numero. 214 00:07:59,590 --> 00:08:04,210 >> At pagkatapos, ilagay mo ang dalawang mga digit, f f sa kasong ito, pagkatapos ay d isang, pagkatapos ay i-f f. 215 00:08:04,210 --> 00:08:06,700 Kaya mahaba kuwento maikli, hexadecimal lamang ay may gawi 216 00:08:06,700 --> 00:08:11,990 upang maging kapaki-pakinabang dahil sa bawat isa sa kanyang digit, zero sa pamamagitan ng f, perpektong linya 217 00:08:11,990 --> 00:08:13,880 up sa isang pattern ng apat na piraso. 218 00:08:13,880 --> 00:08:18,080 >> Kaya kung mayroon kang dalawang digit hexadecimal, zero sa pamamagitan ng F, muli at muli, 219 00:08:18,080 --> 00:08:20,256 na nagbibigay sa iyo ng perpektong walong piraso o isa byte. 220 00:08:20,256 --> 00:08:22,380 Kaya na ang dahilan kung bakit ito ay may gawi na maging conventionally kapaki-pakinabang. 221 00:08:22,380 --> 00:08:24,990 Walang intelektwal na pagmamay- nilalaman talagang lampas na, 222 00:08:24,990 --> 00:08:27,010 bukod sa aktwal na utility nito. 223 00:08:27,010 --> 00:08:29,310 >> Ngayon ang mga JPEG ay hindi lamang ang mag-file format para sa graphics. 224 00:08:29,310 --> 00:08:33,230 Maaari mong isipin ang na may mga mga file na tulad nito sa mundo, 225 00:08:33,230 --> 00:08:34,830 hindi bababa sa mula sa isang ilang taon likod. 226 00:08:34,830 --> 00:08:37,580 >> Kaya ito ay talagang na naka-install sa Windows XP 227 00:08:37,580 --> 00:08:39,960 sa milyun-milyong mga PC sa buong mundo. 228 00:08:39,960 --> 00:08:43,000 At ito ay isang bitmap na file, BMP. 229 00:08:43,000 --> 00:08:47,690 At isang bitmap file, na makikita mo sa tabi linggo, nangangahulugan lamang sa isang pattern ng mga tuldok, 230 00:08:47,690 --> 00:08:51,710 pixels habang ang mga ito ay tinatawag na, isang map sa bits, talaga. 231 00:08:51,710 --> 00:08:55,160 >> Kaya kung ano ang kawili-wiling, bagaman, tungkol sa format ng file, BMP, ay 232 00:08:55,160 --> 00:08:58,590 na sa ilalim ng hood, ito ay may higit sa bytes tatlo lamang 233 00:08:58,590 --> 00:09:01,020 na sumulat ng header nito, kaya upang makipag-usap, ang unang ilang mga kagat. 234 00:09:01,020 --> 00:09:03,330 Ito talaga ang itsura ng kaunti kumplikado sa unang tingin. 235 00:09:03,330 --> 00:09:04,704 At makikita mo ito sa P set. 236 00:09:04,704 --> 00:09:06,810 At ang pagkakaroon ng isang bagay partikular na sa labas ng ito ngayon 237 00:09:06,810 --> 00:09:10,720 Hindi kaya mahalaga, tulad ng sa katotohanang na sa simula ng bawat bitmap 238 00:09:10,720 --> 00:09:13,823 file, isang graphical na format, mayroong isang buong bungkos ng mga numero. 239 00:09:13,823 --> 00:09:14,980 240 00:09:14,980 --> 00:09:16,720 >> Ngayon Microsoft, ang may-akda ng format na ito, 241 00:09:16,720 --> 00:09:18,820 ay may gawi na tumawag sa mga bagay na hindi ints at char 242 00:09:18,820 --> 00:09:22,259 at sa kamay ngunit salita at d mga salita at longs at bytes. 243 00:09:22,259 --> 00:09:23,800 Kaya ang mga ito ay lamang iba't ibang mga uri ng data. 244 00:09:23,800 --> 00:09:25,170 Ang mga ito ay iba't ibang mga pangalan para sa parehong bagay. 245 00:09:25,170 --> 00:09:26,740 Ngunit makikita mo na sa P Magtakda ng Four. 246 00:09:26,740 --> 00:09:31,450 >> Ngunit ito ay lamang na sabihin na kung ang isang tao double-click ang ilang mga .BMP file sa kanyang 247 00:09:31,450 --> 00:09:35,015 o ang kanyang hard drive, at isang window ay magbubukas up na nagpapakita sa kanya na imahe, 248 00:09:35,015 --> 00:09:38,500 na nangyari dahil sa operating baka napansin system ay hindi lamang 249 00:09:38,500 --> 00:09:41,460 ang extension .BMP file sa pangalan ng file, 250 00:09:41,460 --> 00:09:45,010 kundi pati na rin ang katotohanan na mayroong ilan convention sa pattern ng mga piraso 251 00:09:45,010 --> 00:09:47,490 sa pinakadulo simula ng bitmap na file. 252 00:09:47,490 --> 00:09:50,270 >> Ngunit ipaalam tumuon sa ngayon tulad ng isang kumplikadong mga file, 253 00:09:50,270 --> 00:09:52,120 ngunit sa halip sa isang bagay na katulad nito. 254 00:09:52,120 --> 00:09:55,190 Ipagpalagay dito sa GEdit, ako Mayroon lamang ang Beginnings 255 00:09:55,190 --> 00:09:57,070 ng isang programa na medyo simple. 256 00:09:57,070 --> 00:09:58,860 Nakakuha ako ng ilang Kabilang up tuktok. 257 00:09:58,860 --> 00:10:02,120 Ngayon ay na-Nakakuha ako #include "structs.h" ngunit Kukunin ko bumalik sa na sa ilang sandali. 258 00:10:02,120 --> 00:10:03,974 Ngunit ito ay kapaki-pakinabang para sa ngayon. 259 00:10:03,974 --> 00:10:05,890 Kaya ito ay isang programa na pupuntahan ipatupad 260 00:10:05,890 --> 00:10:07,335 tulad ng database ng mga registrar ng. 261 00:10:07,335 --> 00:10:09,710 Kaya ng database ng mga mag-aaral, at bawat mag-aaral sa mundo 262 00:10:09,710 --> 00:10:13,190 May pangalan at isang bahay at marahil ilang iba pang mga bagay-bagay, ngunit itinatago namin itong simple. 263 00:10:13,190 --> 00:10:15,140 Ang bawat mag-aaral ay may isang pangalan at isang bahay. 264 00:10:15,140 --> 00:10:17,700 >> Kaya kung Nais kong magsulat ng isang programa na kung saan ang layunin sa buhay 265 00:10:17,700 --> 00:10:19,860 ay upang umulit lamang mula sa ZERO sa hanggang sa tatlong, 266 00:10:19,860 --> 00:10:22,070 kung mayroong tatlong mga mag-aaral sa Harvard University. 267 00:10:22,070 --> 00:10:25,350 At gusto ko lang upang makakuha ng, gamit GetString, pangalan ng bawat mag-aaral at bahay, 268 00:10:25,350 --> 00:10:26,600 at pagkatapos ay i-print lamang ang mga out. 269 00:10:26,600 --> 00:10:28,630 >> Ito ay uri ng tulad ng Linggo Ang isa, Linggo Dalawang bagay-bagay ngayon, 270 00:10:28,630 --> 00:10:30,810 kung saan ko gusto lamang para sa loop o isang bagay tulad na. 271 00:10:30,810 --> 00:10:34,500 At gusto kong tumawag sa GetString ng ilang beses, at pagkatapos ay i-print f nang ilang beses. 272 00:10:34,500 --> 00:10:37,340 Kaya kung paano maaaring kong gawin ito, bagaman, kapag ang parehong pangalan at isang bahay 273 00:10:37,340 --> 00:10:39,070 kasangkot para sa bawat mag-aaral? 274 00:10:39,070 --> 00:10:42,830 >> Kaya ang aking unang instinct maaari maging upang gawin ang isang bagay na katulad nito. 275 00:10:42,830 --> 00:10:49,620 Maaaring ko muna sabihin, mahusay, ninyo ako, sabihin, isang array ng mga string na tinatawag na mga pangalan. 276 00:10:49,620 --> 00:10:51,530 At hindi ko nais ang isang hardcode tatlong dito. 277 00:10:51,530 --> 00:10:53,064 Ano ang gagawin ko nais upang ilagay doon? 278 00:10:53,064 --> 00:10:55,730 Kaya ESTUDYANTE, dahil ito lamang isang pare-pareho ang ipinahayag sa itaas, 279 00:10:55,730 --> 00:10:57,860 kaya lang hindi ko kailangang mag-hardcode tatlong sa maraming mga lugar. 280 00:10:57,860 --> 00:11:00,859 Sa ganitong paraan, maaari ko ba itong baguhin sa isang lugar, at ito ay nakakaapekto sa isang pagbabago sa lahat ng dako. 281 00:11:00,859 --> 00:11:04,470 At pagkatapos ay, maaari kong gawin Naglalaman string ESTUDYANTE. 282 00:11:04,470 --> 00:11:10,250 >> At ngayon, maaari kong gawin ang isang bagay tulad para sa (int i = 0; i 00:11:14,390 Kaya ako mabilis mag-type, ngunit ito ay marahil pamilyar na syntax ngayon. 284 00:11:14,390 --> 00:11:17,030 >> At ngayon, ito ay mas kamakailang. 285 00:11:17,030 --> 00:11:22,890 Kung gusto ko ang ilalagay sa ika-i ang Pangalan ng mag-aaral, sa palagay ko gagawin ko ito. 286 00:11:22,890 --> 00:11:26,480 At pagkatapos, hindi pangalan ngunit bahay bracket i. 287 00:11:26,480 --> 00:11:29,930 Gagawin ko ito, GetString, at hayaang sa akin bumalik at ayusin ang linyang ito. 288 00:11:29,930 --> 00:11:30,430 Sumang-ayon? 289 00:11:30,430 --> 00:11:31,200 Hindi sang-ayon? 290 00:11:31,200 --> 00:11:32,366 Ito ay hindi napaka-user-friendly. 291 00:11:32,366 --> 00:11:33,890 Hindi ko pa sinabi sa mga user kung ano ang gagawin. 292 00:11:33,890 --> 00:11:36,520 >> Ngunit ngayon, kung ako din Nais upang mamaya, sabihin 293 00:11:36,520 --> 00:11:40,060 sabihin nating, i-print ang mga bagay na ito out-- kaya TODO sa ibang pagkakataon. 294 00:11:40,060 --> 00:11:42,330 Pupunta ako sa magagawa sa this-- ito arguably sabihin 295 00:11:42,330 --> 00:11:45,970 isang tamang pagpapatupad ng pagkuha ng mga pangalan at bahay, tatlo 296 00:11:45,970 --> 00:11:48,870 sa kanila kabuuan ng bawat isa, mula sa isang user. 297 00:11:48,870 --> 00:11:51,280 >> Ngunit ito ay hindi napakagandang disenyo, tama? 298 00:11:51,280 --> 00:11:55,220 Paano kung ang mag-aaral ay hindi lamang isang pangalan at isang bahay, kundi pati na rin ng numero ng ID, 299 00:11:55,220 --> 00:11:57,770 at isang numero ng telepono, at ng isang email address, 300 00:11:57,770 --> 00:12:00,280 at marahil isang home page, at siguro isang hawakan ng Twitter, 301 00:12:00,280 --> 00:12:03,730 at anumang bilang ng mga iba pang mga detalye na nauugnay sa isang mag-aaral o ng isang tao, 302 00:12:03,730 --> 00:12:04,610 higit pa sa pangkalahatan. 303 00:12:04,610 --> 00:12:07,720 Paano namin simulan upang magdagdag ng pag-andar sa programang ito? 304 00:12:07,720 --> 00:12:14,080 >> Well, nararamdaman kong ang pinakasimpleng paraan maaari maging upang gawin ang isang bagay tulad ng, sabihin nating, 305 00:12:14,080 --> 00:12:16,490 int id ESTUDYANTE. 306 00:12:16,490 --> 00:12:18,380 Kaya maaari ko bang ilagay ang lahat ng kanilang mga ID sa mga doon. 307 00:12:18,380 --> 00:12:22,240 At pagkatapos ay, para sa isang bagay tulad ng mga numero ng telepono, 308 00:12:22,240 --> 00:12:24,400 Hindi ako sigurado kung paano i- kumakatawan na ngayon. 309 00:12:24,400 --> 00:12:30,280 Kaya sabihin sige at lang tawag ito twitters ESTUDYANTE, na 310 00:12:30,280 --> 00:12:33,550 ay isang maliit na kakaiba, but-- at isang bungkos higit pang mga field. 311 00:12:33,550 --> 00:12:36,360 >> Sinimulan ko upang epektibong kopyahin at i-paste dito. 312 00:12:36,360 --> 00:12:39,416 At ito ay pagpunta sa palaguin ang kaakit-akit unwieldy medyo mabilis, i-right? 313 00:12:39,416 --> 00:12:42,290 Gusto hindi ito maging maganda kung mayroong sa mundo ng istraktura ng data na kilala 314 00:12:42,290 --> 00:12:45,600 hindi bilang isang int o isang string, ngunit isang bagay mas mataas na antas, ang isang abstraction, kaya 315 00:12:45,600 --> 00:12:47,570 upang makipag-usap, na kilala bilang isang mag-aaral? 316 00:12:47,570 --> 00:12:50,220 C ay hindi dumating na may built-in pag-andar para sa mga mag-aaral, 317 00:12:50,220 --> 00:12:52,260 ngunit kung ano kung nais kong bigyan ito tulad? 318 00:12:52,260 --> 00:12:55,640 >> Well, ito ay lumiliko out, pupuntahan ko buksan ang isang file na tinatawag na structs.h dito, 319 00:12:55,640 --> 00:12:57,090 at maaari mong gawin eksakto na. 320 00:12:57,090 --> 00:12:58,290 At kami ay pagpunta upang simulan ang paggawa na ito ngayon. 321 00:12:58,290 --> 00:13:01,490 At sa ilalim ng hood ng P Set Tatlong, na iyong na-paggawa na ito ngayon. 322 00:13:01,490 --> 00:13:05,920 Walang ganoong bagay bilang isang g RECT o g isang hugis-itlog sa programming language C. 323 00:13:05,920 --> 00:13:10,570 >> Kakailanganin ng mga tao sa Stanford ipinatupad mga mga uri ng data sa pamamagitan ng paggamit na ito diskarte dito, 324 00:13:10,570 --> 00:13:13,900 Ang pagdeklara ng kanilang sariling mga bagong data mga uri ng paggamit ng bagong keyword 325 00:13:13,900 --> 00:13:16,744 na tinatawag na struct at isa pa isa na tinatawag na typedef. 326 00:13:16,744 --> 00:13:19,660 At sa katunayan, kahit na ang syntax mukhang ng kaunti mula sa iba't ibang mga bagay-bagay 327 00:13:19,660 --> 00:13:23,550 nasaksihan namin bago, sa prinsipyo, ito ay napaka-simple. 328 00:13:23,550 --> 00:13:25,297 >> Ito lamang ay nangangahulugan na "tukuyin ang isang uri." 329 00:13:25,297 --> 00:13:27,255 Iyon ang nangyayari na maging isang istraktura, at isang istraktura 330 00:13:27,255 --> 00:13:29,400 ay tulad ng isang lalagyan para sa maraming mga bagay. 331 00:13:29,400 --> 00:13:31,780 At istraktura na ay pagpunta upang magkaroon ng isang string na tinatawag na pangalan, 332 00:13:31,780 --> 00:13:33,210 at isang string na tinatawag na bahay. 333 00:13:33,210 --> 00:13:37,520 At ng matawagan lamang para sa kaginhawahan ng ipaalam, ito ang buong istraktura ng data mag-aaral. 334 00:13:37,520 --> 00:13:40,320 >> Kaya sa sandaling nakarating ka na sa ang semicolon, mayroon kang ngayon 335 00:13:40,320 --> 00:13:43,280 Nalikha ang iyong sariling data uri ng mag-aaral na tinatawag na 336 00:13:43,280 --> 00:13:46,420 na ngayon ay nakatayo sa tabi int, at float, at char, at string, 337 00:13:46,420 --> 00:13:50,270 at g RECT, at g hugis-itlog, at anumang mga numero ng iba pang mga bagay na tao ang imbento. 338 00:13:50,270 --> 00:13:53,340 >> Kaya kung ano ang kapaki-pakinabang tungkol sa ngayon ay kung pumunta ako pabalik 339 00:13:53,340 --> 00:13:57,430 sa struct 0 at tapusin ito pagpapatupad, na ako ay nagsulat 340 00:13:57,430 --> 00:14:02,080 nang maaga dito, mapapansin na ang lahat ng maiiwasang messiness na 341 00:14:02,080 --> 00:14:05,490 ay tungkol sa upang simulan ang nangyayari bilang Nagdagdag ako mga numero ng telepono at twitters at ang lahat ng 342 00:14:05,490 --> 00:14:07,370 mga iba pang mga bagay sa Kahulugan ng isang mag-aaral, 343 00:14:07,370 --> 00:14:11,810 ngayon ito succinctly balot up tulad ng array na isa lamang sa mag-aaral. 344 00:14:11,810 --> 00:14:15,500 >> At bawat isa sa mga mag-aaral ngayon ay may maramihang mga bagay sa loob nito. 345 00:14:15,500 --> 00:14:16,930 Kaya na nag-iiwan lamang ng isang katanungan. 346 00:14:16,930 --> 00:14:19,700 Paano mo makakuha ng sa pangalan, at ang bahay, at ang ID, 347 00:14:19,700 --> 00:14:21,640 at ang anumang iba ay sa loob ng mag-aaral? 348 00:14:21,640 --> 00:14:22,930 Super simple, pati na rin. 349 00:14:22,930 --> 00:14:25,730 Bagong syntax, ngunit isang simpleng ideya. 350 00:14:25,730 --> 00:14:29,239 >> Index mo lang sa array, tulad ng ginawa namin noong nakaraang linggo at ito. 351 00:14:29,239 --> 00:14:31,030 At kung ano ang malinaw na ang bagong piraso ng syntax? 352 00:14:31,030 --> 00:14:32,590 353 00:14:32,590 --> 00:14:35,880 Lang., Na nangangahulugang "pumunta sa loob ng istraktura at makakuha ng mga patlang na tinatawag na 354 00:14:35,880 --> 00:14:39,030 pangalan, kunin ang field na tinatawag na bahay, makuha ang field na tinatawag na mag-aaral. " 355 00:14:39,030 --> 00:14:41,940 >> Kaya sa P Set Tatlong, kung ikaw ay Nagsisikap pa rin sa iyon, 356 00:14:41,940 --> 00:14:44,020 at karamihan ng mga tao pa rin ay, mapagtanto na tulad ng sa iyo 357 00:14:44,020 --> 00:14:46,130 simulan ang paggamit ng mga bagay tulad ng g rects at g ovals 358 00:14:46,130 --> 00:14:50,201 at iba pang mga bagay na hindi mukhang nagmumula sa Linggo Zero, One, o Dalawang, 359 00:14:50,201 --> 00:14:52,950 Napagtanto na iyon ay dahil sa Stanford ipinahayag ng ilang mga bagong uri ng data. 360 00:14:52,950 --> 00:14:56,160 >> At sa katunayan, iyon mismo ang idedetalye namin gawin, pati na rin, sa P Set Apat na kapag, 361 00:14:56,160 --> 00:14:59,880 simulan namin upang harapin ang mga bagay tulad ng mga imahe, bitmaps, at higit pa. 362 00:14:59,880 --> 00:15:02,882 Kaya na ang isang teaser at isang lamang modelo ng isip para sa kung ano ang darating. 363 00:15:02,882 --> 00:15:04,590 Ngayon, procrastinated ko medyo ito umaga. 364 00:15:04,590 --> 00:15:09,560 Ako ay uri ng malaman upang makita kung ano ang Microsoft wallpaper talaga 365 00:15:09,560 --> 00:15:10,310 kamukha ngayon. 366 00:15:10,310 --> 00:15:15,200 At ito ay lumiliko out isang tao noong 2006 aktwal na napunta sa mga halos tiyak 367 00:15:15,200 --> 00:15:19,210 parehong lugar sa retrato sa katotohanan ano kamukha na mga araw na ito. 368 00:15:19,210 --> 00:15:21,380 Ang patlang ay ngayon ng kaunti overgrown. 369 00:15:21,380 --> 00:15:24,850 >> Kaya nagsasalita ngayon ng mga imahe, ni magdala pabalik Daven dito hayaan 370 00:15:24,850 --> 00:15:26,890 sa screen at Nicholas, at paalalahanan lamang sa iyo 371 00:15:26,890 --> 00:15:30,540 na kung nais mong sumali sa amin para sa tanghalian ito Biyernes, magtungo sa aming karaniwang URL 372 00:15:30,540 --> 00:15:31,440 dito. 373 00:15:31,440 --> 00:15:33,530 >> Kaya kung saan ay mag-iwan namin off sa Lunes? 374 00:15:33,530 --> 00:15:35,140 Nagpakilala kami ang problemang ito, tama? 375 00:15:35,140 --> 00:15:37,610 Ito ay tila hindi isang wastong pagpapatupad ng swap, 376 00:15:37,610 --> 00:15:40,460 kung saan mo pagkuha dalawang ints, na tinatawag na isa ng, isa na tinatawag na b, 377 00:15:40,460 --> 00:15:44,130 magpalit ang mga ito, tulad lamang ng Laura ginawa dito sa stage na may gatas at ang tubig, 378 00:15:44,130 --> 00:15:46,820 sa pamamagitan ng paggamit ng pansamantalang variable, o isang walang laman na tasa, 379 00:15:46,820 --> 00:15:50,540 nang sa gayon ay maaaring ilagay namin b sa isang at sa b nang hindi gumagawa ng gulo ng mga bagay. 380 00:15:50,540 --> 00:15:51,560 Ginamit namin ang isang variable. 381 00:15:51,560 --> 00:15:52,870 Ito ay tinatawag na Temp. 382 00:15:52,870 --> 00:15:55,520 >> Ngunit ano ay ang pangunahing problema sa ang code na ito sa Lunes? 383 00:15:55,520 --> 00:15:57,700 384 00:15:57,700 --> 00:15:58,870 Ano ang problema dito? 385 00:15:58,870 --> 00:16:00,106 386 00:16:00,106 --> 00:16:00,605 Oo. 387 00:16:00,605 --> 00:16:01,970 >> Madla: Ito ay tumatagal ng mas maraming espasyo. 388 00:16:01,970 --> 00:16:04,719 >> David J. MALAN: Dadalhin hanggang higit pa espasyo, dahil ako ako gamit ang isang variable, 389 00:16:04,719 --> 00:16:05,400 at iyon ang OK. 390 00:16:05,400 --> 00:16:07,300 Iyon ay totoo, ngunit ako pagpunta sa sabihin na OK lang. 391 00:16:07,300 --> 00:16:10,030 Ito ay 32 bits lamang sa enggrandeng scheme ng mga bagay, kaya hindi isang malaking deal. 392 00:16:10,030 --> 00:16:10,655 Iba pang mga saloobin? 393 00:16:10,655 --> 00:16:12,572 Madla: swaps Ito lamang ang mga variable lokal. 394 00:16:12,572 --> 00:16:13,571 David J. MALAN: Eksaktong. 395 00:16:13,571 --> 00:16:15,090 Swaps Ito lamang ang mga variable lokal. 396 00:16:15,090 --> 00:16:18,173 Dahil anumang oras mong tawagan ang isang function-- kapag Ako ang nasa trays mula sa Annenberg 397 00:16:18,173 --> 00:16:19,840 huling oras, mayroon kang pangunahing sa ibaba. 398 00:16:19,840 --> 00:16:23,560 Sa lalong madaling tumawag ka ng isang function na tinatawag na magpalitan, magpalitan ay hindi makakuha ng x at y, 399 00:16:23,560 --> 00:16:24,400 ang orihinal na halaga. 400 00:16:24,400 --> 00:16:26,392 Ano ang swap get, nag-claim namin? 401 00:16:26,392 --> 00:16:27,100 Madla: Ang mga kopya. 402 00:16:27,100 --> 00:16:28,090 David J. MALAN: Kaya mga kopya ng mga ito. 403 00:16:28,090 --> 00:16:31,120 Kaya nakakakuha ito ng isa at dalawa, kung ikaw isipin ang halimbawa mula sa huling beses, 404 00:16:31,120 --> 00:16:34,730 ngunit ang kopya ng isa at dalawa na matagumpay na swapped. 405 00:16:34,730 --> 00:16:38,550 Ngunit sa kasamaang palad sa dulo, mga halaga ay pa rin ang parehong. 406 00:16:38,550 --> 00:16:41,880 Kaya maaari naming makita na ito sa aming mga bagong kaibigan, sana ay GDB, 407 00:16:41,880 --> 00:16:45,180 na mayroon ka o ang TFs at Ca ni Na-paggabay sa iyo patungo gaya ng mga sumusunod. 408 00:16:45,180 --> 00:16:51,210 >> Kaya walang swap pagpapabalik mukhang like-- sabihin buksan ang this-- Mukhang ito. 409 00:16:51,210 --> 00:16:54,160 Nasimulan namin ang x sa isa, y sa dalawa. 410 00:16:54,160 --> 00:16:55,620 Ay nagkaroon ng isang bungkos ng naka-print na f ni. 411 00:16:55,620 --> 00:16:58,080 Ngunit pagkatapos, ang key ng tawag dito ay upang magpalit, na 412 00:16:58,080 --> 00:17:00,260 ay eksaktong code namin Nakita lamang ng ilang sandali ang nakalipas. 413 00:17:00,260 --> 00:17:03,180 Alin ang tama sa unang sulyap, ngunit sa pagtakbo, 414 00:17:03,180 --> 00:17:06,800 ang program na ito ay hindi gumagana, dahil ito ay hindi permanenteng magpalit x at y. 415 00:17:06,800 --> 00:17:10,190 >> Kaya sabihin makita ito, ang isang mabilis na mainit-init hanggang dito sa GDB, isang ./noswap. 416 00:17:10,190 --> 00:17:11,867 417 00:17:11,867 --> 00:17:15,200 Ang isang bungkos ng napakatinding impormasyon na Kukunin ko ang mga rid ng gamit ang Control L sa ngayon. 418 00:17:15,200 --> 00:17:17,516 At ngayon, pupuntahan ko sige at patakbuhin ito. 419 00:17:17,516 --> 00:17:19,349 At sa kasamaang-palad, na ay hindi na kapaki-pakinabang. 420 00:17:19,349 --> 00:17:22,355 Ito ang bumangga sa programa sa loob ng ito programa na tinatawag na GDB, isang debugger, 421 00:17:22,355 --> 00:17:23,730 ngunit hindi ito ipaalam sa akin poke sa paligid. 422 00:17:23,730 --> 00:17:26,229 >> Kaya kung paano ang maaari kong i-pause ang aktwal pagpapatupad sa loob programang ito? 423 00:17:26,229 --> 00:17:27,410 424 00:17:27,410 --> 00:17:28,329 Kaya masira. 425 00:17:28,329 --> 00:17:32,340 At kaya kong masira sa anumang numero, isa, 10, 15 linya. 426 00:17:32,340 --> 00:17:35,530 Ngunit maaari ko rin masira symbolically sa pamamagitan ng sinasabi ng break sa pangunahing. 427 00:17:35,530 --> 00:17:38,980 At na pupuntahan set ng pahinga punto, tila sa 16 na linya sa pangunahing. 428 00:17:38,980 --> 00:17:40,050 At kung saan ay 16 line? 429 00:17:40,050 --> 00:17:42,960 Sabihin pumunta ng hanggang sa ang code at pumunta hanggang sa noswap. 430 00:17:42,960 --> 00:17:46,930 At sa katunayan, 16 linya ay ang pinakaunang sa programa. 431 00:17:46,930 --> 00:17:52,130 >> Kaya ngayon, kung pumunta ako magpatuloy at uri tumakbo oras na ito, ang Enter, naka-pause ito. 432 00:17:52,130 --> 00:17:53,080 Kaya ni poke sa paligid ipaalam. 433 00:17:53,080 --> 00:17:55,716 I-print x-- kung bakit ay x zero? 434 00:17:55,716 --> 00:17:56,705 435 00:17:56,705 --> 00:17:57,830 At huwag pansinin ang dollar sign. 436 00:17:57,830 --> 00:17:59,725 Iyon ay para lamang sa mga fancier paggamit ng programa. 437 00:17:59,725 --> 00:18:00,780 438 00:18:00,780 --> 00:18:03,140 Bakit ay x zero sa sandaling ito? 439 00:18:03,140 --> 00:18:03,640 Oo. 440 00:18:03,640 --> 00:18:07,061 >> Madla: Ito naka-pause bago mismo 16 linya, hindi talagang sa 16 linya. 441 00:18:07,061 --> 00:18:08,060 David J. MALAN: Eksaktong. 442 00:18:08,060 --> 00:18:11,630 GDB, sa pamamagitan ng default, ay naka-pause pagsasagawa lamang bago 16 linya. 443 00:18:11,630 --> 00:18:14,820 Kaya ito ay hindi ipinatupad, na Nangangahulugan x ay ng ilang mga hindi kilalang halaga. 444 00:18:14,820 --> 00:18:17,150 At kami nakakuha ng masuwerteng na ito isang bagay tulad ng malinis zero. 445 00:18:17,150 --> 00:18:20,310 Kaya ngayon kung nagta-type ako sa tabi, ngayon isagawa ito 16. 446 00:18:20,310 --> 00:18:22,000 Ito ay naghihintay para sa akin upang maisagawa 17. 447 00:18:22,000 --> 00:18:23,400 Hayaan akong magpatuloy at i-print ang x. 448 00:18:23,400 --> 00:18:24,094 Ito'y isa. 449 00:18:24,094 --> 00:18:25,260 Hayaan akong sige at i-print y. 450 00:18:25,260 --> 00:18:26,176 Ano ang dapat kong makita ngayon? 451 00:18:26,176 --> 00:18:27,660 452 00:18:27,660 --> 00:18:28,560 >> Madla: [INAUDIBLE] 453 00:18:28,560 --> 00:18:29,165 >> David J. MALAN: Ang isang maliit na louder. 454 00:18:29,165 --> 00:18:30,040 >> Madla: [INAUDIBLE] 455 00:18:30,040 --> 00:18:30,537 456 00:18:30,537 --> 00:18:32,120 David J. MALAN: Hindi masyadong isang consensus. 457 00:18:32,120 --> 00:18:34,760 Kaya oo, nakita namin ang ilang mga halaga ng basura. 458 00:18:34,760 --> 00:18:37,862 Ngayon, y ay 134514064 doon. 459 00:18:37,862 --> 00:18:39,320 Well, ito ay lamang ng ilang mga halaga ng basura. 460 00:18:39,320 --> 00:18:41,350 Aking programa ay gumagamit ng RAM para sa iba't ibang mga layunin. 461 00:18:41,350 --> 00:18:42,350 Mayroong iba pang mga pagpapaandar. 462 00:18:42,350 --> 00:18:44,040 Iba pang mga tao na sinulat sa loob ng aking computer. 463 00:18:44,040 --> 00:18:46,789 Kaya mga bits ay na ginagamit para sa iba pang mga halaga, at kung ano ko na nakikita ang 464 00:18:46,789 --> 00:18:49,470 ay ang mga labi ng ilang naunang paggamit ng na memorya. 465 00:18:49,470 --> 00:18:53,350 >> Kaya walang malaki deal, dahil sa lalong madaling habang nagta-type ako susunod at pagkatapos ay i-print ang y, 466 00:18:53,350 --> 00:18:55,640 ito ay nasimulan sa ang halaga na gusto ko. 467 00:18:55,640 --> 00:18:57,400 Kaya ngayon, ni sige medyo mas mabilis na ipaalam. 468 00:18:57,400 --> 00:18:58,540 N para sa susunod. 469 00:18:58,540 --> 00:18:59,570 Gawin ni itong muli Hayaan. 470 00:18:59,570 --> 00:19:00,530 Gawin ni itong muli Hayaan. 471 00:19:00,530 --> 00:19:02,404 Ngunit hindi ko nais na hit ito dito, dahil kung ako 472 00:19:02,404 --> 00:19:05,110 Gusto upang makita kung ano ang nangyayari sa loob ng swap, ano ang command? 473 00:19:05,110 --> 00:19:05,520 >> Madla: hakbang. 474 00:19:05,520 --> 00:19:06,436 >> David J. MALAN: hakbang. 475 00:19:06,436 --> 00:19:09,800 Kaya ito hakbang akong isang pag-andar, sa halip na sa ibabaw nito. 476 00:19:09,800 --> 00:19:12,270 At ngayon, ito ay isang maliit na cryptic totoo lang, ngunit ito ay isa lamang 477 00:19:12,270 --> 00:19:14,581 na nagsasabi sa akin ako sa 33 linya ngayon. 478 00:19:14,581 --> 00:19:15,580 At ni gawin muli ito ipaalam. 479 00:19:15,580 --> 00:19:16,080 Magpa-print ng Temp. 480 00:19:16,080 --> 00:19:17,129 481 00:19:17,129 --> 00:19:20,170 Halaga ng basura, negatibong oras na ito, ngunit iyan ay isang halaga na basura pa rin lamang. 482 00:19:20,170 --> 00:19:22,810 Kaya ipaalam gawin ng susunod, i-print ang Temp. 483 00:19:22,810 --> 00:19:27,130 Ito ay nasimulan sa 1, na ay ang halaga ng x, aka isang. 484 00:19:27,130 --> 00:19:29,110 >> Ngayon, kung nasaan ang aming isang at X nagmumula? 485 00:19:29,110 --> 00:19:32,510 Well, mapapansin sa pangunahing, namin na tinatawag na mga halagang ito x at y. 486 00:19:32,510 --> 00:19:34,740 Pagkatapos ay ipinasa namin ang mga ito upang magpalit gaya ng mga sumusunod. 487 00:19:34,740 --> 00:19:37,010 Unang X ay dumating, kuwit y. 488 00:19:37,010 --> 00:19:40,020 At pagkatapos, swap maaaring tumawag sa kanila x at y. 489 00:19:40,020 --> 00:19:42,630 Ngunit para sa kaliwanagan, ito ay pagtawag sa kanila ng at b. 490 00:19:42,630 --> 00:19:45,970 Ngunit isang at b ay ngayon pagpunta sa maging mga kopya ng x at y, ayon sa pagkakabanggit. 491 00:19:45,970 --> 00:19:50,660 >> Kaya kung pumunta ako pabalik sa GDB, Temp ay isa ngayon at ngayon ay isa. 492 00:19:50,660 --> 00:19:56,130 Ngunit kung gagawin ko susunod at ngayon gawin sa pag-print isang, isang Na-ililipat. 493 00:19:56,130 --> 00:20:00,030 Gatas ay poured papunta sa dating salamin orange juice, o vice versa. 494 00:20:00,030 --> 00:20:04,750 >> At kung ang susunod na gagawin ko muli, at ngayon kung i-print out ako bilang isang katinuan check, 495 00:20:04,750 --> 00:20:07,687 isang pa rin ang dalawa, ngunit b ngayon ay isa. 496 00:20:07,687 --> 00:20:08,770 Tapat, ito ay pa rin doon. 497 00:20:08,770 --> 00:20:10,670 Wala akong pakialam kung ano ang Temp ay. 498 00:20:10,670 --> 00:20:16,850 Ngunit sa lalong madaling ngayon nagta-type ako, sabihin nating, magpatuloy upang bumalik, na ngayon ako sa dulo 499 00:20:16,850 --> 00:20:17,480 ang program. 500 00:20:17,480 --> 00:20:20,730 At sa kasamaang-palad, x ay pa rin ng isa at y pa rin ang dalawa. 501 00:20:20,730 --> 00:20:22,272 >> Kaya kung ano ay ang utility ng GDB doon? 502 00:20:22,272 --> 00:20:23,980 Hindi ito makakatulong sa akin ayusin ang problema per se, 503 00:20:23,980 --> 00:20:26,265 ngunit sana ay makatulong sa akin maunawaan ito sa pamamagitan ng napagtatanto 504 00:20:26,265 --> 00:20:30,000 na oo, ang aking logic ay karapatan, ngunit ang aking code ay hindi ganap na pagkakaroon 505 00:20:30,000 --> 00:20:31,450 isang permanenteng epekto. 506 00:20:31,450 --> 00:20:34,570 Kaya na problema kami ay pagpunta sa ngayon malutas ngayon. 507 00:20:34,570 --> 00:20:37,870 >> Ngunit sabihin makarating doon sa pamamagitan ng paraan ng ito. 508 00:20:37,870 --> 00:20:39,230 String ay isang kasinungalingan. 509 00:20:39,230 --> 00:20:41,860 Ito, masyadong, hindi isang uri ng data na umiiral sa C. Ito ay 510 00:20:41,860 --> 00:20:44,750 naging isang kasingkahulugan para sa ilang oras para sa ibang bagay, 511 00:20:44,750 --> 00:20:47,300 at maaari naming ihayag na tulad ng sumusunod. 512 00:20:47,300 --> 00:20:53,282 >> Hayaan akong sige at buksan up isang programa na tinatawag ihambing-0. 513 00:20:53,282 --> 00:20:56,240 At sa halip na i-type ang isang ito out, magsisimula kami upang maglakad sa pamamagitan ng code 514 00:20:56,240 --> 00:20:58,040 Ko na sinulat ni, ngunit ito ay lamang ng ilang linya. 515 00:20:58,040 --> 00:20:59,570 Kaya ito ay ihambing-0. 516 00:20:59,570 --> 00:21:02,380 At ang unang bagay na ako ng paggawa ay hindi nakakakuha ng isang linya ng teksto. 517 00:21:02,380 --> 00:21:05,610 >> Ngunit mapansin kung ano ang ako paggawa sa unang pagkakataon. 518 00:21:05,610 --> 00:21:07,910 Ano ang iba't ibang mga malinaw tungkol sa 21 linya? 519 00:21:07,910 --> 00:21:10,020 520 00:21:10,020 --> 00:21:11,402 Talaga, maghintay ng isang minuto. 521 00:21:11,402 --> 00:21:12,110 Ito ay kopya ng dalawang. 522 00:21:12,110 --> 00:21:13,568 Hindi iyon kahit na ang tamang programa. 523 00:21:13,568 --> 00:21:14,780 Ang lahat ng mga karapatan, spoiler alerto. 524 00:21:14,780 --> 00:21:16,890 Ang lahat ng mga karapatan, kaya hindi bale na. 525 00:21:16,890 --> 00:21:18,520 Iyan ang sagot sa isang susunod na tanong. 526 00:21:18,520 --> 00:21:21,450 >> Narito ay ihambing-0, at ako tungkol sa upang makakuha ng isang linya ng teksto. 527 00:21:21,450 --> 00:21:22,435 Programa ng magkano ang mas simple. 528 00:21:22,435 --> 00:21:23,560 Kaya ito ay prangka. 529 00:21:23,560 --> 00:21:28,070 Ito ay tulad ng Linggo One, Linggo Dalawang bagay-bagay sa sandaling ito. string s = GetString. 530 00:21:28,070 --> 00:21:29,700 Ngayon, sinasabi ko muli pababa dito. 531 00:21:29,700 --> 00:21:31,830 string t = GetString. 532 00:21:31,830 --> 00:21:35,300 At pagkatapos, ang huling bagay sa programa, pati na nagmumungkahi ang pangalan nito, 533 00:21:35,300 --> 00:21:37,090 ay Pupunta ako sa subukan upang paghambingin ang mga ito. 534 00:21:37,090 --> 00:21:40,709 >> Kaya kung s, ang unang string, ay katumbas = t, pagkatapos ay ako 535 00:21:40,709 --> 00:21:42,250 pagpunta sa sinasabi mong i-type ang parehong bagay. 536 00:21:42,250 --> 00:21:44,291 Iba Pa, ako ako pagpunta sa sabihin nagta-type ka ng iba't ibang mga bagay. 537 00:21:44,291 --> 00:21:45,880 Kaya ni makatipon at patakbuhin ang program na ito ipaalam. 538 00:21:45,880 --> 00:21:48,481 Kaya gumawa ihambing zero. 539 00:21:48,481 --> 00:21:48,980 Mukhang mabuti. 540 00:21:48,980 --> 00:21:50,490 Walang mga error compilation. 541 00:21:50,490 --> 00:21:52,386 >> Hayaan akong sige ngayon at i-type ./compare-0. 542 00:21:52,386 --> 00:21:55,230 543 00:21:55,230 --> 00:21:59,220 Hayaan akong sige at sabihin ang isang bagay : Daven at isang bagay: Rob. 544 00:21:59,220 --> 00:22:00,450 At nagta-type ako ng iba't ibang mga bagay. 545 00:22:00,450 --> 00:22:01,250 Sa ngayon, kaya mabuti. 546 00:22:01,250 --> 00:22:02,680 Mukhang tama Program. 547 00:22:02,680 --> 00:22:03,880 >> Ngunit tumakbo ni itong muli ipaalam. 548 00:22:03,880 --> 00:22:05,800 Sabihing isang bagay: Gabe. 549 00:22:05,800 --> 00:22:07,140 Sabihing isang bagay: Gabe. 550 00:22:07,140 --> 00:22:08,520 551 00:22:08,520 --> 00:22:09,020 Lahat ng karapatan. 552 00:22:09,020 --> 00:22:10,851 Siguro pindutin ko space bar o isang bagay na funky. 553 00:22:10,851 --> 00:22:11,600 Gawin ni itong muli Hayaan. 554 00:22:11,600 --> 00:22:13,020 Kaya 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 Iba't ibang mga bagay. 559 00:22:17,330 --> 00:22:19,430 Kaya kung ano ang nangyari? 560 00:22:19,430 --> 00:22:23,200 >> Kaya mayroon kaming mga dalawang linya ng code, GetString na dalawang beses na tinawag. 561 00:22:23,200 --> 00:22:25,760 At pagkatapos, i ako sinusubukan mong ihambing s at t. 562 00:22:25,760 --> 00:22:28,370 Ngunit ano ba talagang pagkatapos ay nangyayari sa? 563 00:22:28,370 --> 00:22:31,180 Well, tungkol sa aking sulat-kamay upang Butcher halimbawang ito medyo. 564 00:22:31,180 --> 00:22:34,630 At sabihin na aktwal na magtapon ito hanggang sa paglipas dito, pati na rin. 565 00:22:34,630 --> 00:22:37,390 566 00:22:37,390 --> 00:22:45,712 >> Kaya mayroon kaming isang linya tulad ng string s = GetString. 567 00:22:45,712 --> 00:22:48,295 Kaya na lang ang unang kagiliw-giliw na linya mula sa programang iyon. 568 00:22:48,295 --> 00:22:49,920 569 00:22:49,920 --> 00:22:52,974 Ngunit ano ang lahat ng mga oras na ito ay naging nangyayari sa ilalim ng hood? 570 00:22:52,974 --> 00:22:55,890 Well, sa kaliwang bahagi ay string, na kung saan ay ang ilang mga uri ng variable, 571 00:22:55,890 --> 00:22:56,785 at ang tawag dito s. 572 00:22:56,785 --> 00:23:00,019 Kaya alam ko na ito ay gumagamit ng memorya, o RAM, sa aking computer kahit papaano. 573 00:23:00,019 --> 00:23:02,060 Kaya pupuntahan ko abstractly gumuhit na bilang isang parisukat. 574 00:23:02,060 --> 00:23:04,820 32 bits, ito ay lumiliko out, ngunit higit pa sa na sa hinaharap. 575 00:23:04,820 --> 00:23:06,410 At pagkatapos ay, kung ano ang nangyayari sa paglipas dito? 576 00:23:06,410 --> 00:23:08,700 >> Well, GetString malinaw naman nakakakuha ng isang string mula sa user. 577 00:23:08,700 --> 00:23:11,360 At GetString Nakakuha Zamyla o Gabe o Daven. 578 00:23:11,360 --> 00:23:14,640 Kaya sabihin piliin ang unang ng mga, na noon ay Daven. 579 00:23:14,640 --> 00:23:19,174 Kaya epektibo, nakuha ko kung ano ang GetString sa akin sa na unang kaso ay D-a-v-e-n. 580 00:23:19,174 --> 00:23:22,690 581 00:23:22,690 --> 00:23:25,045 At pagkatapos ay, kung ano pa ginawa ito akong bigyan lihim? 582 00:23:25,045 --> 00:23:25,920 Madla: [INAUDIBLE] 583 00:23:25,920 --> 00:23:28,720 David J. MALAN: Oo, ang / 0 o null character. 584 00:23:28,720 --> 00:23:30,550 Kaya epektibo ito ay nagbigay sa akin isang string. 585 00:23:30,550 --> 00:23:34,550 Ngunit namin alam mula sa mga nakaraang mukhang na isang string lamang ang isang array 586 00:23:34,550 --> 00:23:37,895 ng mga character, at ito ay winakasan sa pamamagitan ng ito espesyal na character Sentinel, / 0. 587 00:23:37,895 --> 00:23:39,220 588 00:23:39,220 --> 00:23:42,310 >> Ngunit kung ito ay totoo at ito ay isang parisukat, 589 00:23:42,310 --> 00:23:44,160 ito ay malinaw na ang isang mas mas malaking parihaba. 590 00:23:44,160 --> 00:23:46,830 At sa katunayan, ito ay, Inaangkin ko, bits 32 lamang. 591 00:23:46,830 --> 00:23:49,500 At ito ay malinaw na higit sa 32 bits, dahil ito ay marahil 592 00:23:49,500 --> 00:23:51,583 walong plus walong plus walong plus walong plus walong, 593 00:23:51,583 --> 00:23:53,320 dahil lamang ng mga byte na sa ASCII. 594 00:23:53,320 --> 00:23:57,030 Paano ang heck kami makapupunta upang magkasya Daven sa maliit na kahon na ito dito? 595 00:23:57,030 --> 00:23:59,880 >> Well, kung ano ang GetString talaga ginagawa? 596 00:23:59,880 --> 00:24:03,680 Well, dito ay kumakatawan ang grid na ito memorya ng aking computer o RAM. 597 00:24:03,680 --> 00:24:07,564 Kaya sabihin nagkataon natin na kung bawat isa sa mga kumakatawan sa isang byte, 598 00:24:07,564 --> 00:24:09,730 pagkatapos ay maaari naming isipin ang bawat byte bilang pagkakaroon ng isang address, 599 00:24:09,730 --> 00:24:13,830 tulad ng 33 Oxford Street, o 34 Oxford Street, o 35 Oxford Street. 600 00:24:13,830 --> 00:24:16,700 >> Kaya tulad ng mga bahay ay may mga address at mga gusaling may mga address, 601 00:24:16,700 --> 00:24:19,810 kaya gawin indibidwal na byte ng memory may mga address o mga numero ng 602 00:24:19,810 --> 00:24:21,042 na matukoy nang natatangi ang mga ito. 603 00:24:21,042 --> 00:24:22,000 Ngayon, ito ay di-makatwirang. 604 00:24:22,000 --> 00:24:25,370 Ngunit upang panatilihin itong simple, pupuntahan ko gamitin hexadecimal sa pamamagitan lamang ng convention, 605 00:24:25,370 --> 00:24:28,200 ngunit wala ng iba pang mga 0x ay nangangahulugang kaysa sa "ito ay hexadecimal." 606 00:24:28,200 --> 00:24:31,030 at pupuntahan ko upang i-claim na ang "D" ay nagtatapos up sa byte Isa sa memorya. 607 00:24:31,030 --> 00:24:34,210 >> Ako wala pa ang mga nagaganap sa Nakakuha memory, sa gayon Nakakuha Daven sa unang puwesto 608 00:24:34,210 --> 00:24:35,509 sa byte One. 609 00:24:35,509 --> 00:24:36,800 Ito, pagkatapos, ay magiging 0x2. 610 00:24:36,800 --> 00:24:37,831 611 00:24:37,831 --> 00:24:38,705 Ito ay pagpunta sa 0x3. 612 00:24:38,705 --> 00:24:39,840 613 00:24:39,840 --> 00:24:41,800 Ito ay magiging 0x4. 614 00:24:41,800 --> 00:24:43,025 Ito ay pagpunta sa 0x5. 615 00:24:43,025 --> 00:24:44,025 Ito ay magiging 0x6. 616 00:24:44,025 --> 00:24:45,560 617 00:24:45,560 --> 00:24:48,290 >> Ngunit sa sandaling ka magsimula-iisip tungkol sa kung ano ang ginagawa ng computer 618 00:24:48,290 --> 00:24:50,710 sa ilalim ng hood, maaari simulan upang infer 619 00:24:50,710 --> 00:24:54,960 kung paano mo, ilang taon na ang nakalipas, gagawin nagpatupad C mismo. 620 00:24:54,960 --> 00:24:58,360 Ano ang GetString marahil returning-- sapagkat ito 621 00:24:58,360 --> 00:25:00,946 pakiramdam ng tulad ng ito ay hindi bumabalik Daven, per se, 622 00:25:00,946 --> 00:25:03,320 dahil siya ay tiyak hindi pagpunta upang magkasya sa maliit na ito box-- 623 00:25:03,320 --> 00:25:05,090 kaya kung ano ang malamang na pagbabalik ay GetString? 624 00:25:05,090 --> 00:25:07,958 625 00:25:07,958 --> 00:25:08,920 >> Madla: [INAUDIBLE] 626 00:25:08,920 --> 00:25:10,540 >> David J. MALAN: Ang lokasyon ng Daven. 627 00:25:10,540 --> 00:25:12,770 At itong ma-paggawa na ito kailanman mula noong Linggo One. 628 00:25:12,770 --> 00:25:16,150 Ano GetString ay talagang bumabalik ay hindi isang string, bawat se. 629 00:25:16,150 --> 00:25:17,780 Iyon ang isa sa mga maliit na puting mga kasinungalingan. 630 00:25:17,780 --> 00:25:22,520 Ito ay bumabalik sa address ng string sa memorya, ang kakaibang address. 631 00:25:22,520 --> 00:25:24,820 Daven nakatira sa 33 Oxford Street. 632 00:25:24,820 --> 00:25:29,310 Ngunit higit pa succinctly, ay nabubuhay Gavin sa 0x1, Address Number One. 633 00:25:29,310 --> 00:25:32,280 >> Kaya kung ano ay makakakuha ng ilalagay sa ito maliit na kahon pagkatapos, upang maging malinaw, 634 00:25:32,280 --> 00:25:35,930 lamang ang address ng na string. 635 00:25:35,930 --> 00:25:38,110 Kaya lahat ng oras na ito, ito May nangyayari. 636 00:25:38,110 --> 00:25:41,650 Ngunit ano ang mga pahiwatig sa ngayon ay kung ang lahat ay may s 637 00:25:41,650 --> 00:25:44,710 ay isang numero sa loob nito, kung sino ang upang itigil mo, ang programmer, 638 00:25:44,710 --> 00:25:47,970 mula sa paglalagay ng anumang numero sa anumang mga variable at lang tumatalon 639 00:25:47,970 --> 00:25:49,080 sa na chunk ng memory? 640 00:25:49,080 --> 00:25:51,320 At sa katunayan, makikita natin ang na isang banta susunod na pagkakataon. 641 00:25:51,320 --> 00:25:53,500 >> Ngunit sa ngayon, ito nararamdaman hindi sapat. 642 00:25:53,500 --> 00:25:55,630 Kung sinasabi ko, kumuha ako ng string, nagbibigay sa iyo sa akin Daven. 643 00:25:55,630 --> 00:25:57,230 Ngunit hindi mo talaga ninyo ako Daven. 644 00:25:57,230 --> 00:25:59,310 Lahat ba ninyo akong bigyan ang address ng Daven. 645 00:25:59,310 --> 00:26:04,310 Paano ko pagkatapos Alam ko para bang kung saan Daven ay nagsisimula at ends-- 646 00:26:04,310 --> 00:26:07,140 ang kuwento Nagiging weird-- kung saan Daven ay nagsisimula at nagtatapos, 647 00:26:07,140 --> 00:26:10,435 at pagkatapos, ang susunod na string sa memorya ay nagsisimula? 648 00:26:10,435 --> 00:26:11,520 649 00:26:11,520 --> 00:26:13,620 >> Well, kung ikaw ay handing sa akin simula ng Daven, 650 00:26:13,620 --> 00:26:17,230 mahalagang, paano mo alam ko kung saan ang dulo ng kanyang pangalan ay? 651 00:26:17,230 --> 00:26:20,550 Na espesyal na character na null, na ay ang lahat ng mga mas mahalaga ngayon 652 00:26:20,550 --> 00:26:23,040 kung string sa ilalim ng hood nang simple nakilala 653 00:26:23,040 --> 00:26:25,820 katangi-tangi sa pamamagitan ng kanilang lokasyon sa memorya. 654 00:26:25,820 --> 00:26:28,130 Kaya lahat ng oras na ito, na kung ano ang nangyayari. 655 00:26:28,130 --> 00:26:32,470 >> Kaya kapag tinitingnan namin ngayon sa ang code dito, ipaliwanag 656 00:26:32,470 --> 00:26:35,790 kung gagawin mo ang bug sa 26 linya. 657 00:26:35,790 --> 00:26:39,560 Bakit Zamyla at Zamyla naiiba? 658 00:26:39,560 --> 00:26:41,330 Bakit Gabe at Gabe naiiba? 659 00:26:41,330 --> 00:26:42,154 Oo, sa likod. 660 00:26:42,154 --> 00:26:43,390 >> Madla: Mayroon silang iba't ibang mga address. 661 00:26:43,390 --> 00:26:45,931 >> David J. MALAN: I dahil mayroon sila ng iba't ibang mga address. 662 00:26:45,931 --> 00:26:48,820 Dahil kapag tumawag ka GetString muli, na makikita kong gawin mabilis dito, 663 00:26:48,820 --> 00:26:52,870 kung ito ang pangalawang linya, string t, tulad ng ginawa ko sa programang iyon, 664 00:26:52,870 --> 00:26:55,030 ay katumbas ng isa pang tawag sa GetString. 665 00:26:55,030 --> 00:26:56,370 666 00:26:56,370 --> 00:26:58,670 Ang susunod na oras na tawagan ako GetString, ako ako pagpunta 667 00:26:58,670 --> 00:27:00,190 upang makakuha ng isang iba't ibang mga chunk ng memorya. 668 00:27:00,190 --> 00:27:02,220 >> GetString ang pinapayagan upang hilingin sa operating 669 00:27:02,220 --> 00:27:03,800 system para sa higit pa at higit pa memory. 670 00:27:03,800 --> 00:27:07,894 Hindi ito ng pagpunta sa muling gamitin ang parehong anim na bytes bawat solong oras. 671 00:27:07,894 --> 00:27:09,810 Ito ay pagpunta upang makakuha ng isang bagong chunk ng memorya, na 672 00:27:09,810 --> 00:27:12,780 Nangangahulugan t ay pagpunta upang makakuha ng ilang iba pang mga halaga sa paglipas dito. 673 00:27:12,780 --> 00:27:15,380 >> Kaya kapag gagawin ko s ay katumbas = t, hindi naghahambing ka ng 674 00:27:15,380 --> 00:27:17,880 D laban na ito at laban sa A ito at V laban na ito. 675 00:27:17,880 --> 00:27:19,588 Naghahambing ka ito laban na ito, na 676 00:27:19,588 --> 00:27:24,020 tapat ay medyo useful-- useless-- ay medyo walang silbi, dahil kung sino talaga 677 00:27:24,020 --> 00:27:25,830 pinahahalagahan ng kung saan ang mga string ay nasa memory? 678 00:27:25,830 --> 00:27:26,850 >> At sa katunayan, mayroon kaming hindi. 679 00:27:26,850 --> 00:27:28,980 At hindi namin pagpunta sa simulan lalo na pag-aalaga. 680 00:27:28,980 --> 00:27:34,180 Upang lamang lawak na mga bug maaari lumabas dahil at mga banta ng seguridad ay maaaring lumabas dahil sa kagustuhan 681 00:27:34,180 --> 00:27:36,100 talaga namin simulan upang pangalagaan ang tungkol dito. 682 00:27:36,100 --> 00:27:37,230 Kaya ni ayusin ang problemang ito ipaalam. 683 00:27:37,230 --> 00:27:39,650 Ginagawang out, mo ayusin ito sobrang simple. 684 00:27:39,650 --> 00:27:42,600 >> At sabihin na aktwal na, bago ako magbunyag muli na, kung ano ang gagawin 685 00:27:42,600 --> 00:27:47,170 gagawin mo kung sa isang CS50 klase, at kayo ay nagkaroon na ipapatupad 686 00:27:47,170 --> 00:27:48,600 isang paghahambing laban sa dalawang mga string. 687 00:27:48,600 --> 00:27:51,440 Malinaw ka maaaring hindi lamang gamitin ang mga katumbas = t. 688 00:27:51,440 --> 00:27:54,090 Ngunit lohikal lamang, kung paano Gusto mong ihambing ang string na ito 689 00:27:54,090 --> 00:27:56,370 laban sa ang string na ito gamit ang C code? 690 00:27:56,370 --> 00:27:56,880 Oo. 691 00:27:56,880 --> 00:27:58,780 >> Madla: gawin lang ang mga para sa loop [INAUDIBLE] 692 00:27:58,780 --> 00:28:00,670 693 00:28:00,670 --> 00:28:01,670 David J. MALAN: Perpekto. 694 00:28:01,670 --> 00:28:02,900 Madla: [INAUDIBLE] 695 00:28:02,900 --> 00:28:03,310 David J. MALAN: Oo. 696 00:28:03,310 --> 00:28:05,390 Gamitin lang ang isang para sa loop o isang habang loop o kahit anong. 697 00:28:05,390 --> 00:28:08,710 Ngunit ilapat lamang ang pangunahing ideya na kung ito ay isang chunk ng memory o isang array 698 00:28:08,710 --> 00:28:11,590 at ito ay, sa paglipas ng umulit kapwa sa parehong panahon. 699 00:28:11,590 --> 00:28:12,960 At ihambing lamang ang mga titik. 700 00:28:12,960 --> 00:28:14,260 >> At na kailangan mong maging isang maliit na maingat, dahil hindi mo 701 00:28:14,260 --> 00:28:16,247 ayaw isang daliri upang pumunta nakalipas na ang iba pang mga 702 00:28:16,247 --> 00:28:18,080 dahil ang isa ay string mas mahaba kaysa sa iba pang mga. 703 00:28:18,080 --> 00:28:21,380 Kaya ka ng pagpunta sa gusto mong tingnan para sa ito espesyal na halaga sa dulo, null. 704 00:28:21,380 --> 00:28:24,017 Ngunit ito ay tunay na, sa pagtatapos, kasing simple ng iyon. 705 00:28:24,017 --> 00:28:26,100 At tapat, hindi namin kailangan upang muling baguhin ang wheel na. 706 00:28:26,100 --> 00:28:27,960 Narito ang Bersyon Dalawang. 707 00:28:27,960 --> 00:28:32,910 At kung ano ang pupuntahan ko sabihin dito ay ang sa halip ng paghahambing ng mga katumbas = t, 708 00:28:32,910 --> 00:28:38,964 Sa halip pupuntahan ko sabihin, kung string paghahambing ng kuwit s t katumbas = 0. 709 00:28:38,964 --> 00:28:40,130 Ngayon, kung ano ang ihambing ang string? 710 00:28:40,130 --> 00:28:43,046 >> Ito ay lumiliko out, ito ay isang function na ay may C, na ang layunin sa buhay 711 00:28:43,046 --> 00:28:44,650 ay upang paghambingin ang dalawang mga string. 712 00:28:44,650 --> 00:28:48,300 At stir ihambing, kung basahin namin nito tao o pahina ng dokumentasyon o CS50 713 00:28:48,300 --> 00:28:50,630 sanggunian, ay ito sabihin lang sa iyo na stir 714 00:28:50,630 --> 00:28:55,730 ihambing ang pagbalik ng alinman sa isang negatibong numero o isang positibong numero o zero, 715 00:28:55,730 --> 00:28:57,660 kung saan zero ay nangangahulugan na ang mga ito ay pantay. 716 00:28:57,660 --> 00:28:58,570 >> Kaya lamang haka-haka. 717 00:28:58,570 --> 00:29:00,390 Ano ang maaari itong ibig sabihin kung stir ihambing ang pagbalik 718 00:29:00,390 --> 00:29:02,110 negatibong halaga o positibong halaga? 719 00:29:02,110 --> 00:29:02,785 720 00:29:02,785 --> 00:29:04,285 Madla: Mas mataas sa o mas mababa. 721 00:29:04,285 --> 00:29:05,570 David J. MALAN: Oo, mas malaki kaysa sa o mas mababa kaysa sa. 722 00:29:05,570 --> 00:29:08,640 Kaya kung nais mong upang pagbukud-bukurin sa kabuuan bungkos ng mga string sa isang dictionary-- 723 00:29:08,640 --> 00:29:12,975 bilang kami ay malaon pababa sa road-- perpektong pag-andar upang gamitin ang potensyal, 724 00:29:12,975 --> 00:29:15,850 dahil ito ay pagpunta sa gawin iyon paghahambing ng mga string para sa iyo, at sabihin sa 725 00:29:15,850 --> 00:29:20,060 mo ang isang nauuna bago b, o ang b dumating bago ang isang alphabetically. 726 00:29:20,060 --> 00:29:21,490 Maaari naming gawin eksakto na. 727 00:29:21,490 --> 00:29:23,620 >> At abisuhan ako ginawang isang iba pang bagay sa halimbawang ito. 728 00:29:23,620 --> 00:29:26,870 Ano pa ang nagbago mas mataas hanggang sa ito ang pangunahing pag-andar? 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 At ito ay na ang ibang puting kasinungalingan. 732 00:29:31,150 --> 00:29:33,750 Ang lahat ng mga oras na ito, kapag hindi mo nagsusulat string, 733 00:29:33,750 --> 00:29:38,350 na namin nai-lihim muling pagsusulat string na ito bilang char * kaya na clang talaga 734 00:29:38,350 --> 00:29:39,270 naiintindihan mo. 735 00:29:39,270 --> 00:29:42,450 >> Sa ibang salita, sa CS50.h at dahil kakailanganin huli naming makita, 736 00:29:42,450 --> 00:29:45,950 nagsagawa kami ng kasing kahulugan na tinatawag na string iyon ang parehong bagay bilang char *. 737 00:29:45,950 --> 00:29:49,910 At sa ngayon, alam lamang na ang *, Sa kontekstong ito, hindi bababa sa, 738 00:29:49,910 --> 00:29:51,286 Nangangahulugan ang address. 739 00:29:51,286 --> 00:29:52,210 >> Ang address ng kung ano? 740 00:29:52,210 --> 00:29:56,390 Well, ang katotohanan na sinabi ko char *, at hindi int * o lumulutang *, 741 00:29:56,390 --> 00:30:00,820 ay nangangahulugan na ang char * ay ang address ng isang char. 742 00:30:00,820 --> 00:30:06,770 Kaya maliit na kahon na ito dito, aka string, ay talagang ng uri ng char *, 743 00:30:06,770 --> 00:30:10,490 na kung saan ay lamang ng isang magarbong paraan ng sinasabi, sa kahon na ito ay pupunta sa isang address. 744 00:30:10,490 --> 00:30:12,430 At kung ano ang address na mag-refer sa? 745 00:30:12,430 --> 00:30:13,780 Tila, isang char. 746 00:30:13,780 --> 00:30:16,410 >> Ngunit maaari naming ganap Mayroon int * at iba pang mga bagay. 747 00:30:16,410 --> 00:30:20,790 Ngunit sa ngayon, char * ay talagang ang pinaka- prangka at isa sa interes. 748 00:30:20,790 --> 00:30:23,310 Kaya ang problemang ito ay pagpunta upang tumaas, bagaman, muli. 749 00:30:23,310 --> 00:30:24,830 >> Ipagpalagay na buksan ko up sa programa na ito. 750 00:30:24,830 --> 00:30:27,670 Ni makita kung ngayon maaari naming hulaan Hayaan kung ano ang mali sa ang code na ito. 751 00:30:27,670 --> 00:30:31,140 Kaya sa programang ito, kopyahin-0, ako pagpunta sa magpatuloy at muling tumawag 752 00:30:31,140 --> 00:30:34,190 GetString at mag-store ang halaga sa s. 753 00:30:34,190 --> 00:30:38,800 >> At pagkatapos ay, kung bakit ako ginagawa ito, tulad ng isang paalala mula sa nakaraang linggo? 754 00:30:38,800 --> 00:30:40,960 Ginawa namin sinasabi na GetString kung minsan ay nagbabalik null. 755 00:30:40,960 --> 00:30:42,793 Ano ang ibig sabihin kung GetString nagbabalik null? 756 00:30:42,793 --> 00:30:45,040 757 00:30:45,040 --> 00:30:46,034 May nangyaring mali. 758 00:30:46,034 --> 00:30:48,950 Marahil ito ay nangangahulugan na ang string ay masyadong malaki, sa labas ng memory ang computer. 759 00:30:48,950 --> 00:30:51,724 Ito ang mangyayari sobrang, sobrang, sobrang bihira, ngunit maaari itong mangyari. 760 00:30:51,724 --> 00:30:53,890 Gusto naming suriin para dito, at iyon ang lahat ng aming ginagawa. 761 00:30:53,890 --> 00:30:57,910 >> Dahil ipapakita namin makita ngayon, kung hindi mo gusto simulan ang pag-check habitually para sa mga bagay 762 00:30:57,910 --> 00:31:00,870 tulad ng null, maaari mong talagang simulan upang pumunta 763 00:31:00,870 --> 00:31:03,106 naka-address sa memorya na ay hindi wasto. 764 00:31:03,106 --> 00:31:05,980 At ka ng pagpunta sa simulan ang pampalaglag higit pa at higit pa faults segmentation. 765 00:31:05,980 --> 00:31:08,360 O sa Mac o PC, lamang na nagiging sanhi ng isang computer upang mag-hang 766 00:31:08,360 --> 00:31:10,340 o isang programa upang mag-freeze, potensyal na. 767 00:31:10,340 --> 00:31:14,930 >> Kaya ngayon, inaangkin ko sa kopya-0.c, na aking ako ay pagpunta sa kopyahin ang mga string ng paraan 768 00:31:14,930 --> 00:31:15,685 ng line 28. 769 00:31:15,685 --> 00:31:16,850 770 00:31:16,850 --> 00:31:18,750 At pagkatapos, ako pupunta upang i-claim sa ibaba 771 00:31:18,750 --> 00:31:21,430 dito na pupuntahan ko na baguhin ang isa sa mga ito. 772 00:31:21,430 --> 00:31:22,330 >> Kaya mapansin ito. 773 00:31:22,330 --> 00:31:24,370 Ako ng pagtawag sa aming lumang strlen kaibigan. 774 00:31:24,370 --> 00:31:28,960 At ipaliwanag lamang sa Ingles kung ano ang ginagawa ito linya 34? 775 00:31:28,960 --> 00:31:32,480 Ano ang t bracket 0 kumatawan sa kaliwa. 776 00:31:32,480 --> 00:31:32,980 Oo. 777 00:31:32,980 --> 00:31:34,339 >> Madla: Una character ng t? 778 00:31:34,339 --> 00:31:35,880 David J. MALAN: Una character ng t. 779 00:31:35,880 --> 00:31:36,379 Iyan na ang lahat. 780 00:31:36,379 --> 00:31:40,024 Unang character ng t, gusto kong upang italaga ang uppercase na bersyon 781 00:31:40,024 --> 00:31:41,190 ng unang character sa t. 782 00:31:41,190 --> 00:31:43,200 Kaya ito ay capitalize ang unang titik. 783 00:31:43,200 --> 00:31:46,340 At pagkatapos, sa pinakadulo huling bagay gagawin ko sa programang ito ay inaangkin ko ang narito 784 00:31:46,340 --> 00:31:50,340 ang orihinal, s, at narito ang kopya, t. 785 00:31:50,340 --> 00:31:54,610 >> Ngunit batay sa mga kuwento namin lamang Sinabi tungkol sa kung ano talaga ang string, 786 00:31:54,610 --> 00:31:57,520 ano ang 28 linya talaga ginagawa, at ano ang 787 00:31:57,520 --> 00:31:59,405 ang nagreresultang bug pagpunta upang maging sa screen? 788 00:31:59,405 --> 00:32:01,300 789 00:32:01,300 --> 00:32:03,500 >> Kaya unang, ang unang tanong, 28. 790 00:32:03,500 --> 00:32:09,040 Ano ang string t = s talaga ginagawa? 791 00:32:09,040 --> 00:32:16,430 Kung mayroon kami sa kaliwang bahagi ng gilid dito string t = s; 792 00:32:16,430 --> 00:32:19,400 na nagbibigay sa akin ang isang kahon dito at isang kahon dito. 793 00:32:19,400 --> 00:32:25,530 At ipagpalagay na ang address na ito ay 0x, sabihin nating, 50 oras na ito, nagkataon. 794 00:32:25,530 --> 00:32:28,847 Ano ang string t = s gawin sa ilalim ng hood? 795 00:32:28,847 --> 00:32:30,340 >> Madla: [INAUDIBLE] 796 00:32:30,340 --> 00:32:34,100 >> David J. MALAN: nag-iimbak nito sa memory tugunan doon, kaya 0x50 pumupunta doon. 797 00:32:34,100 --> 00:32:37,980 Kaya kung ngayon, pumunta ako sa unang na character sa t at uppercase na ito, 798 00:32:37,980 --> 00:32:39,535 kung ano ang aking ginagawa nang epektibo sa s? 799 00:32:39,535 --> 00:32:41,300 800 00:32:41,300 --> 00:32:43,450 Talaga ako ng paggawa ng parehong bagay, i-right? 801 00:32:43,450 --> 00:32:47,680 Dahil kung Address 0x50-- at lang, ako walang magkano ang room sa board dito, 802 00:32:47,680 --> 00:32:51,750 ngunit ipinapalagay na ito ay 0x50 down na dito, sa isang lugar sa memorya ng aking computer. 803 00:32:51,750 --> 00:32:55,825 >> At ako, halimbawa, Gabe Maliit na titik dito, tulad nito sa. 804 00:32:55,825 --> 00:32:57,120 805 00:32:57,120 --> 00:33:01,980 At ako sinabi t bracket 0 ay makakakuha ng malaking titik. 806 00:33:01,980 --> 00:33:04,860 Well, hindi bracket 0 ay ang unang titik sa t. 807 00:33:04,860 --> 00:33:07,840 Kaya kaunti g ay pagpunta sa maging malaki G. Ngunit ang problema 808 00:33:07,840 --> 00:33:09,410 ay, kung ano ang ibig y ituro din sa? 809 00:33:09,410 --> 00:33:10,300 >> Madla: ang parehong. 810 00:33:10,300 --> 00:33:11,841 >> David J. MALAN: Ang parehong eksaktong bagay. 811 00:33:11,841 --> 00:33:16,342 Kaya isang simpleng paliwanag marahil, kahit na ang syntax ay isang maliit na kakaiba. 812 00:33:16,342 --> 00:33:17,050 Kaya sabihin gawin ito. 813 00:33:17,050 --> 00:33:20,210 Gumawa ng kopya-0 at pagkatapos ay ./copy-0. 814 00:33:20,210 --> 00:33:21,820 815 00:33:21,820 --> 00:33:24,110 Sabihing isang bagay: Gabe. 816 00:33:24,110 --> 00:33:26,760 At sa kasamaang-palad, ang parehong ang mga ito na ngayon ang malaking titik, 817 00:33:26,760 --> 00:33:29,500 ngunit para na napapailalim na dahilan na hindi namin lamang 818 00:33:29,500 --> 00:33:32,350 ngayon pakikitungo na may mga address. 819 00:33:32,350 --> 00:33:36,470 >> Kaya paano ko uumpisahan naming i- address-- walang pun intended-- 820 00:33:36,470 --> 00:33:39,270 paano ko uumpisahan naming upang tugunan ang partikular na problema? 821 00:33:39,270 --> 00:33:44,400 Well, sa copy1.c, mga bagay ay pumunta sa upang makakuha ng isang maliit na mas komplikado. 822 00:33:44,400 --> 00:33:49,310 Ngunit Gusto ko i-claim ang isang conceptually simpleng solusyon. 823 00:33:49,310 --> 00:33:50,852 >> Kaya mahirap upang makakuha ng sa unang tingin. 824 00:33:50,852 --> 00:33:53,560 Hindi magiging madali para sa unang oras nagta-type ka ito, marahil, 825 00:33:53,560 --> 00:33:57,440 ngunit kung ang problema ay na lamang ang paggawa t = s lamang 826 00:33:57,440 --> 00:33:59,694 mga kopya ng address, kung ano ang, muli kung ang maaari kong pumili sa iyo, 827 00:33:59,694 --> 00:34:02,110 ay magiging ang solusyon para sa aktwal na pagkopya ng isang string? 828 00:34:02,110 --> 00:34:04,906 829 00:34:04,906 --> 00:34:06,770 >> Madla: namin idedetalye marahil gamitin muli ng isang loop. 830 00:34:06,770 --> 00:34:06,890 >> David J. MALAN: Oo. 831 00:34:06,890 --> 00:34:08,390 Kaya kami ay pagpunta sa kailangan muli ng isang loop. 832 00:34:08,390 --> 00:34:11,800 At dahil kung gusto naming kopyahin isang string s papunta sa isa pang string, 833 00:34:11,800 --> 00:34:14,120 marahil gusto naming gawin ito ng character sa pamamagitan ng character. 834 00:34:14,120 --> 00:34:17,199 Ngunit ang problema ay, kung ang ito ay orihinal na s, 835 00:34:17,199 --> 00:34:22,159 ngayon kailangan namin upang simulan ang tahasang paglaan ng memory para sa t. 836 00:34:22,159 --> 00:34:24,320 >> Sa ibang salita, sabihin redraw ito ang huling oras. 837 00:34:24,320 --> 00:34:28,659 Kung ito ang string s = GetString. 838 00:34:28,659 --> 00:34:30,956 839 00:34:30,956 --> 00:34:32,455 At ni ilagay up dito, pati na rin ipaalam. 840 00:34:32,455 --> 00:34:36,639 841 00:34:36,639 --> 00:34:37,420 Ito ay GetString. 842 00:34:37,420 --> 00:34:39,070 843 00:34:39,070 --> 00:34:43,860 At pagkatapos, ang larawan para sa isang bagay tulad na ay magiging tulad ng dati, 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 Na mukhang isang maliit na isang bagay na katulad nito. 847 00:34:48,960 --> 00:34:53,650 At s samakatuwid, tinatawag namin ito 0x50, at na ang nangyayari upang maging 51, 52. 848 00:34:53,650 --> 00:34:54,409 >> Kaya ito ay 0x50. 849 00:34:54,409 --> 00:34:55,679 850 00:34:55,679 --> 00:34:59,690 At pagkatapos, gagawin ko string t. 851 00:34:59,690 --> 00:35:02,450 Sa memorya, na lamang ng pagpunta sa ninyo ako ng maliit na parisukat na katulad nito. 852 00:35:02,450 --> 00:35:04,080 Kaya ano ang mga pangunahing hakbang ngayon? 853 00:35:04,080 --> 00:35:09,870 Kung gusto ko upang kopyahin ang mga ito sa t, ano blangko ang kailangan naming i-fill in dito? 854 00:35:09,870 --> 00:35:12,050 O kung ano ang kailangan namin upang gawin sa isang mataas na antas? 855 00:35:12,050 --> 00:35:14,101 856 00:35:14,101 --> 00:35:14,600 Oo? 857 00:35:14,600 --> 00:35:16,200 858 00:35:16,200 --> 00:35:17,020 May isang tao? 859 00:35:17,020 --> 00:35:17,690 Oo. 860 00:35:17,690 --> 00:35:19,214 >> Madla: Kailangan nating [INAUDIBLE]. 861 00:35:19,214 --> 00:35:21,380 David J. MALAN: Oo, namin kailangan upang punan ang mga ito blangko. 862 00:35:21,380 --> 00:35:24,340 Hindi ko ma kopyahin at pagkatapos ay ika-capitalize pangalan ni Gabe 863 00:35:24,340 --> 00:35:28,120 hanggang sa tanungin ko ang mga operating system para sa isa pang chunk ng memorya 864 00:35:28,120 --> 00:35:30,640 na hindi bababa sa bilang malaki tulad ng orihinal. 865 00:35:30,640 --> 00:35:32,130 Kaya na nag-iiwan sa amin na may isang katanungan. 866 00:35:32,130 --> 00:35:36,080 >> Paano ako tanungin ang operating system ay hindi para lamang sa isang simpleng maliit na pointer-- 867 00:35:36,080 --> 00:35:38,530 bilang na ito ay tinatawag na, ang isang address, isang pointer-- hindi 868 00:35:38,530 --> 00:35:40,980 para sa isang simpleng maliit na kahon tulad nito na tinatawag na isang string? 869 00:35:40,980 --> 00:35:44,200 Paano ako tanungin ang operating system para sa isang malaking chunk ng memory? 870 00:35:44,200 --> 00:35:48,430 Kaya ngayon, na-lamang nakuha ko na pabalik hindi tuwiran sa pamamagitan ng pagtawag GetString. 871 00:35:48,430 --> 00:35:50,740 Kaya kung paano GetString kahit pagkuha ng memorya nito? 872 00:35:50,740 --> 00:35:53,430 >> Well, ito ay lumiliko out na mayroong ito ng iba pang mga pagpapaandar dito 873 00:35:53,430 --> 00:35:55,160 na makikita ngayon namin sinimulan nang gamitin. 874 00:35:55,160 --> 00:35:59,780 Ngayon, ito ay mukhang na paraan nang higit pa cryptic than-- at ako ang isa lamang kung sino ang makakakita it-- 875 00:35:59,780 --> 00:36:03,150 ang linyang ito ay mukhang na paraan nang higit pa cryptic pagkatapos ay dapat ito sa unang tingin. 876 00:36:03,150 --> 00:36:04,650 Ngunit tease ni ito bukod ipaalam. 877 00:36:04,650 --> 00:36:07,950 >> Sa kaliwang bahagi, mayroon akong char * t. 878 00:36:07,950 --> 00:36:13,280 Kaya sa Ingles, ay magsisimulang upang ipaalam formulate tamang mga pangungusap sa teknikal na pananalita. 879 00:36:13,280 --> 00:36:19,757 Kaya ito ay naglalaan ng isang variable ng uri ng char * tinatawag t. 880 00:36:19,757 --> 00:36:21,090 Ngayon, ano ang na talagang ibig sabihin? 881 00:36:21,090 --> 00:36:23,881 >> Well, ay nangangahulugan na, kung ano ako ng pagpunta ang ilalagay sa ito variable na tinatawag t? 882 00:36:23,881 --> 00:36:24,780 883 00:36:24,780 --> 00:36:26,402 Ang isang address ng isang char. 884 00:36:26,402 --> 00:36:28,360 Kaya iyon ang mas simple lang, higit pang mga makatwirang paraan 885 00:36:28,360 --> 00:36:29,930 ng naglalarawan kaliwang bahagi. 886 00:36:29,930 --> 00:36:32,890 Kaya na lumilikha ang kahon na ito dito lamang. 887 00:36:32,890 --> 00:36:34,760 Kaya kanang gilid, baka, ay pagpunta 888 00:36:34,760 --> 00:36:37,170 upang maglaan ng mas malaki na chunk ng memorya kung paano? 889 00:36:37,170 --> 00:36:38,340 Kaya ni tease ito bukod ipaalam. 890 00:36:38,340 --> 00:36:41,131 >> Ito ay tinatalo sa unang tingin, ngunit kung ano ang nangyayari sa loob dito? 891 00:36:41,131 --> 00:36:43,740 Una, naroon ang malloc, na ay tila ang aming bagong kaibigan, 892 00:36:43,740 --> 00:36:45,450 "Memory maglaan." 893 00:36:45,450 --> 00:36:49,560 Kaya ito ang argumento na ang pumasa sa ito, kaya ito ay isang medyo malaki argumento. 894 00:36:49,560 --> 00:36:50,970 Kaya ni tease ito bukod ipaalam. 895 00:36:50,970 --> 00:36:53,410 >> strlen ng s, siyempre, ay kumakatawan sa the-- 896 00:36:53,410 --> 00:36:54,142 897 00:36:54,142 --> 00:36:55,600 Madla: Ang bilang ng mga character. 898 00:36:55,600 --> 00:36:56,710 David J. MALAN: lamang ang bilang ng mga character sa s. 899 00:36:56,710 --> 00:36:59,040 Kaya ang haba ng s, ang orihinal na string. 900 00:36:59,040 --> 00:37:00,350 Kaya G-a-b-e. 901 00:37:00,350 --> 00:37:02,320 Kaya marahil ito ay apat na sa kasong ito. 902 00:37:02,320 --> 00:37:05,485 Bakit ako paggawa +1 pagkatapos pagtawag strlen ng s? 903 00:37:05,485 --> 00:37:06,360 Madla: [INAUDIBLE] 904 00:37:06,360 --> 00:37:07,590 David J. MALAN: Para sa na espesyal na character null. 905 00:37:07,590 --> 00:37:11,260 Kung hihilingin mo sa akin kung ano ang haba ng Pangalan ng Gabe, ako pagpunta sa sabihin apat. 906 00:37:11,260 --> 00:37:14,480 Sa ilalim ng hood, bagaman, kailangan ko na ikalimang byte para sa null character. 907 00:37:14,480 --> 00:37:16,100 Kaya na ang dahilan kung bakit ako paggawa ng +1. 908 00:37:16,100 --> 00:37:21,730 >> Ngayon lamang sa kasong ikaw ay tumatakbo na ito programa sa isang computer bukod sa, sabihin nating, 909 00:37:21,730 --> 00:37:24,610 ang CS50 appliance, kung saan ang laki ng isang char 910 00:37:24,610 --> 00:37:26,350 Maaaring maging iba mula sa aking sariling computer-- 911 00:37:26,350 --> 00:37:30,590 lumiliko out na maaari kong tumawag ito operator sizeof, magtanong lamang ang computer, 912 00:37:30,590 --> 00:37:32,870 ano ay ang laki ng isang char sa computer na ito? 913 00:37:32,870 --> 00:37:37,400 >> At sa pamamagitan ng pag-multiply ng limang sa halimbawa sa pamamagitan ng ang laki ng isang char, na 914 00:37:37,400 --> 00:37:40,440 sa karamihan ng mga computer ay maging isa, malloc lamang 915 00:37:40,440 --> 00:37:44,830 ay pagpunta sa maglaan para sa akin ito malaki chunk ng memory sa paglipas dito sa kanan. 916 00:37:44,830 --> 00:37:47,140 At ito ang nangyayari sa return-- ito ay isang function-- kaya 917 00:37:47,140 --> 00:37:48,265 pagpunta upang bumalik sa akin kung ano? 918 00:37:48,265 --> 00:37:50,914 919 00:37:50,914 --> 00:37:51,830 Madla: Ang address? 920 00:37:51,830 --> 00:37:53,709 David J. MALAN: Ang address ng kung ano? 921 00:37:53,709 --> 00:37:55,250 Madla: Sa mga memory ito inilaan? 922 00:37:55,250 --> 00:37:56,450 David J. MALAN: Sa mga memory inilalaan ito. 923 00:37:56,450 --> 00:37:59,189 Kaya wala akong mga ideya, tapat, kung saan ito ay pagpunta sa mga end up. 924 00:37:59,189 --> 00:38:01,480 Pupunta ako sa ipanukala na ito ang nangyayari sa mga end up sa 0x88. 925 00:38:01,480 --> 00:38:02,770 926 00:38:02,770 --> 00:38:06,009 Ganap na di-makatwirang, ngunit sa isang lugar bukod sa 0x50, 927 00:38:06,009 --> 00:38:08,800 dahil sa operating system, kung ano ang Windows at Mac OS gawin para sa akin, ay 928 00:38:08,800 --> 00:38:11,230 tiyakin na ito ay nagbibigay sa sa akin iba't ibang chunks ng RAM. 929 00:38:11,230 --> 00:38:14,210 >> Kaya ito ay ang halaga na kung saan ito chunk ng memorya ay maaaring magtapos up. 930 00:38:14,210 --> 00:38:16,060 Kaya ito ay kung ano ang nagtatapos up in dito, 0x88. 931 00:38:16,060 --> 00:38:17,480 932 00:38:17,480 --> 00:38:21,570 Kaya ngayon malinaw, maaari ba akong maunawaan na ito ay hindi katulad ng ito, 933 00:38:21,570 --> 00:38:23,960 dahil ang mga ito ay tumuturo sa iba't ibang mga chunks ng memorya. 934 00:38:23,960 --> 00:38:29,980 Kaya kung ko talaga ngayon ay nais upang kopyahin ito sa, gawin ang iyong mga ipinanukalang mga solusyon ipaalam. 935 00:38:29,980 --> 00:38:36,870 >> Hayaan pumunta lamang ni, lumikha ng para sa loop, at gawin t bracket i nakakakuha ng mga bracket i. 936 00:38:36,870 --> 00:38:39,760 Dahil ngayon ay maaari ko bang gamitin ang ito array-tulad ng pagtatanda, 937 00:38:39,760 --> 00:38:43,390 dahil kahit malloc napaka generically naglalaan ako ng memorya, 938 00:38:43,390 --> 00:38:45,290 memorya lamang magkadikit bytes. 939 00:38:45,290 --> 00:38:47,240 Byte, byte, byte, bumalik upang i-back sa likod. 940 00:38:47,240 --> 00:38:50,030 >> Maaari ko tiyak bilang isang programmer ituring ito bilang isang array, na 941 00:38:50,030 --> 00:38:55,090 ay nangangahulugan na maaari kong gamitin ito sa wakas ay pamilyar pagtatanda ng lamang ng ilang mga square bracket. 942 00:38:55,090 --> 00:38:56,462 943 00:38:56,462 --> 00:39:00,020 >> Kaya hayaan mo akong i-pause doon, dahil ito ay isang pulutong ng sabay-sabay, kahit 944 00:39:00,020 --> 00:39:03,530 bagaman ang pangunahing ideya sa pagbabalik-tanaw ay ang string, ang lahat ng mga oras na ito, 945 00:39:03,530 --> 00:39:05,550 ay hindi isang bagong uri ng data per se. 946 00:39:05,550 --> 00:39:10,150 Ito ay lamang ng isang tinatawag na pointer, ng isang address ng isang karakter, 947 00:39:10,150 --> 00:39:12,650 na nangangahulugan lamang ito ay isang numero na sa pamamagitan ng convention ng tao 948 00:39:12,650 --> 00:39:15,350 kami ay may posibilidad na magsulat bilang 0x isang bagay. 949 00:39:15,350 --> 00:39:18,590 >> Ngunit ito ay isang numero lamang, tulad ng 33 Oxford Street, 950 00:39:18,590 --> 00:39:20,530 na kung saan ang mangyayari sa maging ang Address CS gusali. 951 00:39:20,530 --> 00:39:22,000 952 00:39:22,000 --> 00:39:23,545 Ang anumang mga katanungan sa mga detalyeng ito? 953 00:39:23,545 --> 00:39:24,790 954 00:39:24,790 --> 00:39:25,289 Oo? 955 00:39:25,289 --> 00:39:28,530 >> Madla: Bakit sinusuri namin para t katumbas ng null? 956 00:39:28,530 --> 00:39:30,740 >> David J. MALAN: Bakit ginagawa namin suriin para sa hindi katumbas ng null? 957 00:39:30,740 --> 00:39:33,250 Kung binabasa namin ang documentation-- mahusay na question-- para sa malloc, 958 00:39:33,250 --> 00:39:37,020 ito ay pagpunta sa sabihin sa fine print, minsan malloc maaaring ibalik null, 959 00:39:37,020 --> 00:39:38,080 tulad ng GetString. 960 00:39:38,080 --> 00:39:41,820 At sa katunayan, GetString nagbabalik null kung, sa pagliko, malloc nagbabalik null, 961 00:39:41,820 --> 00:39:43,130 dahil GetString ay gumagamit ng malloc. 962 00:39:43,130 --> 00:39:46,400 >> At na maaaring mangyari kung ang OS, Mac OS, Windows, kahit anong, ay simpleng 963 00:39:46,400 --> 00:39:48,130 out ng memory para sa iyo. 964 00:39:48,130 --> 00:39:49,820 Kaya na kung ano ang nangyari doon. 965 00:39:49,820 --> 00:39:52,910 >> At ipaalam sa akin magbunyag ng isa sa iba pang mga bagay na maaaring pumutok lang ang iyong isip 966 00:39:52,910 --> 00:39:55,100 o ganap na masyadong malayo sa ibabaw ng linya. 967 00:39:55,100 --> 00:39:59,770 Ngunit ipaalam sa akin hilahin pataas ang pareho para sa loop para sa pagkopya, 968 00:39:59,770 --> 00:40:05,480 kung saan ang isang sandali ang nakalipas, pagpapabalik ay ito. t bracket ay nakakakuha i mga bracket i. 969 00:40:05,480 --> 00:40:06,740 >> Nice at user-friendly. 970 00:40:06,740 --> 00:40:09,330 Pakiramdam muli tulad ng Linggo Dalawang. 971 00:40:09,330 --> 00:40:14,920 Subalit ang bersyon na ito aktwal na maaaring maging rewritten bilang na ito, na kamukha cryptic. 972 00:40:14,920 --> 00:40:18,280 Ito ay isang diskarte na tinatawag na pointer aritmetika, address aritmetika. 973 00:40:18,280 --> 00:40:19,600 Ngunit kung bakit ito gumagana? 974 00:40:19,600 --> 00:40:22,220 >> Ngayon annoyingly, ang mga may-akda ng C nagpasyang gamitin 975 00:40:22,220 --> 00:40:25,070 ang simbolo * para sa iba't ibang mga layunin. 976 00:40:25,070 --> 00:40:29,020 Nakita na namin ito ng isang beses na, char *, na nangangahulugang "ninyo akong bigyan ng variable 977 00:40:29,020 --> 00:40:31,210 na pupuntahan naglalaman ng ang address ng isang char. " 978 00:40:31,210 --> 00:40:33,990 Kaya char * sa konteksto na Nangangahulugan ang "ninyo akong bigyan ng variable." 979 00:40:33,990 --> 00:40:40,050 >> Sa kasamaang palad, kung gagamitin mo ang * nang isang salita sa harap ng mga ito, tulad ng char, 980 00:40:40,050 --> 00:40:41,905 ito ay tinatawag na ngayong ang dereference operator. 981 00:40:41,905 --> 00:40:43,530 At kami makakita ng higit pang mga ito bago ang haba. 982 00:40:43,530 --> 00:40:44,930 Ngunit ang ibig sabihin nito lang ang "pumunta doon." 983 00:40:44,930 --> 00:40:49,070 Ito ay tulad sinasabi, kung may isang taong ipinasa sa akin sa isang piraso ng papel na "33 Oxford Street," 984 00:40:49,070 --> 00:40:53,830 kung gagawin ko "* 33 Oxford Street," ay nangangahulugan na "Pumunta down na ang daan papunta sa CS gusali." 985 00:40:53,830 --> 00:40:57,220 >> Kaya * ay nangangahulugan pumunta lamang doon kung walang salita sa unahan nito. 986 00:40:57,220 --> 00:40:59,100 Kaya kung ano ay hindi, upang maging malinaw? 987 00:40:59,100 --> 00:41:03,250 t ay ang address ng chunk ng memorya na ay ibinigay pabalik sa akin. 988 00:41:03,250 --> 00:41:06,650 s ay ang address ng kung ano, upang maging malinaw, sa halimbawa na-tatalakayin natin, 989 00:41:06,650 --> 00:41:07,500 ng maliliit na Gabe? 990 00:41:07,500 --> 00:41:08,990 991 00:41:08,990 --> 00:41:10,005 s ay ang address of-- 992 00:41:10,005 --> 00:41:11,585 993 00:41:11,585 --> 00:41:12,460 Madla: string ang. 994 00:41:12,460 --> 00:41:14,126 David J. MALAN: Ng orihinal na pangalan ni Gabe. 995 00:41:14,126 --> 00:41:16,660 Kaya ito ang address ng ito chunk ng memorya. 996 00:41:16,660 --> 00:41:22,220 Kaya kung sinasabi ko t + i-- i, paunawa, lamang ang aming lumang kaibigan. 997 00:41:22,220 --> 00:41:24,770 Ito ay lamang ng isang index variable na iterating mula sa zero sa up 998 00:41:24,770 --> 00:41:26,960 sa haba ng string s. 999 00:41:26,960 --> 00:41:30,367 Kaya ito ay magiging zero, pagkatapos ay i-isa, pagkatapos ng dalawang, pagkatapos tatlong, pagkatapos ng apat. 1000 00:41:30,367 --> 00:41:33,200 Kaya sabihin magtipun-tipon ang mga bagong Scratch-tulad ng palaisipan piraso, kung gagawin mo, 1001 00:41:33,200 --> 00:41:36,140 kahit na, muli, ang syntax ay malayo sa higit pang arcane kaysa sa simula. 1002 00:41:36,140 --> 00:41:39,522 Kaya t ay isang address + i ay pagpunta sa magbibigay sa akin 1003 00:41:39,522 --> 00:41:42,480 isang numero, dahil ang mga ito ay lahat mga numero na aming na-pagguhit bilang hex. 1004 00:41:42,480 --> 00:41:43,560 Ngunit ang mga ito ay lamang ng mga numero. 1005 00:41:43,560 --> 00:41:49,960 >> Kaya kung ang address ng t sinabi namin ay 0x88, kung ano ang 0x88 plus zero. 1006 00:41:49,960 --> 00:41:51,564 1007 00:41:51,564 --> 00:41:53,980 Kahit na ikaw ay hindi komportable may pa hex, maglaan ng hula. 1008 00:41:53,980 --> 00:41:54,410 >> Madla: Ang orihinal na. 1009 00:41:54,410 --> 00:41:55,850 >> David J. MALAN: pa rin 0x88. 1010 00:41:55,850 --> 00:41:58,910 Kaya kung ano ang ibig sabihin ng 0x88 *? 1011 00:41:58,910 --> 00:42:02,670 Ang ibig sabihin nito, "pumunta doon" na ang ibig sabihin mabisa, "ilagay ang iyong mga daliri dito." 1012 00:42:02,670 --> 00:42:06,930 At ngayon sa kanang gilid ng ito expression, * at pagkatapos ay sa parens, 1013 00:42:06,930 --> 00:42:11,586 s + i Nangangahulugan s, na ang tugunan up dito ng maliit g. 1014 00:42:11,586 --> 00:42:16,220 s + 0 ay, siyempre, s, kahit anong s ay. 1015 00:42:16,220 --> 00:42:21,230 >> Kaya ngayon, ito'y * s, na tulad lang * 33 Oxford Street ay nangangahulugan na pumunta sa address 1016 00:42:21,230 --> 00:42:22,010 s. 1017 00:42:22,010 --> 00:42:24,170 Kaya narito ang daliri, kanang kamay. 1018 00:42:24,170 --> 00:42:26,050 Kaya kung ano ako pagpunta sa kopyahin sa kung ano? 1019 00:42:26,050 --> 00:42:30,260 Ang mga bagay sa kanan, na Gabe, kaunti g dito, sa dito. 1020 00:42:30,260 --> 00:42:32,750 >> At kaya ang epekto ng na unang iteration ng loop, 1021 00:42:32,750 --> 00:42:36,200 bilang mo ang mga ipinanukalang, kahit na mukha itong mabaliw mas komplikado kaysa sa kahit ano 1022 00:42:36,200 --> 00:42:42,110 nasaksihan namin bago, ay nagre sinasabi pumunta dito at kopyahin na karakter dito. 1023 00:42:42,110 --> 00:42:44,700 Ito ay nagbibigay sa iyo ng isang mapa sa parehong lokasyon. 1024 00:42:44,700 --> 00:42:46,130 >> At kami makita malayo higit pa sa mga ito. 1025 00:42:46,130 --> 00:42:50,600 Ngunit sa ngayon, ang mga pag-asa ay isa lamang sa ipakilala ang ilan sa mga pangunahing ideya. 1026 00:42:50,600 --> 00:42:53,550 At sa katunayan, tingnan natin hayaan isang huling programa dito, 1027 00:42:53,550 --> 00:42:57,480 at pagkatapos ay ang ipinangako claymation, na gawin ang lahat ng karapatan ang lahat. 1028 00:42:57,480 --> 00:42:57,980 Lahat ng karapatan. 1029 00:42:57,980 --> 00:43:01,680 Kaya hayaan mo akong magbukas up-- doon kami pumunta. 1030 00:43:01,680 --> 00:43:02,850 1031 00:43:02,850 --> 00:43:05,440 Kaya ipaalam me-- magpapadala kami bumalik upang ang larawang ito bago ang haba. 1032 00:43:05,440 --> 00:43:08,360 Hayaan akong magbukas ng mga ito panghuling halimbawa dito. 1033 00:43:08,360 --> 00:43:09,440 1034 00:43:09,440 --> 00:43:12,710 >> Kaya dito ay isang napakabilis, super programa na accomplishes 1035 00:43:12,710 --> 00:43:15,050 walang anuman sa buhay na ang mga sumusunod. 1036 00:43:15,050 --> 00:43:18,740 Ito unang declares dalawang variable, x at y, na hindi numero oras na ito, 1037 00:43:18,740 --> 00:43:19,240 per se. 1038 00:43:19,240 --> 00:43:20,448 Hindi ito mga integer, bawat se. 1039 00:43:20,448 --> 00:43:22,899 Sila ay tila int *. 1040 00:43:22,899 --> 00:43:25,690 Kaya kahit sino lamang, kung ano ang ibig sabihin ng kung ang uri ng iyong data, ang iyong mga variable, 1041 00:43:25,690 --> 00:43:26,860 ay ng uri int * star? 1042 00:43:26,860 --> 00:43:30,240 Iyan ang address ng isang int. 1043 00:43:30,240 --> 00:43:31,990 >> Kaya na hindi ko na walang ideya kung saan pa ito. 1044 00:43:31,990 --> 00:43:35,150 Ito lamang ay nangangahulugan "ilagay, sa huli, ang address ng isang int dito. " 1045 00:43:35,150 --> 00:43:38,340 0x50, 0x88, kung saan man ito ay nasa memorya, isang address ng pagpunta doon. 1046 00:43:38,340 --> 00:43:40,200 At iyon ang y ay magiging, pati na rin. 1047 00:43:40,200 --> 00:43:44,920 >> Kung ngayon ko sasabihin x = malloc (sizeof (int)), ito ay isang magarbong paraan ng sinasabi, 1048 00:43:44,920 --> 00:43:49,000 hey operating system, sa pamamagitan ng malloc, bigyan mo ako ng sapat na memory para sa laki 1049 00:43:49,000 --> 00:43:52,370 ng isang int, na marahil magiging 32 bit o apat na bytes. 1050 00:43:52,370 --> 00:43:53,680 >> Kaya kung ano ang bumalik malloc? 1051 00:43:53,680 --> 00:43:55,250 Ibinabalik ng Malloc isang address. 1052 00:43:55,250 --> 00:43:57,020 Kaya kung ano ang nangyayari upang makakuha ng mga naka-imbak sa x? 1053 00:43:57,020 --> 00:44:00,600 Ang address ng chunk ng memorya, ang apat na bytes, na malloc 1054 00:44:00,600 --> 00:44:03,360 lamang natagpuan para sa akin sa pamamagitan ng pagtatanong sa operating system. 1055 00:44:03,360 --> 00:44:08,240 >> Ngayon samantala, linya apat dito, ang * x = 42. 1056 00:44:08,240 --> 00:44:09,990 Lamang na maging malinaw, kung ano ang nangyayari down na doon? 1057 00:44:09,990 --> 00:44:11,530 Sa kaliwang bahagi, * x. 1058 00:44:11,530 --> 00:44:13,610 na tulad ng * 33 Oxford Street. 1059 00:44:13,610 --> 00:44:15,523 Kaya * x ay nangangahulugang kung ano? 1060 00:44:15,523 --> 00:44:16,450 >> Madla: Pumunta sa. 1061 00:44:16,450 --> 00:44:17,908 >> David J. MALAN: Pumunta sa address na iyon. 1062 00:44:17,908 --> 00:44:20,466 Hangga't na chunk ng memorya ay, pumunta dito. 1063 00:44:20,466 --> 00:44:21,979 At ilagay kung ano doon, malinaw naman? 1064 00:44:21,979 --> 00:44:22,520 Madla: 42. 1065 00:44:22,520 --> 00:44:23,580 David J. MALAN: 42. 1066 00:44:23,580 --> 00:44:25,650 Ang lahat ng mga karapatan, * y, parehong ideya. 1067 00:44:25,650 --> 00:44:26,860 Pumunta sa address sa y. 1068 00:44:26,860 --> 00:44:31,740 Ilagay ang numero ng 13 doon, ngunit kung ano ang y sa sandaling ito? 1069 00:44:31,740 --> 00:44:33,172 1070 00:44:33,172 --> 00:44:34,630 Madla: Walang memory para sa y. 1071 00:44:34,630 --> 00:44:35,710 David J. MALAN: Mayroon Walang memory para sa y. 1072 00:44:35,710 --> 00:44:38,215 Kaya kung ano ang ginagawa y marahil naglalaman ng, bilang nai-sinasabi namin? 1073 00:44:38,215 --> 00:44:38,520 >> Madla: Basura. 1074 00:44:38,520 --> 00:44:39,480 >> David J. MALAN: Ang ilang mga halaga ng basura. 1075 00:44:39,480 --> 00:44:41,320 Ngayon, halaga ng basura ay isang numero pa rin. 1076 00:44:41,320 --> 00:44:43,160 Maaari pa rin itong maging mali para sa isang address. 1077 00:44:43,160 --> 00:44:45,160 Ito ay parang isang tao nagsulat ng isang bagay pababa, 1078 00:44:45,160 --> 00:44:48,002 at misinterpreted ko ito bilang kahulugan ang ilang mga gusali sa kalye. 1079 00:44:48,002 --> 00:44:50,460 At kung susubukan mo lamang na pumunta sa ilang gusali hindi mo pag-aari, 1080 00:44:50,460 --> 00:44:53,710 o ilang chunk ng memory mayroon kang hindi naging ibinigay, masamang bagay na maaaring mangyari. 1081 00:44:53,710 --> 00:44:57,740 Maaaring pag-crash ng computer, o ilang iba pang hindi tiyak pag-uugali ay maaaring mangyari. 1082 00:44:57,740 --> 00:45:01,310 >> Kaya ang intro, pagkatapos, i-Binky ay na ito. 1083 00:45:01,310 --> 00:45:04,290 Natatandaan ko pa rin, 20 ang ilang mga kakaibang taon na ang lumipas, 1084 00:45:04,290 --> 00:45:07,200 kung saan ako ay kapag ako sa wakas naunawaan na pointer. 1085 00:45:07,200 --> 00:45:09,520 >> Aling ay upang sabihin, kung ikaw mag-iwan dito sa tatlong minuto 1086 00:45:09,520 --> 00:45:12,170 at sa tingin ko hindi Nauunawaan mga payo, Napagtanto 1087 00:45:12,170 --> 00:45:14,410 Ako remembered para sa 20 taon para sa ilang mga nakatutuwang dahilan 1088 00:45:14,410 --> 00:45:17,140 kapag at kung bakit ito sa wakas sunk sa, pag-upo sa aking pagtuturo 1089 00:45:17,140 --> 00:45:19,501 kapwa, Nishat Mehta sa likod ng Eliot Kakain sa Labas Hall. 1090 00:45:19,501 --> 00:45:21,250 Ngayon, nai-remembered ko na ito dahil ito ay 1091 00:45:21,250 --> 00:45:23,920 isa sa mga paksa ko, sa partikular, struggled na may. 1092 00:45:23,920 --> 00:45:26,470 At pagkatapos, ito sa wakas nag-click, tulad ng Dare ko sabihin ng maraming mga paksa 1093 00:45:26,470 --> 00:45:27,460 Sa kalaunan ay. 1094 00:45:27,460 --> 00:45:32,590 At ngayon, upang gumawa ng pakiramdam na ang lahat ng mga mas masaya at ang lahat ng higit convincing, 1095 00:45:32,590 --> 00:45:35,360 hayaan tumagal ng isang pangwakas na hitsura sa aming huling tatlong minuto dito sa Binky, 1096 00:45:35,360 --> 00:45:37,675 mula sa aming mga kaibigan, Nick Parlante mula sa Stanford. 1097 00:45:37,675 --> 00:45:38,910 1098 00:45:38,910 --> 00:45:41,580 >> [VIDEO pag-playback] 1099 00:45:41,580 --> 00:45:42,750 >> -Hey, Binky. 1100 00:45:42,750 --> 00:45:43,500 Gumising! 1101 00:45:43,500 --> 00:45:45,960 Panahon na para masaya pointer. 1102 00:45:45,960 --> 00:45:47,012 >> -What Iyan? 1103 00:45:47,012 --> 00:45:48,723 Alamin ang tungkol sa mga payo? 1104 00:45:48,723 --> 00:45:50,580 Oh, goody! 1105 00:45:50,580 --> 00:45:53,563 >> -Well, Upang makapagsimula, hulaan ko kami ay pagpunta sa kailangan ng ilang mga payo. 1106 00:45:53,563 --> 00:45:54,390 >> -OK. 1107 00:45:54,390 --> 00:45:57,930 Ang code na ito naglalaan ng dalawang mga payo, na maaaring tumuro sa integer. 1108 00:45:57,930 --> 00:45:58,430 -OK. 1109 00:45:58,430 --> 00:46:02,140 Well, nakikita ko ang dalawang mga payo, ngunit sila hindi mukhang na tumuturo sa kahit ano. 1110 00:46:02,140 --> 00:46:02,980 >> -That Tama. 1111 00:46:02,980 --> 00:46:05,100 Sa una, mga payo ay hindi tumuturo sa kahit ano. 1112 00:46:05,100 --> 00:46:08,030 Ang mga bagay na ituro ang mga ito sa ay tinatawag na pointees, at pagse-set up ng mga ito 1113 00:46:08,030 --> 00:46:09,370 isang hiwalay na hakbang. 1114 00:46:09,370 --> 00:46:10,220 >> -Oh, Kanan, kanan. 1115 00:46:10,220 --> 00:46:10,950 Alam ko na. 1116 00:46:10,950 --> 00:46:12,385 Ang pointees ay hiwalay. 1117 00:46:12,385 --> 00:46:14,315 ER, kaya paano mo maglaan ng isang 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 Well, naglalaan ang code na ito isang bagong integer pointee, 1121 00:46:18,970 --> 00:46:20,950 at ito bahagi sets x upang tumuro sa ito. 1122 00:46:20,950 --> 00:46:22,050 1123 00:46:22,050 --> 00:46:23,230 >> -Hey, Na mas mahusay ang hitsura. 1124 00:46:23,230 --> 00:46:25,060 Kaya gawin itong gawin ang isang bagay. 1125 00:46:25,060 --> 00:46:25,990 >> -OK. 1126 00:46:25,990 --> 00:46:30,455 Idedetalye ko dereference ang pointer ng x sa mag-imbak ang numero 42 sa pointee nito. 1127 00:46:30,455 --> 00:46:32,830 Para sa mga ito nanlilinlang, kakailanganin ko ang aking Magic Wand ng Dereferencing. 1128 00:46:32,830 --> 00:46:34,130 1129 00:46:34,130 --> 00:46:36,080 >> Ang inyong Magic Wand ng Dereferencing? 1130 00:46:36,080 --> 00:46:37,357 1131 00:46:37,357 --> 00:46:38,190 That-- na iyan. 1132 00:46:38,190 --> 00:46:39,340 1133 00:46:39,340 --> 00:46:41,080 >> -This Ay kung ano ang hitsura ng code tulad ng. 1134 00:46:41,080 --> 00:46:44,110 Kukunin ko na lang i-set up ang numero, at [POP] 1135 00:46:44,110 --> 00:46:44,700 >> -Hey, Hanapin. 1136 00:46:44,700 --> 00:46:46,140 May pumupunta dito. 1137 00:46:46,140 --> 00:46:50,980 >> -So Paggawa ng dereference sa mga sumusunod x ang arrow upang ma-access pointee nito. 1138 00:46:50,980 --> 00:46:53,160 Sa kasong ito, ang isang tindahan sa 42 doon. 1139 00:46:53,160 --> 00:46:57,710 Uy subukang gamitin ito upang mag-imbak ang numero 13 sa pamamagitan ng iba pang mga pointer, y. 1140 00:46:57,710 --> 00:46:58,760 >> -OK. 1141 00:46:58,760 --> 00:47:03,270 Makikita pumunta sa paglipas ng ko lang dito sa y, at makuha ang numero ng 13 set up. 1142 00:47:03,270 --> 00:47:07,930 At pagkatapos, lumabas sa Wand ng Dereferencing at lamang [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 Iyon ay hindi gumagana. 1146 00:47:11,090 --> 00:47:15,630 Sabihing, Binky, Hindi sa tingin ko dereferencing y ay isang magandang ideya, dahil alam mo, 1147 00:47:15,630 --> 00:47:17,850 pagse-set up ang pointee ay isang hiwalay na hakbang. 1148 00:47:17,850 --> 00:47:20,450 At Hindi sa tingin ko kailanman ginawa namin ito. 1149 00:47:20,450 --> 00:47:21,480 >> -Good Point. 1150 00:47:21,480 --> 00:47:21,980 -Yeah. 1151 00:47:21,980 --> 00:47:25,680 Inilalaan namin ang pointer ng y, ngunit namin Hindi kailanman itakda ito upang tumuro sa isang pointee. 1152 00:47:25,680 --> 00:47:27,190 1153 00:47:27,190 --> 00:47:28,616 >> -Very Observant. 1154 00:47:28,616 --> 00:47:30,240 -Hey, Naghahanap ka ng magandang doon, Binky. 1155 00:47:30,240 --> 00:47:33,400 Puwede ninyo bang ayusin ito nang sa gayon ay y punto sa parehong pointee bilang x? 1156 00:47:33,400 --> 00:47:34,000 >> -Sure. 1157 00:47:34,000 --> 00:47:36,780 Makikita ko bang gamitin ang aking Magic Wand Pointer ng Pagtatalaga. 1158 00:47:36,780 --> 00:47:38,740 >> -Is Na magiging ng problema tulad ng bago? 1159 00:47:38,740 --> 00:47:39,240 -No. 1160 00:47:39,240 --> 00:47:40,660 Ito ay hindi pindutin ang pointees. 1161 00:47:40,660 --> 00:47:44,450 Nagbabago dito isa lamang pointer sa nagtuturo sa parehong bagay bilang isa pang. 1162 00:47:44,450 --> 00:47:45,450 >> -Oh, Nakikita ko. 1163 00:47:45,450 --> 00:47:48,200 Ngayon y punto sa parehong lugar bilang x. 1164 00:47:48,200 --> 00:47:48,910 Kaya maghintay. 1165 00:47:48,910 --> 00:47:49,950 Ngayon, y ay naayos na. 1166 00:47:49,950 --> 00:47:51,120 Mayroon itong pointee. 1167 00:47:51,120 --> 00:47:54,510 Kaya maaari mong subukan ang Wand ng Dereferencing ulit upang maipadala ang 13 ulit. 1168 00:47:54,510 --> 00:47:56,510 >> -Uh, OK. 1169 00:47:56,510 --> 00:47:58,160 Narito ito napupunta. [POP] 1170 00:47:58,160 --> 00:47:59,340 >> -Hey, Tingnan iyon. 1171 00:47:59,340 --> 00:48:00,750 Dereferencing Ngayon gawa sa y. 1172 00:48:00,750 --> 00:48:04,991 At dahil ang mga payo ang nagbabahagi na ang isa pointee, parehong nilang makita ang 13. 1173 00:48:04,991 --> 00:48:05,490 -Yeah. 1174 00:48:05,490 --> 00:48:06,870 Pagbabahagi, kahit anong. 1175 00:48:06,870 --> 00:48:08,820 Kaya kami makapupunta upang lumipat ngayon lugar? 1176 00:48:08,820 --> 00:48:09,440 >> Oh, hanapin. 1177 00:48:09,440 --> 00:48:10,830 Humihingi kami out sa oras. 1178 00:48:10,830 --> 00:48:11,570 >> -But-- 1179 00:48:11,570 --> 00:48:13,530 >> -Just Tandaan ang tatlong mga panuntunan pointer. 1180 00:48:13,530 --> 00:48:16,560 Number One, ang pangunahing istraktura ay na mayroon kang isang pointer, 1181 00:48:16,560 --> 00:48:18,680 at ito tumuturo sa ibabaw sa isang pointee. 1182 00:48:18,680 --> 00:48:20,640 Ngunit ang pointer at pointee ay hiwalay, 1183 00:48:20,640 --> 00:48:22,610 at ang karaniwang mga error ay ang pag-set up ng isang pointer, 1184 00:48:22,610 --> 00:48:25,000 ngunit upang kalimutan na bigyan ito ng isang pointee. 1185 00:48:25,000 --> 00:48:28,170 >> Numero ng Dalawang, pointer dereferencing Nagsisimula sa ang pointer 1186 00:48:28,170 --> 00:48:31,050 at sinusundan nito arrow sa ibabaw upang ma-access pointee nito. 1187 00:48:31,050 --> 00:48:33,400 Bilang namin ang lahat ng alam, ito Gumagana lamang kung mayroong 1188 00:48:33,400 --> 00:48:36,270 isang pointee, kung anong uri ng nakakakuha pabalik sa panuntunan Number One. 1189 00:48:36,270 --> 00:48:39,000 >> Numero ng Tatlong, pointer pagtatalaga ay magtatagal ng isang pointer 1190 00:48:39,000 --> 00:48:42,320 at nagbabago ito upang tumuro sa parehong pointee bilang isa pang pointer. 1191 00:48:42,320 --> 00:48:44,160 Kaya matapos ang pagtatalaga, ang dalawang mga payo 1192 00:48:44,160 --> 00:48:45,910 ay tumuturo sa parehong pointee. 1193 00:48:45,910 --> 00:48:47,990 Minsan, na tinatawag na pagbabahagi. 1194 00:48:47,990 --> 00:48:49,740 At iyon ang lahat doon ay upang ito, talagang. 1195 00:48:49,740 --> 00:48:50,277 Bye-bye ngayon. 1196 00:48:50,277 --> 00:48:51,110 [END VIDEO pag-playback] 1197 00:48:51,110 --> 00:48:52,568 David J. MALAN: Iyon lang para sa CS50. 1198 00:48:52,568 --> 00:48:55,110 Makikita natin sa iyo sa susunod na linggo. 1199 00:48:55,110 --> 00:48:56,064