1 00:00:00,000 --> 00:00:02,520 [Powered by Google Translate] [Adran 4 - Mwy cyfforddus] 2 00:00:02,520 --> 00:00:04,850 [Rob Bowden - Harvard University] 3 00:00:04,850 --> 00:00:07,370 [Mae hyn yn CS50. - CS50.TV] 4 00:00:08,920 --> 00:00:13,350 Mae gennym yfory cwis, rhag ofn nad ydych guys yn gwybod hynny. 5 00:00:14,810 --> 00:00:20,970 Mae'n bôn ar bopeth y gallech fod wedi gweld yn y dosbarth neu a ddylai fod wedi gweld yn y dosbarth. 6 00:00:20,970 --> 00:00:26,360 Mae hynny'n cynnwys awgrymiadau, er eu bod yn bwnc ddiweddar iawn. 7 00:00:26,360 --> 00:00:29,860 Dylech o leiaf yn deall y lefelau uchel ohonynt. 8 00:00:29,860 --> 00:00:34,760 Mae unrhyw beth a mynd drosodd yn y dosbarth, dylech ddeall ar gyfer y cwis. 9 00:00:34,760 --> 00:00:37,320 Felly os oes gennych gwestiynau arnynt, gallwch ofyn iddynt yn awr. 10 00:00:37,320 --> 00:00:43,280 Ond mae hyn yn mynd i fod yn sesiwn iawn a arweinir gan fyfyrwyr lle rydych guys yn gofyn cwestiynau, 11 00:00:43,280 --> 00:00:45,060 felly gobeithio y bobl cwestiynau. 12 00:00:45,060 --> 00:00:48,020 Oes gan unrhyw un gwestiynau? 13 00:00:49,770 --> 00:00:52,090 Ydw. >> [Myfyrwyr] Allwch chi fynd dros awgrymiadau eto? 14 00:00:52,090 --> 00:00:54,350 Byddaf yn mynd dros awgrymiadau. 15 00:00:54,350 --> 00:00:59,180 Mae eich holl newidynnau o reidrwydd yn byw mewn cof, 16 00:00:59,180 --> 00:01:04,450 ond fel arfer nid ydych yn poeni am hynny, ac rydych yn dweud x + 2 ac y + 3 17 00:01:04,450 --> 00:01:07,080 a bydd y casglwr chyfrif i maes ble y pethau yn byw ar eich cyfer chi. 18 00:01:07,080 --> 00:01:12,990 Unwaith y byddwch yn delio â awgrymiadau, nawr eich bod yn benodol gan ddefnyddio cyfeiriadau hynny cof. 19 00:01:12,990 --> 00:01:19,800 Felly bydd newidyn unigol yn unig erioed yn byw mewn cyfeiriad unigol ar unrhyw adeg benodol. 20 00:01:19,800 --> 00:01:24,040 Os ydym am i ddatgan pwyntydd, beth yw'r fath yn mynd i edrych fel? 21 00:01:24,040 --> 00:01:26,210 >> Rwyf am ddatgan p pwyntydd. Beth mae'r fath yn edrych fel? 22 00:01:26,210 --> 00:01:33,530 [Myfyrwyr] int * p. >> Yeah. Felly int * p. 23 00:01:33,530 --> 00:01:38,030 A sut ydw i'n ei wneud yn cyfeirio at x? >> [Myfyrwyr] ampersand. 24 00:01:40,540 --> 00:01:45,300 [Bowden] Felly ampersand elwir llythrennol y cyfeiriad y gweithredwr. 25 00:01:45,300 --> 00:01:50,460 Felly, pan fyddaf yn dweud & x mae'n cael y cyfeiriad cof am y x amrywiol. 26 00:01:50,460 --> 00:01:56,790 Felly, yn awr yr wyf yn cael y p pwyntydd, ac unrhyw le yn fy cod gallaf ddefnyddio * p 27 00:01:56,790 --> 00:02:02,960 neu gallwn i eu defnyddio x a bydd yn yr un peth yn union. 28 00:02:02,960 --> 00:02:09,520 (* P). Beth mae hyn yn ei wneud? Beth mae hynny'n ei seren ei olygu? 29 00:02:09,520 --> 00:02:13,120 [Myfyrwyr] Mae'n golygu gwerth ar y pwynt hwnnw. >> Yeah. 30 00:02:13,120 --> 00:02:17,590 Felly, os ydym yn edrych arno, gall fod yn ddefnyddiol iawn i dynnu allan y diagramau 31 00:02:17,590 --> 00:02:22,230 lle mae hyn yn blwch bach cof am x, sy'n digwydd i gael y gwerth 4, 32 00:02:22,230 --> 00:02:25,980 yna mae gennym blwch bach cof am p, 33 00:02:25,980 --> 00:02:31,590 ac felly pwyntiau p ag x, felly rydym yn tynnu saeth o p i x. 34 00:02:31,590 --> 00:02:40,270 Felly, pan fyddwn yn dweud * p ydym ni'n ei ddweud yn mynd i'r blwch sy'n p. 35 00:02:40,270 --> 00:02:46,480 Star yn dilyn y saeth, ac yna gwneud beth bynnag rydych am â'r blwch iawn yno. 36 00:02:46,480 --> 00:03:01,090 Felly gallaf ddweud * p = 7; ac a fydd yn mynd i'r blwch sydd yn x a newid y i 7. 37 00:03:01,090 --> 00:03:13,540 Neu gallwn ddweud int z = * p * 2; Dyna ddryslyd am ei fod yn, seren seren. 38 00:03:13,540 --> 00:03:19,230 Mae'r seren un yn dereferencing p, y seren arall yn lluosi gyda 2. 39 00:03:19,230 --> 00:03:26,780 Hysbysiad gallwn i gael un mor dda disodli'r p * gyda x. 40 00:03:26,780 --> 00:03:29,430 Gallwch eu defnyddio yn yr un ffordd. 41 00:03:29,430 --> 00:03:38,000 Ac yna gall ddiweddarach gennyf p bwynt i beth cwbl newydd. 42 00:03:38,000 --> 00:03:42,190 Gallaf ddweud p = &z; 43 00:03:42,190 --> 00:03:44,940 Felly nawr p unrhyw bwyntiau hwy i x; mae'n cyfeirio at z. 44 00:03:44,940 --> 00:03:50,510 Ac unrhyw amser, rwy'n * p 'i' yr un fath â gwneud z. 45 00:03:50,510 --> 00:03:56,170 Felly, y peth defnyddiol am hyn yw unwaith i ni ddechrau mynd i mewn i swyddogaethau. 46 00:03:56,170 --> 00:03:59,790 >> Mae'n fath o ddiwerth i ddatgan pwyntydd sy'n pwyntio at rywbeth 47 00:03:59,790 --> 00:04:03,140 ac yna rydych chi'n jyst dereferencing ei 48 00:04:03,140 --> 00:04:06,060 pryd y gallech fod wedi defnyddio'r newidyn gwreiddiol i ddechrau. 49 00:04:06,060 --> 00:04:18,190 Ond pan fyddwch yn mynd i mewn i swyddogaethau - felly gadewch i ni ddweud ein bod wedi rhywfaint o swyddogaeth, int foo, 50 00:04:18,190 --> 00:04:32,810 sy'n cymryd pwyntydd, a dim ond yn * p = 6; 51 00:04:32,810 --> 00:04:39,990 Fel y gwelsom o'r blaen gyda cyfnewid, ni allwch wneud yn cyfnewid effeithiol a swyddogaeth ar wahân 52 00:04:39,990 --> 00:04:45,180 jyst yn mynd heibio gyfanrifau oherwydd bod popeth yn C yw bob amser yn mynd heibio yn ôl gwerth. 53 00:04:45,180 --> 00:04:48,360 Hyd yn oed pan fyddwch yn pasio awgrymiadau rydych yn pasio yn ôl gwerth. 54 00:04:48,360 --> 00:04:51,940 Fel mae'n digwydd bod y gwerthoedd yn gyfeiriadau cof. 55 00:04:51,940 --> 00:05:00,770 Felly, pan fyddaf yn dweud foo (p); Rwy'n mynd heibio i'r pwyntydd i mewn i'r foo swyddogaeth 56 00:05:00,770 --> 00:05:03,910 ac yna foo yn ei wneud * p = 6; 57 00:05:03,910 --> 00:05:08,600 Felly, y tu mewn y swyddogaeth honno, * p yn dal yn gyfwerth ag x, 58 00:05:08,600 --> 00:05:12,720 ond ni allaf ddefnyddio x tu mewn swyddogaeth honno gan nad yw'n cwmpasu o fewn y swyddogaeth honno. 59 00:05:12,720 --> 00:05:19,510 Felly * p = 6 yw'r unig ffordd y gallaf gael mynediad newidyn lleol o swyddogaeth arall. 60 00:05:19,510 --> 00:05:23,600 Neu, wel, awgrymiadau yw'r unig ffordd y gallaf gael mynediad newidyn lleol o swyddogaeth arall. 61 00:05:23,600 --> 00:05:31,600 [Myfyrwyr] Dewch i ddweud eich bod eisiau dychwelyd pwyntydd. Sut yn union ydych chi'n ei wneud hynny? 62 00:05:31,600 --> 00:05:44,270 [Bowden] Dychwelyd pwyntydd fel yn rhywbeth fel int y = 3; dychwelyd & y? >> [Myfyrwyr] Yeah. 63 00:05:44,270 --> 00:05:48,480 [Bowden] Iawn. Ni ddylech byth wneud hyn. Mae hyn yn wael. 64 00:05:48,480 --> 00:05:59,480 Rwy'n credu fy mod yn gweld yn y sleidiau hyn darlith i chi ddechrau gweld y diagram cyfan o gof 65 00:05:59,480 --> 00:06:02,880 lle bydd hyd yma gennych gyfeiriad cof 0 66 00:06:02,880 --> 00:06:09,550 ac i lawr dyma i chi gael 4 cof gyfeiriad gigs neu 2 i 32. 67 00:06:09,550 --> 00:06:15,120 Felly, yna mae gennych chi rai pethau a rhai pethau, ac yna mae gennych eich pentwr 68 00:06:15,120 --> 00:06:21,780 ac rydych wedi cael eich tomen, yr ydych newydd ddechrau dysgu am, dyfu i fyny. 69 00:06:21,780 --> 00:06:24,390 [Myfyrwyr] Onid y domen uwchben y pentwr? 70 00:06:24,390 --> 00:06:27,760 >> Yeah. Mae'r domen ar ben, ynte? >> [Myfyrwyr] Wel, mae'n rhoi 0 ar ben. 71 00:06:27,760 --> 00:06:30,320 [Myfyrwyr] O, efe a osododd 0 ar ben. >> [Myfyrwyr] O, iawn. 72 00:06:30,320 --> 00:06:36,060 Ymwadiad: Unrhyw le gyda CS50 rydych chi'n mynd i weld y ffordd hon. >> [Myfyrwyr] Iawn. 73 00:06:36,060 --> 00:06:40,290 Dim ond pan fyddwch chi'n cyntaf weld pentyrrau, 74 00:06:40,290 --> 00:06:45,000 yn hoffi pan fyddwch yn meddwl am pentwr chi feddwl am bentyrru pethau ar ben ei gilydd. 75 00:06:45,000 --> 00:06:50,810 Felly, rydym yn tueddu i troi o gwmpas hyn fel bod y pentwr yn tyfu i fyny fel pentwr fel arfer byddai 76 00:06:50,810 --> 00:06:55,940 yn hytrach na'r pentwr yn hongian i lawr. >> [Myfyrwyr] Peidiwch â tomenni dechnegol yn tyfu i fyny hefyd, er bod? 77 00:06:55,940 --> 00:07:01,100 Mae'n dibynnu ar yr hyn rydych yn ei olygu wrth dyfu i fyny. 78 00:07:01,100 --> 00:07:04,010 Mae'r stac a'r domen bob amser yn tyfu mewn cyfeiriadau dirgroes. 79 00:07:04,010 --> 00:07:09,420 Mae pentwr bob amser yn tyfu i fyny yn yr ystyr ei fod yn tyfu i fyny 80 00:07:09,420 --> 00:07:12,940 tuag at gyfeiriadau cof uwch, ac mae'r domen yn tyfu i lawr 81 00:07:12,940 --> 00:07:17,260 yn ei fod yn tyfu tuag at gyfeiriadau cof is. 82 00:07:17,260 --> 00:07:20,250 Felly y brig yw 0 ac y gwaelod yn gyfeiriadau cof uchel. 83 00:07:20,250 --> 00:07:26,390 Maent yn ddau dyfu, dim ond yn gwrthwynebu cyfarwyddiadau. 84 00:07:26,390 --> 00:07:29,230 [Myfyrwyr] Fi jyst yn golygu bod oherwydd eich bod yn dweud eich bod yn rhoi corn ar y gwaelod 85 00:07:29,230 --> 00:07:33,640 oherwydd ei fod yn ymddangos yn fwy greddfol oherwydd am y pentwr i ddechrau ar y brig o domen, 86 00:07:33,640 --> 00:07:37,520 tomen ar ben ei hun hefyd, felly that's - Yeah. >> 87 00:07:37,520 --> 00:07:44,960 Byddwch hefyd yn meddwl am y domen fel tyfu i fyny ac yn fwy, ond y pentwr yn fwy felly. 88 00:07:44,960 --> 00:07:50,280 Felly, y corn simnai yw un yr ydym math o awyddus i ddangos tyfu i fyny. 89 00:07:50,280 --> 00:07:55,390 Ond ym mhobman i chi edrych fel arall yn mynd i ddangos cyfeiriad 0 ar y brig 90 00:07:55,390 --> 00:07:59,590 a'r cyfeiriad cof uchaf ar y gwaelod, felly mae hwn yn eich barn arferol o gof. 91 00:07:59,590 --> 00:08:02,100 >> Oes gennych chi gwestiwn? 92 00:08:02,100 --> 00:08:04,270 [Myfyrwyr] Allwch chi ddweud mwy wrthym am y domen? 93 00:08:04,270 --> 00:08:06,180 Yeah. 'N annhymerus' dod i hynny mewn eiliad. 94 00:08:06,180 --> 00:08:12,220 Weinidog, gan fynd yn ôl i pam ddychwelyd a y yn beth drwg, 95 00:08:12,220 --> 00:08:18,470 ar y pentwr gennych criw o fframiau simnai sy'n cynrychioli pob un o'r swyddogaethau 96 00:08:18,470 --> 00:08:20,460 sydd wedi cael ei alw. 97 00:08:20,460 --> 00:08:27,990 Felly, anwybyddu pethau blaenorol, ar frig eich stac bob amser yn mynd i fod yn brif swyddogaeth 98 00:08:27,990 --> 00:08:33,090 ers bod yn y swyddogaeth gyntaf sy'n cael ei alw. 99 00:08:33,090 --> 00:08:37,130 Ac yna pan fyddwch yn ffonio swyddogaeth arall, y pentwr yn mynd i dyfu i lawr. 100 00:08:37,130 --> 00:08:41,640 Felly, os galwaf rhywfaint o swyddogaeth, foo, ac mae'n mynd yn ei ffrâm pentwr ei hun, 101 00:08:41,640 --> 00:08:47,280 gall alw rhyw swyddogaeth, bar, mae'n cael ei ffrâm pentwr hun. 102 00:08:47,280 --> 00:08:49,840 A gallai fod yn ailadroddus bar a gallai galw ei hun, 103 00:08:49,840 --> 00:08:54,150 ac er mwyn ail alwad i far yn mynd i gael ei ffrâm pentwr hun. 104 00:08:54,150 --> 00:08:58,880 Ac felly beth sy'n mynd yn y fframiau pentwr i gyd o'r newidynnau lleol 105 00:08:58,880 --> 00:09:03,450 a'r holl ddadleuon swyddogaeth sydd - 106 00:09:03,450 --> 00:09:08,730 Unrhyw bethau sydd yn lleol gwmpasu i'r swyddogaeth hon yn mynd yn y fframiau stac. 107 00:09:08,730 --> 00:09:21,520 Felly mae hynny'n golygu pan fyddaf yn dweud rhywbeth fel bar yn swyddogaeth, 108 00:09:21,520 --> 00:09:29,270 Im 'jyst yn mynd i ddatgan cyfanrif ac yna dychwelyd pwyntydd i'r cyfanrif. 109 00:09:29,270 --> 00:09:33,790 Felly, lle mae y byw? 110 00:09:33,790 --> 00:09:36,900 [Myfyrwyr] yn byw yn y bar. >> [Bowden] Yeah. 111 00:09:36,900 --> 00:09:45,010 Rhywle yn y sgwâr bach o gof yn sgwâr Littler sydd y ynddo. 112 00:09:45,010 --> 00:09:53,370 Pan fyddaf yn dychwelyd & y, rwy'n dychwelyd pwyntydd at y bloc bach o gof. 113 00:09:53,370 --> 00:09:58,400 Ond yna pan fydd yn dychwelyd swyddogaeth, ei ffrâm pentwr yn cael popped oddi ar y pentwr. 114 00:10:01,050 --> 00:10:03,530 A dyna pam y gelwir pentwr. 115 00:10:03,530 --> 00:10:06,570 Mae fel y data corn strwythur, os ydych yn gwybod beth yw hynny. 116 00:10:06,570 --> 00:10:11,580 Neu hyd yn oed fel pentwr o hambyrddau bob amser yn yr enghraifft, 117 00:10:11,580 --> 00:10:16,060 prif mynd i fynd ar y gwaelod, ac yna y swyddogaeth cyntaf i chi alw yn mynd i fynd ar ben hynny, 118 00:10:16,060 --> 00:10:20,400 ac ni allwch fynd yn ôl i'r brif nes i chi ddychwelyd o holl swyddogaethau sydd wedi cael eu galw 119 00:10:20,400 --> 00:10:22,340 sydd wedi cael eu gosod ar ei ben. 120 00:10:22,340 --> 00:10:28,650 >> [Myfyrwyr] Felly, os gwnaethoch chi'n dychwelyd y y &, bod y gwerth hwnnw'n amodol i newid heb rybudd. 121 00:10:28,650 --> 00:10:31,290 Ie, it's - >> [myfyrwyr] Gallai fod yn overwritten. >> Yeah. 122 00:10:31,290 --> 00:10:34,660 Mae'n gwbl - Os byddwch yn ceisio - 123 00:10:34,660 --> 00:10:38,040 Byddai hyn hefyd yn bar * int oherwydd ei fod yn dychwelyd pwyntydd, 124 00:10:38,040 --> 00:10:41,310 felly o'i fath yn dychwelyd * int. 125 00:10:41,310 --> 00:10:46,500 Os ydych yn ceisio defnyddio'r gwerth dychwelyd y swyddogaeth hon, mae'n ymddygiad undefined 126 00:10:46,500 --> 00:10:51,770 oherwydd bod pwyntydd cyfeirio at gof gwael. >> [Myfyrwyr] Iawn. 127 00:10:51,770 --> 00:11:01,250 Felly beth os, er enghraifft, rydych yn datgan int * y = malloc (sizeof (canolradd))? 128 00:11:01,250 --> 00:11:03,740 Dyna well. Ydw. 129 00:11:03,740 --> 00:11:07,730 [Myfyrwyr] Siaradon ni am sut pan fyddwn yn llusgo pethau i'n ailgylchu bin 130 00:11:07,730 --> 00:11:11,750 nad ydynt yn dileu mewn gwirionedd; rydym yn unig yn colli eu awgrymiadau. 131 00:11:11,750 --> 00:11:15,550 Felly, yn yr achos hwn rydym mewn gwirionedd yn dileu y gwerth neu a yw'n dal i fod yno yn y cof? 132 00:11:15,550 --> 00:11:19,130 Ar gyfer y rhan fwyaf, mae'n mynd i dal i fod yno. 133 00:11:19,130 --> 00:11:24,220 Ond gadewch i ni ddweud ein bod yn digwydd i alw ryw swyddogaeth arall, Baz. 134 00:11:24,220 --> 00:11:28,990 Baz yn mynd i gael ei ffrâm stac ei hun yma. 135 00:11:28,990 --> 00:11:31,470 Mae'n mynd i gael ei drosysgrifo yr holl bethau hyn, 136 00:11:31,470 --> 00:11:34,180 ac yna os ydych yn ddiweddarach geisio defnyddio'r pwyntydd a gawsoch o'r blaen, 137 00:11:34,180 --> 00:11:35,570 nid yw'n mynd i fod yn un gwerth. 138 00:11:35,570 --> 00:11:38,150 Mae'n mynd i fod wedi newid dim ond oherwydd eich enw Baz swyddogaeth. 139 00:11:38,150 --> 00:11:43,080 [Myfyrwyr] Ond nid oedd byddem, rydym yn dal i gael 3? 140 00:11:43,080 --> 00:11:44,990 [Bowden] Yn ôl pob tebyg, byddech. 141 00:11:44,990 --> 00:11:49,670 Ond ni allwch ddibynnu ar hynny. C yn unig yn dweud ymddygiad anniffiniedig. 142 00:11:49,670 --> 00:11:51,920 >> [Myfyrwyr] O, mae'n ei wneud. Iawn. 143 00:11:51,920 --> 00:11:58,190 Felly, pan fyddwch eisiau dychwelyd pwyntydd, dyma lle malloc yn dod i mewn defnyddio. 144 00:12:00,930 --> 00:12:15,960 Rwy'n ysgrifennu mewn gwirionedd dim ond dychwelyd malloc (3 * sizeof (canolradd)). 145 00:12:17,360 --> 00:12:24,050 Byddwn yn mynd dros malloc fwy mewn eiliad, ond mae'r syniad o malloc yw eich holl newidynnau lleol 146 00:12:24,050 --> 00:12:26,760 bob amser yn mynd ar y pentwr. 147 00:12:26,760 --> 00:12:31,570 Mae unrhyw beth sydd wedi malloced yn mynd ar y domen, a bydd yn am byth a bob amser ar y domen 148 00:12:31,570 --> 00:12:34,490 hyd nes y byddwch yn benodol rhyddhau ei. 149 00:12:34,490 --> 00:12:42,130 Felly, mae hyn yn golygu pan fyddwch malloc rhywbeth, mae'n mynd i oroesi ar ôl y ffurflenni swyddogaeth. 150 00:12:42,130 --> 00:12:46,800 [Myfyrwyr] A fydd yn goroesi ar ôl i'r rhaglen yn stopio rhedeg? Rhif >> 151 00:12:46,800 --> 00:12:53,180 Iawn, felly mae'n mynd i fod yno nes bod y rhaglen yn yr holl ffordd wneud yn rhedeg. >> Ydy. 152 00:12:53,180 --> 00:12:57,510 Gallwn fynd dros manylion o'r hyn sy'n digwydd pan fydd y rhaglen yn stopio rhedeg. 153 00:12:57,510 --> 00:13:02,150 Efallai y bydd angen i atgoffa fi, ond mae hynny'n beth ar wahân yn llwyr. 154 00:13:02,150 --> 00:13:04,190 [Myfyrwyr] Felly malloc yn creu pwyntydd? >> Yeah. 155 00:13:04,190 --> 00:13:13,030 Malloc - >> [myfyrwyr] Rwy'n credu malloc dynodi bloc o cof y gall pwyntydd defnyddio. 156 00:13:15,400 --> 00:13:19,610 [Bowden] arnaf eisiau i'r diagram eto. >> [Myfyrwyr] Felly, mae hyn swyddogaeth yn gweithio, er bod? 157 00:13:19,610 --> 00:13:26,430 [Myfyrwyr] Yeah, malloc dynodi bloc o cof y gallwch eu defnyddio, 158 00:13:26,430 --> 00:13:30,470 ac yna mae'n dychwelyd cyfeiriad y bloc cyntaf y cof. 159 00:13:30,470 --> 00:13:36,750 >> [Bowden] Yeah. Felly, pan fyddwch yn malloc, rydych yn crafangio rhai bloc o cof 160 00:13:36,750 --> 00:13:38,260 dyna o bryd yn y domen. 161 00:13:38,260 --> 00:13:43,040 Os yw'r domen yn rhy fach, yna bydd y domen yn unig yn mynd i dyfu, ac mae'n tyfu yn y cyfeiriad hwn. 162 00:13:43,040 --> 00:13:44,650 Felly, gadewch i ni ddweud y domen yn rhy fach. 163 00:13:44,650 --> 00:13:49,960 Yna, mae'n ymwneud i dyfu ychydig a dychwelyd pwyntydd at y bloc mai dim ond tyfodd. 164 00:13:49,960 --> 00:13:55,130 Pan fyddwch yn rhad ac am ddim pethau, eich bod yn gwneud mwy o le yn y domen, 165 00:13:55,130 --> 00:14:00,030 Gall felly, yna ddiweddarach alwad i malloc ailddefnyddio bod y cof eich bod wedi rhyddhau o'r blaen. 166 00:14:00,030 --> 00:14:09,950 Y peth pwysig am malloc ac am ddim yw ei fod yn rhoi i chi reolaeth lwyr 167 00:14:09,950 --> 00:14:12,700 yn ystod oes y blociau cof. 168 00:14:12,700 --> 00:14:15,420 Newidynnau byd-eang bob amser yn fyw. 169 00:14:15,420 --> 00:14:18,500 Newidynnau lleol yn fyw o fewn eu cwmpas. 170 00:14:18,500 --> 00:14:22,140 Cyn gynted ag y byddwch yn mynd heibio i brês cyrliog, y newidynnau lleol yn marw. 171 00:14:22,140 --> 00:14:28,890 Cof Malloced yn fyw pan fyddwch ei angen i fod yn fyw 172 00:14:28,890 --> 00:14:33,480 ac yna ei ryddhau pan fyddwch yn dweud iddo gael ei ryddhau. 173 00:14:33,480 --> 00:14:38,420 Dyna'r gwirionedd yn y 3 yn unig fathau o gof, mewn gwirionedd. 174 00:14:38,420 --> 00:14:41,840 Mae rheoli cof awtomatig, sef y pentwr. 175 00:14:41,840 --> 00:14:43,840 Mae pethau'n digwydd i chi yn awtomatig. 176 00:14:43,840 --> 00:14:46,910 Pan fyddwch yn dweud x int, cof yn cael ei ddyrannu ar gyfer x int. 177 00:14:46,910 --> 00:14:51,630 Pan fydd x yn mynd allan o gwmpas, y cof yn cael ei adfer ar gyfer x. 178 00:14:51,630 --> 00:14:54,790 Yna mae rheoli cof deinamig, sef yr hyn malloc yw, 179 00:14:54,790 --> 00:14:56,740 sef pan fydd gennych reolaeth. 180 00:14:56,740 --> 00:15:01,290 Byddwch yn ddynamig benderfynu pryd y dylid cof na ddylid ei ddyrannu. 181 00:15:01,290 --> 00:15:05,050 Ac yna mae sefydlog, a dim ond yn golygu ei fod yn byw am byth, 182 00:15:05,050 --> 00:15:06,610 sef yr hyn y newidynnau byd-eang. 183 00:15:06,610 --> 00:15:10,240 Maent yn unig bob amser yn y cof. 184 00:15:10,960 --> 00:15:12,760 >> Cwestiynau? 185 00:15:14,490 --> 00:15:17,230 [Myfyrwyr] Allwch chi ddiffinio bloc dim ond drwy ddefnyddio braces cyrliog 186 00:15:17,230 --> 00:15:21,220 ond beidio â gorfod cael? os ddatganiad neu ddatganiad gyfnod, neu unrhyw beth fel 'na 187 00:15:21,220 --> 00:15:29,130 Gallwch ddiffinio fel bloc mewn swyddogaeth, ond sydd â braces cyrliog hefyd. 188 00:15:29,130 --> 00:15:32,100 [Myfyrwyr] Felly, nid ydych yn gallu gael fel pâr ar hap o braces cyrliog yn eich cod 189 00:15:32,100 --> 00:15:35,680 sydd â newidynnau lleol? >> Ydy, gallwch. 190 00:15:35,680 --> 00:15:45,900 Y tu mewn bar int gallem gael {int y = 3;}. 191 00:15:45,900 --> 00:15:48,440 Dyna i fod i fod yn iawn yma. 192 00:15:48,440 --> 00:15:52,450 Ond hynny yn gyfan gwbl yn diffinio cwmpas int y. 193 00:15:52,450 --> 00:15:57,320 Ar ôl y brês cyrliog yn ail, ni all y cael ei ddefnyddio mwyach. 194 00:15:57,910 --> 00:16:00,630 Rydych chi bron byth yn gwneud hynny, er. 195 00:16:02,940 --> 00:16:07,370 Mynd yn ôl at yr hyn sy'n digwydd pan fydd rhaglen ddod i ben, 196 00:16:07,370 --> 00:16:18,760 mae math o gelwydd gamsyniad / hanner ein bod yn rhoi er mwyn gallu gwneud pethau'n haws. 197 00:16:18,760 --> 00:16:24,410 Rydym yn dweud wrthych pan fyddwch yn dyrannu cof 198 00:16:24,410 --> 00:16:29,860 eich bod yn dyrannu rhai darn o RAM ar gyfer y newidyn. 199 00:16:29,860 --> 00:16:34,190 Ond nid ydych wirioneddol yn uniongyrchol cyffwrdd RAM erioed yn eich rhaglenni. 200 00:16:34,190 --> 00:16:37,490 Os ydych yn meddwl am y peth, sut y tynnais - 201 00:16:37,490 --> 00:16:44,330 Ac mewn gwirionedd, os ydych yn mynd drwy'r yn GDB byddwch yn gweld yr un peth. 202 00:16:51,120 --> 00:16:57,590 Waeth faint o weithiau ydych yn rhedeg eich rhaglen neu pa raglen ydych yn rhedeg, 203 00:16:57,590 --> 00:16:59,950 y pentwr bob amser yn mynd i ddechrau - 204 00:16:59,950 --> 00:17:06,510 eich bod bob amser yn mynd i weld newidynnau amgylch rhywbeth oxbffff cyfeiriad. 205 00:17:06,510 --> 00:17:09,470 Mae fel arfer yn rhywle yn y rhanbarth hwnnw. 206 00:17:09,470 --> 00:17:18,760 Ond sut y gall 2 raglen o bosibl yn cael awgrymiadau ar gyfer cof un fath? 207 00:17:20,640 --> 00:17:27,650 [Myfyrwyr] Mae rhywfaint o ddynodiad mympwyol o ble oxbfff yn dybiedig i fod ar y RAM 208 00:17:27,650 --> 00:17:31,320 y gellir mewn gwirionedd fod mewn mannau gwahanol yn dibynnu ar bryd y swyddogaeth ei alw. 209 00:17:31,320 --> 00:17:35,920 Yeah. Mae'r term yn cof rhithwir. 210 00:17:35,920 --> 00:17:42,250 Y syniad yw bod pob un broses, pob un rhaglen sy'n cael ei rhedeg ar eich cyfrifiadur 211 00:17:42,250 --> 00:17:49,450 wedi ei hun - gadewch i ni dybio 32 catiau - gofod cyfeiriad cwbl annibynnol. 212 00:17:49,450 --> 00:17:51,590 Mae hyn yn y gofod cyfeiriad. 213 00:17:51,590 --> 00:17:56,220 Mae wedi ei hun yn gyfan gwbl annibynnol 4 gigabeit i'w defnyddio. 214 00:17:56,220 --> 00:18:02,220 >> Felly, os ydych yn rhedeg 2 raglen ar yr un pryd, mae'r rhaglen hon yn gweld 4 gigabeit iddo'i hun, 215 00:18:02,220 --> 00:18:04,870 y rhaglen hon yn gweld 4 gigabeit iddo'i hun, 216 00:18:04,870 --> 00:18:07,720 ac mae'n amhosibl ar gyfer y rhaglen i dereference pwyntydd 217 00:18:07,720 --> 00:18:10,920 a darfod i fyny gyda'r cof o'r rhaglen hon. 218 00:18:10,920 --> 00:18:18,200 A beth cof rhithwir yn mapio o ofod brosesau gyfeiriad 219 00:18:18,200 --> 00:18:20,470 i bethau gwirioneddol ar RAM. 220 00:18:20,470 --> 00:18:22,940 Felly, mae i fyny i eich system weithredu i wybod bod, 221 00:18:22,940 --> 00:18:28,080 hey, pan fydd hyn pwyntydd dereferences oxbfff guy, sydd wir yn golygu 222 00:18:28,080 --> 00:18:31,040 ei fod am RAM beit 1000, 223 00:18:31,040 --> 00:18:38,150 ond os yw hyn yn oxbfff rhaglen dereferences, ei fod mewn gwirionedd eisiau RAM beit 10,000. 224 00:18:38,150 --> 00:18:41,590 Gallant fod yn fympwyol yn hyn ar wahân. 225 00:18:41,590 --> 00:18:48,730 Mae hyn hyd yn oed yn wir am bethau o fewn gofod cyfeiriad unigol prosesau. 226 00:18:48,730 --> 00:18:54,770 Felly, fel ei fod yn gweld pob un o'r 4 gigabeit iddo'i hun, ond gadewch i ni ddweud - 227 00:18:54,770 --> 00:18:57,290 [Myfyrwyr] Oes gan bob proses sengl - 228 00:18:57,290 --> 00:19:01,350 Lets 'ddeud oes gennych gyfrifiadur gyda dim ond 4 gigabeit o RAM. 229 00:19:01,350 --> 00:19:06,430 A oes gan bob proses unigol yn gweld y 4 gigabeit cyfan? >> Ydy. 230 00:19:06,430 --> 00:19:13,060 Ond y 4 gigabeit y gwêl yn gorwedd. 231 00:19:13,060 --> 00:19:20,460 Mae'n dim ond mae'n credu ei fod wedi hyn i gyd cof am nad yw'n gwybod unrhyw broses arall yn bodoli. 232 00:19:20,460 --> 00:19:28,140 Bydd ond yn defnyddio cof cymaint ag y gwirionedd angen. 233 00:19:28,140 --> 00:19:32,340 Nid yw'r system weithredu yn mynd i roi RAM at y broses hon 234 00:19:32,340 --> 00:19:35,750 os nad yw'n defnyddio unrhyw cof yn y rhanbarth cyfan. 235 00:19:35,750 --> 00:19:39,300 Dyw hi ddim yn mynd i roi cof ar gyfer y rhanbarth. 236 00:19:39,300 --> 00:19:54,780 Ond mae'r syniad yw bod - Im 'yn ceisio meddwl am - ni allaf feddwl am gyfatebiaeth. 237 00:19:54,780 --> 00:19:56,780 Analogies yn galed. 238 00:19:57,740 --> 00:20:02,700 Un o'r materion y cof rhithwir neu un o'r pethau mae'n datrys 239 00:20:02,700 --> 00:20:06,810 yw y dylai prosesau fod yn gwbl ymwybodol o'i gilydd. 240 00:20:06,810 --> 00:20:12,140 Ac er mwyn i chi ysgrifennu unrhyw raglen mai dim ond dereferences unrhyw pwyntydd, 241 00:20:12,140 --> 00:20:19,340 yn hoffi dim ond ysgrifennu rhaglen sy'n dweud * (ox1234), 242 00:20:19,340 --> 00:20:22,890 a bod cyfeiriad cof dereferencing 1234. 243 00:20:22,890 --> 00:20:28,870 >> Ond mae i fyny at y system yn gweithredu wedyn i droi'r hyn 1,234 yn ei olygu. 244 00:20:28,870 --> 00:20:33,960 Felly, os digwydd i 1234 fod yn gyfeiriad cof dilys ar gyfer y broses, 245 00:20:33,960 --> 00:20:38,800 fel ei fod ar y corn neu rywbeth, yna bydd hyn yn dychwelyd y gwerth y cyfeiriad cof 246 00:20:38,800 --> 00:20:41,960 cyn belled â bod y broses yn gwybod. 247 00:20:41,960 --> 00:20:47,520 Ond nid os yw 1234 yn gyfeiriad dilys, fel mae'n digwydd i dir 248 00:20:47,520 --> 00:20:52,910 mewn rhai darn bach o gof yma sydd y tu hwnt i'r simnai a'r tu hwnt i'r domen 249 00:20:52,910 --> 00:20:57,200 ac nad ydych wedi defnyddio wirioneddol hynny, yna dyna pryd byddwch yn cael pethau fel segfaults 250 00:20:57,200 --> 00:21:00,260 oherwydd eich bod yn cyffwrdd cof na ddylech fod yn cyffwrdd. 251 00:21:07,180 --> 00:21:09,340 Mae hyn hefyd yn wir - 252 00:21:09,340 --> 00:21:15,440 Mae system 32-bit, 32 darnau yn golygu bod gennych 32 catiau i ddiffinio cyfeiriad cof. 253 00:21:15,440 --> 00:21:22,970 Dyma pam awgrymiadau 8 bytes oherwydd mae 32 darnau 8 bytes - neu 4 bytes. 254 00:21:22,970 --> 00:21:25,250 Pointers yn 4 bytes. 255 00:21:25,250 --> 00:21:33,680 Felly, pan fyddwch yn gweld pwyntydd fel oxbfffff, hynny yw - 256 00:21:33,680 --> 00:21:40,080 O fewn unrhyw raglen gallwch adeiladu unrhyw pwyntydd mympwyol, 257 00:21:40,080 --> 00:21:46,330 unrhyw le o ox0 i ych 8 f's - ffffffff. 258 00:21:46,330 --> 00:21:49,180 [Myfyrwyr] Oeddech nad ydych yn dweud eu bod yn 4 bytes? >> Yeah. 259 00:21:49,180 --> 00:21:52,730 [Myfyrwyr] Yna bydd pob beit gael - >> hecsadegol [Bowden]. 260 00:21:52,730 --> 00:21:59,360 Hecsadegol - 5, 6, 7, 8. Felly awgrymiadau rydych chi'n mynd i bob amser yn gweld yn hecsadegol. 261 00:21:59,360 --> 00:22:01,710 'I' jyst sut yr ydym yn dosbarthu awgrymiadau. 262 00:22:01,710 --> 00:22:05,240 Bob 2 ddigid o hecsadegol yw 1 beit. 263 00:22:05,240 --> 00:22:09,600 Felly, mae mynd i fod yn 8 digid hecsadegol ar gyfer 4 bytes. 264 00:22:09,600 --> 00:22:14,190 Felly, i bob un pwyntydd ar system 32-bit yn mynd i fod yn 4 bytes, 265 00:22:14,190 --> 00:22:18,550 sy'n golygu bod yn eich proses y gallwch adeiladu unrhyw 4 mympwyol bytes 266 00:22:18,550 --> 00:22:20,550 a gwneud pwyntydd allan ohono, 267 00:22:20,550 --> 00:22:32,730 sy'n golygu, cyn belled â'i fod yn ymwybodol, gall fynd i'r afael yn 2 gyfan i 32 bytes y cof. 268 00:22:32,730 --> 00:22:34,760 Er nad yw'n wir yn cael mynediad i hynny, 269 00:22:34,760 --> 00:22:40,190 hyd yn oed os yw eich cyfrifiadur dim ond 512 megabeit, mae'n credu bod ganddo lawer o gof. 270 00:22:40,190 --> 00:22:44,930 Ac mae'r system weithredu yn smart ddigon mai dim ond dyrannu hyn yr ydych ei angen mewn gwirionedd. 271 00:22:44,930 --> 00:22:49,630 Nid yw'n unig yn mynd, oh, proses newydd: 4 gigs. 272 00:22:49,630 --> 00:22:51,930 >> Yeah. >> [Myfyrwyr] Beth mae'r ych yn ei olygu? Pam ydych chi'n ysgrifennu? 273 00:22:51,930 --> 00:22:54,980 Dim ond y symbol ar gyfer hecsadegol. 274 00:22:54,980 --> 00:22:59,590 Pan fyddwch yn gweld dechrau rhif gyda ych, y pethau olynol yn hecsadegol. 275 00:23:01,930 --> 00:23:05,760 [Myfyrwyr] Rydych yn esbonio am beth sy'n digwydd pan fydd rhaglen ddod i ben. >> Ydy. 276 00:23:05,760 --> 00:23:09,480 Beth sy'n digwydd pan fydd rhaglen yn dod i ben yn y system weithredu 277 00:23:09,480 --> 00:23:13,600 dim ond erases y mapiadau sydd ganddo ar gyfer y cyfeiriadau hyn, a dyna ni. 278 00:23:13,600 --> 00:23:17,770 Gall y system weithredu yn awr yn unig yn rhoi y cof i raglen arall i'w defnyddio. 279 00:23:17,770 --> 00:23:19,490 [Myfyrwyr] Iawn. 280 00:23:19,490 --> 00:23:24,800 Felly, pan fyddwch yn dyrannu rhywbeth ar y domen neu newidynnau stac neu fyd-eang neu unrhyw beth, 281 00:23:24,800 --> 00:23:27,010 maent i gyd yn unig yn diflannu cyn gynted ag y rhaglen yn dod i ben 282 00:23:27,010 --> 00:23:32,120 oherwydd bod y system weithredu yn awr yn rhydd i roi'r cof i unrhyw broses arall. 283 00:23:32,120 --> 00:23:35,150 [Myfyrwyr] Er bod pob tebyg yn dal gwerthoedd ysgrifenedig yn? >> Yeah. 284 00:23:35,150 --> 00:23:37,740 Mae'r gwerthoedd hyn yn debygol dal i fod yno. 285 00:23:37,740 --> 00:23:41,570 Mae'n dim ond mae'n mynd i fod yn anodd cael gafael arnynt. 286 00:23:41,570 --> 00:23:45,230 Mae'n llawer mwy anodd i gael gafael arnynt nag yw hi i gael mewn ffeiliau wedi'u dileu 287 00:23:45,230 --> 00:23:51,450 oherwydd bod y math ffeil dileu o eistedd yno am amser hir ac y disg caled yn llawer mwy. 288 00:23:51,450 --> 00:23:54,120 Felly, mae'n mynd i overwrite gwahanol rannau o gof 289 00:23:54,120 --> 00:23:58,640 cyn iddo ddigwydd i ysgrifennu dros y darn o gof bod y ffeil a ddefnyddir i fod yn. 290 00:23:58,640 --> 00:24:04,520 Ond prif gof, RAM, rydych yn beicio trwy lawer yn gyflymach, 291 00:24:04,520 --> 00:24:08,040 felly mae'n mynd i fod yn gyflym iawn overwritten. 292 00:24:10,300 --> 00:24:13,340 Cwestiynau ar hyn neu unrhyw beth arall? 293 00:24:13,340 --> 00:24:16,130 [Myfyrwyr] Mae gennyf gwestiynau am bwnc gwahanol. >> Iawn. 294 00:24:16,130 --> 00:24:19,060 Oes gan unrhyw un cwestiynau ar hyn? 295 00:24:20,170 --> 00:24:23,120 >> Iawn. Pwnc gwahanol. >> [Myfyrwyr] Iawn. 296 00:24:23,120 --> 00:24:26,550 Oeddwn yn mynd drwy rai o'r profion ymarfer, 297 00:24:26,550 --> 00:24:30,480 ac mewn un ohonynt oedd yn sôn am y sizeof 298 00:24:30,480 --> 00:24:35,630 a'r gwerth y mae yn dychwelyd neu fathau amrywiol gwahanol. >> Ydy. 299 00:24:35,630 --> 00:24:45,060 Ac mae'n dweud bod y ddau int a hir yn dychwelyd 4, felly maen nhw'n ddau 4 bytes hir. 300 00:24:45,060 --> 00:24:48,070 A oes unrhyw wahaniaeth rhwng int a hir, neu a yw'n yr un peth? 301 00:24:48,070 --> 00:24:50,380 Oes, mae yna wahaniaeth. 302 00:24:50,380 --> 00:24:52,960 Mae'r safon C - 303 00:24:52,960 --> 00:24:54,950 Rydw i'n fwy na thebyg yn mynd i llanast i fyny. 304 00:24:54,950 --> 00:24:58,800 Mae'r safon C yn union fel yr hyn C yw, y dogfennau swyddogol C. 305 00:24:58,800 --> 00:25:00,340 Dyma beth mae'n ei ddweud. 306 00:25:00,340 --> 00:25:08,650 Felly, y safon C dim ond yn dweud y bydd golosg am byth a bob amser yn 1 beit. 307 00:25:10,470 --> 00:25:19,040 Popeth ar ôl hynny - byr bob amser yn diffinio yn union fel bod yn fwy na neu'n hafal i torgoch. 308 00:25:19,040 --> 00:25:23,010 Gallai hyn fod yn gyfan gwbl yn fwy na, ond nid yn gadarnhaol. 309 00:25:23,010 --> 00:25:31,940 Mae int yn unig sy'n diffinio fel rhai yn fwy na neu'n hafal i holiadur byr. 310 00:25:31,940 --> 00:25:36,210 A hir yn unig sy'n diffinio fel rhai yn fwy na neu'n hafal i int. 311 00:25:36,210 --> 00:25:41,600 A hir hir yn fwy na neu'n hafal i hir. 312 00:25:41,600 --> 00:25:46,610 Felly, yr unig beth y safon C diffinio yn archebu cymharol o bopeth. 313 00:25:46,610 --> 00:25:54,880 Mae'r union swm o gof bod pethau'n mynd i fyny yn gyffredinol hyd at weithredu, 314 00:25:54,880 --> 00:25:57,640 ond mae'n eithaf da a ddiffinnir ar y pwynt hwn. >> [Myfyrwyr] Iawn. 315 00:25:57,640 --> 00:26:02,490 Felly, siorts yn cael eu bron bob amser yn mynd i fod 2 bytes. 316 00:26:04,920 --> 00:26:09,950 Ints yn cael eu bron bob amser yn mynd i fod yn 4 bytes. 317 00:26:12,070 --> 00:26:15,340 Longs hir yn cael eu bron bob amser yn mynd i fod yn 8 bytes. 318 00:26:17,990 --> 00:26:23,160 Ac yn hiraethu, mae'n dibynnu ar p'un a ydych yn defnyddio 32-bit neu system 64-bit. 319 00:26:23,160 --> 00:26:27,450 Felly hir yn mynd i gyfateb i'r math o system. 320 00:26:27,450 --> 00:26:31,920 Os ydych yn defnyddio system 32-bit fel y Appliance, mae'n mynd i fod yn 4 bytes. 321 00:26:34,530 --> 00:26:42,570 Os ydych yn defnyddio 64-bit fel llawer o gyfrifiaduron diweddar, mae'n mynd i fod yn 8 bytes. 322 00:26:42,570 --> 00:26:45,230 >> Ints bron bob amser yn 4 bytes ar y pwynt hwn. 323 00:26:45,230 --> 00:26:47,140 Longs hir yn bron bob amser 8 bytes. 324 00:26:47,140 --> 00:26:50,300 Yn y gorffennol, ints a ddefnyddir dim ond yn 2 bytes. 325 00:26:50,300 --> 00:26:56,840 Ond yn sylwi bod hyn yn llwyr yn bodloni pob un o'r cysylltiadau o fwy na ac yn hafal i. 326 00:26:56,840 --> 00:27:01,280 Cyn belled yn cael ei ganiatáu yn berffaith i fod yr un maint fel cyfanrif, 327 00:27:01,280 --> 00:27:04,030 ac mae hefyd yn caniatáu i fod yr un faint â hir hir. 328 00:27:04,030 --> 00:27:11,070 Ac dim ond fel y digwydd bod bod yn 99.999% o systemau, mae'n mynd i fod yn hafal i 329 00:27:11,070 --> 00:27:15,800 naill ai int neu hir hir. 'I jyst yn dibynnu ar 32-bit neu 64-bit. >> [Myfyrwyr] Iawn. 330 00:27:15,800 --> 00:27:24,600 Yn fflotiau, sut y pwynt degol a ddynodwyd o ran o ddarnau? 331 00:27:24,600 --> 00:27:27,160 Fel fel deuaidd? >> Yeah. 332 00:27:27,160 --> 00:27:30,570 Nid oes angen i chi wybod bod am CS50. 333 00:27:30,570 --> 00:27:32,960 Dydych chi ddim hyd yn oed yn dysgu bod yn 61. 334 00:27:32,960 --> 00:27:37,350 Nid ydych yn dysgu bod yn wir mewn unrhyw gwrs. 335 00:27:37,350 --> 00:27:42,740 Dim ond sylwadau. 336 00:27:42,740 --> 00:27:45,440 Wyf yn anghofio y rhandiroedd bit union. 337 00:27:45,440 --> 00:27:53,380 Mae'r syniad o pwynt arnawf yw eich bod yn dyrannu nifer benodol o ddarnau i gynrychioli - 338 00:27:53,380 --> 00:27:56,550 Yn y bôn, mae popeth yn mewn nodiant gwyddonol. 339 00:27:56,550 --> 00:28:05,600 Felly, byddwch yn dyrannu nifer benodol o ddarnau i gynrychioli'r rhif ei hun, fel 1.2345. 340 00:28:05,600 --> 00:28:10,200 Ni all yr wyf yn cynrychioli rhif gyda mwy o ddigidau na 5. 341 00:28:12,200 --> 00:28:26,300 Yna byddwch hefyd yn dyrannu nifer benodol o ddarnau fel ei fod yn tueddu i fod fel 342 00:28:26,300 --> 00:28:32,810 gallwch fynd i fyny i rif penodol, fel bod yn y ddehonglwr fwyaf y gallwch ei gael, 343 00:28:32,810 --> 00:28:36,190 a gallwch ond yn mynd i lawr i ddehonglwr penodol, 344 00:28:36,190 --> 00:28:38,770 yn hoffi bod yn y ddehonglwr lleiaf y gallwch ei gael. 345 00:28:38,770 --> 00:28:44,410 >> Nid wyf yn cofio y darnau ffordd union yn cael eu neilltuo i bob un o'r gwerthoedd hyn, 346 00:28:44,410 --> 00:28:47,940 ond nifer penodol o ddarnau yn ymroddedig i 1.2345, 347 00:28:47,940 --> 00:28:50,930 arall nifer penodol o ddarnau yn ymroddedig i ddehonglwr, 348 00:28:50,930 --> 00:28:55,670 ac mae'n ond yn bosibl i gynrychioli ddehonglwr o faint penodol. 349 00:28:55,670 --> 00:29:01,100 [Myfyrwyr] A dwbl? A yw hynny'n debyg i arnofio hir ychwanegol? >> Yeah. 350 00:29:01,100 --> 00:29:07,940 Mae yr un peth â fflôt ac eithrio nawr eich bod chi'n ddefnyddio 8 bytes lle 4 bytes. 351 00:29:07,940 --> 00:29:11,960 Nawr byddwch yn gallu i ddefnyddio 9 digid neu 10 digid, 352 00:29:11,960 --> 00:29:16,630 a bydd hyn yn gallu mynd i fyny i 300 yn lle 100. >> [Myfyrwyr] Iawn. 353 00:29:16,630 --> 00:29:21,550 Ac yn arnofio hefyd 4 bytes. >> Ydy. 354 00:29:21,550 --> 00:29:27,520 Wel, unwaith eto, ei fod yn dibynnu'n gyffredinol ar weithrediad cyffredinol, 355 00:29:27,520 --> 00:29:30,610 ond fflotiau 4 bytes, dyblau 8. 356 00:29:30,610 --> 00:29:33,440 Dyblau yn cael eu galw'n dwbl oherwydd eu bod yn ddwbl maint y fflotiau. 357 00:29:33,440 --> 00:29:38,380 [Myfyrwyr] Iawn. Ac a oes dwbl yn dyblu? >> Nid oes. 358 00:29:38,380 --> 00:29:43,660 Rwy'n credu - >> [myfyrwyr] Fel longs hir? >> Yeah. Nid wyf yn credu hynny. Ydw. 359 00:29:43,660 --> 00:29:45,950 [Myfyrwyr] Ar brawf y llynedd roedd cwestiwn am y swyddogaeth prif 360 00:29:45,950 --> 00:29:49,490 gorfod bod yn rhan o'ch rhaglen. 361 00:29:49,490 --> 00:29:52,310 Yr ateb oedd nad oes rhaid iddo fod yn rhan o'ch rhaglen. 362 00:29:52,310 --> 00:29:55,100 Ym mha sefyllfa? Dyna beth welais. 363 00:29:55,100 --> 00:29:59,090 [Bowden] Mae'n ymddangos - >> [myfyrwyr] Beth sefyllfa? 364 00:29:59,090 --> 00:30:02,880 A oes gennych y broblem? >> [Myfyrwyr] Yeah, gallaf yn sicr dynnu i fyny. 365 00:30:02,880 --> 00:30:07,910 Nid oes raid iddo fod, yn dechnegol, ond yn y bôn mae'n mynd i fod. 366 00:30:07,910 --> 00:30:10,030 [Myfyrwyr] Gwelais un ar flwyddyn wahanol. 367 00:30:10,030 --> 00:30:16,220 Roedd fel Gwir neu Gau: A dilys - >> O, ffeil c.? 368 00:30:16,220 --> 00:30:18,790 . [Myfyrwyr] Rhaid i unrhyw ffeil c gael - [ddau yn siarad ar unwaith - annealladwy] 369 00:30:18,790 --> 00:30:21,120 Iawn. Felly dyna wahân. 370 00:30:21,120 --> 00:30:26,800 >> A. Ffeil c dim ond angen i gynnwys swyddogaethau. 371 00:30:26,800 --> 00:30:32,400 Gallwch lunio ffeil i mewn i god peiriant, deuaidd, beth bynnag, 372 00:30:32,400 --> 00:30:36,620 heb iddo fod yn gweithredadwy eto. 373 00:30:36,620 --> 00:30:39,420 Rhaid i gweithredadwy dilys yn cael prif swyddogaeth. 374 00:30:39,420 --> 00:30:45,460 Gallwch ysgrifennu 100 swyddogaethau mewn 1 ffeil ond dim prif 375 00:30:45,460 --> 00:30:48,800 ac yna llunio bod i lawr i deuaidd, 376 00:30:48,800 --> 00:30:54,460 yna byddwch yn ysgrifennu ffeil arall mai dim ond wedi prif, ond mae'n galw criw o swyddogaethau hyn 377 00:30:54,460 --> 00:30:56,720 yn y ffeil ddeuaidd dros yma. 378 00:30:56,720 --> 00:31:01,240 Ac felly pan fyddwch yn gwneud y cyflawnadwy, dyna beth y linker yn 379 00:31:01,240 --> 00:31:05,960 mae'n cyfuno'r 2 ffeil deuaidd i mewn i gweithredadwy. 380 00:31:05,960 --> 00:31:11,400 Felly, nid a. Ffeil c oes angen i chi gael brif swyddogaeth o gwbl. 381 00:31:11,400 --> 00:31:19,220 Ac ar seiliau cod mawr byddwch yn gweld miloedd o. Ffeiliau c ac 1 brif ffeil. 382 00:31:23,960 --> 00:31:26,110 Mwy o gwestiynau? 383 00:31:29,310 --> 00:31:31,940 [Myfyrwyr] Roedd cwestiwn arall. 384 00:31:31,940 --> 00:31:36,710 Dywedodd gwneud yn compiler. Gwir neu Gau? 385 00:31:36,710 --> 00:31:42,030 Ac mae'r ateb yn anghywir, ac yr wyf yn deall pam nad yw'n debyg Clang. 386 00:31:42,030 --> 00:31:44,770 Ond beth ydym yn galw wneud os nad yw'n? 387 00:31:44,770 --> 00:31:49,990 Gwnewch yn y bôn yn unig - gallaf weld yn union beth y mae'n ei alw. 388 00:31:49,990 --> 00:31:52,410 Ond mae'n jyst yn rhedeg gorchmynion. 389 00:31:53,650 --> 00:31:55,650 Gwneud. 390 00:31:58,240 --> 00:32:00,870 Gallaf dynnu hyn i fyny. Yeah. 391 00:32:10,110 --> 00:32:13,180 Oh, yeah. Gwnewch hefyd yn gwneud hynny. 392 00:32:13,180 --> 00:32:17,170 Mae hon yn dweud pwrpas y cyfleustodau wneuthuriad yw penderfynu yn awtomatig 393 00:32:17,170 --> 00:32:19,610 pa ddarnau o raglen fawr angen recompiled 394 00:32:19,610 --> 00:32:22,350 a chyhoeddi'r gorchmynion i ail-grynhoi eu cyfer. 395 00:32:22,350 --> 00:32:27,690 Gallwch wneud wneud ffeiliau sydd yn wirioneddol enfawr. 396 00:32:27,690 --> 00:32:33,210 Gwnewch yn edrych ar y stampiau amser ffeil ac, fel y dywedasom o'r blaen, 397 00:32:33,210 --> 00:32:36,930 gallwch lunio ffeiliau unigol i lawr, ac nid yw'n nes i chi gyrraedd y linker 398 00:32:36,930 --> 00:32:39,270 eu bod yn rhoi at ei gilydd i mewn i gweithredadwy. 399 00:32:39,270 --> 00:32:43,810 Felly, os oes gennych 10 ffeil gwahanol ac rydych yn gwneud newid i 1 ohonynt, 400 00:32:43,810 --> 00:32:47,870 yna beth gwneuthuriad yn mynd at gwna ydy jyst ail-grynhoi bod 1 ffeil 401 00:32:47,870 --> 00:32:50,640 ac yna relink phopeth at ei gilydd. 402 00:32:50,640 --> 00:32:53,020 Ond mae'n llawer dumber na hynny. 403 00:32:53,020 --> 00:32:55,690 Mae i fyny i chi i llwyr ddiffinio hynny dyna beth y dylai ei wneud. 404 00:32:55,690 --> 00:32:59,560 Mae yn ddiofyn y gallu i gydnabod yr amser hwn pethau stamp, 405 00:32:59,560 --> 00:33:03,220 ond gallwch ysgrifennu ffeil gwneuthuriad i wneud unrhyw beth. 406 00:33:03,220 --> 00:33:09,150 Gallwch ysgrifennu a gwneud ffeil felly pan fyddwch yn teipio ei wneud yn unig cd i rywun arall cyfeiriadur. 407 00:33:09,150 --> 00:33:15,560 Roeddwn yn cael rhwystredig oherwydd popeth tac I tu mewn fy Offer 408 00:33:15,560 --> 00:33:21,740 ac yna rwy'n edrych ar y PDF gan y Mac. 409 00:33:21,740 --> 00:33:30,720 >> Felly, yr wyf yn mynd i Finder a gallaf ddim Ewch, Cysylltu â Server, 410 00:33:30,720 --> 00:33:36,950 a 'r gweinyddwr yr wyf yn cysylltu i yw fy Appliance, ac yna byddaf yn agor i fyny' r PDF 411 00:33:36,950 --> 00:33:40,190 sy'n cael ei llunio gan LaTeX. 412 00:33:40,190 --> 00:33:49,320 Ond yr wyf yn cael rhwystredig oherwydd bob tro roedd angen i mi adfywio'r PDF, 413 00:33:49,320 --> 00:33:53,900 Roedd rhaid i mi anfon copi ohono at gyfeirlyfr penodol y gallai cael mynediad 414 00:33:53,900 --> 00:33:57,710 ac yn mynd yn blino. 415 00:33:57,710 --> 00:34:02,650 Felly, yn lle hynny ysgrifennais, ffeil gwneuthuriad sy'n rhaid i chi ddiffinio sut y mae'n gwneud pethau. 416 00:34:02,650 --> 00:34:06,130 Sut gallwch chi wneud yn hyn yw PDF LaTeX. 417 00:34:06,130 --> 00:34:10,090 Yn union fel unrhyw ffeil wneuthuriad arall - neu mae'n debyg nad ydych wedi gweld y ffeiliau gwneuthuriad, 418 00:34:10,090 --> 00:34:13,510 ond mae gennym yn y Cyfarpar ffeil wneuthuriad byd-eang mai dim ond dweud, 419 00:34:13,510 --> 00:34:16,679 os ydych yn llunio ffeil C, defnyddiwch Clang. 420 00:34:16,679 --> 00:34:20,960 Ac felly dyma yn fy ffeil gwneuthuriad fy mod yn gwneud wyf yn dweud, 421 00:34:20,960 --> 00:34:25,020 y ffeil rydych yn mynd i eisiau i lunio gyda dogfennau PDF LaTeX. 422 00:34:25,020 --> 00:34:27,889 Ac felly mae'n LaTeX PDF sydd wedi gwneud y casglu. 423 00:34:27,889 --> 00:34:31,880 Ni Gwnewch yn llunio. Mae'n dim ond rhedeg y gorchmynion yn y dilyniant I a nodir. 424 00:34:31,880 --> 00:34:36,110 Felly, mae'n rhedeg PDF LaTeX, mae'n copïau i'r cyfeiriadur rwyf am iddynt gael eu copïo i, 425 00:34:36,110 --> 00:34:38,270 ei cd at y cyfeiriadur a gwneud pethau eraill, 426 00:34:38,270 --> 00:34:42,380 ond y cyfan mae'n ei wneud yn cael ei adnabod pan fydd newidiadau ffeil, 427 00:34:42,380 --> 00:34:45,489 ac os yn newid, yna bydd yn rhedeg y gorchmynion ei fod yn fod i redeg 428 00:34:45,489 --> 00:34:48,760 pan fydd y newidiadau ffeil. >> [Myfyrwyr] Iawn. 429 00:34:50,510 --> 00:34:54,420 Nid wyf yn gwybod lle mae'r ffeiliau wneuthuriad byd-eang i mi edrych arni. 430 00:34:57,210 --> 00:35:04,290 Cwestiynau eraill? Unrhyw beth o'r gorffennol cwisiau? Unrhyw pethau pwyntydd? 431 00:35:06,200 --> 00:35:08,730 Mae yna bethau cynnil gyda awgrymiadau fel - 432 00:35:08,730 --> 00:35:10,220 Dydw i ddim yn mynd i fod yn gallu dod o hyd i gwestiwn cwis arno - 433 00:35:10,220 --> 00:35:16,250 ond yn union fel y math hwn o beth. 434 00:35:19,680 --> 00:35:24,060 Gwnewch yn siŵr eich bod yn deall bod pan fyddaf yn dweud int * x * y - 435 00:35:24,890 --> 00:35:28,130 Nid yw hyn yn union beth yma, yr wyf yn dyfalu. 436 00:35:28,130 --> 00:35:32,140 Ond fel * x * y, y rhai yna 2 newidynnau sydd ar y pentwr. 437 00:35:32,140 --> 00:35:37,220 Pan fyddaf yn dweud x = malloc (sizeof (canolradd)), x yn dal i fod yn amrywiol ar y simnai, 438 00:35:37,220 --> 00:35:41,180 malloc rhywfaint bloc drosodd yn y domen, ac rydym yn cael x pwynt i'r domen. 439 00:35:41,180 --> 00:35:43,900 >> Felly rhywbeth ar y pwyntiau pentwr at y domen. 440 00:35:43,900 --> 00:35:48,100 Pryd bynnag y byddwch malloc unrhyw beth, rydych yn anochel storio tu mewn pwyntydd. 441 00:35:48,100 --> 00:35:55,940 Er mwyn i pwyntydd ar y simnai, y bloc malloced ar y domen. 442 00:35:55,940 --> 00:36:01,240 Mae llawer o bobl yn cael ddryslyd a dweud int * x = malloc; x ar y domen. 443 00:36:01,240 --> 00:36:04,100 Rhif Beth x cyfeirio at ar y domen. 444 00:36:04,100 --> 00:36:08,540 x ei hun ar y pentwr, oni bai am ba bynnag reswm yr ydych wedi x fod yn newidyn byd-eang, 445 00:36:08,540 --> 00:36:11,960 ac yn yr achos mae'n digwydd i fod mewn rhanbarth arall o gof. 446 00:36:13,450 --> 00:36:20,820 Felly gadw trac, y diagramau hyn blwch a saeth yn eithaf cyffredin ar gyfer y cwis. 447 00:36:20,820 --> 00:36:25,740 Neu os nad yw ar gwis 0, bydd ar cwis 1. 448 00:36:27,570 --> 00:36:31,940 Dylech wybod pob un o'r rhain, y camau wrth lunio 449 00:36:31,940 --> 00:36:35,740 ers i chi yn gorfod ateb cwestiynau ar hynny. Ydw. 450 00:36:35,740 --> 00:36:38,940 [Myfyrwyr] A gawn ni fynd dros y camau hynny - >> Cadarn. 451 00:36:48,340 --> 00:36:58,640 Cyn i gamau a llunio gennym preprocessing, 452 00:36:58,640 --> 00:37:16,750 lunio, cydosod, a chysylltu. 453 00:37:16,750 --> 00:37:21,480 Preprocessing. Beth mae hynny'n ei wneud? 454 00:37:29,720 --> 00:37:32,290 Dyma'r cam hawsaf yn - wel, nid fel - 455 00:37:32,290 --> 00:37:35,770 nid yw hynny'n golygu y dylai fod yn amlwg, ond ei fod yn y cam hawsaf. 456 00:37:35,770 --> 00:37:38,410 Gallech guys roi ar waith eich hunain. Yeah. 457 00:37:38,410 --> 00:37:43,410 [Myfyrwyr] Cymerwch yr hyn sydd gennych yn eich cynnwys fel hyn, ac mae'n copïau ac yna hefyd yn diffinio. 458 00:37:43,410 --> 00:37:49,250 Mae'n edrych am bethau fel # # yn cynnwys ac yn diffinio, 459 00:37:49,250 --> 00:37:53,800 a 'i jyst gopïau a pastau beth oedd y gwirionedd yn ei olygu. 460 00:37:53,800 --> 00:37:59,240 Felly, pan fyddwch yn dweud # cynnwys cs50.h, mae'r Preprocessor yn copïo a gludo cs50.h 461 00:37:59,240 --> 00:38:01,030 i mewn i'r llinell. 462 00:38:01,030 --> 00:38:06,640 Pan fyddwch yn dweud # diffinio x i fod yn 4, mae'r Preprocessor yn mynd drwy'r rhaglen gyfan 463 00:38:06,640 --> 00:38:10,400 ac mae'n disodli pob achos o x gyda 4. 464 00:38:10,400 --> 00:38:17,530 Felly mae'r Preprocessor yn cymryd ffeil C dilys ac allbynnu ffeil C dilys 465 00:38:17,530 --> 00:38:20,300 lle mae pethau wedi cael eu copïo a gludo. 466 00:38:20,300 --> 00:38:24,230 Felly nawr llunio. Beth mae hynny'n ei wneud? 467 00:38:25,940 --> 00:38:28,210 [Myfyrwyr] Mae'n mynd o C i deuaidd. 468 00:38:28,210 --> 00:38:30,970 >> [Bowden] Nid yw'n mynd yr holl ffordd i deuaidd. 469 00:38:30,970 --> 00:38:34,220 [Myfyrwyr] I cod peiriant wedyn yn? >> Dyw hi ddim yn god peiriant. 470 00:38:34,220 --> 00:38:35,700 [Myfyrwyr] Cynulliad? >> Cynulliad. 471 00:38:35,700 --> 00:38:38,890 Mae'n mynd i'r Cynulliad cyn iddo fynd yr holl ffordd i C cod, 472 00:38:38,890 --> 00:38:45,010 ac ieithoedd y rhan fwyaf yn gwneud rhywbeth fel hyn. 473 00:38:47,740 --> 00:38:50,590 Dewiswch unrhyw iaith lefel uchel, ac os ydych chi'n mynd i lunio ei, 474 00:38:50,590 --> 00:38:52,390 mae'n debygol o lunio mewn camau. 475 00:38:52,390 --> 00:38:58,140 Yn gyntaf mae'n mynd i lunio Python i C, yna mae'n mynd i lunio C i'r Cynulliad, 476 00:38:58,140 --> 00:39:01,600 ac yna y Cynulliad yn mynd i gael gyfieithu i deuaidd. 477 00:39:01,600 --> 00:39:07,800 Felly gasglu yn mynd i ddod ag ef o C i'r Cynulliad. 478 00:39:07,800 --> 00:39:12,130 Mae'r gair llunio fel arfer yn golygu dod â hi o lefel uwch 479 00:39:12,130 --> 00:39:14,340 i iaith raglennu lefel is. 480 00:39:14,340 --> 00:39:19,190 Felly, mae hyn yw'r cam yn unig yn casglu lle rydych yn dechrau gyda iaith lefel uchel 481 00:39:19,190 --> 00:39:23,270 a darfod i fyny mewn iaith lefel isel, a dyna pam y cam yn cael ei alw casglu. 482 00:39:25,280 --> 00:39:33,370 [Myfyrwyr] Yn ystod lunio, gadewch i ni ddweud eich bod wedi gwneud # gynnwys cs50.h. 483 00:39:33,370 --> 00:39:42,190 A fydd y ail-grynhoi compiler y cs50.h, fel y swyddogaethau sydd yno, 484 00:39:42,190 --> 00:39:45,280 a throi hynny'n cod Cynulliad yn ogystal, 485 00:39:45,280 --> 00:39:50,830 neu a fydd yn copïo a gludo rhywbeth sydd wedi bod cyn-Cynulliad? 486 00:39:50,830 --> 00:39:56,910 Bydd cs50.h byth yn 'n bert lawer yn y pen draw yn y Cynulliad. 487 00:39:59,740 --> 00:40:03,680 Stwff fel prototeipiau swyddogaeth a phethau yn unig i chi fod yn ofalus. 488 00:40:03,680 --> 00:40:09,270 Mae'n gwarantu y gall y casglwr wirio pethau fel eich bod yn galw swyddogaethau 489 00:40:09,270 --> 00:40:12,910 â'r mathau dychwelyd cywir a'r dadleuon cywir a stwff. 490 00:40:12,910 --> 00:40:18,350 >> Felly, bydd yn cael ei cs50.h preprocessed i mewn i'r ffeil, ac yna pan mae'n llunio 491 00:40:18,350 --> 00:40:22,310 mae'n ei daflu i ffwrdd ar ôl yn y bôn mae'n gwneud yn siŵr bod popeth yn cael ei alw yn gywir. 492 00:40:22,310 --> 00:40:29,410 Ond mae'r swyddogaethau a ddiffinnir yn y llyfrgell CS50, sydd ar wahân cs50.h, 493 00:40:29,410 --> 00:40:33,610 Ni fydd y rhai cael eu llunio ar wahân. 494 00:40:33,610 --> 00:40:37,270 Bydd hynny mewn gwirionedd yn dod i lawr yn y cam gysylltu, felly byddwn yn dod i hynny mewn eiliad. 495 00:40:37,270 --> 00:40:40,100 Ond yn gyntaf, beth sy'n cydosod? 496 00:40:41,850 --> 00:40:44,500 [Myfyrwyr] Cynulliad i deuaidd? >> Yeah. 497 00:40:46,300 --> 00:40:48,190 Cydosod. 498 00:40:48,190 --> 00:40:54,710 Nid ydym yn galw ei llunio gan y Cynulliad yn 'n bert lawer yn gyfieithiad pur o deuaidd. 499 00:40:54,710 --> 00:41:00,230 Nid oes rhesymeg ychydig iawn o fynd o Cynulliad i deuaidd. 500 00:41:00,230 --> 00:41:03,180 Mae'n union fel edrych i fyny mewn tabl, oh, mae gennym cyfarwyddyd hwn; 501 00:41:03,180 --> 00:41:06,290 sy'n cyfateb i 01,110 deuaidd. 502 00:41:10,200 --> 00:41:15,230 Ac felly y ffeiliau sydd gydosod yn gyffredinol allbynnau. Ffeiliau o. 503 00:41:15,230 --> 00:41:19,020 Ac. Ffeiliau o yn yr hyn yr oeddem yn dweud o'r blaen, 504 00:41:19,020 --> 00:41:21,570 sut i beidio ffeil oes angen i chi gael prif swyddogaeth. 505 00:41:21,570 --> 00:41:27,640 Gall unrhyw ffeil yn cael ei llunio i lawr i. Ffeil o cyn belled ei fod yn ffeil C dilys. 506 00:41:27,640 --> 00:41:30,300 Gellir ei llunio i lawr i. O. 507 00:41:30,300 --> 00:41:43,030 Yn awr, gan gysylltu hyn mewn gwirionedd yn dod â chriw o. Ffeiliau o ac yn dod â nhw i weithredadwy. 508 00:41:43,030 --> 00:41:51,110 Ac felly beth gan gysylltu ei wneud yw y gall eich barn am y llyfrgell CS50 fel a. Ffeil o. 509 00:41:51,110 --> 00:41:56,980 Mae'n ffeil ddeuaidd a luniwyd eisoes. 510 00:41:56,980 --> 00:42:03,530 Ac felly pan fyddwch yn llunio eich ffeil, eich hello.c, sy'n galw GetString, 511 00:42:03,530 --> 00:42:06,360 hello.c yn cael ei llunio i lawr i hello.o, 512 00:42:06,360 --> 00:42:08,910 hello.o yn awr yn deuaidd. 513 00:42:08,910 --> 00:42:12,830 Mae'n defnyddio GetString, felly mae angen iddo fynd drosodd i cs50.o, 514 00:42:12,830 --> 00:42:16,390 a linker smooshes nhw at ei gilydd ac copïau GetString i mewn i'r ffeil 515 00:42:16,390 --> 00:42:20,640 ac yn dod allan gyda weithredadwy sydd holl swyddogaethau sydd ei angen. 516 00:42:20,640 --> 00:42:32,620 Felly, nid cs50.o mewn gwirionedd ffeil O, ond mae'n ddigon agos nad oes unrhyw wahaniaeth sylfaenol. 517 00:42:32,620 --> 00:42:36,880 Felly, dim ond cysylltu yn dod â criw o ffeiliau gyda'i gilydd 518 00:42:36,880 --> 00:42:41,390 hynny ar wahân yn cynnwys yr holl swyddogaethau angen i mi ddefnyddio 519 00:42:41,390 --> 00:42:46,120 ac yn creu gweithredadwy a fydd yn mewn gwirionedd yn rhedeg. 520 00:42:48,420 --> 00:42:50,780 >> Ac felly dyna hefyd beth yr oeddem yn ei ddweud cyn i 521 00:42:50,780 --> 00:42:55,970 lle gallwch gael 1000. ffeiliau c, byddwch llunio nhw i gyd i. ffeil o, 522 00:42:55,970 --> 00:43:00,040 a fydd yn ôl pob tebyg yn cymryd amser, yna byddwch yn newid 1. c ffeil. 523 00:43:00,040 --> 00:43:05,480 Dim ond angen i chi ail-grynhoi bod 1. File c ac yna relink popeth arall, 524 00:43:05,480 --> 00:43:07,690 cysylltu popeth yn ôl at ei gilydd. 525 00:43:09,580 --> 00:43:11,430 [Myfyrwyr] Pan fyddwn ni'n cysylltu byddwn yn ysgrifennu lcs50? 526 00:43:11,430 --> 00:43:20,510 Yeah, yr hyn a lcs50. Bod signalau faner at y linker y dylech fod yn cysylltu yn y llyfrgell. 527 00:43:26,680 --> 00:43:28,910 Cwestiynau? 528 00:43:41,310 --> 00:43:46,860 Ydyn ni wedi mynd dros deuaidd ar wahân i'r 5 eiliad yn y ddarlith gyntaf? 529 00:43:50,130 --> 00:43:53,010 Nid wyf yn credu hynny. 530 00:43:55,530 --> 00:43:58,820 Dylech wybod yr holl NO mawr y ein bod wedi mynd drosodd, 531 00:43:58,820 --> 00:44:02,670 a dylech fod yn gallu, pe baem yn rhoi swyddogaeth, 532 00:44:02,670 --> 00:44:09,410 dylech fod yn gallu dweud ei fod yn fawr O, yn fras. Neu yn dda, mawr O yn arw. 533 00:44:09,410 --> 00:44:15,300 Felly, os gwelwch yn nythu ar gyfer dolenni dolennu dros yr un nifer o bethau, 534 00:44:15,300 --> 00:44:22,260 fel int i, i > [myfyrwyr] n sgwâr. >> Mae'n tueddu i fod n sgwâr. 535 00:44:22,260 --> 00:44:25,280 Os ydych chi wedi nythu triphlyg, mae'n tueddu i fod n wedi'i dorri'n giwbiau. 536 00:44:25,280 --> 00:44:29,330 Felly, y math yna o beth dylech fod yn gallu eich cyfeirio ar unwaith. 537 00:44:29,330 --> 00:44:33,890 Mae angen i chi wybod fath mewnosod a didoli swigen ac uno math a phob un o'r rheiny. 538 00:44:33,890 --> 00:44:41,420 Mae'n haws deall pam eu bod yn rhai n sgwario a n n log a'r holl 539 00:44:41,420 --> 00:44:47,810 oherwydd fy mod yn meddwl nad oedd ar gwis un flwyddyn lle rydym yn y bôn yn rhoi i chi 540 00:44:47,810 --> 00:44:55,050 meddai gweithredu fath swigod a, "Beth yw'r amser rhedeg y swyddogaeth hon?" 541 00:44:55,050 --> 00:45:01,020 Felly, os ydych yn ei gydnabod fel math swigen, yna gallwch ddweud yn syth n sgwâr. 542 00:45:01,020 --> 00:45:05,470 Ond os ydych yn unig yn edrych arno, nid oes hyd yn oed angen i wireddu fath swigen ei; 543 00:45:05,470 --> 00:45:08,990 gallwch ddweud hyn yn unig yn gwneud hyn ac mae hyn. Mae hyn yn n sgwâr. 544 00:45:12,350 --> 00:45:14,710 [Myfyrwyr] A oes unrhyw enghreifftiau anodd y gallwch chi ddod o hyd i, 545 00:45:14,710 --> 00:45:20,370 fel syniad tebyg o figuring allan? 546 00:45:20,370 --> 00:45:24,450 >> Nid wyf yn meddwl y byddem yn rhoi i chi unrhyw enghreifftiau anodd. 547 00:45:24,450 --> 00:45:30,180 Mae'r swigen peth fath yn ymwneud mor anodd ag y byddem yn mynd, 548 00:45:30,180 --> 00:45:36,280 a hyd yn oed, cyn belled ag y byddwch yn deall eich bod yn ailadrodd dros y casgliad 549 00:45:36,280 --> 00:45:41,670 ar gyfer pob elfen yn yr amrywiaeth, sydd yn mynd i fod yn rhywbeth sydd wedi n sgwâr. 550 00:45:45,370 --> 00:45:49,940 Mae cwestiynau cyffredinol, fel dde yma gennym - Oh. 551 00:45:55,290 --> 00:45:58,530 Dim ond y diwrnod o'r blaen, Doug hawlio, "Rwyf wedi dyfeisio algorithm yn gallu didoli arae 552 00:45:58,530 --> 00:46:01,780 "O rifau n yn O (n log) amser!" 553 00:46:01,780 --> 00:46:04,900 Felly, sut rydym yn gwybod bod yn amhosibl? 554 00:46:04,900 --> 00:46:08,850 [Ymateb y myfyrwyr Anghlywadwy] >> Yeah. 555 00:46:08,850 --> 00:46:13,710 Ar y lleiaf, mae'n rhaid i chi gyffwrdd pob elfen yn yr amrywiaeth, 556 00:46:13,710 --> 00:46:16,210 felly mae'n amhosibl i ddatrys amrywiaeth o - 557 00:46:16,210 --> 00:46:20,850 Os popeth mewn trefn heb eu didoli, yna rydych chi'n mynd i fod yn cyffwrdd popeth yn yr amrywiaeth, 558 00:46:20,850 --> 00:46:25,320 felly mae'n amhosibl gwneud hynny mewn llai na O o n. 559 00:46:27,430 --> 00:46:30,340 [Myfyrwyr] Rydych yn dangos i ni yr enghraifft honno o fod yn gallu gwneud hynny mewn O o n 560 00:46:30,340 --> 00:46:33,920 os ydych yn defnyddio llawer o gof. >> Yeah. 561 00:46:33,920 --> 00:46:37,970 Ac that's - yr wyf yn anghofio yr hyn that's - A yw'n cyfrif fath? 562 00:46:47,360 --> 00:46:51,330 Hmm. Mae hynny'n algorithm didoli cyfanrif. 563 00:46:59,850 --> 00:47:05,100 Roeddwn yn chwilio am yr enw arbennig ar gyfer hyn na allwn i gofio yr wythnos diwethaf. 564 00:47:05,100 --> 00:47:13,000 Yeah. Mae'r rhain yn y mathau o fath a all gyflawni pethau yn fawr O n. 565 00:47:13,000 --> 00:47:18,430 Ond mae yna gyfyngiadau, fel y gallwch ond defnyddio cyfanrifau hyd at nifer penodol. 566 00:47:20,870 --> 00:47:24,560 Byd Gwaith os ydych chi'n ceisio datrys that's rhywbeth - 567 00:47:24,560 --> 00:47:30,750 Os yw eich amrywiaeth yn 012, -12, 151, 4 miliwn, 568 00:47:30,750 --> 00:47:35,120 yna un elfen yn mynd yn llwyr ddifetha didoli cyfan. 569 00:47:42,060 --> 00:47:44,030 >> Cwestiynau? 570 00:47:49,480 --> 00:47:58,870 [Myfyrwyr] Os oes gennych swyddogaeth recursive a 'i jyst yn gwneud y galwadau recursive 571 00:47:58,870 --> 00:48:02,230 mewn datganiad dychwelyd, dyna gynffon recursive, 572 00:48:02,230 --> 00:48:07,360 ac na fyddai'n er mwyn defnyddio mwy o gof ystod runtime 573 00:48:07,360 --> 00:48:12,550 neu byddai o leiaf yn defnyddio cof tebyg fel ailadroddol ateb? 574 00:48:12,550 --> 00:48:14,530 [Bowden] Ydw. 575 00:48:14,530 --> 00:48:19,840 Byddai'n debygol o fod ychydig yn arafach, ond nid mewn gwirionedd. 576 00:48:19,840 --> 00:48:23,290 Tail recursive yn eithaf da. 577 00:48:23,290 --> 00:48:32,640 Edrych eto ar fframiau simnai, gadewch i ni ddweud ein bod yn brif 578 00:48:32,640 --> 00:48:42,920 ac mae gennym bar int (int x) neu rywbeth. 579 00:48:42,920 --> 00:48:52,310 Nid yw hon yn swyddogaeth recursive berffaith, ond bar dychwelyd (x - 1). 580 00:48:52,310 --> 00:48:57,620 Felly, yn amlwg, mae hyn yn ddiffygiol. Mae angen sylfaen o achosion a stwff. 581 00:48:57,620 --> 00:49:00,360 Ond mae'r syniad yma yw bod hyn yn gynffon recursive, 582 00:49:00,360 --> 00:49:06,020 sy'n golygu pan fydd bar galwadau brif mae'n mynd i gael ei ffrâm pentwr. 583 00:49:09,550 --> 00:49:12,440 Yn y ffrâm pentwr mae mynd i fod yn faen ychydig o gof 584 00:49:12,440 --> 00:49:17,490 sy'n cyfateb i'w x ddadl. 585 00:49:17,490 --> 00:49:25,840 Ac felly gadewch i ni ddweud prif digwydd i alw bar (100); 586 00:49:25,840 --> 00:49:30,050 Felly x yn mynd i ddechrau allan fel 100. 587 00:49:30,050 --> 00:49:35,660 Os yw'r compiler yn cydnabod bod hyn yn swyddogaeth recursive chynffon, 588 00:49:35,660 --> 00:49:38,540 yna pan fydd bar yn gwneud ei alwad recursive i'r bar, 589 00:49:38,540 --> 00:49:45,490 yn hytrach na gwneud ffrâm pentwr newydd, sef lle y pentwr yn dechrau tyfu i raddau helaeth, 590 00:49:45,490 --> 00:49:48,220 yn y pen draw bydd yn rhedeg i mewn i'r domen, ac yna byddwch yn cael segfaults 591 00:49:48,220 --> 00:49:51,590 oherwydd cof yn dechrau gwrthdaro. 592 00:49:51,590 --> 00:49:54,830 >> Felly yn hytrach na gwneud ei ffrâm stac ei hun, gall sylweddoli, 593 00:49:54,830 --> 00:49:59,080 hey byth, Fi 'n sylweddol angen i ddod yn ôl at y ffrâm pentwr, 594 00:49:59,080 --> 00:50:08,040 felly yn lle 'n annhymerus' dim ond lle y ddadl hon gyda 99 ac yna'n dechrau bar i gyd drosodd. 595 00:50:08,040 --> 00:50:11,810 Ac yna bydd yn gwneud hynny eto a bydd yn cyrraedd bar dychwelyd (x - 1), 596 00:50:11,810 --> 00:50:17,320 ac yn hytrach na gwneud ffrâm pentwr newydd, bydd yn dim ond lle ei ddadl ar hyn o bryd gyda 98 597 00:50:17,320 --> 00:50:20,740 ac yna'n neidio yn ôl i'r cychwyn cyntaf bar. 598 00:50:23,860 --> 00:50:30,430 Y gweithrediadau hynny, gan ddisodli y gwerth 1 ar y pentwr a neidio yn ôl i'r dechrau, 599 00:50:30,430 --> 00:50:32,430 yn eithaf effeithlon. 600 00:50:32,430 --> 00:50:41,500 Felly, nid yn unig dyma'r chof chynefod un fel swyddogaeth ar wahân sy'n cael ei ailadroddol 601 00:50:41,500 --> 00:50:45,390 oherwydd eich bod dim ond defnyddio 1 ffrâm pentwr, ond nid ydych yn dioddef anfanteision 602 00:50:45,390 --> 00:50:47,240 o orfod galw swyddogaethau. 603 00:50:47,240 --> 00:50:50,240 Gall swyddogaethau Galw fod braidd yn ddrud oherwydd ei fod wedi gwneud hyn i gyd setup 604 00:50:50,240 --> 00:50:52,470 a teardown a'r holl bethau hyn. 605 00:50:52,470 --> 00:50:58,160 Felly, mae hyn dychweliad gynffon yn dda. 606 00:50:58,160 --> 00:51:01,170 [Myfyrwyr] Pam nad yw hyn yn creu grisiau newydd? 607 00:51:01,170 --> 00:51:02,980 Oherwydd ei fod yn sylweddoli nad oes angen i. 608 00:51:02,980 --> 00:51:07,800 Mae'r alwad i bar yn unig yw dychwelyd yr alwad ailadroddus. 609 00:51:07,800 --> 00:51:12,220 Felly nid oes angen gwneud unrhyw beth gyda'r gwerth dychwelyd. 610 00:51:12,220 --> 00:51:15,120 Mae'n dim ond yn mynd ar unwaith ddychwelyd. 611 00:51:15,120 --> 00:51:20,530 Felly, mae'n dim ond yn mynd i gymryd lle ei ddadl ei hun ac yn dechrau drosodd. 612 00:51:20,530 --> 00:51:25,780 A hefyd, os nad oes gennych y fersiwn recursive gynffon, 613 00:51:25,780 --> 00:51:31,460 yna byddwch yn cael yr holl fariau lle pan fydd hyn yn bar dychwelyd 614 00:51:31,460 --> 00:51:36,010 mae'n rhaid iddo ddychwelyd ei werth i hwn, yna bar ar unwaith dychwelyd 615 00:51:36,010 --> 00:51:39,620 ac yn dychwelyd ei werth i hwn, yna mae'n dim ond yn mynd ar unwaith dychwelyd 616 00:51:39,620 --> 00:51:41,350 a dychwelyd ei werth i hwn. 617 00:51:41,350 --> 00:51:45,350 Felly, rydych yn arbed y popping yr holl bethau hyn oddi ar y pentwr 618 00:51:45,350 --> 00:51:48,730 ers y gwerth dychwelyd yn unig yn mynd i gael eu trosglwyddo holl ffordd yn ôl i fyny beth bynnag. 619 00:51:48,730 --> 00:51:55,400 Felly pam na dim ond lle ein dadl gyda'r ddadl diweddaru ac yn dechrau drosodd? 620 00:51:57,460 --> 00:52:01,150 Os nad yw'r swyddogaeth yn gynffon recursive, os ydych yn gwneud rhywbeth fel - 621 00:52:01,150 --> 00:52:07,530 [Myfyrwyr] os bar (x + 1). >> Yeah. 622 00:52:07,530 --> 00:52:11,770 >> Felly, os ydych yn ei roi mewn cyflwr, yna rydych chi'n gwneud rhywbeth gyda'r gwerth dychwelyd. 623 00:52:11,770 --> 00:52:16,260 Neu hyd yn oed os ydych yn unig yn gwneud dychwelyd 2 * bar (x - 1). 624 00:52:16,260 --> 00:52:23,560 Felly nawr bar (x - 1) mae angen i ddychwelyd er mwyn iddo i gyfrifo 2 gwaith sy'n gwerthfawrogi, 625 00:52:23,560 --> 00:52:26,140 felly, yn awr oes angen ei ffrâm pentwr ar wahân ei hun, 626 00:52:26,140 --> 00:52:31,180 ac yn awr, dim ots pa mor galed rydych yn ceisio, rydych yn mynd i angen i - 627 00:52:31,180 --> 00:52:34,410 Nid yw hyn yn gynffon ailadroddus. 628 00:52:34,410 --> 00:52:37,590 [Myfyrwyr] A fyddwn i'n ceisio dod â dychweliad i anelu am dychweliad gynffon - 629 00:52:37,590 --> 00:52:41,450 [Bowden] Mewn byd delfrydol, ond yn CS50 nid oes rhaid i chi. 630 00:52:43,780 --> 00:52:49,280 Er mwyn cael dychweliad gynffon, yn gyffredinol, ydych yn sefydlu dadl ychwanegol 631 00:52:49,280 --> 00:52:53,550 lle bydd bar yn cymryd x int yn y 632 00:52:53,550 --> 00:52:56,990 ac y cyfateb at y peth yn y pen draw eich bod am ddychwelyd. 633 00:52:56,990 --> 00:53:03,650 Felly, yna mae hyn rydych yn mynd i gael eu dychwelyd bar (x - 1), 2 * y. 634 00:53:03,650 --> 00:53:09,810 Felly dyna dim ond lefel uchel sut yr ydych yn trawsnewid pethau i fod yn gynffon ailadroddus. 635 00:53:09,810 --> 00:53:13,790 Ond mae'r ddadl ychwanegol - 636 00:53:13,790 --> 00:53:17,410 Ac yna yn y diwedd pan fyddwch yn cyrraedd eich achos sylfaenol, 'ch jyst yn dychwelyd y 637 00:53:17,410 --> 00:53:22,740 oherwydd eich bod wedi bod yn cronni yr amser cyfan y gwerth dychwelyd yr ydych ei eisiau. 638 00:53:22,740 --> 00:53:27,280 Rydych fath o wedi bod yn gwneud hyn iteraidd ond gan ddefnyddio galwadau recursive. 639 00:53:32,510 --> 00:53:34,900 Cwestiynau? 640 00:53:34,900 --> 00:53:39,890 [Myfyrwyr] Efallai am rhifyddeg pwyntydd, megis wrth ddefnyddio llinynnau. >> Cadarn. 641 00:53:39,890 --> 00:53:43,610 Rhifyddeg Pointer. 642 00:53:43,610 --> 00:53:48,440 Wrth ddefnyddio llinynnau mae'n hawdd oherwydd bod llinynnau yn sêr torgoch, 643 00:53:48,440 --> 00:53:51,860 chars yn am byth a bob amser yn beit unigol, 644 00:53:51,860 --> 00:53:57,540 ac felly rhifyddeg pwyntydd yn cyfateb i rhifyddeg rheolaidd pan fyddwch yn delio â llinynnau. 645 00:53:57,540 --> 00:54:08,790 Gadewch i 'jyst dweud torgoch * s = "helo". 646 00:54:08,790 --> 00:54:11,430 Felly mae gennym bloc mewn cof. 647 00:54:19,490 --> 00:54:22,380 Mae angen 6 bytes oherwydd eich bod bob amser angen y terminator null. 648 00:54:22,380 --> 00:54:28,620 Ac cols * s yn mynd i gyfeirio at ddechrau'r casgliad. 649 00:54:28,620 --> 00:54:32,830 Felly s pwyntiau yno. 650 00:54:32,830 --> 00:54:36,710 Yn awr, mae hyn yn y bôn sut y bydd unrhyw amrywiaeth yn gweithio, 651 00:54:36,710 --> 00:54:40,780 p'un a oedd yn dychwelyd yn ôl malloc neu a yw ar y pentwr. 652 00:54:40,780 --> 00:54:47,110 Mae unrhyw amrywiaeth yn y bôn yn pwyntydd i ddechrau'r array, 653 00:54:47,110 --> 00:54:53,640 ac yna unrhyw, gweithredu array unrhyw mynegeio, yn unig yn mynd i mewn i'r amrywiaeth yn benodol gwrthbwyso. 654 00:54:53,640 --> 00:55:05,360 >> Felly, pan fyddaf yn dweud rhywbeth fel s [3]; mae hyn yn mynd i s a chyfrif 3 chars mewn 655 00:55:05,360 --> 00:55:12,490 Felly s [3], mae gennym 0, 1, 2, 3, felly s [3] yn mynd i gyfeirio at y l. 656 00:55:12,490 --> 00:55:20,460 [Myfyrwyr] A gallem gyrraedd yr un gwerth drwy wneud s + 3 ac yna cromfachau seren? 657 00:55:20,460 --> 00:55:22,570 Ydw. 658 00:55:22,570 --> 00:55:26,010 Mae hyn yn cyfateb i * (s + 3); 659 00:55:26,010 --> 00:55:31,240 ac mae hynny'n am byth a bob amser yn cyfateb ni waeth beth ydych yn ei wneud. 660 00:55:31,240 --> 00:55:34,070 Dydych chi byth yn angen i chi ddefnyddio'r gystrawen braced. 661 00:55:34,070 --> 00:55:37,770 Gallwch bob amser ddefnyddio'r * (s + 3) cystrawen. 662 00:55:37,770 --> 00:55:40,180 Mae pobl yn tueddu i hoffi gystrawen braced, er. 663 00:55:40,180 --> 00:55:43,860 [Myfyrwyr] Felly yr holl araeau mewn gwirionedd dim ond awgrymiadau. 664 00:55:43,860 --> 00:55:53,630 Mae gwahaniaeth bychan pan fyddaf yn dweud int x [4]; >> [myfyrwyr] yw hynny'n creu y cof? 665 00:55:53,630 --> 00:56:03,320 [Bowden] yw hynny'n mynd i greu 4 ints ar y simnai, felly 16 bytes cyffredinol. 666 00:56:03,320 --> 00:56:05,700 Mae'n mynd i greu 16 bytes ar y pentwr. 667 00:56:05,700 --> 00:56:09,190 Nid yw x yn cael ei storio yn unrhyw le. 668 00:56:09,190 --> 00:56:13,420 Mae'n yn unig yw symbol cyfeirio at ddechrau'r peth. 669 00:56:13,420 --> 00:56:17,680 Oherwydd eich bod yn datgan yr amrywiaeth y tu mewn swyddogaeth hon, 670 00:56:17,680 --> 00:56:22,340 hyn y mae'r compiler yn mynd i'w wneud yn unig yw disodli pob enghraifft o newidyn y x 671 00:56:22,340 --> 00:56:26,400 â lle y digwyddodd i ddewis i roi'r rhain 16 bytes. 672 00:56:26,400 --> 00:56:30,040 Ni all wneud hynny gyda char * s am ei fod ef yn pwyntydd gwirioneddol. 673 00:56:30,040 --> 00:56:32,380 Mae'n rhad ac am ddim, yna bwyntio at bethau eraill. 674 00:56:32,380 --> 00:56:36,140 x yn gysonyn. Ni allwch gael pwynt i amrywiaeth gwahanol. >> [Myfyrwyr] Iawn. 675 00:56:36,140 --> 00:56:43,420 Ond y syniad hwn, y mynegeio, yr un fath ni waeth a yw'n amrywiaeth traddodiadol 676 00:56:43,420 --> 00:56:48,230 neu os yw'n pwyntydd i rywbeth neu os yw'n pwyntydd i amrywiaeth malloced. 677 00:56:48,230 --> 00:56:59,770 Ac yn wir, mae mor cyfatebol fod hynny hefyd yn yr un peth. 678 00:56:59,770 --> 00:57:05,440 Mae'n mewn gwirionedd yn unig yn trosi beth sydd tu mewn i'r cromfachau a'r hyn sy'n weddill o'r cromfachau, 679 00:57:05,440 --> 00:57:07,970 ychwanegu nhw at ei gilydd, a dereferences. 680 00:57:07,970 --> 00:57:14,710 Felly, mae hyn yr un mor ddilys fel * (s + 3) neu s [3]. 681 00:57:16,210 --> 00:57:22,090 [Myfyrwyr] Allwch chi gael awgrymiadau pwyntio at 2-ddimensiwn araeau? 682 00:57:22,090 --> 00:57:27,380 >> Mae'n fwy anodd. Yn draddodiadol, dim. 683 00:57:27,380 --> 00:57:34,720 Mae amrywiaeth 2-ddimensiwn yn unig yw amrywiaeth 1-dimensiwn gyda rhai chystrawen cyfleus 684 00:57:34,720 --> 00:57:54,110 oherwydd pan fyddaf yn dweud int x [3] [3], mae hyn yn wir dim ond 1 amrywiaeth gyda 9 gwerthoedd. 685 00:57:55,500 --> 00:58:03,000 Ac felly pan fyddaf yn mynegai, y casglwr yn gwybod beth rwy'n ei olygu. 686 00:58:03,000 --> 00:58:13,090 Os wyf yn dweud x [1] [2], mae'n gwybod fy mod i eisiau mynd i'r ail reng, felly mae'n mynd i hepgor y 3 cyntaf, 687 00:58:13,090 --> 00:58:17,460 ac yna bydd yn awyddus yr ail beth yn hynny, felly mae'n mynd i gael y un. 688 00:58:17,460 --> 00:58:20,480 Ond mae'n dal i fod ychydig amrywiaeth un-dimensiwn. 689 00:58:20,480 --> 00:58:23,660 Ac felly os oeddwn i eisiau neilltuo pwyntydd i'r array, 690 00:58:23,660 --> 00:58:29,770 Byddwn yn dweud int * p = x; 691 00:58:29,770 --> 00:58:33,220 Mae'r math o x yn unig - 692 00:58:33,220 --> 00:58:38,280 Mae'n dweud math bras o x gan ei fod yn unig yw symbol ac nid yw'n newidyn go iawn, 693 00:58:38,280 --> 00:58:40,140 ond mae'n yn unig yw * int. 694 00:58:40,140 --> 00:58:44,840 x yn unig yw pwyntydd i ddechrau'r hyn. >> [Myfyrwyr] Iawn. 695 00:58:44,840 --> 00:58:52,560 Ac felly ni fyddaf yn gallu cael mynediad [1] [2]. 696 00:58:52,560 --> 00:58:58,370 Rwy'n credu bod cystrawen arbennig ar gyfer datgan pwyntydd, 697 00:58:58,370 --> 00:59:12,480 rhywbeth hurt fel int (* p [-. rhywbeth hollol chwerthinllyd Dydw i ddim hyd yn oed yn gwybod. 698 00:59:12,480 --> 00:59:17,090 Ond mae cystrawen ar gyfer datgan awgrymiadau tebyg â'i cromfachau a phethau. 699 00:59:17,090 --> 00:59:22,960 Efallai na fydd hyd yn oed yn gadael i chi wneud hynny. 700 00:59:22,960 --> 00:59:26,640 Gallwn edrych yn ôl ar rywbeth a fyddai'n dweud wrthyf y gwir. 701 00:59:26,640 --> 00:59:34,160 Byddaf yn edrych amdano yn ddiweddarach, os oes cystrawen ar gyfer pwynt. Ond ni fyddwch byth yn ei weld. 702 00:59:34,160 --> 00:59:39,670 A hyd yn oed y gystrawen mor hynafol, os ydych yn ei ddefnyddio, bydd pobl yn cael eu drysu. 703 00:59:39,670 --> 00:59:43,540 Araeau aml-ddimensiwn yn eithaf prin fel y mae. 704 00:59:43,540 --> 00:59:44,630 'N bert lawer - 705 00:59:44,630 --> 00:59:48,490 Wel, os ydych chi'n gwneud pethau matrics nid yw'n mynd i fod yn brin, 706 00:59:48,490 --> 00:59:56,730 ond yn C rydych yn anaml iawn yn mynd i fod yn defnyddio araeau aml-ddimensiwn. 707 00:59:57,630 --> 01:00:00,470 Yeah. >> [Myfyrwyr] Dewch i ddweud eich gael amrywiaeth hir iawn. 708 01:00:00,470 --> 01:00:03,900 >> Felly, er cof rhithwir, mae'n ymddangos i fod yn holl olynol, 709 01:00:03,900 --> 01:00:05,640 fel yr elfennau cywir nesaf at ei gilydd, 710 01:00:05,640 --> 01:00:08,770 ond yn y cof corfforol, a fyddai'n bosibl i hynny gael ei rannu i fyny? >> Ydy. 711 01:00:08,770 --> 01:00:16,860 Sut rhithwir yn gweithio cof ai dim ond gwahanu - 712 01:00:19,220 --> 01:00:24,860 Mae'r uned y dyraniad yn dudalen, sy'n tueddu i fod yn 4 cilobeit, 713 01:00:24,860 --> 01:00:29,680 ac felly pan fydd proses yn dweud, hey, yr wyf am ddefnyddio'r cof, 714 01:00:29,680 --> 01:00:35,970 y system weithredu yn mynd i ddyrannu it 4 cilobeit ar gyfer y bloc ychydig o gof. 715 01:00:35,970 --> 01:00:39,100 Hyd yn oed os ydych ond yn defnyddio ychydig o beit unigol yn y bloc cyfan y cof, 716 01:00:39,100 --> 01:00:42,850 y system weithredu yn mynd i roi y 4 llawn kilobytes. 717 01:00:42,850 --> 01:00:49,410 Felly beth mae hyn yn ei olygu yw y gallwn gael - gadewch i ni ddweud hyn yn fy pentwr. 718 01:00:49,410 --> 01:00:53,180 Gallai hyn stac yn cael eu gwahanu. Gallai fy stac yn megabeit a megabeit. 719 01:00:53,180 --> 01:00:55,020 Gallai fy pentwr fod yn enfawr. 720 01:00:55,020 --> 01:01:00,220 Ond mae'r pentwr ei hun i gael ei rannu i mewn i dudalennau unigol, 721 01:01:00,220 --> 01:01:09,010 ac os ydym yn edrych ar dros yma gadewch i ni ddweud hyn yw ein RAM, 722 01:01:09,010 --> 01:01:16,600 os oes gen i 2 gigabeit o RAM, mae hyn yw 0 gyfeiriad gwirioneddol fel y beit 0 o fy RAM, 723 01:01:16,600 --> 01:01:22,210 ac mae hyn yn 2 gigabeit yr holl ffordd i lawr yma. 724 01:01:22,210 --> 01:01:27,230 Felly efallai y dudalen hon yn cyfateb i'r bloc dros yma. 725 01:01:27,230 --> 01:01:29,400 Gall y dudalen hon yn cyfateb i'r bloc dros yma. 726 01:01:29,400 --> 01:01:31,560 Gallai hyn yn un yn cyfateb i hon dros yma. 727 01:01:31,560 --> 01:01:35,540 Felly mae'r system weithredu yn rhydd i aseinio cof corfforol 728 01:01:35,540 --> 01:01:39,320 i unrhyw dudalen unigol yn fympwyol. 729 01:01:39,320 --> 01:01:46,180 Ac mae hynny'n golygu, os y ffin yn digwydd i bob ochr arae, 730 01:01:46,180 --> 01:01:50,070 amrywiaeth yn digwydd i gael eu gadael o hyn ac i'r dde y gorchymyn hwn o dudalen, 731 01:01:50,070 --> 01:01:54,460 yna amrywiaeth yn mynd i gael ei rannu mewn cof corfforol. 732 01:01:54,460 --> 01:01:59,280 Ac yna pan fyddwch yn rhoi'r gorau iddi y rhaglen, pan fydd y broses yn dod i ben, 733 01:01:59,280 --> 01:02:05,690 hyn mapiadau cael eu dileu, ac yna mae'n rhad ac am ddim i ddefnyddio'r blociau bach ar gyfer pethau eraill. 734 01:02:14,730 --> 01:02:17,410 Mwy o gwestiynau? 735 01:02:17,410 --> 01:02:19,960 [Myfyrwyr] Y rhifyddeg pwyntydd. >> Oh yeah. 736 01:02:19,960 --> 01:02:28,410 Strings yn haws, ond yn edrych ar rywbeth fel ints, 737 01:02:28,410 --> 01:02:35,000 felly yn ôl i int x [4]; 738 01:02:35,000 --> 01:02:41,810 P'un a yw hyn yn amrywiaeth neu a yw'n pwyntydd i amrywiaeth malloced o 4 cyfanrifau, 739 01:02:41,810 --> 01:02:47,060 mae'n mynd i gael eu trin yn yr un ffordd. 740 01:02:50,590 --> 01:02:53,340 [Myfyrwyr] Felly, araeau ar y domen? 741 01:03:01,400 --> 01:03:05,270 Nid yw [Bowden] Arrays ar y domen. >> [Myfyrwyr] Oh. 742 01:03:05,270 --> 01:03:08,320 >> [Bowden] Mae'r math hwn o amrywiaeth yn tueddu i fod ar y simnai 743 01:03:08,320 --> 01:03:12,220 oni bai eich bod yn datgan ei fod - anwybyddu newidynnau byd-eang. Peidiwch â defnyddio newidynnau byd-eang. 744 01:03:12,220 --> 01:03:16,280 Y tu mewn swyddogaeth i'n dweud int x [4]; 745 01:03:16,280 --> 01:03:22,520 Mae'n mynd i greu bloc 4-cyfanrif ar y pentwr ar gyfer y casgliad. 746 01:03:22,520 --> 01:03:26,960 Ond mae hyn malloc (4 * sizeof (canolradd)); yn mynd i fynd ar y domen. 747 01:03:26,960 --> 01:03:31,870 Ond ar ôl y pwynt hwn gallaf ddefnyddio x a p yn 'n bert lawer yr un ffordd, 748 01:03:31,870 --> 01:03:36,140 ar wahân i'r eithriadau dywedais o'r blaen ynghylch y gallwch ail-neilltuo p. 749 01:03:36,140 --> 01:03:40,960 Yn dechnegol, mae eu maint ychydig yn wahanol, ond mae hynny'n gwbl amherthnasol. 750 01:03:40,960 --> 01:03:43,310 Dydych chi byth mewn gwirionedd yn defnyddio eu maint. 751 01:03:48,020 --> 01:03:56,810 Mae'r p gallwn ddweud p [3] = 2; neu x [3] = 2; 752 01:03:56,810 --> 01:03:59,680 Gallwch eu defnyddio yn union yr un ffyrdd. 753 01:03:59,680 --> 01:04:01,570 Rhifyddeg pwyntydd Felly nawr - Ydy. 754 01:04:01,570 --> 01:04:07,390 [Myfyrwyr] nid oes rhaid i chi wneud p * os oes gennych y cromfachau? 755 01:04:07,390 --> 01:04:11,720 Mae'r cromfachau yn dereference ymhlyg. >> Iawn. 756 01:04:11,720 --> 01:04:20,200 A dweud y gwir, hefyd o'r hyn rydych yn ei ddweud gyda'r gewch arrays amlddimensiwn 757 01:04:20,200 --> 01:05:02,650 gan gyfeirio, yr hyn y gallwch ei wneud yw rhywbeth fel, gadewch i ni ddweud, int ** pp = malloc (sizeof (int *) * 5); 758 01:05:02,650 --> 01:05:06,900 'N annhymerus' jyst ysgrifennu i gyd allan yn gyntaf. 759 01:05:37,880 --> 01:05:41,020 Doeddwn i ddim eisiau bod un. 760 01:05:41,020 --> 01:05:42,550 Iawn. 761 01:05:42,550 --> 01:05:48,910 Beth wnes i yma yw - Dylai hynny fod yn pp [i]. 762 01:05:48,910 --> 01:05:53,680 Felly pp rhoi syniad i pwyntydd. 763 01:05:53,680 --> 01:06:02,420 Rydych yn mallocing pp i bwyntio at amrywiaeth o 5 seren int. 764 01:06:02,420 --> 01:06:10,950 Felly, er cof sydd gennych ar y tt corn 765 01:06:10,950 --> 01:06:20,150 Mae'n mynd i bwyntio at amrywiaeth o 5 blociau sydd i gyd eu hunain awgrymiadau. 766 01:06:20,150 --> 01:06:28,210 Ac yna pan fyddaf yn malloc i lawr yma, yr wyf malloc bod pob un o'r pwyntiau unigol 767 01:06:28,210 --> 01:06:32,080 Dylai cyfeirio at bloc ar wahân o 4 bytes ar y domen. 768 01:06:32,080 --> 01:06:35,870 Felly, mae hyn pwyntiau i 4 bytes. 769 01:06:37,940 --> 01:06:40,660 Ac mae hyn yn un pwynt i 4 wahanol bytes. 770 01:06:40,660 --> 01:06:43,200 >> A phob un ohonynt yn cyfeirio at eu hunain 4 bytes. 771 01:06:43,200 --> 01:06:49,080 Mae hyn yn rhoi i mi ffordd o wneud pethau aml-ddimensiwn. 772 01:06:49,080 --> 01:06:58,030 Gallwn ddweud pp [3] [4], ond yn awr nid yw hyn yn yr un peth ag araeau amlddimensiwn 773 01:06:58,030 --> 01:07:05,390 oherwydd araeau aml-ddimensiwn ei gyfieithu [3] [4] i greu un gwrthbwyso i'r casgliad x. 774 01:07:05,390 --> 01:07:14,790 Mae hyn yn p dereferences, mynediad y mynegai trydydd yna dereferences y 775 01:07:14,790 --> 01:07:20,790 a mynedfeydd - byddai 4 yn annilys - y mynegai ail. 776 01:07:24,770 --> 01:07:31,430 Ond pan gawsom y int x [3] [4] cyn fel array amlddimensiwn 777 01:07:31,430 --> 01:07:35,740 a phan fyddwch yn dyblu braced mae'n wirioneddol dim ond dereference sengl, 778 01:07:35,740 --> 01:07:40,490 eich bod yn dilyn pwyntydd unigol ac yna gwrthbwyso, 779 01:07:40,490 --> 01:07:42,850 mae hyn yn wir cyfeiriadau 2D. 780 01:07:42,850 --> 01:07:45,840 Eich bod yn dilyn 2 awgrymiadau ar wahân. 781 01:07:45,840 --> 01:07:50,420 Felly, mae hyn hefyd yn dechnegol caniatáu i chi gael araeau amlddimensiwn 782 01:07:50,420 --> 01:07:53,550 lle mae pob amrywiaeth unigol yn wahanol feintiau. 783 01:07:53,550 --> 01:07:58,000 Felly, yr wyf yn meddwl araeau aml-ddimensiwn danheddog yw'r hyn fe'i gelwir yn 784 01:07:58,000 --> 01:08:01,870 ers wir y gallai y peth cyntaf yn cyfeirio at rywbeth sydd 10 elfen, 785 01:08:01,870 --> 01:08:05,540 gallai'r ail beth cyfeirio at rywbeth sydd â 100 o elfennau. 786 01:08:05,540 --> 01:08:10,790 [Myfyrwyr] A oes unrhyw derfyn i'r nifer o awgrymiadau y gallwch ei gael 787 01:08:10,790 --> 01:08:14,290 dynnu sylw at awgrymiadau eraill? Rhif >> 788 01:08:14,290 --> 01:08:17,010 Gallwch gael int ***** t. 789 01:08:18,050 --> 01:08:23,760 Yn ôl i'r pwyntydd rhifyddeg - >> [myfyrwyr] Oh. >> Yeah. 790 01:08:23,760 --> 01:08:35,649 [Myfyrwyr] Os oes gen i int *** p ac yna yr wyf yn gwneud dereferencing a dywedaf p * yn hafal i'r gwerth hwn, 791 01:08:35,649 --> 01:08:39,560 mae'n unig yn mynd i wneud lefel 1 o dereferencing? >> Ydy. 792 01:08:39,560 --> 01:08:43,340 Felly, os wyf am i gael mynediad at y peth y mae'r pwyntydd olaf yn pwyntio at - 793 01:08:43,340 --> 01:08:46,210 Yna byddwch yn gwneud p ***. >> Iawn. 794 01:08:46,210 --> 01:08:54,080 Felly mae hyn yn bwynt p i 1 bloc, yn cyfeirio at bloc arall, yn cyfeirio at bloc arall. 795 01:08:54,080 --> 01:09:02,010 Yna, os ydych yn ei wneud * p = rhywbeth arall, yna rydych yn newid hyn 796 01:09:02,010 --> 01:09:13,640 yn hyn yn pwyntio at floc gwahanol. >> Iawn. 797 01:09:13,640 --> 01:09:17,649 >> [Bowden] Ac os yw'r rhain yn cael eu malloced, yna rydych wedi gollwng cof bellach 798 01:09:17,649 --> 01:09:20,430 oni bai eich bod yn digwydd i gael cyfeiriadau gwahanol o'r 799 01:09:20,430 --> 01:09:25,270 gan na allwch fynd yn ôl at y rhai yr ydych newydd ei daflu i ffwrdd. 800 01:09:25,270 --> 01:09:29,550 Rhifyddeg Pointer. 801 01:09:29,550 --> 01:09:36,310 int x [4]; yn mynd i ddyrannu amrywiaeth o 4 gyfanrifau 802 01:09:36,310 --> 01:09:40,670 lle mae x yn mynd i gyfeirio at ddechrau'r y rhesi. 803 01:09:40,670 --> 01:09:50,420 Felly, pan fyddaf yn dweud rhywbeth fel x [1]; yr wyf am i olygu mynd i'r cyfanrif ail safle yn y array, 804 01:09:50,420 --> 01:09:53,319 a fyddai'n yr un yma. 805 01:09:53,319 --> 01:10:04,190 Ond mewn gwirionedd, dyna 4 bytes i'r casgliad fod hyn yn gyfanrif yn cymryd fyny 4 bytes. 806 01:10:04,190 --> 01:10:08,470 Felly, yn gwrthbwyso o 1 mewn gwirionedd yw gwrthbwyso o 1 807 01:10:08,470 --> 01:10:12,030 gwaith maint beth bynnag fo'r math o amrywiaeth yn. 808 01:10:12,030 --> 01:10:17,170 Mae hwn yn amrywiaeth o gyfanrifau, felly mae'n gwybod ei wneud 1 gwaith maint int pan fydd am wneud iawn. 809 01:10:17,170 --> 01:10:25,260 Mae'r gystrawen arall. Cofiwch bod hyn yn cyfateb i * (x + 1); 810 01:10:25,260 --> 01:10:35,250 Pan fyddaf yn dweud pwyntydd + 1, beth sy'n dychwelyd yw cyfeiriad y mae'r pwyntydd yn storio 811 01:10:35,250 --> 01:10:40,360 ac 1 waith y maint o'r math y pwyntydd. 812 01:10:40,360 --> 01:10:59,510 Felly, os x = ox100, yna x + 1 = ox104. 813 01:10:59,510 --> 01:11:19,750 Ac mae modd camddefnyddio hyn ac yn dweud rhywbeth fel torgoch * c = (torgoch *) x; 814 01:11:19,750 --> 01:11:23,050 ac yn awr c yn mynd i fod yr un cyfeiriad â x. 815 01:11:23,050 --> 01:11:26,040 c yn mynd i fod yn hafal i ox100, 816 01:11:26,040 --> 01:11:31,490 ond c + 1 yn mynd i fod yn hafal i ox101 817 01:11:31,490 --> 01:11:38,030 ers rhifyddeg pwyntydd yn dibynnu ar y math y pwyntydd eich bod yn ychwanegu at. 818 01:11:38,030 --> 01:11:45,390 Felly, c + 1, mae'n edrych ar c, mae'n pwyntydd torgoch, felly mae'n mynd i ychwanegu 1 gwaith maint y torgoch, 819 01:11:45,390 --> 01:11:48,110 sydd bob amser yn mynd i fod yn 1, felly byddwch yn cael 101, 820 01:11:48,110 --> 01:11:54,890 ond os wyf yn gwneud x, sydd hefyd yn dal 100, x + 1 yn mynd i fod yn 104. 821 01:11:56,660 --> 01:12:06,340 [Myfyrwyr] Allwch chi ddefnyddio c + + er mwyn datblygu eich pwyntydd erbyn 1? 822 01:12:06,340 --> 01:12:09,810 Ydw, y gallwch. 823 01:12:09,810 --> 01:12:16,180 Ni allwch wneud hynny gyda x oherwydd x yn unig yw symbol, mae'n gyson; ni allwch newid x. 824 01:12:16,180 --> 01:12:22,610 >> Ond c digwydd i ddim ond fod yn pwyntydd, felly c + + yn gwbl ddilys a bydd yn codiad o 1. 825 01:12:22,610 --> 01:12:32,440 Os c yn unig * int, yna c + + byddai yn cael ei 104. 826 01:12:32,440 --> 01:12:41,250 + + Rhifyddeg pwyntydd yn gwneud yn union fel y byddai c + 1 yn cael ei wneud rhifyddeg pwyntydd. 827 01:12:43,000 --> 01:12:48,870 Mae hyn mewn gwirionedd sut mae lot o bethau fel uno fath - 828 01:12:49,670 --> 01:12:55,710 Yn hytrach na chreu copïau o bethau, gallwch chi yn hytrach na pasio - 829 01:12:55,710 --> 01:13:02,400 Fel os oeddwn i eisiau i lwyddo yn yr hanner y llu - gadewch i ni dileu rhywfaint o hyn. 830 01:13:04,770 --> 01:13:10,520 Lets 'ddeud Roeddwn i eisiau i lwyddo yn yr ochr y rhesi i mewn i swyddogaeth. 831 01:13:10,520 --> 01:13:12,700 Beth fyddwn i'n ei drosglwyddo i'r swyddogaeth honno? 832 01:13:12,700 --> 01:13:17,050 Os byddaf yn pasio x, yr wyf yn pasio y cyfeiriad hwn. 833 01:13:17,050 --> 01:13:23,780 Ond yr wyf eisiau trosglwyddo hyn gyfeiriad penodol. Felly, beth ddylwn i ei basio? 834 01:13:23,780 --> 01:13:26,590 [Myfyrwyr] Pointer + 2? 835 01:13:26,590 --> 01:13:29,350 [Bowden] Felly x + 2. Ydw. 836 01:13:29,350 --> 01:13:31,620 Mae hynny'n mynd i fod yn y cyfeiriad hwn. 837 01:13:31,620 --> 01:13:42,810 Byddwch hefyd yn aml iawn yn ei weld fel x [2] ac yna gyfeiriad hynny. 838 01:13:42,810 --> 01:13:47,850 Felly, mae angen i chi gymryd y cyfeiriad oherwydd y braced yn dereference ymhlyg. 839 01:13:47,850 --> 01:13:53,250 x [2] yn cyfeirio at y gwerth sydd yn y blwch hwn, ac yna rydych am i'r cyfeiriad y blwch hwnnw, 840 01:13:53,250 --> 01:13:56,850 fel eich bod yn dweud & x [2]. 841 01:13:56,850 --> 01:14:02,880 Felly dyna sut mae rhywbeth yn uno fath lle rydych am i basio hanner y rhestr i rywbeth 842 01:14:02,880 --> 01:14:08,790 chi wir dim ond pasio a x [2], ac yn awr cyn belled ag yr alwad recursive yn y cwestiwn, 843 01:14:08,790 --> 01:14:12,510 fy casgliad newydd yn dechrau yno. 844 01:14:12,510 --> 01:14:15,130 Gwestiynau munud olaf. 845 01:14:15,130 --> 01:14:20,050 [Myfyrwyr] Os nad ydym yn rhoi ampersand neu - beth sy'n bod enw? >> Star? 846 01:14:20,050 --> 01:14:23,200 [Myfyrwyr] Star. >> Yn dechnegol, gweithredwr dereference, ond - >> [myfyrwyr] dereference. 847 01:14:23,200 --> 01:14:29,310 >> Os nad ydym yn rhoi seren neu ampersand, beth sy'n digwydd os Fi jyst yn dweud y = x a x yn pwyntydd? 848 01:14:29,310 --> 01:14:34,620 Beth yw'r math o y? >> [Myfyrwyr] n annhymerus 'jyst dweud ei fod yn pwyntydd 2. 849 01:14:34,620 --> 01:14:38,270 Felly, os ydych yn unig yn dweud y = x, yn awr x ac y yn pwyntio at yr un peth. >> [Myfyrwyr] Point i yr un peth. 850 01:14:38,270 --> 01:14:45,180 Ac os yw x pwyntydd int? >> Byddai'n cwyno oherwydd nad ydych yn gallu aseinio awgrymiadau. 851 01:14:45,180 --> 01:14:46,540 [Myfyrwyr] Iawn. 852 01:14:46,540 --> 01:14:51,860 Cofiwch fod awgrymiadau, er ein bod yn tynnu nhw fel saethau, 853 01:14:51,860 --> 01:15:02,010 wir i gyd maent yn siop - int * x - wir i gyd x yn storio yn rhywbeth fel ox100, 854 01:15:02,010 --> 01:15:06,490 yr ydym yn digwydd i gynrychioli â chyfeirio at y bloc storio yn 100. 855 01:15:06,490 --> 01:15:19,660 Felly, pan fyddaf yn dweud int * y = x; Im 'jyst yn copïo i mewn i ox100 y, 856 01:15:19,660 --> 01:15:24,630 yr ydym yn unig yn mynd i gynrychioli fel y, hefyd yn pwyntio at ox100. 857 01:15:24,630 --> 01:15:39,810 Ac os ydw i'n dweud int i = (int) x, yna i yn mynd i storio beth bynnag yw gwerth ox100 yn 858 01:15:39,810 --> 01:15:45,100 tu mewn, ond nawr mae'n mynd i gael eu dehongli fel cyfanrif yn hytrach na pwyntydd. 859 01:15:45,100 --> 01:15:49,310 Ond mae angen y cast neu arall fydd yn cwyno. 860 01:15:49,310 --> 01:15:53,300 [Myfyrwyr] Felly, ydych chi'n ei olygu i fwrw - 861 01:15:53,300 --> 01:16:00,290 A yw'n mynd i fod yn bwrw int o x neu bleidlais fwrw int o y? 862 01:16:00,290 --> 01:16:03,700 [Bowden] Beth? 863 01:16:03,700 --> 01:16:07,690 [Myfyrwyr] Iawn. Ar ôl y cromfachau yn bod yn mynd i fod yn x neu ae yno? 864 01:16:07,690 --> 01:16:11,500 >> [Bowden] Naill ai. x ac y yn cyfateb. >> [Myfyrwyr] Iawn. 865 01:16:11,500 --> 01:16:14,390 Oherwydd eu bod yn y ddau awgrymiadau. >> Yeah. 866 01:16:14,390 --> 01:16:21,050 [Myfyrwyr] Felly, byddai'n storio y 100 hecsadegol ar ffurf cyfanrif? >> [Bowden] Yeah. 867 01:16:21,050 --> 01:16:23,620 Ond nid yw'r gwerth o beth bynnag mae'n cyfeirio at. 868 01:16:23,620 --> 01:16:29,940 [Bowden] Yeah. >> [Myfyrwyr] Felly, dim ond y cyfeiriad ar ffurf cyfanrif. Iawn. 869 01:16:29,940 --> 01:16:34,720 [Bowden] Os ydych yn awyddus i am ryw reswm rhyfedd, 870 01:16:34,720 --> 01:16:38,900 gallech yn unig yn delio gyda awgrymiadau a pheidiwch byth â delio gyda chyfanrifau 871 01:16:38,900 --> 01:16:49,240 a dim ond fod fel int * x = 0. 872 01:16:49,240 --> 01:16:53,000 Yna byddwch chi'n mynd i fynd yn ddryslyd iawn unwaith rhifyddeg pwyntydd yn dechrau digwydd. 873 01:16:53,000 --> 01:16:56,570 Felly y niferoedd y maent yn storio yn ddiystyr. 874 01:16:56,570 --> 01:16:58,940 Mae'n union sut yr ydych yn y pen draw eu dehongli. 875 01:16:58,940 --> 01:17:02,920 Felly, rwy'n rhydd i gopïo ox100 o * int i int, 876 01:17:02,920 --> 01:17:07,790 ac rwy'n rhydd i aseinio - you're na thebyg yn mynd i gael yelled am beidio â bwrw - 877 01:17:07,790 --> 01:17:18,160 Rwy'n rhydd i aseinio rhywbeth fel (int *) ox1234 i mewn i hyn * int mympwyol. 878 01:17:18,160 --> 01:17:25,480 Felly ox123 yr un mor ddilys cyfeiriad cof fel y mae & y. 879 01:17:25,480 --> 01:17:32,060 Ac y digwydd i ddychwelyd rhywbeth sy'n 'n bert lawer ox123. 880 01:17:32,060 --> 01:17:35,430 [Myfyrwyr] fyddai hynny'n ffordd wirioneddol oer i fynd o hecsadegol i ffurf degol, 881 01:17:35,430 --> 01:17:39,230 yn hoffi os oes gennych pwyntydd ac rydych yn bwrw fel yn int? 882 01:17:39,230 --> 01:17:44,860 [Bowden] Gallwch mewn gwirionedd dim ond argraffu gan ddefnyddio fel printf. 883 01:17:44,860 --> 01:17:50,300 Lets 'ddeud gennyf int y = 100. 884 01:17:50,300 --> 01:18:02,700 Felly printf (% d \ n - fel y dylech wybod yn barod - argraffu hynny fel cyfanrif x%,. 885 01:18:02,700 --> 01:18:05,190 Byddwn dim ond argraffu fel hecsadegol. 886 01:18:05,190 --> 01:18:10,760 Felly, nid pwyntydd yn cael ei storio fel hecsadegol, 887 01:18:10,760 --> 01:18:12,960 ac nid cyfanrif yn cael ei storio fel degol. 888 01:18:12,960 --> 01:18:14,700 Mae popeth yn cael ei storio fel deuaidd. 889 01:18:14,700 --> 01:18:17,950 Dim ond ein bod yn tueddu i ddangos arwyddion fel hecsadegol 890 01:18:17,950 --> 01:18:23,260 oherwydd ein bod yn meddwl am bethau yn y blociau 4-beit, 891 01:18:23,260 --> 01:18:25,390 a chyfeiriadau cof yn tueddu i fod yn gyfarwydd. 892 01:18:25,390 --> 01:18:28,890 Rydym yn fel, os bydd yn dechrau gyda BF, yna mae'n digwydd i fod ar y pentwr. 893 01:18:28,890 --> 01:18:35,560 Felly, dim ond ein dehongliad o bwyntyddion fel hecsadegol. 894 01:18:35,560 --> 01:18:39,200 Iawn. Unrhyw gwestiynau diwethaf? 895 01:18:39,200 --> 01:18:41,700 >> 'N annhymerus' fod yma am ychydig ar ôl os oes gennych unrhyw beth arall. 896 01:18:41,700 --> 01:18:46,070 A dyna ddiwedd y. 897 01:18:46,070 --> 01:18:48,360 >> [Myfyrwyr] Yay! [Cymeradwyaeth] 898 01:18:51,440 --> 01:18:53,000 >> [CS50.TV]