1 00:00:00,000 --> 00:00:02,310 [Powered by Google Translate] [Linggo 4, patuloy na] 2 00:00:02,310 --> 00:00:04,240 [David J. Malan - Harvard University] 3 00:00:04,240 --> 00:00:07,290 [Ito ay CS50. - CS50.TV] 4 00:00:07,290 --> 00:00:11,290 >> Ito ay CS50, at ito ay ang katapusan ng linggo 4. 5 00:00:11,290 --> 00:00:14,030 Kaya ilang mabuting balita at ilang masamang balita. 6 00:00:14,030 --> 00:00:26,240 Walang panayam sa Lunes, ang problema hindi magtakda ng susunod na linggo. [Mag-aaral pagpalakpak] 7 00:00:26,240 --> 00:00:28,680 Hindi ka upang i kung saan ito ay pagpunta. 8 00:00:28,680 --> 00:00:31,590 Ngunit kami ay may ito sa halip sa susunod na Miyerkules, 9 00:00:31,590 --> 00:00:37,740 at mayroon ding bawat ang syllabus 1 Biyernes panayam susunod Biyernes upang maaari naming manatili sa track. 10 00:00:37,740 --> 00:00:40,580 Ngunit lahat ay kumuha gaya ng dati, kaya hindi mag-alala. 11 00:00:40,580 --> 00:00:44,100 >> At may pagtatangi sa pagsusulit ng 0 kung ano ang gagawin namin patungo sa pagtatapos ng linggo 12 00:00:44,100 --> 00:00:47,140 ay post sa homepage cs50.net kurso ng paliwanag 13 00:00:47,140 --> 00:00:50,160 kung anong uri ng mga inaasahan ay dapat mayroon ka pagdating sa unang pagsusulit. 14 00:00:50,160 --> 00:00:55,100 Sa pangkalahatan, ito ay maramihang mga pagpipilian, totoo maling, maikling sagot, maikling coding problema. 15 00:00:55,100 --> 00:00:57,360 Hindi ka pagpunta sa inaasahan upang ipatupad ang katumbas 16 00:00:57,360 --> 00:01:00,030 ng isang problema na gusto mong makita sa isang pset, kung saan mayroon kang isang computer 17 00:01:00,030 --> 00:01:03,240 at debugger at tulad, ngunit ay may maliit na coding problema. 18 00:01:03,240 --> 00:01:06,900 >> At sa katunayan, ang pinakamahusay na gabay upang makakuha ng ideya ng kung ano CS50 pagsusulit ay tulad ng 19 00:01:06,900 --> 00:01:09,180 ay pumunta sa cs50.net, pumunta sa Pagsusulit link, 20 00:01:09,180 --> 00:01:11,920 at maaari mong makita ang mga nakaraang ilang taon sa halaga ng mga pagsusulit. 21 00:01:11,920 --> 00:01:16,600 Lamang mapagtanto na kurikulum ay hindi palaging ang parehong sa mga nakaraang taon. 22 00:01:16,600 --> 00:01:18,510 Minsan idagdag namin, minsan ibawas, 23 00:01:18,510 --> 00:01:20,670 kaya kung mong makita ang ilang mga paksa sa isa sa mga lumang pagsusulit 24 00:01:20,670 --> 00:01:25,380 na mayroon kang mga ideya kung ano ang pinag-uusapan ng, alinman namin ay masaklawan 25 00:01:25,380 --> 00:01:27,210 o na hindi namin masaklawan. 26 00:01:27,210 --> 00:01:31,110 Ngunit sa ang form ng mga review, ito Linggo, Lunes, at Martes 27 00:01:31,110 --> 00:01:34,770 pati na rin bilang isang kurso-malawak na pagsusuri sa sesyon sa Linggo gabi - 28 00:01:34,770 --> 00:01:37,500 oras at lokasyon na inihayag sa homepage ng kurso - 29 00:01:37,500 --> 00:01:40,120 mo ang lahat ng pagkakataon upang suriin sa Fellows ng pagtuturo sa kurso 30 00:01:40,120 --> 00:01:44,830 materyal para sa taong ito, sa seksyon at bilang isang buong klase, 31 00:01:44,830 --> 00:01:48,400 at ang mga ito ay kumuha gaya ng dati pati na rin. 32 00:01:48,400 --> 00:01:53,380 >> Ayos lang. Kaya nang walang karagdagang linggal, isang komento sa pass / mabigo at idagdag / drop. 33 00:01:53,380 --> 00:01:57,980 Maaaring nakakita ka ng aking mga tala sa nakaraang gabi, at talaga ito ilang karagdagang muling pagtiyak 34 00:01:57,980 --> 00:02:01,250 na kung ikaw ay kabilang sa mga partikular na mas mababa kumportable o saanman sa pagitan 35 00:02:01,250 --> 00:02:04,870 at ikaw ay pakiramdam ng kaunti lamang sa paglipas ng iyong ulo, 36 00:02:04,870 --> 00:02:08,430 Napagtanto na ay talagang masyadong normal, at may sapat na istraktura ng suporta sa lugar, 37 00:02:08,430 --> 00:02:13,530 isa ng kung aling mga oras ng opisina mga layunin sa pagpapabuti ang lahat ng higit pa bawat aking email huling gabi, 38 00:02:13,530 --> 00:02:16,520 at Napagtanto masyadong na isang pagpipilian tulad ng pass / mabibigo para sa isang klase tulad nito 39 00:02:16,520 --> 00:02:21,540 talaga ay nilalayong bilang isang mekanismo sa sa gilid ng isang kurso tulad nito, 40 00:02:21,540 --> 00:02:24,200 sa gayon ay muli kung ikaw ay paggastos ng mga 10, 15, 20 oras 41 00:02:24,200 --> 00:02:28,160 lamang sinusubukan upang makakuha ng ilang pset sa trabaho at alam mo na ikaw ay 90-95% ng paraan doon 42 00:02:28,160 --> 00:02:32,100 ngunit hindi mo mahanap ang ilang mga bug na mapahamak, sa isang pass / mabigo ang modelo na uri ng okay. 43 00:02:32,100 --> 00:02:36,230 >> Ang ideya ay na may mekanismo na na maaari mong pagkatapos ay pumunta focus sa iyong iba pang mga psets 44 00:02:36,230 --> 00:02:39,530 o matulog o anumang ito ay na nais mong mag-focus sa. 45 00:02:39,530 --> 00:02:43,390 Kaya Napagtanto na mayroon kang hanggang ito darating na Martes - technically ika-5 Monday, 46 00:02:43,390 --> 00:02:50,840 ngunit ito ay isang holiday, kaya ito darating na Martes - upang lumipat mula sa pass / hindi gradong o vice versa. 47 00:02:50,840 --> 00:02:54,450 At kung ikaw ay talagang sa bangin at iniisip drop sa kabuuan, 48 00:02:54,450 --> 00:02:56,440 mangyaring mahuli ako pagkatapos ng panayam o drop sa akin ng isang tala. 49 00:02:56,440 --> 00:02:59,990 Ikagagalak naming hindi bababa sa chat bago kang mag-bid paalam. 50 00:02:59,990 --> 00:03:03,470 Ayos lang. Kaya't nagsimula kaming paglalaan ng mga gulong ng pagsasanay off huling beses. 51 00:03:03,470 --> 00:03:06,030 Sa partikular, nakatutok kami sa string. 52 00:03:06,030 --> 00:03:09,740 String ay isang bagay na ipinahayag sa library ng CS50, 53 00:03:09,740 --> 00:03:14,340 partikular sa file na iyon na tinatawag na cs50.h kung saan magsisimula kami upang tingnan ito linggo at susunod. 54 00:03:14,340 --> 00:03:17,250 Ngunit string ay talagang lamang pagpapagaan ng isang bagay 55 00:03:17,250 --> 00:03:20,980 na ng kaunti mas arcanely inilarawan bilang magpasinda *. 56 00:03:20,980 --> 00:03:24,090 Magpasinda hindi kami pamilyar sa. Ito ay lamang ng isang solong character. 57 00:03:24,090 --> 00:03:28,010 Ngunit ang * ng Lunes naitala kung ano? >> [Mag-aaral] Ang isang pointer. 58 00:03:28,010 --> 00:03:31,290 Ang isang pointer. At kung ano ang isang pointer? >> [Mag-aaral] isang address. 59 00:03:31,290 --> 00:03:33,420 >> Ito ay tulad ng isang address, isang lokasyon sa memorya. 60 00:03:33,420 --> 00:03:35,910 Ano ang isang address o lokasyon o memory? 61 00:03:35,910 --> 00:03:40,290 Muli, ang lahat sa atin ay may laptop na may kalesa o 2 gigabytes ng RAM malamang mga araw na ito, 62 00:03:40,290 --> 00:03:44,160 at na nangangahulugan na mayroon kang isang bilyong o 2 bilyong mga byte halaga ng memorya. 63 00:03:44,160 --> 00:03:46,240 At hindi ito ay talagang mahalaga kung ano ang pisikal na kamukha, 64 00:03:46,240 --> 00:03:51,220 ngunit sa pananampalataya na maaari mong NUMBER lahat ng mga indibidwal na bytes na ang iyong sariling laptop ay may - 65 00:03:51,220 --> 00:03:54,580 ito ay byte 0, ito ay byte 1, ito ay byte 2 bilyong - 66 00:03:54,580 --> 00:03:56,100 at iyon mismo kung ano ang computer ng isang. 67 00:03:56,100 --> 00:04:00,030 Kapag maglaan ka ng espasyo para sa isang solong character, halimbawa, 68 00:04:00,030 --> 00:04:02,480 ito malinaw naman ay may upang mabuhay sa isang lugar sa memorya ng iyong computer, 69 00:04:02,480 --> 00:04:05,860 at marahil ito sa bilang ng byte 12345, 70 00:04:05,860 --> 00:04:08,470 at na ang isang lugar hanggang dito sa memorya ng iyong computer. 71 00:04:08,470 --> 00:04:12,630 At ang address na karakter ay 12345. 72 00:04:12,630 --> 00:04:16,140 >> Ngayon, sa linggo 0 pamamagitan ng ngayon sa gayon malayo, hindi namin talagang cared 73 00:04:16,140 --> 00:04:19,170 kung saan sa bagay memorya ay naka-imbak dahil namin karaniwang gamitin ang mga simbolo, 74 00:04:19,170 --> 00:04:22,540 variable, at array upang aktwal na makakuha ng sa aming mga data. 75 00:04:22,540 --> 00:04:24,950 Ngunit tulad ng Lunes at ang lahat ng higit pa ngayon, ngayon ka na magkaroon ng 76 00:04:24,950 --> 00:04:27,710 ang lahat ng mga mas makahulugan na mga kakayahan sa pagsulat programa 77 00:04:27,710 --> 00:04:31,330 talagang manipulahin ang memorya ng isang computer gayunpaman nakikita mo magkasya, 78 00:04:31,330 --> 00:04:33,720 para sa parehong mahusay na layunin at masamang, 79 00:04:33,720 --> 00:04:39,620 bug pagiging isang napaka-karaniwang resulta sa puntong ito sa pag-aaral ng mga bagay na ito. 80 00:04:39,620 --> 00:04:42,460 Ngunit ano ang talagang ibig sabihin sa isang pansamantalang trabaho *? 81 00:04:42,460 --> 00:04:46,140 Hayaan ng magpatuloy bumalik sa - at magpapadala kami bumalik sa Binky tulad ng ipinangako ngayon. 82 00:04:46,140 --> 00:04:48,670 Natin pumunta sa isang simpleng halimbawa dito. 83 00:04:48,670 --> 00:04:53,060 Hayaan akong i-save ang file na ito sa bilang compare.c, at ipaalam sa akin lamang makakuha ng ilang mga template code dito 84 00:04:53,060 --> 00:05:00,490 kaya isama stdio.h, hayaan mo akong ring bigyan ang aking sarili ay kinabibilangan ng cs50.h. Na ako mag-zoom in hanggang doon. 85 00:05:00,490 --> 00:05:05,850 Hayaan ang simulan ang pagsusulat sa akin pangunahing int, pangunahing (walang bisa), at ngayon ay nais kong gawin ang isang bagay tulad nito: 86 00:05:05,850 --> 00:05:13,520 printf ("Bigyan mo ako ng string:") at pagkatapos ay ko bang gamitin ang string s ay makakakuha GetString 87 00:05:13,520 --> 00:05:16,750 upang makakuha ng isang string mula sa gumagamit, at pagkatapos ay ako pagpunta sa tanungin ang user para sa isa pa. 88 00:05:16,750 --> 00:05:21,870 ("Bigyan mo ako ng isa pang string:") at ako pagpunta upang hilingin sa kanila sa pamamagitan ng GetString upang makakuha ng na. 89 00:05:21,870 --> 00:05:27,020 Tatawag ako ito t dahil t nauuna matapos s at s ay isang magaling na pangalan para sa isang string kung medyo generic na. 90 00:05:27,020 --> 00:05:30,030 Kaya GetString, at ngayon ko lang nais na gawin ang isang katinuan check at ako pagpunta sa sabihin 91 00:05:30,030 --> 00:05:39,770 kung ang (mga == t) pagkatapos lamang ako pagpunta sa sabihin sa user printf ("Ikaw-type ang parehong bagay \ n!"); 92 00:05:39,770 --> 00:05:45,520 tao ako pagpunta sa i-print ang isang bagay tulad ng ("Ikaw-type ng isang bagay na iba't ibang! \ n") 93 00:05:45,520 --> 00:05:48,460 o anumang pangungusap ay. Kaya ang isang bagay tulad na. 94 00:05:48,460 --> 00:05:52,200 Pagkatapos tulad ng dati, kukunin ko na bumalik ng 0 na lang signified na walang masamang nangyari, 95 00:05:52,200 --> 00:05:54,400 at ako pagpunta upang magpatuloy at makatipon at patakbuhin ang program na ito. 96 00:05:54,400 --> 00:05:56,540 >> Ngunit sa Lunes namin tumakbo sa programang ito, 97 00:05:56,540 --> 00:06:00,420 at aktwal na Sinabi na ang HELLO ay hindi HELLO at paalam ay hindi paalam. 98 00:06:00,420 --> 00:06:03,140 Ang pag-uugali na namin nakita ng kaunti pa tulad nito. 99 00:06:03,140 --> 00:06:11,450 Hayaan ang mga pumunta sa akin sa aking pinagmulan directory, zoom in dito, at sabihin huwag gumawa ihambing. 100 00:06:11,450 --> 00:06:14,570 Inipon okay. Ipaalam sa akin patakbuhin ihambing. Bigyan mo ako ng isang string: HELLO. 101 00:06:14,570 --> 00:06:16,300 Bigyan mo ako ng isa pang string: HELLO. 102 00:06:16,300 --> 00:06:18,000 Nai-type mo ang isang bagay na iba't ibang! 103 00:06:18,000 --> 00:06:22,650 Well, hayaan mo akong subukan ang isang bagay na simple tulad ng 50, 50. Nai-type mo ang isang bagay na iba't ibang! 104 00:06:22,650 --> 00:06:25,740 hi, hi. Kaya malinaw, ang isang bagay ay pagpunta sa dito. 105 00:06:25,740 --> 00:06:28,440 Ngunit ano ang paliwanag para sa kung bakit? 106 00:06:28,440 --> 00:06:33,850 Tila, line 12 ay ganap na dysfunctional. 107 00:06:34,300 --> 00:06:39,430 Ano ang pangunahing problema dito? Oo. >> [Mag-aaral] paghahambing ng address. 108 00:06:39,430 --> 00:06:41,850 Oo, eksakto. Aktwal na ito ng paghahambing ng mga address 109 00:06:41,850 --> 00:06:44,580 kung saan HELLO at HELLO ay naka-imbak. 110 00:06:44,580 --> 00:06:48,290 Hindi ito ng paghahambing ang mga titik HELLO muli at muli, 111 00:06:48,290 --> 00:06:52,370 dahil kung ano talaga ang nangyari, ang lahat ng oras na ito kami ginagamit GetString - 112 00:06:52,370 --> 00:06:56,130 Pisara na ito ay muli memorya ng aming computer, 113 00:06:56,130 --> 00:07:00,100 at sabihin nating tumawag ako GetString matapos ang deklarasyon ng variable s. 114 00:07:00,100 --> 00:07:01,930 Ano ang aking memory hitsura? 115 00:07:01,930 --> 00:07:07,070 Sabihin mang sabihin na mga ganito ang hitsura. Isang parisukat. 116 00:07:07,070 --> 00:07:09,040 At medyo magkano ang anumang oras ko na iginuhit ng isang piraso ng memorya sa screen 117 00:07:09,040 --> 00:07:12,860 kung 32 bit ko na pagguhit ng mga parisukat tulad nito dahil sa katunayan sa appliance, 118 00:07:12,860 --> 00:07:17,380 isang pointer, isang address, 32 bit. Ang parehong bilang isang int. 119 00:07:17,380 --> 00:07:19,420 Na maaaring mag-iba batay sa computer system. 120 00:07:19,420 --> 00:07:24,630 Yaong mo na vaguely pamilyar sa ang katunayan na ang iyong Mac o PC 64 bit, 121 00:07:24,630 --> 00:07:28,120 na aktwal na Nagpapahiwatig na ang iyong computer ay gumagamit ng 64-bit na payo, 122 00:07:28,120 --> 00:07:33,730 64-bit na address, at bukod sa ang mga upsides ng na ang iyong computer 123 00:07:33,730 --> 00:07:35,560 maaaring magkaroon ng higit pa RAM kaysa sa nakalipas na panahon. 124 00:07:35,560 --> 00:07:39,240 Long kuwento maikli, bumalik sa araw kapag computer ginagamit lamang 32 bit 125 00:07:39,240 --> 00:07:42,740 upang kumatawan ng mga address, ang pinakamalaking bilang ng mga byte maaari mong kumatawan 126 00:07:42,740 --> 00:07:46,280 sa kasong iyon ay kung ano kung mayroon kang 32 bit? 127 00:07:46,280 --> 00:07:49,590 Kaya 4 bilyon, kanan, dahil ang 2 sa 32 4 na bilyong. 128 00:07:49,590 --> 00:07:51,370 Ang bilang na ito ay umuulit na sa kurso. 129 00:07:51,370 --> 00:07:55,240 >> Kaya kung mayroon ka lamang 32 bit, ang pinakamataas na bilang maaari mong bilangin halos 4 bilyon. 130 00:07:55,240 --> 00:07:58,750 Ngunit iyon ay isang pangunahing limitasyon ng mga computer hanggang sa ilang taon na ang nakakaraan 131 00:07:58,750 --> 00:08:01,180 dahil kung maaari mo lamang ang bilang ng mataas na bilang bilang 4 bilyong, 132 00:08:01,180 --> 00:08:05,270 hindi mahalaga kung bumili ka ng 8 gigabytes ng RAM o kahit 5 gigabytes ng RAM; 133 00:08:05,270 --> 00:08:07,780 hindi ka maaaring bilangin na mataas, kaya ito ay walang silbi. 134 00:08:07,780 --> 00:08:11,430 Maaari mo lamang i-access ang mga unang 3 o 4 gigabytes ng memory ng iyong computer. 135 00:08:11,430 --> 00:08:14,410 Iyon ay mas mababa ng isang isyu ngayon, at maaari kang bumili ng MacBook pros at Dells 136 00:08:14,410 --> 00:08:17,680 may 8 gigabytes ng RAM o ng mas maraming mga araw na ito. 137 00:08:17,680 --> 00:08:24,100 Ngunit kung magtalaga ko medyo lamang sa programang ito ng pointer, ang pointer ng tinatawag na mga, 138 00:08:24,100 --> 00:08:28,370 maaaring magmukhang ganito sa screen dahil sa katunayan kailangan namin upang alisan ng balat pabalik ang layer na ito. 139 00:08:28,370 --> 00:08:33,520 Panatilihin ko ang sinasabi ng string, ngunit bilang ng Lunes, string talaga magpasinda *, 140 00:08:33,520 --> 00:08:35,590 ang address ng ilang mga karakter. 141 00:08:35,590 --> 00:08:39,280 Kaya sabihin na pagsasanay wheel off kahit na patuloy naming paggamit ng GetString sa ngayon. 142 00:08:39,280 --> 00:08:42,600 Kaya ipinahayag ko na s, at ito ay isang tipak ng memory, 32 bit. 143 00:08:42,600 --> 00:08:47,370 Ano ang in dito sa memorya sa pamamagitan ng default? >> [Hindi marinig na mag-aaral tugon] 144 00:08:47,370 --> 00:08:50,040 Ano iyon? >> [Mag-aaral] Basura. >> Basura. Eksakto. 145 00:08:50,040 --> 00:08:54,610 Kung programmer ka sa hindi ilagay ang isang halaga sa isang variable, na alam kung ano ito ay? 146 00:08:54,610 --> 00:08:57,990 Minsan makakakuha ka ng masuwerteng at 0, na uri ng gandang, malinis default na halaga, 147 00:08:57,990 --> 00:09:00,310 ngunit bilang namin nakita Lunes, minsan kumpletong katarantaduhan, 148 00:09:00,310 --> 00:09:04,130 ilang talagang malaking positibo o negatibong numero na dumating mula sa kung saan? 149 00:09:05,350 --> 00:09:07,010 Oo. >> [Mag-aaral] Ang function na bago. >> Oo. 150 00:09:07,010 --> 00:09:10,170 >> Madalas ang function na Nakakuha tinatawag na bago dahil tandaan, 151 00:09:10,170 --> 00:09:13,920 tawagan ka ng mga function sa memory, kumuha ito higit pa at mas maraming espasyo mula sa ibaba pataas, 152 00:09:13,920 --> 00:09:17,040 at sa lalong madaling bilang ang return ng function na, ang memorya na maipo-reused 153 00:09:17,040 --> 00:09:20,890 ng susunod na tao ay makakakuha ng tinatawag na, na gamit ang iyong parehong hiwa ng memorya. 154 00:09:20,890 --> 00:09:23,450 At kung ikaw ay kaliwa basura doon, ang mga nakaraang halaga, 155 00:09:23,450 --> 00:09:28,190 maaari naming pagkakamali s bilang may ilang mga halaga kapag talagang hindi namin ilagay ang anumang doon. 156 00:09:28,190 --> 00:09:30,960 Kaya aming RAM sa puntong ito ay ganito ang hitsura. 157 00:09:30,960 --> 00:09:36,030 Ngayon sa kanang bahagi ng linya 7 kami ay pagtawag GetString, 158 00:09:36,030 --> 00:09:40,150 na namin ang paggawa ngayon para sa mga linggo, ngunit kung ano ang GetString talaga ginagawa? 159 00:09:40,150 --> 00:09:43,350 GetString nakasulat sa pamamagitan ng CS50 kawani ng kaunti intelligent 160 00:09:43,350 --> 00:09:46,500 sa na sa lalong madaling ang user ay nagsisimula ng pag-type ng mga susi at hit Ipasok, 161 00:09:46,500 --> 00:09:50,010 GetString figure kung gaano karaming mga keystroke ang ginawa ng user hit, 162 00:09:50,010 --> 00:09:53,360 kung gaano karaming mga character ang kailangan kong maglaan ng RAM para sa. 163 00:09:53,360 --> 00:09:55,660 At kung saan ang RAM na nanggagaling mula sa, na nakakaalam? 164 00:09:55,660 --> 00:09:58,930 Ito ay isang lugar sa 2 gigabytes o watnat ng memory ng iyong computer. 165 00:09:58,930 --> 00:10:05,200 Ngunit sabihin ipagpalagay na ang computer nahanap na puwang para sa mga salita HELLO dito mismo. 166 00:10:05,200 --> 00:10:08,710 Ang salita na aking nai-type ay H-E-L-L-O. 167 00:10:08,710 --> 00:10:13,510 At kung gumuhit namin ito bilang isang pagkakasunud-sunod ng mga character, maaari naming gumuhit ito tulad nito. 168 00:10:13,510 --> 00:10:17,860 Ngunit kailangan kong gawin ng 1 extrang bagay. Ano ang nabibilang sa dulo ng anumang string sa C? 169 00:10:17,860 --> 00:10:20,710 Ang null karakter, na isulat namin bilang \ 0. 170 00:10:20,710 --> 00:10:23,980 Ito ay technically ang bilang 0, ngunit ang backslash ang gumagawa ang lahat ng malinaw na 171 00:10:23,980 --> 00:10:28,150 na ito ay literal ang bilang 0, ang integer 0; 172 00:10:28,150 --> 00:10:32,440 hindi, para sa Halimbawa, quote-magpanipi 0 na maaari mong i-type sa keyboard. 173 00:10:32,440 --> 00:10:33,940 Kaya ito ay HELLO. 174 00:10:33,940 --> 00:10:36,350 >> At kung ano ang sinasabi namin sa Lunes na katangian tulad ng GetString 175 00:10:36,350 --> 00:10:39,580 ay aktwal na ibinabalik ang lahat ng mga mga linggo? 176 00:10:39,580 --> 00:10:43,960 Hindi ito nagbabalik ng isang string per se dahil na hindi talaga na ang ibig sabihin 177 00:10:43,960 --> 00:10:47,710 dahil ang mga string ay hindi umiiral. Uri ng katha sa CS50 library. 178 00:10:47,710 --> 00:10:51,300 Ano ay talagang isang string, mas technically? >> [Mag-aaral] ang unang character. 179 00:10:51,300 --> 00:10:55,950 Eksakto. Medyo lamang ang address ng unang character na ang gumagamit-type. 180 00:10:55,950 --> 00:11:02,810 Kaya kung ang aking salita HELLO nagtatapos ito sa byte numero 123 at pagkatapos ay sa byte numero 124, 181 00:11:02,810 --> 00:11:08,320 125, 126, at iba pa, kung ako lamang ang aking numero bytes mula 0 sa up, 182 00:11:08,320 --> 00:11:12,650 kung ano talaga GetString ay bumabalik literal ang bilang 123. 183 00:11:12,650 --> 00:11:19,270 Kaya kung ano ay makakakuha ng ilagay sa mga ang numero 123, hindi ang titik H, hindi ang salitang HELLO, 184 00:11:19,270 --> 00:11:23,130 medyo lamang ang address kung saan ko mahanap ang unang titik ng HELLO. 185 00:11:23,130 --> 00:11:26,500 Ngunit iyon ay hindi tila mas sapat. Tinanong ko para sa isang string, hindi isang character. 186 00:11:26,500 --> 00:11:32,970 Kaya kung paano namin o computer alam na ELLO uri ng ay kasama ang H? 187 00:11:35,760 --> 00:11:37,460 Ano ang uri ng kasunduan na mayroon kami? Oo. 188 00:11:37,460 --> 00:11:40,100 [Mag-aaral] mapigil ang nagsasabi sa mismong upang mahanap ang ilang higit pang mga character. >> Mismong. 189 00:11:40,100 --> 00:11:44,570 >> May ito tao-computer na convention na kung saan kapag ikaw ay pagharap sa string, 190 00:11:44,570 --> 00:11:49,410 na kilala ngayon bilang magpasinda bituin, mo lamang upang malaman kung 191 00:11:49,410 --> 00:11:54,350 kung saan ang dulo ng bawat string sa buhay sa pamamagitan ng talagang lamang iterating sa paglipas ng ito sa isang para sa loop, 192 00:11:54,350 --> 00:11:57,820 isang habang loop, anumang, kaya na kapag nakita mo ang dulo ng string 193 00:11:57,820 --> 00:12:02,160 maaari mo na ngayong magpakilala mula sa, oh, ang buong salita ay HELLO. 194 00:12:02,160 --> 00:12:04,820 Mga may bago programming karanasan maaaring malaman sa Java 195 00:12:04,820 --> 00:12:09,880 Maaari mo lamang tawagan. haba at sa iba pang mga wika, maaari mong tawagin ang haba o katulad na. 196 00:12:09,880 --> 00:12:14,060 Iyon ay dahil sa maraming wika, lalo na ng mga bagay na tinatawag na object-oriented wika, 197 00:12:14,060 --> 00:12:18,580 ang haba ng isang bagay ay uri ng encapsulated sa loob ng piraso ng data mismo, 198 00:12:18,580 --> 00:12:24,000 mas gusto namin encapsulated mga ID at pangalan at mga bahay sa loob ng isang mag-aaral sa Lunes. 199 00:12:24,000 --> 00:12:28,700 Ngunit C ay mas mababa sa antas ng. Walang mga bagay o klase, kung narinig mo na ang mga term na iyon bago. 200 00:12:28,700 --> 00:12:31,490 Ang kailangan mo talaga ay memory address. 201 00:12:31,490 --> 00:12:35,540 Kaya ito ay uri ng makaluma paraan ng kumakatawan ng mga kawili-wiling mga istraktura ng data. 202 00:12:35,540 --> 00:12:38,760 Mayroon kang isang panimula halaga tulad ng address ng unang character 203 00:12:38,760 --> 00:12:42,340 at pagkatapos ay ilang arbitrary convention na ang lahat ay sumasang-ayon na sundin. 204 00:12:42,340 --> 00:12:46,420 Kaya paano string haba ipinatupad, ang naming ipanukala? 205 00:12:46,420 --> 00:12:51,360 Strlen, strlen, na ang ilan sa inyo ay ngayon ginagamit ng ilang beses. Medyo simple, i-right? 206 00:12:51,360 --> 00:12:53,060 Ito ay tulad ng 2 linya ng code. 207 00:12:53,060 --> 00:12:56,140 Medyo mas para sa loop ng uri, maaaring may isang karagdagang lokal na variable. 208 00:12:56,140 --> 00:13:00,540 Ngunit strlen lamang sa isang pointer at pagkatapos ay simulan ang naghahanap para sa \ 0. 209 00:13:00,540 --> 00:13:05,190 >> At sa lalong madaling nahahanap nito ito, maaari itong ibalik ang kabuuang bilang ng mga hakbang na ito ay kinuha sa na string. 210 00:13:05,190 --> 00:13:07,150 Upang maaari naming magpakilala mula sa kung ano ang napupunta sa susunod na. 211 00:13:07,150 --> 00:13:11,850 Ipagpalagay pagkatapos ko idedeklara t bilang ko na ginawa sa linya 10. 212 00:13:11,850 --> 00:13:14,280 Ito ay ilang mga basura na halaga. Sino ang nakakaalam sa unang? 213 00:13:14,280 --> 00:13:18,490 Ngunit sa kanang bahagi ng linya ng 10 ako pagtawag GetString muli. 214 00:13:18,490 --> 00:13:20,050 Sino ang nakakaalam kung saan ito nagtatapos? 215 00:13:20,050 --> 00:13:23,830 Sabihin mang sabihin na ang operating system nahanap na room para sa ito sa ganitong paraan sa paglipas dito. 216 00:13:23,830 --> 00:13:28,610 Mangyayari kong coincidentally type muli ang H-E-L-L-O, 217 00:13:28,610 --> 00:13:31,260 at upang maaari naming gumuhit ng ang parehong uri ng larawan. 218 00:13:31,260 --> 00:13:34,290 Ngunit ang katunayan na ako redrawn ang larawang ito ay sinadya 219 00:13:34,290 --> 00:13:37,720 dahil iyon ay isang ibang HELLO kaysa sa isang ito. 220 00:13:37,720 --> 00:13:43,920 Kaya dito ito ay maaaring lokasyon 456, ito ay 457, at iba pa. 221 00:13:43,920 --> 00:13:47,170 Kaya kung ano ay makakakuha ng ilagay kung saan ang tandang pananong nang isang beses ay? 222 00:13:47,170 --> 00:13:50,190 Sa kasong ito 456. 223 00:13:50,190 --> 00:13:53,540 Namin ang pagpili ng mga numerong ito mang dahil talagang matapos ngayon 224 00:13:53,540 --> 00:13:57,110 hindi namin ay pagpunta sa pakialam kaya magkano ang tungkol sa kung ano ang address ng anumang. 225 00:13:57,110 --> 00:14:02,690 Ang pinapahalagahan namin na maaari naming malaman ang address ng ilang mga piraso ng data tulad ng HELLO. 226 00:14:02,690 --> 00:14:07,100 >> Kaya talagang kung ano ang karamihan sa mga tao ay gawin sa computer science kapag pakikipag-usap tungkol sa mga address memory 227 00:14:07,100 --> 00:14:10,210 at pakikipag-usap tungkol sa mga payo partikular, 228 00:14:10,210 --> 00:14:14,220 sa halip na abala sa pag-uunawa ng 123 - na nagmamalasakit kung saan ang mga bagay-bagay na ito talaga, 229 00:14:14,220 --> 00:14:17,440 lamang namin alam na ito ay sa ilang numerical address - 230 00:14:17,440 --> 00:14:22,180 pasimplehin namin ang mundo at sabihin na s ay tumuturo sa na character na 231 00:14:22,180 --> 00:14:25,080 at t ay tumuturo sa na character na. 232 00:14:25,080 --> 00:14:27,430 At ang katotohanan na ito ay isang arrow medyo intensyonal 233 00:14:27,430 --> 00:14:31,610 dahil literal na ngayon mga pagturo sa H at t na tumuturo sa iba pang mga H 234 00:14:31,610 --> 00:14:34,720 dahil sa pagtatapos ng araw, hindi ito ay mahalaga kung ano ang address, 235 00:14:34,720 --> 00:14:40,240 ngunit ang kahit na mayroon kaming kakayahan upang ipahayag ang address na iyon na may ilang piraso ng code. 236 00:14:40,240 --> 00:14:42,730 Hindi namin talagang manipulahin ang mga address na ito pa lamang 237 00:14:42,730 --> 00:14:47,770 kaya ipapakita namin makita kung saan maaari naming pasukan at uri-uriin ng gawin ang mga bagay na may mga payo, 238 00:14:47,770 --> 00:14:52,030 ngunit sa ngayon sa linya 12 literal kung ano ang halaga ay namin ng paghahambing 239 00:14:52,030 --> 00:14:55,500 ayon sa kuwentong ito sa linya 12? 240 00:14:56,570 --> 00:15:01,290 Namin sinasabi na 123 katumbas na katumbas ng 456? At na ang tiyak na hindi ito ang kaso. 241 00:15:01,290 --> 00:15:05,320 At kahit conceptually, ang pointer na ito ay siguradong hindi ang parehong bilang na ito 242 00:15:05,320 --> 00:15:09,500 dahil tinatawag mo GetString dalawang beses, at GetString hindi subukan sa sobrang matalino, 243 00:15:09,500 --> 00:15:12,470 hindi ito subukan Napagtanto, oh, nai-type mo HELLO 5 minuto ang nakalipas; 244 00:15:12,470 --> 00:15:15,090 ipaalam sa akin magbibigay sa iyo ng parehong pointer bilang Nagbigay ako sa iyo bago, 245 00:15:15,090 --> 00:15:18,450 ito lamang allocates isang bagong tipak ng memory sa bawat oras na tawagan ka. 246 00:15:18,450 --> 00:15:20,350 >> Kaya kung paano namin ayusin ang problemang ito? 247 00:15:20,350 --> 00:15:24,270 Kung mas mataas na antas na gusto ko upang ihambing ang string HELLO at HELLO - 248 00:15:24,270 --> 00:15:28,680 Wala akong pakialam tungkol sa mga payo - paano ko pumunta tungkol sa pagsagot sa tanong, 249 00:15:28,680 --> 00:15:31,980 ay ang user na i-type ang mga parehong bagay? Ano ang kinakailangan dito? Oo. 250 00:15:31,980 --> 00:15:35,200 [Mag-aaral] Gumamit ng isang function. >> Maaari ko bang gamitin ang isang function ng kahon. 251 00:15:35,200 --> 00:15:38,170 Maaari ko bang gamitin ang isang function na tinatawag na strcmp, s-t-r-c-m-p, 252 00:15:38,170 --> 00:15:41,190 lamang ang dinaglat na bersyon ng sinasabi string ihambing. 253 00:15:41,190 --> 00:15:45,070 At kung pumunta kami sa, halimbawa, ihambing 2, na kung saan ay kabilang sa mga handouts ngayon, 254 00:15:45,070 --> 00:15:46,690 Gawin ko eksakto na. 255 00:15:46,690 --> 00:15:51,750 Ko iningatan ang lahat ng iba pa sa parehong mula sa linya 1 sa down sa 26 o kaya, 256 00:15:51,750 --> 00:15:54,360 at ngayon mapansin Ang bahagi na ito ay nagbago ng kaunti lamang. 257 00:15:54,360 --> 00:15:57,690 Natin balewalain linya 28 para sa isang sandali at tumutok lamang sa isang ito. 258 00:15:57,690 --> 00:16:00,410 Ano ang naming sabihin sa Lunes na ginagawa ang Ihambing ang STR? 259 00:16:00,410 --> 00:16:05,200 Nito pinangangasiwaan ang proseso ng pagkuha ng 2 pointer, s at t sa kasong ito, 260 00:16:05,200 --> 00:16:08,480 uri ng halos paglalagay nito daliri sa mga 2 titik, 261 00:16:08,480 --> 00:16:11,530 at kung ano ang dapat nitong gawin ang isang bagay tulad ng isang habang loop o para sa loop, 262 00:16:11,530 --> 00:16:16,050 at sinasabi nito ang mga ito sa parehong? Kung gayon, gumagalaw ang mga daliri o ang mga payo pasulong. 263 00:16:16,050 --> 00:16:17,970 Sigurado mga ito ang parehong, ang mga ito ang parehong, ang mga ito ang parehong, 264 00:16:17,970 --> 00:16:22,710 mga ito ang parehong, ang mga ito ang parehong? At ooh, ako sa dulo ng string sa parehong mga at t. 265 00:16:22,710 --> 00:16:26,780 Hindi ko nahanap ang anumang mga contradictions. Oo, ang mga string na ito ay ang parehong. 266 00:16:26,780 --> 00:16:31,940 At kung ano ang STR ihambing return kung 2 string sa parehong, tila? Zero. 267 00:16:31,940 --> 00:16:35,900 Kaya 0 mahusay na sa kasong ito dahil kung ito nagbabalik -1 o +1, 268 00:16:35,900 --> 00:16:40,560 na nangangahulugan na s lamang ang mangyayari sa darating bago t ayon sa alpabeto o pagkatapos t. 269 00:16:40,560 --> 00:16:43,760 At bakit na kapaki-pakinabang na magkaroon ng isang function na nagsasabi sa iyo kung aling mga string ay bago 270 00:16:43,760 --> 00:16:46,720 o pagkatapos sa isang diksyunaryo? 271 00:16:46,720 --> 00:16:48,740 [Mag-aaral] Naghahanap. >> Paghahanap at pag-uuri-uri. 272 00:16:48,740 --> 00:16:51,730 >> Kaya maaari mong gawin ang mga bagay tulad ng binary paghahanap o bubble-uuri o sumanib-uuri 273 00:16:51,730 --> 00:16:53,230 kung saan mayroon kang upang ihambing ang mga bagay. 274 00:16:53,230 --> 00:16:56,420 Kaya malayo na namin ang uri ng cut ilang sulok at lamang uusapang tungkol sa pag-uuri-uri 275 00:16:56,420 --> 00:16:59,430 sa konteksto ng mga numero dahil ito ay maganda at madaling pag-uusapan, 276 00:16:59,430 --> 00:17:02,430 ngunit maaari kang tiyak na ihambing ang mga string, mansanas at saging, 277 00:17:02,430 --> 00:17:05,349 dahil kung ang mansanas ay kilala sa darating bago saging, katulad, 278 00:17:05,349 --> 00:17:09,319 maaari mong ilipat ang mga string sa paligid sa memory tulad ng Rob ginawa sa pagsasama-uuri sa video 279 00:17:09,319 --> 00:17:15,880 at ginawa namin dito sa entablado sa pagpili ng uri, pagpapasok ng uri, at bubble-uuri. 280 00:17:15,880 --> 00:17:18,710 Kaya kung saan pa ang maaari naming gawin ito? Hayaan ang subukan ito. 281 00:17:18,710 --> 00:17:23,980 Hayaan uri ng kalimutan na aralin para sa isang sandali at subukan ngayon at kopyahin 1.c upang gawin ang mga sumusunod. 282 00:17:23,980 --> 00:17:26,800 Sa linya 21 ako sinasabi ng naka-print ng isang bagay, 283 00:17:26,800 --> 00:17:28,520 pagkatapos Nakakuha ako ng isang string mula sa gumagamit, 284 00:17:28,520 --> 00:17:30,690 pagkatapos Lalabas na ako ito. 285 00:17:30,690 --> 00:17:33,620 Hindi talaga namin ang nakuha sa ito ugali, ngunit sabihin na ngayong gawin ito. 286 00:17:33,620 --> 00:17:40,990 Natin aktwal alisan ng balat pabalik ang layer na ito. Talaga ito magpasinda *. Tao talaga ito magpasinda *. 287 00:17:40,990 --> 00:17:45,690 Kaya kung ano ang ibig sabihin na check kung mga == null? 288 00:17:45,690 --> 00:17:48,380 Ito ay lumiliko out na kapag tumawag ka ng isang katangian tulad GetString 289 00:17:48,380 --> 00:17:51,540 o mas pangkalahatang lamang hilingin sa isang computer upang bigyan ka ng ilang mga memorya, 290 00:17:51,540 --> 00:17:53,030 isang bagay na maaaring magkamali. 291 00:17:53,030 --> 00:17:56,630 Maaari kang na mabaliw at hilingin sa computer para sa isang terabyte ng memory 292 00:17:56,630 --> 00:18:01,780 sa pamamagitan ng pagtatanong para sa mga trillions ng byte ng memorya na lang hindi umiiral sa computer, 293 00:18:01,780 --> 00:18:05,130 ngunit GetString at iba pang mga function ay nangangailangan ng ilang mga paraan ng sumisigaw sa iyo 294 00:18:05,130 --> 00:18:06,820 kung hiniling mo para sa masyadong maraming. 295 00:18:06,820 --> 00:18:10,450 At ang paraan GetString ito ay kung tatanungin mo ang para sa higit pang memory 296 00:18:10,450 --> 00:18:14,250 kaysa sa computer, kahit na sobrang, sobrang mababa posibilidad 297 00:18:14,250 --> 00:18:17,730 dahil wala sa amin ay i-type ang isang trilyon character at pagkatapos ay pindutin ang Enter, 298 00:18:17,730 --> 00:18:21,980 ngunit mababa ang posibilidad bagaman maaari itong maging, gusto ko pa rin upang suriin ito kung sakali, 299 00:18:21,980 --> 00:18:26,120 at ang mga espesyal na halaga na GetString, sagot, at iba pang mga function babalik 300 00:18:26,120 --> 00:18:30,630 kung may maling naganap null sa lahat ng mga cap. 301 00:18:30,630 --> 00:18:36,520 >> At ano ang null? Null lamang kaya ang mangyayari kumakatawan sa isang pointer. 0 memory address. 302 00:18:36,520 --> 00:18:40,800 Ang mundo ay nagpasya na mang, kung ito ay memorya ng aking computer - alam mo kung ano? - 303 00:18:40,800 --> 00:18:46,260 kami ay pagpunta sa nakawin ang 1 byte lang ng memory sa bawat computer, at ito ay lokasyon 0. 304 00:18:46,260 --> 00:18:49,560 Kami ay pagpunta sa bigyan ito ng isang palayaw ng Null, at kami ay pagpunta sa nangangako 305 00:18:49,560 --> 00:18:52,660 na hindi aktwal na namin ilagay ang totoong data doon 306 00:18:52,660 --> 00:18:56,770 dahil lamang namin mang kailangan ng isang espesyal na halaga, 0, aka null, 307 00:18:56,770 --> 00:19:00,230 upang maaari naming sumigaw sa mga gumagamit kung ang isang bagay napupunta mali. 308 00:19:00,230 --> 00:19:03,590 Kung hindi man hindi mo maaaring malaman ang 0 bang ilagay ang isang bagay dito 309 00:19:03,590 --> 00:19:05,490 o ang ibig sabihin may nangyaring mali? 310 00:19:05,490 --> 00:19:09,190 Mayroon kaming sa lahat na sumang-ayon na null ay nangangahulugan na walang ay ibinalik, 311 00:19:09,190 --> 00:19:11,700 walang aktwal na address ay ibinalik. 312 00:19:11,700 --> 00:19:15,210 Ngayon, dito lang ako sa paghango ng aking tao convention ng ko bumalik 1 mula sa pangunahing 313 00:19:15,210 --> 00:19:17,040 kung ang isang bagay napupunta mali. 314 00:19:17,040 --> 00:19:20,650 Iyon ay dahil ang return convention pangunahing ay upang bumalik ang 0 kung magandang, 315 00:19:20,650 --> 00:19:22,990 1 o ilang iba pang mga halaga kung masamang. 316 00:19:22,990 --> 00:19:28,200 Ngunit GetString at anumang function na deal sa memory return null kung ang isang bagay napupunta masamang. 317 00:19:28,200 --> 00:19:33,480 >> Okay. Sa kasamaang-palad, linya 27, sobrang simple bagaman ito ay, ganap na nabigo upang kopyahin ang string. 318 00:19:33,480 --> 00:19:35,740 Bakit? Maaari naming makita ito tulad ng sumusunod. 319 00:19:35,740 --> 00:19:40,120 Ako kine-claim sa linya 27 sa paggawa ng isang kopya ng mga at pagtawag ito t. 320 00:19:40,120 --> 00:19:45,790 Kaya hindi ako na humihiling ng gumagamit para sa 2 string oras na ito; lang ako sinasabi ang halaga sa mga 321 00:19:45,790 --> 00:19:47,870 dapat na ilagay sa t pati na rin. 322 00:19:47,870 --> 00:19:52,890 Kaya ngayon lang upang ipakita kung gaano sirang ito ay, sa linya 29 pasulong kung ano ang ako ginagawa? 323 00:19:52,890 --> 00:19:56,980 Una Lalabas na ako kung ang haba ng t ay mas malaki kaysa sa 0. 324 00:19:56,980 --> 00:19:59,330 Ang ilang string doon. Gumagamit ang nai-type ng isang bagay. 325 00:19:59,330 --> 00:20:03,410 Ano ang linya 32 ginagawa, tila? 326 00:20:03,410 --> 00:20:08,910 [Hindi marinig na tugon ng mag-aaral] >> Karapatan. Maaari mong uri ng magpakilala ang mga ito mula sa kung ano ang sinabi ko ito ginagawa. 327 00:20:08,910 --> 00:20:13,200 Ngunit technically, kung ano ang ito ginagawa? t [0] kumakatawan sa kung ano ang? 328 00:20:13,200 --> 00:20:15,140 [Mag-aaral] Ang 0 karakter. >> [Malan] Ang 0 karakter. 329 00:20:15,140 --> 00:20:19,620 O, mas tao tulad, ang unang character sa t, anumang na, H siguro sa kasong ito. 330 00:20:19,620 --> 00:20:24,990 At toupper ginagawa kung ano ang nakasulat. Ito capitalizes ang 0 karakter ng t at ito ay nagbabago dito. 331 00:20:24,990 --> 00:20:28,430 Kaya ito ay nangangahulugan 0 character ng t, gawin itong uppercase, 332 00:20:28,430 --> 00:20:30,320 at ilagay ito pabalik sa parehong lokasyon na iyon. 333 00:20:30,320 --> 00:20:35,540 Kaya kung type ko kumusta sa lowercase, ito ay dapat baguhin ang lowercase h sa isang kabisera H. 334 00:20:35,540 --> 00:20:41,400 Ngunit ang problema ay na sa linya 35 at 36 kung ano ako tungkol sa gawin ay i-print para sa amin s at t. 335 00:20:41,400 --> 00:20:43,120 At kung ano ang iyong kutob ng loob? 336 00:20:43,120 --> 00:20:47,250 Ano ako aktwal na pagpunta upang makita kung ako na nai-type sa halo sa lahat ng maliit na? 337 00:20:47,250 --> 00:20:52,280 Kung ano ang nangyayari upang naka-print? >> [Hindi marinig na mag-aaral ng tugon] >> Ano na? 338 00:20:52,280 --> 00:20:58,360 [Mag-aaral] Big H at ang natitira maliit. >> Ang malaking H at ang iba pa sa maliit na kung saan, s o t? 339 00:20:58,360 --> 00:21:03,170 [Mag-aaral] Parehong. >> Parehong. Eksakto. Kaya sabihin makita kung ano ang nangyayari sa dito. 340 00:21:03,170 --> 00:21:08,380 >> Hayaan akong magpatuloy at makatipon ito. Ito ay COPY1, kaya COPY1. Ayos lang. 341 00:21:08,380 --> 00:21:14,840 Mag-zoom in Ipaalam sa akin sige at patakbuhin COPY1, Ipasok, Sabihin ang isang bagay: kumusta sa lowercase. 342 00:21:14,840 --> 00:21:19,570 Sa malaking titik ang kopya, ngunit ito tila sa malaking titik ang orihinal pati na rin, 343 00:21:19,570 --> 00:21:22,070 dahil kung ano ang mangyayari ngayon sa kuwentong ito? 344 00:21:22,070 --> 00:21:27,030 Sa linya 27 Hindi ko aktwal na tila kopyahin ang string, 345 00:21:27,030 --> 00:21:30,450 ngunit kahit na maaaring intuitively mo umasa na ang kaso, 346 00:21:30,450 --> 00:21:33,680 kung sa tingin mo tungkol sa ang larawang ito, kung ano talaga ko tapos? 347 00:21:33,680 --> 00:21:35,410 Kalahati ng larawan ay pareho. 348 00:21:35,410 --> 00:21:39,390 Kaya sabihin pagulungin pabalik sa panahon upang t ay hindi pa umiiral sa kuwento. 349 00:21:39,390 --> 00:21:43,160 Maaari S umiiral sa kuwento, ngunit natin lowercase kumusta oras na ito. 350 00:21:43,160 --> 00:21:46,710 Kaya hayaan mo akong ayusin kung ano ang ko aktwal na-type. 351 00:21:46,710 --> 00:21:51,280 Sa kasong ito dito mayroon kaming h-e-l-l-o. 352 00:21:51,280 --> 00:21:58,050 Susubukan naming gumuhit ang mga ito bilang isang pagkakasunud-sunod ng mga character, ilalagay ang aking mga linya ng separator dito at ang aking \ 0. 353 00:21:58,050 --> 00:22:05,980 Kaya ito ay kung saan kami ay sa lalong madaling linya 1 sa pamamagitan ng 24-ish, bigyan o tumagal, na pinaandar. 354 00:22:05,980 --> 00:22:07,800 Ito ang larawan ng aking memorya. 355 00:22:07,800 --> 00:22:10,800 Kapag nakuha ko sa linya 27, ano ang mangyayari? 356 00:22:10,800 --> 00:22:14,730 Tulad bago, kumuha ako ng pointer, na makikita ko gumuhit bilang sa square na ito. 357 00:22:14,730 --> 00:22:19,740 Ito ay tinatawag na t. At ano ang halaga nito bilang default? Sino ang nakakaalam? Ang ilang mga halaga ng basura. 358 00:22:19,740 --> 00:22:22,060 >> Kaya bibigyan ko abstract na ang layo bilang isang tandang pananong. 359 00:22:22,060 --> 00:22:27,670 At sa lalong madaling ang kanang bahagi ng linya 27 executes, ano ako ng paglalagay sa loob ng t? 360 00:22:27,670 --> 00:22:30,770 Ang parehong bagay na sa s. 361 00:22:30,770 --> 00:22:34,120 Kaya kung namin para sa isang sandali alisin ang abstraction ng arrow at sabihin namin, 362 00:22:34,120 --> 00:22:40,330 oh, ito ay address ng memorya ng pagkarga 123, kapag sinabi mong t nakakakuha ng mga, semicolon, 363 00:22:40,330 --> 00:22:42,700 literal naglalagay ka ng 123 dito. 364 00:22:42,700 --> 00:22:45,200 Ngayon kung namin uri ng pasimplehin muli ang ating mundo sa pamamagitan ng mga larawan, 365 00:22:45,200 --> 00:22:48,750 kung ano ang talagang nagawa mo na lamang naidagdag isa pang arrow sa iyong mundo 366 00:22:48,750 --> 00:22:52,910 na nakaturo mula sa t ang parehong eksaktong string. 367 00:22:52,910 --> 00:22:59,730 Kaya kapag sa linya 31 at 32 ko aktwal na pumunta tungkol sa pagbabago ng mga t [0], 368 00:22:59,730 --> 00:23:05,580 kung ano ang t [0] tila magkasingkahulugan na may ngayon? s [0] 369 00:23:05,580 --> 00:23:07,030 Kaya na ang lahat na nangyayari. 370 00:23:07,030 --> 00:23:09,900 At kahit na ang ganitong uri ng pakiramdam ng isang maliit na mababang antas at arcane 371 00:23:09,900 --> 00:23:12,760 at ang ganitong uri ng pakiramdam ng tulad marahil intuitively na ito ay dapat lamang na nagtrabaho - 372 00:23:12,760 --> 00:23:15,410 Ko na gumawa ng mga kopya ng mga bagay bago at ito ay nagtrabaho - 373 00:23:15,410 --> 00:23:18,590 kung aktwal mong isipin ang tungkol sa kung ano ang string isang talagang, ito ay isang pansamantalang trabaho *. 374 00:23:18,590 --> 00:23:21,700 Well, ano iyon? Ang address ng ilang mga karakter. 375 00:23:21,700 --> 00:23:24,930 Pagkatapos ay marahil ito ay ginagawang higit pang kahulugan na kapag sinubukan mong gawin ang isang bagay 376 00:23:24,930 --> 00:23:29,220 sobrang tila simple tulad nito, ang lahat ng iyong ginagawa ay pagkopya ng memory address. 377 00:23:29,220 --> 00:23:32,530 Hindi ka aktwal na paggawa ng anumang sa mga string mismo. 378 00:23:32,530 --> 00:23:37,500 Kaya kahit na mayroon kang mga ideya kung paano mo malutas ang problemang ito sa code, 379 00:23:37,500 --> 00:23:45,080 mataas na antas, conceptually, kung ano ang kailangan naming gawin upang gumawa ng salamat tunay na kopya ng mga, tila? 380 00:23:46,670 --> 00:23:48,820 Oo. >> [Mag-aaral] Bigyan ito ng isang bagong lokasyon? >> Mismong. 381 00:23:48,820 --> 00:23:50,800 >> Kailangan namin upang magbigay ng isang bagung-bagong lokasyon ang t. 382 00:23:50,800 --> 00:23:55,230 Kailangan naming sa paanuman lumikha ng isang mundo kung saan makuha namin ang isang bagong tipak ng memory, 383 00:23:55,230 --> 00:24:00,090 na para lamang sa kapakanan kalinawan kukunin ko na gumuhit kanan sa ibaba ang isang ito, ngunit hindi ito kailangan upang maging doon. 384 00:24:00,090 --> 00:24:04,880 Ngunit kailangan nito na ang parehong laki, kaya ako gumuhit ng mga vertical na linya sa parehong lugar. 385 00:24:04,880 --> 00:24:09,720 Ito ang masarap na kung ito ay ang lahat ng basura sa una. Na nakakaalam kung ano ang doon? 386 00:24:09,720 --> 00:24:13,850 Ngunit ang hakbang 1 na ninyo ako bilang karaming memory Kailangan ko 387 00:24:13,850 --> 00:24:18,630 upang magkasya ang isang kopya ng halo, pagkatapos malaman kung paano upang kopyahin ang h dito, e dito, 388 00:24:18,630 --> 00:24:20,390 ang l dito at iba pa. 389 00:24:20,390 --> 00:24:24,880 Ngunit ito ay dapat na pakiramdam ng kaunti halata kahit na ang ilan sa mga detalye ay pa rin abstract. 390 00:24:24,880 --> 00:24:28,690 Upang kopyahin ang string na ito sa ito, ito lamang para sa loop o habang loop 391 00:24:28,690 --> 00:24:31,580 o isang bagay na kung saan mo na maging ang lahat ng mga mas pamilyar. 392 00:24:31,580 --> 00:24:35,970 Kaya sabihin subukan ito. Hayaan akong pumunta sa copy2.c. 393 00:24:35,970 --> 00:24:43,270 Sa copy2.c kami ay may halos ang parehong programa maliban sa linya 27. 394 00:24:43,270 --> 00:24:47,260 Mukhang ng kaunti complex, ngunit kung masira namin ito piraso sa pamamagitan ng piraso, 395 00:24:47,260 --> 00:24:48,950 sa kaliwang bahagi ay ang parehong. 396 00:24:48,950 --> 00:24:52,790 Magpasinda * t lumilikha ang bagay na ito sa memory, kahit na may isang tandang pananong 397 00:24:52,790 --> 00:24:54,680 dahil wala kaming ideya kung ano ang doon sa pamamagitan ng default. 398 00:24:54,680 --> 00:24:57,920 Sa kanang bahagi ngayon ipinapakilala namin ang isang bagong function, malloc, 399 00:24:57,920 --> 00:25:00,640 para sa memory maglaan, ninyo ako memory, 400 00:25:00,640 --> 00:25:06,900 at tumatagal tila ito kung gaano karaming mga argumento, kung gaano karaming mga bagay sa loob ng panaklong? 401 00:25:09,660 --> 00:25:12,130 Narinig ko murmurings ng 1 at 2, ngunit ito ay may 1. 402 00:25:12,130 --> 00:25:15,320 Walang kuwit, na nangangahulugan na may 1 bagay sa loob ng panaklong. 403 00:25:15,320 --> 00:25:17,720 Kahit na may ibang mga panaklong, hayaan mo akong i-highlight 404 00:25:17,720 --> 00:25:21,460 kung ano ang nasa loob ng ng pinakamalayo panaklong, at ito expression: 405 00:25:21,460 --> 00:25:25,880 (Strlen (s) + 1) * sizeof (pansamantalang trabaho). 406 00:25:25,880 --> 00:25:29,190 Kaya kung sa tingin namin ang aktwal na ito sa pamamagitan ng, ito ay sinasabi ninyo sa akin ang haba ng mga. 407 00:25:29,190 --> 00:25:34,440 Bakit Ako, bagaman, ang pagdaragdag ng 1 papunta sa haba? >> [Hindi marinig na mag-aaral tugon] 408 00:25:34,440 --> 00:25:40,200 Eksakto. Kailangan namin ng espasyo para sa tao na ito sa buntot, ang ika-anim na character na ay walang Ingles na kahulugan 409 00:25:40,200 --> 00:25:42,250 ngunit may espesyal na program kahulugan. 410 00:25:42,250 --> 00:25:46,800 >> Kaya kailangan namin ng + 1 para sa dahil strlen babalik ang mga tao na inaasahan ng haba, 411 00:25:46,800 --> 00:25:50,890 halo o 5, hindi ito magbibigay sa iyo ang karagdagang character null. 412 00:25:50,890 --> 00:25:52,980 Kaya ko bang mano-manong magdagdag ng ito sa + 1. 413 00:25:52,980 --> 00:25:56,060 At pagkatapos na ito, * laki ng (magpasinda), hindi namin nakita ito bago. 414 00:25:56,060 --> 00:25:57,480 Na ito ay hindi technically isang function. 415 00:25:57,480 --> 00:26:04,150 Ito ay isang espesyal na keyword na lamang ay nagsasabi sa iyo kung ano ang laki ng ilang mga uri ng data sa isang computer 416 00:26:04,150 --> 00:26:06,980 dahil sa katotohanan, ang ilan sa atin ay may 32-bit na computer. 417 00:26:06,980 --> 00:26:10,900 Mayroon akong isang medyo lumang computer sa bahay, at Ginagamit lamang ng 32 bits upang kumatawan ang mga payo. 418 00:26:10,900 --> 00:26:13,900 At kaya kung ginawa ko ang laki ng isang uri ng data, maaaring ito ay 32 bits. 419 00:26:13,900 --> 00:26:18,300 Ngunit kung gumagamit ako ng aking bagong magarbong computer na, maaari ba akong makakuha ng isang halaga ng 64 bit 420 00:26:18,300 --> 00:26:20,510 para sa isang bagay tulad ng isang address. 421 00:26:20,510 --> 00:26:25,400 Kaya sa kasong ito, sobrang safe, hindi namin pagpunta sa hard code sa isang bagay tulad ng - 422 00:26:25,400 --> 00:26:28,740 na rin, kung ano ang laki ng isang pansamantalang trabaho ayon sa kung ano ang namin ang sinabi sa ngayon? 423 00:26:28,740 --> 00:26:34,450 Namin na medyo mas pasalita sinabi na 1 byte, at na kung medyo mas tunay na sa buong board. 424 00:26:34,450 --> 00:26:37,000 Ngunit muli, ang mga pagpapalagay ay may posibilidad na maging masama. 425 00:26:37,000 --> 00:26:40,850 Humantong sila sa maraming surot software kung ang mga tao na gamitin ang iyong software sa mga paraan na hindi mo binalak. 426 00:26:40,850 --> 00:26:44,750 Kaya natin abstract ito ang layo at mas generically sabihin 427 00:26:44,750 --> 00:26:46,830 Kailangan ko ito maraming mga chunks ng memory 428 00:26:46,830 --> 00:26:50,210 at ang bawat tipak ng memory ay dapat katumbas sa laki ng isang character, 429 00:26:50,210 --> 00:26:54,870 na kung saan ay sa katunayan katumbas sa 1 sa kasong ito, ngunit ito ay isang mas pangkalahatang paraan ng pagsusulat ng mga ito. 430 00:26:54,870 --> 00:27:00,460 Kaya kung ang salita ay kumusta, kung gaano karaming mga byte ang malloc tila maglaan para sa halo? 431 00:27:00,460 --> 00:27:04,980 [Mag-aaral] Anim na. >> Six. Nang eksakto tulad ng maraming bilang may namin ang mga marka ng tanong sa screen. 432 00:27:04,980 --> 00:27:07,800 At pagkatapos ay kumuha ng hulaan ngayon batay sa iyong pag-unawa ng GetString 433 00:27:07,800 --> 00:27:12,790 kung ano ang malloc malamang na bumalik? >> [Mag-aaral] isang address. 434 00:27:12,790 --> 00:27:17,020 Isang address ng kung ano? Ng unang tipak ng memory. 435 00:27:17,020 --> 00:27:20,670 >> Wala kaming ideya kung ano ang doon dahil sa ilang ibang mga function na 436 00:27:20,670 --> 00:27:23,010 maaaring ginagamit ang memory na ito dati. 437 00:27:23,010 --> 00:27:28,380 Ngunit malloc, tulad ng GetString, nagbabalik ang address ng unang byte ng memorya 438 00:27:28,380 --> 00:27:30,540 na ito ay magtabi para sa iyo. 439 00:27:30,540 --> 00:27:38,380 Gayunpaman, kung ano ang hindi ito gumagawa ng fill in blangko na ito na may isang character na backslash null 440 00:27:38,380 --> 00:27:43,030 dahil ito ay lumiliko out maaari mong gamitin ang malloc upang magtalaga ng anumang: ints, string, array, 441 00:27:43,030 --> 00:27:45,700 sa kamay, mag-aaral ng mga istraktura. 442 00:27:45,700 --> 00:27:47,750 Maaari mong gamitin ang malloc ganap generically. 443 00:27:47,750 --> 00:27:51,470 Hindi ito pinapahalagahan o upang malaman kung ano ang iyong paglaan ng memory para sa. 444 00:27:51,470 --> 00:27:55,810 Kaya magiging mapangahas para sa malloc maglagay ng \ 0 445 00:27:55,810 --> 00:27:58,340 sa dulo ng bawat tipak ng memory ito ay nagbibigay sa iyo ng 446 00:27:58,340 --> 00:28:02,620 dahil ito \ 0 bagay ay isang convention para sa mga string. 447 00:28:02,620 --> 00:28:06,310 Hindi ito ginagamit para sa mga ints, hindi ito ay ginagamit para sa kamay, ito ay hindi ginagamit para sa mga mag-aaral. 448 00:28:06,310 --> 00:28:11,730 At kaya ang gotcha may malloc na pasanin ay ganap na sa iyo ang programmer 449 00:28:11,730 --> 00:28:16,790 tandaan kung gaano karaming mga byte inilalaan at hindi kailanman gumamit ng isang para sa loop 450 00:28:16,790 --> 00:28:21,570 o isang habang loop at pumunta lagpas sa hangganan ng tipak ng memorya mo na ibinigay. 451 00:28:21,570 --> 00:28:23,540 Ilagay ang isa pang paraan, sa lalong madaling maglaan ka ng memory, 452 00:28:23,540 --> 00:28:28,510 hindi mo maaaring tanungin ang operating system, oh, sa pamamagitan ng ang paraan, kung gaano kalaki ng isang tipak ng memorya ay ito? 453 00:28:28,510 --> 00:28:32,080 Ito ay ganap na nakasalalay sa iyo upang tandaan kung kailangan mo ng halagang iyon. 454 00:28:32,080 --> 00:28:34,330 >> Kaya sabihin makita kung paano kong magpatuloy sa gamitin ang memory. 455 00:28:34,330 --> 00:28:38,430 Sa linya 28 at 29 bakit ako ginagawa ito? 456 00:28:39,850 --> 00:28:42,260 Lamang kabuuang katinuan tseke. 457 00:28:42,260 --> 00:28:45,110 Baka sakaling may nangyaring mali, hinihiling ko para sa ilang mabaliw halaga ng memory 458 00:28:45,110 --> 00:28:48,690 o ako kaya maraming bagay na tumatakbo sa computer na may lamang ay hindi sapat na memorya, 459 00:28:48,690 --> 00:28:51,780 isang bagay tulad na, ako ng hindi bababa sa gusto mong suriin para sa null. 460 00:28:51,780 --> 00:28:55,260 Sa katotohanan, ang karamihan sa mga computer ay nagbibigay sa iyo ng ilusyon na ang bawat programa 461 00:28:55,260 --> 00:28:57,080 maaaring gamitin ang kabuuan ng iyong RAM, 462 00:28:57,080 --> 00:29:00,740 ngunit gayon pa man, kung ang mga uri ng gumagamit sa ilang mga nakatutuwang mahaba string siguro dahil hindi sila ng isang masamang tao 463 00:29:00,740 --> 00:29:03,440 at aktwal nila sinusubukan ng pag-crash ang iyong programa o paupahang karomata ito, 464 00:29:03,440 --> 00:29:07,300 gusto mong hindi bababa sa suriin ang return halaga ng malloc at kung ito ay katumbas null. 465 00:29:07,300 --> 00:29:11,630 At kung ito, sabihin lamang quit ngayon dahil hindi ko alam kung ano ang gagawin sa kasong iyon. 466 00:29:11,630 --> 00:29:13,950 Paano ko kokopyahin ang string? Mayroong ilang mga paraan upang gawin ito. 467 00:29:13,950 --> 00:29:18,850 May STR kopyahin ang mga function sa C, ngunit ito ay napaka-simple para sa amin upang gawin ito ang luma paraan. 468 00:29:18,850 --> 00:29:23,110 >> Unang hayaan mo akong malaman kung ano ang haba ng mga. 469 00:29:23,110 --> 00:29:26,930 Maaaring ilagay ko ito sa loop ngunit sa halip lang ako ilagay ito dito para sa kalinawan. 470 00:29:26,930 --> 00:29:30,610 Kaya n ngayon nag-iimbak ang haba ng orihinal na string, na tila 5. 471 00:29:30,610 --> 00:29:35,290 Pagkatapos sa aking para sa loop ako iterating mula 0 sa hanggang sa n, 472 00:29:35,290 --> 00:29:40,940 at sa bawat pag-ulit ako ng paglalagay ng mga [i] sa loob ng t [i]. 473 00:29:40,940 --> 00:29:45,060 Kaya na kung ano ang ipinahiwatig ko sa aking 2 daliri pagturo sa string bago. 474 00:29:45,060 --> 00:29:49,260 Bilang ito para sa loop iterates tulad nito, ako pagpunta sa pagkopya ng h sa dito, 475 00:29:49,260 --> 00:29:52,890 e papunta dito, l sa dito dahil ito ay mga, ito ay t. 476 00:29:52,890 --> 00:29:58,770 At pagkatapos ay sa wakas, sa linya 35 kung bakit ako ginagawa ito? 477 00:29:58,770 --> 00:30:03,770 Kailangan ko upang matiyak na ako nagtatapos ang string t. 478 00:30:03,770 --> 00:30:06,170 At ginawa ko ito sa ganitong paraan upang maging napaka-tahasang. 479 00:30:06,170 --> 00:30:09,510 Ngunit ipanukala, isang tao, kung magagawa mong, isang iba't ibang mga paraan ng paggawa nito. 480 00:30:09,510 --> 00:30:13,930 Hindi ko talagang kailangan sa line 35. May isa pang paraan upang gawin ito. 481 00:30:13,930 --> 00:30:18,880 Oo. >> [Hindi marinig na mag-aaral ng tugon] >> Sabihin ito louder. 482 00:30:18,880 --> 00:30:20,960 [Mag-aaral] Mas mababa sa o patas sa. >> Mismong. 483 00:30:20,960 --> 00:30:24,450 Maaaring namin lamang sabihin mas mababa sa o katumbas sa n, na sa pangkalahatan ay masamang 484 00:30:24,450 --> 00:30:28,190 dahil halos palaging kapag kami ng hanggang sa isang katumbas ng bagay na namin ang pagbibilang 485 00:30:28,190 --> 00:30:30,000 pumunta kami ng 1 hakbang Masyadong malayo. 486 00:30:30,000 --> 00:30:32,170 Ngunit tandaan, kung gaano karaming mga byte naming maglaan? 487 00:30:32,170 --> 00:30:37,210 Inilalaan namin ang strlen ng mga, kaya 5 + 1 para sa isang kabuuang 6. 488 00:30:37,210 --> 00:30:39,980 Kaya sa kasong ito ay maaaring naming gawin ang isang bagay tulad nito 489 00:30:39,980 --> 00:30:46,450 kaya na namin ang pagkopya hindi lamang ang kumusta kundi pati na rin ang \ 0 sa pinakadulo. 490 00:30:46,450 --> 00:30:49,860 Bilang kahalili, maaari naming gamitin ang isang function na tinatawag STR kopya, strcpy, 491 00:30:49,860 --> 00:30:51,700 ngunit hindi halos bilang magkano masaya. 492 00:30:51,700 --> 00:30:54,000 Ngunit iyon lamang ang lahat ng ginagawa nito sa ilalim ng hood. 493 00:30:54,000 --> 00:30:56,050 Pagkatapos bilang wakas, gawin namin ang parehong bagay tulad ng dati. 494 00:30:56,050 --> 00:31:01,620 Ko mapakinabangan ang t at pagkatapos ay inaangkin ko na ang orihinal na kamukha ito at ang kopya Mukhang na. 495 00:31:01,620 --> 00:31:08,570 Kaya sabihin subukan ito ngayon. Hayaan akong pumunta sa dito. Gawing COPY2. Susubukan naming mag-zoom in at patakbuhin COPY2. 496 00:31:08,570 --> 00:31:13,840 Ako i-type sa halo sa lowercase, at sa katunayan ako makakakuha ng lowercase kumusta na tulad ng orihinal 497 00:31:13,840 --> 00:31:16,930 ngunit kabisera Kumusta para sa kopya. 498 00:31:16,930 --> 00:31:20,300 Ngunit hindi ako tapos pa. Kailangan kong gawin 1 huling bagay dito. 499 00:31:20,300 --> 00:31:28,000 46 at 47 ay malinaw na pagbabakante memorya, ngunit kung ano ang na aktwal na ibig sabihin? 500 00:31:28,000 --> 00:31:33,250 Ano ako paggawa, sa tingin mo, sa pamamagitan ng pagtawag sa line 46 at linya 47? 501 00:31:33,250 --> 00:31:38,900 Ano ang epekto na mayroon? Oo. 502 00:31:38,900 --> 00:31:43,140 [Hindi marinig na mag-aaral tugon] >> Mismong. 503 00:31:43,140 --> 00:31:46,380 >> Ikaw ay nagsasabi sa operating system, hey, salamat para sa memory. 504 00:31:46,380 --> 00:31:48,320 Maaari mo na ngayong gamitin ang mga ito para sa ibang tao. 505 00:31:48,320 --> 00:31:50,790 At narito ang isang perpektong halimbawa ng mga halaga ng basura. 506 00:31:50,790 --> 00:31:55,430 Lang ginamit ko ang memory na ito upang isulat ang salitang kumusta sa 2 lugar, 507 00:31:55,430 --> 00:31:57,490 dito, dito, dito, at dito. 508 00:31:57,490 --> 00:32:00,910 Kaya ito ay h-e-l-l-o-\ 0. 509 00:32:00,910 --> 00:32:06,960 Tumawag ngunit pagkatapos ko line 46 at linya 47, at alam mo kung ano ang mangyayari doon sa mga tuntunin ng larawan? 510 00:32:06,960 --> 00:32:10,010 Aktwal, maghintay, ang larawang ito ay ang lumang. 511 00:32:10,010 --> 00:32:12,550 Kapag ginawa namin ang kopya, ang tao na ito ay aktwal na tumuturo dito, 512 00:32:12,550 --> 00:32:16,110 kaya natin alisin ang mga numero at lamang abstract ang layo muli ng aming mga arrow. 513 00:32:16,110 --> 00:32:19,370 Ano ang mangyayari sa ang larawang ito kapag tumawag ako libreng? 514 00:32:19,370 --> 00:32:22,750 [Hindi marinig na mag-aaral ng tugon] >> Hindi kahit. 515 00:32:22,750 --> 00:32:29,510 Kung tumawag ako ng libre sa mga at t - uri ng nanlilinlang ng tanong - ang larawang ito ay hindi magbago sa lahat 516 00:32:29,510 --> 00:32:33,880 dahil sa pagtawag sa mga at pagtawag t lamang nagsasabi sa operating system, 517 00:32:33,880 --> 00:32:39,010 hey, maaari mong gamitin muli ang memory na ito, ngunit hindi ito baguhin ito upang null 518 00:32:39,010 --> 00:32:41,840 o ilang mga espesyal na character, hindi ito baguhin ito, 519 00:32:41,840 --> 00:32:47,350 hindi ito baguhin ang h o e o l o l o sa o sa alinmang lugar sa anumang bagay. 520 00:32:47,350 --> 00:32:51,610 Sa mga tuntunin ng larawan, sa lalong madaling tumawag ka ng libre, walang pagbabago. 521 00:32:51,610 --> 00:32:56,570 At sa ganyang bagay ay namamalagi sa pinagmulan ng mga halaga ng basura dahil kung pagkatapos ko sa ibang pagkakataon sa programang ito 522 00:32:56,570 --> 00:33:01,010 hilingin ang operating system para sa higit pang memory sa GetString o malloc o isang bagay tulad na 523 00:33:01,010 --> 00:33:04,900 at operating system na, sigurado, mayroon akong 12 bytes ng memorya lamang napalaya, 524 00:33:04,900 --> 00:33:08,080 gamitin ang mga ito, kung ano ang iyong na ipinasa? 525 00:33:08,080 --> 00:33:10,830 Ka pagpunta sa ipinasa ng tipak ng memorya na namin karaniwang gumuhit 526 00:33:10,830 --> 00:33:13,700 na may mga marka ng tanong, ngunit kung ano ang mga pinag-uusapan mark? 527 00:33:13,700 --> 00:33:17,000 Mangyari sila h-e-l-l-o, h-e-l-l-o. 528 00:33:17,000 --> 00:33:20,940 Ito ang aming bagong mga halaga ng basura sa lalong madaling magbakante mo na memory. 529 00:33:20,940 --> 00:33:22,750 >> May isang tunay na implikasyon ng mundo dito. 530 00:33:22,750 --> 00:33:24,720 Nangyayari ito gawin sa RAM, ngunit ang iyong computer 531 00:33:24,720 --> 00:33:26,720 aktwal na gawin ang parehong bagay sa disk. 532 00:33:26,720 --> 00:33:30,620 Susubukan naming makipag-usap tungkol dito sa partikular na may isang hinaharap na problema set na nakatutok sa forensics. 533 00:33:30,620 --> 00:33:36,170 Ngunit ano ang aktwal na mangyayari kung mayroon kang ilang mga sensitibong financial file sa iyong desktop 534 00:33:36,170 --> 00:33:39,600 o ilang pahapyaw na JPEG at i-drag ito sa iyong basurahan, 535 00:33:39,600 --> 00:33:44,390 kung ano ang mangyayari kapag mong i-drag ang mga ito sa basura o sa recycle bin? 536 00:33:44,390 --> 00:33:47,240 Kang alam kung ano ang ako ng pakikipag-usap tungkol sa. [Tawa] 537 00:33:47,240 --> 00:33:52,370 Ano ang mangyayari kapag drag mo na katibayan na sa iyong recycle bin o basurahan? 538 00:33:52,370 --> 00:33:55,920 [Hindi marinig na mag-aaral ng tugon] 539 00:33:55,920 --> 00:33:58,000 Well, kaya maingat. Ano ang mangyayari kapag ginawa mo na? 540 00:33:58,000 --> 00:34:01,030 Ang maikling sagot ay walang, karapatan? 541 00:34:01,030 --> 00:34:04,790 Pahapyaw o sensitibong file ay pa rin lamang upo doon sa isang lugar sa iyong hard drive. 542 00:34:04,790 --> 00:34:07,940 Karamihan sa atin ng hindi bababa sa natutunan ang mahirap na paraan na kailangan mo upang alisan ng laman ang iyong basurahan 543 00:34:07,940 --> 00:34:10,429 o ang iyong recycle bin sa aktwal na tanggalin ang mga file. 544 00:34:10,429 --> 00:34:13,440 At sa katunayan, kapag ikaw ay i-right click o Kontrolin click sa iyong basurahan maaari 545 00:34:13,440 --> 00:34:15,580 o pumili ng File, Empty Basura o anumang 546 00:34:15,580 --> 00:34:21,420 at alisan ng laman ang aktwal na basura ang maaari o recycle bin, kung ano ang aktwal na mangyayari pagkatapos ang larawang ito? 547 00:34:22,810 --> 00:34:25,969 Karagdagang wala. Kaya walang aktwal na mangyayari sa disk. 548 00:34:25,969 --> 00:34:30,880 >> At kung namin lamang pansamantalang lumayo sa paksa at isulat - I'll lamang gamitin ang likod ng ito. 549 00:34:30,880 --> 00:34:34,639 Kaya ngayon kuwento ay nagbabago mula sa RAM, na kung saan programa umiiral 550 00:34:34,639 --> 00:34:39,250 habang nagpapatakbo ka ng mga ito, sa disk, na kung saan sila ay naka-imbak ang mahabang panahon 551 00:34:39,250 --> 00:34:42,920 kahit na ang kapangyarihan napupunta out, sa ngayon - at kami na bumalik na ito sa hinaharap - 552 00:34:42,920 --> 00:34:46,380 sabihin lang magpanggap na ito ay kumakatawan sa mahirap na biyahe sa loob ng iyong computer 553 00:34:46,380 --> 00:34:50,110 dahil pabalik sa araw na ginamit nila sa pabilog disk, tulad ng tumbahin disk. 554 00:34:50,110 --> 00:34:55,130 Kaya kung mayroon kang ilang mga sensitibong Excel file, maaaring tumagal ito tipak ng memorya 555 00:34:55,130 --> 00:34:59,770 sa disk ng iyong computer, at ako pagguhit ng parehong arbitrary 1s at 0s. 556 00:34:59,770 --> 00:35:03,970 Kapag mong i-drag ang file tulad na sa iyong basurahan o recycle bin, 557 00:35:03,970 --> 00:35:07,750 literal walang mangyayari dahil Apple at Microsoft na nagpasya lamang 558 00:35:07,750 --> 00:35:10,450 basura ang maaari at recycle bin ay talagang lamang ng isang pansamantalang placeholder. 559 00:35:10,450 --> 00:35:14,710 Siguro kalaunan ang OS ay alisan ng laman ito para sa iyo, ngunit karaniwan, hindi ito gawin, 560 00:35:14,710 --> 00:35:17,090 hindi bababa sa hanggang sa ikaw ay talagang mababa sa espasyo. 561 00:35:17,090 --> 00:35:20,870 >> Gayunpaman, kapag pumunta ka sa walang laman na basura o walang laman ang recycle bin, 562 00:35:20,870 --> 00:35:23,460 katulad, walang mangyayari sa ang larawang ito. 563 00:35:23,460 --> 00:35:28,590 Ang lahat na mangyayari sa ibang lugar sa iyong computer, may ilang uri ng talahanayan. 564 00:35:28,590 --> 00:35:35,400 Ito ay uri ng tulad ng isang maliit na impostor sheet na sinasabi na, sabihin nating, resume.doc, 565 00:35:35,400 --> 00:35:40,920 upang ang iyong resume sa isang file sa Microsoft Word na ginagamit upang mabuhay sa lokasyon 123 sa iyong hard disk, 566 00:35:40,920 --> 00:35:43,710 hindi sa memory at hindi sa RAM ngunit sa iyong hard disk, 567 00:35:43,710 --> 00:35:49,050 at iyong pahapyaw buhay sa JPEG sa 456, at ang iyong mga file sa Excel naninirahan sa 789 o kung saan man. 568 00:35:49,050 --> 00:35:53,640 Kapag tinanggal mo ang mga file sa pamamagitan ng aktwal na tinatanggalan ng laman ang basurahan o sa recycle bin, 569 00:35:53,640 --> 00:35:59,530 Ang larawan na ito ay hindi magbago. Ang 0s at 1s sa iyong hard drive ay hindi pumunta kahit saan. 570 00:35:59,530 --> 00:36:03,930 Ngunit ang table na ito, ito maliit na database ng mga uri, ang pagbabago. 571 00:36:03,930 --> 00:36:08,750 Kapag tinanggal mo ang iyong resume, na parang ang file ay tinanggal sa ilang mga kahulugan, 572 00:36:08,750 --> 00:36:12,790 ngunit ang lahat ng mga computer na ay ay kalimutan kung saan ang bagay na naninirahan sa iyong hard drive. 573 00:36:12,790 --> 00:36:17,870 Ay buo pa rin ang 0s at 1s na sumulat ang iyong resume o anumang ng iba pang mga file. 574 00:36:17,870 --> 00:36:21,960 >> Kaya kung ginawa mo ito sinasadyang, mayroon pa rin ng non-zero posibilidad 575 00:36:21,960 --> 00:36:25,800 na maaari mong makuha ang iyong data gamit ang Norton Utilities o ilang commercial software 576 00:36:25,800 --> 00:36:29,810 na layunin sa buhay ay upang makahanap ng 0s at 1s na uri ng na naulila, 577 00:36:29,810 --> 00:36:33,300 nakalimutan dito ngunit ang natitira dito, sa gayon na maaari mong makuha ang iyong data. 578 00:36:33,300 --> 00:36:38,410 O forensic investigators sa pulis o FBI ay aktwal na hard drive 579 00:36:38,410 --> 00:36:42,550 at aktwal na hitsura para sa mga pattern ng 0s at 1s na mukhang mga JPEG, hitsura ng Excel file, 580 00:36:42,550 --> 00:36:46,400 at bawiin ang mga ito na paraan kahit na ang computer ay nakalimutan kanila doon. 581 00:36:46,400 --> 00:36:49,820 Kaya ang tanging paraan na talagang tanggalin ang data, bilang namin talakayin sa hinaharap, 582 00:36:49,820 --> 00:36:54,190 ay mag-iskoba o punasan ang file o hard disk sa pamamagitan ng - 583 00:36:54,190 --> 00:36:56,540 Hindi ikaw talaga ay maaaring mapupuksa ng 0s at 1s 584 00:36:56,540 --> 00:36:59,440 dahil kung hindi man gusto mong magsimula sa isang gigabyte na hard biyahe 585 00:36:59,440 --> 00:37:02,380 at gusto mong magtapos sa isang megabyte hard drive kung Patuloy ang pagtanggal, 586 00:37:02,380 --> 00:37:04,380 literal, 0s at 1s. 587 00:37:04,380 --> 00:37:06,310 Kaya kung ano ang nais mong gawin kung gusto mo talagang upang masakop ang iyong mga track 588 00:37:06,310 --> 00:37:10,510 at ang pangunahing problema ay na mayroong pa rin 0s at 1s sa disk? 589 00:37:10,510 --> 00:37:14,930 Nakikita ko may gesticulating na nais mong pisikal masira ang aparato. Na gagana. 590 00:37:14,930 --> 00:37:19,600 [Tawa] Ngunit kung na ang uri ng isang mamahaling solusyon, kung ano ang maging mas makatwirang? 591 00:37:19,600 --> 00:37:23,270 Oo. >> [Mag-aaral]-overwrite ang mga ito. >>-Overwrite ang mga ito sa kung ano? >> [Mag-aaral] Iba pang mga data. 592 00:37:23,270 --> 00:37:29,070 Iba pang data. Maaari mo lamang patungan ang iyong disk na may 0s o 1s o lahat ng 0s, lahat ng 1s. 593 00:37:29,070 --> 00:37:31,230 >> At na talaga kung ano ang ilan sa ang software ginagawa. 594 00:37:31,230 --> 00:37:33,570 Maaari kang bumili ng software o kahit na makakuha ng libreng software, 595 00:37:33,570 --> 00:37:36,610 at kahit na binuo sa Mac OS mga araw na ito, mas mababa ito sa Windows, 596 00:37:36,610 --> 00:37:38,660 ay ang kakayahan upang secure na burahin. 597 00:37:38,660 --> 00:37:41,960 Aktwal na, kung gusto mong ang lahat ng homran ngayon kung mayroon ka ng Mac at gawin ito, 598 00:37:41,960 --> 00:37:45,740 kung mayroon kang ilang mga bagay-bagay sa iyong basurahan, maaari mong gawin Secure Empty Basura, 599 00:37:45,740 --> 00:37:47,610 na ginagawa eksakto na. 600 00:37:47,610 --> 00:37:53,350 Sa halip na lang burahin ang mga file dito, hindi ito burahin ang 0s at 1s dito, 601 00:37:53,350 --> 00:38:01,240 sa halip, ito ay nagbabago ang lahat ng ito, halimbawa, sa 0s at tuldok, tuldok, tuldok. 602 00:38:01,240 --> 00:38:05,330 Kaya isa sa iyong mga hinaharap psets ang talagang sinasadya mabawi ang mga data - 603 00:38:05,330 --> 00:38:08,430 mga litrato na nagsagawa kami ng mga tao, lugar, at mga bagay sa campus 604 00:38:08,430 --> 00:38:12,810 kung saan makikita namin gumawa ng isang forensic imahe ng memory card sa isang digital camera, 605 00:38:12,810 --> 00:38:17,120 kung saan ay ang eksaktong parehong ideya - at magkakaroon ka na hinamon upang aktwal na mahanap 606 00:38:17,120 --> 00:38:20,160 ang mga pattern na kumakatawan JPEG na sa iyong hard drive, 607 00:38:20,160 --> 00:38:23,610 tulad ng na dating mag-aaral na email ko mabasa ng ilang linggo ang nakalipas 608 00:38:23,610 --> 00:38:25,860 upang mabawi ang mga litrato ng kanyang kapatid na babae. 609 00:38:25,860 --> 00:38:30,300 Bakit hindi namin kumuha ng isang 5-minutong break na dito, at magpapadala kami pangkating muli na may higit sa memorya. 610 00:38:33,030 --> 00:38:38,610 Kaya narito ang kung saan ang mga bagay makakuha ng ng kaunti isip-baluktot, ngunit ito ay isang malakas na hakbang 611 00:38:38,610 --> 00:38:40,480 patungo sa unawa ito ang lahat ng higit pa. 612 00:38:40,480 --> 00:38:42,900 Narito ang isang programa na tinatawag na pointers.c. 613 00:38:42,900 --> 00:38:45,430 Kabilang sample code ngayon. 614 00:38:45,430 --> 00:38:51,280 Pansinin na sa unang ilang linya, 19 sa pamamagitan ng 22, ang lahat ng ginagawa namin ay isang bagay tulad ng GetString 615 00:38:51,280 --> 00:38:54,460 at bumabalik na isang address, pag-iimbak ang mga ito sa mga. 616 00:38:54,460 --> 00:38:58,380 Mula ngayon para sa pset kahit 3 kung gusto mong ngunit pset 4 at sa 617 00:38:58,380 --> 00:39:01,030 kung saan maaari kang magsimula na gawin ang mga gulong ng pagsasanay off ang iyong sarili, 618 00:39:01,030 --> 00:39:04,030 walang dahilan upang magpanggap na string umiiral na ito. 619 00:39:04,030 --> 00:39:07,030 Ito ay tiyak na okay lang simulan ang sinasabi ng magpasinda *. 620 00:39:07,030 --> 00:39:12,610 >> Bilang isang bukod, sa online na mga sanggunian at sa mga libro ay maaaring madalas mong makita ang star sa tabi ng variable. 621 00:39:12,610 --> 00:39:15,600 Maaari mo ring makita ang mga puwang sa paligid ng magkabilang panig nito. 622 00:39:15,600 --> 00:39:17,680 Ang lahat ng mga pagtakbo tama. 623 00:39:17,680 --> 00:39:21,180 Sa ngayon, bagaman, makikita namin ilagay sa pamantayan sa diskarteng ito upang gumawa ng sobrang malinaw 624 00:39:21,180 --> 00:39:24,000 na magpasinda * ay tulad ng sinasabi ng pointer sa karakter. 625 00:39:24,000 --> 00:39:25,680 Na ang uri ng data. 626 00:39:25,680 --> 00:39:28,730 At pagkatapos ay ang pangalan ng variable ay s sa kasong ito. 627 00:39:28,730 --> 00:39:31,180 Kaya namin nakuha string at namin na tinatawag na ito s. 628 00:39:31,180 --> 00:39:35,180 At pagkatapos ay down na dito mapansin na ako ginagawa talagang kaunti ng pagdaya. 629 00:39:35,180 --> 00:39:39,080 Ito ay tinatawag na pointer aritmetika, na kung saan ay uri ng sobrang simple. 630 00:39:39,080 --> 00:39:41,790 Lamang nangangahulugan idagdag at ibawas ang mga numero sa payo. 631 00:39:41,790 --> 00:39:43,660 Ngunit ito ay aktwal na gumagana. 632 00:39:43,660 --> 00:39:49,170 Ang program na ito ay tila mga Kopya 1 na character sa string s bawat linya tulad na ang resulta ng pagtatapos - 633 00:39:49,170 --> 00:39:54,920 Lang namin palayawin kung saan ito ay pagpunta, gumawa ng mga payo, patakbuhin ang mga payo, hayaan mo akong mag-zoom in. 634 00:39:54,920 --> 00:39:58,940 Ngayon ipaalam sa akin ng uri sa isang bagay tulad ng HELLO at i-type ang Enter 635 00:39:58,940 --> 00:40:01,080 at mga Kopya 1 character sa bawat linya. 636 00:40:01,080 --> 00:40:04,730 Hanggang isang segundo ang nakalipas, ay namin nagawa ito may square bracket pagtatanda. 637 00:40:04,730 --> 00:40:09,760 Gusto naming magkaroon ng para sa loop at nais naming gawin printf ng mga [i] at nais naming gawin na muli at muli at muli 638 00:40:09,760 --> 00:40:11,950 sa backslash n sa dulo ng bawat linya. 639 00:40:11,950 --> 00:40:16,800 Ngunit Ang program na ito ay naiiba. Ang program na ito ay gumagamit ng, literal, aritmetika. 640 00:40:16,800 --> 00:40:18,860 Kaya kung ano ang nangyayari sa dito? 641 00:40:18,860 --> 00:40:24,720 Una sa lahat, bago ang loop na ito kahit executes, kung ano ang, lamang maging malinaw, mga aktwal? 642 00:40:24,720 --> 00:40:27,270 S ay? >> [Mag-aaral] isang address. >> Isang address. 643 00:40:27,270 --> 00:40:32,980 >> At ito ang address ng, sa kaso ng halo, ang unang character sa salitang iyon, na kung saan ay h. 644 00:40:32,980 --> 00:40:37,370 Kaya s ay, sa partikular na halimbawa, ang address ng h. 645 00:40:37,370 --> 00:40:41,850 Kaya kung ano ang ibig sabihin gawin s + i? 646 00:40:41,850 --> 00:40:46,280 Well, i nagsisimula sa 0 sa para sa loop. Ginawa namin na maraming beses. 647 00:40:46,280 --> 00:40:49,760 Ako ay pagpunta sa pumunta ng hanggang sa ang haba ng string, tila. 648 00:40:49,760 --> 00:40:53,950 Kaya sa unang pag-ulit na ito loop, i ay malinaw naman 0. 649 00:40:53,950 --> 00:41:01,740 Kaya expression na ito ay sinasabi ng mga + i - sa halip, mga +0--na kung malinaw naman lamang ni. 650 00:41:01,740 --> 00:41:04,320 Kaya kung ano ang mga * dito? 651 00:41:04,320 --> 00:41:08,530 Ngayon na aming ginagamit ang star sa isang bahagyang kakaibang paraan. 652 00:41:08,530 --> 00:41:13,080 Hayaan akong magpatuloy at mapupuksa ng t dahil tapos na kami sa pakikipag-usap tungkol sa mga t at mga kopya ng mga. 653 00:41:13,080 --> 00:41:15,540 Ngayon lang namin nais na sabihin sa isang kuwento na kinasasangkutan ng mga. 654 00:41:15,540 --> 00:41:20,090 At iba pa sa panahon na ito, pagkatapos ng pagkakaroon ng uri ng string, ating mundo ay mukhang lubos tulad ng ginawa ito bago 655 00:41:20,090 --> 00:41:26,630 na may lamang mga pag-iimbak ang address ng h at mas pangkalahatang pagturo sa string kumusta. 656 00:41:26,630 --> 00:41:33,170 Kung gagawin ko ngayon ng isang linya tulad ng * (mga + i), sabihin subukan ito. 657 00:41:33,170 --> 00:41:40,140 Kaya * (s + i). Ipaalam sa akin pasimplehin ito dahil ito ay 0, kaya ito ay * (mga +0). 658 00:41:40,140 --> 00:41:43,790 Well, maghintay ng isang minuto. Pasimplehin pa. Ito ay * (mga). 659 00:41:43,790 --> 00:41:47,020 Well, ngayon ang mga panaklong ay uri ng bobo, kaya ngayon sabihin lamang gawin * s. 660 00:41:47,020 --> 00:41:50,540 Kaya sa unang pag-ulit ng ito loop, na linya na naka-highlight, 26, 661 00:41:50,540 --> 00:41:53,650 medyo mas katumbas sa pag-print ito. 662 00:41:53,650 --> 00:41:56,040 Ano ang data uri ng * s? 663 00:41:56,040 --> 00:42:00,770 Sa kontekstong ito, dahil ang bituin ang mangyayari sa tabi sa mismong s, 664 00:42:00,770 --> 00:42:04,930 ngunit higit na partikular, dahil kami ay hindi na deklarasyon s, 665 00:42:04,930 --> 00:42:09,730 hindi kami ay ang paglikha ng isang variable na ito, walang pagbanggit ng magpasinda * sa linya 26, 666 00:42:09,730 --> 00:42:14,280 walang pagbanggit ng string ng keyword, lamang namin gamit ang isang variable na tinatawag na mga, 667 00:42:14,280 --> 00:42:19,650 ito lumiliko out ngayon star ay may bahagyang naiiba at, tinatanggap na, nakakalito ang kahulugan. 668 00:42:19,650 --> 00:42:26,590 * Dito ay nangangahulugan ng mga pumunta sa address sa s at i-print ang anumang doon. 669 00:42:26,590 --> 00:42:33,750 Kaya s ay dito, * s - uri ng tulad ng Chutes at Ladders, sundin ang mga arrow - dito. 670 00:42:33,750 --> 00:42:35,850 Kaya ito ay * s. 671 00:42:35,850 --> 00:42:39,060 >> Kaya kung ano ay makakakuha ng naka-print sa unang pag-ulit na loop sa linya 26? 672 00:42:39,060 --> 00:42:42,170 -Print ko% c, na placeholder para sa isang character, 673 00:42:42,170 --> 00:42:48,520 \ n para sa isang bagong linya. * (Mga + i) kung saan ay i 0 ay lamang ito. 674 00:42:48,520 --> 00:42:53,670 Kaya kung ano ang magpasinda ko ilagay sa para sa% c? H. 675 00:42:53,670 --> 00:42:56,900 Sa susunod na pag-ulit ng loop - maaari mong malamang na makita kung saan ito ay pagpunta - 676 00:42:56,900 --> 00:43:01,350 sa susunod na pag-ulit na i ay malinaw naman 1, kaya ito ay nangangahulugan ng mga +1, 677 00:43:01,350 --> 00:43:05,580 at pagkatapos ngayon ko kailangan ang panaklong dahil ngayon star kailangang sabihin 678 00:43:05,580 --> 00:43:08,620 pumunta sa memory address ng mga +1. 679 00:43:08,620 --> 00:43:14,170 Ano ang mga? Natin ibalik sa oras at sabihin ang arrow na ito ngayon ay hindi aktwal na ginagawa sa amin ang anumang pabor. 680 00:43:14,170 --> 00:43:18,450 Hayaan ang higit na partikular sabihin na ito ay itinatago ang numero 123 681 00:43:18,450 --> 00:43:25,110 dahil ang simula ng string na ito kumusta, ito ay address 123, ito ay 124, at iba pa. 682 00:43:25,110 --> 00:43:30,550 Kaya sa pangalawang ulit na kapag ako sinasabi ng mga +1, na tulad ng sinasabi 123 +1, 683 00:43:30,550 --> 00:43:35,340 na kilala bilang 124, kaya kung ano ang pansamantalang trabaho ay makakakuha ng naka-print sa pangalawang ulit? 684 00:43:35,340 --> 00:43:37,850 E sa memory address 124. 685 00:43:37,850 --> 00:43:44,440 Pagkatapos + muli, 125, 126, 127, at ang loop ito thankfully hinto bago makuha namin dito 686 00:43:44,440 --> 00:43:49,040 dahil gumagamit ako ng strlen upang matiyak na hindi i bilangin masyadong mataas. 687 00:43:49,040 --> 00:43:50,810 Kaya na ay masyadong ito. 688 00:43:50,810 --> 00:43:55,000 Muli, ito ay tulad ng kahit na namin ay tapos na sa isang linggo ang nakalipas. 689 00:43:55,000 --> 00:43:59,200 Hayaan akong sumulat ang mga ito sa linya sa ibaba kahit hindi namin gusto mong gawin parehong. 690 00:43:59,200 --> 00:44:02,500 Ito ay kapareho ngayon upang ito. 691 00:44:02,500 --> 00:44:08,310 >> Kaya kahit s ay isang string, bilang namin ang pagtawag ito para sa linggo, s ay talagang isang pansamantalang trabaho *. 692 00:44:08,310 --> 00:44:13,270 Kaya kung nais namin na sobrang anal, talagang tamang isulat ang partikular na character 693 00:44:13,270 --> 00:44:17,490 sa ith lokasyon gamit ang mga numeric address at ito star operator, 694 00:44:17,490 --> 00:44:20,470 ngunit lantaran, ito ay lamang kaya magkano cleaner. Kaya ito ay hindi masama. 695 00:44:20,470 --> 00:44:26,720 Dahilan Walang itigil linya 27 dito, ngunit 26 ay halos pareho sa pagtakbo, 696 00:44:26,720 --> 00:44:31,570 at ito ay halos pareho sa pagtakbo para sa eksaktong dahilan na namin ang tinatalakay sa gayon ay malayo. 697 00:44:31,570 --> 00:44:33,650 At bilang wakas, 29 lamang mahusay na kasanayan. 698 00:44:33,650 --> 00:44:38,420 Pagtawag walang mga nangangahulugan na ka na ngayon pagbibigay ang memory na ibinigay mo GetString 699 00:44:38,420 --> 00:44:41,630 dahil muli, tulad ng nabanggit ko Monday, GetString para sa linggo 700 00:44:41,630 --> 00:44:44,180 ay nagpapakilala ng isang bug sa iyong code. 701 00:44:44,180 --> 00:44:46,490 Ang iyong code para sa linggo ay nagkaroon ng mga paglabas memory 702 00:44:46,490 --> 00:44:49,970 kung saan ka na humihiling sa GetString para sa memory ngunit hindi mo na pagbibigay ito pabalik. 703 00:44:49,970 --> 00:44:53,410 At iyon ay sadyang pinili namin pedagogically 704 00:44:53,410 --> 00:44:55,880 dahil ito ay lamang masyadong maraming mag-isip tungkol sa maagang bahagi. 705 00:44:55,880 --> 00:44:57,710 Ngunit ngayon ay kailangan namin ng higit pang mahusay na proporsyon. 706 00:44:57,710 --> 00:45:00,830 Kung hihilingin mo ang computer para sa memory, bilang ay kaso para sa GetString, 707 00:45:00,830 --> 00:45:02,820 na kaso tila malloc, 708 00:45:02,820 --> 00:45:07,970 dapat mo na ngayon para sa pset 4 pasulong ding libreng anumang tulad memorya. 709 00:45:07,970 --> 00:45:11,650 Mapansin ito ay naiiba mula sa sinasabi ng mga int n. 710 00:45:11,650 --> 00:45:15,040 Hindi mo na kailangang magbakante ito dahil hindi mo tawagan GetString 711 00:45:15,040 --> 00:45:16,890 at hindi mo tawagan ang malloc. 712 00:45:16,890 --> 00:45:20,610 >> At kahit na tinatawag mo ang GetInt bilang namin ay makakita, 713 00:45:20,610 --> 00:45:25,520 GetInt ay hindi magtalaga ng memory para sa iyo dahil maaari mong aktwal na pumasa sa paligid ng mga integer 714 00:45:25,520 --> 00:45:29,430 at sa kamay at karakter lamang ang paraan na namin ang paggawa para sa linggo. 715 00:45:29,430 --> 00:45:33,960 String, bagaman, ay espesyal dahil talagang sila ang pagdudugtong ng maramihang mga karakter. 716 00:45:33,960 --> 00:45:37,450 Kaya hindi lang nila naiiba mula sa mga karakter at sa kamay at ints at ang gusto. 717 00:45:37,450 --> 00:45:39,980 Ngunit makikita namin bumalik na bago mahaba. 718 00:45:39,980 --> 00:45:44,920 Anumang mga katanungan pagkatapos ay sa simula ng payo? Oo. 719 00:45:44,920 --> 00:45:49,690 [Hindi marinig na mag-aaral tanong] 720 00:45:49,690 --> 00:45:51,440 Ah, napakagandang tanong. 721 00:45:51,440 --> 00:45:55,790 Isa ng ilang mga bagay aktwal na ginagawa ng C para sa iyo, na maginhawa, 722 00:45:55,790 --> 00:46:00,110 ito figure para sa iyo kung ano ang laki ng uri ng data 723 00:46:00,110 --> 00:46:03,060 at pagkatapos ay ipinapakita na uri ng pagpaparami para sa iyo. 724 00:46:03,060 --> 00:46:06,610 Ito walang kinalaman sa kaso ng mga karakter dahil halos palaging pansamantalang trabaho ay 1 byte, 725 00:46:06,610 --> 00:46:08,150 kaya ito gumagana lamang. 726 00:46:08,150 --> 00:46:11,220 Ngunit para sa kapakanan ng talakayan, kung aktwal mong ang pag-print ng mga integer 727 00:46:11,220 --> 00:46:15,500 at ikaw ay sinusubukan upang i-print ang ilang mga halaga s na pagturo sa isang integer, 728 00:46:15,500 --> 00:46:20,720 hindi mo katulad ay kailangang gawin + 4 * i lamang dahil int ng 4 bytes. 729 00:46:20,720 --> 00:46:25,780 Pointer aritmetika ay nangangahulugan na C at ang tagatala ang lahat ng matematika para sa iyo. 730 00:46:25,780 --> 00:46:29,190 Ang mayroon kang pakialam tungkol sa ang pagbilang sa uri ng tao pakiramdam. Oo. 731 00:46:29,190 --> 00:46:35,200 [Mag-aaral] Kung ikaw ay ipinapahayag ng isang string sa loob ng isang loop, mayroon kang magbakante ito sa ibang pagkakataon? 732 00:46:35,200 --> 00:46:36,760 Magandang tanong. 733 00:46:36,760 --> 00:46:41,390 >> Kung ikaw ay ipinahayag ng isang string sa loob ng para sa loop, kailangan mo magbakante ito sa ibang pagkakataon? 734 00:46:41,390 --> 00:46:47,520 Kailangan mo lamang na libreng memorya na maglaan may GetString o may malloc. 735 00:46:47,520 --> 00:46:53,110 Kaya kung sabihin mo lang ng bagay na gusto - hayaan mo akong ilagay ang kulot tirante ngayon na may kaugnayan sa gayon ang lahat ng code ay. 736 00:46:53,110 --> 00:46:58,580 Kung ginawa mo ang isang bagay, kahit na buggily, tulad nito, magpasinda * t = s, 737 00:46:58,580 --> 00:47:03,450 hindi mo na kailangan sa libreng t dahil t ay hindi sangkot anumang pagbanggit ng malloc o GetString. 738 00:47:03,450 --> 00:47:08,960 Kung sa pamamagitan ng kaibahan ng ginawa mo ito, GetString, pagkatapos oo, gusto mong kailangang mga libreng t. 739 00:47:08,960 --> 00:47:14,350 At sa katunayan, ang iyong lamang pagkakataon upang gawin iyon ngayon sa loob ng loop, para sa parehong isyu ng saklaw 740 00:47:14,350 --> 00:47:16,060 na namin ang tinalakay sa nakaraan. 741 00:47:16,060 --> 00:47:18,830 Kung hindi mo nais na paglaan ng memorya, paglaan ng memorya, paglaan ng memorya, 742 00:47:18,830 --> 00:47:21,230 at sa dulo ng programa dahil nasa labas ka ng na loop, 743 00:47:21,230 --> 00:47:24,240 t ay hindi umiiral, ngunit hindi mo sinabi ang operating system 744 00:47:24,240 --> 00:47:26,750 na hindi mo kailangan na memory na ito. 745 00:47:26,750 --> 00:47:30,430 At bago mahaba, para sa pset 4 o 5 magpapadala kami magbigay ng kasangkapan sa iyo ng isang programa na tinatawag na Valgrind, 746 00:47:30,430 --> 00:47:34,160 kung saan ay katulad sa espiritu sa GDB na ito nakuha medyo ng isang arcane interface, 747 00:47:34,160 --> 00:47:35,750 ngunit nito layunin sa buhay ay upang makatulong sa iyo. 748 00:47:35,750 --> 00:47:39,380 At Valgrind ay isang programa na sa hinaharap ay maghanap sa iyong mga programa 749 00:47:39,380 --> 00:47:42,550 naghahanap para sa paglabas ng memory, kung mula GetString o malloc, 750 00:47:42,550 --> 00:47:47,800 na magsisimula kaming gamit ang lahat ng higit pa sa bilang itigil namin gamit ang CS50 library bilang magkano. 751 00:47:47,800 --> 00:47:53,030 Wakas namin ngayon uri ng bokabularyo at ang uri ng kaisipan na modelo sa teorya 752 00:47:53,030 --> 00:47:55,170 na upang malutas ang sirang programa. 753 00:47:55,170 --> 00:47:59,410 >> Kaya sa sirang programa na ito, makipagpalitan ng gumagana sa loob ng makipagpalitan ng, 754 00:47:59,410 --> 00:48:05,280 ngunit hindi ito aktwal na nagtrabaho sa pangunahing dahil pangunahing ang pumasa sa x at y, manariwa sa diwa, 755 00:48:05,280 --> 00:48:07,260 at mga ay nakapasa sa sa pamamagitan ng mga halaga, kaya na magsalita. 756 00:48:07,260 --> 00:48:09,330 Mga kopya ng mga ito ay ibinigay upang magpalitan. 757 00:48:09,330 --> 00:48:12,520 Sa pagtatapos ng makipagpalitan ng, isang at b ay sa katunayan ay palitan, 758 00:48:12,520 --> 00:48:16,120 ngunit siyempre x at y, bilang namin tinalakay sa Monday, ay hindi. 759 00:48:16,120 --> 00:48:19,940 Kaya ko magpanukala sa berde dito na ito ay talagang ang solusyon dito. 760 00:48:19,940 --> 00:48:22,640 At aktwal na, hayaan mo akong ilipat ang aking mga bituin lamang upang maging pare-pareho 761 00:48:22,640 --> 00:48:24,440 kahit, muli, pagtakbo ito ay hindi mahalaga. 762 00:48:24,440 --> 00:48:28,730 Sa hinaharap linggo ipapaliwanag namin kung kailan at kung bakit ito ginagawa kahit. 763 00:48:28,730 --> 00:48:30,600 Kaya sa berde na ngayon ang isang solusyon. 764 00:48:30,600 --> 00:48:33,700 Lantaran, tinitingnan nito ang isang buong maraming Messier dahil mayroon akong ang lahat ng mga bituin na ito. 765 00:48:33,700 --> 00:48:35,380 Hayaan akong ituro ang isang bagay. 766 00:48:35,380 --> 00:48:40,040 Sa tuktok na linya dito kung saan sinasabi nito na int * a at int * b 767 00:48:40,040 --> 00:48:42,820 sa panimula ng paggawa ng parehong bagay bilang laging ito ay may. 768 00:48:42,820 --> 00:48:47,070 Ito ay deklarasyon 2 argumento o parameter swap, 769 00:48:47,070 --> 00:48:49,940 ang unang ng kung saan ay isang int pointer tinatawag na, 770 00:48:49,940 --> 00:48:53,100 ang pangalawang na kung saan ay isang int pointer na tinatawag na b. 771 00:48:53,100 --> 00:48:55,770 Ang tanging bagay na ang bago sa puntong ito ay ang katunayan na ang isang star doon. 772 00:48:55,770 --> 00:48:59,340 >> Ano ang na ibig sabihin nito? Ay hindi isang int, b ay hindi isang int. 773 00:48:59,340 --> 00:49:04,100 Ang address ng isang int at b ang address ng isang iba't ibang mga int. 774 00:49:04,100 --> 00:49:06,980 Down dito, ito ay kung saan umamin ako C nakakakuha ng nakalilito. 775 00:49:06,980 --> 00:49:09,790 Ngayon sinusubukan namin gamit ang isang star, ngunit ito ay may iba't ibang kahulugan sa kontekstong ito. 776 00:49:09,790 --> 00:49:13,150 Dahil hindi namin deklarasyon payo bilang ay namin dito, 777 00:49:13,150 --> 00:49:15,500 dito namin ay dereferencing bagay. 778 00:49:15,500 --> 00:49:21,520 Kaya technically, ang star sa konteksto ng una, ikalawa, at ikatlong linya sa loob ng makipagpalitan ng 779 00:49:21,520 --> 00:49:24,560 ay ang dereference operator, na lamang ay nangangahulugan pumunta doon. 780 00:49:24,560 --> 00:49:27,400 Kaya lamang ng aking daliri sinundan ang arrow sa h, 781 00:49:27,400 --> 00:49:31,100 * Ang isang paraan pumunta sa address na iyon at mahanap ako ng int na doon. 782 00:49:31,100 --> 00:49:34,250 * B paraan pumunta sa address at pumasa sa akin kung ano ang doon. 783 00:49:34,250 --> 00:49:40,730 Kaya sabihin redraw ang larawan mula Lunes ngayon ay gumagamit ng isang stack ng mga frame, 784 00:49:40,730 --> 00:49:43,130 sa ibaba kung saan ay pagpunta sa pangunahing, 785 00:49:43,130 --> 00:49:47,600 itaas na kung saan ay magiging makipagpalitan ng, 786 00:49:47,600 --> 00:49:50,880 kaya na ang ating mundo ay mukhang, tulad ng Lunes, tulad nito. 787 00:49:50,880 --> 00:49:53,620 Narito ang isang tipak ng memorya na pangunahing pagpunta sa gamitin. 788 00:49:53,620 --> 00:49:56,520 >> Manariwa sa diwa mula Lunes na ang programa ay may 2 variable, 789 00:49:56,520 --> 00:50:01,930 isang tinatawag na x at tinatawag y, at ako ay ilagay ang mga numero 1 at 2 doon. 790 00:50:01,930 --> 00:50:06,580 Ngayon kapag tumawag ako swap tulad ng ginawa ko sa Lunes, 791 00:50:06,580 --> 00:50:11,000 dati kapag ginamit ko ang pulang bersyon ng programang ito, na ganito ang hitsura, 792 00:50:11,000 --> 00:50:17,470 Nakatanggap ako ng 2 parameter, at b, at kung ano ang namin magsulat dito at dito? 793 00:50:17,470 --> 00:50:21,160 Lang sa 1 at 2, literal kinokopya ng x at y. 794 00:50:21,160 --> 00:50:23,070 Ngayon naming baguhin na. 795 00:50:23,070 --> 00:50:28,510 Ngayon sa halip ng pagpasa sa ints at b namin ay pagpunta sa pumasa sa 2 address. 796 00:50:28,510 --> 00:50:34,290 Mga address na iyon mangyari upang ituro sa mga ints, ngunit ang mga address na iyon ay hindi ints sa kanilang sarili. 797 00:50:34,290 --> 00:50:37,330 Ang mga ito ay address. Ito ay tulad ng isang postal address sa halip. 798 00:50:37,330 --> 00:50:40,580 Kaya ngayon ay kailangan naming lamang magbigay sa aking sarili ng kaunti pa sa detalye sa screen. 799 00:50:40,580 --> 00:50:43,250 Ito ay memorya ng aking computer na ito lahat ng araw. 800 00:50:43,250 --> 00:50:45,120 Ngayon kailangan namin ng ilang arbitrary na numero scheme. 801 00:50:45,120 --> 00:50:50,580 Kaya sabihin lamang sabihin, sa pamamagitan lamang ng pagkakataon na ito memory address 123, 124. 802 00:50:50,580 --> 00:50:55,660 Sabihin lamang sabihin na ito ay 125, ito ay 126, at iba pa, ngunit na lubos na arbitrary. 803 00:50:55,660 --> 00:50:58,590 Kailangan lang namin ang ilang mga numero scheme sa aking memorya. 804 00:50:58,590 --> 00:51:04,030 Kaya ngayon kapag ako ay aktwal na pumasa sa x at y, hindi ako pagpunta sa pumasa sa x at y; 805 00:51:04,030 --> 00:51:08,400 Ako pagpunta sa pumasa sa postal address, kaya na magsalita, ng x at ng y 806 00:51:08,400 --> 00:51:11,870 kaya kung ano ay makakakuha ng naka-imbak dito at dito ay hindi 1 at 2, 807 00:51:11,870 --> 00:51:16,030 ngunit kung maaari mong makita ang aking maliit na teksto, kung ano ay makakakuha pumasa sa sa dito at dito? 808 00:51:16,030 --> 00:51:23,340 [Hindi marinig na mag-aaral tugon] >> Mismong. 123 ay makakakuha ng ilagay dito at 124 ay makakakuha ng ilagay dito. 809 00:51:23,340 --> 00:51:28,910 >> Ngayon, dahil ginamit ko ang star sa unang paraan ng line up dito sa itaas, 810 00:51:28,910 --> 00:51:34,340 ang aking programa lamang alam na 123 at 124, kahit na nasa malinaw naman integer 811 00:51:34,340 --> 00:51:40,160 na ang tao anumang maaaring mapansin, dapat silang kahulugan ng mga address, numeric address. 812 00:51:40,160 --> 00:51:43,250 Hindi nila at sa kanilang sarili ints, sila ang mga address, 813 00:51:43,250 --> 00:51:46,120 at na dahil tahasan ko ilagay ang mga bituin doon. 814 00:51:46,120 --> 00:51:51,360 Kaya ngayon sa aking una, ikalawa, at ikatlong linya ng aktwal na code kung ano ang mangyayari dito? 815 00:51:51,360 --> 00:51:53,380 Natin gumuhit ang natitirang bahagi ng larawan. 816 00:51:53,380 --> 00:51:56,980 Tmp ay tulad ng ito ay sa Lunes. Walang espesyal na tungkol sa tmp. 817 00:51:56,980 --> 00:52:03,060 Ito ay isang lokal na 32 bit variable, at sa loob ng na tila ako itinatago ang halaga ng * ng. 818 00:52:03,060 --> 00:52:08,580 Ngayon, kung sinabi ko lang tmp = a, kung ano ang gusto kong ilagay dito? >> [Mag-aaral] 123. 819 00:52:08,580 --> 00:52:10,370 123. Ngunit hindi kung ano ang ako ginagawa. 820 00:52:10,370 --> 00:52:13,670 Ako sinasabi tmp = * a. Star paraan pumunta doon. 821 00:52:13,670 --> 00:52:19,370 Kaya dito ay, 123. Paano ko pumunta doon? Magpanggap tulad ang isang arrow. 822 00:52:19,370 --> 00:52:24,460 Well, may ito ay, 1. Kaya kung ano ay makakakuha ng naka-imbak sa tmp, tila? Lang 1. 823 00:52:24,460 --> 00:52:29,620 Kaya sa ibang salita, tmp * a, * isang paraan pumunta sa address na ay kasalukuyang sa isang, 824 00:52:29,620 --> 00:52:31,320 na tila 123. 825 00:52:31,320 --> 00:52:33,910 >> Okay, dito namin sa lokasyon 123, ko makita ang numero 1, 826 00:52:33,910 --> 00:52:35,670 kaya ako pagpunta upang ilagay ang numero 1 doon. 827 00:52:35,670 --> 00:52:39,020 Ngayon ano ang gagawin ko sa linya 2, * a = * b? 828 00:52:39,020 --> 00:52:44,570 Ito ay ng kaunti pa kasangkot dahil ngayon kung ano ang? Ito ay 123. 829 00:52:44,570 --> 00:52:50,220 Kaya * ay kung saan? Kung saan ako ay bago. Kaya pumunta doon. Okay. 830 00:52:50,220 --> 00:52:53,420 Bilang wakas, ngayon, at pagkatapos ay sa wakas na ito ay magsisimula kabuluhan, sana, 831 00:52:53,420 --> 00:53:00,280 * B nangangahulugan kung ano ang nasa b? 124. Kaya kailangan kong pumunta doon, na kung saan ay 2. 832 00:53:00,280 --> 00:53:03,430 Kaya ano ang gagawin ko bang ilagay kung saan? 833 00:53:03,430 --> 00:53:10,100 2 napupunta sa dito dahil ang * b pupunta sa * isang. Kaya ko na. 834 00:53:10,100 --> 00:53:13,120 At maaari ka na makita, marahil, na hindi namin kaya magkano ang mas malapit 835 00:53:13,120 --> 00:53:17,710 sa paglutas tama ito bobo, simpleng problema para sa unang pagkakataon 836 00:53:17,710 --> 00:53:20,920 dahil ngayon mayroon pa rin kaming isang paggunita ng kung ano ang x ay, 837 00:53:20,920 --> 00:53:23,230 kami ay may 2 kopya, tinatanggap na, ng y, 838 00:53:23,230 --> 00:53:25,850 ngunit linya 3 ngayon sabi ni * b. 839 00:53:25,850 --> 00:53:31,080 Kaya dito ang b. * B paraan pumunta doon. Kaya kung saan ay ang lokasyon ng 124? 840 00:53:31,080 --> 00:53:35,560 Ito ay tila dito. Kaya ano ang gagawin ko bang ilagay dito? Malinaw, tmp. 841 00:53:35,560 --> 00:53:39,600 Kaya ngayon gagawin ko ito. Kaya Mayroon akong 1 dito at 2 dito. 842 00:53:39,600 --> 00:53:43,560 At ngayon kung ano ang tungkol sa lahat ng ito, ang 123, ang 124, at ang 1? 843 00:53:43,560 --> 00:53:47,910 Sa lalong madaling makipagpalitan babalik, ang memory na ito ay kasing ganda ng mawawala 844 00:53:47,910 --> 00:53:51,070 dahil sa lalong madaling makipagpalitan babalik, operating system 845 00:53:51,070 --> 00:53:54,190 libreng gamitin na memorya muli sa hinaharap. 846 00:53:54,190 --> 00:53:58,870 Lamang memorya pangunahing sa ilalim ng ang tinatawag na stack sticks sa paligid. 847 00:53:58,870 --> 00:54:01,470 >> At kaya ngayon namin sa wakas ay may isang gumaganang bersyon. 848 00:54:01,470 --> 00:54:06,310 Hayaan akong pumunta sa swap.c, at mapansin ang mga sumusunod. 849 00:54:06,310 --> 00:54:11,280 Sa tuktok ng programa binago ko ang aking prototype na int * a at int * b. 850 00:54:11,280 --> 00:54:15,000 Kaya ang tanging bagay na ako ay nagbago upang pumunta mula sa pula, na ay hindi maganda, berde, na ay mabuti, 851 00:54:15,000 --> 00:54:17,350 ay Nagdagdag ako ng mga bituin na ito ngayon. 852 00:54:17,350 --> 00:54:21,520 Ngunit pagkatapos ay down na dito sa swap mismo ako ay kopyahin, i-paste kung ano ang sa slide. 853 00:54:21,520 --> 00:54:24,140 Mayroon akong isang bituin dito, bituin dito - na tumutugma sa prototype - 854 00:54:24,140 --> 00:54:27,930 at pagkatapos ang lahat ng mga bagay na ito ay mayroon na ngayong bituin maliban sa tmp 855 00:54:27,930 --> 00:54:30,680 dahil ang paggamit ng isang pansamantalang variable, walang bagong doon. 856 00:54:30,680 --> 00:54:33,040 Kailangan ko lang pansamantalang imbakan para sa isang int. 857 00:54:33,040 --> 00:54:34,820 Kaya hindi namin kailangan ng star doon. 858 00:54:34,820 --> 00:54:39,310 Kailangan lang namin ang bituin sa gayon maaari naming cross ang ganitong uri ng mga arbitrary na hangganan 859 00:54:39,310 --> 00:54:42,900 sa pagitan ng mga 2 frame sa memorya ng aking computer. 860 00:54:42,900 --> 00:54:45,630 Ngunit ang isang huling bagay ay upang baguhin, at maaari mong glimpsed nito. 861 00:54:45,630 --> 00:54:48,810 Ano ang iba pang mga linya ay malinaw naman iba't ibang ngayon? >> [Mag-aaral] & x. 862 00:54:48,810 --> 00:54:53,270 >> Oo, kaya 25 ay ang huling linya ng code na kailangan kong baguhin para sa upang gumana. 863 00:54:53,270 --> 00:54:58,360 Isang linggo ang nakalipas at kahit sa Lunes linya 25 tumingin tulad nito, swap x at y, 864 00:54:58,360 --> 00:55:02,020 at ito ay pinaghiwa lamang dahil kung sinasabi mo makipagpalitan ng (x, y) 865 00:55:02,020 --> 00:55:05,660 binibigyan ng mga kopya ng x at y magpalitan, pagkatapos ito ay ginagawa nito bagay, 866 00:55:05,660 --> 00:55:09,080 ngunit hindi ka kailanman aktwal pagbabago x at y mismo. 867 00:55:09,080 --> 00:55:12,880 Kaya kahit na hindi mo na nakikita character na ito bago sa mga ampersand sa code, 868 00:55:12,880 --> 00:55:15,860 lamang ng hula. Ano ang ampersand gawin, tila? 869 00:55:15,860 --> 00:55:17,890 [Mag-aaral] Kinukuha ang address. >> Dadalhin ang address. 870 00:55:17,890 --> 00:55:21,160 Kaya ampersand ay sinasabi ninyo sa akin ang address ng x. 871 00:55:21,160 --> 00:55:25,590 Sino ang nakakaalam kung saan ito ay? Mangyayari sa 123. Wala akong pakialam. Lamang magbigay sa akin ang address ng x. 872 00:55:25,590 --> 00:55:28,340 & Yahin ang ibig sabihin ninyo sa akin ang address ng y. 873 00:55:28,340 --> 00:55:34,450 At sa puntong iyon ay perpektong pare-pareho ang kuwento na may larawan iginuhit namin ng ilang sandali ang nakalipas. 874 00:55:34,450 --> 00:55:38,310 >> Kaya ko makikita umamin payo, tiyak na para sa akin kapag ako ay nag-unang nagsimula pag-aaral na ito, 875 00:55:38,310 --> 00:55:40,570 ay tiyak isa ng ang hardest bagay sa I-wrap ang aking isip sa paligid. 876 00:55:40,570 --> 00:55:43,760 Ngunit Napagtanto, lalo na bilang panatilihin namin ipinapalabas na may mga ganitong uri ng bagay, 877 00:55:43,760 --> 00:55:48,030 kung masira mo ito sa mga napaka-simpleng uri ng intellectually hindi kawili-wili ng mga problema 878 00:55:48,030 --> 00:55:52,270 lamang paglipat ng numero sa paligid, ang sagot ng maraming ng pagkalito na may mga payo 879 00:55:52,270 --> 00:55:56,590 talagang maaaring nagmula mula sa mga napaka pangunahing mekanika. 880 00:55:56,590 --> 00:55:59,070 Narito ang isang address. Pumunta doon sa mga bituin. 881 00:55:59,070 --> 00:56:03,830 O pasalungat, narito ang isang ampersand. Malaman kung ano ang address na aktwal na. 882 00:56:03,830 --> 00:56:06,270 Ayos lang. 883 00:56:06,270 --> 00:56:09,000 Kaya kung saan ay ang lahat ng ito memory nagmumula? 884 00:56:09,000 --> 00:56:12,360 Iginuhit namin ang ang larawan na ito ng ilang beses, at panatilihin ko maaasahan magpapadala kami bumalik dito, 885 00:56:12,360 --> 00:56:14,920 ngunit dito ay ang representasyon ng memory ng iyong computer 886 00:56:14,920 --> 00:56:17,420 na ng kaunti pa sa may label kaysa sa aming Chalkboard dito ay. 887 00:56:17,420 --> 00:56:21,590 Ang teksto segment sa itaas ay kumakatawan sa kung ano ang may paggalang sa iyong programa? 888 00:56:21,590 --> 00:56:26,090 [Hindi marinig na mag-aaral tugon] >> Paumanhin? Sabihing muli. 889 00:56:26,090 --> 00:56:28,660 [Mag-aaral] Ang aktwal na programa. >> Ang aktwal na programa. 890 00:56:28,660 --> 00:56:32,430 >> Kaya 0s at 1s na iyong inipon pagkatapos pagsusulat ng C code at pagkatapos ay tumatakbo kumalatong 891 00:56:32,430 --> 00:56:35,910 at bumubuo ng mga 0s at 1s dulo hanggang nagsisimula nakatago doon sa memory 892 00:56:35,910 --> 00:56:38,570 dahil kapag ikaw ay i-double click ang isang icon sa iyong Mac o PC 893 00:56:38,570 --> 00:56:43,010 o magpatakbo ng isang command tulad ng Mario sa iyong maagap, ang iyong 0s at 1s mula sa disk 894 00:56:43,010 --> 00:56:45,700 makapag-load sa memory upang ang computer ay maaaring manipulahin ang mga ito 895 00:56:45,700 --> 00:56:47,540 at isakatuparan ang mga ito nang mas mabilis. 896 00:56:47,540 --> 00:56:50,880 Kaya nasimulan data at uninitialized data, hindi namin makipag-usap magkano ang tungkol sa mga, 897 00:56:50,880 --> 00:56:52,420 ngunit ang mga lamang pangkalahatang variable. 898 00:56:52,420 --> 00:56:54,710 Nasimulan ay nangangahulugan ng pangkalahatang variable na iyong ibinigay ng mga halaga sa; 899 00:56:54,710 --> 00:56:59,300 uninitialized ay nangangahulugan ng pangkalahatang variable na hindi mo pa bigyan halaga sa. 900 00:56:59,300 --> 00:57:01,900 Pagkatapos ay may mga kapaligiran variable na makikita ko ganap na iwagayway ang aking kamay sa, 901 00:57:01,900 --> 00:57:04,860 ngunit ang mga ito ay may at tindahan ng mga bagay tulad ng iyong user name 902 00:57:04,860 --> 00:57:08,090 at iba pang mga uri ng mga mas mababang mga detalye antas. 903 00:57:08,090 --> 00:57:12,880 Ngunit ang juiciest piraso ng layout ng iyong memorya ito bagay na tinatawag na stack at ang magbunton. 904 00:57:12,880 --> 00:57:17,470 Ng stack muli, upang maging malinaw, ang memorya na ginagamit tuwing function ay tinatawag na, 905 00:57:17,470 --> 00:57:19,710 tuwing may mga lokal na variable 906 00:57:19,710 --> 00:57:22,120 at tuwing may mga parameter na pumasa sa paligid. 907 00:57:22,120 --> 00:57:24,490 Ang lahat ng na mangyayari sa stack. 908 00:57:24,490 --> 00:57:29,570 Magbunton ay hindi namin uusapang tungkol sa, ngunit isang hula na gumagamit ng magbunton. 909 00:57:31,120 --> 00:57:32,690 Ng ibang tipak ng memory. 910 00:57:32,690 --> 00:57:36,620 Ito ay nangyayari iguguhit dito sa tuktok, ngunit na ang isang arbitrary na nakalarawan convention. 911 00:57:36,620 --> 00:57:41,670 Sino ang tila ginagamit memorya mula sa magbunton para sa linggo? 912 00:57:41,670 --> 00:57:44,830 Technically mo ngunit hindi direkta. >> [Mag-aaral] GetString. 913 00:57:44,830 --> 00:57:47,950 GetString at malloc. Kaya dito ang pangunahing pagkakaiba. 914 00:57:47,950 --> 00:57:51,300 >> Alam mo para sa nakalipas na ilang linggo na kung kailangan mong memorya, ipinapahayag lamang sa isang variable. 915 00:57:51,300 --> 00:57:54,560 Kung kailangan mo ng maraming memorya, ipinapahayag ng isang array sa loob ng iyong function na. 916 00:57:54,560 --> 00:57:59,620 Ngunit ang problema namin na pinananatiling nakaharap kung ipinapahayag mo mga mga variable lokal loob ng function, 917 00:57:59,620 --> 00:58:05,340 sa lalong madaling bilang ang return ng function na, kung ano ang mangyayari sa memory at mga variable? 918 00:58:05,340 --> 00:58:09,620 Basta uri nito ay hindi na sa iyo, i-right? Mayroon lamang mawala uri ng conceptually. 919 00:58:09,620 --> 00:58:13,950 Pa rin pisikal doon, malinaw naman, ngunit ito ay hindi na ang iyong karapatang gamitin. 920 00:58:13,950 --> 00:58:17,160 Ito ay malinaw naman problemang kung gusto mong sumulat ng mga function sa buhay 921 00:58:17,160 --> 00:58:20,440 na aktwal na magtalaga ng memory at huwag bigyan ito pabalik agad. 922 00:58:20,440 --> 00:58:24,180 Kaso sa point: GetString layunin sa buhay ay walang ideya nang maaga 923 00:58:24,180 --> 00:58:26,390 gaano kalaki ng isang string na ako i-type sa keyboard, 924 00:58:26,390 --> 00:58:30,390 ngunit ito nakuha upang magtalaga ng memory upang i-hold ang David o kumusta 925 00:58:30,390 --> 00:58:32,860 o isang buong sanaysay na ang gumagamit ay maaaring nai-type. 926 00:58:32,860 --> 00:58:35,280 Kaya GetString ay gumagamit ng malloc. 927 00:58:35,280 --> 00:58:38,910 Malloc samakatuwid ay dapat na gamit hindi ng stack; 928 00:58:38,910 --> 00:58:40,770 sa halip ito gamit ang bagay na tinatawag na magbunton. 929 00:58:40,770 --> 00:58:44,430 May walang iba tungkol sa memory. Hindi mas mabilis o mas mabagal o anumang bagay tulad na. 930 00:58:44,430 --> 00:58:46,570 Lang pisikal sa isang iba't ibang mga lokasyon. 931 00:58:46,570 --> 00:58:50,120 >> Ngunit ang panuntunan na ang memory na inilalaan sa magbunton 932 00:58:50,120 --> 00:58:56,180 hindi kailanman ay dadalhin ang layo mula sa iyo hanggang sa tawagan ka - maglaan ng hula - libreng. 933 00:58:56,180 --> 00:59:00,510 Sa pamamagitan ng kaibahan, ang memorya anumang hinihiling sa iyo para sa stack sa pamamagitan ng lamang na deklarasyon ng isang array 934 00:59:00,510 --> 00:59:03,320 o deklarasyon ng variable tulad namin na ginagawa para sa linggo, 935 00:59:03,320 --> 00:59:05,640 na sa pamamagitan ng default na nagtatapos sa stack. 936 00:59:05,640 --> 00:59:09,550 At na gumagana mahusay na 90% ng oras, ngunit sa mga okasyon ng rarer 937 00:59:09,550 --> 00:59:12,470 kung saan nais mong magtalaga ng memorya at panatilihin ang mga ito sa paligid, 938 00:59:12,470 --> 00:59:14,730 kailangan mong gumamit ng isang function tulad ng malloc. 939 00:59:14,730 --> 00:59:19,370 O ginamit namin ang isang function tulad ng GetString, na gumagamit ng malloc. 940 00:59:19,370 --> 00:59:23,300 Natin makita kung saan ito ay maaaring masira at pagkatapos ay isang pagsilip sa Binky. 941 00:59:23,300 --> 00:59:25,820 Susubukan naming bumalik iyon sa hinaharap. 942 00:59:25,820 --> 00:59:29,270 Narito ang isang napaka-simpleng programa na sa unang 2 linya ang kung ano? 943 00:59:29,270 --> 00:59:33,460 Sa Ingles, ano ang gagawin ng mga unang 2 linya ng code sa loob ng main? 944 00:59:33,460 --> 00:59:35,600 [Hindi marinig na mag-aaral ng tugon] 945 00:59:35,600 --> 00:59:37,880 Maingat. Hindi ito magbigay sa akin ang address ng x o y. 946 00:59:37,880 --> 00:59:41,840 [Mag-aaral] Binibigyan ang mga payo sa ints. >> Mahusay. Bigyan mo ako ng mga 2 pointer sa integer. 947 00:59:41,840 --> 00:59:45,130 Sa ibang salita, bigyan ako ng 2 chunks ng memorya na panatilihin ko ang pagguhit ngayon, 948 00:59:45,130 --> 00:59:46,950 kahit mabura ko ito ngayon, bilang mga parisukat. 949 00:59:46,950 --> 00:59:50,000 Bigyan mo ako ng mga 2 chunks ng memorya, isa na tinatawag na x, isa na tinatawag na y - 950 00:59:50,000 --> 00:59:54,320 mas maaga Tumawag ako sa kanila s at t - at kung ano ang uri ng na tipak ng memory? 951 00:59:54,320 --> 00:59:57,160 Ito ay upang mag-imbak ng isang address. 952 00:59:57,160 --> 00:59:59,110 Ng uri int *. 953 00:59:59,110 --> 01:00:01,630 >> Kaya ang address ng isang int kalaunan nakatira sa x, 954 01:00:01,630 --> 01:00:03,860 ang address ng isang int kalaunan nakatira sa y, 955 01:00:03,860 --> 01:00:08,460 ngunit simula, kung ano ang sa loob ng x at y? Sino ang nakakaalam? Basura halaga. 956 01:00:08,460 --> 01:00:10,180 Ito ay walang gawin sa payo. 957 01:00:10,180 --> 01:00:12,720 Kung hindi pa namin na ilagay ang isang bagay doon, na alam kung ano ang aktwal na doon? 958 01:00:12,720 --> 01:00:18,950 Ngayon, x. Ano ang mangyayari dito? Ito ay legit ngayon dahil x ay isang pointer. Isang int *. 959 01:00:18,950 --> 01:00:21,870 Kaya na nangangahulugan na maaari kong ilagay sa x address ng ilang mga tipak ng memory. 960 01:00:21,870 --> 01:00:25,120 Ano ang malloc bumalik? Perpekto, ito ay nagbabalik ng mga address, 961 01:00:25,120 --> 01:00:28,510 ang address ng unang byte sa isang buong tipak ng memorya. 962 01:00:28,510 --> 01:00:31,140 Gaano karaming mga byte ito tila paglaan ng, halimbawa, sa appliance? 963 01:00:31,140 --> 01:00:33,510 Ano ang sukat ng isang int? 4. 964 01:00:33,510 --> 01:00:36,600 Kung sa tingin mo sa linggo 1, hindi sobrang mahalaga na laging tandaan na, 965 01:00:36,600 --> 01:00:38,870 ngunit sa kasong ito ito ay kapaki-pakinabang upang malaman, 4 bytes. 966 01:00:38,870 --> 01:00:41,770 Kaya ito ay paglaan sa magbunton 4 bytes 967 01:00:41,770 --> 01:00:46,110 at bumabalik ang address ng unang mang sa akin. 968 01:00:46,110 --> 01:00:47,700 Ngayon, kung ano ang x ginagawa? 969 01:00:47,700 --> 01:00:52,200 A * x = 42 ay ginagawa kung ano ang? 970 01:00:52,200 --> 01:00:57,150 Kung sa puntong ito sa kuwento mayroon kaming x, na ganito ang hitsura na may ilang halaga ng basura, 971 01:00:57,150 --> 01:01:04,120 ito ay ngayon y na may ilang mga halaga ng basura, ngayon sa linya 3 ko na inilalaan ng 4 bytes. 972 01:01:04,120 --> 01:01:06,950 Ang larawan na ito ay mahalagang ganito ang hitsura. 973 01:01:06,950 --> 01:01:12,010 O higit na partikular, kung ito ay arbitrary address 123, ito ay kung ano ang aming kuwento sa ngayon mukhang. 974 01:01:12,010 --> 01:01:23,940 * X = 42 ngayon ay nangangahulugan kung ano? Iyon ay nangangahulugang ang pumunta sa 123 address at ilagay ang numero 42 doon. 975 01:01:23,940 --> 01:01:26,220 Hindi ko kailangan upang gumuhit ng mga linya na ito dahil hindi namin ginagawa ng mga string. 976 01:01:26,220 --> 01:01:29,480 >> Dapat lamang ko nakasulat ito tulad nito, at para lamang sa kapakanan ng pagpapakita, 977 01:01:29,480 --> 01:01:33,240 42 bilang isang int uri ng tumatagal ng maraming espasyo, 4 bytes. 978 01:01:33,240 --> 01:01:35,960 Kaya na kung ano ang nangyari doon, ngunit may problema ngayon. 979 01:01:35,960 --> 01:01:40,580 * Y = 13. Ano ang pagpunta sa mangyayari dito? 980 01:01:40,580 --> 01:01:46,470 Ang problema ay * y sa aming pinasimple mundo ay nangangahulugan na pumunta sa address sa y. 981 01:01:46,470 --> 01:01:48,590 Ano sa y? Ang ilang halaga ng basura. 982 01:01:48,590 --> 01:01:53,150 Kaya sabihin ipinapalagay na ang na ang halaga ng basura ay 5551212, isang bagay na mabaliw tulad na. 983 01:01:53,150 --> 01:01:56,750 * Y nangangahulugan pumunta upang matugunan ng 5,551,212. 984 01:01:56,750 --> 01:02:00,450 Na bang sa paglipas dito. Ito ay hindi umiiral, halimbawa. 985 01:02:00,450 --> 01:02:05,310 Kaya * y ay nakakakuha ng 13 paraan ay sinusubukan ko upang gumuhit ng 13 dito. Ito ay hindi umiiral. 986 01:02:05,310 --> 01:02:08,790 Nalampasan ko na ang segment ng pisara. Ano ang makukuha ko? 987 01:02:08,790 --> 01:02:14,930 Na misteriyoso mensahe ng segmentation fault dahil ako sinusubukan upang ilagay sa memory 988 01:02:14,930 --> 01:02:19,470 ng halaga tulad ng 13 sa isang lugar na hindi umiiral. 989 01:02:19,470 --> 01:02:23,900 Ang natitirang bahagi ng programa ay maaaring gumana okay, ngunit up hanggang sa puntong iyon hindi. 990 01:02:23,900 --> 01:02:25,350 Kaya sabihin subukan upang sabihin sa kuwentong ito. 991 01:02:25,350 --> 01:02:27,830 Susubukan naming bumalik sa sandaling kami uusapang tungkol hex. 992 01:02:27,830 --> 01:02:30,290 Natin bumalik na ito at pagtibayin na ito bagay na tinatawag Binky, 993 01:02:30,290 --> 01:02:33,710 kung aling manariwa sa diwa ay isang propesor ng Stanford sitting sa bahay sa paglalaro ng may claymation, 994 01:02:33,710 --> 01:02:36,380 upang sabihin ang kuwento ng eksakto na parehong programa. 995 01:02:36,380 --> 01:02:40,580 Lang tungkol sa 3 minuto ang haba. Narito mayroon namin Binky. 996 01:02:40,580 --> 01:02:45,030 [Lalaki speaker sa video] Hey Binky, gumising. Oras para sa pointer masaya. 997 01:02:45,030 --> 01:02:50,080 [Binky] Ano iyan? Alamin ang tungkol sa mga payo? Oh, mabait! 998 01:02:50,080 --> 01:02:53,700 [Lalaki speaker] Well, upang makapagsimula, hulaan ko kami ay pagpunta sa kailangan ng ilang mga payo. 999 01:02:53,700 --> 01:02:57,890 >> [Binky] Okay. Code na ito allocates 2 pointer na maaaring ituro sa integer. 1000 01:02:57,890 --> 01:03:02,220 [Lalaki speaker] Okay. Well, nakikita ko sa 2 pointer, ngunit hindi sila mukhang na tumuturo sa anumang. 1001 01:03:02,220 --> 01:03:05,550 [Binky] Tama iyon. Una, ang mga payo ay hindi tumuturo sa anumang bagay. 1002 01:03:05,550 --> 01:03:09,270 Ang mga bagay na ituro nilang tinatawag pointees, at pagse-set up ang mga ito ay isang hiwalay na hakbang. 1003 01:03:09,270 --> 01:03:12,330 [Lalaki speaker] Oh, kanan, kanan. Ko alam na. Mga Ang mga pointees ay hiwalay na. 1004 01:03:12,330 --> 01:03:15,630 ER, kaya kung paano mo magtalaga ng isang pointee? 1005 01:03:15,630 --> 01:03:21,510 [Binky] Okay. Allocates ng bagong integer pointee ang code na ito, at ang bahagi na ito ay nagtatakda ng x upang ituro dito. 1006 01:03:21,510 --> 01:03:23,500 [Lalaki speaker] Hey, na mukhang mas mahusay. 1007 01:03:23,500 --> 01:03:26,030 Kaya gawin itong gawin ang isang bagay. >> [Binky] Okay. 1008 01:03:26,030 --> 01:03:30,300 Idedetalye ko dereference pointer x-imbak ang bilang 42 sa nito pointee. 1009 01:03:30,300 --> 01:03:34,410 Para sa nanlilinlang Kailangan ko ng aking magic wand ng dereferencing. 1010 01:03:34,410 --> 01:03:38,610 [Lalaki speaker] iyong magic wand ng dereferencing? Mabuti iyan. 1011 01:03:38,610 --> 01:03:44,230 [Binky] Ito ay kung ano ang code kamukha. Kukunin ko na lang-set up ang numero at ... [Popping sound] 1012 01:03:44,230 --> 01:03:46,100 [Lalaki speaker] Hey tumingin, may napupunta ito. 1013 01:03:46,100 --> 01:03:50,990 Kaya ang paggawa ng isang dereference sa x sumusunod ang arrow upang ma-access ang pointee, 1014 01:03:50,990 --> 01:03:53,230 sa kasong ito upang mag-imbak 42 sa doon. 1015 01:03:53,230 --> 01:03:57,630 Uy, subukang gamitin ito upang mag-imbak ang numero 13 sa pamamagitan ng iba pang mga pointer, y. 1016 01:03:57,630 --> 01:04:03,250 [Binky] Okay. Kukunin ko na lang pumunta sa paglipas dito upang y at makuha ang bilang 13-set up 1017 01:04:03,250 --> 01:04:08,360 at pagkatapos ay gawin ang wand ng dereferencing at ... [Haging] Whoa! 1018 01:04:08,360 --> 01:04:10,980 [Lalaki speaker] Oh hey, na ay hindi gumagana. 1019 01:04:10,980 --> 01:04:14,870 >> Sabihin nating, Binky, palagay ko ay hindi dereferencing y ay isang magandang ideya 1020 01:04:14,870 --> 01:04:17,880 dahil sa pagse-set up sa pointee ay isang hiwalay na hakbang 1021 01:04:17,880 --> 01:04:19,850 at palagay ko ay hindi namin ginawa ito. 1022 01:04:19,850 --> 01:04:21,770 [Binky] Hmm, magandang punto. 1023 01:04:21,770 --> 01:04:26,640 [Lalaki speaker] Oo. Inilalaan namin ang pointer y ngunit hindi namin itakda ito upang tumuro sa isang pointee. 1024 01:04:26,640 --> 01:04:28,780 [Binky] Hmm, napaka mapagmatyag. 1025 01:04:28,780 --> 01:04:30,690 [Lalaki speaker] Hey, ang hinahanap magandang doon, Binky. 1026 01:04:30,690 --> 01:04:34,160 Maaari mong ayusin ang mga ito nang sa gayon na y puntos sa parehong pointee bilang x? >> [Binky] Oo naman. 1027 01:04:34,160 --> 01:04:37,100 Makikita ko bang gamitin ang aking magic wand ng pointer pagtatalaga. 1028 01:04:37,100 --> 01:04:39,070 [Lalaki] sa speaker Ay na pagpunta sa isang problema tulad ng bago? 1029 01:04:39,070 --> 01:04:40,840 [Binky] Hindi, ito ay hindi hawakan ang mga pointees. 1030 01:04:40,840 --> 01:04:44,780 Nagbabago lamang ito ng isang pointer upang tumuro sa ang parehong bagay bilang isa pang. [Popping sound] 1031 01:04:44,780 --> 01:04:48,570 [Lalaki speaker] Oh, nakikita ko. Ngayon y mga punto sa parehong lugar bilang x. 1032 01:04:48,570 --> 01:04:51,140 Kaya maghintay. Ngayon y ay naayos. Ay ng pointee. 1033 01:04:51,140 --> 01:04:54,520 Gayon ay maaari mong subukan ang wand ng dereferencing muli upang ipadala ang 13 sa paglipas. 1034 01:04:54,520 --> 01:04:58,130 [Binky] Uh, okay. Dito napupunta. [Popping sound] 1035 01:04:58,130 --> 01:05:01,250 [Lalaki speaker] Hey, tingnan na. Ngayon dereferencing ng mga gawa sa y. 1036 01:05:01,250 --> 01:05:05,200 At dahil ang mga payo ay nagbabahagi na ang isa pointee, sila parehong makita ang 13. 1037 01:05:05,200 --> 01:05:06,910 [Binky] Oo, pagbabahagi. Anuman. 1038 01:05:06,910 --> 01:05:08,880 >> Kaya ay namin upang lumipat ng mga lugar na ngayon? 1039 01:05:08,880 --> 01:05:11,420 [Lalaki speaker] Oh hitsura, hindi namin ng oras. >> [Binky] Ngunit - 1040 01:05:11,420 --> 01:05:13,880 [Lalaki speaker] Tandaan lamang ang 3 pointer panuntunan. 1041 01:05:13,880 --> 01:05:18,630 Numero 1, ang pangunahing istraktura ay na mayroon kang isang pointer at mga punto sa isang pointee. 1042 01:05:18,630 --> 01:05:23,120 Ngunit ang pointer at pointee ay hiwalay, at ang karaniwang mga error ay mag-set up ng isang pointer 1043 01:05:23,120 --> 01:05:25,680 ngunit sa kalimutang upang bigyan ito ng isang pointee. 1044 01:05:25,680 --> 01:05:29,580 Numero 2, pointer dereferencing nagsisimula sa pointer at sumusunod ang arrow nito sa paglipas ng 1045 01:05:29,580 --> 01:05:31,060 upang ma-access ang ang pointee nito. 1046 01:05:31,060 --> 01:05:34,340 Bilang namin ang lahat ng alam, ito ay gagana lamang kung ang isang pointee, 1047 01:05:34,340 --> 01:05:36,460 kung saan nakukuha ng uri ng pabalik upang mamuno ang numero 1. 1048 01:05:36,460 --> 01:05:39,870 Numero 3, pagtatalaga ng pointer ay magtatagal ng isang pointer at nagbabago ito 1049 01:05:39,870 --> 01:05:42,390 upang ituro sa parehong pointee ng isa pang pointer. 1050 01:05:42,390 --> 01:05:45,890 Kaya matapos ang pagtatalaga, ang 2 pointer ay ituro sa parehong pointee. 1051 01:05:45,890 --> 01:05:47,800 Minsan na tinatawag na pagbabahagi. 1052 01:05:47,800 --> 01:05:50,910 >> At na ang lahat ng may ito talagang. Bye-bye ngayon. 1053 01:05:50,910 --> 01:05:55,840 Ito ay Binky. Ito ay CS50. Gagamitin namin ang susunod na linggo. [Palakpakan] 1054 01:05:55,840 --> 01:05:59,000 >> [CS50.TV]