1 00:00:00,000 --> 00:00:01,110 >> [CHWARAE CERDDORIAETH] 2 00:00:01,110 --> 00:00:10,567 3 00:00:10,567 --> 00:00:11,650 DAVID J. Malan: pob hawl. 4 00:00:11,650 --> 00:00:15,610 Mae hyn yn CS50, ac mae hyn yw diwedd Wythnos Pedwar. 5 00:00:15,610 --> 00:00:19,420 Ac un o'r pynciau heddiw yw hynny o fforensig digidol, 6 00:00:19,420 --> 00:00:20,989 y grefft o adfer gwybodaeth. 7 00:00:20,989 --> 00:00:22,780 Ac yn wir, er bod ydych chi yn y canol 8 00:00:22,780 --> 00:00:25,070 ar hyn o bryd Heddwch yn Three a Breakout, yr wythnos nesaf, 9 00:00:25,070 --> 00:00:27,880 Bydd y ffocws ar union y parth hwn. 10 00:00:27,880 --> 00:00:30,686 >> Felly, un o'r swyddi coolest mi erioed Roedd yn ôl yn yr ysgol i raddedigion, 11 00:00:30,686 --> 00:00:33,560 pan oeddwn yn gweithio ar gyfer yr leol Middlesex Sir Dosbarth Twrnai 12 00:00:33,560 --> 00:00:34,950 swyddfa, yn gwneud fforensig yn gweithio. 13 00:00:34,950 --> 00:00:37,450 Felly y bôn, mae'r Massachusetts Heddlu y Wladwriaeth, ar adegau, 14 00:00:37,450 --> 00:00:40,100 wrth weithio ar achosion byddai dod mewn pethau fel 'n anawdd drives 15 00:00:40,100 --> 00:00:42,185 a disgiau hyblyg a cardiau cof ac yn y blaen. 16 00:00:42,185 --> 00:00:44,060 A byddent yn eu llaw i mi a fy mentor, 17 00:00:44,060 --> 00:00:48,070 ac mae ein nod oedd dod o hyd i dystiolaeth, os oedd unrhyw, ar y cyfryngau hyn. 18 00:00:48,070 --> 00:00:50,700 Cipolwg Nawr, efallai eich bod wedi gweld o y byd hwn o fforensig 19 00:00:50,700 --> 00:00:53,000 yn y cyfryngau, teledu a ffilmiau. 20 00:00:53,000 --> 00:00:55,730 Ond mae'r swydd oedd gen, a debygol iawn y byd, 21 00:00:55,730 --> 00:00:57,550 Nid yw union fel y byddech yn ei weld. 22 00:00:57,550 --> 00:01:00,794 Gadewch i ni edrych ar yr hyn mae'n debyg eich bod wedi ei weld. 23 00:01:00,794 --> 00:01:01,460 [VIDEO Playback] 24 00:01:01,460 --> 00:01:02,930 -OK. 25 00:01:02,930 --> 00:01:05,380 Yn awr, gadewch i ni gael edrych yn dda ar chi. 26 00:01:05,380 --> 00:01:06,850 >> [CHWARAE CERDDORIAETH] 27 00:01:06,850 --> 00:01:12,260 28 00:01:12,260 --> 00:01:12,932 >> -Hold Iddo. 29 00:01:12,932 --> 00:01:13,657 Rhedeg y cefn. 30 00:01:13,657 --> 00:01:14,733 >> -Wait Funud. 31 00:01:14,733 --> 00:01:15,233 Ewch i'r dde. 32 00:01:15,233 --> 00:01:16,371 33 00:01:16,371 --> 00:01:16,870 -Mae. 34 00:01:16,870 --> 00:01:17,369 Rhewi hynny. 35 00:01:17,369 --> 00:01:17,930 -Full-Sgrîn. 36 00:01:17,930 --> 00:01:18,376 >> -OK. 37 00:01:18,376 --> 00:01:18,875 Rhewi hynny. 38 00:01:18,875 --> 00:01:20,160 -Tighten Fyny ar hynny, a wnewch chi? 39 00:01:20,160 --> 00:01:22,126 >> -Vector Mewn ar hynny guy gan yr olwyn gefn. 40 00:01:22,126 --> 00:01:24,435 >> -Zoom Mewn dde yma ar y fan a'r lle hwn. 41 00:01:24,435 --> 00:01:28,580 >> -With Yr offer cywir, mae'r Gellir ddelwedd gael ei chwyddo a hogi. 42 00:01:28,580 --> 00:01:29,330 >> -Beth Yw hwnna? 43 00:01:29,330 --> 00:01:30,780 >> -Mae'n 'An rhaglen wella. 44 00:01:30,780 --> 00:01:32,170 >> -Can Ydych yn glir bod unrhyw? 45 00:01:32,170 --> 00:01:33,070 >> Nid -Rwy'n ddim yn gwybod. 46 00:01:33,070 --> 00:01:34,150 Gadewch i ni wella. 47 00:01:34,150 --> 00:01:35,440 >> -Enhance Adran A6. 48 00:01:35,440 --> 00:01:36,570 49 00:01:36,570 --> 00:01:38,562 Yr wyf yn gwella y manylion, ac-- 50 00:01:38,562 --> 00:01:40,020 -Rwy'n Credu bod digon i wella. 51 00:01:40,020 --> 00:01:40,976 Rhyddhau i fy sgrin. 52 00:01:40,976 --> 00:01:42,559 >> Gwella -I adlewyrchiad yn ei llygaid. 53 00:01:42,559 --> 00:01:44,322 -Let Ei redeg hyn drwy gwella fideo. 54 00:01:44,322 --> 00:01:45,210 >> -Edgar, Gallwch wella hyn? 55 00:01:45,210 --> 00:01:45,710 >> -Hang Ar. 56 00:01:45,710 --> 00:01:47,570 57 00:01:47,570 --> 00:01:49,458 >> -I've Bod yn gweithio ar fyfyrio hwn. 58 00:01:49,458 --> 00:01:50,402 >> Adlewyrchiad rhywun -Mae yn. 59 00:01:50,402 --> 00:01:50,902 >> Reflectiar. 60 00:01:50,902 --> 00:01:52,870 -Mae Yn adlewyrchiad o wyneb y dyn. 61 00:01:52,870 --> 00:01:53,694 >> Adlewyrchiad -Y! 62 00:01:53,694 --> 00:01:54,610 -Mae Yn adlewyrchiad. 63 00:01:54,610 --> 00:01:55,880 -Zoom I mewn ar y drych. 64 00:01:55,880 --> 00:01:57,860 Gallwch weld adlewyrchiad. 65 00:01:57,860 --> 00:01:59,630 >> -Can Byddwch gwella delwedd o fan hyn? 66 00:01:59,630 --> 00:02:00,377 67 00:02:00,377 --> 00:02:01,210 -Can Chi ei wella? 68 00:02:01,210 --> 00:02:02,190 -Can Chi ei wella? 69 00:02:02,190 --> 00:02:03,066 -Can Ni'n gwella hyn? 70 00:02:03,066 --> 00:02:03,898 -Can Chi ei wella? 71 00:02:03,898 --> 00:02:04,740 -Hold Ar ail. 72 00:02:04,740 --> 00:02:05,281 'N annhymerus' yn gwella. 73 00:02:05,281 --> 00:02:06,470 -Zoom I mewn ar y drws. 74 00:02:06,470 --> 00:02:06,970 -Times 10. 75 00:02:06,970 --> 00:02:08,009 -Zoom. 76 00:02:08,009 --> 00:02:08,509 -Move Mewn. 77 00:02:08,509 --> 00:02:09,340 -Mwy. 78 00:02:09,340 --> 00:02:10,094 -Wait, Rhoi'r gorau. 79 00:02:10,094 --> 00:02:10,750 -Stop. 80 00:02:10,750 --> 00:02:11,250 -Pause Iddo. 81 00:02:11,250 --> 00:02:13,542 -Rotate 75 gradd ni o amgylch y fertigol, os gwelwch yn dda. 82 00:02:13,542 --> 00:02:14,750 83 00:02:14,750 --> 00:02:16,127 >> -Stop. 84 00:02:16,127 --> 00:02:19,330 Ewch yn ôl at y rhan am y drws unwaith eto. 85 00:02:19,330 --> 00:02:21,420 >> -Got Enhancer delwedd bitmap a all? 86 00:02:21,420 --> 00:02:24,420 >> -Maybe Gallwn ddefnyddio'r Pradeep Singh dull i weld i mewn i'r ffenestri. 87 00:02:24,420 --> 00:02:25,902 >> -Y Meddalwedd yn gyflwr y celf. 88 00:02:25,902 --> 00:02:26,866 >> -Y Eigenvalue i ffwrdd. 89 00:02:26,866 --> 00:02:29,758 >> -With Yr hawl cyfuniad o algorithms-- 90 00:02:29,758 --> 00:02:32,168 >> -He Yn cymryd golau algorithmau i'r lefel nesaf, 91 00:02:32,168 --> 00:02:34,110 a gallaf eu defnyddio i gwella'r y llun. 92 00:02:34,110 --> 00:02:36,840 >> -Lock Ar ac ehangu'r z-echel. 93 00:02:36,840 --> 00:02:37,351 >> -Enhance. 94 00:02:37,351 --> 00:02:37,850 Gwella. 95 00:02:37,850 --> 00:02:38,720 -Enhance. 96 00:02:38,720 --> 00:02:40,070 -Freeze A gwella. 97 00:02:40,070 --> 00:02:43,420 [DIWEDD Playback VIDEO] 98 00:02:43,420 --> 00:02:45,830 DAVID J. Malan: Felly dyna'r pob gair, ond nid oeddent yn 99 00:02:45,830 --> 00:02:47,870 ddefnyddir mewn brawddegau yn gywir. 100 00:02:47,870 --> 00:02:52,370 Ac yn wir yn y dyfodol, unrhyw bryd, os gwelwch yn dda, byddwch yn clywed rhywun yn dweud y gair, 101 00:02:52,370 --> 00:02:54,250 "Gwella," chwerthin dim ond ychydig bach. 102 00:02:54,250 --> 00:02:57,190 Oherwydd pan fyddwch yn ceisio gwella, er enghraifft, mae hyn yn beth sy'n digwydd. 103 00:02:57,190 --> 00:02:58,580 >> Felly dyma llun hyfryd. 104 00:02:58,580 --> 00:02:59,720 Mae hyn yn Daven CS50 ei hun. 105 00:02:59,720 --> 00:03:03,740 Ac mae'n debyg ein bod yn awyddus i canolbwyntio i mewn ar y twinkle yn ei lygad, 106 00:03:03,740 --> 00:03:05,870 neu adlewyrchiad y dyn drwg a oedd yn amlwg 107 00:03:05,870 --> 00:03:07,820 eu dal gan y camera diogelwch. 108 00:03:07,820 --> 00:03:10,330 Mae hyn yn beth sy'n digwydd pan chi chwyddo i mewn ar ddelwedd sy'n 109 00:03:10,330 --> 00:03:14,060 Mae dim ond nifer cyfyngedig o ddarnau sy'n gysylltiedig ag ef. 110 00:03:14,060 --> 00:03:15,420 >> Dyna'r hyn y byddech yn ei gael. 111 00:03:15,420 --> 00:03:19,190 Ac yn wir, yn y llygad Daven yn yw ond pedwar, efallai chwe picsel 112 00:03:19,190 --> 00:03:22,110 sy'n cyfansoddi yn union beth Roedd glimmering yno. 113 00:03:22,110 --> 00:03:25,890 Felly bydd Problem Set Pedwar yn y pen draw yn cael chi edrych ar y byd hwn, yn enwedig 114 00:03:25,890 --> 00:03:28,090 yn ôl natur yr rywbeth rydym yn galw ffeil i / o, lle 115 00:03:28,090 --> 00:03:31,000 i / o yn unig yw ffordd ffansi o ddweud mewnbwn ac allbwn. 116 00:03:31,000 --> 00:03:34,280 >> Hyd yn hyd yn hyn, pob un o'r rhyngweithiadau rydym wedi cael gyda chyfrifiadur 117 00:03:34,280 --> 00:03:36,770 wedi bod i raddau helaeth gyda'ch bysellfwrdd a sgrin, 118 00:03:36,770 --> 00:03:40,770 ond nid cymaint ag y ddisg galed, neu arbed o ffeiliau y tu hwnt i'r rhai yr ydych 119 00:03:40,770 --> 00:03:41,620 ysgrifennu eich hun. 120 00:03:41,620 --> 00:03:44,570 Mae eich rhaglenni hyd yn hyn wedi Nid yw bod yn creu, ac yn arbed, 121 00:03:44,570 --> 00:03:46,270 ac yn diweddaru eu ffeiliau eu hunain. 122 00:03:46,270 --> 00:03:47,150 >> Wel, beth yw ffeil? 123 00:03:47,150 --> 00:03:48,105 Wel, rhywbeth fel JPEG. 124 00:03:48,105 --> 00:03:50,520 Mae hwn yn ddelwedd rydych efallai wedi neu llwytho i Facebook, 125 00:03:50,520 --> 00:03:51,690 neu'n gweld yn unrhyw le ar y we. 126 00:03:51,690 --> 00:03:54,460 Yn wir, llun yr ydym newydd ei Gwelodd o Daven yn JPEG. 127 00:03:54,460 --> 00:03:57,570 A beth sy'n ddiddorol am ffeiliau fel JPEG 128 00:03:57,570 --> 00:04:02,170 yw y gellir eu hadnabod, nodweddiadol, gan batrymau penodol o ddarnau. 129 00:04:02,170 --> 00:04:05,200 >> Mewn geiriau eraill, yr hyn yw hi y gwahaniaethu JPEG o GIF 130 00:04:05,200 --> 00:04:08,109 o PING o Word dogfen o ffeil Excel? 131 00:04:08,109 --> 00:04:09,900 Wel, 'i' jyst yn wahanol patrymau o ddarnau. 132 00:04:09,900 --> 00:04:12,820 A phatrymau gwahanol hynny yn fel arfer ar ddechrau ffeiliau hynny. 133 00:04:12,820 --> 00:04:18,200 >> Felly, pan fydd eich cyfrifiadur yn agor Word doc, neu pan fydd cyfrifiadur yn agor JPEG, 134 00:04:18,200 --> 00:04:20,940 mae'n edrych fel arfer yn y nifer o ddarnau cyntaf yn y ffeil. 135 00:04:20,940 --> 00:04:24,059 Ac os ei fod yn cydnabod yn batrwm, y mae'n ei ddweud, oh, mae hyn yn ddelwedd. 136 00:04:24,059 --> 00:04:25,850 Gadewch i mi arddangos i y defnyddiwr fel graffig. 137 00:04:25,850 --> 00:04:27,870 Neu, oh, mae hyn yn edrych yn debyg i doc Word. 138 00:04:27,870 --> 00:04:30,480 Gadewch i mi ddangos i'r defnyddiwr fel traethawd. 139 00:04:30,480 --> 00:04:33,020 >> Felly, er enghraifft, JPEG, mae'n troi allan, yn cael eu 140 00:04:33,020 --> 00:04:35,460 eithaf soffistigedig o dan y cwfl. 141 00:04:35,460 --> 00:04:40,140 Ond mae'r tri bytes cyntaf yn y rhan fwyaf mhob JPEG yn dechrau gyda y tri rhif. 142 00:04:40,140 --> 00:04:44,680 Felly beit sero, un, a dau ohonynt, yn y rhan fwyaf o bob JPEG, 255, yna bydd y nifer 143 00:04:44,680 --> 00:04:46,675 216, yna bydd y rhif 255. 144 00:04:46,675 --> 00:04:48,990 >> A beth byddwch yn gallu i ddechrau yn ei wneud yr wythnos nesaf 145 00:04:48,990 --> 00:04:52,920 mewn gwirionedd yn procio o dan y cwfl o ffeiliau fel JPEG 146 00:04:52,920 --> 00:04:57,210 ac fel ffeiliau didfap, a gweld yr hyn bob amser wedi bod yno am gymaint o amser 147 00:04:57,210 --> 00:04:58,650 fel yr ydych wedi bod yn defnyddio cyfrifiadur. 148 00:04:58,650 --> 00:05:01,860 >> Ond yr hyn sy'n nad oes fel arfer ysgrifennu fel rhifau degol fel hyn. 149 00:05:01,860 --> 00:05:04,620 Nid yw gwyddonwyr cyfrifiadurol yn ei wneud yn tueddu i siarad yn y degol. 150 00:05:04,620 --> 00:05:06,139 Nid ydynt yn wir yn siarad yn deuaidd. 151 00:05:06,139 --> 00:05:07,930 Yn nodweddiadol, pan fyddwn am i fynegi rhifau, 152 00:05:07,930 --> 00:05:10,710 yr ydym mewn gwirionedd yn defnyddio hecsadegol, y gallwch cofio 153 00:05:10,710 --> 00:05:13,027 o, dyweder, Datrys Set Un, a heriodd 154 00:05:13,027 --> 00:05:14,610 chi feddwl am system wahanol. 155 00:05:14,610 --> 00:05:17,170 >> Yr ydym, wrth gwrs, yn gyfarwydd gyda degol, sero drwy naw. 156 00:05:17,170 --> 00:05:18,215 Buom yn siarad am deuaidd. 157 00:05:18,215 --> 00:05:20,710 Ac nid ydym ddim yn cael i ddefnyddio bod llawer yma 158 00:05:20,710 --> 00:05:22,470 ar y tu allan, oherwydd bydd cyfrifiaduron defnyddio hynny. 159 00:05:22,470 --> 00:05:24,900 Ond bydd rhaglenwyr iawn Yn aml, ond nid bob amser, 160 00:05:24,900 --> 00:05:29,360 defnyddio hecsadegol, a dim ond yn golygu mae gennych 16 llythyr yn eich wyddor, 161 00:05:29,360 --> 00:05:31,330 yn hytrach na dau neu 10. 162 00:05:31,330 --> 00:05:34,530 >> Felly, sut ydych chi'n cyfrif at uwch na naw yn hecsadegol? 163 00:05:34,530 --> 00:05:41,120 Rydych yn mynd 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, dim ond drwy confensiwn. 164 00:05:41,120 --> 00:05:43,540 Ond yr hyn sy'n allweddol yw bod pob o'r rhain yn symbol sengl. 165 00:05:43,540 --> 00:05:44,340 Nid oes unrhyw 10. 166 00:05:44,340 --> 00:05:48,400 Nid oes 11, fel y cyfryw, oherwydd bod gan bob o'ch digid, yn union fel yn y degol 167 00:05:48,400 --> 00:05:51,940 ac yn union fel yn deuaidd, dylai dim ond fod yn gymeriad sengl, yn ôl confensiwn. 168 00:05:51,940 --> 00:05:55,280 >> Fel bod yna yw'r wyddor sydd gennym ar gael i ni ar gyfer hecsadegol. 169 00:05:55,280 --> 00:05:58,600 Felly beth mae JPEG edrych fel os ydych yn oedd i ysgrifennu allan y rhai tri cyntaf 170 00:05:58,600 --> 00:06:01,980 Nid bytes fel degol, ond, er enghraifft, fel hecsadegol? 171 00:06:01,980 --> 00:06:03,640 A pham mae hecs hyd yn oed bob un sy'n ddefnyddiol? 172 00:06:03,640 --> 00:06:05,290 >> Wel, edrych yn sydyn ar enghraifft. 173 00:06:05,290 --> 00:06:09,030 Felly, os wyf yn ysgrifennu darnau sy'n cynrychioli numbers-- degol hyn 174 00:06:09,030 --> 00:06:12,450 gallai hyn fod ychydig yn rhydlyd bellach o ychydig wythnosau yn ôl, 175 00:06:12,450 --> 00:06:14,820 ond yr un ar y chwith a'r un cywir yn eithaf hawdd. 176 00:06:14,820 --> 00:06:17,990 255 oedd y nifer mwyaf yr ydym Gallai gynrychioli gydag wyth darnau. 177 00:06:17,990 --> 00:06:18,820 Yr oedd yr holl rai. 178 00:06:18,820 --> 00:06:21,320 Felly, yr unig un sy'n ychydig ddiddorol yw'r un canol. 179 00:06:21,320 --> 00:06:24,700 Ac os ydych yn fath o yn ei wneud allan y mathemateg, byddwch yn diddwytho hynny, yn wir, 180 00:06:24,700 --> 00:06:27,949 y patrwm hwnnw o un a seroau yn cynrychioli 216. 181 00:06:27,949 --> 00:06:30,240 Felly gadewch i ni dim ond nodi am nawr bod y rhain yn gywir. 182 00:06:30,240 --> 00:06:31,730 Ond pam mae hyn yn ddiddorol? 183 00:06:31,730 --> 00:06:33,970 >> Wel, mae beit, wrth gwrs, yw wyth did. 184 00:06:33,970 --> 00:06:38,980 Ac mae'n troi allan, os ydych yn meddwl o beit fel dau darnau o bedwar ddarnau, 185 00:06:38,980 --> 00:06:39,500 fel hyn. 186 00:06:39,500 --> 00:06:41,000 Gadewch imi ychwanegu rhywfaint o le. 187 00:06:41,000 --> 00:06:42,550 Felly, cyn, ar ôl. 188 00:06:42,550 --> 00:06:46,520 Rwyf newydd ychwanegu ychydig o le gwyn er mwyn delweddu yma. 189 00:06:46,520 --> 00:06:51,840 Sut y gallem nawr yn cynrychioli mewn, dyweder, hecsadegol pob cwad o ddarnau, 190 00:06:51,840 --> 00:06:52,880 pob set o bedwar ddarnau? 191 00:06:52,880 --> 00:06:56,420 >> Felly, er enghraifft, ar y chwith Erbyn hyn, mae gennym 1,111 yn deuaidd. 192 00:06:56,420 --> 00:07:00,420 Beth yw y rhif hwnnw yn degol, os ydych yn gwneud allan y cwestiwn? 193 00:07:00,420 --> 00:07:03,780 Mae gennych y lle rhai, y lle fesul dau, y lle pedwar, a'r lle wyth. 194 00:07:03,780 --> 00:07:04,341 >> CYNULLEIDFA: 15. 195 00:07:04,341 --> 00:07:05,340 DAVID J. Malan: Mae'n 15. 196 00:07:05,340 --> 00:07:08,340 Felly, os ydym yn ei wneud wyth a phedwar a dau ac un, rydym yn cael 15. 197 00:07:08,340 --> 00:07:11,790 Felly gallwn ysgrifennu i lawr 15 isod 1111, ond holl bwynt yma 198 00:07:11,790 --> 00:07:13,190 yn hecsadegol, nid degol. 199 00:07:13,190 --> 00:07:17,310 Felly, yn lle ysgrifennu i lawr 15, 1-5, Rydw i'n mynd i ysgrifennu hynny mewn hecs, 200 00:07:17,310 --> 00:07:22,311 ac os ydych yn meddwl yn ôl, os oes gennych sero drwy f, yr hyn sy'n 15 mynd i fod? 201 00:07:22,311 --> 00:07:22,810 CYNULLEIDFA: f. 202 00:07:22,810 --> 00:07:24,434 DAVID J. Malan: Felly, mae'n troi allan ei fod yn f. 203 00:07:24,434 --> 00:07:29,140 A gallwch weithio hynny allan drwy ddweud, yn dda, os yw yn 10, yna OK, f yw 15. 204 00:07:29,140 --> 00:07:33,250 Felly yn wir, gallem ailysgrifennu hyn yn un set o rifau fel f f. 205 00:07:33,250 --> 00:07:35,750 Ac yna, os ydym yn gwneud ychydig o mathemateg, byddwn yn dewch i'r casgliad fod hynny'n d. 206 00:07:35,750 --> 00:07:38,650 Wyth yn eithaf hawdd, oherwydd ein cael un yn y lle wyth. 207 00:07:38,650 --> 00:07:40,620 Ac yna, mae gennym gwpl mwy o f f yn. 208 00:07:40,620 --> 00:07:44,669 >> Felly, beth mae pobl yn tueddu i wneud yn ôl confensiwn pan fyddant yn defnyddio hecsadegol yw maent ond 209 00:07:44,669 --> 00:07:47,710 ysgrifennu hyn ychydig yn fwy cryno, cael gwared ar y rhan fwyaf o'r gofod gwyn. 210 00:07:47,710 --> 00:07:50,890 A dim ond i fod yn super glir i darllenwyr fod hyn yn hecsadegol, 211 00:07:50,890 --> 00:07:54,670 y confensiwn syml ymhlith bodau dynol yn cael i ysgrifennu sero 212 00:07:54,670 --> 00:07:58,000 x, sydd heb unrhyw ystyr arall na dynodwr gweledol, 213 00:07:58,000 --> 00:07:59,590 yma hon rhif hecs. 214 00:07:59,590 --> 00:08:04,210 >> Ac yna, byddwch yn rhoi y ddau ddigid, f f yn yr achos hwn, yna d yn, yna f f. 215 00:08:04,210 --> 00:08:06,700 Mor fyr stori hir, hecsadegol yn unig yn tueddu 216 00:08:06,700 --> 00:08:11,990 i fod yn ddefnyddiol gan fod pob un o'i digid, sero drwy f, berffaith llinellau 217 00:08:11,990 --> 00:08:13,880 i fyny gyda phatrwm o bedwar ddarnau. 218 00:08:13,880 --> 00:08:18,080 >> Felly os oes gennych ddau ddigid hecsadegol, sero drwy F, dro ar ôl tro, 219 00:08:18,080 --> 00:08:20,256 sy'n rhoi i chi berffaith wyth darnau neu un beit. 220 00:08:20,256 --> 00:08:22,380 Felly dyna pam ei bod yn tueddu i fod yn gonfensiynol ddefnyddiol. 221 00:08:22,380 --> 00:08:24,990 Does dim deallusol cynnwys gwirioneddol y tu hwnt i hynny, 222 00:08:24,990 --> 00:08:27,010 ac eithrio ei cyfleustodau gwirioneddol. 223 00:08:27,010 --> 00:08:29,310 >> Nawr nid JPEG yw'r unig ffeilio fformatau ar gyfer graffeg. 224 00:08:29,310 --> 00:08:33,230 Efallai y byddwch yn cofio bod yna ffeiliau fel hyn yn y byd, 225 00:08:33,230 --> 00:08:34,830 o leiaf o rai blynyddoedd yn ôl. 226 00:08:34,830 --> 00:08:37,580 >> Felly, mewn gwirionedd roedd hyn yn gosod i mewn Ffenestri XP 227 00:08:37,580 --> 00:08:39,960 ar filiynau o gyfrifiaduron ar draws y byd. 228 00:08:39,960 --> 00:08:43,000 Ac roedd hyn yn ffeil didfap, BMP. 229 00:08:43,000 --> 00:08:47,690 A ffeil bitmap, fel y byddwch yn gweld nesaf wythnos, dim ond yn golygu patrwm o ddotiau, 230 00:08:47,690 --> 00:08:51,710 picsel ag y maen nhw'n gelwir, a map ar ddarnau, mewn gwirionedd. 231 00:08:51,710 --> 00:08:55,160 >> Felly, yr hyn sy'n ddiddorol, fodd bynnag, am y fformat ffeil hwn, BMP, mae 232 00:08:55,160 --> 00:08:58,590 bod o dan y cwfl, mae'n wedi mwy na dim ond tri bytes 233 00:08:58,590 --> 00:09:01,020 hynny cyfansoddi ei header, felly i siarad, yr ychydig brathiadau cyntaf. 234 00:09:01,020 --> 00:09:03,330 Mae'n mewn gwirionedd yn edrych ychydig yn gymhleth ar yr olwg gyntaf. 235 00:09:03,330 --> 00:09:04,704 A byddwch yn gweld hyn yn y P a osodwyd. 236 00:09:04,704 --> 00:09:06,810 Ac yn cael rhywbeth allan arbennig o hyn yn awr 237 00:09:06,810 --> 00:09:10,720 Nid yw mor bwysig, fel dim ond y ffaith hynny ar ddechrau pob didfap 238 00:09:10,720 --> 00:09:13,823 ffeil, fformat graffigol, mae criw cyfan o rifau. 239 00:09:13,823 --> 00:09:14,980 240 00:09:14,980 --> 00:09:16,720 >> Nawr Microsoft, mae'r awdur y fformat hwn, 241 00:09:16,720 --> 00:09:18,820 tueddu i alw y rhai pethau nad ints a chars 242 00:09:18,820 --> 00:09:22,259 a fflotiau ond geiriau a d geiriau a hiraethu a bytes. 243 00:09:22,259 --> 00:09:23,800 Felly, maen nhw jyst gwahanol fathau o ddata. 244 00:09:23,800 --> 00:09:25,170 Maen nhw'n enwau gwahanol am yr un peth. 245 00:09:25,170 --> 00:09:26,740 Ond byddwch yn gweld bod yn P Set Four. 246 00:09:26,740 --> 00:09:31,450 >> Ond dim ond i ddweud os yw dynol dwbl-cliciau rhywfaint ffeil .BMP ar ei 247 00:09:31,450 --> 00:09:35,015 neu hi 'n anawdd cathrena, a ffenestr yn agor fyny ddangos iddo neu iddi fod ddelwedd, 248 00:09:35,015 --> 00:09:38,500 a ddigwyddodd oherwydd bod y gweithredu system yn sylwi yn ôl pob tebyg, nid yn unig 249 00:09:38,500 --> 00:09:41,460 estyniad ffeil .BMP yn enw'r ffeil, 250 00:09:41,460 --> 00:09:45,010 ond hefyd y ffaith bod mae rhywfaint confensiwn i batrwm o ddarnau 251 00:09:45,010 --> 00:09:47,490 ar y dechrau o'r ffeil didfap. 252 00:09:47,490 --> 00:09:50,270 >> Ond gadewch i ni bellach yn canolbwyntio ar ffeil o'r fath yn gymhleth, 253 00:09:50,270 --> 00:09:52,120 ond yn hytrach ar rywbeth fel hyn. 254 00:09:52,120 --> 00:09:55,190 Gadewch i ni dybio yma yn Gedit, yr wyf yn dim ond yn cael y dechreuadau 255 00:09:55,190 --> 00:09:57,070 o raglen sy'n eithaf syml. 256 00:09:57,070 --> 00:09:58,860 Rwyf wedi cael rhai yn cynnwys hyd top. 257 00:09:58,860 --> 00:10:02,120 Nawr mae gen i #include "structs.h" ond 'N annhymerus' yn dod yn ôl at hynny mewn munud. 258 00:10:02,120 --> 00:10:03,974 Ond mae hyn yn ddefnyddiol am y tro. 259 00:10:03,974 --> 00:10:05,890 Felly, mae hon yn rhaglen sy'n mynd i weithredu 260 00:10:05,890 --> 00:10:07,335 fel cronfa ddata y cofrestrydd. 261 00:10:07,335 --> 00:10:09,710 Felly cronfa ddata o fyfyrwyr, a phob myfyriwr yn y byd 262 00:10:09,710 --> 00:10:13,190 Mae enw a thŷ ac yn ôl pob tebyg rhai pethau eraill, ond byddwn yn cadw pethau'n syml. 263 00:10:13,190 --> 00:10:15,140 Mae pob myfyriwr yn cael enw a thŷ. 264 00:10:15,140 --> 00:10:17,700 >> Felly os oeddwn i eisiau ysgrifennu rhaglen sydd â'r diben mewn bywyd 265 00:10:17,700 --> 00:10:19,860 Roedd dim ond i ailadrodd o sero ar hyd at dri, 266 00:10:19,860 --> 00:10:22,070 os oes tri myfyriwr ym Mhrifysgol Harvard. 267 00:10:22,070 --> 00:10:25,350 Ac yr wyf am gael, gan ddefnyddio GetString, enw a dy pob myfyriwr, 268 00:10:25,350 --> 00:10:26,600 ac yna dim ond argraffu'r rheiny allan. 269 00:10:26,600 --> 00:10:28,630 >> Mae hyn yn fath o fel Wythnos Un, Wythnos Dau pethau yn awr, 270 00:10:28,630 --> 00:10:30,810 ble Fi jyst eisiau i dolen neu rywbeth fel 'na. 271 00:10:30,810 --> 00:10:34,500 Ac yr wyf am alw GetString ychydig amserau, ac yna ei argraffu f ychydig o weithiau. 272 00:10:34,500 --> 00:10:37,340 Felly, sut y gallwn wneud hyn, fodd bynnag, pan fydd y ddau enw a thŷ 273 00:10:37,340 --> 00:10:39,070 yn cael eu cynnwys ar gyfer pob myfyriwr? 274 00:10:39,070 --> 00:10:42,830 >> Felly, efallai fy ngreddf gyntaf fod yn gwneud rhywbeth fel hyn. 275 00:10:42,830 --> 00:10:49,620 Efallai fy mod yn gyntaf yn dweud, yn dda, yn rhoi i mi, dweud, amrywiaeth o llinynnau galw enwau. 276 00:10:49,620 --> 00:10:51,530 Ac nid oes arnaf eisiau i hardcode tri yma. 277 00:10:51,530 --> 00:10:53,064 Beth ydw i am ei roi yno? 278 00:10:53,064 --> 00:10:55,730 Felly MYFYRWYR, oherwydd bod yn unig gysonyn datgan ar y brig, 279 00:10:55,730 --> 00:10:57,860 yn unig fel nad oes rhaid i mi hardcode tri mewn mannau lluosog. 280 00:10:57,860 --> 00:11:00,859 Fel hyn, gall yr wyf yn newid yn un lle, ac mae'n effeithio ar newid ym mhob man. 281 00:11:00,859 --> 00:11:04,470 Ac yna, efallai y byddwn yn ei wneud llinyn yn gartref MYFYRWYR. 282 00:11:04,470 --> 00:11:10,250 >> Ac yn awr, efallai y byddwn yn gwneud rhywbeth fel am (int i = 0; ff 00:11:14,390 Felly rydw i'n teipio yn gyflym, ond mae hyn yn yn ôl pob tebyg cystrawen cyfarwydd erbyn hyn. 284 00:11:14,390 --> 00:11:17,030 >> Ac yn awr, mae hyn yn fwy diweddar. 285 00:11:17,030 --> 00:11:22,890 Os ydw i eisiau rhoi yn y i-fed enw'r myfyriwr, yr wyf yn meddwl fy mod yn gwneud hyn. 286 00:11:22,890 --> 00:11:26,480 Ac yna, nid yw enwau ond mae tai braced i. 287 00:11:26,480 --> 00:11:29,930 Yr wyf yn gwneud hyn, GetString, a gadael i mi fynd yn ôl ac yn atgyweiria hon llinell. 288 00:11:29,930 --> 00:11:30,430 Cytuno? 289 00:11:30,430 --> 00:11:31,200 Anghytuno? 290 00:11:31,200 --> 00:11:32,366 Dyw hi ddim yn iawn hawdd ei ddefnyddio-. 291 00:11:32,366 --> 00:11:33,890 Nid wyf wedi dweud wrth y defnyddiwr beth i'w wneud. 292 00:11:33,890 --> 00:11:36,520 >> Ond yn awr, os wyf hefyd yn eisiau nes ymlaen, gadewch i ni 293 00:11:36,520 --> 00:11:40,060 dyweder, argraffu pethau hyn out-- felly TODO ddiweddarach. 294 00:11:40,060 --> 00:11:42,330 Dw i'n mynd i wneud mwy gyda this-- hyn gellid dadlau yw 295 00:11:42,330 --> 00:11:45,970 mae gweithrediad cywir o cael enwau a thai, tri 296 00:11:45,970 --> 00:11:48,870 ohonynt yn gyfanswm o bob un, gan ddefnyddiwr. 297 00:11:48,870 --> 00:11:51,280 >> Ond nid yw hyn yn dylunio yn dda iawn, dde? 298 00:11:51,280 --> 00:11:55,220 Beth os bydd myfyriwr yn cael nid yn unig enw a thŷ, ond hefyd yn rif adnabod, 299 00:11:55,220 --> 00:11:57,770 a rhif ffôn, a chyfeiriad e-bost, 300 00:11:57,770 --> 00:12:00,280 ac efallai tudalen gartref, ac efallai Twitter handlen, 301 00:12:00,280 --> 00:12:03,730 ac unrhyw nifer o fanylion eraill gysylltiedig gyda myfyriwr neu berson, 302 00:12:03,730 --> 00:12:04,610 yn fwy cyffredinol. 303 00:12:04,610 --> 00:12:07,720 Sut y byddem yn dechrau ychwanegu ymarferoldeb i'r rhaglen hon? 304 00:12:07,720 --> 00:12:14,080 >> Wel, yr wyf yn teimlo fel y ffordd symlaf allai fod yn gwneud rhywbeth fel, gadewch i ni ddweud, 305 00:12:14,080 --> 00:12:16,490 int MYFYRWYR bidiau. 306 00:12:16,490 --> 00:12:18,380 Felly, yr wyf yn gallu rhoi eu holl IDs mewn 'na. 307 00:12:18,380 --> 00:12:22,240 Ac yna, ar gyfer rhywbeth fel rhifau ffôn, 308 00:12:22,240 --> 00:12:24,400 Dydw i ddim yn siwr sut i cynrychioli mai dim ond eto. 309 00:12:24,400 --> 00:12:30,280 Felly, gadewch i ni fynd yn ei flaen a dim ond alwad mae hyn twitters MYFYRWYR, sy'n 310 00:12:30,280 --> 00:12:33,550 ychydig yn rhyfedd, but-- a bagad mwy o gaeau. 311 00:12:33,550 --> 00:12:36,360 >> Rwyf wedi dechrau yn effeithiol gopïo a gludo yma. 312 00:12:36,360 --> 00:12:39,416 Ac mae hyn yn mynd i dyfu 'n bert anhylaw yn weddol gyflym, dde? 313 00:12:39,416 --> 00:12:42,290 Oni fyddai'n braf pe bai yn y byd strwythur data hysbys 314 00:12:42,290 --> 00:12:45,600 nid fel int neu linyn, ond rhywbeth lefel uwch, mae tynnu dŵr, felly 315 00:12:45,600 --> 00:12:47,570 i siarad, a elwir fel myfyriwr? 316 00:12:47,570 --> 00:12:50,220 Nid oedd C yn dod gyda adeiledig yn ymarferoldeb ar gyfer myfyrwyr, 317 00:12:50,220 --> 00:12:52,260 ond beth os oeddwn am ei roi o'r fath? 318 00:12:52,260 --> 00:12:55,640 >> Wel, mae'n troi allan, yr wyf i'n mynd i agor ffeil o'r enw structs.h yma, 319 00:12:55,640 --> 00:12:57,090 a gallwch wneud yn union hynny. 320 00:12:57,090 --> 00:12:58,290 Ac rydym yn mynd i ddechrau gwneud hyn nawr. 321 00:12:58,290 --> 00:13:01,490 Ac o dan y cwfl o P Set Tri, ydych eisoes wedi bod yn gwneud hyn yn awr. 322 00:13:01,490 --> 00:13:05,920 Nid oes y fath beth â g rect neu mae g hirgrwn yn y C. iaith raglennu 323 00:13:05,920 --> 00:13:10,570 >> Folks yn Stanford rhoi ar waith y rhai fathau o ddata drwy ddefnyddio'r dull hwn yma, 324 00:13:10,570 --> 00:13:13,900 yn datgan eu data newydd eu hunain mathau ddefnyddio allweddair newydd 325 00:13:13,900 --> 00:13:16,744 Gelwir struct ac un arall un o'r enw typedef. 326 00:13:16,744 --> 00:13:19,660 Ac yn wir, er bod y gystrawen yn edrych ychydig yn wahanol i bethau 327 00:13:19,660 --> 00:13:23,550 ydym wedi ei weld o'r blaen, yn egwyddor, 'i' super syml. 328 00:13:23,550 --> 00:13:25,297 >> Mae hyn yn unig yn golygu "yn diffinio math." 329 00:13:25,297 --> 00:13:27,255 Mae hynny'n mynd i fod yn strwythur, a strwythur 330 00:13:27,255 --> 00:13:29,400 yn union fel cynhwysydd gyfer pethau lluosog. 331 00:13:29,400 --> 00:13:31,780 Ac mae strwythur sydd yn mynd i gael llinyn o'r enw enw, 332 00:13:31,780 --> 00:13:33,210 ac mae llinyn o'r enw tŷ. 333 00:13:33,210 --> 00:13:37,520 A gadewch i ni alw, dim ond ar gyfer hwylustod, y myfyriwr strwythur data cyfan. 334 00:13:37,520 --> 00:13:40,320 >> Felly, o bryd i chi ddod i yr hanner colon, mae gennych nawr 335 00:13:40,320 --> 00:13:43,280 creu eich data eich hun math a elwir yn fyfyriwr 336 00:13:43,280 --> 00:13:46,420 sydd bellach yn sefyll ochr yn ochr â int, ac arnofio, a torgoch, a llinyn, 337 00:13:46,420 --> 00:13:50,270 a g rect, a g hirgrwn, ac unrhyw rif o bethau eraill bobl wedi dyfeisio. 338 00:13:50,270 --> 00:13:53,340 >> Felly beth sy'n ddefnyddiol am hyn yn awr yw bod os byddaf yn mynd yn ôl 339 00:13:53,340 --> 00:13:57,430 i struct 0 a gorffen hyn gweithredu, sy'n ysgrifennais 340 00:13:57,430 --> 00:14:02,080 o flaen llaw yma, yn sylwi bod yr holl o'r messiness anochel y 341 00:14:02,080 --> 00:14:05,490 ar fin dechrau digwydd wrth i mi ychwanegu rhifau ffôn a twitters a phob 342 00:14:05,490 --> 00:14:07,370 y pethau eraill i diffiniad myfyriwr, 343 00:14:07,370 --> 00:14:11,810 erbyn hyn mae'n cael ei lapio fyny yn gryno fel un yn unig amrywiaeth o fyfyrwyr. 344 00:14:11,810 --> 00:14:15,500 >> Ac mae pob un o'r myfyrwyr hynny yn awr Mae gan lluosog bethau tu mewn iddo. 345 00:14:15,500 --> 00:14:16,930 Fel bod dim ond yn gadael un cwestiwn. 346 00:14:16,930 --> 00:14:19,700 Sut ydych chi'n ei gael yn yr enw, a'r tŷ, a'r adnabod, 347 00:14:19,700 --> 00:14:21,640 a beth bynnag arall yw tu mewn i'r myfyrwyr? 348 00:14:21,640 --> 00:14:22,930 Super syml, yn ogystal. 349 00:14:22,930 --> 00:14:25,730 Cystrawen newydd, ond mae syniad syml. 350 00:14:25,730 --> 00:14:29,239 >> Rydych yn syml mynegai i mewn i'r casgliad, fel y gwnaethom yr wythnos diwethaf, ac mae hyn. 351 00:14:29,239 --> 00:14:31,030 A beth yn glir y darn newydd o gystrawen? 352 00:14:31,030 --> 00:14:32,590 353 00:14:32,590 --> 00:14:35,880 Dim ond., Sy'n golygu "mynd y tu mewn i'r strwythur a chael y cae o'r enw 354 00:14:35,880 --> 00:14:39,030 enw, yn cael y cae o'r enw tŷ, cael y cae o'r enw myfyriwr. " 355 00:14:39,030 --> 00:14:41,940 >> Felly, yn P Set Tri, os ydych yn dal i weithio ar hynny, 356 00:14:41,940 --> 00:14:44,020 a'r rhan fwyaf o Folks yn dal yn cael eu, yn sylweddoli bod wrth i chi 357 00:14:44,020 --> 00:14:46,130 ddechrau defnyddio pethau fel g rects a g ovals 358 00:14:46,130 --> 00:14:50,201 a phethau eraill nad ydynt yn ymddangos i dod o Wythnos Zero, Un, neu Dau, 359 00:14:50,201 --> 00:14:52,950 sylweddoli bod hynny oherwydd Stanford Datganodd rhai mathau ddata newydd. 360 00:14:52,950 --> 00:14:56,160 >> Ac yn wir, dyna'n union yr hyn yr ydym annhymerus wneud, yn ogystal, yn P Set Pedwar, pan 361 00:14:56,160 --> 00:14:59,880 rydym yn dechrau i ddelio â phethau fel delweddau, bitmaps, a mwy. 362 00:14:59,880 --> 00:15:02,882 Felly dyna dim ond ymlid ac mae model meddwl ar gyfer yr hyn sydd i ddod. 363 00:15:02,882 --> 00:15:04,590 Yn awr, yr wyf yn ei ohirio ychydig y bore yma. 364 00:15:04,590 --> 00:15:09,560 Roeddwn yn fath o chwilfrydig i weld beth y papur wal Microsoft mewn gwirionedd 365 00:15:09,560 --> 00:15:10,310 edrych fel heddiw. 366 00:15:10,310 --> 00:15:15,200 Ac mae'n troi allan rhywun yn 2006 aeth mewn gwirionedd i bron yn union 367 00:15:15,200 --> 00:15:19,210 yr un man i dynnu lluniau mewn gwirionedd hyn sy'n edrych fel hynny y dyddiau hyn. 368 00:15:19,210 --> 00:15:21,380 Mae'r maes hwn yn ychydig yn gordyfu erbyn hyn. 369 00:15:21,380 --> 00:15:24,850 >> Felly, yn siarad yn awr o ddelweddau, gadewch i ni ddod yn ôl Daven yma 370 00:15:24,850 --> 00:15:26,890 ar y sgrin a Nicholas, a dim ond eich atgoffa 371 00:15:26,890 --> 00:15:30,540 os hoffech chi ymuno â ni am ginio dydd Gwener yma, pennaeth i'n URL arferol 372 00:15:30,540 --> 00:15:31,440 yma. 373 00:15:31,440 --> 00:15:33,530 >> Felly, lle wnaethon ni adael i ffwrdd ar ddydd Llun? 374 00:15:33,530 --> 00:15:35,140 Rydym yn cyflwyno y broblem hon, dde? 375 00:15:35,140 --> 00:15:37,610 Roedd hyn yn ymddangos yn gywir gweithredu cyfnewid, 376 00:15:37,610 --> 00:15:40,460 lle rydych yn cymryd dau ints, un a elwir yn, un o'r enw b, 377 00:15:40,460 --> 00:15:44,130 cyfnewid nhw, yn union fel y gwnaeth Laura yma ar y llwyfan gyda'r llaeth a'r dŵr, 378 00:15:44,130 --> 00:15:46,820 drwy ddefnyddio dros dro amrywiol, neu gwpan wag, 379 00:15:46,820 --> 00:15:50,540 fel y gallem roi b mewn ac mae yn b heb wneud llanast o bethau. 380 00:15:50,540 --> 00:15:51,560 Rydym yn defnyddio newidyn. 381 00:15:51,560 --> 00:15:52,870 Mae'n cael ei alw temp. 382 00:15:52,870 --> 00:15:55,520 >> Ond beth oedd y sylfaenol broblem â'r cod hwn ar ddydd Llun? 383 00:15:55,520 --> 00:15:57,700 384 00:15:57,700 --> 00:15:58,870 Beth oedd y broblem yma? 385 00:15:58,870 --> 00:16:00,106 386 00:16:00,106 --> 00:16:00,605 Yeah. 387 00:16:00,605 --> 00:16:01,970 >> CYNULLEIDFA: Mae'n cymryd mwy o le. 388 00:16:01,970 --> 00:16:04,719 >> DAVID J. Malan: Yn cymryd mwy gofod, oherwydd fy mod i'n defnyddio newidyn, 389 00:16:04,719 --> 00:16:05,400 ac mae hynny'n iawn. 390 00:16:05,400 --> 00:16:07,300 Mae hynny'n wir, ond rwy'n mynd i ddweud mae hynny'n iawn. 391 00:16:07,300 --> 00:16:10,030 Mae'n dim ond 32 darnau yn y mawreddog cynllun o bethau, felly nid yw llawer mawr. 392 00:16:10,030 --> 00:16:10,655 Sylwadau eraill? 393 00:16:10,655 --> 00:16:12,572 CYNULLEIDFA: Dim ond yn cyfnewid y newidynnau yn lleol. 394 00:16:12,572 --> 00:16:13,571 DAVID J. Malan: Yn union. 395 00:16:13,571 --> 00:16:15,090 Dim ond yn cyfnewid y newidynnau yn lleol. 396 00:16:15,090 --> 00:16:18,173 Oherwydd bod unrhyw tro y byddwch yn ffonio function-- pan gefais y hambyrddau o Annenberg 397 00:16:18,173 --> 00:16:19,840 tro diwethaf, mae gennych prif ar y gwaelod. 398 00:16:19,840 --> 00:16:23,560 Cyn gynted ag y byddwch yn galw swyddogaeth o'r enw cyfnewid, nid yw cyfnewid yn mynd x ac y, 399 00:16:23,560 --> 00:16:24,400 y gwerthoedd gwreiddiol. 400 00:16:24,400 --> 00:16:26,392 Beth mae cyfnewid get, wnaethon ni hawlio? 401 00:16:26,392 --> 00:16:27,100 CYNULLEIDFA: Copïau. 402 00:16:27,100 --> 00:16:28,090 DAVID J. Malan: Felly gopïau ohonynt. 403 00:16:28,090 --> 00:16:31,120 Felly, mae'n mynd un a dau, os ydych yn dwyn i gof yr enghraifft o dro diwethaf, 404 00:16:31,120 --> 00:16:34,730 ond mae copi o un a dau sy'n cael eu cyfnewid yn llwyddiannus. 405 00:16:34,730 --> 00:16:38,550 Ond yn anffodus yn y diwedd, gwerthoedd hynny yn dal i fod yr un fath. 406 00:16:38,550 --> 00:16:41,880 Felly, gallwn weld hyn gyda'n ffrind newydd, gobeithio GDB, 407 00:16:41,880 --> 00:16:45,180 chi neu'r TFS a Ca ei bod yn rhaid i bod yn arwain i chi tuag at fel a ganlyn. 408 00:16:45,180 --> 00:16:51,210 >> Felly nid oes cofio cyfnewid yn edrych like-- gadewch i ni agor this-- edrych fel hyn. 409 00:16:51,210 --> 00:16:54,160 Rydym ymgychwyn x i un, y i ddau. 410 00:16:54,160 --> 00:16:55,620 Roedd criw o brint f yn. 411 00:16:55,620 --> 00:16:58,080 Ond yna, yr alwad allweddol yma oedd i gyfnewid, sy'n 412 00:16:58,080 --> 00:17:00,260 yn union mae'r cod rydym jyst yn gweld funud yn ôl. 413 00:17:00,260 --> 00:17:03,180 Pa yn gywir ar y dechrau yr olwg, ond yn swyddogaethol, 414 00:17:03,180 --> 00:17:06,800 nid yw'r rhaglen hon yn gweithio, oherwydd nid yw'n cyfnewid x ac y yn barhaol. 415 00:17:06,800 --> 00:17:10,190 >> Felly, gadewch i ni weld hyn, mae cynnes cyflym hyd yma gyda GDB, a ./noswap. 416 00:17:10,190 --> 00:17:11,867 417 00:17:11,867 --> 00:17:15,200 Mae criw o wybodaeth llethol y 'N annhymerus' cael gwared â Rheoli L am y tro. 418 00:17:15,200 --> 00:17:17,516 Ac yn awr, yr wyf i'n mynd i mynd yn ei flaen ac yn rhedeg. 419 00:17:17,516 --> 00:17:19,349 Ac yn anffodus, bod Nid oedd hynny'n ddefnyddiol. 420 00:17:19,349 --> 00:17:22,355 Roedd yn rhedeg y rhaglen tu mewn hon rhaglen o'r enw GDB, a debugger, 421 00:17:22,355 --> 00:17:23,730 ond nid oedd yn gadael i mi brocio o gwmpas. 422 00:17:23,730 --> 00:17:26,229 >> Felly, sut y gallaf mewn gwirionedd yn oedi gweithredu y tu mewn y rhaglen hon? 423 00:17:26,229 --> 00:17:27,410 424 00:17:27,410 --> 00:17:28,329 Felly torri. 425 00:17:28,329 --> 00:17:32,340 A gallwn dorri ar unrhyw rhif, un, 10, 15 llinell. 426 00:17:32,340 --> 00:17:35,530 Ond gallaf hefyd dorri symbolaidd drwy ddweud main egwyl. 427 00:17:35,530 --> 00:17:38,980 Ac mae hynny'n mynd i osod seibiant pwynt, yn ôl pob golwg ar linell 16 yn y prif. 428 00:17:38,980 --> 00:17:40,050 A lle mae llinell 16? 429 00:17:40,050 --> 00:17:42,960 Gadewch i ni fynd i fyny at y cod ac yn mynd i fyny at noswap. 430 00:17:42,960 --> 00:17:46,930 Ac yn wir, llinell 16 yw'r cyntaf un yn y rhaglen. 431 00:17:46,930 --> 00:17:52,130 >> Felly nawr, os wyf yn mynd yn ei flaen a math rhedeg y tro hwn, Mewnbynnu, mae'n seibio. 432 00:17:52,130 --> 00:17:53,080 Felly gadewch i brocio o gwmpas. 433 00:17:53,080 --> 00:17:55,716 Argraffu x-- pam mae x sero? 434 00:17:55,716 --> 00:17:56,705 435 00:17:56,705 --> 00:17:57,830 Ac yn anwybyddu'r arwydd ddoler. 436 00:17:57,830 --> 00:17:59,725 Dyna dim ond ar gyfer ffansi defnydd o'r rhaglen. 437 00:17:59,725 --> 00:18:00,780 438 00:18:00,780 --> 00:18:03,140 Pam fod x sero ar hyn o bryd? 439 00:18:03,140 --> 00:18:03,640 Yeah. 440 00:18:03,640 --> 00:18:07,061 >> CYNULLEIDFA: Mae'n seibio dde cyn llinell 16, nid mewn gwirionedd ar-lein 16. 441 00:18:07,061 --> 00:18:08,060 DAVID J. Malan: Yn union. 442 00:18:08,060 --> 00:18:11,630 GDB, yn ddiofyn, wedi seibio gweithredu ychydig cyn llinell 16. 443 00:18:11,630 --> 00:18:14,820 Felly, nid yw wedi ei weithredu, sy'n golygu x yw o ryw werth anhysbys. 444 00:18:14,820 --> 00:18:17,150 Ac rydym got 'n ffodus ei fod yn rhywbeth glân fel sero. 445 00:18:17,150 --> 00:18:20,310 Felly, yn awr os wyf yn teipio nesaf, erbyn hyn mae'n dienyddiwyd 16. 446 00:18:20,310 --> 00:18:22,000 Mae'n aros i mi i weithredu 17. 447 00:18:22,000 --> 00:18:23,400 Gadewch i mi fynd yn ei flaen ac argraffu x. 448 00:18:23,400 --> 00:18:24,094 Mae'n un. 449 00:18:24,094 --> 00:18:25,260 Gadewch i mi fynd yn ei flaen ac argraffu y. 450 00:18:25,260 --> 00:18:26,176 Beth ddylwn i ei weld yn awr? 451 00:18:26,176 --> 00:18:27,660 452 00:18:27,660 --> 00:18:28,560 >> CYNULLEIDFA: [Anghlywadwy] 453 00:18:28,560 --> 00:18:29,165 >> DAVID J. Malan: A gryfach bach. 454 00:18:29,165 --> 00:18:30,040 >> CYNULLEIDFA: [Anghlywadwy] 455 00:18:30,040 --> 00:18:30,537 456 00:18:30,537 --> 00:18:32,120 DAVID J. Malan: Ddim yn dipyn o gonsensws. 457 00:18:32,120 --> 00:18:34,760 Felly ie, rydym yn gweld rhywfaint o werth garbage. 458 00:18:34,760 --> 00:18:37,862 Yn awr, y mae 134514064 yno. 459 00:18:37,862 --> 00:18:39,320 Wel, dim ond rhywfaint o werth garbage. 460 00:18:39,320 --> 00:18:41,350 Mae fy rhaglen yn defnyddio RAM at wahanol ddibenion. 461 00:18:41,350 --> 00:18:42,350 Mae swyddogaethau eraill. 462 00:18:42,350 --> 00:18:44,040 Ysgrifennodd pobl eraill y tu mewn 'm chyfrifiadur. 463 00:18:44,040 --> 00:18:46,789 Felly darnau hynny wedi cael eu defnyddio ar gyfer gwerthoedd eraill, a beth rwy'n ei weld 464 00:18:46,789 --> 00:18:49,470 yw gweddillion rhai defnydd blaenorol o'r cof. 465 00:18:49,470 --> 00:18:53,350 >> Felly nid oes llawer mawr, oherwydd cyn gynted ag y fel yr wyf deipio nesaf ac yna ei argraffu y, 466 00:18:53,350 --> 00:18:55,640 'i' ymgychwyn i gwerth yr wyf am. 467 00:18:55,640 --> 00:18:57,400 Felly nawr, gadewch i ni fynd yn ei flaen ychydig yn gyflymach. 468 00:18:57,400 --> 00:18:58,540 N am nesaf. 469 00:18:58,540 --> 00:18:59,570 Gadewch i ni wneud hynny eto. 470 00:18:59,570 --> 00:19:00,530 Gadewch i ni wneud hynny eto. 471 00:19:00,530 --> 00:19:02,404 Ond nid wyf am i daro yma, oherwydd os wyf 472 00:19:02,404 --> 00:19:05,110 am weld beth sy'n mynd ymlaen y tu mewn o cyfnewid, beth yw'r gorchymyn? 473 00:19:05,110 --> 00:19:05,520 >> CYNULLEIDFA: grisiau. 474 00:19:05,520 --> 00:19:06,436 >> DAVID J. Malan: grisiau. 475 00:19:06,436 --> 00:19:09,800 Felly, mae hyn yn camu i mi i mewn i swyddogaeth, yn hytrach nag drosto. 476 00:19:09,800 --> 00:19:12,270 Ac yn awr, mae'n ychydig yn cryptig onest, ond mae hyn yn unig 477 00:19:12,270 --> 00:19:14,581 yn dweud wrthyf fy mod yn llinell 33 awr. 478 00:19:14,581 --> 00:19:15,580 A gadewch i ni wneud hyn eto. 479 00:19:15,580 --> 00:19:16,080 Print temp. 480 00:19:16,080 --> 00:19:17,129 481 00:19:17,129 --> 00:19:20,170 Gwerth Garbage, negyddol y tro hwn, ond dim ond dal i fod yn werth garbage. 482 00:19:20,170 --> 00:19:22,810 Felly gadewch i ni ei wneud nesaf, temp print. 483 00:19:22,810 --> 00:19:27,130 Mae'n initialized i 1, sy'n oedd gwerth x, aka a. 484 00:19:27,130 --> 00:19:29,110 >> Yn awr, os yw ein a a x yn dod o? 485 00:19:29,110 --> 00:19:32,510 Wel, yn sylwi yn y prif, rydym Gelwir gwerthoedd hyn x ac y. 486 00:19:32,510 --> 00:19:34,740 Yna, rydym yn pasio nhw i gyfnewid fel a ganlyn. 487 00:19:34,740 --> 00:19:37,010 Daeth X yn gyntaf, atalnod y. 488 00:19:37,010 --> 00:19:40,020 Ac yna, gallai cyfnewid alw x ac y yn eu. 489 00:19:40,020 --> 00:19:42,630 Ond er eglurder, mae'n galw nhw a a b. 490 00:19:42,630 --> 00:19:45,970 Ond mae a b yn awr yn mynd i fod copïau o x ac y, yn y drefn honno. 491 00:19:45,970 --> 00:19:50,660 >> Felly, os byddaf yn mynd yn ôl i GDB, dros dro bellach yn un ac mae bellach yn un. 492 00:19:50,660 --> 00:19:56,130 Ond os wyf yn ei wneud nesaf ac erbyn hyn yn gwneud argraffu mae, mae eisoes wedi cael ei symud dros. 493 00:19:56,130 --> 00:20:00,030 Mae'r llaeth wedi cael ei arllwys i mewn i'r hen gwydr sudd oren yn, neu i'r gwrthwyneb. 494 00:20:00,030 --> 00:20:04,750 >> Ac os wyf yn ei wneud nesaf eto, ac yn awr os byddaf argraffu fel gwiriad pwyll, 495 00:20:04,750 --> 00:20:07,687 mae yn dal dau, ond b bellach yn un. 496 00:20:07,687 --> 00:20:08,770 A dweud y gwir, mae'n dal i fod yno. 497 00:20:08,770 --> 00:20:10,670 Nid wyf yn poeni beth temp yn. 498 00:20:10,670 --> 00:20:16,850 Ond cyn gynted ag yr wyf yn awr deipio, gadewch i ni ddweud, parhau i fynd yn ôl, erbyn hyn rwy'n ar y diwedd 499 00:20:16,850 --> 00:20:17,480 y rhaglen. 500 00:20:17,480 --> 00:20:20,730 Ac yn anffodus, x yw dal i fod yn un ac y yn dal dau. 501 00:20:20,730 --> 00:20:22,272 >> Felly beth oedd y cyfleustodau o GDB yno? 502 00:20:22,272 --> 00:20:23,980 Nid oedd yn fy helpu i drwsio y broblem fel y cyfryw, 503 00:20:23,980 --> 00:20:26,265 ond mae'n gobeithio fy helpu ei ddeall trwy wireddu 504 00:20:26,265 --> 00:20:30,000 bod ie, fy rhesymeg yn iawn, ond Nid yw fy cod yn y pen draw gael 505 00:20:30,000 --> 00:20:31,450 effaith barhaol. 506 00:20:31,450 --> 00:20:34,570 Felly dyna broblem rydym yn mynd yn hyn yn datrys heddiw. 507 00:20:34,570 --> 00:20:37,870 >> Ond gadewch i ni gyrraedd yno ar ffordd o hyn. 508 00:20:37,870 --> 00:20:39,230 Llinyn yn gelwydd. 509 00:20:39,230 --> 00:20:41,860 Mae, hefyd, nid yn fath data sy'n bodoli yn C. Mae'n 510 00:20:41,860 --> 00:20:44,750 bod yn gyfystyr ar gyfer rhai amser ar gyfer rhywbeth arall, 511 00:20:44,750 --> 00:20:47,300 a gallwn ddatgelu hynny fel a ganlyn. 512 00:20:47,300 --> 00:20:53,282 >> Gadewch i mi fynd yn ei flaen ac yn agor i fyny rhaglen o'r enw cymharu-0. 513 00:20:53,282 --> 00:20:56,240 Ac yn hytrach na teipio hwn allan, byddwn yn dechrau i gerdded drwy'r cod 514 00:20:56,240 --> 00:20:58,040 Rwyf eisoes yn ysgrifennu, ond 'i' dim ond ychydig o linellau. 515 00:20:58,040 --> 00:20:59,570 Felly, mae hyn yn cael ei gymharu-0. 516 00:20:59,570 --> 00:21:02,380 A'r peth cyntaf fy mod yn gwneud yn cael llinell o destun. 517 00:21:02,380 --> 00:21:05,610 >> Ond sylwi ar yr hyn rwy'n ei wneud am y tro cyntaf. 518 00:21:05,610 --> 00:21:07,910 Yr hyn sy'n wahanol yn glir ynghylch llinell 21? 519 00:21:07,910 --> 00:21:10,020 520 00:21:10,020 --> 00:21:11,402 Mewn gwirionedd, arhoswch funud. 521 00:21:11,402 --> 00:21:12,110 Mae hwn yn gopi dau. 522 00:21:12,110 --> 00:21:13,568 Nid yw hyd yn oed y rhaglen gywir. 523 00:21:13,568 --> 00:21:14,780 Mae pob, effro spoiler cywir. 524 00:21:14,780 --> 00:21:16,890 Mae pob hawl, felly byth yn meddwl hynny. 525 00:21:16,890 --> 00:21:18,520 Dyna'r ateb i gwestiwn yn y dyfodol. 526 00:21:18,520 --> 00:21:21,450 >> Yma yn cael ei gymharu-0, ac rwy'n fin gael llinell o destun. 527 00:21:21,450 --> 00:21:22,435 Rhaglen yn llawer symlach. 528 00:21:22,435 --> 00:21:23,560 Felly, mae hyn yn syml. 529 00:21:23,560 --> 00:21:28,070 Mae hyn yn debyg Wythnos Un, Wythnos Dau stwff ar hyn o bryd. llinyn s = GetString. 530 00:21:28,070 --> 00:21:29,700 Yn awr, dywedaf eto i lawr yma. 531 00:21:29,700 --> 00:21:31,830 llinyn t = GetString. 532 00:21:31,830 --> 00:21:35,300 Ac yna, y peth olaf yn hyn rhaglen, fel yr awgryma'r enw, 533 00:21:35,300 --> 00:21:37,090 yw fy mod i'n mynd i geisio eu cymharu. 534 00:21:37,090 --> 00:21:40,709 >> Felly os yw ef, y llinyn cyntaf, hafal = t, yna rwy'n 535 00:21:40,709 --> 00:21:42,250 mynd i ddweud i chi deipio yr un peth. 536 00:21:42,250 --> 00:21:44,291 Arall, yr wyf i'n mynd i ddweud chi deipio pethau gwahanol. 537 00:21:44,291 --> 00:21:45,880 Felly gadewch i ni lunio a rhedeg y rhaglen hon. 538 00:21:45,880 --> 00:21:48,481 Felly gwnewch yn cymharu sero. 539 00:21:48,481 --> 00:21:48,980 Edrych yn dda. 540 00:21:48,980 --> 00:21:50,490 Dim gwallau casgliad. 541 00:21:50,490 --> 00:21:52,386 >> Gadewch i mi fynd yn ei flaen yn awr a theipiwch ./compare-0. 542 00:21:52,386 --> 00:21:55,230 543 00:21:55,230 --> 00:21:59,220 Gadewch i mi fynd yn ei flaen ac yn dweud rhywbeth : Daven a rhywbeth: Rob. 544 00:21:59,220 --> 00:22:00,450 Ac yr wyf yn teipio pethau gwahanol. 545 00:22:00,450 --> 00:22:01,250 Hyd yn hyn, felly da. 546 00:22:01,250 --> 00:22:02,680 Rhaglen yn ymddangos i fod yn gywir. 547 00:22:02,680 --> 00:22:03,880 >> Ond gadewch i ni redeg eto. 548 00:22:03,880 --> 00:22:05,800 Dweud rhywbeth: Gabe. 549 00:22:05,800 --> 00:22:07,140 Dweud rhywbeth: Gabe. 550 00:22:07,140 --> 00:22:08,520 551 00:22:08,520 --> 00:22:09,020 Mae pob hawl. 552 00:22:09,020 --> 00:22:10,851 Efallai fy taro bar gofod neu rywbeth ffynci. 553 00:22:10,851 --> 00:22:11,600 Gadewch i ni wneud hynny eto. 554 00:22:11,600 --> 00:22:13,020 Felly Zamyla. 555 00:22:13,020 --> 00:22:13,970 556 00:22:13,970 --> 00:22:14,470 Zamyla. 557 00:22:14,470 --> 00:22:15,740 558 00:22:15,740 --> 00:22:17,330 Gwahanol bethau. 559 00:22:17,330 --> 00:22:19,430 Felly beth sy'n mynd ymlaen? 560 00:22:19,430 --> 00:22:23,200 >> Felly mae gennym y ddwy linell o cod, GetString cael eu galw ddwywaith. 561 00:22:23,200 --> 00:22:25,760 Ac yna, dwi'n syml ceisio gymharu s a t. 562 00:22:25,760 --> 00:22:28,370 Ond yr hyn sy'n wir, yna yn mynd ymlaen? 563 00:22:28,370 --> 00:22:31,180 Wel, mae fy llawysgrifen yn fin cigydd enghraifft hon braidd. 564 00:22:31,180 --> 00:22:34,630 A gadewch i ni mewn gwirionedd yn taflu hyn i fyny dros yma, yn ogystal. 565 00:22:34,630 --> 00:22:37,390 566 00:22:37,390 --> 00:22:45,712 >> Felly mae gennym linell tebyg llinyn s = GetString. 567 00:22:45,712 --> 00:22:48,295 Felly dyna syml, y cyntaf Llinell diddorol o'r rhaglen honno. 568 00:22:48,295 --> 00:22:49,920 569 00:22:49,920 --> 00:22:52,974 Ond yr hyn i gyd y tro hwn wedi bod mynd ymlaen o dan y cwfl? 570 00:22:52,974 --> 00:22:55,890 Wel, ar y chwith ochr yn llinyn, sydd yn rhyw fath o newidyn, 571 00:22:55,890 --> 00:22:56,785 ac fe'i gelwir s. 572 00:22:56,785 --> 00:23:00,019 Felly yr wyf yn gwybod bod hyn yn defnyddio cof, neu RAM, yn fy chyfrifiadur rhywsut. 573 00:23:00,019 --> 00:23:02,060 Felly dw i'n mynd i haniaethol tynnu hynny fel sgwâr. 574 00:23:02,060 --> 00:23:04,820 32 darnau, mae'n troi allan, ond mwy am hynny yn y dyfodol. 575 00:23:04,820 --> 00:23:06,410 Ac yna, beth sy'n digwydd dros yma? 576 00:23:06,410 --> 00:23:08,700 >> Wel, GetString yn amlwg cael llinyn gan y defnyddiwr. 577 00:23:08,700 --> 00:23:11,360 Ac GetString got Zamyla neu Gabe neu Daven. 578 00:23:11,360 --> 00:23:14,640 Felly gadewch i ni ddewis y cyntaf o'r rheini, a oedd Daven. 579 00:23:14,640 --> 00:23:19,174 Hynny'n effeithiol, pa GetString got fi yn yr achos cyntaf oedd D-a-v-e-n. 580 00:23:19,174 --> 00:23:22,690 581 00:23:22,690 --> 00:23:25,045 Ac yna, beth arall a wnaeth yn rhoi i mi yn gyfrinachol? 582 00:23:25,045 --> 00:23:25,920 CYNULLEIDFA: [Anghlywadwy] 583 00:23:25,920 --> 00:23:28,720 DAVID J. Malan: Yeah, y / 0 neu gymeriad null. 584 00:23:28,720 --> 00:23:30,550 Felly rhoddodd effeithiol llinyn mi. 585 00:23:30,550 --> 00:23:34,550 Ond rydym eisoes yn gwybod o blaenorol edrych bod llinyn yn unig yw amrywiaeth 586 00:23:34,550 --> 00:23:37,895 o gymeriadau, ac mae'n cael ei derfynu gan gymeriad hon sentinel arbennig, / 0. 587 00:23:37,895 --> 00:23:39,220 588 00:23:39,220 --> 00:23:42,310 >> Ond os yw hyn yn wir ac mae hwn yn sgwâr, 589 00:23:42,310 --> 00:23:44,160 mae hyn yn amlwg yn llawer mwy petryal. 590 00:23:44,160 --> 00:23:46,830 Ac yn wir, mae hyn yn, Allaf hawlio, dim ond 32 o ddarnau. 591 00:23:46,830 --> 00:23:49,500 Ac mae hyn yn amlwg yn fwy na 32 darnau, oherwydd mae hyn yn ôl pob tebyg 592 00:23:49,500 --> 00:23:51,583 wyth plws wyth ynghyd ag wyth ynghyd ag wyth ynghyd ag wyth, 593 00:23:51,583 --> 00:23:53,320 dim ond oherwydd o bytes mewn ASCII. 594 00:23:53,320 --> 00:23:57,030 Sut mae'r Heck ydym yn mynd i ffitio Daven i mewn i flwch bach hyn yma? 595 00:23:57,030 --> 00:23:59,880 >> Wel, yr hyn sy'n GetString gwirionedd yn gwneud? 596 00:23:59,880 --> 00:24:03,680 Wel, grid hyn yma yn cynrychioli chof fy nghyfrifiadur neu RAM. 597 00:24:03,680 --> 00:24:07,564 Felly gadewch i ni fympwyol dweud os pob un o'r rhain yn cynrychioli beit, 598 00:24:07,564 --> 00:24:09,730 yna gallwn feddwl am bob un beit fel un cyfeiriad, 599 00:24:09,730 --> 00:24:13,830 fel 33 Oxford Street, neu 34 Stryd Rhydychen, neu 35 Oxford Street. 600 00:24:13,830 --> 00:24:16,700 >> Felly, yn union fel cartrefi yn cael cyfeiriadau ac adeiladau yn cael cyfeiriadau, 601 00:24:16,700 --> 00:24:19,810 felly y mae beit unigol o cof yn cael cyfeiriadau neu rifau 602 00:24:19,810 --> 00:24:21,042 sy'n eu nodi unigryw. 603 00:24:21,042 --> 00:24:22,000 Yn awr, mae hyn yn fympwyol. 604 00:24:22,000 --> 00:24:25,370 Ond er mwyn cadw pethau'n syml, yr wyf i'n mynd i defnyddio hecsadegol dim ond drwy confensiwn, 605 00:24:25,370 --> 00:24:28,200 ond mae'r 0x yn golygu dim byd arall na "mae hyn yn hecsadegol." 606 00:24:28,200 --> 00:24:31,030 ac yr wyf i'n mynd i honni bod y "D" yn dod i ben i fyny at Byte Un mewn cof. 607 00:24:31,030 --> 00:24:34,210 >> Yr wyf yn ddim byd arall yn digwydd yn cof, felly Daven got y fan a'r lle cyntaf 608 00:24:34,210 --> 00:24:35,509 yn Beit Un. 609 00:24:35,509 --> 00:24:36,800 Mae hyn, felly, yn mynd i fod 0x2. 610 00:24:36,800 --> 00:24:37,831 611 00:24:37,831 --> 00:24:38,705 Mae hyn yn mynd i 0x3. 612 00:24:38,705 --> 00:24:39,840 613 00:24:39,840 --> 00:24:41,800 Mae hyn yn mynd i fod 0x4. 614 00:24:41,800 --> 00:24:43,025 Mae hyn yn mynd i 0x5. 615 00:24:43,025 --> 00:24:44,025 Mae hyn yn mynd i fod 0x6. 616 00:24:44,025 --> 00:24:45,560 617 00:24:45,560 --> 00:24:48,290 >> Ond ar ôl i chi ddechrau meddwl am yr hyn y thrwy hynny yn y cyfrifiadur 618 00:24:48,290 --> 00:24:50,710 o dan y cwfl, gallwch ddechrau casglu 619 00:24:50,710 --> 00:24:54,960 sut yr ydych yn, rai blynyddoedd yn ôl, byddai wedi gweithredu C ei hun. 620 00:24:54,960 --> 00:24:58,360 Beth yw GetString yn ôl pob tebyg returning-- oherwydd ei fod yn 621 00:24:58,360 --> 00:25:00,946 teimlo fel nad yw'n dychwelyd Daven, fel y cyfryw, 622 00:25:00,946 --> 00:25:03,320 oherwydd yn sicr nid mae'n mynd i gyd-fynd box-- bach hwn 623 00:25:03,320 --> 00:25:05,090 felly beth sy'n GetString yn ôl pob tebyg yn dychwelyd? 624 00:25:05,090 --> 00:25:07,958 625 00:25:07,958 --> 00:25:08,920 >> CYNULLEIDFA: [Anghlywadwy] 626 00:25:08,920 --> 00:25:10,540 >> DAVID J. Malan: Mae lleoliad Daven. 627 00:25:10,540 --> 00:25:12,770 Ac mae wedi bod yn gwneud hyn byth ers Wythnos Un. 628 00:25:12,770 --> 00:25:16,150 Yr hyn GetString yn wirioneddol Nid yw dychwelyd yn llinyn, fel y cyfryw. 629 00:25:16,150 --> 00:25:17,780 Dyna un o'r celwyddau bach gwyn. 630 00:25:17,780 --> 00:25:22,520 Mae'n dychwelyd y cyfeiriad y llinyn yn y cof, y cyfeiriad unigryw. 631 00:25:22,520 --> 00:25:24,820 Daven yn byw yn 33 Oxford Street. 632 00:25:24,820 --> 00:25:29,310 Ond yn fwy cryno, Gavin yn byw yn y 0x1, Cyfeiriad Rhif Un. 633 00:25:29,310 --> 00:25:32,280 >> Felly, yr hyn sy'n cael ei roi yn y blwch bach wedyn, i fod yn glir, 634 00:25:32,280 --> 00:25:35,930 yn unig yw gyfeiriad y llinyn. 635 00:25:35,930 --> 00:25:38,110 Felly yr holl amser hwn, mae hyn wedi bod yn digwydd. 636 00:25:38,110 --> 00:25:41,650 Ond beth mae hyn yn awgrymu yn awr yw bod os bydd yr holl s wedi 637 00:25:41,650 --> 00:25:44,710 yw nifer tu mewn iddo, pwy sydd i roi'r gorau i chi, y rhaglennydd, 638 00:25:44,710 --> 00:25:47,970 rhag rhoi unrhyw rif mewn unrhyw newidyn a dim ond neidio 639 00:25:47,970 --> 00:25:49,080 i'r darn o gof? 640 00:25:49,080 --> 00:25:51,320 Ac yn wir, byddwn yn gweld mae hynny'n fygythiad tro nesaf. 641 00:25:51,320 --> 00:25:53,500 >> Ond am y tro, mae hyn yn teimlo'n annigonol. 642 00:25:53,500 --> 00:25:55,630 Os wyf yn dweud, mynd i mi yn llinyn, byddwch yn rhoi Daven mi. 643 00:25:55,630 --> 00:25:57,230 Ond nad ydych yn wir yn rhoi Daven mi. 644 00:25:57,230 --> 00:25:59,310 Y cyfan sydd ei roi i mi yn gyfeiriad Daven yn. 645 00:25:59,310 --> 00:26:04,310 Sut ydw i'n wedyn yn gwybod i sicrwydd lle mae Daven dechrau ac ends-- 646 00:26:04,310 --> 00:26:07,140 y stori yn mynd weird-- lle mae Daven dechrau ac yn gorffen, 647 00:26:07,140 --> 00:26:10,435 ac yna, mae'r nesaf llinyn mewn cof yn dechrau? 648 00:26:10,435 --> 00:26:11,520 649 00:26:11,520 --> 00:26:13,620 >> Wel, os ydych yn dosbarthu mi ddechrau Daven, 650 00:26:13,620 --> 00:26:17,230 yn y bôn, sut ydw i'n gwybod lle diwedd ei enw yw? 651 00:26:17,230 --> 00:26:20,550 Bod cymeriad null arbennig, sy'n yn oed yn fwy pwysig yn awr 652 00:26:20,550 --> 00:26:23,040 os llinynnau o dan y cwfl yn cael eu nodi yn syml 653 00:26:23,040 --> 00:26:25,820 unigryw gan eu lleoliad yn y cof. 654 00:26:25,820 --> 00:26:28,130 Felly yr holl amser hwn, dyna beth sydd wedi bod yn digwydd. 655 00:26:28,130 --> 00:26:32,470 >> Felly, pan fyddwn yn edrych nawr ar y cod yma, eglurwch 656 00:26:32,470 --> 00:26:35,790 os byddech y byg yn llinell 26. 657 00:26:35,790 --> 00:26:39,560 Pam mae Zamyla a Zamyla yn wahanol? 658 00:26:39,560 --> 00:26:41,330 Pam mae Gabe a Gabe yn wahanol? 659 00:26:41,330 --> 00:26:42,154 Yeah, yn y cefn. 660 00:26:42,154 --> 00:26:43,390 >> CYNULLEIDFA: Mae ganddynt wahanol gyfeiriadau. 661 00:26:43,390 --> 00:26:45,931 >> DAVID J. Malan: Yn syml oherwydd ganddynt wahanol gyfeiriadau. 662 00:26:45,931 --> 00:26:48,820 Oherwydd pan fyddwch yn ffonio GetString unwaith eto, y byddaf yn ei wneud yn gyflym yma, 663 00:26:48,820 --> 00:26:52,870 os yw hyn yn yr ail linell, llinyn t, fel y gwneuthum yn y rhaglen honno, 664 00:26:52,870 --> 00:26:55,030 hafal alwad arall i GetString. 665 00:26:55,030 --> 00:26:56,370 666 00:26:56,370 --> 00:26:58,670 Y tro nesaf y byddaf yn galw GetString, dw i'n mynd 667 00:26:58,670 --> 00:27:00,190 i gael darn gwahanol o gof. 668 00:27:00,190 --> 00:27:02,220 >> GetString chaniateir i ofyn i'r gweithredu 669 00:27:02,220 --> 00:27:03,800 system ar gyfer mwy a mwy o gof. 670 00:27:03,800 --> 00:27:07,894 Dyw hi ddim yn mynd i ailddefnyddio yr un fath chwe bytes bob tro. 671 00:27:07,894 --> 00:27:09,810 Mae'n mynd i gael newydd darn o gof, a oedd 672 00:27:09,810 --> 00:27:12,780 golygu t yn mynd i gael rhywfaint o werth arall dros yma. 673 00:27:12,780 --> 00:27:15,380 >> Felly, pan fyddaf yn ei wneud s hafal = t, nad ydych yn cymharu 674 00:27:15,380 --> 00:27:17,880 D yn erbyn hyn ac A yn erbyn hyn a V yn erbyn hyn. 675 00:27:17,880 --> 00:27:19,588 Rydych yn cymharu hyn erbyn hyn, a oedd yn 676 00:27:19,588 --> 00:27:24,020 dweud y gwir yn eithaf useless-- useful-- yn eithaf 'n annefnyddiol, oherwydd sydd wir 677 00:27:24,020 --> 00:27:25,830 gofalu lle mae'r llinynnau mewn cof? 678 00:27:25,830 --> 00:27:26,850 >> Ac yn wir, nid ydym wedi. 679 00:27:26,850 --> 00:27:28,980 Ac nid ydym yn mynd i cychwyn arbennig o ofalgar. 680 00:27:28,980 --> 00:27:34,180 Dim ond i'r graddau y gall bygiau godi a gall bygythiadau diogelwch godi ewyllys 681 00:27:34,180 --> 00:27:36,100 yr ydym mewn gwirionedd yn dechrau i ofalu am hyn. 682 00:27:36,100 --> 00:27:37,230 Felly gadewch i ni atgyweiria hon broblem. 683 00:27:37,230 --> 00:27:39,650 Troi allan, byddwch yn atgyweiria 'super yn syml. 684 00:27:39,650 --> 00:27:42,600 >> A gadewch i ni mewn gwirionedd, cyn i mi datgelu bod eto, beth fyddai 685 00:27:42,600 --> 00:27:47,170 chi ei wneud os mewn dosbarth CS50, a bu'n rhaid i chi weithredu 686 00:27:47,170 --> 00:27:48,600 cymhariaeth yn erbyn dau llinynnau. 687 00:27:48,600 --> 00:27:51,440 Rydych yn amlwg nad all jyst arfer s hafal i = t. 688 00:27:51,440 --> 00:27:54,090 Ond dim ond yn rhesymegol, sut byddech yn cymharu llinyn hwn 689 00:27:54,090 --> 00:27:56,370 yn erbyn y llinyn hwn gan ddefnyddio C cod? 690 00:27:56,370 --> 00:27:56,880 Yeah. 691 00:27:56,880 --> 00:27:58,780 >> CYNULLEIDFA: Dim ond gwneud y ar gyfer dolen [Anghlywadwy] 692 00:27:58,780 --> 00:28:00,670 693 00:28:00,670 --> 00:28:01,670 DAVID J. Malan: Perffaith. 694 00:28:01,670 --> 00:28:02,900 CYNULLEIDFA: [Anghlywadwy] 695 00:28:02,900 --> 00:28:03,310 DAVID J. Malan: Yeah. 696 00:28:03,310 --> 00:28:05,390 Dim ond defnyddio ar gyfer dolen neu tra dolen neu beth bynnag. 697 00:28:05,390 --> 00:28:08,710 Ond dim ond yn berthnasol y syniad sylfaenol, os mae hwn yn dalp o gof neu arae 698 00:28:08,710 --> 00:28:11,590 ac mae hyn yn, ailadrodd drosodd y ddau ar yr un pryd. 699 00:28:11,590 --> 00:28:12,960 Ac yn union yn cymharu y llythrennau. 700 00:28:12,960 --> 00:28:14,260 >> Ac mae'n rhaid i chi fod yn bach yn ofalus, oherwydd eich bod 701 00:28:14,260 --> 00:28:16,247 nad ydych am un bys i fynd heibio i'r arall 702 00:28:16,247 --> 00:28:18,080 oherwydd bod un llinyn yn hirach na'r llall. 703 00:28:18,080 --> 00:28:21,380 Felly, rydych chi'n mynd i fod eisiau i wirio am mae hyn werth arbennig ar y diwedd, null. 704 00:28:21,380 --> 00:28:24,017 Ond y mae mewn gwirionedd, yn y diwedd, mor syml â hynny. 705 00:28:24,017 --> 00:28:26,100 Ac yn dweud y gwir, nid oes angen i ni ailddyfeisio'r olwyn hynny. 706 00:28:26,100 --> 00:28:27,960 Dyma Fersiwn Dau. 707 00:28:27,960 --> 00:28:32,910 A hyn yr wyf i'n mynd i ddweud yma yw bod yn lle gymharu s hafal = t, 708 00:28:32,910 --> 00:28:38,964 Im 'yn lle mynd i ddweud, os bydd llinyn cymhariaeth o s t atalnod hafal = 0. 709 00:28:38,964 --> 00:28:40,130 Yn awr, yr hyn a llinyn yn cymharu? 710 00:28:40,130 --> 00:28:43,046 >> Mae'n troi allan, mae'n swyddogaeth sy'n hon gyda C, y mae eu pwrpas mewn bywyd 711 00:28:43,046 --> 00:28:44,650 yw cymharu dau llinynnau. 712 00:28:44,650 --> 00:28:48,300 Ac dro cymharu, os ydym yn darllen ei dudalen neu ddogfennaeth neu CS50 ddyn 713 00:28:48,300 --> 00:28:50,630 cyfeirio, bydd yn yn syml yn dweud bod cynnwrf chi 714 00:28:50,630 --> 00:28:55,730 cymharu ffurflenni naill ai negyddol Rhif neu nifer gadarnhaol neu sero, 715 00:28:55,730 --> 00:28:57,660 lle y sero yn golygu eu bod yn gyfartal. 716 00:28:57,660 --> 00:28:58,570 >> Felly dim ond dyfalu. 717 00:28:58,570 --> 00:29:00,390 Hyn y gallai ei olygu os droi ffurflenni cymharu 718 00:29:00,390 --> 00:29:02,110 gwerth negyddol neu werth positif? 719 00:29:02,110 --> 00:29:02,785 720 00:29:02,785 --> 00:29:04,285 CYNULLEIDFA: Mwy na neu'n llai na. 721 00:29:04,285 --> 00:29:05,570 DAVID J. Malan: Yeah, fwy na neu'n llai na. 722 00:29:05,570 --> 00:29:08,640 Felly, os ydych am roi trefn cyfan criw o dannau mewn dictionary-- 723 00:29:08,640 --> 00:29:12,975 fel y byddwn yn y pen draw i lawr y road-- swyddogaeth perffaith i'w ddefnyddio o bosibl, 724 00:29:12,975 --> 00:29:15,850 oherwydd ei fod yn mynd i wneud hynny cymhariaeth o linynnau i chi, a dweud 725 00:29:15,850 --> 00:29:20,060 ydych yn gwneud yn dod gerbron b, neu a yw b yn dod gerbron yn nhrefn yr wyddor. 726 00:29:20,060 --> 00:29:21,490 Gallwn wneud yn union hynny. 727 00:29:21,490 --> 00:29:23,620 >> Ac rybudd Fe wnes un arall peth yn yr enghraifft hon. 728 00:29:23,620 --> 00:29:26,870 Beth arall sydd wedi newid yn uwch hyd yn hyn yn brif swyddogaeth? 729 00:29:26,870 --> 00:29:28,500 730 00:29:28,500 --> 00:29:29,350 Torgoch *. 731 00:29:29,350 --> 00:29:31,150 Ac mae hyn yn bod gorwedd gwyn arall. 732 00:29:31,150 --> 00:29:33,750 Pob yr amser hwn, pan eich bod wedi bod yn ysgrifennu llinyn, 733 00:29:33,750 --> 00:29:38,350 rydym wedi bod yn ail-ysgrifennu ddirgel llinyn fel torgoch * fel bod chlang mewn gwirionedd 734 00:29:38,350 --> 00:29:39,270 deall chi. 735 00:29:39,270 --> 00:29:42,450 >> Mewn geiriau eraill, yn CS50.h ac fel y byddwn yn y pen draw yn gweld, 736 00:29:42,450 --> 00:29:45,950 gwnaethom cyfystyr o'r enw llinyn dyna yr un peth â torgoch *. 737 00:29:45,950 --> 00:29:49,910 Ac am y tro, yn gwybod yn unig fod y *, Yn y cyd-destun hwn, o leiaf, 738 00:29:49,910 --> 00:29:51,286 golygu y cyfeiriad. 739 00:29:51,286 --> 00:29:52,210 >> Mae cyfeiriad yr hyn? 740 00:29:52,210 --> 00:29:56,390 Wel, mae'r ffaith fy mod wedi dweud torgoch *, ac nid int * neu arnofio *, 741 00:29:56,390 --> 00:30:00,820 golygu bod torgoch * yn y cyfeiriad o torgoch. 742 00:30:00,820 --> 00:30:06,770 Felly bocs bach hyn yma, aka llinyn, yn wirioneddol o'r math char *, 743 00:30:06,770 --> 00:30:10,490 sydd, yn syml, yn ffordd ffansi o ddweud, yn y blwch hwn yn mynd yn gyfeiriad. 744 00:30:10,490 --> 00:30:12,430 A beth mae hynny'n ei gyfeiriad cyfeirio at? 745 00:30:12,430 --> 00:30:13,780 Mae'n debyg, mae torgoch. 746 00:30:13,780 --> 00:30:16,410 >> Ond gallem gwbl cael int * a phethau eraill. 747 00:30:16,410 --> 00:30:20,790 Ond am nawr, torgoch * sydd mewn gwirionedd yn y rhan fwyaf o syml ac yn un o ddiddordeb. 748 00:30:20,790 --> 00:30:23,310 Felly, y broblem hon yn mynd i godi, fodd bynnag, unwaith eto. 749 00:30:23,310 --> 00:30:24,830 >> Gadewch i ni dybio fy mod yn agor y rhaglen hon. 750 00:30:24,830 --> 00:30:27,670 Gadewch i ni weld os erbyn hyn gallwn ragweld beth sydd o'i le ar y cod hwn. 751 00:30:27,670 --> 00:30:31,140 Felly, yn y rhaglen hon, copïo-0, rwy'n mynd i fynd yn ei flaen ar ôl tro yn galw 752 00:30:31,140 --> 00:30:34,190 GetString a storio'r gwerth yn s. 753 00:30:34,190 --> 00:30:38,800 >> Ac yna, pam ydw i'n gwneud hyn, yn union fel atgof o wythnosau diwethaf? 754 00:30:38,800 --> 00:30:40,960 Fe wnaethom ddweud bod GetString weithiau yn dychwelyd null. 755 00:30:40,960 --> 00:30:42,793 Beth mae'n ei olygu os GetString yn dychwelyd null? 756 00:30:42,793 --> 00:30:45,040 757 00:30:45,040 --> 00:30:46,034 Aeth rhywbeth o'i le. 758 00:30:46,034 --> 00:30:48,950 Mae'n debyg ei fod yn golygu bod y llinyn yn rhy mawr, allan y cyfrifiadur yn y cof. 759 00:30:48,950 --> 00:30:51,724 Mae'n digwydd super, super, super anaml, ond gallai ddigwydd. 760 00:30:51,724 --> 00:30:53,890 Rydym am i wirio am iddo, a dyna'r cyfan yr ydym yn ei wneud. 761 00:30:53,890 --> 00:30:57,910 >> Oherwydd byddwn yn gweld yn awr, os nad ydych yn ei wneud dechrau gwirio fel arfer ar gyfer pethau 762 00:30:57,910 --> 00:31:00,870 fel null, gallech chi mewn gwirionedd yn dechrau mynd 763 00:31:00,870 --> 00:31:03,106 i gyfeiriadau yn y cof sydd yn annilys. 764 00:31:03,106 --> 00:31:05,980 A ydych yn mynd i ddechrau ysgogi mwy a mwy o namau segmentu. 765 00:31:05,980 --> 00:31:08,360 Neu mewn Mac neu PC, dim ond gan achosi cyfrifiadur i hongian 766 00:31:08,360 --> 00:31:10,340 neu raglen i rewi, o bosibl. 767 00:31:10,340 --> 00:31:14,930 >> Felly nawr, gallaf wneud cais amdano yn y copi-0.c, fy mod wyf yn mynd i gopïo llinynnau hyn drwy 768 00:31:14,930 --> 00:31:15,685 o linell 28. 769 00:31:15,685 --> 00:31:16,850 770 00:31:16,850 --> 00:31:18,750 Ac yna, dw i'n mynd i hawlio ar y gwaelod 771 00:31:18,750 --> 00:31:21,430 yma fy mod i'n mynd i newid un ohonynt. 772 00:31:21,430 --> 00:31:22,330 >> Felly sylwi ar hyn. 773 00:31:22,330 --> 00:31:24,370 Rydw i'n galw ein hen gyfaill strlen. 774 00:31:24,370 --> 00:31:28,960 Ac yn union esbonio yn Saesneg beth mae hyn yn llinell 34 yn ei wneud? 775 00:31:28,960 --> 00:31:32,480 Beth mae t braced 0 gynrychioli ar y chwith. 776 00:31:32,480 --> 00:31:32,980 Yeah. 777 00:31:32,980 --> 00:31:34,339 >> CYNULLEIDFA: cymeriad cyntaf o t? 778 00:31:34,339 --> 00:31:35,880 DAVID J. Malan: cymeriad cyntaf o t. 779 00:31:35,880 --> 00:31:36,379 Dyna ni. 780 00:31:36,379 --> 00:31:40,024 Cymeriad cyntaf o t, yr wyf am i aseinio y fersiwn priflythyren 781 00:31:40,024 --> 00:31:41,190 y nod cyntaf mewn t. 782 00:31:41,190 --> 00:31:43,200 Felly, mae hyn yn manteisio y llythyr cyntaf. 783 00:31:43,200 --> 00:31:46,340 Ac yna, y peth olaf un yr wyf yn ei wneud yn y rhaglen hon yw i'n hawlio dyma 784 00:31:46,340 --> 00:31:50,340 y gwreiddiol, s, a dyma y copi, t. 785 00:31:50,340 --> 00:31:54,610 >> Ond yn seiliedig ar y stori rydym yn unig gwybod am yr hyn y llinynnau gwirionedd, 786 00:31:54,610 --> 00:31:57,520 beth yw llinell 28 mewn gwirionedd yn ei wneud, a beth yw 787 00:31:57,520 --> 00:31:59,405 y byg ganlyniad mynd i fod ar y sgrin? 788 00:31:59,405 --> 00:32:01,300 789 00:32:01,300 --> 00:32:03,500 >> Felly, yn gyntaf, y cwestiwn cyntaf, 28. 790 00:32:03,500 --> 00:32:09,040 Beth yw t llinyn = s 'n sylweddol yn ei wneud? 791 00:32:09,040 --> 00:32:16,430 Os byddwn yn ei gael ar yr ochr chwith ochr yma t string = s; 792 00:32:16,430 --> 00:32:19,400 sy'n rhoi un blwch i mi yma ac un bocs yma. 793 00:32:19,400 --> 00:32:25,530 Ac yn debyg y cyfeiriad hwn yn 0x, gadewch i ni ddweud, 50 y tro hwn, fympwyol. 794 00:32:25,530 --> 00:32:28,847 Beth mae t llinyn = s ei wneud o dan y cwfl? 795 00:32:28,847 --> 00:32:30,340 >> CYNULLEIDFA: [Anghlywadwy] 796 00:32:30,340 --> 00:32:34,100 >> DAVID J. Malan: Mae'n storio'r cof rhoi sylw yno, felly 0x50 yn mynd yno. 797 00:32:34,100 --> 00:32:37,980 Felly os nawr, byddaf yn mynd i'r cyntaf cymeriad mewn t ac yn priflythyren iddo, 798 00:32:37,980 --> 00:32:39,535 beth ydw i'n ei wneud yn effeithiol i s? 799 00:32:39,535 --> 00:32:41,300 800 00:32:41,300 --> 00:32:43,450 Dwi wir yn gwneud yr un peth, dde? 801 00:32:43,450 --> 00:32:47,680 Oherwydd os Cyfeiriad 0x50-- a chyfiawn, yr wyf yn Nid oes rhaid i llawer o le ar y bwrdd yma, 802 00:32:47,680 --> 00:32:51,750 ond yn cymryd yn ganiataol bod hyn yn 0x50 i lawr yma, rhywle er cof am fy cyfrifiadur. 803 00:32:51,750 --> 00:32:55,825 >> Ac yr wyf wedi, er enghraifft, Gabe mewn llythrennau bach yma, fel hyn. 804 00:32:55,825 --> 00:32:57,120 805 00:32:57,120 --> 00:33:01,980 Ac yr wyf wedi dweud t braced 0 yn cael eu cyfalafu. 806 00:33:01,980 --> 00:33:04,860 Wel, t braced 0 yn y llythyr cyntaf yn t. 807 00:33:04,860 --> 00:33:07,840 Cyn lleied o g yn mynd i dod G. mawr Ond y broblem 808 00:33:07,840 --> 00:33:09,410 yw, beth mae hefyd yn tynnu sylw at s? 809 00:33:09,410 --> 00:33:10,300 >> CYNULLEIDFA: Yr un peth. 810 00:33:10,300 --> 00:33:11,841 >> DAVID J. Malan: Mae'r un peth yn union. 811 00:33:11,841 --> 00:33:16,342 Felly eglurhad syml efallai, hyd yn oed os yw'r gystrawen yn ychydig yn od. 812 00:33:16,342 --> 00:33:17,050 Felly gadewch i ni wneud hyn. 813 00:33:17,050 --> 00:33:20,210 Gwneud copi-0 ac yna ./copy-0. 814 00:33:20,210 --> 00:33:21,820 815 00:33:21,820 --> 00:33:24,110 Dweud rhywbeth: Gabe. 816 00:33:24,110 --> 00:33:26,760 Ac yn anffodus, y ddau o nhw bellach wedi cael eu cyfalafu, 817 00:33:26,760 --> 00:33:29,500 ond ar gyfer y sylfaenol rheswm ein bod yn syml 818 00:33:29,500 --> 00:33:32,350 bellach yn delio â chyfeiriadau. 819 00:33:32,350 --> 00:33:36,470 >> Felly sut rydym yn dechrau address-- dim pun intended-- 820 00:33:36,470 --> 00:33:39,270 sut allwn ni ddechrau mynd i'r afael broblem arbennig hon? 821 00:33:39,270 --> 00:33:44,400 Wel, mewn copy1.c, mae pethau'n mynd i gael ychydig yn fwy cymhleth. 822 00:33:44,400 --> 00:33:49,310 Ond byddwn yn hawlio gysyniadol ateb syml. 823 00:33:49,310 --> 00:33:50,852 >> Mor galed i fynd ar yr olwg gyntaf. 824 00:33:50,852 --> 00:33:53,560 Ddim yn mynd i fod yn hawdd i'r cyntaf tro y byddwch yn ei deipio allan, efallai, 825 00:33:53,560 --> 00:33:57,440 ond os bydd y broblem yw bod yn syml yn gwneud t = s yn unig 826 00:33:57,440 --> 00:33:59,694 copïau y cyfeiriad, yr hyn, eto os gallaf ddewis ar chi, 827 00:33:59,694 --> 00:34:02,110 yn mynd i fod yr ateb am gwirionedd yn copïo llinyn? 828 00:34:02,110 --> 00:34:04,906 829 00:34:04,906 --> 00:34:06,770 >> CYNULLEIDFA: Yr ydym yn ôl pob tebyg chi helpu defnyddio dolen eto. 830 00:34:06,770 --> 00:34:06,890 >> DAVID J. Malan: Yeah. 831 00:34:06,890 --> 00:34:08,390 Felly, rydym yn mynd i angen dolen eto. 832 00:34:08,390 --> 00:34:11,800 Ac oherwydd os ydym am i gopïo yn s llinyn i mewn i linyn arall, 833 00:34:11,800 --> 00:34:14,120 yr ydym yn ôl pob tebyg am ei wneud cymeriad gan gymeriad. 834 00:34:14,120 --> 00:34:17,199 Ond y broblem yw, os mae hyn yn wreiddiol s, 835 00:34:17,199 --> 00:34:22,159 yn awr mae angen i ni ddechrau yn benodol dyrannu cof ar gyfer t. 836 00:34:22,159 --> 00:34:24,320 >> Mewn geiriau eraill, gadewch i ni ail-lunio hyn am y tro olaf. 837 00:34:24,320 --> 00:34:28,659 Os yw hyn yn llinyn s = GetString. 838 00:34:28,659 --> 00:34:30,956 839 00:34:30,956 --> 00:34:32,455 A gadewch i ni roi hyn i fyny yma, yn ogystal. 840 00:34:32,455 --> 00:34:36,639 841 00:34:36,639 --> 00:34:37,420 Mae hyn yn GetString. 842 00:34:37,420 --> 00:34:39,070 843 00:34:39,070 --> 00:34:43,860 Ac yna, mae'r darlun ar gyfer rhywbeth fel yna yn mynd i fod fel o'r blaen, 844 00:34:43,860 --> 00:34:44,360 g-a-b-e / 0. 845 00:34:44,360 --> 00:34:47,294 846 00:34:47,294 --> 00:34:48,960 Sy'n edrych yn rhywbeth bach fel hyn. 847 00:34:48,960 --> 00:34:53,650 Ac s felly, rydym yn galw hyn 0x50, ac mae hynny'n mynd i fod yn 51, 52. 848 00:34:53,650 --> 00:34:54,409 >> Felly, mae hyn yn 0x50. 849 00:34:54,409 --> 00:34:55,679 850 00:34:55,679 --> 00:34:59,690 Ac yna, yr wyf yn gwneud t llinyn. 851 00:34:59,690 --> 00:35:02,450 Er cof, mae hynny'n jyst yn mynd i roi ychydig o sgwâr fel hyn i mi. 852 00:35:02,450 --> 00:35:04,080 Felly beth yw'r cam allweddol yn awr? 853 00:35:04,080 --> 00:35:09,870 Os ydw i eisiau i gopïo s i t, beth wag oes angen i ni lenwi fan hyn? 854 00:35:09,870 --> 00:35:12,050 Neu beth sydd angen i ni'n ei wneud ar lefel uchel? 855 00:35:12,050 --> 00:35:14,101 856 00:35:14,101 --> 00:35:14,600 Yeah? 857 00:35:14,600 --> 00:35:16,200 858 00:35:16,200 --> 00:35:17,020 Rhywun? 859 00:35:17,020 --> 00:35:17,690 Yeah. 860 00:35:17,690 --> 00:35:19,214 >> CYNULLEIDFA: Mae angen i ni [Anghlywadwy]. 861 00:35:19,214 --> 00:35:21,380 DAVID J. Malan: Yeah, rydym yn Mae angen i lenwi'r wag hon. 862 00:35:21,380 --> 00:35:24,340 Ni allaf gopïo ac yna manteisio enw Gabe yn 863 00:35:24,340 --> 00:35:28,120 nes i mi ofyn i'r system weithredu ar gyfer darn arall o gof 864 00:35:28,120 --> 00:35:30,640 dyna o leiaf mor fawr â'r gwreiddiol. 865 00:35:30,640 --> 00:35:32,130 Fel bod ein gadael gyda chwestiwn. 866 00:35:32,130 --> 00:35:36,080 >> Sut ydw i'n gofyn i'r system weithredu nad dim ond am pointer-- bach syml 867 00:35:36,080 --> 00:35:38,530 fel y gelwir hyn yn, yn cyfeiriad, nid pointer-- 868 00:35:38,530 --> 00:35:40,980 am focs bach syml fel hyn a elwir yn llinyn? 869 00:35:40,980 --> 00:35:44,200 Sut ydw i'n gofyn i'r gweithredu system ar gyfer darn mawr o gof? 870 00:35:44,200 --> 00:35:48,430 Hyd yn hyn, rwyf wedi gotten dim ond y cefn anuniongyrchol drwy ffonio GetString. 871 00:35:48,430 --> 00:35:50,740 Felly sut yn GetString hyd yn oed yn cael ei gof? 872 00:35:50,740 --> 00:35:53,430 >> Wel, mae'n ymddangos fod yna y swyddogaeth eraill yma 873 00:35:53,430 --> 00:35:55,160 y byddwn ni nawr yn dechrau defnyddio. 874 00:35:55,160 --> 00:35:59,780 Yn awr, mae hyn yn edrych than-- ffordd fwy cryptig a fi yw'r unig un sy'n gallu gweld iddo-- 875 00:35:59,780 --> 00:36:03,150 y llinell hon yn edrych yn ffordd fwy cryptig Yna, dylai ar yr olwg gyntaf. 876 00:36:03,150 --> 00:36:04,650 Ond gadewch i ni tynnu ar wahân. 877 00:36:04,650 --> 00:36:07,950 >> Ar yr ochr chwith, mae gen i torgoch * t. 878 00:36:07,950 --> 00:36:13,280 Felly, yn y Saesneg, gadewch i ni ddechrau i lunio brawddegau priodol mewn jargon technegol. 879 00:36:13,280 --> 00:36:19,757 Felly, mae hyn yn dyrannu amrywiol o fath torgoch * elwir t. 880 00:36:19,757 --> 00:36:21,090 Yn awr, beth mae hynny'n ei olygu mewn gwirionedd? 881 00:36:21,090 --> 00:36:23,881 >> Wel, mae hynny'n golygu, beth ydw i'n mynd i roi mewn newidyn yma o'r enw t? 882 00:36:23,881 --> 00:36:24,780 883 00:36:24,780 --> 00:36:26,402 Mae cyfeiriad o torgoch. 884 00:36:26,402 --> 00:36:28,360 Felly dyna dim ond y symlach, mwy o ffordd resymol 885 00:36:28,360 --> 00:36:29,930 o ddisgrifio ochr chwith. 886 00:36:29,930 --> 00:36:32,890 Felly mae hynny'n creu blwch hwn yma yn unig. 887 00:36:32,890 --> 00:36:34,760 Felly yr ochr dde, yn ôl pob tebyg, yn mynd 888 00:36:34,760 --> 00:36:37,170 i ddyrannu bod mwy darn o gof sut? 889 00:36:37,170 --> 00:36:38,340 Felly gadewch i ni tynnu hyn ar wahân. 890 00:36:38,340 --> 00:36:41,131 >> Mae'n llethol ar yr olwg gyntaf, ond beth sy'n mynd ymlaen y tu mewn fan hyn? 891 00:36:41,131 --> 00:36:43,740 Yn gyntaf, mae malloc, sy'n yn ôl pob golwg mae ein cyfaill newydd, 892 00:36:43,740 --> 00:36:45,450 "Cof dyrannu." 893 00:36:45,450 --> 00:36:49,560 Felly mae hwn yn y ddadl sy'n cael ei basio i mewn iddo, felly mae'n ddadl eithaf mawr. 894 00:36:49,560 --> 00:36:50,970 Felly gadewch i ni tynnu hyn ar wahân. 895 00:36:50,970 --> 00:36:53,410 >> strlen o s, wrth gwrs, yn cynrychioli the-- 896 00:36:53,410 --> 00:36:54,142 897 00:36:54,142 --> 00:36:55,600 CYNULLEIDFA: Y nifer o gymeriadau. 898 00:36:55,600 --> 00:36:56,710 DAVID J. Malan: Dim ond y nifer o gymeriadau yn s. 899 00:36:56,710 --> 00:36:59,040 Felly, hyd y s, y llinyn gwreiddiol. 900 00:36:59,040 --> 00:37:00,350 Felly G-a-b-e. 901 00:37:00,350 --> 00:37:02,320 Felly mae'n debyg pedwar yn yr achos hwn. 902 00:37:02,320 --> 00:37:05,485 Pam ydw i'n ei wneud +1 ar ôl ffonio strlen o s? 903 00:37:05,485 --> 00:37:06,360 CYNULLEIDFA: [Anghlywadwy] 904 00:37:06,360 --> 00:37:07,590 DAVID J. Malan: Ar gyfer y cymeriad null arbennig. 905 00:37:07,590 --> 00:37:11,260 Os byddwch yn gofyn i mi beth yw hyd y Gabe yn enw, yr wyf yn mynd i ddweud pedwar. 906 00:37:11,260 --> 00:37:14,480 O dan y cwfl, fodd bynnag, mae angen i mi hynny pumed beit ar gyfer y cymeriad null. 907 00:37:14,480 --> 00:37:16,100 Felly dyna pam fy mod yn gwneud y 1. 908 00:37:16,100 --> 00:37:21,730 >> Yn awr rhag ofn eich bod yn rhedeg hyn rhaglen ar gyfrifiadur ac eithrio, yn dweud, 909 00:37:21,730 --> 00:37:24,610 y peiriant CS50, lle yr un maint â torgoch 910 00:37:24,610 --> 00:37:26,350 Gallai fod yn wahanol o fy computer-- hun 911 00:37:26,350 --> 00:37:30,590 troi allan y gallaf alw hyn sizeof gweithredwr, gofynnwch y cyfrifiadur, 912 00:37:30,590 --> 00:37:32,870 beth yw yr un maint â CHAR ar y cyfrifiadur hwn? 913 00:37:32,870 --> 00:37:37,400 >> Ac trwy luosi pump yn hyn enghraifft drwy yr un maint â torgoch, sy'n 914 00:37:37,400 --> 00:37:40,440 ar y rhan fwyaf o gyfrifiaduron bydd yn unig fod yn un, malloc 915 00:37:40,440 --> 00:37:44,830 yn mynd i ddyrannu i mi hyn fawr darn o gof dros yma ar y dde. 916 00:37:44,830 --> 00:37:47,140 Ac mae'n mynd i return-- mae'n function-- felly mae'n 917 00:37:47,140 --> 00:37:48,265 mynd i ddychwelyd i mi beth? 918 00:37:48,265 --> 00:37:50,914 919 00:37:50,914 --> 00:37:51,830 CYNULLEIDFA: Gall y cyfeiriad? 920 00:37:51,830 --> 00:37:53,709 DAVID J. Malan: Y cyfeiriad yr hyn? 921 00:37:53,709 --> 00:37:55,250 CYNULLEIDFA: O'r cof ei ddyrannu? 922 00:37:55,250 --> 00:37:56,450 DAVID J. Malan: O'r cof ei ddyrannu. 923 00:37:56,450 --> 00:37:59,189 Felly, nid oes gennyf unrhyw syniad, dweud y gwir, lle mae hyn yn mynd i roi diwedd ar i fyny. 924 00:37:59,189 --> 00:38:01,480 Rydw i'n mynd i gynnig bod mae'n mynd i roi diwedd ar i fyny at 0x88. 925 00:38:01,480 --> 00:38:02,770 926 00:38:02,770 --> 00:38:06,009 Hollol fympwyol, ond rhywle heblaw 0x50, 927 00:38:06,009 --> 00:38:08,800 oherwydd bod y system weithredu, beth Windows a Mac OS ei wneud i mi, yw 928 00:38:08,800 --> 00:38:11,230 wneud yn siŵr ei fod yn rhoi mi gwahanol darnau o RAM. 929 00:38:11,230 --> 00:38:14,210 >> Felly, mae hyn yw gwerth lle mae hyn Gallai darn o gof yn y pen draw. 930 00:38:14,210 --> 00:38:16,060 Felly, mae hyn yn beth yn dod i ben i fyny yn fan hyn, 0x88. 931 00:38:16,060 --> 00:38:17,480 932 00:38:17,480 --> 00:38:21,570 Felly, yn awr yn glir, gall yr wyf yn deall nad yw hyn yr un peth â hyn, 933 00:38:21,570 --> 00:38:23,960 oherwydd eu bod yn pwyntio at gwahanol darnau o gof. 934 00:38:23,960 --> 00:38:29,980 Felly os wyf yn awr mewn gwirionedd yn awyddus i gopïo hyn mewn, gadewch i ni wneud eich ateb a gynigir. 935 00:38:29,980 --> 00:38:36,870 >> Gadewch i jyst yn mynd, creu ar gyfer dolen, ac yn gwneud t braced ff yn cael s braced i. 936 00:38:36,870 --> 00:38:39,760 Oherwydd erbyn hyn y gallaf ddefnyddio arae-fel hyn nodiant, 937 00:38:39,760 --> 00:38:43,390 oherwydd er malloc iawn generig yn dyrannu cof i mi, 938 00:38:43,390 --> 00:38:45,290 cof yw beit unig cyffiniol. 939 00:38:45,290 --> 00:38:47,240 Beit, beit, beit, gefn wrth gefn wrth gefn. 940 00:38:47,240 --> 00:38:50,030 >> Gallaf yn sicr fel rhaglennydd drin fel arae, a oedd yn 941 00:38:50,030 --> 00:38:55,090 golygu y gallaf ddefnyddio hyn yn olaf gyfarwydd nodiant o rai cromfachau sgwâr. 942 00:38:55,090 --> 00:38:56,462 943 00:38:56,462 --> 00:39:00,020 >> Felly, gadewch i mi oedi yno, oherwydd mae hyn yn llawer i gyd ar unwaith, hyd yn oed 944 00:39:00,020 --> 00:39:03,530 er bod y syniad sylfaenol i ailadrodd yw y llinyn, i gyd y tro hwn, 945 00:39:03,530 --> 00:39:05,550 Nid yn fath ddata newydd fel y cyfryw. 946 00:39:05,550 --> 00:39:10,150 Mae'n dim ond pwyntydd fel y'u gelwir, cyfeiriad o gymeriad, 947 00:39:10,150 --> 00:39:12,650 a dim ond yn golygu ei fod yn rhif bod gan gonfensiwn dynol 948 00:39:12,650 --> 00:39:15,350 rydym yn tueddu i ysgrifennu fel 0x rhywbeth. 949 00:39:15,350 --> 00:39:18,590 >> Ond mae'r un nifer, fel 33 Oxford Street, 950 00:39:18,590 --> 00:39:20,530 sy'n digwydd bod yn y Cyfeiriad adeiladau CS yn. 951 00:39:20,530 --> 00:39:22,000 952 00:39:22,000 --> 00:39:23,545 Unrhyw gwestiynau ar y manylion hyn? 953 00:39:23,545 --> 00:39:24,790 954 00:39:24,790 --> 00:39:25,289 Yeah? 955 00:39:25,289 --> 00:39:28,530 >> CYNULLEIDFA: Pam rydym yn gwirio gyfer t cyfartal i null? 956 00:39:28,530 --> 00:39:30,740 >> DAVID J. Malan: Pam rydyn ni'n gwirio am t cyfartal i null? 957 00:39:30,740 --> 00:39:33,250 Os byddwn yn darllen y documentation-- question-- gwych i malloc, 958 00:39:33,250 --> 00:39:37,020 mae'n mynd i ddweud yn y print mân, Weithiau efallai malloc dychwelyd null, 959 00:39:37,020 --> 00:39:38,080 yn union fel GetString. 960 00:39:38,080 --> 00:39:41,820 Ac yn wir, GetString yn dychwelyd null os, yn ei dro, malloc yn dychwelyd null, 961 00:39:41,820 --> 00:39:43,130 oherwydd GetString yn defnyddio malloc. 962 00:39:43,130 --> 00:39:46,400 >> A allai ddigwydd os yw'r AO, Mac OS, Windows, beth bynnag, yn syml 963 00:39:46,400 --> 00:39:48,130 allan o gof i chi. 964 00:39:48,130 --> 00:39:49,820 Felly dyna beth ddigwyddodd yno. 965 00:39:49,820 --> 00:39:52,910 >> A gadewch i mi yn datgelu un peth arall Efallai mai dim ond yn chwythu eich meddwl 966 00:39:52,910 --> 00:39:55,100 neu fod yn rhy bell yn gyfan gwbl dros y llinell. 967 00:39:55,100 --> 00:39:59,770 Ond gadewch i mi dynnu i fyny y un fath ar gyfer dolen ar gyfer copïo, 968 00:39:59,770 --> 00:40:05,480 a oedd funud yn ôl, galw i gof yn hyn. t braced ff yn cael s braced i. 969 00:40:05,480 --> 00:40:06,740 >> Nice ac yn hawdd eu defnyddio. 970 00:40:06,740 --> 00:40:09,330 Teimlo fel Wythnos Dau eto. 971 00:40:09,330 --> 00:40:14,920 Ond mae hyn yn fersiwn mewn gwirionedd gall fod yn hailysgrifennu fel hyn, sy'n edrych cryptig. 972 00:40:14,920 --> 00:40:18,280 Mae'n dechneg a elwir pwyntydd rhifyddeg, cyfeiriad rhifyddeg. 973 00:40:18,280 --> 00:40:19,600 Ond pam mae hyn yn gweithio? 974 00:40:19,600 --> 00:40:22,220 >> Nawr annoyingly, mae'r awduron C penderfynu defnyddio 975 00:40:22,220 --> 00:40:25,070 y * symbol ar gyfer gwahanol bwrpasau. 976 00:40:25,070 --> 00:40:29,020 Rydym wedi gweld ei defnyddio unwaith yn barod, cols *, sy'n golygu "rhoi newidyn mi 977 00:40:29,020 --> 00:40:31,210 mae hynny'n mynd i gynnwys y cyfeiriad o torgoch. " 978 00:40:31,210 --> 00:40:33,990 * Felly torgoch yn y cyd-destun golygu "rhoi newidyn i mi." 979 00:40:33,990 --> 00:40:40,050 >> Yn anffodus, os ydych yn defnyddio'r * heb gair o'i flaen, fel torgoch, 980 00:40:40,050 --> 00:40:41,905 mae bellach yn cael ei alw i'r Dadgyfeirio gweithredwr. 981 00:40:41,905 --> 00:40:43,530 A byddwn yn gweld mwy o hyn cyn bo hir. 982 00:40:43,530 --> 00:40:44,930 Ond 'i jyst yn golygu "mynd yno." 983 00:40:44,930 --> 00:40:49,070 Mae'n fel dweud, os bydd rhywun yn rhoi i mi ar ddarn o bapur "33 Oxford Street," 984 00:40:49,070 --> 00:40:53,830 os wyf yn gwneud "* 33 Oxford Street," sy'n golygu "Mynd i lawr y ffordd i adeilad y CS." 985 00:40:53,830 --> 00:40:57,220 >> Felly * jyst yn golygu mynd yno os does dim air o'i flaen. 986 00:40:57,220 --> 00:40:59,100 Felly beth yw t, i fod yn glir? 987 00:40:59,100 --> 00:41:03,250 t yw'r cyfeiriad y darn o cof a roddwyd yn ôl i mi. 988 00:41:03,250 --> 00:41:06,650 s yn y cyfeiriad o beth, i fod yn glir, yn yr enghraifft yr ydym wedi bod yn eu trafod, 989 00:41:06,650 --> 00:41:07,500 o Gabe llythrennau bach? 990 00:41:07,500 --> 00:41:08,990 991 00:41:08,990 --> 00:41:10,005 s yw'r cyfeiriad o- 992 00:41:10,005 --> 00:41:11,585 993 00:41:11,585 --> 00:41:12,460 CYNULLEIDFA: Y llinyn. 994 00:41:12,460 --> 00:41:14,126 DAVID J. Malan: O'r enw gwreiddiol Gabe yn. 995 00:41:14,126 --> 00:41:16,660 Felly mae'n y cyfeiriad o darn hwn o gof. 996 00:41:16,660 --> 00:41:22,220 Felly, os wyf yn dweud t + i-- i, rhybudd, yn unig yw ein hen gyfaill. 997 00:41:22,220 --> 00:41:24,770 Mae'n dim ond newidyn mynegai sy'n cael ei ailadrodd o sero ar i fyny 998 00:41:24,770 --> 00:41:26,960 ar hyd y s llinyn. 999 00:41:26,960 --> 00:41:30,367 Felly, mae'n mynd i fod yn sero, yna un, Yna, dau, yna dri, yna pedwar. 1000 00:41:30,367 --> 00:41:33,200 Felly gadewch i ni cydosod rhain newydd Darnau pos Scratch-fel, os gwnewch, 1001 00:41:33,200 --> 00:41:36,140 hyd yn oed er, unwaith eto, mae'r gystrawen yn llawer mwy arcane nag Scratch. 1002 00:41:36,140 --> 00:41:39,522 Felly t yn gyfeiriad + fi yn mynd i roi i mi 1003 00:41:39,522 --> 00:41:42,480 nifer, gan fod y rhain i gyd yn niferoedd ein bod wedi bod yn darlunio fel hecs. 1004 00:41:42,480 --> 00:41:43,560 Ond maen nhw jyst rhifau. 1005 00:41:43,560 --> 00:41:49,960 >> Felly, os yw'r cyfeiriad o t dweud ein Roedd 0x88, beth sydd 0x88 plws sero. 1006 00:41:49,960 --> 00:41:51,564 1007 00:41:51,564 --> 00:41:53,980 Hyd yn oed os nad ydych yn gyfforddus gyda hecs eto, cymryd dyfalu. 1008 00:41:53,980 --> 00:41:54,410 >> CYNULLEIDFA: Y gwreiddiol. 1009 00:41:54,410 --> 00:41:55,850 >> DAVID J. Malan: Dal 0x88. 1010 00:41:55,850 --> 00:41:58,910 Felly beth mae 0x88 * yn ei olygu? 1011 00:41:58,910 --> 00:42:02,670 Mae'n golygu, "mynd yno" sy'n golygu effeithiol, "rhoi eich bys yma." 1012 00:42:02,670 --> 00:42:06,930 Ac yn awr ar yr ochr dde ymadrodd hwn, * ac yna mewn parens, 1013 00:42:06,930 --> 00:42:11,586 s + ff golygu s, sef y sylw i fyny yma o fawr ddim y g. 1014 00:42:11,586 --> 00:42:16,220 s + 0 yw, wrth gwrs, s, beth bynnag yw. 1015 00:42:16,220 --> 00:42:21,230 >> Felly nawr, mae'n * s, a oedd yn union fel * 33 Stryd Rhydychen yn golygu mynd i'r cyfeiriad 1016 00:42:21,230 --> 00:42:22,010 s. 1017 00:42:22,010 --> 00:42:24,170 Felly dyma bys hwn, llaw dde. 1018 00:42:24,170 --> 00:42:26,050 Felly, beth ydw i'n mynd i gopïo i mewn i beth? 1019 00:42:26,050 --> 00:42:30,260 Y peth ar y dde, sydd yn Gabe, ychydig o g yma, i mewn yma. 1020 00:42:30,260 --> 00:42:32,750 >> Ac felly mae'r effaith hynny iteriad cyntaf y ddolen, 1021 00:42:32,750 --> 00:42:36,200 wrth i chi arfaethedig, er ei fod yn edrych crazy fwy cymhleth nag unrhyw beth 1022 00:42:36,200 --> 00:42:42,110 ydym wedi ei weld o'r blaen, yn syml yn dweud ewch yma a chopi y cymeriad yma. 1023 00:42:42,110 --> 00:42:44,700 Mae'n rhoi map i ddau leoliad i chi. 1024 00:42:44,700 --> 00:42:46,130 >> A byddwn yn gweld llawer mwy o hyn. 1025 00:42:46,130 --> 00:42:50,600 Ond am nawr, y gobaith yn unig i gyflwyno rhai o'r syniadau sylfaenol hyn. 1026 00:42:50,600 --> 00:42:53,550 Ac yn wir, gadewch i ni edrych ar un rhaglen derfynol yma, 1027 00:42:53,550 --> 00:42:57,480 ac yna y animeiddio clai a addawyd, a fydd yn gwneud popeth yn iawn. 1028 00:42:57,480 --> 00:42:57,980 Mae pob hawl. 1029 00:42:57,980 --> 00:43:01,680 Felly, gadewch i mi agor up-- dyna ni. 1030 00:43:01,680 --> 00:43:02,850 1031 00:43:02,850 --> 00:43:05,440 Felly gadewch me-- byddwn yn dod yn ôl i'r llun hwn cyn hir. 1032 00:43:05,440 --> 00:43:08,360 Gadewch i mi agor yr enghraifft olaf yma. 1033 00:43:08,360 --> 00:43:09,440 1034 00:43:09,440 --> 00:43:12,710 >> Felly dyma yw super, super rhaglen sy'n accomplishes 1035 00:43:12,710 --> 00:43:15,050 dim byd mewn bywyd sy'n gwneud y canlynol. 1036 00:43:15,050 --> 00:43:18,740 Mae'n gyntaf datgan dau newidyn, x ac y, nad ydynt yn y niferoedd y tro hwn, 1037 00:43:18,740 --> 00:43:19,240 fel y cyfryw. 1038 00:43:19,240 --> 00:43:20,448 Nid ydynt yn gyfanrifau, fel y cyfryw. 1039 00:43:20,448 --> 00:43:22,899 Maent yn ôl pob golwg int *. 1040 00:43:22,899 --> 00:43:25,690 Felly dim ond i unrhyw un, beth mae'n ei olygu os yw eich math data, eich newidyn, 1041 00:43:25,690 --> 00:43:26,860 yw o fath int * seren? 1042 00:43:26,860 --> 00:43:30,240 Dyna y cyfeiriad o int. 1043 00:43:30,240 --> 00:43:31,990 >> Felly, yr wyf i wedi ddim syniad lle mae'n eto. 1044 00:43:31,990 --> 00:43:35,150 'I jyst yn golygu "rhoi, yn y pen draw, y cyfeiriad o int fan hyn. " 1045 00:43:35,150 --> 00:43:38,340 0x50, 0x88, lle bynnag y mae yn cof, mae cyfeiriad yn mynd yno. 1046 00:43:38,340 --> 00:43:40,200 A dyna beth y mae mynd i fod, yn ogystal. 1047 00:43:40,200 --> 00:43:44,920 >> Os wyf yn awr yn dweud x = malloc (sizeof (int)), mae hyn yn ffordd ffansi o ddweud, 1048 00:43:44,920 --> 00:43:49,000 hey system weithredu, drwy malloc, rhoi digon o gof i mi ar gyfer maint 1049 00:43:49,000 --> 00:43:52,370 o int, sydd yn ôl pob tebyg mynd i fod yn 32 o ddarnau neu bedwar bytes. 1050 00:43:52,370 --> 00:43:53,680 >> Felly beth mae malloc dychwelyd? 1051 00:43:53,680 --> 00:43:55,250 Malloc dychwelyd cyfeiriad. 1052 00:43:55,250 --> 00:43:57,020 Felly beth sy'n mynd i gael eu storio mewn x? 1053 00:43:57,020 --> 00:44:00,600 Cyfeiriad y darn o cof, mae'r pedwar bytes, hynny malloc 1054 00:44:00,600 --> 00:44:03,360 dim ond dod o hyd i mi drwy ofyn y system weithredu. 1055 00:44:03,360 --> 00:44:08,240 >> Yn awr yn y cyfamser, llinell pedwar yma, mae'r * x = 42. 1056 00:44:08,240 --> 00:44:09,990 Dim ond i fod yn glir, beth sy'n mynd i lawr yno? 1057 00:44:09,990 --> 00:44:11,530 Ar yr ochr chwith, * x. 1058 00:44:11,530 --> 00:44:13,610 dyna fel * 33 Oxford Street. 1059 00:44:13,610 --> 00:44:15,523 Felly * x yn golygu beth? 1060 00:44:15,523 --> 00:44:16,450 >> CYNULLEIDFA: Ewch i. 1061 00:44:16,450 --> 00:44:17,908 >> DAVID J. Malan: Ewch i'r cyfeiriad hwnnw. 1062 00:44:17,908 --> 00:44:20,466 Ble bynnag y darn o cof yw, yn mynd iddo. 1063 00:44:20,466 --> 00:44:21,979 A rhowch beth yno, yn amlwg? 1064 00:44:21,979 --> 00:44:22,520 CYNULLEIDFA: 42. 1065 00:44:22,520 --> 00:44:23,580 DAVID J. Malan: 42. 1066 00:44:23,580 --> 00:44:25,650 Mae pob hawl, * y, un syniad. 1067 00:44:25,650 --> 00:44:26,860 Ewch at y cyfeiriad yn y. 1068 00:44:26,860 --> 00:44:31,740 Rhowch y rhif 13 yno, ond beth yw y ar hyn o bryd? 1069 00:44:31,740 --> 00:44:33,172 1070 00:44:33,172 --> 00:44:34,630 CYNULLEIDFA: Nid oes unrhyw cof am y. 1071 00:44:34,630 --> 00:44:35,710 DAVID J. Malan: Mae oes unrhyw cof am y. 1072 00:44:35,710 --> 00:44:38,215 Felly beth mae y yn ôl pob tebyg cynnwys, fel yr ydym wedi bod yn ei ddweud? 1073 00:44:38,215 --> 00:44:38,520 >> CYNULLEIDFA: Garbage. 1074 00:44:38,520 --> 00:44:39,480 >> DAVID J. Malan: Rhai gwerth garbage. 1075 00:44:39,480 --> 00:44:41,320 Yn awr, gwerth garbage yn dal i fod yn rhif. 1076 00:44:41,320 --> 00:44:43,160 Gall fod yn dal ei gamgymryd am gyfeiriad. 1077 00:44:43,160 --> 00:44:45,160 Mae'n fel pe bai rhywun sgriblo rhywbeth i lawr, 1078 00:44:45,160 --> 00:44:48,002 ac yr wyf yn ei gamddehongli fel ystyr rhywfaint o adeilad i lawr y stryd. 1079 00:44:48,002 --> 00:44:50,460 Ac os ydych yn unig yn ceisio mynd i mewn i ryw adeilad nad ydych yn berchen, 1080 00:44:50,460 --> 00:44:53,710 neu ryw darn o gof nad oes gennych wedi ei roi, gallai pethau drwg yn digwydd. 1081 00:44:53,710 --> 00:44:57,740 Gallai Cyfrifiadur chwalu, neu ryw arall Gallai ymddygiad amhendant ddigwydd. 1082 00:44:57,740 --> 00:45:01,310 >> Felly y intro, yna, i Binky yw hyn. 1083 00:45:01,310 --> 00:45:04,290 Rwy'n dal i gofio, 20 rai blynyddoedd yn od yn ddiweddarach, 1084 00:45:04,290 --> 00:45:07,200 lle'r oeddwn pan oeddwn yn olaf deall awgrymiadau. 1085 00:45:07,200 --> 00:45:09,520 >> Pa un yw dweud, os ydych yn gadael yma mewn tri munud 1086 00:45:09,520 --> 00:45:12,170 ac yn meddwl nad wyf yn ei wneud deall awgrymiadau, yn sylweddoli 1087 00:45:12,170 --> 00:45:14,410 Rwyf wedi cofio am 20 blynyddoedd am ryw reswm crazy 1088 00:45:14,410 --> 00:45:17,140 pryd a pham ei suddo yn olaf mewn, yn eistedd gyda fy addysgu 1089 00:45:17,140 --> 00:45:19,501 cyd, Nishat Mehta yn y nghefn y Neuadd Fwyta Eliot. 1090 00:45:19,501 --> 00:45:21,250 Yn awr, rydw i wedi cofio hyn gan fod hyn yn 1091 00:45:21,250 --> 00:45:23,920 un o'r pynciau yr wyf, mewn benodol, trafferth gyda. 1092 00:45:23,920 --> 00:45:26,470 Ac yna, mae clicio yn olaf, fel yr wyf yn siŵr gen i llawer o bynciau 1093 00:45:26,470 --> 00:45:27,460 yn y pen draw fydd. 1094 00:45:27,460 --> 00:45:32,590 Ac yn awr, i wneud y teimlo holl hapusach ac yn fwy argyhoeddiadol, 1095 00:45:32,590 --> 00:45:35,360 gadewch i ni gymryd golwg terfynol yn ein tair munud olaf yma yn Binky, 1096 00:45:35,360 --> 00:45:37,675 gan ein cyfaill, Nick Parlante o Stanford. 1097 00:45:37,675 --> 00:45:38,910 1098 00:45:38,910 --> 00:45:41,580 >> [VIDEO Playback] 1099 00:45:41,580 --> 00:45:42,750 >> -Hey, Binky. 1100 00:45:42,750 --> 00:45:43,500 Wake i fyny! 1101 00:45:43,500 --> 00:45:45,960 Mae'n amser am hwyl pwyntydd. 1102 00:45:45,960 --> 00:45:47,012 >> -Beth Yw hwnna? 1103 00:45:47,012 --> 00:45:48,723 Dysgu am awgrymiadau? 1104 00:45:48,723 --> 00:45:50,580 O, anrhegion! 1105 00:45:50,580 --> 00:45:53,563 >> -Well, I ddechrau arni, mae'n debyg ein bod mynd i angen cwpl o awgrymiadau. 1106 00:45:53,563 --> 00:45:54,390 >> -OK. 1107 00:45:54,390 --> 00:45:57,930 Mae'r cod hwn yn clustnodi dau awgrymiadau, sy'n gallu pwyntio at gyfanrifau. 1108 00:45:57,930 --> 00:45:58,430 -OK. 1109 00:45:58,430 --> 00:46:02,140 Wel, yr wyf yn gweld y ddau awgrymiadau, ond maent yn Nid yw'n ymddangos i fod yn pwyntio at unrhyw beth. 1110 00:46:02,140 --> 00:46:02,980 >> -bod Iawn. 1111 00:46:02,980 --> 00:46:05,100 I ddechrau, awgrymiadau nid ydynt yn cyfeirio at unrhyw beth. 1112 00:46:05,100 --> 00:46:08,030 Y pethau y maent yn pwyntio at eu galw pointees, a gosod i fyny yn 1113 00:46:08,030 --> 00:46:09,370 yn gam ar wahân. 1114 00:46:09,370 --> 00:46:10,220 >> -OH, Ar y dde, ar y dde. 1115 00:46:10,220 --> 00:46:10,950 Roeddwn i'n gwybod hynny. 1116 00:46:10,950 --> 00:46:12,385 Mae'r pointees ar wahân. 1117 00:46:12,385 --> 00:46:14,315 Er, felly sut ydych chi'n dyrannu pointee? 1118 00:46:14,315 --> 00:46:15,340 1119 00:46:15,340 --> 00:46:15,960 >> -OK. 1120 00:46:15,960 --> 00:46:18,970 Wel, y cod hwn yn dyrannu mae pointee cyfanrif newydd, 1121 00:46:18,970 --> 00:46:20,950 ac mae hyn yn rhannol yn gosod x i bwyntio ato. 1122 00:46:20,950 --> 00:46:22,050 1123 00:46:22,050 --> 00:46:23,230 >> -Hey, Sy'n edrych yn well. 1124 00:46:23,230 --> 00:46:25,060 Felly, yn ei gwneud yn gwneud rhywbeth. 1125 00:46:25,060 --> 00:46:25,990 >> -OK. 1126 00:46:25,990 --> 00:46:30,455 'N annhymerus' Dadgyfeirio y pwyntydd x i storio'r rhif 42 yn ei pointee. 1127 00:46:30,455 --> 00:46:32,830 Ar gyfer tric hwn, bydd angen i mi fy Magic Wand o Dereferencing. 1128 00:46:32,830 --> 00:46:34,130 1129 00:46:34,130 --> 00:46:36,080 >> -Eich Ffon hud o Dereferencing? 1130 00:46:36,080 --> 00:46:37,357 1131 00:46:37,357 --> 00:46:38,190 That-- mae hynny'n wych. 1132 00:46:38,190 --> 00:46:39,340 1133 00:46:39,340 --> 00:46:41,080 >> -Mae Yw'r hyn y mae'r cod yn edrych fel. 1134 00:46:41,080 --> 00:46:44,110 'N annhymerus' newydd sefydlu nifer, ac yn [POP] 1135 00:46:44,110 --> 00:46:44,700 >> -Hey, Edrychwch. 1136 00:46:44,700 --> 00:46:46,140 Yno mae'n mynd. 1137 00:46:46,140 --> 00:46:50,980 >> -So Gwneud Dadgyfeirio ar x dilyn y saeth i gael mynediad at ei pointee. 1138 00:46:50,980 --> 00:46:53,160 Yn yr achos hwn, siop 42 i mewn 'na. 1139 00:46:53,160 --> 00:46:57,710 Hey ceisiwch ddefnyddio i storio'r rhif 13 drwy'r pwyntydd arall, y. 1140 00:46:57,710 --> 00:46:58,760 >> -OK. 1141 00:46:58,760 --> 00:47:03,270 'N annhymerus' jyst yn mynd drosodd yma i y, ac yn cael y rhif 13 set i fyny. 1142 00:47:03,270 --> 00:47:07,930 Ac yna, yn cymryd y ffon o Dereferencing a dim ond [BUZZ] 1143 00:47:07,930 --> 00:47:08,960 >> -OH! 1144 00:47:08,960 --> 00:47:09,500 >> -OH, Hey! 1145 00:47:09,500 --> 00:47:11,090 Nad oedd yn gweithio. 1146 00:47:11,090 --> 00:47:15,630 Dweud, Binky, nid wyf yn credu dereferencing y yn syniad da, oherwydd eich bod yn gwybod, 1147 00:47:15,630 --> 00:47:17,850 sefydlu'r pointee yn gam ar wahân. 1148 00:47:17,850 --> 00:47:20,450 Ac nid wyf yn credu ein bod byth yn gwneud hynny. 1149 00:47:20,450 --> 00:47:21,480 >> Pwynt -Good. 1150 00:47:21,480 --> 00:47:21,980 -Yeah. 1151 00:47:21,980 --> 00:47:25,680 Dyrannwyd y pwyntydd y, ond yr ydym yn byth yn ei osod i bwyntio at pointee. 1152 00:47:25,680 --> 00:47:27,190 1153 00:47:27,190 --> 00:47:28,616 >> -Very Sylwgar. 1154 00:47:28,616 --> 00:47:30,240 -Hey, Rydych yn edrych yn dda yno, Binky. 1155 00:47:30,240 --> 00:47:33,400 Allwch chi atgyweiria 'fel bod y pwyntiau i'r un pointee ag x? 1156 00:47:33,400 --> 00:47:34,000 >> -Sure. 1157 00:47:34,000 --> 00:47:36,780 'N annhymerus' defnyddio fy ffon hud o Pointer Aseiniad. 1158 00:47:36,780 --> 00:47:38,740 >> -A Bod mynd i fod problem debyg o'r blaen? 1159 00:47:38,740 --> 00:47:39,240 -Dim. 1160 00:47:39,240 --> 00:47:40,660 Nid yw hyn yn cyffwrdd y pointees. 1161 00:47:40,660 --> 00:47:44,450 'I jyst yn newid un pwyntydd i cyfeirio at yr un peth â un arall. 1162 00:47:44,450 --> 00:47:45,450 >> -OH, Rwy'n gweld. 1163 00:47:45,450 --> 00:47:48,200 Nawr y pwyntiau at yr un lle ag x. 1164 00:47:48,200 --> 00:47:48,910 Felly aros. 1165 00:47:48,910 --> 00:47:49,950 Yn awr, y yn sefydlog. 1166 00:47:49,950 --> 00:47:51,120 Mae ganddo pointee. 1167 00:47:51,120 --> 00:47:54,510 Felly, gallwch roi cynnig ar y hudlath o Dereferencing eto i anfon y 13 drosodd. 1168 00:47:54,510 --> 00:47:56,510 >> -Uh, OK. 1169 00:47:56,510 --> 00:47:58,160 Yma, mae'n mynd. [POP] 1170 00:47:58,160 --> 00:47:59,340 >> -Hey, Edrych ar hynny. 1171 00:47:59,340 --> 00:48:00,750 Nawr dereferencing gwaith ar y. 1172 00:48:00,750 --> 00:48:04,991 Ac oherwydd bod y awgrymiadau yn cael eu rhannu bod un pointee, y ddau ohonynt yn gweld y 13. 1173 00:48:04,991 --> 00:48:05,490 -Yeah. 1174 00:48:05,490 --> 00:48:06,870 Rhannu, beth bynnag. 1175 00:48:06,870 --> 00:48:08,820 Felly, yr ydym yn mynd i newid lleoedd nawr? 1176 00:48:08,820 --> 00:48:09,440 >> O, edrychwch. 1177 00:48:09,440 --> 00:48:10,830 Rydym yn allan o amser. 1178 00:48:10,830 --> 00:48:11,570 >> -But-- 1179 00:48:11,570 --> 00:48:13,530 >> -Just Cofiwch y tri rheolau pwyntydd. 1180 00:48:13,530 --> 00:48:16,560 Rhif Un, mae'r strwythur sylfaenol yw bod gennych pwyntydd, 1181 00:48:16,560 --> 00:48:18,680 ac mae'n tynnu sylw drosodd i pointee. 1182 00:48:18,680 --> 00:48:20,640 Ond mae'r pwyntydd a'r pointee ar wahân, 1183 00:48:20,640 --> 00:48:22,610 ac y gwall cyffredin yw sefydlu pwyntydd, 1184 00:48:22,610 --> 00:48:25,000 ond i anghofio i roi cynnig pointee. 1185 00:48:25,000 --> 00:48:28,170 >> Rhif Dau, dereferencing pwyntydd dechrau yn y pwyntydd 1186 00:48:28,170 --> 00:48:31,050 ac mae'n dilyn ei saeth dros i gael mynediad at ei pointee. 1187 00:48:31,050 --> 00:48:33,400 Fel yr ydym i gyd yn gwybod, mae hyn dim ond yn gweithio os oes 1188 00:48:33,400 --> 00:48:36,270 mae pointee, pa fath o mynd yn ôl at Rheol Rhif Un. 1189 00:48:36,270 --> 00:48:39,000 >> Rhif Tri, pwyntydd aseiniad yn cymryd un pwyntydd 1190 00:48:39,000 --> 00:48:42,320 ac yn newid iddo i dynnu sylw at y un pointee ag pwyntydd arall. 1191 00:48:42,320 --> 00:48:44,160 Felly, ar ôl yr aseiniad, y ddau awgrymiadau 1192 00:48:44,160 --> 00:48:45,910 Bydd pwyntio i'r un pointee. 1193 00:48:45,910 --> 00:48:47,990 Weithiau, mae hynny'n cael ei alw o rannu. 1194 00:48:47,990 --> 00:48:49,740 A dyna i gyd yna iddo, mewn gwirionedd. 1195 00:48:49,740 --> 00:48:50,277 Ffarwelio nawr. 1196 00:48:50,277 --> 00:48:51,110 [DIWEDD Playback VIDEO] 1197 00:48:51,110 --> 00:48:52,568 DAVID J. Malan: Dyna ni am CS50. 1198 00:48:52,568 --> 00:48:55,110 Byddwn yn gweld chi yr wythnos nesaf. 1199 00:48:55,110 --> 00:48:56,064