[Powered by Google Translate] [Sezzjoni 4 - aktar komdi] [Rob Bowden - Università ta 'Harvard] [Dan huwa CS50. - CS50.TV] Għandna għada kwizz, fil-każ inti guys ma kinitx taf li. Huwa bażikament fuq kollox inti tista raw fil-klassi jew suppost li jidhru fil-klassi. Li tinkludi pointers, anki jekk dawn qed tema riċenti ħafna. Għandek inqas jifhmu l-livelli għolja ta 'minnhom. Kwalunkwe ħaġa li kienet marret fuq fil-klassi għandek tifhem għall-kwizz. Mela jekk għandek mistoqsijiet dwar minnhom, inti tista 'titlobhom issa. Iżda dan se jkun hemm sessjoni ferm student mmexxija fejn inti guys jistaqsu mistoqsijiet, hekk nisperaw nies ikollhom mistoqsijiet. Ħadd ma jkollu mistoqsijiet? Iva. >> [Student] Tista 'tmur fuq pointers mill-ġdid? I ser tmur fuq pointers. Kollha ta 'varjabbli tiegħek neċessarjament jgħixu fil-memorja, iżda ġeneralment inti ma joqogħdu jinkwetaw dwar dan u inti biss jgħidu x + 2 u + 3 y u l-kumpilatur se insemmu fejn l-affarijiet qed jgħixu għalik. Ladarba inti qed jittrattaw ma pointers, issa int espliċitament tuża dawk l-indirizzi tal-memorja. Allura varjabbli waħda biss qatt jgħixu f'indirizz wieħed fi kwalunkwe ħin partikolari. Jekk irridu li tiddikjara pointer, liema huwa t-tip se look like? Irrid li tiddikjara p pointer. Xi jfisser it-tip look like? [Student] int * p. >> Yeah. Allura int * p. U kif nista 'tagħmel dan punt li x? >> [Student] ampersand. [Bowden] Mela ampersand huwa litteralment msejjaħ l-indirizz tal-operatur. Allura meta I say & x huwa jkollna l-indirizz tal-memorja ta 'l-x varjabbli. Allura issa għandi l-pointer p, u kullimkien fl kodiċi tiegħi nista 'nuża * p jew I jistgħu jużaw x u ​​se jkun l-istess ħaġa eżatt. (* P). X'inhu dan tagħmel? Xi jfisser dan star jfisser? [Student] Dan ifisser valur f'dak il-punt. >> Yeah. Mela jekk inħarsu lejn din, jista 'jkun utli ħafna biex jiġbed l-dijagrammi fejn dan huwa kaxxa ftit ta 'memorja għal x, li jiġri li jkollhom il-valur 4, allura għandna ftit kaxxa ta 'memorja għall-p, u għalhekk il-punti p sa x, hekk aħna jiġbed vleġġa minn p għal x. Allura meta ngħidu * p aħna qed tgħid tmur għall-kaxxa li hija p. Star hu li ssegwi l-vleġġa u allura kulma trid ma 'dik il-kaxxa hemm dritt. Allura nista 'ngħid * p = 7; u li se jmorru għall-kaxxa li hija x u bidla li sa 7. Jew nista 'ngħid int z = * p * 2; Li konfuża għaliex huwa stilla, stilla. L-istilla wieħed huwa dereferencing p, l-istilla ieħor huwa mmultiplikat bi 2. Avviż I jista 'jkollhom biss kif ukoll post il-p * ma x. Inti tista 'tużahom bl-istess mod. U mbagħad aktar tard I jista 'jkollhom punt p għal xi ħaġa kompletament ġdida. I tista 'biss jgħidu p = &z; Allura issa p ebda punti aktar lejn x; hija tfakkar li z. U kull darba nagħmel * p huwa l-istess kif tagħmel z. Allura l-ħaġa utli dwar dan huwa darba nibdew jkollna fis funzjonijiet. Huwa tip ta 'inutli li tiddikjara pointer li l-punti għal xi ħaġa u allura int biss dereferencing dan meta inti jista 'jkun użat il-varjabbli oriġinali li tibda bil. Imma meta ikollok fis funzjonijiet - so ejja ngħidu li għandna xi funzjoni, int foo, li tieħu pointer u biss ma * p = 6; Bħal rajna qabel ma tpartit, inti ma tistax tagħmel tpartit effettiva u funzjoni separata bi ftit tgħaddi interi għaliex kollox fis-C huwa dejjem tgħaddi minn valur. Anke meta int tgħaddi pointers int tgħaddi minn valur. Huwa biss hekk jiġri li dawk il-valuri huma indirizzi memorja. Allura meta I say foo (p); jien tgħaddi l-pointer fil-funzjoni foo u mbagħad foo qed tagħmel * p = 6; Allura ġewwa ta 'dik il-funzjoni, * p għadu ekwivalenti għal x, I iżda ma tistax tuża x ġewwa ta 'dik il-funzjoni għaliex mhuwiex scoped fi ħdan dik il-funzjoni. Allura * p = 6 huwa l-uniku mod I tista 'aċċess varjabbli lokali minn funzjoni oħra. Or, ukoll, pointers huma l-uniku mod I tista 'aċċess varjabbli lokali minn funzjoni oħra. [Istudent] Ejja ngħidu li inti riedu li jirritornaw pointer. Kif eżattament do inti tagħmel dan? [Bowden] Ritorn pointer bħal fil xi ħaġa simili int y = 3; ritorn & y? >> [Student] Yeah. [Bowden] Okay. Inti qatt ma għandhom jagħmlu dan. Dan huwa ħażin. I think I raw f'dawn slides lecture bdejt tara dan dijagramma kollu ta 'memorja fejn up hawn inti stajt ltqajna l-indirizz tal-memorja 0 u 'l isfel hawn ikollok l-indirizz tal-memorja 4 gigs jew 2 għall-32. Mela allura inti stajt ltqajna xi għalf u xi għalf u mbagħad għandek munzell tiegħek u inti stajt ltqajna borġ tiegħek, li inti biss bdiet tagħlim dwar, jikbru. [Student] Mhix-borġ fuq il-munzell? Yeah. Il-munzell hu fuq, hux? >> [Student] Ukoll, huwa poġġa 0 fuq nett. [Student] Oh, huwa poġġa 0 fuq nett. >> [Student] Oh, okay. Disclaimer: Kullimkien mal CS50 int ser tara dan il-mod. >> [Student] Okay. Huwa biss li meta int l-ewwel tara stacks, bħal meta taħseb ta 'munzell taħseb ta stivar affarijiet fuq quċċata ta' xulxin. Allura għandna t-tendenza li flip dan madwar sabiex il-munzell hu jikbru bħal munzell normalment kieku minflok il-munzell jiddendlu 'l isfel. >> [Student] Do mhux munzelli teknikament jikbru wisq, għalkemm? Hija tiddependi fuq dak li jfisser bi jikbru. Il-munzell u borġ dejjem jikbru f'direzzjonijiet opposti. A munzell hu dejjem jikbru fis-sens li huwa jikbru lejn indirizzi ogħla memorja, u l-borġ qed jikber isfel fis-sens li dejjem tikber lejn l-indirizzi tal-memorja aktar baxxi. Allura l-quċċata hija 0 u l-qiegħ huwa l-indirizzi tal-memorja għolja. Huma qed kemm tikber, biss f'direzzjonijiet opposti. [Student] I biss kien ifisser li minħabba li inti qal inti tpoġġi munzell fuq il-qiegħ minħabba li din tidher aktar intuwittivi għaliex għall-munzell li tibda fil-quċċata ta 'borġ, munzell l fuq quċċata ta nnifisha wisq, hekk that's - >> Yeah. Għandek ukoll jaħsbu tal-borġ bħala jikbru u akbar, iżda l-munzell aktar hekk. Allura l-munzell huwa dak li aħna tip ta 'tixtieq li juru jikbru. Imma kullimkien inti tfittex inkella se juri indirizz 0 fil-quċċata u l-indirizz tal-memorja ogħla fil-qiegħ, għalhekk dan huwa minħabba tas-soltu tiegħek ta 'memorja. Għandek xi mistoqsija? [Student] Tista 'tgħidilna aktar dwar il-munzell? Yeah. I ser jiksbu għal dak fit-tieni. L-ewwel, li tmur lura għal għaliex jirritornaw & y hija ħaġa ħażina, fuq il-munzell għandek mazz ta 'frejms munzell li jirrappreżentaw il-funzjonijiet kollha li ġew imsejħa. Allura jinjora l-affarijiet ta 'qabel, il-quċċata tal-munzell tiegħek huwa dejjem se tkun il-funzjoni prinċipali peress li l-funzjoni ewwel li l-jiġu msejħa. U allura meta inti sejħa funzjoni oħra, il-munzell hu ser jikbru l isfel. Mela jekk jien sejħa xi funzjoni, foo, u jiġrilha frejm tagħha munzell stess, hija tista 'tirrikorri xi funzjoni, bar; jiġrilha frejm tagħha munzell stess. U bar jistgħu jkunu rikursivi u jista 'sejħa nnifisha, u sabiex tieni sejħa għall-bar huwa se tikseb frejm tagħha munzell stess. U għalhekk dak li tmur fil dawn il-frejms munzell huma il-varjabbli kollha lokali u kollha ta 'l-argumenti funzjoni li - Kwalunkwe affarijiet li huma lokalment scoped għal din il-funzjoni tmur fil dawn il-frejms munzell. Allura dan ifisser meta għidt xi ħaġa bħal bar hija funzjoni, Jien biss ser tiddikjara integer u mbagħad jirritornaw pointer għal dak numru sħiħ. Għalhekk, fejn ma y jgħixu? [Student] y jgħix fil-bar. >> [Bowden] Yeah. X'imkien f'din kwadru ftit tal-memorja huwa kwadru littler li għandha y fiha. Meta I lura & y, jien jirritornaw pointer għal dan il-blokk ftit tal-memorja. Iżda mbagħad meta jerġa 'lura funzjoni, il-qafas munzell tagħha gets popped off-munzell. U hu għalhekk li huwa msejjaħ munzell. Huwa bħall-istruttura tad-data munzell, jekk taf dak li hu. Jew anki qisha munzell ta 'dixxijiet huwa dejjem l-eżempju, ewlieni huwa se jmorru fuq il-qiegħ, allura l-funzjoni ewwel inti sejħa se jmorru fuq quċċata ta 'dan, u inti ma tistax terġa 'lura għal main sakemm inti tirritorna minn kull funzjonijiet li jkunu ġew imsejħa li jkunu tqiegħdu fuq quċċata ta 'dan. [Student] Mela jekk inti ma tagħmel lura l-y &, dak il-valur huwa suġġett għal bidla mingħajr avviż. Iva, it's - >> [student] Jista 'jkun jinkiteb fuqhom. >> Yeah. Huwa kompletament - Jekk inti tipprova u - Dan ikun ukoll ta 'bar * int, għaliex dan huwa jirritorna pointer, hekk tip ritorn tiegħu huwa * int. Jekk inti tipprova tuża l-valur tar-ritorn ta 'din il-funzjoni, huwa imġieba mhux definiti minħabba li pointer jindika memorja ħażina. >> [Student] Okay. Allura dak li jekk, per eżempju, inti ddikjarat int * y = malloc (sizeof (int))? Dak aħjar. Iva. [Student] Aħna tkellimna dwar kif meta aħna drag affarijiet li riċiklu bin tagħna dawn mhux qed attwalment mħassra; aħna biss jitilfu pointers tagħhom. Allura f'dan il-każ nistgħu attwalment tħassar il-valur jew hija għadha hemm fil-memorja? Għall-parti l-kbira, li għaddej biex jibqa 'hemm. Imma ejja ngħidu aħna jiġri li sejħa xi funzjoni oħra, baz. Baz hija se tikseb frejm tagħha munzell stess hawn fuq. Huwa ser jiġi kitba fuq kollha ta 'dan il-għalf, u mbagħad jekk inti aktar tard tipprova u jużaw il-werrej li inti ltqajna qabel, mhuwiex ser tkun l-istess valur. Huwa ser inbidlu biss għaliex inti imsejjaħ il-baz funzjoni. [Student] Imma ma aħna ma, kieku aħna xorta jiksbu 3? [Bowden] Fil-probabbiltà kollha, inti. Imma inti ma tistax tibbaża ruħha fuq dan. C biss jgħid imġieba mhux definiti. [Student] Oh, ma. Okay. Allura meta inti tixtieq li jirritornaw pointer, din hija fejn malloc tidħol fl-użu. Jien bil-miktub attwalment biss jirritorna malloc (3 * sizeof (int)). Aħna ser jmorru fuq malloc aktar fit-tieni, iżda l-idea ta 'malloc hija kollha ta' varjabbli lokali tiegħek dejjem tmur fuq il-munzell. Kwalunkwe ħaġa li l-malloced tmur fuq il-borġ, u se dejjem u dejjem tkun fuq il-munzell sakemm inti espliċitament ħielsa minnha. Allura dan ifisser li meta inti malloc xi ħaġa, li għaddej biex jgħix wara l-prospetti funzjoni. [Student] Se jkampawx wara l-programm tieqaf taħdem? >> No Okay, hekk li għaddej biex tkun hemm sakemm il-programm huwa it-triq kollha magħmula running. >> Iva. Aħna tista 'tmur fuq dettalji ta' dak li jiġri meta l-programm tieqaf taħdem. Jista 'jkollok bżonn biex ifakkru lili, iżda li hija ħaġa separata għal kollox. [Student] Mela malloc joħloq pointer? >> Yeah. Malloc - >> [student] Naħseb malloc tinnomina blokk ta 'memorja li pointer jistgħu jużaw. [Bowden] Irrid li dijagramma mill-ġdid. >> [Student] Mela din il-funzjoni xogħlijiet, għalkemm? [Student] Yeah, malloc jindika blokk ta 'memorja li tista' tuża, u mbagħad jirritorna l-indirizz ta 'l-ewwel blokk ta' dak memorja. [Bowden] Yeah. Allura meta inti malloc, int ħtif xi blokk ta 'memorja dan huwa attwalment fil-borġ. Jekk il-borġ huwa żgħir wisq, allura l-borġ huwa biss se jikbru, u li tikber f'din id-direzzjoni. Mela ejja ngħidu l-borġ huwa żgħir wisq. Imbagħad huwa dwar li jikbru ftit u r-ritorn pointer għal dan il-blokk li biss kiber. Meta inti Jittieħed ħielsa, int tagħmel aktar spazju fil-borġ, hekk allura aktar tard sejħa biex malloc jistgħux jerġgħu li l-memorja li inti qabel kienu meħlusa. Il-ħaġa importanti dwar malloc u ħieles huwa li jagħtik kontroll sħiħ matul il-ħajja ta 'dawn il-blokok tal-memorja. Varjabbli globali huma dejjem ħajjin. Varjabbli lokali huma ħajjin fl-ambitu tagħhom. Hekk kif inti tmur passat Brace kaboċċi, il-varjabbli lokali huma mejta. Memorja Malloced huwa ħaj meta inti tixtieq li jkunu ħajjin u mbagħad huwa rilaxxat meta inti tgħid li din tiġi rilaxxata. Dawk huma attwalment l-uniċi 3 tipi ta 'memorja, verament. Hemm awtomatiku memorja ġestjoni, li huwa l-munzell. Things jiġri għalik awtomatikament. Meta inti tgħidli int x, memorja huwa allokat għall-x int. Meta x tmur barra mill-iskop, il-memorja huwa reklamati għall x. Imbagħad hemm dinamiku memorja ġestjoni, li huwa huwa malloc dak, li huwa meta inti għandek kontroll. Inti dinamiku jiddeċiedu meta memorja għandhom jew m'għandhomx jiġu allokati. U allura hemm statiku, li sempliċiment ifisser li jgħix għal dejjem, li huwa dak varjabbli globali huma. Huma qed biss dejjem fil-memorja. Mistoqsijiet? [Student] Tista tiddefinixxi blokk biss bl-użu ċineg kaboċċi imma li ma jkollhiex li jkollhom? jekk id-dikjarazzjoni jew dikjarazzjoni waqt jew xi ħaġa bħal dik Inti tista 'tiddefinixxi blokk kif fil-funzjoni, iżda li għandha braces kaboċċi wisq. [Student] Allura inti tista 'mhux biss ikollu bħal par każwali ta' ċineg kaboċċi fil-kodiċi tiegħek li għandhom varjazzjonijiet lokali? >> Iva, inti tista '. Ġewwa tal-bar int jista 'jkollna {int y = 3;}. Li suppost tkun dritt hawn. Iżda li kompletament jiddefinixxi l-ambitu ta 'int y. Wara li Brace kaboċċi 2, y ma jistgħux jintużaw aktar. Inti kważi qatt ma tagħmel dan, għalkemm. Getting lura għal dak li jiġri meta programm jintemm, hemm tip ta 'gidba kunċett żbaljat / nofs li nagħtu sabiex biss tagħmel affarijiet eħfef. Aħna jgħidlek li meta inti jallokaw memorja int talloka ftit blokki ta 'RAM għal dak varjabbli. Imma int ma verament jolqot direttament RAM qatt fil-programmi tiegħek. Jekk taħseb minnha, kif I ġibdet - U fil-fatt, jekk inti tmur permezz fil GDB int ser tara l-istess ħaġa. Indipendentement minn kif ħafna drabi inti tmexxi programm tiegħek jew dak il-programm qed taħdem, il-munzell hu dejjem se tibda - int dejjem se tara varjabbli madwar xi ħaġa oxbffff indirizz. Huwa ġeneralment x'imkien f'dak ir-reġjun. Imma kif tista '2 programmi possibbilment ikollu indikazzjonijiet li l-memorja istess? [Student] Hemm xi nomina arbitrarja ta 'fejn oxbfff suppost tkun fuq il-RAM li jista 'attwalment jiġi f'postijiet differenti li jiddependu fuq meta l-funzjoni kienet imsejħa. Yeah. It-terminu huwa memorja virtwali. L-idea hija li kull proċess wieħed, kull programm uniku li tkun qed taħdem fuq il-kompjuter tiegħek għandha tagħha stess - ejja nassumu 32 bit - ispazju indirizz kompletament indipendenti. Dan huwa l-ispazju indirizz. Hija stess kompletament indipendenti tagħha 4 gigabytes għall-użu. Mela jekk inti tmexxi 2 programmi simultanjament, dan il-programm jara 4 gigabytes għalih innifsu, dan il-programm jara 4 gigabytes għalih innifsu, u huwa impossibbli għal dan il-programm biex dereference pointer u tispiċċa bil-memorja minn dan il-programm. U dak memorja virtwali huwa huwa immappjar minn spazju indirizz proċessi għall-affarijiet attwali fuq RAM. Allura huwa sa sistema operattiva tiegħek li tkun taf li, ħej, meta dan Guy dereferences pointer oxbfff, li verament ifisser li jrid RAM byte 1000, billi jekk dan oxbfff dereferences programm, hu verament jixtieq RAM byte 10000. Huma jistgħu jkunu arbitrarjament bogħod. Dan huwa minnu anki ta 'affarijiet fi spazju indirizz wieħed proċessi. Allura bħal jidhrilha kollha gigabytes 4 għalih innifsu, imma ejja ngħidu - [Student] Il f'kull proċess wieħed - Ejja ngħidu ikollok kompjuter bil biss 4 gigabytes ta 'RAM. Ma kull proċess wieħed jara l-sħiħ 4 gigabytes? >> Iva. Iżda l-gigabytes 4 li jqis hija jimteddu. Huwa biss jidhirlu li għandu dan kollu memorja minħabba li ma jafux xi proċess ieħor jeżisti. Hija se jużaw biss memorja kemm fil-fatt għandha bżonn. Is-sistema operattiva mhux se tagħti RAM għal dan il-proċess jekk mhuwiex tuża kwalunkwe memorja f'dan ir-reġjun kollu. Huwa mhux ser tagħtiha memorja għal dak ir-reġjun. Iżda l-idea hija li - jien jippruvaw biex jaħsbu - I cannot think ta 'analoġija. Analoġiji huma diffiċli. Waħda mill-kwistjonijiet ta 'memorja virtwali jew waħda mill-affarijiet huwa soluzzjoni huwa li l-proċessi għandhom ikunu kompletament konxji ta 'xulxin. U għalhekk inti tista 'tikteb xi programm li biss dereferences kwalunkwe pointer, simili biss jiktbu program li tgħid * (ox1234), u li l-dereferencing memorja indirizz 1234. Iżda huwa f'idejn l-sistema operattiva li mbagħad tittraduċi dak 1234 mezz. Mela jekk 1234 jiġri li jkun l-indirizz tal-memorja valida għal dan il-proċess, bhalu fuq il-munzell jew xi ħaġa, allura dan se jirritorna l-valur ta 'dak l-indirizz tal-memorja safejn il-proċess jaf. Imma jekk 1234 mhuwiex indirizz validu, bħal ma jiġri l-art f'xi biċċa ftit tal-memorja hawnhekk li hija lil hinn mill-munzell u lil hinn mill-borġ u int ma verament użati li, allura li meta ikollok affarijiet simili segfaults għax int jmissu memorja li inti m'għandekx tkun tmiss. Dan huwa veru wkoll - Sistema 32-bit, 32 bit tfisser ikollok 32 bits biex jiddefinixxu l-indirizz tal-memorja. Huwa għalhekk li pointers huma 8 bytes għaliex 32 bits huma 8 bytes - jew 4 bytes. Pointers huma 4 bytes. Allura meta tara pointer bħal oxbfffff, jiġifieri - Fi ħdan kull programm partikolari inti tista 'sempliċement tibni xi pointer arbitrarja, kullimkien minn ox0 għall ox 8 f's - ffffffff. [Student] Ridt ma inti tgħid li qed 4 bytes? >> Yeah. [Student] Mbagħad kull byte se jkollu - >> [Bowden] hexadeċimali. Hexadecimal - 5, 6, 7, 8. Allura pointers int ser dejjem tara f'hexadecimal. Huwa biss kif aħna jikklassifikaw pointers. Kull ċifri 2 ta 'hexadeċimali huwa 1 byte. Allura hemm għaddej li jkun 8 numri hexadecimal għal 4 bytes. Allura kull pointer waħda fuq sistema 32-bit se tkun 4 bytes, li jfisser li fil-proċess tiegħek inti tista 'tibni xi arbitrarji 4 bytes u jagħmlu pointer barra minnu, li jfisser li safejn huwa konxju, jista 'jindirizza 2 kollu lill-bytes 32 tal-memorja. Anki jekk ma verament ikollhom aċċess għal dan, anki jekk il-kompjuter tiegħek biss għandha 512 megabytes, jidhirlu li jkun li l-memorja ħafna. U s-sistema operattiva tkun intelliġenti biżżejjed li din tikkonċerna biss talloka dak li attwalment bżonn. Ma jmurx biss, oh, proċess ġdid: 4 gigs. Yeah. >> [Student] X'jagħmel il-ox jfisser? Għaliex tikteb dan? Huwa biss is-simbolu għall-hexadeċimali. Meta tara bidu għadd ma ox, l-affarijiet suċċessivi huma hexadeċimali. [Student] Inti ġew tispjega dwar dak li jiġri meta programm jintemm. >> Iva. X'jiġri meta programm jintemm hija s-sistema operattiva biss erases l mappings li hija għandha għal dawn l-indirizzi, u li hu. Is-sistema operattiva tista 'issa biss jagħtu li l-memorja għal programm ieħor għall-użu. [Student] Okay. Allura meta inti jalloka xi ħaġa fuq il-borġ jew il-varjabbli munzell jew globali jew xejn, dawn kollha biss jisparixxu malli l-programm jintemm għaliex is-sistema operattiva hija issa ħielsa li jagħtu li l-memorja għal kwalunkwe proċess ieħor. [Student] Anki jekk hemm probabbilment għadu valuri miktubin? >> Yeah. Il-valuri huma probabbli għadhom hemm. Huwa biss li għaddej biex tkun diffiċli biex tikseb lejn lilhom. Huwa ħafna aktar diffiċli li tinkiseb fil minnhom milli huwa li tikseb fil-fajl imħassar minħabba t-tip fajl imħassar ta tiltaqa hemm għal żmien twil u l-hard drive hija ħafna akbar. Allura huwa għaddej biex jissostitwixxu partijiet differenti tal-memorja qabel ma jiġri li jissostitwixxu l-blokki ta 'memorja li dan il-fajl jintuża biex tkun fuq. Iżda memorja prinċipali, RAM, inti ċiklu permezz ħafna aktar malajr, hekk li għaddej biex malajr ħafna jinkitbu fuqhom. Mistoqsijiet dwar din jew xi ħaġa oħra? [Student] Għandi mistoqsijiet dwar tema differenti. Okay. >> Ħadd ma jkollu mistoqsijiet dwar dan? Okay. Differenti suġġett. >> [Student] Okay. I kienet għaddejja xi wħud mill-testijiet prattika, u wieħed minnhom huwa kien jitkellem dwar il-sizeof u l-valur li jmur lura jew tipi varjabbli differenti. >> Iva. U qal li kemm int u fit-tnejn ritorn 4, allura jkunu kemm bytes 4 twil. Hemm xi differenza bejn int u fit-tul, jew hija l-istess ħaġa? Iva, hemm differenza. L-istandard C - Jien probabbilment se mess up. L-istandard C huwa biss bħal dak Ċ hija, id-dokumentazzjoni uffiċjali ta 'C. Dan huwa dak li jgħid. Allura l-istandard C biss jgħid li char se dejjem u dejjem tkun l-1 byte. Kollox wara li - fil-qosor huwa dejjem biss ddefinit bħala li tkun ikbar minn jew ugwali għal char. Dan jista 'jkun strettament ikbar minn, iżda mhux pożittiv. L int huwa biss definit bħala li tkun ikbar minn jew ugwali għal qasir. U twil huwa biss definit bħala li tkun ikbar minn jew ugwali għal int. U fit-tul huwa aktar minn jew ugwali għal twil. Allura l-unika ħaġa l-istandard C jiddefinixxi l-ordni relattiva ta 'kollox. L-ammont attwali tal-memorja li l-affarijiet jibdew huwa ġeneralment sa implimentazzjoni, iżda huwa pjuttost definita sew f'dan il-punt. >> [Student] Okay. Allura shorts huma kważi dejjem se jkunu 2 bytes. Ints huma kważi dejjem se jkunu 4 bytes. Twal twal huma kważi dejjem se jkunu 8 bytes. U twal, li jiddependi fuq jekk inti qed tuża 32-bit jew sistema 64-bit. Allura twil se jikkorrispondu għall-tip ta 'sistema. Jekk inti qed tuża sistema 32-bit bħall-Appliance, li għaddej biex tkun 4 bytes. Jekk inti qed tuża 64-bit simili ħafna ta 'kompjuters reċenti, li għaddej biex tkun 8 bytes. Ints huma kważi dejjem 4 bytes f'dan il-punt. Twal twal huma kważi dejjem 8 bytes. Fil-passat, ints użati biex ikunu biss 2 bytes. Iżda avviż li din kompletament tissodisfa kollha ta 'dawn ir-relazzjonijiet ta' aktar minn u ugwali għal. Sakemm huwa perfettament li għandhom jiġu permessi l-istess daqs bħala numru sħiħ, u huwa wkoll permess li jkun l-istess daqs bħal fit-tul. U huwa biss hekk jiġri li jkun li fil 99.999% ta 'sistemi, huwa se jkun ugwali għal la int jew twil twil. Huwa biss tiddependi fuq 32-bit jew 64-bit. >> [Student] Okay. Fil sufruni, kif huwa l-punt deċimali indikat f'termini ta 'bits? Bħal kif binarja? >> Yeah. Inti ma għandekx bżonn tkun taf li għal CS50. Inti ma jitgħallmu li fl-61. Inti ma jitgħallmu li verament fi kwalunkwe kors. Huwa biss rappreżentazzjoni. I tinsa l-assenjazzjonijiet bit eżatti. L-idea tal-punt f'wiċċ l-ilma huwa li inti jallokaw numru speċifiku ta 'bits sabiex jirrappreżenta - Bażikament, kollox huwa notazzjoni xjentifika. Allura inti talloka numru speċifiku ta 'bits biex jirrappreżentaw in-numru innifsu, bħal 1.2345. I qatt ma jista 'jirrappreżenta numru bi numri aktar minn 5. Imbagħad inti wkoll talloka numru speċifiku ta 'bits b'tali mod li t-tendenza li jkun simili inti tista 'biss tmur sa ċertu numru, bħal dak l-esponent akbar inti jista' jkollhom, u inti tista 'biss tmur isfel għal esponent ċerti, bħal dan huwa l-esponent iżgħar inti jista 'jkollhom. I ma tiftakarx l-bits mod eżatti huma assenjati għall kollha ta 'dawn il-valuri, iżda ċertu numru ta 'bits huma ddedikati għall 1.2345, ieħor ċertu numru ta 'bits huma ddedikati għall-esponent, u huwa biss possibbli li jirrappreżentaw esponent ta 'ċertu daqs. [Student] U doppja? Hija li bħal float twil żejda? >> Yeah. Hu l-istess ħaġa bħala float ħlief issa inti qed tuża 8 bytes minflok 4 bytes. Issa inti ser tkun tista 'tuża 9 numri jew 10 numri, u dan se jkun jista 'jitla' sa 300 minflok 100. >> [Student] Okay. U sufruni huma wkoll 4 bytes. >> Iva. Ukoll, għal darb'oħra, hija probabbilment jiddependi ġenerali fuq l-implimentazzjoni ġenerali, iżda sufruni huma 4 bytes, jirdoppja huma 8. Doubles huma msejħa doppju minħabba li huma doppju tad-daqs ta 'sufruni. [Student] Okay. U huma hemmhekk doppja jirdoppja? >> Ma jkunx hemm. Naħseb - >> [student] Bħall twal twal? >> Yeah. Jien ma naħsibx. Iva. [Student] Fuq it-test tas-sena l kien hemm mistoqsija dwar il-funzjoni ewlenija wara li jkun parti mill-programm tiegħek. It-tweġiba kienet li ma għandhom ikunu parti mill-programm tiegħek. F'liema sitwazzjoni? Dan huwa dak li rajt. [Bowden] Jidher - >> [student] Liema sitwazzjoni? Għandek il-problema? >> [Student] Yeah, I jistgħu definittivament pull it up. Ma għandhom ikunu, teknikament, imma bażikament li għaddej biex tkun. [Student] Rajt wieħed fuq l-sena differenti. Kien bħal Veru jew Falz: A validu - >> Oh, fajl c.? . [Student] Kull file għandu jkollu ċ - [kemm jitkellmu f'daqqa - mhux intelliġibbli] Okay. Allura dak separat. A fajl c. Biss jeħtieġ li jkollhom funzjonijiet. Tista 'jikkompilaw fajl fis-kodiċi magna, binarju, tkun xi tkun, mingħajr ma jkun eżegwibbli s'issa. A eżekutibbli validu għandu jkollu funzjoni prinċipali. Tista 'tikteb 100 funzjonijiet 1 fajl iżda l-ebda ewlenin u mbagħad jiġbru l isfel għall binarju, allura inti tikteb fajl ieħor li għandha biss prinċipali iżda hija tappella mazz ta 'dawn il-funzjonijiet f'dan il-fajl binarju hawn fuq. U hekk meta int tagħmel il-eżekutibbli, dan huwa dak l-linker ma huwa li tgħaqqad dawn il-fajls binarji 2 fi eżekutibbli. Allura fajl c. Ma jeħtieġx li jkollhom funzjoni ewlenija fil-livelli kollha. U fuq bażijiet kodiċi kbar tkun taf tara eluf ta 'fajls c. U 1 fajl prinċipali. Mistoqsijiet Aktar? [Student] Ma kien hemm mistoqsija oħra. Huwa qal tagħmel huwa kompilatur. Veru jew Falz? U r-risposta kienet falza, u I mifhum għaliex mhuwiex simili clang. Imma dak li nsejħu jagħmluha jekk huwa ma? Għamla huwa bażikament biss - I jista 'jara eżattament dak li jitlob dan. Iżda hija biss tmur jikkmanda. Għamla. I tista 'pull dan up. Yeah. Oh, yeah. Kun wkoll ma dan. Dan jgħid il-għan tal-utilità għamla huwa li jiddetermina awtomatikament liema biċċiet ta 'programm kbir jeħtieġ li jiġu recompiled u joħroġ l-kmandi li recompile lilhom. Inti tista 'tagħmel tagħmel fajls li huma assolutament enormi. Agħmel tħares lejn il-ħin timbri ta 'fajls u, bħal għidna qabel, inti tista 'tiġbor fajls individwali isfel, u mhuwiex sakemm ikollok l-linker li dawn qed jitqiegħdu flimkien fi eżekutibbli. Mela jekk għandek 10-fajls differenti u inti tagħmel bidla għal 1 minnhom, allura dak għamla se tagħmel huwa biss recompile li 1-fajl u mbagħad relink kollox flimkien. Iżda huwa ħafna dumber minn dak. Huwa sa inti biex kompletament tiddefinixxi dak li huwa dak li għandha tkun qiegħda tagħmel. Hija b'mankanza għandu l-abbiltà li jirrikonoxxu dan il-għalf timbru iż-żmien, imma int tista 'tikteb fajl għamla li tagħmel xejn. Tista 'tikteb jagħmel fajl hekk li meta inti tip tagħmel biss l-cd għall-ieħor tad-direttorju. I kien jkollna frustrati għaliex kollox tindi I ġewwa tal Appliance tiegħi u mbagħad I tara l-PDF mill-Mac. So I mur Finder u nista do Go, Connect biex Server, u s-server I jgħaqqdu l huwa Appliance tiegħi, u mbagħad I tiftaħ il-PDF li gets miġbura minn latex. Imma I kien jkollna frustrati għaliex kull wieħed ħin I meħtieġa biex tiffriska l-PDF, I kellha kopja għal direttorju speċifiku li jista 'jkollhom aċċess u kien jkollna annoying. Allura minflok I kiteb fajl għamla, li inti għandek biex jiddefinixxu kif tagħmel l-affarijiet. Kif inti tagħmel f'dan huwa PDF latex. Eżatt bħal kull fajl għamla oħra - jew I raden inti ma bbenefikawx l-fajls għamla, iżda aħna għandna fil-Appliance fajl għamla globali li biss jgħid, jekk inti jinġabar il-fajl C, l-użu clang. U hekk hawn fil-fajl għamla tiegħi li nagħmel jien ngħid, dan il-fajl inti qed tmur jridu jikkompilaw ma PDF latex. U dan huwa latex PDF li qed jagħmel l-kompilazzjoni. Għamla mhix kumpilazzjoni. Huwa biss running dawn il-kmandijiet fis-sekwenza I speċifikat. Għalhekk runs latex PDF, huwa kopji lill-direttorju nixtieq li din tkun ikkupjata lill- huwa cd għall-direttorju u ma affarijiet oħra, iżda kollox ma huwa jirrikonoxxi meta bidliet fajl, u jekk tbiddel, allura se jimxu l-kmandi li huwa suppost li jimxu meta l-bidliet fajl. >> [Student] Okay. I do not know meta l-fajls għamla globali huma għalija biex jiċċekkjaw it out. Mistoqsijiet oħra? Xejn mill-passat kwizzijiet? Kwalunkwe affarijiet pointer? Hemm affarijiet sottili li jkollhom werrejja simili - Jien mhux ser ikunu jistgħu jsibu mistoqsija kwizz fuqha - iżda biss bħal dan it-tip ta 'ħaġa. Kun żgur li tifhem li meta ngħidilhom INT * x * y - Dan mhux eżattament xejn hawn, I raden. Iżda bħal * x * y, dawn huma 2-varjabbli li huma fuq il-munzell. Meta I say x = malloc (sizeof (int)), x għadu varjabbli fuq il-munzell, malloc xi blokk fuq fil-borġ, u qed ikollna punt x l-borġ. Allura xi ħaġa fuq il-punti munzell għall-borġ. Kull meta inti malloc xejn, int inevitabbilment maħżuna ġewwa ta 'pointer. Allura li pointer huwa fuq il-munzell, il-blokk malloced huwa fuq il-borġ. Ħafna nies jiksbu konfuż u jgħidu int * x = malloc; x huwa fuq il-borġ. No Liema x jindika huwa fuq il-borġ. x innifsu huwa fuq il-munzell, sakemm għal kwalunkwe raġuni inti x 'jkun fattur varjabbli globali, f'liema każ dan jiġri jkun f'reġjun ieħor tal-memorja. Allura iżżomm rekord, dawn dijagrammi kaxxa u l-vleġġa huma pjuttost komuni għall-kwizz. Jew jekk mhuwiex fuq kwizz 0, se tkun fuq kwizz 1. Inti għandek tkun taf kollha ta 'dawn, il-passi fil-kompilazzjoni peress li inti kellha twieġeb mistoqsijiet dwar dawk. Iva. [Student] Jista immorru fuq dawk il-passi - >> Sure. Qabel passi u kompilazzjoni għandna operazzjonijiet ta 'pretrattament, kompilazzjoni, assemblaġġ, u jgħaqqdu. Operazzjonijiet ta 'pretrattament. Xi jfisser li tagħmel? Huwa l-pass eħfef fil - ukoll, mhux simili - dan ma jfissirx li għandu jkun ovvju, iżda huwa l-pass eħfef. You guys tista timplimentaha infuskom. Yeah. [Student] Ħu dak li għandek fil tiegħek tinkludi bħal dan u kopji u allura wkoll jiddefinixxi. Huwa jistenna għal affarijiet bħall # Jinkludu u # jiddefinixxi, u dan biss kopji u pejst x'inhuma dawn fil-fatt tfisser. Allura meta inti tgħidli # Jinkludu cs50.h, il preprocessor qed ikkupjar u pasta cs50.h f'dak il-linja. Meta inti tgħidli # tiddefinixxi x li jkun 4, il-preprocessor tmur permezz tal-programm kollu u jissostitwixxi l-istanzi kollha ta 'x ma' 4. Allura l-preprocessor jieħu fajl C valida u outputs fajl C valida fejn l-affarijiet kienu kkupjati u pasted. Allura issa kumpilazzjoni. Xi jfisser li tagħmel? [Student] Huwa jmur minn C sa binarja. [Bowden] Ma tmur it-triq biex binarja. [Student] Li kodiċi magna allura? >> Mhuwiex kodiċi magna. [Student] Assemblea? . Assemblea >> Hija tmur għall-Assemblea qabel ma tmur it-triq kollha għall-kodiċi C, u l-lingwi l-aktar jagħmlu xi ħaġa bħal din. Pick kwalunkwe lingwa ta 'livell għoli, u jekk int ser josservawha, huwa probabbli li jikkompilaw fil-passi. L-ewwel li għaddej biex jikkompilaw Python sa C, allura huwa għaddej biex jikkompilaw C sa Assemblea, u mbagħad Assemblea hija se tikseb tradotti għall binarja. Allura kumpilazzjoni se iġġibu minn C sa Assemblea. Il-kelma kompilazzjoni normalment ifisser li jitla 'minn livell ogħla għal inqas lingwa ta 'programmar livell. Allura dan huwa l-pass biss kumpilazzjoni fejn inti tibda bil-lingwa ta 'livell għoli u jispiċċaw fil-lingwa ta 'livell baxx, u hu għalhekk li l-pass huwa msejjaħ kumpilazzjoni. [Student] Matul kompilazzjoni, ejja ngħidu li inti ghamilt # Jinkludu cs50.h. Se il-kompilatur recompile l cs50.h, bħall-funzjonijiet li huma fil hemm, u tittraduċi din fis-kodiċi Assemblea kif ukoll, jew ser kopja u paste xi ħaġa li kien pre-Assemblea? cs50.h se pretty ħafna qatt jispiċċaw fl-Assemblea. Għalf bħal prototipi funzjoni u l-affarijiet huma biss ghalik li tkun attenta. Din tiggarantixxi li l-kumpilatur tista 'tivverifika affarijiet simili int ssejjaħ funzjonijiet mat-tipi ritorn dritt u l-argumenti dritt u l-għalf. Allura cs50.h se preprocessed fil-fajl, u mbagħad meta huwa jikkompila huwa bażikament tintrema wara li jagħmel ċert li kollox qed jissejjaħ korrett. Iżda l-funzjonijiet definiti fil-librerija CS50, li huma separati minn cs50.h, dawk mhux se jkunu separatament kkompilati. Li fil-fatt se jiġu stabbiliti fil-pass li jgħaqqdu, hekk aħna ser jiksbu għal dak fit-tieni. Iżda l-ewwel, dak li huwa assemblaġġ? [Student] Assemblea binarju? >> Yeah. Armar. Aħna ma sejħa hija kumpilazzjoni minħabba Assemblea hija pjuttost traduzzjoni pura ta binarja. Hemm loġika ftit li xejn fil jmorru minn Assemblea binarja. Huwa biss bħal tfittex up fit-tabella, oh, aħna għandna din l-istruzzjoni; li jikkorrispondi għal binarju 01110. U għalhekk l-fajls li ġeneralment assemblaġġ outputs huma. Fajls o. U. Fajls o aħna dak li kienu jgħidu qabel, kif fajl ma jeħtieġx li jkollhom funzjoni prinċipali. Kull fajl jista 'jkun kompilat isfel għal fajl o. Sakemm huwa fajl C valida. Dan jista 'jkun kompilat sa. O. Issa, l-irbit huwa dak li attwalment ġġib mazz ta '. Fajls o u ġġibhom għall eżekutibbli. U hekk dak li jgħaqqdu ma huwa inti tista 'taħseb l-librerija CS50 bħala fajl o.. Huwa fajl binarju diġà miġbura. U hekk meta inti tiġbor fajl tiegħek, hello.c tiegħek, li jitlob GetString, hello.c gets miġbura sa hello.o, hello.o issa hija fil binarja. Hija tuża GetString, u għalhekk jeħtieġ li tmur fuq għal cs50.o, u l-linker smooshes flimkien u l-kopji GetString fis dan il-fajl u toħroġ ma 'eżekutibbli li għandu l-funzjonijiet li teħtieġ. Allura cs50.o ma tkunx attwalment fajl O, iżda huwa qrib biżżejjed li ma hemm ebda differenza fundamentali. Allura jgħaqqdu biss ġġib mazz ta 'fajls flimkien li separatament fihom kollha tal-funzjonijiet li għandi bżonn biex jużaw u toħloq l-eżekutibbli li se tmexxi effettivament. U hekk dan huwa wkoll dak li aħna kienu jgħidu qabel fejn inti jista 'jkollhom 1000. fajls c, inti jikkompilawha kollha biex. fajls o, li probabbilment se jieħu xi ftit, imbagħad inti bidla 1. fajl c. Ikollok bżonn biss li recompile li 1. Fajl ċ u mbagħad kollox relink ħaġa oħra, rabta kollox lura flimkien. [Student] Meta aħna qed jgħaqqdu aħna tikteb lcs50? Yeah, hekk lcs50. Li sinjali bandiera għall-linker li inti għandek tkun jgħaqqdu f'dak librerija. Mistoqsijiet? Have we marret fuq binarju għajr li 5 sekondi fl-ewwel lecture? Jien ma naħsibx. Inti għandek tkun taf kollha ta 'l Os kbir li konna marret fuq, u inti għandek tkun kapaċi li, jekk aħna ħadt funzjoni, inti għandek tkun tista 'tgħid huwa kbir O, bejn wieħed u ieħor. Jew ukoll, big O huwa rough. Mela jekk inti tara nested għal-linji looping fuq l-istess numru ta 'affarijiet, bħall INT i, i > [student] n kwadru. >> Hemm tendenza li jkun n kwadru. Jekk għandek triple nested, li għandha tendenza li tkun n kubiku. Allura li tip ta 'ħaġa inti għandek tkun kapaċi li jiġi rrilevat immedjatament. Inti għandek bżonn tkun taf it-tip inserzjoni u sort bużżieqa u jingħaqdu tip u kollha ta 'dawn. Huwa aktar faċli li wieħed jifhem għaliex huma dawk n kwadrat u n log n u kollha ta 'dak għaliex naħseb li kien hemm fuq kwizz sena fejn aħna bażikament ħadt implimentazzjoni ta 'tip bużżieqa u qal, "X'inhi l-running time ta' din il-funzjoni?" Mela jekk inti tirrikonoxxi dan bħala tip bużżieqa, allura inti tista 'immedjatament tgħid n kwadru. Imma jekk inti biss tħares lejn din, inti lanqas biss jeħtieġ li tirrealizza tip bużżieqa huwa; inti tista 'biss ngħid dan qed tagħmel dan u dan. Dan huwa n kwadru. [Student] Hemm xi eżempji iebsa inti tista 'toħroġ bi, qisha idea simili tal jidhru? Ma naħsibx li aħna se jagħtuk xi eżempji iebsa. Il-ħaġa tip bubble hija dwar kif iebsa kif aħna tmur, u anki li, sakemm inti tifhem li int mtennija fuq l-array għal kull element fil-firxa, li se tkun xi ħaġa li n kwadru. Hemm mistoqsijiet ġenerali, bħal dritt hawn għandna - Oh. Just-oħra jum, Doug qal, "I ivvintat algoritmu li jistgħu sort firxa "Ta 'numri n fil O (log n) iż-żmien!" Allura kif nafu li l-impossibbli? [Rispons istudent inaudible] >> Yeah. Għall-inqas, inti għandek tmissx kull element fil-firxa, hekk huwa impossibbli li sort firxa ta '- Jekk kollox huwa fl-ordni mhux magħżul, allura int se tkun tmiss kollox fil-firxa, hekk huwa impossibbli li tagħmel dan fil inqas minn O ta 'n. [Student] Inti wrewna li eżempju li tkun tista 'tagħmel dan fil O ta' n jekk tuża ħafna ta 'memorja. >> Yeah. U that's - ninsa dak that's - Huwa għadd sort? Hmm. Dan huwa algoritmu issortjar numru sħiħ. I kien qed ifittex l-isem speċjali għal dan li jien ma setgħux tiftakar ġimgħa li għaddiet. Yeah. Dawn huma t-tipi ta 'tipi li jistgħu jwettqu l-affarijiet fil-big O ta' n. Iżda hemm limitazzjonijiet, bħal inti tista 'tuża biss interi sa ċertu numru. Plus jekk inti qed tipprova issolvi that's xi ħaġa - Jekk firxa tiegħek huwa 012, -12, 151, 4 miljun, dak l-element waħdieni se kompletament rovina-tqassim kollu. Mistoqsijiet? [Student] Jekk ikollok xi funzjoni jirrikorri u hija biss jagħmel l-sejħiet rikursivi fi stqarrija ritorn, li l-denb rikursivi, u għalhekk tkun li ma jużawx memorja aktar matul runtime jew ikun inqas użu memorja komparabbli fir iterattiv soluzzjoni? [Bowden] Iva. Ikun probabbli jkun kemmxejn kajman, iżda mhux verament. Tail jirrikorri hija pjuttost tajba. Ħarsa mill-ġdid lejn frames munzell, ejja ngħidu li għandna prinċipali u għandna bar int (int x) jew xi ħaġa. Din mhix funzjoni jirrikorri perfetta, imma bar ritorn (x - 1). Allura ovvjament, dan huwa difettuż. Ikollok bżonn f'każi bażi u l-għalf. Iżda l-idea hija li dan huwa denb rikursivi, li jfisser meta prinċipali sejħiet bar li għaddej biex tikseb frame munzell tiegħu. F'dan il-qafas munzell hemm għaddej li jkun blokk ftit ta 'memorja li jikkorrispondi għal x argument tagħha. U hekk ejja ngħidu prinċipali jiġri li jsejħu bar (100); Allura x se jibdew bħala 100. Jekk il-kumpilatur jirrikonoxxi li dan huwa funzjoni rikursivi denb, allura meta bar jagħmel sejħa jirrikorri tagħha għall-bar, minflok ma jsir qafas munzell ġdid, li huwa fejn il-munzell jibda jikber aktar, eventwalment se jibda fis-borġ u mbagħad ikollok segfaults minħabba memorja jibda jaħbtu. Allura minflok tagħmel frejm tagħha munzell stess, jista 'realizzata, ħej, jien qatt ma verament bżonn li terġa 'lura għal dan il-qafas munzell, hekk minflok I ser biss jissostitwixxu dan l-argument ma 99 u mbagħad tibda bar kollha. U allura se tagħmel mill-ġdid u se tilħaq bar ritorn (x - 1), u minflok ma jsir qafas munzell ġdid, se biss jissostitwixxu l-argument preżenti tagħha ma '98 u mbagħad jaqbżu lura għall-bidu nett tal-bar. Dawk l-operazzjonijiet, li tissostitwixxi dak il-valur 1 dwar il-munzell u jaqbeż lura għall-bidu, huma pjuttost effiċjenti. Allura mhux biss dan huwa l-użu tal-memorja istess funzjoni separata li iterattiv għax int biss bl-użu qafas munzell 1, imma int ma ssofrix-aspetti negattivi ta 'wara li sejħa funzjonijiet. Funzjonijiet Sejħat jista 'jkun pjuttost għalja minħabba li għandha tagħmel dan kollu setup u teardown u dan kollu Jittieħed. Allura dan recursion denb hija tajba. [Student] Għaliex hija ma toħloqx passi ġodda? Minħabba li jirrealizza li ma għandux bżonn li. Is-sejħa għall-bar huwa biss jirritorna l-sejħa rikursivi. Allura ma għandux bżonn li tagħmel xejn mal-valur tar-ritorn. Huwa biss se immedjatament lura. Hekk huwa biss se jissostitwixxi l-argument tagħha stess u tibda fuq. U wkoll, jekk inti ma għandekx il-verżjoni rikursivi denb, imbagħad ikollok dawn bars fejn meta dan il-bar tidħol lura għandu jirritorna valur tagħha għal dan wieħed, allura dik bar immedjatament jirritorna u dan jirritorna l-valur tiegħu għal dan wieħed, allura huwa biss se immedjatament lura u r-ritorn valur tiegħu għal dan wieħed. Allura int iffrankar dan popping kollha ta 'dawn l-affarijiet off tal-munzell billi l-valur tar-ritorn huwa biss se jkunu mgħoddija it-triq kollha back up xorta waħda. Allura għaliex mhux biss jissostitwixxu l-argument tagħna ma 'l-argument aġġornata u tibda fuq? Jekk il-funzjoni ma tkunx denb rikursivi, jekk inti tagħmel xi ħaġa simili - [Student] jekk bar (x + 1). >> Yeah. Mela jekk inti tpoġġi fil-kundizzjoni, allura int tagħmel xi ħaġa bil-valur tar-ritorn. Jew anki jekk inti biss tagħmel ritorn 2 * bar (x - 1). Allura issa bar (x - 1) jeħtieġ li jirritornaw sabiex ikun jista 'jiġi kkalkulat 2 darbiet dak ta' valur, hekk issa ma bżonn frejm tagħha stess munzell separata, u issa, l-ebda kwistjoni kif hard inti tipprova, int ser jeħtieġ li - Dan mhux denb rikursivi. [Student] Kieku nipprova li ġġib recursion li l-mira ta 'recursion denb - [Bowden] F'dinja ideali, iżda fil-CS50 inti ma għandekx. Sabiex tikseb recursion denb, ġeneralment, inti twaqqaf argument addizzjonali fejn bar se tieħu x int fis y u y jikkorrispondi għall-ħaġa aħħari inti tixtieq li jirritornaw. Mela allura dan int ser jirritorna bar (x - 1), 2 * y. Allura li jinsab biss ta 'livell għoli kif inti tittrasforma l-affarijiet li jkun denb rikursivi. Iżda l-argument extra - U mbagħad fl-aħħar meta inti tilħaq il-każ bażi tiegħek, inti biss ritorn y għaliex inti kont qed jakkumula l-ħin kollu l-valur tar-ritorn li tixtieq. Inti tip ta 'ġew nagħmilx hekk iteratively iżda bl-użu sejħiet rikursivi. Mistoqsijiet? [Student] Forsi dwar aritmetika pointer, bħal meta jużaw kordi. >> Sure. Aritmetika pointer. Meta jintużaw kordi huwa faċli għaliex kordi huma stilla char, Chars huma dejjem u dejjem f'byte wieħed, u għalhekk aritmetika pointer huwa ekwivalenti għal aritmetika regolari meta int jittrattaw kordi. Ejja ngħidu biss char * i = "hello". Allura aħna għandna blokk fil-memorja. Jeħtieġ 6 bytes għaliex inti dejjem bżonn l-terminatur null. U char * i se jindikaw il-bidu ta 'din array. Allura s punti hemmhekk. Issa, dan huwa bażikament kif kull firxa tax-xogħlijiet, irrispettivament minn jekk kienx għal ritorn minn malloc jew jekk huwa fuq il-munzell. Kull firxa hija bażikament pointer għall-bidu tal-firxa, u mbagħad kull operazzjoni firxa, xi indiċjar, huwa biss nidħlu li firxa ċertu offset. Allura meta I ngħid xi ħaġa simili i [3]; dan se iu għadd 3 Chars pulzieri Allura s [3], għandna 0, 1, 2, 3, hekk i [3] se tirreferi għal dan l. [Student] U aħna tista 'tilħaq l-istess valur billi jagħmel i + 3 u mbagħad parentesi star? Iva. Dan huwa ekwivalenti għal * (i + 3); u li huwa dejjem u dejjem ekwivalenti ebda kwistjoni dak li inti tagħmel. Inti qatt ma bżonn tuża l-sintassi kategorija. Inti tista 'dejjem jużaw l-* (i + 3) sintassi. Nies għandhom tendenza li bħall-sintassi parentesi, għalkemm. [Student] Mela kull matriċi huma attwalment biss pointers. Hemm distinzjoni żgħira meta ngħid int x [4]; >> [student] Does li joħolqu l-memorja? [Bowden] Li ser toħloq 4 ints fuq il-munzell, sabiex 16 bytes globali. Huwa ser joħloq 16 bytes fuq il-munzell. x ma tkunx maħżuna kullimkien. Huwa biss simbolu li jirreferu għall-bidu tal-ħaġa. Għaliex inti ddikjarat il-firxa ġewwa ta 'din il-funzjoni, dak l-kumpilatur se tagħmel huwa biss tissostitwixxi l-istanzi kollha tal-x varjabbli ma 'fejn ma ġara li jagħżlu li jpoġġu dawn bytes 16. Hija ma tistax tagħmel dan ma 'char * għax i huwa pointer attwali. Huwa ħieles li mbagħad punt għal affarijiet oħra. x hija kostanti. Ma jistax ikollok dan il-punt għal firxa differenti. >> [Student] Okay. Iżda din l-idea, dan indiċjar, huwa l-istess irrispettivament minn jekk din hija firxa tradizzjonali jew jekk huwa pointer għal xi ħaġa jew jekk huwa pointer għal firxa malloced. U fil-fatt, huwa tant ekwivalenti li dan huwa wkoll l-istess ħaġa. Hija fil-fatt biss jittraduċi x'hemm ġewwa tal-parentesi u dak ħalla ta 'l-parentesi, iżid flimkien, u dereferences. Allura dan huwa daqstant validi bħala * (i + 3) jew s [3]. [Student] Jista 'ikollok pointers tipponta lejn 2-dimensjonali arrays? Huwa aktar diffiċli. Tradizzjonalment, l-ebda. A array 2-dimensjonali hija biss firxa 1-dimensjonali ma 'xi sintassi konvenjenti għaliex meta I say int x [3] [3], dan huwa verament biss 1 array ma '9 valuri. U hekk meta I indiċi, il-kumpilatur jaf dak li jfisser. Jekk jiena ngħid x [1] [2], li jaf Irrid immur għal-tieni ringiela, u għalhekk għaddej biex jaqbżu l-ewwel 3, u allura trid l-ħaġa tieni li, hekk huwa se tikseb dan wieħed. Iżda huwa għadu biss firxa waħda tridimensjonali. U hekk jekk jien ridt li tassenja pointer għal dak array, Jien ngħid int * p = x; It-tip ta 'x hija biss - Huwa rough tip qal ta 'x peress li hija biss simbolu u mhuwiex xi varjabbli attwali, iżda huwa biss * int. x hija biss pointer għall-bidu ta 'dan. >> [Student] Okay. U so I mhux se tkun tista 'aċċess [1] [2]. Naħseb li hemm sintassi speċjali għal tiddikjara pointer, xi ħaġa redikola bħal int (* p [-. xi ħaġa assolutament redikola I lanqas biss jafu. Iżda hemm sintassi għad-dikjarazzjoni pointers bħal ma parenteżi u affarijiet. Ma jista 'anki let inti tagħmel dan. I jistgħu ħarsa lura lejn xi ħaġa li se tgħidli l-verità. I se tfittex aktar tard, jekk ikun hemm sintassi għall-punt. Imma qatt m'int se jarawha. U anki l-sintassi hija tant arkajka li jekk tuża dan, in-nies se jkunu baffled. Arrays multidimensjonali huma pjuttost rari kif inhi. Inti pretty ħafna - Ukoll, jekk int tagħmel affarijiet matriċi mhuwiex ser ikun rari, imma fis-C int rarament se tkun qed tuża arrays multidimensjonali. Yeah. >> [Istudent] Ejja ngħidu li għandek firxa verament twila. Allura fil-memorja virtwali jidher li tkun kollha konsekuttivi, bħall-elementi dritt ħdejn xulxin, iżda fil-memorja fiżika, ma jkun possibbli għal dik li tkun maqsuma? >> Iva. Kif virtwali xogħlijiet memorja hija biss jissepara - L-unità ta 'allokazzjoni hija paġna, li għandu tendenza li jkun 4 kilobytes, u għalhekk meta proċess jgħid, ħej, I jridu jużaw dan il-memorja, is-sistema operattiva se jallokawha 4 kilobytes għal dak blokk ftit tal-memorja. Anke jekk inti biss tuża byte ftit wieħed fil-blokk kollu ta 'memorja, is-sistema operattiva se jagħtiha l-sħiħ 4 kilobytes. Allura dak li dan ifisser huwa I jista 'jkollhom - ejja ngħidu li dan huwa munzell tiegħi. Dan munzell jista 'jiġi sseparat. Munzell My jista 'jkun megabytes u megabytes. Munzell My jista 'jkun enormi. Iżda l-munzell innifsu għandu jiġi maqsum paġni individwali, li jekk inħarsu lejn minn hawn ejja ngħidu li dan huwa RAM tagħna, jekk ikolli 2 gigabytes ta 'RAM, dan huwa proprju l-indirizz 0 bħall-byte 0 ta' RAM tiegħi, u din hija 2 gigabytes it-triq kollha stabbiliti hawn. Allura din il-paġna tista 'tikkorrispondi għal dan il-blokk hawn fuq. Din il-paġna tista 'tikkorrispondi għal dan il-blokk hawn fuq. Dan wieħed jista 'jikkorrispondi għal dan wieħed hawn fuq. Għalhekk is-sistema operattiva huwa liberu li tassenja memorja fiżika għal kull paġna individwali arbitrarju. U dan ifisser li jekk dan fruntiera jiġri li straddle firxa, firxa jiġri li titħalla ta 'dan u d-dritt ta' dan l-ordni ta 'paġna, allura dik array se tkun maqsuma fil-memorja fiżika. U allura meta inti nieqaf-programm, meta l-proċess jintemm, dawn mappings nikseb mħassra u allura huwa liberu li juża dawn il-blokok ftit għal affarijiet oħra. Mistoqsijiet Aktar? [Student] Il aritmetika pointer. >> Oh yeah. Strings kienu aktar faċli, iżda tħares lejn xi ħaġa bħal ints, hekk lura għall int x [4]; Jekk dan huwa firxa jew jekk huwa pointer għal firxa malloced '4 numri interi, li għaddej biex jiġu ttrattati bl-istess mod. [Student] Mela arrays huma fuq il-borġ? [Bowden] Arrays mhumiex fuq il-borġ. >> [Student] Oh. [Bowden] Dan it-tip ta 'firxa tendenza li jkun fuq il-munzell sakemm inti ddikjarat dan fid - jinjora varjabbli globali. Tużax varjabbli globali. Ġewwa ta 'funzjoni I say int x [4]; Huwa ser toħloq blokka 4-numru sħiħ fuq il-munzell ta 'din il-firxa. Iżda dan malloc (4 * sizeof (int)); se jmorru fuq il-borġ. Iżda wara dan il-punt I jistgħu jużaw x u ​​p fil pretty ħafna l-modi istess, għajr l-eċċezzjonijiet I said qabel dwarek tista jassenja mill-ġdid p. Teknikament, daqsijiet tagħhom huma kemmxejn differenti, iżda li l-kompletament irrilevanti. Inti qatt ma attwalment jużaw qisien tagħhom. Il p nista 'ngħid p [3] = 2, jew x [3] = 2; Tista 'tuża minnhom eżattament fl-istess mod. Allura pointer aritmetika issa - Iva. [Student] Inti ma għandekx tagħmel * p jekk għandek il-parentesi? Il-parentesi huma dereference impliċitu. Okay. >> Attwalment, ukoll dak li qed tgħid l-jistax ikollok arrays multidimensjonali ma pointers, x'tista 'tagħmel xi ħaġa simili, ejja ngħidu, int ** pp = malloc (sizeof (INT *) * 5); I ser biss jiktbu dan kollu l-ewwel. I ma riedx li wieħed. Okay. What I did hawnhekk huwa - Li għandhom ikunu pp [i]. Allura pp hija pointer għal pointer. Inti mallocing pp għall-punt għal firxa ta '5 stilel int. Allura fil-memorja li għandek fuq il-paġni munzell Huwa ser punt għal firxa ta '5 blokki li huma kollha infushom pointers. U mbagħad meta I malloc stabbiliti hawn, I malloc li kull waħda minn dawn pointers individwali għandu jindika blokk separat ta '4 bytes fuq il-borġ. Allura dan jindika 4 bytes. U dan jindika 1 sa A 4 bytes differenti. U kollha kemm huma jindikaw stess 4 bytes tagħhom. Dan jagħti me mod nagħmlu l-affarijiet multidimensjonali. Nista 'ngħid pp [3] [4], iżda issa dan ma jkunx l-istess ħaġa bħal arrays multidimensjonali minħabba arrays multidimensjonali li tradott [3] [4] f'Direttiva waħdanija offset fil-firxa x. Dan p dereferences, aċċessi l-indiċi 3, allura dereferences li u aċċessi - 4 ikunu invalidi - l-indiċi 2. Billi meta kellna l-int x [3] [4] qabel bħala firxa multidimensjonali u meta inti doppja bracket huwa verament biss dereference wieħed, int wara pointer waħda u mbagħad offset, dan huwa verament referenzi 2D. Inti ssegwi 2 pointers separati. Allura dan ukoll teknikament jippermettilek li jkollhom arrays multidimensjonali fejn kull firxa individwali hija daqsijiet differenti. So I think arrays multidimensjonali jagged huwa dak li sejjaħ peress li verament l-ewwel ħaġa jista 'punt għal xi ħaġa li għandha 10 elementi, l tieni ħaġa jista 'punt għal xi ħaġa li għandha 100 elementi. [Student] Hemm xi limitu għan-numru ta 'indikaturi inti jista' jkollhom tipponta lejn pointers oħra? >> No Inti jista 'jkollhom int ***** p. Lura għall aritmetika pointer - >> [student] Oh. >> Yeah. [Student] Jekk ikolli int *** p u mbagħad I do a dereferencing u jien ngħid * p hija ugwali għal dan il-valur, huwa biss se jagħmlu 1 livell ta 'dereferencing? >> Iva. Mela jekk irrid biex jaċċessaw il-ħaġa li l-pointer aħħar hija li tipponta lejn - Imbagħad inti do p. *** Okay. >> Allura dan huwa punt p sa blokka 1, il-punti għall-ieħor blokk, punti għall-ieħor blokk. Imbagħad jekk inti tagħmel * p = xi ħaġa oħra, allura inti qed jinbidlu dan li issa punt għal blokk differenti. Okay. >> [Bowden] U jekk dawn kienu malloced, imbagħad inti għandek issa nixxew memorja sakemm jiġri li jkollhom referenzi differenti ta 'dawn il- peress li inti ma tistax terġa 'lura għal dawk dawk li inti biss threw bogħod. Aritmetika pointer. int x [4]; se talloka firxa ta 'numri interi 4 fejn x huwa se jindikaw il-bidu ta 'l-array. Allura meta I ngħid xi ħaġa simili x [1]; Irrid li jfisser tmur fil-numru sħiħ 2 fil-firxa, li jkun dan wieħed. Imma verament, li 4 bytes fil-firxa peress li dan integer jieħu 4 bytes. Allura offset ta '1 verament tfisser offset ta' 1 darbiet id-daqs ta 'kwalunkwe tip ta' l-array huwa. Dan huwa firxa ta 'numri interi, u għalhekk jaf li tagħmel 1 darbiet daqs ta' int meta trid offset. Il-oħra sintassi. Ftakar li din hija ekwivalenti għal * (x + 1); Meta I say pointer + 1, dak li prospetti huwa l-indirizz li l-pointer huwa ħażna plus 1 darbiet id-daqs tat-tip tal-pointer. Mela jekk x = ox100, allura x + 1 = ox104. U inti tista 'abbuż dan u ngħid xi ħaġa simili char * c = (char *) x; u issa ċ se tkun l-istess indirizz x. c se tkun ugwali għal ox100, imma c + 1 se jkun ugwali għal ox101 peress aritmetika pointer jiddependi mit-tip ta 'l-werrej li inti żżid li. Allura c + 1, jagħti ħarsa lejn c, huwa pointer char, hekk li għaddej biex żid 1 darbiet daqs tal char, li huwa dejjem se tkun l-1, hekk ikollok 101, billi jekk nagħmel x, li huwa wkoll għadu 100, x + 1 se tkun 104. [Student] Tista 'tuża ċ + + sabiex qabel pointer tiegħek sa l-1? Iva, inti tista '. Inti ma tistax tagħmel dan ma 'x minħabba x hija biss simbolu, huwa kostanti, inti ma tistax tbiddel x. Iżda ċ jiġri li jkun biss pointer, hekk c + + huwa perfettament validu u se inkrement minn 1. Jekk c kienu biss * int, allura ċ + + tkun 104. + + Aritmetika pointer ma biss bħala ċ + 1 ikollu jsir aritmetika pointer. Dan huwa attwalment kif ħafna affarijiet simili tip jingħaqdu - Minflok il-ħolqien kopji ta 'affarijiet, inti tista' minflok tgħaddi - Bħal jekk jien ridt li tgħaddi din nofs il-firxa - ejja iħassar xi ftit minn dan. Ejja ngħidu jien ridt li jgħaddu din in-naħa tal-firxa fi funzjoni. X'għandu I jgħaddu għal dik il-funzjoni? Jekk I jgħaddu x, jiena tgħaddi dan l-indirizz. Imma nixtieq li tgħaddi din l-indirizz partikolari. Allura dak li għandi jgħaddu? [Student] Pointer + 2? [Bowden] Mela x + 2. Iva. Li għaddej biex tkun f'dan l-indirizz. Int ser ikollok ukoll ħafna drabi tara dan bħala x [2] u allura l-indirizz ta 'dak. Allura ikollok bżonn tieħu l-indirizz ta 'dan minħabba li l-kategorija hija dereference impliċita. x [2] jirreferi għall-valur li huwa f'din il-kaxxa, u allura inti tixtieq l-indirizz ta 'dik il-kaxxa, sabiex inti tgħid & x [2]. Allura li kif xi ħaġa fil-tip jingħaqdu fejn inti tixtieq li jgħaddu nofs il-lista għal xi ħaġa inti verament ftit jgħaddu & x [2], u issa safejn is-sejħa rikursivi huwa kkonċernat, firxa ġdida tiegħi jibda hemmhekk. Mistoqsijiet aħħar minuta. [Student] Jekk aħna ma tpoġġi ampersand jew - x'hemm li imsejħa? >> Star? [Student] Star. >> Teknikament, l-operatur dereference, iżda - >> [student] Dereference. Jekk aħna ma jpoġġux stilla jew ampersand, x'jiġri jekk I biss jgħidu y = x u x hija pointer? X'inhu t-tip ta 'y? >> [Student] I ser biss jgħidu pointer huwa 2. Mela jekk inti biss jgħidu y = x, issa x u l-punt y għall-istess ħaġa. >> [Student] Punt għall-istess ħaġa. U jekk x huwa pointer int? >> Ikun jilmentaw għaliex inti ma tistax tassenja pointers. [Student] Okay. Ftakar li l-pointers, anke jekk aħna tiġbed minnhom bħala vleġeġ, verament kollha taħżen dawn - int * x - verament kollha x hija ħażna hija xi ħaġa simili ox100, li aħna jiġri li jirrappreżentaw bħala li tipponta lejn il-blokk maħżuna f'temperatura ta '100. Allura meta I say int * y = x; jien biss ikkupjar ox100 fis y, li aħna qed biss jmorru biex jirrappreżentaw bħala y, ukoll tipponta lejn ox100. U jekk jien ngħid i int = (int) x; imbagħad i se taħżen irrispettivament mill-valur tal-ox100 huwa ġewwa ta 'dan, iżda issa huwa għaddej biex jiġi interpretat bħala numru sħiħ minflok ta' pointer. Imma għandek bżonn l-mitfugħa jew inkella se jilmentaw. [Student] Mela taħseb jfisser li jitfa - Huwa ser jiġi ikkastjar int 'x jew ikkastjar int ta' y? [Bowden] What? [Student] Okay. Wara dawn parentesi huwa hemmhekk se tkun x jew ay hemm? [Bowden] Jew. xuy huma ekwivalenti. >> [Student] Okay. Minħabba li qed kemm pointers. >> Yeah. [Student] Għalhekk ikun jaħżen l-100 hexadeċimali f'forma numru sħiħ? >> [Bowden] Yeah. Iżda mhux il-valur ta 'kwalunkwe hija tirreferi għall. [Bowden] Yeah. >> [Student] Hekk biss l-indirizz fil-forma numru sħiħ. Okay. [Bowden] Jekk int riedu għal xi raġuni stramba, inti tista 'biss jittrattaw pointers u qatt jittrattaw interi u biss ikunu simili int * x = 0. Imbagħad int ser jiksbu verament konfuż meta aritmetika pointer jibda jiġri. Allura n-numri li huma jaħżnu huma bla sens. Huwa biss kif inti jispiċċaw interpretazzjoni tagħhom. Hekk jien liberu li kopja ox100 minn * int lil int, u jien ħielsa li tassenja - you're probabbilment se tikseb għajjat ​​fil għaliex ma ikkastjar - Jien liberi li tassenja xi ħaġa simili (INT *) ox1234 fis dan * int arbitrarju. Allura ox123 hija daqstant valida l-indirizz tal-memorja kif & y. & Y jiġri li jirritornaw xi ħaġa li hija pjuttost ox123. [Student] Ikun li jkun mod verament jibred biex imorru minn hexadeċimali għall-forma deċimali, simili jekk għandek pointer u inti mitfugħa dan bħala int? [Bowden] Inti tista 'verament biss print użu bħal printf. Ejja ngħidu għandi int y = 100. Allura printf (% d \ n - kif għandek diġà taf - jistampaw li bħala numru sħiħ x%,. Aħna ser biss print bħala hexadeċimali. Allura pointer ma tkunx maħżuna bħala hexadecimal, u integer ma tkunx maħżuna bħala deċimali. Kollox huwa maħżun bħala binarja. Huwa biss li għandna t-tendenza li juru pointers bħala hexadecimal għaliex naħsbu ta 'affarijiet fil dawn il-blokok 4-byte, u l-indirizzi tal-memorja tendenza li jkunu familjari. Aħna qed simili, jekk jibda bil bf, allura jiġri li jkun fuq il-munzell. Allura huwa biss l-interpretazzjoni tagħna ta 'pointers bħala hexadeċimali. Okay. Kwalunkwe mistoqsijiet aħħar? I ser tkun hawn għal ftit wara jekk għandek xi ħaġa oħra. U dan huwa l-aħħar ta 'dak. [Student]! Yay [Applause] [CS50.TV]