DAVID Malan: Kull dritt, merħba lura. Dan huwa CS50. Dan huwa l-bidu ta 'seba' ġimgħa. Allura huwa kien filwaqt li, hekk ħsibt aħna'd tieħu tour whirlwind ta 'fejn aħna jitħalla 'off u fejn aħna qed tmur issa. Allura dan il-ħaġa hawn jista 'jkollhom ikkawża xi Angst fl-ewwel. Iżda nisperaw, int jibdew aklimatizza għal dak li din tindika hawn - star jirrappreżentaw pointer, li hija biss dak, f'termini iktar laymans? Hekk huwa l-indirizz. Allura huwa l-indirizz ta ' xi ħaġa fil-memorja. U bdejna biex Qaxxar is-saffi ftit ġimgħat ilu, l-affarijiet simili GetString u oħrajn funzjonijiet dan il-ħin ikunu ġew jirritornaw indirizzi ta 'affarijiet fil-memorja, bħall- indirizz ta 'l-ewwel karattru xi sekwenza. Allura aħna introdotti wkoll valgrind, li inti ser tibda tuża għal din il-problema stabbiliti, b'mod partikolari għall-jmiss problema stabbiliti kif ukoll. U valgrind ma dak għalina? Huwa jagħmel verifiki għat-tnixxija memorja, u wkoll kontrolli għall-abbuż ta 'memorja. Hija tista ', b'xi probabbilità, l-iskoperta jekk kodiċi tiegħek se tmiss memorja li hija sempliċement mhux suppost. Allura mhux neċessarjament tnixxija, imma jekk inti jmorru lil hinn mill-konfini ta 'xi array, u inti tmexxi effettivament valgrind u jinduċi li l-imġieba waqt valgrind tkun qed taħdem fil-programm tiegħek huwa tmexxija ġewwa ta 'dan, int ser tingħata messaġġi bħal dan - "invalidi ikteb tal daqs 4, "li, tfakkar koppja ta ' ġimgħat ilu kien ifisser li kelli aċċidentalment bħal fuq int wieħed wisq lil hinn mill-konfini ta 'firxa. U hekk daqs 4 ifisser hawn id-daqs ta 'dak int partikolari. Sabiex jieħdu riassigurazzjoni fil-fatt li output valgrind, il-format ta 'dan, huwa biss atroċi. Huwa verament diffiċli li tara permezz tal-mess għall-informazzjoni interessanti. Allura dak li aħna ghamilt hawn huwa biss silta xi wħud mill-koppja ta 'aktar linji interessanti. Imma tirrealizza li 80% tal-tal valgrind output se tkun daqsxejn ta ' distrazzjoni. Just tfittex għal xejriet bħal dawn - invalidu dritt, invalidu jinqraw, 40 bytes u xi numru ta 'blokki huma definittivament mitlufa, keywords bħal dik. U dak li inti ser nisperaw tara xi tip ta 'traċċa ta' liema funzjoni tal- żball huwa attwalment pulzieri F'dan il-każ hawnhekk, b'liema linja ta ' kodiċi tiegħi kien l-iżball apparentement? 26 fil-fajl imsejjaħ memory.c, li kienet l-eżempju aħna kienu jilagħbu ma fil-ħin. Allura huwa probabbilment mhux fil malloc. Kien probabbilment fil-kodiċi tiegħi minflok. Allura aħna ser tara dan mill-ġdid u għal darb'oħra qabel twil. Allura scanf, dan ħareġ fil- Koppja ta 'forom s'issa. Rajna sscanf qosor. Din kienet xi ħaġa numru ta ' inti dived fis fis tiegħek tħejjijiet għall-kwizz. U scanf huwa attwalment dak li l-CS50 librerija kien jużaw taħtha l- hood għal żmien pjuttost twil sabiex biex tikseb input mill-utent. Per eżempju, jekk I jimxu lejn CS50 appliance hawn, let me tiftaħ eżempju illum li sejjaħ scanf-0.c U huwa sempliċi super. Huwa biss ftit linji ta 'kodiċi. Iżda huwa verament juri kif getInt ilha taħdem kollha ta 'dan iż-żmien. F'dan il-programm hawn, f'konformità 16 , Avviż li jien tiddikjara int. Sabiex l-ebda pointers, xejn maġika hemm, biss int. Imbagħad fil-linja 17, I-pront il- utent għal numru, jekk jogħġbok. Imbagħad fl-aħħar 18, I-użu scanf hawn. And I speċifikat, tip simili printf, li jien jistennew quote unquote mija i. Allura fil-mija i, naturalment, tindika l-int. Imma avviż dak it-tieni argument li scanf huwa. Kif tiddeskrivi t-tieni argument wara l-virgola? X'inhu dan? Hu l-indirizz ta 'x. Allura dan huwa utli għaliex billi tipprovdi scanf bl-indirizz ta 'x, dak ma li jagħtu s-setgħa dik il-funzjoni li tagħmel? Mhux biss jmorru hemm, iżda wkoll jagħmel xiex? Agħmel bdil għalih. Għaliex inti tista 'tmur hemm, huwa tip ta' bħal mappa għal post fil-memorja. U sakemm inti tipprovdi scanf, jew xi funzjoni mappa bħal din, dik funzjoni tista 'tmur hemm, u mhux biss tħares lejn il-valur, iżda tista 'wkoll bidla li valur, li huwa utli jekk l-iskop fil-ħajja ta 'scanf huwa li skennjati input mill-utent, speċifikament mill-keyboard. U l-f tindika ifformattjat, bħad printf, il-f jiddenota ifformattjat string li inti tixtieq li jistampaw. Għalhekk fil-qosor, din il-linja 18 sempliċiment jgħid, jippruvaw jaqra int mill-utent tal- keyboard u jaħżnu ġewwa ta 'x, fi tkun xi tkun l-indirizz x jiġri li jgħixu. U mbagħad fl-aħħar, linja 19 biss jgħid, grazzi għall-int, f'dan il-każ. So let me imorru quddiem u jagħmlu dan. Sabiex tagħmel scanf 0. Let me imorru quddiem u zoom pulzieri I ser tmur u run dan ma tikek slash scanf 0. Numru, jekk jogħġbok? 50. Grazzi għall-50. Allura huwa pjuttost sempliċi. Issa dak li ma tagħmel? Huwa ma tagħmel mazz sħiħ ta 'verifika żball. Per eżempju, jekk jien ma tikkoperax, u jien ma tip fil-numru, iżda minflok I jiktbu xi ħaġa bħal "hello," li jinsab biss it-tip ta 'stramba. U għalhekk waħda mill-affarijiet l-CS50 librerija kienet tagħmel għalina għal xi ħin huwa li reprompting u reprompting. Il retry frażi irtirar kien cs50.c, u dak l-raġuni li getInt fl il-librerija CS50 huwa attwalment sħiħa mazz ta 'konzijiet, għaliex aħna qed verifika għall-għalf stupid bħal dan. Did-utent ma jagħtux us, fil-fatt, int? Did hu jew hi tagħtina xi ħaġa Qisha ittra alfabetika? Jekk iva, irridu jikxfu li u Yell fil minnhom. Imma l-affarijiet nikseb aktar interessanti f'dan l-eżempju li jmiss. Jekk immur għall scanf-1.c, liema huwa l-waħda ħaġa li hija fundamentalment mibdula dan l-eżempju li jmiss? Qed nuża char *, naturalment, minflok int. Allura dan huwa interessanti, għaliex char *, recall, huwa verament ftit l- istess ħaġa bħat string. Allura jħoss simili forsi dan huwa super implimentazzjoni sempliċi ta 'GetString. Imma stajt imqaxxar lura s-saff tal-librerija CS50, hekk jien ssejjaħ dan char * issa. Mela ejja ara fejn, jekk kullimkien, immorru ħażin. Line 17 - I darb'oħra ngħid, jekk jogħġbok agħti me xi ħaġa, f'dan il-każ, string. U mbagħad fil-linja li jmiss, I-sejħa scanf, għal darb'oħra, jtuha kodiċi format, iżda din id-darba fil-mija s. U allura din id-darba, jien tagħtiha buffer. Issa avviż, jien ma jużaw l-ampersand. Iżda għaliex huwa li probabbilment OK hawn? Għaliex dak li hu buffer diġà? Huwa diġà pointer. Huwa diġà l-indirizz. U ejja din il-kelma "jikkonfondi," let me biss sejħa hija s, per eżempju, għall- sempliċità. Imma stajt imsejħa buffer għaliex ġenerali, fl-ipprogrammar, jekk għandek blokki ta 'memorja, li string verament biss huwa, inti tista 'sejħa hija ta' buffer. Huwa post biex jaħżnu informazzjoni. Simili għal affarijiet bħal YouTube, meta dawn qed lqugħ, biex ngħidu hekk, li ifisser biss huwa tniżżil bits minn l-internet u jinħażnu f'dessikatur array lokali, blokki lokali ta 'memorja hekk inti tista 'tara dan aktar tard mingħajr huwa taqbeż jew li jiddendlu fuq inti waqt li jilagħbu lura. Allura hemm problema hawn għalkemm, għaliex jien javżak scanf, jistennew string mill-utent. Hawn-indirizz ta ' blokki ta 'memorja. Poġġi li string hemmhekk. Għaliex huwa li marbuta tagħti us inkwiet, għalkemm? X'hemm li? Am I permess għall-aċċess dik il-parti tal-memorja? You know, I do not know. Minħabba jkun buffer ġew initialized għal xejn? Mhux tassew. U dan huwa dak li konna qed jappellaw valur żibel, li mhijiex kelma formali. Dan ifisser biss aħna għandna ebda idea dak bits huma ġewwa mill-erba 'bytes li Għandi allokati kif buffer. I ma imsejħa malloc. Stajt definittivament mhux imsejħa GetString. Allura li jaf dak li huwa effettivament ġewwa ta 'buffer? And yet javżak scanf addoċċ, jmorru hemm u tpoġġi ikun x'ikun l-utent ittajpjat. Allura dak li huwa probabbli li jikkawża fil-kodiċi tagħna jekk aħna run? Probabbilment segfault. Forsi le, imma probabbilment segfault. U jien ngħid forsi mhux għaliex kultant inti tagħmel, xi kultant inti ma tieħux segfault. Kultant inti biss tikseb xxurtjati, iżda huwa madankollu se tkun bug fil-programm tagħna. So let me go quddiem u jiġbor dan. Jien ser tagħmel dan il-mod qodma iskola. Allura sing clang 0, scanf-1, scanf-1.C, Ikteb. Oops, skola wisq antik. Ejja ara. Fejn ma mmur? Oh, char * buffer. Oh, grazie - Ħlief, OK - iskola antika ħafna. Kull dritt, huwa kien filwaqt li. So I stajt biss salvati l-fajl wara jagħmlu dik temporanja bidla mument ilu. U issa I jikkompilaw dan manwalment bl clang. U issa jien se jimxi 'l quddiem u run scanf-1, Ikteb. String jekk jogħġbok. I ser tip "bonjour." U issa, hawn fejn, franchement, printf tista hija ftit annoying. Mhuwiex fil-fatt se segfault f'dan il-każ. Printf hija ftit speċjali minħabba huwa tant super komunement użati li essenzjalment printf qed tagħmel us a favor u t-twettiq, li mhux pointer valida. Let me teħodha fuq ruħi biss print out fil-parentesi null, anke għalkemm mhuwiex neċessarjament dak aħna lilna nfusna mistennija. Allura ma nistgħux verament faċilment jinduċi segfault ma 'dan, iżda b'mod ċar dan mhuwiex l-imġieba ridt. Allura x'inhu l-soluzzjoni sempliċi? Ukoll, fil-scanf-2, let me jipproponi li minflok attwalment biss allokazzjoni ta ' char *, let me jkun ftit aktar intelliġenti dwar dan, u let me jallokaw buffer bħala sekwenza ta '16 Chars. So I tista 'tagħmel dan fi ftit ta' modi. I jistgħu assolutament użu malloc. Imma I tista 'tmur lura għal żewġ ġimgħa meta I biss meħtieġ mazz sħiħ ta ' karattri. Li jinsab biss firxa. So let me minflok tirridefinixxi buffer li tkun firxa ta '16 karattri. U issa, meta I jgħaddu buffer fil - u din hija xi ħaġa aħna ma jitkellmu dwar f'żewġ ġimgħa - imma int tista 'tittratta firxa kif għalkemm huwa ta 'indirizz. Teknikament, kif aħna stajt tidher, dawn qed ftit differenti. Iżda scanf mhux se mind jekk inti tgħaddiha l-isem ta 'firxa, għaliex dak Clang se tagħmel għalina huwa essenzjalment jikkura l-isem ta 'dak array bħala l- indirizz tal-blokki ta '16 bytes. Allura dan huwa aħjar. Dan ifisser li issa nista nisperaw tagħmel dan li ġej. Let me zoom out għal mument u ma jagħmlu scanf-2, miġbura OK. Issa let me do ltqajna slash scanf-2. String jekk jogħġbok. "Hello." U deher li jaħdmu f'dan il-ħin. Iżda jista 'xi ħadd tipproponi xenarju li fiha ma jkunx jista 'għadhom jaħdmu? Yeah? Xi ħaġa itwal minn 16 karattru. U fil-fatt, nistgħu nkunu ftit aktar preċiża. Xi ħaġa itwal imbagħad 15 karattri, għaliex verament għandna bżonn li wieħed iżomm f'moħħu li għandna bżonn li backslash żero impliċitament fl-aħħar tas-sekwenza, li hija twarrib scanf se tipikament jieħdu ħsieb ta għalina. So let me tagħmel xi ħaġa simili - kultant nistgħu biss leave bħal dik. OK, hekk aħna issa stajt indotta tort segmentazzjoni tagħna. Għaliex? Minħabba I ittajpjat għal aktar minn 15 karattri, u hekk aħna ħadthom attwalment memorja mimsus li I attwalment m'għandux ikollhom. Allura x'hemm verament-soluzzjoni hawn? Ukoll, dak li jekk għandna bżonn string itwal? Well, aħna forsi jagħmilha 32 bytes. Ukoll, dak li jekk dan mhux twil biżżejjed? Kif madwar 64 bytes? X'jiġri jekk dan mhux twil biżżejjed? Kif madwar 128 jew 200 bytes? Dak li hu verament-soluzzjoni hawn fil- każ ġenerali, jekk ma nafux fl tavvanza dak l-utent għaddej biex tip? Huwa biss tip ta 'uġigħ kbir fl-ħmar, li tkun onest, u huwa għalhekk li l- CS50 librerija għandha linji ftit għexieren ta ' kodiċi li jimplimentaw kollettivament GetString string b'mod li aħna ma għandek tkun taf minn qabel liema l- utent se tip. B'mod partikolari, jekk inti tħares lura lejn cs50.c minn ġimgħatejn ilu, tkun taf tara li GetString attwalment ma jużawx scanf b'dan il-mod. Pjuttost, jgħid karattru wieħed fi żmien. Minħabba li l-unika ħaġa sbieħ dwar qari karattru wieħed huwa nistgħu jiggarantixxu nfusna li dejjem jkollhom char inqas wieħed. I tista 'biss tiddikjara char, u mbagħad ħu dawn il-passi verament tarbija biss taqra karattru wieħed fi fi ħin mill-keyboard. U allura, dak li inti ser tara GetString ma huwa kull darba li runs out ta ', jiġifieri, 16 bytes tal-memorja, hija tuża malloc, jew ku tiegħu, li jallokaw aktar memorja, ikkupjar l-qodma memorja fil-ġdida, u mbagħad crawling flimkien, jkollna karattru wieħed fi żmien, u meta runs out ta 'dak blokki ta 'memorja, throws bogħod, grabs blokki akbar ta 'memorja, kopji qodma fis ġodda, u jirrepeti. U huwa verament uġigħ li attwalment timplimenta xi ħaġa sempliċi kemm jkollna input minn utent. Allura inti tista 'tuża scanf. Tista 'tuża funzjonijiet oħra simili. U ħafna ta 'kotba u online eżempji jagħmlu, iżda dawn qed kollha vulnerabbli għal problemi bħal dan. U finalment, jkollna a segfault huwa tip ta 'annoying. Mhuwiex tajjeb għall-utent. Iżda fl-agħar każ, dak ma huwa fundamentalment tpoġġi tiegħek kodiċi f'riskju ta '? Xi tip ta 'attakk, potenzjalment. Tkellimna dwar wieħed attakk - overflowing-munzell. Iżda b'mod ġenerali, jekk int permess biex overflow buffer, bħal għamilna a Koppja ta 'ġimgħat ilu, biss bil-miktub aktar minn "bonjour" fuq il-munzell, inti tista 'tabilħaqq tieħu f'idejha, ​​potenzjalment, a kompjuter, jew għall-inqas tikseb lejn id-data li ma jappartjenix lilek. Għalhekk fil-qosor, dan huwa għaliex għandna dawk ir-roti ta 'taħriġ. Imma issa, aħna jibdew teħodhom off, bħala programmi tagħna m'għadx għandhom bżonn, neċessarjament, input mill-utent. Iżda fil-każ ta 'problema stabbiliti sitt, input tiegħek se jiġu minn enormi fajl dizzjunarju b'150 xi fard elf kelma. Allura inti mhux ser ikollhom għalfejn tinkwieta dwar input arbitrarja l-utent. Aħna ser jagħtuk xi suppożizzjonijiet dwar dan il-fajl. Kwalunkwe mistoqsijiet dwar pointers jew scanf jew input utent b'mod ġenerali? Kull dritt, hekk ħarsa imbagħad lejn wieħed batuta suġġett minn ġimgħatejn ilu. U li kien dan il-kunċett ta 'Struct. Mhux li - din l-idea ta ' Struct, li kien dak? What did Struct do għalina? Iddefinixxi - sorry? Tiddefinixxi tip varjabbli. Allura sort ta '. Aħna fil-fatt tgħaqqad żewġ suġġetti. Allura ma typedef, ifakkar li nistgħu tiddikjara tip ta 'tagħna stess, bħal sinonimu, bħal string għal char *. Iżda bl-użu typedef u Struct, nistgħu joħolqu verament strutturi ta 'dejta tagħna stess. Per eżempju, jekk immur lura fis gedit hawn għal ftit mument, u I jimxi 'l quddiem u tagħmel xi ħaġa simili, let me jiffrankaw dan bħala, ejja ngħidu, structs.c temporanjament, jien biss ser jimxi 'l quddiem u jinkludu standardio.h, null prinċipali int. U mbagħad fil hawn, ejja ngħidu li nixtieq li jikteb programm li taħżen studenti multipli mill multipli djar, per eżempju. Allura huwa simili registrarial database ta 'xi tip. Hekk jekk I bżonn l-isem istudent waħda, I tista 'tagħmel xi ħaġa bħall-isem * char, u jien ser tagħmel xi ħaġa simili - attwalment, ejja jużaw il-librerija CS50 għal ftit mument biex jagħmlu dan ftit aktar sempliċi, sabiex inkunu nistgħu tissellef dawk għexieren ta 'linji ta' kodiċi. U ejja biss jżommha sempliċi. Aħna ser jżommha string, u issa GetString. So I pretensjoni issa li stajt maħżuna l-isem ta 'xi student, u l-dar ta' xi student, sempliċement jużaw fatturi varjabbli bħal għamilna u fil-ġimgħa. Imma suppose I issa jridu jappoġġjaw istudenti multipli. Kull dritt, hekk instincts tiegħi huma jagħmlu string Isem2, gets GetString, spag house2 gets GetString. U allura tielet student tagħna, ejja do name3 GetString. Kull dritt, għalhekk dan huwa wieħed jittama impressjonanti inti bħala tip ta 'stupid, minħabba dan il-proċess huwa verament qatt ser jispiċċaw, u huwa biss se jagħmlu kodiċi tiegħi ħarsa agħar u agħar u agħar. Iżda aħna solvuta din wisq ġimgħatejn. Liema kienet soluzzjoni relattivament nadif tagħna meta kellna varjabbli multipli tal- istess tip ta 'data li huma kollha relatati, iżda aħna ma tridx dan mess atroċi ta 'varjabbli bl-istess mod jismu? Dak li ma nagħmlu minflok? So I think I smajt ftit postijiet. Kellna firxa. Jekk inti tixtieq każi multipli ta ' xi ħaġa, għaliex ma aħna nadif dan kollu up u biss jgħidu, agħti lili array ismijiet imsejħa? U għal issa, ejja kodiċi 3 tal iebsa. U mbagħad tagħti me firxa ieħor imsejħa djar, u let me għal Kodiċi issa hard 3. U stajt massiv mnaddfa l- mess li I biss maħluqa. Issa, stajt għadu diffiċli kodifikati 3, iżda anke 3 tista dinamikament jiġu mill- utent, jew ARGV, jew simili. Allura dan huwa diġà aktar nodfa. Imma x'hemm annoying dwar dan hija li issa, anki jekk l-isem huwa b'xi mod fundamentalment marbuta mal- house ta 'student - huwa student li I really rridu li jirrappreżentaw - I issa għandhom żewġ arrays li huma paralleli fis-sens li dawn qed l- istess daqs, u l-ismijiet bracket 0 preżumibbilment mapep għall bracket djar 0, u ismijiet parentesi 1 mapep għal djar bracket 1. Fi kliem ieħor, li student jgħix fil dik id-dar, u li student ieħor jgħix fil dik id-dar oħra. Iżda żgur dan jista 'jkun isir aktar nadif. Ukoll, tista ', fil-fatt. U let me imorru quddiem u tiftaħ up structs.h, u tkun taf tara din l-idea hawnhekk. Avviż li stajt użati typedef, kif inti allużjoni għall mument ilu li jiddikjara tagħna tip ta 'data stess. Imma jien wkoll jużaw dan il-keyword ieħor imsejħa Struct li tagħti me a ġdid struttura tad-data. U din l-istruttura tad-data nitlob va li jkollha żewġ affarijiet ġewwa ta ' dan - string imsejjaħ isem, u string imsejħa dar. U l-isem jien ser jagħti lill din l-istruttura tad-data li qed jiġri li għandu jissejjaħ student. I jistgħu sejħa hija xejn nixtieq, iżda dan jagħmlu semantikament sens li lili fil-fehma tiegħi. Allura issa, jekk I jiftħu verżjoni aħjar tal-programm bdejt miktub hemm, let me iscroll għall-quċċata. U hemm ftit aktar linji ta 'kodiċi hawn, iżda let me tiffoka għal il-mument fuq waħda. Stajt ddikjarat l-istudenti imsejħa kostanti u diffiċli kodifikati 3 għal issa. Imma issa, avviż kif nadif kodiċi tiegħi jibda biex tikseb. F'konformità 22, niddikjara firxa ta 'studenti. U tinnota li student hija apparentement issa 'tip data. Minħabba fil-quċċata ta 'dan il-fajl, avviż Stajt inklużi dan il-fajl header li I jinġibed up ftit mument ilu. U dan il-fajl header sempliċement kellha din id-definizzjoni ta 'student. Allura issa, stajt ħolqot data tad-dwana tiegħi stess tip li l-awturi ta 'snin C ilu ma think ta 'qabel. Imma l-ebda problema. I jistgħu jagħmlu myself. Allura dan huwa firxa imsejħa istudenti, kull membri li hija struttura student. U nixtieq tlieta minn dawk fil-firxa. U issa, dak ma l-bqija ta 'dan il-programm do? I meħtieġa xi ħaġa ftit arbitrarju. Allura minn online 24 onward, I jtenni 0-3. I imbagħad titlob lill-utent għall- isem l-istudent. U mbagħad I użu GetString bħal qabel. Imbagħad I jistaqsu għall-dar l-istudent, u I-użu GetString bħal qabel. Iżda avviż - ftit ġdida biċċa sintassi - I xorta tista indiċi għall-istudent i-th, imma kif nista 'nikseb fuq l-informazzjoni speċifika ġewwa qasam tal-Struct? Well, x'hemm apparentement l- biċċa ġdida ta 'sintassi? Huwa biss l-operatur dot. Imxejna ma verament rajt dan qabel. Inti stajt tidher fil pset ħames jekk inti stajt dived diġà ma 'fajls Bitmap. Iżda l-dot ifisser biss ġewwa ta 'dan Struct jew oqsma multipli, jagħtu dot isem, jew jagħtu me dot house. Dan ifisser mur ġewwa tal-Struct u tikseb dawk l-oqsma partikolari. X'tagħmel l-bqija ta 'dan il-programm do? Huwa mhux kollha li sexy. Avviż li I jtenni 0-3 darb'oħra, u I sempliċiment toħloq Ingliż frażi bħal hekk u hekk tkun tali u tali dar, li jgħaddi fl-isem dot minn l-istudent i-th u tagħhom dar kif ukoll. U mbagħad fl-aħħar, issa aħna ser tibda tikseb anali dwar dan, issa li aħna qed familjari ma 'dak malloc u funzjonijiet oħra ġew tagħmel dan il-ħin. Għaliex għandi ħielsa kemm isem u d-dar, anki jekk I ma sejħa malloc? GetString għamlet. U li kien l-sigrieti ftit maħmuġa għal diversi ġimgħat, iżda għandha GetString ġie jnixxu memorja kollha fuq il- jpoġġi kull semestru s'issa. U valgrand se finalment jiżvelaw dan lilna. Imma din mhix big deal, għaliex naf li nista 'sempliċement ħielsa l-isem u l-dar, għalkemm teknikament, li tkun super, sikur super, I għandu jkun tagħmel xi żball iċċekkjar hawn. Liema huma instincts tiegħek tghidlek? X'għandi nkun kontroll għall- qabel I ħielsa x'inhi spag, aka li char *? I għandhom verament jiġi verifikat jekk l-istudenti i bracket dot isem ma null ugwali. Imbagħad ser tkun OK biex jimxi 'l quddiem u ħielsa li pointer, u bl-istess jew l-oħra waħda ukoll. Jekk istudenti bracket i dot house mhix daqs null, dan issa se tipproteġi kontra l-każ kantuniera li fih GetString prospetti xi ħaġa bħal null. U rajna mument ilu, printf se tħarisna up here bi ftit qal null, li se tfittex stramb. Iżda mill-inqas mhux se segfault, kif rajna. Well, let me jagħmlu ħaġa waħda oħra hawn. structs-0 huwa tip ta 'programm stupid minħabba I jidħol dan kollu data, u mbagħad huwa tilef ladarba l-programm jintemm. Iżda let me imorru quddiem u tagħmel dan. Let me jagħmlu l-terminal tieqa daqsxejn akbar. Let me jagħmlu structs-1, li huwa verżjoni ġdida ta 'dan. I ser zoom ftit. U issa let me run dot slash structs-1. Isem istudent - David Mather, ejja tagħmel Rob Kirkland, ejja do Lauren Leverett. X'hemm interessanti issa huwa avviż - u I biss jafu dan għaliex I kiteb il-programm - hemm fajl issa 'kurrenti tiegħi direttorju imsejjaħ students.csv. Xi wħud minnkom tista raw dawn fid-dinja reali. X'hemm fajl CSV? Valuri separata bil-virgoli. Huwa tip ta 'prodotti simili raġel foqra verżjoni ta 'fajl Excel. Huwa tabella ta 'ringieli u kolonni li inti tista 'tiftaħ fi programm bħal Excel, jew numri fuq Mac. U jekk I miftuħa dan il-fajl hawn fuq gedit, avviż - u n-numri ma jkunux hemm. Li jinsab biss gedit javżak me linja numri. Avviż fuq l-ewwel linja ta 'dan fajl huwa David u Mather. Il-linja li jmiss huwa Rob virgola Kirkland. U t-tielet linja hija Lauren comma Leverett. Allura dak li I maħluqa? Stajt issa miktuba programm C li effettivament jistgħu jiġġeneraw spreadsheets li jistgħu jinfetħu programm bħal Excel. Mhux kollha li konvinċenti sett ta 'data, iżda jekk għandek biċċiet ħafna akbar ta ' data li inti fil-fatt tixtieq li jimmanipulaw u jagħmlu graffs ta 'u l- simili, dan huwa forsi wieħed mod biex jinħolqu dik id-data. Barra minn hekk, CSVs huma attwalment super komuni biss għall-ħażna tad-data sempliċi - Yahoo Finanzi, per eżempju, jekk ikollok stock kwotazzjonijiet permezz tal-hekk imsejħa tagħhom API, is-servizz b'xejn li ihallik nikseb stock up-to-the-data attwali kwotazzjonijiet għall-kumpaniji, huma jagħtu data lura fil- super format CSV sempliċi. Allura kif ma nagħmlu dan? Ukoll avviż, aktar ta 'dan tal-programm kważi l-istess. Iżda avviż stabbiliti hawn, minflok print l-istudenti li, mil-linja 35 onward, I jsostnu li jien iffrankar l- istudenti li disk, hekk iffrankar fajl. So avviż jien tiddikjara FILE * - issa, dan huwa tip ta 'anomalija fis C. Għal kwalunkwe raġuni, FILE huwa caps kollha, li mhux simili ħafna tipi ta 'data oħra fil C. Iżda din hija mibnija fil- tip ta 'data, FILE *. U jien tiddikjara pointer għall-fajl, huwa kif inti tista 'taħseb li. fopen ifisser fajl miftuħ. What file tridu miftuħ? Irrid li tiftaħ fajl li jiena ser arbitrarju sejħa students.csv. I tista 'sejħa li xejn irrid. U mbagħad tieħu raden. X'tagħmel l-tieni argument li fopen probabilment tfisser? Dritt, w għall jiktbu, tista jkun r għall read. Hemm għall tehmeż jekk inti trid iżżid ringieli u mhux jissostitwixxu l-ħaġa sħiħa. Imma I biss jixtiequ joħolqu dan il-fajl darba, so I ser tuża unquote w kwotazzjoni. U naf li biss meta tkun tinqara id-dokumentazzjoni, jew il-paġna bniedem. Jekk fajl ma jkunx null - fi kliem ieħor, jekk xejn marret ħażin hemmhekk - let me jtenni fuq il- istudenti 0-3. U issa avviż li hemm xi ħaġa dejjem hekk ftit differenti dwar il-linja 41 hawn. Mhuwiex printf. Huwa fprintf għal fajl printf. Allura li għaddej biex jikteb għall-fajl. Liema fajl? Il-wieħed li inti tispeċifika pointer bħala l-ewwel argument. Imbagħad aħna tispeċifika string format. Imbagħad aħna tispeċifika liema string rridu plug fl għall-ewwel i fil-mija, u imbagħad varjabbli ieħor jew it-tieni fil-mija s. Imbagħad aħna qrib il-fajl ma fclose. Minn I tilliberalizza l-memorja bħal qabel, għalkemm I għandhom imorru lura u żid xi kontrolli għal null. U li hu. fopen, fprintf, fclose me tagħti l- kapaċità li joħolqu fajls test. Issa, tkun taf tara fil-problema sett ħames, li tkun tinvolvi xbihat, inti ser tkun qed tuża fajls binarji minflok. Iżda fundamentalment, l-idea hija l-istess, anki jekk il-funzjonijiet inti ser tara huma ftit differenti. Allura tour whirlwind, iżda inti se tikseb wisq familjari mal-fajl I/O-- input u output - ma pset ħamsa. U xi mistoqsijiet dwar l- baŜi inizjali hawn? Yeah? X'jiġri jekk inti tipprova teħles valur null? Nemmen, sakemm ħielsa gotten ftit aktar faċli għall-utent, inti tista ' potenzjalment segfault. Jgħaddiha null huwa ħażin minħabba I ma jemmnu ħielsa bothers li jiċċekkja għalik, għaliex dan jista 'potenzjalement jkun skart ta 'żmien biex tagħmel lilha nnifisha għal kulħadd fid-dinja. Mistoqsija tajba, għalkemm. Kull dritt, sabiex dan it-tip ta gets ahna suġġett interessanti. It-tema tal-problema sett ħamsa forensika. Mill-inqas dan huwa porzjon tal-problema sett. Forensika ġeneralment jirreferi għall- irkupru ta 'informazzjoni li jistgħu jew jista 'ma ġew imħassra deliberatament. U hekk ħsibt I d jagħtik a quick togħma ta 'dak li hu verament għaddejjin kollha din id-darba taħt il- hood tal-kompjuter tiegħek. Per eżempju, jekk għandek ġewwa tal tiegħek laptop jew kompjuter desktop tiegħek hard drive, huwa jew mekkaniku apparat li attwalment spins - hemm affarijiet ċirkolari imsejħa platters li tfittex pjuttost simili dak I biss kellhom up fuq l-iskrin hawn, għalkemm dan huwa dejjem iskola antika. Dan huwa ta 'tliet u nofs pulzier hard drive. U pulzieri tlieta u nofs jirreferi ta ' ma 'l-ħaġa meta inti jinstallaw dan fil-kompjuter. Ħafna minnkom guys fil laptops tiegħek issa jkollhom drives stat solidu, jew SSDs, li ebda partijiet li jiċċaqalqu. Huma qed aktar bħal RAM u anqas simili dawn il-mezzi mekkaniċi. Iżda l-ideat għadhom l-istess, ċertament kif jirrelataw għall-problema stabbiliti ħamsa. U jekk taħseb dwar issa hard drive jirrappreżenta tkun ċirku, li I ser tiġbed bħal dan hawn. Meta inti toħloq fajl fuq il-kompjuter tiegħek, jekk huwa ta 'SSD, jew F'dan il-każ, l-anzjani iskola hard drive, dan il-fajl jinkludi bits multipli. Ejja ngħidu li dan huwa 0 u 1, mazz sħiħ ta 0s u 1s. Allura dan huwa hard drive kollu tiegħi. Din hija apparentement fajl pretty big. U qed tuża l-0s u 1s f'dak porzjon tal-platter fiżika. Ukoll, dak li huwa dak il-porzjon fiżika? Ukoll, jirriżulta li fuq hard drive, inqas ta 'dan it-tip, hemm dawn il-partiċelli manjetiċi ċkejkna ftit. U huma essenzjalment ikollhom tramuntana u poli nofsinhar għalihom, b'tali mod li jekk inti dawran wieħed minn dawk partiċelli manjetiċi B'dan il-mod, inti jista 'jgħid li huwa jirrappreżentaw 1. U jekk huwa rasu 'l isfel fin-nofsinhar sa tramuntana, inti jista 'jgħid li huwa jirrappreżentaw 0. Allura fid-dinja fiżika reali, li l- kif inti tista 'tirrappreżenta xi ħaġa istat binarja tal-0 u 1. Allura li kollox fajl huwa. Hemm mazz sħiħ ta 'manjetiċi partiċelli li huma b'dan il-mod jew tagħhom b'dan il-mod, il-ħolqien mudelli ta 0s u 1s. Iżda jirriżulta meta inti tiffranka fajl, xi informazzjoni jiġi ffrankat separatament. Allura dan huwa tabella ftit, direttorju, biex ngħidu hekk. U jien ser sejħa dan l-isem kolonna, u I ser sejħa dan il-post kolonna. U jien se ngħid, ejja ngħidu dan huwa jerġa tiegħi. Resume.doc tiegħi huwa maħżun post, ejja ngħidu 123. I dejjem tmur għall dak in-numru. Iżda huwa biżżejjed li jingħad li eżatt bħal fl RAM, inti tista 'tieħu hard drive Li l-gigabyte jew 200 gigabytes jew terabyte, u inti tista ' Numru kollha tal-bytes. Tista jinnumera biċċiet kollha ta '8 bits. Allura aħna ser jgħidu li dan hija 123 post. Allura dan ġewwa direttorju ta operattiva tiegħi sistema jiftakar li tiegħi jerġa hija fil-post 123. Iżda jiġrilha interessanti meta inti tħassar fajl. Allura per eżempju - u Thankfully, ħafna mill-dinja għandha maqbuda fuq dan - dak li jiġri meta inti drag fajl lill Mac OS Trash tiegħek jew tiegħek Windows Recycle Bin? X'hemm l-iskop li jagħmlu dan? Huwa ovvjament biex jeħles mill-fajl, imma dak ma l-att ta 'jittrattienu u twaqqa fis Trash tiegħek jew tiegħek Recycle Bin do fuq kompjuter? Assolutament xejn, verament. Huwa biss bħal folder. Huwa folder speċjali, li jkun żgur. Iżda din hija attwalment iħassar il-fajl? Well, no, għaliex xi wħud minnkom probabbilment kienu simili, oh kkritikat, inti ma jfissirx li tagħmel dan. Allura inti ikklikkja darbtejn l- Trash jew Recycle Bin. You ħadthom poked madwar u inti stajt rkuprati l-fajl biss billi jittrattienu minn hemmhekk. Allura ċar, mhuwiex neċessarjament it-tħassir. OK, int intelliġenti minn dik. Inti taf li sempliċiment jittrattienu hija fil- Trash jew Recycle Bin ma jfissirx int jitbattal il-Trash. Allura inti tmur sa l-menu, u inti tgħidli Trash vojta jew vojta Recycle Bin. Imbagħad x'jiġri? Yeah, għalhekk jitħassar aktar hekk. Imma dak kollu li jiġri huwa dan. Il-kompjuter jinsa fejn resume.doc kien. Imma dak ma nbidlitx apparentement fl-istampa? Il-bits, il-0s u 1s li I jsostnu li huma fuq is-sit ta 'xi aspett fiżiku tal l-hardware. Huma qed għadhom hemm. Huwa biss il-kompjuter għandu minsija dak li huma. Allura huwa essenzjalment meħlusa tal-fajl bits sabiex ikunu jistgħu jerġgħu jintużaw. Iżda mhux sa inti toħloq fajls aktar, u fajls aktar, u aktar fajls se probabilistically, dawk 0s u 1s, dawk partiċelli manjetiċi, nikseb jerġgħu jintużaw, naħa rasu jew dritt up, għal fajls oħra, 0s u 1s. Allura inti għandek il-tieqa ta 'żmien. U m'humiex ta prevedibbli tul, verament. Hija tiddependi fuq id-daqs tal-hard tiegħek drive u fajls kemm għandek u kif malajr inti tagħmel oħrajn ġodda. Iżda hemm dan iż-żmien matul li dan il-fajl għadu perfettament jistgħux jitħallsu lura. Mela jekk inti qatt tuża programmi bħal McAfee jew Norton biex jippruvaw jirkupraw data, kollha li qed isir qed tipprova jirkupraw dan id-direttorju hekk imsejħa biex insemmu fejn fajl tiegħek kienet. U xi kultant Norton u se ngħid, fajl huwa 93% jitħallsu lura. Well, dak ma jfisser? Dan ifisser biss li xi fajl ieħor inzerta spiċċaw użu, ngħidu aħna, dawk bits barra tal-fajl oriġinali tiegħek. Allura dak li huwa attwalment involut fl-irkupru tad-data? Ukoll, jekk inti ma għandekx xi ħaġa bħal Norton installat minn qabel fuq il-kompjuter tiegħek, l-aħjar inti xi kultant tista 'tagħmel hu li tħares fil-hard drive kollu tfittex mudelli ta 'bits. U waħda mit-temi ta 'problema sett ħamsa li inti se tfittex il- ekwivalenti ta 'hard drive, a forensika immaġni ta 'karta flash kompatti minn kamera diġitali, it-tiftix għall-0s u 1s li tipikament, ma għolja probabbiltà, jirrappreżentaw il- bidu ta 'immaġni JPEG. U inti guys jistgħu jirkupraw dawk l-immaġini minn jekk wieħed jassumi, jekk nara dan il-mudell ta ' bits fuq l-immaġni forensika, bil probabbiltà għolja, li l-marki il-bidu ta 'JPEG. U jekk nara l-istess mudell mill-ġdid, li probabbilment jimmarka l-bidu ta ' ieħor JPEG, u ieħor JPEG, JPEG u ieħor. U dan huwa tipikament kif data ta 'rkupru se taħdem. X'hemm sbieħ dwar JPEGs huwa anke jekk il-format tal-fajl nnifisha hija kemmxejn kumplessi, il-bidu ta 'kull tali fajl huwa attwalment pjuttost identifikabbli u sempliċi, kif se tara, Jekk inti stajt ma diġà. Mela ejja tagħti ħarsa aktar mill-qrib taħt il-barnuża dwar eżattament dak li kien għaddejjin, u liema dawn 0s u 1s huma, li jtik daqsxejn aktar ta ' kuntest għal din l-isfida partikolari. [Daqq video] Fejn PC tiegħek-ħwienet l-aktar ta 'data permanenti tagħha. Biex tagħmel dan, l-informazzjoni jivvjaġġa minn RAM flimkien ma 'sinjali ta' softwer li jgħidulek l-hard drive kif jaħżnu dik id-data. Iċ-ċirkwiti hard drive tittraduċi dawk is-sinjali fi vultaġġ varjazzjonijiet. Dawn, imbagħad, jikkontrollaw il-drive hard partijiet li jiċċaqalqu, xi wħud mill-ftit partijiet li jiċċaqalqu jitħalla fil- moderni tal-kompjuter. Uħud mill-sinjali tal-kontroll bil-mutur li spins platters metall miksija. Id-data tiegħek huwa attwalment maħżuna fuq dawn platters. Sinjali oħra li jiċċaqalqu l-taqra / tikteb irjus biex taqra jew jikteb data dwar il-platters. Dan makkinarju tant preċiżi li bniedem xagħar ma setgħux lanqas tgħaddi bejn il- irjus u platti għażil. Madankollu, hija taħdem kollha b'veloċità terrific. [Daqq video END] DAVID Malan: Zoom fi ftit aktar profonda issa fil x'hemm attwalment fuq dawk platters. [Daqq video] -Ejja nħarsu lejn dak li aħna biss raw fil-mozzjoni bil-mod. Meta polz qasira ta 'l-elettriku huwa mibgħuta lill-taqra / tikteb ras, jekk Flips fuq elettromanjetika ċkejkna għal frazzjoni ta 'sekonda. Il-kalamita joħloq qasam, li bidliet l-polarità ta 'ċkejkna, ċkejkna porzjon tal-partikoli tal-metall li coat kull wiċċ platter. Serje mudell ta 'dawn ċkejkna, oqsma ċċarġjati up fuq il-disk jirrappreżenta ftit uniku ta ' data fin-numru binarju sistema użata mill-kompjuters. Issa, jekk il-kurrent tintbagħat mod wieħed permezz tal-taqra / tikteb ras, iż-żona ikun polarizzat f'direzzjoni waħda. Jekk l-kurrent tintbagħat fil- direzzjoni opposta, il- polarizzazzjoni hija maqluba. Kif inti tikseb off data l-hard disk? Just jitwaqqaf il-proċess. Allura huwa l-partiċelli fuq il-disk li jiksbu l-kurrent fil- taqra / tikteb ras li jiċċaqalqu. Poġġi flimkien miljuni ta 'dawn segmenti magnetized, u inti stajt ltqajna fajl. Issa, il-biċċiet ta 'fajl waħdieni jistgħu jiġu imxerrda fuq l-drive platters, tip ta bħall-mess ta 'dokumenti dwar iskrivanija tiegħek. Allura fajl extra speċjali iżomm rekord ta 'fejn kollox huwa. Ma inti tixtieq kellhom xi ħaġa bħal dik? [Daqq video END] DAVID Malan: OK, probabbilment le. Allura kif ħafna minnkom guys kiber ma 'dawn? OK, dan huwa inqas u inqas idejn kull sena. Imma jien kuntenta int inqas familjari magħhom, minħabba dan u tagħna stess demo ktieb, sfortunatament, qegħdin imutu ħafna bil-mod mewt hawn 'familjarità. Imma dan huwa dak I, għall-inqas, lura fl- iskola għolja, l-użu użati għall-backups. U kien aqwa, għaliex inti jista 'jaħżen 1.4 megabytes fuq dan disk partikolari. U dan kien il-verżjoni densità għolja, kif indikat mill-HD, li għandha jiġifieri qabel videos HD lum. Densità Standard kienet ta '800 kilobytes. U qabel li, kien hemm Diski 400-kilobyte. U qabel li, kien hemm 5 u 1/4 pulzier diski, li kienu tassew floppy, u ftit usa 'u taller minn dawn l-affarijiet hawn. Iżda int tista 'attwalment ara l-hekk imsejħa Aspett floppy disks ta 'dawn. U funzjonalment, dawn qed attwalment pretty simili għal hard drives ta 'mill- inqas dan it-tip. Għal darb'oħra, SSDs fil-kompjuters ġodda jaħdmu ftit differenti. Imma jekk inti tmur li tab metall ftit, inti tista 'attwalment tara cookie ftit, jew platter. Mhuwiex metall bħal dan wieħed. Dan wieħed fil-fatt xi irħas materjal tal-plastik. U inti tista 'tip ta' wiggle. U inti stajt biss trully mimsuħ off xi numru ta 'bits jew partiċelli manjetiċi minn dan disk. Allura Thankfully, hemm xejn fuqha. Jekk dik ħaġa fil-mod - u jkopru għajnejn tiegħek u dawk tal-proxxmu tiegħek - inti tista 'biss tip ta' tiġbed dan off għant kollu bħal dik. Iżda hemm rebbiegħa ftit, sabiex ikunu konxji ta 'dak mal-għajnejn tiegħek. Allura issa għandek verament floppy disk. U x'hemm notevoli dwar din hija li fil kemm dan huwa rappreżentazzjoni fuq skala żgħira ta 'akbar hard drive, dawn l-affarijiet huma super, sempliċi super. Jekk inti oqros il-qiegħ ta 'dan, issa li li ħaġa metall huwa off, u l-qoxra minnhom miftuħa, kollha hemm hi ta 'żewġ biċċiet ta' feltru u l-hekk imsejħa disk floppy ma 'biċċa ta' metall fuq ġewwa. U hemm tmur nofs kontenut disk tiegħi. Hemm tmur ieħor nofs minnhom. Imma dak li kollu li kien għażil ġewwa tal-kompjuter tiegħek fl-imgħoddi. U għal darb'oħra, dan iseħħ fil-perspettiva, kemm hu kbir huwa l-aktar ta 'tiegħek hard drives dawn il-jiem? 500 gigabytes, terabyte, forsi fl kompjuter desktop, 2 terabytes, 3 terabytes, 4 ta'Terabytes, id-dritt? Dan huwa megabyte wieħed, jagħtu jew jieħu, li ma jistgħux anki jitwaħħal MP3 tipiku jibqgħalu dawn il-jiem, jew xi mużika fajl simili. Allura tifkira ftit għalik illum, u wkoll biex jgħin contextualize dak aħna ser tkun qed tieħu għall mogħtija issa problema stabbiliti ħamsa. Għalhekk dawn huma tiegħek li żżomm. So let me tranżizzjoni fejn se jkun l-infiq l pset jmiss ukoll. Allura aħna ħadthom issa stabbilit din il-paġna għall - oh, koppja ta 'avviżi malajr. Dan Ġimgħa, jekk inti tixtieq jissieħbu CS50 għall-ikel, mur l-post tas-soltu, cs50.net/rsvp. U proġett finali - hekk kull-sillabu, konna stazzjonati l- ispeċifikazzjoni tal-proġett finali diġà. Jirrealizzaw li dan ma jfissirx huwa dovut partikolarment dalwaqt. Huwa stazzjonati, verament, biss li tikseb inti guys taħseb dwar dan. U tabilħaqq, super sinifikanti persentaġġ ta 'inti tkun indirizzar proġetti finali dwar materjal li aħna lanqas biss gotten fil-klassi, iżda se kmieni kemm ġimgħa d-dieħla. Avviż, madankollu, li l-spec jitlob xi komponenti differenti ftit tal- proġett finali. L-ewwel, fi ftit ġimgħat, huwa pre-proposta, email pretty każwali biex TF tiegħek li tgħid lilu jew dak li int taħseb dwar għall-proġett tiegħek, ma ebda impenn. Proposta se jkun partikolari tiegħek impenn, qal, hawnhekk, dan huwa dak I tixtieq tagħmel għall-proġett tiegħi. What do you think? Kbira wisq? Żgħir wisq? Huwa maniġġabbli? U tara l-spec għal aktar dettalji. Koppja ta 'ġimgħat wara li l-istatus rapport, li huwa simili email każwali biex TF tiegħek li tgħid kemm ferm lura inti fil finali tiegħek implimentazzjoni proġett, segwit minn l-Hackathon CS50 li għalihom kulħadd huwa mistieden, li se jkun avveniment minn 20:00 fuq waħda filgħaxija till 07:00 AM l-għada filgħodu. Pizza, kif I jista 'jkollhom imsemmija fil-ġimgħa żero, wil jkun innotifikat fil 09:00, Ikel Ċiniż fil 01:00. U jekk int xorta imqajjem fi 5:00 AM, aħna ser tieħdok għall IHOP għall-kolazzjon. Allura l-Hackathon hija waħda mill-aktar esperjenzi memorabbli fil-klassi. Imbagħad l-implimentazzjoni huwa dovut, u allura l-climactic CS50 Fair. Aktar dettalji dwar dawn kollha fil-ġimgħat li ġejjin. Imma ejja mmorru lura għal xi ħaġa iskola antika - għal darb'oħra, firxa. Allura firxa kien sbieħ, minħabba li jsolvi problemi bħal rajna biss mument ilu bi strutturi student jkollna ftit mill-kontroll jekk aħna jridu li jkollhom student wieħed, student tnejn, student tlieta, student dot dot dot, xi numru arbitrarju ta 'studenti. Allura arrays, ftit ġimgħat ilu, swooped fl u solvuti l-problemi tagħna ta 'mhux jafu bil-quddiem affarijiet kemm ta 'xi tip aħna tista' tixtieq. U Rajna li structs tista 'tgħinna aktar torganizza kodiċi tagħna u jżommu varjabbli kunċettwalment simili, bħal isem u dar, flimkien, sabiex inkunu jistgħu jittrattawhom bħala entità waħda, ġewwa li minnhom hemm biċċiet iżgħar. Iżda arrays jkollhom xi żvantaġġi. Liema huma wħud mill-iżvantaġġi konna jiltaqgħu magħhom ma arrays s'issa? X'hemm li? Daqs fiss - hekk anke jekk inti tista ' tkun tista 'talloka memorja għal array, ladarba inti taf kif ħafna studenti ikollok, kemm karattri għandek mill-utent, ladarba inti stajt allokati il-firxa, inti stajt tip ta 'miżbugħa lilek innifsek fis-kantuniera. Għaliex inti ma tista 'daħħal elementi ġodda fis-nofs ta 'firxa. Inti ma tistax daħħal elementi aktar fl-aħħar ta 'firxa. Really, inti jkollhom jirrikorru għal ħolqien ta ' firxa sħiħa ġdida, kif konna diskussi, ikkupjar l-qodma fil-ġdida. U għal darb'oħra, dan huwa l-uġigħ ta 'ras li GetString jittratta għalik. Iżda għal darb'oħra, inti ma tistax anki daħħal xi ħaġa fis-nofs tal-firxa jekk ir-rata ma tkunx ġiet mimlija kompletament. Per eżempju, jekk dan array hawn ta 'daqs sitta biss għandha ħames affarijiet fiha, ukoll, inti tista 'biss tindi xi ħaġa fuq l-aħħar. Imma x'jiġri jekk inti tixtieq li daħħal xi ħaġa fis-nofs ta 'l- array, anki jekk jista 'jkollhom ħamsa mis-sitt affarijiet fih? Ukoll, dak li ma nagħmlu meta kellna kollha ta 'voluntiera umani tagħna onstage fil ġimgħat passat? Jekk ridna li tpoġġi xi ħadd hawnhekk, jew dawn in-nies kif jimxu dan mod, jew dawn in-nies kif jimxu dan mod, u li saret għalja. Ċ-ċaqliq tan-nies ġewwa ta ' array spiċċaw żżid up u jiswew us ħin, għalhekk ħafna kwadrat n tagħna running żminijiet bħal sort inserzjoni, per Pereżempju, fl-agħar każ. Allura arrays huma kbar, iżda inti għandek taf minn qabel kemm hu kbir inti tixtieq. Allura OK, hawnhekk soluzzjoni. Jekk jien ma jaf minn qabel kemm studenti I jista 'jkollhom, u naf ladarba I jiddeċiedu, għalkemm, jien mwaħħla ma 'dik ħafna studenti, għaliex ma I biss dejjem jallokaw darbtejn ħafna spazju kif I tista 'taħseb I bżonn? Hija li mhux soluzzjoni raġonevoli? Realistikament, ma naħsibx li aħna qed ser jeħtieġu aktar minn 50 slots fil-firxa għall-klassi ta 'daqs medju, hekk ejja biss madwar up. I ser tagħmel 100 slots fl array tiegħi, biss sabiex inkunu nistgħu definittivament jiksbu l- numru ta 'studenti I tistenna li jkun f'xi klassi ta 'daqs medju. Allura għaliex mhux biss jarrotondaw u jallokaw memorja aktar, tipikament, għal firxa milli taħseb inti tista 'anki bżonn? X'hemm dan pushback sempliċi għal dik l-idea? Int biss wasting memorja. Litteralment kull programm tikteb mbagħad huwa forsi tuża memorja doppju ta 'kemm inti fil-fatt bżonn. U li biss ma jħossu bħal partikolarment soluzzjoni eleganti. Barra minn hekk, hija biss inaqqas l- probabbiltà ta 'problema. Jekk jiġri li jkollhom kors popolari semestru wieħed u inti għandek 101 istudenti, program tiegħek għadu fundamentalment jiffaċċjaw l-istess kwistjoni. Allura Thankfully, hemm soluzzjoni għal dan ad problemi kollha tagħna fil-forma ta 'strutturi ta' dejta li huma aktar kumplessi minn dawk Rajna s'issa. Dan, nitlob, hija lista linked. Din hija lista ta 'numri - 9, 17, 22, 26, u 34 - li ġew marbuta flimkien permezz ta 'dak li stajt mfassla bħala vleġeġ. Fi kliem ieħor, jekk jien ridt li jirrappreżentaw firxa, I tista 'tagħmel xi ħaġa bħal din. U jien ser tpoġġi dan fuq il-overhead fi ftit mument. I tista 'tagħmel - hello, id-dritt. Stand mill. Kompjuter ġdid hawn, ċari - id-dritt. Mela jekk ikolli dawn in-numri fil-firxa - 9, 17, 22, 26, 24 - mhux neċessarjament l-iskala. Kull dritt, hekk hawn huwa firxa tiegħi - oh my god. Kull dritt, hekk hawn huwa firxa tiegħi. Oh my god. [Daħk] DAVID Malan: nippretendu. Huwa wisq sforz biex tmur lura u tiffissa li, hekk hemm - 26. Allura aħna għandna dan firxa ta ' 9, 17, 22, 26, u 34. Għal dawk tal inti tista 'tara l- żball imbarazzanti I biss magħmula, hemm hu. So I jsostnu li din hija soluzzjoni effiċjenti ħafna. Stajt allokati kif ħafna ints kif I bżonn - wieħed, tnejn, tlieta, erba ', ħames, sitt jew - u stajt mbagħad maħżun-numri ġewwa ta 'dan array. Iżda suppose, allura, nixtieq li daħħal valur bħall-numru 8? Ukoll, fejn ma tmur? Jissoponi Irrid li daħħal numru simili 20. Ukoll, fejn ma tmur? X'imkien hemm fin-nofs, jew in-numru 35 irid imur x'imkien fl-aħħar. Imma jien kollha barra ta 'spazju. U għalhekk din hija sfida fundamentali ta 'arrays li ma huma s-soluzzjoni. I qal mument ilu, GetString issolvi din il-problema. Jekk inti tixtieq li daħħal is-sitt numru fis dan array, dak li huwa mill-inqas wieħed soluzzjoni tista 'taqa' lura fuq għall-żgur, bħad nagħmlu ma GetString? X'hemm li? Ukoll, jagħmilha akbar huwa aktar faċli minn qal jsir. Aħna ma tistax neċessarjament jagħmlu l-firxa akbar, imma x'nistgħu nagħmlu? Agħmel firxa ġdida li l-akbar, ta 'daqs 6, jew forsi daqs 10, jekk irridu biex tikseb l quddiem ta 'affarijiet, u mbagħad kopja il-firxa qodma fil-ġdida, u mbagħad ħielsa l array qodma. Imma x'inhu l-running time issa ta 'dak il-proċess? Huwa big O ta 'n, minħabba li l-ikkupjar va ispiża inti xi unitajiet ta ' żmien, sabiex mhux hekk ideali jekk irridu jallokaw firxa ġdida, li se li jikkunsmaw darbtejn daqs memorja temporanjament. Kopja qodma ġodda - I mean, huwa biss ras, li huwa, għal darb'oħra, għaliex aħna kiteb GetString għalik. Allura dak li jista 'nagħmlu minflok? Ukoll, dak li jekk l-istruttura tad-data tagħna attwalment għandha lakuni fil dan? Ejja ngħidu li I jirrilassaw għan tiegħi ta 'wara biċċiet kontigwi ta 'memorja, fejn 9 huwa dritt li jmiss għall-17, li huwa dritt li jmiss għall-22, u l-bqija. U jissoponi li 9 tistax tkun hawn RAM, u 17 jistgħu jiġu minn hawn fil-RAM, u 22 jistgħu jiġu minn hawn fil-RAM. Fi kliem ieħor, I m'għandhomx bżonn minnhom anki lura lura aktar. I biss għandhom b'xi mod ħajt labra permezz kull wieħed minn dawn in-numri, jew kull ta 'dawn in-nodi, kif aħna ser sejħa- rettangoli kif stajt mfassla minnhom, lil tiftakar kif tikseb l-aħħar bħal node mill-ewwel. Allura x'inhi l-ipprogrammar jinbena Rajna pjuttost reċentement li jien tista 'timplimenta dak il-ħajt, jew mfassla hawn, li nista ' jimplimentaw dawk vleġeġ? Pointers Allura, id-dritt? Jekk I jallokaw mhux biss int, imma node - u billi node, I jfissirx biss kontenitur. U viżwalment, I tfisser rettangolu. Allura node apparentement teħtieġ li fihom żewġ valuri - l-int innifsu, u mbagħad, kif implikat l-nofs ta 'isfel tar-rettangolu, biżżejjed spazju għal int. Hekk biss jaħsbu quddiem hawnhekk, kemm hu kbir huwa dan node, dan kontenitur relattiv? Kemm bytes għall-int? Preżumibbilment 4, jekk huwa l-istess bħas-soltu. U allura kemm bytes għall-pointer? 4. Allura dan il-kontenitur, jew dan node, huwa ser tkun struttura 8-byte. Oh, u li l-koinċidenza kuntenti li aħna biss introduċiet dan il-kunċett ta ' a Struct, jew struttura C. So I jsostnu li nixtieq li tieħu pass lejn dan aktar sofistikati implimentazzjoni ta 'lista ta' numri, a lista marbuta ta 'numri, I bżonn tagħmel ftit aktar ħsieb bil-quddiem u jiddikjara mhux biss int, imma Struct li jien ser sejħa, konvenzjonalment hawn, node. Nistgħu sejħa hija xejn irridu, imma node se jkunu tematiċi fil-lott mill-affarijiet aħna tibda tħares lejn issa. Ġewwa ta 'dik node huwa n int. U allura dan sintassi, ftit stramb ewwel daqqa t'għajn - Struct node * jmiss. Ukoll pictorially, dak huwa li? Dan huwa l-nofs ta 'isfel ta' -rettangolu li rajna ftit mument ilu. Imma għaliex jien qal Struct node * għall-kuntrarju biss node *? Għaliex jekk dak pointer hija li tipponta fil node ieħor, huwa biss il- indirizz ta 'node. C'est konsistenti ma 'dak li aħna ħadthom diskuss dwar pointers s'issa. Iżda għaliex, jekk nitlob din l-istruttura hija imsejħa node, għandi ngħid Struct node ġewwa hawn? Eżattament. Huwa tip ta 'realtà stupid ta' C. Il typedef, biex ngħidu hekk, ma jkunx seħħx. C huwa super litterali. Jgħid kodiċi top tiegħek biex qiegħ, xellug għal-lemin. U sakemm hits li semicolon fuq il- bottom line, raden dak li ma jeżistu bħala tip ta 'data? Node, node unquote kwotazzjoni. Iżda minħabba l-aktar verbose Dikjarazzjoni I ma fuq l-ewwel linja - typedef node Struct - minħabba li daħal l-ewwel, qabel il- braces kaboċċi, li tip simili pre-edukazzjoni clang li, inti taf liema, tagħti me a Struct imsejħa node Struct. Franchement, I ma simili li ssejjaħ affarijiet Struct node, node Struct kollha matul kodiċi tiegħi. Imma jien ser jużawha biss darba, biss ġewwa, I hekk li jista 'effettivament toħloq tip ta 'referenza ċirkolari, mhux a pointer li myself per se, iżda pointer għall-ieħor ta ' tip identiċi. Għalhekk jirriżulta li fuq struttura tad-data bħal dan, hemm ftit operazzjonijiet li jistgħu jkunu ta 'interess lilna. Aħna tista 'tixtieq li daħħal fi lista bħal din. Aħna tista 'tixtieq li jitħassar minn lista bħal din. Aħna tista 'tixtieq li tfittex l-lista ta' valur, jew b'mod iktar ġenerali, travers. U travers huwa biss mod fancy ta ' qal bidu fil-xellug u jimxu kollha il-mod lejn il-lemin. U avviż, anke ma 'dan ftit aktar struttura tad-data sofistikati, let me tipproponi li nistgħu tissellef xi wħud l-ideat tal-aħħar ġimgħatejn u timplimenta funzjoni msejħa tfittxija bħal dan. Huwa ser jirritorna vera jew falza, li jindika, iva jew ebda, n huwa fil-lista. Tieni argument tagħha huwa pointer mal-lista nnifisha, sabiex a pointer għal node. All jien ser imbagħad tagħmel huwa jiddikjara varjabbli temporanja. Aħna ser sejħa hija ptr b'konvenzjoni, għall pointer. U jien tassenja ugwali għall- bidu tal-lista. U issa avviż-loop waqt. Sakemm pointer mhux ugwali li null, jien ser jiċċekkja. Huwa pointer n vleġġa ugwali għal n li kienet għaddiet? U stenna minuta - ġdida biċċa sintassi. X'inhu vleġġa kollha f'daqqa? Yeah? Eżattament. Allura billi ftit minuti ilu, użajna l-dot notazzjoni għall-aċċess xi ħaġa ġewwa ta 'l-Struct, jekk il-varjabbli int mhux l-Struct innifsu, iżda pointer għal Struct, Thankfully, biċċa sintassi li finalment jagħmel sens intuwittivi. Il-vleġġa jfisser li jsegwu l-pointer, bħal vleġeġ tagħna tipikament ifisser pictorially, u jmorru fuq data kulħadd kemm ġewwa. Allura vleġġa huwa l-istess ħaġa bħat dot, iżda tużah meta jkollok pointer. Hekk biss biex terġa allura, jekk l-qasam n ġewwa tal-Struct imsejħa pointer ugwali ugwali n, ritorn vera. Inkella, din il-linja hawn - pointer ugwali pointer li jmiss. Allura dak li dan qed tagħmel, avviż, huwa jekk I am bħalissa tipponta lejn il-Struct fihom 9, u 9 mhuwiex in-numru I infittex - suppose I infittex għal n ugwali 50 - Jien ser taġġorna pointer temporanju tiegħi li jurux f'dan node aktar, iżda pointer vleġġa li jmiss, li se timplimenta me up here. Issa, I realizzati huwa whirlwind introduzzjoni. Nhar l-Erbgħa, aħna ser fil-fatt jagħmlu dan ma 'xi bnedmin u bi ftit aktar kodiċi b'pass kajman. Iżda realizzata, aħna qed issa qed data tagħna strutturi aktar kumplessi sabiex tagħna algoritmi tista 'tikseb aktar effiċjenti, li se tkun meħtieġa għall- pset sitt, meta aħna tagħbija, għal darb'oħra, dawk 150.000 kliem, iżda jeħtieġ li tagħmel hekk effiċjenti, u idealment, joħolqu programm li tmur għall-utenti tagħna ma lineari, mhux f'N kwadrat, iżda ħin kostanti, fil-ideal. Aħna ser tara inti nhar l-Erbgħa. SPEAKER: Fil-CS50 jmiss, David jinsa każ bażi tiegħu. DAVID Malan: U li kif inti tibgħat messaġġi bil C. X'inhu l - [MESSAĠĠ TEST VARJI NOTIFIKA Ħsejjes]