[Powered by Google Translate] [Adran 4 - Mwy cyfforddus]
[Rob Bowden - Harvard University]
[Mae hyn yn CS50. - CS50.TV]
Mae gennym yfory cwis, rhag ofn nad ydych guys yn gwybod hynny.
Mae'n bôn ar bopeth y gallech fod wedi gweld yn y dosbarth neu a ddylai fod wedi gweld yn y dosbarth.
Mae hynny'n cynnwys awgrymiadau, er eu bod yn bwnc ddiweddar iawn.
Dylech o leiaf yn deall y lefelau uchel ohonynt.
Mae unrhyw beth a mynd drosodd yn y dosbarth, dylech ddeall ar gyfer y cwis.
Felly os oes gennych gwestiynau arnynt, gallwch ofyn iddynt yn awr.
Ond mae hyn yn mynd i fod yn sesiwn iawn a arweinir gan fyfyrwyr lle rydych guys yn gofyn cwestiynau,
felly gobeithio y bobl cwestiynau.
Oes gan unrhyw un gwestiynau?
Ydw. >> [Myfyrwyr] Allwch chi fynd dros awgrymiadau eto?
Byddaf yn mynd dros awgrymiadau.
Mae eich holl newidynnau o reidrwydd yn byw mewn cof,
ond fel arfer nid ydych yn poeni am hynny, ac rydych yn dweud x + 2 ac y + 3
a bydd y casglwr chyfrif i maes ble y pethau yn byw ar eich cyfer chi.
Unwaith y byddwch yn delio â awgrymiadau, nawr eich bod yn benodol gan ddefnyddio cyfeiriadau hynny cof.
Felly bydd newidyn unigol yn unig erioed yn byw mewn cyfeiriad unigol ar unrhyw adeg benodol.
Os ydym am i ddatgan pwyntydd, beth yw'r fath yn mynd i edrych fel?
>> Rwyf am ddatgan p pwyntydd. Beth mae'r fath yn edrych fel?
[Myfyrwyr] int * p. >> Yeah. Felly int * p.
A sut ydw i'n ei wneud yn cyfeirio at x? >> [Myfyrwyr] ampersand.
[Bowden] Felly ampersand elwir llythrennol y cyfeiriad y gweithredwr.
Felly, pan fyddaf yn dweud & x mae'n cael y cyfeiriad cof am y x amrywiol.
Felly, yn awr yr wyf yn cael y p pwyntydd, ac unrhyw le yn fy cod gallaf ddefnyddio * p
neu gallwn i eu defnyddio x a bydd yn yr un peth yn union.
(* P). Beth mae hyn yn ei wneud? Beth mae hynny'n ei seren ei olygu?
[Myfyrwyr] Mae'n golygu gwerth ar y pwynt hwnnw. >> Yeah.
Felly, os ydym yn edrych arno, gall fod yn ddefnyddiol iawn i dynnu allan y diagramau
lle mae hyn yn blwch bach cof am x, sy'n digwydd i gael y gwerth 4,
yna mae gennym blwch bach cof am p,
ac felly pwyntiau p ag x, felly rydym yn tynnu saeth o p i x.
Felly, pan fyddwn yn dweud * p ydym ni'n ei ddweud yn mynd i'r blwch sy'n p.
Star yn dilyn y saeth, ac yna gwneud beth bynnag rydych am â'r blwch iawn yno.
Felly gallaf ddweud * p = 7; ac a fydd yn mynd i'r blwch sydd yn x a newid y i 7.
Neu gallwn ddweud int z = * p * 2; Dyna ddryslyd am ei fod yn, seren seren.
Mae'r seren un yn dereferencing p, y seren arall yn lluosi gyda 2.
Hysbysiad gallwn i gael un mor dda disodli'r p * gyda x.
Gallwch eu defnyddio yn yr un ffordd.
Ac yna gall ddiweddarach gennyf p bwynt i beth cwbl newydd.
Gallaf ddweud p = &z;
Felly nawr p unrhyw bwyntiau hwy i x; mae'n cyfeirio at z.
Ac unrhyw amser, rwy'n * p 'i' yr un fath â gwneud z.
Felly, y peth defnyddiol am hyn yw unwaith i ni ddechrau mynd i mewn i swyddogaethau.
>> Mae'n fath o ddiwerth i ddatgan pwyntydd sy'n pwyntio at rywbeth
ac yna rydych chi'n jyst dereferencing ei
pryd y gallech fod wedi defnyddio'r newidyn gwreiddiol i ddechrau.
Ond pan fyddwch yn mynd i mewn i swyddogaethau - felly gadewch i ni ddweud ein bod wedi rhywfaint o swyddogaeth, int foo,
sy'n cymryd pwyntydd, a dim ond yn * p = 6;
Fel y gwelsom o'r blaen gyda cyfnewid, ni allwch wneud yn cyfnewid effeithiol a swyddogaeth ar wahân
jyst yn mynd heibio gyfanrifau oherwydd bod popeth yn C yw bob amser yn mynd heibio yn ôl gwerth.
Hyd yn oed pan fyddwch yn pasio awgrymiadau rydych yn pasio yn ôl gwerth.
Fel mae'n digwydd bod y gwerthoedd yn gyfeiriadau cof.
Felly, pan fyddaf yn dweud foo (p); Rwy'n mynd heibio i'r pwyntydd i mewn i'r foo swyddogaeth
ac yna foo yn ei wneud * p = 6;
Felly, y tu mewn y swyddogaeth honno, * p yn dal yn gyfwerth ag x,
ond ni allaf ddefnyddio x tu mewn swyddogaeth honno gan nad yw'n cwmpasu o fewn y swyddogaeth honno.
Felly * p = 6 yw'r unig ffordd y gallaf gael mynediad newidyn lleol o swyddogaeth arall.
Neu, wel, awgrymiadau yw'r unig ffordd y gallaf gael mynediad newidyn lleol o swyddogaeth arall.
[Myfyrwyr] Dewch i ddweud eich bod eisiau dychwelyd pwyntydd. Sut yn union ydych chi'n ei wneud hynny?
[Bowden] Dychwelyd pwyntydd fel yn rhywbeth fel int y = 3; dychwelyd & y? >> [Myfyrwyr] Yeah.
[Bowden] Iawn. Ni ddylech byth wneud hyn. Mae hyn yn wael.
Rwy'n credu fy mod yn gweld yn y sleidiau hyn darlith i chi ddechrau gweld y diagram cyfan o gof
lle bydd hyd yma gennych gyfeiriad cof 0
ac i lawr dyma i chi gael 4 cof gyfeiriad gigs neu 2 i 32.
Felly, yna mae gennych chi rai pethau a rhai pethau, ac yna mae gennych eich pentwr
ac rydych wedi cael eich tomen, yr ydych newydd ddechrau dysgu am, dyfu i fyny.
[Myfyrwyr] Onid y domen uwchben y pentwr?
>> Yeah. Mae'r domen ar ben, ynte? >> [Myfyrwyr] Wel, mae'n rhoi 0 ar ben.
[Myfyrwyr] O, efe a osododd 0 ar ben. >> [Myfyrwyr] O, iawn.
Ymwadiad: Unrhyw le gyda CS50 rydych chi'n mynd i weld y ffordd hon. >> [Myfyrwyr] Iawn.
Dim ond pan fyddwch chi'n cyntaf weld pentyrrau,
yn hoffi pan fyddwch yn meddwl am pentwr chi feddwl am bentyrru pethau ar ben ei gilydd.
Felly, rydym yn tueddu i troi o gwmpas hyn fel bod y pentwr yn tyfu i fyny fel pentwr fel arfer byddai
yn hytrach na'r pentwr yn hongian i lawr. >> [Myfyrwyr] Peidiwch â tomenni dechnegol yn tyfu i fyny hefyd, er bod?
Mae'n dibynnu ar yr hyn rydych yn ei olygu wrth dyfu i fyny.
Mae'r stac a'r domen bob amser yn tyfu mewn cyfeiriadau dirgroes.
Mae pentwr bob amser yn tyfu i fyny yn yr ystyr ei fod yn tyfu i fyny
tuag at gyfeiriadau cof uwch, ac mae'r domen yn tyfu i lawr
yn ei fod yn tyfu tuag at gyfeiriadau cof is.
Felly y brig yw 0 ac y gwaelod yn gyfeiriadau cof uchel.
Maent yn ddau dyfu, dim ond yn gwrthwynebu cyfarwyddiadau.
[Myfyrwyr] Fi jyst yn golygu bod oherwydd eich bod yn dweud eich bod yn rhoi corn ar y gwaelod
oherwydd ei fod yn ymddangos yn fwy greddfol oherwydd am y pentwr i ddechrau ar y brig o domen,
tomen ar ben ei hun hefyd, felly that's - Yeah. >>
Byddwch hefyd yn meddwl am y domen fel tyfu i fyny ac yn fwy, ond y pentwr yn fwy felly.
Felly, y corn simnai yw un yr ydym math o awyddus i ddangos tyfu i fyny.
Ond ym mhobman i chi edrych fel arall yn mynd i ddangos cyfeiriad 0 ar y brig
a'r cyfeiriad cof uchaf ar y gwaelod, felly mae hwn yn eich barn arferol o gof.
>> Oes gennych chi gwestiwn?
[Myfyrwyr] Allwch chi ddweud mwy wrthym am y domen?
Yeah. 'N annhymerus' dod i hynny mewn eiliad.
Weinidog, gan fynd yn ôl i pam ddychwelyd a y yn beth drwg,
ar y pentwr gennych criw o fframiau simnai sy'n cynrychioli pob un o'r swyddogaethau
sydd wedi cael ei alw.
Felly, anwybyddu pethau blaenorol, ar frig eich stac bob amser yn mynd i fod yn brif swyddogaeth
ers bod yn y swyddogaeth gyntaf sy'n cael ei alw.
Ac yna pan fyddwch yn ffonio swyddogaeth arall, y pentwr yn mynd i dyfu i lawr.
Felly, os galwaf rhywfaint o swyddogaeth, foo, ac mae'n mynd yn ei ffrâm pentwr ei hun,
gall alw rhyw swyddogaeth, bar, mae'n cael ei ffrâm pentwr hun.
A gallai fod yn ailadroddus bar a gallai galw ei hun,
ac er mwyn ail alwad i far yn mynd i gael ei ffrâm pentwr hun.
Ac felly beth sy'n mynd yn y fframiau pentwr i gyd o'r newidynnau lleol
a'r holl ddadleuon swyddogaeth sydd -
Unrhyw bethau sydd yn lleol gwmpasu i'r swyddogaeth hon yn mynd yn y fframiau stac.
Felly mae hynny'n golygu pan fyddaf yn dweud rhywbeth fel bar yn swyddogaeth,
Im 'jyst yn mynd i ddatgan cyfanrif ac yna dychwelyd pwyntydd i'r cyfanrif.
Felly, lle mae y byw?
[Myfyrwyr] yn byw yn y bar. >> [Bowden] Yeah.
Rhywle yn y sgwâr bach o gof yn sgwâr Littler sydd y ynddo.
Pan fyddaf yn dychwelyd & y, rwy'n dychwelyd pwyntydd at y bloc bach o gof.
Ond yna pan fydd yn dychwelyd swyddogaeth, ei ffrâm pentwr yn cael popped oddi ar y pentwr.
A dyna pam y gelwir pentwr.
Mae fel y data corn strwythur, os ydych yn gwybod beth yw hynny.
Neu hyd yn oed fel pentwr o hambyrddau bob amser yn yr enghraifft,
prif mynd i fynd ar y gwaelod, ac yna y swyddogaeth cyntaf i chi alw yn mynd i fynd ar ben hynny,
ac ni allwch fynd yn ôl i'r brif nes i chi ddychwelyd o holl swyddogaethau sydd wedi cael eu galw
sydd wedi cael eu gosod ar ei ben.
>> [Myfyrwyr] Felly, os gwnaethoch chi'n dychwelyd y y &, bod y gwerth hwnnw'n amodol i newid heb rybudd.
Ie, it's - >> [myfyrwyr] Gallai fod yn overwritten. >> Yeah.
Mae'n gwbl - Os byddwch yn ceisio -
Byddai hyn hefyd yn bar * int oherwydd ei fod yn dychwelyd pwyntydd,
felly o'i fath yn dychwelyd * int.
Os ydych yn ceisio defnyddio'r gwerth dychwelyd y swyddogaeth hon, mae'n ymddygiad undefined
oherwydd bod pwyntydd cyfeirio at gof gwael. >> [Myfyrwyr] Iawn.
Felly beth os, er enghraifft, rydych yn datgan int * y = malloc (sizeof (canolradd))?
Dyna well. Ydw.
[Myfyrwyr] Siaradon ni am sut pan fyddwn yn llusgo pethau i'n ailgylchu bin
nad ydynt yn dileu mewn gwirionedd; rydym yn unig yn colli eu awgrymiadau.
Felly, yn yr achos hwn rydym mewn gwirionedd yn dileu y gwerth neu a yw'n dal i fod yno yn y cof?
Ar gyfer y rhan fwyaf, mae'n mynd i dal i fod yno.
Ond gadewch i ni ddweud ein bod yn digwydd i alw ryw swyddogaeth arall, Baz.
Baz yn mynd i gael ei ffrâm stac ei hun yma.
Mae'n mynd i gael ei drosysgrifo yr holl bethau hyn,
ac yna os ydych yn ddiweddarach geisio defnyddio'r pwyntydd a gawsoch o'r blaen,
nid yw'n mynd i fod yn un gwerth.
Mae'n mynd i fod wedi newid dim ond oherwydd eich enw Baz swyddogaeth.
[Myfyrwyr] Ond nid oedd byddem, rydym yn dal i gael 3?
[Bowden] Yn ôl pob tebyg, byddech.
Ond ni allwch ddibynnu ar hynny. C yn unig yn dweud ymddygiad anniffiniedig.
>> [Myfyrwyr] O, mae'n ei wneud. Iawn.
Felly, pan fyddwch eisiau dychwelyd pwyntydd, dyma lle malloc yn dod i mewn defnyddio.
Rwy'n ysgrifennu mewn gwirionedd dim ond dychwelyd malloc (3 * sizeof (canolradd)).
Byddwn yn mynd dros malloc fwy mewn eiliad, ond mae'r syniad o malloc yw eich holl newidynnau lleol
bob amser yn mynd ar y pentwr.
Mae unrhyw beth sydd wedi malloced yn mynd ar y domen, a bydd yn am byth a bob amser ar y domen
hyd nes y byddwch yn benodol rhyddhau ei.
Felly, mae hyn yn golygu pan fyddwch malloc rhywbeth, mae'n mynd i oroesi ar ôl y ffurflenni swyddogaeth.
[Myfyrwyr] A fydd yn goroesi ar ôl i'r rhaglen yn stopio rhedeg? Rhif >>
Iawn, felly mae'n mynd i fod yno nes bod y rhaglen yn yr holl ffordd wneud yn rhedeg. >> Ydy.
Gallwn fynd dros manylion o'r hyn sy'n digwydd pan fydd y rhaglen yn stopio rhedeg.
Efallai y bydd angen i atgoffa fi, ond mae hynny'n beth ar wahân yn llwyr.
[Myfyrwyr] Felly malloc yn creu pwyntydd? >> Yeah.
Malloc - >> [myfyrwyr] Rwy'n credu malloc dynodi bloc o cof y gall pwyntydd defnyddio.
[Bowden] arnaf eisiau i'r diagram eto. >> [Myfyrwyr] Felly, mae hyn swyddogaeth yn gweithio, er bod?
[Myfyrwyr] Yeah, malloc dynodi bloc o cof y gallwch eu defnyddio,
ac yna mae'n dychwelyd cyfeiriad y bloc cyntaf y cof.
>> [Bowden] Yeah. Felly, pan fyddwch yn malloc, rydych yn crafangio rhai bloc o cof
dyna o bryd yn y domen.
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.
Felly, gadewch i ni ddweud y domen yn rhy fach.
Yna, mae'n ymwneud i dyfu ychydig a dychwelyd pwyntydd at y bloc mai dim ond tyfodd.
Pan fyddwch yn rhad ac am ddim pethau, eich bod yn gwneud mwy o le yn y domen,
Gall felly, yna ddiweddarach alwad i malloc ailddefnyddio bod y cof eich bod wedi rhyddhau o'r blaen.
Y peth pwysig am malloc ac am ddim yw ei fod yn rhoi i chi reolaeth lwyr
yn ystod oes y blociau cof.
Newidynnau byd-eang bob amser yn fyw.
Newidynnau lleol yn fyw o fewn eu cwmpas.
Cyn gynted ag y byddwch yn mynd heibio i brês cyrliog, y newidynnau lleol yn marw.
Cof Malloced yn fyw pan fyddwch ei angen i fod yn fyw
ac yna ei ryddhau pan fyddwch yn dweud iddo gael ei ryddhau.
Dyna'r gwirionedd yn y 3 yn unig fathau o gof, mewn gwirionedd.
Mae rheoli cof awtomatig, sef y pentwr.
Mae pethau'n digwydd i chi yn awtomatig.
Pan fyddwch yn dweud x int, cof yn cael ei ddyrannu ar gyfer x int.
Pan fydd x yn mynd allan o gwmpas, y cof yn cael ei adfer ar gyfer x.
Yna mae rheoli cof deinamig, sef yr hyn malloc yw,
sef pan fydd gennych reolaeth.
Byddwch yn ddynamig benderfynu pryd y dylid cof na ddylid ei ddyrannu.
Ac yna mae sefydlog, a dim ond yn golygu ei fod yn byw am byth,
sef yr hyn y newidynnau byd-eang.
Maent yn unig bob amser yn y cof.
>> Cwestiynau?
[Myfyrwyr] Allwch chi ddiffinio bloc dim ond drwy ddefnyddio braces cyrliog
ond beidio â gorfod cael? os ddatganiad neu ddatganiad gyfnod, neu unrhyw beth fel 'na
Gallwch ddiffinio fel bloc mewn swyddogaeth, ond sydd â braces cyrliog hefyd.
[Myfyrwyr] Felly, nid ydych yn gallu gael fel pâr ar hap o braces cyrliog yn eich cod
sydd â newidynnau lleol? >> Ydy, gallwch.
Y tu mewn bar int gallem gael {int y = 3;}.
Dyna i fod i fod yn iawn yma.
Ond hynny yn gyfan gwbl yn diffinio cwmpas int y.
Ar ôl y brês cyrliog yn ail, ni all y cael ei ddefnyddio mwyach.
Rydych chi bron byth yn gwneud hynny, er.
Mynd yn ôl at yr hyn sy'n digwydd pan fydd rhaglen ddod i ben,
mae math o gelwydd gamsyniad / hanner ein bod yn rhoi er mwyn gallu gwneud pethau'n haws.
Rydym yn dweud wrthych pan fyddwch yn dyrannu cof
eich bod yn dyrannu rhai darn o RAM ar gyfer y newidyn.
Ond nid ydych wirioneddol yn uniongyrchol cyffwrdd RAM erioed yn eich rhaglenni.
Os ydych yn meddwl am y peth, sut y tynnais -
Ac mewn gwirionedd, os ydych yn mynd drwy'r yn GDB byddwch yn gweld yr un peth.
Waeth faint o weithiau ydych yn rhedeg eich rhaglen neu pa raglen ydych yn rhedeg,
y pentwr bob amser yn mynd i ddechrau -
eich bod bob amser yn mynd i weld newidynnau amgylch rhywbeth oxbffff cyfeiriad.
Mae fel arfer yn rhywle yn y rhanbarth hwnnw.
Ond sut y gall 2 raglen o bosibl yn cael awgrymiadau ar gyfer cof un fath?
[Myfyrwyr] Mae rhywfaint o ddynodiad mympwyol o ble oxbfff yn dybiedig i fod ar y RAM
y gellir mewn gwirionedd fod mewn mannau gwahanol yn dibynnu ar bryd y swyddogaeth ei alw.
Yeah. Mae'r term yn cof rhithwir.
Y syniad yw bod pob un broses, pob un rhaglen sy'n cael ei rhedeg ar eich cyfrifiadur
wedi ei hun - gadewch i ni dybio 32 catiau - gofod cyfeiriad cwbl annibynnol.
Mae hyn yn y gofod cyfeiriad.
Mae wedi ei hun yn gyfan gwbl annibynnol 4 gigabeit i'w defnyddio.
>> Felly, os ydych yn rhedeg 2 raglen ar yr un pryd, mae'r rhaglen hon yn gweld 4 gigabeit iddo'i hun,
y rhaglen hon yn gweld 4 gigabeit iddo'i hun,
ac mae'n amhosibl ar gyfer y rhaglen i dereference pwyntydd
a darfod i fyny gyda'r cof o'r rhaglen hon.
A beth cof rhithwir yn mapio o ofod brosesau gyfeiriad
i bethau gwirioneddol ar RAM.
Felly, mae i fyny i eich system weithredu i wybod bod,
hey, pan fydd hyn pwyntydd dereferences oxbfff guy, sydd wir yn golygu
ei fod am RAM beit 1000,
ond os yw hyn yn oxbfff rhaglen dereferences, ei fod mewn gwirionedd eisiau RAM beit 10,000.
Gallant fod yn fympwyol yn hyn ar wahân.
Mae hyn hyd yn oed yn wir am bethau o fewn gofod cyfeiriad unigol prosesau.
Felly, fel ei fod yn gweld pob un o'r 4 gigabeit iddo'i hun, ond gadewch i ni ddweud -
[Myfyrwyr] Oes gan bob proses sengl -
Lets 'ddeud oes gennych gyfrifiadur gyda dim ond 4 gigabeit o RAM.
A oes gan bob proses unigol yn gweld y 4 gigabeit cyfan? >> Ydy.
Ond y 4 gigabeit y gwêl yn gorwedd.
Mae'n dim ond mae'n credu ei fod wedi hyn i gyd cof am nad yw'n gwybod unrhyw broses arall yn bodoli.
Bydd ond yn defnyddio cof cymaint ag y gwirionedd angen.
Nid yw'r system weithredu yn mynd i roi RAM at y broses hon
os nad yw'n defnyddio unrhyw cof yn y rhanbarth cyfan.
Dyw hi ddim yn mynd i roi cof ar gyfer y rhanbarth.
Ond mae'r syniad yw bod - Im 'yn ceisio meddwl am - ni allaf feddwl am gyfatebiaeth.
Analogies yn galed.
Un o'r materion y cof rhithwir neu un o'r pethau mae'n datrys
yw y dylai prosesau fod yn gwbl ymwybodol o'i gilydd.
Ac er mwyn i chi ysgrifennu unrhyw raglen mai dim ond dereferences unrhyw pwyntydd,
yn hoffi dim ond ysgrifennu rhaglen sy'n dweud * (ox1234),
a bod cyfeiriad cof dereferencing 1234.
>> Ond mae i fyny at y system yn gweithredu wedyn i droi'r hyn 1,234 yn ei olygu.
Felly, os digwydd i 1234 fod yn gyfeiriad cof dilys ar gyfer y broses,
fel ei fod ar y corn neu rywbeth, yna bydd hyn yn dychwelyd y gwerth y cyfeiriad cof
cyn belled â bod y broses yn gwybod.
Ond nid os yw 1234 yn gyfeiriad dilys, fel mae'n digwydd i dir
mewn rhai darn bach o gof yma sydd y tu hwnt i'r simnai a'r tu hwnt i'r domen
ac nad ydych wedi defnyddio wirioneddol hynny, yna dyna pryd byddwch yn cael pethau fel segfaults
oherwydd eich bod yn cyffwrdd cof na ddylech fod yn cyffwrdd.
Mae hyn hefyd yn wir -
Mae system 32-bit, 32 darnau yn golygu bod gennych 32 catiau i ddiffinio cyfeiriad cof.
Dyma pam awgrymiadau 8 bytes oherwydd mae 32 darnau 8 bytes - neu 4 bytes.
Pointers yn 4 bytes.
Felly, pan fyddwch yn gweld pwyntydd fel oxbfffff, hynny yw -
O fewn unrhyw raglen gallwch adeiladu unrhyw pwyntydd mympwyol,
unrhyw le o ox0 i ych 8 f's - ffffffff.
[Myfyrwyr] Oeddech nad ydych yn dweud eu bod yn 4 bytes? >> Yeah.
[Myfyrwyr] Yna bydd pob beit gael - >> hecsadegol [Bowden].
Hecsadegol - 5, 6, 7, 8. Felly awgrymiadau rydych chi'n mynd i bob amser yn gweld yn hecsadegol.
'I' jyst sut yr ydym yn dosbarthu awgrymiadau.
Bob 2 ddigid o hecsadegol yw 1 beit.
Felly, mae mynd i fod yn 8 digid hecsadegol ar gyfer 4 bytes.
Felly, i bob un pwyntydd ar system 32-bit yn mynd i fod yn 4 bytes,
sy'n golygu bod yn eich proses y gallwch adeiladu unrhyw 4 mympwyol bytes
a gwneud pwyntydd allan ohono,
sy'n golygu, cyn belled â'i fod yn ymwybodol, gall fynd i'r afael yn 2 gyfan i 32 bytes y cof.
Er nad yw'n wir yn cael mynediad i hynny,
hyd yn oed os yw eich cyfrifiadur dim ond 512 megabeit, mae'n credu bod ganddo lawer o gof.
Ac mae'r system weithredu yn smart ddigon mai dim ond dyrannu hyn yr ydych ei angen mewn gwirionedd.
Nid yw'n unig yn mynd, oh, proses newydd: 4 gigs.
>> Yeah. >> [Myfyrwyr] Beth mae'r ych yn ei olygu? Pam ydych chi'n ysgrifennu?
Dim ond y symbol ar gyfer hecsadegol.
Pan fyddwch yn gweld dechrau rhif gyda ych, y pethau olynol yn hecsadegol.
[Myfyrwyr] Rydych yn esbonio am beth sy'n digwydd pan fydd rhaglen ddod i ben. >> Ydy.
Beth sy'n digwydd pan fydd rhaglen yn dod i ben yn y system weithredu
dim ond erases y mapiadau sydd ganddo ar gyfer y cyfeiriadau hyn, a dyna ni.
Gall y system weithredu yn awr yn unig yn rhoi y cof i raglen arall i'w defnyddio.
[Myfyrwyr] Iawn.
Felly, pan fyddwch yn dyrannu rhywbeth ar y domen neu newidynnau stac neu fyd-eang neu unrhyw beth,
maent i gyd yn unig yn diflannu cyn gynted ag y rhaglen yn dod i ben
oherwydd bod y system weithredu yn awr yn rhydd i roi'r cof i unrhyw broses arall.
[Myfyrwyr] Er bod pob tebyg yn dal gwerthoedd ysgrifenedig yn? >> Yeah.
Mae'r gwerthoedd hyn yn debygol dal i fod yno.
Mae'n dim ond mae'n mynd i fod yn anodd cael gafael arnynt.
Mae'n llawer mwy anodd i gael gafael arnynt nag yw hi i gael mewn ffeiliau wedi'u dileu
oherwydd bod y math ffeil dileu o eistedd yno am amser hir ac y disg caled yn llawer mwy.
Felly, mae'n mynd i overwrite gwahanol rannau o gof
cyn iddo ddigwydd i ysgrifennu dros y darn o gof bod y ffeil a ddefnyddir i fod yn.
Ond prif gof, RAM, rydych yn beicio trwy lawer yn gyflymach,
felly mae'n mynd i fod yn gyflym iawn overwritten.
Cwestiynau ar hyn neu unrhyw beth arall?
[Myfyrwyr] Mae gennyf gwestiynau am bwnc gwahanol. >> Iawn.
Oes gan unrhyw un cwestiynau ar hyn?
>> Iawn. Pwnc gwahanol. >> [Myfyrwyr] Iawn.
Oeddwn yn mynd drwy rai o'r profion ymarfer,
ac mewn un ohonynt oedd yn sôn am y sizeof
a'r gwerth y mae yn dychwelyd neu fathau amrywiol gwahanol. >> Ydy.
Ac mae'n dweud bod y ddau int a hir yn dychwelyd 4, felly maen nhw'n ddau 4 bytes hir.
A oes unrhyw wahaniaeth rhwng int a hir, neu a yw'n yr un peth?
Oes, mae yna wahaniaeth.
Mae'r safon C -
Rydw i'n fwy na thebyg yn mynd i llanast i fyny.
Mae'r safon C yn union fel yr hyn C yw, y dogfennau swyddogol C.
Dyma beth mae'n ei ddweud.
Felly, y safon C dim ond yn dweud y bydd golosg am byth a bob amser yn 1 beit.
Popeth ar ôl hynny - byr bob amser yn diffinio yn union fel bod yn fwy na neu'n hafal i torgoch.
Gallai hyn fod yn gyfan gwbl yn fwy na, ond nid yn gadarnhaol.
Mae int yn unig sy'n diffinio fel rhai yn fwy na neu'n hafal i holiadur byr.
A hir yn unig sy'n diffinio fel rhai yn fwy na neu'n hafal i int.
A hir hir yn fwy na neu'n hafal i hir.
Felly, yr unig beth y safon C diffinio yn archebu cymharol o bopeth.
Mae'r union swm o gof bod pethau'n mynd i fyny yn gyffredinol hyd at weithredu,
ond mae'n eithaf da a ddiffinnir ar y pwynt hwn. >> [Myfyrwyr] Iawn.
Felly, siorts yn cael eu bron bob amser yn mynd i fod 2 bytes.
Ints yn cael eu bron bob amser yn mynd i fod yn 4 bytes.
Longs hir yn cael eu bron bob amser yn mynd i fod yn 8 bytes.
Ac yn hiraethu, mae'n dibynnu ar p'un a ydych yn defnyddio 32-bit neu system 64-bit.
Felly hir yn mynd i gyfateb i'r math o system.
Os ydych yn defnyddio system 32-bit fel y Appliance, mae'n mynd i fod yn 4 bytes.
Os ydych yn defnyddio 64-bit fel llawer o gyfrifiaduron diweddar, mae'n mynd i fod yn 8 bytes.
>> Ints bron bob amser yn 4 bytes ar y pwynt hwn.
Longs hir yn bron bob amser 8 bytes.
Yn y gorffennol, ints a ddefnyddir dim ond yn 2 bytes.
Ond yn sylwi bod hyn yn llwyr yn bodloni pob un o'r cysylltiadau o fwy na ac yn hafal i.
Cyn belled yn cael ei ganiatáu yn berffaith i fod yr un maint fel cyfanrif,
ac mae hefyd yn caniatáu i fod yr un faint â hir hir.
Ac dim ond fel y digwydd bod bod yn 99.999% o systemau, mae'n mynd i fod yn hafal i
naill ai int neu hir hir. 'I jyst yn dibynnu ar 32-bit neu 64-bit. >> [Myfyrwyr] Iawn.
Yn fflotiau, sut y pwynt degol a ddynodwyd o ran o ddarnau?
Fel fel deuaidd? >> Yeah.
Nid oes angen i chi wybod bod am CS50.
Dydych chi ddim hyd yn oed yn dysgu bod yn 61.
Nid ydych yn dysgu bod yn wir mewn unrhyw gwrs.
Dim ond sylwadau.
Wyf yn anghofio y rhandiroedd bit union.
Mae'r syniad o pwynt arnawf yw eich bod yn dyrannu nifer benodol o ddarnau i gynrychioli -
Yn y bôn, mae popeth yn mewn nodiant gwyddonol.
Felly, byddwch yn dyrannu nifer benodol o ddarnau i gynrychioli'r rhif ei hun, fel 1.2345.
Ni all yr wyf yn cynrychioli rhif gyda mwy o ddigidau na 5.
Yna byddwch hefyd yn dyrannu nifer benodol o ddarnau fel ei fod yn tueddu i fod fel
gallwch fynd i fyny i rif penodol, fel bod yn y ddehonglwr fwyaf y gallwch ei gael,
a gallwch ond yn mynd i lawr i ddehonglwr penodol,
yn hoffi bod yn y ddehonglwr lleiaf y gallwch ei gael.
>> Nid wyf yn cofio y darnau ffordd union yn cael eu neilltuo i bob un o'r gwerthoedd hyn,
ond nifer penodol o ddarnau yn ymroddedig i 1.2345,
arall nifer penodol o ddarnau yn ymroddedig i ddehonglwr,
ac mae'n ond yn bosibl i gynrychioli ddehonglwr o faint penodol.
[Myfyrwyr] A dwbl? A yw hynny'n debyg i arnofio hir ychwanegol? >> Yeah.
Mae yr un peth â fflôt ac eithrio nawr eich bod chi'n ddefnyddio 8 bytes lle 4 bytes.
Nawr byddwch yn gallu i ddefnyddio 9 digid neu 10 digid,
a bydd hyn yn gallu mynd i fyny i 300 yn lle 100. >> [Myfyrwyr] Iawn.
Ac yn arnofio hefyd 4 bytes. >> Ydy.
Wel, unwaith eto, ei fod yn dibynnu'n gyffredinol ar weithrediad cyffredinol,
ond fflotiau 4 bytes, dyblau 8.
Dyblau yn cael eu galw'n dwbl oherwydd eu bod yn ddwbl maint y fflotiau.
[Myfyrwyr] Iawn. Ac a oes dwbl yn dyblu? >> Nid oes.
Rwy'n credu - >> [myfyrwyr] Fel longs hir? >> Yeah. Nid wyf yn credu hynny. Ydw.
[Myfyrwyr] Ar brawf y llynedd roedd cwestiwn am y swyddogaeth prif
gorfod bod yn rhan o'ch rhaglen.
Yr ateb oedd nad oes rhaid iddo fod yn rhan o'ch rhaglen.
Ym mha sefyllfa? Dyna beth welais.
[Bowden] Mae'n ymddangos - >> [myfyrwyr] Beth sefyllfa?
A oes gennych y broblem? >> [Myfyrwyr] Yeah, gallaf yn sicr dynnu i fyny.
Nid oes raid iddo fod, yn dechnegol, ond yn y bôn mae'n mynd i fod.
[Myfyrwyr] Gwelais un ar flwyddyn wahanol.
Roedd fel Gwir neu Gau: A dilys - >> O, ffeil c.?
. [Myfyrwyr] Rhaid i unrhyw ffeil c gael - [ddau yn siarad ar unwaith - annealladwy]
Iawn. Felly dyna wahân.
>> A. Ffeil c dim ond angen i gynnwys swyddogaethau.
Gallwch lunio ffeil i mewn i god peiriant, deuaidd, beth bynnag,
heb iddo fod yn gweithredadwy eto.
Rhaid i gweithredadwy dilys yn cael prif swyddogaeth.
Gallwch ysgrifennu 100 swyddogaethau mewn 1 ffeil ond dim prif
ac yna llunio bod i lawr i deuaidd,
yna byddwch yn ysgrifennu ffeil arall mai dim ond wedi prif, ond mae'n galw criw o swyddogaethau hyn
yn y ffeil ddeuaidd dros yma.
Ac felly pan fyddwch yn gwneud y cyflawnadwy, dyna beth y linker yn
mae'n cyfuno'r 2 ffeil deuaidd i mewn i gweithredadwy.
Felly, nid a. Ffeil c oes angen i chi gael brif swyddogaeth o gwbl.
Ac ar seiliau cod mawr byddwch yn gweld miloedd o. Ffeiliau c ac 1 brif ffeil.
Mwy o gwestiynau?
[Myfyrwyr] Roedd cwestiwn arall.
Dywedodd gwneud yn compiler. Gwir neu Gau?
Ac mae'r ateb yn anghywir, ac yr wyf yn deall pam nad yw'n debyg Clang.
Ond beth ydym yn galw wneud os nad yw'n?
Gwnewch yn y bôn yn unig - gallaf weld yn union beth y mae'n ei alw.
Ond mae'n jyst yn rhedeg gorchmynion.
Gwneud.
Gallaf dynnu hyn i fyny. Yeah.
Oh, yeah. Gwnewch hefyd yn gwneud hynny.
Mae hon yn dweud pwrpas y cyfleustodau wneuthuriad yw penderfynu yn awtomatig
pa ddarnau o raglen fawr angen recompiled
a chyhoeddi'r gorchmynion i ail-grynhoi eu cyfer.
Gallwch wneud wneud ffeiliau sydd yn wirioneddol enfawr.
Gwnewch yn edrych ar y stampiau amser ffeil ac, fel y dywedasom o'r blaen,
gallwch lunio ffeiliau unigol i lawr, ac nid yw'n nes i chi gyrraedd y linker
eu bod yn rhoi at ei gilydd i mewn i gweithredadwy.
Felly, os oes gennych 10 ffeil gwahanol ac rydych yn gwneud newid i 1 ohonynt,
yna beth gwneuthuriad yn mynd at gwna ydy jyst ail-grynhoi bod 1 ffeil
ac yna relink phopeth at ei gilydd.
Ond mae'n llawer dumber na hynny.
Mae i fyny i chi i llwyr ddiffinio hynny dyna beth y dylai ei wneud.
Mae yn ddiofyn y gallu i gydnabod yr amser hwn pethau stamp,
ond gallwch ysgrifennu ffeil gwneuthuriad i wneud unrhyw beth.
Gallwch ysgrifennu a gwneud ffeil felly pan fyddwch yn teipio ei wneud yn unig cd i rywun arall cyfeiriadur.
Roeddwn yn cael rhwystredig oherwydd popeth tac I tu mewn fy Offer
ac yna rwy'n edrych ar y PDF gan y Mac.
>> Felly, yr wyf yn mynd i Finder a gallaf ddim Ewch, Cysylltu â Server,
a 'r gweinyddwr yr wyf yn cysylltu i yw fy Appliance, ac yna byddaf yn agor i fyny' r PDF
sy'n cael ei llunio gan LaTeX.
Ond yr wyf yn cael rhwystredig oherwydd bob tro roedd angen i mi adfywio'r PDF,
Roedd rhaid i mi anfon copi ohono at gyfeirlyfr penodol y gallai cael mynediad
ac yn mynd yn blino.
Felly, yn lle hynny ysgrifennais, ffeil gwneuthuriad sy'n rhaid i chi ddiffinio sut y mae'n gwneud pethau.
Sut gallwch chi wneud yn hyn yw PDF LaTeX.
Yn union fel unrhyw ffeil wneuthuriad arall - neu mae'n debyg nad ydych wedi gweld y ffeiliau gwneuthuriad,
ond mae gennym yn y Cyfarpar ffeil wneuthuriad byd-eang mai dim ond dweud,
os ydych yn llunio ffeil C, defnyddiwch Clang.
Ac felly dyma yn fy ffeil gwneuthuriad fy mod yn gwneud wyf yn dweud,
y ffeil rydych yn mynd i eisiau i lunio gyda dogfennau PDF LaTeX.
Ac felly mae'n LaTeX PDF sydd wedi gwneud y casglu.
Ni Gwnewch yn llunio. Mae'n dim ond rhedeg y gorchmynion yn y dilyniant I a nodir.
Felly, mae'n rhedeg PDF LaTeX, mae'n copïau i'r cyfeiriadur rwyf am iddynt gael eu copïo i,
ei cd at y cyfeiriadur a gwneud pethau eraill,
ond y cyfan mae'n ei wneud yn cael ei adnabod pan fydd newidiadau ffeil,
ac os yn newid, yna bydd yn rhedeg y gorchmynion ei fod yn fod i redeg
pan fydd y newidiadau ffeil. >> [Myfyrwyr] Iawn.
Nid wyf yn gwybod lle mae'r ffeiliau wneuthuriad byd-eang i mi edrych arni.
Cwestiynau eraill? Unrhyw beth o'r gorffennol cwisiau? Unrhyw pethau pwyntydd?
Mae yna bethau cynnil gyda awgrymiadau fel -
Dydw i ddim yn mynd i fod yn gallu dod o hyd i gwestiwn cwis arno -
ond yn union fel y math hwn o beth.
Gwnewch yn siŵr eich bod yn deall bod pan fyddaf yn dweud int * x * y -
Nid yw hyn yn union beth yma, yr wyf yn dyfalu.
Ond fel * x * y, y rhai yna 2 newidynnau sydd ar y pentwr.
Pan fyddaf yn dweud x = malloc (sizeof (canolradd)), x yn dal i fod yn amrywiol ar y simnai,
malloc rhywfaint bloc drosodd yn y domen, ac rydym yn cael x pwynt i'r domen.
>> Felly rhywbeth ar y pwyntiau pentwr at y domen.
Pryd bynnag y byddwch malloc unrhyw beth, rydych yn anochel storio tu mewn pwyntydd.
Er mwyn i pwyntydd ar y simnai, y bloc malloced ar y domen.
Mae llawer o bobl yn cael ddryslyd a dweud int * x = malloc; x ar y domen.
Rhif Beth x cyfeirio at ar y domen.
x ei hun ar y pentwr, oni bai am ba bynnag reswm yr ydych wedi x fod yn newidyn byd-eang,
ac yn yr achos mae'n digwydd i fod mewn rhanbarth arall o gof.
Felly gadw trac, y diagramau hyn blwch a saeth yn eithaf cyffredin ar gyfer y cwis.
Neu os nad yw ar gwis 0, bydd ar cwis 1.
Dylech wybod pob un o'r rhain, y camau wrth lunio
ers i chi yn gorfod ateb cwestiynau ar hynny. Ydw.
[Myfyrwyr] A gawn ni fynd dros y camau hynny - >> Cadarn.
Cyn i gamau a llunio gennym preprocessing,
lunio, cydosod, a chysylltu.
Preprocessing. Beth mae hynny'n ei wneud?
Dyma'r cam hawsaf yn - wel, nid fel -
nid yw hynny'n golygu y dylai fod yn amlwg, ond ei fod yn y cam hawsaf.
Gallech guys roi ar waith eich hunain. Yeah.
[Myfyrwyr] Cymerwch yr hyn sydd gennych yn eich cynnwys fel hyn, ac mae'n copïau ac yna hefyd yn diffinio.
Mae'n edrych am bethau fel # # yn cynnwys ac yn diffinio,
a 'i jyst gopïau a pastau beth oedd y gwirionedd yn ei olygu.
Felly, pan fyddwch yn dweud # cynnwys cs50.h, mae'r Preprocessor yn copïo a gludo cs50.h
i mewn i'r llinell.
Pan fyddwch yn dweud # diffinio x i fod yn 4, mae'r Preprocessor yn mynd drwy'r rhaglen gyfan
ac mae'n disodli pob achos o x gyda 4.
Felly mae'r Preprocessor yn cymryd ffeil C dilys ac allbynnu ffeil C dilys
lle mae pethau wedi cael eu copïo a gludo.
Felly nawr llunio. Beth mae hynny'n ei wneud?
[Myfyrwyr] Mae'n mynd o C i deuaidd.
>> [Bowden] Nid yw'n mynd yr holl ffordd i deuaidd.
[Myfyrwyr] I cod peiriant wedyn yn? >> Dyw hi ddim yn god peiriant.
[Myfyrwyr] Cynulliad? >> Cynulliad.
Mae'n mynd i'r Cynulliad cyn iddo fynd yr holl ffordd i C cod,
ac ieithoedd y rhan fwyaf yn gwneud rhywbeth fel hyn.
Dewiswch unrhyw iaith lefel uchel, ac os ydych chi'n mynd i lunio ei,
mae'n debygol o lunio mewn camau.
Yn gyntaf mae'n mynd i lunio Python i C, yna mae'n mynd i lunio C i'r Cynulliad,
ac yna y Cynulliad yn mynd i gael gyfieithu i deuaidd.
Felly gasglu yn mynd i ddod ag ef o C i'r Cynulliad.
Mae'r gair llunio fel arfer yn golygu dod â hi o lefel uwch
i iaith raglennu lefel is.
Felly, mae hyn yw'r cam yn unig yn casglu lle rydych yn dechrau gyda iaith lefel uchel
a darfod i fyny mewn iaith lefel isel, a dyna pam y cam yn cael ei alw casglu.
[Myfyrwyr] Yn ystod lunio, gadewch i ni ddweud eich bod wedi gwneud # gynnwys cs50.h.
A fydd y ail-grynhoi compiler y cs50.h, fel y swyddogaethau sydd yno,
a throi hynny'n cod Cynulliad yn ogystal,
neu a fydd yn copïo a gludo rhywbeth sydd wedi bod cyn-Cynulliad?
Bydd cs50.h byth yn 'n bert lawer yn y pen draw yn y Cynulliad.
Stwff fel prototeipiau swyddogaeth a phethau yn unig i chi fod yn ofalus.
Mae'n gwarantu y gall y casglwr wirio pethau fel eich bod yn galw swyddogaethau
â'r mathau dychwelyd cywir a'r dadleuon cywir a stwff.
>> Felly, bydd yn cael ei cs50.h preprocessed i mewn i'r ffeil, ac yna pan mae'n llunio
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.
Ond mae'r swyddogaethau a ddiffinnir yn y llyfrgell CS50, sydd ar wahân cs50.h,
Ni fydd y rhai cael eu llunio ar wahân.
Bydd hynny mewn gwirionedd yn dod i lawr yn y cam gysylltu, felly byddwn yn dod i hynny mewn eiliad.
Ond yn gyntaf, beth sy'n cydosod?
[Myfyrwyr] Cynulliad i deuaidd? >> Yeah.
Cydosod.
Nid ydym yn galw ei llunio gan y Cynulliad yn 'n bert lawer yn gyfieithiad pur o deuaidd.
Nid oes rhesymeg ychydig iawn o fynd o Cynulliad i deuaidd.
Mae'n union fel edrych i fyny mewn tabl, oh, mae gennym cyfarwyddyd hwn;
sy'n cyfateb i 01,110 deuaidd.
Ac felly y ffeiliau sydd gydosod yn gyffredinol allbynnau. Ffeiliau o.
Ac. Ffeiliau o yn yr hyn yr oeddem yn dweud o'r blaen,
sut i beidio ffeil oes angen i chi gael prif swyddogaeth.
Gall unrhyw ffeil yn cael ei llunio i lawr i. Ffeil o cyn belled ei fod yn ffeil C dilys.
Gellir ei llunio i lawr i. O.
Yn awr, gan gysylltu hyn mewn gwirionedd yn dod â chriw o. Ffeiliau o ac yn dod â nhw i weithredadwy.
Ac felly beth gan gysylltu ei wneud yw y gall eich barn am y llyfrgell CS50 fel a. Ffeil o.
Mae'n ffeil ddeuaidd a luniwyd eisoes.
Ac felly pan fyddwch yn llunio eich ffeil, eich hello.c, sy'n galw GetString,
hello.c yn cael ei llunio i lawr i hello.o,
hello.o yn awr yn deuaidd.
Mae'n defnyddio GetString, felly mae angen iddo fynd drosodd i cs50.o,
a linker smooshes nhw at ei gilydd ac copïau GetString i mewn i'r ffeil
ac yn dod allan gyda weithredadwy sydd holl swyddogaethau sydd ei angen.
Felly, nid cs50.o mewn gwirionedd ffeil O, ond mae'n ddigon agos nad oes unrhyw wahaniaeth sylfaenol.
Felly, dim ond cysylltu yn dod â criw o ffeiliau gyda'i gilydd
hynny ar wahân yn cynnwys yr holl swyddogaethau angen i mi ddefnyddio
ac yn creu gweithredadwy a fydd yn mewn gwirionedd yn rhedeg.
>> Ac felly dyna hefyd beth yr oeddem yn ei ddweud cyn i
lle gallwch gael 1000. ffeiliau c, byddwch llunio nhw i gyd i. ffeil o,
a fydd yn ôl pob tebyg yn cymryd amser, yna byddwch yn newid 1. c ffeil.
Dim ond angen i chi ail-grynhoi bod 1. File c ac yna relink popeth arall,
cysylltu popeth yn ôl at ei gilydd.
[Myfyrwyr] Pan fyddwn ni'n cysylltu byddwn yn ysgrifennu lcs50?
Yeah, yr hyn a lcs50. Bod signalau faner at y linker y dylech fod yn cysylltu yn y llyfrgell.
Cwestiynau?
Ydyn ni wedi mynd dros deuaidd ar wahân i'r 5 eiliad yn y ddarlith gyntaf?
Nid wyf yn credu hynny.
Dylech wybod yr holl NO mawr y ein bod wedi mynd drosodd,
a dylech fod yn gallu, pe baem yn rhoi swyddogaeth,
dylech fod yn gallu dweud ei fod yn fawr O, yn fras. Neu yn dda, mawr O yn arw.
Felly, os gwelwch yn nythu ar gyfer dolenni dolennu dros yr un nifer o bethau,
fel int i, i <n; int j, j > [myfyrwyr] n sgwâr. >> Mae'n tueddu i fod n sgwâr.
Os ydych chi wedi nythu triphlyg, mae'n tueddu i fod n wedi'i dorri'n giwbiau.
Felly, y math yna o beth dylech fod yn gallu eich cyfeirio ar unwaith.
Mae angen i chi wybod fath mewnosod a didoli swigen ac uno math a phob un o'r rheiny.
Mae'n haws deall pam eu bod yn rhai n sgwario a n n log a'r holl
oherwydd fy mod yn meddwl nad oedd ar gwis un flwyddyn lle rydym yn y bôn yn rhoi i chi
meddai gweithredu fath swigod a, "Beth yw'r amser rhedeg y swyddogaeth hon?"
Felly, os ydych yn ei gydnabod fel math swigen, yna gallwch ddweud yn syth n sgwâr.
Ond os ydych yn unig yn edrych arno, nid oes hyd yn oed angen i wireddu fath swigen ei;
gallwch ddweud hyn yn unig yn gwneud hyn ac mae hyn. Mae hyn yn n sgwâr.
[Myfyrwyr] A oes unrhyw enghreifftiau anodd y gallwch chi ddod o hyd i,
fel syniad tebyg o figuring allan?
>> Nid wyf yn meddwl y byddem yn rhoi i chi unrhyw enghreifftiau anodd.
Mae'r swigen peth fath yn ymwneud mor anodd ag y byddem yn mynd,
a hyd yn oed, cyn belled ag y byddwch yn deall eich bod yn ailadrodd dros y casgliad
ar gyfer pob elfen yn yr amrywiaeth, sydd yn mynd i fod yn rhywbeth sydd wedi n sgwâr.
Mae cwestiynau cyffredinol, fel dde yma gennym - Oh.
Dim ond y diwrnod o'r blaen, Doug hawlio, "Rwyf wedi dyfeisio algorithm yn gallu didoli arae
"O rifau n yn O (n log) amser!"
Felly, sut rydym yn gwybod bod yn amhosibl?
[Ymateb y myfyrwyr Anghlywadwy] >> Yeah.
Ar y lleiaf, mae'n rhaid i chi gyffwrdd pob elfen yn yr amrywiaeth,
felly mae'n amhosibl i ddatrys amrywiaeth o -
Os popeth mewn trefn heb eu didoli, yna rydych chi'n mynd i fod yn cyffwrdd popeth yn yr amrywiaeth,
felly mae'n amhosibl gwneud hynny mewn llai na O o n.
[Myfyrwyr] Rydych yn dangos i ni yr enghraifft honno o fod yn gallu gwneud hynny mewn O o n
os ydych yn defnyddio llawer o gof. >> Yeah.
Ac that's - yr wyf yn anghofio yr hyn that's - A yw'n cyfrif fath?
Hmm. Mae hynny'n algorithm didoli cyfanrif.
Roeddwn yn chwilio am yr enw arbennig ar gyfer hyn na allwn i gofio yr wythnos diwethaf.
Yeah. Mae'r rhain yn y mathau o fath a all gyflawni pethau yn fawr O n.
Ond mae yna gyfyngiadau, fel y gallwch ond defnyddio cyfanrifau hyd at nifer penodol.
Byd Gwaith os ydych chi'n ceisio datrys that's rhywbeth -
Os yw eich amrywiaeth yn 012, -12, 151, 4 miliwn,
yna un elfen yn mynd yn llwyr ddifetha didoli cyfan.
>> Cwestiynau?
[Myfyrwyr] Os oes gennych swyddogaeth recursive a 'i jyst yn gwneud y galwadau recursive
mewn datganiad dychwelyd, dyna gynffon recursive,
ac na fyddai'n er mwyn defnyddio mwy o gof ystod runtime
neu byddai o leiaf yn defnyddio cof tebyg fel ailadroddol ateb?
[Bowden] Ydw.
Byddai'n debygol o fod ychydig yn arafach, ond nid mewn gwirionedd.
Tail recursive yn eithaf da.
Edrych eto ar fframiau simnai, gadewch i ni ddweud ein bod yn brif
ac mae gennym bar int (int x) neu rywbeth.
Nid yw hon yn swyddogaeth recursive berffaith, ond bar dychwelyd (x - 1).
Felly, yn amlwg, mae hyn yn ddiffygiol. Mae angen sylfaen o achosion a stwff.
Ond mae'r syniad yma yw bod hyn yn gynffon recursive,
sy'n golygu pan fydd bar galwadau brif mae'n mynd i gael ei ffrâm pentwr.
Yn y ffrâm pentwr mae mynd i fod yn faen ychydig o gof
sy'n cyfateb i'w x ddadl.
Ac felly gadewch i ni ddweud prif digwydd i alw bar (100);
Felly x yn mynd i ddechrau allan fel 100.
Os yw'r compiler yn cydnabod bod hyn yn swyddogaeth recursive chynffon,
yna pan fydd bar yn gwneud ei alwad recursive i'r bar,
yn hytrach na gwneud ffrâm pentwr newydd, sef lle y pentwr yn dechrau tyfu i raddau helaeth,
yn y pen draw bydd yn rhedeg i mewn i'r domen, ac yna byddwch yn cael segfaults
oherwydd cof yn dechrau gwrthdaro.
>> Felly yn hytrach na gwneud ei ffrâm stac ei hun, gall sylweddoli,
hey byth, Fi 'n sylweddol angen i ddod yn ôl at y ffrâm pentwr,
felly yn lle 'n annhymerus' dim ond lle y ddadl hon gyda 99 ac yna'n dechrau bar i gyd drosodd.
Ac yna bydd yn gwneud hynny eto a bydd yn cyrraedd bar dychwelyd (x - 1),
ac yn hytrach na gwneud ffrâm pentwr newydd, bydd yn dim ond lle ei ddadl ar hyn o bryd gyda 98
ac yna'n neidio yn ôl i'r cychwyn cyntaf bar.
Y gweithrediadau hynny, gan ddisodli y gwerth 1 ar y pentwr a neidio yn ôl i'r dechrau,
yn eithaf effeithlon.
Felly, nid yn unig dyma'r chof chynefod un fel swyddogaeth ar wahân sy'n cael ei ailadroddol
oherwydd eich bod dim ond defnyddio 1 ffrâm pentwr, ond nid ydych yn dioddef anfanteision
o orfod galw swyddogaethau.
Gall swyddogaethau Galw fod braidd yn ddrud oherwydd ei fod wedi gwneud hyn i gyd setup
a teardown a'r holl bethau hyn.
Felly, mae hyn dychweliad gynffon yn dda.
[Myfyrwyr] Pam nad yw hyn yn creu grisiau newydd?
Oherwydd ei fod yn sylweddoli nad oes angen i.
Mae'r alwad i bar yn unig yw dychwelyd yr alwad ailadroddus.
Felly nid oes angen gwneud unrhyw beth gyda'r gwerth dychwelyd.
Mae'n dim ond yn mynd ar unwaith ddychwelyd.
Felly, mae'n dim ond yn mynd i gymryd lle ei ddadl ei hun ac yn dechrau drosodd.
A hefyd, os nad oes gennych y fersiwn recursive gynffon,
yna byddwch yn cael yr holl fariau lle pan fydd hyn yn bar dychwelyd
mae'n rhaid iddo ddychwelyd ei werth i hwn, yna bar ar unwaith dychwelyd
ac yn dychwelyd ei werth i hwn, yna mae'n dim ond yn mynd ar unwaith dychwelyd
a dychwelyd ei werth i hwn.
Felly, rydych yn arbed y popping yr holl bethau hyn oddi ar y pentwr
ers y gwerth dychwelyd yn unig yn mynd i gael eu trosglwyddo holl ffordd yn ôl i fyny beth bynnag.
Felly pam na dim ond lle ein dadl gyda'r ddadl diweddaru ac yn dechrau drosodd?
Os nad yw'r swyddogaeth yn gynffon recursive, os ydych yn gwneud rhywbeth fel -
[Myfyrwyr] os bar (x + 1). >> Yeah.
>> Felly, os ydych yn ei roi mewn cyflwr, yna rydych chi'n gwneud rhywbeth gyda'r gwerth dychwelyd.
Neu hyd yn oed os ydych yn unig yn gwneud dychwelyd 2 * bar (x - 1).
Felly nawr bar (x - 1) mae angen i ddychwelyd er mwyn iddo i gyfrifo 2 gwaith sy'n gwerthfawrogi,
felly, yn awr oes angen ei ffrâm pentwr ar wahân ei hun,
ac yn awr, dim ots pa mor galed rydych yn ceisio, rydych yn mynd i angen i -
Nid yw hyn yn gynffon ailadroddus.
[Myfyrwyr] A fyddwn i'n ceisio dod â dychweliad i anelu am dychweliad gynffon -
[Bowden] Mewn byd delfrydol, ond yn CS50 nid oes rhaid i chi.
Er mwyn cael dychweliad gynffon, yn gyffredinol, ydych yn sefydlu dadl ychwanegol
lle bydd bar yn cymryd x int yn y
ac y cyfateb at y peth yn y pen draw eich bod am ddychwelyd.
Felly, yna mae hyn rydych yn mynd i gael eu dychwelyd bar (x - 1), 2 * y.
Felly dyna dim ond lefel uchel sut yr ydych yn trawsnewid pethau i fod yn gynffon ailadroddus.
Ond mae'r ddadl ychwanegol -
Ac yna yn y diwedd pan fyddwch yn cyrraedd eich achos sylfaenol, 'ch jyst yn dychwelyd y
oherwydd eich bod wedi bod yn cronni yr amser cyfan y gwerth dychwelyd yr ydych ei eisiau.
Rydych fath o wedi bod yn gwneud hyn iteraidd ond gan ddefnyddio galwadau recursive.
Cwestiynau?
[Myfyrwyr] Efallai am rhifyddeg pwyntydd, megis wrth ddefnyddio llinynnau. >> Cadarn.
Rhifyddeg Pointer.
Wrth ddefnyddio llinynnau mae'n hawdd oherwydd bod llinynnau yn sêr torgoch,
chars yn am byth a bob amser yn beit unigol,
ac felly rhifyddeg pwyntydd yn cyfateb i rhifyddeg rheolaidd pan fyddwch yn delio â llinynnau.
Gadewch i 'jyst dweud torgoch * s = "helo".
Felly mae gennym bloc mewn cof.
Mae angen 6 bytes oherwydd eich bod bob amser angen y terminator null.
Ac cols * s yn mynd i gyfeirio at ddechrau'r casgliad.
Felly s pwyntiau yno.
Yn awr, mae hyn yn y bôn sut y bydd unrhyw amrywiaeth yn gweithio,
p'un a oedd yn dychwelyd yn ôl malloc neu a yw ar y pentwr.
Mae unrhyw amrywiaeth yn y bôn yn pwyntydd i ddechrau'r array,
ac yna unrhyw, gweithredu array unrhyw mynegeio, yn unig yn mynd i mewn i'r amrywiaeth yn benodol gwrthbwyso.
>> Felly, pan fyddaf yn dweud rhywbeth fel s [3]; mae hyn yn mynd i s a chyfrif 3 chars mewn
Felly s [3], mae gennym 0, 1, 2, 3, felly s [3] yn mynd i gyfeirio at y l.
[Myfyrwyr] A gallem gyrraedd yr un gwerth drwy wneud s + 3 ac yna cromfachau seren?
Ydw.
Mae hyn yn cyfateb i * (s + 3);
ac mae hynny'n am byth a bob amser yn cyfateb ni waeth beth ydych yn ei wneud.
Dydych chi byth yn angen i chi ddefnyddio'r gystrawen braced.
Gallwch bob amser ddefnyddio'r * (s + 3) cystrawen.
Mae pobl yn tueddu i hoffi gystrawen braced, er.
[Myfyrwyr] Felly yr holl araeau mewn gwirionedd dim ond awgrymiadau.
Mae gwahaniaeth bychan pan fyddaf yn dweud int x [4]; >> [myfyrwyr] yw hynny'n creu y cof?
[Bowden] yw hynny'n mynd i greu 4 ints ar y simnai, felly 16 bytes cyffredinol.
Mae'n mynd i greu 16 bytes ar y pentwr.
Nid yw x yn cael ei storio yn unrhyw le.
Mae'n yn unig yw symbol cyfeirio at ddechrau'r peth.
Oherwydd eich bod yn datgan yr amrywiaeth y tu mewn swyddogaeth hon,
hyn y mae'r compiler yn mynd i'w wneud yn unig yw disodli pob enghraifft o newidyn y x
â lle y digwyddodd i ddewis i roi'r rhain 16 bytes.
Ni all wneud hynny gyda char * s am ei fod ef yn pwyntydd gwirioneddol.
Mae'n rhad ac am ddim, yna bwyntio at bethau eraill.
x yn gysonyn. Ni allwch gael pwynt i amrywiaeth gwahanol. >> [Myfyrwyr] Iawn.
Ond y syniad hwn, y mynegeio, yr un fath ni waeth a yw'n amrywiaeth traddodiadol
neu os yw'n pwyntydd i rywbeth neu os yw'n pwyntydd i amrywiaeth malloced.
Ac yn wir, mae mor cyfatebol fod hynny hefyd yn yr un peth.
Mae'n mewn gwirionedd yn unig yn trosi beth sydd tu mewn i'r cromfachau a'r hyn sy'n weddill o'r cromfachau,
ychwanegu nhw at ei gilydd, a dereferences.
Felly, mae hyn yr un mor ddilys fel * (s + 3) neu s [3].
[Myfyrwyr] Allwch chi gael awgrymiadau pwyntio at 2-ddimensiwn araeau?
>> Mae'n fwy anodd. Yn draddodiadol, dim.
Mae amrywiaeth 2-ddimensiwn yn unig yw amrywiaeth 1-dimensiwn gyda rhai chystrawen cyfleus
oherwydd pan fyddaf yn dweud int x [3] [3], mae hyn yn wir dim ond 1 amrywiaeth gyda 9 gwerthoedd.
Ac felly pan fyddaf yn mynegai, y casglwr yn gwybod beth rwy'n ei olygu.
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,
ac yna bydd yn awyddus yr ail beth yn hynny, felly mae'n mynd i gael y un.
Ond mae'n dal i fod ychydig amrywiaeth un-dimensiwn.
Ac felly os oeddwn i eisiau neilltuo pwyntydd i'r array,
Byddwn yn dweud int * p = x;
Mae'r math o x yn unig -
Mae'n dweud math bras o x gan ei fod yn unig yw symbol ac nid yw'n newidyn go iawn,
ond mae'n yn unig yw * int.
x yn unig yw pwyntydd i ddechrau'r hyn. >> [Myfyrwyr] Iawn.
Ac felly ni fyddaf yn gallu cael mynediad [1] [2].
Rwy'n credu bod cystrawen arbennig ar gyfer datgan pwyntydd,
rhywbeth hurt fel int (* p [-. rhywbeth hollol chwerthinllyd Dydw i ddim hyd yn oed yn gwybod.
Ond mae cystrawen ar gyfer datgan awgrymiadau tebyg â'i cromfachau a phethau.
Efallai na fydd hyd yn oed yn gadael i chi wneud hynny.
Gallwn edrych yn ôl ar rywbeth a fyddai'n dweud wrthyf y gwir.
Byddaf yn edrych amdano yn ddiweddarach, os oes cystrawen ar gyfer pwynt. Ond ni fyddwch byth yn ei weld.
A hyd yn oed y gystrawen mor hynafol, os ydych yn ei ddefnyddio, bydd pobl yn cael eu drysu.
Araeau aml-ddimensiwn yn eithaf prin fel y mae.
'N bert lawer -
Wel, os ydych chi'n gwneud pethau matrics nid yw'n mynd i fod yn brin,
ond yn C rydych yn anaml iawn yn mynd i fod yn defnyddio araeau aml-ddimensiwn.
Yeah. >> [Myfyrwyr] Dewch i ddweud eich gael amrywiaeth hir iawn.
>> Felly, er cof rhithwir, mae'n ymddangos i fod yn holl olynol,
fel yr elfennau cywir nesaf at ei gilydd,
ond yn y cof corfforol, a fyddai'n bosibl i hynny gael ei rannu i fyny? >> Ydy.
Sut rhithwir yn gweithio cof ai dim ond gwahanu -
Mae'r uned y dyraniad yn dudalen, sy'n tueddu i fod yn 4 cilobeit,
ac felly pan fydd proses yn dweud, hey, yr wyf am ddefnyddio'r cof,
y system weithredu yn mynd i ddyrannu it 4 cilobeit ar gyfer y bloc ychydig o gof.
Hyd yn oed os ydych ond yn defnyddio ychydig o beit unigol yn y bloc cyfan y cof,
y system weithredu yn mynd i roi y 4 llawn kilobytes.
Felly beth mae hyn yn ei olygu yw y gallwn gael - gadewch i ni ddweud hyn yn fy pentwr.
Gallai hyn stac yn cael eu gwahanu. Gallai fy stac yn megabeit a megabeit.
Gallai fy pentwr fod yn enfawr.
Ond mae'r pentwr ei hun i gael ei rannu i mewn i dudalennau unigol,
ac os ydym yn edrych ar dros yma gadewch i ni ddweud hyn yw ein RAM,
os oes gen i 2 gigabeit o RAM, mae hyn yw 0 gyfeiriad gwirioneddol fel y beit 0 o fy RAM,
ac mae hyn yn 2 gigabeit yr holl ffordd i lawr yma.
Felly efallai y dudalen hon yn cyfateb i'r bloc dros yma.
Gall y dudalen hon yn cyfateb i'r bloc dros yma.
Gallai hyn yn un yn cyfateb i hon dros yma.
Felly mae'r system weithredu yn rhydd i aseinio cof corfforol
i unrhyw dudalen unigol yn fympwyol.
Ac mae hynny'n golygu, os y ffin yn digwydd i bob ochr arae,
amrywiaeth yn digwydd i gael eu gadael o hyn ac i'r dde y gorchymyn hwn o dudalen,
yna amrywiaeth yn mynd i gael ei rannu mewn cof corfforol.
Ac yna pan fyddwch yn rhoi'r gorau iddi y rhaglen, pan fydd y broses yn dod i ben,
hyn mapiadau cael eu dileu, ac yna mae'n rhad ac am ddim i ddefnyddio'r blociau bach ar gyfer pethau eraill.
Mwy o gwestiynau?
[Myfyrwyr] Y rhifyddeg pwyntydd. >> Oh yeah.
Strings yn haws, ond yn edrych ar rywbeth fel ints,
felly yn ôl i int x [4];
P'un a yw hyn yn amrywiaeth neu a yw'n pwyntydd i amrywiaeth malloced o 4 cyfanrifau,
mae'n mynd i gael eu trin yn yr un ffordd.
[Myfyrwyr] Felly, araeau ar y domen?
Nid yw [Bowden] Arrays ar y domen. >> [Myfyrwyr] Oh.
>> [Bowden] Mae'r math hwn o amrywiaeth yn tueddu i fod ar y simnai
oni bai eich bod yn datgan ei fod - anwybyddu newidynnau byd-eang. Peidiwch â defnyddio newidynnau byd-eang.
Y tu mewn swyddogaeth i'n dweud int x [4];
Mae'n mynd i greu bloc 4-cyfanrif ar y pentwr ar gyfer y casgliad.
Ond mae hyn malloc (4 * sizeof (canolradd)); yn mynd i fynd ar y domen.
Ond ar ôl y pwynt hwn gallaf ddefnyddio x a p yn 'n bert lawer yr un ffordd,
ar wahân i'r eithriadau dywedais o'r blaen ynghylch y gallwch ail-neilltuo p.
Yn dechnegol, mae eu maint ychydig yn wahanol, ond mae hynny'n gwbl amherthnasol.
Dydych chi byth mewn gwirionedd yn defnyddio eu maint.
Mae'r p gallwn ddweud p [3] = 2; neu x [3] = 2;
Gallwch eu defnyddio yn union yr un ffyrdd.
Rhifyddeg pwyntydd Felly nawr - Ydy.
[Myfyrwyr] nid oes rhaid i chi wneud p * os oes gennych y cromfachau?
Mae'r cromfachau yn dereference ymhlyg. >> Iawn.
A dweud y gwir, hefyd o'r hyn rydych yn ei ddweud gyda'r gewch arrays amlddimensiwn
gan gyfeirio, yr hyn y gallwch ei wneud yw rhywbeth fel, gadewch i ni ddweud, int ** pp = malloc (sizeof (int *) * 5);
'N annhymerus' jyst ysgrifennu i gyd allan yn gyntaf.
Doeddwn i ddim eisiau bod un.
Iawn.
Beth wnes i yma yw - Dylai hynny fod yn pp [i].
Felly pp rhoi syniad i pwyntydd.
Rydych yn mallocing pp i bwyntio at amrywiaeth o 5 seren int.
Felly, er cof sydd gennych ar y tt corn
Mae'n mynd i bwyntio at amrywiaeth o 5 blociau sydd i gyd eu hunain awgrymiadau.
Ac yna pan fyddaf yn malloc i lawr yma, yr wyf malloc bod pob un o'r pwyntiau unigol
Dylai cyfeirio at bloc ar wahân o 4 bytes ar y domen.
Felly, mae hyn pwyntiau i 4 bytes.
Ac mae hyn yn un pwynt i 4 wahanol bytes.
>> A phob un ohonynt yn cyfeirio at eu hunain 4 bytes.
Mae hyn yn rhoi i mi ffordd o wneud pethau aml-ddimensiwn.
Gallwn ddweud pp [3] [4], ond yn awr nid yw hyn yn yr un peth ag araeau amlddimensiwn
oherwydd araeau aml-ddimensiwn ei gyfieithu [3] [4] i greu un gwrthbwyso i'r casgliad x.
Mae hyn yn p dereferences, mynediad y mynegai trydydd yna dereferences y
a mynedfeydd - byddai 4 yn annilys - y mynegai ail.
Ond pan gawsom y int x [3] [4] cyn fel array amlddimensiwn
a phan fyddwch yn dyblu braced mae'n wirioneddol dim ond dereference sengl,
eich bod yn dilyn pwyntydd unigol ac yna gwrthbwyso,
mae hyn yn wir cyfeiriadau 2D.
Eich bod yn dilyn 2 awgrymiadau ar wahân.
Felly, mae hyn hefyd yn dechnegol caniatáu i chi gael araeau amlddimensiwn
lle mae pob amrywiaeth unigol yn wahanol feintiau.
Felly, yr wyf yn meddwl araeau aml-ddimensiwn danheddog yw'r hyn fe'i gelwir yn
ers wir y gallai y peth cyntaf yn cyfeirio at rywbeth sydd 10 elfen,
gallai'r ail beth cyfeirio at rywbeth sydd â 100 o elfennau.
[Myfyrwyr] A oes unrhyw derfyn i'r nifer o awgrymiadau y gallwch ei gael
dynnu sylw at awgrymiadau eraill? Rhif >>
Gallwch gael int ***** t.
Yn ôl i'r pwyntydd rhifyddeg - >> [myfyrwyr] Oh. >> Yeah.
[Myfyrwyr] Os oes gen i int *** p ac yna yr wyf yn gwneud dereferencing a dywedaf p * yn hafal i'r gwerth hwn,
mae'n unig yn mynd i wneud lefel 1 o dereferencing? >> Ydy.
Felly, os wyf am i gael mynediad at y peth y mae'r pwyntydd olaf yn pwyntio at -
Yna byddwch yn gwneud p ***. >> Iawn.
Felly mae hyn yn bwynt p i 1 bloc, yn cyfeirio at bloc arall, yn cyfeirio at bloc arall.
Yna, os ydych yn ei wneud * p = rhywbeth arall, yna rydych yn newid hyn
yn hyn yn pwyntio at floc gwahanol. >> Iawn.
>> [Bowden] Ac os yw'r rhain yn cael eu malloced, yna rydych wedi gollwng cof bellach
oni bai eich bod yn digwydd i gael cyfeiriadau gwahanol o'r
gan na allwch fynd yn ôl at y rhai yr ydych newydd ei daflu i ffwrdd.
Rhifyddeg Pointer.
int x [4]; yn mynd i ddyrannu amrywiaeth o 4 gyfanrifau
lle mae x yn mynd i gyfeirio at ddechrau'r y rhesi.
Felly, pan fyddaf yn dweud rhywbeth fel x [1]; yr wyf am i olygu mynd i'r cyfanrif ail safle yn y array,
a fyddai'n yr un yma.
Ond mewn gwirionedd, dyna 4 bytes i'r casgliad fod hyn yn gyfanrif yn cymryd fyny 4 bytes.
Felly, yn gwrthbwyso o 1 mewn gwirionedd yw gwrthbwyso o 1
gwaith maint beth bynnag fo'r math o amrywiaeth yn.
Mae hwn yn amrywiaeth o gyfanrifau, felly mae'n gwybod ei wneud 1 gwaith maint int pan fydd am wneud iawn.
Mae'r gystrawen arall. Cofiwch bod hyn yn cyfateb i * (x + 1);
Pan fyddaf yn dweud pwyntydd + 1, beth sy'n dychwelyd yw cyfeiriad y mae'r pwyntydd yn storio
ac 1 waith y maint o'r math y pwyntydd.
Felly, os x = ox100, yna x + 1 = ox104.
Ac mae modd camddefnyddio hyn ac yn dweud rhywbeth fel torgoch * c = (torgoch *) x;
ac yn awr c yn mynd i fod yr un cyfeiriad â x.
c yn mynd i fod yn hafal i ox100,
ond c + 1 yn mynd i fod yn hafal i ox101
ers rhifyddeg pwyntydd yn dibynnu ar y math y pwyntydd eich bod yn ychwanegu at.
Felly, c + 1, mae'n edrych ar c, mae'n pwyntydd torgoch, felly mae'n mynd i ychwanegu 1 gwaith maint y torgoch,
sydd bob amser yn mynd i fod yn 1, felly byddwch yn cael 101,
ond os wyf yn gwneud x, sydd hefyd yn dal 100, x + 1 yn mynd i fod yn 104.
[Myfyrwyr] Allwch chi ddefnyddio c + + er mwyn datblygu eich pwyntydd erbyn 1?
Ydw, y gallwch.
Ni allwch wneud hynny gyda x oherwydd x yn unig yw symbol, mae'n gyson; ni allwch newid x.
>> Ond c digwydd i ddim ond fod yn pwyntydd, felly c + + yn gwbl ddilys a bydd yn codiad o 1.
Os c yn unig * int, yna c + + byddai yn cael ei 104.
+ + Rhifyddeg pwyntydd yn gwneud yn union fel y byddai c + 1 yn cael ei wneud rhifyddeg pwyntydd.
Mae hyn mewn gwirionedd sut mae lot o bethau fel uno fath -
Yn hytrach na chreu copïau o bethau, gallwch chi yn hytrach na pasio -
Fel os oeddwn i eisiau i lwyddo yn yr hanner y llu - gadewch i ni dileu rhywfaint o hyn.
Lets 'ddeud Roeddwn i eisiau i lwyddo yn yr ochr y rhesi i mewn i swyddogaeth.
Beth fyddwn i'n ei drosglwyddo i'r swyddogaeth honno?
Os byddaf yn pasio x, yr wyf yn pasio y cyfeiriad hwn.
Ond yr wyf eisiau trosglwyddo hyn gyfeiriad penodol. Felly, beth ddylwn i ei basio?
[Myfyrwyr] Pointer + 2?
[Bowden] Felly x + 2. Ydw.
Mae hynny'n mynd i fod yn y cyfeiriad hwn.
Byddwch hefyd yn aml iawn yn ei weld fel x [2] ac yna gyfeiriad hynny.
Felly, mae angen i chi gymryd y cyfeiriad oherwydd y braced yn dereference ymhlyg.
x [2] yn cyfeirio at y gwerth sydd yn y blwch hwn, ac yna rydych am i'r cyfeiriad y blwch hwnnw,
fel eich bod yn dweud & x [2].
Felly dyna sut mae rhywbeth yn uno fath lle rydych am i basio hanner y rhestr i rywbeth
chi wir dim ond pasio a x [2], ac yn awr cyn belled ag yr alwad recursive yn y cwestiwn,
fy casgliad newydd yn dechrau yno.
Gwestiynau munud olaf.
[Myfyrwyr] Os nad ydym yn rhoi ampersand neu - beth sy'n bod enw? >> Star?
[Myfyrwyr] Star. >> Yn dechnegol, gweithredwr dereference, ond - >> [myfyrwyr] dereference.
>> Os nad ydym yn rhoi seren neu ampersand, beth sy'n digwydd os Fi jyst yn dweud y = x a x yn pwyntydd?
Beth yw'r math o y? >> [Myfyrwyr] n annhymerus 'jyst dweud ei fod yn pwyntydd 2.
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.
Ac os yw x pwyntydd int? >> Byddai'n cwyno oherwydd nad ydych yn gallu aseinio awgrymiadau.
[Myfyrwyr] Iawn.
Cofiwch fod awgrymiadau, er ein bod yn tynnu nhw fel saethau,
wir i gyd maent yn siop - int * x - wir i gyd x yn storio yn rhywbeth fel ox100,
yr ydym yn digwydd i gynrychioli â chyfeirio at y bloc storio yn 100.
Felly, pan fyddaf yn dweud int * y = x; Im 'jyst yn copïo i mewn i ox100 y,
yr ydym yn unig yn mynd i gynrychioli fel y, hefyd yn pwyntio at ox100.
Ac os ydw i'n dweud int i = (int) x, yna i yn mynd i storio beth bynnag yw gwerth ox100 yn
tu mewn, ond nawr mae'n mynd i gael eu dehongli fel cyfanrif yn hytrach na pwyntydd.
Ond mae angen y cast neu arall fydd yn cwyno.
[Myfyrwyr] Felly, ydych chi'n ei olygu i fwrw -
A yw'n mynd i fod yn bwrw int o x neu bleidlais fwrw int o y?
[Bowden] Beth?
[Myfyrwyr] Iawn. Ar ôl y cromfachau yn bod yn mynd i fod yn x neu ae yno?
>> [Bowden] Naill ai. x ac y yn cyfateb. >> [Myfyrwyr] Iawn.
Oherwydd eu bod yn y ddau awgrymiadau. >> Yeah.
[Myfyrwyr] Felly, byddai'n storio y 100 hecsadegol ar ffurf cyfanrif? >> [Bowden] Yeah.
Ond nid yw'r gwerth o beth bynnag mae'n cyfeirio at.
[Bowden] Yeah. >> [Myfyrwyr] Felly, dim ond y cyfeiriad ar ffurf cyfanrif. Iawn.
[Bowden] Os ydych yn awyddus i am ryw reswm rhyfedd,
gallech yn unig yn delio gyda awgrymiadau a pheidiwch byth â delio gyda chyfanrifau
a dim ond fod fel int * x = 0.
Yna byddwch chi'n mynd i fynd yn ddryslyd iawn unwaith rhifyddeg pwyntydd yn dechrau digwydd.
Felly y niferoedd y maent yn storio yn ddiystyr.
Mae'n union sut yr ydych yn y pen draw eu dehongli.
Felly, rwy'n rhydd i gopïo ox100 o * int i int,
ac rwy'n rhydd i aseinio - you're na thebyg yn mynd i gael yelled am beidio â bwrw -
Rwy'n rhydd i aseinio rhywbeth fel (int *) ox1234 i mewn i hyn * int mympwyol.
Felly ox123 yr un mor ddilys cyfeiriad cof fel y mae & y.
Ac y digwydd i ddychwelyd rhywbeth sy'n 'n bert lawer ox123.
[Myfyrwyr] fyddai hynny'n ffordd wirioneddol oer i fynd o hecsadegol i ffurf degol,
yn hoffi os oes gennych pwyntydd ac rydych yn bwrw fel yn int?
[Bowden] Gallwch mewn gwirionedd dim ond argraffu gan ddefnyddio fel printf.
Lets 'ddeud gennyf int y = 100.
Felly printf (% d \ n - fel y dylech wybod yn barod - argraffu hynny fel cyfanrif x%,.
Byddwn dim ond argraffu fel hecsadegol.
Felly, nid pwyntydd yn cael ei storio fel hecsadegol,
ac nid cyfanrif yn cael ei storio fel degol.
Mae popeth yn cael ei storio fel deuaidd.
Dim ond ein bod yn tueddu i ddangos arwyddion fel hecsadegol
oherwydd ein bod yn meddwl am bethau yn y blociau 4-beit,
a chyfeiriadau cof yn tueddu i fod yn gyfarwydd.
Rydym yn fel, os bydd yn dechrau gyda BF, yna mae'n digwydd i fod ar y pentwr.
Felly, dim ond ein dehongliad o bwyntyddion fel hecsadegol.
Iawn. Unrhyw gwestiynau diwethaf?
>> 'N annhymerus' fod yma am ychydig ar ôl os oes gennych unrhyw beth arall.
A dyna ddiwedd y.
>> [Myfyrwyr] Yay! [Cymeradwyaeth]
>> [CS50.TV]