1 00:00:00,000 --> 00:00:02,310 [Powered by Google Translate] [Wythnos 4, Parhad] 2 00:00:02,310 --> 00:00:04,240 [David J. Malan - Harvard University] 3 00:00:04,240 --> 00:00:07,290 [Mae hyn yn CS50. - CS50.TV] 4 00:00:07,290 --> 00:00:11,290 >> Mae hyn yn CS50, ac mae hyn yn y diwedd yr wythnos 4. 5 00:00:11,290 --> 00:00:14,030 Felly, ychydig o newyddion da a newyddion drwg. 6 00:00:14,030 --> 00:00:26,240 Dim darlith ar ddydd Llun, nid oes problem yn gosod yr wythnos nesaf. [Fyfyrwyr bloeddio] 7 00:00:26,240 --> 00:00:28,680 Nid ydych chi'n mynd i fwynhau'r lle mae hyn yn mynd. 8 00:00:28,680 --> 00:00:31,590 Ond rydym yn cael y lle ddydd Mercher nesaf, 9 00:00:31,590 --> 00:00:37,740 ac mae hefyd yn unol â'r maes llafur ddarlith dydd Gwener 1 dydd Gwener nesaf fel y gallwn aros ar y trywydd iawn. 10 00:00:37,740 --> 00:00:40,580 Ond bydd popeth yn cael ei ffilmio fel arfer, felly peidiwch â phoeni. 11 00:00:40,580 --> 00:00:44,100 >> Ac o ran yr hyn y cwis 0 byddwn yn ei wneud tuag at ddiwedd wythnos 12 00:00:44,100 --> 00:00:47,140 yn cael ei bostio ar cs50.net hafan y cwrs esboniad 13 00:00:47,140 --> 00:00:50,160 o pa fath o ddisgwyliadau dylai fod gennych pan ddaw at y cwis cyntaf. 14 00:00:50,160 --> 00:00:55,100 Yn gyffredinol, bydd yn dewis lluosog, yn wir-ffug, ateb byr, problemau codio byr. 15 00:00:55,100 --> 00:00:57,360 Nid ydych yn mynd i fod disgwyl i weithredu'r yr hyn sy'n cyfateb 16 00:00:57,360 --> 00:01:00,030 o broblem y byddech yn ei weld ar pset, y mae gennych gyfrifiadur 17 00:01:00,030 --> 00:01:03,240 a debugger ac yn y blaen, ond bydd problemau codio bach. 18 00:01:03,240 --> 00:01:06,900 >> Ac yn wir, y canllaw gorau i gael syniad o'r hyn y CS50 cwisiau yn debyg 19 00:01:06,900 --> 00:01:09,180 yw mynd i cs50.net, ewch i'r cyswllt Cwisiau, 20 00:01:09,180 --> 00:01:11,920 a gallwch weld y blynyddoedd diwethaf sawl blwyddyn gwerth o gwisiau. 21 00:01:11,920 --> 00:01:16,600 Dim ond yn sylweddoli nad yw'r cwricwlwm bob amser wedi bod yr un fath dros y blynyddoedd. 22 00:01:16,600 --> 00:01:18,510 Weithiau rydym yn ychwanegu, weithiau'n tynnu, 23 00:01:18,510 --> 00:01:20,670 felly os ydych yn gweld rhywfaint o destun ar un o'r hen cwisiau 24 00:01:20,670 --> 00:01:25,380 nad oes gennych syniad beth mae'n sôn amdano, mae'n naill ai ein bod yn cynnwys hynny 25 00:01:25,380 --> 00:01:27,210 neu nad ydym yn cynnwys hynny. 26 00:01:27,210 --> 00:01:31,110 Ond yn y ffurf o adolygiadau, mae hyn Sul, Llun a Mawrth 27 00:01:31,110 --> 00:01:34,770 yn ogystal â chwrs ar draws y sesiwn adolygu ar nos Sul - 28 00:01:34,770 --> 00:01:37,500 amser a lleoliad i'w gyhoeddi ar hafan y cwrs - 29 00:01:37,500 --> 00:01:40,120 chi i gyd yn cael cyfle i adolygu gydag gymrodorion addysgu y cwrs 30 00:01:40,120 --> 00:01:44,830 deunydd ar gyfer y flwyddyn hon, yn adran ac fel dosbarth cyfan, 31 00:01:44,830 --> 00:01:48,400 a bydd y rhai yn cael ei ffilmio fel arfer yn ogystal. 32 00:01:48,400 --> 00:01:53,380 >> Mae pob hawl. Felly, heb wastraffu mwy o eiriau, un sylw ar llwyddo / methu ac ychwanegu / gollwng. 33 00:01:53,380 --> 00:01:57,980 Efallai eich bod wedi gweld fy nodiadau neithiwr, ac mae hyn yn wir dim ond rhai sicrwydd ychwanegol 34 00:01:57,980 --> 00:02:01,250 os ydych yn ymhlith y rhai arbennig yn llai cyfforddus neu rywle yn y canol 35 00:02:01,250 --> 00:02:04,870 ac rydych yn teimlo ychydig bach mewn dros eich pen, 36 00:02:04,870 --> 00:02:08,430 sylweddoli bod yn wir yn eithaf normal, ac mae 'na strwythur cymorth digonol yn eu lle, 37 00:02:08,430 --> 00:02:13,530 un ohonynt oriau swyddfa yn benderfynol o wella yn fwy am bob noson fy e-bost diwethaf, 38 00:02:13,530 --> 00:02:16,520 ac yn sylweddoli hefyd fod yn opsiwn fel llwyddo / methu ar gyfer dosbarth fel hyn 39 00:02:16,520 --> 00:02:21,540 mewn gwirionedd yn golygu fel mecanwaith i gymryd y ymyl oddi ar gwrs fel hyn, 40 00:02:21,540 --> 00:02:24,200 fel hynny eto os ydych yn ei wario y rhai 10, 15, 20 awr 41 00:02:24,200 --> 00:02:28,160 jyst yn ceisio cael rhywfaint o pset i weithio a ydych yn gwybod eich bod 90-95% o'r ffordd yno 42 00:02:28,160 --> 00:02:32,100 ond nad ydych yn gallu ddod o hyd i bug damn, mewn pasio / methu model sy'n fath o iawn. 43 00:02:32,100 --> 00:02:36,230 >> Y syniad yw bod â mecanwaith hwnnw yna gallwch fynd canolbwyntio ar eich psets eraill 44 00:02:36,230 --> 00:02:39,530 neu gysgu neu beth bynnag yw eich bod am ganolbwyntio ar. 45 00:02:39,530 --> 00:02:43,390 Felly, yn sylweddoli bod gennych tan nos Fawrth yma yn dod - yn dechnegol y dydd Llun 5ed, 46 00:02:43,390 --> 00:02:50,840 ond bod yn cael gwyliau, felly nos Fawrth yma yn dod - i newid o pasio / methu â vice graddedig neu i'r gwrthwyneb. 47 00:02:50,840 --> 00:02:54,450 Ac os ydych chi'n wirioneddol ar y dibyn ac yn meddwl o adael yn gyfan gwbl, 48 00:02:54,450 --> 00:02:56,440 os gwelwch yn dda ddal i mi ar ôl darlith neu anfon nodyn ataf. 49 00:02:56,440 --> 00:02:59,990 Byddem wrth ein bodd o leiaf cyn i chi sgwrsio cais adieu. 50 00:02:59,990 --> 00:03:03,470 Mae pob hawl. Felly, rydym yn dechrau cymryd yr olwynion hyfforddiant oddi ar y tro diwethaf. 51 00:03:03,470 --> 00:03:06,030 Yn benodol, rydym yn canolbwyntio ar linyn. 52 00:03:06,030 --> 00:03:09,740 Llinyn yn rhywbeth sydd wedi datgan yn y llyfrgell CS50, 53 00:03:09,740 --> 00:03:14,340 yn benodol yn y ffeil o'r enw cs50.h y byddwn yn dechrau edrych ar yr wythnos hon a'r nesaf. 54 00:03:14,340 --> 00:03:17,250 Ond mae llinyn mewn gwirionedd dim ond symleiddio o rywbeth 55 00:03:17,250 --> 00:03:20,980 dyna ychydig yn fwy arcanely disgrifir fel * torgoch. 56 00:03:20,980 --> 00:03:24,090 Golosg rydym yn gyfarwydd â hwy. Mae'n dim ond un cymeriad. 57 00:03:24,090 --> 00:03:28,010 Ond * o ddydd Llun dynodi beth? >> [Myfyrwyr] Mae pwyntydd. 58 00:03:28,010 --> 00:03:31,290 Mae pwyntydd. A beth pwyntydd? >> [Myfyrwyr] Mae cyfeiriad. 59 00:03:31,290 --> 00:03:33,420 >> Mae fel cyfeiriad, lleoliad yn y cof. 60 00:03:33,420 --> 00:03:35,910 Beth yw cyfeiriad neu leoliad neu gof? 61 00:03:35,910 --> 00:03:40,290 Unwaith eto, mae pob un ohonom yn cael gliniaduron gyda gig neu 2 gigabeit o RAM fwyaf tebygol y dyddiau hyn, 62 00:03:40,290 --> 00:03:44,160 ac mae hynny'n golygu bod gennych biliwn neu 2000000000 bytes gwerth y cof. 63 00:03:44,160 --> 00:03:46,240 Ac nid yw'n wir ots beth yn gorfforol yn edrych fel, 64 00:03:46,240 --> 00:03:51,220 ond yn ymgymryd â ffydd y gallwch rifedi ar yr holl bytes unigol bod eich gliniadur eich hun wedi - 65 00:03:51,220 --> 00:03:54,580 mae hyn yn beit 0, mae hyn yn beit 1, mae hyn yn beit 2000000000 - 66 00:03:54,580 --> 00:03:56,100 a dyna'n union beth yw cyfrifiadur yn ei wneud. 67 00:03:56,100 --> 00:04:00,030 Pan fyddwch yn neilltuo lle ar gyfer cymeriad unigol, er enghraifft, 68 00:04:00,030 --> 00:04:02,480 mae'n amlwg bod ganddo i fyw yn rhywle er cof am eich cyfrifiadur, 69 00:04:02,480 --> 00:04:05,860 ac efallai ei fod yn yn rhif beit 12,345, 70 00:04:05,860 --> 00:04:08,470 ac mae hynny'n rhywle i fyny yma er cof am eich cyfrifiadur. 71 00:04:08,470 --> 00:04:12,630 Ac y cyfeiriad yna y cymeriad yn 12345. 72 00:04:12,630 --> 00:04:16,140 >> Yn awr, yn wythnos 0 drwy hyn hyd yn hyn, nid ydym wedi gofalu mewn gwirionedd 73 00:04:16,140 --> 00:04:19,170 lle mewn pethau cof yn cael eu storio gan ein bod fel arfer yn defnyddio symbolau, 74 00:04:19,170 --> 00:04:22,540 newidynnau, ac araeau i mewn gwirionedd yn cael ar ein data. 75 00:04:22,540 --> 00:04:24,950 Ond o ddydd Llun ac yn fwy heddiw, yr ydych yn awr yn mynd i gael 76 00:04:24,950 --> 00:04:27,710 yr holl alluoedd yn fwy mynegiannol gyda rhaglenni ysgrifennu 77 00:04:27,710 --> 00:04:31,330 i 'n sylweddol thrin cof cyfrifiadur bynnag yr ydych yn gweld yn dda, 78 00:04:31,330 --> 00:04:33,720 i'r ddau ddiben da a drwg, 79 00:04:33,720 --> 00:04:39,620 bugs fod yn ganlyniad cyffredin iawn ar y pwynt hwn mewn dysgu pethau hyn. 80 00:04:39,620 --> 00:04:42,460 Ond beth mae'n ei olygu mewn gwirionedd i fod yn * torgoch? 81 00:04:42,460 --> 00:04:46,140 Gadewch i ni fynd yn ei flaen yn ôl i - a byddwn yn dod yn ôl i Binky fel yr addawyd heddiw. 82 00:04:46,140 --> 00:04:48,670 Gadewch i ni fynd at enghraifft syml yma. 83 00:04:48,670 --> 00:04:53,060 Gadewch i mi arbed y ffeil fel compare.c, a gadewch imi fynd rhai cod templed yma 84 00:04:53,060 --> 00:05:00,490 felly dylech gynnwys stdio.h, gadewch i mi hefyd yn rhoi fy hun yn cynnwys cs50.h. 'N annhymerus' chwyddo i mewn i fyny yno. 85 00:05:00,490 --> 00:05:05,850 Gadewch i mi ddechrau ysgrifennu int brif, prif (gwag), ac yn awr yr wyf yn awyddus i wneud rhywbeth fel hyn: 86 00:05:05,850 --> 00:05:13,520 printf ("Rhowch i mi llinyn:") ac yna byddaf yn defnyddio llinyn s yn cael GetString 87 00:05:13,520 --> 00:05:16,750 i gael llinyn gan y defnyddiwr, yna rwy'n mynd i ofyn i'r defnyddiwr am un arall. 88 00:05:16,750 --> 00:05:21,870 ("Rhowch i mi bluen arall:") ac rwy'n mynd i ofyn iddynt trwy GetString i gyrraedd hynny. 89 00:05:21,870 --> 00:05:27,020 'N annhymerus' ei alw oherwydd t t s yn dod ar ôl a s yn enw braf ar gyfer llinyn os ei fod yn eithaf generig. 90 00:05:27,020 --> 00:05:30,030 Felly GetString, ac yn awr Fi jyst eisiau gwneud gwiriad pwyll ac rydw i'n mynd i ddweud 91 00:05:30,030 --> 00:05:39,770 os (au == t) yna Im 'jyst yn mynd i ddweud wrth y defnyddiwr printf ("chi deipio yr un peth \ n!"); 92 00:05:39,770 --> 00:05:45,520 arall yr wyf i'n mynd i argraffu rhywbeth fel ("chi deipio rhywbeth gwahanol! \ n") 93 00:05:45,520 --> 00:05:48,460 neu beth bynnag fydd y ddedfryd. Felly, rhywbeth fel 'na. 94 00:05:48,460 --> 00:05:52,200 Yna, fel arfer, byddaf yn dychwelyd 0 a dim ond dynodi nad oes dim drwg yn digwydd, 95 00:05:52,200 --> 00:05:54,400 ac yr wyf i'n mynd i fynd yn ei flaen ac yn llunio a rhedeg y rhaglen hon. 96 00:05:54,400 --> 00:05:56,540 >> Ond ar ddydd Llun, cynhaliwyd y rhaglen hon, 97 00:05:56,540 --> 00:06:00,420 ac mewn gwirionedd Dywedwyd wrthym na HELO yn HELO ac nid HWYL FAWR yn HWYL FAWR. 98 00:06:00,420 --> 00:06:03,140 Mae ymddygiad a welsom oedd ychydig yn fwy fel hyn. 99 00:06:03,140 --> 00:06:11,450 Gadewch i mi fynd i mewn i fy cyfeiriadur ffynhonnell, chwyddo i mewn yma, a gadewch i ni yn gwneud cymharu. 100 00:06:11,450 --> 00:06:14,570 Lluniwyd iawn. Gadewch i mi redeg cymharu. Rhowch i mi llinyn: HELO. 101 00:06:14,570 --> 00:06:16,300 Rhowch i mi bluen arall: HELO. 102 00:06:16,300 --> 00:06:18,000 Chi deipio rhywbeth gwahanol! 103 00:06:18,000 --> 00:06:22,650 Wel, gadewch i mi roi cynnig ar rywbeth symlach fel 50, 50. Chi deipio rhywbeth gwahanol! 104 00:06:22,650 --> 00:06:25,740 hi, hi. Felly, yn amlwg, mae rhywbeth yn mynd ymlaen yma. 105 00:06:25,740 --> 00:06:28,440 Ond beth oedd yr esboniad am pam? 106 00:06:28,440 --> 00:06:33,850 Mae'n debyg, llinell 12 yn gwbl gamweithredol. 107 00:06:34,300 --> 00:06:39,430 Beth yw'r broblem sylfaenol yma? Yeah. >> [Myfyrwyr] Mae'n cymharu'r cyfeiriadau. 108 00:06:39,430 --> 00:06:41,850 Yeah, yn union. Mae'n mewn gwirionedd yn cymharu'r cyfeiriadau 109 00:06:41,850 --> 00:06:44,580 lle HELO a HELO yn cael eu storio. 110 00:06:44,580 --> 00:06:48,290 Dyw hi ddim yn cymharu y llythrennau HELO dro ar ôl tro, 111 00:06:48,290 --> 00:06:52,370 oherwydd yr hyn sydd wedi digwydd mewn gwirionedd, i gyd y cyfnod hwn rydym wedi bod yn defnyddio GetString - 112 00:06:52,370 --> 00:06:56,130 Mae'r bwrdd du unwaith eto cof ein cyfrifiadur, 113 00:06:56,130 --> 00:07:00,100 a gadewch i ni ddweud fy mod yn galw GetString ar ôl datgan s amrywiol. 114 00:07:00,100 --> 00:07:01,930 Beth mae fy nghof yn edrych? 115 00:07:01,930 --> 00:07:07,070 Gadewch i ni fympwyol yn dweud bod yn edrych fel hyn. Mae'n sgwâr. 116 00:07:07,070 --> 00:07:09,040 A 'n bert lawer unrhyw adeg Rwyf wedi tynnu darn o gof ar y sgrin 117 00:07:09,040 --> 00:07:12,860 os yw'n 32 catiau Rwyf wedi bod yn tynnu sgwariau fel hyn oherwydd bod yn wir yn y peiriant, 118 00:07:12,860 --> 00:07:17,380 pwyntydd, cyfeiriad, yw 32 darnau. Mae yr un fath â int. 119 00:07:17,380 --> 00:07:19,420 Gall hynny amrywio yn seiliedig ar system gyfrifiadurol. 120 00:07:19,420 --> 00:07:24,630 Mae'r rhai ohonoch sydd yn fras gyfarwydd â'r ffaith bod eich Mac neu PC yn 64 darnau, 121 00:07:24,630 --> 00:07:28,120 sydd mewn gwirionedd yn dynodi bod eich cyfrifiadur yn defnyddio 64-bit awgrymiadau, 122 00:07:28,120 --> 00:07:33,730 64-bit cyfeiriadau, ac ymhlith y upsides hynny yw eich cyfrifiaduron 123 00:07:33,730 --> 00:07:35,560 yn gallu cael RAM llawer mwy na fu. 124 00:07:35,560 --> 00:07:39,240 Stori fer hir, yn ôl yn y dydd pan yw cyfrifiaduron yn unig a ddefnyddir 32 catiau 125 00:07:39,240 --> 00:07:42,740 i gynrychioli cyfeiriadau, y nifer fwyaf o bytes gallech gynrychioli 126 00:07:42,740 --> 00:07:46,280 yn yr achos hwnnw oedd yr hyn os oes gennych 32 catiau? 127 00:07:46,280 --> 00:07:49,590 Felly 4 biliwn, iawn, oherwydd 2 i 32 yw 4 biliwn. 128 00:07:49,590 --> 00:07:51,370 Mae'r nifer hwn wedi bod yn digwydd eto yn y cwrs. 129 00:07:51,370 --> 00:07:55,240 >> Felly, os mai dim ond 32 catiau, y nifer uchaf y gallwch ei gyfrif i yn fras 4 biliwn. 130 00:07:55,240 --> 00:07:58,750 Ond roedd cyfyngiad sylfaenol o gyfrifiaduron hyd nes ychydig flynyddoedd yn ôl 131 00:07:58,750 --> 00:08:01,180 oherwydd os gallwch ond yn cyfrif fel uchel â 4 biliwn, 132 00:08:01,180 --> 00:08:05,270 does dim ots os ydych yn prynu 8 gigabeit o RAM, neu hyd yn oed 5 gigabeit o RAM; 133 00:08:05,270 --> 00:08:07,780 Ni allwch gyfrif mor uchel â hynny, felly roedd yn ddiwerth. 134 00:08:07,780 --> 00:08:11,430 Gallech yn cael mynediad i'r 3 neu 4 wythnos gyntaf gigabeit o gof eich cyfrifiadur. 135 00:08:11,430 --> 00:08:14,410 Dyna llai o broblem yn awr, a gallwch brynu Pros MacBook a Dells 136 00:08:14,410 --> 00:08:17,680 gydag 8 gigabeit o RAM neu hyd yn oed yn fwy y dyddiau hyn. 137 00:08:17,680 --> 00:08:24,100 Ond os wyf yn dyrannu yn eithaf syml yn y rhaglen hon pwyntydd, pwyntydd o'r enw s, 138 00:08:24,100 --> 00:08:28,370 gallai fod yn edrych fel hyn ar y sgrin oherwydd yn wir mae angen i ni croen yn ôl haen hon. 139 00:08:28,370 --> 00:08:33,520 Rwy'n cadw llinyn ei ddweud, ond o ddydd Llun, llinyn yn wirioneddol * torgoch, 140 00:08:33,520 --> 00:08:35,590 cyfeiriad ryw gymeriad. 141 00:08:35,590 --> 00:08:39,280 Felly, gadewch i ni gymryd y olwyn hyfforddiant i ffwrdd hyd yn oed er y bydd yn parhau i ddefnyddio GetString am y tro. 142 00:08:39,280 --> 00:08:42,600 Felly, yr wyf wedi datgan s, ac mae hyn yn dalp o gof, 32 did. 143 00:08:42,600 --> 00:08:47,370 Beth sydd yn fan hyn er cof yn ddiofyn? >> [Anghlywadwy ymateb y myfyrwyr] 144 00:08:47,370 --> 00:08:50,040 Beth sy'n bod? >> [Myfyrwyr] Garbage. Garbage >>. Yn union. 145 00:08:50,040 --> 00:08:54,610 Os nad ydych y rhaglennydd yn rhoi gwerth mewn newidyn, pwy a ŵyr beth yw e? 146 00:08:54,610 --> 00:08:57,990 Weithiau byddwch yn cael lwcus ac mae'n 0, sy'n fath o 'n glws, gwerth diofyn yn lân, 147 00:08:57,990 --> 00:09:00,310 ond fel y gwelsom Dydd Llun, weithiau mae'n nonsens llwyr, 148 00:09:00,310 --> 00:09:04,130 ryw nifer mawr iawn positif neu negyddol a ddaeth o ble? 149 00:09:05,350 --> 00:09:07,010 Yeah. >> [Myfyrwyr] Y swyddogaeth o'r blaen. >> Yeah. 150 00:09:07,010 --> 00:09:10,170 >> Yn aml, mae'r swyddogaeth a gafodd eu galw o'r blaen oherwydd gofio, 151 00:09:10,170 --> 00:09:13,920 wrth i chi alw swyddogaethau mewn cof, maent yn cymryd mwy o le a mwy o'r gwaelod i fyny, 152 00:09:13,920 --> 00:09:17,040 a chyn gynted ag y ffurflenni swyddogaeth, bod y cof yn cael ei ailddefnyddio 153 00:09:17,040 --> 00:09:20,890 gan y dyn nesaf sy'n cael ei alw, sy'n defnyddio eich tafell un o gof. 154 00:09:20,890 --> 00:09:23,450 Ac os ydych wedi garbage chwith yno, gwerthoedd blaenorol, 155 00:09:23,450 --> 00:09:28,190 efallai y byddwn yn camgymryd s fel chael rhywfaint o werth pan mewn gwirionedd nid ydym wedi rhoi unrhyw beth yno. 156 00:09:28,190 --> 00:09:30,960 Felly mae ein RAM ar y pwynt hwn yn edrych fel hyn. 157 00:09:30,960 --> 00:09:36,030 Nawr ar yr ochr dde-law llinell 7 rydym yn galw GetString, 158 00:09:36,030 --> 00:09:40,150 yr ydym wedi bod yn ei wneud nawr am wythnosau, ond yr hyn sy'n GetString ei wneud mewn gwirionedd? 159 00:09:40,150 --> 00:09:43,350 GetString a ysgrifennwyd gan y staff CS50 ychydig yn ddeallus 160 00:09:43,350 --> 00:09:46,500 yn bod cyn gynted ag y defnyddiwr yn dechrau allweddi teipio a hits Mewnbynnu, 161 00:09:46,500 --> 00:09:50,010 GetString ffigurau allan faint o keystrokes wnaeth y daro defnyddiwr, 162 00:09:50,010 --> 00:09:53,360 faint o gymeriadau sydd eu hangen arnaf i ddyrannu RAM ar eu cyfer. 163 00:09:53,360 --> 00:09:55,660 A lle y RAM yn dod o, pwy a ŵyr? 164 00:09:55,660 --> 00:09:58,930 Mae'n rhywle yn eich cyfrifiadur Sant 2 gigabeit neu whatnot o gof. 165 00:09:58,930 --> 00:10:05,200 Ond gadewch i ni dybio bod y cyfrifiadur o hyd lle ar gyfer y gair HELO iawn yma. 166 00:10:05,200 --> 00:10:08,710 Mae'r gair yr wyf deipio yn H-E-L-L-O. 167 00:10:08,710 --> 00:10:13,510 Ac os ydym yn tynnu hyn fel dilyniant o gymeriadau, efallai y byddwn yn ei dynnu fel hyn. 168 00:10:13,510 --> 00:10:17,860 Ond mae angen i mi wneud 1 peth ychwanegol. Beth perthyn ar ddiwedd unrhyw llinyn yn C? 169 00:10:17,860 --> 00:10:20,710 Mae'r cymeriad null, yr ydym yn ysgrifennu fel \ 0. 170 00:10:20,710 --> 00:10:23,980 Mae'n dechnegol y 0 rhif, ond mae'r ôl-slaes yn gwneud yr holl gliriach 171 00:10:23,980 --> 00:10:28,150 bod hyn yn llythrennol y rhif 0, y 0 cyfanrif; 172 00:10:28,150 --> 00:10:32,440 na, er enghraifft, dyfynnwch-unquote 0 y gallech deipio ar y bysellfwrdd. 173 00:10:32,440 --> 00:10:33,940 Felly mae hyn yn HELO. 174 00:10:33,940 --> 00:10:36,350 >> A beth oedd yr ydym yn dweud ar ddydd Llun bod swyddogaeth fel GetString 175 00:10:36,350 --> 00:10:39,580 mewn gwirionedd yn dychwelyd yr holl wythnosau hyn? 176 00:10:39,580 --> 00:10:43,960 Dyw hi ddim yn dychwelyd llinyn fel y cyfryw oherwydd nid yw hynny'n wir mae ystyr 177 00:10:43,960 --> 00:10:47,710 oherwydd nad llinynnau yn bodoli. Maent yn fath o fabrication yn y llyfrgell CS50. 178 00:10:47,710 --> 00:10:51,300 Beth yw mewn gwirionedd yn llinyn, yn fwy technegol? >> [Myfyrwyr] Mae'n cymeriad cyntaf. 179 00:10:51,300 --> 00:10:55,950 Yn union. Mae'n syml iawn yw'r cyfeiriad y nod cyntaf y mae'r defnyddiwr deipio i mewn 180 00:10:55,950 --> 00:11:02,810 Felly, os bydd fy gair HELO dod i ben i fyny yn 123 beit rhif ac yna yn rhif beit 124, 181 00:11:02,810 --> 00:11:08,320 125, 126, ac yn y blaen, os wyf dim ond rhif fy bytes o 0 ar i fyny, 182 00:11:08,320 --> 00:11:12,650 beth sydd wir yn GetString yn dychwelyd yn llythrennol 123 rhif. 183 00:11:12,650 --> 00:11:19,270 Felly, beth sy'n cael ei roi yn s yn y 123 Nid rhif, H llythyr, nid y gair HELO, 184 00:11:19,270 --> 00:11:23,130 yn syml y cyfeiriad lle y gallaf ddod o hyd i'r llythyren gyntaf HELO. 185 00:11:23,130 --> 00:11:26,500 Ond nid yw hynny'n ymddangos fel ddigon. Rwy'n gofyn i chi am llinyn, nid cymeriad. 186 00:11:26,500 --> 00:11:32,970 Felly sut rydym neu'r cyfrifiadur yn gwybod bod ELLO fath o ddod ynghyd â'r H? 187 00:11:35,760 --> 00:11:37,460 Beth y math o gytundeb sydd gennym? Yeah. 188 00:11:37,460 --> 00:11:40,100 [Myfyrwyr] Mae'n cadw dweud ei hun i ddod o hyd i gymeriadau rhai mwy. >> Yn union. 189 00:11:40,100 --> 00:11:44,570 >> Mae confensiwn hwn ddynol-gyfrifiadur lle pan fyddwch yn delio â llinynnau, 190 00:11:44,570 --> 00:11:49,410 a elwir yn awr fel sêr torgoch, rydych yn syml rhaid i chi chyfrif i maes 191 00:11:49,410 --> 00:11:54,350 lle ddiwedd pob llinyn mewn bywyd yw drwy mewn gwirionedd dim ond ailadrodd drosto gyda dolen i, 192 00:11:54,350 --> 00:11:57,820 a, dolen tra bod beth bynnag, felly pan fyddwch yn dod o hyd diwedd y llinyn 193 00:11:57,820 --> 00:12:02,160 nawr gallwch gasglu oddi wrth hynny, oh, y gair cyfan yn HELO. 194 00:12:02,160 --> 00:12:04,820 Gall y rhai ohonoch sydd â phrofiad blaenorol rhaglennu yn gwybod yn Java 195 00:12:04,820 --> 00:12:09,880 gallwch ffonio. hyd ac mewn ieithoedd eraill y gallwch eu ffonio hyd neu debyg. 196 00:12:09,880 --> 00:12:14,060 Mae hynny oherwydd mewn llawer o ieithoedd, yn enwedig pethau o'r enw gwrthrych-oriented ieithoedd, 197 00:12:14,060 --> 00:12:18,580 hyd rhywbeth yn fath o tu fewn crynhoi y darn o ddata ei hun, 198 00:12:18,580 --> 00:12:24,000 llawer yn hoffi ydym IDs crynhoi ac enwau a thai tu mewn i fyfyriwr ar ddydd Llun. 199 00:12:24,000 --> 00:12:28,700 Ond mae C yn lefel llawer is. Nid oes unrhyw wrthrychau neu ddosbarthiadau, os ydych chi wedi clywed y telerau hynny o'r blaen. 200 00:12:28,700 --> 00:12:31,490 Y cyfan sydd raid wir yn gyfeiriadau cof. 201 00:12:31,490 --> 00:12:35,540 Felly, mae hyn yn fath o ffordd hen ffasiwn o gynrychioli strwythurau data diddorol. 202 00:12:35,540 --> 00:12:38,760 Mae gennych werth dechrau fel y cyfeiriad y nod cyntaf 203 00:12:38,760 --> 00:12:42,340 ac yna dim ond rhai confensiwn mympwyol bod pawb yn cytuno i ddilyn. 204 00:12:42,340 --> 00:12:46,420 Felly sut mae hyd llinyn rhoi ar waith, wnaethon ni gynnig? 205 00:12:46,420 --> 00:12:51,360 Strlen, strlen, y mae rhai ohonoch wedi defnyddio erbyn hyn ychydig o weithiau. Mae'n eithaf syml, dde? 206 00:12:51,360 --> 00:12:53,060 Mae fel 2 linell o god. 207 00:12:53,060 --> 00:12:56,140 Mae'n 'n bert lawer yn ddolen ar gyfer o ryw fath, efallai gyda newidyn lleol ychwanegol. 208 00:12:56,140 --> 00:13:00,540 Ond strlen yn unig wedi i gymryd pwyntydd ac yna dechrau chwilio am \ 0. 209 00:13:00,540 --> 00:13:05,190 >> A chyn gynted ag y mae'n ei chael yn, gall ddychwelyd cyfanswm nifer y camau y mae wedi cymryd yn y llinyn. 210 00:13:05,190 --> 00:13:07,150 Felly, gallwn gasglu o hyn yr hyn sy'n digwydd nesaf. 211 00:13:07,150 --> 00:13:11,850 Gadewch i ni dybio yna rwyf yn datgan t gan fy mod i wedi gwneud yn llinell 10. 212 00:13:11,850 --> 00:13:14,280 Mae hyn yn rhai gwerth garbage. Pwy sy'n gwybod yn gyntaf? 213 00:13:14,280 --> 00:13:18,490 Ond ar yr ochr dde-law o linell o 10 Rwy'n galw GetString eto. 214 00:13:18,490 --> 00:13:20,050 Pwy a ŵyr lle mae hyn yn dod i ben i fyny? 215 00:13:20,050 --> 00:13:23,830 Gadewch i ni fympwyol dweud bod y system weithredu o hyd lle iddo ffordd dros yma. 216 00:13:23,830 --> 00:13:28,610 Yr wyf yn digwydd i gyd-ddigwyddiad deipio H-E-L-L-O eto, 217 00:13:28,610 --> 00:13:31,260 ac felly gallwn dynnu yr un math o llun. 218 00:13:31,260 --> 00:13:34,290 Ond y ffaith fy mod i wedi ail-lunio darlun hwn yn fwriadol 219 00:13:34,290 --> 00:13:37,720 oherwydd mae hynny'n a. wahanol HELO na hwn 220 00:13:37,720 --> 00:13:43,920 Felly dyma gallai hyn fod yn lleoliad 456, mae hyn yn 457, ac yn y blaen. 221 00:13:43,920 --> 00:13:47,170 Felly, beth sy'n cael ei roi lle y marc cwestiwn unwaith oedd? 222 00:13:47,170 --> 00:13:50,190 Yn yr achos hwn 456. 223 00:13:50,190 --> 00:13:53,540 Rydym yn casglu rhifau hyn fympwyol oherwydd wir ar ôl heddiw 224 00:13:53,540 --> 00:13:57,110 nid ydym yn mynd i ofalu cymaint am yr hyn y cyfeiriad unrhyw beth yn. 225 00:13:57,110 --> 00:14:02,690 Mae pob ydym yn gofalu amdano yw ein bod yn gallu chyfrif i maes y cyfeiriad o rai darn o ddata fel HELO. 226 00:14:02,690 --> 00:14:07,100 >> Felly mewn gwirionedd yr hyn y rhan fwyaf o bobl yn ei wneud mewn gwyddoniaeth gyfrifiadurol wrth siarad am gyfeiriadau cof 227 00:14:07,100 --> 00:14:10,210 a siarad am awgrymiadau penodol, 228 00:14:10,210 --> 00:14:14,220 yn hytrach na trafferthu figuring 123 - sy'n gofalu lle mae y pethau hyn mewn gwirionedd yw, 229 00:14:14,220 --> 00:14:17,440 rydym yn unig yn gwybod ei fod ar ryw gyfeiriad rhifiadol - 230 00:14:17,440 --> 00:14:22,180 gallwn symleiddio'r byd a dim ond dweud bod s yn pwyntio at y cymeriad 231 00:14:22,180 --> 00:14:25,080 a t yn pwyntio at y cymeriad hwnnw. 232 00:14:25,080 --> 00:14:27,430 Ac mae'r ffaith ei fod yn saeth yn eithaf fwriadol 233 00:14:27,430 --> 00:14:31,610 oherwydd llythrennol nawr s yn pwyntio at H a t yn pwyntio at H eraill 234 00:14:31,610 --> 00:14:34,720 oherwydd ar ddiwedd y dydd, nid oes gwahaniaeth beth yw'r cyfeiriad yw, 235 00:14:34,720 --> 00:14:40,240 ond mae'n fater bod gennym y gallu i fynegi cyfeiriad hwnnw gyda rhai darn o god. 236 00:14:40,240 --> 00:14:42,730 Nid ydym wedi trin y cyfeiriadau hyn yn wir eto 237 00:14:42,730 --> 00:14:47,770 felly byddwn yn gweld lle gallwn interject a didoli o wneud pethau gyda awgrymiadau, 238 00:14:47,770 --> 00:14:52,030 ond am nawr yn llinell 12 llythrennol pa werthoedd yr ydym yn cymharu 239 00:14:52,030 --> 00:14:55,500 yn ôl y stori hon yn llinell 12? 240 00:14:56,570 --> 00:15:01,290 Rydym yn ei ddweud yw 123 gyfartal gyfartal i 456? Ac nad bendant yn wir. 241 00:15:01,290 --> 00:15:05,320 A hyd yn oed yn gysyniadol, mae'r pwyntydd yn bendant nid yr un fath gan fod hyn yn 242 00:15:05,320 --> 00:15:09,500 oherwydd eich bod yn galw GetString eilwaith, ac ni GetString yn ceisio bod yn glyfar super, 243 00:15:09,500 --> 00:15:12,470 Nid yw'n ceisio sylweddoli, oh, i chi deipio HELO 5 munud yn ôl; 244 00:15:12,470 --> 00:15:15,090 gadewch i mi roi i chi y pwyntydd un gan fy mod yn rhoi i chi o'r blaen, 245 00:15:15,090 --> 00:15:18,450 'i jyst yn dyrannu cyfran newydd o gof bob tro y byddwch yn ei alw. 246 00:15:18,450 --> 00:15:20,350 >> Felly sut rydym yn atgyweiria hon broblem? 247 00:15:20,350 --> 00:15:24,270 Os lefel uwch wyf am gymharu y llinynnau HELO a HELO - 248 00:15:24,270 --> 00:15:28,680 Nid wyf yn poeni am yr awgrymiadau - sut ydw i'n mynd ati i ateb y cwestiwn, 249 00:15:28,680 --> 00:15:31,980 oedd y defnyddiwr deipio yr un peth? Beth angenrheidiol yma? Yeah. 250 00:15:31,980 --> 00:15:35,200 [Myfyrwyr] Defnyddiwch swyddogaeth. >> Gallaf ddefnyddio swyddogaeth allan o'r bocs. 251 00:15:35,200 --> 00:15:38,170 Gallaf ddefnyddio swyddogaeth a elwir yn strcmp, s-t-r-c-m-p, 252 00:15:38,170 --> 00:15:41,190 dim ond y fersiwn cryno o ddweud llinyn cymharu. 253 00:15:41,190 --> 00:15:45,070 Ac os ydym yn mynd i mewn, er enghraifft, cymharu 2, sydd ymhlith taflenni heddiw, 254 00:15:45,070 --> 00:15:46,690 Rwy'n gwneud yn union hynny. 255 00:15:46,690 --> 00:15:51,750 Yr wyf yn cadw popeth arall yr un fath o linell 1 ar i lawr i 26 neu lai, 256 00:15:51,750 --> 00:15:54,360 ac yn awr sylwi ar y rhan hon wedi newid dim ond ychydig bach. 257 00:15:54,360 --> 00:15:57,690 Gadewch i ni anwybyddu llinell 28 am funud a chanolbwyntio yn unig ar yr un yma. 258 00:15:57,690 --> 00:16:00,410 Beth wnaethom ni ei ddweud Llun, fod str cymharu ei wneud? 259 00:16:00,410 --> 00:16:05,200 Mae'n ymdrin â'r broses o gymryd 2 awgrymiadau, sa t yn yr achos hwn, 260 00:16:05,200 --> 00:16:08,480 math o bron rhoi ei bys ar y 2 lythyren, 261 00:16:08,480 --> 00:16:11,530 a'r hyn y mae'n rhaid ei wneud yw rhywbeth fel dolen gyfnod, neu ar gyfer dolen, 262 00:16:11,530 --> 00:16:16,050 ac mae'n dweud a yw'r rhain yr un fath? Os felly, mae'n symud y bysedd neu'r awgrymiadau ymlaen. 263 00:16:16,050 --> 00:16:17,970 A yw'r rhain yr un fath, mae'r rhain yr un, y rhain, yr un fath 264 00:16:17,970 --> 00:16:22,710 rhain yn yr un, mae'r un? Ac www, rwy'n ar ddiwedd y llinyn ar lefel sa t. 265 00:16:22,710 --> 00:16:26,780 Nid wyf wedi dod o hyd i unrhyw wrthddywediadau. Ydy, mae'r rhain llinynnau yn yr un fath. 266 00:16:26,780 --> 00:16:31,940 A beth mae str cymharu ddychwelyd os 2 llinynnau yr un fath, mae'n debyg? Zero. 267 00:16:31,940 --> 00:16:35,900 Felly 0 yn dda yn yr achos hwn oherwydd os bydd yn dychwelyd -1 neu +1, 268 00:16:35,900 --> 00:16:40,560 sy'n golygu bod dim ond yn digwydd i ddod gerbron t yn nhrefn yr wyddor neu ar ôl t. 269 00:16:40,560 --> 00:16:43,760 A byddai pam fod yn ddefnyddiol i gael swyddogaeth sy'n dweud wrthych pa llinyn yn dod cyn 270 00:16:43,760 --> 00:16:46,720 neu ar ôl mewn geiriadur? 271 00:16:46,720 --> 00:16:48,740 [Myfyrwyr] Chwilio. >> Chwilio a didoli. 272 00:16:48,740 --> 00:16:51,730 >> Felly, gallwch wneud pethau fel chwiliad deuaidd neu fath swigod neu uno fath 273 00:16:51,730 --> 00:16:53,230 lle mae'n rhaid i gymharu pethau. 274 00:16:53,230 --> 00:16:56,420 Hyd yn hyn rydym wedi fath o dorri rhai corneli a siarad yn unig am ddatrys 275 00:16:56,420 --> 00:16:59,430 yng nghyd-destun niferoedd oherwydd ei fod yn braf ac yn hawdd i siarad am, 276 00:16:59,430 --> 00:17:02,430 ond yn sicr gallwch gymharu llinynnau, afal a banana, 277 00:17:02,430 --> 00:17:05,349 oherwydd os afal yn hysbys i ddod gerbron banana, yn yr un modd, 278 00:17:05,349 --> 00:17:09,319 gallwch symud o gwmpas mewn llinynnau cof yn union fel y gwnaeth Rob gyda uno fath yn y fideo 279 00:17:09,319 --> 00:17:15,880 ac ni wneud hynny yma ar y llwyfan gyda, didoli dewis didoli mewnosod, a didoli swigen. 280 00:17:15,880 --> 00:17:18,710 Felly, ble arall rydym yn cymryd hyn? Gadewch i ni geisio hyn. 281 00:17:18,710 --> 00:17:23,980 Gadewch i ni fath o anghofio y wers honno am eiliad ac yn ceisio awr a chopïo 1.c i wneud y canlynol. 282 00:17:23,980 --> 00:17:26,800 Yn llinell 21 i ddim yn dweud rhywbeth print, 283 00:17:26,800 --> 00:17:28,520 yna rwy'n cael llinyn gan y defnyddiwr, 284 00:17:28,520 --> 00:17:30,690 yna rwy'n gwirio hyn. 285 00:17:30,690 --> 00:17:33,620 Nid ydym wedi gotten wir i mewn arfer hwn eto, ond gadewch i ni nawr wneud hyn. 286 00:17:33,620 --> 00:17:40,990 Gadewch i ni mewn gwirionedd croen yn ôl haen hon. Mae hyn yn wir * torgoch. Mae hyn yn guy yn wirioneddol * torgoch. 287 00:17:40,990 --> 00:17:45,690 Felly, beth mae'n ei olygu i fod yn gwirio os yw == null? 288 00:17:45,690 --> 00:17:48,380 Mae'n troi allan bod pan fyddwch yn ffonio swyddogaeth fel GetString 289 00:17:48,380 --> 00:17:51,540 neu'n fwy cyffredinol yn unig yn gofyn cyfrifiadur i roi peth cof, 290 00:17:51,540 --> 00:17:53,030 gallai rhywbeth fynd o'i le. 291 00:17:53,030 --> 00:17:56,630 Gallech fod yn wallgof ac yn gofyn i'r cyfrifiadur am terabeit o gof 292 00:17:56,630 --> 00:18:01,780 drwy ofyn am trillions o bytes o gof sydd nid yn unig yn bodoli yn y cyfrifiadur, 293 00:18:01,780 --> 00:18:05,130 ond mae swyddogaethau GetString ac eraill angen rhyw ffordd o gweiddi arnoch chi 294 00:18:05,130 --> 00:18:06,820 os ydych wedi gofyn am ormod. 295 00:18:06,820 --> 00:18:10,450 A'r ffordd GetString gwneud hyn yw os ydych wedi gofyn am fwy o cof 296 00:18:10,450 --> 00:18:14,250 nag sydd ar gael yn y cyfrifiadur, hyd yn oed os mai super, super tebygolrwydd isel 297 00:18:14,250 --> 00:18:17,730 oherwydd nid oes neb ohonom yn mynd i deipio cymeriadau triliwn ac yna pwyswch Enter, 298 00:18:17,730 --> 00:18:21,980 ond tebygolrwydd yn isel er y gall fod, yr wyf yn dal yn awyddus i edrych ar ei gyfer rhag ofn, 299 00:18:21,980 --> 00:18:26,120 a'r gwerth arbennig sy'n dychwelyd GetString, ateb, a swyddogaethau eraill 300 00:18:26,120 --> 00:18:30,630 os bydd rhywbeth wedi mynd o'i le yn NULL ym mhob gapiau. 301 00:18:30,630 --> 00:18:36,520 >> A beth yw null? NULL ond fel y digwydd i gynrychioli pwyntydd. Mae'n 0 cyfeiriad cof. 302 00:18:36,520 --> 00:18:40,800 Mae'r byd fod yn fympwyol, os yw hyn yn fy cof cyfrifiadur - eich bod yn gwybod beth? - 303 00:18:40,800 --> 00:18:46,260 rydym yn mynd i ddwyn dim ond 1 beit o gof bob cyfrifiadur, ac mae hyn yn lleoliad 0. 304 00:18:46,260 --> 00:18:49,560 Rydym yn mynd i roi ei lysenw o NULL, ac rydym yn mynd i addo 305 00:18:49,560 --> 00:18:52,660 na fyddwn byth yn mewn gwirionedd yn rhoi data go iawn yno 306 00:18:52,660 --> 00:18:56,770 oherwydd rydym yn unig fympwyol angen werth arbennig, 0, aka NULL, 307 00:18:56,770 --> 00:19:00,230 fel y gallwn gweiddi ar ddefnyddwyr os bydd rhywbeth yn mynd o'i le. 308 00:19:00,230 --> 00:19:03,590 Fel arall, efallai nad ydych yn gwybod yn 0 yn golygu rhoi rhywbeth yma 309 00:19:03,590 --> 00:19:05,490 ynteu a yw'n golygu rhywbeth yn mynd o'i le? 310 00:19:05,490 --> 00:19:09,190 Mae'n rhaid i ni i gyd yn cytuno nad oes unrhyw beth yn golygu NULL dychwelyd, 311 00:19:09,190 --> 00:19:11,700 unrhyw gyfeiriad gwirioneddol yn dychwelyd. 312 00:19:11,700 --> 00:19:15,210 Nawr, dyma Im 'jyst yn mabwysiadu fy confensiwn dynol yr wyf yn dychwelyd 1 o brif 313 00:19:15,210 --> 00:19:17,040 os bydd rhywbeth yn mynd o'i le. 314 00:19:17,040 --> 00:19:20,650 Mae hynny oherwydd confensiwn dychwelyd prif yw dychwelyd 0 os da, 315 00:19:20,650 --> 00:19:22,990 1 neu rhywfaint o werth arall os drwg. 316 00:19:22,990 --> 00:19:28,200 Ond GetString ac unrhyw swyddogaeth sy'n delio mewn ffurflenni cof NULL os aiff rhywbeth drwg. 317 00:19:28,200 --> 00:19:33,480 >> Iawn. Felly, yn anffodus, llinell 27, syml super er ei bod yn, yn methu'n llwyr i copi y llinyn. 318 00:19:33,480 --> 00:19:35,740 Pam? Gallwn weld hyn fel a ganlyn. 319 00:19:35,740 --> 00:19:40,120 Rwy'n hawlio yn unol 27 i gael eu gwneud copi o s a galw ei t. 320 00:19:40,120 --> 00:19:45,790 Felly dydw i ddim yn gofyn i'r defnyddiwr ar gyfer 2 llinynnau y tro hwn; Im 'jyst yn dweud y gwerth yn s 321 00:19:45,790 --> 00:19:47,870 dylid eu rhoi mewn t yn ogystal. 322 00:19:47,870 --> 00:19:52,890 Felly, yn awr yn unig i ddangos sut y mae hyn yn torri, yn llinell 29 ymlaen beth ydw i'n ei wneud? 323 00:19:52,890 --> 00:19:56,980 Yn gyntaf rwy'n gwirio os yw hyd y t yn fwy na 0. 324 00:19:56,980 --> 00:19:59,330 Mae rhywfaint o linyn yno. Y defnyddiwr deipio rhywbeth i mewn 325 00:19:59,330 --> 00:20:03,410 Beth yw llinell 32 yn ei wneud, mae'n debyg? 326 00:20:03,410 --> 00:20:08,910 [Ymateb y myfyrwyr Anghlywadwy] Hawl >>. Gallwch fath o awgrymu'n o'r hyn a ddywedais ei fod yn ei wneud. 327 00:20:08,910 --> 00:20:13,200 Ond yn dechnegol, beth mae hyn yn ei wneud? t [0] cynrychioli'r hyn? 328 00:20:13,200 --> 00:20:15,140 [Myfyrwyr] Y cymeriad 0. >> [Malan] Y cymeriad 0. 329 00:20:15,140 --> 00:20:19,620 Neu, yn fwy dynol-fel, y nod cyntaf mewn t, beth bynnag hynny yw, H efallai yn yr achos hwn. 330 00:20:19,620 --> 00:20:24,990 A toupper gwneud yr hyn y mae'n ei ddweud. Os yw'n manteisio cymeriad 0 o t ac mae'n newid ei. 331 00:20:24,990 --> 00:20:28,430 Felly, mae hyn yn golygu cymryd y cymeriad 0 o t, ei gwneud yn priflythyren, 332 00:20:28,430 --> 00:20:30,320 a'i roi yn ôl yn yr un lleoliad. 333 00:20:30,320 --> 00:20:35,540 Felly, os wyf yn teipio helo mewn llythrennau bach, dylai hyn newid y h lythrennau bach i H. cyfalaf 334 00:20:35,540 --> 00:20:41,400 Ond y broblem yw bod mewn llinellau 35 a 36 yr hyn rwy'n ar fin ei wneud yw argraffu i ni sa t. 335 00:20:41,400 --> 00:20:43,120 A beth yw eich hunch? 336 00:20:43,120 --> 00:20:47,250 Beth ydw i'n wir yn mynd i weld os wyf wedi'i deipio mewn helo ym mhob llythrennau bach? 337 00:20:47,250 --> 00:20:52,280 Beth sy'n mynd i gael eu hargraffu? >> [Anghlywadwy ymateb y myfyrwyr] >> Beth sy'n bod? 338 00:20:52,280 --> 00:20:58,360 [Myfyrwyr] Big H a gweddill bach. >> Mae H fawr ac mae'r gweddill bach ar gyfer y, s neu t? 339 00:20:58,360 --> 00:21:03,170 [Myfyrwyr] Mae'r ddau. >> Ddau. Yn union. Felly, gadewch i ni weld beth sy'n mynd ymlaen yma. 340 00:21:03,170 --> 00:21:08,380 >> Gadewch i mi fynd yn ei flaen ac yn llunio hyn. Mae hyn yn copy1, felly gwnewch yn copy1. Mae pob hawl. 341 00:21:08,380 --> 00:21:14,840 Chwyddo i mewn Gadewch i mi fynd yn ei flaen ac yn rhedeg copy1, Mewnbynnu, Dweud rhywbeth: helo mewn llythrennau bach. 342 00:21:14,840 --> 00:21:19,570 Mae'n cyfalafu y copi, ond mae'n debyg cyfalafu y gwreiddiol yn ogystal, 343 00:21:19,570 --> 00:21:22,070 oherwydd yr hyn bellach yn digwydd yn y stori hon? 344 00:21:22,070 --> 00:21:27,030 Yn llinell 27 Nid wyf yn ymddangos i fod yn copïo y llinyn, 345 00:21:27,030 --> 00:21:30,450 ond hyd yn oed er y gallai eich bod wedi gobeithio reddfol bod i fod yn wir, 346 00:21:30,450 --> 00:21:33,680 os ydych yn meddwl am y llun, yr hyn mewn gwirionedd a wneuthum i? 347 00:21:33,680 --> 00:21:35,410 Mae hanner y darlun yr un fath. 348 00:21:35,410 --> 00:21:39,390 Felly, gadewch i ni gyflwyno yn ôl mewn amser fel nad t yn bodoli eto yn y stori. 349 00:21:39,390 --> 00:21:43,160 Gall S yn bodoli yn y stori, ond gadewch i lythrennau bach hello y tro hwn. 350 00:21:43,160 --> 00:21:46,710 Felly, gadewch i mi atgyweiria hyn yr wyf deipio mewn gwirionedd mewn 351 00:21:46,710 --> 00:21:51,280 Yn yr achos yma mae gennym h-e-l-l-o. 352 00:21:51,280 --> 00:21:58,050 Byddwn yn tynnu fel dilyniant o gymeriadau, yn rhoi fy llinellau gwahanydd yma ac fy \ 0. 353 00:21:58,050 --> 00:22:05,980 Felly, dyma lle rydym yn cyn gynted ag llinell 1 trwy 24-ish, rhoi neu gymryd, wedi cyflawni. 354 00:22:05,980 --> 00:22:07,800 Dyma lun o fy nghof. 355 00:22:07,800 --> 00:22:10,800 Pan fyddaf yn mynd i'r llinell 27, beth sy'n digwydd? 356 00:22:10,800 --> 00:22:14,730 Yn union fel o'r blaen, byddaf yn cael pwyntydd, a bydda i'n tynnu gan fod hyn yn sgwâr. 357 00:22:14,730 --> 00:22:19,740 Mae'n cael ei alw t. A beth yw ei werth yn ddiofyn? Pwy a wyr? Mae rhai gwerth garbage. 358 00:22:19,740 --> 00:22:22,060 >> Felly, 'n annhymerus' haniaethol bod i ffwrdd fel marc cwestiwn. 359 00:22:22,060 --> 00:22:27,670 A chyn gynted ag yr ochr dde-law llinell 27 executes, beth ydw i'n rhoi y tu mewn o t? 360 00:22:27,670 --> 00:22:30,770 Mae'r un peth sy'n sydd yn s. 361 00:22:30,770 --> 00:22:34,120 Felly, os ydym am eiliad dileu'r tynnu y saeth, ac rydym yn dweud, 362 00:22:34,120 --> 00:22:40,330 oh, mae hyn yn gyfeiriad 123 llwyth cof, pan fyddwch yn dweud t yn cael s, hanner colon, 363 00:22:40,330 --> 00:22:42,700 ydych yn llythrennol yn rhoi 123 yma. 364 00:22:42,700 --> 00:22:45,200 Nawr, os ydym yn fath o symleiddio ein byd unwaith eto gyda lluniau, 365 00:22:45,200 --> 00:22:48,750 beth rydych wedi ei wneud mewn gwirionedd yn cael ei ychwanegu un arall saeth i eich byd 366 00:22:48,750 --> 00:22:52,910 sydd wedi pwyntio o'r t i'r llinyn union yr un. 367 00:22:52,910 --> 00:22:59,730 Felly pan yn llinell 31 a 32 Fi 'n weithredol fynd ati i newid t [0], 368 00:22:59,730 --> 00:23:05,580 beth yw t [0] ymddangos yn gyfystyr â nawr? s [0] 369 00:23:05,580 --> 00:23:07,030 Felly dyna'r cyfan sy'n digwydd. 370 00:23:07,030 --> 00:23:09,900 A hyd yn oed er bod y math hwn o yn teimlo lefel ychydig yn isel ac yn ddirgel 371 00:23:09,900 --> 00:23:12,760 ac y math hwn o bosibl yn teimlo fel yn reddfol dylai hyn fod wedi gweithio yn unig - 372 00:23:12,760 --> 00:23:15,410 Rydw i wedi gwneud copïau o bethau cyn ac 'i jyst yn gweithio - 373 00:23:15,410 --> 00:23:18,590 os ydych mewn gwirionedd yn meddwl am yr hyn y llinyn mewn gwirionedd, mae'n * torgoch. 374 00:23:18,590 --> 00:23:21,700 Wel, beth yw hynny? Dyma'r cyfeiriad ryw gymeriad. 375 00:23:21,700 --> 00:23:24,930 Yna, efallai ei fod yn gwneud mwy o synnwyr pan fyddwch yn ceisio gwneud rhywbeth 376 00:23:24,930 --> 00:23:29,220 super ymddangos yn syml fel hyn, y cyfan rydych chi'n ei wneud yn copïo cyfeiriad cof. 377 00:23:29,220 --> 00:23:32,530 Dydych chi ddim mewn gwirionedd yn gwneud unrhyw beth gyda'r llinyn ei hun. 378 00:23:32,530 --> 00:23:37,500 Felly, hyd yn oed os nad oes gennych syniad sut y byddech yn datrys y broblem hon mewn cod, 379 00:23:37,500 --> 00:23:45,080 lefel uchel, yn gysyniadol, beth sydd angen i ni ei wneud er mwyn gwneud ta gopi cywir o s, mae'n debyg? 380 00:23:46,670 --> 00:23:48,820 Yeah. >> [Myfyrwyr] Rhowch gynnig lleoliad newydd? >> Yn union. 381 00:23:48,820 --> 00:23:50,800 >> Mae angen i ni roi t lleoliad newydd sbon. 382 00:23:50,800 --> 00:23:55,230 Mae angen i ni rywsut yn creu byd yr ydym yn cael darn newydd o gof, 383 00:23:55,230 --> 00:24:00,090 sydd yn unig ar gyfer mwyn eglurder y byddaf yn tynnu dde o dan yr un yma, ond nid oes angen i fod yno. 384 00:24:00,090 --> 00:24:04,880 Ond mae angen iddo fod yr un maint, felly byddaf yn tynnu hyn llinellau fertigol yn yr un lle. 385 00:24:04,880 --> 00:24:09,720 Mae'n iawn os yw hyn yn holl garbage i ddechrau. Pwy a ŵyr beth oedd yno? 386 00:24:09,720 --> 00:24:13,850 Ond mae cam 1 yn mynd i gael i gael ei roi i mi fel cof gymaint ag yr wyf ei angen 387 00:24:13,850 --> 00:24:18,630 i osod copi o helo, ac yna chyfrif i maes sut i gopïo h yma, mae'r e yma, 388 00:24:18,630 --> 00:24:20,390 y l yma ac yn y blaen. 389 00:24:20,390 --> 00:24:24,880 Ond mae hyn eisoes fod yn teimlo ychydig yn amlwg hyd yn oed os yw rhai o'r manylion yn dal yn haniaethol. 390 00:24:24,880 --> 00:24:28,690 I gopïo y llinyn i mewn i hyn, 'i' jyst am ddolen neu ddolen tra 391 00:24:28,690 --> 00:24:31,580 neu rywbeth yr ydych wedi dod yn fwy cyfarwydd. 392 00:24:31,580 --> 00:24:35,970 Felly, gadewch i ni geisio hyn. Gadewch i mi fynd i mewn i copy2.c. 393 00:24:35,970 --> 00:24:43,270 Yn copy2.c mae gennym bron yr un rhaglen ac eithrio ar gyfer llinell 27. 394 00:24:43,270 --> 00:24:47,260 Mae'n edrych braidd yn gymhleth, ond os ydym yn ei dorri i lawr darn wrth ddarn, 395 00:24:47,260 --> 00:24:48,950 yr ochr chwith yr un fath. 396 00:24:48,950 --> 00:24:52,790 Torgoch * t yn creu y peth hyn mewn cof, er gyda marc cwestiwn 397 00:24:52,790 --> 00:24:54,680 oherwydd nid oes gennym unrhyw syniad beth sydd yno yn ddiofyn. 398 00:24:54,680 --> 00:24:57,920 Ar yr ochr dde rydym yn awr yn cyflwyno swyddogaeth newydd, malloc, 399 00:24:57,920 --> 00:25:00,640 ar gyfer cof dyrannu, yn rhoi i mi cof, 400 00:25:00,640 --> 00:25:06,900 ac mae'n debyg cymryd faint o ddadleuon, faint o bethau y tu mewn cromfachau? 401 00:25:09,660 --> 00:25:12,130 Clywais duchan 1 a 2, ond dim ond 1. 402 00:25:12,130 --> 00:25:15,320 Does dim coma, sy'n golygu mae dim ond 1 peth y tu mewn i'r cromfachau. 403 00:25:15,320 --> 00:25:17,720 Hyd yn oed er mae cromfachau eraill, gadewch i mi dynnu sylw at 404 00:25:17,720 --> 00:25:21,460 beth sydd tu mewn i'r cromfachau pellaf, ac mae'n ymadrodd hwn: 405 00:25:21,460 --> 00:25:25,880 (Strlen (s) + 1) * sizeof (torgoch). 406 00:25:25,880 --> 00:25:29,190 Felly, os ydym mewn gwirionedd yn meddwl hyn trwy, mae hyn yn ei ddweud yn rhoi i mi hyd s. 407 00:25:29,190 --> 00:25:34,440 Pam ydw i, fodd bynnag, ychwanegu 1 ar y hyd? >> [Anghlywadwy ymateb y myfyrwyr] 408 00:25:34,440 --> 00:25:40,200 Yn union. Mae angen lle ar gyfer y boi yn y gynffon, y cymeriad chweched oes unrhyw ystyr Saesneg 409 00:25:40,200 --> 00:25:42,250 ond nid oes rhaid ystyr arbennig rhaglennol. 410 00:25:42,250 --> 00:25:46,800 >> Felly mae angen + 1 am hynny am fod strlen dychwelyd y disgwyliad dynol o hyd, 411 00:25:46,800 --> 00:25:50,890 helo neu 5, nid yw'n rhoi i chi y cymeriad null ychwanegol. 412 00:25:50,890 --> 00:25:52,980 Felly, yr wyf â llaw yn ychwanegu hyn gyda + 1. 413 00:25:52,980 --> 00:25:56,060 Ac yna mae hyn, maint * o (torgoch), nid ydym wedi gweld hyn o'r blaen. 414 00:25:56,060 --> 00:25:57,480 Nid yw hyn yn dechnegol swyddogaeth. 415 00:25:57,480 --> 00:26:04,150 Mae'n keyword arbennig mai dim ond yn dweud wrthych beth yw'r maint yn rhai math data ar gyfrifiadur 416 00:26:04,150 --> 00:26:06,980 oherwydd mewn gwirionedd, mae rhai ohonom yn 32-bit cyfrifiaduron. 417 00:26:06,980 --> 00:26:10,900 Mae gen i gyfrifiadur eithaf hen yn y cartref, a dim ond yn defnyddio 32 catiau i gynrychioli awgrymiadau. 418 00:26:10,900 --> 00:26:13,900 Ac felly os wnes i faint o fath data, gallai fod yn 32 ddarnau. 419 00:26:13,900 --> 00:26:18,300 Ond os wyf yn defnyddio fy nghyfrifiadur newydd ffansi, efallai y byddwn yn mynd yn ôl gwerth o 64 did 420 00:26:18,300 --> 00:26:20,510 ar gyfer rhywbeth fel cyfeiriad. 421 00:26:20,510 --> 00:26:25,400 Felly, yn yr achos hwn, dim ond i fod yn ddiogel super, nid ydym yn mynd i rywbeth cod caled fel - 422 00:26:25,400 --> 00:26:28,740 yn dda, beth yw maint y golosg yn ôl i'r hyn yr ydym wedi dweud hyd yn hyn? 423 00:26:28,740 --> 00:26:34,450 Rydym wedi dweud 'n bert lawer ar lafar ei fod yn 1 beit, a bod' n bert lawer yn wir ar draws y bwrdd. 424 00:26:34,450 --> 00:26:37,000 Ond unwaith eto, rhagdybiaethau yn tueddu i fod yn ddrwg. 425 00:26:37,000 --> 00:26:40,850 Maent yn arwain i feddalwedd bygi os yw pobl yn defnyddio eich meddalwedd mewn ffyrdd nad oeddech yn bwriadu. 426 00:26:40,850 --> 00:26:44,750 Felly gadewch i ni haniaethol hyn i ffwrdd a dim ond yn fwy generig ddweud 427 00:26:44,750 --> 00:26:46,830 Fi angen y darnau llawer o gof 428 00:26:46,830 --> 00:26:50,210 a dylai pob darn o gof yn cyfateb i faint o gymeriad, 429 00:26:50,210 --> 00:26:54,870 sydd mewn gwirionedd yn hafal i 1 yn yr achos hwn, ond mae'n ffordd fwy cyffredinol o ysgrifennu. 430 00:26:54,870 --> 00:27:00,460 Felly, os yw'r gair yn helo, faint o bytes yn ôl pob golwg malloc ddyrannu ar gyfer helo? 431 00:27:00,460 --> 00:27:04,980 [Myfyrwyr] Chwech. >> Chwech. Yn union gymaint ag y byddwn wedi marciau cwestiwn ar y sgrîn. 432 00:27:04,980 --> 00:27:07,800 Ac yna cymryd dyfalu awr yn seiliedig ar eich dealltwriaeth o GetString 433 00:27:07,800 --> 00:27:12,790 beth mae malloc yn debygol o ddychwelyd? >> [Myfyrwyr] Mae cyfeiriad. 434 00:27:12,790 --> 00:27:17,020 Mae cyfeiriad beth? O'r darn cyntaf o cof. 435 00:27:17,020 --> 00:27:20,670 >> Nid oes gennym unrhyw syniad beth sydd yno oherwydd bod rhai swyddogaeth arall 436 00:27:20,670 --> 00:27:23,010 gellid bod wedi defnyddio'r cof yn flaenorol. 437 00:27:23,010 --> 00:27:28,380 Ond malloc, fel GetString, yn dychwelyd cyfeiriad y beit cyntaf o cof 438 00:27:28,380 --> 00:27:30,540 ei fod wedi neilltuo i chi. 439 00:27:30,540 --> 00:27:38,380 Fodd bynnag, yr hyn nad yw'n ei wneud yw llenwi hwn yn wag gyda null slaes cymeriad 440 00:27:38,380 --> 00:27:43,030 oherwydd ei fod yn troi allan gallwch ddefnyddio malloc i ddyrannu unrhyw beth: ints, llinynnau, araeau, 441 00:27:43,030 --> 00:27:45,700 fflotiau, strwythurau myfyrwyr. 442 00:27:45,700 --> 00:27:47,750 Gallwch ddefnyddio malloc gwbl generig. 443 00:27:47,750 --> 00:27:51,470 Nid yw'n gofalu neu rhaid i chi wybod beth rydych chi'n dyrannu cof ar gyfer. 444 00:27:51,470 --> 00:27:55,810 Felly, byddai'n rhyfygus i malloc i roi 0 \ 445 00:27:55,810 --> 00:27:58,340 ar ddiwedd pob darn o gof mae'n rhoi i chi 446 00:27:58,340 --> 00:28:02,620 gan fod hyn yn \ 0 peth yn unig yw gonfensiwn ar gyfer llinynnau. 447 00:28:02,620 --> 00:28:06,310 Dyw hi ddim yn ei ddefnyddio ar gyfer ints, nid yw'n ei ddefnyddio ar gyfer fflotiau, nid yw'n cael ei ddefnyddio ar gyfer myfyrwyr. 448 00:28:06,310 --> 00:28:11,730 Ac felly y Gotcha gyda malloc yw bod y baich yn gyfan gwbl ar chi y rhaglennydd 449 00:28:11,730 --> 00:28:16,790 gofio faint o bytes ydych wedi ei glustnodi, ac nid i erioed defnyddio ar gyfer dolen 450 00:28:16,790 --> 00:28:21,570 neu ddolen ychydig ac yn mynd heibio ffin y darn o gof a roddwyd i chi. 451 00:28:21,570 --> 00:28:23,540 Rhowch ffordd arall, cyn gynted ag y byddwch yn dyrannu cof, 452 00:28:23,540 --> 00:28:28,510 Ni allwch ofyn y system weithredu, oh, gan y ffordd, pa mor fawr o ddarn o gof oedd hyn? 453 00:28:28,510 --> 00:28:32,080 Mae'n hollol i fyny i chi i gofio os ydych angen y gwerth. 454 00:28:32,080 --> 00:28:34,330 >> Felly, gadewch i ni weld sut yr wyf yn symud ymlaen i ddefnyddio'r cof. 455 00:28:34,330 --> 00:28:38,430 Yn llinell 28 a 29 pam ydw i'n gwneud hyn? 456 00:28:39,850 --> 00:28:42,260 Dim ond gwiriad pwyll cyfanswm. 457 00:28:42,260 --> 00:28:45,110 Rhag ofn rhywbeth yn mynd o'i le, yr wyf yn gofyn am ryw swm crazy o gof 458 00:28:45,110 --> 00:28:48,690 neu fy mod wedi cymaint o bethau yn rhedeg ar y cyfrifiadur nad oes nid yn unig yn ddigon o gof, 459 00:28:48,690 --> 00:28:51,780 rhywbeth fel 'na, yr wyf o leiaf am i wirio am null. 460 00:28:51,780 --> 00:28:55,260 Mewn gwirionedd, bydd y rhan fwyaf o gyfrifiaduron yn rhoi i chi y rhith bod pob rhaglen 461 00:28:55,260 --> 00:28:57,080 ddefnyddio eich holl RAM, 462 00:28:57,080 --> 00:29:00,740 ond hyd yn oed felly, os bydd y defnyddiwr mewn rhai mathau llinyn hir crazy efallai oherwydd eu bod yn ddyn drwg 463 00:29:00,740 --> 00:29:03,440 ac maent yn bod mewn gwirionedd yn ceisio at chwilfriwia eich rhaglen neu darnia i mewn iddo, 464 00:29:03,440 --> 00:29:07,300 rydych am o leiaf wirio gwerth dychwelyd malloc ac a yw'n cyfateb null. 465 00:29:07,300 --> 00:29:11,630 Ac os ydyw, gadewch i 'jyst roi'r gorau iddi ar hyn o bryd gan nad wyf yn gwybod beth i'w wneud yn yr achos hwnnw. 466 00:29:11,630 --> 00:29:13,950 Sut ydw i'n gopïo y llinyn? Mae ychydig o ffyrdd i wneud hyn. 467 00:29:13,950 --> 00:29:18,850 Mae str gopïo swyddogaethau yn C, ond mae'n super syml i ni wneud hyn, mae'r hen-ffasiwn ffordd. 468 00:29:18,850 --> 00:29:23,110 >> Yn gyntaf gadewch i mi chyfrif i maes beth hyd s yn. 469 00:29:23,110 --> 00:29:26,930 Gallwn fod wedi rhoi hyn yn y ddolen ond yn hytrach Fi jyst ei roi allan yma er eglurder. 470 00:29:26,930 --> 00:29:30,610 Felly n awr yn storio hyd y llinyn gwreiddiol, sydd i bob golwg 5. 471 00:29:30,610 --> 00:29:35,290 Yna, yn fy ddolen ar gyfer rwy'n ailadrodd o 0 ar hyd at n, 472 00:29:35,290 --> 00:29:40,940 ac ar bob iteriad rwy'n rhoi s [i] tu mewn t [i]. 473 00:29:40,940 --> 00:29:45,060 Felly dyna beth wyf yn awgrymu gyda fy 2 bysedd yn pwyntio at y llinynnau o'r blaen. 474 00:29:45,060 --> 00:29:49,260 Fel hyn ar gyfer dolen ailadrodd fel hyn, dwi'n mynd i fod yn copïo h i mewn yma, 475 00:29:49,260 --> 00:29:52,890 e i mewn yma, l i yma oherwydd mae hyn yn s, mae hyn yn t. 476 00:29:52,890 --> 00:29:58,770 Ac yna yn olaf, yn llinell 35 ar pam ydw i'n gwneud hyn? 477 00:29:58,770 --> 00:30:03,770 Angen i mi wneud yn siwr fy mod yn dod i ben y llinyn t. 478 00:30:03,770 --> 00:30:06,170 Ac yr wyf yn gwneud hynny y ffordd i fod yn super penodol. 479 00:30:06,170 --> 00:30:09,510 Ond gynnig, rhywun, pe gallech, yn ffordd wahanol o wneud hyn. 480 00:30:09,510 --> 00:30:13,930 Dydw i ddim wir angen llinell 35. Mae ffordd arall i wneud hyn. 481 00:30:13,930 --> 00:30:18,880 Yeah. >> [Anghlywadwy ymateb y myfyrwyr] >> Dywedwch uwch. 482 00:30:18,880 --> 00:30:20,960 [Myfyrwyr] Llai na neu'n hafal i. >> Yn union. 483 00:30:20,960 --> 00:30:24,450 Gallem ddweud yn llai na neu'n hafal i n, sydd yn gyffredinol wedi bod yn ddrwg 484 00:30:24,450 --> 00:30:28,190 fod bron bob amser pan fyddwn yn mynd i fyny at gyfartal at y peth rydym yn cyfrif 485 00:30:28,190 --> 00:30:30,000 rydym yn mynd 1 cam yn rhy bell. 486 00:30:30,000 --> 00:30:32,170 Ond cofiwch, faint o bytes oedd yr ydym yn dyrannu? 487 00:30:32,170 --> 00:30:37,210 Rydym yn dyrannu strlen s, hynny 5 + 1 am gyfanswm o 6. 488 00:30:37,210 --> 00:30:39,980 Felly, yn yr achos hwn y gallem wneud rhywbeth fel hyn 489 00:30:39,980 --> 00:30:46,450 fel ein bod yn copïo nid yn unig y helo ond hefyd y 0 \ ar y diwedd un. 490 00:30:46,450 --> 00:30:49,860 Fel arall, gallem ddefnyddio swyddogaeth a elwir yn str copi, strcpy, 491 00:30:49,860 --> 00:30:51,700 ond ni fyddai hynny'n hwyl bron cymaint. 492 00:30:51,700 --> 00:30:54,000 Ond dyna i gyd mae'n ei wneud o dan y cwfl. 493 00:30:54,000 --> 00:30:56,050 Yna, yn olaf, rydym yn gwneud yr un peth ag o'r blaen. 494 00:30:56,050 --> 00:31:01,620 I fanteisio t ac yna yr wyf yn honni bod y gwreiddiol yn edrych fel hyn a'r copi yn edrych fel 'na. 495 00:31:01,620 --> 00:31:08,570 Felly, gadewch i ni geisio hyn yn awr. Gadewch i mi fynd i mewn yma. Gwnewch copy2. Byddwn yn chwyddo i mewn ac yn rhedeg copy2. 496 00:31:08,570 --> 00:31:13,840 Rydw i'n mynd i deipio hello yn llythrennau bach, ac yn wir i mi gael lythrennau bach helo fel y gwreiddiol 497 00:31:13,840 --> 00:31:16,930 ond cyfalaf Helo am y copi. 498 00:31:16,930 --> 00:31:20,300 Ond dydw i ddim yn gwneud dim ond eto. Angen i mi wneud 1 peth olaf yma. 499 00:31:20,300 --> 00:31:28,000 46 a 47 yn amlwg yn rhyddhau cof, ond beth mae hynny'n ei olygu mewn gwirionedd? 500 00:31:28,000 --> 00:31:33,250 Beth ydw i'n ei wneud, yn eich barn chi, drwy ffonio llinell 46 a llinell 47? 501 00:31:33,250 --> 00:31:38,900 Pa effaith mae'n ei gael? Yeah. 502 00:31:38,900 --> 00:31:43,140 [Ymateb y myfyrwyr Anghlywadwy] >> Yn union. 503 00:31:43,140 --> 00:31:46,380 >> Rydych yn unig yn dweud wrth y system weithredu, hey, diolch am y cof. 504 00:31:46,380 --> 00:31:48,320 Gallwch yn awr ei ddefnyddio ar gyfer rhywun arall. 505 00:31:48,320 --> 00:31:50,790 A dyma enghraifft berffaith o werthoedd garbage. 506 00:31:50,790 --> 00:31:55,430 Rwyf wedi defnyddio dim ond y cof i ysgrifennu i lawr y gair hello yn 2 le, 507 00:31:55,430 --> 00:31:57,490 yma, yma, yma, ac yma. 508 00:31:57,490 --> 00:32:00,910 Felly mae hyn yn h-e-l-l-o-\ 0. 509 00:32:00,910 --> 00:32:06,960 Ond yna yr wyf ffoniwch llinell 46 a llinell 47, a ydych yn gwybod beth sy'n digwydd yno o ran y llun? 510 00:32:06,960 --> 00:32:10,010 A dweud y gwir, aros, mae'r darlun hwn yn yr hen un. 511 00:32:10,010 --> 00:32:12,550 Unwaith y byddwn yn gwneud y copi, y boi mewn gwirionedd yn pwyntio yma, 512 00:32:12,550 --> 00:32:16,110 felly gadewch i ni gael gwared ar y rhifau a dim ond haniaethol i ffwrdd fel ein saethau eto. 513 00:32:16,110 --> 00:32:19,370 Beth sy'n digwydd yn y llun pan fyddaf yn galw am ddim? 514 00:32:19,370 --> 00:32:22,750 [Ymateb y myfyrwyr Anghlywadwy] >> Ddim hyd yn oed. 515 00:32:22,750 --> 00:32:29,510 Os byddaf yn ffoniwch am ddim ar sa t - math o gwestiwn tric - nid y darlun hwn yn newid o gwbl 516 00:32:29,510 --> 00:32:33,880 oherwydd galw s ac yn galw t jyst yn dweud wrth y system weithredu, 517 00:32:33,880 --> 00:32:39,010 hey, gallwch ddefnyddio hwn cof eto, ond nid yw'n newid hyn i null 518 00:32:39,010 --> 00:32:41,840 neu ryw gymeriad arbennig, nid yw'n newid hyn, 519 00:32:41,840 --> 00:32:47,350 nid yw'n newid y h neu'r e neu'r l neu'r l neu'r o naill ai mewn lle i unrhyw beth arall. 520 00:32:47,350 --> 00:32:51,610 O ran y darlun, cyn gynted ag y byddwch yn galw dim yn newid rhad ac am ddim,. 521 00:32:51,610 --> 00:32:56,570 Ac yno yn gorwedd y tarddiad o werthoedd garbage oherwydd os wyf yna yn ddiweddarach yn y rhaglen hon 522 00:32:56,570 --> 00:33:01,010 gofyn i'r system weithredu ar gyfer cof mwy o GetString neu malloc neu rywbeth fel 'na 523 00:33:01,010 --> 00:33:04,900 a'r system weithredu yn dweud, yn sicr, yr wyf wedi 12 bytes o gof rhyddhau yn unig i fyny, 524 00:33:04,900 --> 00:33:08,080 ddefnyddio'r rhain, beth ydych chi'n mynd i gael ei rhoi? 525 00:33:08,080 --> 00:33:10,830 Rydych yn mynd i gael eu trosglwyddo darn o gof y byddem fel arfer yn tynnu 526 00:33:10,830 --> 00:33:13,700 gyda marciau cwestiwn, ond beth yw'r rhai marciau cwestiwn? 527 00:33:13,700 --> 00:33:17,000 Maent yn digwydd bod yn h-e-l-l-o, h-e-l-l-o. 528 00:33:17,000 --> 00:33:20,940 Mae'r rhain yw ein gwerthoedd garbage newydd cyn gynted ag y byddwch yn rhyddhau'r bod y cof. 529 00:33:20,940 --> 00:33:22,750 >> Mae goblygiadau byd go iawn yma hefyd. 530 00:33:22,750 --> 00:33:24,720 Mae hyn yn digwydd i wneud gyda RAM, ond bod eich cyfrifiaduron 531 00:33:24,720 --> 00:33:26,720 mewn gwirionedd yn gwneud yr un peth gyda disg. 532 00:33:26,720 --> 00:33:30,620 Byddwn yn siarad am hyn yn benodol gyda set problemau yn y dyfodol sy'n canolbwyntio ar fforensig. 533 00:33:30,620 --> 00:33:36,170 Ond beth yn union sy'n digwydd os oes gennych rywfaint ffeil ariannol sensitif ar eich bwrdd gwaith 534 00:33:36,170 --> 00:33:39,600 neu ryw JPEG fras ac rydych yn llusgo i mewn i'ch sbwriel, 535 00:33:39,600 --> 00:33:44,390 beth sy'n digwydd pan rydych yn llusgo i mewn i'r sbwriel neu'r bin ailgylchu? 536 00:33:44,390 --> 00:33:47,240 Rydych yn gwybod beth oeddwn yn sôn amdano. [Chwerthin] 537 00:33:47,240 --> 00:33:52,370 Beth sy'n digwydd pan fyddwch wedi llusgo y dystiolaeth yn eich bin ailgylchu neu sbwriel yn gallu? 538 00:33:52,370 --> 00:33:55,920 [Ymateb y myfyrwyr Anghlywadwy] 539 00:33:55,920 --> 00:33:58,000 Wel, mor ofalus. Beth sy'n digwydd pan fyddwch yn gwneud hynny? 540 00:33:58,000 --> 00:34:01,030 Yr ateb byr yw ddim, dde? 541 00:34:01,030 --> 00:34:04,790 Ffeil fratiog neu sensitif yn dal i eistedd yno yn rhywle yn eich disg galed. 542 00:34:04,790 --> 00:34:07,940 Mae'r rhan fwyaf ohonom o leiaf wedi dysgu'r ffordd galed bod angen i chi wagio eich sbwriel 543 00:34:07,940 --> 00:34:10,429 neu eich recycle bin i mewn gwirionedd yn dileu ffeiliau. 544 00:34:10,429 --> 00:34:13,440 Ac yn wir, pryd 'ch dde chlecia neu'n Rheoli cliciwch ar eich sbwriel yn gallu 545 00:34:13,440 --> 00:34:15,580 neu dewiswch File, Trash gwag neu beth bynnag 546 00:34:15,580 --> 00:34:21,420 a ydych mewn gwirionedd yn gwagio'r sbwriel yn gallu neu ailgylchu bin, beth yn union sy'n digwydd wedyn at y darlun hwn? 547 00:34:22,810 --> 00:34:25,969 Dim byd mwy. Felly dim byd mewn gwirionedd yn digwydd ar ddisg. 548 00:34:25,969 --> 00:34:30,880 >> Ac os ydym yn unig dros dro yn anghofio ac ysgrifennu - I'll defnyddiwch y cefn y. 549 00:34:30,880 --> 00:34:34,639 Felly, yn awr y stori yn newid o RAM, a dyna lle mae rhaglenni yn bodoli 550 00:34:34,639 --> 00:34:39,250 tra byddwch chi'n eu rhedeg, i ddisg, lle cânt eu storio yn y tymor hir 551 00:34:39,250 --> 00:34:42,920 hyd yn oed pan fydd y pŵer yn mynd allan, am y tro - a byddwn yn dod yn ôl i hyn yn y dyfodol - 552 00:34:42,920 --> 00:34:46,380 gadewch i ni dim ond esgus bod hyn yn cynrychioli y tu mewn yriant caled eich cyfrifiadur 553 00:34:46,380 --> 00:34:50,110 am fod yn ôl yn y dydd y maent yn arfer bod yn disg crwn, yn debyg iawn disgiau hyblyg. 554 00:34:50,110 --> 00:34:55,130 Felly, os ydych yn cael rhywfaint o ffeil Excel sensitif, gallai gymryd hyd y darn o gof 555 00:34:55,130 --> 00:34:59,770 ar ddisg eich cyfrifiadur, a Im 'jyst tynnu 1s un mympwyol a 0au. 556 00:34:59,770 --> 00:35:03,970 Pryd rydych yn llusgo y ffeil fel hynny i'ch sbwriel neu ailgylchu bin, 557 00:35:03,970 --> 00:35:07,750 llythrennol dim byd yn digwydd oherwydd bod Apple a Microsoft wedi penderfynu yn unig 558 00:35:07,750 --> 00:35:10,450 y sbwriel yn gallu ac ailgylchu bin mewn gwirionedd dim ond dalfan dros dro. 559 00:35:10,450 --> 00:35:14,710 Efallai y pen draw bydd y OS wagio i chi, ond yn nodweddiadol, nid yw'n gwneud unrhyw beth, 560 00:35:14,710 --> 00:35:17,090 o leiaf nes eich bod yn isel iawn ar y gofod. 561 00:35:17,090 --> 00:35:20,870 >> Fodd bynnag, pan fyddwch yn mynd i sbwriel wag neu wag ailgylchu bin, 562 00:35:20,870 --> 00:35:23,460 yn yr un modd, nid oes dim yn digwydd at y darlun hwn. 563 00:35:23,460 --> 00:35:28,590 Y cyfan sydd yn digwydd yn rhywle arall ar eich cyfrifiadur, mae rhyw fath o dabl. 564 00:35:28,590 --> 00:35:35,400 Mae'n fath o fel taflen twyllo ychydig sy'n dweud hynny, gadewch i ni ddweud, resume.doc, 565 00:35:35,400 --> 00:35:40,920 fel bod eich ailddechrau mewn ffeil Word Microsoft yn arfer byw yn y lleoliad 123 ar eich disg galed, 566 00:35:40,920 --> 00:35:43,710 nad ydynt mewn cof ac nid yn RAM, ond ar eich disg galed, 567 00:35:43,710 --> 00:35:49,050 a bod eich bywydau JPEG bendant ar 456, a bod eich ffeil Excel byw yn 789 neu ble bynnag. 568 00:35:49,050 --> 00:35:53,640 Pan fyddwch yn dileu ffeiliau drwy gwirionedd yn gwagio'r sbwriel neu'r bin ailgylchu, 569 00:35:53,640 --> 00:35:59,530 Nid yw y darlun hwn yn newid. Nid yw'r 0au ac 1 ar eich disg caled yn mynd yn unrhyw le. 570 00:35:59,530 --> 00:36:03,930 Ond y tabl hwn, y gronfa ddata fawr o ryw fath, yn newid. 571 00:36:03,930 --> 00:36:08,750 Pan fyddwch yn dileu eich CV, mae fel pe y ffeil yn cael ei ddileu mewn rhyw ystyr, 572 00:36:08,750 --> 00:36:12,790 ond mae'r holl cyfrifiadur yn cael ei anghofio lle y peth byw ar eich disg galed. 573 00:36:12,790 --> 00:36:17,870 Mae'r 0s a 1s sy'n cyfansoddi eich CV neu unrhyw un o'r ffeiliau eraill yn dal yn gyfan. 574 00:36:17,870 --> 00:36:21,960 >> Felly, os ydych yn gwneud hyn yn ddamweiniol, mae dal i fod yn tebygolrwydd nad yw'n sero 575 00:36:21,960 --> 00:36:25,800 y gallwch adennill eich data gan ddefnyddio Norton Utilities neu ryw feddalwedd fasnachol 576 00:36:25,800 --> 00:36:29,810 y mae ei bwrpas mewn bywyd yw dod o hyd 0s a 1s sydd wedi fath o amddifad, 577 00:36:29,810 --> 00:36:33,300 anghofio yma ond i'r chwith yma, fel y gallwch gael eich data yn ôl. 578 00:36:33,300 --> 00:36:38,410 Neu a fyddai'n ymchwilwyr fforensig gyda'r heddlu neu'r FBI mewn gwirionedd yn cymryd 'n anawdd cathrena 579 00:36:38,410 --> 00:36:42,550 ac mewn gwirionedd yn edrych am batrymau 0s a 1s sy'n edrych fel JPEG, yn edrych fel ffeiliau Excel, 580 00:36:42,550 --> 00:36:46,400 ac adennill iddynt y ffordd hyd yn oed os yw'r cyfrifiadur wedi anghofio amdanyn nhw yno. 581 00:36:46,400 --> 00:36:49,820 Felly, yr unig ffordd mewn gwirionedd i ddileu data, gan y bydd yn ei drafod yn y dyfodol, 582 00:36:49,820 --> 00:36:54,190 yw prysgwydd neu wipe y ffeil neu ddisg galed gan - 583 00:36:54,190 --> 00:36:56,540 Ni allwch gael gwared ar y 0au ac 1 584 00:36:56,540 --> 00:36:59,440 oherwydd fel arall y byddech yn dechrau gyda gyriant caled gigabyte 585 00:36:59,440 --> 00:37:02,380 a byddech yn darfod i fyny ag 'n anawdd cathrena megabeit os ydych yn gyson yn dileu, 586 00:37:02,380 --> 00:37:04,380 llythrennol, 0s a 1s. 587 00:37:04,380 --> 00:37:06,310 Felly, beth fyddech chi'n ei wneud os ydych wir eisiau i dalu eich traciau 588 00:37:06,310 --> 00:37:10,510 a'r broblem sylfaenol yw bod yn dal 0s a 1s ar y ddisg? 589 00:37:10,510 --> 00:37:14,930 Rwy'n gweld rhywun ystumiau y byddech yn gorfforol torri'r ddyfais. A fydd yn gweithio. 590 00:37:14,930 --> 00:37:19,600 [Chwerthin] Ond os dyna'r math o ateb drud, beth fyddai yn fwy rhesymol? 591 00:37:19,600 --> 00:37:23,270 Yeah. >> [Myfyrwyr] Ysgrifennu dros iddynt. >> Ysgrifennu dros iddynt beth? >> [Myfyrwyr] data eraill. 592 00:37:23,270 --> 00:37:29,070 Data eraill. Alli jyst trosysgrifo eich disg gyda 0au neu 1s neu bob 0au, pob 1s. 593 00:37:29,070 --> 00:37:31,230 >> A dyna yn wir beth mae rhai o'r meddalwedd ei wneud. 594 00:37:31,230 --> 00:37:33,570 Gallwch brynu meddalwedd neu hyd yn oed gael meddalwedd am ddim, 595 00:37:33,570 --> 00:37:36,610 ac adeiladu hyd yn oed i mewn i Mac OS y dyddiau hyn, yn llai felly mewn Ffenestri, 596 00:37:36,610 --> 00:37:38,660 yw'r gallu i ddileu ddiogel. 597 00:37:38,660 --> 00:37:41,960 Mewn gwirionedd, os ydych am i bob cartref yn rhedeg heddiw os oes gennych Mac a wnawn hyn, 598 00:37:41,960 --> 00:37:45,740 os oes gennych gall rhai pethau yn eich sbwriel, gallwch wneud Trash Diogel Gwag, 599 00:37:45,740 --> 00:37:47,610 sy'n gwneud yn union hynny. 600 00:37:47,610 --> 00:37:53,350 Yn hytrach na ffeiliau dileu yn unig yma, nid yw'n dileu'r yma 0s a 1s, 601 00:37:53,350 --> 00:38:01,240 yn hytrach, 'i jyst yn newid nhw i gyd, er enghraifft, i 0au a dot, dot, dot. 602 00:38:01,240 --> 00:38:05,330 Felly, bydd un o'ch psets yn y dyfodol mewn gwirionedd fod yn fwriadol adfer data - 603 00:38:05,330 --> 00:38:08,430 lluniau yr ydym wedi eu cymryd o bobl, lleoedd, a phethau ar y campws 604 00:38:08,430 --> 00:38:12,810 y byddwn yn gwneud delwedd fforensig o gerdyn cof camera digidol, gan 605 00:38:12,810 --> 00:38:17,120 sef yr un syniad yn union - a bydd yn rhaid i chi eu herio i ddod o hyd mewn gwirionedd 606 00:38:17,120 --> 00:38:20,160 y patrymau sy'n cynrychioli JPEG ar eich disg caled, 607 00:38:20,160 --> 00:38:23,610 lawer fel 'na cyn-fyfyriwr y mae ei e-bost yr wyf yn darllen ychydig wythnosau yn ôl oedd 608 00:38:23,610 --> 00:38:25,860 i adennill ffotograffau ei chwaer. 609 00:38:25,860 --> 00:38:30,300 Pam nad ydym yn cymryd egwyl o 5 munud yma, a byddwn yn regroup gyda mwy ar y cof. 610 00:38:33,030 --> 00:38:38,610 Felly, dyma lle mae pethau'n cael ychydig meddwl-blygu, ond mae hyn yn gam pwerus iawn 611 00:38:38,610 --> 00:38:40,480 tuag at ddeall hyn i gyd yn fwy. 612 00:38:40,480 --> 00:38:42,900 Dyma raglen o'r enw pointers.c. 613 00:38:42,900 --> 00:38:45,430 Mae'n un cod sampl heddiw. 614 00:38:45,430 --> 00:38:51,280 Sylwch fod yn y llinellau cyntaf, 19 trwy 22, y cyfan rydym yn ei wneud yn rhywbeth fel GetString 615 00:38:51,280 --> 00:38:54,460 a dychwelyd cyfeiriad, ei storio yn y s. 616 00:38:54,460 --> 00:38:58,380 O hyn allan am pset hyd yn oed 3 os ydych eisiau ond pset 4 ac ar 617 00:38:58,380 --> 00:39:01,030 lle y gallwch ddechrau cymryd y olwynion hyfforddiant oddi ar eich hun, 618 00:39:01,030 --> 00:39:04,030 nid oes unrhyw reswm i esgus bod llinynnau bodoli anymore. 619 00:39:04,030 --> 00:39:07,030 Mae'n sicr yn iawn i ddim ond dechrau dweud * torgoch. 620 00:39:07,030 --> 00:39:12,610 >> Fel o'r neilltu, mewn cyfeiriadau ar-lein ac mewn llyfrau efallai y byddwch yn aml yn gweld y seren nesaf at y newidyn. 621 00:39:12,610 --> 00:39:15,600 Efallai y byddwch hyd yn oed weld mannau o gwmpas y ddau o boptu iddo. 622 00:39:15,600 --> 00:39:17,680 Mae pob un o'r rheini yn swyddogaethol gywir. 623 00:39:17,680 --> 00:39:21,180 Am y tro, fodd bynnag, byddwn yn safoni ar y dull hwn i wneud super glir 624 00:39:21,180 --> 00:39:24,000 y * torgoch yn debyg i ddweud pwyntydd cymeriad. 625 00:39:24,000 --> 00:39:25,680 Dyna'r math data. 626 00:39:25,680 --> 00:39:28,730 Ac yna enw'r newidyn s yn yr achos hwn. 627 00:39:28,730 --> 00:39:31,180 Felly, rydym wedi gotten llinyn ac rydym wedi galw ei s. 628 00:39:31,180 --> 00:39:35,180 Ac yna i lawr yma yn sylwi fy mod yn gwneud mewn gwirionedd ychydig o dwyll. 629 00:39:35,180 --> 00:39:39,080 Gelwir hyn yn, rhifyddeg pwyntydd sydd yn fath o syml super. 630 00:39:39,080 --> 00:39:41,790 Mae'n jyst yn golygu adio a thynnu rhifau hyd at awgrymiadau. 631 00:39:41,790 --> 00:39:43,660 Ond mae hyn yn gweithio mewn gwirionedd. 632 00:39:43,660 --> 00:39:49,170 Mae'r rhaglen hon yn ymddangos yn argraffu'r llinyn s 1 cymeriad fesul llinell fel bod y canlyniad terfynol - 633 00:39:49,170 --> 00:39:54,920 Dim ond er mwyn i ni difetha lle mae hyn yn mynd, gwneud awgrymiadau, awgrymiadau redeg, gadewch i mi chwyddo i mewn 634 00:39:54,920 --> 00:39:58,940 Nawr, gadewch i mi deipio i mewn rhywbeth fel HELO a math Rhowch 635 00:39:58,940 --> 00:40:01,080 ac y bydd yn argraffu 1 cymeriad fesul llinell. 636 00:40:01,080 --> 00:40:04,730 Hyd at eiliad yn ôl, byddem wedi gwneud hyn gyda nodiant braced sgwâr. 637 00:40:04,730 --> 00:40:09,760 Byddwn gennym ar gyfer dolen a byddem yn ei wneud printf o s [i] a byddem yn gwneud hynny eto ac eto ac eto 638 00:40:09,760 --> 00:40:11,950 gyda n slaes ar ddiwedd pob llinell. 639 00:40:11,950 --> 00:40:16,800 Ond mae'r rhaglen hon yn wahanol. Mae'r rhaglen hon yn defnyddio, yn llythrennol, rhifyddeg. 640 00:40:16,800 --> 00:40:18,860 Felly beth sy'n mynd ymlaen yma? 641 00:40:18,860 --> 00:40:24,720 Yn gyntaf oll, cyn i'r ddolen hyd yn oed yn gweithfeydd, beth, dim ond i fod yn glir, a oes mewn gwirionedd? 642 00:40:24,720 --> 00:40:27,270 S yw? >> [Myfyrwyr] Mae cyfeiriad. >> Mae cyfeiriad. 643 00:40:27,270 --> 00:40:32,980 >> Ac mae'n cyfeiriad, yn achos hello, y cymeriad cyntaf yn y gair, sydd yn h. 644 00:40:32,980 --> 00:40:37,370 Felly s, yn yr enghraifft benodol, y cyfeiriad h. 645 00:40:37,370 --> 00:40:41,850 Felly, beth mae'n ei olygu i wneud s + i? 646 00:40:41,850 --> 00:40:46,280 Wel, i ddechrau am 0 yn hyn ar gyfer dolen. Rydym wedi gwneud gwaith y mae llawer. 647 00:40:46,280 --> 00:40:49,760 I yn mynd i fynd i fyny i hyd y llinyn, mae'n debyg. 648 00:40:49,760 --> 00:40:53,950 Felly, ar y fersiwn gyntaf y ddolen, i yn amlwg 0. 649 00:40:53,950 --> 00:41:01,740 Felly ymadrodd hwn yn ei ddweud s + i - yn hytrach, s +0--dyna amlwg dim ond s. 650 00:41:01,740 --> 00:41:04,320 Felly, beth yw * s yma? 651 00:41:04,320 --> 00:41:08,530 Nawr rydym yn defnyddio'r seren mewn ffordd ychydig yn wahanol. 652 00:41:08,530 --> 00:41:13,080 Gadewch i mi fynd yn ei flaen a chael gwared ar t oherwydd ein bod yn gwneud yn siarad am t a chopïau o s. 653 00:41:13,080 --> 00:41:15,540 Nawr rydym yn unig am ddweud stori sy'n cynnwys s. 654 00:41:15,540 --> 00:41:20,090 Ac felly ar hyn o bryd, ar ôl cael llinyn fath, mae ein byd yn edrych yn eithaf tebyg y gwnaeth o'r blaen 655 00:41:20,090 --> 00:41:26,630 gyda dim ond s storio cyfeiriad h ac yn fwy cyffredinol pwyntio at y llinyn helo. 656 00:41:26,630 --> 00:41:33,170 Os byddaf yn ei wneud yn awr linell fel * (s + i), gadewch i ni geisio hyn. 657 00:41:33,170 --> 00:41:40,140 Felly * (s + i). Gadewch i mi symleiddio hyn oherwydd mae hyn yn 0, felly mae hwn yn * (s +0). 658 00:41:40,140 --> 00:41:43,790 Wel, arhoswch funud. Symleiddio ymhellach. Mae hyn yn * (au). 659 00:41:43,790 --> 00:41:47,020 Wel, yn awr y cromfachau yn fath o dwp, felly, yn awr gadewch i ni dim ond gwneud * s. 660 00:41:47,020 --> 00:41:50,540 Felly, yn y fersiwn gyntaf y ddolen, y llinell sydd wedi tynnu sylw at, 26, 661 00:41:50,540 --> 00:41:53,650 'n bert lawer cyfateb i argraffu hyn. 662 00:41:53,650 --> 00:41:56,040 Beth yw'r math o ddata * s? 663 00:41:56,040 --> 00:42:00,770 Yn y cyd-destun hwn, oherwydd bod y seren yn digwydd i fod yn nesaf at y au ei hun, 664 00:42:00,770 --> 00:42:04,930 ond yn fwy penodol, oherwydd ein bod bellach yn datgan s, 665 00:42:04,930 --> 00:42:09,730 nid ydym yn creu newidyn anymore, does dim sôn am * torgoch yn llinell 26, 666 00:42:09,730 --> 00:42:14,280 does dim sôn am y llinyn keyword, rydym ond yn defnyddio'r newidyn a elwir yn s, 667 00:42:14,280 --> 00:42:19,650 mae'n troi allan yn awr y seren ychydig yn wahanol ac, rhaid cyfaddef, yn ddryslyd ystyr. 668 00:42:19,650 --> 00:42:26,590 * S yma yn golygu mynd i'r cyfeiriad yn s ac argraffu beth bynnag sydd yno. 669 00:42:26,590 --> 00:42:33,750 Felly s yma, * s yw - math o fel llithrennau ac Ysgolion, dilynwch y saeth - yma. 670 00:42:33,750 --> 00:42:35,850 Felly, mae hyn yn s *. 671 00:42:35,850 --> 00:42:39,060 >> Felly, beth sy'n cael ei argraffu ar y fersiwn cyntaf y ddolen yn llinell 26? 672 00:42:39,060 --> 00:42:42,170 I argraffu%, c, sef y placeholder ar gyfer cymeriad, 673 00:42:42,170 --> 00:42:48,520 yna \ n ar gyfer llinell newydd. * (S + i) lle i yw 0 yn unig yw hyn. 674 00:42:48,520 --> 00:42:53,670 Felly beth torgoch ydw i'n rhoi i mewn ar gyfer c%? H. 675 00:42:53,670 --> 00:42:56,900 Yn y fersiwn nesaf y ddolen - mae'n debyg y gallwch weld lle mae hyn yn mynd - 676 00:42:56,900 --> 00:43:01,350 y fersiwn nesaf yn amlwg i 1, felly mae hyn yn golygu s +1, 677 00:43:01,350 --> 00:43:05,580 ac yna yn awr yr wyf angen y cromfachau oherwydd yn awr y seren mae angen i ddweud 678 00:43:05,580 --> 00:43:08,620 mynd i gyfeiriad cof s +1. 679 00:43:08,620 --> 00:43:14,170 Beth yw s? Gadewch i rholio yn ôl mewn amser ac yn dweud hyn saeth nid yn awr mewn gwirionedd yn gwneud i ni unrhyw ffafrio. 680 00:43:14,170 --> 00:43:18,450 Gadewch yn fwy penodol yn dweud bod hyn yn storio rhif 123 681 00:43:18,450 --> 00:43:25,110 oherwydd bod y ddechrau'r llinyn helo, mae hyn yn gyfeiriad 123, mae hyn yn 124, ac yn y blaen. 682 00:43:25,110 --> 00:43:30,550 Felly, ar yr ail ailadroddiad pan oeddwn i'n dweud s +1, dyna fel dweud 123 +1, 683 00:43:30,550 --> 00:43:35,340 elwir fel arall yn 124, felly beth golosg yn cael ei argraffu ar y ail ailadroddiad? 684 00:43:35,340 --> 00:43:37,850 E yn 124 cyfeiriad cof. 685 00:43:37,850 --> 00:43:44,440 Yna + eto, 125, 126, 127, ac mae hyn yn ddolen diolch byth yn dod i ben cyn i ni gyrraedd yma 686 00:43:44,440 --> 00:43:49,040 oherwydd fy mod i'n defnyddio strlen i wneud yn siŵr nad yw'n cyfrif i yn rhy uchel. 687 00:43:49,040 --> 00:43:50,810 Felly dyna hefyd yw hi. 688 00:43:50,810 --> 00:43:55,000 Unwaith eto, mae hyn yn union fel petaem wedi gwneud wythnos yn ôl. 689 00:43:55,000 --> 00:43:59,200 Gadewch i mi ysgrifennu ar y llinell isod er nad ydym am i wneud y ddau. 690 00:43:59,200 --> 00:44:02,500 Mae hyn yn union yr un fath bellach i hyn. 691 00:44:02,500 --> 00:44:08,310 >> Felly hyd yn oed er s yn llinyn, fel yr ydym wedi bod yn galw am wythnosau, mae mewn gwirionedd yn * torgoch. 692 00:44:08,310 --> 00:44:13,270 Felly, os ydym am fod yn rhefrol super, mae'n wirioneddol cywir i ysgrifennu cymeriad penodol 693 00:44:13,270 --> 00:44:17,490 yn y lleoliad ith defnyddio'r cyfeiriadau hyn rhifol ac mae'r gweithredwr seren, 694 00:44:17,490 --> 00:44:20,470 ond dweud y gwir, mae hyn yn lanach yn unig cymaint. Felly, nid yw hyn yn ddrwg. 695 00:44:20,470 --> 00:44:26,720 Dim rheswm i roi'r gorau i wneud llinell 27 yma, ond 26 yn swyddogaethol yr un fath, 696 00:44:26,720 --> 00:44:31,570 ac mae'n swyddogaethol yr un fath am yr union y rhesymau yr ydym wedi bod yn eu trafod hyd yn hyn. 697 00:44:31,570 --> 00:44:33,650 Ac yn olaf, 29 yn arfer unig yn dda. 698 00:44:33,650 --> 00:44:38,420 Galw yn rhad ac am s yn golygu bod yn awr eich bod yn rhoi rhywbeth yn ôl y cof sydd GetString a roddwyd i chi 699 00:44:38,420 --> 00:44:41,630 oherwydd eto, fel y soniais Dydd Llun, GetString am wythnosau 700 00:44:41,630 --> 00:44:44,180 wedi bod yn cyflwyno a bug i mewn i'ch cod. 701 00:44:44,180 --> 00:44:46,490 Eich cod ar gyfer wythnos wedi cael gollwng cof 702 00:44:46,490 --> 00:44:49,970 lle rydych wedi bod yn gofyn GetString ar gyfer cof, ond nad ydych erioed wedi bod yn rhoi yn ôl. 703 00:44:49,970 --> 00:44:53,410 A dyna ei dewis yn fwriadol gan i ni pedagogically 704 00:44:53,410 --> 00:44:55,880 oherwydd ei fod yn ormod i feddwl am yn gynnar. 705 00:44:55,880 --> 00:44:57,710 Ond nawr mae angen cymesuredd mwy. 706 00:44:57,710 --> 00:45:00,830 Os byddwch yn gofyn i'r cyfrifiadur ar gyfer cof, fel sy'n wir ar gyfer GetString, 707 00:45:00,830 --> 00:45:02,820 fel yn achos pob golwg dros malloc, 708 00:45:02,820 --> 00:45:07,970 mae'n rhaid i chi yn awr ar gyfer ymlaen pset 4 hefyd yn rhad ac am ddim unrhyw cof o'r fath. 709 00:45:07,970 --> 00:45:11,650 Sylwi ar hyn yn wahanol i ddweud n int. 710 00:45:11,650 --> 00:45:15,040 Nid oes angen i ryddhau hyn oherwydd nad oeddech yn galw GetString 711 00:45:15,040 --> 00:45:16,890 ac nid oeddech yn galw malloc. 712 00:45:16,890 --> 00:45:20,610 >> A hyd yn oed os ydych yn galw GetInt gan y byddwn yn y pen draw yn gweld, 713 00:45:20,610 --> 00:45:25,520 Nid GetInt yn dyrannu cof ar gyfer chi oherwydd gallwch chi mewn gwirionedd yn mynd o gwmpas cyfanrifau 714 00:45:25,520 --> 00:45:29,430 a fflotiau a chars dim ond y ffordd yr ydym wedi bod yn gwneud am wythnosau. 715 00:45:29,430 --> 00:45:33,960 Strings, fodd bynnag, yn arbennig oherwydd eu bod yn wir yn y concatenation o chars lluosog. 716 00:45:33,960 --> 00:45:37,450 Felly, maent yn unig yn wahanol o chars a fflotiau a ints ac yn y blaen. 717 00:45:37,450 --> 00:45:39,980 Ond byddwn yn dod yn ôl at hynny cyn hir. 718 00:45:39,980 --> 00:45:44,920 Unrhyw cwestiynau, yna ar y dechrau awgrymiadau? Yeah. 719 00:45:44,920 --> 00:45:49,690 [Gwestiwn myfyrwyr Anghlywadwy] 720 00:45:49,690 --> 00:45:51,440 Ah, cwestiwn da iawn. 721 00:45:51,440 --> 00:45:55,790 Un o'r ychydig bethau C yn ei wneud i chi, sydd yn gyfleus, 722 00:45:55,790 --> 00:46:00,110 mae'n cael ei ffigurau allan i chi beth yw'r maint yn y math data 723 00:46:00,110 --> 00:46:03,060 ac wedyn yn gwneud y math hwnnw o lluosi i chi. 724 00:46:03,060 --> 00:46:06,610 Mae hyn yn amherthnasol yn achos chars gan fod bron bob amser yn golosg yn 1 beit, 725 00:46:06,610 --> 00:46:08,150 felly mae hyn yn unig yn gweithio. 726 00:46:08,150 --> 00:46:11,220 Ond er mwyn drafodaeth, os ydych mewn gwirionedd yn argraffu cyfanrifau 727 00:46:11,220 --> 00:46:15,500 ac roeddech yn ceisio argraffu ar rai gwerth oedd yn pwyntio mewn cyfanrif, 728 00:46:15,500 --> 00:46:20,720 na fyddech yn yr un modd mae angen i wneud + 4 * fi jyst oherwydd bod int yw 4 bytes. 729 00:46:20,720 --> 00:46:25,780 Rhifyddeg Pointer yn golygu bod C a compiler wneud popeth mathemateg i chi. 730 00:46:25,780 --> 00:46:29,190 Y cyfan sydd raid i ofalu amdano yw'r cyfrif yn rhyw fath o synnwyr dynol. Yeah. 731 00:46:29,190 --> 00:46:35,200 [Myfyrwyr] Os ydych chi'n datgan llinyn y tu mewn i am ddolen, rhaid i chi ei ryddhau yn ddiweddarach? 732 00:46:35,200 --> 00:46:36,760 Da cwestiwn. 733 00:46:36,760 --> 00:46:41,390 >> Os byddwch yn datgan y tu mewn llinyn y ddolen ar gyfer, a oes angen i ryddhau yn ddiweddarach? 734 00:46:41,390 --> 00:46:47,520 Dim ond angen i chi cof am ddim eich bod yn dyrannu gyda GetString neu gyda malloc. 735 00:46:47,520 --> 00:46:53,110 Felly, os ydych yn unig yn dweud rhywbeth fel - gadewch i mi roi braces cyrliog nawr er yr holl cod yn gysylltiedig. 736 00:46:53,110 --> 00:46:58,580 Os byddwch yn gwneud rhywbeth, er buggily, fel hyn, cols * t = s, 737 00:46:58,580 --> 00:47:03,450 Nid oes angen i chi t am ddim oherwydd nad t oedd yn cynnwys unrhyw sôn am malloc neu GetString. 738 00:47:03,450 --> 00:47:08,960 Os ar y llaw arall wnaethoch chi hyn, GetString, yna ie, byddai angen i chi t rhad ac am ddim. 739 00:47:08,960 --> 00:47:14,350 Ac yn wir, eich unig gyfle i wneud hynny yn awr y tu mewn i'r ddolen, ar gyfer yr un rhifyn o gwmpas 740 00:47:14,350 --> 00:47:16,060 yr ydym wedi trafod yn y gorffennol. 741 00:47:16,060 --> 00:47:18,830 Fel arall, byddech yn dyrannu cof, dyrannu cof, dyrannu cof, 742 00:47:18,830 --> 00:47:21,230 ac ar ddiwedd y rhaglen oherwydd eich bod y tu allan y ddolen, 743 00:47:21,230 --> 00:47:24,240 Nid yw t yn bodoli, ond dydych chi byth dweud wrth y system weithredu 744 00:47:24,240 --> 00:47:26,750 nad oedd angen bod y cof anymore. 745 00:47:26,750 --> 00:47:30,430 A chyn hir, ar gyfer pset 4 neu 5 byddwn yn eich arfogi â rhaglen o'r enw Valgrind, 746 00:47:30,430 --> 00:47:34,160 sy'n debyg o ran ysbryd i'r GDB yn ei fod yn cael rhywfaint o ryngwyneb dirgel, 747 00:47:34,160 --> 00:47:35,750 ond mae ei phwrpas mewn bywyd yw eich helpu chi. 748 00:47:35,750 --> 00:47:39,380 Ac Valgrind yn rhaglen a fydd, yn y dyfodol yn chwilio eich rhaglenni 749 00:47:39,380 --> 00:47:42,550 chwilio am ollyngiadau cof, boed o GetString neu malloc, 750 00:47:42,550 --> 00:47:47,800 y byddwn yn dechrau defnyddio yn fwy wrth i ni roi'r gorau i ddefnyddio'r llyfrgell CS50 cymaint. 751 00:47:47,800 --> 00:47:53,030 Rydym yn olaf yn awr fath o eirfa a'r math o fodel meddwl mewn theori 752 00:47:53,030 --> 00:47:55,170 â hwy i ddatrys y rhaglen wedi torri. 753 00:47:55,170 --> 00:47:59,410 >> Felly, yn y rhaglen wedi torri, cyfnewid yn gweithio tu mewn cyfnewid, 754 00:47:59,410 --> 00:48:05,280 erioed, ond mae'n gweithio mewn gwirionedd yn y brif oherwydd bod y prif basiwyd yn x ac y, galw i gof, 755 00:48:05,280 --> 00:48:07,260 a'r rhai oedd yn pasio i mewn gan werthoedd, felly, i siarad. 756 00:48:07,260 --> 00:48:09,330 Mae copïau ohonynt a roddir i gyfnewid. 757 00:48:09,330 --> 00:48:12,520 Erbyn diwedd y cyfnewid, roedd a a b yn wir eu cyfnewid, 758 00:48:12,520 --> 00:48:16,120 ond wrth gwrs nid oedd x ac y, fel y trafodwyd ar ddydd Llun, wedi bod. 759 00:48:16,120 --> 00:48:19,940 Felly, yr wyf yn cynnig mewn gwyrdd yma bod hyn mewn gwirionedd yn yr ateb yma. 760 00:48:19,940 --> 00:48:22,640 Ac mewn gwirionedd, gadewch i mi symud fy sêr yn unig i fod yn gyson 761 00:48:22,640 --> 00:48:24,440 hyd yn oed er, unwaith eto, swyddogaethol nid yw hyn yn fater. 762 00:48:24,440 --> 00:48:28,730 Yn ystod yr wythnosau dyfodol, byddwn yn esbonio pryd a pham ei fod yn bwysig. 763 00:48:28,730 --> 00:48:30,600 Felly, mewn gwyrdd bellach yn ateb. 764 00:48:30,600 --> 00:48:33,700 A dweud y gwir, mae'n edrych yn llawer iawn anniben oherwydd fy mod yn cael yr holl o'r sêr. 765 00:48:33,700 --> 00:48:35,380 Gadewch i mi nodi un peth. 766 00:48:35,380 --> 00:48:40,040 Mae'r llinell uchaf yma lle mae'n dweud int * a a int * b 767 00:48:40,040 --> 00:48:42,820 yn sylfaenol yn gwneud yr un peth ag y mae bob amser yn. 768 00:48:42,820 --> 00:48:47,070 Mae'n datgan 2 ddadleuon neu baramedrau i gyfnewid, 769 00:48:47,070 --> 00:48:49,940 y cyntaf ac mae hynny'n argoeli'n int a elwir yn, 770 00:48:49,940 --> 00:48:53,100 yr ail ac mae hynny'n argoeli'n int o'r enw b. 771 00:48:53,100 --> 00:48:55,770 Yr unig beth sy'n newydd yn y fan hon yw'r ffaith bod yna seren yno. 772 00:48:55,770 --> 00:48:59,340 >> Beth mae hynny'n ei olygu? Nid yw A yn int, nid b yn int. 773 00:48:59,340 --> 00:49:04,100 A yw'r cyfeiriad yn int a b yw'r cyfeiriad int gwahanol. 774 00:49:04,100 --> 00:49:06,980 Down yma, dyma lle yr wyf yn cyfaddef C yn cael ddryslyd. 775 00:49:06,980 --> 00:49:09,790 Nawr rydym yn defnyddio seren, ond mae ganddo ystyr gwahanol mewn cyd-destun hwn. 776 00:49:09,790 --> 00:49:13,150 Gan nad ydym yn datgan awgrymiadau gan ein bod i fyny yma, 777 00:49:13,150 --> 00:49:15,500 yma rydym yn dereferencing pethau. 778 00:49:15,500 --> 00:49:21,520 Felly, yn dechnegol, y seren yn y cyd-destun hwn y llinell gyntaf, yn ail, a'r trydydd tu mewn cyfnewid 779 00:49:21,520 --> 00:49:24,560 yn y gweithredwr dereference a dim ond yn golygu mynd yno. 780 00:49:24,560 --> 00:49:27,400 Felly, yn union fel fy mys yn dilyn y saeth i h, 781 00:49:27,400 --> 00:49:31,100 * Modd yn mynd i'r cyfeiriad hwnnw a dod o hyd i mi int sy'n yno. 782 00:49:31,100 --> 00:49:34,250 * Yn golygu b mynd i'r cyfeiriad a basio i mi beth sydd yno. 783 00:49:34,250 --> 00:49:40,730 Felly, gadewch i ni ail-lunio'r darlun o ddydd Llun bellach yn defnyddio pentwr o fframiau, 784 00:49:40,730 --> 00:49:43,130 yr un gwaelod sydd yn mynd i fod yn brif, 785 00:49:43,130 --> 00:49:47,600 yr un uchaf sydd yn mynd i fod yn cyfnewid, 786 00:49:47,600 --> 00:49:50,880 fel bod ein byd yn edrych, yn union fel Llun, fel hyn. 787 00:49:50,880 --> 00:49:53,620 Dyma ddarn o gof y prif yn mynd i'w defnyddio. 788 00:49:53,620 --> 00:49:56,520 >> Dwyn i gof o ddydd Llun fod y rhaglen yn unig 2 o newidynnau, 789 00:49:56,520 --> 00:50:01,930 un a elwir yn x ac un o'r enw y, ac yr wyf wedi rhoi'r rhifau 1 a 2 yno. 790 00:50:01,930 --> 00:50:06,580 Nawr pan fydda i'n galw gyfnewid fel y gwnes i ar ddydd Llun, 791 00:50:06,580 --> 00:50:11,000 flaenorol pan fyddaf yn defnyddio'r fersiwn coch y rhaglen hon, sy'n edrych fel hyn, 792 00:50:11,000 --> 00:50:17,470 Rwy'n cael 2 paramedrau, a b, ac, a beth oedd byddwn yn ysgrifennu yma ac yma? 793 00:50:17,470 --> 00:50:21,160 Dim ond 1 a 2, yn llythrennol copïau o'r x ac y. 794 00:50:21,160 --> 00:50:23,070 Heddiw, rydym yn newid hynny. 795 00:50:23,070 --> 00:50:28,510 Heddiw, yn hytrach na pasio mewn ints a a b rydym yn mynd i basio i mewn 2 gyfeiriad. 796 00:50:28,510 --> 00:50:34,290 Mae'r rhai cyfeiriadau yn digwydd i bwyntio at ints, ond nid y rhai cyfeiriadau yn cael eu ints eu hunain. 797 00:50:34,290 --> 00:50:37,330 Maent yn gyfeiriadau. Mae fel cyfeiriad post yn lle hynny. 798 00:50:37,330 --> 00:50:40,580 Felly, yn awr mae angen i ni dim ond yn rhoi fy hun ychydig mwy o fanylder ar y sgrin. 799 00:50:40,580 --> 00:50:43,250 Mae hyn yn fy cof cyfrifiadur fel ei fod wedi bod drwy'r dydd. 800 00:50:43,250 --> 00:50:45,120 Nawr rydym angen rhywfaint o gynllun rhifo fympwyol. 801 00:50:45,120 --> 00:50:50,580 Felly, gadewch i 'jyst dweud, dim ond drwy siawns, bod hyn yn 123, cyfeiriad cof 124. 802 00:50:50,580 --> 00:50:55,660 Gadewch i 'jyst dweud hyn yw 125, mae hyn yn 126, ac yn y blaen, ond mae hynny'n hollol fympwyol. 803 00:50:55,660 --> 00:50:58,590 Rydym yn unig angen rhyw gynllun rhifo yn fy nghof. 804 00:50:58,590 --> 00:51:04,030 Felly nawr pan oeddwn mewn gwirionedd yn mynd yn x ac y, nid wyf ddim yn mynd i basio i mewn x ac y; 805 00:51:04,030 --> 00:51:08,400 Rydw i'n mynd i basio yn y cyfeiriad post, fel petai, o x a y 806 00:51:08,400 --> 00:51:11,870 fel nad yw yr hyn sy'n cael ei storio yma ac yma yw 1 a 2, 807 00:51:11,870 --> 00:51:16,030 ond os gallwch weld fy testun bach, beth sy'n cael ei phasio yma ac yma? 808 00:51:16,030 --> 00:51:23,340 [Ymateb y myfyrwyr Anghlywadwy] >> Yn union. 123 yn cael ei rhoi yma a 124 yn cael ei rhoi yma. 809 00:51:23,340 --> 00:51:28,910 >> Yn awr, oherwydd fy mod yn defnyddio'r seren yn y ffordd hon llinell gyntaf yma ar ben, 810 00:51:28,910 --> 00:51:34,340 fy rhaglen dim ond yn gwybod bod 123 a 124, er eu bod yn amlwg cyfanrifau 811 00:51:34,340 --> 00:51:40,160 y gallai unrhyw dynol yn sylwi arnynt, dylent gael eu dehongli fel cyfeiriadau, cyfeiriadau rhifol. 812 00:51:40,160 --> 00:51:43,250 Nid ydynt yn i mewn ac ohonynt eu hunain ints, maen nhw'n cyfeiriadau, 813 00:51:43,250 --> 00:51:46,120 ac mae hynny oherwydd fy mod wedi rhoi benodol y sêr yno. 814 00:51:46,120 --> 00:51:51,360 Felly, yn awr yn fy llinell gyntaf, ail, a'r trydydd o god gwirioneddol hyn sy'n digwydd yma? 815 00:51:51,360 --> 00:51:53,380 Gadewch i ni dynnu gweddill y llun. 816 00:51:53,380 --> 00:51:56,980 Tmp yn union fel yr oedd ar ddydd Llun. Nid oes dim arbennig am tmp. 817 00:51:56,980 --> 00:52:03,060 Mae'n yn unig yw 32 darnau lleol amrywiol, ac y tu mewn o hynny yr wyf yn ôl pob golwg storio gwerth * a. 818 00:52:03,060 --> 00:52:08,580 Yn awr, os wyf newydd ei ddweud tmp = a, beth fydden i'n ei roi yma? >> [Myfyrwyr] 123. 819 00:52:08,580 --> 00:52:10,370 123. Ond nid dyna beth rwy'n ei wneud. 820 00:52:10,370 --> 00:52:13,670 I ddim yn dweud tmp = * a. Golygu Star yn mynd yno. 821 00:52:13,670 --> 00:52:19,370 Felly dyma yw, 123. Sut ydw i'n mynd yno? Esgus fel mae saeth. 822 00:52:19,370 --> 00:52:24,460 Wel, dyna ni, 1. Felly, beth sy'n cael ei storio mewn tmp, mae'n debyg? Dim ond 1. 823 00:52:24,460 --> 00:52:29,620 Felly, mewn geiriau eraill, tmp yn * a, * modd yn mynd i'r cyfeiriad sydd ar hyn o bryd mewn, 824 00:52:29,620 --> 00:52:31,320 sydd i bob golwg 123. 825 00:52:31,320 --> 00:52:33,910 >> Iawn, dyma ni yn y lleoliad 123, rwy'n gweld y rhif 1, 826 00:52:33,910 --> 00:52:35,670 felly dwi'n mynd i roi'r rhif 1 yno. 827 00:52:35,670 --> 00:52:39,020 Nawr beth ddylwn i ei wneud yn llinell 2, * a = * b? 828 00:52:39,020 --> 00:52:44,570 Mae hyn yn un ychydig yn fwy o ran oherwydd yn awr beth yw? Mae'n 123. 829 00:52:44,570 --> 00:52:50,220 Felly * a lle? Hawl lle roeddwn o'r blaen. Felly, ewch yno. Iawn. 830 00:52:50,220 --> 00:52:53,420 Yn awr, yn olaf, ac yna yn olaf bydd hyn yn dechrau gwneud synnwyr, gobeithio, 831 00:52:53,420 --> 00:53:00,280 * B yn golygu yr hyn sydd yn b? 124. Felly, mae angen i mi fynd yno, sef 2. 832 00:53:00,280 --> 00:53:03,430 Felly, beth ddylwn i roi lle? 833 00:53:03,430 --> 00:53:10,100 2 yn mynd i mewn yma oherwydd * b yn mynd i mewn i * a. Felly, byddaf yn gwneud hynny. 834 00:53:10,100 --> 00:53:13,120 A allwch chi eisoes yn gweld, efallai, ein bod ni'n llawer agosach 835 00:53:13,120 --> 00:53:17,710 i ddatrys hyn dwp, problem syml yn gywir am y tro cyntaf 836 00:53:17,710 --> 00:53:20,920 oherwydd erbyn hyn mae gennym atgof o'r hyn a oedd x, 837 00:53:20,920 --> 00:53:23,230 mae gennym 2 gopi, rhaid cyfaddef, y y, 838 00:53:23,230 --> 00:53:25,850 ond llinell 3 awr yn dweud * b. 839 00:53:25,850 --> 00:53:31,080 Felly dyma b. * Yn golygu b mynd yno. Felly, lle yn lleoliad 124? 840 00:53:31,080 --> 00:53:35,560 Mae'n debyg yma. Felly, beth ddylwn i ei roi yma? Yn amlwg, tmp. 841 00:53:35,560 --> 00:53:39,600 Felly, yn awr yr wyf yn gwneud hyn. Felly mae gen i 1 yma a 2 yma. 842 00:53:39,600 --> 00:53:43,560 Ac yn awr beth am hyn oll, y 123, 124, a 1? 843 00:53:43,560 --> 00:53:47,910 Cyn gynted ag y ffurflenni cyfnewid, y cof cystal ag golli 844 00:53:47,910 --> 00:53:51,070 oherwydd cyn gynted ag y ffurflenni cyfnewid, y system weithredu 845 00:53:51,070 --> 00:53:54,190 yn rhad ac am ddim i ddefnyddio'r cof eto yn y dyfodol. 846 00:53:54,190 --> 00:53:58,870 Dim ond prif cof ar waelod y pentwr hyn a elwir yn ffyn o gwmpas. 847 00:53:58,870 --> 00:54:01,470 >> Ac felly rydym o'r diwedd yn awr bod fersiwn weithio. 848 00:54:01,470 --> 00:54:06,310 Gadewch i mi fynd i mewn i swap.c, ac yn sylwi ar y canlynol. 849 00:54:06,310 --> 00:54:11,280 Ar ben y rhaglen rwyf wedi newid fy prototeip i fod yn int * a a int * b. 850 00:54:11,280 --> 00:54:15,000 Felly, yr unig beth yr wyf newid i fynd o goch, a oedd yn ddrwg, i wyrdd, sy'n beth da, 851 00:54:15,000 --> 00:54:17,350 yn cael ei wyf yn ychwanegu y sêr heddiw. 852 00:54:17,350 --> 00:54:21,520 Ond yna i lawr yma yn cyfnewid ei hun oedd gen i gopïo, gludo yr hyn a oedd dim ond ar y sleid. 853 00:54:21,520 --> 00:54:24,140 Mae gen i seren yma, seren yma - sy'n cyfateb i prototeip - 854 00:54:24,140 --> 00:54:27,930 ac yna yr holl bethau hyn yn awr sêr ac eithrio ar gyfer tmp 855 00:54:27,930 --> 00:54:30,680 gan fod y defnydd o newidyn dros dro, does dim byd newydd yno. 856 00:54:30,680 --> 00:54:33,040 Fi jyst angen storio dros dro ar gyfer int. 857 00:54:33,040 --> 00:54:34,820 Felly nid oes angen seren yno. 858 00:54:34,820 --> 00:54:39,310 Rydym yn unig angen y seren er mwyn i ni groesi y math hwn o ffin mympwyol 859 00:54:39,310 --> 00:54:42,900 rhwng y 2 fframiau er cof am fy cyfrifiadur. 860 00:54:42,900 --> 00:54:45,630 Ond mae un peth olaf rhaid i hyn newid, ac efallai y byddwch wedi cael cipolwg ar yn barod. 861 00:54:45,630 --> 00:54:48,810 Pa llinell eraill yn amlwg yn wahanol erbyn hyn? >> [Myfyrwyr] & x. 862 00:54:48,810 --> 00:54:53,270 >> Yeah, felly 25 yn y llinell olaf o god angen i mi newid er mwyn i hyn weithio. 863 00:54:53,270 --> 00:54:58,360 Mae wythnos yn ôl a hyd yn oed ar ddydd Llun yn edrych llinell 25 fel hyn, cyfnewid x ac y, 864 00:54:58,360 --> 00:55:02,020 a chafodd hyn ei dorri oherwydd os ydych yn dweud cyfnewid (x, y) 865 00:55:02,020 --> 00:55:05,660 eich bod yn rhoi copïau o x ac y i gyfnewid, yna mae'n gwneud ei peth, 866 00:55:05,660 --> 00:55:09,080 ond nid ydych yn newid mewn gwirionedd x ac y ei hun. 867 00:55:09,080 --> 00:55:12,880 Felly, hyd yn oed os nad ydych erioed wedi gweld y cymeriad hwn o'r blaen gyda'r ampersand yn y cod, 868 00:55:12,880 --> 00:55:15,860 dim ond yn cymryd dyfalu. Beth mae'r ampersand yn ei wneud, mae'n debyg? 869 00:55:15,860 --> 00:55:17,890 [Myfyrwyr] Cymryd y cyfeiriad. >> Cymryd y cyfeiriad. 870 00:55:17,890 --> 00:55:21,160 Felly, mae'r ampersand yn ei ddweud yn rhoi i mi gyfeiriad x. 871 00:55:21,160 --> 00:55:25,590 Pwy a ŵyr ble y mae? Mae'n digwydd i fod yn 123. Dydw i ddim gofal. Jyst yn rhoi i mi gyfeiriad x. 872 00:55:25,590 --> 00:55:28,340 & Y yn golygu rhoi i mi gyfeiriad y. 873 00:55:28,340 --> 00:55:34,450 Ac ar y pwynt y stori yn berffaith gyson â'r darlun fe wnaethom funud yn ôl. 874 00:55:34,450 --> 00:55:38,310 >> Felly, 'n annhymerus' cyfaddef awgrymiadau, yn sicr i mi pan ddechreuais ddysgu hyn, 875 00:55:38,310 --> 00:55:40,570 yn bendant yn un o'r pethau anoddaf i lapio o gwmpas fy meddwl. 876 00:55:40,570 --> 00:55:43,760 Ond yn sylweddoli, yn enwedig wrth i ni barhau chwarae â'r mathau hyn o bethau, 877 00:55:43,760 --> 00:55:48,030 os byddwch yn torri i lawr at y math syml super o ddeallusol anniddorol problemau 878 00:55:48,030 --> 00:55:52,270 o dim ond symud o gwmpas rhifau, yr ateb i lawer o ddryswch gyda awgrymiadau 879 00:55:52,270 --> 00:55:56,590 wir yn gallu deillio o hyn mecaneg sylfaenol iawn. 880 00:55:56,590 --> 00:55:59,070 Dyma gyfeiriad. Ewch yno gyda'r seren. 881 00:55:59,070 --> 00:56:03,830 Neu i'r gwrthwyneb, dyma 'an ampersand. Chyfrif i maes beth yw'r cyfeiriad mewn gwirionedd. 882 00:56:03,830 --> 00:56:06,270 Mae pob hawl. 883 00:56:06,270 --> 00:56:09,000 Felly, ble mae hyn i gyd gof yn dod o? 884 00:56:09,000 --> 00:56:12,360 Rydym wedi tynnu darlun hwn ychydig o weithiau, ac yr wyf yn cadw addawol byddwn yn dod yn ôl ato, 885 00:56:12,360 --> 00:56:14,920 ond yma yn y gynrychiolaeth o gof eich cyfrifiadur 886 00:56:14,920 --> 00:56:17,420 dyna ychydig yn fwy na labelu ein bwrdd sialc yma. 887 00:56:17,420 --> 00:56:21,590 Mae'r segment testun ar y brig yn cynrychioli beth mewn perthynas â'ch rhaglen? 888 00:56:21,590 --> 00:56:26,090 [Ymateb y myfyrwyr Anghlywadwy] >> Mae'n ddrwg gennym? Dweud eto. 889 00:56:26,090 --> 00:56:28,660 [Myfyrwyr] Mae'r rhaglen ei hun. >> Mae'r rhaglen ei hun. 890 00:56:28,660 --> 00:56:32,430 >> Felly, y Clang 0s a 1s eich bod wedi casglu ar ôl ysgrifennu C cod ac yna'n rhedeg 891 00:56:32,430 --> 00:56:35,910 a chynhyrchu dod i ben 0s a 1s hyd yn cael ei guddio yno er cof 892 00:56:35,910 --> 00:56:38,570 oherwydd pan fyddwch yn dwbl glicio ar eicon ar eich Mac neu PC 893 00:56:38,570 --> 00:56:43,010 neu rhedeg gorchymyn fel Mario yn eich brydlon, eich 0s a 1s o ddisg 894 00:56:43,010 --> 00:56:45,700 cael eu llwytho i mewn i gof fel y gall y cyfrifiadur yn trin eu 895 00:56:45,700 --> 00:56:47,540 ac yn gweithredu yn fwy cyflym. 896 00:56:47,540 --> 00:56:50,880 Data ymgychwyn Felly, a data uninitialized, ni fyddwn yn siarad llawer am y rhai, 897 00:56:50,880 --> 00:56:52,420 ond y rhai yn unig newidynnau byd-eang. 898 00:56:52,420 --> 00:56:54,710 Golygu ymgychwyn newidynnau byd-eang a roddasoch i werthoedd; 899 00:56:54,710 --> 00:56:59,300 uninitialized golygu newidynnau byd-eang nad ydych wedi eto yn rhoi gwerthoedd. 900 00:56:59,300 --> 00:57:01,900 Yna mae hyn newidynnau amgylchedd sy'n byddaf yn llwyr chwifio fy llaw yn, 901 00:57:01,900 --> 00:57:04,860 ond eu bod yno a bod pethau siopau fel eich enw defnyddiwr 902 00:57:04,860 --> 00:57:08,090 a math arall o fanylion ar lefel is. 903 00:57:08,090 --> 00:57:12,880 Ond y darnau mwyaf suddlon o gynllun eich cof yn y peth hyn a elwir yn y pentwr a'r domen. 904 00:57:12,880 --> 00:57:17,470 Mae'r stac unwaith eto, i fod yn glir, yn y cof sydd ei ddefnyddio pryd bynnag y swyddogaethau yn cael eu galw, 905 00:57:17,470 --> 00:57:19,710 pryd bynnag y newidynnau lleol 906 00:57:19,710 --> 00:57:22,120 a phryd bynnag y mae paramedrau yn cael eu pasio o gwmpas. 907 00:57:22,120 --> 00:57:24,490 Mae hynny i gyd yn digwydd yn y pentwr. 908 00:57:24,490 --> 00:57:29,570 Mae'r domen nid ydym wedi siarad amdano, ond gan gymryd dyfalu sy'n defnyddio'r domen. 909 00:57:31,120 --> 00:57:32,690 Dim ond darn gwahanol o gof. 910 00:57:32,690 --> 00:57:36,620 Mae'n digwydd i gael ei dynnu yma ar y brig, ond mae hynny'n gonfensiwn darluniadol mympwyol. 911 00:57:36,620 --> 00:57:41,670 Pwy sydd wedi ymddangos bod yn defnyddio cof o'r domen am wythnosau? 912 00:57:41,670 --> 00:57:44,830 Mae'n dechnegol chi ond yn anuniongyrchol. >> [Myfyrwyr] GetString. 913 00:57:44,830 --> 00:57:47,950 GetString a malloc. Felly dyma y gwahaniaeth sylfaenol. 914 00:57:47,950 --> 00:57:51,300 >> Rydych yn gwybod am yr wythnosau diwethaf, os oes angen cof, dim ond datgan newidyn. 915 00:57:51,300 --> 00:57:54,560 Os oes angen llawer o gof, datgan amrywiaeth dde y tu mewn eich swyddogaeth. 916 00:57:54,560 --> 00:57:59,620 Ond y broblem rydym wedi cadw wynebu yw os ydych yn datgan newidynnau lleol y tu mewn o swyddogaethau, 917 00:57:59,620 --> 00:58:05,340 cyn gynted ag y ffurflenni swyddogaeth, beth sy'n digwydd i'r cof a'r rhai newidynnau? 918 00:58:05,340 --> 00:58:09,620 Dim ond math o ei fod bellach yn eiddo i chi, dde? 'I jyst yn diflannu fath o gysyniadol. 919 00:58:09,620 --> 00:58:13,950 Mae'n dal i fod yn gorfforol yno, yn amlwg, ond mae'n mwyach eich hawl i ddefnyddio. 920 00:58:13,950 --> 00:58:17,160 Mae hyn yn amlwg yn broblem os ydych am i ysgrifennu swyddogaethau mewn bywyd 921 00:58:17,160 --> 00:58:20,440 sydd mewn gwirionedd yn dyrannu cof ac nid ydynt yn rhoi yn ôl ar unwaith. 922 00:58:20,440 --> 00:58:24,180 Enghraifft o hyn: GetString pwrpas mewn bywyd yw cael unrhyw syniad ymlaen llaw 923 00:58:24,180 --> 00:58:26,390 pa mor fawr o linyn Rydw i'n mynd i deipio ar y bysellfwrdd, 924 00:58:26,390 --> 00:58:30,390 ond mae'n rhaid i fod yn gallu dyrannu cof i ddal David neu helo 925 00:58:30,390 --> 00:58:32,860 neu draethawd cyfan y gallai'r defnyddiwr wedi ei deipio i mewn 926 00:58:32,860 --> 00:58:35,280 Felly GetString wedi bod yn defnyddio malloc. 927 00:58:35,280 --> 00:58:38,910 Malloc bod rhaid felly ei defnyddio nid y pentwr; 928 00:58:38,910 --> 00:58:40,770 yn hytrach mae'n defnyddio peth hyn a elwir y domen. 929 00:58:40,770 --> 00:58:44,430 Does dim byd gwahanol am y cof. Dyw hi ddim yn gyflymach neu'n arafach neu unrhyw beth fel 'na. 930 00:58:44,430 --> 00:58:46,570 Mae'n yn gorfforol yn unig mewn lleoliad gwahanol. 931 00:58:46,570 --> 00:58:50,120 >> Ond y rheol yw bod y cof sydd wedi eu dyrannu ar y domen 932 00:58:50,120 --> 00:58:56,180 fydd byth yn cael eu cymryd oddi arnoch chi nes i chi alw - gymryd dyfalu - rhad ac am ddim. 933 00:58:56,180 --> 00:59:00,510 Ar y llaw arall, mae unrhyw cof byddwch yn gofyn amdano ar y pentwr at jyst yn datgan amrywiaeth 934 00:59:00,510 --> 00:59:03,320 neu ddatgan unrhyw newidyn fel yr ydym wedi bod yn ei wneud am wythnosau, 935 00:59:03,320 --> 00:59:05,640 bod yn ddiofyn yn dod i ben i fyny ar y pentwr. 936 00:59:05,640 --> 00:59:09,550 A bod yn gweithio iawn 90% o'r amser, ond ar yr achlysuron hynny prin 937 00:59:09,550 --> 00:59:12,470 lle rydych yn dymuno dyrannu cof ac yn ei gadw o gwmpas, 938 00:59:12,470 --> 00:59:14,730 Yna, bydd angen i chi ddefnyddio swyddogaeth fel malloc. 939 00:59:14,730 --> 00:59:19,370 Neu, rydym wedi defnyddio swyddogaeth fel GetString, sydd yn ei dro yn defnyddio malloc. 940 00:59:19,370 --> 00:59:23,300 Gadewch i ni weld lle y gallai hyn dorri i lawr ac yna cymryd cipolwg ar Binky. 941 00:59:23,300 --> 00:59:25,820 Byddwn yn dod yn ôl at hynny yn y dyfodol. 942 00:59:25,820 --> 00:59:29,270 Dyma raglen syml super bod yn y 2 llinell gyntaf gwneud beth? 943 00:59:29,270 --> 00:59:33,460 Yn Saesneg, beth y 2 llinell gyntaf o god wneud y tu mewn o brif? 944 00:59:33,460 --> 00:59:35,600 [Ymateb y myfyrwyr Anghlywadwy] 945 00:59:35,600 --> 00:59:37,880 Ofalus. Nid yw'n rhoi i mi gyfeiriad x neu y. 946 00:59:37,880 --> 00:59:41,840 [Myfyrwyr] Mae'n rhoi awgrymiadau i ints. >> Da. Rhowch fi 2 awgrymiadau i gyfanrifau. 947 00:59:41,840 --> 00:59:45,130 Mewn geiriau eraill, rhowch fi 2 darnau o gof i sicrhau bod fy tynnu heddiw, 948 00:59:45,130 --> 00:59:46,950 hyd yn oed er fy mod yn dileu nawr, fel sgwariau. 949 00:59:46,950 --> 00:59:50,000 Rhowch fi 2 darnau o cof, un a elwir yn x, un o'r enw y - 950 00:59:50,000 --> 00:59:54,320 yn gynharach wyf yn galw yn eu sa t - a beth yw'r math hwnnw darn o gof? 951 00:59:54,320 --> 00:59:57,160 Mae'n mynd i storio cyfeiriadau. 952 00:59:57,160 --> 00:59:59,110 Mae o * int fath. 953 00:59:59,110 --> 01:00:01,630 >> Felly, bydd y cyfeiriad o int yn y pen draw yn byw yn x, 954 01:00:01,630 --> 01:00:03,860 Bydd y cyfeiriad o int yn y pen draw yn byw yn y, 955 01:00:03,860 --> 01:00:08,460 ond i ddechrau, beth sydd y tu x ac y? Pwy a wyr? Gwerthoedd Garbage. 956 01:00:08,460 --> 01:00:10,180 Mae ganddo ddim i'w wneud â awgrymiadau. 957 01:00:10,180 --> 01:00:12,720 Os nad ydym wedi rhoi rhywbeth yno, pwy a ŵyr beth sydd mewn gwirionedd yno? 958 01:00:12,720 --> 01:00:18,950 Yn awr, x. Beth sy'n digwydd yma? Mae hyn yn legit yn awr oherwydd x yn pwyntydd. Mae'n * int. 959 01:00:18,950 --> 01:00:21,870 Felly mae hynny'n golygu y gallaf ei roi yn y cyfeiriad x rhai darn o gof. 960 01:00:21,870 --> 01:00:25,120 Beth mae malloc dychwelyd? Perffaith, mae'n dychwelyd cyfeiriadau, 961 01:00:25,120 --> 01:00:28,510 y cyfeiriad y beit cyntaf mewn darn cyfan o gof. 962 01:00:28,510 --> 01:00:31,140 Faint o bytes yw hyn yn ymddangos yn dyrannu, er enghraifft, yn y peiriant? 963 01:00:31,140 --> 01:00:33,510 Beth yw maint o int? 4. 964 01:00:33,510 --> 01:00:36,600 Os ydych yn meddwl yn ôl i wythnos 1, nid yw'n super bwysig i bob amser yn cofio, 965 01:00:36,600 --> 01:00:38,870 ond yn yr achos hwn, mae'n ddefnyddiol gwybod, 4 bytes. 966 01:00:38,870 --> 01:00:41,770 Felly, mae hyn yn dyrannu ar y 4 domen bytes 967 01:00:41,770 --> 01:00:46,110 ac mae'n dychwelyd y cyfeiriad yr un cyntaf i mi yn fympwyol. 968 01:00:46,110 --> 01:00:47,700 Nawr, beth yw x yn ei wneud? 969 01:00:47,700 --> 01:00:52,200 A * x = 42 sy'n gwneud beth? 970 01:00:52,200 --> 01:00:57,150 Os ydych ar y pwynt hwn yn y stori gennym x, sy'n edrych fel hyn gyda rhywfaint o werth garbage, 971 01:00:57,150 --> 01:01:04,120 hyn yn awr yn y gyda rhai gwerth garbage, yn awr yn llinell 3 Rwyf wedi neilltuo 4 bytes. 972 01:01:04,120 --> 01:01:06,950 Mae'r darlun hwn yn ei hanfod yn edrych fel hyn. 973 01:01:06,950 --> 01:01:12,010 Neu yn fwy penodol, os yw hyn yn gyfeiriad mympwyol 123, mae hyn yn beth mae ein hanes yn awr yn edrych fel. 974 01:01:12,010 --> 01:01:23,940 * X = 42 awr yn golygu beth? Mae hynny'n golygu mynd i gyfeiriad 123 a rhowch y rhif 42 yno. 975 01:01:23,940 --> 01:01:26,220 Nid oes angen i mi dynnu llinellau hyn oherwydd nad ydym yn gwneud llinynnau. 976 01:01:26,220 --> 01:01:29,480 >> Dylwn i fod wedi ysgrifennu dim ond fel hyn, a dim ond ar gyfer arddangos mwyn, yn 977 01:01:29,480 --> 01:01:33,240 42 fel un math o int cymryd llawer o le, 4 bytes. 978 01:01:33,240 --> 01:01:35,960 Felly, dyna beth sydd wedi digwydd yno, ond mae yna broblem yn awr. 979 01:01:35,960 --> 01:01:40,580 * Y = 13. Beth sy'n mynd i ddigwydd yma? 980 01:01:40,580 --> 01:01:46,470 Y broblem yw * y yn ein byd symlach yn golygu dim ond yn mynd i'r cyfeiriad yn y. 981 01:01:46,470 --> 01:01:48,590 Beth sydd yn y? Mae'n rhywfaint o werth garbage. 982 01:01:48,590 --> 01:01:53,150 Felly, gadewch i ni dybio bod y gwerth yn garbage 5551212, rhywbeth crazy fel 'na. 983 01:01:53,150 --> 01:01:56,750 * Yn golygu y mynd i'r afael 5,551,212. 984 01:01:56,750 --> 01:02:00,450 Dyna hoffi dros yma. Nid yw'n bodoli, er enghraifft. 985 01:02:00,450 --> 01:02:05,310 Felly * y yn cael 13 yn golygu fy mod yn ceisio tynnu 13 yma. Nid yw'n bodoli. 986 01:02:05,310 --> 01:02:08,790 Rwyf wedi rhagori ar y segment y bwrdd du. Beth ydw i'n ei gael? 987 01:02:08,790 --> 01:02:14,930 Bod nam neges segmentu cryptig am fy mod i'n ceisio rhoi er cof 988 01:02:14,930 --> 01:02:19,470 gwerth fel 13 ar lefel lle nad yw'n bodoli. 989 01:02:19,470 --> 01:02:23,900 Efallai y bydd gweddill y rhaglen yn gweithio iawn, ond hyd at y pwynt nad yw'n gwneud hynny. 990 01:02:23,900 --> 01:02:25,350 Felly, gadewch i ni geisio adrodd y stori hon. 991 01:02:25,350 --> 01:02:27,830 Byddwn yn dod yn ôl i'r unwaith rydym wedi trafod hecs. 992 01:02:27,830 --> 01:02:30,290 Gadewch i ni fynd yn ôl at hyn a gorffennaf gyda hyn beth a elwir Binky, 993 01:02:30,290 --> 01:02:33,710 sy'n galw i gof yn athro Stanford eistedd yn y cartref chwarae gyda animeiddio clai, 994 01:02:33,710 --> 01:02:36,380 i ddweud y stori yn union yr un rhaglen. 995 01:02:36,380 --> 01:02:40,580 Dim ond tua 3 munud o hyd. Yma, mae gennym Binky. 996 01:02:40,580 --> 01:02:45,030 [Siaradwr gwrywaidd ar fideo] Hey Binky, deffro. Mae'n amser ar gyfer hwyl pwyntydd. 997 01:02:45,030 --> 01:02:50,080 [Binky] Beth sy'n bod? Dysgu am awgrymiadau? O, anrhegion! 998 01:02:50,080 --> 01:02:53,700 [Siaradwr gwrywaidd] Wel, i ddechrau arni, mae'n debyg ein bod yn mynd i angen awgrymiadau cwpl. 999 01:02:53,700 --> 01:02:57,890 >> [Binky] Iawn. Mae'r côd hwn yn dyrannu 2 awgrymiadau a all bwyntio at gyfanrifau. 1000 01:02:57,890 --> 01:03:02,220 [Siaradwr gwrywaidd] Iawn. Wel, rwy'n gweld y 2 awgrymiadau, ond nid ydynt yn ymddangos i fod yn pwyntio i unrhyw beth. 1001 01:03:02,220 --> 01:03:05,550 [Binky] Mae hynny'n iawn. I ddechrau, nid yw arwyddion yn cyfeirio at unrhyw beth. 1002 01:03:05,550 --> 01:03:09,270 Y pethau y maent yn cyfeirio at yn cael eu galw'n pointees, a gosod i fyny yn gam ar wahân. 1003 01:03:09,270 --> 01:03:12,330 [Siaradwr gwrywaidd] O, iawn, iawn. Roeddwn yn gwybod hynny. Mae'r pointees ar wahân. 1004 01:03:12,330 --> 01:03:15,630 Er, felly, sut ydych chi'n dyrannu pointee? 1005 01:03:15,630 --> 01:03:21,510 [Binky] Iawn. Mae'r cod hwn yn dyrannu pointee cyfanrif newydd, ac mae hyn yn gosod rhan x i bwynt iddo. 1006 01:03:21,510 --> 01:03:23,500 [Siaradwr gwrywaidd] Hey, sy'n edrych yn well. 1007 01:03:23,500 --> 01:03:26,030 Felly, yn ei gwneud yn gwneud rhywbeth. >> [Binky] Iawn. 1008 01:03:26,030 --> 01:03:30,300 'N annhymerus' dereference y x pwyntydd i storio'r rhif 42 yn ei pointee. 1009 01:03:30,300 --> 01:03:34,410 Am y tric 'n annhymerus' angen fy ffon hud o dereferencing. 1010 01:03:34,410 --> 01:03:38,610 [Siaradwr gwrywaidd] Eich ffon hud dereferencing? Mae hynny'n wych. 1011 01:03:38,610 --> 01:03:44,230 [Binky] Dyma beth mae'r cod yn edrych. 'N annhymerus' jyst gosod y nifer a ... [Popping cadarn] 1012 01:03:44,230 --> 01:03:46,100 [Siaradwr gwrywaidd] Hey edrych, mae y mae'n mynd. 1013 01:03:46,100 --> 01:03:50,990 Felly gwneud dereference ar x yn dilyn y saeth i gael mynediad at ei pointee, 1014 01:03:50,990 --> 01:03:53,230 yn yr achos hwn i storio 42 yn y fan honno. 1015 01:03:53,230 --> 01:03:57,630 Hey, ceisiwch ei ddefnyddio i storio rhif 13 drwy pwyntydd eraill, y. 1016 01:03:57,630 --> 01:04:03,250 [Binky] Iawn. 'N annhymerus' jyst yn mynd dros yma i y a chael y rhif 13 yn sefydlu 1017 01:04:03,250 --> 01:04:08,360 ac yna cymryd y ffon o dereferencing a dim ond ... [Sain suo] Whoa! 1018 01:04:08,360 --> 01:04:10,980 [Siaradwr gwrywaidd] O hey, nad oedd yn gweithio. 1019 01:04:10,980 --> 01:04:14,870 >> Dweud, Binky, nid wyf yn credu y dereferencing yn syniad da 1020 01:04:14,870 --> 01:04:17,880 oherwydd sefydlu'r pointee yn gam ar wahân 1021 01:04:17,880 --> 01:04:19,850 ac nid wyf yn credu ein bod byth yn gwneud hynny. 1022 01:04:19,850 --> 01:04:21,770 [Binky] Hmm, pwynt da. 1023 01:04:21,770 --> 01:04:26,640 [Siaradwr gwrywaidd] Yeah. Rydym yn dyrannu'r y pwyntydd, ond ni fyddwn byth yn ei osod i dynnu sylw at pointee. 1024 01:04:26,640 --> 01:04:28,780 [Binky] Hmm, graff iawn. 1025 01:04:28,780 --> 01:04:30,690 [Siaradwr gwrywaidd] Hey, rydych yn edrych yn dda yno, Binky. 1026 01:04:30,690 --> 01:04:34,160 Allwch chi drefnu pethau fel bod pwyntiau y pointee i'r un x? >> [Binky] Cadarn. 1027 01:04:34,160 --> 01:04:37,100 Byddaf yn defnyddio fy ffon hud o aseiniad pwyntydd. 1028 01:04:37,100 --> 01:04:39,070 [Siaradwr gwrywaidd] yw hynny'n mynd i fod yn broblem fel o'r blaen? 1029 01:04:39,070 --> 01:04:40,840 [Binky] Na, nid yw hyn yn cyffwrdd y pointees. 1030 01:04:40,840 --> 01:04:44,780 'I jyst yn newid un pwyntydd i bwyntio at yr un peth ag un arall. [Popping cadarn] 1031 01:04:44,780 --> 01:04:48,570 [Siaradwr gwrywaidd] O, rwy'n gweld. Nawr pwyntiau y at yr un lle ag x. 1032 01:04:48,570 --> 01:04:51,140 Felly aros. Nawr y yn sefydlog. Mae ganddo pointee. 1033 01:04:51,140 --> 01:04:54,520 Felly, gallwch roi cynnig ar y ffon o dereferencing eto i anfon pobl dros 13. 1034 01:04:54,520 --> 01:04:58,130 [Binky] Uh, iawn. Yma yn mynd. [Popping cadarn] 1035 01:04:58,130 --> 01:05:01,250 [Siaradwr gwrywaidd] Hey, edrych ar hynny. Nawr dereferencing gwaith ar y. 1036 01:05:01,250 --> 01:05:05,200 Ac oherwydd bod y awgrymiadau yn cael eu rhannu bod un pointee, maent yn gweld y 13. 1037 01:05:05,200 --> 01:05:06,910 [Binky] Yeah, rhannu. Beth bynnag. 1038 01:05:06,910 --> 01:05:08,880 >> Felly, rydym yn mynd i newid lleoedd nawr? 1039 01:05:08,880 --> 01:05:11,420 [Siaradwr gwrywaidd] O edrych, rydym yn allan o amser. >> [Binky] Ond - 1040 01:05:11,420 --> 01:05:13,880 [Siaradwr gwrywaidd] Ond cofiwch y 3 rheolau pwyntydd. 1041 01:05:13,880 --> 01:05:18,630 Rhif 1, y strwythur sylfaenol yw bod gennych pwyntydd ac mae'n dangos drosodd i pointee. 1042 01:05:18,630 --> 01:05:23,120 Ond mae'r pwyntydd a pointee ar wahân, ac mae'r camgymeriad cyffredin yw i sefydlu pwyntydd 1043 01:05:23,120 --> 01:05:25,680 ond i anghofio i roi cynnig pointee. 1044 01:05:25,680 --> 01:05:29,580 Rhif 2, pwyntydd dereferencing yn dechrau ar y pwyntydd ac yn dilyn ei saeth 1045 01:05:29,580 --> 01:05:31,060 i gael mynediad at ei pointee. 1046 01:05:31,060 --> 01:05:34,340 Fel yr ydym i gyd yn gwybod, mae hyn ond yn gweithio os oes pointee, 1047 01:05:34,340 --> 01:05:36,460 pa fath o mynd yn ôl i rheol rhif 1. 1048 01:05:36,460 --> 01:05:39,870 Rhif 3, aseiniad pwyntydd yn cymryd un pwyntydd ac yn newid ei 1049 01:05:39,870 --> 01:05:42,390 i bwyntio at y pointee un arall pwyntydd. 1050 01:05:42,390 --> 01:05:45,890 Felly, ar ôl yr aseiniad, bydd y 2 awgrymiadau pwyntio at y pointee un. 1051 01:05:45,890 --> 01:05:47,800 Weithiau gelwir yn rhannu. 1052 01:05:47,800 --> 01:05:50,910 >> A dyna i gyd yna iddo mewn gwirionedd. Bye-bye awr. 1053 01:05:50,910 --> 01:05:55,840 Mae hyn yn Binky. Mae hyn yn CS50. Gwelwn ni chi wythnos nesaf. [Cymeradwyaeth] 1054 01:05:55,840 --> 01:05:59,000 >> [CS50.TV]