1 00:00:00,000 --> 00:00:06,030 >> [CHWARAE CERDDORIAETH] 2 00:00:06,030 --> 00:00:08,390 >> DOUG LLOYD: Awgrymiadau, dyma ni. 3 00:00:08,390 --> 00:00:11,080 Mae'n debyg bod hyn yn mynd i fod y pwnc mwyaf anodd 4 00:00:11,080 --> 00:00:12,840 ein bod yn siarad am mewn CS50. 5 00:00:12,840 --> 00:00:15,060 Ac os ydych chi wedi darllen unrhyw beth am awgrymiadau 6 00:00:15,060 --> 00:00:19,080 cyn y gallech fod ychydig bach codi ofn mynd i mewn y fideo. 7 00:00:19,080 --> 00:00:21,260 Mae'n wir y awgrymiadau yn caniatáu i chi y gallu 8 00:00:21,260 --> 00:00:23,740 efallai i sgriw i fyny 'n bert wael pan fyddwch chi'n 9 00:00:23,740 --> 00:00:27,450 gweithio gyda newidynnau, a data, ac yn achosi eich rhaglen i ddamwain. 10 00:00:27,450 --> 00:00:30,490 Ond maen nhw'n mewn gwirionedd yn ddefnyddiol iawn ac maent yn ein galluogi ffordd wirioneddol wych 11 00:00:30,490 --> 00:00:33,340 i basio data yn ôl a ymlaen rhwng swyddogaethau, 12 00:00:33,340 --> 00:00:35,490 ein bod fel arall yn methu â gwneud. 13 00:00:35,490 --> 00:00:37,750 >> Ac felly yr hyn yr ydym mewn gwirionedd eisiau ei wneud yma yw trên 14 00:00:37,750 --> 00:00:41,060 i chi gael disgyblaeth pwyntydd da, felly y gallwch ddefnyddio awgrymiadau yn effeithiol 15 00:00:41,060 --> 00:00:43,850 i wneud eich rhaglenni sy'n llawer gwell. 16 00:00:43,850 --> 00:00:48,220 Fel y dywedais awgrymiadau roi i ni yn wahanol ffordd i basio data rhwng swyddogaethau. 17 00:00:48,220 --> 00:00:50,270 Nawr, os ydych yn cofio o fideo gynharach, pan 18 00:00:50,270 --> 00:00:53,720 oeddem yn sôn am cwmpas amrywiol, soniais 19 00:00:53,720 --> 00:01:00,610 bod yr holl ddata yr ydym yn pasio rhwng swyddogaethau mewn C yn cael ei basio gan werth. 20 00:01:00,610 --> 00:01:03,070 Ac efallai nad wyf wedi defnyddio bod dymor, yr hyn yr wyf yn golygu bod 21 00:01:03,070 --> 00:01:07,170 oedd ein bod yn pasio copïau o ddata. 22 00:01:07,170 --> 00:01:12,252 Pan fyddwn yn pasio newidyn i swyddogaeth, nid ydym yn mewn gwirionedd yn mynd heibio i'r newidyn 23 00:01:12,252 --> 00:01:13,210 i'r swyddogaeth, dde? 24 00:01:13,210 --> 00:01:17,670 Rydym yn pasio copi o data hwnnw i'r swyddogaeth. 25 00:01:17,670 --> 00:01:20,760 Mae'r swyddogaeth yn gwneud yr hyn y bydd yn ac mae'n cyfrifo rhywfaint o werth, 26 00:01:20,760 --> 00:01:23,180 ac efallai y defnyddiwn y gwerth pan fydd yn rhoi yn ôl. 27 00:01:23,180 --> 00:01:26,700 >> Roedd un eithriad i rheol hon o drosglwyddo yn ôl gwerth, 28 00:01:26,700 --> 00:01:31,210 a byddwn yn dod yn ôl at yr hyn sy'n yn ychydig yn nes ymlaen yn y fideo hwn. 29 00:01:31,210 --> 00:01:34,880 Os ydym yn defnyddio awgrymiadau yn lle hynny o ddefnyddio newidynnau, 30 00:01:34,880 --> 00:01:38,180 neu yn lle defnyddio'r newidynnau hunain neu gopïau o'r newidynnau, 31 00:01:38,180 --> 00:01:43,790 gallwn yn awr yn pasio newidynnau o gwmpas rhwng swyddogaethau mewn ffordd wahanol. 32 00:01:43,790 --> 00:01:46,550 Mae hyn yn golygu os ydym yn gwneud newid mewn un swyddogaeth, 33 00:01:46,550 --> 00:01:49,827 Bydd y newid hwnnw mewn gwirionedd yn cymryd effaith mewn swyddogaeth wahanol. 34 00:01:49,827 --> 00:01:52,160 Unwaith eto, mae hyn yn rhywbeth y Ni allem wneud yn flaenorol, 35 00:01:52,160 --> 00:01:56,979 ac os ydych chi erioed wedi ceisio gyfnewid y gwerth dau newidyn mewn swyddogaeth, 36 00:01:56,979 --> 00:01:59,270 eich bod wedi sylwi y broblem hon math o ymgripiol i fyny, dde? 37 00:01:59,270 --> 00:02:04,340 >> Os ydym am i gyfnewid X ac Y, ac yr ydym yn eu trosglwyddo i swyddogaeth o'r enw cyfnewid, 38 00:02:04,340 --> 00:02:08,680 tu mewn y swyddogaeth gyfnewid y newidynnau y mae gwerthoedd cyfnewid. 39 00:02:08,680 --> 00:02:12,600 Mae un yn dod yn ddau, dau yn dod yn un, ond nid ydym yn ei wneud mewn gwirionedd 40 00:02:12,600 --> 00:02:16,890 newid unrhyw beth yn y gwreiddiol swyddogaeth, yn y galwr. 41 00:02:16,890 --> 00:02:19,550 Gan na allwn, rydym yn unig gweithio gyda chopïau ohonynt. 42 00:02:19,550 --> 00:02:24,760 Gyda awgrymiadau fodd bynnag, y gallwn mewn gwirionedd yn pasio X ac Y i swyddogaeth. 43 00:02:24,760 --> 00:02:26,960 Gall y swyddogaeth honno ei wneud rhywbeth gyda nhw. 44 00:02:26,960 --> 00:02:29,250 A'r gwerthoedd y newidynnau hynny yn gallu newid mewn gwirionedd. 45 00:02:29,250 --> 00:02:33,710 Felly dyna dipyn o newid yn ein gallu i weithio gyda data. 46 00:02:33,710 --> 00:02:36,100 >> Cyn i ni plymio i mewn awgrymiadau, yr wyf yn meddwl ei fod yn werth 47 00:02:36,100 --> 00:02:38,580 gan gymryd ychydig o funudau i fynd yn ôl at yr hanfodion yma. 48 00:02:38,580 --> 00:02:41,000 Ac edrych ar sut y gwaith gof cyfrifiadur 49 00:02:41,000 --> 00:02:45,340 gan fod y ddau bwnc yn mynd i fod yn eithaf gydberthnasol mewn gwirionedd. 50 00:02:45,340 --> 00:02:48,480 Fel y gwyddoch mae'n siŵr, ar eich system gyfrifiadurol 51 00:02:48,480 --> 00:02:51,310 mae gennych yriant caled neu efallai gyriant cyflwr solet, 52 00:02:51,310 --> 00:02:54,430 rhyw fath o leoliad storio ffeiliau. 53 00:02:54,430 --> 00:02:57,950 Mae fel arfer yn rhywle yn y cymdogaeth o 250 gigabeit 54 00:02:57,950 --> 00:02:59,810 i efallai un neu ddau o terabeit erbyn hyn. 55 00:02:59,810 --> 00:03:02,270 Ac mae'n lle eich holl Ffeiliau yn y pen draw yn byw, 56 00:03:02,270 --> 00:03:04,870 hyd yn oed pan fydd eich cyfrifiadur yn cael ei gau i ffwrdd, gallwch droi yn ôl ar 57 00:03:04,870 --> 00:03:09,190 a byddwch yn dod o hyd eich ffeiliau sydd yna unwaith eto wedi i chi ailgychwyn eich system. 58 00:03:09,190 --> 00:03:14,820 Ond gyriannau disg, fel gyriant disg galed, mae HDD, neu yriant cyflwr solet, SSD, 59 00:03:14,820 --> 00:03:16,050 yn lle storio yn unig. 60 00:03:16,050 --> 00:03:20,400 >> Ni allwn ei wneud mewn gwirionedd unrhyw beth sydd â mae'r data sydd yn disg galed, 61 00:03:20,400 --> 00:03:22,080 neu mewn gyriant cyflwr solet. 62 00:03:22,080 --> 00:03:24,950 Er mwyn newid mewn gwirionedd data neu symud o gwmpas, 63 00:03:24,950 --> 00:03:28,800 mae'n rhaid i ni symud i'r RAM, cof mynediad ar hap. 64 00:03:28,800 --> 00:03:31,170 Nawr RAM, mae gennych lawer llai o yn eich cyfrifiadur. 65 00:03:31,170 --> 00:03:34,185 Efallai bod gennych rywle yn y cymdogaeth o 512 megabeit 66 00:03:34,185 --> 00:03:38,850 os oes gennych gyfrifiadur hŷn, i efallai dau, pedwar, wyth, 16, 67 00:03:38,850 --> 00:03:41,820 o bosibl hyd yn oed ychydig mwy, gigabeitiau o RAM. 68 00:03:41,820 --> 00:03:46,390 Felly dyna llawer llai, ond mae hynny'n lle yr holl ddata anweddol yn bodoli. 69 00:03:46,390 --> 00:03:48,270 Dyna lle y gallwn newid pethau. 70 00:03:48,270 --> 00:03:53,350 Ond pan fyddwn yn troi ein cyfrifiadur i ffwrdd, yr holl ddata yn y RAM yn cael ei ddinistrio. 71 00:03:53,350 --> 00:03:57,150 >> Felly dyna pam mae angen i gael disg caled gyfer y lleoliad mwy parhaol ohono, 72 00:03:57,150 --> 00:03:59,720 fel ei fod yn exists- byddai'n fod yn wirioneddol ddrwg os bob tro y byddwn yn 73 00:03:59,720 --> 00:04:03,310 droi ein cyfrifiadur i ffwrdd, pob ffeil yn ein system ei dileu. 74 00:04:03,310 --> 00:04:05,600 Felly rydym yn gweithio y tu mewn o RAM. 75 00:04:05,600 --> 00:04:09,210 A phob tro yr ydym yn siarad am cof, 'n bert lawer, yn CS50, 76 00:04:09,210 --> 00:04:15,080 rydym yn sôn am RAM, nid disg galed. 77 00:04:15,080 --> 00:04:18,657 >> Felly, pan fyddwn yn symud pethau i mewn i gof, y mae'n ei gymryd i fyny rhywfaint o le. 78 00:04:18,657 --> 00:04:20,740 Mae pob un o'r mathau o ddata y rydym wedi bod yn gweithio gyda 79 00:04:20,740 --> 00:04:23,480 cymryd gwahanol symiau o le yn RAM. 80 00:04:23,480 --> 00:04:27,600 Felly, bob tro y byddwch yn creu cyfanrif amrywiol, pedwar bytes o gof 81 00:04:27,600 --> 00:04:30,750 yn cael eu neilltuo mewn RAM er mwyn i chi Gall gweithio gyda y cyfanrif. 82 00:04:30,750 --> 00:04:34,260 Gallwch ddatgan y cyfanrif, ei newid, aseinio ei 83 00:04:34,260 --> 00:04:36,700 at werth 10 gynyddrannedig gan un, yn y blaen ac yn y blaen. 84 00:04:36,700 --> 00:04:39,440 Y cyfan sydd angen iddo ddigwydd yn RAM, a byddwch yn cael pedwar bytes 85 00:04:39,440 --> 00:04:42,550 i weithio gyda gyfer pob cyfanrif eich bod yn creu. 86 00:04:42,550 --> 00:04:45,410 >> Mae pob cymeriad i chi creu yn cael un beit. 87 00:04:45,410 --> 00:04:48,160 Dyna faint o le yn sydd eu hangen i storio cymeriad. 88 00:04:48,160 --> 00:04:51,310 Mae pob arnofio, go iawn Rhif, yn cael pedwar bytes 89 00:04:51,310 --> 00:04:53,390 oni bai ei fod yn ddwbl trachywiredd pwynt arnawf 90 00:04:53,390 --> 00:04:56,510 Rhif, sy'n eich galluogi i rhaid digidau mwy manwl gywir neu'n fwy 91 00:04:56,510 --> 00:04:59,300 ar ôl y pwynt degol heb golli cywirdeb, 92 00:04:59,300 --> 00:05:01,820 sy'n cymryd i fyny wyth bytes o gof. 93 00:05:01,820 --> 00:05:06,730 Hiraethu hir, cyfanrifau fawr iawn, hefyd yn cymryd i fyny wyth bytes o gof. 94 00:05:06,730 --> 00:05:09,000 Sawl beit o gof Nid llinynnau cymryd i fyny? 95 00:05:09,000 --> 00:05:12,990 Wel gadewch i ni roi pin yn y cwestiwn hwnnw am y tro, ond byddwn yn dod yn ôl ato. 96 00:05:12,990 --> 00:05:17,350 >> Felly, yn ôl i syniad hwn o gof fel amrywiaeth fawr o gelloedd beit eu maint. 97 00:05:17,350 --> 00:05:20,871 Mae hynny'n wir i gyd y mae, 'i' dim ond amrywiaeth enfawr o gelloedd, 98 00:05:20,871 --> 00:05:23,370 yn union fel unrhyw amrywiaeth arall sy'n ydych yn gyfarwydd â ac yn gweld, 99 00:05:23,370 --> 00:05:26,430 heblaw am bob elfen yn un beit eang. 100 00:05:26,430 --> 00:05:30,030 Ac yn union fel amrywiaeth, pob elfen hwnnw gyfeiriad. 101 00:05:30,030 --> 00:05:32,120 Mae pob elfen o amrywiaeth Mae mynegai, ac yr ydym yn 102 00:05:32,120 --> 00:05:36,302 Gall ddefnyddio'r mynegai i wneud hyn a elwir yn hapgyrch ar y rhesi. 103 00:05:36,302 --> 00:05:38,510 Nid oes rhaid i ni ddechrau am cychwyn y array, 104 00:05:38,510 --> 00:05:40,569 ailadrodd trwy bob elfen unigol o hynny, 105 00:05:40,569 --> 00:05:41,860 i ddod o hyd yr hyn rydym yn chwilio amdano. 106 00:05:41,860 --> 00:05:45,790 Allwn ddweud, yr wyf am i gyrraedd y 15fed elfen neu elfen 100fed. 107 00:05:45,790 --> 00:05:49,930 A allwch chi jyst yn pasio yn y nifer hwnnw a chael y gwerth rydych yn chwilio amdano. 108 00:05:49,930 --> 00:05:54,460 >> Yn yr un modd bob lleoliad mewn cof hwnnw gyfeiriad. 109 00:05:54,460 --> 00:05:57,320 Felly efallai eich cof edrych rhywbeth fel hyn. 110 00:05:57,320 --> 00:06:01,420 Dyma darn bach iawn o cof, mae hyn yn 20 bytes o gof. 111 00:06:01,420 --> 00:06:04,060 Y 20 bytes cyntaf oherwydd fy yn mynd i'r afael yno ar y gwaelod 112 00:06:04,060 --> 00:06:08,890 yn 0, 1, 2, 3, ac yn y blaen ar yr holl ffordd i fyny at 19. 113 00:06:08,890 --> 00:06:13,190 A phan wyf yn datgan newidynnau a pan fyddaf yn dechrau gweithio gyda nhw, 114 00:06:13,190 --> 00:06:15,470 mae'r system yn mynd i osod neilltu ychydig o le i mi 115 00:06:15,470 --> 00:06:17,595 yn y cof hwn i weithio gyda fy newidynnau. 116 00:06:17,595 --> 00:06:21,610 Felly, efallai y byddwn yn ei ddweud, torgoch c hafal cyfalaf H. A beth sy'n mynd i ddigwydd? 117 00:06:21,610 --> 00:06:23,880 Dda y mae'r system yn mynd i a neilltuwyd i mi un beit. 118 00:06:23,880 --> 00:06:27,870 Yn yr achos hwn ei fod yn dewis rhif beit pedwar, mae'r beit yn y cyfeiriad pedwar, 119 00:06:27,870 --> 00:06:31,310 ac mae'n mynd i storio'r llythyren H cyfalaf mewn yno i mi. 120 00:06:31,310 --> 00:06:34,350 Os byddaf wedyn yn dweud cyflymder int terfyn hafal 65, 'i' 121 00:06:34,350 --> 00:06:36,806 mynd i neilltuo bedwar bytes o gof i mi. 122 00:06:36,806 --> 00:06:39,180 Ac mae'n mynd i drin y rhai pedwar bytes fel uned sengl 123 00:06:39,180 --> 00:06:41,305 oherwydd yr hyn yr ydym yn gweithio gyda yn gyfanrif yma. 124 00:06:41,305 --> 00:06:44,350 Ac mae'n mynd i storio 65 i mewn 'na. 125 00:06:44,350 --> 00:06:47,000 >> Nawr yn barod rwy'n fath o dweud wrth dipyn o gelwydd i chi, 126 00:06:47,000 --> 00:06:50,150 iawn, oherwydd gwyddom fod cyfrifiaduron yn gweithio mewn deuaidd. 127 00:06:50,150 --> 00:06:53,100 Nid ydynt yn deall o reidrwydd yn beth mae H cyfalaf yn 128 00:06:53,100 --> 00:06:57,110 neu beth yw 65 yw, maent yn unig deall deuaidd, sero a rhai. 129 00:06:57,110 --> 00:06:59,000 Ac felly mewn gwirionedd yr hyn rydym yn storio mewn 'na 130 00:06:59,000 --> 00:07:03,450 Nid yw'r H llythyr a'r rhif 65, ond yn hytrach y cynrychiolaethau deuaidd 131 00:07:03,450 --> 00:07:06,980 hynny, a oedd yn edrych yn ychydig iawn o rhywbeth fel hyn. 132 00:07:06,980 --> 00:07:10,360 Ac yn arbennig yn y cyd-destun y newidyn cyfanrif, 133 00:07:10,360 --> 00:07:13,559 nid yw'n mynd i ychydig boeri i mewn, Nid yw'n mynd i drin fel un phedwar 134 00:07:13,559 --> 00:07:15,350 talp beit o reidrwydd, mae'n mynd mewn gwirionedd 135 00:07:15,350 --> 00:07:19,570 i'w drin fel phedwar un darnau beit, a allai edrych rhywbeth fel hyn. 136 00:07:19,570 --> 00:07:22,424 A hyd yn oed nad yw hyn yn hollol wir chwaith, 137 00:07:22,424 --> 00:07:24,840 oherwydd rhywbeth a elwir yn endianness, a oedd yn nad ydym yn 138 00:07:24,840 --> 00:07:26,965 mynd i fynd i mewn yn awr, ond os ydych yn chwilfrydig am, 139 00:07:26,965 --> 00:07:29,030 gallwch ddarllen i fyny ar ychydig a endianness mawr. 140 00:07:29,030 --> 00:07:31,640 Ond er mwyn y ddadl hon, er mwyn fideo hwn, 141 00:07:31,640 --> 00:07:34,860 gadewch i ni jyst cymryd yn ganiataol hynny yw, yn wir, sut mae'r rhif 65 byddai 142 00:07:34,860 --> 00:07:36,970 yn cael eu cynrychioli yn cof ar bob system, 143 00:07:36,970 --> 00:07:38,850 er nad yw'n hollol wir. 144 00:07:38,850 --> 00:07:41,700 >> Ond gadewch i ni mewn gwirionedd yn unig yn cael gwared ar yr holl deuaidd yn gyfan gwbl, 145 00:07:41,700 --> 00:07:44,460 a dim ond yn meddwl am fel H a 65, mae'n llawer haws 146 00:07:44,460 --> 00:07:47,900 i feddwl am y peth fel hynny fel bod dynol. 147 00:07:47,900 --> 00:07:51,420 Mae pob hawl, felly mae hefyd yn ymddangos efallai Ychydig hap bod I've- fy system 148 00:07:51,420 --> 00:07:55,130 nid oedd yn rhoi bytes 5, 6, 7 fi, ac 8 i storio cyfanrif. 149 00:07:55,130 --> 00:07:58,580 Mae 'na reswm am hynny, hefyd, a oedd yn ni fyddwn yn mynd i mewn ar hyn o bryd, ond yn ddigon 150 00:07:58,580 --> 00:08:00,496 yw dweud bod yr hyn y cyfrifiadur yn ei wneud yma 151 00:08:00,496 --> 00:08:02,810 yn ôl pob tebyg yn syniad da ar ei ran. 152 00:08:02,810 --> 00:08:06,020 I beidio â rhoi cof dyna fi o reidrwydd yn gefn wrth gefn. 153 00:08:06,020 --> 00:08:10,490 Er ei fod yn mynd i wneud hynny nawr os ydw i am gael llinyn arall, 154 00:08:10,490 --> 00:08:13,080 Gelwir cyfenw, ac yr wyf am i roi Lloyd i mewn 'na. 155 00:08:13,080 --> 00:08:18,360 Rydw i'n mynd i angen i gyd-fynd un cymeriad, pob llythyren o'r dyna 156 00:08:18,360 --> 00:08:21,330 mynd i angen un cymeriad, un beit o gof. 157 00:08:21,330 --> 00:08:26,230 Felly os gallwn i roi Lloyd i mewn i fy array fel hyn rwy'n eithaf da i fynd, dde? 158 00:08:26,230 --> 00:08:28,870 Beth sydd ar goll? 159 00:08:28,870 --> 00:08:31,840 >> Cofiwch fod pob llinyn yr ydym yn gweithio gyda yn C dod i ben gyda slaes sero, 160 00:08:31,840 --> 00:08:33,339 ac ni allwn hepgor hynny yma, naill ai. 161 00:08:33,339 --> 00:08:36,090 Mae angen i neilltuo un beit o gof i ddal y felly rydym 162 00:08:36,090 --> 00:08:39,130 gwybod pryd mae ein llinyn wedi dod i ben. 163 00:08:39,130 --> 00:08:41,049 Felly, unwaith eto trefniant hwn y ffordd y mae pethau'n 164 00:08:41,049 --> 00:08:42,799 yn ymddangos yn gallai cof fod ychydig ar hap, 165 00:08:42,799 --> 00:08:44,870 ond y mae mewn gwirionedd sut rhan fwyaf o systemau yn cael eu cynllunio. 166 00:08:44,870 --> 00:08:48,330 I linell i fyny ar luosrifau o bedwar, am resymau eto 167 00:08:48,330 --> 00:08:50,080 nad oes angen i ni'n fynd i mewn ar hyn o bryd. 168 00:08:50,080 --> 00:08:53,060 Ond mae hyn, felly digon yw dweud bod ar ôl tair llinell hyn o god, 169 00:08:53,060 --> 00:08:54,810 mae hyn yn yr hyn a allai cof edrych. 170 00:08:54,810 --> 00:08:58,930 Os oes angen lleoliadau cof 4, 8, a 12 i ddal fy data, 171 00:08:58,930 --> 00:09:01,100 mae hyn yn beth allai fy nghof edrych. 172 00:09:01,100 --> 00:09:04,062 >> A dim ond yn arbennig bedantig yma, pan fydd 173 00:09:04,062 --> 00:09:06,020 rydym yn siarad am gof cyfeiriadau byddwn fel arfer 174 00:09:06,020 --> 00:09:08,390 yn gwneud hynny gan ddefnyddio nodiant hecsadegol. 175 00:09:08,390 --> 00:09:12,030 Felly pam nad ydym yn trosi pob un o'r rhain o degol nodiant hecsadegol i 176 00:09:12,030 --> 00:09:15,010 dim ond oherwydd dyna y cyfan sut yr ydym yn cyfeirio at y cof. 177 00:09:15,010 --> 00:09:17,880 Felly, yn hytrach na bod 0 drwy 19, yr hyn sydd gennym yn sero 178 00:09:17,880 --> 00:09:20,340 x sero drwy sero x1 tri. 179 00:09:20,340 --> 00:09:23,790 Dyna'r 20 bytes o gof i ni wedi neu rydym yn edrych ar yn y ddelwedd hon 180 00:09:23,790 --> 00:09:25,540 iawn yma. 181 00:09:25,540 --> 00:09:29,310 >> Felly, i gyd yn cael ei ddweud, gadewch i ni cam i ffwrdd o gof am eiliad 182 00:09:29,310 --> 00:09:30,490 ac yn ôl i'r awgrymiadau. 183 00:09:30,490 --> 00:09:32,420 Dyma yw'r mwyaf pwysig beth i'w gofio 184 00:09:32,420 --> 00:09:34,070 wrth i ni ddechrau gweithio gyda awgrymiadau. 185 00:09:34,070 --> 00:09:36,314 Mae pwyntydd yn ddim byd mwy na chyfeiriad. 186 00:09:36,314 --> 00:09:38,230 'N annhymerus' ddweud eto oherwydd mae mor bwysig, 187 00:09:38,230 --> 00:09:42,730 pwyntydd yn ddim byd mwy na chyfeiriad. 188 00:09:42,730 --> 00:09:47,760 Awgrymiadau yn gyfeiriadau i leoliadau er cof lle mae newidynnau yn byw. 189 00:09:47,760 --> 00:09:52,590 Mae gwybod ei fod yn dod, gobeithio, yn ychydig yn haws i weithio gyda nhw. 190 00:09:52,590 --> 00:09:54,550 Beth arall Rwy'n hoffi ei wneud yw cael math 191 00:09:54,550 --> 00:09:58,510 diagramau weledol yn cynrychioli beth sydd digwydd gyda gwahanol linellau o god. 192 00:09:58,510 --> 00:10:00,660 A byddwn yn gwneud hyn cwpl o weithiau mewn arwyddion, 193 00:10:00,660 --> 00:10:03,354 a phan fyddwn yn sôn am ddeinamig dyrannu cof yn ogystal. 194 00:10:03,354 --> 00:10:06,020 Gan fy mod yn meddwl bod diagramau hyn Gall fod yn arbennig o ddefnyddiol. 195 00:10:06,020 --> 00:10:09,540 >> Felly, os wyf yn dweud, er enghraifft, k int yn fy cod, beth sy'n digwydd? 196 00:10:09,540 --> 00:10:12,524 Wel beth sy'n digwydd yn y bôn yn Rwy'n cael gof a neilltuwyd i mi, 197 00:10:12,524 --> 00:10:14,690 ond nid wyf yn hyd yn oed yn hoffi meddwl am y peth fel yna, yr wyf yn 198 00:10:14,690 --> 00:10:16,300 hoffi meddwl am y peth fel blwch. 199 00:10:16,300 --> 00:10:20,090 Mae gen i focs ac mae'n wyrdd lliw oherwydd fy mod 200 00:10:20,090 --> 00:10:21,750 Gall roi cyfanrifau mewn blychau gwyrdd. 201 00:10:21,750 --> 00:10:23,666 Os oedd yn yr wyf yn gymeriad Gallai gael blwch glas. 202 00:10:23,666 --> 00:10:27,290 Ond yr wyf bob amser yn dweud, os ydw i'n creu blwch gallu dal cyfanrifau 203 00:10:27,290 --> 00:10:28,950 y blwch wedi'i liwio gwyrdd. 204 00:10:28,950 --> 00:10:33,020 Ac yr wyf yn cymryd marcio parhaol ac yr wyf yn ysgrifennu k ar ochr ohono. 205 00:10:33,020 --> 00:10:37,590 Felly mae gen i focs o'r enw k, i ba gallaf roi cyfanrifau. 206 00:10:37,590 --> 00:10:41,070 Felly, pan fyddaf yn dweud int k, dyna beth sy'n digwydd yn fy mhen. 207 00:10:41,070 --> 00:10:43,140 Os wyf yn dweud k hafal pump, beth ydw i'n ei wneud? 208 00:10:43,140 --> 00:10:45,110 Wel, dwi'n rhoi pump yn y blwch, dde. 209 00:10:45,110 --> 00:10:48,670 Mae hyn yn eithaf syml, os Yr wyf yn dweud int k, creu bocs o'r enw k. 210 00:10:48,670 --> 00:10:52,040 Os wyf yn dweud k hafal 5, rhoi pump i mewn i'r blwch. 211 00:10:52,040 --> 00:10:53,865 Gobeithio nid yw hynny'n ormod o naid. 212 00:10:53,865 --> 00:10:55,990 Dyma lle mae pethau'n mynd yn bach diddorol er. 213 00:10:55,990 --> 00:11:02,590 Os wyf yn dweud int * pk, yn dda hyd yn oed os nad wyf yn ei wneud yn gwybod beth mae hyn yn ei olygu o reidrwydd, 214 00:11:02,590 --> 00:11:06,150 'i' got rhywbeth yn glir i'w wneud gyda cyfanrif. 215 00:11:06,150 --> 00:11:08,211 Felly dw i'n mynd i liwio y blwch gwyrdd-ish, 216 00:11:08,211 --> 00:11:10,210 Yr wyf yn gwybod ei fod yn rhywbeth i'w wneud gyda cyfanrif, 217 00:11:10,210 --> 00:11:13,400 ond nid yw'n yn gyfanrif ei hun, oherwydd ei fod yn seren int. 218 00:11:13,400 --> 00:11:15,390 Mae rhywbeth ychydig yn yn wahanol am y peth. 219 00:11:15,390 --> 00:11:17,620 Felly rhan yn gyfanrif, a ond fel arall mae'n 220 00:11:17,620 --> 00:11:19,830 heb fod yn rhy wahanol i yr hyn yr ydym yn siarad am. 221 00:11:19,830 --> 00:11:24,240 Mae'n bocs, ei got a label, mae'n gwisgo pk label, 222 00:11:24,240 --> 00:11:27,280 ac mae'n gallu ddaliad sêr int, beth bynnag y rhai yn cael eu. 223 00:11:27,280 --> 00:11:29,894 Mae ganddynt rywbeth i'w wneud gyda chyfanrifau, yn amlwg. 224 00:11:29,894 --> 00:11:31,060 Heres '' r llinell olaf er. 225 00:11:31,060 --> 00:11:37,650 Os wyf yn dweud PK = & k, Whoa, beth yn union ddigwyddodd, dde? 226 00:11:37,650 --> 00:11:41,820 Felly, mae hyn rhif ar hap, yn ôl pob golwg ar hap Rhif, yn cael ei daflu i mewn i'r blwch yno. 227 00:11:41,820 --> 00:11:44,930 Y cyfan sydd yn, yn pk yn cael y cyfeiriad k. 228 00:11:44,930 --> 00:11:52,867 Felly rwy'n glynu lle mae k yn byw yn y cof, ei gyfeiriad, cyfeiriad ei bytes. 229 00:11:52,867 --> 00:11:55,200 Mae pob rwy'n ei wneud yw i ddim yn dweud bod gwerth yn yr hyn yr wyf i'n mynd 230 00:11:55,200 --> 00:11:59,430 i roi y tu mewn fy bocs o'r enw pk. 231 00:11:59,430 --> 00:12:02,080 Ac oherwydd y pethau hyn yn cael eu awgrymiadau, ac oherwydd edrych 232 00:12:02,080 --> 00:12:04,955 mewn llinyn fel sero x wyth sero c saith pedwar wyth 233 00:12:04,955 --> 00:12:07,790 dau sero yn ôl pob tebyg Nid yw yn ystyrlon iawn. 234 00:12:07,790 --> 00:12:12,390 Pan rydym yn gyffredinol delweddu awgrymiadau, rydym mewn gwirionedd yn gwneud hynny fel awgrymiadau. 235 00:12:12,390 --> 00:12:17,000 Pk yn rhoi'r wybodaeth i ni mae angen i ni ddod o hyd i ng yn y cof. 236 00:12:17,000 --> 00:12:19,120 Felly y bôn pk Mae saeth ynddo. 237 00:12:19,120 --> 00:12:21,670 Ac os ydym yn cerdded ar hyd o hynny saeth, dychmygu 238 00:12:21,670 --> 00:12:25,280 mae'n rhywbeth y gallwch gerdded ar, os byddwn yn cerdded ar hyd y darn o'r saeth, 239 00:12:25,280 --> 00:12:29,490 ym mhen iawn o hynny saeth, rydym yn Bydd dod o hyd i'r lleoliad mewn cof 240 00:12:29,490 --> 00:12:31,390 lle mae k yn byw. 241 00:12:31,390 --> 00:12:34,360 Ac mae hynny'n bwysig iawn oherwydd unwaith y byddwn yn gwybod lle mae k yn byw, 242 00:12:34,360 --> 00:12:37,870 gallwn ddechrau i weithio gyda'r data tu mewn y lleoliad hwnnw cof. 243 00:12:37,870 --> 00:12:40,780 Er ein bod yn cael teeny bit y blaen i ni ein hunain am y tro. 244 00:12:40,780 --> 00:12:42,240 >> Felly beth yw pwyntydd? 245 00:12:42,240 --> 00:12:45,590 Mae pwyntydd yn eitem data y mae ei gwerth yn, cyfeiriad cof. 246 00:12:45,590 --> 00:12:49,740 Dyna oedd bod sero x wyth sero stwff digwydd, a oedd yn gyfeiriad cof. 247 00:12:49,740 --> 00:12:52,060 Yr oedd hynny'n leoliad mewn cof. 248 00:12:52,060 --> 00:12:55,080 A'r math o pwyntydd yn disgrifio'r math 249 00:12:55,080 --> 00:12:56,930 o ddata yma i chi yn y cyfeiriad hwnnw cof. 250 00:12:56,930 --> 00:12:58,810 Felly mae y seren int rhan gywir. 251 00:12:58,810 --> 00:13:03,690 Os byddaf yn dilyn y saeth, 'i' mynd i mi arwain at lleoliad. 252 00:13:03,690 --> 00:13:06,980 A dyna lleoliad, yr hyn yr wyf Bydd dod o hyd i yno yn fy enghraifft, 253 00:13:06,980 --> 00:13:08,240 mae blwch lliw gwyrdd. 254 00:13:08,240 --> 00:13:12,650 Mae'n yn gyfanrif, dyna beth yr wyf yn Bydd yn dod o hyd os byddaf yn mynd i'r cyfeiriad hwnnw. 255 00:13:12,650 --> 00:13:14,830 Y math o ddata o pwyntydd yn disgrifio beth 256 00:13:14,830 --> 00:13:17,936 byddwch yn dod o hyd yn y cyfeiriad hwnnw cof. 257 00:13:17,936 --> 00:13:19,560 Felly dyma y peth 'n sylweddol oera er. 258 00:13:19,560 --> 00:13:25,090 Awgrymiadau ein galluogi i basio newidynnau rhwng swyddogaethau. 259 00:13:25,090 --> 00:13:28,520 Ac mewn gwirionedd yn pasio newidynnau ac ni ddylai fynd copïau ohonynt. 260 00:13:28,520 --> 00:13:32,879 Oherwydd os ydym yn gwybod yn union ble er cof i ddod o hyd amrywiol, 261 00:13:32,879 --> 00:13:35,670 Nid oes angen i ni wneud copi o hynny, gallwn yn unig yn mynd i'r lleoliad hwnnw 262 00:13:35,670 --> 00:13:37,844 a gweithio gyda hynny amrywiol. 263 00:13:37,844 --> 00:13:40,260 Felly, yn ei hanfod awgrymiadau didoli o wneud amgylchedd cyfrifiadurol 264 00:13:40,260 --> 00:13:42,360 yn llawer mwy fel y byd go iawn, iawn. 265 00:13:42,360 --> 00:13:44,640 >> Felly dyma gyfatebiaeth. 266 00:13:44,640 --> 00:13:48,080 Lets 'ddeud bod gen i llyfr nodiadau, iawn, ac mae'n llawn o nodiadau. 267 00:13:48,080 --> 00:13:50,230 A hoffwn i chi ei diweddaru. 268 00:13:50,230 --> 00:13:53,960 Rydych yn swyddogaeth sy'n Nodiadau diweddariadau, dde. 269 00:13:53,960 --> 00:13:56,390 Yn y ffordd yr ydym wedi bod yn gweithio hyd yn hyn, beth 270 00:13:56,390 --> 00:14:02,370 yn digwydd yn y byddwch yn cymryd fy llyfr nodiadau, byddwch yn mynd i'r copi y siop, 271 00:14:02,370 --> 00:14:06,410 byddwch yn gwneud copi Xerox o bob tudalen o'r llyfr nodiadau. 272 00:14:06,410 --> 00:14:09,790 Byddwch yn gadael fy llyfr nodiadau yn ôl ar fy nesg pan fyddwch chi'n ei wneud, 273 00:14:09,790 --> 00:14:14,600 byddwch yn mynd a chroesi allan bethau yn fy llyfr nodiadau sydd allan o ddyddiad neu anghywir, 274 00:14:14,600 --> 00:14:19,280 ac yna byddwch yn pasio yn ôl i 'm' r pentwr o dudalennau Xerox 275 00:14:19,280 --> 00:14:22,850 hynny yw replica o fy llyfr nodiadau gyda y newidiadau a ydych wedi gwneud iddo. 276 00:14:22,850 --> 00:14:27,040 Ac ar y pwynt hwnnw, mae i fyny i mi fel y swyddogaeth galw, gan fod y sawl sy'n galw, 277 00:14:27,040 --> 00:14:30,582 i benderfynu cymryd eich nodiadau a integreiddio yn ôl i fy llyfr nodiadau. 278 00:14:30,582 --> 00:14:32,540 Felly mae llawer o gamau ran yma, ar y dde. 279 00:14:32,540 --> 00:14:34,850 Ni fyddai ei hoffi yn well os Fi jyst dweud, hey, gallwch 280 00:14:34,850 --> 00:14:38,370 diweddaru fy llyfr nodiadau ar gyfer mi, llaw i chi fy llyfr nodiadau, 281 00:14:38,370 --> 00:14:40,440 a'ch bod yn cymryd pethau a llythrennol croesi nhw allan 282 00:14:40,440 --> 00:14:42,810 ac yn diweddaru fy nodiadau yn fy llyfr nodiadau. 283 00:14:42,810 --> 00:14:45,140 Ac yna rhoi fy llyfr nodiadau fi yn ôl. 284 00:14:45,140 --> 00:14:47,320 Dyna fath o beth awgrymiadau yn caniatáu i ni ei wneud, 285 00:14:47,320 --> 00:14:51,320 maent yn gwneud yr amgylchedd hwn yn llawer mwy fel sut rydym yn gweithredu mewn gwirionedd. 286 00:14:51,320 --> 00:14:54,640 >> Mae pob hawl, felly dyna beth pwyntydd yw, gadewch i ni siarad 287 00:14:54,640 --> 00:14:58,040 am sut mae awgrymiadau yn gweithio yn C, a sut y gallwn ni ddechrau i weithio gyda nhw. 288 00:14:58,040 --> 00:15:02,550 Felly mae 'na pwyntydd syml iawn yn C a elwir y pwyntydd null. 289 00:15:02,550 --> 00:15:04,830 Mae'r pwyntiau pwyntydd nwl i ddim. 290 00:15:04,830 --> 00:15:08,310 Mae'n debyg bod hyn yn ymddangos fel ei fod yn mewn gwirionedd nid yn beth defnyddiol iawn, 291 00:15:08,310 --> 00:15:10,500 ond gan y byddwn yn gweld Ychydig yn ddiweddarach, y ffaith 292 00:15:10,500 --> 00:15:15,410 bod y pwyntydd null bodoli mewn gwirionedd yn wir yn gallu dod i mewn 'n hylaw. 293 00:15:15,410 --> 00:15:19,090 A pryd bynnag y byddwch yn creu pwyntydd, a nad ydych yn gosod ei weithredu ar unwaith werth 294 00:15:19,090 --> 00:15:21,060 enghraifft o osod ei werth yn union 295 00:15:21,060 --> 00:15:25,401 Bydd cwpl sleidiau yn ôl lle dywedais pk hafal & k, 296 00:15:25,401 --> 00:15:28,740 pk yn cael cyfeiriad k, fel y gawn ni weld beth mae hynny'n ei olygu, 297 00:15:28,740 --> 00:15:32,990 byddwn yn gweld sut i roi cod hynny shortly- os nad ydym yn gosod ei werth i rywbeth 298 00:15:32,990 --> 00:15:35,380 ystyrlon ar unwaith, dylech bob amser 299 00:15:35,380 --> 00:15:37,480 gosod eich pwyntydd i bwyntio at null. 300 00:15:37,480 --> 00:15:40,260 Dylech osod i bwyntio i ddim. 301 00:15:40,260 --> 00:15:43,614 >> Mae hynny'n wahanol iawn na dim ond gadael y gwerth gan ei fod yn 302 00:15:43,614 --> 00:15:45,530 ac yna datgan pwyntydd a dim ond dybio 303 00:15:45,530 --> 00:15:48,042 mae'n null oherwydd dyna anaml wir. 304 00:15:48,042 --> 00:15:50,000 Felly, dylech osod bob amser gwerth pwyntydd 305 00:15:50,000 --> 00:15:55,690 i null os nad ydych yn gosod ei werth i rywbeth ystyrlon ar unwaith. 306 00:15:55,690 --> 00:15:59,090 Gallwch wirio a yw gwerth pwyntydd yn yn null gan ddefnyddio'r gweithredwr cydraddoldeb 307 00:15:59,090 --> 00:16:05,450 (==), Yn union fel yr ydych yn cymharu unrhyw gyfanrif Gwerthoedd neu werthoedd cymeriad gan ddefnyddio (==) 308 00:16:05,450 --> 00:16:06,320 yn ogystal. 309 00:16:06,320 --> 00:16:10,994 Mae'n rhyw fath arbennig o gyson gwerth y gallwch eu defnyddio i brofi. 310 00:16:10,994 --> 00:16:13,160 Felly yr oedd hynny'n syml iawn pwyntydd, pwyntydd null. 311 00:16:13,160 --> 00:16:15,320 Ffordd arall i greu pwyntydd yw i dynnu 312 00:16:15,320 --> 00:16:18,240 cyfeiriad newidyn ydych eisoes wedi ei greu, 313 00:16:18,240 --> 00:16:22,330 ac yr ydych yn gwneud hyn drwy ddefnyddio'r & cyfeiriad echdynnu gweithredwr. 314 00:16:22,330 --> 00:16:26,720 Yr ydym eisoes wedi gweld o'r blaen yn yr enghraifft diagram cyntaf Dangosais. 315 00:16:26,720 --> 00:16:31,450 Felly os x yn newidyn ein bod i wedi eisoes a grëwyd o'r math cyfanrif, 316 00:16:31,450 --> 00:16:35,110 Yna & x yn pwyntydd i cyfanrif. 317 00:16:35,110 --> 00:16:39,810 & X yw- cofiwch, & yn mynd i dynnu cyfeiriad y peth ar y dde. 318 00:16:39,810 --> 00:16:45,350 Ac ers pwyntydd yn unig yw gyfeiriad, nag & x yn pwyntydd i cyfanrif 319 00:16:45,350 --> 00:16:48,560 gwerth y mae ei lle mewn cof x bywydau. 320 00:16:48,560 --> 00:16:50,460 Mae'n cyfeiriad x yn. 321 00:16:50,460 --> 00:16:53,296 Felly & x yw cyfeiriad x. 322 00:16:53,296 --> 00:16:55,670 Gadewch i ni fynd â hyn un cam ymhellach a chysylltu i rywbeth 323 00:16:55,670 --> 00:16:58,380 Yr wyf yn cyfeirio at mewn fideo blaenorol. 324 00:16:58,380 --> 00:17:06,730 Os arr yn amrywiaeth o dyblau, yna & Braced sgwâr arr ff yn pwyntydd 325 00:17:06,730 --> 00:17:08,109 i dwbl. 326 00:17:08,109 --> 00:17:08,970 IAWN. 327 00:17:08,970 --> 00:17:12,160 arr braced sgwâr i, os arr yn amrywiaeth o dyblau, 328 00:17:12,160 --> 00:17:19,069 Yna, arr braced sgwâr i yw yr elfen i-fed o hynny array, 329 00:17:19,069 --> 00:17:29,270 a & arr braced sgwâr i yw lle mewn cof yr elfen i-fed o arr yn bodoli. 330 00:17:29,270 --> 00:17:31,790 >> Felly beth yw'r goblygiadau yma? 331 00:17:31,790 --> 00:17:34,570 Mae enw araeau, mae'r goblygiad o hyn holl beth, 332 00:17:34,570 --> 00:17:39,290 yw bod enw arae yw mewn gwirionedd ei hun pwyntydd. 333 00:17:39,290 --> 00:17:41,170 Rydych chi wedi bod yn gweithio gyda awgrymiadau ar hyd 334 00:17:41,170 --> 00:17:45,290 bob tro eich bod wedi defnyddio amrywiaeth. 335 00:17:45,290 --> 00:17:49,090 Cofiwch gan yr enghraifft ar gwmpas amrywiol, 336 00:17:49,090 --> 00:17:53,420 yn agos at ddiwedd y fideo cyflwynaf enghraifft lle mae gennym swyddogaeth 337 00:17:53,420 --> 00:17:56,890 Gelwir int set a swyddogaeth a elwir yn amrywiaeth a osodwyd. 338 00:17:56,890 --> 00:18:00,490 Ac yn eich herio i benderfynu ai peidio, neu beth mae'r 339 00:18:00,490 --> 00:18:03,220 gwerthoedd yr ydym hargraffu diwedd y swyddogaeth, 340 00:18:03,220 --> 00:18:05,960 ar ddiwedd y brif raglen. 341 00:18:05,960 --> 00:18:08,740 >> Os cofiwch o'r esiampl neu os ydych wedi gwylio'r fideo, 342 00:18:08,740 --> 00:18:13,080 eich bod yn gwybod, pan fydd chi-yr alwad i int set yn effeithiol yn gwneud dim. 343 00:18:13,080 --> 00:18:16,390 Ond mae'r alwad i osod amrywiaeth yn ei wneud. 344 00:18:16,390 --> 00:18:19,280 Ac yr wyf yn fath o fychanu pam dyna a ddigwyddodd ar y pryd. 345 00:18:19,280 --> 00:18:22,363 Wyf newydd ei ddweud, wel mae'n arae, 'i' arbennig, chi'n gwybod, mae 'na reswm. 346 00:18:22,363 --> 00:18:25,020 Y rheswm yw bod amrywiaeth yn enw i yw gwirionedd dim ond pwyntydd, 347 00:18:25,020 --> 00:18:28,740 ac mae hyn yn arbennig cystrawen braced sgwâr sy'n 348 00:18:28,740 --> 00:18:30,510 yn gwneud pethau yn llawer brafiach i weithio gyda. 349 00:18:30,510 --> 00:18:34,410 Ac maent yn gwneud y syniad o pwyntydd yn llawer llai bygythiol, 350 00:18:34,410 --> 00:18:36,800 a dyna pam eu bod yn didoli o gyflwynir yn y ffordd honno. 351 00:18:36,800 --> 00:18:38,600 Ond mewn gwirionedd araeau yn unig awgrymiadau. 352 00:18:38,600 --> 00:18:41,580 A dyna pam pan fyddwn gwneud newid i'r array, 353 00:18:41,580 --> 00:18:44,880 pan fyddwn yn pasio arae fel paramedr i swyddogaeth neu fel dadl 354 00:18:44,880 --> 00:18:50,110 i swyddogaeth, cynnwys y arae Newidiodd mewn gwirionedd yn y callee 355 00:18:50,110 --> 00:18:51,160 ac yn y galwr. 356 00:18:51,160 --> 00:18:55,846 Pa gyfer pob math arall o Nid yw newidyn gwelsom oedd yr achos. 357 00:18:55,846 --> 00:18:58,970 Felly dyna dim ond rhywbeth i gadw mewn meddwl pan fyddwch yn gweithio gyda awgrymiadau, 358 00:18:58,970 --> 00:19:01,610 yw bod yr enw o amrywiaeth mewn gwirionedd pwyntydd 359 00:19:01,610 --> 00:19:04,750 i'r elfen gyntaf y rhesi. 360 00:19:04,750 --> 00:19:08,930 >> Iawn felly erbyn hyn mae gennym y rhain i gyd ffeithiau, gadewch i ni gadw i fynd, ar y dde. 361 00:19:08,930 --> 00:19:11,370 Pam rydym yn poeni am lle mae rhywbeth yn byw. 362 00:19:11,370 --> 00:19:14,120 Wel fel y dywedais, mae'n eithaf ddefnyddiol gwybod ble mae rhywbeth yn byw 363 00:19:14,120 --> 00:19:17,240 er mwyn i chi fynd yno ac yn ei newid. 364 00:19:17,240 --> 00:19:19,390 Weithio gydag ef ac mewn gwirionedd yn cael y peth yr ydych 365 00:19:19,390 --> 00:19:23,710 am ei wneud i hynny gymryd effaith amrywiol, ac nid yn dod i rym ar rai copi ohono. 366 00:19:23,710 --> 00:19:26,150 Gelwir hyn yn dereferencing. 367 00:19:26,150 --> 00:19:28,690 Rydym yn mynd i'r cyfeiriad a rydym yn newid y gwerth yno. 368 00:19:28,690 --> 00:19:32,660 Felly, os oes gennym pwyntydd ac fe'i gelwir pc, ac mae'n cyfeirio at gymeriad, 369 00:19:32,660 --> 00:19:40,610 yna gallwn ddweud * pc a * pc yw'r enw o'r hyn y byddwn yn dod o hyd os ydym yn mynd 370 00:19:40,610 --> 00:19:42,910 i'r cyfeiriad pc. 371 00:19:42,910 --> 00:19:47,860 Yr hyn y byddwn yn dod o hyd mae yna gymeriad ac * Pc yw sut yr ydym yn cyfeirio at y data ar hynny 372 00:19:47,860 --> 00:19:48,880 lleoliad. 373 00:19:48,880 --> 00:19:54,150 Felly, gallem ddweud rhywbeth fel * Pc = D neu rywbeth fel 'na, 374 00:19:54,150 --> 00:19:59,280 ac mae hynny'n golygu bod beth bynnag Roedd yn y cyfeiriad cof pc, 375 00:19:59,280 --> 00:20:07,040 beth bynnag gymeriad oedd gynt yno, yn awr yn D, os byddwn yn dweud * pc = D. 376 00:20:07,040 --> 00:20:10,090 >> Felly dyma ni eto gyda rhai pethau C od, ar y dde. 377 00:20:10,090 --> 00:20:14,560 Felly, rydym wedi gweld * yn flaenorol fel rhai rhywsut yn rhan o'r math data, 378 00:20:14,560 --> 00:20:17,160 ac yn awr mae'n cael ei ddefnyddio mewn cyd-destun ychydig yn wahanol 379 00:20:17,160 --> 00:20:19,605 i gael mynediad at y data mewn lleoliad. 380 00:20:19,605 --> 00:20:22,480 Dwi'n gwybod ei fod ychydig yn ddryslyd ac dyna mewn gwirionedd yn rhan o'r cyfan hon 381 00:20:22,480 --> 00:20:25,740 fel, pam mae awgrymiadau wedi mytholeg hwn o'u cwmpas fel bod mor gymhleth, 382 00:20:25,740 --> 00:20:28,250 yn fath o broblem cystrawen, yn onest. 383 00:20:28,250 --> 00:20:31,810 Ond * yn cael ei ddefnyddio mewn cyd-destunau, fel rhan o'r enw math, 384 00:20:31,810 --> 00:20:34,100 a byddwn yn gweld ychydig rhywbeth diweddarach arall, hefyd. 385 00:20:34,100 --> 00:20:36,490 Ac ar hyn o bryd yw'r gweithredwr dereference. 386 00:20:36,490 --> 00:20:38,760 Felly, mae'n mynd i'r cyfeiriad, mae'n mynedfeydd y data 387 00:20:38,760 --> 00:20:43,000 yn y lleoliad y pwyntydd, a caniatáu i chi drin iddo ar ewyllys. 388 00:20:43,000 --> 00:20:45,900 >> Yn awr mae hyn yn debyg iawn i ymweld â'ch cymydog, dde. 389 00:20:45,900 --> 00:20:48,710 Os ydych yn gwybod beth yw eich cymydog yn byw, rydych yn 390 00:20:48,710 --> 00:20:50,730 Nid yw hongian allan gyda'ch cymydog. 391 00:20:50,730 --> 00:20:53,510 Rydych yn gwybod eich bod yn digwydd i gwybod ble maent yn byw, 392 00:20:53,510 --> 00:20:56,870 ond nid yw hynny'n golygu y gan rhinwedd o gael wybodaeth honno 393 00:20:56,870 --> 00:20:59,170 yr ydych yn rhyngweithio â hwy. 394 00:20:59,170 --> 00:21:01,920 Os ydych am i ryngweithio gyda nhw, rhaid i chi fynd at eu tai, 395 00:21:01,920 --> 00:21:03,760 rhaid i chi fynd i ble maent yn byw. 396 00:21:03,760 --> 00:21:07,440 Ac unwaith y byddwch yn gwneud hynny, yna gallwch ryngweithio 397 00:21:07,440 --> 00:21:09,420 gyda nhw yn union fel y byddech yn dymuno. 398 00:21:09,420 --> 00:21:12,730 Ac yn yr un modd â newidynnau, mae angen i chi fynd at eu cyfeiriad 399 00:21:12,730 --> 00:21:15,320 os ydych am i ryngweithio iddynt, nid ydych yn gallu gwybod y cyfeiriad. 400 00:21:15,320 --> 00:21:21,495 A'r ffordd byddwch yn mynd i'r cyfeiriad yw i ddefnyddio *, mae'r gweithredwr dereference. 401 00:21:21,495 --> 00:21:23,620 Beth ydych chi'n feddwl fydd yn digwydd os ydym yn ceisio dereference 402 00:21:23,620 --> 00:21:25,260 pwyntydd y mae ei gwerth yn null? 403 00:21:25,260 --> 00:21:28,470 Dwyn i gof bod y null pwyntydd yn pwyntio at ddim byd. 404 00:21:28,470 --> 00:21:34,110 Felly, os ydych yn ceisio dereference dim byd neu ewch i gyfeiriad yn unrhyw beth, 405 00:21:34,110 --> 00:21:36,800 beth yn eich barn chi fydd yn digwydd? 406 00:21:36,800 --> 00:21:39,630 Segmentu Wel, os ydych yn dyfalu fai, byddech yn gywir. 407 00:21:39,630 --> 00:21:41,390 Os ydych yn ceisio dereference pwyntydd null, 408 00:21:41,390 --> 00:21:43,140 ydych yn dioddef segmentiad fai. Ond arhoswch, 409 00:21:43,140 --> 00:21:45,820 Nid oedd rwy'n dweud wrthych, bod os nad ydych yn mynd 410 00:21:45,820 --> 00:21:49,220 i osod eich gwerth eich Pointer i rywbeth ystyrlon, 411 00:21:49,220 --> 00:21:51,000 dylech osod i null? 412 00:21:51,000 --> 00:21:55,290 Fe wnes ac mewn gwirionedd yn y segmentiad fai yn fath o ymddygiad da. 413 00:21:55,290 --> 00:21:58,680 >> Ydych chi erioed wedi datgan amrywiol ac Nid neilltuo ei werth yn union? 414 00:21:58,680 --> 00:22:02,680 Felly rydych dim ond dweud int x; Nid ydych yn ei wneud mewn gwirionedd yn aseinio i unrhyw beth 415 00:22:02,680 --> 00:22:05,340 ac yna yn ddiweddarach yn eich cod, chi argraffu'r gwerth x, 416 00:22:05,340 --> 00:22:07,650 cael yn dal heb neilltuo i unrhyw beth. 417 00:22:07,650 --> 00:22:10,370 Yn aml byddwch yn cael sero, ond weithiau i chi 418 00:22:10,370 --> 00:22:15,000 Efallai gael rhywfaint rhif ar hap, ac nid oes gennych syniad ble y daeth. 419 00:22:15,000 --> 00:22:16,750 Yn yr un modd gall pethau digwydd gyda chyfeiriadau. 420 00:22:16,750 --> 00:22:20,110 Pan fyddwch yn datgan pwyntydd int * pk er enghraifft, 421 00:22:20,110 --> 00:22:23,490 ac nad ydych yn aseinio i werth, byddwch yn cael pedwar bytes ar gyfer cof. 422 00:22:23,490 --> 00:22:25,950 Beth bynnag pedwar bytes o cof y system yn gallu 423 00:22:25,950 --> 00:22:28,970 yn gweld bod cael rhywfaint o werth ystyrlon. 424 00:22:28,970 --> 00:22:31,760 Ac efallai y bu rhywbeth yno eisoes fod 425 00:22:31,760 --> 00:22:34,190 oes ei angen mwyach gan un arall swyddogaeth, felly os oes gen ti 426 00:22:34,190 --> 00:22:35,900 pa bynnag ddata oedd yno. 427 00:22:35,900 --> 00:22:40,570 >> Beth os ydych yn ceisio gwneud dereference rhywfaint o gyfeiriad yr ydych yn don't- yna 428 00:22:40,570 --> 00:22:43,410 eisoes bytes a gwybodaeth mewn yno, dyna awr yn eich pwyntydd. 429 00:22:43,410 --> 00:22:47,470 Os ydych yn ceisio dereference y pwyntydd, efallai y byddwch yn cyboli gyda rhywfaint o gof 430 00:22:47,470 --> 00:22:49,390 nad oeddech yn bwriadu i chwarae o gwmpas gyda hyn i gyd. 431 00:22:49,390 --> 00:22:51,639 Ac yn wir y gallech ei wneud rhywbeth gwirioneddol drychinebus, 432 00:22:51,639 --> 00:22:54,880 fel torri rhaglen arall, neu dorri swyddogaeth arall, 433 00:22:54,880 --> 00:22:58,289 neu wneud rhywbeth maleisus hynny nad oeddech yn bwriadu ei wneud o gwbl. 434 00:22:58,289 --> 00:23:00,080 Ac felly dyna pam ei bod yn mewn gwirionedd yn syniad da 435 00:23:00,080 --> 00:23:04,030 i osod eich awgrymiadau i null os ydych peidiwch â'u gosod i rywbeth ystyrlon. 436 00:23:04,030 --> 00:23:06,760 Mae'n fwy na thebyg yn well yn y diwedd y dydd ar gyfer eich rhaglen 437 00:23:06,760 --> 00:23:09,840 at chwilfriwia wedyn iddo wneud rhywbeth y sgriwiau i fyny 438 00:23:09,840 --> 00:23:12,400 rhaglen arall neu swyddogaeth arall. 439 00:23:12,400 --> 00:23:15,207 Bod ymddygiad yn ôl pob tebyg hyd yn oed llai delfrydol na dim ond chwilfriwio. 440 00:23:15,207 --> 00:23:17,040 Ac felly dyna pam ei bod yn mewn gwirionedd yn arfer da 441 00:23:17,040 --> 00:23:20,920 i fynd i mewn i osod eich awgrymiadau i null os nad ydych yn eu gosod 442 00:23:20,920 --> 00:23:24,540 at werth ystyrlon ar unwaith, mae gwerth eich bod yn gwybod 443 00:23:24,540 --> 00:23:27,260 ac y gallwch yn ddiogel y dereference. 444 00:23:27,260 --> 00:23:32,240 >> Felly gadewch i ni ddod yn ôl yn awr ac yn cymryd golwg ar gystrawen cyffredinol y sefyllfa. 445 00:23:32,240 --> 00:23:37,400 Os wyf yn dweud int * p ;, beth Fi jyst ei wneud? 446 00:23:37,400 --> 00:23:38,530 Yr hyn yr wyf wedi ei wneud yn hyn. 447 00:23:38,530 --> 00:23:43,290 Rwy'n gwybod werth p yn gyfeiriad gan fod yr holl awgrymiadau yn unig 448 00:23:43,290 --> 00:23:44,660 cyfeiriadau. 449 00:23:44,660 --> 00:23:47,750 Gallaf dereference p gan ddefnyddio'r gweithredwr *. 450 00:23:47,750 --> 00:23:51,250 Yn y cyd-destun hwn yma, ar yr union top dwyn i gof y * yn rhan o'r math. 451 00:23:51,250 --> 00:23:53,510 Int * yw'r math data. 452 00:23:53,510 --> 00:23:56,150 Ond gallaf dereference p ddefnyddio'r gweithredwr *, 453 00:23:56,150 --> 00:24:01,897 ac os wyf yn gwneud hynny, os byddaf yn mynd i'r cyfeiriad hwnnw, yr hyn y byddaf yn dod o hyd yn y cyfeiriad hwnnw? 454 00:24:01,897 --> 00:24:02,855 Byddaf yn dod o hyd yn gyfanrif. 455 00:24:02,855 --> 00:24:05,910 Felly int * p yn y bôn gan ddywedyd, p yn gyfeiriad. 456 00:24:05,910 --> 00:24:09,500 Gallaf dereference p ac os Wyf yn ei wneud, byddaf yn dod o hyd yn gyfanrif 457 00:24:09,500 --> 00:24:11,920 yn y lleoliad hwnnw cof. 458 00:24:11,920 --> 00:24:14,260 >> Iawn felly dywedais nad oedd un arall beth blino gyda sêr 459 00:24:14,260 --> 00:24:17,060 a dyma lle mae hynny'n beth blino gyda sêr yn. 460 00:24:17,060 --> 00:24:21,640 Ydych chi erioed wedi ceisio i ddatgan lluosog newidynnau o'r un math 461 00:24:21,640 --> 00:24:24,409 ar yr un llinell o god? 462 00:24:24,409 --> 00:24:27,700 Felly, am eiliad, esgus bod y llinell, y cod Fi 'n weithredol yn cael yno mewn gwyrdd 463 00:24:27,700 --> 00:24:29,366 Nid yw yno a 'i jyst yn dweud int x, y, z ;. 464 00:24:29,366 --> 00:24:31,634 465 00:24:31,634 --> 00:24:34,550 Beth fyddai'n ei wneud yw mewn gwirionedd yn creu tri newidyn cyfanrif ar eich cyfer, 466 00:24:34,550 --> 00:24:36,930 un o'r enw x, un o'r enw y, ac un o'r enw z. 467 00:24:36,930 --> 00:24:41,510 Mae'n ffordd i wneud hynny heb gorfod rhannu ar dair llinell. 468 00:24:41,510 --> 00:24:43,890 >> Dyma lle mae sêr yn cael blino eto fodd bynnag, 469 00:24:43,890 --> 00:24:49,200 oherwydd bod y * mewn gwirionedd yn rhan y ddau enw math a rhan 470 00:24:49,200 --> 00:24:50,320 o'r enw newidyn. 471 00:24:50,320 --> 00:24:56,430 Ac felly os wyf yn dweud int * px, py, PZ, yr hyn yr wyf mewn gwirionedd yn cael ei pwyntydd i'r cyfanrif 472 00:24:56,430 --> 00:25:01,650 Gelwir px a dau rif cyfan, py a PZ. 473 00:25:01,650 --> 00:25:04,950 A dyna debyg nad beth rydym eisiau, nid yw hynny'n dda. 474 00:25:04,950 --> 00:25:09,290 >> Felly, os ydw i am greu awgrymiadau lluosog ar yr un llinell, o'r un math, 475 00:25:09,290 --> 00:25:12,140 a sêr, yr hyn yr wyf ei angen mewn gwirionedd ei wneud yw dweud int * yf, * pb, * pc. 476 00:25:12,140 --> 00:25:17,330 477 00:25:17,330 --> 00:25:20,300 Nawr ar ôl dim ond dweud hynny ac yn awr yn dweud wrthych hyn, 478 00:25:20,300 --> 00:25:22,170 mae'n debyg na fydd yn gwneud hyn. 479 00:25:22,170 --> 00:25:25,170 Ac mae'n fwy na thebyg yn beth da yn onest, oherwydd eich bod efallai yn anfwriadol 480 00:25:25,170 --> 00:25:26,544 hepgor seren, rhywbeth fel 'na. 481 00:25:26,544 --> 00:25:29,290 Mae'n debyg mai'r peth gorau i ddatgan efallai awgrymiadau ar linellau unigol, 482 00:25:29,290 --> 00:25:31,373 ond mae'r un un arall o'r rhai a cystrawen blino 483 00:25:31,373 --> 00:25:35,310 pethau gyda sêr sy'n gwneud awgrymiadau mor anodd i weithio gyda. 484 00:25:35,310 --> 00:25:39,480 Gan mai dim ond cystrawennol hwn llanast rhaid i chi weithio drwy'r. 485 00:25:39,480 --> 00:25:41,600 Gydag ymarfer mae'n ei wneud dod yn ail natur mewn gwirionedd. 486 00:25:41,600 --> 00:25:45,410 Rwy'n dal i wneud camgymeriadau ag ef o hyd ar ôl rhaglenni ar gyfer 10 mlynedd, 487 00:25:45,410 --> 00:25:49,630 felly peidiwch â bod cynhyrfu os bydd rhywbeth yn digwydd i chi, mae'n eithaf cyffredin yn onest. 488 00:25:49,630 --> 00:25:52,850 Mae'n wirioneddol fath o nam ar gystrawen. 489 00:25:52,850 --> 00:25:54,900 >> Iawn felly yr wyf yn fath o addo y byddem yn ail ymweld 490 00:25:54,900 --> 00:25:59,370 y cysyniad o pa mor fawr yw'r llinyn. 491 00:25:59,370 --> 00:26:02,750 Wel, os wyf yn dweud wrthych fod llinyn, mae gennym mewn gwirionedd fath o 492 00:26:02,750 --> 00:26:04,140 bod yn gorwedd i chi yr holl amser. 493 00:26:04,140 --> 00:26:06,181 Does dim math o ddata a elwir yn llinyn, ac yn wir yr wyf yn 494 00:26:06,181 --> 00:26:09,730 crybwyll hyn yn un o'n fideos cynharaf ar fathau data, 495 00:26:09,730 --> 00:26:13,820 bod llinyn yn fath data y ei greu ar eich cyfer yn CS50.h. 496 00:26:13,820 --> 00:26:17,050 Mae'n rhaid i chi #include CS50.h er mwyn ei ddefnyddio. 497 00:26:17,050 --> 00:26:19,250 >> Wel llinyn yn wirioneddol yn unig alias am rywbeth 498 00:26:19,250 --> 00:26:23,600 Gelwir y torgoch *, a pwyntydd i'r cymeriad. 499 00:26:23,600 --> 00:26:26,010 Wel awgrymiadau, galw i gof, yn unig yn mynd i'r afael. 500 00:26:26,010 --> 00:26:28,780 Felly beth yw maint mewn bytes o linyn? 501 00:26:28,780 --> 00:26:29,796 Wel mae'n bedair neu wyth. 502 00:26:29,796 --> 00:26:32,170 A'r rheswm yr wyf yn dweud pedwar neu wyth oherwydd ei fod mewn gwirionedd 503 00:26:32,170 --> 00:26:36,730 yn dibynnu ar y system, Os ydych chi'n defnyddio Idiaid CS50, torgoch * yn yr un maint â torgoch 504 00:26:36,730 --> 00:26:39,340 * Yw wyth, mae'n system 64-bit. 505 00:26:39,340 --> 00:26:43,850 Mae pob cyfeiriad yn y cof yw 64 darnau hir. 506 00:26:43,850 --> 00:26:48,270 Os ydych chi'n defnyddio offer CS50 neu ddefnyddio unrhyw 32-bit peiriant, 507 00:26:48,270 --> 00:26:51,640 ac yr ydych wedi clywed y term 32-bit peiriant, beth yw 32-bit peiriant? 508 00:26:51,640 --> 00:26:56,090 Wel 'i jyst yn golygu bod pob gyfeiriad yn y cof yw 32 darnau hir. 509 00:26:56,090 --> 00:26:59,140 Ac felly 32 darnau yn bedair bytes. 510 00:26:59,140 --> 00:27:02,710 Felly torgoch mae * yn bedair neu wyth bytes yn dibynnu ar eich system. 511 00:27:02,710 --> 00:27:06,100 Ac yn wir unrhyw fathau data, ac pwyntydd i unrhyw ddata 512 00:27:06,100 --> 00:27:12,030 deipio, gan fod yr holl awgrymiadau yn unig cyfeiriadau, pedwar neu wyth bytes. 513 00:27:12,030 --> 00:27:14,030 Felly gadewch i ni edrych eto ar hyn diagram a gadewch i ni ddod i'r casgliad 514 00:27:14,030 --> 00:27:18,130 fideo hwn gydag ychydig o ymarfer corff yma. 515 00:27:18,130 --> 00:27:21,600 Felly dyma y diagram inni adael i ffwrdd gyda ar y cychwyn cyntaf y fideo. 516 00:27:21,600 --> 00:27:23,110 Felly, beth sy'n digwydd nawr os ydw i'n dweud * PK = 35? 517 00:27:23,110 --> 00:27:26,370 518 00:27:26,370 --> 00:27:30,530 Felly beth mae'n ei olygu wrth ddweud, * PK = 35? 519 00:27:30,530 --> 00:27:32,420 Cymerwch eiliad. 520 00:27:32,420 --> 00:27:34,990 * Pk. 521 00:27:34,990 --> 00:27:39,890 Yn y cyd-destun yma, * yw gweithredwr dereference. 522 00:27:39,890 --> 00:27:42,110 Felly, pan fydd y dereference gweithredwr yn cael ei ddefnyddio, 523 00:27:42,110 --> 00:27:48,520 rydym yn mynd i'r cyfeiriad tynnu sylw at gan pk, ac yr ydym yn newid yr hyn yr ydym yn dod o hyd. 524 00:27:48,520 --> 00:27:55,270 Felly * PK = 35 yn effeithiol yn gwneud hyn at y llun. 525 00:27:55,270 --> 00:27:58,110 Felly mae'n bôn syntactically union o fod wedi dweud k = 35. 526 00:27:58,110 --> 00:28:00,740 527 00:28:00,740 --> 00:28:01,930 >> Un yn fwy. 528 00:28:01,930 --> 00:28:05,510 Os wyf yn dweud int m, yr wyf yn creu newidyn newydd o'r enw m. 529 00:28:05,510 --> 00:28:08,260 Bocs newydd, 'i' blwch gwyrdd oherwydd mae'n mynd i ddal yn gyfanrif, 530 00:28:08,260 --> 00:28:09,840 ac mae'n labelu m. 531 00:28:09,840 --> 00:28:14,960 Os wyf yn dweud m = 4, yr wyf yn rhoi cyfanrif i mewn i'r blwch. 532 00:28:14,960 --> 00:28:20,290 Os dyweder PK = & m, sut mae diagram hwn newid? 533 00:28:20,290 --> 00:28:28,760 Pk = & m, a ydych yn cofio yr hyn y mae'r & Gweithredwr yn ei wneud neu'n cael ei alw? 534 00:28:28,760 --> 00:28:34,430 Cofiwch fod & rhywfaint o enw newidyn yn y cyfeiriad o enw newidyn. 535 00:28:34,430 --> 00:28:38,740 Felly, yr hyn yr ydym yn ei ddweud yw pk yn cael y cyfeiriad m. 536 00:28:38,740 --> 00:28:42,010 Ac felly yn effeithiol yr hyn sy'n digwydd y diagram yw nad PK pwyntiau bellach 537 00:28:42,010 --> 00:28:46,420 i k, ond pwyntiau i m. 538 00:28:46,420 --> 00:28:48,470 >> Unwaith eto, awgrymiadau yn iawn anodd i weithio gyda 539 00:28:48,470 --> 00:28:50,620 ac maent yn cymryd llawer o arfer, ond oherwydd 540 00:28:50,620 --> 00:28:54,150 am eu gallu i ganiatáu i chi i basio data rhwng swyddogaethau 541 00:28:54,150 --> 00:28:56,945 ac mewn gwirionedd yn cael y rhai newidiadau yn dod i rym, 542 00:28:56,945 --> 00:28:58,820 cael eich pen o gwmpas yn bwysig iawn. 543 00:28:58,820 --> 00:29:02,590 Mae'n debyg yw'r mwyaf cymhleth pwnc yr ydym yn trafod yn CS50, 544 00:29:02,590 --> 00:29:05,910 ond mae gwerth yr ydych yn gael o ddefnyddio awgrymiadau 545 00:29:05,910 --> 00:29:09,200 llawer mwy na'r cymhlethdodau sy'n dod oddi wrthynt dysgu. 546 00:29:09,200 --> 00:29:12,690 Felly, yr wyf yn dymuno'r gorau i chi lwc dysgu am awgrymiadau. 547 00:29:12,690 --> 00:29:15,760 Rwy'n Doug Lloyd, mae hyn yn CS50. 548 00:29:15,760 --> 00:29:17,447