1 00:00:00,000 --> 00:00:03,381 >> [CHWARAE CERDDORIAETH] 2 00:00:03,381 --> 00:00:10,626 3 00:00:10,626 --> 00:00:11,610 >> [VIDEO Playback] 4 00:00:11,610 --> 00:00:13,640 >> -He Gorwedd. 5 00:00:13,640 --> 00:00:14,380 >> -About Beth? 6 00:00:14,380 --> 00:00:17,182 >> Nid -I ddim yn gwybod. 7 00:00:17,182 --> 00:00:19,990 >> -So Beth ydym yn ei wybod? 8 00:00:19,990 --> 00:00:23,145 >> -bod Am 9:15, Ray Roedd Santoya yn y ATM. 9 00:00:23,145 --> 00:00:23,644 -Yeah. 10 00:00:23,644 --> 00:00:27,030 Felly, y cwestiwn yw, beth Roedd ef yn ei wneud ar 09:16? 11 00:00:27,030 --> 00:00:29,720 >> -Shooting Y 9 milimetr ar rywbeth. 12 00:00:29,720 --> 00:00:31,540 Efallai fe welodd y sniper. 13 00:00:31,540 --> 00:00:33,412 >> -neu Yn gweithio gydag ef. 14 00:00:33,412 --> 00:00:34,340 >> -Wait. 15 00:00:34,340 --> 00:00:36,200 Ewch yn ôl un. 16 00:00:36,200 --> 00:00:36,975 >> -Beth Ydych chi'n ei weld? 17 00:00:36,975 --> 00:00:44,400 18 00:00:44,400 --> 00:00:47,805 >> -Bring Ei wyneb i fyny yr holl sgrin. 19 00:00:47,805 --> 00:00:48,680 >> Sbectol -His. 20 00:00:48,680 --> 00:00:50,060 >> -Mae 'Na adlewyrchiad. 21 00:00:50,060 --> 00:01:00,455 22 00:01:00,455 --> 00:01:02,280 >> -Mae'n Yw'r tîm pêl fas Nuevitas. 23 00:01:02,280 --> 00:01:03,110 Mae hynny'n eu logo. 24 00:01:03,110 --> 00:01:05,820 >> -a Ei fod yn siarad â pwy bynnag sy'n gwisgo y siaced. 25 00:01:05,820 --> 00:01:06,670 >> [DIWEDD Playback] 26 00:01:06,670 --> 00:01:07,628 >> DAVID Malan: pob hawl. 27 00:01:07,628 --> 00:01:11,210 Mae hyn yn CS50 ac mae hyn yn ychydig yn fwy o [Anghlywadwy] ydych chi â nhw 28 00:01:11,210 --> 00:01:12,890 dabbling gyda phroblem gosod pedwar. 29 00:01:12,890 --> 00:01:16,606 Heddiw, rydym yn dechrau edrych ychydig yn fwy ddwfn yn y pethau hyn a elwir yn awgrymiadau, 30 00:01:16,606 --> 00:01:18,480 sydd hyd yn oed er 'i' pwnc 'n bert ddirgel, 31 00:01:18,480 --> 00:01:20,813 mae'n troi allan ei fod yn mynd i fod y ffordd y byddwn yn 32 00:01:20,813 --> 00:01:24,320 Gall ddechrau adeiladu a chydosod rhaglenni llawer mwy soffistigedig. 33 00:01:24,320 --> 00:01:28,150 Ond rydym yn gwneud hynny ar ddydd Mercher diwethaf drwy gyfrwng rhyw animeiddio clai yn gyntaf. 34 00:01:28,150 --> 00:01:30,190 Felly, mae hyn, galw i gof, yn Binky ac rydym yn ei ddefnyddio ef 35 00:01:30,190 --> 00:01:33,148 i fwrw golwg ar raglen sy'n Nid oedd yn wir yn gwneud unrhyw beth diddorol, 36 00:01:33,148 --> 00:01:34,950 ond yr oedd yn datgelu ychydig o broblemau. 37 00:01:34,950 --> 00:01:38,570 Felly, i ddechrau heddiw, pam nad ydym yn cerdded yn gyflym drwy ychydig o'r camau hyn, 38 00:01:38,570 --> 00:01:41,920 ceisio distill mewn i delerau dynol yn union beth sy'n mynd ymlaen fan hyn 39 00:01:41,920 --> 00:01:45,410 a pham mae hyn yn ddrwg, ac yna symud ymlaen ac mewn gwirionedd yn dechrau adeiladu rhywbeth 40 00:01:45,410 --> 00:01:46,309 gyda'r dechneg hon? 41 00:01:46,309 --> 00:01:48,350 Felly rhain oedd y cyntaf dwy linell yn y rhaglen hon 42 00:01:48,350 --> 00:01:51,340 ac mewn termau lleyg, beth yn y ddwy linell yn ei wneud? 43 00:01:51,340 --> 00:01:55,600 Rhywun sy'n weddol gyfforddus â'r hyn sy'n datgan ar y sgrin? 44 00:01:55,600 --> 00:01:58,340 45 00:01:58,340 --> 00:02:00,120 Beth yw'r ddwy linell yn ei wneud? 46 00:02:00,120 --> 00:02:02,070 Dyw hi ddim yn bob un sy'n yn wahanol i wythnos un, 47 00:02:02,070 --> 00:02:03,611 ond mae peth symbol arbennig newydd. 48 00:02:03,611 --> 00:02:04,152 Yeah? 49 00:02:04,152 --> 00:02:05,628 Yn ôl yno. 50 00:02:05,628 --> 00:02:07,092 >> GYNULLEIDFA: Datgan awgrymiadau? 51 00:02:07,092 --> 00:02:08,050 DAVID Malan: Dweud eto? 52 00:02:08,050 --> 00:02:08,860 GYNULLEIDFA: Datgan awgrymiadau? 53 00:02:08,860 --> 00:02:11,776 DAVID Malan: awgrymiadau Datgan a gadewch i ni fireinio ychydig yn fwy. 54 00:02:11,776 --> 00:02:14,050 GYNULLEIDFA: [Anghlywadwy] cyfeiriad x ac yna y. 55 00:02:14,050 --> 00:02:15,300 DAVID Malan: Ac yna afael â hwy. 56 00:02:15,300 --> 00:02:18,550 Felly, yn benodol yr hyn rydym yn ei wneud yn ein bod yn datgan dau newidyn. 57 00:02:18,550 --> 00:02:21,252 Mae'r newidynnau, fodd bynnag, yn mynd i fod o seren int fath, a oedd yn 58 00:02:21,252 --> 00:02:23,210 yn golygu mwy penodol maent yn mynd i storio 59 00:02:23,210 --> 00:02:26,450 y cyfeiriad o int, yn y drefn honno, x ac y. 60 00:02:26,450 --> 00:02:27,660 Nawr a oes unrhyw werthoedd? 61 00:02:27,660 --> 00:02:32,621 A oes unrhyw gyfeiriadau gwirioneddol yn y rhain dau newidyn ar hyn o bryd? 62 00:02:32,621 --> 00:02:33,120 Na 63 00:02:33,120 --> 00:02:35,030 'I' jyst hyn a elwir yn werthoedd garbage. 64 00:02:35,030 --> 00:02:38,120 Os nad ydych yn mewn gwirionedd yn aseinio i newidyn, beth bynnag oedd yn RAM 65 00:02:38,120 --> 00:02:42,224 yn flaenorol yn mynd i lenwi â sero a rhai y ddau newidynnau hynny. 66 00:02:42,224 --> 00:02:44,140 Ond nid ydym yn gwybod eto beth ydynt a dyna 67 00:02:44,140 --> 00:02:47,060 mynd i fod yn allweddol i pam Binky collodd ei ben yr wythnos diwethaf. 68 00:02:47,060 --> 00:02:49,980 >> Felly, dyma oedd y claymation ymgnawdoliad o hyn 69 00:02:49,980 --> 00:02:53,580 lle mae gennych dim ond dau newidyn, ychydig ddarnau crwn o glai, 70 00:02:53,580 --> 00:02:57,330 sy'n gallu storio newidynnau, ond fel y saethau lapio fyny yn awgrymu, 71 00:02:57,330 --> 00:03:00,640 nid ydynt yn pwyntio mewn gwirionedd i unrhyw le yn hysbys fel y cyfryw. 72 00:03:00,640 --> 00:03:03,670 Felly, yna cawsom y llinell hon, ac mae hyn Roedd yr wythnos diwethaf, malloc newydd ar gyfer cof 73 00:03:03,670 --> 00:03:07,130 dyrannu, sydd ychydig yn ffordd ffansi o ddweud wrth y system weithredu, Linux 74 00:03:07,130 --> 00:03:09,750 neu Mac OS neu Windows, hey, yn rhoi rhywfaint o gof i mi, 75 00:03:09,750 --> 00:03:11,780 ac mae pob rhaid i chi ddweud wrth y system weithredu 76 00:03:11,780 --> 00:03:14,699 yw'r hyn wrth ofyn iddo ar gyfer cof. 77 00:03:14,699 --> 00:03:16,990 Dyw hi ddim yn mynd i ofalu beth ydych chi'n mynd i'w wneud ag ef, 78 00:03:16,990 --> 00:03:19,786 ond mae angen i chi ddweud wrth y gweithredu system beth drwy gyfrwng malloc. 79 00:03:19,786 --> 00:03:20,286 Yeah? 80 00:03:20,286 --> 00:03:21,078 >> GYNULLEIDFA: Faint? 81 00:03:21,078 --> 00:03:21,994 DAVID Malan: Faint? 82 00:03:21,994 --> 00:03:25,280 Faint mewn bytes, ac yn y blaen, mae hyn, unwaith eto, enghraifft ddyfeisgar, yn cael ei dim ond dweud, 83 00:03:25,280 --> 00:03:27,360 rhoi maint o int mi. 84 00:03:27,360 --> 00:03:30,550 Yn awr, mae maint o int yw pedwar bytes neu 32 ddarnau. 85 00:03:30,550 --> 00:03:32,850 Felly, mae hyn yn unig yw ffordd o gan ddywedyd, hey, system weithredu, 86 00:03:32,850 --> 00:03:37,290 rhoi pedwar bytes o gof i mi y gallaf eu defnyddio ar gael imi, 87 00:03:37,290 --> 00:03:40,560 ac yn benodol, beth mae dychwelyd malloc gyda pharch 88 00:03:40,560 --> 00:03:41,795 i'r darn o bedwar bytes? 89 00:03:41,795 --> 00:03:44,110 90 00:03:44,110 --> 00:03:44,860 GYNULLEIDFA: Cyfeiriad? 91 00:03:44,860 --> 00:03:45,901 DAVID Malan: Y gyfeiriad. 92 00:03:45,901 --> 00:03:47,580 Mae cyfeiriad y darn o bedwar bytes. 93 00:03:47,580 --> 00:03:48,190 Yn union. 94 00:03:48,190 --> 00:03:51,430 Ac felly dyna beth sy'n cael ei storio yn y pen draw yn x a dyna pam nad ydym yn ei wneud mewn gwirionedd 95 00:03:51,430 --> 00:03:55,240 gofal yr hyn y nifer o hynny cyfeiriad yw, boed yn OX1 neu ox2 96 00:03:55,240 --> 00:03:57,110 neu ryw gyfeiriad hecsadegol cryptig. 97 00:03:57,110 --> 00:03:59,850 Rydym yn unig yn gofalu ddarluniadol bod y newidyn x yn awr 98 00:03:59,850 --> 00:04:01,630 gan dynnu sylw at y darn o gof. 99 00:04:01,630 --> 00:04:05,570 Felly y saeth yn cynrychioli pwyntydd, neu yn fwy penodol, yn, cyfeiriad cof. 100 00:04:05,570 --> 00:04:09,120 Ond unwaith eto, nid ydym fel arfer yn gofalu pa cyfeiriadau gwirioneddol y rhai yn cael eu. 101 00:04:09,120 --> 00:04:11,780 Yn awr, y llinell hon yn dweud beth yn nhermau lleygwr? 102 00:04:11,780 --> 00:04:14,330 Star x yn cael 42 hanner colon. 103 00:04:14,330 --> 00:04:17,390 Beth mae hyn yn ei olygu? 104 00:04:17,390 --> 00:04:18,200 Ydych am fynd? 105 00:04:18,200 --> 00:04:20,102 Peidiwch â crafu eich gwddf. 106 00:04:20,102 --> 00:04:22,360 >> GYNULLEIDFA: Y cyfeiriad x wrth 42. 107 00:04:22,360 --> 00:04:24,300 >> DAVID Malan: Cyfeiriad x ar 42. 108 00:04:24,300 --> 00:04:25,190 Ddim yn hollol. 109 00:04:25,190 --> 00:04:28,485 Mor agos, ond ddim yn hollol, oherwydd mae y seren sy'n prefixing x hwn. 110 00:04:28,485 --> 00:04:29,860 Felly mae angen i tweak ychydig. 111 00:04:29,860 --> 00:04:31,032 Yeah? 112 00:04:31,032 --> 00:04:36,044 >> GYNULLEIDFA: Y gwerth y mae'r pwyntydd x yn pwyntio i yw 42. 113 00:04:36,044 --> 00:04:36,710 DAVID Malan: Iawn. 114 00:04:36,710 --> 00:04:40,840 Mae'r gwerth y mae'r pwyntydd x yn pwyntio at, gadewch i ni ddweud, fod 42, 115 00:04:40,840 --> 00:04:44,165 neu mewn geiriau eraill, y seren x yn dweud, ewch i ba bynnag gyfeiriad 116 00:04:44,165 --> 00:04:48,340 mewn x, boed yn 1 Oxford Street neu 33 Oxford Street 117 00:04:48,340 --> 00:04:51,850 neu OX1 neu ox33, beth bynnag bod y cyfeiriad rhifol yn, 118 00:04:51,850 --> 00:04:54,380 seren x yw dereferencing o x. 119 00:04:54,380 --> 00:04:57,297 Felly ewch i'r cyfeiriad hwnnw a Yna, rhowch y rhif 42 yno. 120 00:04:57,297 --> 00:04:59,380 Felly byddai hynny'n ffordd sy'n cyfateb i ddweud hynny. 121 00:04:59,380 --> 00:05:01,860 Felly dyna i gyd iawn, ac yna byddem yn cynrychioli'r llun 122 00:05:01,860 --> 00:05:05,370 fel a ganlyn lle rydym wedi ychwanegu y 42 i fod darn o bedwar 123 00:05:05,370 --> 00:05:09,370 bytes ar yr ochr dde, ond y llinell hon yn lle'r aeth pethau o chwith 124 00:05:09,370 --> 00:05:11,120 a phen Binky yn popped oddi ar y pwynt hwn, 125 00:05:11,120 --> 00:05:15,290 gan fod pethau drwg yn digwydd pan fydd chi dereference gwerthoedd garbage 126 00:05:15,290 --> 00:05:18,210 neu os ydych dereference annilys awgrymiadau, ac yr wyf yn dweud annilys 127 00:05:18,210 --> 00:05:21,020 oherwydd ar y pwynt hwn yn y stori, beth yw tu mewn y? 128 00:05:21,020 --> 00:05:24,440 Beth yw gwerth y y sail ar yr ychydig gamau diwethaf? 129 00:05:24,440 --> 00:05:25,360 Yeah? 130 00:05:25,360 --> 00:05:26,115 Beth yw hwnna? 131 00:05:26,115 --> 00:05:26,990 >> GYNULLEIDFA: Mae gyfeiriad. 132 00:05:26,990 --> 00:05:28,460 DAVID Malan: Mae gyfeiriad. 133 00:05:28,460 --> 00:05:31,910 Dylai fod yn gyfeiriad ond yr wyf wedi ymgychwyn hi? 134 00:05:31,910 --> 00:05:32,800 Felly, nid wyf wedi eto. 135 00:05:32,800 --> 00:05:35,430 Felly, yr hyn a gwyddys eu bod mewn yno? 136 00:05:35,430 --> 00:05:37,590 'I' jyst rhywfaint o werth garbage. 137 00:05:37,590 --> 00:05:41,500 Gallai fod yn unrhyw gyfeiriad o sero i 2000000000 os oes gennych ddau gigs o RAM, 138 00:05:41,500 --> 00:05:44,289 neu sero i 4 biliwn a os oes gennych got pedair gigabeit o RAM. 139 00:05:44,289 --> 00:05:46,080 Mae'n rhywfaint o werth garbage, ond y broblem yw 140 00:05:46,080 --> 00:05:48,200 bod y system yn gweithredu, os nad yw wedi ei roi i chi 141 00:05:48,200 --> 00:05:51,140 bod darn o gof yn benodol eich bod yn ceisio mynd i, 142 00:05:51,140 --> 00:05:54,650 Yn gyffredinol, mae'n mynd i achosi beth rydym wedi gweld fel nam segmentu. 143 00:05:54,650 --> 00:05:57,810 Felly, mewn gwirionedd, unrhyw un ohonoch sydd wedi trafferth ar broblemau yn y oriau swyddfa 144 00:05:57,810 --> 00:06:00,393 neu mewn problemau hynny'n fwy Yn gyffredinol, gyda ceisio at chyfrif i 145 00:06:00,393 --> 00:06:02,150 nam segmentu, mae hynny'n golygu yn gyffredinol 146 00:06:02,150 --> 00:06:05,017 eich bod yn cyffwrdd segment o cof na ddylech fod. 147 00:06:05,017 --> 00:06:07,350 Rydych yn cyffwrdd cof bod nid oedd y system yn gweithredu wedi 148 00:06:07,350 --> 00:06:10,450 caniatáu i chi i gyffwrdd, boed yn drwy fynd yn rhy bell yn eich array 149 00:06:10,450 --> 00:06:12,870 neu ddechrau nawr, p'un 'i' oherwydd eich bod cyffwrdd 150 00:06:12,870 --> 00:06:14,780 cof mai dim ond rhywfaint o werth garbage. 151 00:06:14,780 --> 00:06:18,230 >> Wneud hynny seren x yma yw math o ymddygiad anniffiniedig. 152 00:06:18,230 --> 00:06:22,030 Ni ddylech fyth ei wneud oherwydd groes yn cael eu, mae'r rhaglen 'jyst yn mynd i ddamwain, 153 00:06:22,030 --> 00:06:24,050 oherwydd eich bod yn ei ddweud, ewch i'r cyfeiriad yma 154 00:06:24,050 --> 00:06:27,000 ac nad oes gennych syniad ble y cyfeiriad hwnnw mewn gwirionedd. 155 00:06:27,000 --> 00:06:30,300 Felly mae'r system yn gweithredu yn debygol mynd i ddamwain eich rhaglen 156 00:06:30,300 --> 00:06:33,840 o ganlyniad, ac yn wir, dyna beth ddigwyddodd yno i Binky. 157 00:06:33,840 --> 00:06:37,210 Felly yn y pen draw, Binky sefydlog broblem hon gyda hyn. 158 00:06:37,210 --> 00:06:38,909 Er mwyn i rhaglen ei hun yn ddiffygiol. 159 00:06:38,909 --> 00:06:41,450 Ond os ydych yn fath o symud ymlaen a gweithredu llinell hon yn lle hynny, 160 00:06:41,450 --> 00:06:45,580 y yn hafal x unig yn golygu beth bynnag gyfeiriad yn x, hefyd roi mewn y. 161 00:06:45,580 --> 00:06:48,740 >> Ac felly ar ffurf lluniau, rydym wedi cynrychioli hyn gyda dau saethau 162 00:06:48,740 --> 00:06:51,570 ox ac o y pwyntio i'r un lle. 163 00:06:51,570 --> 00:06:55,760 Felly semantig, x yn hafal iy gan fod y ddau o'r rheiny 164 00:06:55,760 --> 00:07:00,300 yn storio yr un fath cyfeiriad, ergo pwyntio yn 42, 165 00:07:00,300 --> 00:07:04,910 ac yn awr, pan fyddwch yn dweud seren y, ewch i'r cyfeiriad yn y, 166 00:07:04,910 --> 00:07:06,790 mae hyn yn cael sgil-effaith diddorol. 167 00:07:06,790 --> 00:07:10,320 Felly mae'r cyfeiriad yn y yn y un peth ag y cyfeiriad yn x. 168 00:07:10,320 --> 00:07:15,060 Felly, os ydych yn dweud yn mynd i'r cyfeiriad yn y a newid y gwerth i 13, 169 00:07:15,060 --> 00:07:17,140 pwy arall sy'n effeithio? 170 00:07:17,140 --> 00:07:21,100 X yw, pwynt D, fel petai, Dylid eu heffeithio hefyd. 171 00:07:21,100 --> 00:07:24,340 >> Ac yn wir, sut Nick Tynnodd y llun yma mewn animeiddio clai yn union hynny. 172 00:07:24,340 --> 00:07:28,665 Hyd yn oed er ein bod yn dilyn y pwyntydd y, yr ydym yn dod i ben i fyny yn yr un lle, 173 00:07:28,665 --> 00:07:32,780 ac felly pe baem yn argraffu allan x neu y yn pointee, 174 00:07:32,780 --> 00:07:35,720 Yna byddem yn gweld y gwerth o 13. 175 00:07:35,720 --> 00:07:37,927 Yn awr, yr wyf yn dweud pointee i fod yn gyson â'r fideo. 176 00:07:37,927 --> 00:07:39,760 Rhaglenwyr, yn fy gwybodaeth, byth mewn gwirionedd 177 00:07:39,760 --> 00:07:42,460 dweud y gair pointee, yr hyn sydd yn pigfain 178 00:07:42,460 --> 00:07:44,650 ar, ond er mwyn cysondeb gyda'r fideo, yn sylweddoli 179 00:07:44,650 --> 00:07:47,520 dyna i gyd a oedd yn yn golygu yn y sefyllfa honno. 180 00:07:47,520 --> 00:07:54,190 Felly unrhyw gwestiynau ar claymation neu awgrymiadau neu malloc eto? 181 00:07:54,190 --> 00:07:54,850 Na? 182 00:07:54,850 --> 00:07:55,470 Iawn. 183 00:07:55,470 --> 00:07:58,560 >> Felly, heb bellach ado, gadewch i ni edrych 184 00:07:58,560 --> 00:08:00,700 yn y lle mae hyn wedi mewn gwirionedd cael ei ddefnyddio ers peth amser. 185 00:08:00,700 --> 00:08:03,580 Felly, rydym wedi cael y llyfrgell CS50 sy'n cael yr holl swyddogaethau hyn. 186 00:08:03,580 --> 00:08:06,810 Rydym wedi defnyddio GetInt llawer, GetString, yn ôl pob tebyg yn gynharach GetLongLong 187 00:08:06,810 --> 00:08:09,840 yn fy PSet un neu hynny, ond beth sy'n mewn gwirionedd wedi bod yn digwydd? 188 00:08:09,840 --> 00:08:12,920 Wel, gadewch i ni edrych yn sydyn o dan y cwfl yn rhaglen sy'n 189 00:08:12,920 --> 00:08:17,017 ysbrydoli pam ein bod yn rhoi i chi y CS50 llyfrgell, ac yn wir fel yr wythnos diwethaf, 190 00:08:17,017 --> 00:08:18,850 rydym yn dechrau cymryd rhai olwynion hyfforddiant i ffwrdd. 191 00:08:18,850 --> 00:08:21,080 Felly, mae hyn bellach yn cael ei sortio o post-mortem o'r hyn 192 00:08:21,080 --> 00:08:23,690 Mae bod yn mynd ymlaen y tu mewn i'r llyfrgell CS50, 193 00:08:23,690 --> 00:08:27,250 er ein bod yn awr yn dechrau symud ffwrdd oddi wrtho i'r rhan fwyaf o raglenni. 194 00:08:27,250 --> 00:08:29,460 >> Felly, mae hon yn rhaglen o'r enw scanf 0. 195 00:08:29,460 --> 00:08:30,510 Mae'n super byr. 196 00:08:30,510 --> 00:08:33,909 'I jyst wedi llinellau hyn, ond mae'n yn cyflwyno swyddogaeth o'r enw scanf 197 00:08:33,909 --> 00:08:36,909 ein bod mewn gwirionedd yn ni'n mynd i weld mewn eiliad tu mewn y llyfrgell CS50, 198 00:08:36,909 --> 00:08:38,600 er mewn ffurf ychydig yn wahanol. 199 00:08:38,600 --> 00:08:41,330 Felly y rhaglen hon ar-lein 16 yn datgan newidyn x. 200 00:08:41,330 --> 00:08:43,150 Felly rhowch pedwar bytes gyfer int mi. 201 00:08:43,150 --> 00:08:45,750 Mae wedi bod yn dweud wrth y defnyddiwr, rhif os gwelwch yn dda, ac yna 202 00:08:45,750 --> 00:08:49,010 mae hwn yn llinell diddorol sy'n mewn gwirionedd yn clymu at ei gilydd yr wythnos diwethaf 203 00:08:49,010 --> 00:08:49,790 ac mae hyn. 204 00:08:49,790 --> 00:08:53,230 Scanf, ac yna yn sylwi mae'n cymryd Fformat llinyn, yn union fel printf, 205 00:08:53,230 --> 00:08:57,480 % Ff golygu int, ac yna mae'n cymryd ail ddadl sy'n edrych ychydig yn 206 00:08:57,480 --> 00:08:58,260 ffynci. 207 00:08:58,260 --> 00:09:01,880 Mae'n ampersand x, ac i gofio, byddwn ond yn gweld yr wythnos hon unwaith diwethaf. 208 00:09:01,880 --> 00:09:03,465 Beth mae ampersand x gynrychioli? 209 00:09:03,465 --> 00:09:06,210 210 00:09:06,210 --> 00:09:08,450 Beth mae ampersand yn ei wneud yn C? 211 00:09:08,450 --> 00:09:08,950 Yeah? 212 00:09:08,950 --> 00:09:10,024 >> GYNULLEIDFA: Y cyfeiriad. 213 00:09:10,024 --> 00:09:11,190 DAVID Malan: Cyfeiriad. 214 00:09:11,190 --> 00:09:13,190 Felly mae'n y gwrthwyneb gweithredwr y seren, 215 00:09:13,190 --> 00:09:17,270 tra bod y gweithredwr seren yn dweud, ewch i y cyfeiriad hwn, y gweithredydd ampersand 216 00:09:17,270 --> 00:09:20,280 yn dweud, chyfrif i maes y cyfeiriad y newidyn hwn, 217 00:09:20,280 --> 00:09:23,530 ac felly mae hwn yn allweddol, oherwydd Diben scanf mewn bywyd 218 00:09:23,530 --> 00:09:26,320 yw i sganio y defnyddiwr mewnbwn gan y bysellfwrdd, 219 00:09:26,320 --> 00:09:29,970 gan ddibynnu ar beth bynnag mae ef neu hi math, ac yna darllenwch mewnbwn y defnyddiwr 220 00:09:29,970 --> 00:09:32,970 i mewn i amrywio, ond rydym yn Gwelodd yn y pythefnos diwethaf 221 00:09:32,970 --> 00:09:36,080 bod y swyddogaeth cyfnewid yr ydym Ceisiodd effortlessly i weithredu 222 00:09:36,080 --> 00:09:37,110 yn unig oedd wedi torri. 223 00:09:37,110 --> 00:09:42,470 Dwyn i gof bod gyda'r swyddogaeth cyfnewid, os ydym yn unig datgan A a B fel ints, 224 00:09:42,470 --> 00:09:47,040 wnaethom gyfnewid llwyddiannus dau newidyn tu mewn cyfnewid 225 00:09:47,040 --> 00:09:50,080 yn union fel gyda'r llaeth a OJ, ond cyn gynted ag cyfnewid a ddychwelwyd, 226 00:09:50,080 --> 00:09:55,200 beth oedd y canlyniad gyda pharch i x ac y, y gwerthoedd gwreiddiol? 227 00:09:55,200 --> 00:09:55,700 Dim byd. 228 00:09:55,700 --> 00:09:56,200 Yeah. 229 00:09:56,200 --> 00:09:59,754 Nid oes dim yn digwydd yr adeg honno, oherwydd cyfnewidiadau yn newid dim ond ei copďau lleol, 230 00:09:59,754 --> 00:10:01,670 sy'n cael ei ddweud, i gyd y tro hwn, pryd bynnag rydym wedi 231 00:10:01,670 --> 00:10:04,010 bod yn pasio mewn dadleuon i swyddogaethau, rydym yn 232 00:10:04,010 --> 00:10:05,939 dim ond pasio copïau o dadleuon hynny. 233 00:10:05,939 --> 00:10:07,980 Gallwch wneud â hynny beth bynnag y dymunwch gyda nhw, 234 00:10:07,980 --> 00:10:10,890 ond maent yn mynd i gael unrhyw effaith ar y gwerthoedd gwreiddiol. 235 00:10:10,890 --> 00:10:13,650 Felly, mae hyn yn broblem os ydych yn am gael swyddogaeth fel scanf 236 00:10:13,650 --> 00:10:17,170 mewn bywyd, a'i ddiben yw i sganio mewnbwn y defnyddiwr o'r bysellfwrdd 237 00:10:17,170 --> 00:10:22,010 ac yna llenwch y bylchau, felly i siarad, hynny yw, rhoi newidyn fel x 238 00:10:22,010 --> 00:10:25,410 gwerth, oherwydd pe bawn i ddim ond pasio x i scanf, 239 00:10:25,410 --> 00:10:28,790 os ydych yn ystyried y rhesymeg ddiwethaf wythnos, gall scanf wneud beth bynnag y mae am 240 00:10:28,790 --> 00:10:33,100 gyda chopi o x, ond na allai newid x barhaol oni bai ein bod yn rhoi 241 00:10:33,100 --> 00:10:37,120 scanf map trysor, fel petai, lle mae x yn nodi y fan a'r lle, lle 242 00:10:37,120 --> 00:10:41,860 rydym yn pasio yn y cyfeiriad o x fel bod scanf gallu mynd yno ac mewn gwirionedd yn newid 243 00:10:41,860 --> 00:10:42,920 werth x. 244 00:10:42,920 --> 00:10:45,080 Ac felly yn wir, i gyd bod y rhaglen hon yn ei wneud 245 00:10:45,080 --> 00:10:53,180 os byddaf yn gwneud scanf 0, yn fy ffynhonnell Cyfeiriadur 5m, yn gwneud scanf 0, 246 00:10:53,180 --> 00:10:57,730 dot slaes scanf, rhif os gwelwch yn dda 50, diolch am y 50. 247 00:10:57,730 --> 00:11:01,020 >> Felly nid yw'n bob un sy'n ddiddorol, ond yr hyn sy'n wir yn digwydd 248 00:11:01,020 --> 00:11:04,820 yw bod cyn gynted ag yr wyf yn galw scanf yma, mae'r gwerth x 249 00:11:04,820 --> 00:11:06,410 yn cael ei newid yn barhaol. 250 00:11:06,410 --> 00:11:08,335 Yn awr, mae hyn yn ymddangos 'n glws a da, ac mewn gwirionedd, mae'n 251 00:11:08,335 --> 00:11:11,200 ymddangos fel 'n sylweddol oes angen i ni y llyfrgell CS50 o gwbl anymore. 252 00:11:11,200 --> 00:11:13,960 Er enghraifft, gadewch i ni redeg mae hyn unwaith eto fan hyn. 253 00:11:13,960 --> 00:11:15,750 Gadewch i mi ail-agor y peth am eiliad. 254 00:11:15,750 --> 00:11:20,600 Gadewch i ni geisio rhif os gwelwch yn dda a yn lle dweud 50 fel o'r blaen, 255 00:11:20,600 --> 00:11:22,810 gadewch i ni jyst dweud na. 256 00:11:22,810 --> 00:11:24,000 OK, dyna ychydig yn od. 257 00:11:24,000 --> 00:11:25,270 IAWN. 258 00:11:25,270 --> 00:11:28,680 A dim ond ychydig lol yma. 259 00:11:28,680 --> 00:11:31,170 Felly nid yw'n ymddangos i ymdrin â sefyllfaoedd wallus. 260 00:11:31,170 --> 00:11:33,620 Felly mae angen i cyn lleied â phosibl cychwyn ychwanegu rhai wall-wirio 261 00:11:33,620 --> 00:11:37,460 i wneud yn siŵr bod y defnyddiwr teipio mewn nifer wirioneddol yn hoffi 50, 262 00:11:37,460 --> 00:11:40,720 oherwydd bod y geiriau sy'n ymddangos yn teipio Nid yn cael ei ganfod yn broblemus, 263 00:11:40,720 --> 00:11:42,020 ond mae'n debyg y dylai fod. 264 00:11:42,020 --> 00:11:46,450 >> Gadewch i ni edrych ar y fersiwn nawr dyna fy ymgais i reimplement GetString. 265 00:11:46,450 --> 00:11:48,437 Os scanf Mae hyn i gyd ymarferoldeb a adeiladwyd yn, 266 00:11:48,437 --> 00:11:51,270 pam yr ydym ni wedi bod yn dabbling â'r rhain olwynion hyfforddiant fel GetString? 267 00:11:51,270 --> 00:11:55,450 Wel, dyma efallai yw fy mhen fy hun Fersiwn syml o GetString 268 00:11:55,450 --> 00:12:00,766 lle wythnos yn ôl, efallai y byddwn wedi dweud, rhoi llinyn i mi ac yn ei alw'n byffer. 269 00:12:00,766 --> 00:12:03,390 Heddiw, yr wyf i'n mynd i ddechrau yn unig gan ddweud seren torgoch, sydd, galw i gof, 270 00:12:03,390 --> 00:12:04,400 'i' jyst yn gyfystyr. 271 00:12:04,400 --> 00:12:06,629 Mae'n edrych yn scarier ond mae'n yr un peth yn union. 272 00:12:06,629 --> 00:12:09,420 Felly rhowch newidyn a elwir clustogi i mi sy'n mynd i storio llinyn, 273 00:12:09,420 --> 00:12:12,780 dweud wrth y llinyn defnyddiwr os gwelwch yn dda, ac yna, yn union fel o'r blaen, 274 00:12:12,780 --> 00:12:17,760 gadewch i ni geisio i fenthyca wers hon scanf % S yr amser hwn ac wedyn yn trosglwyddo'r yn clustogi. 275 00:12:17,760 --> 00:12:19,310 Yn awr, gwiriad pwyll gyflym. 276 00:12:19,310 --> 00:12:22,120 Pam nad ydw i'n dweud ampersand clustogi y tro hwn? 277 00:12:22,120 --> 00:12:25,190 278 00:12:25,190 --> 00:12:26,625 Casglu oddi wrth yr enghraifft flaenorol. 279 00:12:26,625 --> 00:12:28,000 GYNULLEIDFA: seren Torgoch yn pwyntydd. 280 00:12:28,000 --> 00:12:29,920 DAVID Malan: Yn union, gan fod y cyfnod hwn, cols 281 00:12:29,920 --> 00:12:34,080 seren eisoes yn pwyntydd, cyfeiriad, yn ôl y diffiniad hwnnw seren fod yno. 282 00:12:34,080 --> 00:12:37,530 Ac os scanf disgwyl cyfeiriad, mae'n suffices dim ond i basio mewn clustogi. 283 00:12:37,530 --> 00:12:39,260 Nid oes angen i mi ddweud byffer ampersand. 284 00:12:39,260 --> 00:12:42,177 Ar gyfer y chwilfrydig, gallech gwneud rhywbeth fel hyn. 285 00:12:42,177 --> 00:12:43,510 Byddai ganddo gwahanol ystyr. 286 00:12:43,510 --> 00:12:47,240 Byddai hyn yn rhoi i chi pwyntydd at pwyntydd, sydd mewn gwirionedd 287 00:12:47,240 --> 00:12:50,050 yn beth dilys yn C, ond ar gyfer yn awr, gadewch i ni ei gadw'n syml 288 00:12:50,050 --> 00:12:51,750 a chadw y stori gyson. 289 00:12:51,750 --> 00:12:54,100 Im 'jyst yn mynd i basio mewn clustogi ac mae hynny'n gywir. 290 00:12:54,100 --> 00:12:56,487 Y broblem fodd bynnag, yw hyn. 291 00:12:56,487 --> 00:12:58,820 Gadewch i mi fynd yn ei flaen ac yn rhedeg hyn rhaglen ar ôl iddo lunio. 292 00:12:58,820 --> 00:13:00,902 Gwneud scanf 1. 293 00:13:00,902 --> 00:13:02,610 Damn iddo, fy compiler yn dal fy camgymeriad. 294 00:13:02,610 --> 00:13:04,090 Rhowch un eiliad i mi. 295 00:13:04,090 --> 00:13:05,460 Chlang. 296 00:13:05,460 --> 00:13:06,990 Lets 'ddeud scanf-1.c. 297 00:13:06,990 --> 00:13:10,880 298 00:13:10,880 --> 00:13:11,380 IAWN. 299 00:13:11,380 --> 00:13:12,720 Dyna ni. 300 00:13:12,720 --> 00:13:14,280 Ei angen arnaf. 301 00:13:14,280 --> 00:13:16,750 ID CS50 Mae gan amryw o gosodiadau cyfluniad 302 00:13:16,750 --> 00:13:18,280 sy'n eich diogelu chi eich hun yn erbyn. 303 00:13:18,280 --> 00:13:21,300 Roedd angen i mi analluoga hynny drwy rhedeg chlang llaw y tro hwn. 304 00:13:21,300 --> 00:13:22,140 Felly, os gwelwch yn dda llinyn. 305 00:13:22,140 --> 00:13:25,560 Rydw i'n mynd i fynd yn ei flaen a theipiwch yn fy hoff byd helo. 306 00:13:25,560 --> 00:13:26,490 OK, null. 307 00:13:26,490 --> 00:13:27,700 Nid Dyna beth yr wyf yn ei deipio. 308 00:13:27,700 --> 00:13:29,690 Felly mae'n arwydd o rhywbeth yn anghywir. 309 00:13:29,690 --> 00:13:33,920 Gadewch i mi fynd yn ei flaen a theipiwch mewn llinyn hir iawn. 310 00:13:33,920 --> 00:13:37,210 Diolch am y null ac nid wyf yn gwybod os ydw i'n mynd i fod yn gallu chwalu hi. 311 00:13:37,210 --> 00:13:40,240 Gadewch i ni geisio ychydig gopi bastio i weld os mae hyn yn helpu. 312 00:13:40,240 --> 00:13:43,290 Dim ond past llawer o hyn. 313 00:13:43,290 --> 00:13:47,310 Mae'n bendant yn fwy llinyn nag arfer. 314 00:13:47,310 --> 00:13:51,450 Gadewch i 'jyst' n sylweddol ysgrifennu. 315 00:13:51,450 --> 00:13:51,950 Na 316 00:13:51,950 --> 00:13:52,650 Damn hi. 317 00:13:52,650 --> 00:13:53,480 Yn gorchymyn Nid yw dod o hyd. 318 00:13:53,480 --> 00:13:54,550 Felly dyna amherthnasol. 319 00:13:54,550 --> 00:13:56,440 Mae hynny oherwydd fy mod gludo rhai cymeriadau drwg, 320 00:13:56,440 --> 00:13:59,780 ond mae hyn yn troi allan nid yn mynd i weithio. 321 00:13:59,780 --> 00:14:03,510 >> Gadewch i ni roi cynnig ar hyn unwaith yn rhagor, oherwydd mae'n fwy o hwyl os ydym mewn gwirionedd yn chwalu hi. 322 00:14:03,510 --> 00:14:09,116 Gadewch i deipio hwn ac yn awr, rwy'n mynd i gopïo llinyn hir iawn 323 00:14:09,116 --> 00:14:10,990 ac yn awr gadewch i ni weld os byddwn yn chwalu y peth hyn. 324 00:14:10,990 --> 00:14:14,235 Hysbysiad i mi hepgor lleoedd a llinellau a hanner colon newydd 325 00:14:14,235 --> 00:14:16,035 a phob gymeriadau ffynci. 326 00:14:16,035 --> 00:14:16,535 Enter. 327 00:14:16,535 --> 00:14:21,090 328 00:14:21,090 --> 00:14:22,880 Ac yn awr y rhwydwaith wedi dim ond bod yn araf. 329 00:14:22,880 --> 00:14:27,460 Cynhaliais lawr Command-V rhy hir, yn amlwg. 330 00:14:27,460 --> 00:14:28,190 Damn it! 331 00:14:28,190 --> 00:14:29,260 Yn gorchymyn Nid yw dod o hyd. 332 00:14:29,260 --> 00:14:29,780 >> IAWN. 333 00:14:29,780 --> 00:14:32,240 Wel, y pwynt yw serch hynny mae'r canlynol. 334 00:14:32,240 --> 00:14:36,910 Felly beth sy'n mynd mewn gwirionedd ymlaen gyda datganiad hwn 335 00:14:36,910 --> 00:14:39,240 o byffer seren torgoch ar-lein 16? 336 00:14:39,240 --> 00:14:41,820 Felly, beth ydw i'n cael pan wyf yn datgan pwyntydd? 337 00:14:41,820 --> 00:14:47,440 Mae pob Im 'yn cael yn werth pedair beit Gelwir byffer, ond beth sydd tu mewn iddo 338 00:14:47,440 --> 00:14:49,540 ar hyn o bryd? 339 00:14:49,540 --> 00:14:50,930 'I' jyst rhywfaint o werth garbage. 340 00:14:50,930 --> 00:14:54,170 Oherwydd bod unrhyw tro y byddwch yn datgan newidyn yn C, dim ond rhywfaint o werth garbage, 341 00:14:54,170 --> 00:14:56,220 ac rydym yn dechrau daith dros y realiti hwn. 342 00:14:56,220 --> 00:14:59,720 Yn awr, pan fyddaf yn dweud wrth scanf, ewch i'r cyfeiriad yma 343 00:14:59,720 --> 00:15:01,520 a rhowch beth bynnag yw'r math o ddefnyddiwr i mewn. 344 00:15:01,520 --> 00:15:06,400 Os bydd y mathau defnyddiwr yn helo byd, yn dda, lle ydw i'n ei roi? 345 00:15:06,400 --> 00:15:07,750 Byffer yn werth garbage. 346 00:15:07,750 --> 00:15:11,510 >> Felly dyna fath o fel saeth sy'n pwyntio pwy a ŵyr lle. 347 00:15:11,510 --> 00:15:13,880 Efallai ei fod yn pwyntio yma yn fy nghof. 348 00:15:13,880 --> 00:15:16,560 Ac felly pan fydd y defnyddiwr mathau yn y byd helo, 349 00:15:16,560 --> 00:15:22,380 mae'r rhaglen yn ceisio rhoi'r llinyn helo slaes byd 0 350 00:15:22,380 --> 00:15:23,910 yn y darn o gof. 351 00:15:23,910 --> 00:15:27,070 Ond gyda thebygolrwydd uchel, ond amlwg nad 100% tebygolrwydd, 352 00:15:27,070 --> 00:15:30,440 y cyfrifiadur yn mynd i yna ddamwain y rhaglen oherwydd nid yw hyn yn 353 00:15:30,440 --> 00:15:32,490 cof y dylwn i gael yr hawl i gyffwrdd. 354 00:15:32,490 --> 00:15:36,330 Felly, yn fyr, mae'r rhaglen hon yn ddiffygiol am yr union y rheswm hwnnw. 355 00:15:36,330 --> 00:15:38,070 Yn sylfaenol Dydw i ddim yn gwneud yr hyn? 356 00:15:38,070 --> 00:15:42,366 Pa gamau mae'n rhaid i mi adael allan, yn union fel rydym yn hepgor gyda enghraifft gyntaf Binky yn? 357 00:15:42,366 --> 00:15:42,866 Yeah? 358 00:15:42,866 --> 00:15:43,710 >> GYNULLEIDFA: Dyraniad Cof? 359 00:15:43,710 --> 00:15:45,001 >> DAVID Malan: Dyraniad Cof. 360 00:15:45,001 --> 00:15:48,400 Nid wyf wedi dyrannu mewn gwirionedd unrhyw cof am y llinyn. 361 00:15:48,400 --> 00:15:50,270 Fel y gallwn atgyweiria hon mewn cwpl o ffyrdd. 362 00:15:50,270 --> 00:15:52,700 Un, gallwn gadw pethau'n syml ac yn wir, yn awr eich bod yn 363 00:15:52,700 --> 00:15:55,116 mynd i ddechrau i weld amwysedd o'r llinellau rhwng yr hyn 364 00:15:55,116 --> 00:15:58,520 arae yw, beth llinyn yw, beth yw seren torgoch yw, yr hyn amrywiaeth o chars 365 00:15:58,520 --> 00:15:59,020 mae. 366 00:15:59,020 --> 00:16:02,450 Dyma ail enghraifft sy'n cynnwys llinynnau a rhybudd 367 00:16:02,450 --> 00:16:05,690 i gyd Rwyf wedi gwneud ar-lein 16 yw, yn hytrach na dweud 368 00:16:05,690 --> 00:16:09,530 y byffer yn mynd i fod yn torgoch seren, pwyntydd i darn o gof, 369 00:16:09,530 --> 00:16:14,057 Rydw i'n mynd i roi rhagweithiol iawn fy hun byffer am 16 cymeriadau, 370 00:16:14,057 --> 00:16:16,390 ac yn wir, os ydych yn gyfarwydd gyda'r term clustogi, 371 00:16:16,390 --> 00:16:20,570 yn ôl pob tebyg o fyd fideos, lle mae fideo ar clustogi, byffro, 372 00:16:20,570 --> 00:16:21,175 byffro. 373 00:16:21,175 --> 00:16:22,550 Wel, beth yw'r cysylltiad yma? 374 00:16:22,550 --> 00:16:24,960 Wel, Y tu mewn o YouTube ac y tu mewn o chwaraewyr fideo 375 00:16:24,960 --> 00:16:27,200 Yn gyffredinol, mae amrywiaeth mae hynny'n fwy na 16. 376 00:16:27,200 --> 00:16:30,340 Gallai fod yn amrywiaeth o faint un megabyte, efallai 10 megabeit, 377 00:16:30,340 --> 00:16:34,330 ac i mewn i'r amrywiaeth mae eich porwr lawrlwytho criw cyfan o bytes, 378 00:16:34,330 --> 00:16:37,500 criw cyfan o megabeit o fideo, ac mae'r chwaraewr fideo, 379 00:16:37,500 --> 00:16:40,930 YouTube neu bwy bynnag sydd, yn dechrau darllen y bytes o'r array, 380 00:16:40,930 --> 00:16:43,530 ac unrhyw tro y byddwch yn gweld y byffro gair, byffro, 381 00:16:43,530 --> 00:16:46,350 mae hynny'n golygu y chwaraewr wedi gotten hyd at ddiwedd y rhesi. 382 00:16:46,350 --> 00:16:50,430 Mae'r rhwydwaith mor araf nad oes ganddo ail-lenwi y casgliad gyda mwy o bytes 383 00:16:50,430 --> 00:16:55,610 ac felly ydych allan o ddarnau i arddangos i'r defnyddiwr. 384 00:16:55,610 --> 00:16:59,430 >> Felly byffer yn derm addas yma yn y 'i' jyst amrywiaeth, darn o gof. 385 00:16:59,430 --> 00:17:02,530 A bydd hyn yn atgyweiria ' am ei fod yn troi allan 386 00:17:02,530 --> 00:17:07,410 eich bod yn gallu trin araeau fel pe eu bod yn mynd i'r afael, er bod byffer 387 00:17:07,410 --> 00:17:10,710 yn unig yw symbol, mae'n dilyniant o gymeriadau, byffer, 388 00:17:10,710 --> 00:17:14,760 mae hynny'n ddefnyddiol i mi, y rhaglennydd, gallwch basio ei enw o gwmpas 389 00:17:14,760 --> 00:17:17,079 fel pe bai'n pwyntydd, fel pe bai'n 390 00:17:17,079 --> 00:17:21,000 Roedd y cyfeiriad darn o gof am 16 chars. 391 00:17:21,000 --> 00:17:24,530 Felly dyna i ddweud, gallaf basio y scanf union hynny gair 392 00:17:24,530 --> 00:17:30,670 ac felly nawr, os wyf yn gwneud y rhaglen hon, gwneud scanf 2, dot scanf slaes 2, 393 00:17:30,670 --> 00:17:35,386 a deipio i mewn helo byd, Mewnbynnu, hynny adeg-- 394 00:17:35,386 --> 00:17:37,590 >> Hmm, beth ddigwyddodd? 395 00:17:37,590 --> 00:17:39,340 Llinynnol os gwelwch yn dda. 396 00:17:39,340 --> 00:17:41,430 Beth wnes i ei wneud o'i le? 397 00:17:41,430 --> 00:17:43,800 Helo byd, byffer. 398 00:17:43,800 --> 00:17:44,705 Helo Byd. 399 00:17:44,705 --> 00:17:48,201 400 00:17:48,201 --> 00:17:49,420 Ah, rwy'n gwybod beth mae'n ei wneud. 401 00:17:49,420 --> 00:17:49,920 IAWN. 402 00:17:49,920 --> 00:17:51,628 Felly, mae'n darllen i fyny nes bod y gofod gyntaf. 403 00:17:51,628 --> 00:17:55,680 Felly gadewch i ni twyllo am ddim ond ennyd a yn dweud oeddwn am deipio rhywbeth 404 00:17:55,680 --> 00:18:01,408 hir iawn fel hyn yn dedfryd hir dyna un, dau, tri, pedwar, pump, 405 00:18:01,408 --> 00:18:04,420 chwech, saith, wyth, naw, 10, 11, 12, 13, 14, 15, 16. 406 00:18:04,420 --> 00:18:05,300 IAWN. 407 00:18:05,300 --> 00:18:07,600 Mae'n wir dedfryd hir. 408 00:18:07,600 --> 00:18:10,710 Felly frawddeg hwn yn hwy na 16 nod 409 00:18:10,710 --> 00:18:13,670 ac felly pan fyddaf daro Chofnoda, beth sy'n mynd i ddigwydd? 410 00:18:13,670 --> 00:18:16,940 Wel, yn yr achos hwn y byffer stori, yr wyf wedi datgan 411 00:18:16,940 --> 00:18:22,190 i mewn gwirionedd yn cael amrywiaeth gyda 16 chars barod i fynd. 412 00:18:22,190 --> 00:18:27,426 Felly un, dau, tri, pedwar, pump, chwech, saith, wyth, naw, 10, 11, 12, 13, 14, 413 00:18:27,426 --> 00:18:29,440 15, 16. 414 00:18:29,440 --> 00:18:34,410 Felly 16 cymeriadau, ac yn awr, pan fyddaf yn darllen yn rhywbeth fel hyn yn hir 415 00:18:34,410 --> 00:18:43,950 dedfryd, beth sy'n mynd i ddigwydd yn fy mod i'n mynd i ddarllen yn hyn yn hir 416 00:18:43,950 --> 00:18:49,660 S-E-N-T-E-N-C-E, y frawddeg. 417 00:18:49,660 --> 00:18:52,270 >> Felly mae hyn yn fwriadol yn beth drwg i mi 418 00:18:52,270 --> 00:18:55,060 cadw ysgrifennu y tu hwnt i'r ffiniau fy array, 419 00:18:55,060 --> 00:18:56,660 tu hwnt i ffiniau fy byffer. 420 00:18:56,660 --> 00:19:00,100 Y gallwn i gael lwcus ac yn y rhaglen Bydd cadw ar redeg a pheidio gofal, 421 00:19:00,100 --> 00:19:03,450 ond yn gyffredinol, mae hyn yn Bydd yn wir chwalu fy rhaglen, 422 00:19:03,450 --> 00:19:06,440 ac mae'n nam yn fy godio'r hyn o bryd yr wyf yn camu 423 00:19:06,440 --> 00:19:08,576 tu hwnt i ffiniau o hynny array, oherwydd yr wyf yn 424 00:19:08,576 --> 00:19:10,450 ddim yn gwybod os yw'n o reidrwydd yn mynd i ddamwain 425 00:19:10,450 --> 00:19:12,120 neu os Im 'jyst yn mynd i gael lwcus. 426 00:19:12,120 --> 00:19:15,750 Felly, mae hyn yn broblem oherwydd yn yr achos hwn, mae'n ymddangos i weithio 427 00:19:15,750 --> 00:19:20,931 a gadewch i ni temtio ffawd yma, er bod y DRhA yn ymddangos i oddef cryn dipyn 428 00:19:20,931 --> 00:19:21,430 o- 429 00:19:21,430 --> 00:19:22,040 >> Dyna ni. 430 00:19:22,040 --> 00:19:23,240 Yn olaf. 431 00:19:23,240 --> 00:19:26,470 Felly, fi yw'r unig un sy'n gallu gweld hyn. 432 00:19:26,470 --> 00:19:29,630 Felly, Fi jyst wedi cael llawer o hwyl yn teipio allan ymadrodd 'n sylweddol hir gwirioneddol 433 00:19:29,630 --> 00:19:32,800 ei fod yn sicr yn rhagori 16 bytes, gan fy mod 434 00:19:32,800 --> 00:19:38,050 deipio yn yr aml-linell hir crazy ymadrodd, ac yna sylwi ar yr hyn a ddigwyddodd. 435 00:19:38,050 --> 00:19:41,110 Mae'r rhaglen yn ceisio argraffu ac yna got nam segmentu 436 00:19:41,110 --> 00:19:44,430 a namau segmentu yw pan rhywbeth fel hyn yn digwydd 437 00:19:44,430 --> 00:19:47,650 ac mae'r system weithredu yn dweud na, ni all gyffwrdd y cof. 438 00:19:47,650 --> 00:19:49,570 Rydym yn mynd i ladd y rhaglen yn gyfan gwbl. 439 00:19:49,570 --> 00:19:51,180 >> Felly, mae hyn yn ymddangos yn broblemus. 440 00:19:51,180 --> 00:19:54,540 Rydw i wedi gwella'r rhaglen lle o leiaf yn cael rhywfaint o gof, 441 00:19:54,540 --> 00:19:58,000 ond byddai hyn yn ymddangos i gyfyngu y GetString swyddogaeth i gael 442 00:19:58,000 --> 00:20:00,780 llinynnau o ryw hyd cyfyngedig 16. 443 00:20:00,780 --> 00:20:04,200 Felly os ydych am i gefnogi mwy o amser brawddegau na 16 cymeriadau, 444 00:20:04,200 --> 00:20:04,880 beth ydych chi'n ei wneud? 445 00:20:04,880 --> 00:20:07,970 Wel, gallwch gynyddu maint y byffer hwn i 32 446 00:20:07,970 --> 00:20:09,190 neu sy'n ymddangos yn fath o fyr. 447 00:20:09,190 --> 00:20:12,260 Pam nad ydym yn unig yn gwneud mae'n 1,000 ond gwthio yn ôl. 448 00:20:12,260 --> 00:20:17,100 Beth yw ymateb yn reddfol o dim ond osgoi'r broblem hon drwy wneud 449 00:20:17,100 --> 00:20:20,660 fy clustogi mwy, fel 1,000 o chars? 450 00:20:20,660 --> 00:20:23,470 Trwy weithredu'r GetString y ffordd hon. 451 00:20:23,470 --> 00:20:27,130 Beth sy'n dda neu'n ddrwg yma? 452 00:20:27,130 --> 00:20:28,033 Yeah? 453 00:20:28,033 --> 00:20:30,574 GYNULLEIDFA: Os ydych yn rhwymo i fyny choelbren o le ac nad ydych yn ei ddefnyddio, 454 00:20:30,574 --> 00:20:33,500 yna ni allwch ailddyrannu y gofod. 455 00:20:33,500 --> 00:20:34,500 DAVID Malan: Yn hollol. 456 00:20:34,500 --> 00:20:38,480 Mae'n wastraffus i'r graddau os nad ydych yn ei wneud mewn gwirionedd yn rhaid i 900 o bytes rhai 457 00:20:38,480 --> 00:20:41,057 ac eto yr ydych yn gofyn am 1,000 i gyd beth bynnag, 458 00:20:41,057 --> 00:20:44,140 ydych ond yn cymryd llawer mwy o gof ar cyfrifiadur y defnyddiwr nag angen i chi wneud, 459 00:20:44,140 --> 00:20:45,740 ac wedi'r cyfan, mae rhai o'r ydych eisoes wedi dod ar eu traws 460 00:20:45,740 --> 00:20:47,620 mewn bywyd, pan fyddwch yn rhedeg llawer o raglenni 461 00:20:47,620 --> 00:20:50,470 ac maent yn bwyta i fyny llawer o gof, Gall hyn mewn gwirionedd yn effeithio perfformiad 462 00:20:50,470 --> 00:20:52,220 a phrofiad y defnyddiwr ar y cyfrifiadur. 463 00:20:52,220 --> 00:20:56,090 Felly dyna fath o ateb diog, yn sicr, ac i'r gwrthwyneb, 464 00:20:56,090 --> 00:21:00,140 'i' nid yn unig yn wastraffus, pa broblem yn dal i fod, hyd yn oed os wyf yn gwneud fy byffer 465 00:21:00,140 --> 00:21:02,100 1,000? 466 00:21:02,100 --> 00:21:02,600 Yeah? 467 00:21:02,600 --> 00:21:04,475 >> GYNULLEIDFA: Y llinyn yn hyd 1,001. 468 00:21:04,475 --> 00:21:05,350 DAVID Malan: Yn union. 469 00:21:05,350 --> 00:21:08,280 Os yw eich llinyn yn hyd 1,001, mae gennych yr un broblem yn union, 470 00:21:08,280 --> 00:21:10,705 a chan fy nadl, fyddwn i dim ond wedyn yn ei gwneud yn 2000, 471 00:21:10,705 --> 00:21:12,830 ond nad ydych yn gwybod mewn ymlaen llaw pa mor fawr y dylai fod, 472 00:21:12,830 --> 00:21:16,890 ac eto, oes rhaid i mi lunio fy rhaglen cyn gadael i bobl eu defnyddio a llwytho i lawr 473 00:21:16,890 --> 00:21:17,390 iddo. 474 00:21:17,390 --> 00:21:21,490 Felly mae hyn yn union y math o pethau fod y ceisiau llyfrgell CS50 475 00:21:21,490 --> 00:21:24,750 er mwyn ein helpu gyda, ac rydym annhymerus 'yn unig yr olwg ar rai o'r gweithrediad sylfaenol 476 00:21:24,750 --> 00:21:29,790 yma, ond mae hyn yn CS50 dot C. hwn yw y ffeil sydd wedi bod ar CS50 IDE 477 00:21:29,790 --> 00:21:31,420 yr holl wythnosau hyn yr ydych wedi bod yn defnyddio. 478 00:21:31,420 --> 00:21:34,280 Mae'n cyn-llunio ac nad ydych wedi bod yn ei ddefnyddio yn awtomatig 479 00:21:34,280 --> 00:21:38,780 yn ôl natur y gael y dash L baner CS50 gyda chlang, 480 00:21:38,780 --> 00:21:42,300 ond os wyf sgroliwch i lawr drwy bob un swyddogaethau hyn, dyma GetString, 481 00:21:42,300 --> 00:21:44,636 a dim ond i roi i chi yn blas o'r hyn sy'n digwydd, 482 00:21:44,636 --> 00:21:46,760 gadewch i ni edrych yn sydyn ar cymhlethdod cymharol. 483 00:21:46,760 --> 00:21:48,870 Nid yw'n super hir swyddogaeth, ond nid ydym yn gwneud 484 00:21:48,870 --> 00:21:52,530 rhaid i ni feddwl yn galed am gyd sut i fynd ati i gael llinynnau. 485 00:21:52,530 --> 00:21:55,660 >> Felly dyma fy byffer ac yr wyf yn yn ôl pob golwg ymgychwyn iddo null. 486 00:21:55,660 --> 00:21:57,990 Mae hyn, wrth gwrs, yw'r un peth â seren torgoch, 487 00:21:57,990 --> 00:22:00,585 ond penderfynais mewn gweithredu'r llyfrgell CS50 488 00:22:00,585 --> 00:22:02,460 os ydym yn mynd i fod yn gwbl ddeinamig, 489 00:22:02,460 --> 00:22:05,770 Nid wyf yn gwybod o flaen llaw pa mor fawr o defnyddwyr llinyn yn mynd i eisiau i gael. 490 00:22:05,770 --> 00:22:08,140 Felly, yr wyf i'n mynd i ddechrau gyda dim ond llinyn gwag 491 00:22:08,140 --> 00:22:11,507 ac yr wyf i'n mynd i adeiladu cymaint cof gan fod angen i mi i osod y llinyn defnyddiwr 492 00:22:11,507 --> 00:22:13,340 ac os nad oes gennyf ddigon, dw i'n mynd i ofyn 493 00:22:13,340 --> 00:22:15,010 y system weithredu am fwy o gof. 494 00:22:15,010 --> 00:22:17,510 Rydw i'n mynd i symud eu llinyn i mewn darn mwy o gof 495 00:22:17,510 --> 00:22:21,847 ac rwy'n mynd i ollwng neu ddim y darn ddigon mawr o gof 496 00:22:21,847 --> 00:22:23,680 ac rydym yn jyst yn mynd i wneud hyn yn ailadroddol. 497 00:22:23,680 --> 00:22:25,570 >> Felly Cipolwg cyflym, dyma unig newidyn 498 00:22:25,570 --> 00:22:28,780 Rydw i'n mynd â hwy i gadw golwg o gynhwysedd fy byffer. 499 00:22:28,780 --> 00:22:30,071 Faint o bytes alla i ffitio? 500 00:22:30,071 --> 00:22:32,070 Dyma newidyn n â yr wyf i'n mynd i gadw 501 00:22:32,070 --> 00:22:36,200 golwg ar faint o bytes mewn gwirionedd yn y byffer neu fod y defnyddiwr wedi teipio. 502 00:22:36,200 --> 00:22:39,900 Os nad ydych chi wedi gweld hyn o'r blaen, i chi Gall bennu bod newidyn fel int 503 00:22:39,900 --> 00:22:46,370 heb ei lofnodi, sydd, fel yr awgryma'r enw, yn golygu ei fod yn heb fod yn negyddol, a pham y byddai 504 00:22:46,370 --> 00:22:50,590 Rwyf erioed wedi eisiau trafferthu pennu nad yw int yn unig yw int, 505 00:22:50,590 --> 00:22:52,540 ond ei fod yn int heb eu llofnodi? 506 00:22:52,540 --> 00:22:55,064 Mae'n int heb fod yn negyddol. 507 00:22:55,064 --> 00:22:56,355 Beth mae'r [Anghlywadwy] yn ei olygu? 508 00:22:56,355 --> 00:22:58,910 >> GYNULLEIDFA: Mae'n disgrifio swm o gof a all fod yn [Anghlywadwy]. 509 00:22:58,910 --> 00:22:59,660 >> DAVID Malan: Yeah. 510 00:22:59,660 --> 00:23:03,710 Felly os wyf yn dweud heb eu harwyddo, mae hyn mewn gwirionedd gan roi un ychydig o gof ychwanegol i chi 511 00:23:03,710 --> 00:23:07,440 ac mae'n ymddangos yn fath o wirion, ond os ydych rhaid i un ychydig o gof ychwanegol, bod 512 00:23:07,440 --> 00:23:09,940 yn golygu bod gennych ddwywaith cymaint o gwerthoedd y gallwch gynrychioli, 513 00:23:09,940 --> 00:23:11,570 oherwydd gall fod yn 0 neu 1. 514 00:23:11,570 --> 00:23:14,660 Felly yn ddiofyn, gall fod yn int fras negyddol 2000000000 holl ffordd 515 00:23:14,660 --> 00:23:16,030 hyd at bositif 2000000000. 516 00:23:16,030 --> 00:23:18,540 Mae'r rheini'n amrywio mawr, ond mae'n dal i fod y math o wastraffus 517 00:23:18,540 --> 00:23:21,280 os ydych ond yn poeni am maint, a dim ond yn reddfol 518 00:23:21,280 --> 00:23:24,620 Dylai fod yn ddi-negyddol neu cadarnhaol neu 0, yn dda yna, 519 00:23:24,620 --> 00:23:28,884 pam yr ydych yn gwastraffu 2000000000 Gwerthoedd posib ar gyfer rhifau negatif 520 00:23:28,884 --> 00:23:30,300 os nad ydych yn mynd i eu defnyddio? 521 00:23:30,300 --> 00:23:35,350 Felly, drwy ddweud heb eu harwyddo, yn awr fy int gall fod rhwng 0 a thua 4 biliwn a. 522 00:23:35,350 --> 00:23:39,280 >> Felly dyma dim ond int C am resymau ni fyddwn yn mynd i mewn yn unig nawr fel 523 00:23:39,280 --> 00:23:42,280 pam ei fod yn int yn lle hynny o torgoch, ond dyma 524 00:23:42,280 --> 00:23:44,630 hanfod yr hyn sy'n digwydd ar, a rhai ohonoch 525 00:23:44,630 --> 00:23:48,340 allai fod yn ddefnyddio, er enghraifft, y swyddogaeth fgetc hyd yn oed mewn PSet pedwar 526 00:23:48,340 --> 00:23:51,580 neu ar ôl hynny, byddwn yn gweld ei eto yn broblem a osodwyd pump, 527 00:23:51,580 --> 00:23:55,410 fgetc yn braf oherwydd wrth yr enw math o, math o arcanely yn awgrymu, 528 00:23:55,410 --> 00:23:57,940 ei fod yn swyddogaeth sy'n yn cael cymeriad ac felly, 529 00:23:57,940 --> 00:24:00,690 beth sy'n sylfaenol wahanol am yr hyn rydym yn ei wneud yn GetString 530 00:24:00,690 --> 00:24:03,110 yw nad ydym yn defnyddio scanf yn yr un modd. 531 00:24:03,110 --> 00:24:07,550 Rydym yn unig ymlusgol ar hyd cam-wrth-gam dros beth bynnag yw'r defnyddiwr wedi teipio i mewn, 532 00:24:07,550 --> 00:24:10,970 oherwydd gallwn bob amser yn dyrannu un torgoch, ac felly y gallwn bob amser yn ddiogel 533 00:24:10,970 --> 00:24:15,599 edrych ar un torgoch ar y tro, a y hud yn dechrau digwydd yma. 534 00:24:15,599 --> 00:24:17,890 Rydw i'n mynd i sgrolio i lawr i canol y swyddogaeth hon 535 00:24:17,890 --> 00:24:20,360 dim ond er mwyn fyr gyflwyno swyddogaeth hon. 536 00:24:20,360 --> 00:24:22,670 Yn debyg iawn mae 'na swyddogaeth malloc, mae ' 537 00:24:22,670 --> 00:24:27,740 swyddogaeth realloc lle realloc yn gadael i chi ailddyrannu darn o gof 538 00:24:27,740 --> 00:24:29,570 a'i wneud yn fwy neu'n llai. 539 00:24:29,570 --> 00:24:33,060 Stori Felly byr a hir gyda ton o fy llaw ar gyfer heddiw, 540 00:24:33,060 --> 00:24:35,620 gwybod bod yr hyn GetString yn ei wneud yw ei fod yn fath 541 00:24:35,620 --> 00:24:39,720 o dyfu hudol neu crebachu y byffer fel y defnyddiwr 542 00:24:39,720 --> 00:24:41,440 mathau yn ei linyn. 543 00:24:41,440 --> 00:24:43,962 >> Felly, os y mathau defnyddiwr llinyn byr, cod hwn 544 00:24:43,962 --> 00:24:45,920 Dim ond yn dyrannu digon cof i gyd-fynd y llinyn. 545 00:24:45,920 --> 00:24:48,086 Os yw'r defnyddiwr yn cadw teipio fel y gwneuthum ei dro ar ôl tro 546 00:24:48,086 --> 00:24:50,330 ac unwaith eto, yn dda, os bydd y byffer yn hyn mawr yn y lle cyntaf 547 00:24:50,330 --> 00:24:53,310 ac mae'r rhaglen yn sylweddoli, i arhoswch funud, rwy'n allan o le, 548 00:24:53,310 --> 00:24:55,410 mae'n mynd i ddyblu maint y byffer 549 00:24:55,410 --> 00:24:59,110 ac yna dyblu maint y byffer a'r cod sy'n gwneud yr dyblu, 550 00:24:59,110 --> 00:25:03,170 os edrychwn ar ei fan hyn, 'i' dim ond hyn glyfar un-leinin. 551 00:25:03,170 --> 00:25:06,830 Efallai nad ydych wedi gweld cystrawen hwn o'r blaen, ond os byddwch yn dweud seren hafal, 552 00:25:06,830 --> 00:25:10,470 mae hyn yn yr un peth â gan ddweud amseroedd capasiti 2. 553 00:25:10,470 --> 00:25:13,390 Felly 'i jyst yn cadw dyblu cynhwysedd y byffer 554 00:25:13,390 --> 00:25:17,480 ac yna dweud wrth realloc i roi ei hun bod llawer mwy o gof. 555 00:25:17,480 --> 00:25:19,720 >> Yn awr, wrth fynd heibio, yno yn swyddogaethau eraill i mewn yma 556 00:25:19,720 --> 00:25:23,680 na fyddwn yn edrych i mewn i unrhyw fanylder heblaw i ddangos yn GetInt, 557 00:25:23,680 --> 00:25:26,150 rydym yn defnyddio GetString yn GetInt. 558 00:25:26,150 --> 00:25:28,192 Rydym yn gwirio nad yw'n null, sydd, galw i gof, 559 00:25:28,192 --> 00:25:30,400 yw gwerth arbennig sydd golygu aeth rhywbeth o'i le. 560 00:25:30,400 --> 00:25:31,233 Rydym yn allan o gof. 561 00:25:31,233 --> 00:25:32,310 Gwell wirio am hynny. 562 00:25:32,310 --> 00:25:33,710 Ac rydym yn dychwelyd gwerth sentinel. 563 00:25:33,710 --> 00:25:37,850 Ond byddaf yn gohirio i'r sylwadau ynghylch pam ac yna rydym yn defnyddio cefnder hwn o scanf 564 00:25:37,850 --> 00:25:42,100 Gelwir sscanf ac mae'n troi allan hynny scanf sscanf, neu linyn, 565 00:25:42,100 --> 00:25:45,310 yn gadael i chi gymryd golwg ar y llinell sy'n yw'r defnyddiwr wedi teipio i mewn ac yn gadael i chi 566 00:25:45,310 --> 00:25:49,610 dadansoddi ei hanfod, a beth rwy'n wneud yma yw fy mod yn dweud sscanf, 567 00:25:49,610 --> 00:25:54,440 dadansoddi beth bynnag fo'r defnyddiwr deipio i mewn a gwneud yn siwr% i, 568 00:25:54,440 --> 00:25:59,250 mae yn gyfanrif ynddo, ac ni wnawn mynd i mewn heddiw yn union pam mae hefyd 569 00:25:59,250 --> 00:26:03,760 % y c yma, ond yn gryno yn caniatáu ni i ganfod a yw'r defnyddiwr wedi teipio 570 00:26:03,760 --> 00:26:06,050 yn rhywbeth ffug ar ôl y rhif. 571 00:26:06,050 --> 00:26:11,766 Felly, y rheswm y GetInt a GetString yn dweud wrthych i ailgeisio, ailgeisio, ailgeisio 572 00:26:11,766 --> 00:26:13,640 oherwydd yr holl cod hwnnw rydym wedi ysgrifennu, 573 00:26:13,640 --> 00:26:17,900 Mae'n fath o edrych ar fewnbwn y defnyddiwr wrth wneud yn siŵr ei fod yn gyfan gwbl rhifol 574 00:26:17,900 --> 00:26:21,700 neu ei fod yn fel y bo'r angen gwirioneddol Gwerth pwynt neu debyg, 575 00:26:21,700 --> 00:26:24,233 yn dibynnu ar ba werth swyddogaeth rydych yn ei ddefnyddio. 576 00:26:24,233 --> 00:26:25,060 >> Whew. 577 00:26:25,060 --> 00:26:25,710 IAWN. 578 00:26:25,710 --> 00:26:27,592 Dyna oedd lond ceg ond y pwynt yma yw 579 00:26:27,592 --> 00:26:29,550 mai'r rheswm oedd gennym y rhai olwynion hyfforddiant 580 00:26:29,550 --> 00:26:32,880 oherwydd ar y lefel isaf, mae dim ond cymaint o bethau sy'n 581 00:26:32,880 --> 00:26:35,674 gallu mynd o'i le ein bod eisiau i ymdrin preemptively 582 00:26:35,674 --> 00:26:38,090 y pethau hynny yn sicr yn y wythnosau cynharaf y dosbarth, 583 00:26:38,090 --> 00:26:42,230 ond yn awr gyda PSet pedwar a PSet bump a y tu hwnt fe welwch ei fod yn fwy hyd 584 00:26:42,230 --> 00:26:45,570 chi, ond hefyd yn eich bod yn fwy abl o ddatrys mathau hynny o broblemau 585 00:26:45,570 --> 00:26:47,180 eich hun. 586 00:26:47,180 --> 00:26:51,770 Unrhyw gwestiynau am GetString neu GetInt? 587 00:26:51,770 --> 00:26:52,630 Yeah? 588 00:26:52,630 --> 00:26:55,130 >> GYNULLEIDFA: Pam y byddech yn dyblu cynhwysedd y byffer 589 00:26:55,130 --> 00:26:57,630 yn hytrach na dim ond cynyddu iddo gan yr union swm? 590 00:26:57,630 --> 00:26:58,100 >> DAVID Malan: Cwestiwn da. 591 00:26:58,100 --> 00:27:00,474 Pam y byddai yn dyblu'r capasiti y byffer yn hytrach na 592 00:27:00,474 --> 00:27:02,800 i ddim ond cynyddu ei gan rai gwerth gyson? 593 00:27:02,800 --> 00:27:03,900 Roedd yn benderfyniad dylunio. 594 00:27:03,900 --> 00:27:08,590 Rydym yn unig yn penderfynu y oherwydd ei fod yn tueddu i fod ychydig yn ddrud amser-ddoeth yn eu gofyn 595 00:27:08,590 --> 00:27:10,440 y system weithredu ar gyfer cof, nid wnaethom 596 00:27:10,440 --> 00:27:13,210 eisiau i roi diwedd ar i fyny mynd i sefyllfa i linynnau mawr 597 00:27:13,210 --> 00:27:14,960 ein bod yn gofyn yr AO eto ac eto 598 00:27:14,960 --> 00:27:17,500 ac eto ac eto mewn olyniaeth gyflym ar gyfer cof. 599 00:27:17,500 --> 00:27:20,387 Felly, rydym yn unig wedi penderfynu, braidd fympwyol ond gobeithiwn yn rhesymol, 600 00:27:20,387 --> 00:27:22,720 hynny, eich bod yn gwybod beth, gadewch i ni ceisio cael y blaen i ni ein hunain 601 00:27:22,720 --> 00:27:25,520 a jyst cadw dyblu fel bod rydym yn lleihau faint o weithiau 602 00:27:25,520 --> 00:27:29,010 mae'n rhaid i ni alw malloc neu realloc, ond mae cyfanswm barn 603 00:27:29,010 --> 00:27:31,820 galwch yn absenoldeb o wybod beth y gallai defnyddwyr eisiau ei deipio. 604 00:27:31,820 --> 00:27:33,600 Gallai'r ddau fod ffyrdd gellir dadlau. 605 00:27:33,600 --> 00:27:35,430 Gellir dadlau dda. 606 00:27:35,430 --> 00:27:39,240 >> Felly, gadewch i ni edrych ar un neu ddau o sgîl-effeithiau eraill o gof, 607 00:27:39,240 --> 00:27:41,610 pethau sy'n gallu mynd o'i le ac offer eich bod yn gallu 608 00:27:41,610 --> 00:27:43,880 defnyddio i ddal y mathau hyn o gamgymeriadau. 609 00:27:43,880 --> 00:27:47,800 Mae'n troi allan bob un ohonoch, hyd yn oed er Nid yw check50 wedi dweud wrthych gymaint, 610 00:27:47,800 --> 00:27:50,050 wedi bod yn ysgrifennu buggy Cod ers wythnos un, 611 00:27:50,050 --> 00:27:53,630 hyd yn oed os bydd yr holl brofion check50 yn pasio, a hyd yn oed os ydych chi a'ch TF 612 00:27:53,630 --> 00:27:56,010 yn super hyderus bod eich cod gweithio fel y bwriadwyd. 613 00:27:56,010 --> 00:27:59,190 Eich cod wedi bod yn bygi neu ddiffygiol yn hynny o bob un ohonoch, 614 00:27:59,190 --> 00:28:02,540 wrth ddefnyddio'r llyfrgell CS50, wedi bod yn gollwng cof. 615 00:28:02,540 --> 00:28:06,040 Rydych chi wedi bod yn gofyn y system weithredu ar gyfer cof yn y rhan fwyaf o'r rhaglenni 616 00:28:06,040 --> 00:28:08,850 eich bod wedi ysgrifennu, ond ydych chi wedi byth yn ei roi yn ôl. 617 00:28:08,850 --> 00:28:12,110 Rydych chi wedi Gelwir GetString a GetInt a GetFloat, 618 00:28:12,110 --> 00:28:15,270 ond gyda GetString, eich bod wedi byth a elwir yn unGetString neu Rhoi 619 00:28:15,270 --> 00:28:19,890 Llinynnol Back neu debyg, ond yr ydym wedi gweld bod GetString yn dyrannu cof 620 00:28:19,890 --> 00:28:22,810 trwy gyfrwng malloc neu hyn realloc swyddogaeth, sydd ychydig 621 00:28:22,810 --> 00:28:25,670 debyg iawn o ran ysbryd, ac eto, rydym wedi bod 622 00:28:25,670 --> 00:28:28,629 gofyn i'r system weithredu ar gyfer cof a chof eto ac eto 623 00:28:28,629 --> 00:28:29,670 ond byth yn rhoi yn ôl. 624 00:28:29,670 --> 00:28:33,550 >> Yn awr, wrth fynd heibio, mae'n ymddangos fod pan rhaglen ymddiswyddo, pob un o'r cof 625 00:28:33,550 --> 00:28:34,870 yn cael ei rhyddhau yn awtomatig. 626 00:28:34,870 --> 00:28:36,150 Felly nid yw'n wedi bod yn fargen enfawr. 627 00:28:36,150 --> 00:28:38,590 Nid yw'n mynd i dorri'r IDE neu bethau yn araf i lawr, 628 00:28:38,590 --> 00:28:40,670 ond pan rhaglenni yn ei wneud Yn gyffredinol, yn gollwng cof 629 00:28:40,670 --> 00:28:42,170 ac maent yn rhedeg am amser hir. 630 00:28:42,170 --> 00:28:45,640 Os ydych chi wedi gweld y ychydig yn dwp erioed pêl traeth yn Mac OS neu'r hourglass 631 00:28:45,640 --> 00:28:51,160 ar Windows ble mae'n fath o arafu neu feddwl neu feddwl 632 00:28:51,160 --> 00:28:53,770 neu dim ond mewn gwirionedd yn dechrau i arafu i gropian, 633 00:28:53,770 --> 00:28:56,960 mae'n bosib iawn fod y canlyniad yn gollwng cof. 634 00:28:56,960 --> 00:28:59,970 Mae'r rhaglenwyr a ysgrifennodd y feddalwedd rydych yn ei ddefnyddio 635 00:28:59,970 --> 00:29:03,570 gofyn y system weithredu ar gyfer cof bob ychydig funudau, bob awr. 636 00:29:03,570 --> 00:29:05,570 Ond os ydych yn rhedeg y meddalwedd, hyd yn oed os yw'n 637 00:29:05,570 --> 00:29:08,680 lleihau yn eich cyfrifiadur am oriau neu ddyddiau bwygilydd, 638 00:29:08,680 --> 00:29:11,980 efallai y byddwch yn gofyn am fwy a mwy o cof a pheidiwch byth mewn gwirionedd yn ei ddefnyddio 639 00:29:11,980 --> 00:29:15,180 ac felly gallai eich cod fod, neu Gallai rhaglenni fod yn gollwng cof, 640 00:29:15,180 --> 00:29:18,350 ac os byddwch yn dechrau gollwng cof, mae llai o gof ar gyfer rhaglenni eraill, 641 00:29:18,350 --> 00:29:21,220 a'r effaith yw arafu popeth lawr. 642 00:29:21,220 --> 00:29:23,600 >> Yn awr, mae hyn yn bell un o y rhaglenni mwyaf erchyll 643 00:29:23,600 --> 00:29:26,350 byddwch yn cael cyfleoedd i redeg mewn CS50 i'r graddau 644 00:29:26,350 --> 00:29:31,650 fel ei allbwn yn oed yn fwy esoterig na chlang neu wneud neu unrhyw un o'r gorchymyn 645 00:29:31,650 --> 00:29:35,930 rhaglenni lein rydym wedi rhedeg o'r blaen ond diolch byth, wreiddio yn ei allbwn 646 00:29:35,930 --> 00:29:39,810 rhywfaint o awgrymiadau defnyddiol super sy'n Bydd yn ddefnyddiol naill ai ar gyfer PSet pedwar 647 00:29:39,810 --> 00:29:41,510 neu'n sicr PSet bump. 648 00:29:41,510 --> 00:29:44,250 Felly valgrind yn offeryn y gellir eu defnyddio i edrych 649 00:29:44,250 --> 00:29:46,930 am ollyngiadau cof yn eich rhaglen. 650 00:29:46,930 --> 00:29:48,570 Mae'n gymharol syml i'w rhedeg. 651 00:29:48,570 --> 00:29:51,420 Rydych yn rhedeg valgrind ac yna, hyd yn oed er ei fod yn ychydig yn amleiriog, 652 00:29:51,420 --> 00:29:54,440 dash gwirio gollwng dash hafal llawn, ac yna dot 653 00:29:54,440 --> 00:29:56,320 slaes ac enw eich rhaglen. 654 00:29:56,320 --> 00:30:00,010 Felly bydd valgrind yna rhedeg eich rhaglen ac ar ddiwedd eich rhaglen 655 00:30:00,010 --> 00:30:02,240 rhedeg cyn iddo ymddiswyddo a yn rhoi i chi yn brydlon arall, 656 00:30:02,240 --> 00:30:04,980 mae'n mynd i ddadansoddi eich rhaglen tra ei fod yn bod yn rhedeg 657 00:30:04,980 --> 00:30:07,740 ac yn dweud wrthych wnaethoch chi yn gollwng unrhyw gof ac yn well hyd yn hyn, 658 00:30:07,740 --> 00:30:10,610 wnaethoch chi gyffwrdd cof bod nad oedd yn perthyn i chi? 659 00:30:10,610 --> 00:30:13,700 Ni all ddal popeth, ond mae'n 'n bert da yn dal y rhan fwyaf o bethau. 660 00:30:13,700 --> 00:30:19,700 >> Felly dyma enghraifft o fy cael ei redeg rhaglen hon, ar ôl valgrind rhedeg, 661 00:30:19,700 --> 00:30:21,470 ar raglen o'r enw cof, ac rwy'n mynd 662 00:30:21,470 --> 00:30:24,730 i dynnu sylw at y llinellau sy'n cael eu yn y pen draw o ddiddordeb i ni. 663 00:30:24,730 --> 00:30:27,690 Felly mae hyd yn oed mwy o wrthdyniadau fy mod wedi dileu o'r sleidiau. 664 00:30:27,690 --> 00:30:30,930 Ond gadewch i ni dim ond yn gweld beth mae hyn yn rhaglen yn gallu ei ddweud wrthym. 665 00:30:30,930 --> 00:30:34,800 Mae'n gallu dweud pethau wrthym fel ysgrifennu annilys o faint 4. 666 00:30:34,800 --> 00:30:38,020 Mewn geiriau eraill, os ydych yn cyffwrdd cof, yn benodol 4 bytes o gof 667 00:30:38,020 --> 00:30:40,350 na ddylai fod gennych, Gall valgrind ddweud wrthych fod. 668 00:30:40,350 --> 00:30:41,660 Ysgrifennu annilys o faint 4. 669 00:30:41,660 --> 00:30:43,640 Rydych yn cyffwrdd pedwar bytes na ddylai fod gennych. 670 00:30:43,640 --> 00:30:44,840 Ble wnaethoch chi hynny? 671 00:30:44,840 --> 00:30:45,900 Mae hyn yn harddwch. 672 00:30:45,900 --> 00:30:50,000 Cof dot llinell c 21 yw lle rydych yn sgriwio i fyny a dyna pam ei bod yn ddefnyddiol. 673 00:30:50,000 --> 00:30:53,410 Mae llawer yn hoffi GDB, gall helpu eich cyfeirio at y gwall gwirioneddol. 674 00:30:53,410 --> 00:30:57,170 >> Yn awr, mae hyn yn un yn ychydig yn fwy amleiriog, os nad yn ddryslyd. 675 00:30:57,170 --> 00:31:01,307 40 bytes mewn 1 bloc yn bendant ar goll yn colli record 1 o 1. 676 00:31:01,307 --> 00:31:02,140 Beth yw ystyr hynny? 677 00:31:02,140 --> 00:31:05,920 Wel, 'i jyst yn golygu eich gofyn am 40 bytes ac yr ydych byth yn rhoi yn ôl. 678 00:31:05,920 --> 00:31:08,930 Rydych elwir malloc neu os ydych o'r enw GetString a'r system weithredu 679 00:31:08,930 --> 00:31:12,450 Rhoddodd chi'n 40 bytes, ond dydych chi byth rhyddhau neu eu rhyddhau y cof, 680 00:31:12,450 --> 00:31:15,400 ac i fod yn deg, rydym wedi byth yn dangos chi sut i roi cof yn ôl. 681 00:31:15,400 --> 00:31:17,910 Troi allan yna super swyddogaeth syml o'r enw rhad ac am ddim. 682 00:31:17,910 --> 00:31:21,170 Yn cymryd un ddadl, y peth ydych chi eisiau i ryddhau neu roi yn ôl, 683 00:31:21,170 --> 00:31:23,430 ond 40 bytes, mae'n debyg, yn y rhaglen hon 684 00:31:23,430 --> 00:31:27,300 wedi cael eu colli yn y llinell 20 o gof dot c. 685 00:31:27,300 --> 00:31:28,650 >> Felly, gadewch i ni weld y rhaglen hon. 686 00:31:28,650 --> 00:31:31,020 Mae'n super ddiwerth. 687 00:31:31,020 --> 00:31:33,980 Mae'n dangos yn unig gwall penodol hwn. 688 00:31:33,980 --> 00:31:34,920 Felly, gadewch i ni edrych. 689 00:31:34,920 --> 00:31:39,920 Dyma brif a phrif, rhybudd, galwadau swyddogaeth o'r enw ffurflenni f a'r lle. 690 00:31:39,920 --> 00:31:41,550 Felly nid bob un sy'n ddiddorol. 691 00:31:41,550 --> 00:31:42,664 Beth mae f yn ei wneud? 692 00:31:42,664 --> 00:31:44,330 Hysbysiad Doeddwn i ddim yn trafferthu gyda prototeip. 693 00:31:44,330 --> 00:31:46,520 Roeddwn i eisiau cadw'r cod mor minimal ag y bo modd. 694 00:31:46,520 --> 00:31:49,530 Felly, yr wyf yn rhoi f uwchben brif a mae hynny'n iawn, yn sicr, 695 00:31:49,530 --> 00:31:51,500 ar gyfer rhaglenni byr fel hyn. 696 00:31:51,500 --> 00:31:56,910 Felly nid f yn dychwelyd unrhyw beth ac yn gwneud Nid yw cymryd unrhyw beth, ond mae'n gwneud hyn. 697 00:31:56,910 --> 00:31:59,620 Mae'n datgan, yn debyg iawn yn yr enghraifft Binky, 698 00:31:59,620 --> 00:32:02,682 pwyntydd enw x sy'n mynd i storio y cyfeiriad o int. 699 00:32:02,682 --> 00:32:03,890 Felly dyna yr ochr chwith. 700 00:32:03,890 --> 00:32:07,230 Yn Saesneg, beth yw'r ochr dde yn ei wneud? 701 00:32:07,230 --> 00:32:09,770 Dylai unrhyw un? 702 00:32:09,770 --> 00:32:13,665 Beth yw hyn yn ei wneud i ni? 703 00:32:13,665 --> 00:32:14,651 Yeah? 704 00:32:14,651 --> 00:32:16,623 >> GYNULLEIDFA: [Anghlywadwy] gwaith maint o int 705 00:32:16,623 --> 00:32:19,175 sydd 10 gwaith yn fwy na [Anghlywadwy] 706 00:32:19,175 --> 00:32:20,800 DAVID Malan: Da a gadewch i mi crynhoi. 707 00:32:20,800 --> 00:32:25,480 Felly dyrannu digon o le ar gyfer 10 o gyfanrifau neu 10, beth yw'r maint o int, 708 00:32:25,480 --> 00:32:29,340 'i' pedwar bytes, felly 10 gwaith 4 40, fel bod ochr dde fy mod i wedi 709 00:32:29,340 --> 00:32:33,930 a amlygwyd yn rhoi 40 bytes mi ac storio cyfeiriad y beit cyntaf 710 00:32:33,930 --> 00:32:34,940 i mewn i x. 711 00:32:34,940 --> 00:32:38,380 Ac yn awr yn olaf, ac dyma lle rhaglen hon yw buggy, beth sydd 712 00:32:38,380 --> 00:32:41,540 o'i le ar linell 21 yn seiliedig ar y rhesymeg? 713 00:32:41,540 --> 00:32:45,197 714 00:32:45,197 --> 00:32:46,280 Beth sydd o'i le ar llinell 21? 715 00:32:46,280 --> 00:32:46,780 Yeah? 716 00:32:46,780 --> 00:32:49,550 GYNULLEIDFA: Nid ydych yn gallu mynegai i mewn i x [Anghlywadwy]. 717 00:32:49,550 --> 00:32:50,300 DAVID Malan: Yeah. 718 00:32:50,300 --> 00:32:52,270 Nid wyf ddylai mynegai i mewn i x fel 'na. 719 00:32:52,270 --> 00:32:53,850 Felly syntactically, mae hynny'n iawn. 720 00:32:53,850 --> 00:32:56,990 Beth sy'n braf yw, yn debyg iawn i chi Gall trin yr enw amrywiaeth 721 00:32:56,990 --> 00:33:01,080 fel pe ei fod yn pwyntydd, yn yr un modd gallwch drin pwyntydd fel pe ei fod yn 722 00:33:01,080 --> 00:33:06,425 amrywiaeth, ac felly gallaf syntactically dweud x braced rhywbeth, x braced i, 723 00:33:06,425 --> 00:33:07,800 ond mae'r 10 yn broblemus. 724 00:33:07,800 --> 00:33:09,096 Pam? 725 00:33:09,096 --> 00:33:10,910 >> GYNULLEIDFA: Oherwydd nad yw'n y tu mewn. 726 00:33:10,910 --> 00:33:12,390 >> DAVID Malan: Nid yw'n tu mewn y darn o gof. 727 00:33:12,390 --> 00:33:15,306 Beth yw gwerth mwyaf y dylwn yn rhoi mewn cromfachau sgwâr hynny? 728 00:33:15,306 --> 00:33:16,870 9, 0 drwy 9. 729 00:33:16,870 --> 00:33:18,160 Oherwydd sero mynegeio. 730 00:33:18,160 --> 00:33:20,190 Felly byddai 0 drwy 9 yn iawn. 731 00:33:20,190 --> 00:33:23,960 Nid yw braced 10 yn dda ac ond, yn cofio fodd bynnag, bob tro 732 00:33:23,960 --> 00:33:27,017 Yr wyf yn ymddangos i geisio gwneud CS50 IDE damwain trwy deipio mewn gwerthoedd ffug, 733 00:33:27,017 --> 00:33:29,100 Nid yw bob amser yn cydweithredu, ac yn wir, yr ydych yn aml 734 00:33:29,100 --> 00:33:31,460 cael lwcus dim ond oherwydd y Nid yw system weithredu yn 735 00:33:31,460 --> 00:33:35,467 sylwi bod chi erioed mor ychydig yn pasio rhywfaint talp o gof, 736 00:33:35,467 --> 00:33:38,300 oherwydd eich bod yn aros o fewn dechnegol eich segment, ond yn fwy ar hynny 737 00:33:38,300 --> 00:33:40,940 mewn dosbarth systemau gweithredu, ac felly rhywbeth fel hyn 738 00:33:40,940 --> 00:33:43,000 Gallai yn hawdd iawn mynd heb eu canfod. 739 00:33:43,000 --> 00:33:48,120 Byth yn eich rhaglen yn mynd i ddamwain yn gyson ond efallai unwaith mewn dro. 740 00:33:48,120 --> 00:33:50,610 >> Ac felly gadewch i ni geisio valgrind ar hyn, ac dyma 741 00:33:50,610 --> 00:33:52,870 lle y byddwn yn cael llethu gan y cynnyrch am ennyd. 742 00:33:52,870 --> 00:34:00,810 Felly gwnewch cof gwirio gollwng valgrind yn hafal i gof dot slaes llawn. 743 00:34:00,810 --> 00:34:03,040 A dyma pam yr wyf yn addo byddai hyn yn llethu. 744 00:34:03,040 --> 00:34:05,700 Dyma beth valgrind, dyma beth rhaglennydd, rai blynyddoedd yn ago- 745 00:34:05,700 --> 00:34:08,469 penderfynodd y byddai'n syniad da ar gyfer allbwn i edrych fel. 746 00:34:08,469 --> 00:34:09,750 Felly, gadewch i ni wneud synnwyr o hyn. 747 00:34:09,750 --> 00:34:13,120 Felly yr holl ffordd ar y llaw chwith ochr heb reswm da 748 00:34:13,120 --> 00:34:16,620 yw'r broses ID y rhaglen rydym yn unig yn rhedeg, y dynodwr unigryw 749 00:34:16,620 --> 00:34:18,030 ar gyfer y rhaglen rydym yn unig yn rhedeg. 750 00:34:18,030 --> 00:34:19,738 Rydym yn dileu hynny o y sleid, ond mae 751 00:34:19,738 --> 00:34:22,190 rhywfaint o wybodaeth ddefnyddiol yn y fan hyn. 752 00:34:22,190 --> 00:34:24,684 >> Gadewch i sgrolio i fyny at y brig. 753 00:34:24,684 --> 00:34:25,600 Dyma lle rydym yn dechrau. 754 00:34:25,600 --> 00:34:27,040 Felly nid yw'n gyd bod llawer allbwn. 755 00:34:27,040 --> 00:34:30,429 Dyma bod ysgrifennu annilys o faint 4 ar-lein 21. 756 00:34:30,429 --> 00:34:31,760 Wel, beth oedd llinell 21? 757 00:34:31,760 --> 00:34:34,500 Llinell 21 yn union hyn ac mae'n gwneud synnwyr 758 00:34:34,500 --> 00:34:37,290 fy mod yn ddilys ysgrifennu 4 bytes oherwydd fy mod i'n 759 00:34:37,290 --> 00:34:40,389 ceisio rhoi cyfanrif hwn, a allai fod yn unrhyw beth, 760 00:34:40,389 --> 00:34:42,370 'i jyst yn digwydd bod yn sero, ond Im 'yn ceisio 761 00:34:42,370 --> 00:34:44,940 i'w roi mewn lleoliad nad yw'n perthyn i mi. 762 00:34:44,940 --> 00:34:50,900 Ar ben hynny, i lawr yma, 40 bytes mewn un blociau yn cael eu colli yn bendant yng nghofnod 1. 763 00:34:50,900 --> 00:34:56,500 Mae hyn oherwydd pan fyddaf yn galw malloc yma, Dwi byth mewn gwirionedd yn rhad ac am ddim y cof. 764 00:34:56,500 --> 00:34:58,140 >> Felly, sut y gallwn atgyweiria hon? 765 00:34:58,140 --> 00:35:02,970 Gadewch i mi fynd yn ei flaen a bod yn ychydig yn fwy diogel ac yn gwneud 9 yno a gadewch i mi yma am ddim x. 766 00:35:02,970 --> 00:35:04,820 Mae hyn yn y swyddogaeth newydd ar gyfer heddiw. 767 00:35:04,820 --> 00:35:11,520 Os byddaf yn awr yn ailgynnal gwneud cof dot slaes, gadewch i ni redeg valgrind arno eto, 768 00:35:11,520 --> 00:35:14,990 gwneud y mwyaf fy ffenestri a daro Chofnoda. 769 00:35:14,990 --> 00:35:16,900 Yn awr, mae'n dda. 770 00:35:16,900 --> 00:35:19,590 Maent yn claddu y newyddion da ym mhob un o'r allbwn hwn. 771 00:35:19,590 --> 00:35:20,810 Mae'r holl blociau domen yn rhad ac am ddim. 772 00:35:20,810 --> 00:35:23,604 Byddwn yn dod yn ôl at yr hyn y domen yw, ond nid oes unrhyw ollyngiadau yn bosibl. 773 00:35:23,604 --> 00:35:25,520 Felly, mae hyn yn unig yw arall arf ar gyfer eich pecyn cymorth 774 00:35:25,520 --> 00:35:30,220 gallwch ddechrau ag ef dod o hyd yn awr wallau fel 'na. 775 00:35:30,220 --> 00:35:34,532 >> Ond gadewch i ni weld beth gall mwy o fynd o'i le yma. 776 00:35:34,532 --> 00:35:38,890 Gadewch i ni yn awr i bontio mewn gwirionedd yn datrys problem. 777 00:35:38,890 --> 00:35:42,440 Fel o'r neilltu, os bydd hyn yn lleddfu yn ychydig o ddryswch neu densiwn, 778 00:35:42,440 --> 00:35:43,430 mae hyn yn awr yn ddoniol. 779 00:35:43,430 --> 00:35:46,400 780 00:35:46,400 --> 00:35:46,900 Yeah. 781 00:35:46,900 --> 00:35:49,040 Dyna 'n bert da. 782 00:35:49,040 --> 00:35:50,890 Oherwydd bod awgrymiadau yn cael eu cyfeiriadau a chyfeiriadau 783 00:35:50,890 --> 00:35:53,098 yn gyffredinol gan gonfensiwn ysgrifennu gyda hecsadegol. 784 00:35:53,098 --> 00:35:54,650 Ha, ha, mae hyn yn ddoniol yn awr. 785 00:35:54,650 --> 00:35:58,390 Anyhow, felly gadewch i ni nawr mewn gwirionedd yn datrys problem. 786 00:35:58,390 --> 00:36:00,840 Mae hyn wedi bod super, super lefel isel hyd yn hyn, 787 00:36:00,840 --> 00:36:03,950 a gallwn ei wneud mewn gwirionedd yn ddefnyddiol pethau gyda manylion lefel isel hyn. 788 00:36:03,950 --> 00:36:06,710 >> Felly, rydym yn cyflwyno ychydig wythnosau yn ôl y syniad o amrywiaeth. 789 00:36:06,710 --> 00:36:09,177 Amrywiaeth oedd yn braf oherwydd mae'n anodd i lanhau ein cod 790 00:36:09,177 --> 00:36:11,760 oherwydd os ydym yn awyddus i ysgrifennu rhaglen gyda myfyrwyr lluosog 791 00:36:11,760 --> 00:36:15,270 neu enwau a thai lluosog a dorms a cholegau a hynny i gyd, 792 00:36:15,270 --> 00:36:19,430 gallem storio popeth mwy lân y tu mewn o amrywiaeth. 793 00:36:19,430 --> 00:36:23,039 Ond yn cynnig un anfantais o amrywiaeth hyd yn hyn. 794 00:36:23,039 --> 00:36:26,080 Hyd yn oed os nad ydych wedi dioddef eich hun mewn rhaglen, dim ond yn reddfol, 795 00:36:26,080 --> 00:36:30,870 beth yn beth drwg am amrywiaeth, efallai? 796 00:36:30,870 --> 00:36:32,337 Yr wyf yn clywed rhai murmurs. 797 00:36:32,337 --> 00:36:34,170 GYNULLEIDFA: Mae'n anodd i newid maint. 798 00:36:34,170 --> 00:36:36,128 DAVID Malan: Mae'n anodd i newid maint. 799 00:36:36,128 --> 00:36:38,660 Ni allwch newid maint o amrywiaeth, mewn gwirionedd, fel y cyfryw 800 00:36:38,660 --> 00:36:43,040 yn C. Gallwch ddyrannu array arall, symud popeth o'r hen un 801 00:36:43,040 --> 00:36:45,380 i mewn i'r newydd, ac yn awr cael rhywfaint o le ychwanegol, 802 00:36:45,380 --> 00:36:47,469 ond nid yw'n debyg o iaith fel Java neu Python 803 00:36:47,469 --> 00:36:49,760 neu unrhyw nifer o eraill ieithoedd y bydd rhai ohonoch 804 00:36:49,760 --> 00:36:52,070 allai fod yn gyfarwydd lle rydych yn Gall jyst cadw ychwanegu pethau 805 00:36:52,070 --> 00:36:53,930 ad nauseam at ddiwedd arae. 806 00:36:53,930 --> 00:36:57,880 Pan fydd gennych amrywiaeth o maint 6, hynny yw ei faint, 807 00:36:57,880 --> 00:37:01,970 ac felly yn debyg iawn i'r syniad yn gynharach cael clustogi o faint penodol, 808 00:37:01,970 --> 00:37:05,940 rhaid i chi ddyfalu allan o borth pa faint yr ydych am iddo fod? 809 00:37:05,940 --> 00:37:07,880 Os byddwch yn dyfalu rhy fawr, rydych yn gwastraffu gofod. 810 00:37:07,880 --> 00:37:10,950 Os byddwch yn dyfalu yn rhy fach, yr ydych Ni all storio data hwnnw, o leiaf 811 00:37:10,950 --> 00:37:12,940 heb llawer mwy o waith. 812 00:37:12,940 --> 00:37:18,180 >> Felly heddiw, diolch i awgrymiadau, ein gallu dechrau pwytho ynghyd ein hun arfer 813 00:37:18,180 --> 00:37:20,989 strwythurau data, ac yn wir, dyma rhywbeth 814 00:37:20,989 --> 00:37:23,030 sy'n edrych ychydig yn fwy cryptig ar yr olwg gyntaf, 815 00:37:23,030 --> 00:37:26,440 ond mae hyn yn yr hyn y byddwn yn ei alw'n cysylltiedig rhestr, ac mae ei enw math o yn crynhoi 816 00:37:26,440 --> 00:37:26,940 iddo. 817 00:37:26,940 --> 00:37:29,550 Mae'n rhestr o rifau, neu mewn yr achos hwn, rhestr o rifau, 818 00:37:29,550 --> 00:37:33,480 ond gallai fod yn rhestr o unrhyw beth, ond mae'n cysylltu â'i gilydd drwy gyfrwng saethau, 819 00:37:33,480 --> 00:37:36,380 a dim ond yn cymryd dyfalu â'r hyn thechneg 820 00:37:36,380 --> 00:37:38,310 ydym yn mynd i fod yn gallu i bwytho at ei gilydd, 821 00:37:38,310 --> 00:37:42,540 fath o fel popcorn ag edau, yn cysylltu rhestri petryalau yma? 822 00:37:42,540 --> 00:37:43,936 Mae ei niferoedd? 823 00:37:43,936 --> 00:37:45,560 Beth yw'r nodwedd ieithyddol sylfaenol? 824 00:37:45,560 --> 00:37:46,350 >> GYNULLEIDFA: A pwyntydd. 825 00:37:46,350 --> 00:37:47,308 >> DAVID Malan: A pwyntydd. 826 00:37:47,308 --> 00:37:51,700 Felly phob un o'r saethau hyn yma yn cynrychioli pwyntydd neu dim ond gyfeiriad. 827 00:37:51,700 --> 00:37:54,590 Felly, mewn geiriau eraill, os ydw i eisiau i storio rhestr o rifau, 828 00:37:54,590 --> 00:37:59,040 Ni all Fi jyst ei storio os ydw i eisiau y gallu i dyfu ac yn crebachu 829 00:37:59,040 --> 00:38:00,990 fy strwythur data mewn amrywiaeth. 830 00:38:00,990 --> 00:38:03,000 Felly mae angen i mi gael ychydig mwy soffistigedig, 831 00:38:03,000 --> 00:38:05,720 ond yn sylwi bod hwn darlun fath o awgrymu 832 00:38:05,720 --> 00:38:08,650 os ydych wedi jyst got edafedd bach cysylltu popeth gyda'i gilydd, 833 00:38:08,650 --> 00:38:13,100 Mae'n debyg nad yw hynny'n anodd i wneud lle mewn rhwng dau petryalau rhai 834 00:38:13,100 --> 00:38:16,750 neu ddau o nodau hynny, fel byddwn yn dechrau eu ffonio, rhoi mewn nod newydd, 835 00:38:16,750 --> 00:38:19,547 ac yna gyda rhywfaint o edau newydd, dim ond ffos y tri nodau at ei gilydd, 836 00:38:19,547 --> 00:38:22,880 yr un cyntaf, yr un diwethaf, ac mae'r un eich bod jyst roi yn y canol. 837 00:38:22,880 --> 00:38:26,000 >> Ac yn wir rhestr cysylltiedig, yn wahanol i amrywiaeth, yn ddeinamig. 838 00:38:26,000 --> 00:38:27,840 Gall dyfu ac y gall crebachu ac nid ydych yn ei wneud 839 00:38:27,840 --> 00:38:32,434 rhaid i ni wybod neu ofal ymlaen llaw sut llawer o ddata rydych yn mynd i gael ei storio, 840 00:38:32,434 --> 00:38:35,600 ond mae'n troi allan mae'n rhaid i ni fod ychydig yn ofalus ynghylch sut i weithredu hyn. 841 00:38:35,600 --> 00:38:39,070 Felly, yn gyntaf gadewch i ni ystyried sut yr ydym yn gweithredu un o'r petryalau bychain hyn. 842 00:38:39,070 --> 00:38:40,690 Mae'n hawdd i weithredu int. 843 00:38:40,690 --> 00:38:44,000 Rydych yn unig yn dweud int n ac yna byddwch yn cael 4 bytes gyfer int, 844 00:38:44,000 --> 00:38:49,089 ond sut ydw i'n cael int, ei alw n, ac yna pwyntydd, gadewch i ni ei alw yn nesaf. 845 00:38:49,089 --> 00:38:50,880 Gallem yn galw'r rhain pethau unrhyw beth yr ydym am 846 00:38:50,880 --> 00:38:53,590 ond mae angen strwythur data arferiad i mi. 847 00:38:53,590 --> 00:38:54,257 Yeah? 848 00:38:54,257 --> 00:38:57,020 >> GYNULLEIDFA: ampersand [Anghlywadwy]. 849 00:38:57,020 --> 00:39:00,940 >> DAVID Malan: Felly ampersand byddwn yn eu defnyddio i yn cael y cyfeiriad yn nôd o bosibl. 850 00:39:00,940 --> 00:39:02,740 Ond mae angen un arall nodwedd o C er mwyn 851 00:39:02,740 --> 00:39:06,700 i roi'r gallu i greu mi petryal arferiad hwn, arfer hon 852 00:39:06,700 --> 00:39:08,919 newidyn os mynnwch, yn y cof. 853 00:39:08,919 --> 00:39:09,710 GYNULLEIDFA: A struct. 854 00:39:09,710 --> 00:39:10,626 DAVID Malan: A struct. 855 00:39:10,626 --> 00:39:14,310 Dwyn i gof o wythnos diwethaf, cyflwynwyd struct, mae hyn yn gair allweddol cymharol syml 856 00:39:14,310 --> 00:39:16,254 sy'n gadael i ni i wneud pethau fel hyn. 857 00:39:16,254 --> 00:39:18,420 Nid oedd C dod gyda data strwythur a elwir myfyrwyr. 858 00:39:18,420 --> 00:39:22,190 Mae'n dod â int a arnofio a torgoch a o'r fath, ond nid yw'n dod â myfyrwyr, 859 00:39:22,190 --> 00:39:26,750 ond gallwn greu math data myfyrwyr, strwythur myfyrwyr, gyda chystrawen hwn 860 00:39:26,750 --> 00:39:27,250 yma. 861 00:39:27,250 --> 00:39:28,350 A byddwch yn gweld hyn dro ar ôl tro. 862 00:39:28,350 --> 00:39:30,426 Felly peidiwch â phoeni am cofio y geiriau allweddol, 863 00:39:30,426 --> 00:39:33,300 ond yr allweddair sy'n bwysig yw dim ond y ffaith ein bod yn dweud struct 864 00:39:33,300 --> 00:39:37,590 ac yna byddem ni'n ei alw i fyfyrwyr ac y tu mewn y myfyriwr yn enw a thŷ 865 00:39:37,590 --> 00:39:39,390 neu dorm neu debyg. 866 00:39:39,390 --> 00:39:41,980 >> Ac felly yn awr heddiw, gadewch i gynnig hyn. 867 00:39:41,980 --> 00:39:45,240 Rydw i wedi ychwanegu ychydig o eiriau, ond os ydw i eisiau i weithredu'r petryal hwn sy'n 868 00:39:45,240 --> 00:39:48,440 got y ddau yn int a pwyntydd, eich bod yn gwybod beth, rwy'n 869 00:39:48,440 --> 00:39:51,540 mynd i ddatgan struct o'r enw nod. 870 00:39:51,540 --> 00:39:55,630 Rwyf hefyd, tu mewn iddo, mynd i ddweud bod nod, petryal hwn, mae gan int 871 00:39:55,630 --> 00:39:59,730 a byddwn yn galw ei n ac mae ganddo pwyntydd nesaf. 872 00:39:59,730 --> 00:40:02,540 Ac mae hyn yn ychydig yn amleiriog, ond os ydych yn meddwl am y peth, 873 00:40:02,540 --> 00:40:07,300 y saethau a oedd yn y llun funud yn ôl o pa fath data? 874 00:40:07,300 --> 00:40:12,330 Lle pob un o'r saethau rhai yn pwyntio i ba fath o strwythur data? 875 00:40:12,330 --> 00:40:14,332 Dyw hi ddim yn pwyntio yn unig i int fel y cyfryw. 876 00:40:14,332 --> 00:40:16,165 Mae'n pwyntio at y beth hirsgwar cyfan 877 00:40:16,165 --> 00:40:18,720 a bod y peth petryal, Dywedodd yr ydym, a elwir yn nod. 878 00:40:18,720 --> 00:40:21,720 Ac felly rydym yn fath o rhaid i ni recursively diffinio'r hyn y fath 879 00:40:21,720 --> 00:40:26,270 bod nod, byddwn yn dweud, Bydd cynnwys int a elwir n 880 00:40:26,270 --> 00:40:31,070 ac pwyntydd elwir nesaf ac y math o strwythur data y mae 881 00:40:31,070 --> 00:40:35,770 bod pwyntiau pwyntydd yn ôl pob golwg mynd i fod yn nod struct. 882 00:40:35,770 --> 00:40:41,550 >> Felly mae hyn yn annoyingly verbose a dim ond i fod yn bedantig, 883 00:40:41,550 --> 00:40:44,100 y rheswm pam na allwn dim ond dweud hyn, a oedd yn dweud y gwir 884 00:40:44,100 --> 00:40:46,860 edrych yn llawer mwy darllenadwy, oherwydd dwyn i gof sy'n C darllen 885 00:40:46,860 --> 00:40:48,710 pethau top i'r gwaelod, chwith i'r dde. 886 00:40:48,710 --> 00:40:54,120 Nid yw'n hyd nes y byddwn yn cael y hanner colon bod y nod gair allweddol mewn gwirionedd yn bodoli. 887 00:40:54,120 --> 00:40:57,980 Felly os ydym am gael y math hwn o cyfeirio cylchol tu mewn i'r data 888 00:40:57,980 --> 00:41:02,120 strwythur, mae'n rhaid i ni wneud hyn, lle dywedwn nod struct ar y brig, a oedd yn 889 00:41:02,120 --> 00:41:06,770 rhoi ffordd hwy o ddisgrifio hyn yn ein beth, yna y tu mewn dywedwn nod struct, 890 00:41:06,770 --> 00:41:09,560 ac yna ar y llinell olaf un dywedwn, iawn, C, gyda llaw, 891 00:41:09,560 --> 00:41:12,060 dim ond galw hyn damn cyfan beth mae nôd a rhoi'r gorau i 892 00:41:12,060 --> 00:41:14,360 gan ddefnyddio'r struct gair allweddol yn gyfan gwbl. 893 00:41:14,360 --> 00:41:18,030 Felly mae hyn yn unig fath o cystrawennol tric yn y pen draw yn gadael i ni i greu 894 00:41:18,030 --> 00:41:21,370 rhywbeth sy'n edrych yn union fel hyn. 895 00:41:21,370 --> 00:41:25,010 >> Felly, os ydym yn tybio yn awr y gallwn gweithredu'r peth hyn yn C, 896 00:41:25,010 --> 00:41:28,040 sut yr ydym yn mewn gwirionedd dechrau croesi hyn? 897 00:41:28,040 --> 00:41:32,360 Wel, mewn gwirionedd, i gyd mae'n rhaid i ni ei wneud yw ailadrodd o'r chwith i'r dde, a dim ond 898 00:41:32,360 --> 00:41:35,960 math o mewnosod nodau neu ddileu nodau neu chwilio am bethau ble bynnag yr ydym am, 899 00:41:35,960 --> 00:41:39,560 ond i wneud hyn, gadewch i ni fynd yn ei flaen ac yn gwneud pethau ychydig yn fwy real gan fod hyn 900 00:41:39,560 --> 00:41:42,560 wedi bod lefel isel super hyd yn hyn. 901 00:41:42,560 --> 00:41:45,700 A fyddai unrhyw un yn llythrennol hoffi bod yn gyntaf? 902 00:41:45,700 --> 00:41:46,200 IAWN. 903 00:41:46,200 --> 00:41:47,092 Dewch ar i fyny. 904 00:41:47,092 --> 00:41:47,800 Beth yw dy enw? 905 00:41:47,800 --> 00:41:48,499 >> DAVID: David. 906 00:41:48,499 --> 00:41:49,290 DAVID Malan: David. 907 00:41:49,290 --> 00:41:49,998 Neis i gwrdd â chi. 908 00:41:49,998 --> 00:41:50,960 Fi hefyd. 909 00:41:50,960 --> 00:41:52,450 Iawn. 910 00:41:52,450 --> 00:41:53,990 Ac mae angen nifer 9. 911 00:41:53,990 --> 00:41:55,240 Nid cystal â cyntaf, efallai. 912 00:41:55,240 --> 00:41:56,430 OK, rhif 9. 913 00:41:56,430 --> 00:41:59,667 Mae rhif 17, os gwelwch yn dda. 914 00:41:59,667 --> 00:42:01,000 Gadewch i mi fynd yn ôl ychydig ymhellach. 915 00:42:01,000 --> 00:42:03,980 Rhif 22, os gwelwch yn dda, a beth am farther yn ôl 916 00:42:03,980 --> 00:42:06,344 os gallaf weld unrhyw dwylo gyda'r holl golau neu ddim. 917 00:42:06,344 --> 00:42:08,010 Rhywun sy'n cael ei gwirfoddoli iawn yno. 918 00:42:08,010 --> 00:42:08,968 Ydych chi eisiau dod i fyny? 919 00:42:08,968 --> 00:42:10,450 Mae eich elin yn rymus mynd i fyny. 920 00:42:10,450 --> 00:42:12,340 OK, 17. 921 00:42:12,340 --> 00:42:13,690 22. 922 00:42:13,690 --> 00:42:15,120 26 yn dod i lawr. 923 00:42:15,120 --> 00:42:18,450 A fyddai unrhyw un arall yn hoffi forcefully-- Dewch i fyny. 924 00:42:18,450 --> 00:42:21,030 Mae gwirfoddolwr gwirioneddol. 925 00:42:21,030 --> 00:42:23,330 >> Felly yn gyflym iawn, os chi guys Gallai drefnu 926 00:42:23,330 --> 00:42:26,550 eich hunain yn union fel y nodau ar y sgrîn. 927 00:42:26,550 --> 00:42:27,510 Diolch. 928 00:42:27,510 --> 00:42:29,234 A byddwch yn 26. 929 00:42:29,234 --> 00:42:30,650 Mae pob cyflwyniadau iawn ac yn gyflym. 930 00:42:30,650 --> 00:42:32,139 Felly, rwy'n David ac rydych hefyd? 931 00:42:32,139 --> 00:42:32,680 DAVID: David. 932 00:42:32,680 --> 00:42:33,721 DAVID Malan: A ydych chi? 933 00:42:33,721 --> 00:42:34,229 JAKE: Jake. 934 00:42:34,229 --> 00:42:34,729 SUE: Sue. 935 00:42:34,729 --> 00:42:35,229 ALEX: Alex. 936 00:42:35,229 --> 00:42:36,475 RAPHAEL: Raphael. 937 00:42:36,475 --> 00:42:37,100 TAYLOR: Taylor. 938 00:42:37,100 --> 00:42:37,466 DAVID Malan: Taylor. 939 00:42:37,466 --> 00:42:37,590 Ardderchog. 940 00:42:37,590 --> 00:42:39,810 Felly mae'r rhain yn ein gwirfoddolwyr ar gyfer heddiw ac yn mynd yn ei flaen 941 00:42:39,810 --> 00:42:43,090 a symud ychydig y ffordd honno, a dim ond mynd yn ei flaen a chadw 942 00:42:43,090 --> 00:42:47,024 dal eich rhifau ag y byddwch yn neu'ch arwydd cyntaf a defnyddio eich llaw chwith, 943 00:42:47,024 --> 00:42:48,940 mynd yn ei flaen a dim ond gweithredu saethau hyn, dim ond 944 00:42:48,940 --> 00:42:51,360 fel bod eich llaw chwith yn llythrennol pwyntio at ba bynnag dylech dynnu 945 00:42:51,360 --> 00:42:54,610 ar, ac yn rhoi rhywfaint o le er mwyn i chi eich hun gallwn weld eich breichiau yn weledol mewn gwirionedd 946 00:42:54,610 --> 00:42:58,120 pwyntio, a gallwch dynnu sylw fath o yn y ddaear yn iawn. 947 00:42:58,120 --> 00:43:03,040 >> Felly dyma gennym restr cysylltiedig o un, dau, tri, pedwar, pump nodau i ddechrau, 948 00:43:03,040 --> 00:43:05,860 ac yn sylwi ein bod wedi hyn arbennig pwyntydd ar y dechrau pwy yw 949 00:43:05,860 --> 00:43:09,770 allweddol oherwydd rhaid inni gadw golwg y rhestr hyd cyfan rhywsut. 950 00:43:09,770 --> 00:43:13,590 Mae'r rhain yn guys, hyd yn oed er eu bod yn gadael i'r dde, cefn wrth gefn yn y cof, 951 00:43:13,590 --> 00:43:15,950 gallant fod yn unrhyw le mewn gwirionedd er cof y cyfrifiadur. 952 00:43:15,950 --> 00:43:18,240 Felly gallai guys rhain fod yn sefyll yn unrhyw le ar y llwyfan 953 00:43:18,240 --> 00:43:20,960 ac mae hynny'n iawn, ar yr amod eu bod yn mewn gwirionedd yn pwyntio at ei gilydd, 954 00:43:20,960 --> 00:43:22,770 ond i gadw pethau lân ac yn syml, yr ydym chi helpu 955 00:43:22,770 --> 00:43:25,728 dim ond eu tynnu o'r chwith i'r dde fel hwn, ond gall fod bylchau enfawr 956 00:43:25,728 --> 00:43:26,790 rhwng nodau hynny. 957 00:43:26,790 --> 00:43:30,710 >> Yn awr, os wyf am i fewnosod rhai mewn gwirionedd gwerth newydd, gadewch i ni fynd yn ei flaen ac yn gwneud hyn. 958 00:43:30,710 --> 00:43:33,720 Mae gennym gyfle yn awr i ddewis nôd arall. 959 00:43:33,720 --> 00:43:39,820 Dweud gadewch i ni ddechrau i ffwrdd gyda mallocing 55. 960 00:43:39,820 --> 00:43:41,320 A fyddai rhywun yn meddwl bod malloc? 961 00:43:41,320 --> 00:43:42,280 OK, yn dod ar i fyny. 962 00:43:42,280 --> 00:43:42,992 Beth yw dy enw? 963 00:43:42,992 --> 00:43:43,700 ENFYS: Rainbow. 964 00:43:43,700 --> 00:43:44,050 DAVID Malan: Rainbow? 965 00:43:44,050 --> 00:43:44,810 Iawn. 966 00:43:44,810 --> 00:43:46,600 Malloc Rainbow. 967 00:43:46,600 --> 00:43:47,450 Dewch ar i fyny. 968 00:43:47,450 --> 00:43:51,610 Felly, yn awr mae'n rhaid i ni ofyn i ni'n hunain algorithmically lle gallwn roi 55. 969 00:43:51,610 --> 00:43:53,610 Felly, mae pob un ohonom yn gwybod, yn amlwg, lle mae hi yn ôl pob tebyg 970 00:43:53,610 --> 00:43:55,401 yn perthyn os ydym yn ceisio i gadw hyn didoli 971 00:43:55,401 --> 00:43:58,299 ac os gallech chi guys gymryd un camu yn ôl, felly nid ydym yn disgyn i ffwrdd 972 00:43:58,299 --> 00:43:59,590 y llwyfan, byddai hynny'n wych. 973 00:43:59,590 --> 00:44:01,420 Felly mewn gwirionedd, Rainbow, dechrau dros yma gyda mi, 974 00:44:01,420 --> 00:44:04,200 oherwydd ein bod fel y cyfrifiadur yn gallu nawr ond yn gweld un newidyn ar y tro. 975 00:44:04,200 --> 00:44:05,190 Felly, os yw hyn yn y nod cyntaf. 976 00:44:05,190 --> 00:44:07,160 Sylwch nad oedd 'na nod, ei fod dim ond yn pwyntydd, 977 00:44:07,160 --> 00:44:10,270 a dyna pam ei fod yn tynnu i fod yn dim ond yr un maint â pwyntydd, nid 978 00:44:10,270 --> 00:44:11,780 un o'r petryalau llawn hynny. 979 00:44:11,780 --> 00:44:16,650 Felly rydym yn mynd i wirio ym mhob iteriad yn 55 yn llai na 9? 980 00:44:16,650 --> 00:44:17,150 Na 981 00:44:17,150 --> 00:44:19,060 A yw 55 yn llai na 17? 982 00:44:19,060 --> 00:44:19,720 Na 983 00:44:19,720 --> 00:44:20,800 Llai na 22? 984 00:44:20,800 --> 00:44:22,020 Llai na 26? 985 00:44:22,020 --> 00:44:23,390 Llai na 34? 986 00:44:23,390 --> 00:44:25,890 Ac felly yn awr, yn amlwg Enfys yn perthyn ar y diwedd. 987 00:44:25,890 --> 00:44:27,270 Felly, i fod yn glir, a pha oedd eich enw, Taylor? 988 00:44:27,270 --> 00:44:27,895 >> TAYLOR: Taylor. 989 00:44:27,895 --> 00:44:32,510 DAVID Malan: Felly ymysg Taylor llaw chwith a dwylo Rainbow yma, 990 00:44:32,510 --> 00:44:38,324 Mae angen y mae ei law i bwyntio ar yr hyn yn orchymyn i fewnosod i mewn i 55 y rhestr hon? 991 00:44:38,324 --> 00:44:39,240 Yr hyn sydd angen i ni ei wneud? 992 00:44:39,240 --> 00:44:39,700 Yeah? 993 00:44:39,700 --> 00:44:41,140 >> GYNULLEIDFA: llaw Taylor Mae angen i bwynt chwith. 994 00:44:41,140 --> 00:44:41,680 >> DAVID Malan: Yn union. 995 00:44:41,680 --> 00:44:43,800 Felly mewnosod nod i mewn i ddiwedd y rhestr 996 00:44:43,800 --> 00:44:47,140 yn eithaf syml gan fod Taylor yn unig Mae i bwynt, yn hytrach nag ar y maes 997 00:44:47,140 --> 00:44:49,640 neu byddwn yn ei alw'n null, null yn fath o absenoldeb 998 00:44:49,640 --> 00:44:51,640 o pwyntydd neu arbennig sero pwyntydd, rydych yn 999 00:44:51,640 --> 00:44:53,740 mynd i bwyntio gyda chwith llaw yn Rainbow ac yna Rainbow, 1000 00:44:53,740 --> 00:44:55,910 lle y dylai y chwith yn ôl pob tebyg llaw bwyntio? 1001 00:44:55,910 --> 00:44:56,570 Down. 1002 00:44:56,570 --> 00:45:00,140 Dyw hi ddim yn dda os ei llaw yn didoli o bwyntio oddi yma neu fath o unrhyw 1003 00:45:00,140 --> 00:45:00,640 pa ffordd. 1004 00:45:00,640 --> 00:45:02,407 Fyddai'n cael ei ystyried mae gwerth garbage, 1005 00:45:02,407 --> 00:45:04,240 ond os bydd hi'n cyfeirio at rhywfaint o werth hysbys, rydym chi helpu 1006 00:45:04,240 --> 00:45:07,360 alw yn sero neu null, mae hynny'n iawn gan fod gennym dymor yn hyn 1007 00:45:07,360 --> 00:45:09,390 ac rydym yn gwybod y rhestr yn awr yn gyflawn. 1008 00:45:09,390 --> 00:45:11,550 >> Felly beth arall achos cymharol syml? 1009 00:45:11,550 --> 00:45:13,125 A allem malloc 5? 1010 00:45:13,125 --> 00:45:14,010 Dewch ar i fyny. 1011 00:45:14,010 --> 00:45:14,782 Beth yw dy enw? 1012 00:45:14,782 --> 00:45:15,490 Tiffany: Tiffany. 1013 00:45:15,490 --> 00:45:16,000 DAVID Malan: Mae'n ddrwg gen i? 1014 00:45:16,000 --> 00:45:16,470 Tiffany: Tiffany. 1015 00:45:16,470 --> 00:45:16,880 DAVID Malan: Tiffany. 1016 00:45:16,880 --> 00:45:17,110 Iawn. 1017 00:45:17,110 --> 00:45:19,071 Tiffany wedi cael ei malloced â'r gwerth 5. 1018 00:45:19,071 --> 00:45:19,570 Dewch ar i fyny. 1019 00:45:19,570 --> 00:45:23,820 Mae hyn yn un yn gymharol hawdd hefyd, ond gadewch i ni ystyried trefn y gweithrediadau yn awr. 1020 00:45:23,820 --> 00:45:25,820 Yr oedd yn eithaf hawdd gyda Taylor ar y diwedd. 1021 00:45:25,820 --> 00:45:30,302 Rhif 5, wrth gwrs, yn llai na 9, ac felly rydym wedi David, yr ydym wedi Tiffany, 1022 00:45:30,302 --> 00:45:31,260 a beth oedd eich enw? 1023 00:45:31,260 --> 00:45:31,680 >> JAKE: Jake. 1024 00:45:31,680 --> 00:45:32,470 >> DAVID Malan: Jake. 1025 00:45:32,470 --> 00:45:34,300 Tiffany, Jake, a David. 1026 00:45:34,300 --> 00:45:36,580 Dylid ei law yn cael ei ddiweddaru yn gyntaf? 1027 00:45:36,580 --> 00:45:39,260 1028 00:45:39,260 --> 00:45:40,590 Beth ydych chi eisiau ei wneud yma? 1029 00:45:40,590 --> 00:45:45,244 Mae cwpl o ffyrdd posibl, ond mae hefyd yn un neu ffyrdd mwy anghywir. 1030 00:45:45,244 --> 00:45:46,620 >> GYNULLEIDFA: Dechrau gyda leftmost. 1031 00:45:46,620 --> 00:45:47,800 >> DAVID Malan: Dechreuwch gyda'r leftmost. 1032 00:45:47,800 --> 00:45:49,008 Pwy yw y leftmost yma felly? 1033 00:45:49,008 --> 00:45:49,700 GYNULLEIDFA: Yn gyntaf. 1034 00:45:49,700 --> 00:45:50,366 >> DAVID Malan: Iawn. 1035 00:45:50,366 --> 00:45:53,781 Felly, yn dechrau gyda cyntaf a ble ydych chi'n am ddiweddaru dwylo Sant i fod? 1036 00:45:53,781 --> 00:45:54,780 GYNULLEIDFA: Tua 5. 1037 00:45:54,780 --> 00:45:55,446 DAVID Malan: Iawn. 1038 00:45:55,446 --> 00:45:59,026 Felly Dafydd, pwynt ar bum neu Tiffany yma, ac yn awr? 1039 00:45:59,026 --> 00:46:01,072 >> GYNULLEIDFA: Tiffany yn tynnu sylw at y 9? 1040 00:46:01,072 --> 00:46:04,030 DAVID Malan: Perffaith, ac eithrio Binky yn pen yn unig fath o syrthio oddi ar, dde? 1041 00:46:04,030 --> 00:46:06,820 Oherwydd yr hyn sydd o'i le ar y darlun hwn yn llythrennol? 1042 00:46:06,820 --> 00:46:08,070 GYNULLEIDFA: Nid oes dim yn pwyntio. 1043 00:46:08,070 --> 00:46:09,945 DAVID Malan: Nid oes dim yn pwyntio at Jake nawr. 1044 00:46:09,945 --> 00:46:13,360 Rydym wedi amddifad llythrennol 9 a 17, ac rydym wedi llythrennol 1045 00:46:13,360 --> 00:46:18,450 gollwng i gyd o gof hwn, oherwydd drwy diweddaru llaw Dafydd yn gyntaf, dyna 1046 00:46:18,450 --> 00:46:21,660 dirwy i'r graddau y mae'n gywir pwyntio at Tiffany yn awr, 1047 00:46:21,660 --> 00:46:25,410 ond os nad oes neb oedd gan y yn ddigon craff i bwyntio at Jake, 1048 00:46:25,410 --> 00:46:27,490 hynny rydym wedi colli'r gyfanrwydd y rhestr honno. 1049 00:46:27,490 --> 00:46:28,200 Felly gadewch i ni ddadwneud. 1050 00:46:28,200 --> 00:46:30,950 Felly yr oedd yn beth da i baglu drosodd ond gadewch i ni gywiro yn awr. 1051 00:46:30,950 --> 00:46:33,624 Beth ddylem ei wneud yn gyntaf yn lle hynny? 1052 00:46:33,624 --> 00:46:34,124 Yeah? 1053 00:46:34,124 --> 00:46:35,791 >> GYNULLEIDFA: Dylai Tiffany pwyntio at y 9? 1054 00:46:35,791 --> 00:46:37,582 DAVID Malan: Nid wyf yn gallu cael y yn agos atoch chi. 1055 00:46:37,582 --> 00:46:38,720 Pwy ddylai pwyntio at y 9? 1056 00:46:38,720 --> 00:46:39,220 >> GYNULLEIDFA: Tiffany. 1057 00:46:39,220 --> 00:46:39,390 >> DAVID Malan: pob hawl. 1058 00:46:39,390 --> 00:46:41,200 Felly dylai Tiffany pwynt cyntaf yn y 9. 1059 00:46:41,200 --> 00:46:43,550 Felly dylai Tiffany cymryd ar werth union yr un fath 1060 00:46:43,550 --> 00:46:45,820 i David, sy'n ymddangos yn ddi-waith am eiliad, 1061 00:46:45,820 --> 00:46:48,820 ond mae hynny'n iawn oherwydd erbyn hyn, yn ail cam, gallwn ddiweddaru llaw Dewi 1062 00:46:48,820 --> 00:46:52,680 i bwyntio at Tiffany, ac yna os rydym yn unig fath o glanhau pethau i fyny 1063 00:46:52,680 --> 00:46:55,740 fel er bod hyn yn fath o gwanwyn-fel, Erbyn hyn mae hynny'n gosod yn gywir. 1064 00:46:55,740 --> 00:46:56,700 Felly ardderchog. 1065 00:46:56,700 --> 00:46:57,970 Felly nawr rydym yn bron yno. 1066 00:46:57,970 --> 00:47:01,075 Gadewch i fewnosod un olaf Gwerth fel y gwerth 20. 1067 00:47:01,075 --> 00:47:03,010 Pe gallem malloc un gwirfoddolwr terfynol? 1068 00:47:03,010 --> 00:47:04,140 Dewch ar i fyny. 1069 00:47:04,140 --> 00:47:06,224 Felly, mae hyn yn un ychydig yn fwy anodd. 1070 00:47:06,224 --> 00:47:08,390 Ond mewn gwirionedd, mae'r cod rydym yn ysgrifennu, er ar lafar, 1071 00:47:08,390 --> 00:47:10,610 yn unig fel cael criw o os yw amodau yn awr, dde? 1072 00:47:10,610 --> 00:47:12,318 Cawsom cyflwr gwirio os yw'n perthyn 1073 00:47:12,318 --> 00:47:13,840 ar y diwedd, efallai y dechrau. 1074 00:47:13,840 --> 00:47:15,940 Mae angen rhyw fath o ddolen i dod o hyd y fan a'r lle yn y canol. 1075 00:47:15,940 --> 00:47:17,400 Felly, gadewch i ni wneud hynny gyda beth yw eich enw? 1076 00:47:17,400 --> 00:47:17,700 >> ERIC: Eric. 1077 00:47:17,700 --> 00:47:18,340 >> DAVID Malan: Eric? 1078 00:47:18,340 --> 00:47:18,660 Eric. 1079 00:47:18,660 --> 00:47:19,368 Neis i gwrdd â chi. 1080 00:47:19,368 --> 00:47:20,490 Felly mae gennym 20. 1081 00:47:20,490 --> 00:47:21,220 Llai na phump? 1082 00:47:21,220 --> 00:47:21,530 Na 1083 00:47:21,530 --> 00:47:22,160 Llai na naw? 1084 00:47:22,160 --> 00:47:22,410 Na 1085 00:47:22,410 --> 00:47:23,050 Llai na 17? 1086 00:47:23,050 --> 00:47:23,550 Na 1087 00:47:23,550 --> 00:47:23,740 IAWN. 1088 00:47:23,740 --> 00:47:25,701 Mae'n perthyn yma ac unwaith eto eich enwau yn cael eu? 1089 00:47:25,701 --> 00:47:26,200 SUE: Sue. 1090 00:47:26,200 --> 00:47:26,880 DAVID Malan: Sue. 1091 00:47:26,880 --> 00:47:27,379 ALEX: Alex. 1092 00:47:27,379 --> 00:47:28,790 DAVID Malan: Sue, Alex, a? 1093 00:47:28,790 --> 00:47:29,290 ERIC: Eric. 1094 00:47:29,290 --> 00:47:30,120 DAVID Malan: Eric. 1095 00:47:30,120 --> 00:47:32,140 Mae angen i gael eu diweddaru yn gyntaf eu dwylo? 1096 00:47:32,140 --> 00:47:32,930 >> GYNULLEIDFA: Eric. 1097 00:47:32,930 --> 00:47:33,429 IAWN. 1098 00:47:33,429 --> 00:47:35,200 Felly dylai Eric yn pwyntio at ble? 1099 00:47:35,200 --> 00:47:35,930 Ar 22. 1100 00:47:35,930 --> 00:47:36,430 Da. 1101 00:47:36,430 --> 00:47:38,180 Ac yn awr beth nesaf? 1102 00:47:38,180 --> 00:47:40,800 Yna gall Sue pwyntio at Eric ac yn awr, os ydych yn guys yn unig 1103 00:47:40,800 --> 00:47:44,077 gwneud rhywfaint o le, sy'n iawn yn weledol, yn awr rydym wedi gwneud gosod. 1104 00:47:44,077 --> 00:47:47,160 Felly, gadewch i ni yn awr yn ystyried cwestiwn ond diolch yn fawr am ein gwirfoddolwyr. 1105 00:47:47,160 --> 00:47:48,090 Gwneud yn dda iawn. 1106 00:47:48,090 --> 00:47:50,831 Gallwch gadw y rhai, os mynnwch. 1107 00:47:50,831 --> 00:47:54,140 Ac mae gennym anrheg hyfryd rhaniad os byddech yn hoffi pob un gymryd pêl straen. 1108 00:47:54,140 --> 00:47:56,030 Gadewch imi basio hyn i lawr. 1109 00:47:56,030 --> 00:47:58,430 Felly beth yw bwyd parod o hyn? 1110 00:47:58,430 --> 00:48:02,430 Mae hyn yn ymddangos i fod yn anhygoel i'r graddau y gennym yn awr 1111 00:48:02,430 --> 00:48:06,360 cyflwyno dewis amgen i arae nad yw wedi ei gyfyngu felly 1112 00:48:06,360 --> 00:48:07,780 i amrywiaeth o ryw faint sefydlog. 1113 00:48:07,780 --> 00:48:09,380 Maent yn gallu tyfu yn ddeinamig. 1114 00:48:09,380 --> 00:48:13,220 >> Ond mae llawer fel yr ydym wedi gweld yn ystod yr wythnosau diwethaf, rydym byth yn cael unrhyw beth am ddim, 1115 00:48:13,220 --> 00:48:15,740 fel yn sicr mae 'cyfaddawd yma. 1116 00:48:15,740 --> 00:48:18,890 Felly, gyda upside o cysylltiedig rhestr, yn egni hwn? 1117 00:48:18,890 --> 00:48:21,590 Mae'r gallu hwn i dyfu a dweud y gwir, gallem fod wedi gwneud dileu 1118 00:48:21,590 --> 00:48:23,570 a gallem crebachu yn ôl yr angen. 1119 00:48:23,570 --> 00:48:24,710 Pa bris ydym ni'n talu? 1120 00:48:24,710 --> 00:48:28,510 1121 00:48:28,510 --> 00:48:30,340 Dwywaith cymaint o le, yn gyntaf oll. 1122 00:48:30,340 --> 00:48:34,010 Os ydych yn edrych ar y darlun, mwyach ydw i storio rhestr o gyfanrifau. 1123 00:48:34,010 --> 00:48:36,740 Im 'yn storio rhestr o cyfanrifau yn ogystal awgrymiadau. 1124 00:48:36,740 --> 00:48:38,240 Felly rwy'n dyblu faint o le. 1125 00:48:38,240 --> 00:48:40,740 Nawr, nid efallai yw hynny'n fath yn beth mawr 4 bytes, 8 bytes, 1126 00:48:40,740 --> 00:48:43,160 ond gallai fod yn sicr ychwanegu ar gyfer setiau data mawr. 1127 00:48:43,160 --> 00:48:45,570 Beth yw anfantais arall? 1128 00:48:45,570 --> 00:48:46,070 Yeah? 1129 00:48:46,070 --> 00:48:48,010 >> GYNULLEIDFA: Mae'n rhaid i ni croesi nhw un-wrth-un. 1130 00:48:48,010 --> 00:48:48,760 DAVID Malan: Yeah. 1131 00:48:48,760 --> 00:48:50,260 Mae'n rhaid i ni dramwy iddynt un-wrth-un. 1132 00:48:50,260 --> 00:48:53,860 Rydych yn gwybod beth, rydym yn rhoi'r gorau super hon nodwedd cyfleus o braced sgwâr 1133 00:48:53,860 --> 00:48:57,240 nodiant, yn fwy priodol a elwir yn hapgyrch, 1134 00:48:57,240 --> 00:48:59,280 lle y gallwn jyst neidio i elfen unigol 1135 00:48:59,280 --> 00:49:01,470 ond erbyn hyn os wyf yn dal i gael fy gwirfoddolwyr yma, 1136 00:49:01,470 --> 00:49:04,660 os oeddwn i eisiau dod o hyd i'r rhif 22, nid wyf yn gallu jyst 1137 00:49:04,660 --> 00:49:06,620 neidio i'r braced rhywbeth rhywbeth. 1138 00:49:06,620 --> 00:49:10,530 Rhaid imi edrych dros y rhestr, llawer fel ein enghreifftiau chwilio llinol, 1139 00:49:10,530 --> 00:49:12,260 i ddod o hyd i'r rhif 22. 1140 00:49:12,260 --> 00:49:14,340 Felly, rydym yn ymddangos i fod wedi talu pris yno. 1141 00:49:14,340 --> 00:49:16,430 Ond allwn er hynny datrys problemau eraill. 1142 00:49:16,430 --> 00:49:18,587 >> Yn wir, gadewch i mi gyflwyno dim ond cwpl o delweddau. 1143 00:49:18,587 --> 00:49:20,920 Felly, os ydych wedi bod i lawr i Neuadd Fwyta Mather yn ddiweddar, 1144 00:49:20,920 --> 00:49:23,320 byddwch yn cofio bod eu pentyrrau o hambyrddau fel hyn, 1145 00:49:23,320 --> 00:49:26,300 rydym yn benthyg y rhain o Annenberg cyn y dosbarth. 1146 00:49:26,300 --> 00:49:28,930 Felly pentwr hwn o hambyrddau, fodd bynnag, yn cynrychioli mewn gwirionedd 1147 00:49:28,930 --> 00:49:30,860 o strwythur data gwyddoniaeth gyfrifiadurol. 1148 00:49:30,860 --> 00:49:32,910 Mae strwythur data mewn gwyddoniaeth gyfrifiadurol 1149 00:49:32,910 --> 00:49:38,010 a elwir yn bentwr sy'n iawn 'n glws cynnig ei hun i union hyn gweledol. 1150 00:49:38,010 --> 00:49:41,380 Felly, os nad pob un o'r hambyrddau hyn yn hambwrdd ond fel nifer ac roeddwn i eisiau 1151 00:49:41,380 --> 00:49:45,010 i storio rhifau, yr wyf yn Gallai rhoi un i lawr yma, 1152 00:49:45,010 --> 00:49:48,320 a gallwn i roi un arall i lawr yma, ac yn parhau pentyrru rhifau 1153 00:49:48,320 --> 00:49:53,180 ar ben ei gilydd, a beth sy'n a allai fod yn ddefnyddiol am hyn 1154 00:49:53,180 --> 00:49:55,450 yw bod beth yw'r goblygiadau o hyn strwythur data? 1155 00:49:55,450 --> 00:49:58,045 Pa rif y gallaf tynnu allan cyntaf y rhan fwyaf cyfleus? 1156 00:49:58,045 --> 00:50:00,640 1157 00:50:00,640 --> 00:50:03,030 Y mwyaf diweddar un Rhowch ar yno. 1158 00:50:03,030 --> 00:50:06,430 >> Felly, mae hyn yn beth y byddem yn galw i mewn gwyddoniaeth gyfrifiadurol strwythur data LIFO. 1159 00:50:06,430 --> 00:50:08,070 Olaf i mewn, cyntaf allan. 1160 00:50:08,070 --> 00:50:10,800 A byddwn yn gweld cyn bo hir pam allai fod yn ddefnyddiol ond am y tro, 1161 00:50:10,800 --> 00:50:12,200 dim ond yn ystyried yr eiddo. 1162 00:50:12,200 --> 00:50:15,158 Ac mae'n fath o dwp os ydych yn meddwl am sut y mae'r neuadd fwyta ei wneud. 1163 00:50:15,158 --> 00:50:17,910 Bob tro y byddant hambyrddau glân a rhowch y rhai mwyaf ffres ar ei ben, 1164 00:50:17,910 --> 00:50:22,160 gallech gael glân o'r blaen ond yn y diwedd yn fudr ac yn llychlyd iawn 1165 00:50:22,160 --> 00:50:24,360 hambwrdd ar yr union gwaelod os ydych chi byth mewn gwirionedd 1166 00:50:24,360 --> 00:50:26,820 fynd at wraidd y stac, oherwydd eich bod newydd 1167 00:50:26,820 --> 00:50:29,380 cadw rhoi'r newydd ac y rhai glân ar ei ben. 1168 00:50:29,380 --> 00:50:31,840 Gallai'r un peth yn digwydd mewn archfarchnad hefyd. 1169 00:50:31,840 --> 00:50:35,450 Os oes gennych achos arddangos o laeth a phob CVS amser 1170 00:50:35,450 --> 00:50:37,610 neu bwy bynnag yn cael mwy o laeth, 'ch jyst gwthio y llaeth 1171 00:50:37,610 --> 00:50:39,880 rhaid i gefn yr ydych yn barod ac rydych yn rhoi'r rhai newydd o flaen llaw, 1172 00:50:39,880 --> 00:50:43,088 rydych yn mynd i gael rhywfaint o 'n bert cas llaeth ar ddiwedd y strwythur data, 1173 00:50:43,088 --> 00:50:46,390 am ei fod bob amser ar y gwaelod neu cyfwerth ei mae bob amser yn y cefn. 1174 00:50:46,390 --> 00:50:50,407 >> Ond mae ffordd arall i feddwl am leinin i fyny data ac er enghraifft, mae hyn yn. 1175 00:50:50,407 --> 00:50:53,490 Os ydych chi'n un o'r bobl hynny sy'n hoffi i linell i fyny y tu allan i siopau Afal 1176 00:50:53,490 --> 00:50:55,610 pan fydd cynnyrch newydd allan, mae'n debyg eich bod 1177 00:50:55,610 --> 00:50:58,780 Nid yw defnyddio data pentwr Strwythur oherwydd eich bod 1178 00:50:58,780 --> 00:51:03,070 Byddai dieithrio pawb arall sydd leinin i fyny i brynu rhywfaint o degan newydd. 1179 00:51:03,070 --> 00:51:06,610 Yn hytrach, mae'n debyg eich bod yn defnyddio pa fath o strwythur data 1180 00:51:06,610 --> 00:51:10,050 neu pa fath o system yn y byd go iawn? 1181 00:51:10,050 --> 00:51:13,493 Gobeithio ei fod yn llinell, neu'n fwy yn iawn neu fwy Prydeinig-fel, ciw. 1182 00:51:13,493 --> 00:51:17,700 Ac mae'n troi allan ciw hefyd yn strwythur data mewn gwyddoniaeth gyfrifiadurol, 1183 00:51:17,700 --> 00:51:19,700 ond ciw Mae iawn eiddo gwahanol. 1184 00:51:19,700 --> 00:51:20,820 Nid yw'n LIFO. 1185 00:51:20,820 --> 00:51:21,990 Olaf i mewn, cyntaf allan. 1186 00:51:21,990 --> 00:51:22,800 Duw yn gwahardd. 1187 00:51:22,800 --> 00:51:24,280 Mae'n lle hynny FIFO. 1188 00:51:24,280 --> 00:51:26,110 Cyntaf i mewn, cyntaf allan. 1189 00:51:26,110 --> 00:51:27,970 A dyna beth da er mwyn tegwch ' 1190 00:51:27,970 --> 00:51:30,428 yn sicr pan fyddwch chi'n leinin i fyny super gynnar yn y bore. 1191 00:51:30,428 --> 00:51:33,400 Os byddwch yn cyrraedd yno yn gyntaf, byddwch yn eisiau mynd allan yn gyntaf hefyd. 1192 00:51:33,400 --> 00:51:35,880 >> Ac felly yr holl ddata hyn strwythurau, ciwiau a staciau 1193 00:51:35,880 --> 00:51:39,220 a sypiau o bobl eraill, yn troi allan chi gallu meddwl am hyn fel dim ond arae. 1194 00:51:39,220 --> 00:51:41,820 Mae hwn yn array, efallai maint penodedig 4, ond mae'n Byddai'n well 1195 00:51:41,820 --> 00:51:44,990 fod yn fath o braf pe gallem dim ond pentwr hambyrddau bron anfeidrol dal os ydym 1196 00:51:44,990 --> 00:51:46,780 rhaid bod llawer o hambyrddau neu rifau. 1197 00:51:46,780 --> 00:51:48,840 Felly efallai rydym am defnyddio rhestr cysylltiedig yma, 1198 00:51:48,840 --> 00:51:51,800 ond y fasnach-off yn mynd i fod o bosibl bod angen mwy o gof, 1199 00:51:51,800 --> 00:51:55,930 yn cymryd ychydig mwy o amser, ond rydym yn Nid oes cyfyngu ar uchder y pentwr, 1200 00:51:55,930 --> 00:51:59,550 yn debyg iawn achos arddangos Mather yn Gallai cyfyngu maint y pentwr, 1201 00:51:59,550 --> 00:52:03,117 ac felly mae'r rhain yn benderfyniadau dylunio neu opsiynau sydd ar gael i ni yn y pen draw. 1202 00:52:03,117 --> 00:52:04,950 Felly, gyda data hwn strwythurau, rydym wedi dechrau 1203 00:52:04,950 --> 00:52:09,360 gweld arffiniau uchaf newydd o bosibl ar yr hyn a oedd yn gyflym super blaen 1204 00:52:09,360 --> 00:52:11,260 a lle byddwn yn gadael heddiw i ffwrdd a lle 1205 00:52:11,260 --> 00:52:13,200 byddwn yn gobeithio ei gael i ar ddydd Mercher, yr ydym chi helpu 1206 00:52:13,200 --> 00:52:15,740 dechrau edrych ar y data strwythur sy'n gadael i ni chwilio 1207 00:52:15,740 --> 00:52:18,260 trwy ddata mewn log amser gorffen eto. 1208 00:52:18,260 --> 00:52:21,470 A gwelsom hynny, yn galw i gof, yn wythnos sero ac un gyda chwiliad deuaidd neu rannu 1209 00:52:21,470 --> 00:52:22,180 a gorchfygu. 1210 00:52:22,180 --> 00:52:26,240 Mae'n dod yn ôl ac yn well hyd yn hyn, y greal sanctaidd ar gyfer dydd Mercher hwn 1211 00:52:26,240 --> 00:52:29,510 fydd i feddwl am y strwythur data sy'n rhedeg wirioneddol 1212 00:52:29,510 --> 00:52:32,070 neu ddamcaniaethol mewn amser yn gyson, lle 1213 00:52:32,070 --> 00:52:34,760 does dim ots faint o miliynau neu biliynau o bethau 1214 00:52:34,760 --> 00:52:38,470 gennym yn y strwythur data, bydd yn mynd a ni o amser yn gyson, efallai un cam 1215 00:52:38,470 --> 00:52:41,387 neu ddau gam neu 10 cam, ond mae niferoedd cyson o gamau 1216 00:52:41,387 --> 00:52:42,970 i chwilio drwy y strwythur data. 1217 00:52:42,970 --> 00:52:46,300 Y bydd yn wir yn y greal sanctaidd ond yn fwy ar hynny ar ddydd Mercher. 1218 00:52:46,300 --> 00:52:49,045 Gweler ya bryd hynny. 1219 00:52:49,045 --> 00:52:53,704 >> [CHWARAE CERDDORIAETH] 1220 00:52:53,704 --> 00:56:08,448