[Daqq ta mużika] DAVID J. Malan: Kull dritt. Dan huwa CS50. U dan huwa l-bidu tal-ġimgħa 5. U kif jista 'jkollok ndunat, xi wħud mill-materjal huwa jkollna ftit aktar kumpless, il-b'densita ogħla ftit. U huwa faċli ħafna, speċjalment jekk inti ħadthom ġiet fil-drawwa għal xi żmien, li tkun qed tipprova scribble stabbiliti aktar xejn nagħmlu, aħna qed tgħid fil-klassi. Iżda jirrealizzaw, li mhuwiex forsi l-approċċ pedagoġiku ideali għat-tagħlim dan it-tip ta 'materjal, u materjal b'mod aktar ġenerali. U hekk aħna pjaċir li jħabbar Gheng li CS50 stess Gong bdiet tipprepara sett canonical ta 'noti għall-kors, l-tama ta ' li hija li, wieħed, dawn jservu mhux biss bħala referenza u riżorsa għar-reviżjoni materjal u jmorru lura permezz materjal li jista 'jkollhom maħruba inti l-ewwel darba madwar, iżda wkoll sabiex kapijiet tiegħek tista 'tkun aktar up minn isfel, meta niġu żmien biex jagħti konferenza, sabiex inti tista 'tidħol aktar thoughtfully, bħala kuntrarju aktar scribbly. Ma 'dak imsemmi, dak li inti ser issib fuq il-websajt hija tali dokumenti bħal din. U avviż, fil-quċċata xellug, hemm mhux biss tabella ta 'kontenut, iżda wkoll kodiċijiet ħin li se immedjatament jaqbżu inti għall-parti xierqa fil-online video. U dak Chang hawn għamlet huwa, essenzjalment, dokumentati dak li ġara f'dan il- partikolari lecture. U ħafna mill-lectures huma diġà online issa ma dan il-URL. U aħna ser tkompli post l-bqija ta 'dawk mill-aħħar ta' din il-ġimgħa, sabiex ma jieħdu vantaġġ ta 'dik ir-riżorsa. Allura mingħajr aktar dewmien, bdejna biex jitqaxxru lura is-saff li kien string għal xi żmien. U dak ma ngħidu string attwalment huwa aħħar ġimgħa? Star Allura char. U star char, ukoll, liema ma li verament tfisser? Ukoll, dan kollu ħin, jekk konna ilu jitlob funzjoni, bħall getString, u l-ħażna l-hekk imsejħa 'ritorn valur ta getString fil variable-- huwa msejjaħ Tip s string-- konna ġie miktub l-linja tal-kodiċi up hemm fuq. U huwa biss meta nara tiegħi kalligrafija eżaltat hawn do I jirrealizzaw kemm atroċi dan huwa. Madankollu, ejja nassumu li, fuq in-naħa tal-lemin huwa, madankollu, raġonevoli rappreżentazzjoni ta 'x'hemm ilu għaddej dan kollu ħin ma getString. getString, naturalment, gets string. Imma dak li verament ma jfisser? Dan ifisser jiġrilha blokki ta ' memorja mis-sistema operattiva billi ssejjaħ il-funzjoni, imsejħa malloc. Iżda aktar fuq dan aktar tard. U allura populates li blokki ta 'memorja bl-ittri l-utent għandu ittajpjat fil, segwit minn, naturalment, karattru null, jew backslash żero fl-aħħar ħafna. Sadanittant, fuq in-naħa tax-xellug ta 'din l-istorja, dan il-ħin, konna qed tiddikjara varjabbli, bħall-s. U dak il-varjabbli huwa dak li issa se tibda sejħa pointer. Mhuwiex kaxxa ġewwa minnhom aħna tpoġġi l-string, Daven, per se, iżda pjuttost nitfgħu f'dak kwadru kaxxa fuq ix-xellug x'inhi eżattament? Yeah? UDJENZA: L-indirizz ta ' fejn huwa jinsab fil-memorja. DAVID J. Malan: Eżattament. L-indirizz ta 'fejn Daven tinsab fil-memorja. U mhux fejn kollha ta 'Daven jinsab, per se, iżda speċifikament l-indirizz ta 'dak? Yeah? UDJENZA: L-ewwel karattru. DAVID J. Malan: L-ewwel karattru fil Daven, li, f'dan il-każ, I pproponiet kien arbitrarju u realistiċi 1, OX1, li sempliċiment tfisser il- numru hexadeċimali tal-1. Iżda huwa probabbilment se li jkun hemm numru ħafna akbar li nistgħu jiġbed bi 0x bħala prefiss, li jirrappreżenta karattru hexadeċimali. U għaliex aħna ma bżonn tkun taf fejn il-bqija tal-karattri ta 'Daven huma, minħabba dak disinn sempliċi deċiżjoni li kien sar ħafna snin ilu? Yeah? UDJENZA: Backslash 0. DAVID J. Malan: Yeah, eżattament. Il backslash 0 jippermettilek, għalkemm ħin lineari, biex travers-sekwenza, jimxu mix-xellug għal-lemin, ma 'għall-loop, jew waqt loop, jew xi ħaġa bħal li, u jiddeterminaw, oh, hawnhekk hija t-tmiem ta 'din is-sekwenza partikolari. Allura ma biss l-indirizz li l-bidu ta 'spag, nistgħu aċċess għall-intier tal- dan, għaliex dan kollu filwaqt li, string għadu kif ġie stilla char. Allura huwa ċertament multa li tkompli tuża il-librerija CS50 u dan estrazzjoni, biex ngħidu hekk, imma aħna ser tibda tara eżattament dak li kien għaddej taħtha dan iż-żmien kollu. Allura inti tista 'tfakkar dan l-eżempju, wisq, mill-aħħar darba, iqabblu 0, li ma attwalment tqabbel. Iżda aħna beda biex issolvi din. Iżda bħala forsi aġġornament, jista I interess lil xi ħadd fil iljunfant roża llum, ssir ukoll minn Chang? Kif dwarek quddiem? [Inaudible]. Come fuq up. U fil-frattemp, kif inti toħroġ, ejja jikkunsidraw għal ftit mument liema dan il-kodiċi kien fil-fatt jagħmlu. Huwa tiddikjara żewġ varjabbli up top, iu t, u ssejjaħ getString. Dan mhuwiex programm faċli għall-utent ħafna, għaliex ma jgħidlek x'għandek tagħmel. Imma ejja biss wieħed jassumi aħna qed jiffoka fuq il-parti mmerraq. U mbagħad nagħmlu, jekk i ugwali ugwali t, għandu jkun hemm printf, inti ittajpjat-istess ħaġa. Hello. X'hemm isem tiegħek? Janelle: Janelle. DAVID J. Malan: Janelle, sbieħ li jissodisfaw inti. Allura l-isfida tiegħek fuq idejn għal dan iljunfant huwa li l-ewwel jiġbed us stampa ta 'x'hemm li jkunu rrappreżentati f'dawk ewwel tnejn linji. Allura s u t jista 'jkun irrappreżentata kif fuq l-iskrin? U inti tista 'biss jiġbed ma finger tiegħek fuq dan l-iskrin big. Allura hemm żewġ nofsijiet għall kull naħa ta 'dik ekwazzjoni. Allura hemm i fuq ix-xellug, u imbagħad getString fuq il-lemin. U allura hemm t fuq ix-xellug, u mbagħad getString fuq il-lemin. Allura kif tista nibdew tpinġija stampa li jirrappreżenta x'inhu għaddej hawn fil-memorja, would you say? U let me let inti tispjega dak li qed tagħmel kif tmur. Janelle: OK. Ukoll, l-ewwel, ikun tistaqsi inti biex tikseb l-sekwenza input. U ikun store-- oh, sorry. DAVID J. Malan: OK. Tajba. U dan huwa msejjaħ liema? Oh, OK. Żomm għaddejjin. I ma jfissirx li jinterrompi. Janelle: Jiddispjacini. Għalhekk ikun input fis l-indirizz mhux of-- ċert. I ma tistax tiftakar eżattament in-numru, imma nemmen li kien jibda bl 0. DAVID J. Malan: Li kollox id-dritt, minħabba I magħmula in-numri up, hekk hemm ebda dritt risposta. Janelle: Nibdew bl-ark 0. DAVID J. Malan: OK, hekk element 0. Sure. Janelle: U mbagħad jekk kienx bħal biss ta 'żewġ letter-- DAVID J. Malan: OK, lura lilek. Janelle: Allura element 0, u imbagħad element 1 jew element 2. DAVID J. Malan: U liema biċċa ta ' l-istampa huma inti tpinġija dritt issa? Is-sejħa għall getString? Jew id-dikjarazzjoni ta 'i? Janelle: Id-dikjarazzjoni ta 'i, nemmen. Oh, il-getString, għaliex kieku jiġu inputted fis f'kull [? żona. ?] DAVID J. Malan: Tajba. Eżattament. Anke jekk dan effettivament prospetti firxa, recall, meta nikbru lura string, nistgħu indiċi f'dak string jużaw 01 u 2. Teknikament, dawn huma probabbilment irrappreżentata minn indirizzi individwali, iżda li l-multa. Allura jissoponi, jekk nista 'biss fast tibgħat lill fejn aħna jitħalla 'off aħħar darba, jekk wieħed il-kordi kien g a b e, backslash 0, li b'hekk jirrappreżentaw Gabe tal input, kif jista nirrappreżentaw s issa? Jekk dan huwa l-memorja li l- ġew irritornati minn getString? Janelle: Ikun irrappreżentat minn ark? DAVID J. Malan: Billi ark? Well, no. Ejja ngħidu biss, pictorially, let me biss jimxi 'l quddiem u nipproponi li, jekk dan huwa i, dan huwa l-valur tar-ritorn ta 'getString. U inti stajt mfassla dan bħala 0, 1, 2, li huwa perfettament raġonevoli, għaliex aħna jista indiċi fil-string, bħala tali. Iżda biss li tkun konsistenti mal- aħħar darba, let me imorru quddiem u arbitrarju nipproponi li din huwa l-indirizz 1, dan huwa l-indirizz 2, dan huwa l-indirizz 3, u ibqa 'sejjer hekk. U għalhekk, biss biex tkun super ċara, x'inhu għaddej li jmorru fl-i bħala riżultat ta 'dak ewwel linja tal-kodiċi, would you say? Janelle: Indirizz 1? DAVID J. Malan: Eżattament. Allura jindirizzaw 0x1. U sadanittant, let me imorru quddiem u duplikat ħafna ta 'dak li inti ghamilt u żid t tiegħi stess hawn. I Jekk kellhom tip fil Gabe darb'oħra, għat-tieni darba, meta imħeġġa bil getString, fejn, naturalment, huwa Gabe se jmorru? Well, presumably-- Janelle: Bħal hawn fuq? DAVID J. Malan: Yeah. Janelle: Or huwa wkoll fl-istess kaxxi? DAVID J. Malan: Let me tipproponi, yeah, eżattament, hekk f'dawn il-kaxxa addizzjonali. Imma x'hemm importanti issa huwa li, anki għalkemm stajt mfassla dawn pretty qrib together-- 0x1, dan huwa 0x2-- fir-realtà, issa dan jista 'jkun l-indirizz 0x10, per eżempju, u 0x11, u 0x12, u ibqa 'sejjer hekk. U għalhekk, jekk dan huwa l-każ, x'inhu għaddej biex jispiċċaw here f't? Janelle: 0x10? DAVID J. Malan: Eżattament. Allura 0x10. U hekk issa, kwistjoni finali. Inti għandek, bil-bosta, kellu jaħdem il- agħar għat iljunfant s'issa. Sa issa, jekk I pull up-kodiċi darb'oħra, meta I do, fil-linja tlieta, jekk i ugwali ugwali t, dak am I attwalment qabbel li konna mfassla hawn? Janelle: Iż-żewġ indirizzi? DAVID J. Malan: Eżattament. So jien tgħid huwa s ugwali ugwali għal t? Fi kliem ieħor, hija l-1 ugwali ugwali għal 10? U naturalment, l- risposta ovvja issa, l-ebda. U hekk dan il-programm huwa finalment morna għall-istampa dak, would you say? Janelle: Ikun, inti ittajpjat-istess ħaġa? DAVID J. Malan: Mela jekk i hija l-1 u t hija 10? Janelle: Inti ittajpjat affarijiet differenti. DAVID J. Malan: Eżattament. Inti ittajpjat affarijiet differenti. Kull dritt. Allura rawnd ta 'applause, jekk nistgħu, hawn. [Applause] Dan kien uġigħ. I know. Nicely jsir. Allura issa ejja ara jekk ma nkunux nistgħu tease apparti dak l-jiffissaw kien. U ovvjament, meta aħna fiss this-- li jiena ser issa jirrappreżentaw fil green-- għamilna ftit ta 'titjib hawn. L-ewwel, biss bħala sanità jivverifikaw, jien l-ewwel verifika jekk i ugwali null u t ugwali null. U biss li tkun ċara, meta jista s jew t tkun nulla fir kodiċi bħal dan? Meta jista 's jew T jkun null. Yeah? UDJENZA: [inaudible]. DAVID J. Malan: Eżattament. Jekk l-sekwenza li l-utent ittajpjat fil huwa mod wisq twil sabiex jinkwadraw fil-memorja, jew xi każ kantuniera stramb bħal dik, getString, kif Ser naraw, litteralment llum, fid-dokumentazzjoni tagħha, jgħid li se terġa 'lura null bħala valur speċjali sentinella, jew biss tip ta 'simbolu speċjali dan ifisser xi ħaġa li marret ħażin. Allura aħna tixtieq li jikkontrolla għal li, minħabba li jirriżulta li null huwa valur perikoluża ħafna. Spiss, jekk inti tipprova tagħmel xi ħaġa ma ' null jinvolvi function-- tgħaddi bħala input, għal instance-- dik il-funzjoni jista ħafna se tiġrifa u, magħha, jieħdu l-programm kollu tiegħek. Allura dan it-tielet linja issa hija biss sanità jivverifikaw, verifika żball, jekk inti se. C'est drawwa tajba issa għall li nġibu fi kwalunkwe ħin aħna jippruvaw jużaw valur li jista, potenzjalment, tkun nulla. Issa, fir-raba 'linja hawn, "Jekk strcmp (i, t)," tajjeb, X'hemm li jirreferu għall? Well, għidna dan kien konċiż ħafna funzjoni imsemmija għall-paragun string. U l-iskop tagħha fil-ħajja huwa li jitqabblu ewwel argument tagħha kontra dan it-tieni, iżda mhux f'termini ta 'l-indirizzi tagħhom, kif għamilna involontarjament mument ilu bil-kodiċi aħmar, iżda pjuttost li tqabbel dawk iż-żewġ kordi fl-umanament intuwittivi mod billi jitqabblu dan, kontra dan, kontra dan, kontra dan, u imbagħad jieqaf jekk u meta wieħed jew it-tnejn ta 'swaba tiegħi hits backslash 0. Strcmp Allura snin xi ħadd implimentati ilu biex jimplimentaw għalina l-funzjonalità li aħna ttamat għandna gotten bi ftit jitqabblu żewġ valuri sempliċi. Issa franchement, I iżommu tpinġija kollha ta 'dawn in-numri varji. Iżda r-realtà hija, stajt ġiet jagħmlu dawn il-up il-ħin kollu. U so let me biss jimxi 'l quddiem u scribble dawn jitwettqu biex jagħmel point li, fl-aħħar tal-ġurnata u jimxi 'l quddiem, aħna mhux qed verament se jimpurtahom liema jindirizza affarijiet huma attwalment fil-memorja. Hekk jien mhux ser tiġbed dawn tipi ta 'numri tant aktar, Jien biss astratt dan bogħod ftit aktar faċli ma 'biss vleġeġ. Fi kliem ieħor, jekk i huwa pointer, ukoll, ejja biss tiġbed, litteralment, bħala pointer, vleġġa li tipponta minn ruħha li xi ħaġa oħra, u ma jinkwetaw wisq aktar dwar l-dettall ta 'dawn l-indirizzi li, għal darb'oħra, I magħmula xorta waħda. Iżda aħna ser tara dawk l-indirizzi, kultant, meta debugging kodiċi. Issa sadanittant, dan il-programm up here jiffissa, naturalment, dik il-problema billi jitqabblu dawn iż-żewġ kordi. Iżda aħna dam fis problema oħra. Dan kien mill-kopja programm aħħar darba, biha, I kien qed jipprova għall-kapitalizzazzjoni biss l-ewwel karattru string. Imma dak kien il-sintomu rajna aħħar darba meta utent ittajpjat fil-valur, bħal Gabe fl lowercase, għall-i, allura aħna assenjati s fis t, bħal fil-tielet linja hemm, u mbagħad I ppruvaw kapitalizzazzjoni t bracket 0? Liema kienet l-effett ta ' jinbidlu t bracket 0 hawn? UDJENZA: Huwa biddel s. DAVID J. Malan: Yeah, I mibdula s, kif ukoll. Minħabba dak li kien verament jiġri? Well, let me ara jekk I tista 'nadif up din l-istampa, kif ġej. Jekk i huwa, għal darb'oħra, il-kelma g, a, b, e, backslash, 0, u s aħna ser tkompli tpinġija bħala kaxxa hawn, iżda mhux aktar indirizzi. Ejja tieqaf tagħmel affarijiet up. Ejja biss jiġbed stampa biex jissimplifikaw il-dinja. Meta Niddikjara t mal string t, li toħloq dik blokki ta 'memorja. Pjazza jiġri li jkun 32 bits fil-kompjuters aktar. Fil-fatt, jekk inti stajt qatt semgħu ta ' kompjuter li jkollu arkitettura 32-bit, verament fancy-jitkellmu, li biss ifisser li juża indirizzi 32-bit. U bħala tekniku aside, jekk inti stajt qatt staqsiet għaliex kompjuters anzjani, jekk inti fil-fatt ppruvaw soppa lilhom up ma 'lottijiet ta' RAM, jista 'jkollu biss massimu ta 'erba' gigabytes ta 'RAM, ukoll dan għaliex, litteralment, kompjuter qadim tiegħek jista biss jgħoddu bħala għoli daqs 4 biljun, 4 biljuni bytes, minħabba li kien qed juża 32-bit Numri għall-indirizzi. Iżda fi kwalunkwe każ, f'dan il- eżempju, l-istorja tal-ferm aktar sempliċi. t huwa biss ieħor pointer, jew verament stilla char, aka string. U kif ma nixtieq li taġġorna din l-istampa issa ma 'dik it-tieni linja tal-kodiċi, wara l-dot, dot, dot? Meta I do string t ugwali virgola s, kif ma tbiddel din l-istampa? Yeah? UDJENZA: [inaudible]. DAVID J. Malan: Yeah. Eżattament. I biss jitqiegħed vleġġa mill- t kaxxa għall-istess indirizz, l-istess ewwel ittra taw. Jew teknikament, jekk dan Guy kienu għadhom fil 0x1, huwa bħallikieku kelli 0x1 hawn u 0x1 hawn. Iżda għal darb'oħra, quién dwar l-indirizzi? Huwa biss l-idea li issa l-kwistjonijiet. Allura dan huwa dak li qed jiġri hawn. Allura naturalment, jekk inti tagħmel bracket t 0, li huwa notazzjoni array, ta course-- u franchement, huwa jistenna simili hemm firxa hawn fuq, imma issa hemm dan ħaġa stramb. Kun af li l-lingwa ta 'programmar, C, toffrilek din il-karatteristika, biha, anke jekk t hija pointer, jew i huwa pointer, inti xorta tista 'tuża dik familjari, bracket kwadru komdu Notazzjoni biex tmur l-ewwel element, jew it-tieni element, jew kwalunkwe element li din pointer huwa tipponta li minħabba, preżumibbilment, huwa huwa, bħal f'dan il-każ, tipponta lejn uħud firxa. Allura kif nistgħu jiffissaw dan? Franchement, dan huwa fejn ltqajna ftit enormi fl-ewwel daqqa t'għajn. Iżda hawnhekk hija verżjoni ġdida u mtejba. Allura l-ewwel, jien jkollna rid tal-librerija CS50, biss biex jesponu li s tabilħaqq stilla char, biss sinonimu. U t huwa wkoll stilla char. Imma dak li qed jiġri fuq il- naħa tal-lemin ta 'dik il-linja fejn t huwa assenjat valur? X'inhu malloc? Liema huwa strlen? X'inhu sizeof (char)? Għaliex l-Heck ma dan linja ħarsa tant kumplessa? X'hemm dan isir fuq livell għoli? X'hemm dan ħażna f't? Yeah? UDJENZA: Huwa allokazzjoni ta ' Ċertu ammont ta 'spazju memorja. Huwa biex jaħżnu, I raden, ittri [inaudible]. DAVID J. Malan: Perfect. Perfect. Huwa allokazzjoni ċertu ammont ta 'spazju memorja biex jaħżnu, preżumibbilment, ittri futuri. U b'mod partikolari, malloc Għalhekk huwa jirritorna liema? UDJENZA: Jirritornaw il-[inaudible]? DAVID J. Malan: Eżattament. Jirritorna l-indirizz ta 'dik memorja, li huwa mod fancy ta 'tgħid, jirritorna l-indirizz tal- ewwel byte ta 'dak memorja. L-oneru huwa fuq lili biex tiftakar kemm memorja I attwalment allokat jew talab malloc għal. Issa kemm huwa li? Well, anki jekk hemm lott ta 'parentesi hawn, malloc tieħu biss argument uniku. U jien tispeċifika strlen ta 'i, hekk jagħtu lili bħala ħafna bytes kif hemm fl-i, iżda żid wieħed. Għaliex? Yeah? UDJENZA: Il backslash 0. DAVID J. Malan: Eżattament. Imxejna ltqajna biex jagħmlu manutenzjoni ftit. Allura għaliex hemm backslash 0, aħna'd aħjar ftakar li. Inkella, aħna qed tmur biex joħolqu string li ma jkollux dik terminatur speċjali. Sadanittant, biss biex tkun super anali, I jkollhom sizeof (char), biss fil-każ li xi ħadd runs tiegħi kodiċi mhux fuq l-appliance CS50, imma forsi kompjuter differenti b'kollox fejn Chars huma byte wieħed, b'konvenzjoni, iżda tnejn bytes, jew xi ħaġa akbar minn dak. Huwa biss sabiex ikunu super, super beżgħana li żbalji. Anki jekk, fir-realtà, huwa x'aktarx se tkun ta '1. Issa, sadanittant, I imorru quddiem u kopja tal- string, parentesi t i huwa ugwali bracket t s. U jien se tiddifferixxi għall-ġimgħa li għaddiet kodiċi tas-sors biex tara x'inhu għaddej. Imma l-takeaway ewlenin, u l- raġuni I tpoġġi l-kodiċi issa fl-aħdar, huwa minħabba li ħafna aħħar linja, t bracket 0 ugwali toupper, għandha l-effett ta ' Kapitalizzazzjoni li string? t u / jew s? Din l-aħħar linja tal-kodiċi. Just t, għaliex x'hemm ġara dan iż-żmien, jekk I ftit jneħħu dik l-aħħar pass, x'hemm ġara jiġifieri, meta I-sejħa malloc, I essenzjalment nikseb blokki ta 'memorja li huwa l-istess daqs bħal-oriġinali, għaliex dan huwa l-aritmetika li għamilt. Jien ħażna f't-indirizz ta 'dik blokki ta' memorja. Anke jekk dan jistenna sbieħ u pretty, sbieħ u vojta, Ir-realtà hija hemm, hu li aħna ser iżommu ssejjaħ, il-valuri taż-żibel fil hawn. Li blokki ta 'memorja tista' ħafna ukoll ġew użati qabel, ftit sekondi, ftit minuti ilu. Allura jista 'jkun hemm assolutament numri jew ittri hemmhekk, biss mill-inċident. Imma dawn mhux qed validu, sal I myself timla din blokki ta 'memorja ma Chars attwali, bħala I tagħmel li għal loop hemmhekk. Kull dritt? Allura issa, il-quċċata ta ' dawn it-tliet eżempji li kienu apparentement maqsuma aħħar darba, dan l-eżempju Swap, din il-funzjoni ħadem fis-sens li biddlu u b. Iżda ma ħadmux fil F'liema sens ieħor? Yeah? UDJENZA: [inaudible]. DAVID J. Malan: Eżattament. I Jekk kellhom call din il-funzjoni minn another-- per eżempju, minn funzjoni bħal prinċipali, fejn I jkollhom varjabbli, X u Y, bħala I għamlet aħħar ġimgħa, l-istess kodiċi, u I jgħaddu xuy li tpartit, u mbagħad is-sejħa Swap-- dan, naturalment, hija l-verżjoni korretta huwa dak li aħna qed waslu biex see-- ma ħadmux. Allura x'inhi l-jiffissaw? Well, hekk biss biex tkun ċara, let me imorru quddiem and-- tagħti me tieni waħda hawn, u ara jekk I tista 'turi li inti l-aħħar wieħed, li se jkun in-- ejja ara jekk I tista 'ssib dan OK fast-- reali, [inaudible]. OK, hemm hu. Allura jinjora l-kmandi jien biss ittajpjar. I tixtieq li tkun irkuprata fi l-aħħar minuta eżempju mill-aħħar darba, li issa hija msejħa ebda Swap. Allura l-ebda Swap huwa fejn aħna jitħalla 'off-aħħar darba, biha, I initialized x 1 u y għal 2. I imbagħad call Swap, li jgħaddi f'1 u 2. U allura din il-funzjoni ħadem f'xi sens, imma kellu l-ebda permanenti effett fuq xu y. Għalhekk il-kwistjoni fil-idejn hija, kif issa do we attwalment jiffissaw din il-problema? X'inhi s-soluzzjoni fil-idejn? Ukoll, fil-swap.c, li huwa ġdid llum, avviż koppja ta 'differenzi. X u Y huma l-istess. Imma dak li hu b'mod ċar differenti dwar il-linja 25? X'hemm ġdid hemmhekk, jekk inti tiftakar dak li dehru qishom tieni ilu? UDJENZA: [inaudible]. DAVID J. Malan: Yeah. Allura l-ampersands huma biċċa ġdida tal sintassi mhux biss f'dan il-programm, iżda wkoll b'mod aktar ġenerali fil CS50. Sal-lum, ma naħsibx Rajna xi eżempji jew verament tkellem dwarhom fi kwalunkwe dettall, minbarra, forsi, preemptively fis-sezzjoni, l-ampersand bħal dan. Ukoll, jirriżulta ampersand huwa wieħed tal-aħħar biċċiet ta 'sintassi ġdida aħna qed tmur biex jitgħallmu. Kollha dan ifisser huwa l- indirizz ta 'xi varjabbli. Fuq liema indirizz ma x jgħixu? Imma dak l-indirizz ma y jgħixu? Għaliex jekk il- problema fundamentali qabel kien qed jingħadda li xuy bħala kopji, dak li aħna verament trid tagħmel hija tipprovdi Swap ma bħal teżor Mappa li twassal għal fejn x uy attwalment huma fil-RAM, hekk li Swap tista 'ssegwi dik mappa u mur fejn x jew y jimmarka l-post u jibdlu l-valuri attwali 1 u 2 hemmhekk. Allura Swap jeħtieġ li jinbidel xi ftit wisq. U fl-ewwel daqqa t'għajn, dan jista ' jidhru ftit simili għal star char. U tabilħaqq huwa. Allura huwa pointer għal dak it-tip ta 'data, ibbażata fuq dan il-porzjon enfasizzat? Allura huwa ta 'int. Allura m'għadhiex int, huwa l-indirizz ta 'int. U bl-istess mod, b huwa issa għaddej li jkun l-indirizz ta 'int. Allura meta I issa sejħa Swap minn Main, Jien ma jmur biex jagħtu Swap 1 u 2. Jien ser tagħtiha simili Ox-xi ħaġa u OX-xi ħaġa, żewġ indirizzi li se jwasslu Swap għall-postijiet attwali tagħhom fil-memorja tal-kompjuter tiegħi. Allura issa, implimentazzjoni jifdal tiegħi jeħtieġ li tinbidel a tad. X'hemm ovvjament differenti issa f'dawn it-tliet linji ta 'kodiċi? Hemm dawn l-istilel kkritikat kollha fuq il-post, id-dritt? Allura x'inhu għaddej hawn? Yeah? UDJENZA: Huwa ovvjament [inaudible]. DAVID J. Malan: Eżattament. Allura f'dan context-- u dan ma kienx id-deċiżjoni aħjar disinn, ċertament, snin ilu. F'dan il-kuntest, fejn inti biss għandek stilla, u inti ma għandekx tip ta 'dejta, bħal int, immedjatament lejn ix-xellug, minflok għandek sinjal ugwali, b'mod ċar, f'dan il-kuntest, meta inti tgħidli stilla a, dan ifisser jmorru għall- indirizz li fil a. Segwi l-mappa teżor, biex ngħidu hekk. U sadanittant, fil-linja 37, dan ifisser l-istess ħaġa. Mur fl-indirizz ta ', u mqiegħda liema hemmhekk? Tkun xi tkun fil- post li b jispeċifika. Fi kliem ieħor, mur biex b. Get dak il-valur. Mur fil u, kull l-ugwaljanza jiffirmaw, l-operatur assenjazzjoni, tpoġġi dak il-valur hemmhekk. Bl-istess mod, temperatura int huwa biss int. Xejn jeħtieġ li jinbidel dwar temperatura. Huwa biss ħġieġ spare minn Annenberg għal xi ħalib jew meraq tal-larinġ. Imma I do bżonn li jgħidu, mur b. Mur dik id-destinazzjoni u tpoġġi l-valur temp hemmhekk. Allura x'inhu jiġri allura? Meta I attwalment sejħa Swap dan iż-żmien, jekk dan l-ewwel trej hawn tirrappreżenta Main, dan it-tieni trej jirrappreżenta Swap, meta I jgħaddu ampersand xuy ampersand minn Main tpartit, biss biex tkun ċara, dak li huwa dan munzell frame tirċievi? Yeah? UDJENZA: [inaudible]. DAVID J. Malan: Eżattament. L-indirizz ta 'X u l-indirizz ta' y. U inti tista 'taħseb dawn bħal indirizzi postali. 33 Oxford Street u 35 Oxford Street, u inti tixtieq li jċaqalqu l-żewġ binjiet li huma f'dawn il-postijiet. Huwa tip ta 'idea redikoli, iżda li kollox aħna jfisser minn indirizz. Fejn fid-dinja tista ' issib dawn iż-żewġ ints? Fejn fid-dinja tista 'inti isibu dawn iż-żewġ binjiet? Mela jekk finalment, wara kollox dan iż-żmien I jmorru fis-kodiċi sors tal-lum u jikkumpilaw Swap u run ./swap, finalment, għall- ewwel darba do we attwalment tara li Valuri tiegħi jkollhom tabilħaqq ġie skambjat b'suċċess. U issa, nistgħu anke jieħu nota ta 'dan fil, ngħidu aħna, GDB. So let me jmorru fil-fajl istess. Let me imorru quddiem u run GDB ta ./swap. U issa, fl Swap, jien se jmorru quddiem u tistabbilixxi punt tal-qasma fil-Main. U issa jien se jmorru quddiem u tmexxi l-programm. U issa naraw kodiċi tiegħi waqfa qasira fil dik il-linja. Jekk I imorru quddiem u print x, x'għandi nara hawn? Din hija mistoqsija. Say mill-ġdid? UDJENZA: [inaudible]. DAVID J. Malan: So numri bl-addoċċ, forsi. Maybe I nikseb xxurtjati, u huwa sbieħ u sempliċi, bħal 0. Imma forsi huwa xi numru bl-addoċċ. F'dan il-każ, sibt xxurtjati. Huwa biss jiġri li jkun 0. Iżda huwa tabilħaqq Xorti, għaliex mhux sa I tip li jmiss u mbagħad print x ikollu dik linja tal-kodiċi, linja 19, ġiet eżegwita. Sadanittant, jekk I tip li jmiss darb'oħra, u issa jistampa y, jien ser tara 2. Issa, jekk I tip li jmiss, li għaddej biex jiksbu ftit konfuża, għaliex issa, l printf se jidhru fuq l-iskrin, kif għamlet. x hija l-1. Ejja nagħmlu dan mill-ġdid. U issa, hawn fejn affarijiet nikseb interessanti. Qabel I call Swap jew saħansitra pass fis dan, ejja tieħu Peek ftit. x hija, għal darb'oħra, 1. Y hija, naturalment, sanità malajr jivverifikaw, 2, u għalhekk mhux iebsa hemmhekk. Imma dak li hu ampersand x? Tweġiba, huwa tip ta 'funky tfittex. Iżda l-istilla int fil-parentesi huwa biss mod PGD ta 'tgħid dan huwa indirizz. Huwa mhux int, huwa pointer għal int, jew inkella magħruf bħala indirizz. X'inhu dan il-ħaġa crazy? Imxejna qatt dehru xi ħaġa pjuttost simili li qabel. Allura dan huwa l-indirizz fil-kompjuter tiegħi memorja ta 'fejn x jiġri li jgħixu. Hija Ox-xi ħaġa. U dan huwa, franchement, għaliex Stajt beda tpinġija vleġeġ, minflok ta 'numri, minħabba li verament jimpurtah li int tiegħek huwa fi partikulari indirizz li li big. Iżda bffff0c4, dawn huma kollha tabilħaqq ċifri hexadeċimali, li huma 0 permezz f. Allura aħna ma tkunx qed tmur biex nitkellem wisq twil fuq liema dawk l-affarijiet huma. Imma jekk I jistampa y, naturalment, nara 2. Iżda y ampersand, nara dan l-indirizz. U avviż, għall-kurjuż, kemm apparti huma xuy? Inti tista 'tinjora l-aktar tal-indirizz. Erba bytes. U li konsistenti mal tagħna qabel jsostnu li kemm hu kbir huwa int? Erba bytes. Allura jidher qisu lining kollox li up nicely, kif inti tista 'tama, fil-memorja. Allura issa, ejja biss fast quddiem sa l-aħħar ta 'din l-istorja. Ejja imorru quddiem u t-tip pass, adsa fil-funzjoni Swap. Issa avviż, jekk I tip A, huwa identiku għall-indirizz ta 'x. Jekk tip I b, huwa identiku fl-indirizz ta 'y. Allura dak għandi tara jekk I jgħidu, mur l-indirizz ta '? Allura print star a. Allura star ifisser jmorru hemm, f'dan il-kuntest. Ampersand ifisser x'inhu l-indirizz ta '. Allura istilla mezz 1. U print star b tagħti me 2. U let me tassumi, għall-mument, li mill-inqas l-kodiċi li tipproċedi biex tesegwixxi issa jista 'jkun motivata permezz ta 'fil-mod. Iżda aħna ser tirrevedi din l-idea qabel twil. Allura din il-verżjoni tal Swap huwa issa korretta u tippermetti us li tpartit dan it-tip tad-data partikolari. Mela xi mistoqsijiet imbagħad fuq Swap? Fuq star? Fuq l-indirizz ta '? U tkun taf tara, ma problema stabbiliti 4, tip ta ', iżda problema stabbiliti 5, definittivament, kif dawn affarijiet huma utli u jiksbu ħafna aktar komdu magħhom, bħala riżultat. Xejn fil-livelli kollha? Kull dritt. Allura malloc huwa, għal darb'oħra, din il-funzjoni li biss jalloka memorja, memorja allokazzjoni. U għaliex dan huwa utli? Ukoll, dan il-ħin, inti kont qed tuża malloc. Jekk inti tqis issa kif getString xogħlijiet, preżumibbilment, huwa ġew tistaqsi lil xi ħadd għal blokki ta ' memorja, ghaċ-tipi utent string fil, għaliex aħna ċertament ma kinitx taf, bħala persunal CS50, kif dawk kordi big li l-bnedmin ser tip jista 'jkun. Mela ejja, għall-ewwel darba, jibdew Qaxxar kif jaħdem il-librerija CS50, permezz ta 'koppja ta' eżempji li se iwassalna hemmhekk. Mela jekk jien jiftħu gedit u jiftħu scanf 0, aħna qed tmur biex tara d-kodiċi li ġejjin. Scanf 0, disponibbli fuq il-websajt għall- llum, għandha relattivament ftit linji tal-kodiċi hawn, 14 sa 20. U ejja ara dak li qed jagħmel. Hija tiddikjara int, imsejħa x. Hija tgħid xi ħaġa simili, numru jogħġbok. U issa jgħid, scanf% i, & x. Allura hemm mazz ta 'għalf ġdid hemmhekk. Iżda scanf, inti tista 'tip ta' jaħsbu bħala l-oppost ta 'printf. printf, naturalment, prints għall-iskrin. sort scanf tal scans mill-utent tal- xi ħaġa keyboard hu jew hi jkun ittajpjat. % I huwa bħad printf. Dan ifisser jistennew li l- utent biex tip AN int. U issa, għaliex taħseb I jista 'jkun li tgħaddi scanf & x? Jekk l-iskop fil-ħajja ta 'scanf huwa li tikseb xi ħaġa mill-utent, x'inhi t-tifsira ta ' jgħaddiha, & x, issa? Yeah? UDJENZA: [inaudible]. DAVID J. Malan: Eżattament. Tkun xi tkun I, il-bniedem, it-tip fil, input tiegħi se jiġu ffrankati f'dak il-post. Mhuwiex biżżejjed, tfakkar, għal ftit jgħaddu x, għaliex aħna stajt tidher diġà, kwalunkwe ħin li inti tgħaddi biss varjabbli prima, bħal int, għal xi funzjoni oħra, ċert, li tista 'tibdel dik varjabbli, imma mhux b'mod permanenti. Ma jistax jkollhom effett fuq Main. Hija tista 'biss tibdel kopja lokali tiegħu stess. Iżda jekk, minflok, inti ma tagħti me l-int attwali, imma inti tagħti me direzzjonijiet li int, I issa, qed scanf, żgur, I tista 'ssegwi dik jindirizzaw u tpoġġi numru hemmhekk hekk ikollok aċċess għaliha kif ukoll. Allura meta I run dan il-programm, ejja ara. Jagħmlu scanf 0 dot mmejla, scanf 0. U jekk I issa tip numru bħall 50, grazzi għall-50. Jekk I issa tip numru bħal negattiv 1, għall-negattiv 1. I issa tip numru bħall 1.5, hm. Għaliex ma tiegħi program jinjora lili? Well, għaliex sempliċiment, I told li tistenna int biss. Kull dritt. Allura dak verżjoni waħda ta 'din. Ejja jieħdu l-affarijiet up a talja u nipproponi li din mhix tajba. U hawnhekk tinsab eżempju sempliċi ħafna ta 'kif nistgħu tibda bil-miktub kodiċi li nies oħra tista 'tisfrutta jew kompromess billi tagħmel affarijiet ħżiena. Allura linja 16, hekk simili fl-ispirtu li qabel, imma jien ma tiddikjarah int f'dan il-ħin. Jien li tiddikjaraha bħala star char, aka string. Imma dak li verament ma jfisser? Mela jekk jien ma jispeċifika address-- u Jien ssejjaħ dan arbitrarju, buffer, imma I tista 'sejħa hija s, li jkun simple-- u mbagħad I do dan, tispjega lill me, jekk inti tista ', ibbażata fuq il-preċedenti loġika, dak li huwa scanf tagħmel fil-linja 18, jekk jgħaddu% s u buffer, li huwa indirizz? X'inhu scanf, jekk inti tapplika l- istess loġika eżatt bħal verżjoni 0, ser jipprova jagħmel hawnhekk, meta l-xi ħaġa tipi utent fl? Yeah? UDJENZA: [inaudible]. DAVID J. Malan: Eżattament. Scanf, mill-loġika ta 'qabel, huwa ser jieħu l-sekwenza li l-ttajpjata bniedem in-- huwa issa string, mhuwiex numru, preżumibbilment, jekk hu jew hi cooperates-- u li għaddej biex tipprova tpoġġi dan string fil-memorja fi kwalunkwe indirizz buffer jispeċifika. U dan huwa kbir, għaliex buffer tabilħaqq maħsub biex ikun indirizz. Imma I titlob dan il-programm huwa Buggy fil mod serju ħafna, għaliex dak valur huwa buffer kontumaċja? Liema kienu I initialized fis? Liema blokki ta 'memorja? I ma jkunux, id-dritt? Allura anke jekk stajt allokat star char thats m'għadhomx imsejħa s, minflok sejjaħ, buffer-- hekk ejja jiġbed isem tal-varjabbli tal- issa bħala buffer-- jekk ikolli ma imsejħa getString jew malloc hawn, li effettivament ifisser li buffer hija biss ftit valur żibel. Issa dak ma jfisser? Dan ifisser li jien qallek scanf li jistennew string mill-utent. U inti taf liema? Tkun xi tkun dan il-ħaġa hija li tipponta to-- u I tfassal mark kwistjoni, iżda fir-realtà, li għaddej biex tkun xi ħaġa bħal OX1, 2, 3, id-dritt? Huwa xi valur fittizji li biss jiġri li jkun hemm minn qabel. Allura fi kliem ieħor, huwa bħallikieku buffer huwa biss tipponta lejn xi ħaġa fil-memorja. Għandi l-ebda idea dak. Mela jekk jien tip fil Gabe issa, li għaddej biex tipprova tpoġġi g-a-b-e / 0 hemmhekk. Imma min jaf dak li hu? U fil-passat, xi żmien konna ppruvaw tmissx memorja li ma jappartjenix lilna, dak li ġara? Jew kważi kull darba. Tort Segmentazzjoni, id-dritt? Din il-vleġġa, għandi l-ebda idea fejn huwa tipponta. huwa biss xi valur każwali. U ovvjament, jekk inti tinterpreta valur każwali bħala indirizz, int se jmorru biex xi destinazzjoni każwali. Allura Gabe ċertament jista crash programm tiegħi f'dan il-każ hawnhekk. Allura x'nistgħu nagħmlu dan huwa kważi bħala ħżiena? Ikkunsidra dan it-tielet u Eżempju finali ta scanf. Din il-verżjoni huwa aħjar fir F'liema sens? Jekk inti komdu ma 'l- problema preċedenti, dan huwa aħjar. Għaliex? UDJENZA: [inaudible]. DAVID J. Malan: Tajba. Allura f'dan il-każ tal-linja 16 hija aħjar, fis-sens li aħna qed espliċitament allokazzjoni xi memorja. Aħna mhux qed tuża malloc, aħna qed jużaw il-ġimgħa 2 approċċ ta 'ftit tiddikjara firxa. U aħna ħadthom qal qabel li string huwa biss firxa ta 'karattri, għalhekk dan huwa totalment leġittimu. Imma hija, naturalment, bħala inti nota, id-daqs fiss, 16. Allura dan il-programm huwa totalment sikur, jekk tip I f'qatet twal karattru wieħed, b'żewġ karattri kordi, 15 sekwenzi ta 'karattri. Imma malli I tibda ittajpjar 16, 17, 18, 1,000 sekwenzi ta 'karattri, fejn dak string ser jispiċċaw? Huwa ser jispiċċaw parzjalment here. Iżda mbagħad li jaf x'iktar huwa lil hinn mill-konfini ta 'dan array partikolari? Huwa bħallikieku stajt ddikjarati 16 kaxxi hawn. Allura minflok jiġbed out kollha 16, aħna ser biss nippretendu li stajt mfassla 16. Imma jekk jien mbagħad jippruvaw biex taqra string thats ħafna itwal, bħal 50 karattru, Jien ser tibda tqegħid a, b, c, d, x, y, z. U dan huwa preżumibbilment xi segment memorja ieħor li, għal darb'oħra, jista 'jikkawża programm tiegħi li jikkraxxja, għaliex stajt ma talab għal xejn aktar milli sempliċiment 16 bytes. Allura quién? Well, hawn l-librerija CS50. U l-aktar ta 'dan huwa biss bħall-istruzzjonijiet top up. Il-librerija CS50, dan il-ħin, kellu din il-linja fil-linja 52. Rajna typedef, jew se tara typedef fil pset 4, li biss joħloq sinonimu biha star char tista 'tkun aktar sempliċiment imsemmija bħala string. Allura dan huwa wieħed mill- roti ta 'taħriġ ftit konna użati segretament taħt il-barnuża. Sadanittant, hawnhekk l-funzjoni, getchar. Issa apparentement, hemm ebda korp li lilha. U fil-fatt, jekk I iżommu scrolling, I ma attwalment tara xi implimentazzjonijiet ta 'dawn il-funzjonijiet. Bħala kontroll sanità, għaliex huwa li? UDJENZA: [inaudible]. DAVID J. Malan: Yeah. Allura dan huwa l-fajl header. U fajls header fihom prototipi, flimkien ma 'xi għalf ieħor, jidher, bħal typedefs. Iżda fil CS50.c, li aħna ħadthom qatt tak kollox, iżda kien fil-appliance CS50 kollha dan iż-żmien, fil-fond ġewwa ta 'folders tagħha, avviż li hemm sħiħa mazz ta 'funzjonijiet fil hawn. Fil-fatt, ejja iscroll. Ejja jinjora ħafna minnhom, għal issa. Iżda iscroll biex getInt u tara kif getInt taħdem. Allura hawnhekk huwa getInt. U jekk inti qatt verament kkurati kif tikseb int taħdem, hawnhekk huwa d-dokumentazzjoni tagħha. U fost l-affarijiet li jgħid huwa jgħidlek dak li l-firxiet ta 'valuri li jistgħu jirritornaw. Huwa essenzjalment negattiva 2 biljuni għall-pożittiv 2 biljun, jagħtu jew jieħu. U jirriżulta, dan kollu żmien, anke jekk aħna qatt ma stajt kellha inti tiċċekkja għal dan, jekk xi ħaġa tmur ħażin, jirriżulta li kollha dan iż-żmien, getInt għandha ġie jirritornaw speċjali kostanti, mhux null, iżda pjuttost int_max, li hija konvenzjoni biss programmer. Dan ifisser hawnhekk huwa valur speċjali. Kun żgur li tiċċekkja għal dan, biss fil-każ xi ħaġa tmur ħażin. Iżda aħna qatt ma stajt bothered ma 'dak sal-lum, minħabba darb'oħra, dan huwa maħsub biex jissimplifika. Imma kif ma getInt nikseb implimentati? Ukoll, wieħed, hija tieħu l-ebda argumenti. Aħna nafu li. Hija jirritorna int. Aħna nafu li. Allura kif taħdem taħt il-barnuża? Allura apparentement hemm xi infinita loop, mill-inqas l-apparenza ta 'wieħed. Avviż li aħna qed jużaw getString. Allura li interessanti. getInt jitlob funzjoni tagħna stess, getString. U issa għaliex jista dan ikun il-każ? Why am I qed difensiva hawn fil-linja 165? Liema jista 'jiġri fil-linja 164, biss biex tkun ċara? Huwa l-istess risposta bħal qabel. Jista 'jkun biss barra ta' memorja. Xi ħaġa tmur ħażin ma getString, konna ltqajna biex ikunu jistgħu jimmaniġġjaw dan. U r-raġuni I ma jirritornawx null hija li, teknikament, nulla huwa pointer. getInt għandu jirritorna l int. So I stajt arbitrarjament iddeċieda, essenzjalment, li 2 biljun, jagħtu jew jieħu, huwa għaddej li tkun valur speċjali li nista qatt fil-fatt tikseb mill-utent. Huwa biss il-valur wieħed jien ser għall-iskart li jirrappreżentaw kodiċi żball. Allura issa, l-affarijiet jiksbu fancy ftit. U huwa pjuttost mhux l-istess funzjoni bħal qabel, iżda huwa simili ħafna. So avviż, niddikjara hawn, f'konformità 172, kemm n int u char c. U mbagħad I jużaw din il-linja funky, sscanf, li jirriżulta ma scan string mill-keyboard. Inhi string eżistenti li l-utent diġà ittajpjat fil. So I diġà imsejħa getString, li ifisser I jkollhom string fil-memorja. sscanf huwa dak youd sejħa funzjoni parsing. Hija tħares lejn l-sekwenza stajt ittajpjat fil, karattri minn karattru, u ma xi ħaġa utli. Dan string hija maħżuna fil-linja. U naf li biss billi tmur back up hawn u qal, oh, OK, I sejħitilha ma s dan iż-żmien, iżda linja. U issa dan huwa xi ftit differenti. Iżda dan effettivament ifisser, għal raġunijiet aħna ser kemmxejn mewġa idejn tagħna lejn llum, li aħna verifika biex ara jekk l-utent ittajpjat fil u int u forsi karattru ieħor. Jekk l-utent ittajpjat fi int, huwa ser jiġi maħżun fil n, għaliex jien tgħaddi dan billi indirizz, l- trick ġdid Rajna llum. Jekk l-utent ittajpjat wkoll fil 123x simili, li x se jispiċċaw ta ' ittra fil-karattru c. Issa jirriżulta li sscanf se tell me, intelliġenti, kemm varjabbli kien sscanf b'suċċess kapaċi li jimlew. Allura billi din il-loġika, jekk il-funzjoni Jien implimentazzjoni huwa getInt, imma jien iċċekkjar, potenzjalment, għall-utent li ittajpjat fi int segwit minn xi ħaġa oħra, liema do Irrid tal sscanf valur tar-ritorn tassew tkun? Jekk l-għan huwa li tikseb biss int mill-utent? Mela jekk sscanf prospetti 2, dak ma jfisser? L-utent ittajpjat fil xi ħaġa simili, litteralment, 123x, li huwa biss nonsense. Huwa ta 'kundizzjoni żball, u Irrid sabiex jikkontrolla għal dak. Mela jekk it-tipi utent dan, billi din il-loġika, dak ma sscanf ritorn, would you say? Allura li għaddej biex jirritornaw 2, minħabba l-123 se jmorru fil hawn, u l-x se jispiċċaw fil hawn. Imma jien ma jridu li l-x li tikseb mimlija. Irrid li sscanf biss tirnexxi fil timla l-ewwel 'varjabbli tagħha. U hekk hu għalhekk li I tixtieq sscanf li jirritornaw 1. U jekk dan huwa daqsxejn fuq ir-ras għall-mument, li l-totalment multa. Tirrealizza madankollu, li wieħed mill- valuri ta 'getInt u getString huwa li aħna qed tagħmel Heck ta ' lott ta 'verifika żball bħal dan hekk li, sal-lum, inti tista pretty ħafna tip xejn keyboard tiegħek, u aħna se qabda. U aħna ċertament, l- persunal, se definittivament mhux tkun is-sors ta 'bug fil tiegħek programm, għaliex aħna qed defensively verifika għall kollha ta 'l stupid affarijiet li utent tista 'tagħmel, bħal ittajpjar string, meta int verament riedu int. Allura għal now-- aħna ser jaslu lura għal dan qabel long-- iżda dan il-ħin, getString u getInt jkollhom Kien taħt il-barnuża li jużaw dan idea bażika ta 'indirizzi tal-memorja. Allura issa, ejja tagħmel affarijiet ftit aktar faċli għall-utent. Kif inti tista 'recall, minn Binky aħħar time-- jekk ġurdien tiegħi se cooperate-- hekk kellna dan il-kodiċi, li franchement, huwa pjuttost tagħmel sens. Dan il-kodiċi tikseb xejn utli, iżda kien l-eżempju li professur Parlante użat sabiex jirrappreżenta dak li kien għaddej fil- programm li jinvolvi memorja. Mela ejja retell dan istorja fil-qosor super. Dawn l-ewwel żewġ linji, b'mod Ingliż, do dak, would you say? Biss fil raġonevolment bniedem, iżda ftit termini tekniċi, tieħu stab. UDJENZA: [inaudible]. DAVID J. Malan: OK, int tistabbilixxi indirizzi għal x tiegħek u varjabbli y. Mhux pjuttost, minħabba x u y mhumiex varjabbli fis-sens tradizzjonali. X u Y huma l-indirizzi jew ser taħżen indirizz. Mela ejja jippruvaw dan darba aktar. Mhux bidu bad, għalkemm. Yeah? UDJENZA: [inaudible]. DAVID J. Malan: Tajba. Naħseb li cleaner ftit. Tiddikjara żewġ pointers, żewġ interi. U aħna qed titlob minnhom xuy. Jew jekk konna biex tiġbed dan bħala stampa, għal darb'oħra, jfakkru sempliċement li kollha li aħna qed tagħmel ma 'dak l-ewwel linja hija tpinġija kaxxa bħal dan, ma 'xi valur żibel fiha, u ssejjaħ dan x, u mbagħad ieħor kaxxa bħal dan, ma 'xi valur żibel fiha, ssejjaħ dan y. Imxejna ddikjarat żewġ pointers li finalment ser taħżen l-indirizz ta 'int. Allura li kollox hemm. Allura meta Binky għamlet dan, il- tafal biss ħares bħal dan. U Nick biss tip ta ' jitgeżwer l-vleġeġ, bħallikieku dawn mhux qed tipponta kullimkien b'mod partikolari, għaliex qed biss Valuri taż-żibel. Dawn mhux qed initialized espliċitament kullimkien b'mod partikolari. Issa l-linja li jmiss ta ' kodiċi, irtirar, kien dan. Għalhekk fl raġonevolment faċli għall-utent, iżda Ingliż kemmxejn tekniku, dak li huwa din il-linja tal-kodiċi tagħmel? Yeah? UDJENZA: [inaudible]. DAVID J. Malan: Perfect. Huwa allokazzjoni tal-blokki ta 'l- memorja li l-daqs ta 'int. U li nofs ir-risposta. Weġibt id-dritt nofs l-espressjoni. Dak li qed jiġri fuq il- naħa tax-xellug tas-sinjal ugwali? Yeah? UDJENZA: U jassenja lill-varjabbli x? DAVID J. Malan: u tassenja lill-varjabbli x. Allura biex terġa, jalloka naħa tal-lemin memorja biżżejjed biex jaħżnu int. Iżda malloc speċifikament jirritorna l-indirizz ta 'dik blokki ta' memorja, li inti stajt kif ipproponiet gets maħżuna fil x. Allura dak Nick għamlet aħħar darba bl Binky huwa huwa mkaxkra li pointer out, il-tafal, għall-punt issa fil blokki abjad ta 'memorja li huwa ugwali għad-daqs ta 'int. U fil-fatt, li kien ifisser biex jirrappreżentaw erba bytes. Issa, il-linja li jmiss tal-kodiċi ma dan, star x gets 42. Allura 42 huwa sempliċi fuq il- naħa tal-lemin, tifsira tal-ħajja. Naħa tax-xellug idejn, star x ifisser liema? Li wisq jista 'jkollhom gone-- thats OK. OK. UDJENZA: Bażikament, mur l-[inaudible] DAVID J. Malan: Tajba. UDJENZA: [inaudible]. DAVID J. Malan: Eżattament. Naħa tax-xellug tan-naħa ifisser mur x. x hija indirizz. Huwa simili 33 Oxford Street, jew OX1. U star x ifisser tmur f'dak jindirizzaw u mqiegħda liema hemmhekk? 42. Allura fil-fatt, dan huwa eżattament dak Nick għamlet. Huwa beda bil minn, essenzjalment, mentalment tipponta subgħajha lejn x, wara l-vleġġa għall-kaxxa bajda fuq il-lemin naħa, u t-tqegħid-numru 42 hemmhekk. Imma mbagħad l-affarijiet ltqajna ftit perikoluża, id-dritt? Tal Binky dwar li jitilfu kap tiegħu. Y Star ugwali 13, xortih ħażina, ifisser liema? Allura mezzi y star tmur għall-indirizz y. Imma dak huwa l-indirizz y? Kull dritt, huwa valur żibel, id-dritt? I ġibdet bħala kwistjoni mark. Nick ġibdet bħala vleġġa indivja up. U hekk kif inti tipprova do y star, qal jmorru hemm, iżda ma jkunx hemm leġittimu indirizz, huwa xi post fittizji, il-programm għaddej li jikkraxxja. U ras Binky huwa għaddej li jtajru off hawn, kif għamlet. Għalhekk fl-aħħar, dan il-programm kien biss difett out fissa. Kien programm Buggy. U hemm bżonn li tiġi ffissata. U l-uniku mod, verament, biex jiffissaw dan tkun, per eżempju, din il-linja, li aħna ma anki jiksbu għal, għaliex il-programm ġġarraf wisq malajr. Imma jekk konna biex jiffissaw dan, dak effett ma tagħmel y x indaqs jkollhom? Ukoll, huwa essenzjalment punti y fuq ikun x'ikun il-valur x hija li tipponta lejn. Għalhekk fl-istorja Nick, jew storja Binky tal, kemm X u Y kienu tipponta lejn l-blokki abjad tal-memorja, b'tali mod li, finalment, meta inti do istilla y ugwali 13 darb'oħra, inti tispiċċa tqegħid 13 fil il-post xieraq. Allura kollha ta 'dawn il-linji huma perfettament leġittimu, ħlief għal dan wieħed, meta tkun seħħet qabel ma inti attwalment assenjat y xi valur. Issa Thankfully, inti ma għandek raġuni kollha permezz ta 'dawn it-tipi ta' kwistjonijiet fuq tiegħek. Let me imorru quddiem u tiftaħ up tieqa terminal hawn u jiftħu, għal ftit mument, programm super qasir li wkoll huwa tip ta inutli. Huwa ikrah. Hija ma jiksbu xejn utli. Iżda dan ma juri kwistjonijiet tal-memorja, so ejja tagħti ħarsa. Main, super sempliċi. Hija apparentement tappella funzjoni, f, u mbagħad jirritornaha 0. Huwa tip ta 'diffiċli biex mess dan up. Allura Main hija pjuttost tajba, s'issa. Allura f hija problematika. U biss ma poġġiex ħafna sforz fis tismija hawn, li jżomm il-fokus fuq il-kodiċi. f għandha żewġ linji. U ejja tara x'inhu issa għaddej. Allura fuq naħa waħda here-- u let me jagħmlu dan konsistenti mal-preċedenti example-- fuq naħa waħda, in-naħa tax-xellug huwa tagħmel dak, bl-Ingliż? Hija is-- UDJENZA: Ħolqien ta 'pointer. DAVID J. Malan: Ħolqien ta 'pointer għal int u ssejjaħ dan x. Allura huwa ħolqien wieħed minn dawn il-kaxxi I iżommu tpinġija fuq il-touch screen. U issa, fuq il-lemin naħa, malloc, naturalment, qed jalloka blokki ta 'memorja. U biss li jkun ċar, kif memorja ħafna huwa apparentement allokazzjoni, jekk inti biss tip ta 'jagħmlu l-matematika hawn? Allura huwa 40 bytes. U naf li biss għaliex naf li int, fuq l-appliance CS50, għall-inqas, huwa erba bytes. Allura 10 darbiet 4 huwa 40. Allura dan huwa ħażna ta x,-indirizz ta 'l-ewwel barra' 40 ints li ġew allokati spazju lura, biex lura, biex lura, lura. U dan huwa x'hemm ewlieni dwar malloc. Hija ma tieħu memorja ftit hawn, ftit hawn, ftit hawn. Dan jagħtik chunk wieħed ta 'memorja, contiguously, mill-operattiva sistema. Issa dak dwar dan, x bracket 10 egwali għal 0? Linja arbitrarja tal-kodiċi. Hija ma jiksbu xejn utli. Iżda huwa interessanti, minħabba x bracket 10--? Yeah? UDJENZA: [inaudible]? DAVID J. Malan: x bracket 10 ma għandhom ikunu null. Il-dettal null tidħol biss fis-play ma kordi, fit-tmiem ta string. Iżda riflessjoni tajba. Kemm hi kbira din array, anke għalkemm stajt allokat 40 bytes? Huwa 0 permezz ta 'disa, id-dritt? Huwa 10 ints, total. 40 bytes, iżda 10 ints, indiċjati 0 permezz 0. Allura dak hu li x bracket 10? Huwa fil-fatt xi valur żibel mhux magħruf. Huwa memorja li ma jappartjenix lili. I m'għandhomx ikunu jmissu li numru 41, 42, 43, 44 byte. Jien ser kemmxejn wisq. U fil-fatt, jekk I run dan programm, jista 'tajjeb ħafna crash. Imma kultant, aħna ser nikseb xxurtjati. U hekk biss biex juru this-- u franchement, int qatt ma taf qabel do it-- ejja run dan. Hija ma attwalment crash. Imma jekk nibdel dan, għal Pereżempju, li jkun simili 1,000, biex jagħmlu dan verament deliberat, ejja ara jekk nistgħu ġġibu li jikkraxxja dan iż-żmien. OK, hija ma crash. Kif dwar 100,000? Ejja remake, u issa terġa dan. OK. Phew. Kull dritt. Allura apparentement, għal darb'oħra, dawn segmenti ta 'memorja, biex ngħidu hekk, huma raġonevolment big, sabiex inkunu nistgħu jiksbu xxurtjati darb'oħra u għal darb'oħra. Imma eventwalment, ladarba inti tikseb redikoli u verament jmorru barra ħafna fuq l-iskrin, inti touch memorja li verament, verament ma jappartjenix lilek. Iżda franchement, dawn tipi ta 'bugs huma għaddejjin li jkun aktar diffiċli u aktar diffiċli biex insemmu fuq tiegħek. Iżda Thankfully, bħala programmaturi, għandna għodod li jippermettu magħna biex jagħmlu dan għalina. Allura dan huwa, forsi, wieħed tal-programmi ugliest, anke uglier milli l-produzzjoni GDB tal. Iżda dejjem għandha linja jew tnejn li huma super utli. Valgrind huwa programm li jgħin inti mhux debug programm, per se, iżda ssib relatati mal-memorja problemi, speċifikament. Hija se awtomatikament run kodiċi tiegħek għall inti u jfittxu għal mill-inqas żewġ affarijiet. Wieħed, ma inti tagħmel xi ħaġa aċċidentali bħal memorja touch li ma kienx jappartjeni lilek? Dan ser jgħinek issib dawk il-każijiet. U tnejn, hija se tgħin biex issib xi ħaġa imsejħa tnixxijiet memorja, li għandna kompletament injorati, naively, għal xi żmien u blissfully. Iżda jirriżulta, kollha dan iż-żmien, kull meta inti stajt imsejħa getString fl tant ta 'programmi tagħna, int tistaqsi l operattiva sistema għall-memorja, imma għandek xi rikollizzjoni ta 'dejjem jtuha lura, tagħmel unalloc, jew ħielsa, kif huwa msejjaħ. Le, għaliex aħna qatt ma stajt talab li inti tagħmel hekk. Iżda dan kollu ħin, il-programmi inti ħadthom ġie miktub fl C ġew jnixxu memorja, titlob lill-operattiva sistema għal aktar u aktar memorja għall-kordi u whatnot, iżda qatt għoti lura. U issa dan huwa daqsxejn ta 'oversimplification, imma jekk inti stajt qatt run Mac tiegħek jew PC tiegħek għal żmien pjuttost twil, il-ftuħ lottijiet ta 'programmi, forsi għeluq programmi, u anki jekk tiegħek kompjuter ma ġġarraf, huwa jkollna hekk ħafna aktar kajman, daqslikieku huwa verament użu ta 'lott ta' memorja jew riżorsi, anki jekk, jekk int ma anki jmissu l-keyboard, li jistgħu be-- iżda mhux always-- setgħux jkun li l-programmi int taħdem infushom tnixxijiet memorja. U dawn iżommu tistaqsi l-OS aktar u memorja aktar, iżda jinsa dwar dan, mhux attwalment tużah, imma għalhekk qegħdin jieħdu memorja bogħod minn programmi oħra li tista 'tixtieq dan. Allura dak spjegazzjoni komuni. Issa hawn fejn l Valgrind output huwa kompletament atroċi għal dawk inqas u aktar komdi bl-istess mod. Iżda l-interessanti Jittieħed huwa dritt up here. Huwa javżak me jiktbu invalidu ta daqs erba jiġri f'dan il-programm, b'mod partikolari, fil-linja 21 tat memory.c. Jekk immur għal-linja 21, hm, hemm tabilħaqq huwa tikteb invalidu d-daqs erbgħa. Għaliex daqs erba? Ukoll, dan number-- u jista 'jkun anything-- huwa int. Allura huwa erba 'bytes. So jien tqegħid erba 'bytes fejn dawn ma jappartjenux. Dak hu Valgrind huwa attwalment javżak me. Barra dan, se wkoll tell me, kif Ser naraw, kif inti tmexxi dan fil pset futur, jekk u meta inti stajt nixxew memorja, li tabilħaqq I jkollhom, għaliex stajt imsejħa malloc, imma jien ma attwalment sejjaħ, f'dan il-każ, b'xejn, li aħna ser eventwalment tara huwa l-oppost ta 'malloc. Allura issa, I think, eżempju finali. Allura dan wieħed huwa ftit aktar arcane, iżda huwa forsi l-akbar raġuni biex tkun attenta mal-memorja, u r-raġuni li ħafna programmi u / jew servers mill-web, anki għal din il-ġurnata, huma meħuda mill guys ħżiena x'imkien fuq l-internet li b'xi mod huma jibgħat pakketti taparsi biex server tiegħek jippruvaw kompromess kontijiet tiegħek, jew jieħdu data tiegħek, jew biss ġeneralment tieħu f'idejha magna. Overflow buffer, bħala l- isem jissuġġerixxi, mezzi overflowing mhux int, iżda buffer. U buffer huwa biss mod fancy ta 'tgħid huwa mazz ta' memorja. U fil-fatt, I imsejħa string qabel buffer, minflok i. Għaliex jekk huwa buffer, bħal fis-sens YouTube, jew kwalunkwe ħin inti qed jaraw a video, inti tista raw l-buffering kelma, dot, dot, dot. Huwa oerhört annoying. U dan ifisser biss li l-video player tiegħek qed tipprova tniżżel lottijiet ta 'bytes, lottijiet ta' bytes minn video mill-internet. Imma hija bil-mod, hekk huwa tipprova biex tniżżel mazz ta 'minnhom biex timla buffer, kontenitur, b'tali mod li inti għandek bytes biżżejjed li tista 'mbagħad nuruk l-video, mingħajr jieqaf kontinwament. Iżda jirriżulta, inti tista ' jkollhom buffer għal din big. Iżda tipprova tpoġġi din id-data ħafna fl dan, u ħafna affarijiet ħżiena jista 'jiġri. Allura per eżempju, ejja nħarsu lejn dan teaser finali ta 'eżempju. Dan huwa programm ieħor li, ewwel daqqa t'għajn, ma tagħmel xejn super utli. Huwa ltqajna funzjoni Main li s-sejħiet dik il-funzjoni, f. U dik il-funzjoni, f, up here, għandha firxa char, imsejħa c, ta 'daqs 12. U allura huwa jużaw dan funzjoni ġdida msejħa strncpy. Jirriżulta li, ma 'dan sempliċi, linja sempliċi ta 'kodiċi, biss żewġ linji, għamilna programm kollu tiegħi, u għalhekk, kompjuter kollu tiegħi, u kont ta 'utent tiegħi, u hard tiegħi issuq potenzjalment vulnerabbli għal kulħadd li jaf u hija tajba biżżejjed biex imexxu dan il-programm ma 'ċerta linja ta' kmand argument. Fi kliem ieħor, jekk dan Guy ħażina tpoġġi ġewwa tal argvargv [1] billi jittajpja fuq il-keyboard ħafna apposta crafted string, mhux abc, 123, iżda essenzjalment, simboli binarja li jirrappreżentaw eżekutibbli kodiċi, programm li hu jew hi kitbet, ma dan il-programm sempliċi, li hija rappreżentattiv ta 'eluf ta' programmi li huma simili vulnerabbli, daresay, hu jew hi jista 'finalment titħassar kull l-fajls fuq hard drive tiegħi, jiksbu Teptip fil-pront sabiex hu jew hi tista ' tip jikkmanda fuq tagħhom stess, email fajls kollha li myself. Kwalunkwe ħaġa li I jistgħu jagħmlu, huwa jew hi tista 'tagħmel ma' dan il-kodiċi. Aħna mhux se pjuttost issolvi dan suġġett s'issa. U fil-fatt, li għaddej biex jinvolvu stampa ftit bħal dan, li aħna ser dalwaqt jaslu biex jifhmu l-aħjar. Iżda għal-lum, ejja jintemm fil- x'hemm, wieħed jittama, kemmxejn aktar Joke XKCD jinftiehem, sakemm aħna jerġa ħin li jmiss. Kull dritt. Ara inti nhar l-Erbgħa. [Daqq ta mużika] SPEAKER: U issa, fil-fond ħsibijiet, billi Daven Farnham. Memorja huwa simili jaqbeż f'gozz ta ' weraq tad-deheb fuq Ħadd wara nofsinhar. Riħ nfiħ, tossing tiegħek hair-- oh, I miss-ġranet when-- [Rires]