>> [CHWARAE CERDDORIAETH]
>> DOUG LLOYD: Awgrymiadau, dyma ni.
Mae'n debyg bod hyn yn mynd i fod y pwnc mwyaf anodd
ein bod yn siarad am mewn CS50.
Ac os ydych chi wedi darllen unrhyw beth am awgrymiadau
cyn y gallech fod ychydig bach codi ofn mynd i mewn y fideo.
Mae'n wir y awgrymiadau yn caniatáu i chi y gallu
efallai i sgriw i fyny 'n bert wael pan fyddwch chi'n
gweithio gyda newidynnau, a data, ac yn achosi eich rhaglen i ddamwain.
Ond maen nhw'n mewn gwirionedd yn ddefnyddiol iawn ac maent yn ein galluogi ffordd wirioneddol wych
i basio data yn ôl a ymlaen rhwng swyddogaethau,
ein bod fel arall yn methu â gwneud.
>> Ac felly yr hyn yr ydym mewn gwirionedd eisiau ei wneud yma yw trên
i chi gael disgyblaeth pwyntydd da, felly y gallwch ddefnyddio awgrymiadau yn effeithiol
i wneud eich rhaglenni sy'n llawer gwell.
Fel y dywedais awgrymiadau roi i ni yn wahanol ffordd i basio data rhwng swyddogaethau.
Nawr, os ydych yn cofio o fideo gynharach, pan
oeddem yn sôn am cwmpas amrywiol, soniais
bod yr holl ddata yr ydym yn pasio rhwng swyddogaethau mewn C yn cael ei basio gan werth.
Ac efallai nad wyf wedi defnyddio bod dymor, yr hyn yr wyf yn golygu bod
oedd ein bod yn pasio copïau o ddata.
Pan fyddwn yn pasio newidyn i swyddogaeth, nid ydym yn mewn gwirionedd yn mynd heibio i'r newidyn
i'r swyddogaeth, dde?
Rydym yn pasio copi o data hwnnw i'r swyddogaeth.
Mae'r swyddogaeth yn gwneud yr hyn y bydd yn ac mae'n cyfrifo rhywfaint o werth,
ac efallai y defnyddiwn y gwerth pan fydd yn rhoi yn ôl.
>> Roedd un eithriad i rheol hon o drosglwyddo yn ôl gwerth,
a byddwn yn dod yn ôl at yr hyn sy'n yn ychydig yn nes ymlaen yn y fideo hwn.
Os ydym yn defnyddio awgrymiadau yn lle hynny o ddefnyddio newidynnau,
neu yn lle defnyddio'r newidynnau hunain neu gopïau o'r newidynnau,
gallwn yn awr yn pasio newidynnau o gwmpas rhwng swyddogaethau mewn ffordd wahanol.
Mae hyn yn golygu os ydym yn gwneud newid mewn un swyddogaeth,
Bydd y newid hwnnw mewn gwirionedd yn cymryd effaith mewn swyddogaeth wahanol.
Unwaith eto, mae hyn yn rhywbeth y Ni allem wneud yn flaenorol,
ac os ydych chi erioed wedi ceisio gyfnewid y gwerth dau newidyn mewn swyddogaeth,
eich bod wedi sylwi y broblem hon math o ymgripiol i fyny, dde?
>> Os ydym am i gyfnewid X ac Y, ac yr ydym yn eu trosglwyddo i swyddogaeth o'r enw cyfnewid,
tu mewn y swyddogaeth gyfnewid y newidynnau y mae gwerthoedd cyfnewid.
Mae un yn dod yn ddau, dau yn dod yn un, ond nid ydym yn ei wneud mewn gwirionedd
newid unrhyw beth yn y gwreiddiol swyddogaeth, yn y galwr.
Gan na allwn, rydym yn unig gweithio gyda chopïau ohonynt.
Gyda awgrymiadau fodd bynnag, y gallwn mewn gwirionedd yn pasio X ac Y i swyddogaeth.
Gall y swyddogaeth honno ei wneud rhywbeth gyda nhw.
A'r gwerthoedd y newidynnau hynny yn gallu newid mewn gwirionedd.
Felly dyna dipyn o newid yn ein gallu i weithio gyda data.
>> Cyn i ni plymio i mewn awgrymiadau, yr wyf yn meddwl ei fod yn werth
gan gymryd ychydig o funudau i fynd yn ôl at yr hanfodion yma.
Ac edrych ar sut y gwaith gof cyfrifiadur
gan fod y ddau bwnc yn mynd i fod yn eithaf gydberthnasol mewn gwirionedd.
Fel y gwyddoch mae'n siŵr, ar eich system gyfrifiadurol
mae gennych yriant caled neu efallai gyriant cyflwr solet,
rhyw fath o leoliad storio ffeiliau.
Mae fel arfer yn rhywle yn y cymdogaeth o 250 gigabeit
i efallai un neu ddau o terabeit erbyn hyn.
Ac mae'n lle eich holl Ffeiliau yn y pen draw yn byw,
hyd yn oed pan fydd eich cyfrifiadur yn cael ei gau i ffwrdd, gallwch droi yn ôl ar
a byddwch yn dod o hyd eich ffeiliau sydd yna unwaith eto wedi i chi ailgychwyn eich system.
Ond gyriannau disg, fel gyriant disg galed, mae HDD, neu yriant cyflwr solet, SSD,
yn lle storio yn unig.
>> Ni allwn ei wneud mewn gwirionedd unrhyw beth sydd â mae'r data sydd yn disg galed,
neu mewn gyriant cyflwr solet.
Er mwyn newid mewn gwirionedd data neu symud o gwmpas,
mae'n rhaid i ni symud i'r RAM, cof mynediad ar hap.
Nawr RAM, mae gennych lawer llai o yn eich cyfrifiadur.
Efallai bod gennych rywle yn y cymdogaeth o 512 megabeit
os oes gennych gyfrifiadur hŷn, i efallai dau, pedwar, wyth, 16,
o bosibl hyd yn oed ychydig mwy, gigabeitiau o RAM.
Felly dyna llawer llai, ond mae hynny'n lle yr holl ddata anweddol yn bodoli.
Dyna lle y gallwn newid pethau.
Ond pan fyddwn yn troi ein cyfrifiadur i ffwrdd, yr holl ddata yn y RAM yn cael ei ddinistrio.
>> Felly dyna pam mae angen i gael disg caled gyfer y lleoliad mwy parhaol ohono,
fel ei fod yn exists- byddai'n fod yn wirioneddol ddrwg os bob tro y byddwn yn
droi ein cyfrifiadur i ffwrdd, pob ffeil yn ein system ei dileu.
Felly rydym yn gweithio y tu mewn o RAM.
A phob tro yr ydym yn siarad am cof, 'n bert lawer, yn CS50,
rydym yn sôn am RAM, nid disg galed.
>> Felly, pan fyddwn yn symud pethau i mewn i gof, y mae'n ei gymryd i fyny rhywfaint o le.
Mae pob un o'r mathau o ddata y rydym wedi bod yn gweithio gyda
cymryd gwahanol symiau o le yn RAM.
Felly, bob tro y byddwch yn creu cyfanrif amrywiol, pedwar bytes o gof
yn cael eu neilltuo mewn RAM er mwyn i chi Gall gweithio gyda y cyfanrif.
Gallwch ddatgan y cyfanrif, ei newid, aseinio ei
at werth 10 gynyddrannedig gan un, yn y blaen ac yn y blaen.
Y cyfan sydd angen iddo ddigwydd yn RAM, a byddwch yn cael pedwar bytes
i weithio gyda gyfer pob cyfanrif eich bod yn creu.
>> Mae pob cymeriad i chi creu yn cael un beit.
Dyna faint o le yn sydd eu hangen i storio cymeriad.
Mae pob arnofio, go iawn Rhif, yn cael pedwar bytes
oni bai ei fod yn ddwbl trachywiredd pwynt arnawf
Rhif, sy'n eich galluogi i rhaid digidau mwy manwl gywir neu'n fwy
ar ôl y pwynt degol heb golli cywirdeb,
sy'n cymryd i fyny wyth bytes o gof.
Hiraethu hir, cyfanrifau fawr iawn, hefyd yn cymryd i fyny wyth bytes o gof.
Sawl beit o gof Nid llinynnau cymryd i fyny?
Wel gadewch i ni roi pin yn y cwestiwn hwnnw am y tro, ond byddwn yn dod yn ôl ato.
>> Felly, yn ôl i syniad hwn o gof fel amrywiaeth fawr o gelloedd beit eu maint.
Mae hynny'n wir i gyd y mae, 'i' dim ond amrywiaeth enfawr o gelloedd,
yn union fel unrhyw amrywiaeth arall sy'n ydych yn gyfarwydd â ac yn gweld,
heblaw am bob elfen yn un beit eang.
Ac yn union fel amrywiaeth, pob elfen hwnnw gyfeiriad.
Mae pob elfen o amrywiaeth Mae mynegai, ac yr ydym yn
Gall ddefnyddio'r mynegai i wneud hyn a elwir yn hapgyrch ar y rhesi.
Nid oes rhaid i ni ddechrau am cychwyn y array,
ailadrodd trwy bob elfen unigol o hynny,
i ddod o hyd yr hyn rydym yn chwilio amdano.
Allwn ddweud, yr wyf am i gyrraedd y 15fed elfen neu elfen 100fed.
A allwch chi jyst yn pasio yn y nifer hwnnw a chael y gwerth rydych yn chwilio amdano.
>> Yn yr un modd bob lleoliad mewn cof hwnnw gyfeiriad.
Felly efallai eich cof edrych rhywbeth fel hyn.
Dyma darn bach iawn o cof, mae hyn yn 20 bytes o gof.
Y 20 bytes cyntaf oherwydd fy yn mynd i'r afael yno ar y gwaelod
yn 0, 1, 2, 3, ac yn y blaen ar yr holl ffordd i fyny at 19.
A phan wyf yn datgan newidynnau a pan fyddaf yn dechrau gweithio gyda nhw,
mae'r system yn mynd i osod neilltu ychydig o le i mi
yn y cof hwn i weithio gyda fy newidynnau.
Felly, efallai y byddwn yn ei ddweud, torgoch c hafal cyfalaf H. A beth sy'n mynd i ddigwydd?
Dda y mae'r system yn mynd i a neilltuwyd i mi un beit.
Yn yr achos hwn ei fod yn dewis rhif beit pedwar, mae'r beit yn y cyfeiriad pedwar,
ac mae'n mynd i storio'r llythyren H cyfalaf mewn yno i mi.
Os byddaf wedyn yn dweud cyflymder int terfyn hafal 65, 'i'
mynd i neilltuo bedwar bytes o gof i mi.
Ac mae'n mynd i drin y rhai pedwar bytes fel uned sengl
oherwydd yr hyn yr ydym yn gweithio gyda yn gyfanrif yma.
Ac mae'n mynd i storio 65 i mewn 'na.
>> Nawr yn barod rwy'n fath o dweud wrth dipyn o gelwydd i chi,
iawn, oherwydd gwyddom fod cyfrifiaduron yn gweithio mewn deuaidd.
Nid ydynt yn deall o reidrwydd yn beth mae H cyfalaf yn
neu beth yw 65 yw, maent yn unig deall deuaidd, sero a rhai.
Ac felly mewn gwirionedd yr hyn rydym yn storio mewn 'na
Nid yw'r H llythyr a'r rhif 65, ond yn hytrach y cynrychiolaethau deuaidd
hynny, a oedd yn edrych yn ychydig iawn o rhywbeth fel hyn.
Ac yn arbennig yn y cyd-destun y newidyn cyfanrif,
nid yw'n mynd i ychydig boeri i mewn, Nid yw'n mynd i drin fel un phedwar
talp beit o reidrwydd, mae'n mynd mewn gwirionedd
i'w drin fel phedwar un darnau beit, a allai edrych rhywbeth fel hyn.
A hyd yn oed nad yw hyn yn hollol wir chwaith,
oherwydd rhywbeth a elwir yn endianness, a oedd yn nad ydym yn
mynd i fynd i mewn yn awr, ond os ydych yn chwilfrydig am,
gallwch ddarllen i fyny ar ychydig a endianness mawr.
Ond er mwyn y ddadl hon, er mwyn fideo hwn,
gadewch i ni jyst cymryd yn ganiataol hynny yw, yn wir, sut mae'r rhif 65 byddai
yn cael eu cynrychioli yn cof ar bob system,
er nad yw'n hollol wir.
>> Ond gadewch i ni mewn gwirionedd yn unig yn cael gwared ar yr holl deuaidd yn gyfan gwbl,
a dim ond yn meddwl am fel H a 65, mae'n llawer haws
i feddwl am y peth fel hynny fel bod dynol.
Mae pob hawl, felly mae hefyd yn ymddangos efallai Ychydig hap bod I've- fy system
nid oedd yn rhoi bytes 5, 6, 7 fi, ac 8 i storio cyfanrif.
Mae 'na reswm am hynny, hefyd, a oedd yn ni fyddwn yn mynd i mewn ar hyn o bryd, ond yn ddigon
yw dweud bod yr hyn y cyfrifiadur yn ei wneud yma
yn ôl pob tebyg yn syniad da ar ei ran.
I beidio â rhoi cof dyna fi o reidrwydd yn gefn wrth gefn.
Er ei fod yn mynd i wneud hynny nawr os ydw i am gael llinyn arall,
Gelwir cyfenw, ac yr wyf am i roi Lloyd i mewn 'na.
Rydw i'n mynd i angen i gyd-fynd un cymeriad, pob llythyren o'r dyna
mynd i angen un cymeriad, un beit o gof.
Felly os gallwn i roi Lloyd i mewn i fy array fel hyn rwy'n eithaf da i fynd, dde?
Beth sydd ar goll?
>> Cofiwch fod pob llinyn yr ydym yn gweithio gyda yn C dod i ben gyda slaes sero,
ac ni allwn hepgor hynny yma, naill ai.
Mae angen i neilltuo un beit o gof i ddal y felly rydym
gwybod pryd mae ein llinyn wedi dod i ben.
Felly, unwaith eto trefniant hwn y ffordd y mae pethau'n
yn ymddangos yn gallai cof fod ychydig ar hap,
ond y mae mewn gwirionedd sut rhan fwyaf o systemau yn cael eu cynllunio.
I linell i fyny ar luosrifau o bedwar, am resymau eto
nad oes angen i ni'n fynd i mewn ar hyn o bryd.
Ond mae hyn, felly digon yw dweud bod ar ôl tair llinell hyn o god,
mae hyn yn yr hyn a allai cof edrych.
Os oes angen lleoliadau cof 4, 8, a 12 i ddal fy data,
mae hyn yn beth allai fy nghof edrych.
>> A dim ond yn arbennig bedantig yma, pan fydd
rydym yn siarad am gof cyfeiriadau byddwn fel arfer
yn gwneud hynny gan ddefnyddio nodiant hecsadegol.
Felly pam nad ydym yn trosi pob un o'r rhain o degol nodiant hecsadegol i
dim ond oherwydd dyna y cyfan sut yr ydym yn cyfeirio at y cof.
Felly, yn hytrach na bod 0 drwy 19, yr hyn sydd gennym yn sero
x sero drwy sero x1 tri.
Dyna'r 20 bytes o gof i ni wedi neu rydym yn edrych ar yn y ddelwedd hon
iawn yma.
>> Felly, i gyd yn cael ei ddweud, gadewch i ni cam i ffwrdd o gof am eiliad
ac yn ôl i'r awgrymiadau.
Dyma yw'r mwyaf pwysig beth i'w gofio
wrth i ni ddechrau gweithio gyda awgrymiadau.
Mae pwyntydd yn ddim byd mwy na chyfeiriad.
'N annhymerus' ddweud eto oherwydd mae mor bwysig,
pwyntydd yn ddim byd mwy na chyfeiriad.
Awgrymiadau yn gyfeiriadau i leoliadau er cof lle mae newidynnau yn byw.
Mae gwybod ei fod yn dod, gobeithio, yn ychydig yn haws i weithio gyda nhw.
Beth arall Rwy'n hoffi ei wneud yw cael math
diagramau weledol yn cynrychioli beth sydd digwydd gyda gwahanol linellau o god.
A byddwn yn gwneud hyn cwpl o weithiau mewn arwyddion,
a phan fyddwn yn sôn am ddeinamig dyrannu cof yn ogystal.
Gan fy mod yn meddwl bod diagramau hyn Gall fod yn arbennig o ddefnyddiol.
>> Felly, os wyf yn dweud, er enghraifft, k int yn fy cod, beth sy'n digwydd?
Wel beth sy'n digwydd yn y bôn yn Rwy'n cael gof a neilltuwyd i mi,
ond nid wyf yn hyd yn oed yn hoffi meddwl am y peth fel yna, yr wyf yn
hoffi meddwl am y peth fel blwch.
Mae gen i focs ac mae'n wyrdd lliw oherwydd fy mod
Gall roi cyfanrifau mewn blychau gwyrdd.
Os oedd yn yr wyf yn gymeriad Gallai gael blwch glas.
Ond yr wyf bob amser yn dweud, os ydw i'n creu blwch gallu dal cyfanrifau
y blwch wedi'i liwio gwyrdd.
Ac yr wyf yn cymryd marcio parhaol ac yr wyf yn ysgrifennu k ar ochr ohono.
Felly mae gen i focs o'r enw k, i ba gallaf roi cyfanrifau.
Felly, pan fyddaf yn dweud int k, dyna beth sy'n digwydd yn fy mhen.
Os wyf yn dweud k hafal pump, beth ydw i'n ei wneud?
Wel, dwi'n rhoi pump yn y blwch, dde.
Mae hyn yn eithaf syml, os Yr wyf yn dweud int k, creu bocs o'r enw k.
Os wyf yn dweud k hafal 5, rhoi pump i mewn i'r blwch.
Gobeithio nid yw hynny'n ormod o naid.
Dyma lle mae pethau'n mynd yn bach diddorol er.
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,
'i' got rhywbeth yn glir i'w wneud gyda cyfanrif.
Felly dw i'n mynd i liwio y blwch gwyrdd-ish,
Yr wyf yn gwybod ei fod yn rhywbeth i'w wneud gyda cyfanrif,
ond nid yw'n yn gyfanrif ei hun, oherwydd ei fod yn seren int.
Mae rhywbeth ychydig yn yn wahanol am y peth.
Felly rhan yn gyfanrif, a ond fel arall mae'n
heb fod yn rhy wahanol i yr hyn yr ydym yn siarad am.
Mae'n bocs, ei got a label, mae'n gwisgo pk label,
ac mae'n gallu ddaliad sêr int, beth bynnag y rhai yn cael eu.
Mae ganddynt rywbeth i'w wneud gyda chyfanrifau, yn amlwg.
Heres '' r llinell olaf er.
Os wyf yn dweud PK = & k, Whoa, beth yn union ddigwyddodd, dde?
Felly, mae hyn rhif ar hap, yn ôl pob golwg ar hap Rhif, yn cael ei daflu i mewn i'r blwch yno.
Y cyfan sydd yn, yn pk yn cael y cyfeiriad k.
Felly rwy'n glynu lle mae k yn byw yn y cof, ei gyfeiriad, cyfeiriad ei bytes.
Mae pob rwy'n ei wneud yw i ddim yn dweud bod gwerth yn yr hyn yr wyf i'n mynd
i roi y tu mewn fy bocs o'r enw pk.
Ac oherwydd y pethau hyn yn cael eu awgrymiadau, ac oherwydd edrych
mewn llinyn fel sero x wyth sero c saith pedwar wyth
dau sero yn ôl pob tebyg Nid yw yn ystyrlon iawn.
Pan rydym yn gyffredinol delweddu awgrymiadau, rydym mewn gwirionedd yn gwneud hynny fel awgrymiadau.
Pk yn rhoi'r wybodaeth i ni mae angen i ni ddod o hyd i ng yn y cof.
Felly y bôn pk Mae saeth ynddo.
Ac os ydym yn cerdded ar hyd o hynny saeth, dychmygu
mae'n rhywbeth y gallwch gerdded ar, os byddwn yn cerdded ar hyd y darn o'r saeth,
ym mhen iawn o hynny saeth, rydym yn Bydd dod o hyd i'r lleoliad mewn cof
lle mae k yn byw.
Ac mae hynny'n bwysig iawn oherwydd unwaith y byddwn yn gwybod lle mae k yn byw,
gallwn ddechrau i weithio gyda'r data tu mewn y lleoliad hwnnw cof.
Er ein bod yn cael teeny bit y blaen i ni ein hunain am y tro.
>> Felly beth yw pwyntydd?
Mae pwyntydd yn eitem data y mae ei gwerth yn, cyfeiriad cof.
Dyna oedd bod sero x wyth sero stwff digwydd, a oedd yn gyfeiriad cof.
Yr oedd hynny'n leoliad mewn cof.
A'r math o pwyntydd yn disgrifio'r math
o ddata yma i chi yn y cyfeiriad hwnnw cof.
Felly mae y seren int rhan gywir.
Os byddaf yn dilyn y saeth, 'i' mynd i mi arwain at lleoliad.
A dyna lleoliad, yr hyn yr wyf Bydd dod o hyd i yno yn fy enghraifft,
mae blwch lliw gwyrdd.
Mae'n yn gyfanrif, dyna beth yr wyf yn Bydd yn dod o hyd os byddaf yn mynd i'r cyfeiriad hwnnw.
Y math o ddata o pwyntydd yn disgrifio beth
byddwch yn dod o hyd yn y cyfeiriad hwnnw cof.
Felly dyma y peth 'n sylweddol oera er.
Awgrymiadau ein galluogi i basio newidynnau rhwng swyddogaethau.
Ac mewn gwirionedd yn pasio newidynnau ac ni ddylai fynd copïau ohonynt.
Oherwydd os ydym yn gwybod yn union ble er cof i ddod o hyd amrywiol,
Nid oes angen i ni wneud copi o hynny, gallwn yn unig yn mynd i'r lleoliad hwnnw
a gweithio gyda hynny amrywiol.
Felly, yn ei hanfod awgrymiadau didoli o wneud amgylchedd cyfrifiadurol
yn llawer mwy fel y byd go iawn, iawn.
>> Felly dyma gyfatebiaeth.
Lets 'ddeud bod gen i llyfr nodiadau, iawn, ac mae'n llawn o nodiadau.
A hoffwn i chi ei diweddaru.
Rydych yn swyddogaeth sy'n Nodiadau diweddariadau, dde.
Yn y ffordd yr ydym wedi bod yn gweithio hyd yn hyn, beth
yn digwydd yn y byddwch yn cymryd fy llyfr nodiadau, byddwch yn mynd i'r copi y siop,
byddwch yn gwneud copi Xerox o bob tudalen o'r llyfr nodiadau.
Byddwch yn gadael fy llyfr nodiadau yn ôl ar fy nesg pan fyddwch chi'n ei wneud,
byddwch yn mynd a chroesi allan bethau yn fy llyfr nodiadau sydd allan o ddyddiad neu anghywir,
ac yna byddwch yn pasio yn ôl i 'm' r pentwr o dudalennau Xerox
hynny yw replica o fy llyfr nodiadau gyda y newidiadau a ydych wedi gwneud iddo.
Ac ar y pwynt hwnnw, mae i fyny i mi fel y swyddogaeth galw, gan fod y sawl sy'n galw,
i benderfynu cymryd eich nodiadau a integreiddio yn ôl i fy llyfr nodiadau.
Felly mae llawer o gamau ran yma, ar y dde.
Ni fyddai ei hoffi yn well os Fi jyst dweud, hey, gallwch
diweddaru fy llyfr nodiadau ar gyfer mi, llaw i chi fy llyfr nodiadau,
a'ch bod yn cymryd pethau a llythrennol croesi nhw allan
ac yn diweddaru fy nodiadau yn fy llyfr nodiadau.
Ac yna rhoi fy llyfr nodiadau fi yn ôl.
Dyna fath o beth awgrymiadau yn caniatáu i ni ei wneud,
maent yn gwneud yr amgylchedd hwn yn llawer mwy fel sut rydym yn gweithredu mewn gwirionedd.
>> Mae pob hawl, felly dyna beth pwyntydd yw, gadewch i ni siarad
am sut mae awgrymiadau yn gweithio yn C, a sut y gallwn ni ddechrau i weithio gyda nhw.
Felly mae 'na pwyntydd syml iawn yn C a elwir y pwyntydd null.
Mae'r pwyntiau pwyntydd nwl i ddim.
Mae'n debyg bod hyn yn ymddangos fel ei fod yn mewn gwirionedd nid yn beth defnyddiol iawn,
ond gan y byddwn yn gweld Ychydig yn ddiweddarach, y ffaith
bod y pwyntydd null bodoli mewn gwirionedd yn wir yn gallu dod i mewn 'n hylaw.
A pryd bynnag y byddwch yn creu pwyntydd, a nad ydych yn gosod ei weithredu ar unwaith werth
enghraifft o osod ei werth yn union
Bydd cwpl sleidiau yn ôl lle dywedais pk hafal & k,
pk yn cael cyfeiriad k, fel y gawn ni weld beth mae hynny'n ei olygu,
byddwn yn gweld sut i roi cod hynny shortly- os nad ydym yn gosod ei werth i rywbeth
ystyrlon ar unwaith, dylech bob amser
gosod eich pwyntydd i bwyntio at null.
Dylech osod i bwyntio i ddim.
>> Mae hynny'n wahanol iawn na dim ond gadael y gwerth gan ei fod yn
ac yna datgan pwyntydd a dim ond dybio
mae'n null oherwydd dyna anaml wir.
Felly, dylech osod bob amser gwerth pwyntydd
i null os nad ydych yn gosod ei werth i rywbeth ystyrlon ar unwaith.
Gallwch wirio a yw gwerth pwyntydd yn yn null gan ddefnyddio'r gweithredwr cydraddoldeb
(==), Yn union fel yr ydych yn cymharu unrhyw gyfanrif Gwerthoedd neu werthoedd cymeriad gan ddefnyddio (==)
yn ogystal.
Mae'n rhyw fath arbennig o gyson gwerth y gallwch eu defnyddio i brofi.
Felly yr oedd hynny'n syml iawn pwyntydd, pwyntydd null.
Ffordd arall i greu pwyntydd yw i dynnu
cyfeiriad newidyn ydych eisoes wedi ei greu,
ac yr ydych yn gwneud hyn drwy ddefnyddio'r & cyfeiriad echdynnu gweithredwr.
Yr ydym eisoes wedi gweld o'r blaen yn yr enghraifft diagram cyntaf Dangosais.
Felly os x yn newidyn ein bod i wedi eisoes a grëwyd o'r math cyfanrif,
Yna & x yn pwyntydd i cyfanrif.
& X yw- cofiwch, & yn mynd i dynnu cyfeiriad y peth ar y dde.
Ac ers pwyntydd yn unig yw gyfeiriad, nag & x yn pwyntydd i cyfanrif
gwerth y mae ei lle mewn cof x bywydau.
Mae'n cyfeiriad x yn.
Felly & x yw cyfeiriad x.
Gadewch i ni fynd â hyn un cam ymhellach a chysylltu i rywbeth
Yr wyf yn cyfeirio at mewn fideo blaenorol.
Os arr yn amrywiaeth o dyblau, yna & Braced sgwâr arr ff yn pwyntydd
i dwbl.
IAWN.
arr braced sgwâr i, os arr yn amrywiaeth o dyblau,
Yna, arr braced sgwâr i yw yr elfen i-fed o hynny array,
a & arr braced sgwâr i yw lle mewn cof yr elfen i-fed o arr yn bodoli.
>> Felly beth yw'r goblygiadau yma?
Mae enw araeau, mae'r goblygiad o hyn holl beth,
yw bod enw arae yw mewn gwirionedd ei hun pwyntydd.
Rydych chi wedi bod yn gweithio gyda awgrymiadau ar hyd
bob tro eich bod wedi defnyddio amrywiaeth.
Cofiwch gan yr enghraifft ar gwmpas amrywiol,
yn agos at ddiwedd y fideo cyflwynaf enghraifft lle mae gennym swyddogaeth
Gelwir int set a swyddogaeth a elwir yn amrywiaeth a osodwyd.
Ac yn eich herio i benderfynu ai peidio, neu beth mae'r
gwerthoedd yr ydym hargraffu diwedd y swyddogaeth,
ar ddiwedd y brif raglen.
>> Os cofiwch o'r esiampl neu os ydych wedi gwylio'r fideo,
eich bod yn gwybod, pan fydd chi-yr alwad i int set yn effeithiol yn gwneud dim.
Ond mae'r alwad i osod amrywiaeth yn ei wneud.
Ac yr wyf yn fath o fychanu pam dyna a ddigwyddodd ar y pryd.
Wyf newydd ei ddweud, wel mae'n arae, 'i' arbennig, chi'n gwybod, mae 'na reswm.
Y rheswm yw bod amrywiaeth yn enw i yw gwirionedd dim ond pwyntydd,
ac mae hyn yn arbennig cystrawen braced sgwâr sy'n
yn gwneud pethau yn llawer brafiach i weithio gyda.
Ac maent yn gwneud y syniad o pwyntydd yn llawer llai bygythiol,
a dyna pam eu bod yn didoli o gyflwynir yn y ffordd honno.
Ond mewn gwirionedd araeau yn unig awgrymiadau.
A dyna pam pan fyddwn gwneud newid i'r array,
pan fyddwn yn pasio arae fel paramedr i swyddogaeth neu fel dadl
i swyddogaeth, cynnwys y arae Newidiodd mewn gwirionedd yn y callee
ac yn y galwr.
Pa gyfer pob math arall o Nid yw newidyn gwelsom oedd yr achos.
Felly dyna dim ond rhywbeth i gadw mewn meddwl pan fyddwch yn gweithio gyda awgrymiadau,
yw bod yr enw o amrywiaeth mewn gwirionedd pwyntydd
i'r elfen gyntaf y rhesi.
>> Iawn felly erbyn hyn mae gennym y rhain i gyd ffeithiau, gadewch i ni gadw i fynd, ar y dde.
Pam rydym yn poeni am lle mae rhywbeth yn byw.
Wel fel y dywedais, mae'n eithaf ddefnyddiol gwybod ble mae rhywbeth yn byw
er mwyn i chi fynd yno ac yn ei newid.
Weithio gydag ef ac mewn gwirionedd yn cael y peth yr ydych
am ei wneud i hynny gymryd effaith amrywiol, ac nid yn dod i rym ar rai copi ohono.
Gelwir hyn yn dereferencing.
Rydym yn mynd i'r cyfeiriad a rydym yn newid y gwerth yno.
Felly, os oes gennym pwyntydd ac fe'i gelwir pc, ac mae'n cyfeirio at gymeriad,
yna gallwn ddweud * pc a * pc yw'r enw o'r hyn y byddwn yn dod o hyd os ydym yn mynd
i'r cyfeiriad pc.
Yr hyn y byddwn yn dod o hyd mae yna gymeriad ac * Pc yw sut yr ydym yn cyfeirio at y data ar hynny
lleoliad.
Felly, gallem ddweud rhywbeth fel * Pc = D neu rywbeth fel 'na,
ac mae hynny'n golygu bod beth bynnag Roedd yn y cyfeiriad cof pc,
beth bynnag gymeriad oedd gynt yno, yn awr yn D, os byddwn yn dweud * pc = D.
>> Felly dyma ni eto gyda rhai pethau C od, ar y dde.
Felly, rydym wedi gweld * yn flaenorol fel rhai rhywsut yn rhan o'r math data,
ac yn awr mae'n cael ei ddefnyddio mewn cyd-destun ychydig yn wahanol
i gael mynediad at y data mewn lleoliad.
Dwi'n gwybod ei fod ychydig yn ddryslyd ac dyna mewn gwirionedd yn rhan o'r cyfan hon
fel, pam mae awgrymiadau wedi mytholeg hwn o'u cwmpas fel bod mor gymhleth,
yn fath o broblem cystrawen, yn onest.
Ond * yn cael ei ddefnyddio mewn cyd-destunau, fel rhan o'r enw math,
a byddwn yn gweld ychydig rhywbeth diweddarach arall, hefyd.
Ac ar hyn o bryd yw'r gweithredwr dereference.
Felly, mae'n mynd i'r cyfeiriad, mae'n mynedfeydd y data
yn y lleoliad y pwyntydd, a caniatáu i chi drin iddo ar ewyllys.
>> Yn awr mae hyn yn debyg iawn i ymweld â'ch cymydog, dde.
Os ydych yn gwybod beth yw eich cymydog yn byw, rydych yn
Nid yw hongian allan gyda'ch cymydog.
Rydych yn gwybod eich bod yn digwydd i gwybod ble maent yn byw,
ond nid yw hynny'n golygu y gan rhinwedd o gael wybodaeth honno
yr ydych yn rhyngweithio â hwy.
Os ydych am i ryngweithio gyda nhw, rhaid i chi fynd at eu tai,
rhaid i chi fynd i ble maent yn byw.
Ac unwaith y byddwch yn gwneud hynny, yna gallwch ryngweithio
gyda nhw yn union fel y byddech yn dymuno.
Ac yn yr un modd â newidynnau, mae angen i chi fynd at eu cyfeiriad
os ydych am i ryngweithio iddynt, nid ydych yn gallu gwybod y cyfeiriad.
A'r ffordd byddwch yn mynd i'r cyfeiriad yw i ddefnyddio *, mae'r gweithredwr dereference.
Beth ydych chi'n feddwl fydd yn digwydd os ydym yn ceisio dereference
pwyntydd y mae ei gwerth yn null?
Dwyn i gof bod y null pwyntydd yn pwyntio at ddim byd.
Felly, os ydych yn ceisio dereference dim byd neu ewch i gyfeiriad yn unrhyw beth,
beth yn eich barn chi fydd yn digwydd?
Segmentu Wel, os ydych yn dyfalu fai, byddech yn gywir.
Os ydych yn ceisio dereference pwyntydd null,
ydych yn dioddef segmentiad fai. Ond arhoswch,
Nid oedd rwy'n dweud wrthych, bod os nad ydych yn mynd
i osod eich gwerth eich Pointer i rywbeth ystyrlon,
dylech osod i null?
Fe wnes ac mewn gwirionedd yn y segmentiad fai yn fath o ymddygiad da.
>> Ydych chi erioed wedi datgan amrywiol ac Nid neilltuo ei werth yn union?
Felly rydych dim ond dweud int x; Nid ydych yn ei wneud mewn gwirionedd yn aseinio i unrhyw beth
ac yna yn ddiweddarach yn eich cod, chi argraffu'r gwerth x,
cael yn dal heb neilltuo i unrhyw beth.
Yn aml byddwch yn cael sero, ond weithiau i chi
Efallai gael rhywfaint rhif ar hap, ac nid oes gennych syniad ble y daeth.
Yn yr un modd gall pethau digwydd gyda chyfeiriadau.
Pan fyddwch yn datgan pwyntydd int * pk er enghraifft,
ac nad ydych yn aseinio i werth, byddwch yn cael pedwar bytes ar gyfer cof.
Beth bynnag pedwar bytes o cof y system yn gallu
yn gweld bod cael rhywfaint o werth ystyrlon.
Ac efallai y bu rhywbeth yno eisoes fod
oes ei angen mwyach gan un arall swyddogaeth, felly os oes gen ti
pa bynnag ddata oedd yno.
>> Beth os ydych yn ceisio gwneud dereference rhywfaint o gyfeiriad yr ydych yn don't- yna
eisoes bytes a gwybodaeth mewn yno, dyna awr yn eich pwyntydd.
Os ydych yn ceisio dereference y pwyntydd, efallai y byddwch yn cyboli gyda rhywfaint o gof
nad oeddech yn bwriadu i chwarae o gwmpas gyda hyn i gyd.
Ac yn wir y gallech ei wneud rhywbeth gwirioneddol drychinebus,
fel torri rhaglen arall, neu dorri swyddogaeth arall,
neu wneud rhywbeth maleisus hynny nad oeddech yn bwriadu ei wneud o gwbl.
Ac felly dyna pam ei bod yn mewn gwirionedd yn syniad da
i osod eich awgrymiadau i null os ydych peidiwch â'u gosod i rywbeth ystyrlon.
Mae'n fwy na thebyg yn well yn y diwedd y dydd ar gyfer eich rhaglen
at chwilfriwia wedyn iddo wneud rhywbeth y sgriwiau i fyny
rhaglen arall neu swyddogaeth arall.
Bod ymddygiad yn ôl pob tebyg hyd yn oed llai delfrydol na dim ond chwilfriwio.
Ac felly dyna pam ei bod yn mewn gwirionedd yn arfer da
i fynd i mewn i osod eich awgrymiadau i null os nad ydych yn eu gosod
at werth ystyrlon ar unwaith, mae gwerth eich bod yn gwybod
ac y gallwch yn ddiogel y dereference.
>> Felly gadewch i ni ddod yn ôl yn awr ac yn cymryd golwg ar gystrawen cyffredinol y sefyllfa.
Os wyf yn dweud int * p ;, beth Fi jyst ei wneud?
Yr hyn yr wyf wedi ei wneud yn hyn.
Rwy'n gwybod werth p yn gyfeiriad gan fod yr holl awgrymiadau yn unig
cyfeiriadau.
Gallaf dereference p gan ddefnyddio'r gweithredwr *.
Yn y cyd-destun hwn yma, ar yr union top dwyn i gof y * yn rhan o'r math.
Int * yw'r math data.
Ond gallaf dereference p ddefnyddio'r gweithredwr *,
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?
Byddaf yn dod o hyd yn gyfanrif.
Felly int * p yn y bôn gan ddywedyd, p yn gyfeiriad.
Gallaf dereference p ac os Wyf yn ei wneud, byddaf yn dod o hyd yn gyfanrif
yn y lleoliad hwnnw cof.
>> Iawn felly dywedais nad oedd un arall beth blino gyda sêr
a dyma lle mae hynny'n beth blino gyda sêr yn.
Ydych chi erioed wedi ceisio i ddatgan lluosog newidynnau o'r un math
ar yr un llinell o god?
Felly, am eiliad, esgus bod y llinell, y cod Fi 'n weithredol yn cael yno mewn gwyrdd
Nid yw yno a 'i jyst yn dweud int x, y, z ;.
Beth fyddai'n ei wneud yw mewn gwirionedd yn creu tri newidyn cyfanrif ar eich cyfer,
un o'r enw x, un o'r enw y, ac un o'r enw z.
Mae'n ffordd i wneud hynny heb gorfod rhannu ar dair llinell.
>> Dyma lle mae sêr yn cael blino eto fodd bynnag,
oherwydd bod y * mewn gwirionedd yn rhan y ddau enw math a rhan
o'r enw newidyn.
Ac felly os wyf yn dweud int * px, py, PZ, yr hyn yr wyf mewn gwirionedd yn cael ei pwyntydd i'r cyfanrif
Gelwir px a dau rif cyfan, py a PZ.
A dyna debyg nad beth rydym eisiau, nid yw hynny'n dda.
>> Felly, os ydw i am greu awgrymiadau lluosog ar yr un llinell, o'r un math,
a sêr, yr hyn yr wyf ei angen mewn gwirionedd ei wneud yw dweud int * yf, * pb, * pc.
Nawr ar ôl dim ond dweud hynny ac yn awr yn dweud wrthych hyn,
mae'n debyg na fydd yn gwneud hyn.
Ac mae'n fwy na thebyg yn beth da yn onest, oherwydd eich bod efallai yn anfwriadol
hepgor seren, rhywbeth fel 'na.
Mae'n debyg mai'r peth gorau i ddatgan efallai awgrymiadau ar linellau unigol,
ond mae'r un un arall o'r rhai a cystrawen blino
pethau gyda sêr sy'n gwneud awgrymiadau mor anodd i weithio gyda.
Gan mai dim ond cystrawennol hwn llanast rhaid i chi weithio drwy'r.
Gydag ymarfer mae'n ei wneud dod yn ail natur mewn gwirionedd.
Rwy'n dal i wneud camgymeriadau ag ef o hyd ar ôl rhaglenni ar gyfer 10 mlynedd,
felly peidiwch â bod cynhyrfu os bydd rhywbeth yn digwydd i chi, mae'n eithaf cyffredin yn onest.
Mae'n wirioneddol fath o nam ar gystrawen.
>> Iawn felly yr wyf yn fath o addo y byddem yn ail ymweld
y cysyniad o pa mor fawr yw'r llinyn.
Wel, os wyf yn dweud wrthych fod llinyn, mae gennym mewn gwirionedd fath o
bod yn gorwedd i chi yr holl amser.
Does dim math o ddata a elwir yn llinyn, ac yn wir yr wyf yn
crybwyll hyn yn un o'n fideos cynharaf ar fathau data,
bod llinyn yn fath data y ei greu ar eich cyfer yn CS50.h.
Mae'n rhaid i chi #include CS50.h er mwyn ei ddefnyddio.
>> Wel llinyn yn wirioneddol yn unig alias am rywbeth
Gelwir y torgoch *, a pwyntydd i'r cymeriad.
Wel awgrymiadau, galw i gof, yn unig yn mynd i'r afael.
Felly beth yw maint mewn bytes o linyn?
Wel mae'n bedair neu wyth.
A'r rheswm yr wyf yn dweud pedwar neu wyth oherwydd ei fod mewn gwirionedd
yn dibynnu ar y system, Os ydych chi'n defnyddio Idiaid CS50, torgoch * yn yr un maint â torgoch
* Yw wyth, mae'n system 64-bit.
Mae pob cyfeiriad yn y cof yw 64 darnau hir.
Os ydych chi'n defnyddio offer CS50 neu ddefnyddio unrhyw 32-bit peiriant,
ac yr ydych wedi clywed y term 32-bit peiriant, beth yw 32-bit peiriant?
Wel 'i jyst yn golygu bod pob gyfeiriad yn y cof yw 32 darnau hir.
Ac felly 32 darnau yn bedair bytes.
Felly torgoch mae * yn bedair neu wyth bytes yn dibynnu ar eich system.
Ac yn wir unrhyw fathau data, ac pwyntydd i unrhyw ddata
deipio, gan fod yr holl awgrymiadau yn unig cyfeiriadau, pedwar neu wyth bytes.
Felly gadewch i ni edrych eto ar hyn diagram a gadewch i ni ddod i'r casgliad
fideo hwn gydag ychydig o ymarfer corff yma.
Felly dyma y diagram inni adael i ffwrdd gyda ar y cychwyn cyntaf y fideo.
Felly, beth sy'n digwydd nawr os ydw i'n dweud * PK = 35?
Felly beth mae'n ei olygu wrth ddweud, * PK = 35?
Cymerwch eiliad.
* Pk.
Yn y cyd-destun yma, * yw gweithredwr dereference.
Felly, pan fydd y dereference gweithredwr yn cael ei ddefnyddio,
rydym yn mynd i'r cyfeiriad tynnu sylw at gan pk, ac yr ydym yn newid yr hyn yr ydym yn dod o hyd.
Felly * PK = 35 yn effeithiol yn gwneud hyn at y llun.
Felly mae'n bôn syntactically union o fod wedi dweud k = 35.
>> Un yn fwy.
Os wyf yn dweud int m, yr wyf yn creu newidyn newydd o'r enw m.
Bocs newydd, 'i' blwch gwyrdd oherwydd mae'n mynd i ddal yn gyfanrif,
ac mae'n labelu m.
Os wyf yn dweud m = 4, yr wyf yn rhoi cyfanrif i mewn i'r blwch.
Os dyweder PK = & m, sut mae diagram hwn newid?
Pk = & m, a ydych yn cofio yr hyn y mae'r & Gweithredwr yn ei wneud neu'n cael ei alw?
Cofiwch fod & rhywfaint o enw newidyn yn y cyfeiriad o enw newidyn.
Felly, yr hyn yr ydym yn ei ddweud yw pk yn cael y cyfeiriad m.
Ac felly yn effeithiol yr hyn sy'n digwydd y diagram yw nad PK pwyntiau bellach
i k, ond pwyntiau i m.
>> Unwaith eto, awgrymiadau yn iawn anodd i weithio gyda
ac maent yn cymryd llawer o arfer, ond oherwydd
am eu gallu i ganiatáu i chi i basio data rhwng swyddogaethau
ac mewn gwirionedd yn cael y rhai newidiadau yn dod i rym,
cael eich pen o gwmpas yn bwysig iawn.
Mae'n debyg yw'r mwyaf cymhleth pwnc yr ydym yn trafod yn CS50,
ond mae gwerth yr ydych yn gael o ddefnyddio awgrymiadau
llawer mwy na'r cymhlethdodau sy'n dod oddi wrthynt dysgu.
Felly, yr wyf yn dymuno'r gorau i chi lwc dysgu am awgrymiadau.
Rwy'n Doug Lloyd, mae hyn yn CS50.