[TEMA MUSIC] Gjuha 1: Hi, të gjithë. Mirë se vini përsëri në seksion. Ditë e bukur out-- e cila është arsyeja pse, unë jam sigurt, ka vetëm katër prej jush këtu dhe nuk paketë tonë të zakonshme. Unë kam qenë i sëmurë këtë fundjavë. Kështu që unë nuk kam Starburst për ju djema. Dhe unë mund të fillojnë kollitjes tmerrësisht të gjithë këtë. Pra, vetëm të kesh durim me mua. Unë jam duke shkuar për të vërtetë të përpiqet dhe për të marrë me këtë së pari, edhe pse, para se unë kam një sulm kollitjes. Por vetëm të jetë e lehtë për mua një pak bit-- kjo është e gjitha unë kërkoj. Pra, axhenda jonë për today-- vetëm një reminder-- quiz juaj është javën e ardhshme. Unë i thashë ju këtë javë të fundit kështu që nuk do të kapur ju off roje. Kështu që unë jam duke i kujtuar sërish. Javës së ardhshme quiz tuaj. Për këtë qëllim, javën e ardhshme e seksion do të jetë shumë më e of-- Unë do të përpiqemi dhe të punojnë në disa shqyrtim. Pra, në qoftë se ju djema mund të ndihmoni mua duke dërguar mua gjërat që ju jeni të rehatshme me, se ju jeni të shqetësuar në lidhje me, tema që ju dëshironi për të mua për të mbuluar, që do të jetë i madh. Kështu që unë mund të përpiqen dhe të punojnë ata në seksionin tonë javën e ardhshme ose të ju dërgojnë materiale shtesë ose prep që ju nuk mund të merrni diku tjetër. Po! Më shumë njerëz po vijnë! Mendova, ka të bëj atë keq fundit javë, se askush nuk dëshiron të kthehet? Unë jam i frikësuar. Pra tjera tri gjëra që ne jemi duke shkuar për të shkuar mbi janë redirection, file I / O, dhe pastaj pointers dhe kujtesës dinamike. Unë jam i sigurt që ju jeni të gjithë të ngazëllyer për super pointers-- Tema gjithëve preferuar, në mënyrë të thjeshtë për të kuptuar. Unë jam i sigurt që ju djema të gjithë e mori atë, e drejtë? Gjërat e para të parë Pra, redirection-- kjo është në thelb vetëm një mënyrë për të kontrolluar se si ju input gjërat në programin tuaj, si ju gjërat e prodhimit nga programin tuaj. Mënyra kryesore se ju djema kanë qenë të bashkëveprojmë me të është vetëm me jashtë standarde me ekranin tuaj të shtypura këtu. Por ka mënyra për të pipe-- si ne shohim këtu është një e llojit tonë words-- e tub që informacioni ose të dhënat në një skedar nga një skedar. Është mënyra të vetëm të ndryshme të duke marrë gjërat në programin tuaj dhe nga e programit tuaj, në vend të vetëm për shtypjen e tyre në këtë ekran ose inputting gjëra nga vija e komandës. Pra, para pak madhe se caret. Pra output-- ai thjesht shtyp e prodhimit në një skedar në vend të ekranit tuaj. Pra, nëse keni pasur diçka që të shtypura "Hello, bota!" në ekran, në qoftë se keni vënë atë në vend të output.text, që krijon këtë skedar quajtur output.text. Dhe kur ju të hapur atë, ajo do të thonë "Hello, bota!" në atje. Kjo mund të jetë super të dobishme në qoftë se ju keni një ton të gabimeve në të vërtetë, siç e shohim në këtë një të tillë. Nëse ju bëni dy caret, ajo do të shtypura mesazhet e gabimit. Pra, nëse ju jeni të paturit e një problem me përpiluan, ajo ka një shumë prej gabimeve dhe ju jeni duke u bogged poshtë në përpjekjen të lëvizni nëpër në linjë tuaj të komandës nëpër të gjitha ato, ju mund të vetëm ato të shtypura në një skedar, të hapur këtë dosje në mënyrë që ju të mund të lëvizni nëpërmjet tyre më të lehtë. Unë në fakt përdorur se një shumë kur unë u debugging 181 psets e mia për të mësuarit e makinës. Pra, ajo mund të jetë super të dobishme më vonë. Është gjithashtu e dobishme në qoftë se ju keni një program të se ndoshta është krijuar një bibliotekë apo gjenerimin e një sërë e vargjet, dhe ju duhet të jetë në gjendje për të parë atë ajo është gjenerimin e tyre siç duhet. Kjo është mënyra për të bërë atë. Pra, nëse ju shkruar ato në një skedar, ju më lehtë mund të shqyrtojë ato, apo jo? Kundrejt duke u përpjekur për të lundruar përmes linjës komanduese tuaj. Dhe pastaj një gjë të vihet në dukje është se me vetëm më i madh se caret, në qoftë se ju shkruani në një skedar që tashmë exists-- kështu si në qoftë se ne u këtë parë kohë, ne kemi vënë atë në output.text, dhe pastaj kemi pasur një program të dytë se të shtypura këtë si program dy dhe bëri një më i madh se sa të output.text, ajo do të prishësh that-- kështu prishësh atë që ishte ndonjëherë në këtë dosje për të filluar me. Pra, nëse ju doni të append në një skedar, siç e shohim këtu, ju vetëm bëni dy më të madhe se shenja. Dhe kjo do të shtojë atë. Kjo nuk do të prishësh atë. Pra, nëse keni nevojë për të kandiduar të shumta Programet dhe lloji i mbajtur gjurmët e asaj që të gjithë prej tyre janë kthehen për ju në një skedar, kjo është një mënyrë për të bërë atë. Nëse ju nuk bëni kujdes se çfarë është në dosjen tuaj dhe është e lejuar që të jetë overwritten, ju mund të përdorni vetëm një më të madh të vetëm se. Ka që e bëjnë kuptim për të gjithë? AUDIENCA: Si dot çaj përshëndetje të madhe se prodhimit dot tekstin, si dy herë, ajo vetëm do të tregojë vetëm në prodhim dot text a time-- dytë Gjuha 1: E drejta. Pra, kjo do të në thelb vetëm krejtësisht prishësh atë që ishte atje për të filluar me. Nëse kjo fotografi këtu, output.text tashmë ekziston, në thelb çdo gjë që ju e quani që përsëri me një më i madh të vetme se sa ju mund të thjesht të mendoni për atë si si ai zëvendësoi file. Ashtu si kur ju jeni të shpëtuar një Word dokument dhe ju nuk ruani si, dhe ju mbani të njëjtin emër, dhe ajo plotësisht mbivendos it-- kjo është e njëjta gjë e tillë. Çdokush keni ndonjë pyetje në vetëm kompjuteri për një fotografi? Awesome. Pra natyrisht, në qoftë se ju kundërt shigjetë drejtim, ajo mund të bëjë të dhëna. Pra, kur ju djema pasur si Cezarit apo Visioneer dhe keni pasur të dhëna diçka, keni pasur një argument linjë komande që në fakt input ajo. Kjo është një tjetër mënyrë për të bërë atë. Pra, në vend të pritjes për një komandë të shpejtë, si kur ju të kërkuar për të tuaj Mesazhi në Cezarit apo Visioneer, në qoftë se keni pasur një skedar teksti që kishte mesazhin tuaj, ju vetëm mund të shkruani atë në atë. Pra, në qoftë se kjo ishte si dot çaj Cezarin 3 më pak se teksti input shigjetë, e cila është mesazhi juaj, që do të kandidojë vetëm gjobë. Kur programi juaj Caesar vërtetë kërkuar të dhëna nga përdoruesit, ajo tashmë do të ketë atë, sepse ju keni shtypur në këtë skedë. Kjo është vetëm një tjetër mënyrë. Vetëm një i kundërt i output-- vetëm input për të dhënat tuaja. Dhe pastaj ai i fundit është tub. Pra, kjo është ftohtë goxha. Për shkak se ajo ju lejon të marrë prodhimin e një program dhe e vënë atë si input për një tjetër program. Unë nuk e di nëse ndonjë prej jush luajtur me të deshifroj se CS50 mund të ketë t'ju jepet, por do të ju lejojnë për të marrë një mostër paraqesë, shkruani atë në encryption tuaj, dhe pastaj nga atje shkruani që në decryption tuaj për t'u siguruar që ajo doli njëjtë. Pra, kjo është lloj i si tre-palësh loop. Shkoni për të. AUDIENCA: Nëse një program ka inputeve të shumta, a ka një mënyrë për të treguar atë që input për të përdorur skedar teksti apo dalje për? Gjuha 1: Ajo ka inputeve të shumta. Çfarëdo paraqesë input-- tuaj kur është e duke kërkuar për të dhëna se herën e parë, është e duke shkuar për të marrë, unë mendoj, se është do të tub në të gjithë dosjen. Pra, nëse ju keni inputeve të shumta, ju jeni do të tubacioneve në fotografi të shumta. Pra, nëse ju jeni duke kërkuar për mesazhe tri herë në kodin tuaj, ju jeni duke shkuar për të vënë në tre fotografi të ndryshme. Dhe ajo merr çmendur. Dhe ju nuk duhet të ketë të shqetësuar për këtë tani. Por kjo është ideja. Pra, vërtet, tub është prodhim vetëm prej një Programi i përdor të dhëna në tjetrën. Gjithkush mirë atje? Ftohtë. OK. Ju ndoshta nuk do të ketë të bëjë shumë me të. Por ju duhet të kuptoni mënyra që ju mund të përdorni këtë. Dhe ka disa raste që ju mund të dëshironi të përdorni atë. Kështu që të paraqesë I / O-- unë e di se çfarë jeni saying-- ne jemi përdorur për të lexuar nga dhe me shkrim në ekranin tonë atje, e cila është standard në dhe standarde jashtë. Dhe kjo është ajo që ju djema keni qenë duke bërë që nga fillimi i klasës këtu. Por ju gjithashtu mund të lexojnë dhe shkruajnë fotografi, e cila është e gjitha file I / O-- kaq të paraqesë të dhëna, Prodhimi është e gjitha ajo qëndron për. Pra, kjo në thelb do të thotë se ju mund të ruani të dhënat tuaja tani. Kur keni shkruar vetëm atë ekran, është e shkuar në thelb, e drejtë? Sa më shpejt që ju bëni "Hello Bota "dhe drejtuar" Hello world " ajo printon "Hello World" në ekran. Por ju nuk mund të vërtetë të bëjë asgjë me atë nga atje. Nëse ju dyqan në një tekst file, pastaj papritmas ju e keni këtë të dhëna që ju jeni duke i lejuar për të manipuluar ose të vënë atë në një skedar, ose të vënë atë në një program më vonë. Një nga arsyet pse ne bëjmë kjo është vetëm si një mënyrë për të ruajtur të dhënat për përdorim të mëvonshëm. Unë kam disa hapa këtu thjesht duke ecur nëpër standarde I / O. Në hapin e parë, ju nevojë për të krijuar një referencë në dosjen me të gjitha kapele Skeda Skeda yll. Kështu që krijon një tregues për një skedar. Pra, atëherë ju doni të hapur atë. Dhe ju thoni, fjalë për fjalë, vetëm fotografi barabartë fopen. Dhe kjo do të kthehet a treguesin në dosjen qe sapo hapur. Unë pashë një çift prej jush djemtë në orarit të punës. Por një nga gjërat është pointers remember-- mund të jetë një adresë apo null, e drejtë? Në qoftë se ne ndonjëherë kemi një rast ku diçka që mund të kthehen null, çfarë ne duhet të bëjmë para se ndonjëherë e përdorin atë? Ne kemi nevojë për të kontrolluar nëse është i pavlefshëm apo jo, e drejtë? Për shkak se disa prej jush mund të ketë pasur çështja ku çfarëdo objekti ishte duke u kthyer në Breakout ishte null. Ju u përpoq për të kryer disa funksion në të. Dhe faqen kompjuterin tuaj fajësuar. E drejtë? Vë bast disa prej jush mund të ketë pasur këtë çështje. Pra, me fopen, fopen ose do të kthehet një tregues për fotografi, apo nëse diçka shkon keq, ajo do të kthehen null. Pra, ju gjithmonë duhet të kontrolloni që ajo nuk është kthyer pavlefshme para se të përpiqet për të bërë ndonjë gjë tjetër. Kjo është si një paradigmë standarde se ju do të jeni nevojë këtu. Nëse ka ndonjëherë një shans që diçka që do të mund të kthehen null, kontrolloni për t'u siguruar atë nuk para se të vazhdoni. Përndryshe, ju do të jeni të merrni gabimet bukuroshe site. Dhe askush nuk i pëlqen të merret me ata. Pra, si ne shohim këtu, argumenti i parë është vetëm rruga për file. Nëse kjo fotografi nuk ekziston, ajo do të krijojë këtë dosje. Dhe kjo është vetëm do të jetë bosh. Dhe pastaj Argumenti i dytë është mënyra që ju dëshironi. A duam të lexojmë nga kjo skedë? A doni të shkruani nga ajo? A doni të append? Pra, në fakt ajo që unë vetëm said-- nëse skedari nuk ekziston dhe ju jeni duke u përpjekur për të lexuar nga ai, ajo do të hedhin një gabim. Në qoftë se skeda name-- pëlqen nëse file.text nuk ekziston ende dhe ju doni të shkruani për atë, ajo do të krijojë një skedar bosh të quajtur file.text për ju. Dhe në qoftë se ju doni të append, ju duhet të bëni të njëjtën gjë. Ka që e bëjnë kuptim? Nëse ju jeni duke u përpjekur për të lexuar nga një fotografi që nuk ekziston akoma, ajo do të hedhin një gabim. Përndryshe, ajo do të krijojë fotografi për ju të bëni atë që ju dëshironi të. Ftohtë. Tani ne mund të lexohet nga file. Dhe kjo është vetëm lloj i shkon përmes funksioneve të ndryshme që ne kemi për fotografi I / O. Ky vullnet të jetë e nevojshme në pset kësaj jave, nëse më kujtohet saktë. Po, absolutisht do të jetë nevojshme në pset kësaj jave. Pra fgetc kthen karakterin e ardhshëm. fgets vetëm jep një linjë të tekstit. Ai do të kthehet çdo gjë deri në një linjë të re, dhe kjo do të thyejnë. Pra fread lexon një farë Numri i bytes dhe i vendos ato në një grup, i cili është diçka që ju mund të duan të bëjnë me ri-size-- mund të jenë të dobishme. Sa shumë njerëz kanë lexuar spekulim pset, nga rruga? OK. [Padëgjueshme] Gjuha 1: OK. Dakord. Lexoni Definitely that-- kjo është një pset fun. Ju merrni për të rimarrë një kujtesë të fshihet card-- vërtetë emocionuese kur ajo punon. Por definitivisht, filloni të lexoni atë. Ejani të bisedoni me mua, nëse ju keni pyetje në lidhje me të. OK, kështu që unë isha duke thënë, fread lexon një numër të caktuar të bytes. Kjo është një numër arbitrar se ju jeni duke shkuar për të vendosur. Dhe pastaj fseek vetëm lëviz në një pozicion të caktuar. Pra, ndoshta ju nuk e kujdesit rreth 10 bytes ardhshme. Ju thjesht doni të kaloni përpara. Ju nuk bëni kujdes për ata. Ju dëshironi të lexoni duke filluar nga ora 11 bajt. fseek ju lejon të bëni atë. Pra, kjo ju lejon të jetë selektiv në lidhje me atë që ju jeni duke lexuar. Sepse fgetc, fgets, dhe fread lexuar nga një vend të caktuar në dosjen. Një mënyrë për të menduar për këtë është në qoftë se kjo është fotografi ynë, kur ju së pari të hapur atë, ju e keni këtë pozicion në dosjen që fillon në fillim. Kurdo që ju e quani fgetc, fgetf, apo fread, ajo do të fillojë nga ky shënues pozicion. Le të thonë se ju vetëm dëshironi të lexoni kjo copë e kujtesës mbi këtu. Ju nuk mund thjesht të telefononi. Ju duhet të kërkojnë këtu dhe të lexoni pastaj nga atje ose lexoni, merr, ose getc, në varësi të asaj që ju dëshironi. Pra, të kërkojnë vetëm ju lejon të kaloni pjesë të kujtesës. Dhe kjo është vetëm mënyrë që ju mund të kaloni gjërat pa lexuar ato në tampon tuaj. Ka që e bëjnë kuptim për të gjithë? Natyrisht, ka një Shumë here-- paralele tonë redirection prodhimit, apo të dhëna, ju keni lexuar dhe shkruar. Pra fputc vetëm shkruan a Karakteri në dosjen. fputs shkruan një linjë. Fprintf printon një dalje formatuar. Pra, nëse ju keni tabs, ose hapësirë, apo gjësend. Dhe pastaj fwrite shkruan disa Grup i bytes në një skedar. Pra, kjo është të njëjtën mënyrë fwrite dhe fread janë analoge fgets opposites--, fputs, dhe pastaj shumë fputc dhe fgetc-- i çmendur, gjëra të shpejtë. Vetëm lloji i mbajtur këtë handy-- ju do të keni kohë të ndryshme ku ndoshta ju thjesht duan nje karakter në një kohë. Ndoshta ju doni një linjë të tërë. Me pset-- tuaj fjalorit cila është në dy psets, Unë besoj se, ne ju jap një tërësi fjalor në një format tekst i cili ka çdo fjalë ndara nga një linjë. Pra, nëse ju të kërkuar për të lexuar në një fjalë në një kohë, çfarë mund të ju përdorni në qoftë se ju jeni duke lexuar dhe ata janë të gjithë të ndara në linja të reja, dhe ju vetëm duan një fjalë në një kohë? Audienca: Fgets Gjuha 1: E drejta. Fgets-- sepse kjo kthehet çdo gjë që është në një linjë. Dhe në qoftë se çdo fjalë e saj është Linja vet, ne mund të përdorim fgets. Ftohtë. Ka që e bëjnë kuptim, të gjithë? Ftohtë? Yeah, ne jemi duke shkuar për të marrë në pjesa fun me pointers shumë shpejt, kur ju marrë për të bërë disa matematikë. Dhe kjo do të jetë e madhe. E fundit step-- mbyllur dosjen tuaj. Me kaq shumë gjëra këtu, një nga paradigmat tona është në qoftë se ajo mund të kthehet null, kontrolloni for null. Nëse jeni të hapur diçka, ju do të mbyllë më mirë atë. OK, kështu që ju nuk jeni duke bërë derisa jeni bëhet nëse ju e keni mbyllur atë. Lloj si ajo nuk ka mbaruar deri lady yndyrë këndon. Kjo është si të mbyllur dosjen tuaj. Siç thotë këtu, vetëm të përsëris, gjithmonë të hapur dosjen tuaj para se ju jeni lexim ose shkrim me të. Dhe gjithmonë të mbyllë atë në qoftë se ju keni hapur atë. Të gjithë të drejtë? Ftohtë. Kështu që këtu është një shembull. Pra tiny-- Unë nuk e di nëse ju djema mund të shihni se shumë mirë. Në qoftë se vetëm ne mund të rritet shkëlqim disi. Më lejoni të vërtetë të bëjë këtë në qoftë se unë mund të. OK, ju djema nuk mund të vërtetë shohim se në të gjitha, mund të ju? OK, ne jemi duke shkuar për të bërë këtë, atëherë. [Padëgjueshme] Unë supozoj kjo është shumë më mirë për të parë. Dikush mund të shihni se ku e mia miu shkoi është pyetja? Ah, aty is-- atë që lufton! OK. Në thelb, ju djema duhet të ketë lloj një ide të asaj që kjo është duke bërë. Kjo nuk është e përsosur. Por unë do të shpjegoj se të shpenzojë më shumë kohë duke u përpjekur për të formatin atë siç duhet. Në thelb, siç e shihni këtu, ne fillim me dosjes së hapur. Dhe ne kemi disa fotografi bazës së të dhënave që ne jemi hapur që thotë se është studentët tanë. Dhe ne jemi duke shkuar për të shkruar për të. Pra, natyrisht, të kthehen null. Pra, ne duhet të kontrolloni për të null. Dhe pastaj, nëse kjo nuk është null, ne do të shkojmë përmes. Dhe, siç e shihni, ne jemi looping përmes këtu. Nuk janë studentë. Studentët eshte hash përcaktuar si tre. Dhe ajo që ne po bëjmë është që ne jemi shtypjen në dosjen, e drejtë? Pra, çfarë jemi printim në dosjen tonë? AUDIENCA: Rezultatet që janë në vektorit? Gjuha 1: Po. Rezultatet që janë në array-- saktësisht. Pra, ne jemi të hapur këtë fotografi bazës së të dhënave, të cilat Unë supozoj është një lloj nga klasat bazës së të dhënave. Dhe ne jemi vetëm shtypjes nga rezultatet e çdo nxënësi në atë dosje. Ftohtë? Të mirë. Awesome. OK. Le të kthehemi to-- AUDIENCA: Unë kam një pyetje të shpejtë. A printf nuk është në lak? Kjo është vetëm në nëse lak? Gjuha 1: Jo, ajo është në lak. Unë nuk mund të shoh miun tim shumë mirë këtu. Kështu që unë jam duke luftuar për format që duhet. Kjo parantezë duhet të jetë zhdukur. Ajo duhet të jetë këtu poshtë. Kjo është ajo që është në tuaj për lak. Atje. Tani kjo është goxha. Pra, kjo është se si ajo duhet të be-- përveç për këtë grupim e fundit që unë shkarkuar. OK. Ka që e bëjnë kuptim për të gjithë? OK. Ne jemi duke shkuar për të lëvizur në për gjë tjetër then-- të cilat, në fakt, ju do të jeni të duhet për të parë kodin. Kështu që unë jam vetëm duke shkuar për të kopje që gjatë tani. OK. Kështu që unë jam duke shkuar për të treguar ju djema këtë kod. Dhe unë dua që ju të provoni dhe figura se çfarë është menduar për të bërë. Pra, duke pasur parasysh that-- të marrë një minutë apo më shumë. Provo dhe të kuptoj se çfarë po ndodh këtu. Ndonjë ide? Ne e dimë se kemi të paktën dy Argumentet në command line, e drejtë? I të marrë një nga të cilat do të jetë se [padëgjueshme] i programit tonë është dhe pastaj diçka tjetër. Sepse në qoftë se [padëgjueshme] është më pak se dy, ne bërtas me ta. E drejtë? Dhe nga përdorimi, ajo duket si ajo do të jetë një lloj file. Ne të gjithë bien dakord për këtë? Deri tani, çfarë është duke bërë lak? Çfarë është ajo po kalon? AUDIENCA: Të gjitha dosjet. Gjuha 1: Pikërisht. Ajo që po ndodh nëpër të gjitha fotografi që ne kemi të dhëna aty. Pra, për çdo fotografi, është e hapjen e një varg atje. Është hapur këtë dosje. E drejtë? Dhe kjo është lexuar prej saj. Sigurisht, duke kontrolluar nëse është e pavlefshëm. Dhe pastaj është e shtypje. Nëse kjo është null, kjo është vetëm duke na thënë se kjo nuk është një fotografi që ekziston. Sepse mos harroni, me lexoni fotografi ynë ka të ekzistojë. E drejtë? Me shkruaj dhe append, ju mund të merrni larg me të. Por me të lexuar, fotografi ynë ka të ekzistojë. Dhe pastaj, nëse ajo nuk ekziston, çfarë po bëjmë ne këtu? Le të vetëm të fillojë këtu. Çfarë është kjo do-- këtë karakter të parë. Çfarë do të bëni? Ai merr një karakter, e drejtë? Pra, çfarë është kjo e bën? Është marrë karakterin e parë. Çdokush e di EOF? AUDIENCA: Fundi i dosjes? Gjuha 1: Fundi i file-- saktësisht. Pra, ajo do të shkojë nëpër tërë fotografi, e drejtë? Dhe pastaj do të të rinovuar nga duke marrë çdo karakter të mëvonshëm. E drejtë? Dhe çfarë është ajo bën? AUDIENCA: Vendosja se in-- Gjuha 1: printime Putchar në screensaver tuaj. [Padëgjueshme] karakteri. Dhe atëherë kur ajo [padëgjueshme] kjo do të mbyllë dosjen. AUDIENCA: A nuk keni nevojë për një [? tjetër? ?] Gjuha 1: Jo domosdoshmërisht. Unë do të thotë, kjo është lloj i nënkuptuar në këtë. Për shkak se kjo kthehet, edhe pse, për sa kohë pasi që kjo nuk ka kapur këtë, ju jeni të mirë. Unë do të thotë se është ndoshta mirë praktikë për të bërë një tjetër. Por një tjetër nuk është gjithmonë është e nevojshme sidomos në qoftë se ju keni diçka si një kthim, i cili do të thotë se në këtë rast, nëse ajo kap ajo, programi juaj do të përfundojë dhe ai kurrë nuk do të merrni për këtë. Kjo është më shumë për rastin kur ju jeni jo domosdoshmërisht kthehen diçka. Sepse në qoftë se kjo nuk ishte kthehen asgjë, kjo do të thotë se në qoftë se kjo ishte e vërtetë, pjesa tjetër e kjo ende do të kandidojë. Dhe në këtë rast, ju do të duan një të rreme. Në qoftë se kjo është kthehen, dhe Përfundimi i programit tuaj, një tjetër nuk është e nevojshme të gjithë kohë, në varësi të kontekstit. Jakobi, nuk keni një pyetje? AUDIENCA: Po. Pra ka fgetc marrë karakterin e ardhshëm? Si ka rritur karakterin? Gjuha 1: Po. Pra fgetc merr karakter tjetër. Ju mund të mendoni për atë si C ++ në një kuptim. Audienca: Pra, çfarë ishte EOF? Gjuha 1: EOF është fundi i dosjes. Kjo është vetëm një tregues që ju lejon të dini se ju jeni në fund të dosjes tuaj. Pra, kjo do të shtypura në standardin tuaj jashtë. Dhe pastaj do të mbyllen fotografi kur është bërë. Dhe pastaj le të shkojnë në fotografinë pasardhësenext, e drejtë? Pra në përgjithësi, çfarë bën ky program të bëjë? [Padëgjueshme] Gjuha 1: Po. Ajo thjesht kopje nga çdo gjë atje. Pra, nëse ju djema keni përdorur ndonjëherë CAT dhe pastaj emrin e disa file-- Unë nuk e di nëse ndonjë prej jush kanë bërë ndonjëherë që në terminalin tuaj. Por në qoftë se ju përdorni ndonjëherë command CAT-- C-A-T-- dhe pastaj çfarëdo fotografi keni there-- atë printon atë në terminalin tuaj, e cila mund të jetë super i dobishëm për disa gjëra. Unë e përdorin atë shumë. Ka që e bëjnë kuptim për të gjithë? Ftohtë? OK kështu që detyra juaj now-- ose nga veten ose me njerëzit rreth you-- është që të shkruani vetëm një program të thjeshtë që vetëm do të shkruaj "Përshëndetje, botë!" nga një skedar. [Padëgjueshme] [Padëgjueshme] Gjuha 1: unë kam qenë si, bëri Bëj që javën e shkuar keq? Unë nuk mendoj se ishte aq keq. Unë jam i kënaqur që ju jeni të gjithë këtu. Me të vërtetë më bën të lumtur. Unë jam një vajzë e kënaqësitë e thjeshta. Unë ashtu si kur seksioni im merr pjesë. Kështu që unë jam vetëm duke u nisur për këtë ju djema kështu që ne mund kodin bashku. Mua nuk më pëlqen vënë dikush në spot nëse nuk ju duan të jenë. AUDIENCA: Për quiz, të bëjë ne kemi për të shkruar një program? Gjuha 1: Ju mund të kërkohet për të shkruar programe të thjeshta me dorë. Yup. AUDIENCA: quiz është javën e ardhshme, e drejtë? Gjuha 1: quiz është të mërkurën e ardhshme. Kjo do të thotë se është një e bukur [? CSE?] nota partisë më pas, e cila do të thotë që ju do të merrni rezultatet tuaja mbrapa se night-- në atë kohë? Kush e di? Por kjo do të jetë atë natë. Dakord. Si duam të fillojë këtë? Unë do të ju jap një hint-- fillon me këtë. AUDIENCA: Ju keni për të hapur një skedë. Gjuha 1: Po. Pra, çfarë ju doni të telefononi këtë? A ju vetëm doni të telefononi atë "file"? Le të bëjnë atë të lehtë. Pra, çfarë është fopen-- tonë Testi prodhimit do të jetë? E quajnë atë "Hello". Dhe çfarë është mënyra jonë? Çfarë po bëjmë për këtë skedar? AUDIENCA: Lexoni. Shkrimi. Gjuha 1: Ne jemi me shkrim për të. Bukuroshe. OK, kështu që ne kemi këtë fotografi tani. Çfarë duhet të bëjmë? AUDIENCA: Kontrolloni nëse është e pavlefshëm. Gjuha 1: Kontrolloni nëse është e null-- saktësisht. Kjo është ajo që unë doja të dëgjoj. Kjo duhet të jetë automatike, veçanërisht pretty much nga kjo pikë e tutje. Nëse ju filloni segfaulting, ju ndoshta nuk e shikoni for null diku. Nëntë herë nga dhjetë, kjo është do të jetë gabim tuaj. Pra, nëse ju mund të merrni vetëm në zakon, gjithmonë kontrolloni nëse është e pavlefshëm, jeta juaj do të jenë të e bukur dhe easy-- apo më të lehtë. Pra, kontrolloni për të parë nëse ajo është e pavlefshme. Pra, në qoftë se nuk është i pavlefshëm, i cili është ajo që është e barabartë me zhurmë means-- nuk null-- është e vlefshme. Çfarë duam të bëjmë? Ne vetëm duam të shtypura në këtë dosje, e drejtë? Pra, çfarë do të shkojmë për të përdorur? AUDIENCA: Fprintf Gjuha 1: Fprintf-- bukur. Dhe fprintf merr dy arguments-- aty ku ajo që po ndodh dhe ajo që ne duam të shtypura. Pra, çfarë është e para? Ku është ajo shkon? AUDIENCA: dokumentit. Gjuha 1: Ajo do të paraqesë. Dhe çfarë duam të shtypura? "Hello, bota!" Dakord. Ne kemi një thing-- fundit një paradigmë e madhe këtu. AUDIENCA: Mbylle. Gjuha 1: Mbylle. Nuk ju shkoni. AUDIENCA: A ndodh kjo nëse skedari është i pavlefshëm? Gjuha 1: Jo, kjo është në qoftë se nuk është i pavlefshëm. AUDIENCA: Oh, në qoftë se është not-- OK. Për fopen dhe pastaj dy argumente që shkojnë brenda, çfarë do të thotë përsëri argumenti i parë? Gjuha 1: Argumenti është ashtu si emrin e file se ju doni të shkoni në. Pra, pas kësaj shkon, ju do të kanë disa fotografi të quajtur "hello" se kishte "Hello, World", brenda saj. Kjo është e gjitha. Vetëm emri. AUDIENCA: Dhe që nga ajo e shkruar, File nuk duhet të ekzistojë tashmë. Është se ajo që keni thënë? Gjuha 1: E drejta. Pikërisht. Nëse "Hello", si një fotografi nuk ekziston ende, është e do të krijojë një skedar të quajtur Hello "dhe shkruaj për atë për ju. AUDIENCA: Kur ju jeni duke thënë program për shkroi file, pse ju shkruani "file" në vend të emri i file dhe fprintf-- Gjuha 1: Sepse në këtë rast, ne kemi që FILE-- të madhe të gjithë në yll caps--, file. Pra, kjo është një tregues për fotografi që ju jeni duke folur rreth. Kjo është mënyra se si ne vetëm referohet atij. Pra, në këtë rast, ju mund të mendoj për Aha file--, ne mund të përdorim this-- fotografi këtu i referohet hapjes së "Hello" dhe lënë atë të shkruar. AUDIENCA: A mund të vënë një "Hello" në vend të kësaj [? i thjesht?] f fotografi? Gjuha 1: Jo, sepse "Hello" duhet të jetë e hapur dhe e shkrueshme. Paraqesë këtu është si një destinimit që thotë OK, ne kanë këtë hello-- file-- se ne jemi duke kërkuar në. Ajo ka qenë e hapur. Dhe ne jemi duke shkuar për të shkruar për të. Në qoftë se ju përdorni vetëm "Hello", që është encapsulated në të. Pra, kjo do të trullos. Unë do të thotë, ju mund të ketë quajtur atë. Ju mund të keni bërë fotografi, star, "Hello", është e barabartë me atë. Por pika e tërë është se ju nevojë për një tregues fotografi yll në mënyrë të jenë në gjendje të përdorin këto funksione. AUDIENCA: Mund të bëni fotografi, yll, fotografi, "Hello" ose ju keni për të vënë paraqesë yll, fotografi nga ai? Gjuha 1: Ju mund të bëjë fotografi, yll, "Hello". Ju mund ta ndryshoni këtë në çfarëdo emri që ju dëshironi. Kjo është krejtësisht arbitrare se çfarë emri është. Ju mund të emrit atë gjë. Emri atë fluturues spageti, në qoftë se ju të kërkuar. AUDIENCA: Çfarë është "w" në thonjëza për të? Gjuha 1: "w" është vetëm mënyra. Pra, ne jemi me shkrim tek kjo skedë. Gjithkush e mirë? Clear? Po. Audienca: Pra, kur ai shkruan këtë paraqesë, ku nuk kemi pastaj të gjeni se fotografi? Gjuha 1: Ajo do të jetë në të njëjtin Lista se ju jeni aktualisht në. Nëse ju jeni në pset tre dhe ju drejtuar këtë, brenda pset tuaj tre dosje do të jetë kjo skedë të quajtur "Hello". Ftohtë? Gjithkush e mirë? Unë të ndjehen si ju jeni të gjithë marrë atë, e cila është e madhe. OK. Pra, përsëri në show-- time rrëshqitje I love kur gjërat të punojnë. OK, pointers-- A ju djema të ngazëllyer? Pointers janë të mëdha. Ata marrin pak të përfundojë kokën tuaj rreth. Ky është viti im i dytë mësimdhënies pointers. Dhe unë mendoj se unë në fund mori atë. Pra, nëse ju luftojnë, kjo është OK. Siç kam thënë më parë, duke tërhequr fotot ndihmon shumë me gjëra në CS, sa më shumë që unë mendoj se njerëzit kanë tendencë për të menduar oh, ne jemi në një kompjuter. Ne duhet vetëm kodin. Vizatim foto No-- me të vërtetë do të ju ndihmojë. Dhe unë me të vërtetë ju inkurajojmë që të trokitje e lehtë në anën tuaj kindergartner dhe të sjellë nga crayons ose shënuesit dhe barazim. Sepse kjo do të ju ndihmojë. Dhe në qoftë se ju shihni mua në orarit të punës, I do të mbante rreth kollonat e letrës me lapsa vizatim gjërat jashtë. Pra, sidomos me pointers-- barazim fotografi. Dhe unë jam i sigurt se ne jemi të vërtetë do të të jetë tërhequr disa fotografi këtu. Pra, ju djema të gjithë e mori për të parë Binky, kjo gjë ftohtë claymation. Dhe ne mendojmë se është me të vërtetë qesharake, kur ai shpërthen në një bandë e copa. Kjo është një lehtësim komik për klasë. C [padëgjueshme] kjo aftësi e madhe të jetë në gjendje për të kontrolluar kujtesën. Dhe kjo është një nga gjërat që me të vërtetë e bën atë një gjuhë të tillë të fuqishme. Por me vjen fuqia e madhe përgjegjësi e madhe. Dhe gjëra të çmendur mund të ndodhë në qoftë se ju nuk jeni të kujdesshëm. Pra, kur ju jeni duke përdorur pointers, ju doni të bëni Sigurohuni që ju të vërtetë kuptojnë pikërisht ajo që ju jeni duke bërë. Shpresojmë tjetër pak koha do t'ju ndihmojë të vërtetë kuptojnë pointers, se si të përdorin ato, dhe si për të manipuluar ato. Kështu memory-- Unë jam i sigurt që ne kemi parë këtë diagram parë. Pra, kjo është vetëm një diagram i thjeshtë i se si gjërat mund të ruhen kujtesës. Pra, ju në thelb kanë këto vargjeve të mëdha të blloqeve një byte është ajo që ne kemi here-- vogël increments nga një çdo herë. Kjo është magji [padëgjueshme] kështu bllokon tetë-bit. Dhe çdo bllok është i lidhur me disa adresa heksadecimal. Pra, nëse ju shihni ndonjëherë 0x, kjo është vetëm notating se kjo është një adresë heksadecimal. Ju mund të marrë kjo do të thotë disa adresa në kujtesë. Ne jemi duke folur në lidhje me adresat e memories sa herë që ju shihni hexadecimal. Ne kemi ints janë variabla, gjithandej janë variabla që dyqan. Pra ints ints dyqan. Dyqan gjithandej gjithandej. Pra, ne gjithashtu kemi pointers se dyqan kujtesës adresat. Kjo është një lloj i hartës. Pointers janë ekskluzivisht për adresat e kujtesës. Pra, kjo është si llojin tuaj atje. Pajisja juaj është 32-bit, që do të thotë që adresa juaj e kujtesës është katër bytes. Kështu që çdo tregues që ju keni po ashtu do të jetë katër bytes. Ose tjetër nëse është e katër bytes, memorie është katër bytes. Dyqan kujtesës pointers. Prandaj, ata janë katër bytes. Cool-- duan vetëm për të përforcuar atë. Ju duhet të merrni këtë komik tani. Unë nuk e di se sa prej jush janë tifozët xkcd, por unë dua xkcd. Kjo është e madhe. Dakord. Pra, duke krijuar pointers-- siç kam thënë, se është pretty much ashtu si çdo gjë tjetër. Ju keni një lloj. Ju keni një emër. E drejtë? Kjo është ajo që ne kemi atje. [? Hex?] Yll do të thotë se është një tregues, dhe pastaj çdo gjë që ju doni të telefononi atë. Pra, lloji paraqet atë që ju mund të ruajë. Të gjithë të drejtë? Në të njëjtën mënyrë që në qoftë se ne bëjmë ints, ne e dimë se ne jemi ruajtjen e një int atje. Me një akrep, atë mban një adresë e memories. Por çfarë do të thotë është that-- këtu është ku një vizatim do të vijë në volitshëm. Pra, në këtë rast, ne kemi disa value-- le të themi katër. Katër është në adresën e një. OK? Kjo e para here do të thotë se kjo është një 2x akrep. E drejtë? Kjo është një akrep x. x mund të jetë diçka, çfarëdo. Çfarëdo x is-- thonë se x është katër. Ajo do të ruajtur Adresa e kujtesës këtu. Pra int, yll, x-- kjo është disa slot tjetër në memory-- kush e di se çfarë është kjo. Por kjo do të ruajtur një adresë këtu. Pra, kjo do të jetë like-- në këtë rast, Çfarëdo, është ruajtur në 0x1-- çdo gjë që është ruajtur në adresën që pointer tonë mban, duhet të përputhen me çfarë ne kemi përcaktuar. Pra, në 0x1, në këtë rast, kjo është e x. Kjo vetëm mund të jetë kurrë një int ndërkohë që ne jemi duke përdorur këtë. Në mënyrë të ngjashme, në qoftë se ne kemi tjetër 1y, çfarëdo adresa është ruajtur me një y ka të jetë një e njëjta gjë char-- me z. Në të njëjtën mënyrë, kur ju të përpiqet dhe të bëjë intx barabartë 0.4, ajo do të çirrem në ju dhe do të jetë si nuk ju tha se ju të kërkuar një int. Kjo është menduar të jetë një int. Stop duke u përpjekur për ta bërë atë një noton. Pra, le gjërat të jetë ajo që ata duan të jenë. Le gjëra të jetë vetë. Pra, gjëja e madhe është vetëm çfarëdo lloj pointer kjo është, kjo është vetëm gjë që ju mund të ruajë aty. OK? Me praktikë, si me javën e kaluar, çdo gjë Duket me të vërtetë lloji i abstrakt. Ne jemi duke shkuar për të bërë disa praktikë. Ajo duhet të bëjë më shumë kuptim. Pra, referenca dhe dereferencing-- është të vërtetë e rëndësishme për të marrë këto të drejtë. Unë ende kanë për të rifreskoni çdo tani dhe pastaj. Dhe unë jam si kurthe, të cilat e bëjnë dua? Pra, simbol të vërtetë do të japë ju referencë ose adresa e. Pra, ajo kthen adresë në memorie e cila variabël është ruajtur. Pra, kjo do të vërtetë të kthehet tek ju një hexadecimal, ndërsa dereferencing atë është në të vërtetë do të ju jap Të dhënat që ruhen atje. OK? Pra, ne do të shikojmë në një shembull të vërtetë të shpejtë, ose në të vërtetë up ardhshëm. OK. Pra, ne duhet të mendojmë të vërtetë kujdes në lidhje me këtë. Pra, këtu ne kemi një numër i plotë x. Unë jam duke shkuar për të përpiqen dhe të nxjerrë këtë më të mirë të aftësive të mia. Pra, ne do të kemi këtë slot x. Dhe kjo është ruajtjen pesë. Adresa e saj është 0x4. Ftohtë? Të gjithë të mirë. Deri tani ne kemi këtë tregues. Ajo ishte këtu. Dhe simbol na jep adresën e diçkaje. Pra, në këtë rast, kjo është adresa e x. Cila është adresa e x? 04-- dhe ky tregues është në 0x08. Ftohtë? Kështu që ju mund të mendoni në lidhje me këtë akrep, 04, vetëm pikë këtu. Dhe ata janë quajtur pointers sepse si ne të merrni më shumë në këtë, ju jeni duke shkuar për të parë duke treguar të gjërave. Dhe një bllok duke treguar për një tjetër Bllok do të bëjë shumë më tepër kuptim. Pra, këtu janë dy. Dhe pastaj ne kemi disa kopje, e cila është 0x0c what--. Dhe kjo do të dereference pointer tonë. Pra, çfarë është e thënë se është e OK, këtu është akrep tonë. Vlera dyqane është 0x04, dhe çfarë ajo është duke thënë se është të shkoni në këtë adresë dhe më tregoni se çfarë është në të. Pra, kjo është në mënyrë efektive çfarë është duke bërë këtë shigjetë. Ju mund të mendoj për këtë si yll tuaj. Pra OK, kur bëjmë yll, kjo do të thotë të ndjekë. Shkoni në këtë adresë. Dhe kjo është në thelb vetëm pas kjo shigjetë me këtë copë e kujtesës. Dhe na japë atë që është në të, e cila është 5. Kjo është arsyeja pse kopje jonë është e barabartë me 5. Ka që e bëjnë kuptim? A ka dikush nevojë për mua për të shkuar nëpërmjet që përsëri, ose më ngadalë? Ju dëshironi që të shkoj me atë edhe një herë? OK. Ne jemi duke shkuar për rishikimin atë përsëri. Kur ne fillim, ne të gjithë pajtohemi, ne kemi disa copë e kujtesës që është një variabël x se ne kemi vendosur barabartë me 5. Ne nuk e kontrollojmë ku është në kujtesën. Pra, kjo është vetëm spot caktuar në mënyrë arbitrare. Mirë atje? OK. Pastaj ne të nisja një tregues për një int. Kjo është arsyeja pse ajo është e lejuar për të vënë në dukje x sepse ne kemi një int në këtu. Ne kemi një copë të memorie sepse ky akrep është një variabël ashtu si çdo gjë tjetër. Është caktuar në mënyrë arbitrare disa hapësirë ​​në memorie. Dhe ajo që ruan është adresa e x. Simbol do të thotë adresën e x. Pra, çfarë është adresa e x? AUDIENCA: Është zero-- Gjuha 1: 0x04. Pra then-- fundit. Ne kemi disa copy-- përsëri vetëm një variabël. Pra, le të caktojë ndonjë vend arbitrar. Dhe ne dereference pointer tonë. Ylli thotë të shkojnë në Adresa ruhet në treguesin tim. Më thuaj çfarë është atje. Pra, adresa ruajtur në treguesin tonë është 0x04. Pra, ne do të shkojmë në atë adresë. Është treguar në atë adresë. Çfarë është brenda këtij blloku kujtesës? Kjo është një pesë. Pra, kjo është ajo që ne të caktojë kopje tonë. Gjithkush e mirë? Ftohtë. Fotot Again--. Pra, ndjekja e vlerave here-- Jam do të le ju djema mendoni për këtë. Ne mund të tërheqë një foto. Por unë dua që ju të provoni dhe arsyeja me këtë në tuaj për një minutë. Që ata nuk kanë dhënë na një adresë shembull, Unë jam vetëm duke shkuar për të bërë x-- ampersand e cila duhet të ndihmojë të përzënë atë në shtëpi. Simbol do të thotë adresën. Pra, në një të parë, të gjithë shkoni me rreshtin e parë. Disa x set të five-- disa slot rastit në kujtesën. Akrep int yll është i barabartë në adresën e x, e drejtë? Int yll akrep krijon këtë bllok, e quan atë treguesin, dhe cakton atë në adresën e x. Unë jam e tmerrshme në ampersands. Tani ajo që ne po bëjmë është që ne themi OK, dereference pointer tonë. Pra, ne do të shkojmë në rregull, atë që në treguesin tonë? Është simbol x. Shko tek simbol x dhe reassign atë. Deri tani, simbol x do të jetë 35. Pra, në thelb, kur ju jeni dereferencing, ju shkoni OK. Ju do të jeni të tërhequr fotot si kjo. Ju do të jeni të tërhequr shigjetat tuaja mbi ku është. Kështu që të shkojnë në këtë slot në kujtesën dhe as më jepni që vlera e mbrapa, ose të ndryshojë atë. Në këtë rast, sepse ne jemi në këtë vlera, ne jemi caktimin ajo të jetë 35. Ndërsa në të fundit një, nëse vëreni, ne u caktimin çfarë ishte këtu diçka tjetër. Pra, ata e kanë këtë tryezë mbresëlënëse. Kjo nuk është edhe aq keq. Ju djema të punojnë në të. Unë jam duke shkuar për të nxjerrë atë në bord. Ne jemi duke shkuar për të mbushur atë së bashku, OK? Pra, kap një letër, kapje një partner, të fillojë të punojë. Unë jam duke shkuar për të marrë një pjesë më e madhe e shkumës. Për shkak se ajo do të jetë shumë. OK. PROFESORI: OK. Le të fillojmë me rreshtin e parë. Ne do të fillojë atje, atëherë ju djema ndoshta mund të punojnë me disa më shumë. OK. a është e barabartë herë b c kështu që çfarë është një? Kjo nuk është një pyetje mashtrim, unë premtoj. STUDENT: 4 herë 5. PROFESORI: 4 herë 5. 20. Pra, çfarë është b? STUDENT: 4. PROFESORI: Dhe c? STUDENT: 5. PROFESORI: 5. Dhe atëherë kjo vetëm do të të një simbol ampersand, b, simbol c, e drejtë? Jo keq. Është mjaft e thjeshtë. OK. Pra, në një tjetër. A është e barabartë me një herë c, në rast dikush ishte i panjohur me këtë. Është e të gjithë të njohur me herë të barabartë? OK, e gjithë kjo means-- kjo është stenografi për një është e barabartë me një herë c. Ju gjithashtu mund të bëjë atë me ndarjen, me tepër, me zbritje. Ju mund të bëni një të barabartëve, ose një plus barabartë c do të thotë një e barabartë me një c plus, minus barabartë c do të jetë një e barabartë me një minus c. Është vetëm sheqeri sintaktik. Pra, në këtë rast, një është e barabartë me një herë c do të na japë çfarë? Përsëri, nuk është një pyetje mashtrim. STUDENT: 100. PROFESORI: 100. Ka ndryshuar ndonjë gjë tjetër? Jo. Ndoshta unë do të marrë fund mirë në ampersands mia. STUDENT: OK, sorry, se si e keni marrë 100? PROFESORI: OK. Kështu a është e barabartë tek a herë c, kështu që një herë c. STUDENT: Oh, ju jeni duke përdorur a për previous-- PROFESORI: Po. Pra, këto janë vlerat tona më të fundit. Këto janë ato që ju duhet të jenë të duke përdorur si ne shkojmë poshtë, OK. Pra, b është e vetmja gjë që ndryshon, e drejtë? Pra, le të plotësoni në çdo gjë tjetër. B. Çfarë b do të jetë? Të jesh apo të mos jesh. Pra, çfarë është kjo e bën? Cili është ylli pa bërë? STUDENT: Kodi për vendndodhjen e pa. STUDENT: Jo, jo mjaft. Pra, kjo është një referencë d. STUDENT: Pra, b është vlera duar e pa. PROFESORI: Yeah, kështu që pa është adresa e një, e drejtë? Pra, kjo është thënë shkoni ku a është ruhen dhe t'i jepte atë vlerë. Pra, çfarë është b? STUDENT: 100. PROFESORI: 100. Perfect. OK, kështu pc është ajo që po ndryshon. Çdo gjë tjetër mbetet e njëjtë. Çfarë po pc do të jetë? Detyrë e thjeshtë. Pc është e barabartë me pa, dhe çfarë është e pa? STUDENT: simbol a. PROFESORI: Perfect. Tani ne jemi duke marrë interesante. OK, le të thyejnë këtë poshtë. Së pari, çfarë është herë B C, sepse kjo është pjesa më e lehtë e këtij njërit, e drejtë? Herë B c is-- STUDENT: 500. PROFESORI: Yeah, kështu që çfarë është kjo bën, Nëse kjo është yll BP, çfarë është ndryshuar? STUDENTORE: Çfarë është në the-- PROFESORI: Çfarë është në b? STUDENTORE: Çfarë është në hapësirë se BP është duke treguar. PROFESORI: Dhe BP është vënë to-- STUDENT: B. PROFESORI: B. Pra e vetmja gjë ndryshon është b, e drejtë. Herë Pra b c, 500. Pra, kjo është ajo që ndryshon tani. Ftohtë. Bukuroshe. Ju djema janë duke bërë të madh. Të gjitha të drejtat, duke thyer këtë një poshtë. C po ndryshon, e drejtë? Pra, ne mund të plotësoni në çdo gjë tjetër. Le të shohim. OK. Ne e dimë se c do të jetë produkt i dy numrave, e drejtë? Çfarë dy numra, pse? STUDENTORE: A dhe c? PROFESORI: Pra a është e drejtë për një të parë. Pra, ne jemi d referenca p e një, e drejtë? P e një pikë në një, kështu që ne e dimë se kjo do të jetë 100 herë atë? Times çfarë bën pikë për pc? Pikët për një. Pra 100 herë 100 është 10,000. A kjo ka kuptim? Ftohtë. Shtrirje në shtëpi, djema, rreshtin e fundit. OK. Çfarë është ndryshuar këtu? STUDENT: A. PROFESORI: A. Perfect, kështu çdo gjë tjetër mund të qëndrojnë të njëjta. OK. Dhe çfarë është një? Pra, kjo është një herë atë? Kjo është yll BP. Pra yll BP thotë këtu BP, pika e BP për të b. STUDENT: 500. PROFESORI: 500. Pra, ne kemi 500 herë 100. Kjo është 50.000. Uf! Shikoni në atë. STUDENT: Pse kemi dhe c për last-- PROFESORI: Na vjen keq. STUDENT: Oh, OK. PROFESORI: My keqe. Shumë e shkrimit. Gjithkush e mirë? Jo shumë e keqe, e drejtë? Vetëm merr pak ndërsa për të punuar me. Nëse ju thyejnë atë poshtë, të kuptojnë se çfarë çdo pjesë i referohet to-- si me çdo gjë kjo është, yes-- thyejnë atë poshtë për pak Problemet dhe pastaj recombine, dhe ju mund të bëni disa gjëra mbresëlënëse. Nuk janë përgjigjet, por ne e bëmë atë. Aritmetikë Pointer. Ah. Duart e mia janë të gjitha prej shkumësi. Pra, duke shtuar apo zbritur int rregullon treguesin sipas madhësisë së llojit të tregues. Mos harroni se çdo lloj ka një madhësi të ndryshme? Pra, si një të dyfishtë, ose një kohë të gjatë të gjatë është tetë dhe int është katër, por char është një. Pra, çfarë ju doni të bëni is-- një gjë për të kujtuar është vetëm se sa tuaj së Vlera akrep në fakt ndryshon do të varet nga lloji i pointer është. Gjithkush e mirë me këtë? Mund ta zhdukur atë? Ne jemi të mirë? Awesome. Pra, nëse kemi ndonjë akrep that-- kjo do të be-- unë jam do ta bëjnë atë një akrep int. Ajo ruan këtë. Nëse ju do të thoni akrep plus një, atë që do të bëjë po ajo do të rinovuar ajo me madhësinë e një int sepse kjo është lloji i pointer është. Me C, çdo gjë është e shumë strikte dhe të rregulluar. Int tregues do të rinovuar nga sasia e hapësirës një int do të marrë. Një int është katër bytes. Pra, çfarë kjo do të kthehet në? Ju jeni vetëm duke shtuar katër onto këtë. Tani treguesin tuaj do be-- OK. Pra, në qoftë se ajo ishte një char dhe ne e bëmë akrep plus një, çfarë do të jetë tani? Në qoftë se kjo started-- pretenduar ne started-- tani është 0x08. Le tani thonë se kjo ishte një char pointer, dhe kemi shtuar një. Çfarë do të ndryshojë për të? Sa bytes është një char? AUDIENCA: One. Gjuha 1: One. Audienca: Pra 0x09. Gjuha 1: Pra, kjo do të jetë e nëntë. Pra, vetëm diçka për të kujtuar. Vetëm kur ju të shtoni një të tillë, nuk është e duke shtuar një nëse kjo është një char. Është duke shtuar se sa bytes llojin që është, cila është arsyeja pse ne kemi ky ekuacion deri këtu. Pra, kjo është herë int madhësia i llojit të tregues. Pra, ne kemi shembullin këtu. y ishte caktuar në atë të vlerës, 0x4, kur ne e bëmë y plus barabartë me një të tillë. Çfarë është në të, çfarë është në x, nuk ndryshon. Çfarë bën ndryshim është ajo që është në y. Adresa ruhet në y përditësuar nga katër sepse ka katër bytes në një int dhe kjo është një akrep int. Dakord. Deri tani ne kemi një tjetër stërvitje. Pra, pyetja është se çfarë do të shtypura. Ndonjë ide? AUDIENCA: Numri i Karaktere në mace të lumtur? Gjuha 1: Pikërisht. Pra, si me vargun tuaj. A të gjithë të merrni atë? A duam të ecim nëpër të? Po, OK. Pra, ajo që ne kemi here-- I si kjo shumë më shumë. Unë nuk duhet të [Padëgjueshme] qesharake. Pra, ne kemi vargun tonë këtu, mace të lumtur. Bukuroshe. Ne kemi disa counter se ne jemi mbajtja e. Pra, ne kemi disa char * akrep që sapo është vendosur barabartë me rr. Çfarë kjo është duke bërë është ajo e caktimin e një akrep në fillim të vargut tuaj. Sepse unë jam i sigurt, si ajo u përmend në leksion, ne ju kemi dhënë djema këtë Lloji i të dhënave të quajtur string. Por me të vërtetë vargjet janë vetëm një koleksion of-- si char *. Kjo është një tregues për një bandë e karaktereve që janë të afërt me kujtesën. Pra, kjo vetëm e bën atë të barabartë tek ndonjë varg është të identifikuar nga ku karakteri i saj i parë është. Pra, kjo është vetëm vendosjen e disa pika barabartë me fillim të vargut. Gjithkush mirë atje? Ftohtë. Pra, kjo është dereferencing akrep tonë. Pra, kjo është në të vërtetë do të na japin disa vlera këtu, në vargun tonë që ne jemi duke folur rreth. Dhe ne jemi duke thënë aq kohë sa kjo nuk është terminator null. Pra, do të mbajë deri sa ju të merrni në fund të vargut. Update treguesin tuaj nga një. Pra r, ai në fakt do update nga një çdo kohë, sepse kjo është një char, * char. Pra, kjo do të shkojnë përmes. Kjo do të rinovuar. Pra, herë të parë këtë shkon, ajo do të jetë këtu në h. Kjo do të rinovuar. Ajo do të jetë një një. Ajo do të jetë një p, y, dhe kështu me radhë e kështu me radhë. Ne do update counter. Kur ai arrin në fund, atë thjesht shtyp se sa larg është marrë. Po. AUDIENCA: Pra Ajo llogaritet hapësirë ​​si një, e drejtë? OK. Gjuha 1: Mendoni kështu. A është kjo një question-- Audienca: [padëgjueshme]. Gjuha 1: Nuk shqetësohet. Këtë e bëj atë. Në rregull, kështu që një gjë që unë kuptojnë është se me një grup, ju gjithashtu mund të trajtojnë atë si një akrep sepse vargjeve janë vetëm Spotet e vazhdueshme e kujtesës. Kështu që ju mund të trajtojë atë në të njëjtën mënyrë. Ju mund të manipulojnë ato me pointers, too. Pra, në vend të bërë, në këtë rast, gjëja analoge do të jetë array 0 është e barabartë me 1. Por në të njëjtën mënyrë që a string është përcaktuar nga fillimi i ku karakteri i saj i parë është, një koleksion është përcaktuar nga ku elementi i tij i parë është. Sepse ne e dimë, ne jemi garantuar, se këto do të jetë e vazhdueshme blloqet e kujtesës. Kjo është ajo që na lejon të bëjmë këtë. Ne e dimë se ata janë të vazhdueshme blloqet e kujtesës. Pra, në këtë rast, duke dereferencing vetëm array, që na tregon, OK, shko në fillimin e array juaj, e cila është këtu. Kështu që ju mund të vendosni të barabartë me një. Dhe në këtë rast, çfarëdo array tuaj lloj është, kur ju update it nga një, kjo është vetëm si përditësimin ajo me indeksin e ardhshëm. Ju mund ta bëjë këtë për shkak se ju e di se çfarë është në rrjet tuaj. Pra, ai e di se sa të Përditëso treguesin tuaj nga, çfarë adresë për të rinovuar atë në mënyrë që ju të jeni në slot e ardhshëm. Pra, kjo është vetëm një mënyrë të ndryshme i shkruar array 0 barabartë 1, array 1 e barabartë me 2, array kllapa 2 është e barabartë me 3. Kjo është vetëm një tjetër mënyrë për të menduar për këtë. Për shkak se ata janë të vazhdueshme blloqe në memorie, ju mund të referoheni atyre as nga grup notation-- të cilën unë personalisht gjeni easier-- por ndoshta ju keni nevojë për të manipuluar atë rreptësisht nga adresat e kujtesës. Dhe kjo është mënyra që ju do të bëni atë. Lloji i më shumë si një Gjëja e ftohtë që ju mund të bëni kundrejt Ndoshta jo diçka që ju jeni në fakt do të zbatojë. Unë e përdorin atë në 61. Ju djema ndoshta nuk kanë nevojë për për t'u shqetësuar në lidhje me atë shumë. Por nëse ju jeni të interesuar, marrë 61 vitin e ardhshëm. Ne jemi në djemtë shtrirje në shtëpi. Unë e di, është e gjatë. Dynamic Memory Allocation-- kështu që ne e dimë se një e gjëra kur ne biseduam gjatë Pjesa jonë e parë së bashku, kemi shikuar në një shkëmbim Funksioni ku ishte jashtë fushëveprimit të funksionit tonë kryesor. Dhe ne kemi qenë duke kaluar në këto vlera që ishin efektivisht kopje. Dhe një herë swap përfunduar ekzekutimin, ai vetëm la një pirg. Mos harroni, ne kemi një rafte kornizë për shkëmbim. Ai lë dhe ata Vlerat lënë me të. Dhe ata ishin zhdukur. Ne nuk mund të bëjë asgjë me ta dhe ne ishim të pikëlluar sepse ne nuk mund të bie në ujdi vlerat tona. Por me C, siç thashë, ju kanë një shumë e pushtetit mbi kujtesës. Pra, çfarë mund të bëni ju është e mund të ndajë gjërat në grumbull këtu se do të qëndrojnë aty deri në ju tregoni atyre ndryshe. Ata janë si fëmijë të mirë. Ata qëndrojnë aty. Ata nuk largohen. Ata do të qëndrojnë aty deri sa të jeni si, OK, ju mund të shkoni larg. Ndërsa gjërat në rafte, who-- ata janë si fëmijët e keq. Ata vetëm do të kandidojë larg kur të doni të jetë atje dhe pastaj ata janë zhdukur. Ju nuk mund të merrni ato mbrapa. Pra grumbull is-- ne jemi duke shkuar për të flasim për malloc dhe të lirë, e cila Unë jam i sigurt se ju djema dëgjuar për në leksion. Dhe kjo është në thelb një mënyrë që kanë të dhëna shumë të vazhdueshme. Kështu që ju mund të mbani të dhënat rreth për aq kohë sa të doni. MHM. AUDIENCA: A mund të përcaktojë tog dhe rafte? A janë ata si vende për të vënë gjërat? Gjuha 1: Pra ata janë të thelb just-- ata janë mënyrën se si ne i referohemi vetëm për kujtesën. Pra tog është vetëm vende ku kujtesës është ndarë në mënyrë dinamike, ndërsa rafte referohet më shumë për të rafte korniza që janë më të rëndësishme për Funksionet që në fakt do të vrapojnë. Ju nuk mund të vërtetë kanë kontroll. Dallimi i madh, ju keni kontroll mbi tog në qoftë se ju doni të. Ju keni pak kontroll mbi rafte. Rafte varet Funksionet që vrapojnë, dhe rendit në të cilën ato janë të drejtuar, dhe mënyrën se si gjërat janë kthyer. Ndërsa me grumbull, si ne do të shohim, ju mund të thoni, OK, unë dua që kjo vlerë të jetë e rreth deri sa unë po ju them ndryshe. Ju nuk jeni i lejuar për të shpëtoj prej tij. Ju nuk jeni i lejuar për të refuzojë atë. Ju jeni duke shkuar për të mbajtur atë rreth për sa kohë që unë po ju them. Ju merrni të jetë bosi në grumbull, ndërsa stack-- Ndoshta, nëse ju si mashtroj rrugën tuaj ju mund të jetë bosi. Por jo mjaft. Dhe kjo është me të vërtetë vetëm kujtesës. Është mënyra të vetëm të ndryshme e referuar kujtesës. Ftohtë. Pra, me të cilat, si të kontrolluar kujtesën tuaj. Është me malloc, e cila ju jeni do të merrni për të përdorur. Pra, kjo është vetëm e shkurtër për ndarjen e kujtesës. Kjo është e gjitha ajo është. Ka një bandë e ftohtë të tjera Funksionet që kanë alloc në fund, dhe ata qëndrojnë për gjëra të ndryshme. Pra, kur ju keni nevojë për ruajtje që ka nevojë të vazhdoj funksionin tuaj të tanishme në mënyrë se kur e tanishme tuaj Funksioni shkon larg, ju ende keni të dhëna që ju marrë nga ajo, ju doni të përdorni malloc. Kjo do të nisja atë në grumbull. Dhe si kam thënë dhe për të mbajtur duke thënë, ju do të mbani atë atje deri sa ju thoni ndryshe, e cila është gjëja më e rëndësishme këtu. Pra, një gjë në njoftim, dhe kjo është zakonisht të vërtetë e rëndësishme, është se ky sizeof është super e dobishme për të përdorur shkak varësi të llojit makine ju jeni duke, ajo mund të ketë sasi të ndryshme e kujtesës që ajo merr. Pra, ju gjithmonë doni të përdorni madhësinë e kështu me se ju nuk jeni makinë varur, në mënyrë që kodi juaj do të të kandidojë në çdo makinë. Dhe kjo është vetëm një pjesë e shkruar kodin mirë. Në qoftë se ajo punon në një makinë, por jo nga të tjerët, sa e dobishme ishte programi juaj? Pra, ju gjithmonë doni të sigurohuni që të përdorin dhe sizeof. Audienca: Pra, është se si Madhësia e 10 inç [padëgjueshme]? Gjuha 1: Kjo është madhësia e 10 ints. vërtet. Pra, madhësia e ints do të kthehen sa nuk e merr int. Ose madhësia e shkrumb, si kushton një reagim char. Dhe pastaj sa blloqe e që nuk ju duan? Pra, në këtë rast, ne duam diçka që ne mund të ruajë 10 ints të. Dhe kjo do të punojnë pa marrë parasysh të makinës, e cila është e ftohtë. Pra, sa bytes do që në fakt ju jap? Matematikë të shpejtë. AUDIENCA: 40. Gjuha 1: 40. Pikërisht. Pra, një gjë e madhe. Pointer ose malloc mund të kthehen null. Pra, përsëri, gjithmonë kontrolloni për të shohim nëse ajo kthehet null para se të përpiqet dhe të bëjë asgjë me të. Nëse ju provoni dhe dereference kjo akrep tani, ajo është vetëm do të segfault sepse ju shkoi dhe u përpoq të prekë null kur ju nuk duhet të ketë. Pra, gjithmonë kontrolloni for null. Përsëri, të gjithë ju mund të bëni. Ajo mund të kthehen null. Ajo do të kthehen null qoftë se ju jeni ose nga hapësirë, ose për çfarëdo arsye ajo u zhvillua në disa bug kujtesës. Ajo nganjëherë thjesht kthehet null. Kështu që ju vetëm duhet të kontrolloni për të. Kjo është e gjitha kjo rrëshqitje është duke thënë. Dhe pastaj ajo që ne kemi këtu është një thirrje të lirë. Pra, në të njëjtën mënyrë se në qoftë se ju hapur një skedar që ju duhet të mbyllni një fotografi, në qoftë se ju memorie malloc, ju duhet të jeni i lirë se kujtesës. Dhe ju djema do të merrni për të bërë gjëra të vërtetë cool. Dhe ka një program që ju mund të kandidojë për të parë nëse ju jeni ndonjëherë rrjedh kujtesës. Por ju nuk doni të rrjedhje kujtesës. Është me të vërtetë e keqe. Vetëm rrëmujë up gjërat. Kjo është e keqe për të bërë ashtu si programim mençur për efikasitetin e dizajnit. Por kjo është edhe vetëm një lloj e keqe për kompjuterin tuaj. Gjërat në mënyrë të drejtë të lirë kur ju malloc ato. Ju djema shohin symmetries këtu. Super thjeshtë. Vetëm të lira dhe pastaj çfarëdo treguesin tuaj, çfarëdo emri i akrep juaj është, dhe kjo do të kujdeset për të liruar atë për ju. Ftohtë. Pastaj ne kemi këtë. Pra, ne jemi vetëm duke shkuar për të ecin nëpër këtë program. Dhe pastaj ju djema janë bërë. Pra, [e padëgjueshme] vetëm kryesor. Pra, ne kemi një int * akrep. Pra, ne kemi një akrep që do të mbajë ints. Dhe sa ints është ajo do të mbajë? Vetëm një. Madhësia e një int. Ne kontrolloni për të parë nëse akrep është null sepse ajo është, ne duam të themi nuk bëjnë asgjë. Kjo është e keqe. Pra, kemi shkruar disa gabim jashtë kujtesës, më shpesh kthehen 1, si ju djema janë përdorur për të. Dhe pastaj ne kemi këtu, ne dereference pointer tonë. Pra, kjo do të thotë që ne jemi duke shkuar për të ruajtur diçka në vendin e caktuar për ne. Int * akrep, ose malloc, kthehet adresa ku të lënë mënjanë këtë kujtesës për ju. Pra, kjo është në thelb duke ju dhënë like-- nëse ju të mendojnë për një bandë e shtëpi në një lagje që ju dëshironi për të vënë tuaj në mobilje, malloc është si rregull, ju merrni për të shkuar në shtëpinë e tre. Dhe kjo ju jep të adresa e shtëpisë tre. Pra, kjo e drejtë tani, kjo Dyqane akrep një adresë, ruan adresën e shtëpisë tuaj. * Mjetet PTR, OK, unë jam në shtëpinë time. Ftohtë. Unë kam nevojë për të marrë disa integer. Pra, ju jeni duke kërkuar për dikë për të ju jap mobilje tani. Pra, ju merrni disa int. Dhe kjo e vë atë në treguesin tuaj ku është treguar për të. Dhe pastaj ajo vetëm shtyp out, keni hyrë kudo. Dhe përsëri, referencë. Pra, kjo është si ju shkoi për këtë adresuar dhe keni parë se çfarë ishte aty. Ftohtë? Dhe pastaj sigurisht që ne të lirë akrep tonë. Mos harroni për treguesin tuaj të lirë. Mos harroni të kontrolloni for null. Mos harroni për treguesin tuaj të lirë. Ju keni dy gjëra që ju kujtohet nga këtë, apo që ju duhet të mbani mend. Po. Audienca: [padëgjueshme] sende si kjo, char * s. Si të vijë kurrë nuk jemi të lirë ata? Gjuha 1: Hm? AUDIENCA: A janë ata si strings? Ju tha se vargjet janë ashtu si char * s, e drejtë? Pra, pse nuk kemi të lirë vargje? Gjuha 1: Ju duhet vetëm për të pa pagesë nëse ju jeni mallocing. AUDIENCA: Oh, në qoftë se ju jeni të mallocing. Gjuha 1: Pra malloc dhe të lirë janë dy gjëra që ju duhet të keni së bashku. f hapur, f ngushtë, dy gjëra ju duhet të keni së bashku. Në të dyja këto raste, kontrolloni for null. Po. Audienca: Pra lirë është vetëm duke lejuar diçka tjetër për të ruajtur atje pas ky program e ka përdorur atë? Gjuha 1: Është vetëm duke thënë, OK, unë jam bërë me këtë. Ju nuk keni nevojë të mbani atë rreth. Përndryshe kompjuteri juaj do të thjesht pëlqen të provoni dhe për të mbajtur atë atje. Dhe pastaj ju can't-- ajo shkon në çështjet e kujtesës më vonë. Ju gjithmonë dëshironi të liruar atë, sepse kjo tregon kompjuterin tuaj, OK, unë jam bërë me këtë vend të kujtesës. Ju mund të keni atë përsëri për mua për t'u përdorur më vonë. Ftohtë? Po. Audienca: Pra, kemi përdorur% d vetëm sepse një të dyfishtë që vjen prapa, ose pse is-- [padëgjueshme]. AUDIENCA: Mund të përdorni% ï? Gjuha 1: Ju mund të përdorni% i. Çdo pyetje minutën e fundit? Shkoni përpara. AUDIENCA: Unë vetëm kam një pyetje të shpejtë. Pra ndryshueshme ptr, that's-- si, me ptr = malloc int *, kjo është vetëm duke thënë se është duke treguar për një vend në memory-- Gjuha 1: A doni [padëgjueshme]? AUDIENCA: --that është Madhësia of-- jo, kjo është OK. Por kjo është vetëm duke treguar për një vend në kujtesës që është vetëm si katër bytes. Gjuha 1: E drejta. Pra malloc madhësinë e int thotë, OK, unë jam duke shkuar për të shkuar ik, gjeni katër byte memorje për ju. Kur konstaton se katër bytes i kujtesës, atë jep ju të mbështetur adresë e ku fillon, dhe kjo është ajo që të ruajtura në akrep, apo PTR. Të mirë. Ju djema shikoni pak i hutuar se më njerëzit, kur flas për treguesin, kështu që unë jam ndjenjë shumë e mirë tani. Dakord. Si gjithmonë, ju djema duhet të kenë të gjitha marrë notat tuaja pset2 deri tani. Unë e di se ka pasur disa që tundet gjëra ku thotë, formula jo valid apo diçka. Nëse ju jeni duke marrë atë, të gjithë notat tuaja janë të vlefshme në anën time. Kështu që unë mund të ju dërgoj screenshots e notave tuaj. Just let me know, si edhe në qoftë se ju jeni humbur asnjë klasë apo diçka nuk duket për të bërë kuptim. Eja tek unë. Unë kam qenë super krenar për ju djema tashmë, kështu që të mbajë atë. Dhe të ketë një pushim të mirë të javës tuaj. Unë jam i sigurt se unë do të shoh disa e ju në orarit të punës.