[THEME MUSIC] SPIKA 1: Hi, kila mtu. Karibu tena kwa sehemu. Lovely siku out-- ambayo ni kwa nini, mimi nina uhakika, kuna nne tu ya wewe hapa na si pakiti yetu ya kawaida. Nimekuwa mgonjwa mwishoni mwa wiki hii. Hivyo sina Starburst kwa nyie. Na mimi inaweza kuanza kukohoa sana katika hili. Hivyo tu kuzaa na mimi. Mimi nina kwenda kweli kujaribu na kupata njia hii ya kwanza, ingawa, kabla ya mimi kuwa mashambulizi kukohoa. Lakini tu kuwa rahisi juu yangu kidogo bit-- kwamba wote mimi kuuliza. Hivyo ajenda yetu kwa today-- tu reminder-- Jaribio yako ni wiki ijayo. Niliwaambia wiki hii iliyopita hivyo bila kukamata wewe mbali ulinzi. Hivyo mimi nina kuwakumbusha tena. Wiki ijayo jaribio yako. Hadi mwisho, wiki ijayo Sehemu itakuwa bora zaidi of-- mimi itabidi kujaribu na kazi katika baadhi ya marekebisho. Hivyo kama wewe guys inaweza kusaidia yangu nje kwa kutuma mimi mambo ambayo wewe ni starehe na kwamba wewe ni wasiwasi kuhusu, mada kwamba Ningependa kwa mimi kufunika, kwamba d kuwa kubwa. Hivyo siwezi kujaribu na kazi yao katika sehemu yetu ya wiki ijayo au kutuma wewe nyenzo za ziada au prep kwamba wanaweza kupata mahali pengine. Yeah! Zaidi ya watu ni kuja! Nilidhani, je, mimi kufanya hivyo vibaya iliyopita wiki, kwamba hakuna mtu anataka kurudi? Mimi nina hofu. Hivyo mambo mengine matatu kwamba sisi ni kwenda kwenda juu ni redirection, faili I / O, na kisha kuyatumia na kumbukumbu ya nguvu. Mimi nina uhakika wewe ni wote super msisimko juu ya pointers-- favorite mada ya kila mtu, rahisi kuelewa. Mimi nina uhakika guys wote got kwamba, haki? Mambo ya kwanza ya kwanza, redirection-- hii ni kimsingi tu njia kudhibiti jinsi pembejeo mambo katika mpango wako, jinsi mambo pato kutoka mpango wako. njia kuu kwamba wewe guys wamekuwa mazungumzo na yake ni tu kwa njia ya kiwango nje na magazeti screen yako hapa. Lakini kuna njia ya pipe-- kama tunaona hapa ni moja ya aina yetu words-- ya bomba kwamba habari au kwamba data katika faili kutoka faili. Ni njia tofauti tu ya kupata mambo katika mpango wako na nje ya mpango wako, badala ya tu uchapishaji wao screen hii au inputting mambo kutoka mstari amri. Hivyo moja ya kwanza ni kidogo kubwa kuliko kareti. Hivyo output-- tu Prints pato na faili badala ya screen yako. Hivyo kama wewe alikuwa na kitu kwamba kuchapishwa "Hello, ulimwengu!" screen, kama wewe kuweka badala kwa output.text, kwamba inajenga faili hili iitwayo output.text. Na wakati wa kufungua yake, itabidi kusema "Hello, ulimwengu!" huko. Hii inaweza kuwa super manufaa kama una tani ya makosa kweli, kama sisi kuona katika hii moja. Kama wewe kufanya mbili kareti, ni itabidi magazeti ujumbe wa makosa. Hivyo kama wewe ni kuwa na tatizo na kuandaa, ina mengi ya makosa na wewe ni kupata bogged chini katika kujaribu na kitabu kupitia katika mstari amri yako njia zote wao, unaweza tu magazeti yao na faili, kufungua faili ili unaweza kitabu kupitia yao rahisi. Mimi kwa kweli kutumika kwamba mengi wakati mimi nilikuwa debugging yangu 181 psets kwa kujifunza mashine. Hivyo inaweza kuwa super manufaa ya baadaye. Ni pia muhimu kama una mpango kwamba labda ni kuzalisha maktaba au kuzalisha baadhi ya kuweka ya masharti, na wewe haja ya kuwa na uwezo wa kuona kwamba ni kuzalisha yao vizuri. Hii ni njia ya kufanya hivyo. Hivyo kama wewe magazeti yao na faili, unaweza urahisi zaidi kuchunguza yao, haki? Dhidi ya kujaribu na kitabu kupitia mstari amri yako. Na kisha jambo moja kwa kutambua ni kwamba pamoja na tu zaidi kuliko kareti, kama wewe ni kuandika na faili kwamba tayari exists-- hivyo kama kama sisi mbio hii ya kwanza muda, sisi kuweka kwa output.text, na kisha tulikuwa na mpango wa pili kwamba kuchapishwa hii kama mpango wa mbili na alifanya zaidi kuliko output.text, itakuwa overwrite that-- hivyo overwrite nini ilikuwa milele katika faili kwamba kwa kuanzia. Hivyo kama unataka append na faili, kama sisi kuona hapa, wewe tu kufanya mbili zaidi kuliko ishara. Na itakuwa append yake. Itakuwa si overwrite yake. Hivyo kama unahitaji kuendesha nyingi mipango na aina ya kuweka wimbo wa nini wote ni kurudi katika faili, hiyo ndiyo njia ya kufanya hivyo. Kama hawajali nini katika faili yako na ni kuruhusiwa kuwa overwritten, unaweza kutumia tu zaidi kuliko single. Je, hiyo mantiki kwa kila mtu? Watazamaji: Kama dot kufyeka hujambo zaidi kuliko pato dot maandishi, kama mara mbili, utakuwa tu kuonyesha tu kwenye pato dot Nakala time-- pili SPIKA 1: Haki. Hivyo ingekuwa kimsingi tu kabisa overwrite nini huko kwa kuanzia. Kama faili hii hapa, output.text tayari lipo, kimsingi chochote kuwaita tena na zaidi single kuliko unaweza tu kufikiria ni kama kama ni kubadilishwa faili. Kama wakati wewe ni kuokoa Neno hati na huna kuokoa kama, na kuweka jina moja, na kabisa overwrites it-- hii ni aina moja ya jambo. Mtu yeyote una maswali yoyote juu ya outputting tu faili? Kutisha. Hivyo ni wazi, kama wewe kubadili mshale mwelekeo, inaweza kufanya pembejeo. Hivyo wakati wewe guys alikuwa kama Kaisari au Visioneer na wewe alikuwa na pembejeo kitu, alikuwa amri hoja line kwamba kweli pembejeo yake. Hii ni njia nyingine ya kufanya hivyo. Hivyo badala ya kusubiri kwa amri ya haraka, kama wakati wewe aliuliza kwa yako ujumbe katika Kaisari au Visioneer, kama alikuwa Nakala faili kwamba alikuwa na ujumbe wako, unaweza tu aina yake katika hilo. Hivyo kama hii walikuwa kama dot kufyeka Kaisari 3 chini ya mshale pembejeo Nakala, ambayo ni ujumbe wako, kwamba ingekuwa kukimbia faini tu. Wakati mpango wako Kaisari kweli aliuliza kwa ajili ya pembejeo kutoka kwa mtumiaji, ingekuwa tayari kuwa ni kwa sababu umefanya typed katika faili hii. Hiyo ni njia nyingine tu. Ni kinyume na output-- pembejeo tu kwa data zako. Na kisha moja ya mwisho ni bomba. Hivyo hii moja ya pretty baridi. Kwa sababu inaruhusu wewe kuchukua pato la moja mpango na kuiweka kama pembejeo kwa mpango mwingine. Mimi sijui kama yoyote ya wewe alicheza na decipher kwamba CS50 anaweza kuwa kupeni, lakini ingekuwa kuruhusu kuchukua baadhi ya sampuli faili, aina yake katika encryption yako, na kisha kutoka huko aina kwamba katika decryption yako kuhakikisha aligeuka sawa. Hivyo ni aina ya kama njia tatu kitanzi. Kwenda kwa hayo. Watazamaji: Kama mpango ina pembejeo nyingi, kuna njia ya kuwaambia ambayo pembejeo kutumia faili maandishi au pato kwa? SPIKA 1: Ni pembejeo nyingi. Chochote faili input-- yako wakati ni kuuliza kwa ajili ya pembejeo wakati huo kwanza, ni kwenda kudhani, nadhani, ni kwenda bomba katika faili nzima. Hivyo kama una pembejeo nyingi, wewe ni kwenda kuwa piping katika faili nyingi. Hivyo kama wewe ni kuuliza kwa ajili ya ujumbe mara tatu katika kanuni yako, wewe kwenda kuwa na kuweka katika mafaili tatu tofauti. Na anapata mambo. Na unapaswa kuwa na wasiwasi kuhusu kwamba hivi sasa. Lakini hiyo ni wazo. Hivyo yeah, bomba ni pato tu ya moja mpango wa matumizi pembejeo katika nyingine. Kila mtu nzuri huko? Baridi. OK. Pengine si kuwa kufanya sana na ni. Lakini unapaswa kuelewa njia unaweza kutumia hii. Na kuna baadhi ya kesi ambazo unaweza kutaka kutumia hiyo. Hivyo faili I / O-- Mimi najua kile wewe ni saying-- sisi ni kutumika kusoma kutoka na kuandika kwa screen zetu huko, ambayo ni ya kiwango katika na kiwango nje. Na kwamba ni nini nyie wamekuwa kufanya tangu mwanzo wa darasa hapa. Lakini pia unaweza kusoma na kuandika files, ambayo ni faili yote I / O-- hivyo faili pembejeo, pato ni wote anasimama kwa. Hivyo hii kimsingi ina maana kwamba unaweza kuhifadhi data yako sasa. Wakati wewe tu magazeti kwa screen, ni kimsingi wamekwenda, haki? Haraka kama wewe kufanya "Hello dunia "na kukimbia" Hello dunia " prints "Hello dunia" kwa screen. Lakini huwezi kweli kufanya na chochote kutoka huko. Kama kuhifadhi katika maandishi faili, kisha ghafla una data hii kwamba wewe ni kuruhusiwa kuendesha au kuiweka katika faili, au kuiweka katika mpango baadaye. Moja ya sababu nini sisi kufanya hivyo ni tu kama njia ya kuhifadhi data kwa matumizi ya baadaye. Mimi kuwa wanandoa wa hatua hapa tu kutembea kwa njia ya kiwango I / O. Katika hatua moja, wewe haja ya kuunda kumbukumbu na faili na wote kofia FILE nyota faili. Hivyo kwamba inajenga pointer faili. Hivyo basi unataka kufungua yake. Na kusema, literally, faili tu sawa na fopen. Na hii ni kwenda na kurudi pointer faili wewe tu kufunguliwa. Niliona michache unaweza guys katika masaa ya ofisi. Lakini moja ya mambo ni kuyatumia remember-- inaweza kuwa baadhi anwani au null, haki? Kama sisi milele na kesi ambapo kitu unaweza kurudi null, nini tuna kufanya kabla ya sisi milele kutumia? Tunahitaji kuangalia kama ni null au si, haki? Kwa sababu baadhi ya unaweza kuwa alikuwa Suala ambapo chochote kitu mara kuwa akarudi katika kuzuka alikuwa null. Alijaribu kufanya baadhi ya kazi juu yake. Na tovuti yako kompyuta faulted. Haki? I bet michache unaweza inaweza kuwa na kwamba suala hilo. Hivyo pamoja na fopen, fopen ama kurudi pointer faili, au kama kitu fulani kitaenda vibaya, ni kwenda na kurudi null. Hivyo daima haja ya kuangalia kwamba ina si kurudi null kabla ya kujaribu kufanya kitu kingine chochote. Hii ni kama dhana ya kiwango kwamba wewe ni kwenda haja hapa. Kama kuna milele nafasi ya kuwa kitu inaweza kurudi null, kuangalia kuhakikisha haina kabla ya kuendelea. Vinginevyo, wewe ni kwenda kupata lovely tovuti makosa. Na hakuna mtu anapenda ili kukabiliana na wale. Hivyo kama sisi kuona hapa, hoja ya kwanza ni tu njia ya faili. Kama faili kwamba haipo, ni kwenda kujenga faili hilo. Na ni tu kwenda kuwa tupu. Na kisha hoja ya pili ni mode kwamba unataka. Je, tunataka kusoma kutoka faili hili? Je, unataka kuandika kutoka humo? Je, unataka append? Hivyo kweli nini mimi tu said-- kama faili haipo na wewe ni kujaribu kusoma kutoka hivyo, ni kwenda kutupa makosa. Kama faili name-- kama kama file.text haipo bado na unataka kuandika kwa hiyo, itakuwa kujenga faili tupu aitwaye file.text kwa ajili yenu. Na kama unataka append, unapaswa kufanya kitu kimoja. Je, hiyo mantiki? Kama wewe ni kujaribu kusoma kutoka faili kwamba haipo bado, utakuwa kutupa makosa. Vinginevyo, itakuwa kuunda faili kwa kufanya nini unataka yake. Baridi. Sasa tunaweza kusoma kutoka faili. Na hii ni aina tu ya kwenda kupitia kazi mbalimbali kwamba tuna kwa ajili ya faili I / O. Hii mapenzi kuwa muhimu katika pset wiki hii, kama mimi kukumbuka kwa usahihi. Ndiyo, kabisa itakuwa muhimu katika pset wiki hii. Hivyo fgetc anarudi tabia ya pili. fgets anarudi tu mstari wa maandishi. Atarudi kitu chochote hadi line mpya, na kuvunja. Hivyo fread wasomaji fulani idadi ya ka na maeneo yao ndani ya safu, ambayo ni kitu unaweza wanataka kufanya na re-size-- inaweza kuwa na manufaa. Jinsi watu wengi kusoma pset spec, kwa njia? OK. [Inaudible] SPIKA 1: OK. Wote haki. Dhahiri kusoma that-- ni pset furaha. Kupata nafuu kumbukumbu ilifutwa card-- kweli kusisimua wakati ni kazi. Lakini dhahiri, kuanza kusoma hiyo. Kuja kuzungumza na mimi kama wewe una maswali kuhusu hilo. OK, hivyo kama mimi alikuwa akisema, fread anayesoma idadi fulani ya ka. Hayo ni baadhi ya idadi holela kwamba wewe ni kwenda kuweka. Na kisha fseek hatua tu kwa nafasi fulani. Hivyo labda hawajali kuhusu 10 ijayo ka. Unataka tu ruka mbele. Hawajali kuhusu wale. Unataka kusoma kuanzia saa Byte 11. fseek utapata kufanya hivyo. Hivyo utapata kuwa kuwachagua kuhusu nini wewe ni kusoma. Kwa sababu fgetc, fgets, na fread kusoma kutoka mahali fulani katika faili. njia ya kufikiri juu ya hili ni kama hii ni faili wetu, wakati wewe kwanza kufungua, una nafasi hii katika faili kwamba kuanza mwanzoni. Kila wewe kuwaita fgetc, fgetf, au fread, ni kwenda kuanza kutoka hii marker msimamo. Hebu kusema unataka tu kusoma chunk hii ya kumbukumbu zaidi ya hapa. Huwezi simu. Una kutafuta juu hapa na kisha kusoma kutoka huko au kusoma, anapata, au getc, kutegemea na nini unataka. Hivyo kutafuta tu utapata ruka sehemu ya kumbukumbu. Na kwamba tu njia unaweza ruka mambo bila kusoma yao katika buffer yako. Je, hiyo mantiki kwa kila mtu? Ni wazi, kuna mengi ya sambamba here-- pato, au pembejeo yetu redirection, una kusoma na kuandika. Hivyo fputc anaandika tu tabia katika faili. fputs anaandika line. Fprintf Prints pato formatted. Hivyo kama una tabo, au nafasi, au whatnot. Na kisha fwrite anaandika baadhi safu ya ka na faili. Hivyo hii ni njia moja fwrite na fread ni sawa fgets opposites--, fputs, na basi fputc na fgetc-- kura ya mambo, mambo ya haraka. Tu aina ya kuweka handy-- hii itabidi nyakati tofauti ambapo labda unataka tu tabia moja kwa wakati. Labda unataka line nzima. Na kamusi pset-- yako ambayo ni katika psets mbili, Naamini, sisi kukupa yote kamusi katika format Nakala ambayo ina kila neno kutengwa kwa line. Hivyo kama wewe alitaka kusoma katika neno moja kwa wakati mmoja, nini kinaweza kutumia kama wewe ni kusoma na wao ni wote kutengwa juu ya mistari mpya, na unataka tu neno moja kwa wakati mmoja? Watazamaji: Fgets SPIKA 1: Haki. Fgets-- sababu kwamba anarudi chochote ni juu ya mstari mmoja. Na kama kila neno ni wake line mwenyewe, tunaweza kutumia fgets. Baridi. Je, hiyo mantiki, kila mtu? Baridi? Yeah, sisi ni kwenda kupata sehemu ya furaha na kuyatumia haraka sana, ambapo kupata kufanya baadhi math. Na utakuwa mkubwa. Mwisho step-- kuifunga faili yako. Na mambo mengi hapa, moja ya dhana yetu ni kama inaweza kurudi null, kuangalia kwa null. Kama wewe kufungua kitu, wewe d bora karibu yake. OK, hivyo wewe si kosa mpaka uko kosa isipokuwa wameweza imefungwa hilo. Aina ya kama si zaidi ya mpaka mwanamke mafuta kuimba. Hiyo ni kama kufunga faili yako. Kama anasema hapa, tu kusisitiza, daima kufungua faili yako kabla ya wewe ni kusoma au kuandika hayo. Na daima karibu yake kama wameweza kufunguliwa yake. Wote haki? Baridi. Hivyo hapa ni mfano. Hivyo tiny-- Sijui kama guys unaweza kuona kwamba vizuri sana. Kama tu tungeweza kuongeza mwangaza fulani. Napenda kwa kweli kufanya hii kama naweza. OK, wewe guys unaweza si kweli kuona kwamba wakati wote, unaweza? OK, tunakwenda kufanya hivyo, basi. [Inaudible] Mimi kudhani hii ni bora zaidi kuona. Je, mtu yeyote kuona ambapo yangu panya akaenda ni swali? Ah, kuna ni is-- nini mapambano! OK. Kimsingi, wewe guys lazima kuwa na aina ya wazo la nini hii ni kufanya. Ni si kamili. Lakini nisingependa kueleza ni ya kutumia muda zaidi kujaribu muundo ni vizuri. Kimsingi, kama unaweza kuona hapa, sisi kuanza na faili ya wazi. Na tuna baadhi ya Mbegu faili kwamba sisi ni kufungua kwamba anasema ni wanafunzi wetu. Na sisi ni kwenda kuandika hiyo. Hivyo bila shaka, kurudi null. Hivyo tuna kuangalia kwa null. Na kisha kama si null, sisi kwenda kwa njia ya. Na kama unaweza kuona, sisi ni looping kupitia hapa. Kuna wanafunzi. Wanafunzi ni hash hufafanuliwa kama tatu. Na nini sisi ni kufanya ni sisi ni uchapishaji na faili, haki? Basi ni nini sisi uchapishaji nje na faili zetu? Watazamaji: alama kuwa ni katika safu? SPIKA 1: Yeah. alama ya kwamba ni katika array-- hasa. Hivyo sisi ni kufungua hii Mbegu faili, ambayo Mimi kudhani ni aina fulani ya darasa database. Na sisi ni uchapishaji tu nje alama ya kila mwanafunzi na faili hilo. Baridi? Nzuri. Kutisha. OK. Hebu kupata nyuma to-- Watazamaji: Nina swali haraka. Ni printf si katika kwa kitanzi? Hiyo tu katika kama kitanzi? SPIKA 1: Hapana, ni katika kwa kitanzi. Siwezi kuona panya yangu vizuri sana hapa. Hivyo mimi nina wanajitahidi format kwamba vizuri. Bracket hii lazima gone. Ni lazima kuwa chini hapa. Hii ni nini katika yako kwa kitanzi. Huko. Sasa ni pretty. Hivyo hiyo ni jinsi ni lazima be-- isipokuwa kwa kuwa mabano ya mwisho kwamba mimi kufukuzwa kazi. OK. Je, hiyo mantiki kwa kila mtu? OK. Tunakwenda kwa hoja juu ya kwa jambo la pili then-- ambayo, kwa kweli, wewe ni kwenda haja ya kuona kanuni. Hivyo nina kwenda tu nakala ya kwamba zaidi ya hivi sasa. OK. Hivyo nina kwenda kwa kuonyesha guys kanuni hii. Na mimi nataka kujaribu na takwimu nini ni zinatakiwa kufanya. Hivyo kutokana na that-- kuchukua dakika au hivyo. Kujaribu na kufikiri nini kinaendelea hapa. Mawazo yoyote? Tunajua kwamba sisi kuwa na angalau mbili hoja katika mstari amri, haki? Mimi kudhani moja ambayo ni kwenda kuwa na kwamba [inaudible] ya mpango wetu ni na kisha kitu kingine. Kwa sababu kama [inaudible] ni chini ya wawili, sisi yell saa yao. Haki? Na kutoka kwa matumizi, inaonekana kama ni kwenda kuwa baadhi ya aina ya faili. Sisi wote kukubaliana na kwamba? Hivyo sasa, nini kitanzi kufanya? Nini ni kwenda kupitia? Watazamaji: mafaili yote. SPIKA 1: Hasa. Ni kwenda njia zote files kwamba tumekuwa pembejeo huko. Hivyo kwa kila faili, ni kufungua baadhi kamba huko. Ni kufungua faili hilo. Haki? Na ni kusoma kutoka humo. Bila shaka, kuangalia kama ni null. Na kisha ni uchapishaji. Kama ni null, ni kutuambia tu kwamba si kwamba faili kwamba ipo. Kwa sababu kumbuka, na kusoma faili yetu ina kuwepo. Haki? Na kuandika na append, unaweza kupata mbali na hayo. Lakini pamoja na kusoma, faili yetu ina kuwepo. Na kisha kama hana zipo, nini tunafanya hapa? Hebu tu kuanza hapa. Nini hii do-- tabia hii ya kwanza. Nini kufanya? Yeye anapata tabia moja, haki? Hivyo kile ni hii kufanya? Ni kupata tabia ya kwanza. Mtu yeyote kujua EOF? Watazamaji: Mwisho wa faili? SPIKA 1: Mwisho wa file-- hasa. Hivyo ni kwenda kwenda kwa njia ya faili nzima, haki? Na basi ni kwenda update na kupata kila tabia ya baadae. Haki? Na nini ni kufanya? Watazamaji: Kuweka kwamba in-- SPIKA 1: Putchar prints kwa Bongo yako. [Inaudible] tabia. Na kisha wakati [inaudible] hii itakuwa karibu ya faili. Watazamaji: Je, unahitaji [? mwingine? ?] SPIKA 1: Si lazima. I mean, ni aina ya an katika hili. Kwa sababu hii anarudi, ingawa, kwa muda mrefu kama hii haina kukamata hii, wewe ni faini. I mean ni pengine nzuri mazoezi ya kufanya mwingine. Lakini mwingine ni daima muhimu hasa kama una kitu kama kurudi, ambayo ina maana kwamba katika kesi hii kama ni upatikanaji wa samaki hivyo, mpango wako kwenda mwisho na kutakuwa na kamwe kupata hii. Ni zaidi kwa kesi ambapo wewe ni si lazima kurudi kitu. Kwa sababu kama hii haikuwa kurudi kitu chochote, hiyo ina maana kuwa kama hii ni kweli, mapumziko ya hii itakuwa bado kukimbia. Na katika kesi hiyo, wewe wanataka uongo. Kama ni kurudi, na mpango wako mwisho, kingine ni si lazima wote muda, kulingana na mazingira. Jacob, hakuwa una swali? Watazamaji: Yeah. Hivyo haina fgetc kupata tabia ijayo? Jinsi gani tabia kuongeza? SPIKA 1: Yeah. Hivyo fgetc anapata tabia ya pili. Unaweza kufikiria ni kama C ++ katika akili. Watazamaji: Hivyo kile EOF? SPIKA 1: EOF ni mwisho wa faili. Ni tu marker kwamba inakuwezesha kujua kwamba wewe ni katika mwisho wa faili yako. Hivyo hii ni kwenda magazeti kwa kiwango yako nje. Na basi ni kwenda kuifunga faili wakati ni kufanyika. Na kisha hebu kwenda kwa faili ya pili, haki? Hivyo kwa ujumla, je, mpango huu kufanya? [Inaudible] SPIKA 1: Yeah. Ni tu Prints nje kila kitu huko. Hivyo kama wewe guys milele kutumika CAT na kisha jina la baadhi file-- Sijui kama yoyote ya una milele kufanyika kwamba juu ya terminal yako. Lakini kama wewe milele kutumia amri CAT-- C-A-T-- na kisha chochote faili una there-- ni Prints hivyo nje terminal yako, ambayo unaweza kuwa super Handy kwa baadhi ya mambo. Mimi matumizi yake mengi. Je, hiyo mantiki kwa kila mtu? Baridi? OK hivyo kazi yako now-- ama kwa mwenyewe au na watu karibu you-- ni kuandika tu mpango rahisi ambayo tu kuandika "Hello, ulimwengu!" kufanyika kwa faili. [Inaudible] [Inaudible] SPIKA 1: Mimi nilikuwa kama, alifanya Mimi kufanya hivyo wiki iliyopita vibaya? Sikudhani ilikuwa mbaya. Nina furaha uko hapa. Ni kweli hufanya mimi furaha. Mimi nina msichana wa raha rahisi. Mimi tu kama wakati sehemu yangu anahudhuria. Hivyo mimi nina kupata tu hii ilianza kwa nyie ili tuweze kanuni ya pamoja. Mimi si kama kuweka mtu yeyote juu ya doa isipokuwa unataka kuwa. Watazamaji: Kwa jaribio, kufanya tuna kuandika mpango? SPIKA 1: Unaweza kuulizwa kuandika mipango rahisi kwa mkono. Yup. Watazamaji: Jaribio ni wiki ijayo, haki? SPIKA 1: Jaribio ni Jumatano ijayo. Hiyo ina maana kuna lovely [? CSE?] grading chama baadaye, ambayo ina maana utasikia kupata alama yako nyuma kwamba night-- wakati gani? Nani anajua? Lakini itakuwa usiku. Wote haki. Jinsi gani tunataka kuanza hili? Mimi nitakupa kuanza hint-- na hili. Watazamaji: Una kufungua faili. SPIKA 1: Yeah. Hivyo unataka nini kuwaita hii? Je unataka tu kuiita "faili"? Hebu kufanya hivyo ni rahisi. Hivyo fopen-- nini wetu pato mtihani kwenda kuwa? Kuiita "Hello." Na nini mode yetu? Nini tunafanya na faili hili? Watazamaji: Soma. Kuandika. SPIKA 1: Sisi ni kuandika na hiyo. Nzuri. OK, hivyo tuna faili hili sasa. Nini tunahitaji kufanya? Watazamaji: Angalia kama ni null. SPIKA 1: Kuangalia kama ni null-- hasa. Hiyo ni nini mimi kama kusikia. Kwamba lazima moja kwa moja, hasa pretty much kutoka hatua hii juu ya. Kama kuanza segfaulting, pengine hawakuwa kuangalia for mahali fulani. Tisa mara kati ya kumi, hiyo ni itakuwa kosa yako. Hivyo kama unaweza kupata tu katika tabia, daima kuangalia kama ni null, maisha yako kwenda kuwa nzuri na easy-- au zaidi. Hivyo kuangalia kuona kama ni null. Hivyo kama si null, ambayo ni nini bang sawa means-- si null-- ni halali. Nini tunataka kufanya? Sisi tu wanataka magazeti na faili kwamba, haki? Basi ni nini sisi kwenda kutumia? Watazamaji: Fprintf SPIKA 1: Fprintf-- nzuri. Na fprintf inachukua arguments-- mbili ambapo ni kwenda na nini tunataka kuchapishwa. Basi nini moja ya kwanza? Ambapo ni kwenda? Watazamaji: Picha. SPIKA 1: Ni kwenda faili. Na nini tunataka kuchapishwa? "Hello, ulimwengu!" Wote haki. Tuna moja iliyopita thing-- mwingine dhana kubwa hapa. Watazamaji: Karibu. SPIKA 1: Karibu. Kuna kwenda. Watazamaji: Je kinachotokea hii kama faili ni batili? SPIKA 1: Hapana, hii ni kama si null. Watazamaji: Oh, kama ni not-- sawa. Kwa fopen na kisha hoja mbili kwamba kwenda ndani, nini maana ya hoja ya kwanza tena? SPIKA 1: Hoja ni kama jina la faili kwamba unataka kwenda. Hivyo baada ya hii anaendesha, wewe ungekuwa kuwa na baadhi ya faili inayoitwa "hello" kwamba alikuwa na "Hello, ulimwengu" ndani yake. Hayo ni yote. Tu jina. Watazamaji: Na tangu ni kuandika, faili hana tayari zipo. Ni kwamba nini alisema? SPIKA 1: Haki. Hasa. Kama "Hello" kama faili haipo bado, ni kwenda kujenga faili inayoitwa Hello "na kuandika kwa ajili yenu. Watazamaji: Wakati wewe ni kuwaambia mpango wa aliandika faili, nini kuandika "file" badala ya jina la faili na fprintf-- SPIKA 1: Kwa sababu katika kesi hii, tuna kwamba kubwa FILE-- wote katika caps-- nyota, faili. Hivyo ni pointer faili kwamba wewe ni kuzungumza juu. Hii ni njia ambayo sisi tu kutaja yake. Hivyo katika kesi hii, unaweza kufikiria file-- aha, tunaweza kutumia faili this-- hapa inahusu ufunguzi wa "Hello" na kuruhusu ni kuandika. Watazamaji: Je, tunaweza kuweka "Hello" badala [? ya tu?] f faili? SPIKA 1: Hapana, kwa sababu "Hello" mahitaji ya kuwa wazi na writeable. Picha hapa ni kama designator kwamba anasema sawa, sisi kuwa hello-- hii file-- kwamba sisi ni kuangalia. Imekuwa kufunguliwa. Na sisi ni kwenda kuandika hiyo. Kama wewe tu kutumia "Hello", kwamba ni zimegawanywa katika hilo. Hivyo ni kwenda kituko nje. I mean, unaweza kuwa jina lake ni. Wewe wangefanya faili, nyota, "Hello", sawa na kwamba. Lakini hoja nzima ni kwamba haja faili nyota pointer ili kuwa na uwezo wa kutumia kazi hizo. Watazamaji: Unaweza kufanya file, nyota, faili, "Hello" au una kuweka faili nyota, faili na hilo? SPIKA 1: Unaweza kufanya file, nyota, "Hello." Unaweza kubadilisha hii kwa jina lolote unataka. Ni kabisa holela nini jina kwamba ni. Unaweza jina hilo chochote. Jina hilo kuruka tambi, kama alitaka. Watazamaji: Je, ni "w" katika quotes kwa ajili ya? SPIKA 1: "w" ni tu mode. Hivyo sisi ni kuandika na faili hii. Kila mtu mzuri? Wazi? Ndiyo. Watazamaji: Hivyo wakati anaandika hii faili, ambapo kufanya sisi kisha kupata kwamba faili? SPIKA 1: Ni utakuwa katika huo directory kwamba wewe ni sasa katika. Kama uko katika pset tatu na kukimbia hii, ndani ya pset yako tatu folder ni kwenda kuwa na faili hili iitwayo "Hello." Baridi? Kila mtu mzuri? Najisikia kama wewe ni wote kupata ni, ambayo ni kubwa. OK. Hivyo nyuma slide yangu show-- I love wakati mambo ya kazi. OK, pointers-- Je guys msisimko? Kuyatumia ni kubwa. Wao kuchukua kidogo kidogo wrap kichwa yako karibu. Huu ni mwaka wangu wa pili mafundisho kuyatumia. Na nadhani mimi hatimaye got yake. Hivyo kama wewe mapambano, ni sawa. Kama nilivyosema hapo kabla, kuchora picha inasaidia sana na mambo katika CS, kama vile Nadhani watu huwa kufikiri oh, sisi ni saa ya kompyuta. Tunapaswa tu kificho. Picha No-- kuchora itakuwa kweli kukusaidia. Na mimi kwa kweli moyo bomba katika kindergartner upande wako na kuwatoa crayons au alama na sare. Sababu itakuwa kukusaidia. Na kama wewe kuona mimi katika ofisi ya masaa, mimi Itakuwa kufanya kuzunguka mwingi wa karatasi na kalamu kuchora mambo ya nje. Hivyo hasa kwa pointers-- kuchora picha. Na mimi nina uhakika sisi ni kweli kwenda kuwa kuchora baadhi ya picha hapa pia. Hivyo guys wote got kuona Binky, huu baridi claymation kitu. Na sisi nadhani ni kweli funny wakati yeye hulipuka katika rundo la vipande vipande. Ni baadhi ya misaada Comic kwa ajili ya darasa. C [inaudible] uwezo hili kubwa kuwa na uwezo wa kudhibiti kumbukumbu. Na ni moja ya mambo ambayo kwa kweli inafanya lugha kama nguvu. Lakini kwa nguvu nyingi huja jukumu kubwa. Na mambo mambo yanaweza kutokea kama huna makini. Hivyo wakati wewe ni kutumia kuyatumia, unataka kufanya kuhakikisha kweli kuelewa nini hasa ni kufanya. Hopefully ijayo kidogo ya wakati itasaidia kweli kuelewa kuyatumia, jinsi ya matumizi yao, na jinsi ya kuendesha yao. Hivyo memory-- mimi nina uhakika tumekuwa kuonekana mchoro huu kabla. Hivyo hii ni tu mchoro rahisi ya jinsi mambo inaweza kuhifadhiwa kumbukumbu. Hivyo kimsingi kuwa haya arrays mkubwa wa vitalu Byte moja ni nini sisi here-- kidogo nyongeza na moja kila wakati. Hii ni katika hex [inaudible] hivyo nane-bit vitalu. Na kila block ni kuhusishwa pamoja na baadhi ya anwani hexadesimoli. Hivyo kama wewe milele kuona 0x, hiyo ni notating tu kuwa ni hexadesimoli eneo. Unaweza kudhani hii ina maana baadhi anwani katika kumbukumbu. Tunazungumzia anwani kumbukumbu wakati wowote unaweza kuona hexadesimoli. Tuna ints ni vigezo, ikifungwa ni vigezo kwamba kuhifadhi. Hivyo ints kuhifadhi ints. Ikifungwa kuhifadhi ikifungwa. Hivyo sisi pia kuwa kuyatumia kwamba kuhifadhi kumbukumbu anwani. Hiyo ni aina ya ramani. Kuyatumia ni peke kwa anwani kumbukumbu. Hivyo hiyo ni kama aina yako huko. Appliance yako ni 32-bit, ambayo ina maana kwamba kumbukumbu anwani yako ni ka nne. Hivyo pointer yoyote kwamba una Pia itakuwa ka nne. Au mwingine kama ni ka wanne, kumbukumbu ni ka nne. Kuyatumia kuhifadhi kumbukumbu. Kwa hiyo, wao ni ka nne. Cool-- nataka tu kushinikiza kuwa. Unapaswa kupata hii Comic sasa. Sijui jinsi wengi wenu ni mashabiki XKCD, lakini mimi upendo XKCD. Ni kubwa. Wote haki. Hivyo kujenga pointers-- kama nilivyosema, ni pretty much tu kama kitu kingine chochote. Una aina. Una jina. Haki? Hiyo ni nini tuna huko. [? Hex?] Nyota ina maana ni pointer, na kisha chochote unataka simu yake. Hivyo aina inawakilisha nini unaweza kuhifadhi. Wote haki? Katika njia sawa kwamba kama sisi kufanya ints, tunajua ni hifadhi int huko. Na pointer, ni ana kumbukumbu ya eneo. Lakini nini maana ni that-- hapa ambapo kuchora atakuja katika Handy. Hivyo katika kesi hii, tuna baadhi value-- hebu sema nne. Nne ni katika anwani moja. OK? Hii moja ya kwanza hapa ina maana kuwa ni pointer 2x. Haki? Ni baadhi pointer x. x inaweza kuwa kitu chochote. Chochote x is-- kusema x ni nne. Ni kwenda kuhifadhi kumbukumbu anwani hapa. Hivyo int, nyota, x-- hii ni baadhi yanayopangwa nyingine katika memory-- ambaye anajua nini hii ni. Lakini ni kwenda kuhifadhi anwani hapa. Hivyo hii itakuwa like-- katika kesi hii, Kila, ni kuhifadhiwa katika 0x1-- chochote ni kuhifadhiwa katika anwani hiyo pointer wetu ana, ina mechi juu na nini tumekuwa uliopangwa. Hivyo katika 0x1, katika kesi hii, hii ni x. Hii inaweza tu milele kuwa int wakati sisi ni kutumia hii. Vile vile, kama tuna 1y mwingine, chochote anwani ni kuhifadhiwa na y ana kuwa char-- kitu kimoja na z. Katika njia sawa, wakati wowote kujaribu na kufanya intx sawa 0.4, ni kwenda yell katika wewe na kuwa kama hakuna, wewe alisema alitaka int. Hii ni walidhani kuwa int. Kuacha kujaribu kufanya hivyo kuelea. Hivyo basi mambo kuwa nini wanataka kuwa. Basi mambo kuwa wenyewe. Hivyo jambo kubwa ni tu aina yoyote ya pointer ni, kwamba tu Jambo unaweza kuhifadhi huko. OK? Pamoja na mazoezi, kama na wiki iliyopita, kila kitu inaonekana kweli aina ya kufikirika. Sisi ni kwenda kufanya baadhi ya mazoezi. Ni lazima kufanya maana zaidi. Hivyo referencing na dereferencing-- ni kweli muhimu kupata hizi moja kwa moja. Mimi bado kuwa na mahitaji kila sasa na kisha. Na mimi nina kama kusubiri, ambayo moja mimi nataka? Hivyo ampersand kweli kutoa you kumbukumbu au anwani ya. Hivyo anarudi anwani katika kumbukumbu ya ambayo variable ni kuhifadhiwa. Hivyo ni kwenda kwa kweli kurudi na wewe hexadecimal, ambapo dereferencing yake ni kweli kwenda kukupa data kwamba ni kuhifadhiwa huko. OK? Hivyo sisi ni kwenda kuangalia mfano kweli kasi, au kweli juu ijayo. OK. Hivyo sisi kufikiri kwa kweli makini kuhusu hili. Hivyo hapa tuna integer baadhi x. Mimi nina kwenda kujaribu na kuteka hii kufanyika kwa kadri ya uwezo wangu. Hivyo sisi ni kwenda kuwa na hii x yanayopangwa. Na ni kuhifadhi tano. Anwani yake ni 0x4. Baridi? Wema wote. Hivyo sasa tuna pointer hii. Ilikuwa zaidi ya hapa. Na ampersand inatupa anwani ya jambo fulani. Hivyo, katika kesi hii, ni pepe ya x. Ni anwani ya x nini? 04-- na pointer hii ni katika 0x08. Baridi? Hivyo unaweza kufikiri juu ya hili pointer, 04, tu anasema zaidi ya hapa. Na wao ni kuitwa kuyatumia kwa sababu kama sisi kupata zaidi katika hili, wewe ni kwenda kuona akizungumzia mambo. Na kuzuia moja akizungumzia mwingine kuzuia itakuwa mantiki mengi zaidi. Hivyo hapa ni mbili. Na kisha tuna baadhi ya nakala, ambayo ni what-- 0x0c. Na ni kwenda kwa dereference pointer yetu. Hivyo kile ni kusema ni OK, hapa pointer yetu. thamani maduka ni 0x04, Na nini ni kusema ni kwenda anwani hii na kuniambia nini katika hilo. Hivyo hiyo ni ufanisi nini mshale hii ni kufanya. Unaweza kufikiri ya hii kama nyota yako. Hivyo sawa, wakati sisi kufanya nyota, ina maana kufuata. Kwenda anwani hii. Na kwamba kimsingi zifuatazo tu mshale hii kwa hii chunk ya kumbukumbu. Na kutupatia nini katika hilo, ambayo ni 5. Ni kwa nini nakala yetu ni sawa na 5. Je, hiyo mantiki? Je, mtu yeyote haja ya mimi kwenda kwa njia ya tena, au polepole zaidi? Unataka mimi kwenda njia hiyo moja muda zaidi? OK. Tunakwenda redraw tena. Wakati sisi kuanza, sisi wote kukubaliana tuna baadhi chunk ya kumbukumbu kwamba ni kutofautiana x kwamba sisi kuweka sawa na 5. Hatuna kudhibiti ambapo ni katika kumbukumbu. Hivyo doa hii ni kiholela kupewa. Nzuri huko? OK. Kisha sisi initialize pointer int. Hiyo ni kwa nini ni kuruhusiwa kwa uhakika na x sababu tuna int hapa. Tuna chunk mwingine wa kumbukumbu kwa sababu pointer hii ni kutofautiana kama kitu kingine chochote. Ni kiholela kupewa baadhi ya nafasi katika kumbukumbu. Na nini ni maduka ni anwani ya x. Ampersand maana pepe ya x. Hivyo ni anwani ya x nini? Watazamaji: Ni zero-- SPIKA 1: 0x04. Hivyo then-- moja iliyopita. Tuna baadhi copy-- tena mwingine tu kutofautiana. Basi hebu hawawajui baadhi nafasi holela. Na sisi dereference pointer yetu. nyota ina maana kwenda anwani kuhifadhiwa katika pointer yangu. Kuniambia nini huko. Hivyo anwani kuhifadhiwa katika pointer yetu ni 0x04. Hivyo sisi kwenda kwa anwani hiyo. Ni akizungumzia kwa anwani hiyo. Nini ndani ya kuzuia hii kumbukumbu? Ni mitano. Hivyo kwamba ni nini sisi hawawajui nakala wetu. Kila mtu mzuri? Baridi. Again-- picha. Hivyo kufuatilia maadili here-- mimi nina kwenda basi guys kufikiri kuhusu hili. Tunaweza kuchora picha nyingine. Lakini nataka kujaribu na sababu njia hii juu ya yako mwenyewe kwa dakika. Tangu wao hakutoa nasi mfano anwani, Mimi tu kwenda kufanya ampersand x-- ambayo inapaswa kusaidia kuendesha nyumbani. Ampersand maana ya eneo. Hivyo katika moja ya kwanza, kila mtu kwenda na mstari wa kwanza. Baadhi x seti ya five-- baadhi random yanayopangwa katika kumbukumbu. Int nyota pointer ni sawa kwa anwani ya x, haki? Int nyota pointer inajenga kuzuia hii, wito ni pointer, na inateua kwa anwani ya x. Mimi nina kutisha katika ampersands. Sasa nini sisi ni kufanya ni sisi kusema OK, dereference pointer yetu. Hivyo sisi kwenda sawa, nini katika pointer yetu? Ni ampersand x. Kwenda ampersand x na reassign yake. Hivyo sasa, ampersand x ni kwenda kuwa na 35. Hivyo kimsingi, wakati uko dereferencing, wewe kwenda sawa. Wewe ni kwenda kuwa kuchora picha kama hii. Wewe ni kwenda kuwa kuchora mishale yako juu ya ambapo ni. Hivyo kwenda yanayopangwa hii katika kumbukumbu na ama nipe kwamba thamani ya nyuma, au kubadilisha hilo. Katika kesi hiyo, kwa sababu tuko katika hili thamani, sisi ni kumshirikisha kuwa ni 35. Ambapo katika mwisho moja, kama taarifa, sisi walikuwa kumshirikisha nini ilikuwa katika hapa na kitu kingine. Hivyo kuwa meza huu wa kushangaza. Ni kuwa mbaya. You guys kazi hiyo. Mimi nina kwenda kuteka ni nje ya bodi. Tunakwenda kujaza fomu hiyo kwa pamoja, sawa? Hivyo kunyakua baadhi ya karatasi, kunyakua mpenzi, kuanza kufanya kazi. Mimi nina kwenda kupata kipande kubwa ya chaki. Kwa sababu ni kwenda kuwa mengi. OK. PROFESA: OK. Hebu kuanza na safu ya kwanza. Tutaweza kuanza huko, basi nyie Unaweza labda kazi kwa njia ya baadhi ya zaidi. OK. a sawa nyakati b c hivyo ni nini? Siyo swali hila, mimi ahadi. STUDENT: 4 mara 5. PROFESA: 4 mara 5. 20. Basi nini b? STUDENT: 4. PROFESA: Na c? STUDENT: 5. PROFESA: 5. Na kisha hii ni kwenda tu kuwa ampersand, ampersand b, ampersand c, haki? Si mbaya. Ni rahisi kutosha. OK. Hivyo moja ijayo. A sawa na mara c, katika kesi mtu alikuwa usio wa kawaida na kwamba. Ni kila mtu ukoo kwa mara ni sawa? OK, yote hii means-- hii ni shorthand kwa mara ni sawa na c. Unaweza pia kufanya hivyo pamoja na mgawanyiko, na kuongeza, na kutoa. Unaweza kufanya sawa, au pamoja na sawa c ina maana sawa pamoja c, bala sawa c itakuwa sawa minus c. Ni tu kisintaksia sukari. Hivyo, katika kesi hii, a ni sawa na mara c atatupa nini? Tena, si swali hila. STUDENT: 100. PROFESA: 100. Je kitu kingine chochote kubadilika? Hakuna Labda mimi hatimaye kupata bora katika ampersands yangu. STUDENT: Sawa, sorry, jinsi gani ya kupata 100? PROFESA: OK. Hivyo ni sawa na mara c, hivyo mara c. STUDENT: Oh, wewe ni kutumia a kwa previous-- PROFESA: Ndiyo. Basi hizi ni maadili yetu ya hivi karibuni. Hizi ni nini unapaswa kuwa kutumia kama sisi hoja chini, sawa. Hivyo, b ni jambo tu kubadilisha, haki? Basi hebu kujaza kila kitu kingine. B. Je, ni b kwenda kuwa? Kuwa au si kwa kuwa. Hivyo kile ni hii kufanya? Ni nini nyota pa kufanya? STUDENT: Kanuni kwa eneo la pa. STUDENT: Hapana, si kabisa. Hivyo hii ni d kumbukumbu. STUDENT: Hivyo b ni mitupu thamani ya pa. PROFESA: Yeah, hivyo ni pa anwani ya, haki? Hivyo ni kusema go ambapo ni kuhifadhiwa na kuwapa thamani hiyo. Hivyo ni nini b? STUDENT: 100. PROFESA: 100. Kamilifu. OK, hivyo pc ni nini kubadilisha. Kila kitu kingine anakaa sawa. Nini pc kwenda kuwa? Zoezi rahisi. Pc ni sawa na pa, na nini ni pa? STUDENT: Ampersand. PROFESA: Perfect. Sasa sisi ni kupata kuvutia. OK, hebu kuvunja hii moja chini. Kwanza, nini nyakati b c, kwa sababu hiyo sehemu rahisi ya hii moja, haki? Mara B c is-- STUDENT: 500. PROFESA: Yeah, hivyo nini hii moja kufanya, kama ya nyota AS, nini kubadilisha? STUDENT: Nini katika the-- PROFESA: Nini katika b? STUDENT: Nini katika nafasi kwamba PB ni akizungumzia. PROFESA: Na PB ni akizungumzia to-- STUDENT: B. PROFESA: B. Hivyo tu Jambo kubadilisha ni b, haki. Hivyo b mara c, 500. Hivyo kwamba ni nini mabadiliko sasa. Baridi. Nzuri. You guys ni kufanya kubwa. Haki zote, kuvunja hii chini moja. C ni kubadilisha, haki? Hivyo tunaweza kujaza katika kila kitu kingine. Hebu angalia. OK. Tunajua kwamba c ni kwenda kuwa na bidhaa ya namba mbili, haki? Ni namba mbili, ingawa? STUDENT: A na c? PROFESA: Hivyo ni haki kwa moja ya kwanza. Hivyo sisi ni d referencing p ya, haki? P ya pointi, hivyo tunajua kwamba hii ni kwenda kuwa mara 100 nini? Times gani pc uhakika na? Anazungumzia. Hivyo mara 100 100 ni 10,000. Je kwamba inafanya hisia? Baridi. Nyumbani kunyoosha, guys, mstari wa mwisho. OK. Nini kubadilisha hapa? STUDENT: A. PROFESA: A. Perfect, hivyo kila kitu kingine unaweza kukaa sawa. OK. Na ni nini? Hivyo ni mara nini? Hii ni nyota PB. Hivyo nyota PB maana hapa AS, pointi PB b. STUDENT: 500. PROFESA: 500. Hivyo tuna 500 100 mara. Hiyo ni 50,000. Whew! Kuangalia kwamba. STUDENT: Kwa nini tuna & C kwa last-- PROFESA: Sorry. STUDENT: Oh, Sawa. PROFESA: mbaya wangu. Kura ya maandishi. Kila mtu mzuri? Si mbaya sana, haki? Tu inachukua kidogo wakati wa kufanya kazi kwa njia ya. Kama kuvunja chini, kuelewa nini kila sehemu ni akimaanisha to-- kama na kila kitu ni, yes-- kuvunja chini kwa kidogo matatizo na kisha mawazoni, na unaweza kufanya baadhi ya mambo ya kutisha. Kuna majibu, lakini sisi alifanya hivyo. Pointer hesabu. Ah. Mikono yangu ni wote chalky. Hivyo kuongeza au subtracting int anpassar pointer na ukubwa wa aina ya pointer. Kumbuka jinsi kila aina ina ukubwa tofauti? Hivyo kama mara mbili au muda mrefu muda mrefu ipo nane na int ni wanne lakini Char ni moja. Hivyo kile unataka kufanya is-- jambo moja kukumbuka ni tu kwamba ni kiasi gani yako thamani pointer kweli mabadiliko itategemea aina ya pointer ni. Kila mtu mwema na hili? Naweza kufuta yake? Sisi ni nzuri? Kutisha. Hivyo kama sisi kuwa na baadhi ya pointer that-- hii ni kwenda be-- mimi nina kwenda kufanya ni int pointer. Ni maduka huu. Kama ungekuwa na kusema pointer pamoja na moja, nini ni kwenda kufanya ni ni kwenda update hivyo kwa ukubwa wa int kwa sababu hiyo ni aina ya pointer ni. Na C, kila kitu ni kali sana na umewekwa. int pointer ni kwenda update na kiasi cha nafasi int itachukua. int ni ka nne. Hivyo gani hii kurejea katika? Wewe ni kuongeza tu minne kwenye hili. Sasa pointer yako itakuwa be-- sawa. Hivyo kama ilivyokuwa Char na sisi alifanya pointer pamoja na moja, itakuwa ya namna gani sasa? Kama ni started-- kujifanya sisi started-- sasa hivi ni 0x08. Hebu sasa wanasema kwamba hii ilikuwa Char pointer, na sisi aliongeza moja. Je, ni mabadiliko ya? Jinsi ka wengi ni Char? Watazamaji: Moja. SPIKA 1: Mmoja. Watazamaji: Hivyo 0x09. SPIKA 1: Hivyo itakuwa tisa. Hivyo tu kitu cha kukumbuka. Tu wakati kuongeza moja, siyo kuongeza moja isipokuwa ni Char. Ni kuongeza wangapi ka aina ya kwamba ni, ambayo ni kwa nini tuna hii equation hapa. Hivyo ni mara int ukubwa ya aina ya pointer. Hivyo tuna mfano hapa. y ilikuwa kwa ajili ya kwamba thamani, 0x4, wakati sisi alifanya y pamoja sawa moja. Nini ndani yake, nini katika x, haina mabadiliko. Nini mabadiliko ni nini katika y. anwani kuhifadhiwa katika y updated na nne sababu kuna ka wanne katika int na ni int pointer. Wote haki. Hivyo sasa tuna zoezi jingine. Hivyo swali ni nini magazeti. Mawazo yoyote? Watazamaji: idadi ya wahusika katika furaha ya paka? SPIKA 1: Hasa. Hivyo kama na kamba yako. Je, kila mtu kupata kwamba? Je, tunataka kutembea kwa njia hiyo? Ndiyo, OK. Hivyo tuna nini mimi here-- kama hii hivyo zaidi. Mimi hawana [Inaudible] ridiculously. Hivyo tuna kamba yetu hapa, furaha paka. Nzuri. Tuna baadhi ya kukabiliana na kwamba sisi ni kuweka wimbo wa. Hivyo tuna baadhi Char * pointer kwamba tu ni kuweka sawa na Str. Nini hii ni kufanya ni ni kumshirikisha baadhi pointer mwanzo wa kamba yako. Kwa sababu mimi nina uhakika, kama imeelezwa katika hotuba, tumekuwa aliyopewa nyie hii aina data iitwayo kamba. Lakini kwa kweli masharti ni tu safu of-- kama * Char. Ni pointer rundo la wahusika kwamba ni contiguous katika kumbukumbu. Hivyo hii tu seti sawa na kamba yoyote ni kutambuliwa na ambapo tabia yake ya kwanza ni. Hivyo hii ni kuweka tu baadhi ya uhakika sawa na mwanzo wa kamba. Kila mtu nzuri huko? Baridi. Hivyo hii ni dereferencing pointer yetu. Hivyo ni kweli kwenda kutupa baadhi ya thamani katika hapa, katika kamba yetu kwamba sisi ni kuzungumza juu. Na sisi ni kusema kwa muda mrefu kama si null Terminator. Hivyo kuendelea mpaka kupata hadi mwisho wa kamba. Mwisho pointer yako kwa moja. Hivyo r, itakuwa kweli update na moja kila wakati kwa sababu hii ni Char, * Char. Hivyo ni kwenda kupitia. Ni kwenda update. Hivyo mara ya kwanza hii anaendesha, ni kwenda kuwa hapa katika h. Ni kwenda update. Utakuwa a. Utakuwa p, y, na kadhalika na kadhalika. Tutaweza kurekebisha kukabiliana. Ilipo mwisho, tu Prints jinsi mbali ni wamezipata. Ndiyo. Watazamaji: Hivyo Ni makosa nafasi kama moja, haki? OK. SPIKA 1: Fikiria hivyo. Ni kwamba question-- Watazamaji: [inaudible]. SPIKA 1: Hakuna wasiwasi. Hii mimi kufanya hivyo. Haki wote, hivyo jambo moja mimi kuelewa ni kwamba pamoja na safu, unaweza pia kutibu kama pointer sababu arrays ni tu matangazo ya kuendelea kumbukumbu. Hivyo unaweza kutibu njia hiyo hiyo. Unaweza kuendesha yao na kuyatumia, pia. Hivyo badala ya kufanya, katika hii kesi, jambo sawa itakuwa safu 0 sawa 1. Lakini katika njia sawa kwamba kamba ni kuamua na mwanzo wa ambapo tabia yake ya kwanza ni, safu ni kuamua na ambapo kipengele yake ya kwanza ni. Sababu tunajua, sisi ni uhakika, kwamba hizi ni kwenda kuwa kuendelea vitalu ya kumbukumbu. Hiyo ni nini inaruhusu sisi kufanya hivyo. Tunajua wao ni kuendelea vitalu ya kumbukumbu. Hivyo katika kesi hii, na dereferencing safu tu, kwamba inatuambia, OK, kwenda kuanza safu yako, ambayo ni hapa. Hivyo unaweza kuweka sawa na moja. Na katika kesi hii, chochote safu yako aina ni, wakati wewe update kwa moja, kwamba kama tu uppdatering kwa ripoti ijayo. Unaweza kufanya hivyo kwa sababu wewe kujua nini katika safu yako. Hivyo anajua ni kiasi gani kwa update pointer yako na, nini anwani update kwa hivyo kwamba uko katika yanayopangwa ijayo. Hivyo hii ni tu njia tofauti ya kuandika safu 0 sawa 1, safu 1 ni sawa na 2, safu bracket 2 sawa na 3. Ni tu njia nyingine ya kufikiri kuhusu hilo. Kwa sababu wao ni kuendelea vitalu katika kumbukumbu, unaweza rejea ama kwao na safu notation-- ambayo mimi binafsi kupata easier-- lakini labda unahitaji kuendesha ni madhubuti na anwani kumbukumbu. Na hii ni ya namna gani kufanya hivyo. Aina ya zaidi ya kama Jambo baridi unaweza kufanya dhidi labda si kitu wewe ni kweli kwenda kutekeleza. Mimi matumizi yake katika 61. You guys pengine hawana haja ya na wasiwasi kuhusu hilo sana. Lakini kama wewe ni nia, kuchukua 61 mwaka ujao. Tuko katika nyumbani kunyoosha guys. Mimi najua, ni muda mrefu. Nguvu Kumbukumbu Allocation-- hivyo tunajua kwamba moja mambo wakati sisi aliyesema wakati sehemu yetu ya kwanza pamoja, sisi inaonekana katika wabadilishane kazi ambapo ilikuwa nje ya wigo wa kazi yetu kuu. Na sisi walikuwa kupita katika maadili haya waliokuwa ufanisi nakala. Na mara moja wabadilishane kumaliza utekelezaji, ni tu kushoto stack. Kumbuka, tuna stack frame kwa wabadilishane. Ni majani na wale maadili kuondoka nayo. Na walikuwa wamekwenda. Sisi hakuweza kufanya kitu nao na tulikuwa kusikitisha sababu hatuwezi byta maadili yetu. Lakini pamoja na C, kama nilivyoeleza, wewe mengi ya nguvu juu ya kumbukumbu. Hivyo nini unaweza kufanya ni unaweza kutenga mambo juu ya lundo hapa kwamba kukaa huko mpaka kuwaambia vinginevyo. Wao ni kama watoto nzuri. Wao kukaa huko. Hawana kuondoka. Wao itabidi kukaa huko mpaka uko kama, sawa, unaweza kwenda mbali. Wakati mambo juu ya stack, who-- wao ni kama watoto naughty. Wao itabidi tu kukimbia wakati unataka kuwa hapo na kisha kutoweka. Huwezi kupata yao nyuma. Hivyo chungu is-- tunakwenda majadiliano juu ya malloc na bure, ambayo Mimi nina uhakika wewe guys kusikia kuhusu katika hotuba. Na kwamba kimsingi njia kuwa na data kuendelea sana. Hivyo unaweza kuweka data karibu kwa muda mrefu kama unataka. MHM. Watazamaji: Je, unaweza kufafanua lundo na stack? Ni watu wa namna maeneo ya kuweka mambo? SPIKA 1: Hivyo wao ni kimsingi just-- wao ni njia ya sisi rejea tu kumbukumbu. Hivyo chungu ni inaweka tu ambapo kumbukumbu ni zilizotengwa dynamically, ambapo stack inahusu zaidi stack muafaka kwamba ni zaidi kati ya kazi ambayo ni kweli mbio. Wewe si kweli kuwa na udhibiti. tofauti kubwa, una kudhibiti juu ya lundo kama unataka. Una chini ya udhibiti wa stack. stack inategemea kazi ambayo ni mbio, na utaratibu ambao wao ni kukimbia, na jinsi mambo ni akarudi. Ambapo pamoja na lundo, kama tutaweza kuona, unaweza kusema, OK, Mimi nataka thamani huu kuwa kuzunguka mpaka nawaambia vinginevyo. Wewe hawaruhusiwi kujikwamua yake. Wewe si kuruhusiwa kuifuta. Wewe ni kwenda kuweka ni kuzunguka kwa muda mrefu kama mimi kukuambia. Kupata kuwa bosi katika lundo, ambapo stack-- labda kama wewe kama finagle njia yako unaweza kuwa bosi. Lakini kabisa. Na ni kweli kumbukumbu tu. Ni njia tofauti tu akimaanisha kumbukumbu. Baridi. Hivyo, pamoja na kwamba, jinsi ya kudhibiti kumbukumbu yako. Ni kwa malloc, ambayo wewe ni kwenda kupata kutumia. Hivyo ni kidogo tu kwa mgao kumbukumbu. Hayo ni yote ni. Kuna kundi la baridi nyingine kazi ya kuwa na alloc mwishoni, na wao kusimama kwa ajili ya mambo mbalimbali. Hivyo wakati unahitaji kuhifadhi kwamba mahitaji outlast kazi yako ya sasa ili kwamba wakati sasa yako kazi anaendesha mbali, bado una data kwamba got kutoka hayo, unataka kutumia malloc. Kwamba kutakuwa na initialize juu ya lundo. Na kama nilivyosema na kuweka akisema, itabidi kuitunza huko mpaka kuwaambia vinginevyo, ambayo ni jambo muhimu hapa. Hivyo jambo moja taarifa, na hiyo ni kawaida kwa kweli ni muhimu, ni kwamba hii sizeof ni super muhimu kutumia kwa sababu kulingana na aina ya mashine wewe ni mbio, inaweza kuwa na viwango tofauti ya kumbukumbu kwamba inachukua. Hivyo daima wanataka kutumia ukubwa wa hivyo kwamba wewe si mashine tegemezi, hivyo kwamba kanuni yako mapenzi kukimbia kwenye mashine yoyote. Na kwamba ni tu sehemu ya kuandika code nzuri. Kama ni kazi ya mashine moja, lakini si yoyote ya wengine, jinsi muhimu ilikuwa mpango wako? Hivyo daima wanataka kuhakikisha na kutumia sizeof. Watazamaji: Hivyo ni kwamba kama ukubwa wa inchi 10 [inaudible]? SPIKA 1: Hii ni kawaida ya 10 ints. yeah. Hivyo ukubwa wa ints atarudi kiasi gani moja int kuchukua. Au ukubwa wa Char, jinsi kiasi gani moja Char kuchukua. Na kisha jinsi vitalu wengi ya kwamba unataka? Hivyo katika kesi hii, tunataka kitu kwamba tunaweza kuhifadhi ints 10. Na itakuwa kazi bila kujali ya mashine, ambayo ni ya baridi. Hivyo ni jinsi ka wengi mapenzi kwamba kweli kukupa? Haraka math. Watazamaji: 40. SPIKA 1: 40. Hasa. Hivyo kitu kingine kubwa. Pointer au malloc unaweza kurudi null. Hivyo tena, daima kuangalia kwa kuona kama walirudi null kabla ya kujaribu na kufanya chochote kwa hayo. Kama wewe kujaribu na dereference pointer hii sasa, ni tu kwenda segfault kwa sababu wewe akaenda na kujaribu kugusa null wakati unapaswa kuwa. Hivyo daima kuangalia kwa null. Tena, wote unaweza kufanya. Inaweza kurudi null. Ni itabidi kurudi null ikiwa ni aidha nje ya nafasi, au kwa sababu yoyote ni mbio katika baadhi mdudu kumbukumbu. Ni wakati mwingine tu anarudi null. Hivyo wewe tu na kuangalia kwa ajili yake. Hiyo ni slide hii yote ni kusema. Na kisha nini tuna hapa ni wito kwa bure. Hivyo katika njia sawa kwamba kama wewe kufungua faili lazima kufunga faili, kama wewe malloc kumbukumbu, lazima wewe huru kwamba kumbukumbu. Na nyie kupata kufanya mambo ya kweli ya baridi. Na kuna mpango unaweza kuendesha kwa kuona kama wewe ni milele kinachovuja kumbukumbu. Lakini hawataki kuvuja kumbukumbu. Ni mbaya kweli kweli. Tu fujo hadi mambo. Ni mbaya kufanya tu kama programu busara kwa ufanisi kubuni. Lakini pia ni tu aina mbaya kwa kompyuta yako. Mambo tu bure wakati malloc yao. You guys kuona symmetries hapa. Super rahisi. Tu bure na kisha chochote pointer yako, jina lolote la pointer yako ni, na ni itachukua huduma ya kumkomboa hivyo kwa ajili yenu. Baridi. Basi tuna hii. Hivyo sisi ni kwenda tu kutembea kwa njia ya mpango huu. Na kisha wewe guys ni kosa. Hivyo [inaudible] kuu tu. Hivyo tuna baadhi int * pointer. Hivyo tuna pointer hiyo ni kwenda kushikilia ints. Na jinsi ints wengi ni kwenda kushikilia? Moja tu. Ukubwa wa int. Sisi kuangalia kuona kama pointer ni null sababu yaani, tunataka kusema si kufanya kitu chochote. Ni mbaya. Hivyo sisi magazeti baadhi kosa nje ya kumbukumbu, mara nyingi kurudi 1, kama wewe guys ni kutumika. Na kisha sisi hapa, sisi dereference pointer yetu. Hivyo kwamba maana tunakwenda kuhifadhi kitu katika eneo tuliyopewa. Int * pointer, au malloc, anarudi anwani ya ambapo kuweka kando hii kumbukumbu kwa ajili yenu. Hivyo ni kimsingi kutoa like-- kama wewe kufikiri juu ya rundo ya nyumba katika kitongoji kwamba unataka kuweka samani katika yako, malloc ni kama OK, unaweza kupata kwenda kwa nyumba tatu. Na inakupa anwani ya nyumba tatu. Hivyo haki hii sasa, hii maduka pointer mitaani, maduka pepe ya nyumba yako. * PTR njia, OK, mimi nina katika nyumba yangu. Baridi. Mimi haja ya kupata baadhi integer. Hivyo wewe ni kuuliza kwa mtu kukupa samani sasa. Ili kupata baadhi int. Na kuiweka katika pointer yako ambapo ni akizungumzia. Na kisha tu prints nje, aliingia popote. Na tena, kumbukumbu. Hivyo hii ni kama wewe akaenda hii kushughulikia na wewe aliona nini huko. Baridi? Na kisha bila shaka sisi huru pointer yetu. Usisahau bure pointer yako. Usisahau kuangalia kwa null. Usisahau bure pointer yako. Una mambo mawili unakumbuka kutoka hii, au kwamba unapaswa kukumbuka. Ndiyo. Watazamaji: [inaudible] mambo kama kwamba, Char * s. Jinsi ya kuja sisi kamwe huru wale? SPIKA 1: Hm? Watazamaji: Je wale kama masharti? Wewe alisema masharti ni kama Char * s, haki? Hivyo kwa nini sio sisi huru masharti? SPIKA 1: You tu bure kama wewe ni mallocing. Watazamaji: Oh, kama wewe ni mallocing. SPIKA 1: Hivyo malloc na bure ni mambo mawili kwamba unapaswa daima kuwa pamoja. f wazi, f karibu, mambo mawili unapaswa kuwa pamoja. Katika kesi hizo zote mbili, kuangalia kwa null. Ndiyo. Watazamaji: Hivyo bure ni tu kuruhusu kitu kingine kuhifadhiwa huko baada ya mpango huu ametumia yake? SPIKA 1: Ni kusema tu, OK, mimi nina kufanyika kwa hili. Huna haja ya kuweka ni kuzunguka. Vinginevyo kompyuta yako mapenzi Tu kama kujaribu na kuitunza huko. Na kisha can't-- anaendesha katika masuala ya kumbukumbu baadaye. Siku zote unataka huru ni kwa sababu kinaeleza kompyuta yako, OK, mimi nina kufanywa na doa hii ya kumbukumbu. Unaweza kuwa nyuma kwa ajili yangu kwa kutumia baadaye. Baridi? Ndiyo. Watazamaji: Hivyo sisi kutumika% d tu kwa sababu mara mbili kwamba kuja nyuma, au kwa nini is-- [inaudible]. Watazamaji: Je, unaweza kutumia% i? SPIKA 1: Unaweza kutumia% i. Yoyote dakika ya mwisho maswali? Kwenda mbele. Watazamaji: Mimi tu swali haraka. Hivyo PTR kutofautiana, that's-- kama, kwa int * PTR = malloc, hiyo ni kusema tu ni akizungumzia nafasi katika memory-- SPIKA 1: Je, unataka [inaudible]? Watazamaji: --that ni ukubwa of-- hakuna, ni sawa. Lakini ni akizungumzia tu nafasi katika kumbukumbu tu kwamba kama ka nne. SPIKA 1: Haki. Hivyo malloc ukubwa wa int anasema, OK, mimi nina kwenda kukimbia mbali, kupata ka wanne wa kumbukumbu kwa ajili yenu. Wakati hupata kwamba nne ka ya kumbukumbu, ni anaye nyuma anwani ya ambapo ni kuanza, na kwamba ni nini kuhifadhiwa katika pointer, au PTR. Nzuri. You guys kuangalia chini kuchanganyikiwa kuliko wengi watu wakati mimi majadiliano juu ya pointer, hivyo mimi nina hisia nzuri hivi sasa. Wote haki. Kama siku zote, wewe guys wanapaswa kuwa wote wamezipata pset2 yako darasa kwa sasa. Najua kumekuwa na baadhi ya wonky mambo ambapo anasema, formula si halali au kitu. Kama wewe ni kupata kwamba, wote wa darasa lako ni halali kwa upande wangu. Hivyo siwezi kutuma wewe viwambo ya darasa lako. Tu basi mimi kujua kama vizuri kama wewe ni kukosa darasa yoyote au kitu haionekani kufanya hisia. Kuja kwangu. Nimekuwa super fahari ya wewe guys tayari, ili kuweka it up. Na kuwa na mapumziko mema ya wiki yako. Mimi nina uhakika mimi itabidi kuona baadhi ya wewe katika masaa ya ofisi.