[Powered by Google Translate] [Semèn 4, Kontinye] [David J. Malan - Inivèsite Harvard] [Sa a se CS50. - CS50.TV] Sa a se CS50, e sa se nan fen semèn 4. Se konsa, kèk bon nouvèl ak kèk move nouvèl. Pa gen konferans nan Lendi, pa gen pwoblèm mete an semèn pwochèn. [Elèv yo bat bwavo] Ou pa ap ale nan renmen kote sa a se prale. Men, nou gen sa a olye Mèkredi pwochen, epi gen tou pou chak kursus 1 konferans lan Vandredi pwochen Vandredi pou nou ka rete sou tras. Men, tout bagay yo pral filme-li kòm dabitid, Se konsa, pa bezwen enkyete. Ak ki gen rapò ak egzamen 0 ki sa nou pral fè nan direksyon fen semèn nan se afiche sou cs50.net paj dakèy kou a nan yon eksplikasyon nan sa ki sòt de atant ou ta dwe gen lè li rive egzamen an premye. An jeneral, li pral chwa miltip, vrè ou fo, repons kout, kout pwoblèm coding. Ou pa ap ale nan dwe espere aplike ekivalan a nan yon pwoblèm ki ou ta wè sou yon pset, pou ki ou gen yon òdinatè ak yon debugjeur ak renmen an, men pral gen ti kodaj pwoblèm. Ak tout bon, gid sa a pi bon yo ka resevwa yon sans de sa ki CS50 ti tès yo tankou se ale nan cs50.net, ale nan lyen ki ti tès, epi ou ka wè dènye ane yo plizyè yon valè de ti tès. Jis reyalize ke kourikoulòm nan pa te toujou menm bagay la tou sou ane yo. Pafwa nou ajoute, pafwa soustraksyon, Se konsa, si ou wè kèk sijè sou youn nan moun ki fin vye granmoun ti tès ke ou pa gen okenn lide ki sa li la pale de, li la swa ke nou t 'kouvri l' oswa ke nou pa t 'kouvri l'. Men, nan fòm lan nan revizyon, sa a Dimanch, Lendi, Madi ak kòm byen ke yon kou-lajè sesyon revizyon sou lannwit dimanch - lè ak kote yo dwe te anonse sou paj dakèy kou a - nou tout nou gen yon opòtinite yo revize ak zanmi ansèyman kou a nan materyèl la pou ane sa a, tou de nan seksyon epi kòm yon klas plen, ak moun ki pral filme-li kòm dabitid kòm byen. Tout dwa. Se konsa, san brwi pi lwen, youn kòmantè sou pase / fail epi ajoute / lage. Ou kapab gen pou wè nòt mwen yè swa, e sa se vrèman jis kèk rasirans adisyonèl ke si ou se nan mitan moun patikilyèman mwens konfòtab oubyen yon kote nan ant epi ou santi jis yon ti jan nan plis pase tèt ou, reyalize ke se vre byen nòmal, epi gen nan yon estrikti ki sipò ase nan plas, youn nan ki lè biwo yo te entansyon sou amelyorasyon 'pi plis toujou pou chak lannwit imel mwen sot pase yo, ak reyalize tou ki yon opsyon tankou pase / fail pou yon klas tankou sa a vrèman ki te vle di kòm yon mekanis yo pran kwen nan koupe nan yon kou tankou sa a, pou ke ankò, si w ap depanse sa yo 10, 15, 20 èdtan jis ap eseye jwenn kèk pset travay epi ou konnen ou 90-95% nan wout la gen men ou pa ka jwenn kèk ensèk modi, nan yon pase / fail modèl sa a, se sòt de oke. Lide a se ke ak ki mekanis ou ka Lè sa a, ale konsantre sou psets lòt ou oswa dòmi oswa tou sa li se ke ou vle konsantre sou. Se konsa, reyalize ke ou gen jouk sa a ap vini Madi - teknikman 5yèm Lendi a, men li la yon jou fèt, kidonk sa a Madi ap vini - a chanje soti nan pase / fail vèrsa korije oswa vis. Epi si w ap reyèlman sou goufr a, epi yo panse a jete nèt, tanpri trape m 'apre konferans oswa pase nenpòt kilè m' yon nòt. Nou ta renmen omwen chat ou anvan ou òf adyeu. Tout dwa. Se konsa, nou te kòmanse pran wou yo fòmasyon nan tan pase a. An patikilye, nou konsantre sou fisèl. Fisèl se yon bagay ki te deklare nan bibliyotèk la CS50, espesyalman nan ki dosye yo rele cs50.h ki nou pral kòmanse fè yon gade nan semèn sa a ak pwochen. Men, fisèl se reyèlman jis yon senplifikasyon nan yon bagay sa a, se yon ti kras plis arcanely dekri kòm * Char. Char nou ap abitye avèk yo. Se jis nan yon karaktè sèl. Men, * kòm nan Lendi deziye ki sa? >> [Elèv] Yon konsèy. Yon konsèy. Ak sa ki nan yon konsèy? >> [Elèv] Yon adrès. Se tankou yon adrès, yon kote nan memwa. Ki sa ki nan yon adrès oswa kote oswa memwa? Yon fwa ankò, tout moun nan nou gen laptops ak yon Gig oswa 2 jigokte nan RAM gen plis chans jou sa yo, ak sa vle di ou gen yon milya dola oswa 2 milya dola bytes yon valè de memwa. E li pa vrèman gen pwoblèm ki sa li fizikman sanble, , men pran sou lafwa ke ou ka Nimewo tout bytes endividyèl yo ki laptop pwòp ou a gen - sa a se multiple 0, sa a se multiple 1, sa a se multiple 2 milya dola - ak sa a, se ekzakteman ki sa yon òdinatè fè. Lè ou asiyen espas pou yon karaktè sèl, pou egzanp, li evidamman gen yo viv yon kote nan memwa òdinatè ou a, e petèt li nan nan nimewo multiple 12345, ak sa a, se yon kote moute isit la nan memwa òdinatè ou a. Ak adrès la Lè sa a, nan ki karaktè se 12345. Koulye a, nan semèn 0 la a kounye a konsa byen lwen, nou pa te vrèman pran swen kote nan bagay sa yo memwa yo estoke paske anjeneral nou sèvi ak senbòl, varyab, ak ranje aktyèlman jwenn nan done nou an. Men, kòm nan Lendi ak tout plis la jodi a, w ap kounye a pral gen tout plis espresif kapasite yo ak ekri pwogram reyèlman manipile memwa yon òdinatè a sepandan ou wè anfòm, pou toude objektif bon ak move, pinèz ke yo te yon rezilta trè komen nan pwen sa a nan aprann bagay sa a. Men, sa ki li vrèman vle di yo dwe yon * Char? Ann al pi devan tounen nan - epi nou pral tounen vin jwenn Binky kòm te pwomèt jodi a. Se pou nou ale nan yon egzanp ki senp isit la. Kite m 'sove sa a ranpli kòm compare.c, ak kite m' jis jwenn kèk kòd modèl isit la konsa gen ladan stdio.h, kite m 'tou bay tèt mwen gen ladan cs50.h. Mwen pral rale nan 'kanpe. Kite m 'kòmanse ekri prensipal Int, prensipal (san valè), ak koulye a, mwen vle fè yon bagay tankou sa a: printf ("Ban m yon fisèl:") ak Lè sa a, Mwen pral sèvi ak nan fisèl vin GetString yo ka resevwa yon fisèl soti nan itilizatè a, lè sa a mwen pral mande itilizatè a pou yon lòt youn. ("Ban m 'yon lòt fisèl:") ak mwen pral mande yo via GetString jwenn sa. Mwen pral rele li t paske t vin apre a ak s se yon non bèl pou yon fisèl si li nan bèl jenerik. Se konsa, GetString, ak koulye a, mwen jis vle fè yon chèk saniti ak mwen pral di si (yo == t) Lè sa a, mwen jis pral di itilizatè a printf ("Ou tape menm bagay la \ n!"); lòt bagay mwen pral enprime soti yon bagay tankou ("Ou tape yon bagay diferan! \ n") oswa kèlkeswa sa fraz la yo pral. Se konsa, yon bagay tankou sa. Lè sa a, kòm dabitid, mwen pral tounen 0 ki jis siyifye ke pa gen anyen move ki te pase, ak mwen pral ale pi devan epi pou konpile tout epi kouri pwogram sa a. Men, nan Lendi nou kouri pwogram sa a, ak aktyèlman te di yo ke HELLO se pa HELLO ak OREVWA se pa OREVWA. Konpòtman an nou te wè se te yon ti kras pi plis tankou sa a. Kite m 'ale nan anyè sous m' yo, rale an isit la, e kite yo fè konpare. Konpile oke. Kite m 'kouri konpare. Ban m yon fisèl: Hello. Ban m 'yon lòt fisèl: Hello. Ou tape yon bagay diferan! Oke, kite m 'eseye yon bagay ki pi senp tankou 50 50,. Ou tape yon bagay diferan! hi, hi. Se konsa, byen klè, yon bagay ki ale sou isit la. Men, sa ki te eksplikasyon an pou poukisa? Aparaman, liy 12 se konplètman disfonksyonèl. Ki sa ki nan pwoblèm nan fondamantal isit la? Yeah. >> [Elèv] Li nan konpare adrès yo. Yeah, egzakteman. Li nan aktyèlman konpare adrès ki nan ki HELLO ak HELLO yo estoke. Li pa nan konpare lèt yo HELLO ankò e ankò, paske sa ki reyèlman te rive, tout tan sa a nou ve yo te lè l sèvi avèk GetString - Sa a se tablo ankò memwa òdinatè nou an, epi kite pou nou di m 'rele ou GetString apre deklare yon s varyab. Ki sa ki memwa mwen sanble? Se pou nou abitrèman di ke yo sanble tankou sa a. Li se yon kare. Ak bèl anpil nenpòt ki lè mwen te trase yon moso nan memwa sou ekran an si li nan 32 Bits mwen te fè desen kare tankou sa a paske tout bon nan aparèy la, yon konsèy, yon adrès, se 32 miyèt moso. Li nan menm bagay la tou kòm yon int. Ki ka varye ki baze sou sistèm òdinatè. Moun sa yo ki nan nou ki yo vagman ki abitye avèk lefèt ke Mac ou a oswa PC a se 64 Bits, ki aktyèlman vle di ke òdinatè w lan ap sèvi ak bagèt 64-ti jan, 64-bit adrès, ak nan mitan upsides ki te la yo se òdinatè ou ka gen pi plis pase RAM pase. Long istwa kout, li tounen nan jou a, lè òdinatè sèlman itilize 32 Bits ki reprezante adrès, nimewo nan pi gwo nan bytes ou ta ka reprezante nan ka sa a se sa ki te si ou gen 32 Bits? Se konsa, 4 milya dola, dwa, paske 2 a 32 an se 4 milya dola. Nimewo sa a ki te renouvlab nan kou an. Se konsa, si ou gen sèlman 32 Bits, nimewo ki pi wo a ou ka konte rive apeprè nan 4 milya dola. Men, sa ki te yon limitasyon fondamantal nan òdinatè jouk kèk ane de sa paske si ou ka sèlman konte kòm yon wo 4 milya dola, sa pa enpòtan si ou achte 8 jigokte nan RAM oswa menm 5 jigokte nan RAM; ou pa ka konte ki wo, konsa li te initil. Ou te kapab sèlman aksè premye 3 oswa 4 jigokte yo nan memwa òdinatè ou a. Sa a se mwens nan yon pwoblèm, koulye a, epi ou ka achte MacBook Pou ak Dells avèk 8 jigokte nan RAM oswa menm plis jou sa yo. Men, si mwen asiyen byen tou senpleman nan pwogram sa a yon konsèy, yon konsèy rele a, li ta ka gade tankou sa a sou ekran an paske tout bon nou bezwen kale tounen kouch sa a. Mwen kenbe li di fisèl, men kòm nan Lendi, fisèl se reyèlman * Char, adrès la nan kèk karaktè. Se konsa, kite a pran ki wou fòmasyon nan menm si n ap kontinye itilize GetString pou kounye a. Se konsa, mwen te deklare a, ak sa a se yon ti moso nan memwa, 32 Bits. Ki sa ki nan nan isit la nan memwa pa default? >> [Fèbl repons elèv] Ki sa ki nan sa? >> [Elèv] Fatra. Fatra >>. Egzakteman. Si ou pwogramè a pa mete yon valè nan yon varyab, ki moun ki konnen sa li ye? Pafwa ou jwenn chans ak li a 0, ki se kalite yon bèl, valè default pwòp, men kòm nou te wè Lendi, pafwa li nan istwa san sans konplè, kèk reyèlman gwo nimewo pozitif oswa negatif ki te soti nan ki kote? Yeah. >> [Elèv] fonksyon an anvan. >> Yeah. Souvan fonksyon an ke yo kouri rele anvan paske sonje, menm jan ou rele fonksyon nan memwa yo, yo pran pi plis ak plis espas anba nan fon an leve, ak le pli vit ke retounen yo fonksyon, vin ke memwa reyitilize pa nèg la pwochen ki vin rele, ki moun ki lè l sèvi avèk tranch menm ou nan memwa. Epi si ou te gòch fatra a, valè anvan, nou ta ka erè a kòm gen kèk valè lè reyèlman nou pa t 'mete anyen la. Se konsa, RAM nou an nan pwen sa a sanble tankou sa a. Koulye a, sou bò men dwat-ou nan liy 7 n ap rele GetString, ki nou te toujou ap fè kounye a pou semèn, men ki sa ki GetString vrèman ap fè? GetString ekri pa anplwaye nan CS50 se yon ti kras entelijan nan ki le pli vit ke itilizatè a kòmanse sezisman kle ak frape Antre, GetString figi soti konbyen frap te fè frape nan itilizatè, konbyen karaktè mwen bezwen asiyen RAM pou li a. Ak ki kote ki RAM soti nan, ki moun ki konnen? Li nan yon kote nan 2 jigokte òdinatè ou a oswa etajèr nan memwa. Men, kite a sipoze ke òdinatè a jwenn espas pou pawòl Bondye a HELLO dwa isit la. Pawòl Bondye a mwen tape te H-E-L-L-O. Men, si nou trase sa a kòm yon sekans nan karaktè, nou ta ka rale l 'tankou sa a. Men, mwen bezwen fè 1 anplis bagay sa yo. Ki sa ki fè pati nan fen nenpòt fisèl nan C? Pèsonaj la nil, ki nou ekri kòm \ 0. Li nan teknikman 0 a nimewo, men antislach a fè tout klè nan ke sa a se literalman nimewo a 0, 0 a nonm antye; li pa, pou egzanp, 0 quote-unquote ke ou ta ka tape nan klavye la. Se konsa, sa a se Hello. Ak nou sa nou te di nan Lendi ke yon fonksyon tankou GetString se aktyèlman retounen tout semèn sa yo? Li pa nan retounen yon fisèl se pou chak paske sa pa reyèlman gen sans paske strings pa egziste. Yo ap sòt de yon fabwikasyon nan bibliyotèk la CS50. Ki sa ki se reyèlman yon fisèl, plis teknikman? >> [Elèv] Li nan karaktè a an premye. Egzakteman. Li nan afè tou senpleman adrès la nan karaktè nan premye ki itilizatè a tape pous Se konsa, si pawòl mwen HELLO fini l 'kanpe nan 123 nimewo multiple ak Lè sa a, nan multiple nimewo 124, 125, 126, ak pou fè, si mwen jis nimewo bytes mwen ki ant 0 sou leve, sa ki vrèman GetString ki retounen se literalman 123 an kantite. Se konsa, sa vin mete li nan s se 123 nan nimewo, pa H la lèt, pa pawòl Bondye a HELLO, byen tou senpleman adrès la nan ki mwen ka jwenn lèt la nan premye Hello. Men, ki pa sanble tankou ase. Mwen te mande ou pou yon fisèl, se pa yon karaktè. Se konsa, kouman nou oswa òdinatè a konnen ke elo kalite vini ansanm ak H la? Ki sa ki nan sòt nan nan akò nou genyen? Yeah. [Elèv] Li kenbe tèt li rakonte jwenn kèk plis karaktè. >> Egzakteman. Genyen nan sa a konvansyon imen-òdinatè kote lè ou ap fè fas ak strings, otreman li te ye koulye a tankou zetwal Char, ou senpleman gen figi soti ki kote nan fen chak fisèl nan lavi se pa vrèman jis iteration sou li ak yon riban pou, yon ti tan riban, kèlkeswa sa, se konsa ke lè ou jwenn nan fen fisèl la kounye a ou ka dégager de sa, oh, mo a tout antye te Hello. Moun sa yo ki nan nou ki gen eksperyans pwogram anvan ka konnen nan Java ou ka jis rele. longè ak nan lòt lang yo ou ka rele longè oswa menm jan an. Sa a se paske nan yon anpil nan lang yo, espesyalman bagay sa yo rele objè-oryante lang, longè nan yon bagay ki kalite enklizyon andedan nan yon moso done tèt li, anpil renmen nou enklizyon idantifikasyon ak non ak kay andedan yon elèv nan Lendi. Men, C se nivo pi ba. Pa gen okenn bagay oubyen klas yo, si ou te tande sa yo tèm anvan. Tout sa ou dwe vrèman se adrès memwa. Se konsa, sa a se sòt de wout la fin vye granmoun-alamòd pou reprezante done ki enteresan estrikti. Ou gen yon valè kòmansman tankou adrès la nan karaktè nan premye ak Lè sa a, sèlman kèk konvansyon abitrè ke tout moun dakò yo swiv. Se konsa, kouman se longè fil aplike, t 'nou pwopoze? Strlèn, strlèn, ki kèk nan nou gen kounye a te itilize yon fwa kèk. Li trè senp, dwa? Se tankou 2 liy nan kòd. Li nan bèl anpil yon riban pou nan kèk sòt, petèt ak yon varyab adisyonèl lokal. Men, strlèn jis gen pran yon konsèy ak Lè sa a, kòmanse kap chèche \ 0. Epi kòm pli vit ke li rive jwenn li menm, li kapab retounen kantite total etap ke li nan pran nan sa fisèl. Se konsa, nou ka dégager sa a soti nan sa ki ale sou kap vini an. Sipoze Lè sa a, Mwen deklare t jan mwen te fè nan liy 10. Sa a se kèk valè fatra. Ki moun ki konnen an premye? Men, sou bò men dwat-ou nan liy nan 10 m ap rele GetString ankò. Ki moun ki konnen kote sa a fini moute? Se pou nou abitrèman di ke sistèm nan fonksyone yo te jwenn plas pou li fason sou isit la. Mwen rive azar tape H-E-L-L-O ankò, epi pou nou ka trase kalite a menm nan foto. Men reyalite a ke mwen te redesign foto sa a se ekspre paske sa se yon. diferan HELLO pase yon sèl sa a Se konsa, isit la sa a ta kapab kote 456, sa a se 457, ak pou fè. Se konsa, sa vin mete kote make la kesyon yon fwa se te? Nan ka sa a 456. Nou ap davwa nimewo sa yo abitrèman vrèman paske apre jodi a nou pa ap ale nan pran swen anpil sou sa ki adrès ki nan anyen se. Tout sa nou pran swen sou se ke nou kapab konnen ki adrès la nan kèk moso nan done tankou Hello. Se konsa, reyèlman sa pifò moun fè nan syans konpitè lè w ap pale sou adrès memwa epi pale sou pwent espesyalman, olye ke deranje n ap kalkile konnen 123 - ki renmen le ki kote bagay sa a aktyèlman se, nou jis konnen ke li se nan kèk adrès nimerik - nou senplifye mond lan ak jis di ke moun sa a montre nan ki karaktè epi t ap lonje dwèt ak sa yo ki karaktè. Ak lefèt ke li nan yon flèch se byen entansyonèl paske literalman kounye a nan se lonje dwèt nan H epi t ap lonje dwèt nan lòt H la paske nan fen jounen an, li pa gen pwoblèm ki sa adrès la se, men li fè matyè ke nou gen kapasite nan eksprime ke adrès ak kèk moso nan kòd. Nou pa t 'reyèlman manipile sa yo adrès jis ankò se konsa nou pral wè ki kote nou ka foure ak sòt nan fè bagay sa yo ak pwent, men pou kounye a nan liy 12 literalman ki sa Valè yo se nou konpare selon istwa sa a nan liy 12? Nou ap di la a se 123 egal egal a 456? Epi sa a, definitivman pa ka a. E menm concept, sa a konsèy se definitivman pa menm bagay la tou tankou sa a paske ou rele GetString de fwa, ak GetString pa eseye yo dwe Super entelijan, li pa eseye reyalize, o, ou tape HELLO 5 minit Anons sa pibliye depi; kite m ba w konsèy a menm jan mwen te ban nou anvan, li jis repati yon moso nouvo sou memwa chak fwa ou rele li. Se konsa, kouman nou ranje pwoblèm sa a? Si pi wo nivo mwen vle konpare strings yo HELLO ak HELLO - Mwen pa pran swen sou pwent yo - ki jan mwen ale sou reponn kesyon an, t 'itilizatè a tape menm bagay la? Ki sa ki nan nesesè isit la? Yeah. [Elèv] Sèvi ak yon fonksyon. >> M ka sèvi ak yon fonksyon soti nan bwat la. M ka sèvi ak yon fonksyon rele strkan, s-T-r-c-m-p, jis vèsyon an abreje nan di fisèl konpare. Men, si nou ale nan, pou egzanp, konpare 2, ki se nan mitan feyè jodi a, M 'fè egzakteman sa. Mwen te kenbe tout lòt bagay menm jan an nan liy 1 sou desann nan 26 oswa konsa, e kounye a, remake te nan pati sa a chanje jis yon ti jan. Se pou nou inyore liy 28 pou yon moman epi konsantre sèlman sou yon sèl sa a. Nou sa nou te di Lendi a ke str compare li fè? Li kenbe pwosesis la nan pran 2 endikasyon, s ak t nan ka sa a, sòt de pwatikman mete dwèt li sou 2 lèt sa yo, epi ki sa li dwe fè se yon bagay tankou yon riban pandan y ap oswa yon pou riban, epi li di yo se sa yo menm bagay la tou? Si se konsa, l ap deplase dwèt yo oswa pwent yo pi devan. Èske sa yo menm bagay la tou, sa yo menm bagay la tou, sa yo menm bagay la tou, sa yo menm bagay la tou, sa yo menm bagay la tou? Ak Ooh, mwen nan fen fisèl la nan tou de nan epi t. Mwen pa jwenn nenpòt kontradiksyon. Wi, sa yo strings yo se menm bagay la. Ak sa ki str konpare retou si 2 strings yo se menm bagay la tou, aparamman? Zewo. Se konsa, 0 se yon bon bagay nan ka sa a paske si li retounen -1 oswa +1, ki vle di ke s jis k ap pase nan vin devan t lòd avèk lèt ​​alfabè oswa apre t. Epi poukisa ta ki kapab itil yo gen yon fonksyon ki di ou ki fisèl vini anvan oswa apre nan yon diksyonè? [Elèv] Rechèch. >> Rechèch ak Fouye. Se konsa, ou kapab fè bagay sa yo tankou rechèch binè oswa sòt jarèt oswa rantre sòt kote ou kapab konpare bagay sa yo. Se konsa, lwen nou te kalite koupe kèk kwen epi sèlman te pale osijè de Fouye nan yon kontèks la nan nimewo paske li nan bèl ak fasil yo pale sou, men ou kapab sètènman konpare strings, pòm ak fig, paske si pòm se konnen yo vin jwenn mwen anvan fig, Menm jan tou, ou ka deplase strings alantou nan memwa jis tankou Rob te fè ak sòt unifye nan videyo a e nou te fè isit la sou sèn ak sòt seleksyon, sòt ensèsyon, ak sòt jarèt. Se konsa, kote lòt bagay nou ka pran sa a? Ann eseye sa a. Sòt Se pou nou nan bliye ke leson pou yon moman epi eseye kounye a ak fè kopi 1.c fè bagay swivan yo. Nan liy 21 m ap di yon bagay ekri ak lèt ​​detache, Lè sa a, mwen jwenn yon fisèl soti nan itilizatè a yo, Lè sa a, mwen tcheke sa a. Nou pa t 'reyèlman rantre nan sa a abitid ankò, men kite a kounye a fè sa. Se pou nou aktyèlman kale tounen kouch sa a. Sa a se vrèman * Char. Sa a Guy se reyèlman * Char. Se konsa, sa sa vle di yo dwe tcheke si yo nil ==? Li sanble ke lè w rele yon fonksyon tankou GetString oswa plis jeneralman jis mande yon òdinatè ak ba ou kèk memwa, yon bagay t 'ka ale mal. Si ou te kapab fou epi mande òdinatè a pou yon teraokte nan memwa pa mande pou trillions nan bytes nan memwa ki jis pa egziste nan òdinatè a, men GetString ak lòt fonksyon bezwen kèk fason pou tap rele ke nan ou si ou te mande pou twòp. Yo ak fason pou fè sa ki GetString sa a se si ou te mande pou plis memwa pase sa ki disponib nan òdinatè a, menm si sa a, se super, pwobabilite super ba paske okenn nan nou yo ale nan tape yon karaktè billions ak Lè sa a, frape Antre, men ki ba pwobabilite menm si li kapab, mwen toujou vle tcheke pou li jis nan ka, ak valè a espesyal ki GetString, repons, ak lòt fonksyon retounen si gen yon bagay te ale mal se nil nan tout kapsil. Ak sa ki nil? Nil jis pou k ap pase nan reprezante yon konsèy. Li nan 0 adrès memwa. Mond lan deside ke abitrèman, si sa a se memwa òdinatè mwen an - ou konnen ki sa? - nou pral vòlè jis 1 multiple nan memwa òdinatè chak a, ak sa a se kote 0. Nou pwal bay li yon tinon a nil, epi nou ap ale nan pwomèt ke nou pa janm ap aktyèlman mete done reyèl gen paske nou jis abitrèman bezwen yon valè espesyal, 0, aka nil, pou nou ka rele nan itilizatè yo si gen yon bagay ale mal. Otreman ou pa ta ka konnen 0 vle di mete yon bagay isit la oswa sa sa vle di yon bagay ale mal? Nou gen nan tout dakò ke pa gen anyen te vle di nil tounen, te okenn adrès aktyèl retounen. Koulye a, isit la mwen jis adopte konvansyon imen mwen an mwen retounen 1 nan prensipal si gen yon bagay ale mal. Sa a se paske konvansyon retounen prensipal la se retounen 0 si bon, 1 oswa kèk valè lòt si move. Men, GetString ak nenpòt fonksyon ki kontra nan retounen memwa nil si gen yon bagay ale mal. Oke. Se konsa, malerezman, 27 liy super senp si li se, konplètman neglije voye yon kopi fisèl la. Poukisa? Nou ka wè sa a jan sa a. Mwen reklame nan liy 27 yo dwe fè yon kopi nan ak rele li t. Se konsa, Mwen M pa mande itilizatè a pou 2 strings tan sa a; mwen jis di valè a li nan s yo ta dwe mete nan t kòm byen. Se konsa, kounye a jis demontre kouman kase sa a se, nan liy 29 pati ki sa mwen ap fè? Premye mwen tcheke si longè nan t se pi gran pase 0. Genyen kèk fisèl la. Itilizatè a tape yon bagay pous Ki sa ki se liy 32 ap fè, aparamman? [Fèbl elèv repons] Dwa >>. Ou ka kalite dégager li soti nan sa m 'te di li nan fè a. Men, teknikman, ki sa ki sa a ap fè? t [0] reprezante ki sa? [Elèv] karaktè nan zeroth. >> [Malan] karaktè nan zeroth. Oswa, plis imen ki tankou, pèsonaj la an premye nan t, tou sa se sa ki, H petèt nan ka sa a. Ak toupper fè sa li di. Li majuskul pèsonaj la zeroth nan t e li chanje li. Se konsa, sa vle di pran pèsonaj la zeroth nan t, fè li majuskul, li mete l 'tounen nan ki kote menm. Se konsa, si mwen tape alo nan miniskil, sa a ta dwe chanje h an miniskil nan yon kapital H. Men, pwoblèm nan se ke nan liy 35 ak 36 sa mwen pral fè se enprime soti pou nou an ak t. Ak sa ki nan blok ou a? Kisa mwen aktyèlman pral wè si mwen tape nan alo nan tout miniskil? Kisa ki pwal jwenn enprime? >> [Fèbl repons elèv] >> Ki sa ki nan sa? [Elèv] Big H ak rès la piti. >> Gwo H la ak rès la ti pou ki, s oswa t? [Elèv] Tou de. >> Tou de. Egzakteman. Se konsa, kite a wè sa k ap pase sou isit la. Kite m 'ale pi devan epi pou konpile tout sa a. Sa a se copy1, sa fè copy1. Tout dwa. Rale pous Kite m 'ale pi devan epi kouri copy1, Antre, di yon bagay: alo nan miniskil. Li pwofite kapitalize kopi a, men li aparamman pwofite kapitalize orijinal la kòm byen, paske sa kounye a k ap pase nan istwa sa a? Nan liy 27 Mwen pa aktyèlman yo sanble kopye fisèl la, men menm si ou ka gen entwitivman espere ke yo dwe ka a, si ou panse sou foto sa a, ki sa ki vrèman m 'fè? Mwatye nan foto a se menm bagay la. Se konsa, kite a woule tounen nan tan pou ke t pa ankò egziste nan istwa a. S ka egziste nan istwa a, men an kite l 'miniskil alo tan sa a. Se konsa, kite m 'repare sa m' aktyèlman tape pous Nan ka sa a isit la nou gen h-e-l-l-o. Nou pral trase li kòm yon sekans nan karaktè, mete liy séparation mwen isit la ak 0 \ m 'yo. Se konsa, sa a se kote nou ye le pli vit ke liy 1 rive nan 24 ich-, bay oswa pran, te egzekite. Sa a se foto a nan memwa mwen. Lè m 'jwenn nan liy 27, kisa k ap rive? Jis tankou anvan, mwen jwenn yon konsèy, ki mwen pral trase tankou sa a kare. Yo rele li t. Ak sa ki nan valè li pa default? Ki moun ki konnen? Gen kèk fatra valè. Se konsa, mwen pral abstrè ki lwen kòm yon mak kesyon. Ak le pli vit ke bò a men dwat-ou nan liy 27 ègzekutra, ki sa mwen mete andedan nan t? Menm bagay la ki nan li nan s. Se konsa, si nou pou yon moman retire sa a abstraction nan flèch la epi nou di, oh, sa a se adrès chaj memwa 123, lè w di t ap vin a, virgules, w ap literalman mete 123 isit la. Koulye a, si nou kalite senplifye mond nou an ankò avèk foto, sa ou te vrèman fè se jis ajoute yon lòt flèch nan mond ou a ki nan lonje dwèt soti nan t fisèl la menm egzak. Se konsa, lè nan liy 31 ak 32 Mwen aktyèlman ale sou chanje t [0], ki sa ki t [0] aparamman synonyme ak kounye a? s [0] Se konsa, sa a, se tout sa ki k ap pase. E menm si sa a sòt de santi l yon ti kras nivo ki ba ak Esoteric ak sa a sòt de santi l tankou petèt entwitivman sa a ta dwe gen sèlman te travay - Mwen te fè kopi de bagay sa yo anvan ak li jis te travay - si ou aktyèlman panse sou sa yon fisèl vrèman se, se yon * Char. Oke, sa se sa? Li nan adrès la nan kèk karaktè. Lè sa a, petèt li fè sans plis ke lè ou eseye fè yon bagay super w pèdi senp tankou sa a, tout sa ou ap fè se kopye yon memwa adrès. Ou pa ap aktyèlman fè anyen ak fisèl nan tèt li. Se konsa, menm si ou pa gen okenn lide kijan ou ta rezoud pwoblèm sa a nan kòd, wo nivo, Concept, ki sa nou bezwen fè yo nan lòd fè ta vre kopi nan, aparamman? Yeah. >> [Elèv] Ba li yon kote nouvo? >> Egzakteman. Nou bezwen bay t yon mak nouvo kote. Nou bezwen yon jan kanmenm kreye yon mond kote ke nou jwenn yon moso nouvo sou memwa, ki jis pou dedomajman pou clarté nan mwen pral trase dwa anba a yon sèl sa a, men li pa bezwen yo dwe la. Men, li bezwen yo dwe gwosè nan menm, se konsa mwen pral trase liy sa yo vètikal nan plas la menm. Li gen pwoblèm si sa a se tout fatra okòmansman. Ki moun ki konnen sa ki te genyen? Men, etap 1 a pral gen yo dwe ban m 'kòm memwa anpil tankou mwen bezwen nan anfòm yon kopi hello, Lè sa a, konnen ki jan a kapab bay kopi h an isit la, e nan isit la, l la isit la ak pou fè. Men, sa a deja ta dwe santi yon ti kras evidan menm si kèk nan detay yo yo toujou abstrè. A kapab bay kopi sa a fisèl nan sa a, li nan jis yon pou riban oswa yon riban pandan y ap oubyen yon bagay ak ki ou te vin tounen tout plis abitye a. Se konsa, kite a eseye sa a. Kite m 'ale nan copy2.c. Nan copy2.c nou gen prèske menm pwogram lan eksepte pou liy 27. Li sanble yon konplèks ti kras, men si nou kraze li desann lan dekoupe, bò gòch la-men se menm bagay la. Char * t kreye bagay sa a nan memwa, byen ak yon mak kesyon paske nou pa gen okenn lide sa ki nan gen pa defo. Sou bò men dwat-ou nou ap kounye a entwodwi yon fonksyon nouvo, malok, pou memwa asiyen, ban m 'memwa, epi li aparamman pran konbyen agiman, ki jan anpil bagay andedan parantèz? Mwen tande jan n'ap plenyen an 1 ak 2, men li se jis 1. Gen nan pa gen vigil, ki vle di gen nan jis 1 bagay andedan parantèz yo. Menm si gen nan parantèz lòt, kite m 'mete aksan sou Ki sa ki andedan nan parantèz yo eksteryè, epi li sa a ekspresyon: (Strlèn (yo) + 1) * sizof (Char). Se konsa, si nou aktyèlman panse ke sa a nan, sa a ap di, ban m 'longè nan s. Poukisa mwen, menm si, ajoute 1 sou longè a? >> [Fèbl repons elèv] Egzakteman. Nou bezwen espas pou sa a Guy a ke a, pèsonaj la sizyèm ki pa gen okenn siyifikasyon angle men gen espesyal siyifikasyon pwogramatik. Se konsa, nou bezwen yon + 1 pou sa paske strlèn retounen tann imen an nan longè, alo oswa 5, li pa ba ou pèsonaj la nil adisyonèl. Se konsa, mwen manyèlman ajoute sa a ak + 1. Lè sa a, sa a, gwosè * nan (Char), nou pa t 'wè sa a anvan. Sa a se pa teknikman yon fonksyon. Li se yon mo kle espesyal ki jis di ou sa ki gwosè a se nan kèk kalite done sou yon òdinatè paske an reyalite, kèk nan nou gen òdinatè 32-bit. Mwen gen yon òdinatè trè fin vye granmoun nan kay la, epi li sèlman itilize 32 Bits ki reprezante endikasyon. Se konsa, si m 'te fè yo piti yo gen yon kalite done, li ta kapab 32 miyèt moso. Men, si mwen sèvi ak nouvo mwen an anpenpan òdinatè, mwen ta ka jwenn tounen yon valè de 64 Bits pou yon bagay tankou yon adrès. Se konsa, nan ka sa a, jis yo dwe Super ki an sekirite, nou pa ap ale nan yon bagay kòd difisil tankou - byen, ki sa ki gwosè a nan yon Char selon sa nou te di ke byen lwen tèlman? Nou te bèl anpil di vèbalman ke li nan 1 multiple, ak sa a, se bèl anpil vre atravè Komisyon Konsèy la. Men ankò, sipozisyon gen tandans yo dwe move. Yo mennen nan lojisyèl buggy si moun sèvi ak lojisyèl ou nan fason nou pa t 'gen entansyon. Se konsa, nan kite abstrè sa a lwen ak jis plis generic di Mwen bezwen sa a sègman anpil nan memwa epi chak ti moso nan memwa yo ta dwe ekivalan a gwosè a nan yon karaktè, ki se an reyalite egal a 1 nan ka sa a, men se yon fason pi plis enerik nan ekri li. Se konsa, si mo a se hello, konbyen bytes malok aparamman asiyen pou alo? [Elèv] Sis. >> Sis. Egzakteman anpil jan nou gen mak kesyon sou ekran an. Lè sa a, pran yon devine kounye a ki baze sou sa ou konprann sou GetString ki sa malok pwobableman retounen? >> [Elèv] Yon adrès. Yon adrès nan ki sa? Nan moso an premye nan memwa. Nou pa gen okenn lide sa ki nan la, paske kèk fonksyon lòt te kapab lè l sèvi avèk sa a memwa deja a. Men, malok, tankou GetString, retounen adrès ki nan multiple an premye nan memwa ke li te mete sou kote pou ou. Sepandan, ki sa li pa fè se ranpli nan sa a vid ak yon gwo karaktè nil antislach paske li vire soti ou ka itilize malok asiyen anyen: antye, strings, ranje, flote, estrikti elèv yo. Ou kapab sèvi ak malok konplètman generic. Li pa pran swen oswa ou gen konnen ki sa w ap allocation memwa pou li a. Se konsa, li ta enpèrtinan pou malok mete yon 0 \ nan fen chak ti moso nan memwa li nan ban nou paske sa a \ 0 bagay se jis yon konvansyon pou strings. Li pa nan itilize pou antye, li pa nan itilize pou flote, li pa te itilize pou elèv yo. Se konsa, gotcha la ak malok se ke chay la se antyèman sou ou pwogramè a sonje konbyen bytes ou afekte yo ak pa janm sèvi ak yon riban pou oswa yon riban pandan y ap epi ale sot pase fwontyè a nan moso nan memwa ou ve yo te bay yo. Mete yon lòt fason, osito ke ou asiyen memwa, ou pa kapab mande sistèm nan fonksyone, o, nan chemen an,, ki jan gwo yon ti moso nan memwa te sa a? Li nan antyèman jiska ou sonje si ou bezwen ke valè. Se konsa, kite a wè ki jan mwen kontinye nan sèvi ak sa a memwa. Nan liy 28 ak 29 poukisa mwen fè sa? Jis total saniti chèk la. Jis nan ka yon bagay ale mal, mwen mande pou kèk kantite lajan fou nan memwa oswa mwen te tèlman anpil bagay kouri sou òdinatè a ke gen jis se pa memwa ase, yon bagay tankou sa, mwen omwen vle tcheke pou nil. An reyalite, pi fò òdinatè a ap ba ou ilizyon a ke chak pwogram ka itilize antye a nan RAM ou a, men menm Se konsa, si itilizatè a kalite nan kèk fisèl fou lontan petèt paske yo se yon nèg move epi yo ap aktyèlman ap eseye aksidan pwogram ou an oswa Hack nan li, ou vle omwen tcheke valè a retounen nan malok epi si li egal nil. Men, si li fè sa, kite la jis kite kounye a paske mwen pa konnen ki sa fè nan ka sa a. Kouman pou mwen yon kopi kòd la? Genyen nan yon kèk fason fè sa. Gen str kopi fonksyon nan C, men li la super senp pou nou fè pou fason sa a la fin vye granmoun-alamòd. Premye kite m 'konnen sa ki longè nan s se. Mwen te kapab mete sa a nan riban an, men olye mwen jis mete l 'deyò isit la pou clarté. Se konsa, n kounye a estoke longè nan fisèl orijinal la, ki se aparamman 5. Lè sa a, nan riban pou m 'mwen iteration soti nan 0 sou jiska n, yo, epi sou chak iterasyon mwen mete nan [mwen] andedan t [mwen]. Se konsa, sa a, se sa m 'konprann onkenn ak 2 dwèt mwen lonje dwèt nan strings yo anvan. Kòm sa a pou riban iterates tankou sa a, mwen pral yo dwe kopye h nan isit la, e nan isit la, l nan isit la paske sa se s, sa a se t. Lè sa a, alafen, nan liy 35 poukisa mwen fè sa? Mwen bezwen asire w ke m ap mete fen nan t nan fisèl. Apre sa, mwen te fè li fason sa a yo dwe Super eksplisit. Men, pwopoze, yon moun, si ou te kapab, yon fason diferan nan fè sa. Mwen pa reyèlman bezwen liy 35. Genyen yon lòt fason yo fè sa. Yeah. >> [Fèbl repons elèv] >> Di li pi fò. [Elèv] Mwens pase oswa egal a. >> Egzakteman. Nou te ka jis di mwens pase oswa egal a n, ki an jeneral te gen move paske prèske toujou lè nou ale moute nan yon egal a bagay la n ap konte n 'al jwenn 1 etap twò lwen. Men, sonje, konbyen bytes t 'nou asiyen? Nou resevwa lajan strlèn nan s, se konsa 5 + 1 pou yon total 6. Se konsa, nan ka sa a nou te ka fè yon bagay tankou sa a pou ke nou ap kopye pa sèlman alo a, men tou 0 a \ nan fen an trè. Altènativman, nou te ka sèvi ak yon fonksyon rele str kopi, strki, men sa pa ta dwe prèske kòm anpil plezi. Men, ki nan tout sa li fè sa anba kapo a. Lè sa a, alafen, nou fè menm bagay la tankou anvan. Mwen tirer t ak Lè sa a, mwen reklame ke orijinal la sanble tankou sa a ak kopi a sanble tankou sa. Se konsa, kite a eseye sa a kounye a. Kite m 'ale nan isit la. Fè copy2. Nou pral rale nan epi kouri copy2. Mwen pral tape nan alo nan miniskil, ak tout bon mwen jwenn miniskil alo kòm orijinal la men kapital Alo pou kopi a. Men mwen pa fè jis ankò. Mwen bezwen fè 1 dènye bagay isit la. 46 ak 47 an klèman ap libere memwa yo, men ki sa sa aktyèlman vle di? Kisa mwen fè, ou panse ke, lè w rele liy 46 ak liy 47? Ki efè ki genyen? Yeah. [Fèbl repons elèv] >> Egzakteman. Ou se jis di sistèm nan fonksyone, hey, mèsi pou sa a memwa. Ou kapab kounye a itilize li pou yon lòt moun. Ak isit la a yon egzanp pafè nan valè fatra. Mwen te jis itilize sa a memwa a ekri pawòl Bondye a alo nan 2 kote yo, isit la, isit la, isit la, ak isit la. Se konsa, sa a se h-e-l-l-o-\ 0. Men, Lè sa a, mwen rele liy 46 ak liy 47, epi ou konnen ki sa k ap pase la an tèm de foto a? Aktyèlman, rete tann, foto sa a se youn nan fin vye granmoun. Yon fwa nou fè kopi a, sa a Guy se aktyèlman montre isit la, kidonk kite la retire nimewo yo ak jis abstrè lwen kòm flèch nou yo ankò. Kisa k ap pase nan foto sa a lè m 'rele gratis? [Fèbl elèv repons] >> Pa menm. Si m 'rele gratis sou yo epi t - kalite yon kesyon Trick - foto sa a pa chanje nan tout paske w rele nan epi rele t jis di sistèm nan fonksyone, hey, ou ka itilize sa a memwa ankò, men li pa chanje sa a nil oswa kèk karaktè espesyal, li pa chanje sa a, li pa chanje h la oswa e la oswa l la oswa l la oswa o an swa nan kote yo nenpòt lòt bagay. An tèm de foto a, le pli vit ke ou rele gratis, chanjman pa gen anyen. Ak ladan l 'manti orijin nan valè fatra paske si mwen Lè sa a, pita nan pwogram sa a mande sistèm nan fonksyone pou plis memwa ak GetString oswa malok oswa yon bagay tankou sa ak sistèm nan fonksyone di, asire w, mwen gen 12 bytes nan memwa jis libere leve, itilize sa yo, ki sa ou pral yo dwe lage? Ou ap pral lage yon ti moso nan memwa ke nou ta tipikman trase ak mak kesyon, men ki sa moun sa yo ki mak kesyon? Yo rive yo h-e-l-l-o, h-e-l-l-o. Sa yo se valè nouvo fatra nou osito ke ou libere moute ke memwa. Genyen nan yon enplikasyon mond reyèl isit la tou. Sa rive fè ak RAM, men òdinatè ou aktyèlman fè menm bagay la ak ki gen kapasite. Nou pral pale sou sa a an patikilye ki gen yon seri pwoblèm nan lavni ki konsantre sou forensics. Men, sa ki aktyèlman k ap pase si ou gen kèk sansib dosye finansye sou Desktop ou oswa kèk JPEG preliminè epi ou trennen l 'nan fatra ou a, sa ki pase lè ou trennen l 'nan fatra a oswa bin la resikle? Ou te konnen sa m 'te pale sou. [Ri] Kisa k ap pase lè ou te trennen ke prèv nan bwat resiklaj ou a oswa fatra kapab? [Fèbl repons elèv] Byen, konsa atansyon. Kisa k ap pase lè ou fè sa? Repons lan kout se pa gen anyen, dwa? Preliminè oswa sansib dosye a toujou jis chita chita l 'yon kote nan kondwi difisil ou. Pifò nan nou omwen te aprann fason an difisil ke ou bezwen vide fatra ou oswa bin resiklaj ou a aktyèlman efase dosye. Ak tout bon, lè ou klike sou dwa oswa kontwole klike sou fatra ou kapab oswa chwazi File, Vide fatra oswa kèlkeswa sa epi ou aktyèlman vide fatra a kapab oswa resikle bin, sa ki aktyèlman rive lè sa a foto sa a? Plis anyen. Se konsa, pa gen anyen k ap pase aktyèlman sou ki gen kapasite. Men, si nou jis tanporèman digresyon ak ekri - I'll jis itilize do a nan sa a. Se konsa, kounye a istwa a ap chanje soti nan RAM, ki se kote pwogram egziste pandan w ap kouri yo, ki gen kapasite, ki se kote yo yo estoke tèm long menm lè gen blakawout, pou kounye a - epi nou pral tounen vin jwenn sa a nan tan kap vini an - kite yo jis pretann ke sa a reprezante andedan kay la kondwi difisil nan òdinatè w lan paske li tounen nan jou a, yo itilize yo dwe disk sikilè, anpil tankou disk flou. Se konsa, si ou fè gen kèk sansib Excel ranpli, li ta ka pran jiska sa a ti moso nan memwa sou ki gen kapasite òdinatè ou a, epi mwen jis desen menm 1S abitrè ak 0s. Lè w glise dosye a tankou sa fatra ou a ka oswa resikle bin, literalman pa gen anyen k ap pase paske Apple ak Microsoft te jis deside fatra a kapab e resikle bin se reyèlman jis yon kontneur tanporè. Petèt evantyèlman OS a pral vide l pou ou, men anjeneral, li pa fè anyen, omwen jiskaske ou ap reyèlman ki ba sou espas. Sepandan, lè ou ale nan fatra vid oswa vid bin resiklaj, Menm jan an, pa gen anyen k ap pase nan foto sa a. Tout sa ki k ap pase se yon lòt kote sou òdinatè ou, gen kèk kalite tab. Li nan sòt de tankou yon fèy twonpe ti kras ki di sa, kite la di, resume.doc, Se konsa kourikouloum-vite ou a nan yon dosye Pawòl Microsoft te itilize yo viv nan kote 123 sou ki gen kapasite difisil ou a, pa nan memwa ak pa nan RAM men sou difisil ki gen kapasite ou a, ak preliminè ou lavi JPEG nan 456, ak dosye Excel ou ap viv nan 789 oubyen nenpòt kote. Lè ou efase dosye pa aktyèlman vidanj fatra a oswa bin la resikle, foto sa a pa chanje. 0s a ak 1S sou kondwi difisil ou pa ale nenpòt kote. Men, tablo sa a, sa a baz done ti kras nan kalite, fè sa ki chanjman. Lè ou efase rezime w, li se kòm si se dosye a efase nan kèk sans, men tout òdinatè a ap bliye kote ke bagay rete sou kondwi difisil ou. 0s a ak 1S ki konpoze rezime w oswa nenpòt nan sa yo dosye lòt yo toujou intact. Se konsa, si ou te fè sa a aksidantèlman, gen nan toujou yon pwobabilite ki pa zewo ke ou ka refè done ou lè l sèvi avèk Norton Itilite oswa kèk lojisyèl komèsyal bi ki gen nan lavi a se jwenn 0s ak 1S sa yo ki te sòt de te òfelen, bliye isit la, men kite isit la, se konsa ke ou kapab jwenn done ou tounen. Oswa envestigatè legal ak lapolis la oswa FBI ta aktyèlman pran yon kondwi difisil ak aktyèlman chèche modèl nan 0s ak 1S ki gade tankou JPEGs, gade tankou Excel fichiers, ak retabli yo nan fason sa a menm si òdinatè a ki oubliyé yo la. Se konsa, wout la sèlman vrèman efase done, kòm n ap diskite nan tan kap vini an, se frote oswa siye dosye a oswa ki gen kapasite difisil pa - Ou pa ka vrèman debarase m de 0s la ak 1S paske otreman ou ta kòmanse avèk yon kondwi difisil jigokte ak ou ta fini ak yon kondwi difisil megaokte si ou toujou ap yo te efase, literalman, 0s ak 1S. Se konsa, sa ou t ap fè si ou reyèlman te vle kouvri tracks ou ak pwoblèm fondamantal la ke gen la toujou 0s ak 1S sou ki gen kapasite a? Mwen wè yon moun jèstikule ke ou ta fizikman kraze aparèy la. Ki pral travay. [Ri] Men, si sa a, se kalite yon solisyon chè, sa ki ta gen plis rezonab? Yeah. >> [Elèv] recouvrir yo. >> Recouvrir yo ak ki sa? >> [Elèv] done Lòt. Lòt done. Ou ka jis recouvrir ki gen kapasite ou a ak 0s oswa 1S oswa tout 0s, tout 1S. Epi sa a, tout bon ki sa kèk nan lojisyèl an fè. Ou kapab achte lojisyèl oswa menm jwenn gratis lojisyèl, e menm bati nan Mac OS jou sa yo, mwens sa nan Windows, se kapasite a byen efase. Aktyèlman, si ou vle tout kay kouri jodi a si ou gen yon Mac ak fè sa, si ou te gen kèk bagay nan fatra ou a ka, ou kapab fè Tache Fatra Vide, ki fè sa ki egzakteman sa. Olye ke sèlman dosye efase isit la, li pa efase isit la a, 0s ak 1, olye, li jis chanje yo tout, pou egzanp, nan 0s ak dot, dot, dot. Se konsa yonn nan psets lavni ou a pral aktyèlman ap fè espre refè done - foto ke nou te pran nan moun, kote, ak bagay sou lakou lekòl la pou ki nou pwal fè yon imaj legal nan kat memwa yon kamera dijital la, ki se lide an egzak menm - epi ou pral gen yo dwe defye aktyèlman jwenn modèl yo ki reprezante JPEGs sou kondwi difisil ou a, anpil tankou ke elèv ansyen ki gen imel mwen li kèk semèn de sa te fè refè foto, sè l 'la. Poukisa nou pa nou pran yon ti repo-5 minit isit la, epi n ap argroup ak plis sou memwa. Se konsa, isit la nan kote bagay sa yo jwenn yon ti lide-koube, men sa a se yon etap trè pwisan nan direksyon konprann sa a tout moun pi plis la. Isit la se yon pwogram yo rele pointers.c. Li se nan mitan kòd echantiyon a jodi a. Remake nan liy ki premye kèk, 19 a 22, tout n ap fè se yon bagay tankou GetString epi retounen yon adrès, estoke li nan s. Dépi pou pset menm 3 si ou vle, men pset 4 yo, epi sou ki kote ou ka kòmanse pran sa yo wou fòmasyon nan tèt ou, pa gen okenn rezon ki fè yo pretann ke strings egziste ankò. Li nan sètènman oke jis kòmanse di Char *. Kòm yon sou kote, nan referans sou entènèt ak nan liv ou ka souvan wè zetwal la akote varyab la. Ou ta ka menm wè espas alantou tou de bò nan li. Tout moun nan sa yo se fonksyonèl kòrèk. Pou kounye a, menm si, nou pral estandadize sou apwòch sa a fè super klè ki * Char, se tankou li di konsèy karaktè. Sa a se kalite a done. Lè sa a, non an nan varyab la se nan nan ka sa a. Se konsa, nou te pran yon fisèl e nou te rele l 'la. Lè sa a, desann isit la remake ke mwen ap fè aktyèlman yon ti kras nan artifices. Se sa yo rele aritmetik konsèy, ki se sòt de senp super. Li jis vle di adisyon ak soustraksyon chif ki rive jiska pwent. Men, sa sa a aktyèlman travay. Pwogram sa a aparamman simagri 1 karaktè fisèl la nan chak liy sa yo ki rezilta nan fen - Jis pou nou ka gate kote sa a ki pral, fè pwent, kouri pwent, kite m 'rale pous Koulye a, kite m 'kalite nan yon bagay tankou HELLO ak kalite Antre epi li simagri 1 karaktè pou chak liy. Up jiskaske yon dezyèm Anons sa pibliye depi, nou ta te fè sa a avèk notasyon bracket kare. Nou ta gen yon riban pou epi nou ta fè printf nan s [mwen] ak nou ta fè sa ankò, li ankò e ankò ak yon n antislach nan fen chak liy. Men, pwogram sa a se diferan. Pwogram sa a se lè l sèvi avèk, literalman, aritmetik. Se konsa, sa k ap pase sou isit la? Premye a tout, anvan sa a riban menm ègzekutra, ki sa ki, jis yo dwe klè, se s aktyèlman? S se? >> [Elèv] Yon adrès. >> Yon adrès. Epitou, se adrès ki nan, nan ka a nan hello, pèsonaj la an premye nan mo sa a, ki se h. Se konsa, yo se, nan egzanp sa a an patikilye, adrès la nan h. Se konsa, sa sa vle di fè a + mwen? Bon, mwen kòmanse nan 0 nan sa a pou riban. Nou te fè fwa ke anpil. Mwen ki pral moute al longè nan fisèl la, aparamman. Se konsa, sou iterasyon an premye nan sa a riban, mwen se evidamman 0. Se konsa, sa a ekspresyon ap di a + mwen - olye, s +0--sa a, se evidamman jis la. Se konsa, sa se * s isit la? Koulye a, nou ap sèvi ak zetwal nan nan yon fason yon ti kras diferan. Kite m 'ale pi devan epi debarase m de t paske nou ap fè pale de t ak kopi a. Koulye a, nou jis vle rakonte yon istwa ki enplike s. Se konsa, nan moman sa a, apre yo fin gen fisèl kalite, mond nou an sanble byen tankou li te fè anvan ak jis nan estoke adrès ki nan h ak plis ankò jeneralman pwente nan fisèl la hello. Si m 'fè kounye a yon liy tankou * (yo + mwen), se pou yo eseye sa a soti. Se konsa, * (yo + mwen). Kite m 'senplifye sa a paske sa a se 0, kidonk sa a se * (yo +0). Oke, rete tann yon minit. Senplifye pi lwen. Sa a se * (yo). Oke, kounye a parantèz yo yo se kalite estipid, se konsa kounye a kite a jis fè * s. Se konsa, nan iterasyon an premye nan sa a riban, ki liy ki nan make, 26, se bèl anpil ekivalan a enprime sa a. Ki sa ki kalite nan done a * s? Nan kontèks sa a, paske zetwal la k ap pase yo akote yo nan tèt li, men plis espesyalman, paske nou pa deklare a, nou pa kreye yon varyab ankò, gen nan pa gen mansyone nan * Char nan liy 26, gen nan pa gen mansyone nan fisèl la mo kle, nou se jis lè l sèvi avèk yon varyab ki rele a, li vire soti kounye a zetwal la gen yon ti kras diferan, epi, Byensir, konfizyon sans. * S isit la vle di ale nan adrès ki nan s ak ekri ak lèt ​​detache tou sa ki gen la. Se konsa, yo se isit la, * s se - sòt de tankou parachut ak Nechèl yo, swiv flèch la - isit la. Se konsa, sa a se nan *. Se konsa, sa vin enprime sou iterasyon an premye nan ki riban nan liy 26? Mwen enprime soti c%, ki se kontneur la pou yon karaktè, Lè sa a, yon \ n pou yon liy nouvo. * (Yo + mwen) kote mwen se 0 se jis sa a. Se konsa, sa Char mwen mete nan pou c%? H. Nan iterasyon nan pwochen nan riban an - ou ka pwobableman wè kote sa a ki pral - iterasyon nan pwochen mwen se evidamman 1, kidonk sa a vle di la +1, ak Lè sa a, koulye a, mwen bezwen parantèz yo paske kounye a zetwal la bezwen di ale nan adrès memwa nan +1. Ki sa ki nan? Se pou nou woule tounen nan tan ak di sa flèch kounye a se pa sa aktyèlman fè nou nenpòt favè. Kite a plis espesyalman di ke sa a se estoke 123 nimerik la paske nan kòmansman an nan sa a fil hello, sa a se adrès 123, sa a se 124, ak pou fè. Se konsa, sou iterasyon nan dezyèm lè m ap di yo +1, sa se tankou li di 123 +1, ki te rekonèt kòm 124 konsa, sa ki Char vin enprime sou iterasyon nan dezyèm? E nan adrès memwa 124. Lè sa a, + ankò, 125, 126, 127, ak sa a riban Erezman sispann anvan nou jwenn isit la paske mwen m 'lè l sèvi avèk strlèn a asire w ke mwen pa konte ki twò wo. Se konsa, ki twò se li. Yon fwa ankò, sa a se jis kòm si nou te fè yon semèn de sa. Kite m 'ekri l sou liy ki anba a menm si nou pa vle fè tou de. Sa a se idantik kounye a sa a. Se konsa, menm si yo se yon fisèl, menm jan nou ve yo te rele li pou de semèn, yo se reyèlman yon * Char. Se konsa, si nou vle yo super twou dèyè, li vrèman bon yo ekri pèsonaj la espesifik nan lokal kote on lè l sèvi avèk sa yo adrès nimerik ak sa a operatè etwal, men franchman, sa a se cleaner jis anpil. Se konsa, sa a se pa move. Pa gen rezon ki fè yo sispann fè liy 27 isit la, men 26 se woulant menm bagay la tou, epi li fonksyonèl menm bagay la pou egzakteman rezon sa yo ke nou ve yo te diskite sou konsa byen lwen. Epi anfen, 29 se pratik jis bon. Rele gratis nan s vle di ke kounye a ou ap bay tounen memwa nan ki GetString te ban nou paske ankò, kòm mwen mansyone Lendi, GetString pou semèn ki te entwodwi yon ensèk nan kòd ou a. Te kòd ou a pou semèn te gen fwit memwa kote ou ve yo te mande GetString pou memwa, men ou pa janm ve yo te bay li tounen. Ak sa ki te fè espre chwazi pa nou pedagojik paske li nan jis twòp bezwen panse osijè de bonè nan. Men koulye a, nou bezwen plis simetri. Si ou mande òdinatè a pou memwa, kòm se ka a pou GetString, kòm se ka a aparamman pou malok, ou fèt pou ou kounye a pou pset pati 4 tou gratis nenpòt memwa sa yo. Avi sa a se diferan de li di n int. Ou pa bezwen libere sa a paske ou pa t 'rele GetString epi ou pa t 'rele malok. Ak menm si ou rele GetInt kòm n ap pètèt wè la a, GetInt pa asiyen memwa pou ou paske ou ka aktyèlman pase alantou nonm antye relatif ak cha ak charaktèr jis fason an nou te toujou ap fè pou semèn. Kòd, menm si, se espesyal paske vrèman yo ap seri a nan charaktèr miltip. Se konsa, yo ap jis diferan de charaktèr ak cha ak antye ak renmen an. Men, nou pral tounen vin jwenn ke lontan anvan. Nenpòt kesyon Lè sa a, sa a sou kòmansman nan pwent? Yeah. [Fèbl kesyon elèv] Ah, trè bon kesyon. Youn nan bagay ki kèk C aktyèlman fè pou ou, ki se pratik, se li figire pou ou sa ki gwosè a se nan kalite la done ak Lè sa a, fè yo ki kalite miltiplikasyon pou ou. Sa a se petinan nan ka a nan charaktèr paske prèske toujou yon Char se 1 multiple, kidonk sa a jis travay. Men, poutèt a nan diskisyon, si ou te aktyèlman enprime nonm antye relatif epi ou t ap eseye enprime soti kèk nan valè ki te lonje dwèt nan yon nonb antye relatif, ou menm pa ta bezwen fè + 4 * mwen jis paske yon int se 4 bytes. Aritmetik pwente vle di ke C ak du a fè tout sa ki matematik pou ou. Tout sa ou dwe pran swen sou se konte a nan sòt de sans imen an. Yeah. [Elèv] Si ou deklare yon fisèl andedan yon pou riban, ou gen libere li pita? Bon kesyon. Si ou deklare yon andedan fil de la pou riban, ou bezwen libere li pita? Ou sèlman bezwen memwa gratis ke w asiyen ak GetString oswa avèk malok. Se konsa, si ou jis di yon bagay tankou - kite m 'mete aparèy òtopedik Curly kounye a pou se tout kòd la ki gen rapò. Si ou te fè yon bagay, byen buggily, tankou sa a, Char * t = a, ou pa bezwen t gratis paske t pa te enplike nenpòt mansyone nan malok oswa GetString. Si pa kontras ou te fè sa a, GetString, lè sa a se wi, ou ta bezwen t gratis. Ak an reyalite, chans sèlman ou a fè sa se kounye a andedan sa a riban, pou pwoblèm nan menm nan dimansyon ke nou te diskite nan tan lontan an. Sinon ou ta ka allocation memwa, allocation memwa, allocation memwa, ak nan fen pwogram lan paske ou se deyò de sa a riban, t pa egziste, men ou pa janm te di sistèm nan fonksyone ke ou pa t 'bezwen ki memwa ankò. Epi anvan lontan, pou pset 4 oswa 5 n ap ekipe ou yon pwogram ki rele Valgrind, ki se menm jan an nan lespri gdb nan ke li nan te resevwa yon ti jan nan yon entèfas Esoteric, men objektif li yo nan lavi ki gen ede ou. Ak Valgrind se yon pwogram ki pral nan lavni an rechèch pwogram ou an kap chèche fwit memwa, si soti nan GetString oswa malok, ki n ap kòmanse lè l sèvi avèk tout plis an kòm nou sispann lè l sèvi avèk bibliyotèk la CS50 kòm anpil. Nou kounye a gen finalman sòt de vokabilè a ak sòt la nan modèl mantal nan teyori ak ki rezoud pwogram sa a kase. Se konsa, nan pwogram sa a kase, swap travay andedan nan swap, men li pa janm aktyèlman te travay nan prensipal paske prensipal ki te pase nan x ak y, sonje, ak moun ki te pase nan pa valè, se konsa pale. Kopi yo te bay boukante. Nan fen swap, A ak B te tout bon yo te echanje, Men, nan kou x ak y, jan nou diskite nan Lendi, pa t '. Se konsa, mwen pwopoze nan vèt isit la ke sa a se aktyèlman solisyon an isit la. Ak aktyèlman, kite m 'deplase zetwal mwen jis yo dwe konsistan menm si, ankò, woulant sa a pa gen pwoblèm. Nan semenn yo nan lavni nou pral eksplike ki lè ak poukisa li fè matyè. Se konsa, nan vèt kounye a se yon solisyon. Franchman, li sanble yon lot antye messier paske mwen gen tout sa yo zetwal yo. Kite m 'pwen soti yon sèl bagay. Liy nan tèt isit la kote li di Int * yon ak int * b se fondamantalman fè menm bagay la kòm li toujou gen. Li se deklare 2 agiman oswa paramèt boukante, premye a nan ki se yon konsèy int yo te rele yon, dezyèm lan nan ki se yon konsèy int rele b. Bagay la sèlman ki ki nouvo nan pwen sa a se lefèt ke gen nan yon etwal la. Kisa sa vle di? Yon se pa yon int, b se pa yon int. A se adrès ki nan yon int ak b se adrès la nan yon int diferan. Desann isit la, sa a se kote mwen admèt C vin konfizyon. Koulye a, nou ap itilize yon etwal, men li gen siyifikasyon diferan nan kontèks sa a. Paske nou pa ap deklare endikasyon kòm nou yo moute isit la, isit la nou yo dereferencing bagay sa yo. Se konsa, teknikman, zetwal la nan kontèks sa a nan liy nan andedan nan swap premye, dezyèm, ak twazyèm se operatè a dèreferans, ki jis vle di ale la. Se konsa, jis kòm dwèt mwen swiv flèch la h, * Yon mwayen ale nan ki adrès ak jwenn mwen int la ki nan la. * Vle di b ale nan adrès la epi yo pase m 'sa ki nan la. Se konsa, kite a rdesine foto a soti nan Lendi kounye a lè l sèvi avèk yon pil nan ankadreman li yo, yon sèl anba a nan yo ki a pwal prensipal yo, yon sèl a anwo nan ki a pwal swap, pou ke mond nou an sanble, jis tankou Lendi, tankou sa a. Isit la se yon ti moso nan memwa ki prensipal ki pral itilize. Sonje soti nan Lendi a ke pwogram nan jis te gen 2 varyab, yon sèl rele x ak yon sèl rele y, epi mwen te mete nimewo yo 1 ak 2 a. Koulye a, lè m 'rele swap tankou m' te fè nan Lendi, ki te deja lè mwen itilize vèsyon an wouj nan pwogram sa a, ki sanble tankou sa a, Mwen te resevwa 2 paramèt, yon b ak, ak nou sa nou te ekri isit la ak isit la? Jis 1 ak 2, literalman fotokopi x ak y. Jodi a nou chanje sa. Jodi a olye pou yo pase nan antye a ak b nou pral pase nan 2 adrès. Moun sa yo ki adrès rive lonje dwèt sou antye, men moun ki adrès yo pa antye tèt yo. Yo se adrès. Se tankou yon adrès lapòs olye. Se konsa, kounye a nou bezwen jis bay tèt mwen yon ti kras plis detay sou ekran an. Sa a se memwa òdinatè mwen an kòm li te gen tout jou. Koulye a, nou bezwen kèk abitrè numerotasyon pwojè. Se konsa, kite yo jis di, jis pa chans, ke sa a se adrès memwa 123, 124. Kite yo jis di sa a se 125, sa a se 126, ak pou fè, men sa a totalman abitrè. Nou jis bezwen kèk konplo Genyen nan memwa mwen. Se konsa, kounye a lè mwen aktyèlman pase nan x ak y, mwen pa pwal yo pase nan x ak y; Mwen pral pase nan adrès lapòs la, se konsa pale, nan x ak y pou ke sa ki vin isit la ak ki estoke isit la se pa 1 ak 2, Men, si ou kapab wè tèks ti m 'yo, sa ki vin pase nan isit la ak isit la? [Fèbl repons elèv] >> Egzakteman. 123 vin mete isit la ak 124 vin mete isit la. Koulye a, paske mwen te itilize zetwal la nan fason sa a liy moute isit la trè premye nan tèt, pwogram mwen jis konnen ke 123 ak 124, menm si yo ap evidamman nonm antye relatif ke nenpòt moun te ka remake, yo ta dwe kapab entèprete kòm adrès, adrès nimerik. Yo pa nan ak nan tèt yo antye, yo ap adrès, ak sa a, se paske mwen te fòmèlman mete zetwal yo a. Se konsa, kounye a nan liy premye, dezyèm, ak twazyèm mwen nan kòd aktyèl kisa k ap rive isit la? Se pou nou trase rès imaj la. Tan se jis tankou li te nan Lendi. Pa gen anyen espesyal sou tan. Li se jis yon lokal 32 Bits varyab, ak andedan nan ke mwen aparamman estoke valè a * yon. Koulye a, si mwen jis di tan = yon, sa ki ta mwen mete isit la? >> [Elèv] 123. 123. Men se pa sèlman sa m ap fè a. M ap di tan = * yon. Vle di Star ale la. Se konsa, isit la se yon, 123. Kouman pou mwen ale a? Pran pòz tankou gen nan yon flèch. Oke, la li ye, 1. Se konsa, sa vin ki estoke nan tan, aparamman? Jis 1. Se konsa, nan lòt mo, tan se * yon, * yon mwayen ale nan adrès la ki se kounye a nan yon, ki se aparamman 123. Oke, isit la nou nan kote 123, mwen wè nimewo a 1, se konsa mwen pral mete nimewo a 1 a. Kounye a ki sa m 'fè nan liy 2, * yon * = b? Sa a se yon sèl yon ti kras plis patisipe paske koulye a sa ki se yon? Li nan 123. Se konsa, * yon se ki kote? Dwa kote mwen te la anvan. Se konsa, ale la. Oke. Koulye a,, alafen, ak Lè sa a, finalman sa a yo pral kòmanse fè sans, èspere ke, * B vle di sa ki nan b? 124. Se konsa, mwen bezwen ale a, ki se 2. Se konsa, sa mwen mete ki kote? 2 ale nan isit la paske * b ale nan * yon. Se konsa, mwen pral fè sa. Epi ou ka deja wè, petèt, ke nou se tèlman pi pre rezoud sa a estipid, senp pwoblèm kòrèkteman la pou premye fwa paske kounye a nou toujou gen yon rekoleksyon de sa ki x te ye a, nou gen 2 kopi, Byensir, nan y, men liy 3 kounye a di * b. Se konsa, isit la nan b. * Vle di b ale la. Se konsa, kote se kote 124? Li nan aparamman isit la. Se konsa, sa mwen mete isit la? Li evidan, tan. Se konsa, koulye a, mwen fè sa. Se konsa, mwen gen 1 isit la ak 2 isit la. Epi, koulye a sa ki sou tout bagay sa yo, 123 a, 124 a, ak 1 a? Le pli vit ke retounen swap, sa a memwa se kòm bon jan pèdi paske le pli vit ke retounen swap, sistèm nan fonksyone se lib yo itilize ki memwa ankò nan lavni. Se sèlman memwa prensipal la nan fon an nan sa a chemine sa yo rele kole alantou. Se konsa, nou finalman gen kounye a yon vèsyon ap travay. Kite m 'ale nan swap.c, ak avi sa ki annapre yo. Nan tèt yo nan pwogram nan mwen te chanje pwototip m 'yo dwe int * yon ak int * b. Se konsa, bagay la sèlman mwen chanje a ale nan wouj, ki te move, yo vèt, ki se bon, se mwen te ajoute sa yo zetwal jodi a. Men, Lè sa a, desann isit la nan boukante tèt li mwen te gen a kapab bay kopi, keratin ki sa ki te jis sou glise la. Mwen gen yon etwal isit la, zetwal isit la - ki matche ak pwototip la - ak Lè sa a, tout bagay sa yo kounye a gen zetwal eksepte pou tan paske yo sèvi ak yon varyab tanporè, pa gen anyen nouvo la. Mwen te jis bezwen tanporè depo pou yon int. Se konsa, nou pa bezwen yon etwal la. Nou jis bezwen zetwal la pou nou ka travèse sa a sòt de fwontyè abitrè ant 2 sa yo ankadreman nan memwa òdinatè mwen an. Men, yon sèl bagay dènye gen chanje, epi ou ka gen antrevwar li deja. Ki lòt liy se evidamman diferan kounye a? >> [Elèv] & x. Yeah, se konsa 25 se liy ki sot pase a nan kòd mwen bezwen chanje pou sa a nan travay. Yon semèn Anons sa pibliye depi e menm nan Lendi liy 25 gade tankou sa a, boukante x ak y, ak sa a te jis kase paske si w di swap (x, y) ou bay kopi x ak y boukante, lè sa a li nan fè bagay li yo, men ou pa janm ap aktyèlman chanje x ak y tèt li. Se konsa, menm si ou pa janm te wè sa a karaktè anvan ak Comercial a nan kòd, jis pran yon devine. Ki sa ki comercial a fè sa, aparamman? [Elèv] Takes adrès la. >> Takes adrès la. Se konsa, comercial a ap di, ban m 'adrès ki nan x. Ki moun ki konnen kote li ye? Li k ap pase yo 123. Mwen pa pran swen. Jis ba m 'adrès ki nan x. & Y vle di, ban m 'adrès ki nan y. Ak nan pwen sa a istwa a se parfe ki konsistan avèk foto a nou te yon ti moman de sa. Se konsa, mwen pral admèt endikasyon, sètènman pou m 'lè mwen te kòmanse premye aprann sa a, yo te definitivman youn nan bagay ki pi di vlope lide m 'alantou. Men mwen reyalize, espesyalman lè nou kenbe jwe ak sa yo kalite bagay sa yo, si ou kraze li desann nan sa yo sòt Super senp nan entelektyèlman entérésan pwoblèm nan jis deplase nimewo alantou li, repons lan nan yon anpil nan konfizyon ak endikasyon vrèman kapab ap sòti de sa yo mekanik anpil debaz. Isit la nan yon adrès. Ale la ansanm ak etwal la. Oswa Kontrèman, isit la nan yon comercial. Figi konnen ki sa ki adrès la aktyèlman se. Tout dwa. Se konsa, ki kote tout bagay sa yo memwa vini soti nan? Nou te trase foto sa a yon koup de fwa, e mwen kenbe prometteur nou pral tounen vin jwenn li, men isit la se reprezantasyon an nan memwa òdinatè w lan an sa a, se yon ti kras plis make pase tablo nou an isit la se. Segman nan tèks nan tèt reprezante sa ki gen rapò ak pwogram ou an? [Fèbl repons elèv] >> Padon? Repete nou sa ankò. [Elèv] Pwogram nan vrè. >> Pwogram aktyèl la. Se konsa, rezone nan 0s ak 1S ke ou te konpile apre ekri C kòd ak Lè sa a, kouri ak génération fini 0s ak 1S moute ap resevwa rantre gen nan memwa paske lè ou klike sou doub yon icon sou Mac ou a oswa PC oswa kouri nan yon lòd tankou Mario nan èd memwa ou a, 0s ou ak 1S soti nan ki gen kapasite jwenn chaje nan memwa pou ke òdinatè a ka manipile yo ak pann yo pi vit. Se konsa, inisyalizèd done ak done uninitialized, nou pa pral pale anpil sou sa yo, Men, moun yo se jis varyab mondyal. Inisyalizèd vle di varyab mondyal ke ou te bay valè; uninitialized vle di varyab mondyal ke ou pa t 'ankò bay valè yo. Lè sa a, gen nan sa yo varyab anviwònman ki m ap konplètman balanse men m 'nan, men yo la ak ki magazen bagay sa yo tankou non itilizatè ou an ak lòt sòt de pi ba detay nivo. Men, moso vyann yo juiciest nan layout memwa ou a se bagay sa yo rele pil la ak pil wòch la. Chemine a ankò, yo dwe klè, se memwa a ki nan itilize nenpòt lè fonksyon yo rele yo, chak fwa gen varyab lokal ak nenpòt lè gen yo paramèt ke yo te pase alantou. Nan tout sa k ap pase nan chemine a. Pil wòch la nou pa te pale sou yo, men pran yon devine ki itilize pil wòch la. Jis yon moso diferan nan memwa. Li k ap pase nan yo dwe desine isit la nan tèt la, men sa a yon konvansyon abitrè imaje. Ki moun ki la aparamman te lè l sèvi avèk memwa soti nan pil wòch la pou semèn? Li nan teknikman ou men endirèkteman. >> [Elèv] GetString. GetString ak malok. Se konsa, isit la nan diferans lan fondalnatal. Ou konnen pou semèn ki sot pase yo kèk ki si ou bezwen memwa, jis deklare yon varyab. Si ou bezwen anpil bagay nan memwa, deklare yon etalaj dwa andedan nan fonksyon ou an. Men, pwoblèm lan nou te kenbe fè fas a se si ou deklare varyab lokalman andedan nan fonksyon yo, le pli vit ke retounen yo fonksyon, ki sa ki k ap pase nan memwa a, ak moun ki varyab? Jis sòt de li a pa pou ou, dwa? Li jis disparèt sòt de teori. Li nan toujou fizikman la, evidamman, men li la pa dwat ou sèvi avèk yo. Sa a se evidamman pwoblèm si ou vle ekri fonksyon nan lavi ki aktyèlman asiyen memwa ak pa bay li tounen touswit. Ka nan pwen: Bi GetString a nan lavi se pa gen okenn lide nan avanse ki jan gwo nan yon fisèl mwen pral tape nan klavye a, Men, li la te resevwa pou kapab asiyen memwa yo kenbe David oswa alo oswa yon redaksyon antye ki ta ka itilizatè a te tape pous Se konsa, GetString ki te lè l sèvi avèk malok. Malok Se poutèt sa yo dwe lè l sèvi avèk pa chemine a; olye li a lè l sèvi avèk bagay sa yo rele pil wòch la. Pa gen anyen diferan sou memwa a. Li pa pi vit oswa pi dousman oswa yon bagay tankou sa. Se jis fizikman nan yon kote diferan. Men, règ la se ke memwa a ki nan resevwa lajan sou pil wòch la pa janm yo pral wete nan men ou jiskaske ou rele - pran yon devine - gratis. Nan kontras, nenpòt memwa ou mande pou ou sou chemine a pa jis deklare yon etalaj oswa deklare yon varyab tankou nou te toujou ap fè pou de semèn, ki pa default fini moute sou pil la. Ak ki travay gwo 90% de tan an, men sou sa yo okazyon rar kote ou vle asiyen memwa epi kenbe l 'otou, Lè sa a, ou bezwen sèvi ak yon fonksyon tankou malok. Oubyen èske nou te itilize yon fonksyon tankou GetString, ki an vire itilize malok. Ann gade pou wè ki kote sa a ta ka dekonpoze ak Lè sa a, pran yon gade vit nan Binky. Nou ap tounen ak sa yo ki nan tan kap vini an. Isit la se yon pwogram super senp ki nan 2 liy ki premye fè sa? Nan lang angle, ki sa ki sa yo premye 2 liy nan kòd fè andedan nan prensipal yo? [Fèbl repons elèv] Atansyon. Li pa ban m 'adrès ki nan x oswa y. [Elèv] Bay pwent antye. >> Bon. Ban m '2 pwent nonm antye relatif. Nan lòt mo, ban m '2 sègman nan memwa ke mwen kenbe desen jodi a, menm si mwen efase li kounye a, menm jan kare. Ban m '2 sègman nan memwa, yon sèl rele x, yon sèl rele y - pi bonè mwen te rele yo a epi t - ak sa ki ki kalite ki ti moso nan memwa? Li pral nan magazen yon adrès. Li nan nan * int kalite. Se konsa, adrès la nan yon int pral evantyèlman ap viv nan x, adrès ki nan yon int pral evantyèlman ap viv nan y, men okòmansman, Ki sa ki andedan nan x ak y? Ki moun ki konnen? Fatra valè. Li te gen anyen fè avèk endikasyon. Si nou pa te mete yon bagay la, moun ki konnen sa ki nan aktyèlman genyen? Koulye a, x. Kisa k ap pase isit la? Sa a se legi kounye a paske x ki se yon konsèy. Se yon * int. Se konsa, sa vle di mwen ka mete nan x adrès la nan kèk ti moso nan memwa. Ki sa ki malok retounen? Pafè, li retounen adrès, adrès ki nan multiple nan premye nan yon moso antye nan memwa. Konbyen bytes sa a se aparamman allocation, pou egzanp, nan aparèy la? Ki sa ki nan gwosè a nan yon int? 4. Si ou panse tounen nan semèn 1 an, li pa super enpòtan nan toujou sonje ke, men nan ka sa a li nan itil yo konnen, 4 bytes. Se konsa, sa a se allocation sou 4 bytes yo pil wòch epi li retounen adrès la nan yon sèl nan premye m 'abitrèman. Koulye a, ki sa ki x ap fè? A * x = 42 ap fè ki sa? Si nan pwen sa a nan istwa a nou gen x, ki sanble sa a ak kèk valè fatra, sa a se kounye a y ak kèk valè fatra, kounye a nan liyn 3 Mwen te afekte 4 bytes. Pòtre sa a esansyèlman sanble tankou sa a. Oswa plis espesyalman, si sa a se adrès abitrè 123, sa a se ki sa istwa nou an kounye a sanble. * X = 42 kounye a vle di ki sa? Sa vle di ale nan 123 nan adrès ak mete nimewo a 42 la. Mwen pa bezwen trase liy sa yo paske nou pa ap fè strings. Mwen te dwe fè jis ekri li tankou sa a, ak jis pou dedomajman pou demonstrasyon an, 42 kòm yon kalite int nan pran moute yon anpil nan espas, 4 bytes. Se konsa, se sa ki te pase a la, men gen yon pwoblèm kounye a. * Y = 13. Kisa ki pral rive isit la? Pwoblèm lan se * y nan mond senplifye nou jis vle di ale nan adrès ki nan y. Ki sa ki nan nan y? Li nan kèk valè fatra. Se konsa, kite a sipoze ke ke valè fatra se 5551212, yon bagay fou tankou sa. * Vle di y ale nan adrese 5551212. Sa se renmen sou isit la. Li pa egziste, pou egzanp. Se konsa, * y ap vin 13 vle di mwen ap eseye trase 13 isit la. Li pa egziste. Mwen te depase segman an nan tablo a. Ki sa mwen ka resevwa? Sa skre segmentation mesaj fòt paske mwen m 'ap eseye mete nan memwa yon valè tankou 13 nan yon kote ki pa egziste. Rès la nan pwogram nan ta ka travay oke, men yo jiska pwen sa a li pa garanti. Se konsa, kite a eseye di istwa sa a. Nou pral tounen vin jwenn ke yon fwa nou te pale sou Egzagòn. Se pou nou tounen nan sa a ak sa a fini avèk bagay sa yo rele Binky, ki rantre se yon pwofesè Stanford chita nan kay jwe ak Claymation, di istwa a nan egzakteman pwogram ki menm. Li nan jis sou 3 minit nan longè. Isit la nou gen Binky. [Gason oratè sou videyo] Hey Binky, reveye. Li lè pou plezi konsèy. [Binky] Ki sa ki nan sa? Aprann sou pwent? Oh, chokola! [Gason oratè] Bon, jwenn te kòmanse, mwen devine nou pral bezwen yon endikasyon koup. [Binky] Okay. Kòd sa a repati 2 endikasyon ki ka pwente sou nonm antye relatif. [Gason oratè] Okay. Oke, mwen wè pwent yo 2 yo, men yo pa sanble yo dwe montre anyen. [Binky] Sa a dwat. Okòmansman, endikasyon pa lonje dwèt sou anyen. Bagay yo te lonje dwèt sou yo rele pointees, ak mete yo moute se yon etap ki apa a. [Gason oratè] Oh, dwa, dwa. Mwen te konnen ke. Pointees yo se separe. Er, Se konsa, kouman ou asiyen yon pointee? [Binky] Okay. Kòd sa a repati yon pointee nouvo nonb antye relatif, ak nan pati sa a kouche x nan pwen li. [Gason oratè] Hey, ki sanble pi bon. Se konsa, fè li fè yon bagay. >> [Binky] Okay. M'a dèreferans x la konsèy nan magazen nimewo a 42 nan pointee li yo. Pou sa jwe fent mwen pral bezwen ralonj majik m 'lan nan dereferencing. [Gason oratè] ralonj majik ou nan dereferencing? Sa a se gwo. [Binky] Sa a se sa kòd la sanble. Mwen pral jis mete kanpe nimewo a ak ... [Eklate son] [Gason oratè] Hey gade, gen li ale. Se konsa, fè yon dèreferans sou x swiv flèch la gen aksè a pointee li yo, nan ka sa a nan magazen 42 an la. Hey, eseye lè l sèvi avèk li nan magazen nimewo a 13 a konsèy nan lòt, y. [Binky] Okay. Mwen pral jis ale sou isit la yo y epi pou yo jwenn nimewo a 13 mete kanpe ak Lè sa a, pran bagèt a nan dereferencing ak jis ... [Buz son] ola! [Gason oratè] Oh hey, ki pa t 'travay. Di, Binky, mwen pa kwè dereferencing y se yon bon lide paske mete kanpe pointee la se yon etap separe e mwen pa panse ke nou tout tan te fè li. [Binky] O o, bon pwen. [Gason oratè] Yeah. Nou resevwa lajan y la konsèy men nou pa janm mete l 'nan pwen nan yon pointee. [Binky] O o, trè vijilan. [Gason oratè] Hey, w ap chèche bon la, Binky. Èske ou ka fikse li pou ke pwen y pointee a menm jan ak x? >> [Binky] Sure. Mwen pral sèvi ak ralonj majik m 'lan nan plasman konsèy. [Gason oratè] se ke pral gen yon pwoblèm tankou ye anvan an? [Binky] Non, sa a pa manyen pointees yo. Li jis chanje yon sèl konsèy nan pwen menm bagay la kòm yon lòt. [Eklate son] [Gason oratè] Oh, mwen wè. Koulye a, y pwen nan plas la menm jan ak x. Se konsa, rete tann. Koulye a, y ap fiks yo. Li te gen yon pointee. Se konsa, ou ka eseye ralonj la nan dereferencing ankò nan voye sou la 13. [Binky] en, oke. Isit la ale. [Eklate son] [Gason oratè] Hey, gade nan sa. Koulye a, dereferencing travay sou y. Epi paske endikasyon yo ap pataje yon sèl pointee yo, yo tou de wè 13 la. [Binky] Yeah, pataje. Kèlkeswa. Se konsa, nou pral chanje kote kounye a? [Gason oratè] Oh gade, nou ap soti nan tan. >> [Binky] Men, - [Gason oratè] Senpleman sonje règleman yo konsèy 3. Nimewo 1, estrikti debaz la se ke ou gen yon konsèy epi li lonje dwèt sou nan yon pointee. Men, konsèy la ak pointee yo apa, ak erè kòmen an se yo mete kanpe yon konsèy men bliye bay li yon pointee. Nimewo 2, konsèy dereferencing kòmanse nan konsèy la ak swiv flèch li yo sou gen aksè a pointee li yo. Kòm nou tout konnen, sa a travay sèlman si gen yon pointee, ki kalite vin tounen nan kòmande sou nimewo 1. Nimewo 3, plasman nan konsèy pran youn konsèy ak chanje li nan pwen pointee a menm jan ak yon lòt konsèy. Se konsa, apre yo ba yo a, pwent yo 2 yo ap lonje dwèt sou pointee a menm. Pafwa ki yo rele pataje. Epi sa a, tout gen nan li vrèman. Bay-bay kounye a. Sa a se Binky. Sa a se CS50. Nou pral wè ou an semèn pwochèn. [Aplodisman] [CS50.TV]