[Powered by Google Translate] [Seksyon 4 - plis konfòtab]
[Rob Bowden - Inivèsite Harvard]
[Sa a se CS50. - CS50.TV]
Nou gen yon demen egzamen, nan ka ou nèg pa t 'konnen.
Li nan fondamantalman sou tout bagay ou ta ka gen pou wè nan klas, oswa yo dwe gen pou wè nan klas la.
Ki gen ladan endikasyon, menm si yo se yon sijè trè ki resan.
Ou ta dwe omwen konprann nivo segondè yo nan yo.
Nenpòt bagay ki te fin janbe nan klas ou ta dwe konprann pou egzamen an.
Se konsa, si w gen kesyon sou yo, ou kapab mande yo koulye a.
Men, sa a se pral gen yon sesyon trè elèv yo dirije kote ou nèg poze kesyon,
Se konsa èspere ke gen moun ki gen kesyon.
nenpòt moun ki gen kesyon?
Wi. >> [Elèv] Èske ou ka ale sou pwent ankò?
Mwen pral ale sou pwent.
Tout nan varyab ou nesesèman ap viv nan memwa,
men anjeneral ou pa enkyete sou sa ki epi ou jis di x + 2 ak y + 3
ak du a pral konnen ki kote bagay sa yo ap viv pou ou.
Yon fwa w ap fè fas ak endikasyon, kounye a ou ap klèman lè l sèvi avèk sa yo adrès memwa.
Se konsa, yon varyab sèl pral sèlman tout tan ap viv nan yon adrès sèl nan nenpòt ki lè pou yo bay.
Si nou vle deklare yon konsèy, ki sa ki kalite nan ale nan sanble?
>> Mwen vle deklare yon p konsèy. Ki kalite a sanble?
[Elèv] int * p. >> Yeah. Se konsa, int * p.
Ak ki jan mwen fè l 'lonje dwèt sou x? >> [Elèv] comercial.
[Bowden] Se konsa, comercial se literalman rele adrès la nan operatè.
Se konsa, lè m 'di & x li a ap resevwa adrès la memwa nan x la varyab.
Se konsa, koulye a, mwen gen p la konsèy, ak nenpòt kote nan kòd m 'mwen ka itilize * p
oswa mwen te kapab sèvi ak x ak li pral dwe egzak menm bagay la.
(* P). Ki sa ki sa a ap fè? Ki sa sa etwal vle di?
[Elèv] Sa vle di yon valè nan pwen sa a. >> Yeah.
Se konsa, si nou gade nan li, li ka trè itil yo desine soti dyagram ki
kote sa a se yon ti bwat ti kras nan memwa pou x, ki k ap pase nan gen menm valè a 4,
Lè sa a, nou gen yon bwat ti kras nan memwa pou p,
e konsa pwen p x, pou nou desine yon flèch nan p x.
Se konsa, lè nou di * p nou ap di ale nan ti bwat la ki se p.
Star se swiv flèch la, li Lè sa a, tou sa ou vle ak ki bwat ki la a.
Se konsa, mwen ka di * p = 7, epi ki pral ale nan ti bwat la ki se x ak chanjman ki a 7.
Oswa mwen te kapab di Int z = * p * 2; Sa se twoublan paske zetwal li a, zetwal.
Zetwal nan yon sèl ki dereferencing p, zetwal nan lòt la miltipliye pa 2.
Avi mwen te kapab gen jis kòm byen ranplase p la * ak x.
Ou ka itilize yo nan menm fason an.
Lè sa a, pita sou mwen ka gen p pwen nan yon konplètman bagay nouvo.
Mwen ka jis di p = &z;
Se konsa, kounye a pa gen okenn pwen P ankò x; li pwen z.
Ak nenpòt ki lè m 'fè * p li a menm bagay la tou kòm fè z.
Se konsa, bagay la itil sou sa a se yon fwa nou kòmanse resevwa nan fonksyon.
>> Li nan kalite initil deklare yon konsèy ki pwen a yon bagay
ak Lè sa a, w ap sèlman dereferencing li
lè ou ta ka te itilize varyab orijinal la yo kòmanse avèk yo.
Men, lè ou jwenn yo nan fonksyon - kidonk kite pou nou di nou gen kèk fonksyon, int foo,
ki pran yon konsèy ak jis fè sa ki * p = 6;
Tankou nou te wè anvan ak swap, ou pa ka fè yon swap efikas ak yon fonksyon apa
pa jis pase nonm antye relatif paske tout bagay nan C se toujou pase nan valè.
Menm lè w ap pase endikasyon w ap pase nan valè.
Li jis konsa k ap pase ki valè sa yo yo se adrès memwa.
Se konsa, lè m 'di foo (p); mwen pase konsèy la nan fonksyon foo la
ak Lè sa a, foo ap fè * p = 6;
Se konsa, andedan nan ki fonksyon, * p se toujou ekivalan a x,
Men, m 'pa ka sèvi ak x andedan nan ki fonksyon paske li pa scoped nan ki fonksyon.
Se konsa, * p = 6 se yon fason a sèlman mwen kapab jwenn aksè nan yon varyab lokal soti nan yon lòt fonksyon.
Oswa, byen, endikasyon yo se wout la sèlman mwen ka gen aksè a yon varyab lokal soti nan yon lòt fonksyon.
[Elèv] a Se pou nou di ou te vle retounen yon konsèy. Ki jan egzakteman ou fè sa?
[Bowden] Retounen yon konsèy tankou nan yon bagay tankou int y 3 =; retounen & y? >> [Elèv] Yeah.
[Bowden] Okay. Ou pa ta dwe janm fè sa. Sa a se move.
Mwen panse ke mwen te wè nan sa yo glisad konferans ou te kòmanse wè dyagram sa a tout antye nan memwa
kote moute isit la ou te gen adrès memwa 0
, li desann isit la ou gen memwa adrès 4 jig oswa 2 a 32 an.
Se konsa, Lè sa a, ou te gen kèk bagay ak lòt bagay kèk ak Lè sa a, ou gen chemine ou
ak ou te gen pil ou a, ki ou jis te kòmanse aprann sou, ap grandi.
[Elèv] Eske se pa pil wòch la pi wo a chemine a?
>> Yeah. Pil wòch la se sou tèt, se pa li? >> [Elèv] Oke, li mete 0 sou tèt.
[Elèv] Oh, li mete 0 sou tèt. >> [Elèv] Oh, oke.
Limit responsabilite nou: Nenpòt kote ki gen CS50 w ap ale nan wè li nan fason sa. >> [Elèv] Okay.
Se jis ke lè w ap premye wè pil,
renmen lè ou panse de yon pil ou panse a anpilabl bagay sa yo sou tèt youn ak lòt.
Se konsa, nou gen tandans yo baskile sa a alantou pou chemine a ap grandi, tankou yon pil nòmalman ta
olye pou yo chemine an pandye desann. >> [Elèv] pa pil teknikman grandi twò, menm si?
Sa depann de ki sa ou vle di pa grandi.
Chemine a ak pil toujou grandi nan direksyon opoze.
Yon pil se toujou ap grandi nan sans ke li an ap grandi
rive sou pi wo adrès memwa, ak pil wòch la ap grandi desann
nan ke li nan ap grandi nan direksyon pou pi ba adrès memwa.
Se konsa, tèt la se 0 ak anba a se adrès memwa segondè.
Yo ap tou de ap grandi, jis nan opoze direksyon.
[Elèv] Mwen te jis vle di ke paske ou te di ou mete pil sou anba a
paske li sanble pi plis entwisyon paske pou chemine a kòmanse nan tèt la nan yon pil,
pil wòch la sou tèt tèt li tou, pou that's - Yeah >>.
Ou menm tou panse a pil wòch la kòm ap grandi ak pi gwo, men pil an plis sa.
Se konsa, chemine a se youn la ke nou kalite vle montre ap grandi.
Men, tout kote ou gade otreman ki pral montre adrès 0 nan tèt la
ak adrès la memwa pi wo nan pati anba a, se konsa sa a se opinyon abityèl ou nan memwa.
>> ou gen yon kesyon?
[Elèv] Èske ou ka di nou plis sou pil wòch la?
Yeah. Mwen pral genyen ak sa yo ki nan yon dezyèm fwa.
Premyèman, pral tounen nan poukisa retounen & y se yon bagay mal,
sou chemine a ou gen yon pakèt moun sou ankadreman chemine ki reprezante tout nan fonksyon yo
ki te rele.
Se konsa, inyore bagay sa yo anvan, tèt la nan chemine ou a ap toujou pral fè fonksyon prensipal
depi lè sa a fonksyon nan premye ki nan yo te rele.
Lè sa a, lè w rele yon lòt fonksyon, chemine a pral grandi desann.
Se konsa, si mwen rele kèk fonksyon, foo, ak li vin ankadreman chemine pwòp li yo,
li ka rele kèk fonksyon, ba; li vin ankadreman chemine pwòp li yo.
Ak bar ta ka repetitif ak li te kapab rele tèt li,
Pou fè sa ki dezyèm rele bar la pral jwenn ankadreman pwòp chemine li yo.
Se konsa, sa ki ale nan sa yo ankadreman chemine yo tout nan varyab lokal yo
ak tout agiman yo fonksyon ki -
Nenpòt bagay ki lokalman scoped sa a fonksyon ale nan sa yo ankadreman chemine.
Se konsa, sa vle di lè m 'te di yon bagay tankou bar se yon fonksyon,
Mwen jis ale nan deklare yon nonb antye relatif ak Lè sa a, retounen yon konsèy ak sa yo ki antye ki pè.
Se konsa, kote y ap viv?
[Elèv] y ap viv nan ba. >> [Bowden] Yeah.
Yon kote nan sa a kare ti kras nan memwa se yon kare littler ki gen y nan li.
Lè m 'tounen & y, mwen retounen yon konsèy sa a blòk ti kras nan memwa.
Men, Lè sa a, lè yon retounen fonksyon, vin ankadreman chemine li yo déja nan chemine a.
Epi sa a, poukisa sa yo rele pil.
Se tankou estrikti nan done chemine, si ou konnen ki sa ki sa se.
Oswa menm tankou yon pil nan plato se toujou egzanp lan,
prensipal ki pral ale nan anba a, Lè sa a, fonksyon an premye ou rele ki pral ale sou tèt de sa,
epi ou pa kapab jwenn tounen nan prensipal jouk lè wa tounen soti nan tout fonksyon ki te rele
ke yo te mete sou tèt li.
>> [Elèv] Se konsa, si ou te fè fè retounen y la &, ki valè se sijè a chanje san avètisman.
Wi, it's - >> [elèv] Li ta ka efase. >> Yeah.
Li nan konplètman - Si ou eseye ak -
Sa a ta kapab tou yon ba * int paske li nan retounen yon konsèy,
konsa kalite retounen li yo se * int.
Si ou eseye itilize valè a retounen nan fonksyon sa a, li nan konpòtman endefini
paske sa konsèy pwen memwa move. >> [Elèv] Okay.
Se konsa, sa si, pou egzanp, ou te di Int * y = malok (sizof (Int))?
Sa a pi byen. Wi.
[Elèv] Nou te pale sou ki jan lè nou trennen bagay sa yo nan bin resiklaj nou an
yo pa aktyèlman efase; nou jis pèdi pwent yo.
Se konsa, nan ka sa a nou aktyèlman efase valè a oswa se li toujou la nan memwa?
Pou pati ki pi, li te ale nan toujou la.
Men, kite a di nou rive rele kèk fonksyon lòt, Baz.
Baz la pwal jwenn ankadreman pwòp chemine li a sou isit la.
Li nan pwal yo dwe ranplasan tout bagay sa a,
ak Lè sa a, si ou pita eseye epi sèvi ak konsèy a ke ou te jwenn anvan,
li pa pral fè menm valè a.
Li nan ale nan te chanje jis paske w rele Baz la fonksyon.
[Elèv] Men, nou pa t ', nou ta toujou ap resevwa 3?
[Bowden] Nan tout chans, ou ta.
Men, nou pa ka konte sou sa. C jis di konpòtman endefini.
>> [Elèv] Oh, li fè sa. Oke.
Se konsa, lè ou vle retounen yon konsèy, sa a se kote malok vini nan sèvi ak yo.
M ap ekri aktyèlman jis retounen malok (3 * sizof (Int)).
Nou pral ale sou malok plis nan yon dezyèm, men lide a nan malok se tout nan varyab lokal ou a
toujou ale sou pil la.
Nenpòt bagay ki nan malloced ale sou pil wòch la, epi li pral pou tout tan ak toujou sou pil wòch la
jiskaske ou klèman libere li.
Se konsa, sa vle di ke lè ou malok yon bagay, li pral siviv apre retounen yo fonksyon.
[Elèv] Eske li siviv apre pwogram lan sispann kouri? >> No
Oke, kidonk li a pwal gen jiskaske pwogram nan se tout wout la fè kouri. >> Wi.
Nou ka ale sou detay sou sa ki pase lè pwogram lan sispann kouri.
Ou ta ka bezwen raple m ', men sa se yon bagay apa nèt.
[Elèv] Se konsa, malok kreye yon konsèy? >> Yeah.
Malok - >> [elèv] Mwen panse ke malok delege yon blòk nan memwa ke yon konsèy kapab itilize.
[Bowden] Mwen vle ke dyagram ankò. >> [Elèv] Se konsa, sa a fonksyon travay, menm si?
[Elèv] Yeah, malok delege yon blòk nan memwa ke ou ka itilize,
ak Lè sa a, li retounen adrès ki nan blòk an premye nan ki memwa.
>> [Bowden] Yeah. Se konsa, lè ou malok, w ap arachman kèk blòk de memwa
sa a, se kounye a nan pil wòch la.
Si pil wòch la se twò piti, Lè sa a, pil wòch la se jis ale nan grandi, ak li ap grandi nan direksyon sa a.
Se konsa, kite a di pil wòch la se twò piti.
Lè sa a, li a sou yo grandi yon ti jan a epi retounen yon konsèy sa a blòk ki jis grandi.
Lè ou gratis bagay, w ap fè plis chanm nan pil wòch la,
se konsa Lè sa a, yon pita rele malok ka jam itilize ke memwa ke ou te deja te libere.
Bagay la enpòtan sou malok ak gratis se ke li ba ou kontwòl konplè
pandan tout lavi a nan sa yo blòk memwa.
Varyab Global yo toujou vivan.
Varyab lokal yo tou vivan nan dimansyon yo.
Osito ke ou ale sot pase yon atèl Curly, varyab lokal yo yo mouri.
Memwa Malloced an vi lè ou vle li nan dwe vivan
ak Lè sa a, ki lage lè ou di l 'bay ka libere.
Moun sa yo se aktyèlman sèlman 3 ki kalite memwa, vrèman.
Genyen nan jesyon otomatik memwa, ki se chemine a.
Bagay sa yo rive pou ou otomatikman.
Lè ou di x Int, memwa se afekte pou x int.
Lè x ale soti nan dimansyon, memwa se resikle pou x.
Lè sa a, gen nan jesyon dinamik memwa, ki se ki sa malok se,
ki se lè ou gen kontwòl.
Ou dynamique deside ki lè memwa ta dwe ak pa ta dwe afekte.
Lè sa a, gen nan estatik, ki jis vle di ke li ap viv pou tout tan,
ki se ki sa varyab mondyal yo ye.
Yo ap jis toujou nan memwa.
>> Kesyon?
[Elèv] Èske ou ka defini yon blòk jis lè l sèvi avèk aparèy òtopedik Curly
men pa gen gen yon? si deklarasyon oubyen yon deklarasyon pandan y ap oswa yon bagay tankou sa
Ou ka defini yon blòk kòm nan yon fonksyon, men ki gen aparèy òtopedik Curly tou.
[Elèv] Se konsa, ou pa ka jis gen tankou yon pè o aza nan aparèy òtopedik Curly nan kòd ou a
ki gen varyab lokal yo? >> Wi, ou kapab.
Anndan nan int bar nou te ka gen {int y = 3;}.
Ki nan sipoze yo dwe gen dwa isit la.
Men, sa nèt, defini sijè ki abòde lan int y.
Apre sa atèl dezyèm Curly, y pa kapab itilize ankò.
Ou prèske pa janm fè sa, menm si.
Retounen nan sa ki pase lè yon pwogram fini,
gen nan kalite yon manti miskonsepsyon / mwatye ke nou bay yo nan lòd yo jis fè bagay sa yo pi fasil.
Nou di w ke lè ou asiyen memwa
w ap allocation kèk ti moso nan RAM pou varyab sa a.
Men, ou pa ap reyèlman dirèkteman manyen RAM janm nan pwogram ou an.
Si ou panse a li, ki jan mwen te trase -
Ak aktyèlman, si ou ale nan nan gdb ou pral wè menm bagay la.
Kèlkeswa konbyen fwa ou kouri pwogram ou an oswa sa ki pwogram w ap kouri,
chemine a ap toujou pral kòmanse -
w ap toujou ale nan wè varyab alantou yon bagay oxbffff adrès.
Li nan anjeneral yon kote nan rejyon sa.
Men, ki jan ka 2 pwogram pètèt gen endikasyon memwa nan menm?
[Elèv] Genyen kèk deziyasyon abitrè nan kote oxbfff ta sipoze ap sou belye mouton an
ki ka aktyèlman ap nan diferan kote depann sou lè yo te fonksyon an rele.
Yeah. Tèm nan se memwa vityèl.
Lide a se ke chak pwosesis sèl, chak sèl pwogram ki kouri sou òdinatè w lan
gen pwòp li yo - kite a sipoze 32 Bits - konplètman endepandan espas adrès.
Sa a se espas ki la adrès.
Li te gen pwòp li yo konplètman endepandan 4 jigokte yo itilize.
>> Se konsa, si w kouri 2 pwogram an menm tan, pwogram sa a wè 4 jigokte tèt li,
pwogram sa a wè 4 jigokte tèt li,
epi li enposib pou pwogram sa a nan dèreferans yon konsèy
ak fini ak memwa soti nan pwogram sa a.
Ak sa ki memwa vityèl se se yon kat ki soti nan yon espas adrès pwosesis
yo ak bagay reyèl sou RAM.
Se konsa, li a jiska sistèm opere ou nan konnen ke,
hey, lè sa a Guy dereferences oxbfff konsèy, ki vrèman vle di
ke li te vle RAM multiple 1000,
Lè nou konsidere ke si pwogram sa a dereferences oxbfff, li ta vrèman renmen RAM multiple 10000.
Yo ka abitrèman lwen apa.
Sa a se menm vre de bagay sa yo nan yon espas sèl pwosesis adrès.
Se konsa, tankou li wè tout jigokte 4 a tèt li, men kite a di -
[Elèv] Èske chak pwosesis sèl -
Se pou nou di ou gen yon òdinatè ki gen sèlman 4 jigokte nan RAM.
chak pwosesis sèl wè tout 4 jigokte yo? >> Wi.
Men, jigokte yo 4 li wè se yon manti.
Li nan jis li panse li gen tout bagay sa a memwa paske li pa konnen nenpòt lòt pwosesis lòt egziste.
Li pral sèlman itilize memwa toutotan ke li aktyèlman bezwen.
Sistèm nan fonksyone se pa sa pral bay RAM pwosesis sa a
si li pa la lè l sèvi avèk nenpòt ki memwa nan rejyon sa a tout antye.
Li pa nan pral bay li memwa pou sa rejyon an.
Men, lide a se ke - mwen ap eseye panse a - Mwen pa ka panse a yon analoji.
Analoji yo difisil.
Youn nan pwoblèm yo ki nan memwa vityèl oswa yon sèl nan bagay sa yo li a pou rezoud
se ke pwosesis yo ta dwe konplètman okouran de youn ak lòt.
Se konsa, ou ka ekri nenpòt ki pwogram ki jis dereferences nenpòt konsèy,
renmen jis ekri yon pwogram ki di * (ox1234),
dereferencing adrès memwa ak ki nan 1234.
>> Men, li la jiska sistèm nan fonksyone Lè sa a, tradui sa ki 1234 vle di.
Se konsa, si 1234 k ap pase nan gen yon adrès memwa valab pou pwosesis sa a,
tankou li sou pil la oswa yon bagay, Lè sa a, sa a pral retounen valè sa a nan adrès memwa
osi lwen ke pwosesis la konnen.
Men, si 1234 se pa yon adrès ki valab, tankou bagay sa yo rive nan peyi
nan kèk moso ti kras nan memwa isit la ki ale pi lwen pil la ak pi lwen pase pil wòch la
epi ou pa te reyèlman te itilize sa, Lè sa a, sa a, se lè ou jwenn bagay sa yo tankou segfaults
paske w ap manyen memwa ke ou pa ta dwe manyen.
Sa a se verite tou -
Yon sistèm 32-bit, 32 Bits vle di ou gen 32 Bits defini yon adrès memwa.
Li nan poukisa endikasyon yo se 8 paske bytes 32 Bits yo se 8 bytes - oubyen 4 bytes.
Endikasyon yo se 4 bytes.
Se konsa, lè ou wè yon konsèy tankou oxbfffff, se sa ki -
Nan nenpòt ki pwogram bay ou ka jis konstwi nenpòt konsèy abitrè,
soti nan nenpòt kote ox0 bèf f's 8 - ffffffff.
[Elèv] Eske se pa ou di yo ap 4 bytes? >> Yeah.
[Elèv] Lè sa a, chak multiple ap gen - >> [Bowden] ekzadesimal.
Ekzadesimal - 5, 6, 7, 8. Se konsa, endikasyon w ap ale nan toujou wè nan ekzadesimal.
Se jis ki jan nou klasifye endikasyon.
Chak chif 2 nan ekzadesimal se 1 multiple.
Se konsa, gen k ap pase yo dwe 8 ​​chif ekzadesimal pou 4 bytes.
Se konsa, chak konsèy sèl sou yon sistèm 32-bit a pwal 4 bytes,
ki vle di ke nan pwosesis ou, ou ka konstwi nenpòt abitrè 4 bytes
epi fè yon konsèy soti nan li,
ki vle di ke osi lwen ke li nan konnen, li kapab adrese yon 2 tout bytes yo 32 nan memwa.
Menm si li pa reyèlman gen aksè a sa,
menm si òdinatè w lan sèlman gen 512 megabit, li panse li gen ki memwa anpil.
Ak sistèm nan fonksyone se entelijan ase ke li pral sèlman asiyen ki sa ou aktyèlman bezwen.
Li pa jis ale, o, yon pwosesis nouvo: 4 jig.
>> Yeah. >> [Elèv] Ki sa ki towo a vle di? Poukisa ou ekri li?
Se jis nan senbòl pou ekzadesimal.
Lè nou wè yon kòmansman ki gen chif avèk bèf, bagay sa yo siksesif yo se ekzadesimal.
[Elèv] Ou te eksplike sou sa ki pase lè yon pwogram fini. >> Wi.
Kisa k ap pase lè yon pwogram fini se sistèm nan fonksyone
jis efase mapin yo ke li genyen pou sa yo adrès, ak sa a, se li.
Sistèm nan fonksyone kapab kounye a jis bay ki memwa nan yon lòt pwogram yo itilize.
[Elèv] Okay.
Se konsa, lè ou asiyen yon bagay sou pil wòch la oswa varyab yo chemine oswa mondyal oswa yon lòt bagay,
yo tout jis disparèt le pli vit ke pwogram nan fini
paske sistèm nan fonksyone se kounye a gratis bay ki memwa nan nenpòt pwosesis lòt.
[Elèv] Menm si gen yo se pwobableman toujou valè ekri nan? >> Yeah.
Valè yo ki gen chans toujou la.
Li nan jis li a pwal difisil jwenn nan yo.
Li nan pi difisil yo ka resevwa nan yo pase sa li se yo ka resevwa nan yon dosye efase
paske kalite a dosye efase nan chita gen pou yon tan long ak kondwi a difisil a se yon lot pi gwo.
Se konsa, li pral recouvrir diferan pati nan memwa
anvan li k ap pase nan recouvrir moso nan memwa ki ki dosye itilize yo dwe nan.
Men, prensipal memwa, RAM, ou sik nan yon anpil pi vit,
Se konsa, li ale nan trè vit dwe efase.
Kesyon sa a sou oswa tout lòt bagay?
[Elèv] mwen gen kesyon sou yon sijè diferan. >> Okay.
nenpòt moun ki gen kesyon sou sa a?
>> Oke. Diferan sijè. >> [Elèv] Okay.
Mwen te ale nan kèk nan tès yo pratike,
ak nan youn nan yo li te pale sou sizof la
ak valè a ki li retounen oswa diferan kalite varyab. >> Wi.
Epi li te di ke tou de int ak long tou de retou 4, se konsa yo ap tou de bytes 4 long.
Èske gen nenpòt diferans ki genyen ant yon int ak yon long, oswa se li menm bagay la?
Wi, gen se yon diferans.
C estanda a -
Mwen pwobableman ale nan dezòd leve.
Estanda nan C se jis tankou sa ki C se, dokiman an ofisyèl nan C.
Sa a se sa li di.
Se konsa, estanda nan C jis di ke yon Char pral pou tout tan ak toujou 1 multiple.
Tout apre sa - yon kout se toujou jis defini kòm yo te pi gran pase oswa egal a yon Char.
Sa a ta kapab estrikteman pi gran pase, men se pa pozitif.
Yon int jis defini kòm yo te pi gran pase oswa egal a yon ti tan.
Ak yon long se jis ke yo te defini kòm pi gran pase oswa egal a yon int.
Ak yon long long se pi gran pase oswa egal a yon long.
Se konsa, bagay la sèlman estanda nan C defini se ordonne relatif la nan tout bagay.
Kantite lajan aktyèl la nan memwa ke bagay Leve kanpe, pran se jeneralman jiska aplikasyon,
Men, li la trè byen defini nan pwen sa. >> [Elèv] Okay.
Se konsa, bout pantalon yo prèske toujou pral fè 2 bytes.
Antye yo prèske toujou ale nan gen 4 bytes.
Voudre Long yo prèske toujou pral fè 8 bytes.
Ak fin fou, li depann de si wi ou non w ap itilize yon 32-bit oswa yon sistèm 64-ti jan.
Se konsa, yon long ki pral koresponn ak ki kalite sistèm.
Si w ap itilize yon sistèm 32-ti jan tankou Aparèy la, li pral gen 4 bytes.
Si w ap sèvi ak yon 64-ti jan tankou yon anpil nan òdinatè resan yo, li pral yo dwe 8 ​​bytes.
>> Antye yo se prèske toujou 4 bytes nan pwen sa.
Voudre Long yo se prèske toujou 8 bytes.
Nan tan lontan, antye itilize sèlman ki gen 2 bytes.
Men, remake ke sa a konplètman satisfè tout moun sa yo relasyon nan pi gran pase ak egal a.
Se konsa, depi lontan se parfe dwa fè gwosè a menm jan ak yon nonb antye relatif,
epi li la tou dwa fè gwosè a menm jan ak yon long lontan.
Epi li jis pou k ap pase yo ke nan 99,999% nan sistèm, li a pwal egal a
swa yon int oswa yon long lontan. Li jis depann sou 32 ti jan-oswa ti jan 64-. >> [Elèv] Okay.
Nan flote, ki jan pou pwen an desimal deziyen an tèm de Bits?
Renmen kòm binè? >> Yeah.
Ou pa bezwen konnen pou CS50.
Ou pa menm aprann ke nan 61.
Ou pa aprann ki vrèman nan nenpòt kou.
Se jis yon reprezantasyon.
M bliye Alokasyon pou Kou pou yo ti jan egzak.
Lide a nan pwen k ap flote se ke ou asiyen yon kantite espesifik Bits ki reprezante -
Fondamantalman, tout bagay se nan notasyon syantifik.
Se konsa, ou asiyen yon kantite espesifik Bits reprezante ki kantite tèt li, tankou 1,2345.
Mwen pa janm ka reprezante yon nimewo ki gen plis pase 5 chif.
Lè sa a, nou menm tou nou asiyen yon kantite espesifik Bits konsa ke li gen tandans ka tankou
ou ka sèlman ale jiska yon sèten nonb, tankou sa a, se ekspozan an pi gwo ou ka gen,
epi ou ka sèlman desann nan yon ekspozan sèten,
renmen sa a, se ekspozan ki pi piti a ou ka gen.
>> Mwen pa sonje Bits yo fason egzak yo deziyen yo tout moun sa yo valè,
, men yo yon sèten kantite Bits dedye a 1,2345,
yo se yon lòt sèten kantite Bits dedye a ekspozan an,
ak li a sèlman posib yo reprezante yon ekspozan ki gen yon gwosè a sèten.
[Elèv] Men, yon doub? Se ke tankou yon flote siplemantè lontan? >> Yeah.
Li nan menm bagay la kòm yon flote eksepte kounye a w ap itilize 8 bytes olye pou yo 4 bytes.
Koulye a, ou pral kapab sèvi ak 9 chif oswa 10 chif,
ak sa a yo pral kapab ale jiska 300 olye pou yo 100. >> [Elèv] Okay.
Ak cha yo tou 4 bytes. >> Wi.
Oke, ankò, li pwobableman depann jeneral sou aplikasyon jeneral,
men cha yo se 4 bytes, double yo se 8.
Double yo rele doub yo paske yo te doub gwosè a ki te gen cha.
[Elèv] Okay. Epi yo gen doub double? >> Gen pa.
Mwen panse ke - >> [elèv] Tankou voudre lontan? >> Yeah. Mwen pa panse sa. Wi.
[Elèv] Sou tès ane pase a te gen yon kesyon sou fonksyon prensipal
yo te oblije ap yon pati nan pwogram ou an.
Repons la te ke li pa gen yo dwe yon pati nan pwogram ou an.
Nan ki sitiyasyon? Sa a ki sa mwen te wè.
[Bowden] Li sanble - >> [elèv] Ki sa ki sitiyasyon?
ou gen pwoblèm nan? >> [Elèv] Yeah, mwen kapab definitivman rale li leve.
Li pa dwe fè, teknikman, men fondamantalman li pral yo dwe.
[Elèv], mwen wè yon sèl sou yon nan diferan ane.
Li te tankou vre oubyen fo: Yon ki valab - >> O, yon c dosye-a.?
. [Elèv] Nenpòt c dosye yo dwe gen - [tou de pale nan yon fwa - enkonpreansibl]
Oke. Se konsa, sa a, se separe.
>> Yon. C dosye jis bezwen gen fonksyon.
Ou ka konpile yon dosye nan kòd machin, binè, kèlkeswa sa,
san li ke yo te ègzèkutabl ankò.
Yon ègzèkutabl valab dwe gen yon fonksyon prensipal.
Ou kapab ekri 100 fonksyon nan 1 dosye men pesonn pa t prensipal
epi konpile ki desann nan binè,
Lè sa a, ou ekri yon lòt dosye ke se sèlman gen prensipal men li rele yon pakèt moun sou sa yo fonksyon
nan sa a ranpli binè sou isit la.
Se konsa, lè w ap fè ègzèkutabl a, se sa ki Linkshere a fè
se li konbine fichye sa yo binè 2 nan yon ègzèkutabl.
Se konsa, yon. C dosye pa bezwen gen yon fonksyon prensipal nan tout.
Yo, epi sou baz kòd gwo ou pral wè dè milye de. Dosye c ak 1 dosye prensipal la.
Plis kesyon?
[Elèv] te gen yon lòt kesyon.
Li te di ke fè a se yon du. Vre oubyen fo?
Ak repons lan se te fo, e mwen konprann poukisa li pa tankou sonnen.
Men, sa nou rele fè si li pa?
Fè se fondamantalman jis - Mwen ka wè egzakteman ki sa li rele l '.
Men, li jis kouri kòmandman.
Fè.
Mwen ka rale sa a la. Yeah.
Oh, yeah. Fè tou fè sa.
Sa a di bi pou yo sèvis piblik la fè se detèmine otomatikman
ki moso nan yon pwogram gwo bezwen yo rkonpile
ak bay kòmandman yo compile yo.
Ou kapab fè fè dosye ki yo se absoliman gwo.
Fè parèt nan koupon pou yo tan nan dosye, epi, tankou nou te di anvan,
ou ka konpile dosye endividyèl desann, epi li pa jiskaske ou jwenn yo Linkshere la
yo ke yo ap mete tèt yo ansanm nan yon ègzèkutabl.
Se konsa, si ou gen 10 dosye ki diferan ak ou fè yon chanjman nan 1 nan yo,
Lè sa a, sa ki fè se pral fè se jis compile ki 1 dosye
ak Lè sa a, relink tout bagay ansanm.
Men, li la anpil dumber pase sa.
Li nan jiska ou konplètman defini ki sa a, se sa li ta dwe dwe ap fè.
Li pa default gen kapasite nan rekonèt bagay sa a koupon pou tan,
men ou ka ekri yon dosye mak fè anyen.
Ou ka ekri yon fè dosye konsa, lè ou tape fè li jis nan cd a yon lòt anyè.
Mwen te gen fristrasyon paske mwen tout bagay fofile andedan Aparèy mwen
ak Lè sa a, mwen wè PDF an nan Mac a.
>> Se konsa, mwen ale nan Chèche e mwen ka Ale non, Konekte sou Server,
ak sèvè a mwen konekte nan se Aparèy mwen an, epi Lè sa a, mwen louvri moute PDF la
ki vin konpile pa an latèks.
Men, mwen te resevwa fwistre paske chak fwa yon sèl mwen te bezwen rafrechi PDF la,
Mwen te gen kopi li nan yon anyè espesifik sa li te kapab gen aksè
e li te jwenn anmèdan.
Se konsa, olye mwen te ekri yon dosye mak, kote ou gen defini ki jan li fè bagay sa yo.
Ki jan pou nou nan sa a se PDF an latèks.
Jis tankou nenpòt ki dosye fè lòt - oswa mwen devine nou pa te wè dosye yo mak,
men nou gen nan aparèy la yon dosye mak mondyal ki jis di,
si w ap konpile yon dosye C, sèvi ak rezone.
Se konsa, isit la nan dosye mak mwen ke mwen fè m 'di nou,
sa a ranpli w ap ale nan vle konpile ak PDF an latèks.
Se konsa, li la an latèks PDF ki nan fè élaboration la.
Fè pa konpile. Li nan jis kouri sa yo kòmandman nan sekans a mwen espesifye.
Se konsa, li kouri PDF an latèks, li kopi li nan anyè a mwen vle li nan dwe kopye a,
li nan cd nan anyè a ak fè sa ki lòt bagay,
men tout sa li fè a rekonèt lè yon chanjman ranpli,
epi si li chanje, Lè sa a, li pral kouri kòmandman yo ke li nan sipoze kouri
lè chanjman yo dosye. >> [Elèv] Okay.
Mwen pa konnen kote dosye yo fè mondyal yo se pou m 'nan tcheke li.
Lòt kesyon yo? Anyen nan men sot pase ti tès? Nenpòt bagay sa yo konsèy?
Gen anpil bagay sibtil ak endikasyon tankou -
Mwen pa pwal pou kapab jwenn yon kesyon egzamen sou li -
men jis tankou sa a sòt de bagay sa.
Asire w ke w konprann ke lè m 'di Int * x * y -
Sa a se pa egzakteman anyen isit la, mwen devine.
Men, tankou * x * y, sa yo se 2 varyab yo ki nan chemine a.
Lè m 'di x = malok (sizof (Int)), x se toujou yon varyab sou chemine a,
malok se kèk blòk sou nan pil wòch la, epi nou ap fè x pwen nan pil wòch la.
>> Se konsa, yon bagay ki sou pwen yo chemine pil wòch la.
Chak fwa ou malok anyen, w ap inevitableman estoke li andedan yon konsèy.
Se konsa, ke konsèy se sou chemine a, blòk la malloced se sou pil la.
Yon anpil moun ki jwenn konfonn epi di Int * x = malok; x se sou pil la.
No Ki sa ki x pwen se sou pil la.
x tèt li se sou chemine a, sof si pou kèlkeswa rezon ou te x gen yon varyab mondyal,
nan ka sa a li k ap pase yo nan yon lòt rejyon nan memwa.
Se konsa, kenbe tras, dyagram sa yo bwat ak flèch yo trè komen pou egzamen an.
Oswa si li pa sou egzamen 0, li pral sou egzamen 1.
Ou ta dwe konnen tout sa yo, etap sa yo nan konpile
depi ou te gen reponn kesyon sou sa yo. Wi.
[Elèv] nou ta ka ale sou moun ki etap - >> Sure.
Anvan etap ak konpile nou gen pretretman,
konpile, asanble, ak ki lye ak.
Pretretman. Ki sa sa fè?
Li se etap ki pi fasil nan - byen, pa tankou -
sa pa vle di li ta dwe evidan, men li la etap la pi fasil.
Ou nèg te kapab aplike li nou. Yeah.
[Elèv] Pran sa ou genyen nan ou gen ladan sa a tankou ak li kopi ak Lè sa a, tou defini.
Li sanble pou bagay sa yo tankou # enkli ak # defini,
ak li jis kopi ak kole ki sa sa yo aktyèlman vle di.
Se konsa, lè ou di # enkli cs50.h, preproseseur a ap kopye ak kole cs50.h
nan ki liy.
Lè ou di # defini x yo dwe 4, preproseseur an ale nan pwogram nan tout
epi li ranplase tout tan nan x ak 4.
Se konsa, preproseseur a pran yon dosye C ki valab ak sorti yon valid C dosye
kote bagay yo te kopye ak kole.
Se konsa, kounye a konpile. Ki sa sa fè?
[Elèv] Li ale soti nan C rive nan binè.
>> [Bowden] Li pa ale tout wout la binè.
[Elèv] Pou kòd machin Lè sa a,? >> Li pa kòd machin.
[Elèv] Asanble? >> Asanble.
Li ale nan Asanble anvan li ale tout wout la kòd C,
ak pi lang fè yon bagay tankou sa a.
Chwazi nenpòt lang wo nivo, epi si w ap ale nan konpile li,
li an chans yo konpile nan etap.
Premye li a pral konpile Piton C, Lè sa a, li pral konpile C rive nan Asanble,
ak Lè sa a, Asanble ki pral jwenn tradui binè.
Se konsa, konpile ki pral pote l 'soti nan C rive nan Asanble.
Pawòl Bondye a konpile anjeneral vle di pote li nan men yon pi wo nivo
nan yon lang programmation pi ba nivo.
Se konsa, sa a se etap la sèlman nan konpilasyon ki kote ou kòmanse avèk yon lang wo nivo
ak fini nan yon lang ki ba-nivo, ak Se poutèt sa etap la rele konpile.
[Elèv] Pandan konpile, kite la di ke ou te fè # enkli cs50.h.
Will du compile cs50.h la a, tankou fonksyon yo ki nan la,
ak tradui ki nan kòd Asanble kòm byen,
oswa ou pral li yon kopi ak keratin yon bagay ki te gen pre-Asanble?
cs50.h pral bèl anpil pa janm fini nan Asanble.
Stuff tankou prototip fonksyon ak bagay sa yo yo se jis pou ou pou w dwe fè atansyon.
Li garanti ke du a ka tcheke bagay sa yo tankou w ap rele fonksyon
ak ki kalite retounen dwa ak agiman yo dwa ak lòt bagay.
>> Se konsa, cs50.h yo pral preprocessed nan dosye a, ak Lè sa a, lè li la konpile
li nan fondamantalman jete apre li fè asire w ke tout bagay se ke yo te rele kòrèkteman.
Men, fonksyon yo defini nan bibliyotèk la CS50 yo, ki se separe de cs50.h,
sa yo pa pral separeman konpile.
Ki aktyèlman ap desann nan etap la ki lye ak, se konsa nou pral jwenn yo ke nan yon dezyèm fwa.
Men, an premye, ki sa ki rasanble?
[Elèv] Asanble binè? >> Yeah.
Rasanble.
Nou pa rele li konpile paske Asanble se bèl anpil yon tradiksyon pi bon kalite nan binè.
Gen anpil ti lojik an pral soti nan Asanble binè.
Li nan jis tankou leve je l 'nan yon tablo, o, nou gen sa a enstriksyon;
ki koresponn ak binè 01110.
Se konsa, dosye yo ki rasanble jeneralman rezilta yo. O dosye.
Ak. Dosye o yo se sa ki nou te di anvan,
ki jan yon dosye pa bezwen gen yon fonksyon prensipal.
Nenpòt ki dosye yo konpile desann nan yon. Dosye o osi lontan ke li nan yon valid C dosye-a.
Li kapab konpile desann nan. O.
Koulye a, ki lye ak se sa ki aktyèlman pote yon pakèt moun sou. Dosye o ak pote yo nan yon ègzèkutabl.
Se konsa, sa ki fè, se Anchènman ou ka panse a bibliyotèk la CS50 kòm yon. Dosye o.
Li se yon dosye binè deja konpile.
Se konsa, lè ou konpile dosye ou a, hello.c ou, ki fè apèl GetString,
hello.c vin konpile desann nan hello.o,
hello.o se kounye a nan binè.
Li itilize GetString, se konsa li bezwen yo janbe lòt bò nan cs50.o,
ak Linkshere a smooshes yo ansanm ak kopi GetString nan sa a ranpli
epi li vini soti ak yon ègzèkutabl ki gen tout fonksyon li bezwen.
Se konsa, cs50.o se pa aktyèlman yon dosye O, men li la ase pre ke pa gen okenn diferans fondamantal.
Se konsa, ki lye ak jis pote yon pakèt moun sou dosye ansanm
ki separeman gen ladan tout nan fonksyon yo, mwen bezwen sèvi ak
epi kreye ègzèkutabl la ki pral aktyèlman kouri.
>> Se konsa, ki la tou sa nou te di anvan
kote ou ka gen 1000. c dosye, ou konpile yo tout moun. dosye o,
ki pral pwobableman pran yon ti tan, Lè sa a, ou chanje 1. c dosye-a.
Ou sèlman bezwen compile ki 1. C dosye ak Lè sa a, relink tout lòt bagay,
konekte tout bagay tounen ansanm.
[Elèv] Lè nou ap ekri ki lye ak nou lcs50?
Yeah, se konsa-lcs50. Sa drapo siyal nan Linkshere la ke ou ta dwe konekte nan ki nan bibliyotèk.
Kesyon?
Èske nou fin janbe binè lòt pase 5 ki segonn nan konferans lan an premye?
Mwen pa panse sa.
Ou ta dwe konnen tout gwo eksplwatasyon an ke nou te ale sou,
epi ou ta dwe kapab, si nou te ba ou yon fonksyon,
ou ta dwe kapab di li nan gwo O, apeprè. Oswa byen, gwo O se ki graj.
Se konsa, si ou wè pare solèy pou pasan loupin sou menm kantite bagay sa yo,
tankou int mwen, mwen <n; int j, j > [elèv] n okib. >> Li gen tandans ka n okib.
Si ou te trip pare solèy, li gen tandans ka n Gleason.
Se konsa, ki sòt de bagay sa ou ta dwe kapab nan pwen soti imedyatman.
Ou bezwen konnen sòt ensèsyon ak sòt bil ak rantre sòt ansanm ak tout moun sa yo.
Li pi fasil yo konprann poukisa yo moun sa yo ki n okib ak n boutèy demi lit n ak nan tout sa
paske mwen panse ke te gen sou yon egzamen yon ane kote nou fondamantalman te ban nou
yon aplikasyon de sòt jarèt, li di: "Ki sa se tan an kouri nan sa a fonksyon?"
Se konsa, si ou rekonèt li kòm sòt bil, Lè sa a, ou ka imedyatman di n okib.
Men, si ou jis gade nan li, ou pa menm bezwen reyalize sòt jarèt li a;
ou ka jis di sa a ap fè sa a ak sa a. Sa a se n okib.
[Elèv] Èske gen nenpòt egzanp difisil ou ka vini ak,
tankou yon lide ki sanble n ap kalkile konnen?
>> Mwen pa panse nou ta ba ou nenpòt ki egzanp difisil.
Bagay la sòt jarèt se sou kòm difisil jan nou ta ale,
e menm sa, osi lontan ke ou konprann ke w ap iteration sou etalaj la
pou chak eleman nan etalaj la, ki a pwal yon bagay ki nan n okib.
Gen kesyon jeneral, tankou dwa isit la nou genyen - Oh.
Jis lòt jou a, Doug reklame, "mwen te envante yon algorithm ki ka sòt yon etalaj
"Nan nimewo n nan O (boutèy demi lit n) tan!"
Se konsa, kouman nou konnen sa a, se enposib?
[Fèbl repons elèv] >> Yeah.
Omwen a anpil, ou gen lè ou manyen chak eleman nan etalaj la,
Se konsa li enposib sòt yon etalaj la -
Si tout bagay ki nan lòd klase, lè sa a ou ap pral manyen tout bagay nan etalaj la,
Se konsa li enposib fè l 'nan mwens pase O n.
[Elèv] Ou montre nou ke egzanp pou moun ki ke yo te kapab fè l 'nan O nan n
si ou itilize yon anpil nan memwa. >> Yeah.
Ak that's - Mwen bliye sa ki that's - Èske li konte sòt?
O o. Ki se yon algorithm klasman antye ki pè.
Mwen te kap chèche non an espesyal pou sa a ke mwen pa t 'kapab sonje semèn pase a.
Yeah. Sa yo se ki kalite kalite ki ka akonpli bagay sa yo nan gwo O n.
Men, gen limit, tankou ou ka sèlman itilize nonb antye relatif jiska yon nimewo a sèten.
Plus, si w ap eseye sòt that's yon bagay -
Si etalaj ou a se 012, -12, 151, 4 milyon dola,
Lè sa a, ki eleman sèl ki pral konplètman ruin klasman a tout antye.
>> Kesyon?
[Elèv] Si ou gen yon fonksyon repetitif ak li jis fè apèl yo repetitif
nan yon deklarasyon retou, sa a, se ke repetitif,
ak pou sa ki te pa itilize plis memwa pandan ègzekutabl
oswa li ta omwen itilize konparab memwa kòm yon repete solisyon?
[Bowden] Wi.
Li ta gen anpil chans pou yon ti jan pi dousman, men se pa vrèman.
Ke repetitif se trè bon.
Looking ankò nan ankadreman chemine, se pou yo di nou gen prensipal
e nou gen int bar (Int x) oswa yon bagay.
Sa a se pa yon fonksyon pafè repetitif, men ba retounen (x - 1).
Se konsa, evidamman, sa a se defekte. Ou bezwen ka baz ak lòt bagay.
Men, lide a isit la se ke sa a se ke repetitif,
ki vle di lè prensipal apèl ba li a pral jwenn ankadreman chemine li yo.
Nan sa a ankadreman chemine gen nan ale nan yon blòk ti kras nan memwa
ki koresponn ak x agiman li yo.
Se konsa, kite a di prensipal k ap pase nan rele bar (100);
Se konsa, x ki pral kòmanse soti kòm 100.
Si du an rekonèt ke sa a se yon fonksyon ke repetitif,
Lè sa a, lè bar fè rele repetitif li nan ba,
olye pou yo fè yon ankadreman chemine nouvo, ki se kote chemine a kòmanse ap grandi lajman,
evantyèlman li pral kouri antre nan pil wòch la ak Lè sa a, ou jwenn segfaults
paske memwa kòmanse fè kolizyon.
>> Se konsa, olye pou yo fè ankadreman pwòp chemine li yo, li ka reyalize,
hey, mwen pa janm vrèman bezwen tounen vin jwenn sa a ankadreman chemine,
Se konsa, olye mwen pral jis ranplase sa a agiman ak 99 ak Lè sa a, kòmanse ba tout lòt peyi sou.
Lè sa a, li pral fè l 'ankò epi li pral rive nan bar retou (x - 1),
ak olye pou yo fè yon ankadreman chemine nouvo, li pral jis ranplase agiman li ye kounye a ak 98
ak Lè sa a, so tounen nan kòmansman la anpil nan ba.
Moun sa yo ki operasyon, ranplase ki valè 1 nan chemine a ak sote tounen nan kòmansman an,
yo trè efikas.
Se konsa, pa sèlman sa a l 'a memwa menm jan yon fonksyon apa ki se repete
paske w ap sèlman lè l sèvi avèk 1 ankadreman chemine, men ou pa ap soufwi enkonvenyans yo
ki gen yo rele fonksyon.
Rele fonksyon ka yon ti jan chè paske li te fè tout bagay sa a konfigirasyon
ak demontaj ak tout bagay sa a.
Se konsa, sa a rkursyon ke se yon bon bagay.
[Elèv] Poukisa pou l 'pa kreye etap nouvo?
Paske li reyalize li pa bezwen.
Rele nan bar se jis retounen apèl la repetitif.
Se konsa, li pa bezwen fè anyen ak valè lè li retounen.
Li nan jis pral imedyatman retounen li.
Se konsa, li jis ale nan ranplase agiman pwòp li yo ak kòmanse sou.
Epi tou, si ou pa gen ke vèsyon an repetitif,
Lè sa a, ou jwenn tout sa yo ba kote lè sa a ba retounen
li gen retounen valè li nan yon sèl sa a, lè sa a ki ba imedyatman retounen
ak li retounen valè li nan yon sèl sa a, lè sa a li nan jis pral imedyatman retounen
epi retounen valè li nan yon sèl sa a.
Se konsa, w ap ekonomize sa a eklate tout bagay sa yo koupe nan chemine a
depi valè a retounen se jis yo pral pase tout wout la tounen moute de tout fason.
Se konsa, poukisa pa jis ranplase agiman nou an ak agiman sa mete ajou epi yo kòmanse plis pase?
Si fonksyon an se pa ke repetitif, si ou fè yon bagay tankou -
[Elèv] si bar (x + 1). >> Yeah.
>> Se konsa, si ou mete l 'nan kondisyon, lè sa a ou ap fè yon bagay ki gen valè lè li retounen.
Oswa menm si ou jis fè retou 2 * bar (x - 1).
Se konsa, kounye a bar (x - 1) bezwen retounen nan lòd pou l 'bay kalkile 2 fwa ke valè,
Se konsa kounye a li bezwen pwòp li yo apa ankadreman chemine,
e kounye a,, pa gen pwoblèm kòman li di pou ou eseye, w ap ale nan bezwen -
Sa a se pa ke repetitif.
[Elèv] ta mwen eseye pote yon rkursyon vize pou yon rkursyon ke -
[Bowden] Nan yon mond ideyal, men nan CS50 ou pa bezwen.
Yo nan lòd jwenn rkursyon ke, anjeneral, ou mete kanpe yon agiman adisyonèl
kote bar pral pran x int nan y
ak y koresponn ak bagay nan ultim ou vle retounen.
Se konsa, Lè sa a, sa a ou ap pral retounen ba (x - 1), 2 * y.
Se konsa, sa se sèlman yon wo nivo ki jan ou transfòme bagay sa yo nan pral dèyè repetitif.
Men, agiman siplemantè a -
Lè sa a, nan fen a lè ou rive nan ka baz ou a, ou jis retounen y
paske ou ve yo te akimile tan nan tout valè a retounen ke ou vle.
Ou kalite te fè li iterativman men lè l sèvi avèk apèl repetitif.
Kesyon?
[Elèv] Petèt sou aritmetik konsèy, tankou lè w ap itilize strings. >> Sure.
Aritmetik pwente.
Lè lè l sèvi avèk strings li fasil paske strings yo se zetwal Char,
charaktèr yo pou tout tan ak toujou yon multiple sèl,
ak sa aritmetik konsèy ki ekivalan a aritmetik regilye lè ou ap fè fas ak strings.
Kite yo jis di Char * s = "alo".
Se konsa, nou gen yon blòk nan memwa.
Li bezwen 6 bytes paske ou toujou bezwen Terminator a nil.
Ak Char * s ki pral nan pwen nan konmansman an nan sa a etalaj.
Se konsa, nan pwen la.
Koulye a, sa a se fondamantalman ki jan nenpòt etalaj travay,
kèlkeswa si li te yon retou nan malok oswa si li nan sou pil la.
Nenpòt etalaj se fondamantalman yon konsèy nan kòmansman etalaj la,
ak Lè sa a, nenpòt operasyon etalaj, nenpòt Indexing, se jis ale nan ki etalaj yon sèten konpanse.
>> Se konsa, lè m 'di yon bagay tankou s [3]; sa a ki pral nan yo epi konte 3 charaktèr pous
Se konsa, nan [3], nou gen 0, 1, 2, 3, se konsa yo [3] ki pral gade nan sa a l.
[Elèv] Lè nou te ka rive nan menm valè a nan fè s + 3 ak Lè sa a, zetwal parantèz?
Wi.
Sa a se ekivalan a * (yo 3 +);
e ke se pou tout tan ak toujou ekivalan pa gen pwoblèm sa ou fè.
Ou pa janm bezwen sèvi ak sentaks la bracket.
Ou ka toujou sèvi ak * an (yo + 3) sentaks.
Moun yo gen tandans renmen sentaks la bracket, menm si.
[Elèv] Se konsa, tout ranje yo se aktyèlman jis pwent.
Gen yon diferans ti tay lè m 'di Int x [4]; >> [elèv] ki kreye memwa a?
[Bowden] Sa ki pral kreye 4 antye sou chemine a, se konsa 16 bytes an jeneral.
Li nan pral kreye 16 bytes sou pil la.
x se pa sa ki estoke nenpòt kote.
Li se jis yon senbòl refere li a nan kòmansman an de bagay sa a.
Paske ou te deklare etalaj la andedan sa a fonksyon,
sa ki du a pral fè se jis ranplase tout tan pou x nan varyab
ak kote li te rive chwazi pou mete sa yo bytes 16.
Li pa ka fè sa ak Char nan * paske yo se yon konsèy vrè.
Li se gratis Lè sa a, lonje dwèt sou lòt bagay.
x ki se yon konstan. Ou pa ka genyen li pwen nan yon etalaj diferan. >> [Elèv] Okay.
Men, ide sa a, sa a Indexing, se menm bagay la kèlkeswa si li nan yon etalaj tradisyonèl
oswa si li nan yon konsèy ak yon bagay oswa si li nan yon konsèy nan yon etalaj malloced.
Ak nan reyalite, li se konsa ekivalan ki ki se tou menm bagay la.
Li aktyèlman jis tradui Ki sa ki andedan nan parantèz yo, epi sa ki rete a nan parantèz yo,
ajoute yo ansanm, epi dereferences.
Se konsa, sa a se jis kòm valab menm jan * (yo + 3) oswa s [3].
[Elèv] Èske ou ka gen endikasyon pwente nan 2 dimansyon ranje?
>> Li nan pi rèd. Tradisyonèlman, pa gen okenn.
Yon etalaj 2 dimansyon se jis yon etalaj 1-dimansyon ak kèk sentaks pratik
paske lè m 'di Int x [3] [3], sa a se vrèman jis 1 etalaj ak 9 valè.
Se konsa, lè m 'endèks, du a konnen sa m' vle di.
Si mwen di x [1] [2], li konnen mwen vle pou yo ale nan dezyèm ranje a, se konsa li pral sote 3 a an premye,
ak Lè sa a, li vle bagay la dezyèm nan ki, se konsa li pral jwenn sa a youn.
Men, li se toujou jis yon etalaj yon sèl dimansyon.
Se konsa, si mwen te vle bay yon konsèy ak sa yo ki etalaj,
Mwen ta ka di Int * p = x;
Ki kalite x se jis -
Li nan kalite ki graj li di nan x depi li se jis yon senbòl ak li a pa yon varyab reyèl,
men li se jis yon * int.
x se jis yon konsèy nan kòmansman sa a. >> [Elèv] Okay.
Se poutèt sa mwen pa yo pral kapab jwenn aksè nan [1] [2].
Mwen panse ke gen sentaks espesyal pou deklare yon konsèy,
yon bagay ridikil tankou int (* p [-. yon bagay absoliman ridikil m pa menm konnen.
Men, gen yon sentaks pou deklare endikasyon tankou ak parantèz ak bagay sa yo.
Li pa ka menm kite ou fè sa.
Mwen te kapab tounen gade dèyè nan yon bagay ki ta fè m 'konnen verite a.
Mwen pral gade pou li pita, si gen yon sentaks pou pwen. Men, ou pa janm ap wè li.
E menm sentaks la se konsa reyaksyonè ke si ou sèvi ak li, moun ap dekonsèrte.
Ranje pluridimansyonèl yo trè ra kòm li se.
Ou bèl anpil -
Byen, si w ap fè bagay sa yo matris li pa pral fè ki ra,
men nan C w ap raman yo pral lè l sèvi avèk ranje pluridimansyonèl.
Yeah. >> [Elèv] Se pou nou di ou gen yon etalaj vrèman long.
>> Se konsa, nan memwa vityèl li ta parèt yo dwe tout youn apre lòt,
tankou eleman yo dwa pwochen nan chak lòt,
men nan memwa a fizik, li ta dwe posib pou ki yo dwe fann moute? >> Wi.
Ki jan vityèl travay memwa se li jis separe -
Inite a nan alokasyon se yon paj, ki gen tandans fè gen 4 kilookte,
ak Se konsa, lè yon pwosesis di, hey, mwen ta vle itilize sa memwa,
sistèm nan fonksyone ki pral asiyen li 4 kilookte pou sa blòk ti kras nan memwa.
Menm si ou sèlman itilize yon sèl multiple ti kras nan blòk la tout antye de memwa,
sistèm nan fonksyone ki pral ba ou li plen 4 kilookte yo.
Se konsa, sa sa vle di se mwen te kapab genyen - Se pou nou di sa a se pil m 'yo.
Te kapab sa a chemine dwe separe. Chemine mwen ta ka megabit ak megabit.
Chemine mwen ta ka gwo.
Men, chemine a li menm te dwe divize an paj endividyèl,
ki si nou gade sou isit la kite a di sa a se RAM nou an,
si mwen gen 2 jigokte nan RAM, sa a se 0 aktyèl adrès tankou multiple nan zeroth nan RAM m 'yo,
ak sa a se 2 jigokte tout wout la desann isit la.
Se konsa, paj sa a ta ka koresponn ak sa a blòk sou isit la.
Paj sa a ta ka koresponn ak sa a blòk sou isit la.
Sa a ki ta ka yon koresponn ak yon sèl sa a sou isit la.
Se konsa, sistèm nan fonksyone se gratis yo asiyen fizik memwa
nan nenpòt ki paj endividyèl abitrèman.
Ak sa vle di ke si sa a fwontyè k ap pase nan ankadre yon etalaj,
yon etalaj k ap pase yo dwe kite nan sa a ak dwa nan lòd sa a nan yon paj,
Lè sa a, ki etalaj yo pral fann nan memwa fizik.
Lè sa a, lè ou kite pwogram nan, lè pwosesis la fini,
sa yo mapin jwenn efase ak Lè sa a, li nan lib yo itilize sa yo blòk ti kras pou lòt bagay.
Plis kesyon?
[Elèv] konsèy aritmetik a. >> Oh yeah.
Kòd te vin pi fasil, men gade nan yon bagay tankou antye,
Se konsa tounen nan int x [4];
Kit sa a se yon etalaj oswa si li nan yon konsèy nan yon etalaj malloced nan 4 nonm antye yo,
li a pral pou yo trete menm jan an.
[Elèv] Se konsa, ranje yo sou pil wòch la?
[Bowden] matris yo pa sou pil la. >> [Elèv] Oh.
>> [Bowden] Sa a ki kalite etalaj gen tandans yo dwe sou chemine a
sof si ou te deklare li nan - inyore varyab mondyal. Pa sèvi ak varyab mondyal.
Anndan yon fonksyon m 'di Int x [4];
Li nan pral kreye yon blòk 4-nonb antye relatif sou pil la pou sa a etalaj.
Men, sa a malok (4 * sizof (Int)); ki pral ale nan pil wòch la.
Men, apre sa pwen sa a mwen ka itilize x ak p nan bèl anpil fason yo menm,
lòt pase eksepsyon yo, mwen te di anvan sou ou kapab mute p.
Teknikman, gwosè yo se moun ki yon ti jan diferan, men sa a konplètman petinan.
Ou pa janm sèvi ak aktyèlman gwosè yo.
P la mwen te kapab di p [3] = 2; oswa x [3] = 2;
Ou ka itilize yo nan egzakteman fason yo menm.
Se konsa, konsèy aritmetik kounye a - Wi.
[Elèv] ou pa bezwen fè p * si ou gen parantèz yo?
Parantèz yo se yon dèreferans enplisit. >> Okay.
Aktyèlman, tou sa w di a ak nan ou ka jwenn ranje pluridimansyonèl
ak endikasyon, ki sa ou ka fè se yon bagay tankou, kite la di, int ** Pp = malok (sizof (Int *) * 5);
Mwen pral jis ekri li tout soti an premye.
Mwen pa t 'vle wè yon sèl.
Oke.
Ki sa mwen te fè isit la se - Ki ta dwe Pp [mwen].
Se konsa, Pp se yon konsèy nan yon konsèy.
W ap mallocing Pp nan pwen nan yon etalaj de 5 zetwal int.
Se konsa, nan memwa ou genyen nan pp la chemine
Li k ap pase nan pwen nan yon etalaj de 5 blòk ki tout tèt yo endikasyon.
Lè sa a, lè m 'desann isit la malok, mwen malok ke chak nan sa yo endikasyon endividyèl
yo ta dwe lonje dwèt sou yon blòk separe nan 4 bytes sou pil la.
Se konsa, sa a pwen nan 4 bytes.
Lè sa a pwen youn nan yon bytes diferan 4.
>> Ak tout nan yo lonje dwèt sou bytes pwòp yo 4.
Sa a ba m 'yon fason pou fè bagay sa yo pluridimansyonèl.
Mwen te kapab di Pp [3] [4], men kounye a sa a se pa menm bagay la kòm ranje pluridimansyonèl
paske ranje pluridimansyonèl yo tradui li pou [3] [4] nan yon sèl konpanse nan etalaj la x.
Sa a p dereferences, jwenn aksè endèks la twazyèm, Lè sa a, dereferences ki
ak aksèd - 4 ta dwe valab - endèks la dezyèm fwa.
Lè nou konsidere ke lè nou te gen int x [3] [4] anvan an kòm yon etalaj pluridimansyonèl
ak ki lè ou double bracket li vrèman se sèlman yon dèreferans sèl,
w ap swiv yon konsèy sèl ak Lè sa a, yon konpanse,
sa a se reyèlman referans 2D.
Ou menm, swiv 2 endikasyon ki apa a.
Se konsa, sa a tou teknikman pèmèt ou gen ranje pluridimansyonèl
kote chak etalaj endividyèl se gwosè diferan.
Se konsa, mwen panse ak dan ranje pluridimansyonèl se sa ki sa yo rele
depi reyèlman premye bagay la te ka lonje dwèt sou yon bagay ki gen 10 eleman,
bagay la dezyèm ta ka lonje dwèt sou yon bagay ki gen 100 eleman.
[Elèv] Èske gen okenn limit nan kantite endikasyon ou ka gen
lonje dwèt pwent lòt? >> No
Ou ka gen int ***** p.
Retounen nan aritmetik konsèy - >> [elèv] Oh. >> Yeah.
[Elèv] Si mwen gen int *** p ak Lè sa a, mwen fè yon dereferencing epi mwen di p * ki egal a sa a valè,
se li sèlman pral fè 1 nivo nan dereferencing? >> Wi.
Se konsa, si mwen vle gen aksè a bagay la ki konsèy an dènye a lonje dwèt nan -
Lè sa a, ou fè p ***. >> Okay.
Se konsa, sa a se pwen p nan 1 blòk, pwen a yon lòt blòk, pwen a yon lòt blòk.
Lè sa a, si ou fè * p = yon lòt bagay, Lè sa a, ou yo ap chanje sa a
kounye a lonje dwèt sou yon blòk diferan. >> Okay.
>> [Bowden] Men, si sa yo yo te malloced, lè sa a ou te kounye a fwit memwa
sof si ou rive gen referans diferan nan sa yo
depi ou pa kapab jwenn tounen nan sa yo moun ke ou jis jete lwen.
Aritmetik pwente.
int x [4]; ki pral asiyen yon etalaj de 4 nonm antye relatif
kote x ki pral nan pwen nan konmansman an nan etalaj la.
Se konsa, lè m 'di yon bagay tankou x [1], mwen vle li nan vle di ale nan nonb antye relatif an dezyèm nan etalaj la,
ki ta dwe yon sèl sa a.
Men, reyèlman, ki nan 4 bytes nan etalaj la depi sa a nonm antye pran moute 4 bytes.
Se konsa, yon konpanse nan 1 vrèman vle di yon konpanse nan 1
fwa gwosè a nan tou sa ki kalite etalaj la se.
Sa a se yon etalaj de nonm antye relatif, se konsa li konnen fè 1 fwa gwosè nan int lè li vle konpanse.
Sentaks la ak lòt. Sonje ke sa a se ekivalan a * (x 1 +);
Lè m 'di nou konsèy + 1, ki sa sa retounen se adrès la ki konsèy la ap estoke
plis 1 fwa gwosè a nan ki kalite konsèy la.
Se konsa, si x = ox100, lè sa a x + 1 = ox104.
Epi ou ka abize sa a ak di yon bagay tankou Char * c = (Char *) x;
e kounye a, c a pwal menm adrès ak x.
c a pwal egal a ox100,
men c + 1 a pwal egal a ox101
depi aritmetik konsèy depann sou ki kalite konsèy la ke ou ap ajoute sou.
Se konsa, c + 1, li sanble nan c, li nan yon konsèy Char, se konsa li pral ajoute 1 fwa gwosè nan Char,
ki se toujou pral fè 1, konsa ou jwenn 101,
Lè nou konsidere ke, si mwen fè x, ki se tou toujou 100, x + 1 a pwal 104.
[Elèv] Èske ou ka sèvi ak c + + yo nan lòd yo avanse konsèy ou pa 1 an?
Wi, ou kapab.
Ou pa ka fè sa ak x paske x se jis yon senbòl, li se yon konstan; ou pa kapab chanje x.
>> Men, c k ap pase nan jis pou yon konsèy, se konsa c + + se yon bagay ki valab epi li pral kantite a 1.
Si c yo te jis yon * Int, lè sa a c + + ta dwe 104.
+ + Fè sa ki aritmetik konsèy menm jan c + 1 ta gen fè aritmetik konsèy.
Sa a se aktyèlman ki jan yon anpil nan bagay sa yo tankou sòt unifye -
Olye pou yo kreye kopi de bagay sa yo, ou ka olye pase -
Renmen si mwen te vle pase sa a mwatye nan etalaj la - kite a efase kèk nan sa a.
Se pou nou di mwen te vle pase bò sa a nan etalaj la nan yon fonksyon.
Ki sa ki ta mwen pase ak sa yo ki fonksyon?
Si m 'pase x, mwen pase nan adrès sa a.
Men, mwen vle yo pase adrès sa a an patikilye. Se konsa, sa mwen ta dwe pase?
[Elèv] pwente + 2?
[Bowden] Se konsa, x + 2. Wi.
Sa k ap pase yo dwe adrès sa a.
Ou ap tou trè souvan wè li kòm x [2] ak Lè sa a, adrès la nan sa.
Se konsa, ou bezwen pran adrès la nan li paske bracket la se yon dèreferans enplisit.
x [2] refere a valè a se sa ki nan bwat sa a, ak Lè sa a, ou vle adrès sa a nan bwat postal,
Se ou ki di & x [2].
Se konsa, lè sa a jan yon bagay an sòt unifye kote ou vle pase mwatye lis la a yon bagay
ou reyèlman jis pase & x [2], epi kounye a osi lwen ke se apèl la repetitif konsène,
etalaj nouvo mwen an kòmanse a.
Kesyon minit dènye.
[Elèv] Si nou pa mete yon comercial oswa yon - sa ki nan ke yo rele? >> Star?
[Elèv] Star. >> Teknikman, operatè dèreferans, men - >> [elèv] dèreferans.
>> Si nou pa mete yon etwal oswa comercial yon, kisa k ap rive si mwen jis di y = x ak x ki se yon konsèy?
Ki sa ki se ki kalite y? >> [Elèv] mwen pral jis di konsèy li a 2.
Se konsa, si ou jis di y = x, kounye a x ak pwen y menm bagay la. >> [Elèv] Montre menm bagay la.
Men, si x se yon konsèy int? >> Li ta plenyen paske ou pa ka bay endikasyon.
[Elèv] Okay.
Sonje ke endikasyon, menm si nou trase yo kòm flèch,
vrèman tout magazen yo - int * x - reyèlman tout x se estoke se yon bagay tankou ox100,
ki nou rive reprezante kòm lonje dwèt blòk la ki estoke nan 100.
Se konsa, lè m 'di Int * y = x; mwen jis kopye ox100 nan y,
ki n ap jis pral reprezante kòm y, tou lonje dwèt ox100.
Men, si m 'di Int mwen = (Int) x; Lè sa a, mwen ki pral nan magazen tou sa valè a ox100 se
andedan nan li, men kounye a li a pral kapab entèprete kòm yon nonb antye relatif olye de yon konsèy.
Men, ou bezwen jete nan oswa lòt moun li pral pote plent.
[Elèv] Se konsa, ou vle di jete -
Èske li yo pral depoze int nan int x oswa Distribisyon nan y?
[Bowden] Ki sa?
[Elèv] Okay. Apre sa parantèz Èske gen pwal yon x oswa ay la?
>> [Bowden] Swa. x ak y yo se ekivalan. >> [Elèv] Okay.
Paske yo ap tou de pwent. >> Yeah.
[Elèv] Se konsa, li ta store 100 an ekzadesimal nan fòm nonb antye relatif? >> [Bowden] Yeah.
Men, pa valè a nan tou sa li lonje dwèt yo.
[Bowden] Yeah. >> [Elèv] Se konsa, jis adrès la nan fòm antye ki pè. Oke.
[Bowden] Si ou te vle pou kèk rezon ki ra,
ou ta ka sèlman fè fas ak endikasyon epi pa janm fè fas ak nonm antye relatif
ak jis ap tankou int * x 0 =.
Lè sa a, w ap ale nan jwenn vrèman konfonn yon fwa aritmetik konsèy kòmanse pase.
Se konsa, nimewo yo ke yo store yo se san sans.
Li nan jis ki jan ou fini interpreting yo.
Se konsa, mwen gratis a kapab bay kopi ox100 soti nan yon * int nan yon int,
epi mwen gratis bay elèv yo - you're pwobableman pwal jwenn rele nan pou pa Distribisyon -
Mwen gratis bay elèv yo yon bagay tankou (Int *) ox1234 nan sa a * int abitrè.
Se konsa, ox123 se jis kòm valid yon memwa adrès kòm se & y.
& Y k ap pase nan retounen yon bagay ki se bèl anpil ox123.
[Elèv] ta dwe yon fason ki vrèman fre yo ale soti nan ekzadesimal fòm desimal,
renmen si w gen yon konsèy, epi ou voye l 'jete kòm yon int?
[Bowden] Ou ka vrèman jis enprime lè l sèvi avèk tankou printf.
Se pou nou di mwen gen int y = 100.
Se konsa, printf (% d \ n - kòm ou ta dwe deja konnen - enprime ke kòm yon nonb antye relatif, x%.
Nou pral jis enprime li kòm ekzadesimal.
Se konsa, yon konsèy se pa sa ki estoke kòm ekzadesimal,
ak yon nonb antye relatif se pa sa ki estoke kòm desimal.
Tout bagay se ki estoke kòm binè.
Se jis ke nou yo gen tandans montre endikasyon kòm ekzadesimal
paske nou panse de bagay sa yo nan sa yo blòk 4-multiple,
ak adrès memwa gen tandans yo dwe familye ak yo.
Nou se tankou, si li kòmanse ak bf, lè sa a bagay sa yo rive yo dwe sou pil la.
Se konsa, li jis entèpretasyon nou an endikasyon kòm ekzadesimal.
Oke. Nenpòt kesyon sot pase a?
>> Mwen ap isit la pou yon ti jan apre si ou gen nenpòt lòt bagay.
Epi sa a, nan fen sa.
>> [Elèv] ye! [Aplodisman]
>> [CS50.TV]