[00:00:00] [MUSIC Playing] [00:00:11] Davin: Në rregull, djema. Pra, kjo është përmbledhje për quiz e parë. Është e të gjithë të gatshëm për të quiz të mërkurën? ALLISON: Woo! STUDENT: Woo! Davin: Po. ALLISON: Po! Davin: Ky djalë është gati. Ky djalë, dy duart, e bukur. Pra shqyrtim quiz sot, kjo do të jetë rreth një orë e gjysmë. Ne jemi duke shkuar për të shkuar mbi të gjitha i madh konceptet që ju duhet të dini për quiz. Ne jemi duke shkuar për të shkuar mbi disa kodim nga shembuj dore, të cilat janë në çdo quiz. Dhe në qoftë se ju keni pyetje, mos ngurroni për të ngritur dorën tuaj dhe çdo gjë si kjo. E pra, logjistikës për quiz online. Pra, ne jemi duke shkuar për të ndarë njerëzit deri në dhoma të ndryshme. Është e bazuar në emrin e tyre. Pra, nëse ju keni ndonjë pyetje në lidhje me ku për të shkuar ose në lidhje me çfarë materiali është, si, fjalë zyrtare mbi atë që po ndodh të jetë në quiz, kontrolloni online. Dhe kjo është e gjitha deri tani. Pra, nëse nuk ka pyetje për të fillojë me të, ne jemi duke shkuar për të filluar. Dhe këtu është Allison. [00:00:56] [Rreh] [00:00:57] ALLISON: OK, faleminderit, Rob. Appreciate it. Davin duhej kthyer për këtë. Kjo është lista jo e plotë e Temat, si gjithmonë, sa Davin thënë vetëm. Konsultoni dokumentacionin në internet në lidhje quiz zero. Por kjo është shumë e much-- kjo është në planin mësimor është çdo gjë që ne kemi shkuar mbi deri tani. Çdo gjë këtu është lojë të ndershme, si dhe çdo gjë tjetër që mund të ketë qenë i përmendur në leksion. [00:01:21] Seksioni im, këtu, është vetëm një shumë e shqyrtimit. Ka ushtrime çift se ju djema mund të punojnë në. Por, për pjesën më të madhe, me të vërtetë doni të merrni në Davin me ato kodin me ushtrime dore. [00:01:31] Kështu që unë jam duke shkuar për të fluturojnë me këtë. Nëse keni ndonjë pyetje, të ndaluar mua. Ngritja dorën tuaj. Unë premtoj unë ndoshta do të shihemi. Nëse jo, vetëm të tundë atë rreth. Unë jam duke shkuar për të folur të shpejtë. Unë shpresoj se gjithkush është në rregull me këtë. [00:01:43] OK, fjalë të veçantë, Davin natyrisht harruar të shfletoj nëpër këto slides. [Qesh] Ju jeni në telashe, njeri. Pra, këshilla për quiz zero, praktikë coding në letër. Ju djema do të merrni disa praktikë me atë tani me Davin, kështu që ju nuk do të jetë plotësisht me veten. Unë mendoj se ne jemi në të vërtetë duke shkuar përmes këtyre dy funksioneve. Pra, ju do të jenë të përgatitur mirë atje. [00:02:04] Të jenë të njohur me grupe tuaj problem. Ka pasur pyetje në kuize e mëparshme që do të ju pyes, për shembull, për kodin up diçka shumë të ngjashme me Mario. Pra, është shumë i njohur me problemi juaj përcakton, si edhe si pyetje ne ju kërkojmë në fillim në formë që ju të plotësoni, do të t'ju shërbejnë shumë mirë. [00:02:20] Bëni një quiz mëparshme nën kufizimet kohore. Këto kuize janë të gjata. Koha kalon me të vërtetë të shpejtë. Dhe shpesh, ju nuk e kuptojnë se si shpejt ajo shkon deri në ju në të vërtetë vënë veten nën këto kufizime. Pra, nëse ju vetëm mund të ndërtoj, ju e dini, 75 minuta, ose sonte ose nesër për të marrë një nga këto kuize nën që, ju do të jetë në formë shumë më të mirë. [00:02:41] Dhe gjithashtu, duke krijuar fletë tuaj të referencës. Mos harroni, ju merrni një të tillë Faqja e para dhe mbrapa si referencë për quiz tuaj mërkurën. Krijimi kjo është një mënyrë e madhe për të studiuar. Çdo gjë që ju jeni të paturit probleme me ju dëshironi që të përfshijë në atje. Çdo gjë që NGP tuaj kanë qenë, si, kjo është me të vërtetë e rëndësishme. Ju duhet të dini këtë, janë ndoshta gjërat që ju keni në atje në qoftë se ju nuk keni ta memorizuar. Edhe në qoftë se ju e dini ata me të vërtetë mirë, nganjëherë duke pasur atë në atje është lloj i vetëm rehati për ju, të cilën unë e di kuize janë stresues. Pra, çdo rehati që ju merrni mund të ndihmoni. Të gjithë të drejtë, gjithashtu, të merrni fle dhe hani dhe si gjërat normale që ne të ju them për kuize. [00:03:16] Pra, duke filluar off lehtë, tipet e te dhenave dhe madhësive. Siç e thashë, kjo është vetëm duke shkuar që do të më hedhur një shumë të gjëra deri këtu që ju duhet të dini. Pra, ne kemi chars tona që janë një bajt, ints se katër bytes, e gjatë të gjatë, të cilat janë tetë bytes. Në thelb, kjo është vetëm ju duan të mbajnë integers mëdha. Gjithandej, të cilat janë katër, dyshe, të cilat janë tetë. Përsëri, vetëm ju jep më shumë hapësirë ​​për gjithandej tuaj. Dhe pastaj shtypni yll, kështu që çdo treguesin mbi një makinë 32-bit, e cila është e gjitha që ju djema kanë nevojë të di, është katër bytes. [00:03:44] Pra, të gjitha gjërat që ju duhet e di, ndoshta gjërat ju dëshironi të keni në fletë tuaj reference. OK, konvertimit binar në binar, konvertimit në heksadecimal, mbrapa dhe me radhë, të gjitha gjërat që ju duhet të dini. Pra, nga binar në decimal. Ju djema duan të marrin një minutë të shpejtë dhe të përpiqen dhe të kuptoj se secili prej tyre dhe pastaj më thoni se çfarë janë? [00:04:06] Unë gjithashtu kanë karamele në çantën time, kështu që kushdo që përgjigjet merr karamele, nga rruga. Dhe unë kam shumë prej tij. Më lejoni të rrëmbyer këtë. Unë jam duke shkuar për të dhënë këtë për Gabe. Kështu që ju mund të dorë nga karamele kushdo që është e bukur dhe bashkëpunuese. [00:04:21] OK, unë pashë një dorë aty në shpinë. [00:04:26] STUDENT: Po, e para është 42. [00:04:28] ALLISON: Po, e para është 42, e saktë. STUDENT: [padëgjueshme]. [Qeshura] ALLISON: dyti një, atje mbrapa në të verdhë? STUDENT: 110.010. ALLISON: Saktë, dhe kjo e fundit, këtu poshtë në pjesën e poshtme? Gjithashtu, vërtet, ju e dini dëshironi? Vetëm hedhje out karamele. Si për karamele për të gjithë? [00:04:46] STUDENT: [padëgjueshme], kur ne jemi duke bërë. [00:04:47] ALLISON: Shh. Dhe pastaj ai i fundit. Kush dëshiron të përgjigjesh? Të drejtë atje. [00:04:52] STUDENT: 11.100. [00:04:54] ALLISON: 11.100, shikoni në atë. Urime, punë e madhe, të gjithë. OK, të gjithë llojet e kuptojnë Procesi për të bërë këtë? Ju keni, duke shkuar nga binar në decimal mënyrë unë priren për të bërë atë, është shkruar nga fuqitë e 2. Kështu që unë them, OK, 0 herë 2-0, kështu që që është 0, 1 herë 2 të parë, është 2 shkon më tutje në këtë mënyrë. A ka dikush doni mua për të në mënyrë të qartë të kalojnë nëpër një shembull i binar? OK, cool. [00:05:28] Dhjeta në binar është shumë i ngjashëm. Unë priren për të shkruar nga fuqitë e 2. Filloni me atë që është më i madhi, por nuk do të kaloj dhjetore që ju jeni duke kërkuar për. Dhe pastaj lloj të punojnë në rrugën tuaj prapa duke shtuar gjëra të nevojshme. [00:05:42] Dhe pastaj me tepër, kjo është ashtu si tepër normale. Nëse ndonjëherë keni rastin kur ju jeni duke shtuar dy 1s, ai padyshim bëhet 2. 2 në binar tani është 1 0 kështu që ju duhet për të kryer 1 tuaj në kolonën e ardhshëm. Ftohtë. [00:05:59] Heksadecimal, kjo mund të jetë diçka që është pak më pak të njohur. Pra, si Rob ishte vetëm duke u thënë mua paraprakisht, trick tij për këtë është vetëm për të ndarë atë në katër chunks byte, OK? Bits, sorry. Shih? Faleminderit Rob. Kjo është arsyeja pse ju jeni këtu. [ZHURMA] OK, kështu që ne vetëm të prishur atë në katër bit chunks. Pra, me binare në heksadecimal, ne shikojmë në të parë 4, e cila është në qoftë se ne kemi katër 1s në a rresht, çfarë numri bën që simbolizon? [00:06:25] STUDENT: F. [00:06:26] ALLISON: Pra, në këtë rast, çfarë është 11111111 or-- po? STUDENT: FF. ALLISON: Perfect, FF. Aq e madhe, karamele për ju. Tani, për sa hexadecimal të Binary, ne vetëm mendoj për këtë lloj në të kundërt. Për çdo numër apo letër atë ne kemi në heksadecimal tonë, vetëm për të kthyer atë në katër bit e saj [Qesh] për konvertimin e katër bit. Kështu 5, në këtë rast, ajo është 5 nëse ne jemi përfaqësuar me katër bit? [00:06:58] STUDENT: 010? Mm-HM. Dhe pastaj A, e cila është në të vërtetë 10, do të jetë? 1010. Pra, ne kemi atë, këtu. Pra, konvertimin në mes heksadecimal dhe binar të vërtetë nuk është edhe aq keq. Nëse ju shikoni në atë në katër bit chunks, do të jetë e artë. Everyone-- po? [00:07:19] Rob: Kjo është pa kuptim, por unë gjithmonë kujtohet A, pasi A është menduar të jetë 10. Dhe binar është vetëm 10 10, so-- [00:07:26] ALLISON: Ah, atje ne do të shkojmë. [00:07:27] Rob: Hey. [00:07:28] ALLISON: Hey, karamele për Rob. Ka gjëra jo-çokollatë në atje. Kështu që ju mund të ketë disa. Math kështu ASCII. Sillen. Pra ASCII matematikës, si ju djema ndoshta edhe mos harroni p vendosur 2 me Visioneer dhe Cezari, keni bërë shumë për këtë. Mos harroni, personazhet janë rrënjësisht vetëm numra. Pra, ne mund të bëjmë matematikë me ta, ashtu si ne bëjmë matematikë me ints. [00:07:54] Pra, ne kemi vetëm pak gjë e thjeshtë këtu. Ne kemi disa në një që është e nisur në 65. Dhe B barabartë me vlerën ASCII të A plus 1, char C barabartë me D minus 1, dhe char D barabartë me 68. Pra, atëherë ne do të shtypura të gjithë ata, si ne shohim këtu. Dhe dikush mund të më thoni Çfarë kjo do të shtypura nga? STUDENT: [padëgjueshme]. ALLISON: Pikërisht, kështu një gjë në njoftim është i se ne jemi të shtypjes nga karaktere çdo kohë, këtu. Ne jemi përcaktimin edhe pse A dhe B janë ints kur deklaroi ato më lart. Ne jemi shtypjen e tyre si karaktere nga qind C dhe deklarata jonë printf, në mënyrë që ata të gjithë do të shtypura si karaktere. Dhe sigurisht, vlera ASCII 65 vullneti shtypura si A. Vlera ASCII e një plus 1 do të jetë 66, e cila do të krenar për B. Pra, në fakt, ne kemi merrni A B C D Të gjithë të mirë atje? Ndonjë pyetje? Awesome. [00:08:52] OK, fushëveprimi. Pra Shtrirja është padyshim një shumë Gjëja më e rëndësishme për të kuptuar, këtu. Një shumë prej jush, në qoftë se ju kanë gabime hartimin, dhe ai thotë se ju nuk keni qasje në disa variable, kjo është ndoshta për shkak se ju përkufizohet brenda një lak dhe pastaj u përpoq për të hyrë në të nga ajo, ose anasjelltas. [00:09:12] Pra Shtrirja në thelbin e vet, ai thjesht përcakton se ku themi një variabël ekziston, ku ne mund të ndryshojë atë, ku ne mund të përdorni atë. Është vetëm lloj i thënë se këto janë të vetmet vende ku ju keni qasje për këtë variabël. [00:09:26] Kështu dy qëllimeve që ne flasim për Gjatë klasës janë globale dhe lokale. Variablat globale Pra, ne flasim për kur ju jeni duke përcaktuar ato më lart kryesore. Kjo do të thotë që të gjithë tuaj Programi ka qasje në të, dhe kjo ekziston për aq kohë si programit shkon, OK? Lokale do të thotë se është e më i mbyllur në një rajon. Pra, sa herë që ju keni funksione të veçanta si shkëmbim, ne gjithmonë flasim për. Ne gjithmonë flasim për shkëmbim me A dhe B. A dhe B ekzistojnë brenda këtij funksioni. Ata nuk ekzistojnë askund tjetër. [00:09:56] Si edhe, kur ju keni nëse deklarata apo për sythe. Kurdo që ne kemi, për shembull, në një për lak kemi int I barabartë me 0. Ne kemi disa kushte dhe update it. Unë vetëm ekziston brenda formatimin e teksteve e se për lak. Nëse ju provoni për të hyrë në atë diku tjetër, compiler juaj do të bërtasin në ju. Ajo do të jetë si, çfarë jeni duke u përpjekur për të bërë? Kjo nuk ekziston. Pra, kjo është dy lloje të ndryshme të fushës. Ka që e bëjnë kuptim për të gjithë? [00:10:23] Kështu për shembull këtu, kjo është vetëm një program i thjeshtë. Çfarë mendoni ju djema mendoni se është do të ndodhë në çdo moment që ne të përpiqemi për të shkruar? Pra, kjo këtu, se çfarë do të ndodhë? STUDENT: Ajo do të shtypura tre. ALLISON: E drejta. Ajo do të shtypura tre. Po në lidhje këtu? STUDENT: Kjo nuk do të funksionojë. ALLISON: Kjo nuk do të funksionojë. Ju jeni jashtë fushës, e drejtë? Variabël lokale nuk ekziston jashtë këtyre formatimin e teksteve, të gjithë të drejtë? Dhe pastaj çfarë lidhje këtu? [00:10:56] STUDENT: [padëgjueshme]. [00:10:57] ALLISON: Çfarë? Rob, shko. [00:10:59] Rob: Unë vetëm tha. Variablat globale duhet të jetë variabël globale nënvizojnë. [00:11:04] ALLISON: Ah, po, sorry. Thanks, Rob. Rob-së si përpilues tonë banor. Ai do të bërtas vetëm në ne, kur ne kanë nevojë për atë. [Qesh] Po, se duhet të jenë të ndryshueshme theksojnë globale. Kështu duke supozuar se kjo ishte nënvizojnë globale ndryshueshme, çfarë do të ndodhë këtu? STUDENT: Kjo do të punojnë. ALLISON: Ajo do të punojë. Pra, kjo do të shtypura, kështu që vetëm një shembull shumë të thjeshtë. OK, prototipa. Pra natyrisht, ne me të vërtetë theksoj për ju djema për të bërë funksionet nëse ajo kuptim në programet tuaja. Por sigurisht, kur ju bëjnë funksionet tuaja, zakonisht ju do të përcaktojë ato pas kryesor. Dhe ju do të përpiqet për të thirrur ata në kryesore. Dhe në qoftë se ju nuk e përdorni një prototip, përpilues juaj do të bërtasin në ju. [00:11:46] Prototype është në thelb vetëm duke u thënë përpiluesit tuaj që kam këtë funksion më poshtë kryesor. Unë jam duke shkuar për të thirrur atë para se unë të përcaktuar atë. Vetëm të mbajë në. Unë premtoj se kjo është e përcaktuar, dhe ju do të keni gjithçka që ju nevojitet. [00:12:00] Pra, mënyra që ne bëjmë atë është vetëm kthimi juaj llojin, emrin tuaj funksioni, input tuaj lista. Kjo është në thelb rreshtin e parë e deklaratës suaj funksionit. Kjo është me të vërtetë të gjitha ajo është. Por kjo është vetëm një lloj i përgjithshëm i formatit. [00:12:14] Kështu në shembullin tonë këtu, Cili ju djema duhet kemi parë në seksionin në një pikë, ne kemi disa kubike int se merr një int të input. Dhe ne kemi kryesore ynë funksion, i cili e quan kubike. Dhe kubike është përcaktuar pas faktit. [00:12:28] Pra, nëse ne nuk kemi të dhëna int kubike në krye, kur kemi quajtur kubike në kryesore, përpilues tonë do të merrni çmendur në ne. Ajo do të jetë si, çfarë jeni duke folur për? Cube nuk ekziston. Unë nuk e di se çfarë ju jeni duke kërkuar për të. Dhe unë jam vetëm duke shkuar ndaluar. [00:12:43] Por sepse ne e bëmë prototip tonë në krye, kemi thënë, ju e dini, kur ju shihni kubike, mos u bëni merak për këtë. Unë premtoj se është e përcaktuar më vonë. Dhe kjo do të ju lejojnë të bëni atë që ju dëshironi. Pra, nëse ju ndonjëherë kanë një funksion që është deklaruar, pasi ju e quani atë për herë të parë, ju keni nevojë për të kanë atë prototip në krye. [00:13:01] Po? [00:13:02] Rob: Është katror, ​​jo cubing. [00:13:04] ALLISON: Oh, Perëndia im. Unë nuk have-- Gabe, mendova keni qenë lektor tonë. Djema OK, të kesh durim me mua, këtu. Unë shpresoj se gjithkush është duke u idenë. OK, kështu që kjo duhet të ketë është katror, ​​jo kub. Por ideja mbetet e njëjtë. Çdo funksion që ne jemi duke bërë thirrje pas fakt duhet të ketë një prototip. Gjithkush e mirë me atë? Çdo gabime shkrimi të tjera? OK. Çdo gabime shkrimi këtu para se të fillojmë, Rob? [Qesh] OK, kështu structs. Në thelb, structs t'ju lejojë për të krijuar llojin tuaj të të dhënave. Pra, më shumë si një int ose char apo a noton, kjo është vetëm një tjetër lloj. Më pëlqen të mendoj se si, si, krijuar vet lloji juaj të dhënave. Ju kështu që lejon të bëjë atë. Dhe kjo ka lloje të ndryshme të të dhënave. [00:13:56] Pra, nëse ju kujtohet, në një rrjet, ne mund të mbajë vetëm gjërat e llojit të njëjtë. Structs të na lejojë të mbajë të shumta gjërat e llojeve të ndryshme. Pra, në këtë rast këtu, ne kanë strukturë të quajtur Student, quajtur këtu në fund. Dhe ne kemi disa id int dhe disa emrin string. Pra, kjo është vetëm një lloj të dhënave. Ne tani kemi një lloj të dhënave të quajtur Student. [00:14:20] Pra, për shkak që ne mund të mendojmë për atë si vetëm një lloj tjetër të të dhënave, ne mund të deklarojmë variablat si ne do të ndonjë tjetër. Pra, në vend të vetëm duke pasur, si, një int student, ne vetëm kemi një student, studenti 1. Oh, shikoni. Është Rob. Pra, këtu ne jemi deklaruar strukturë, ose një variable quajtur studenti 1 e studentit tipit. Pra, kjo do të ketë id dhe emri i lidhur me të. [00:14:45] Dhe mënyra se si hyni në këto elemente brenda strukturën tonë është me dot operatorin, këtu. Pra, në këtë rast, ne deklaroi një studenti 1. Ne caktuar ID të jenë 1. Dhe ne caktuar emrin e të Rob. OK, të gjithë mirë me këtë? Përdorni vetëm like-- po? [00:15:06] STUDENT: Po, typedef-- kur nuk kemi nevojë të përdorim typedef? [00:15:09] ALLISON: Pra typedef vetëm thotë that-- Rob, ju mund të korrigjuar mua në këtë, nëse unë jam i wrong-- por typedef është vetëm të vërtetë shpallja atë si një lloj që ju mund të përdorni, e drejtë? [00:15:19] Rob: Po, kjo është në thelb, kështu që kjo është vetëm krijimin e një alias, ose një pseudonim për një lloj. Kështu që ju mund të shtypni atë [e padëgjueshme]. Pra, [e padëgjueshme] ekziston, dhe tani ne vetëm duhet [Padëgjueshme] mjete saktësisht e njëjta gjë. Dhe kështu që këtu, ne jemi të shtypur, unë mendoj, disa lloj struct 2 [padëgjueshme]. Pra, kjo është vetëm një pseudonim për një lloj të caktuar. [00:15:40] STUDENT: String [padëgjueshme] bibliotekë u typed up si yll char. [00:15:51] ALLISON: Për qëllimet tona këtu, në qoftë se ju jeni duke deklaruar një e strukturës, vetëm të bëjë typedef e strukturës. OK, kështu që më parë, kjo është vetëm një variabël normale këtu. Ne e përdorni atë me një pikë. në qoftë se ne kemi një tregues për një struct, ne mund të vërtetë përdorni një shigjetë, e cila është pretty cool. [00:16:10] Pra, në këtë rast, ne kemi një tregues për një student 1 qe eshte i studentëve tipit. Mos harroni, me tuaj ndërtimit akrep, ju doni çdo gjë që shkruani treguesin tuaj është treguar të jetë në fillim. Pra, ne kemi disa nxënës 1, këtu. Dhe që nga ky nxënës 1 tani është një vuri, ne fakt mund të shkojë studenti 1 shigjetë emrin në vend të pikë, sepse kjo është një tregues, dhe të caktojë Rob. Dhe tani, nëse ne duam të ndryshojë Rob me Davin, kjo është vetëm ju tregon se një mënyrë të ndryshme për të bërë atë. [00:16:43] Pra, në vend të përdorimit shigjeta, ju mund also-- Unë do ta përfundojë këtë dhe pastaj marrë që question-- ju mund të gjithashtu të bëjë studenti referimi 1. Kjo është thënë se si të shkojnë në çdo gjë që është në studenti 1, e cila do të jetë struct tonë studentore. Përdorni atë me një pikë dhe elementi që ju dëshironi, dhe pastaj të reassign atë. Nuk ishte një pyetje. STUDENT: Po, kështu që si të vijnë që ju keni për të përdorur [padëgjueshme] kur ju jeni bërë yll nxënësve pa [Padëgjueshme] studenti? ALLISON: Për shkak se ky është krijuar një akrep. Rob: Ne jemi duke shkuar për të folur për këtë. ALLISON: Ne jemi duke shkuar për të folur në lidhje me atë më vonë në shqyrtim. Pra, vetëm të mbajë mbi këtë mendim. Nëse ende ju pengon në fundi, vijnë bisedoni me njëri prej nesh. [00:17:20] Pra, këto bëjnë pikërisht të njëjtën gjë. Ne jemi vetëm duke ju shfaqur dy mënyra të ndryshme për të bërë atë. Student 1 është tani një akrep, kështu ju mund të hyni Emri elementin në strukturën me një shigjetë. Ose ju mund të dereference treguesin tuaj, dhe pastaj të përdorni atë si ju normalisht do. A që e bën kuptim për çdo një? Nëse gjithë gjërat akrep janë pak konfuze, Gabe do të flasim për këtë, dhe atëherë ndoshta kjo do të bëjë më shumë kuptim. Po? [00:17:46] STUDENT: Po, si mund të jetë ky i ndryshëm nga? ALLISON: ai i mëparshmi? Pra studenti 1 në këtë rast nuk është një akrep. Është vetëm struct tuaj aktuale. [00:17:54] STUDENT: OK. [00:17:55] ALLISON: Ndërsa këtë është një tregues për një strukturë. [00:17:58] STUDENT: OK, por e bën këtë lloj të deri në fund duke punuar në të njëjtën [e padëgjueshme]. [00:18:02] ALLISON: Ai në fakt punon njëjtë. Sintaksa juaj është vetëm të ndryshme. STUDENT: OK. [00:18:05] ALLISON: Po, ata janë të efektive njëjtë. Ajo është vetëm në varësi të kontekstit, ju mund të dëshironi një lidhje të tjera. Po? [00:18:11] STUDENT: Kur ju bëni referenca për 1-- ALLISON: Mm-hm? STUDENT: Pse ju kanë kllapa? ALLISON: Sepse studenti 1 është tregues. Kështu që ju duhet të bëni të sigurtë që ju jeni vetëm dereferencing akrep. [00:18:22] STUDENT: OK. [00:18:23] ALLISON: Pra, në këtë rast këtu, të kllapa rreth tij do të thotë që ju jeni duke dereferencing studenti 1. Pra, ju jeni duke shkuar për të, ku studenti 1 pikë, e cila është struct tuaj. Deri tani ju mund të mendoni se si asaj strukturën, kështu që ne mund të përdorni tonë normale dot operacion. Çdo pyetje të tjera? Cool, awesome. [00:18:48] Pra gjëja e fundit, unë mendoj është rrëshqitje ime e fundit, përpiqem të fitoj! OK, kështu që lundrues pikë pasaktësi. Ne biseduam shkurtimisht rreth këtë gjatë leksionit. Në thelb, ne kemi pafundësisht shumë numra reale. Dhe në qoftë se ndonjë nga ju djema dashuri matematikë, nuk ka të gjitha llojet e stuff cool me ne. [00:19:05] Por ka pafundësisht shumë të numrave reale. Por ata janë vetëm të fundme shumë bit që ne kemi. Pra, ju jeni gjithmonë do të kanë pasaktësi, është e gjitha. Dhe kjo është se është vetëm lloj i si diçka që ju duhet të dini. Kjo si ne mund të ju pyes pse nuk pika lundrues pasaktësitë ekzistojnë? Pra, vetëm diçka që ju duhet të dini. Dhe me këtë, unë jam kthyer ajo mbi të Pointers. [00:19:27] Binky: Përshëndetje, djema. Emri im është Binky. Unë jam duke shkuar për të folur në lidhje me pointers. Yeah, kështu pointers është në të vërtetë pjesa ime e preferuar në këtë kurs. Pra, vetëm për të bërë të qartë se çfarë Allison ishte duke folur për këtu, kështu arsyen why-- i vetmi ndryshim këtu, ndryshim i madh ishte mënyra ne deklaroj gjërat. Pra, kjo do të thotë yll studenti është një tregues për një student. Ndërsa rrëshqitje përpara, student është një struct aktuale, si një student i vërtetë, përmbajnë ndonjë nga ato gjëra. [00:19:54] Dhe arsyeja pse ne duan to-- po, Davin? [00:19:57] Davin: Çfarë do të thotë shigjeta? [00:19:58] Binky: shigjeta Mjetet pikërisht njëjtë si kjo. Pra, ju nuk duhet të vërtetë arrow. Si, në qoftë se ju jeni vetëm në program në C, ju mund të përdorni vetëm këtë. Na vjen keq, unë nuk se çfarë është. Ju mund të përdorni vetëm këtë sintaksë. [00:20:14] Por disa njerëz, kur ata ishin projektim C, ata i realizuar artistikisht se njerëzit përdorur këtë sintaksë aq shumë, se ata do të donte të vijnë vetëm deri me një strukturë sintakse për të. Dhe kjo ndodhi në Forma e kësaj shigjetës. Dhe kjo është me të vërtetë e bukur, sepse ajo simbolizon diçka si ne jemi në të vërtetë në vijim kjo shigjetë, kjo akrep, drejt një hapësirë ​​në memorie. Dhe kur ne të merrni atje, ne duam të shikoni me emrin e atij studentit, nëse kjo ka kuptim. OK? [00:20:43] Pra, kjo është saktësisht e njëjtë. Kjo është pikërisht e njëjta gjë si kjo. Ata marrin hartuar saktësisht njëjtë, OK? Dhe arsyeja pse ne këtu malloc diçka, është për shkak se në këtë rast, ndryshueshme ynë është në të vërtetë vetëm një variabël akrep. Pra, ne vetëm kemi disa hapësirë ​​në kujtesës që është mbajtja e një akrep. Ne të vërtetë nuk kanë asnjë hapësirë që mban e strukturës aktuale. [00:21:06] Pra, kjo duhet të bëhet në dy hapa. Ne kemi për të krijuar memorie për të vënë në e strukturës. Dhe ne duhet të krijojmë memorie për të vënë në treguesin. Pra, ata janë në thelb dy variabla të ndryshme, këtu. Një prej tyre është i studentit tipit, me përjashtim të nuk ka të vërtetë kanë një emër. Dhe tjetra është e yllit të tipit të studentëve. Dhe pastaj studentore 1 pikë atje, në qoftë se që e bëjnë kuptim. OK? [00:21:28] Pra, arsyeja pse ne përdorim pointers është për shkak se çdo gjë në një kompjuter, çdo variabël në një kompjuter ka dy gjëra. Ajo ka vlerën e saj. Dhe ai e ka adresën e saj. Dhe një mënyrë e mirë për të konceptuar kjo ka shumë probleme kur ju përpiqen për të përdorur funksione. Dhe ne jemi duke shkuar për të përpiqen për të shikoni në një nga ato. Domethënë, ajo do të mendoj se e kujtesës si kuti. [00:21:50] Ju gjithmonë menduar të variablave kur ju thonë se na është e barabartë me 5. Ju mendoni se i vënë 5 në një kuti. Pra, çfarë nëse ju doni të kalojë se int në një funksion? Ju thjesht pass-- unë nuk bëj know-- x në një funksion. Por çfarë ndodh është normalisht si njerëzit, ju do të mendojnë diçka si unë jam kalimin kutinë tek një person. Dhe kjo nuk ka të vërtetë ndodhin në kompjuter. Çfarë ndodh është që ju të kopjoni vlerën nga kutia në kuti e personit. [00:22:17] Pra, ajo që unë jam duke u përpjekur të them është se në qoftë se ju keni një function-- sorry-- këtu, në qoftë se ne kemi një funksion si për pesë deri atje, nëse ju përpiqeni të kalojë një ndryshore, ajo është vetëm do të kopje. Nëse një nx nisja e barabartë me 3, kjo do për të kopjuar këtë vlerë deri ndryshueshme në a deri atje. OK, dhe kjo është lloj i arsyes pse ne duam që të përdorim pointers. Sepse në vend të duke i dhënë vetëm vlerën, në vend të vetëm duke kaluar vetëm vlera në një funksion, ne duam të kalojë duke iu referuar. Ajo që ne e quajmë të kalojë duke iu referuar është lloj të dhënë kuti të funksionit, kështu që funksioni mund gjithashtu ndryshoni vlerat në atë kuti. [00:22:53] OK, kështu që vetëm disa tregues bazë stuff është për të krijuar pointers, ju vetëm të deklarojë atë një lloj, dhe ju vënë një yll të drejtë pas tij. Dhe lloji është vetëm atë që ju jeni duke treguar. Pra, në qoftë se ajo është një yll int, ju jeni duke treguar në një int. Në qoftë se kjo është një yll char, ju jeni vënë në një tabelë. Dhe në qoftë se ajo është një yll student, ju jeni duke treguar në një studenti. OK? [00:23:08] Dhe ata janë të gjithë 4 bytes të gjatë. Sepse ky variabël ajo nuk ka të vërtetë duhet të mbajë një char, një int, apo një student. Ajo vetëm ka nevojë për të mbajtur një fjalim. Kjo është arsyeja pse ata janë të gjithë 4 bytes gjatë në një makinë normale 32-bit. OK? Kështu që këtu, x është një ndryshore që tregon për një int. pikë y në një char. Pikat z në një noton. Ndonjë pyetje këtu? Ftohtë. Dhe ka dy simbole të ndryshme që ata kanë për të mbajtur në mendje kur vijnë në treguesin. Pra, referenca dhe dereferencing janë ato të mëdha. Pra, me simbolin komercial të Emri ndryshueshme ju jep? STUDENT: Adresa. Binky: Adresa. Pra, nëse ju të deklarojë int a është e barabartë me 5, atëherë 'e e një do të ju jap adresën. Dhe në të vërtetë ju mund të përpiquni për të shkruar atë dhe të shohin atë adresë në kujtesën ndryshueshme juaj ka. Dhe pastaj dereferencing-- në mënyrë që të ishte referenca, marrjen e dereferencing address-- është e kundërta e saktë. OK, ashtu si herë është e kundërta e një ndarje, yll është e kundërta e simbolin komercial. Pra, do të thotë dereferencing të shkojnë atje. Pra, nëse ju jepni I star-- nuk know-- 50, kjo është e do të përpiqen për të shkuar në adresën e Numri 50 brenda kompjuterit tuaj. OK, dhe pse ne e shohim se ata janë të kundërta? Sepse çfarë ndodh në qoftë se ju bëni diçka si yll simbol a? E pra, një simbol ju jep adresën një variabël, adresa e a. Por, ylli do të thotë të shkojnë atje. [00:24:35] Pra, çfarë ndodh në qoftë se ju shkoni në adresën e një? Ju vetëm të merrni për një, e drejtë? Pra, duke shkuar në adresën e a është e njëjta gjë si. Kjo është arsyeja pse ata janë zakonisht të referuar same-- këtë dhe kjo i referohen Operatorët si të kundërta. OK? So cool. [00:24:53] Nën kapuç, për shembull, nëse ne deklarojmë int x është e barabartë me 5, ne kemi një ndryshore. Dhe mos harroni që unë tha se çdo variable-- dhe kjo është një gjë e mirë të mbajtur në mind-- ajo ka dy gjëra të ndryshme lidhur me të. Ajo ka një adresuar dhe një vlerë. OK? [00:25:07] Pra, vlera në këtë rast është 5. Dhe adresa is-- le të themi, unë jam bërë diçka up-- kjo është 0x04. Dhe arsyeja e vetme pse ne zakonisht paraqesin adresat në heksadecimal është një, sepse kjo është si të mirën. Ajo shkon mirë me binar. Është e lehtë për të kthyer në dhe nga binar. Dhe kjo nuk ka marrë shumë të mëdha nëse ju keni një numër shumë të madh. Pra, ne të dëshironi të përdorni hexadecimal në adresat e shtypjen. Por unë mund të përfaqësojë kjo si një numër të plotë. Kjo është në rregull. [00:25:32] Dhe kështu ajo ka një adresë 4 dhe një vlerë prej 5. Dhe atëherë thashë yll int akrep. Pra, kjo është një lloj tjetër, njoftim. Int yll akrep barabartë adresën e x. Pra, çfarë do të jetë vlera e PTR? Ajo do të jetë adresën e x, këtu poshtë. OK, kështu që vlera do të të jetë i njëjtë si adresë. Kjo është detyrë të veprojë që unë jam duke bërë. Dhe pastaj ptr do të ketë adresën e vet, i cili rezulton, në këtë rast, 8, OK? [00:26:03] Dhe atëherë unë krijoj një kopje të re integer. Dhe unë them kopje int barabartë të shkojnë atje. Pra shkoni në atë ptr është treguar. E pra, çfarë kjo ptr keni? Ptr ka 0x04. Çfarë ndodh në qoftë se unë të përpiqet për të shkuar atje? Unë do të gjeni djalë i cili ka Adresa x dhe i cili e ka adresën 4. Dhe kush e ka adresuar katër është x. Ka që e bëjnë kuptim? Po? [00:26:28] STUDENT: Në këtë rast, është pointer në një pirg? [00:26:32] Binky: Në këtë rast, it's-- pyetje e mirë. Unë vërtetë nuk mendoj për këtë kur bën këto adresa. Por nëse kjo është, si të gjithë këto janë variabla lokale, atëherë x do të jetojë in-- gjithçka do të jetojnë në rafte. Pra, çdo gjë është duke shkuar të jetë treguar në rafte. Ju merrni vetëm në tog kur ju filloni të përdorni malloc, e drejtë? [00:26:52] Pra, nëse ju kujtohet rafte është çdo kohë ju telefononi një funksion në programin tuaj, si, kryesore për shembull, apo ndonjë funksion tjetër, si printf. Të gjitha variablave lokale janë do të merrni vënë në një kornizë rafte. Dhe ata do të merrni si grumbulluar në rafte. Kjo është ajo që quhet një pirg. Dhe të gjithë ata ndryshoret lokale do të jetë atje. Dhe heap-- dhe ne jemi duke shkuar për të folur më shumë për këtë later-- tog është vendi ku të gjithë ndarë dinamike jetën e kujtesës. Ftohtë? [00:27:20] Ne do të shkojmë në këtë rrëshqitje. Po? [00:27:22] STUDENT: Pse nuk është e int kopje kthimit 0x04? [00:27:27] Binky: Pse nuk është e int kopje kthimit 0x04? [00:27:30] STUDENT: Pse nuk është se [padëgjueshme]? [00:27:32] Binky: Për shkak se ajo është një vlerë e PTR? [00:27:37] STUDENT: 0x04. [00:27:38] Binky: 0x04. Çfarë ndodh në qoftë se ju shkoni në 0x04? Çfarë bëni ju merrni? [00:27:41] STUDENT: Oh, OK. Binky: Ju shikoni? STUDENT: Po. Binky: Pra, ju merrni 5. Pra, kopje do të ketë 5, në qoftë se ka kuptim. Po? [00:27:49] STUDENTORE: A mund të kemi marrë 5 në kutinë vlerës [padëgjueshme] në qoftë se ne kemi vënë int kopjoni [padëgjueshme]. [00:27:55] Binky: Int-- ne do, vërtet. Kjo do të kishte bërë shumë e shumë të njëjtën gjë. Por në këtë mënyrë, ne mund të kalojë adresuar të funksioneve. Dhe kjo është gjëja e ftohtë ne jemi duke shkuar për të bërë tani. [00:28:06] Pra, ky lloj ushtrimi gjithmonë vjen deri on-- shumë zakonisht vjen deri në kuize. Pra, kjo është me të vërtetë e mirë për të përpiqen për të të bëjë atë lloj gjë veten. Pra, të përpiqen të mbajnë gjurmët e asaj adresën është dhe duan vlerat e variablave janë në çdo moment. Pra, kjo është pikërisht ajo që ne jemi duke shkuar për të bërë. Këtu, ne kemi hapa, një, dy, tre, katër, pesë. Një, dy, tre, katër, pesë. Dhe ne jemi duke shkuar për të mbajtur nën e vlerave të x dhe a. [00:28:34] Pra, çfarë është duke bërë këtë, në qoftë se kjo është një Kodi buggy, ne jemi duke u përpjekur për të bërë për pesë. Pra, ne jemi duke u përpjekur për të marrë në një ndryshueshme dhe për të ndryshuar vlerën e saj për 5. Dhe mos harroni analogjinë e mia për të pasur një kuti dhe dorëzimin kuti për dikë? Pra kryesor ka këtë kuti të quajtur x. Dhe ai përmban vlerën 3. Dhe unë jam duke u përpjekur për të dorëzuar kjo kuti për deri në pesë. [00:28:58] Dhe unë dua të pesë të ndryshojë vlera e kësaj kuti në 5. Dhe atëherë unë vetëm të shtypura vlerën e x. Kjo është ajo që function-- ime kjo është ajo që unë jam duke u përpjekur për të bërë. Unë jam vetëm duke u përpjekur për të rinovuar vlera e x në 5. Është e qartë se çfarë funksioni ka? [00:29:16] OK, kështu që çfarë do të jetë vlerat e x dhe të drejtë këtu, rreshtin e parë, e drejtë para se të parë line-- Unë do say-- e programit? [00:29:27] STUDENT: Ndoshta mbeturinave. [00:29:28] Binky: Vetëm gjëra të mbeturinave. Kështu që unë vetëm vënë N / A. Pra ne vërtetë nuk e di. Si, a nuk ekziston ende, sepse ne nuk kemi thirrur për pesë. Int a nuk është deklaruar. Dhe x do të ekzistojë këtu, por ne nuk kemi me të vërtetë caktuar ndonjë vlerë për atë, kështu OK? [00:29:46] Dhe pastaj, çfarë do të jetë vlerat e x dhe a në numër dy? [00:29:54] STUDENT: [padëgjueshme]. [00:29:55] Binky: Kështu x do të jetë 3. Kjo është e lehtë, për shkak se ne jemi caktimin e 3 të saj. Dhe ende nuk ekziston sepse një drejtë jeton në të pesë. Kështu që unë jam duke shkuar të ketë 3 dhe asgjë. apo si mbeturina, çfarëdo, nuk është përcaktuar me të vërtetë. Dhe tani, kjo është linjë e rëndësishme. Këtu, ne jemi duke shkuar për në fakt thirrje për pesë. Dhe mos harroni atë që kam thënë. Ne kurrë nuk kalojnë në kuti. Ne vetëm kopje vlerën e kuti në një tjetër kuti. Kjo është e gjitha kompjuterat e, kopje gjëra nga një vend në një tjetër. [00:30:27] Pra, për pesë, atë që në fakt ka është IT kopje vlera e X per a. Pra, çfarë do të jetë këtu? Vlerat e x dhe a. 3 dhe 3, ne vetëm do të kopjoni ajo gjatë nga x në një. Ftohtë. [00:30:45] Tani ne jemi këtu. Dhe tani ne jemi duke shkuar për të rinovuar një është e barabartë me 5. Çfarë do të ndodhë në përputhje katër? [00:30:55] STUDENT: [padëgjueshme]. [00:30:56] Binky: a merr përditësuar, por x nuk e kam marrë updated. Sepse x ende jeton në kryesore, kjo është një bllok krejtësisht të ndryshme të kujtesës. Kjo është një variabël tjetër. a është një tjetër variabël. Ata të ndodhë që të ketë të njëjtën vlerë për shkak se I kopjuar mbi vlerën e x në a. Por tani, kur unë bëj një është e barabartë me 5, atë nuk ka të vërtetë të ndikojë x në asnjë mënyrë. Kjo është pjesa e komplikuar. A ka kuptim për të gjithë? Po? STUDENT: Një pyetje më shumë, ju keni 3. Pse është një already-- oh, jo, kjo është 3. Na vjen keq, mos u mërzit. Kam lexuar 5. [00:31:29] Binky: Po, 3, 3. [00:31:30] STUDENT: [padëgjueshme], vërtet. Binky: Dhe pastaj ne caktojë 5 të a, por nuk ka të vërtetë të ndryshojë x. Mirë? STUDENT: Po. Binky: Po? A mund të shpjegojë se si një herë a merr kopjuar [padëgjueshme]? [00:31:42] Binky: OK, kështu që kur ju telefononi në pesë i x, kështu që kjo linjë e kodit këtu. në pesë prej X, ajo është e x? x është vetëm 3 në këtë pikë, e drejtë? Kështu që ju mund të mendoni vetëm për të vënë një 3 në këtu dhe duke harruar në lidhje me x. Vetëm vënë një 3 here. Ashtu si ne jemi duke shkuar për të kopjuar gjatë vlera e x në int a që është atje. OK? [00:32:13] Kështu vlera e x është 3. Ne jemi duke shkuar për të kopjuar 3 mbi të a. Dhe e gjithë kjo bllok tjetër memorie, ky variabël tjetër quajtur një do të ketë 3, si edhe. Ka që e bëjnë kuptim? Po? [00:32:25] STUDENT: Nëse ju jepni për pesë si kanë atë si numër i plotë x në vend të një, do që të rregullojmë gjithçka? [00:32:32] Binky: Nëse kjo është një integer-- jo, se nuk do të rregullojmë gjithçka. Pra, kjo është një pyetje shumë e mirë. Kjo nuk ka rëndësi se çfarë ju e quani ato variablave. Përsëri, kjo do të jetë një çështje e fushës, për shkak se ata nuk janë të njëjtë x. Ata janë plotësisht të hapësira të ndryshme në memorie. STUDENT: [padëgjueshme]. Binky: Pra, ajo nuk ka të vërtetë rëndësi se çfarë ju e quani ata. Kjo nuk do të rregulluar gjërat, OK? Më shumë pyetje? Po? [00:32:55] STUDENT: Sa është kthyer në Numri pesë [padëgjueshme]? Binky: OK, ne nuk kemi bërë ende këtë. Le të shkojnë në numër pesë, pastaj. [00:33:03] STUDENT: [padëgjueshme]? [00:33:04] Binky: Çfarë? [00:33:05] STUDENTORE: A keni një kthim në të gjitha? Binky: Ne nuk kemi një kthim, jo ​​kryesore. Por kthimit kryesore 0 automatikisht në qoftë se ju nuk do të kthehen asgjë. Po? [00:33:15] STUDENT: Mund të bëni main-- ose ju mund të bëni për të pesë kthimit a? [00:33:24] Binky: Ne mund të kemi për pesë kthehen a, po. Por atëherë ne do të duhet të caktojë x është e barabartë me vlerën e kthimit për pesë, e cila do të jetë një pak program të ndryshme. Ajo do të punojë. Por, ajo që ne duam të bëjmë është ajo që është quajtur ndryshim diçka në vend. Pra, ne duam të vërtetë ndryshojë atë kuti dhe të mos shqetësohen në lidhje me të paturit e për t'u kthyer Vlerat apo ndonjë gjë. OK? [00:33:46] Kjo është vetëm si funksion swap David tregoi në leksion, përveç unë jam vetëm që kanë të bëjnë me një ndryshore. Dhe ai përdori dy, kështu int a dhe b dhe pastaj ndryshueshme përkohshme dhe gjësend. OK? Pra, çfarë është vija e fundit? Pas pesë kthimet, kjo është thjesht një do të shkojnë larg. Ne nuk do të ketë një më, dhe vetëm x do të vazhdojë të jetojë më. [00:34:10] Dhe me mend se çfarë? x nuk ka ndryshuar vlerën e saj, pasi të gjithë, sepse ne jemi vetëm duke ndryshuar vlerën e a. Kjo është arsyeja pse x është 3 të gjithë. OK? Të mirë. Pra, ky program nuk të arritur atë që kemi dashur. Tani le të rregulluar atë. [00:34:24] Dhe programi fix është përdorur pointers. Çfarë bëjmë ne është që ne kemi tre vija që janë të ndryshëm. Të parat po ne nuk jemi duke kaluar x. Ne jemi duke kaluar adresën e x. Pra, në vend kopjimi gjatë vlera e kutisë, Unë jam ende duke shkuar për të kopjoni mbi diçka. Por unë jam duke kopjuar gjatë adresën e kutisë. [00:34:45] Pra, nëse unë kaloj adresën e kuti për deri në pesë, pastaj për pesë do të jetë në gjendje për të gjetur se në kujtesës dhe për të ndryshuar vlerën e saj. [00:34:53] Pra, dhe pastaj deri atje, unë kam se nuk është një int më. a është një yll int. Kjo është një tregues për një numër të plotë. Dhe pastaj, për shkak se unë jam duke kaluar trajtuar këtu, dhe pastaj çfarë të bëj nuk është një e barabartë me 5, sepse a po mban një adresë. Pra, ajo që unë dua të bëni është të shkoni atje dhe update përmbajtjen e këtij adresë me 5. [00:35:18] OK, kështu që le të shkojnë nëpër të gjitha linjat një nga një. Kështu që, kur unë të fillojë këtu, unë ende N / A, N / A, N / A për çdo gjë në të parë line, sepse unë nuk e kanë me të vërtetë deklaroi sende ende. Dhe pastaj të vijë dy, unë kam x është e barabartë me 3. Një yll int a nuk ekzistojnë, njëjta gjë si më parë. [00:35:39] Tani ajo merr interesante. Kështu që unë jam duke shkuar për të kaluar. Dhe le të supozojmë se adresën i X është 12 në heksadecimal. Le të supozojmë këtë. Unë e bëra atë. Pra, çfarë jam unë duke kaluar këtu është një në pesë. Unë jam duke kaluar 12. [00:35:56] Pra çfarë vlere ka një të ketë? [00:36:04] STUDENT: [padëgjueshme]. [00:36:06] Binky: Na vjen keq? [00:36:06] STUDENT: [padëgjueshme]. Binky: Po, si, për të le të supozojmë se ne jemi këtu, tani. Unë jam duke kërkuar. [00:36:12] STUDENT: [padëgjueshme]. [00:36:13] Binky: Ajo ka filluar. [00:36:14] STUDENT: [padëgjueshme]. Binky: Sepse ne kaluar diçka për funksionin. Po? [00:36:19] STUDENT: Adresa e x. Binky: Ajo do të kanë adresën e x. Dhe adresa e x është 12, mirë. Kështu x do të jetë 3, sepse ne nuk e kemi ndryshuar me të vërtetë x ende. Dhe pastaj një do të jetë 0x12, kështu adresa e x, sepse kjo është ajo që kemi kaluar për të pesë. [00:36:38] Dhe pastaj çfarë ndodh nëse ne përpiqemi për të shkuar atje? Çfarë do të shkojmë për të gjetur? Pra, nëse ju përpiqeni për të shkruar një yll, ne jemi duke shkuar për të ndjekur këtë adresë dhe për të marrë vlerën brenda. Dhe vlera është vetëm njëjta vlera qe X ka, sepse kjo është adresën e x, e cila do të jetë 3. A jemi të mirë? [00:36:56] OK, dhe pastaj tani, ne fakt shkojnë atje. Dhe ne update çfarëdo është në këtë adresë 12. Ne e bëjmë atë 5. Deri tani dy x dhe yll a janë 5. [00:37:13] Pse është kjo? Sepse adresa e x është 12. Dhe a ka edhe 12 si vlera të saj. Pra, nëse ne ndjekim 12, ne jemi vetëm do të gjeni x. Pra, çdo gjë që ne bëjmë me yll a do të ndodhë për x, sepse një përmban adresën e x. OK? [00:37:34] Dhe kjo është si thelbi i fix. Deri tani, ne jemi në gjendje, nga të pesë, në fakt kujtesë që jetonin në kryesore. Pra, kjo memorie nuk jetojnë në të pesë, si më parë, kjo adresa 12. Dhe ne kemi qenë në gjendje për të shkuar atje dhe për të ndryshuar vlerën e saj për 5. [00:37:50] Dhe pastaj kur të kthehemi, ne harrojmë për një. Ne harrojmë për një yll. Dhe x është ende pesë. Pra, nëse ju doni të zbatojë një funksion swap, ju vetëm do të bëjë të njëjtën gjë e saktë, përveç ju duhet të int yjet këtu, dhe kështu me radhë e kështu me radhë. OK? A jemi të mirë? Ftohtë. [00:38:10] Pra treguesin aritmetike. Kjo është një temë pak e ndërlikuar. Pra, rezulton se pointers janë vetëm integers. Ju mund të mendoni për to si të integers. Sepse në kujtim, ju keni si memorie adresë zero, një, dy, tre, katër, pesë. Pra, ne mund të përmbledhim adresat kujtesës. [00:38:23] Dhe kjo është ajo që ju zakonisht bëni kur ju jeni në dhe array, për shembull. Një grup është vetëm si një i afërt bllok i kujtesës, e shumë gërma, për shembull, shumë ints. Pra, nëse ju doni të shkoni në dytë int ose int tretë, ju vetëm mund të përmbledhur diçka për të parë adresa, dhe ju do të jeni për të arritur atje. Pra, kjo është me të vërtetë e dobishme për atë. [00:38:39] Dhe gjëja për të mbajtur në mend, megjithatë, është se ajo nuk është vetëm si aritmetike normal në kuptimin se në qoftë se ju jeni që kanë të bëjnë me të, të themi, një yll int, dhe ju shtoni 1 të tij, atëherë ju nuk do të jeni për të shtuar 1 në adresën, ju jeni duke shkuar për të shtuar 4 në adresën. Sepse një int është 4 bytes. [00:38:57] Pra, kjo është vetëm si duke ecur mbi një rrjet. Në qoftë se ne kemi një rrjet të shumë ints dhe atëherë ne përpiqemi për të shkuar në një të dytë, kjo është në thelb vetëm mbledhur adresa e një të parë plus 1. Por kjo nuk do të be-- vetëm le të themi se adresa e të parit është 4. Këtu, në këtë rast. Dhe në qoftë se ne të përmbledhur, kështu që kjo është ajo që po ndodh. Ne kemi një int. Int x është e barabartë me 5. X ka një vlerë 5. Dhe ne nisja këtë tregues, int y yll int y barabartë adresën e x. [00:39:31] Le të supozojmë adresa e x eshte 4. Çfarë do të ndodhë Tani në qoftë se unë shuma shtoni 1 me y? Kjo do të vërtetë Shuma 4 në vend të vetëm 1. Kështu që unë të shtoni një 1, por ajo në të vërtetë shtoi 4, sepse kompjuteri e zgjuar. Pra, kjo do të vërtetë të shtuar nga unë herë madhësia e llojit të pointer. OK? [00:39:58] Pra, në qoftë se ajo ishte një char, për shembull, në qoftë se kjo ishte një yll y char, dhe në qoftë se kemi shtuar 1, atëherë kjo do të të jetë 5, sepse char është 1 bajt gjatë. Mirë? [00:40:10] Dhe më në fund, ne kemi marrë për të pointers dhe vargjeve. Ajo rezulton se çdo kohë ju jeni që kanë të bëjnë me një grup, ju jeni në të vërtetë që kanë të bëjnë me një akrep. Arsyeja very nice konceptuale për kjo është se vargjeve janë shumë të mëdha. Pra, mos harroni që të thashë se çdo herë që ju të kalojë gjëra përreth, ju kopjoni çdo gjë. Pra, nëse ju keni një koleksion kjo është me të vërtetë, të vërtetë të madhe, ju të vërtetë nuk duan të kopjoni çdo gjë në çdo kohë ju të kalojë atë rreth në tjetrin funksion, sepse kjo është vetëm shuma masive të punës. Pra, çfarë ju bëni është vetëm e kaluara adresën e bajt parë. Dhe pastaj funksioni do të ketë qasje të gjitha elementet në atë rrjet. Pra, ju keni kaluar array me adresën e saj, kështu adresën e bajt parë. [00:40:48] Pra, nëse ne deklarojmë int array 3, ketu, ne e dimë si për të hyrë në elementin e parë duke përdorur simbol kllapa. Nëse ju kujtohet kllapa simbol, array kllapa 0 është e barabartë me 1. E pra, kjo do të jetë pikërisht njëjtë si thjesht shkoni atje dhe të vënë 1. OK, është saktësisht e njëjta gjë. Pra, simbol i kllapave në këtu do të jetë i njëjtë me këtë linjë. [00:41:13] Dhe me mend se çfarë simbol kllapa për array kllapa 1 do të jetë? Ajo do të jetë vetëm e njëjta gjë si kjo. Pra, shtoni një në rrjet. Leviz një së bashku me kujtesën. Shkoni atje, dhe të vënë një 2. OK? Dhe kjo linjë është e njëjta gjë. Ne duam që të shkojnë të tretë kuti, kështu array plus 2. Shkoni atje, dhe të vënë një 3. Pra në kujtesë, çfarë është do të ndodhë është që ne jemi do të kenë 1, 2 dhe 3 si Tre elementet e këtij koleksioni. [00:41:44] Ne mund të kemi bërë këtë duke përdorur simbol tonë të njohur kllapa. Unë vetëm dua që ju djema të dini se ata janë e njëjta gjë. OK, pyetje në lidhje me këtë? E bukur. Tani, unë jam duke shkuar për të dorëzuar ajo mbi Anës, [00:41:59] HANNAH: Yay, Yee-mëdyshje. [00:42:00] Binky: Duke folur për kujtesës dhe sende neni. [Duartrokitje] [00:42:06] HANNAH: Hi, cool, kështu që ne jemi do të flasim pak më shumë për kujtesën, të cilat ne vetëm drejtuar duke përdorur pointers. Pra, ka dy pjesë kryesore të kujtesës që ne jemi të shqetësuar me të. Ne kemi rafte, e cila rritet deri në fund, dhe tok, e cila shkon poshtë nga maja. Dhe rafte do të mbajë të gjitha variablave të shkallës tona. Pra, çdo thirrje për një funksion merr korniza e vet të vogël në rafte. Pra, siç u përmend më herët Gabe, në qoftë se ne telefononi funksionin përsëri dhe përsëri, ne jemi duke shkuar për rafte gjërat deri në rafte. [00:42:35] Dhe në mënyrë të ngjashme, tog, e cila fillon në krye do të mbajë të gjitha të kujtesës që ne dinamike ndajë. Dhe kështu që ne dinamike përgatitja e kujtesës, kjo do të zbresë në drejtim të poshtme. Disa gjëra të jetë i vetëdijshëm kur ne jemi duke përdorur rafte dhe tog me ta, me rafte, në qoftë se ne kemi shumë many-- le say-- thirrje gjithkund rekursive, dhe ne jemi duke e quajtur një funksion përsëri, dhe përsëri, dhe përsëri, dhe përsëri, dhe kjo është stacking up, stacking up, stacking up. Dhe ajo do të rrëzimit në grumbull. Ne jemi duke shkuar për të dalë jashtë kujtesës. Kjo do të shkaktojë një problem për kompjuter. Dhe kjo quhet overflow rafte. Pra, kjo është patjetër diçka që ju duhet të jenë të vetëdijshëm dhe të përpiqet të shmangë. Dhe grumbull, duhet të mbani mend për të mos rastësisht rrjedhje kujtesës. Çdo herë që ju përdorni malloc, nuk harroni të këtë kujtesë. Përndryshe, ai vetëm do të të jetë në grumbull tretur, dhe kompjuteri nuk do të dinë se ajo është e lirë të përdorin atë kujtesës. Pra, këto janë disa gjëra të jenë shumë të kujdesshëm me të, kur ju jeni që kanë të bëjnë me rafte dhe tog. Çdo pyetje me këtë? Awesome. [00:43:31] OK, cool. Pra, ky lloj ka të njëjtën Ideja që del nga shtrati rafte, ku ne jemi duke shkuar përtej kufijtë e asaj kujtesës po ne jemi duke menduar që të jetë në gjendje të përdorin. Pra, të marrë, për shembull, një tampon, ose ju mund të mendojnë vetëm për atë si një grup. Dhe ne i thamë, OK, ne jemi duke shkuar për krijuar këtë grup të bukur pak. Ajo do të jetë një string. Ose ajo do të ruajtur karaktere. Dhe kjo është vetëm duke shkuar për të thonë hello. Dhe kjo është e papërcaktuar. Kjo ishte. [00:43:53] Por në qoftë se unë ishin dikush të keqen dhe të kërkuar për të bëjë diçka të keqe me këtë grup, çfarë Unë mund të bëni është që të përpiqen për të shkruar kaluara në fund të vargut. Dhe si ju do të shihni, nëse Unë shkruaj aq larg sa, Unë në fakt mund të ndikojë adresa e kthimit. Dhe në qoftë se unë të fillojë të ndikojë adresa e kthimit, Unë ndikojnë si program të vërtetë shkon. Dhe në vend të kthimit, ju e dini, një varg të lumtur si hello, unë mund të bëjë diçka të keqe, si të shkojnë në diku tjetër në kompjuterin tuaj, ende kujtesës, për të ndryshuar atë, çdo gjë që unë dua të bëj. Pra, kjo është ajo që kjo do të duken si është në qoftë se unë vetëm lloj mbushur atë me vlerë të rastit mbeturinave, në këtë rast, vetëm a. Dhe atëherë kur unë në fakt mori në adresën e kujtesës, Unë fillova të plotësojë atë me diçka që e bëri atë që kam kërkuar që ajo të bëjë. Çdo pyetje me buffer overflow? Awesome, e drejta fluturon me anë të këtij stuff. [00:44:40] OK, kështu që ne kemi biseduar shumë në lidhje me treguesin e me Gabe. Si nuk kemi të vërtetë të marrë një akrep? Si mund të marrim një adresë në kujtesën? E pra, ne mund të përdorni këtë këndshme funksion thirrja malloc, e cila do të marrë një pak copë e kujtesës, veçanërisht në grumbull, siç kemi diskutuar, dhe ajo do të ju kthej a treguesin në atë adresë në kujtesën. Dhe argumenti që ne duhet t'i japë malloc është se sa shumë hapësirë ​​në memorie ne duam. [00:45:04] Kështu që ju mund të shihni madhësinë në bajt. Le të themi, për shembull, ose në të vërtetë, në këtë shembull, ne ndajë mjaftueshme hapësirë ​​për 10 integers. Pra, ndoshta ajo që ne jemi duke shkuar për të duan për të vënë këtu është një grup prej 10 integers. Kështu që ne t'i jepte madhësinë e ints, i cili Ne kemi mësuar ishte se si shumë bytes? STUDENT: 4. HANNAH: 4, e bukur, dhe ne duan 10 e atyre në një rresht, kështu që ne kemi hapësirë ​​të mjaftueshme për të ruajtur të gjitha 10 integers, në këtë rast. Diçka super të rëndësishme, çdo kohë që ju e quani malloc, ju duhet të kontrolloni për të null. Nëse ju nuk e kontrolloni for null, mirë, malloc në qoftë se ajo shkon jashtë hapësirës dhe mund të ju jap më asnjë më shumë memorie, ajo do të kthehet null. Pra, nëse ju nuk e shikoni, malloc mund të kthehen null. Dhe pastaj, nëse ne përpiqemi të dereference një akrep pavlefshëm, ne jemi duke shkuar për të marrë një defekt segmentimit, të cilat ne do të flasim për të drejtën tani. Awesome. [00:45:56] OK, pyetje me malloc? Po? [00:46:00] STUDENTORE: A kontrolluar null [Padëgjueshme] nuk e bëjmë atë në quiz? [00:46:05] HANNAH: Sigurisht, pyetja ishte e bën atë të matter-- në quiz, do të merrni pikë off nëse ju nuk e shikoni for null? Po, ju do të merrni pikë off në qoftë se ju nuk e shikoni for null. Çdo herë që ju e quani malloc, si në quiz dhe psets tuaj dhe në jetën e vërtetë, ju duhet të kontrolloni për të null. Pyetje e mirë. [00:46:18] Gabe: Çka nëse unë nuk do të të lirë? HANNAH: Gabe dëshiron të dijë çka nëse ne nuk e bëjmë falas. Atëherë ne do të kemi një rrjedhje kujtesës në grumbull tonë. Çdo pyetje të tjera? Po? [00:46:27] STUDENT: Mund you-- shkojnë mbi tampon del nga shtrati vërtetë të shpejtë përsëri? [00:46:30] HANNAH: Sigurisht. Pyetja u mund të shkojë mbi tampon del nga shtrati me të vërtetë të shpejtë. Le të kthehemi në ato slides. Pra, një tampon, ju mund vetëm të të mendojnë për atë si një grup, e drejtë? Ju keni disa hapësirë ​​në memorie. Dhe kur ne së pari të krijojë rrjet tonë, ne e dimë vargjeve kemi caktuar madhësinë, ose tampon tonë ka një madhësi të caktuar. [00:46:45] Pra, le të themi në këtë rast, ne kemi vetëm hapësirë ​​të mjaftueshme për të shkruar vargun përshëndetje. Nëse shkojmë kaluara se lidhur, në qoftë se ne do të shkojmë kaluara ajo array tonë kemi thënë se mund të mbajë, ne fakt mund të fillojë shkrim në kujtesë se kompjuteri nuk na duan të shkruajnë në. Dhe në mënyrë të veçantë, në qoftë se ne e goditi diçka si kthim adresuar të funksionit, i cili, si çdo pjesë tjetër e kujtesës, është vetëm diku në tuaj kompjuter, ju mund të vërtetë ndryshojë atë dhe të fillojnë të bëjnë gjëra të këqija. Përgjigjem pyetjes tuaj? Tmerrshëm, çdo gjë tjetër? Po? [00:47:17] STUDENT: Pra, rafte [padëgjueshme], ju tha të shkojë nga poshtë lart. Brenda rrezes rafte, bën kujtesës shkojnë nga, si, krye poshtë i përkasin çdo pushim? [00:47:28] HANNAH: Si you-- shtyjë të Rob në këtë një të tillë. [00:47:35] Rob: Ajo do të rritet në të njëjtin drejtim si rafte rritet. HANNAH: OK. Rob: Kështu që unë të marrë hutuar. Kjo do të jetë abstraksion. HANNAH: OK. Rob: Kjo është e saktë. Pra, nëse rafte është në rritje up, atëherë generally-- atë nuk duhet të jetë si kjo. por ju mund të deklarojë int x. Pastaj ju deklaroj y int. Pastaj int x do të jetë në përgjithësi më të ulët në rafte se y int. Por kjo është vetëm një fakt. Kjo nuk është si një gjë e rëndësishme farë. [00:48:02] Rob: Pra pyetja përsëri ishte vetëm çfarë ndodh çdo frame ndërton. Pra, çdo funksion merr a pak copë rafte. Dhe si ju shkoni lart, në atë pak pjesë, në atë kuadër, ne do të themi se variablat brenda kësaj kornize të lëvizë lart. Pyetje? [00:48:17] Rob: Vetëm të jetë në mic. HANNAH: Oh, po. Rob: Unë do të flas në ju. HANNAH: Oh, yeah, OK. Rob: Përjashtim është për vargjeve dhe structs, ku vargjeve, një më të ulët Indeksi në grup, dhe në structs në larta fushë në structs janë të garantuara të jenë në adresat më të ulët se një vlerë të mëvonshme në rrjet. Pra, ata që janë të garantuara. Por çdo variabla të veçantë brenda, si int x dhe int y brenda një funksion, nuk ka marrëdhënie të nevojshme mes adresat e tyre. HANNAH: Një pyetje këtu? STUDENT: Pra, në tampon Fluksi, vetëm buffer overflow ndodhur vetëm kur ju kanë, si, të caktuar një sasi e një grup atëherë që është më e madhe? Si, mund të ju? Pra, nëse ju jeni duke kërkuar për diçka nga user-- [00:49:05] HANNAH: Mm-HM. STUDENTORE: A mund që me forcë ju jap diçka prapa kjo është më e madhe se çdo gjë ju keni ndarë për ta? HANNAH: Sigurisht, në mënyrë që Pyetja ishte në thelb, mund të ju jap përdoruesit më shumë se ju kërkoni? STUDENT: Po. HANNAH: E pra, ju mund të parandaluar përdoruesit të bëjnë këtë. Ju mund të thoni në mënyrë specifike nuk më jepni më shumë se x numri nga bytes Unë ju kam dhënë vetëm vend për x numri nga bytes, x numrin e karaktereve. Pra, kjo është diçka që ju doni të parandaluar. Po? Cili është dallimi në mes rafte del nga shtrati dhe tampon del nga shtrati? [00:49:30] HANNAH: OK, kështu rafte overflow-- oh, çfarë është dallimi në mes rafte del nga shtrati tampon del nga shtrati dhe? Pra, ne duam të mendojmë për overflow rafte ndodh kur ne jemi në të vërtetë stacking up këto thirrje funksion. Le të thonë se ju keni një funksion gjithkund rekursive, sepse ne e dimë se çdo herë që thërrasë një funksion, është e merr kornizë e vet në rafte. [00:49:45] Pra, ne rafte shumë të lartë, dhe atëherë ne fillojmë të fryhen. Dhe ne i përdorim shumë memorie, dhe ne nuk kemi lënë kudo. Ne kemi marrë atë gabim. [00:49:51] Buffer overflow është brenda një programi. Ne duam nuk mund domosdoshmërisht të ketë dalë jashtë kujtesës në të njëjtën mënyrë që ne të mund në qoftë se ne jemi stacking up kaq shumë thirrje funksion, por kemi shkruar e kaluara e kujtesës që ne e dimë që ne mund të përdorim. Dhe kjo na lejon të bëjmë gjëra të këqija. Vërtet? [00:50:08] Rob: Po, ju mund të dëshironi për të përsëritur vetëm këtë, por ju mund të mendoni i del nga shtrati rafte si si një lloji të veçantë i buffer overflow. Ose ju vetëm mendoni për tuaj rafte si një tampon të vërtetë të madhe. Pastaj, kur ju del nga shtrati ju rafte, kjo është lloj i si një tampon del nga shtrati. Por a del nga shtrati pirg është vetëm një term specifik përdoret kur rafte vetë përplot. [00:50:24] HANNAH: E drejta, në mënyrë që të të përsëritur për video, ajo që ju mund të mendoni për rafte overflow si një lloj specifik i buffer overflow. Ftohtë? Çdo pyetje më shumë para se të shkojnë në? Awesome. [00:50:37] OK, cool, kështu që le të flasim për disa mesazhe të përbashkëta gabimit. Kjo është diçka që ka treguar deri në kuize të shumta, kështu diçka që është e vlefshme duke marrë një vështrim të dytë në. Unë jam i sigurt që ju keni hasur të paktën disa nga këto si ju jeni duke bërë problemi juaj përcakton. Pra, sigurohuni që ju mund të bisedoni rreth tyre në quiz. [00:50:50] Pra, e para është a faji segmentimit. Dhe kjo është çdo herë që përpiqen për të hyrë në kujtesën se ne nuk jemi të lejuar për të hyrë. Pra, ju migh keni parë këtë, për shembull, në Breakout. Nëse zbuluar përplasje null kthehen, dhe pastaj ju u përpoq për të bërë diçka me atë vlerë null, kompjuteri do të japë ju a faji segmentimit. Pra, një, një gjë e rëndësishme për të të bëni në mënyrë që të përpiqen për të shmangur këtë është që të kontrolloni gjithmonë for null. [00:51:13] Ju mund të keni parë edhe Deklarata implicit i funksionit. Pra, kjo është ajo që ndodh kur Allison ju tregoi sa kemi bërë një prototip, të drejtë? Pra, le të thonë se ne kemi disa funksion që ne define. Le të thonë kubike. Dhe kjo shkon në fund e funksionit tonë, nën kryesore. [00:51:27] Nëse ne të harrojmë për të treguar në lidhje me kompjuterin kubike, kur kryesor përpiqet për të thirrur kubike, kompjuter do të jetë, si, oh my gosh. Unë nuk kam asnjë ide se çfarë do të thotë. Unë nuk e di se çfarë të bëni, këtu. Kështu prototip thotë mos u bëni merak. Unë jam duke shkuar për të ju them. [00:51:42] Ajo do të vijë. Mos bërtas në mua. Mos jepni një implicit Deklarata e funksionit. Pra, nëse ju merrni këtë gabim, një gjë që ju jeni do të dëshironi të bëni është sigurohuni që ju keni prototip tuaj. OK? [00:51:53] Dhe e fundit por jo më pak, Identifikuesi pashpallur është në thelb, kur ju përpiqeni të përdorni një variabël që nuk e kanë deklaruar. Pra, të gjithë një e papritur ju filloni duke thënë se si n plus plus. Dhe kompjuteri thotë se çfarë është n? Ju kurrë nuk më tha n ishte një gjë. [00:52:06] Pra, një gjë që ju duhet të bëni të sigurtë që ju ka është tregoni kompjuter se çfarë n është. Kështu për shembull, n mund të jetë një numër të plotë. Dhe pastaj ju do të shmangur këtë gabim. Çdo pyetje mbi gabime të zakonshme? Po? [00:52:17] STUDENT: Për implicit Deklarata e funksionit, mund gjithashtu të jetë që ju të lënë pas dore një e bibliotekave që ju është dashur për të përfshirë, në vend se prototip? [00:52:24] HANNAH: E drejta, në mënyrë që Pyetja ishte, mund të ju të merrni këtë gabim, nëse ju harruar të përfshijë një bibliotekë. [00:52:28] STUDENT: Po. [00:52:29] HANNAH: Absolutisht, sepse në të njëjtën mënyrë që ne duam të vënë prototypes tonë para funksion kryesor, në qoftë se ne kemi një bibliotekë, ata që po shkojnë në thelb përfshijnë prototipe, përfshijnë përkufizimet e funksioneve. Pyetja e madhe. [00:52:40] STUDENT: Për një segmentimi faji, do që të të ndodhë në qoftë se ne, si, u përpoq për të hyrë në një ndryshore, si, në një [e padëgjueshme] të ndryshme se sa është deklaruar në? HANNAH: Sigurisht, kështu që do të kemi merrni një defekt segmentimit në qoftë se ne u përpoq për të hyrë në një ndryshueshme jashtë fushës? A ishte kjo një pyetje? STUDENT: Po. HANNAH: Beautiful. Pra ndoshta, ju jeni do të merrni një error padeklaruar identifikues vend. Pra, kjo është vetëm do të thonë Unë nuk e di se çka është. Cool, çdo gjë tjetër? Po, OK, e bukur. [00:53:10] Të gjitha Righty, kështu recursion. Kështu që unë përmenda nja dy herë që ne të mund të merrni një overflow rafte sepse ne jemi duke bërë thirrje tonë funksion gjithkund rekursive kaq shumë herë. Ne jemi duke marrë të gjitha këto rafte korniza, blah, blah, blah. Çfarë është edhe një funksion gjithkund rekursive? E pra, një funksion gjithkund rekursive është çdo funksion që e quan veten. [00:53:26] Disa gjëra të jetë i vetëdijshëm kur ju janë zbatuar funksion gjithkund rekursive, mos harroni që të përfshijë një rast bazë. Një rast është bazë Pika në të cilën ne fund. Kështu, për shembull, në qoftë se ne jemi kodim, , Thonë, Fibonacci rekurzive, ne duam të sigurohemi se kur ne të merrni me 0 ose numri i parë Fibonacci, këto dy numra kanë këto raste, për shkak se ata nuk janë të varur për gjërat që erdhi para. Ata që kanë vlerat e tyre. [00:53:51] Disa pro të recursion, e cila është një Pyetja që ne kemi parë në kuize kaluara. Ata mund të çojë në më shumë konciz, kodin elegant. Dhe një shumë të funksioneve, një Shumë algoritme të ndryshme, në fakt hua veten e tyre për recursion. Përkufizimi i tyre mund të jetë rekursive në vetvete. Pra, Fibonacci është një. Faktoriale është një. Merge lloj të thotë one-- gjitha gjërat që ju mund të shikoni në. OK, ndonjë pyetje? Po? [00:54:15] STUDENTORE: A është një rast qoshe të ngjashme me një rast bazë? Apo është se për disa të tjera lloj [padëgjueshme]? [00:54:22] HANNAH: Sigurisht, kështu që një Rasti qoshe është kaq any-- është rasti qoshe njëjtë si rasti bazë? Një rast qoshe është asgjë se juaj Kodi mund të sillen pak ndryshe. Rasti bazë është lloj i lidhur me ne se ata janë si raste të veçanta që ju dëshironi të shikoni në. Por ideja e një rast bazë është se ju doni funksionin tuaj rekursive për të ndaluar në një pikë. Ajo nuk mund të mbani duke e quajtur veten përgjithmonë. Ajo ka nevojë për të ndaluar në një pikë. [00:54:49] Rob: Po, shpesh, raste tuaj bazë mund të jenë shembuj të bazave qoshe. [00:54:53] HANNAH: E drejta, cool, çdo gjë? [00:54:55] STUDENTORE: A mund të shpjegoni bazon pak më shumë? Unë nuk e kuptoj fare [Padëgjueshme] raste bazë. [00:55:01] HANNAH: Nga rastet bazë? [00:55:02] STUDENT: raste Base, vërtet. [00:55:03] HANNAH: Oh yeah, i sigurt. Le të shohim. A kemi të shkruaj këtu? Po, ne e bëjmë. OK, kështu që me të vërtetë të shpejtë, unë do të përpiqen për të shkruar mjaft e madhe kështu që ju mund të shihni në ekran. Le të flasim në lidhje me, të vërtetë shpejt, Fibonacci. Kështu që unë do të ju jap sekuenca Fibonacci. Ju mund të kërkoni përkufizimin. [00:55:17] Thelb, secili numër në sekuencën është shuma e dy numrave të mëparshme. OK, kështu që rruga që unë vetëm përshkruar Fibonacci, ju mund të dëgjoni recursion, e drejtë? Kur kam thënë çdo numër është shuma e dy numrave të mëparshme, ne mund të themi OK. Well, Fibonacci n number-- kështu le të thonë se ne e kemi këtë funksion quajtur gënjej fib-- të n do të jetë e barabartë me gënjeshtër e n minus 1 plus-- keq, ne do të shkojnë për në vijën e ardhshme mbi FIB here-- e n minus 2. [00:55:52] OK, kështu që ky punon e madhe në qoftë se ju jeni duke kërkuar në, për shembull, zero, një, dy, tre, katër, Numri i pestë Fibonacci, ku ju mund të them se 5 është e barabartë me 2 plus 3. Por, çfarë nëse ju jeni në fillim? Çfarë ndodh nëse ju jeni vetëm duke goditur këto dy vlera të parë? [00:56:08] Për të marrë këtë 1, ju nuk mund të thonë shtoni dy e mëparshme, për shkak se zero and-- unë nuk e di. Pra, në një pikë, ne kemi nevojë për të ndaluar. Në një moment, ne duhet të themi se këto dy vetëm kanë përkufizimet e tyre. Numri 0 Fibonacci është 0. Dhe numri i parë Fibonacci është 1. [00:56:26] Kështu që rruga që unë mund të kodit këtë, unë tha nëse n është më pak se dy, atëherë vetëm kthehen n. Dhe kjo do të jetë rasti im bazë. Kjo është se si unë e di për të ndaluar me një funksion gjithkund rekursive. A është kjo e qartë? Awesome. Çdo gjë tjetër në recursion? Beautiful. [00:56:45] Le të shpejt të flasim për kërko dhe herë drejtuar lloj. Dhe atëherë unë do të jap disa Davin Koha për të folur në lidhje me kodim shembuj. Kështu që këtu janë kërkimi kryesore dhe llojet që ju duhet të dini rreth. Guarantee-- Unë nuk mund të garantojë, sepse unë nuk e kam parë quiz-- por kjo vjen deri quiz pas quiz pas lënë. Pra, patjetër të përdorni këtë tabelë. Ashtu si, marrë këtë tabelë. Vënë atë mbi mashtrojnë fletë tuaj. Ju do të jetë një person i lumtur. [00:57:09] Kjo na tregon herë të kandidojë e secilit këto renditje dhe kërkimit algoritme. Pra kërkim linear, ju mund të shihni të kandidojë kohë, dhe njëjtë me kërkimin binar. Go mbi çfarë këto algoritme të bëjë, ide të përgjithshme. Shikoni në një pseudokod, nëse jo kodin vetë. [00:57:25] Ju do të shihni se ka një lloj flluskë a sipërme lidhur në rastin më të keq të n katror. Pra, nëse array tonë ishte krejtësisht prapa para se ne donim ta zgjidhur atë, ne do të thonë se kjo është e do të marrin hapa ne katror n. Por, në rastin më të mirë, kështu që ulët i detyruar për rastin më të mirë do të jetë në qoftë se është tashmë të renditura në mënyrë të përkryer. Atëherë të gjithë ne duhet të bëni është të kontrolloni se është e renditura. A ka një pyetje këtu? [00:57:47] STUDENT: Kur do të ju doni të përdorni lloj? Lloj. Unë jam vetëm kurioz. [00:57:52] HANNAH: Kur do t'ju dëshironi të shfrytëzoni përzgjedhjes lloj? Kjo? Ai që është katror n në të dyja rastet? [00:57:55] STUDENT: [padëgjueshme]. [00:57:56] HANNAH: Pra, është shumë e ndryshme. Nëse keni specifike kërkesat për programin tuaj, si gjëra të tilla si në qoftë se ne vetëm tha zbatuar një sorry-- search-- zbatuar një lloj, ju do të ndoshta dëshironi të shkoni për një prej atyre që ka një rast të mirë të n, ose një lidhur ulët në rastin e mirë n. Por nuk mund të jetë disa gjëra të tilla si, të themi, Swap-et janë me të vërtetë shtrenjtë për disa arsye. Pastaj ju do të dëshironi të bëni flluskë lloj, sepse ti duhet të bëjnë kaq shumë Swap-et, gjëra të tilla si se. Çdo po other--? [00:58:23] STUDENTORE: A do të jetë [e padëgjueshme] të them se [padëgjueshme]? HANNAH: Kjo është një gjë që do të ju them në qoftë se ju jeni duke kërkuar në zbatim. Mënyrën se si unë do të të vërtetë mendoj se pse është n squared është se ne kemi për të kandiduar nëpërmjet grup tonë të gjatësisë n, çdo kohë duke e bërë më së shumti, n këmbime. Dhe ne duhet ta bëjmë këtë proces n herë. [00:58:46] Pra, kur ju keni për të bërë më së shumti, n Swap-et dhe per n kalon nëpër rrjet, atje do të jetë katror n. Por po, kjo do të zbulohet përmes kësaj dyfishin për lak, si pyetje asked-- ose mbivendosur për lak, unë duhet të them. OK? [00:59:00] Dhe pastaj bashkojë lloj, e cila është lloj më të shpejtë ne tani, ose që ne kemi mbuluar në CS50, e di se algorithm kryesor është kjo ide e thyer në copa të renditura dhe pastaj shkrirjen së bashku këto bit ndahen. Dhe do të merrni të na hyni n log n. Çdo pyetje mbi kërkime dhe llojet para se të kalojë atë? Le të shohim. [00:59:21] Oh, listat lidhura. Na vjen keq, unë kam një temë shumë. OK, awesome, lidhur listat. Problem me vargjeve, ata kanë një madhësi të caktuar. Pra, nëse ju nuk e dini se sa e madhe input juaj do të jetë, ju nuk doni për të krijuar një rrjet. Sepse në qoftë se ne kemi krijuar një array kjo është shumë e vogël, ne mund të kandidojë në tampon del nga shtrati. [00:59:35] Pra, në vend, ne mund të bëjmë diçka me lista të lidhura, të cilat na lejon të kemi një dinamike Struktura e të dhënave sized që do të na lejojë të ruajtur një Shuma më fleksibël e të dhënave. Pra, në çdo nyjë tonë lista e lidhur, ne kemi dy copa. Ne kemi vlerën aktuale që ruan. Pra, kjo është vetëm diçka që ju do të shohin në rrjet, për shembull. Dhe pastaj ne gjithashtu të mbajnë gjurmët e një treguesin për gjë tjetër në kujtesën. [01:00:04] Ndryshe vargjeve, të cilat ne e dimë të gjithë do të be-- elementet array gjithë jemi një pas një tjetër në memory-- lidhur Listat mund të jetë kudo në kujtesën. Ata janë vende arbitrare. Pra, në qoftë se ne ishim të në fakt shkojnë t'i gjeni, ne duhet të mbajnë gjurmët e gjë tjetër në listën tonë. [01:00:19] Dhe pastaj në mënyrë që të dini ku që lista si një e tërë është, të gjithë ne duhet të mbajnë gjurmët e është element i parë në listën tonë të lidhura. Dhe kjo do të na lejojë të ndjekin përmes. [01:00:31] Pra, kjo është se si ju mund të përcaktojë një mënyrë. Kjo është një mundësi e madhe për të përfituar nga structs. Sepse ju e keni këtë ide, gjithashtu, për një nyje të caktuar, unë kam dy copa. Kam vlerën aktuale vetë. Dhe atëherë unë kam një tregues për element tjetër në listë të lidhura. Kështu që ju shihni, ne kemi një numër të plotë n, e cila do të jetë vlera aktuale, dhe pastaj një tregues për një nyje, të quajtur ardhshëm. Kështu që do të jetë e ardhshme element në listën tonë të lidhura. STUDENT: Po? A ju duhet të specifikoni se yll është si një strukturë? [01:01:01] HANNAH: Po, kështu që ky është pothuajse si një lloj, kjo duket si një rekursive definicioni në këtë ne duhet të dini se çfarë është një nyje është brenda për të gjetur një nyje. Që nga ajo nuk ka të vërtetë e di se çfarë një nyje është plotësisht deri sa të kemi në fund të this-- dhe pas kësaj ne vetëm mund ta quajmë një node-- brenda këtij përkufizimi, ne kemi nevojë për të thirrur atë një nyje struct. Pyetja e madhe. Çdo gjë tjetër? Po? [01:01:26] STUDENT: Pse ne kanë për të thënë nyje dy herë? Sepse, kur ishim në [padëgjueshme] ne vetëm kishte për të bërë atë në pikëpresje, por tani ne duhet të gjejmë se nyje struct? [Padëgjueshme]. HANNAH: Kështu që unë besoj se në shembullin e fundit, ne ishim vetëm duke krijuar kurdo që ju donte për të përdorur një student, pasi që, ju kishte për të përdorur e strukturës node-- Unë jam sorry-- nxënësin struct. Kjo na lejohet të, pas faktit, vetëm Përdorimi nyje shtoni një tip të ri, në thelb. Që e bëjnë kuptim? Pra, ne do të kemi për të shkuar mbrapa dhe shikoni në kodin para. Por unë do të mendoj se ne nuk e përdornim typedef. Dhe ne pyetjen, pse nuk kemi nevojë për të përdorur typedef? Typedef na lejon për të shmangur struct fjalë në fillim. Po? STUDENTORE: Çfarë lloj pyetje do të dalë në drejtim në drejtim të nyjet dhe listat e lidhur? [01:02:10] HANNAH: Pra, një gjë është që ne mund të themi se mund të kërkoni nëpër një listë e lidhur? OK, sepse kjo është një pak më e komplikuar se në qoftë se ne jemi në kërkim përmes një rrjet. Ne vetëm mund të shikoni në element zero, element një, dy element, blah, blah, blah. Në qoftë se ne duam që të kërkoni përmes një listë të lidhura, ne do të vërtetë duhet të ndjekin ky labirint pak pointers. Pra, le të shkojë në të vërtetë me këtë shumë shpejt. Ajo që ne mund të bëjmë në urdhërojë to-- le të themi ne duan të vetëm të iterate nëpërmjet listën tonë tërësisht të lidhura. Ne do të fillojë në krye. Dhe pastaj, në mënyrë që të lëvizin në elementin tjetër, në vend të vetëm bën rritjen nga një si ne mund të në shkuar nëpër një rrjet, ne jemi në të vërtetë do të ndiqni treguesin e ardhshëm, kështu që ne mund të gjeni se ku në memorie element tjetër është. Kështu që unë e di se nuk është e mjaftueshme për të të marrë të gjitha këto në të drejtë tani, por ju do të keni këto slides. Kështu që ju mund të shkoni nëpër këtë një pak më ngadalë. Por në thelb, ajo që ne duam të bëni është të ndiqni këto pointers me tërësinë e listës lidhura. Pra, kjo është një pyetje ju mund të kërkohet. [01:03:01] Diçka në njoftim me futje, le të themi ne kemi kërkuar për të vënë një element të ri në pjesën e përparme të listës sonë të lidhura. Ne duhet të jenë shumë të kujdesshëm për rendin në të cilën ne ricaktuar pointers. Sepse, le të thonë se unë vetëm tha OK. Bëni pikë qendrore në këtë element të ri. Vetëm të bëjë atë pikë për 1 Pastaj, ne kemi thelb humbi pjesën tjetër të listës sonë, sepse unë nuk e mbani mend se ku 2 jetën. [01:03:25] Pra, ne duhet të bëjmë në një Urdhri shumë specifike. Së pari, ne kemi bërë të reja Pika element në kokë. Dhe pastaj ne kemi bërë kokën pikë të elementit re. Pra, le të shohim se çka do të duket si me arrows-- vetëm si kjo. Pra, ju së pari duhet të re Pika element në kokë e vjetër. Dhe tani, ne kemi kokën pikë të elementit të parë të re. Çdo pyetje me këtë? [01:03:49] OK këtu është një kod përsëri, diçka të shikojmë pak më vonë. Dhe tani unë do ta kthejnë atë mbi të Davin për GDB dhe pak praktikë coding në letër. Beautiful. [01:04:01] Rob: Dhe Rob. [01:04:01] HANNAH: Oh, Davin dhe Rob. Unë jam i keq. [01:04:03] STUDENT: Woo! [01:04:08] Rob: Faleminderit. [01:04:09] Davin: A doni të thoni çdo gjë të shpejtë të vërtetë? Rob: Po, po. Davin: Sapo jam up. OK, derisa Rob vë mikrofon në, kështu që çfarë është e GDB? Gjithkush duhet të keni parë në GDB klasës dhe gjithashtu në të orarit të punës. Dhe ju duhet të jetë duke e përdorur atë. Pra, çfarë është e GDB? Dikush? [01:04:28] STUDENT: Kjo është një Rregullues. [01:04:29] Davin: Kjo është një Rregullues. Dhe çfarë e bën atë të ju lejojnë të bëni? Si, pse ne si GDB? STUDENT: Për të ngadalësojnë programin. Davin: E drejta, kështu që ju mund të ecin nëpërmjet saj si një ritëm të njeriut. Dhe kështu që çfarë janë disa komandat ju mund të bëni? E pra, ndoshta është pushim komandën tuaj të preferuar. Sepse kjo ju lejon të thyer program dhe në fakt ecin nëpër atë rresht pas rreshti. [01:04:44] Run ju lejon për të drejtuar atë. Tjetra, si shkelën përmes. Çfarë është në mes të ardhshme dhe hap? Prisni, thonë se me zë të lartë. Ajo ishte e saktë. [01:04:54] STUDENT: [padëgjueshme]. [01:04:55] Davin: Po, awesome. Pra si, tjetër dhe hap, nëse you're-- le të thonë se ju keni një funksion që ju përcaktojnë. Le të thonë se disa në funksion tuaj kryesor, dhe ju jeni vetëm goditur e ardhshëm, të ardhshëm, tjetër. Ju jeni në të vërtetë do të ekzekutuar atë funksion, por ju do të jeni të hidhen mbi të. Nëse ju goditi hap, ose s apo çfarëdo, ju jeni do të hidhen në fakt në atë funksion, dhe pastaj ju mund të goditur e ardhshme për të parë telefonatat e ndryshme brenda atë funksion të veçantë. Vërtet? [01:05:16] STUDENTORE: A ka ndonjë mënyrë të kërcejnë, si, nga mbrapa? Davin: Finish, vërtet, të përfundojë me ju hidhen jashtë. Kështu ajo do të përfundojë atë funksion, dhe atëherë ju jeni do të jetë përsëri në kryesore, për shembull. Print do të shtypura it out një herë. Diçka që unë të përdorni përherë është shfaqur. Display do të shtypura it out vazhdimisht gjatë gjithë tërësinë e e programit tuaj. [01:05:32] Për shembull, nëse ju jeni në një lak, dhe ju duan të shohin se si po ndryshon diçka, dhe ju nuk doni të, si, vazhdimisht të bëjnë si të shtypura, print, print, ekran do të shfaq këtë variabël vazhdimisht, çdo herë që goditi Next. Dhe të vazhdojë. Pra GBD, kjo është GDB. [01:05:47] STUDENTORE: Çfarë është një ku ju [padëgjueshme]? Davin: Çfarë është kjo? [01:05:52] STUDENTORE: Çfarë është the-- variablat lokale. Rob: Ka diçka të vërtetë si vendasit apo diçka. I can't-- [01:05:58] Davin: Kjo mund të jetë diçka si kjo, vërtet. [01:05:59] HANNAH: Në vendasit? [01:06:00] Davin: Kjo është ajo. Kjo është një. Rob: Beautiful. [01:06:03] Davin: Po. [01:06:04] STUDENTORE: Çfarë do të vazhdojë të bëjë? [01:06:06] Davin: Ajo continues-- kështu që kjo është vetëm do të vazhdojë programet tuaja. Pra, nëse ju të thyer dhe goditi vazhdojnë, kjo do vetëm të drejtuar këtë program deri në ajo godet atë pushim përsëri. Kështu për shembull, në qoftë se ju theu në një funksion, dhe ju do të jeni për të bërë si për të loop ose diçka të tillë, dhe ju goditi vazhdoni, ajo do të vazhdojnë dhe të kthehemi në atë pushim. Apo nuk ka pushim, ajo do të të vazhdojë dhe të përfundojë programin. [01:06:22] Rob: Pra, vetëm si ndalesa drejtuar në Breakpoint e parë ju goditi, në qoftë se ju pastaj hit të vazhdojë, ai do të mbajë shkuar deri sa është Breakpoint ardhshme. Dhe pastaj do të vazhdojë në Breakpoint tjetër. Davin: Çdo pyetje të tjera në GDB? Kështu që unë mendoj se në të kaluarën, ne kemi pyetur se çfarë GDB është dhe të japë një shembull disa gjëra që ju mund të bëjë me GDB, kështu thjeshtë të vërtetë, por të vërtet. Nuk ju shkoni. Dhe nyje? [01:06:43] Rob: Po, kështu cilin drejtim ishte ajo? STUDENT: Kjo ishte ajo. Davin: Prisni. Rob: Ky djalosh? Davin: Se një. Rob: Ky djalosh, oh, unë nuk e kuptojnë. Pra, ne nuk ishin të qarta në atë the-- unë nuk bëj e di se kush was-- por pyetja. Ne nuk e dimë saktësisht se çfarë ju janë pyetur në lidhje me të, kështu që vetëm për të sqaruar diçka. Pra, së pari, siç kam thënë më parë, typedef ju jeni gjithmonë duke përdorur vetëm të krijojë një pseudonim për një lloj. Pra këtu, pseudonimi jemi krijimi është për këtë lloj struct nyje. [01:07:13] Pra, së pari, duke injoruar këtë nyje në typedef, kështu që kjo nyje struct kaçurrel shtrëngoj poshtë për kaçurrel tjetër mbajtëse është lloji nyje struct. Dhe ne kemi nevojë për atë nyje deri atje, sepse ne nevojë për referencë nyje këtu. Pra, me këtë lloj të struct rekursive, ju duhet të jepni këtë struct një emër, ose ndryshe ju nuk mund thonë nyje struct këtu. Ndërsa më parë me nxënësin kur ne ishin të shtypur, unë mendoj, ne nuk kemi për të thënë studenti deri atje, sepse ne nuk kanë për të thënë e strukturës studenti brenda struct vetë. Pra, kjo është se gjithkund rekursive detyron ne që të themi nyje atje. [01:07:43] Kjo nyjë është vetëm emri që ne jemi duke i dhënë nyjë për typedef. Kështu që nuk është nyjë njëjtë si atë nyje. Por kjo nyje struct është njëjtë si atë nyje struct. Davin: Pra, sa herë që ju e quani, si, nyje në funksion tuaj kryesor, ju nuk do të jeni të kanë për të thënë nyje struct. Ju mund të them vetëm nyje, për shkak se Nyja është një different-- është në thelb ju jeni duke thënë, OK. Në vend të që të thërrasë nyje struct në kodin tim, Unë vetëm dua të riemërtoni atë si nyje për ta bërë atë më të lehtë. [01:08:04] Rob: Nëse ju gjithmonë përdorin typedef, atëherë kjo është i vetmi vend që ju jeni do të ketë të deklarojë një ndryshore me nyje struct yll, vërtet. [01:08:14] Davin: OK, kështu që pjesa e fundit është e vështirë për të mësuar because-- Rob: Çfarë? [01:08:24] Davin: Për shkak se ajo është kodimi në letër. Pra, çdo vit, ne kemi Kodi për pyetjet letër. Kështu që unë mendoj se vitin e kaluar, 12 nga 80 pikë ishin kodin në letër. Vit më parë se, 10 nga 80, vit më parë se, 20 nga 100, kështu që mjaft disa prej tyre. Pra, ju jeni do të duhet të jetë në gjendje për kodin këto funksione me dorë. [01:08:40] Kështu që unë i realizuar artistikisht, ne mund të shkojnë përmes një disa prej tyre dhe të shohim se si njerëzit bëjnë, lloj ecin nëpër ato ngadalë me njerëzit. Pra në përgjithësi, strlen dhe atoi kanë qenë shumë të popullarizuara. Vitin e kaluar, unë mendoj se ne kishim GetPositiveInt dhe RandomInt. Por pow, kështu pushtet, edhe një pozitiv too. Le të vetëm të shkojnë nëpër ndoshta një ose dy prej tyre së bashku. Çfarë njerëzit duan të shohin? [01:09:05] STUDENT: Atoi. STUDENT: Po. Davin: Atoi? STUDENT: [padëgjueshme]. Davin: OK, unë jam duke shkuar për të bërë atë në bord. A keni një preferencë në qoftë se unë bëj këtu apo atje? Atje, Gabe thotë atje. [01:09:16] Rob: Dhe kjo është e mendimet e përgjithshme në këto pyetje coding. Mundohuni të shkruani diçka. A nuk e lënë atë bosh. [01:09:22] Davin: Po. Rob: Në qoftë se ju mund të merrni kthehen lloji i saktë, apo ndoshta ne mund të japin atë ju, por në qoftë se ju mund të, si, shkruani nënshkrim përgjithshme funksionin, Nëse ju mund të merrni lëndët bazë saktë, ose raste qoshe, ose duke kujtuar kontrolloni for null, për aq kohë sa ju keni disa gjërat, atëherë ndoshta ne mund të ju jap një çift tregon për problemin. A nuk e lënë vetëm atë bosh. [01:09:36] Davin: Po, dhe në qoftë se ju janë vetëm krejtësisht stumped se si të në të vërtetë kthehet në kodin. Nëse ju shkruani pseudokod, kjo është shumë e shumë e mirë. Pra, kjo është si, kjo është një pyetje e gjashtë pikë, dhe ju shkruani pseudokod saktë, ju do të merrni të paktën dy pika. Pra, nuk do të lënë vetëm ato bosh. Mundohuni të vënë diçka. [01:09:50] Rob: Ajo duhet të jetë pseudokod saktë, edhe pse. [01:09:51] Davin: Po. Rob: Pra, ne jemi në përgjithësi janë më pak të butë me bugs në pseudokod. Davin: OK, kështu që ju djema donin të shihnin atoi. OK, kështu që vetëm really-- kështu që ajo që ju doni të bëni është që ju jeni do të jetë duke pasur parasysh një lloj numri. Por ky numër nuk është i do të jetë një int, e drejtë? Çfarë është ajo do të jetë? [01:10:08] STUDENT: [padëgjueshme]. [01:10:09] Davin: Ajo do të jetë një varg, e drejtë? Pra, nëse ju janë dhënë a string-- le say-- [01:10:13] Rob: A duhet të tërheqë deri në një redaktor? Unë mund të tërheqë up-- [01:10:16] Davin: Oh, ju doni të bëni atë on-- [01:10:16] Rob: Do të preferonit të bordit? [01:10:17] Davin: Çfarë doni të bëni? Unë do të thotë, ju doni të bëni atë me dorë? Apo ju doni të bëni atë nga kompjuteri? [01:10:21] Rob: A atë me dorë. [01:10:22] Davin: [qesh] Rob: A atë me dorë. [01:10:23] Davin: OK, kështu që ajo do të jetë e atoi. Pra, çfarë është it-- dua të them, ne do të ndoshta jap këtë për ju. Por çfarë është ajo do të kthehet? [01:10:29] STUDENT: Int. [01:10:29] Davin: Ajo do të kthehen int, e drejtë? So-- Unë nuk dua të bëj atë atje. Unë do të bëj këtu. [01:10:34] Rob: Ju mund ta tërheqë atë poshtë dhe pastaj të shtyjë deri në atë. [01:10:38] Davin: po. [Qesh] ndryshim lojë. OK, kështu që do të jetë atoi int, dhe çfarë është ajo do të marrë? Një yll char, kështu që vetëm një string, yll s, si kjo. [01:10:57] Rob: bukur yll, e bukur. Davin: Kjo nuk mund të jetë atje, OK. Rob: Po. Davin: OK, kështu pare gjë që ju doni të do-- I nuk e di nëse dikush shikuar në praktikë të solutions-- por çfarë ju do të jeni të dëshironi të bëni është që ju jeni do të duan të kenë një lak, sepse ju jeni do të duan të vërtetë hap nëpër këtë varg. Pra helpful-- kështu që le të themi ne jemi duke shkuar për një për lak, dhe ne jemi duke shkuar për të rritur nëpër çdo element i vargut. Sa kohë është kjo? Sa herë po shkojmë të iterate në atë për lak? STUDENT: Sterln? Davin: Sterln, vërtet. Pra, le të thonë se gjatësia e int barabartë sterln s. Dhe vetëm kurioz, pse është gjithmonë i sjellshëm e mirë për të bërë këtë jashtë sythe? Si, pse është e mirë për të thirrur ky funksion jashtë një lak? Vetëm një mendje e shëndoshë të shpejtë të shikoni? Vërtet? STUDENT: Pra ju nuk e bëni duhet ta mbani kontrolluar atë. Ju mund thjesht [padëgjueshme]. [01:11:59] Davin: Pikërisht, kështu vërtet, pikërisht ajo që tha ajo. Pra, ne nuk duhet të mbani kontrolluar atë. Kështu për shembull, në qoftë se unë jam duke bërë thirrje ky funksion brenda një lak, atëherë unë jam duke shkuar për të mbajtur thirrje ky funksion shumë herë. Dhe kjo do të ulet efikasitetin e programit tuaj. Pra, ajo është gjithmonë e dobishme ta deklarojë atë jashtë. [01:12:12] Rob: Kjo është thënë në ndonjë nga këto probleme, pretty much për aq kohë sa ju të merrni një zgjidhje të punës, që ju të merrni kredi të plotë. Pra, mos u bëni merak nëse dizajni juaj është absolutisht e tmerrshme. Ajo mund të na bëjnë të mërzitur lexuar kodin tuaj. Por, për sa kohë që ajo punon, ju do të merrni pikë. [01:12:28] Davin: Po. OK, kështu që atëherë që unë jam duke shkuar për deklarojnë disa ndryshore. Është vetëm do të thërrasë shumë int. Dhe unë jam duke shkuar për të vendosur këtë barabarte me zero, ashtu. Dhe kjo është vetëm do të jetë një placeholder. Kështu që do të jetë ajo që unë jam duke shkuar për t'u kthyer. Kështu që unë jam duke shkuar për në fund shumën e të kthehen nga ky program. Pra, unë kam këto dy variablave. I kanë gjatësi. Unë kam shumë. Dhe tani le të kërcejnë në varg tonë. [01:12:48] Kështu që lejon të ketë tonë për lak. Pra, katër int I barabartë me 0 w, ndërsa I është më pak se gjatësi I plus plus. Dhe now-- Rob: Bukur. Davin: OK, dhe tani këtu vjen mishit të kodit tonë. Kështu që ju mund të bëjë në fakt kjo linjë në thelb në një. Pra ka dikush të ketë një ide e asaj që ne jemi duke shkuar për të bërë tjetër? OK, kështu që kjo është OK. Pra, ne jemi duke bërë të themi shumë equals-- më lejoni të vrapoj këtë shumë over-- është e barabartë herë kuturu 10 plus-- Ne jemi do të marrë s I minus një quote 0 një quote bërë, si kjo. Rob: Shumë intuitive. [01:13:56] Davin: grimcuar atë. OK, kështu që someone-- I got it, I got it. OK, kështu që kjo është e qartë duke shkuar deri. Çfarë do të thotë kjo? Pra, nuk e di se çfarë do të thotë dikush këtë? Mund të gjithë e shohin këtë? Jo, askush nuk mund ta shihni këtë, OK. Unë jam duke shkuar to-- [01:14:18] Rob: Unë jam duke shkuar për të shkruar formula vetëm të drejtë këtu. Davin: OK, Rob do ta bëjë atë në kompjuter, që është fun. Rob: Oh, Perëndia im. Ose unë nuk do të. Davin: Stand by. STUDENT: Unë kam një pyetje. Davin: Po, sigurisht. STUDENT: [padëgjueshme]? Davin: OK, kështu që në të vërtetë, si, vetëm në përgjithësi, në qoftë se keni qenë për të vënë, si, në këtë int deklarimit I barabartë me gjatësi 0 presje barabartë sterln, that-- [01:14:59] STUDENT: [padëgjueshme]. [01:15:01] Davin: Kjo është në rregull, sepse that-- STUDENT: Pse do të ju edhe duhet të përdorni gjatësi? Pse nuk mund të kemi vetëm [padëgjueshme] sterln s, ashtu si tërë kohës [padëgjueshme]? [01:15:08] Davin: Ju do të thotë të drejtë këtu? [01:15:09] STUDENT: Po. Davin: Sepse çdo Koha këtë për lak shkon, ajo do ta vlerësojnë këtë kusht. STUDENTORE: E drejta. Davin: Dhe në qoftë se ju keni sterln atje, atëherë është do të ketë në fakt të thirrur se funksioni çdo herë të vetme. Pra, në vend të vetëm krahasuar atë me një int, ju jeni do të jetë duke e quajtur një Funksioni dhe pastaj duke e krahasuar atë me vlerën kthimit. Yeah, kështu që është vetëm, vërtet. [01:15:28] Bukur, OK, kështu që tani të gjithë mund ta shohin atë. Çfarë does-- kjo është si, kjo është ajo. Kjo është jam, të drejtë këtu. Çfarë do të thotë kjo? Çfarë jam unë duke bërë? Po, një ide? Vërtet? [01:15:43] STUDENT: Well, kështu që kur ju jeni të hyjnë në një rrjet, ju do të jeni të shkojnë nga e majta në të djathtë, kështu që ju jeni do të shkojnë në decimal nga poshtë [e padëgjueshme]. Davin: Pikërisht. STUDENT: Kështu secili ju duhet të shumëfishohen çfarë keni parë si vlerë e int me koha që ju të merrni për të lëvizur atë mbi një. [01:15:59] Davin: Perfect, të përsosur, kështu për shembull, le të thonë se unë i dha you-- jam do të shkruaj këtu. Jo, unë nuk jam. Unë jam duke shkuar për të shkruar këtu. Le të thonë se unë ju dha 76, e drejtë? Le të thonë se unë ju jap 76. Kjo është një varg për të filluar me, OK? [01:16:15] Pra, gjatësia është ajo? 2, e drejtë? Shumë është 0. Pastaj ne hidhen në tonë për lak. OK, përsëritje e parë e kjo, çfarë është ajo do të jetë? Ajo do të jetë shumë është 0. Pra, përmbledhur herë 10 0. Kjo është e pakuptimtë. Atëherë çfarë do të bëni këtë? STUDENT: [padëgjueshme]. [01:16:33] Davin: Ajo do të kthehet se karakter në një numër të plotë, të drejtë? Kjo është lloj i si me tuaj Problemi set-- këtë light-- kjo është lloj i si me Problemi vendosur për Visioneer. Ju jeni që kanë të bëjnë me vlerat ASCII. Pra, nëse unë ju jap, si një shtatë, por kjo është një karakter, dhe doni të dini, OK, ajo shifër është ajo? Po, ju mund të, vërtet. Pra, çfarë shifra është ajo? Ju mund të zbres 0 nga ajo, por ju duhet të zbres 0, karakterin. [01:16:59] Dhe ku disa njerëz merrni morën lart, ata janë si, OK, mirë, nuk kam për të dini vlerat ASCII për këtë quiz? Jo, ju patjetër nuk e bëni duhet të dini ASCII Vlerat e, si, Fjala a, uppercase A, zero. [01:17:09] Rob: Nuk ka asnjë arsye për të kurrë vënë këtë në mashtrojnë fletë. [01:17:12] Davin: Definitely nuk mbeturinave hapësirë ​​tuaj me këtë. Ju mund të literally-- vetëm në vend i thënë: 48, si e drejtë deri atje, që është ekuivalenti te thënë një, një apostrof, si kjo, pikërisht njëjtë. [01:17:27] Rob: Ju mund të pothuajse të mendoni e saj si if-- Perëndisë, kam nevojë tim, oops-- ju mund të pothuajse të mendoni për atë si në qoftë se ne kemi diçka të tillë hash definojnë 0 si 48. Kjo nuk do të funksionojë. Por mendoj se për atë si vetëm të japin kuotën 0 quote vetme, dhe për të gjitha karakteret. Mendoni se si një konstante që përfaqëson atë vlerë ASCII. [01:17:47] Davin: Po. OK, kështu që herë të parë nëpërmjet, kështu që me 76-- kështu hera e parë përmes, kjo është vetëm karakteri 7 minus karakter 0, dhe ata që janë të shtatë integers-- mirë, ata janë shtatë hapësira larg nga njëri- të tjera në tabelë ASCII apo çfarëdo. Kështu që do të kthehen një int prej 7. Deri tani, shuma e barabartë me 7. [01:18:08] OK, mirë, le të hidhen në këtë për lak përsëri. OK, tani është shumë herë 10. Pra, ju jeni në mënyrë efektive lëvizur 7 në të majtë. Ka që e bëjnë kuptim? Ju jeni në mënyrë efektive lëvizin atë në të majtë. [01:18:19] Dhe pastaj ju add-- këtë do të jetë 6 minus 0. Kjo është 6. Pra, kjo do të jetë 70 plus 6. 76, që është numri juaj. Pra, pavarësisht nga çfarë numri Unë ju dha, kjo është vetëm ngadalë do të zhvendosë vlerat më të mëdha në të majtë, 1 faktor i 10 çdo herë në lak, dhe pastaj shtoni në si të nevojshme. [01:18:37] Në pjesën e pasme? STUDENT: Ne nuk duhet të bëjmë çdo kontrolluar në program? [01:18:41] Rob: Pra sa më shumë të kontrolluar shkon për programin, ne do t'ju tregojë mjaft më shumë se çfarë ju duhet të kontrolloni. Nëse ne nuk do të ju them asgjë, atëherë në përgjithësi supozojmë që ju duhet të kontrolloni gjërat më. Si ju mund të, vetëm të jetë i sigurt, ju ndoshta duhet të kontrolloni hey, është s null? Atëherë unë nuk kam asnjë ide se çfarë të kthehen. Por ne do të ju them ky lloj gjë. 0, unë nuk e di. [01:18:59] Davin: Dhe pse do të doni të recheck nëse s barabartë null? STUDENT: [padëgjueshme]. Davin: Për shkak të yllit char. Kjo është një akrep. Pra, një krejtësisht e pranueshme Deklarata, unë mund të them, OK, s barabartë null, sepse ajo mund të jetë një tregues për të null. Pra, sa herë që ju keni pointers në rrugën tuaj në këtë mënyrë, ju ndoshta duhet të kontrolloni. Sepse në qoftë se ju nuk e shikoni atë, dhe atëherë ju pastaj shkoni në tuaj për lak, dhe ju jeni doing-- vrapoj poshtë. Vrapoj poshtë. [01:19:22] Rob: Na vjen keq, kjo është ajo. [01:19:23] Davin: Dhe kështu, si, në qoftë se ajo është e pavlefshme, dhe pastaj ju bëni këtë, atë gabim po ju do të merrni? STUDENT: Ju jeni do të merrni një gabim të caktuar. Davin: Ju do të jeni të vendosur faji, e drejtë, sepse ju jeni duke u përpjekur për indeksin në null. Pra, ju jeni do të përpiqen për të indeksit në kujtim që ju nuk bëni vet. Pra kjo, në qoftë se kjo është null, dhe ju bëni këtë, ju do cikël. [01:19:39] Rob: Unë gjithashtu mendoj se në provim në të cilin kemi pyetur këtë pyetje, ne ju them që ju mund vetëm të supozojmë kjo është një numër pozitiv. Sepse atoi pritet gjithashtu për të trajtuar numrat negative, kështu që ju do të keni për rast të veçantë. Hej, është karakteri i parë një dash, në të cilin rast, OK, tani kjo është një numër i plotë negativ. Ne do të ju them se këto llojet e gjërave. Ne do të ju tregojnë se çfarë ju keni nevojë për të trajtuar. Davin: Po. Kështu që unë jam i sigurt se disa njerëz mund të have-- në qoftë se ju keni filluar duke kërkuar në provime të vjetra, keni pare sterln. Kjo është një popullor. Dhe unë mendoj se në sterln, keni pasur për të e bëjnë këtë kontroll për të null, kthimin 0 ose diçka të tillë. Ashtu si, keni pasur për të kontrolluar për null. Dhe në qoftë se ju nuk e keni, se ishte pikë jashtë në quiz. Pra, gjithsesi, bën të gjithë të ndjehen OK me atoi? A doni të askujt shkoni mbi pjesët përsëri? Rob: Oh yeah, unë mendoj se ne gjithashtu t'ju them ju mund të supozojmë se çdo gjë që is-- ata janë në fakt duke hyrë në një numër, që ju nuk keni për t'u shqetësuar rreth, si, letra qenë në vargun, kështu. Davin: Po. Po? STUDENTORE: A mund të shkoni me kalimin e një më shumë kohë kur ju përdorni kuotë të dyfishtë dhe të japin kuotën e vetme? [01:20:37] Davin: Sigurisht, kështu që kuotat dyfishtë, shumë thjesht, është kuotat dyfishtë janë vargjet. Pra, nëse ju të dyfishtë kuotë çdo gjë, kjo është një string. Pra, si, në qoftë se kam pasur këtë 0 gjatë këtu, dhe unë e bëri këtë, kjo është një string. Kjo nuk është më një karakter. Kështu që unë nuk mund të gjeni këtë vlerë në ASCII tim tabelë, sepse kjo është një string, vërtet. [01:20:57] OK, ndonjë pyetje të tjera? Po? [01:21:00] STUDENT: Pra, ju keni tashmë u përgjigj kësaj, por si, kur ne jemi në të vërtetë shkruar kjo në quiz, ju dëshironi të na për të shkruar me ul zero [padëgjueshme]? Davin: Jo Pyetja ishte që ju duhet vënë një plagë nëpër zero për të treguar nëse ata janë zero? Jo, ne do të kuptoj atë. Po, faleminderit, ata janë të mirë. OK, çdo gjë tjetër? A doni dikush to-- kështu që unë mendoj se ne kemi drejtuar një pak me kalimin e kohës. A doni të shihni një tjetër, apo? STUDENT: RandomInt. [01:21:29] Davin: RandomInt, OK, pikërisht. Pra, le të bëjmë RandomInt. Unë do të bëjë atë mbi këtu. Pra RandomInt në fakt është shumë më e thjeshtë. Unë mendoj se atoi është ndoshta një më e vështirë që ne kemi kërkuar në vitet e mëparshme. STUDENT: [padëgjueshme]. [01:21:46] Davin: Çfarë? Rob: Unë jam duke parë nëse kjo është lloj të shikohet nga mbi këtu. Davin: A është ajo? Rob: Unë nuk mendoj se është going-- mendoj ajo do të kandidojë jashtë në të djathtë. Davin: OK, kështu që unë do të bëj këtë. Dhe pastaj ju vetëm vënë atë në ekran. [01:21:56] Rob: Në rregull. [01:21:57] Davin: Ju dëshironi që të jetë shkrues e mia? [01:21:58] Rob: Po. [01:21:58] Davin: Bukur. OK, mund të fshihet kjo? [01:22:02] STUDENT: Po. [01:22:04] Davin: Kjo është aq e vështirë. (Kënduarit) Ju jeni duke bërë çfarë jeni duke bërë. Dhe duke bërë atë që ju nuk e bëni. Dakord. [01:22:19] OK, nëse më kujtohet saktë, në quiz RandomInt ishte si, OK, unë jam duke shkuar për të ju jap dy numra, si një a dhe b. Dhe unë dua që ju të më jepni një RandomInt ndërmjet këtyre numrave. Pra RandomInt po ndodh për të marrë dy numbers-- kështu RandomInt-- dhe kjo është do të kthehen në një int. [01:22:41] Pra, çfarë është vlera e kthimit? Unë vetëm ju tha. Int, e drejtë? Si kjo, dhe atëherë është do të marrë dy ints. Pra, ajo do të marrë int a dhe int b, si kjo. Pra, çfarë është RandomInt do të bëni është ajo që po ndodh për t'u kthyer disa vlera të rastit në mes të këtyre dy vlerave. Pra, kjo do të jetë më e madhe shumë se një, më pak se b. Kështu që unë mendoj se ju ndoshta mund të supozojmë se a është më e vogël e dy vlerat. Pra, nëse ne jemi që kanë të bëjnë me randomness, çfarë funksioni kemi parë se na jep gjëra të rastit? STUDENT: Drand. Davin: Drand, pikërisht. Pra, ju jeni duke shkuar për siguri dëshironi të përdorni drand tuaj. Kështu që ju mund të them int të rastit, dhe ne do të vetëm thonë se kjo është e barabartë me 0 tani. Dhe ata janë që ne jemi duke shkuar për të thënë, OK, barabartë të rastit drand 48. Dhe çfarë e bën këtë të kthehet? Çfarë e bën këtë funksion ju jap? [01:23:43] STUDENT: Midis 0 dhe 1. [01:23:45] Davin: Po, në mes të 0 dhe 1. Pra, kjo do të be-- [01:23:48] Rob: Dhe kjo is-- mendoj ne do të ju them këtë. Si, ju mund të përdorni drand 48. Ju mund të verifikojë këtë në provim të kaluar. Por ne me siguri do të thonë se ju mund përdorim drand 48, e cila kthen një noton në mes të 0 dhe 1. [01:23:58] Davin: Po, po, unë jam goxha i sigurt në provim ajo thotë se ju ndoshta dëshironi të përdorni drand, vërtet. Pra, kjo do të kthehen disa vlera midis 0 dhe 1. Dhe atëherë çfarë jeni do të doni të bëni? E pra, ju doni të shumohen by-- prisni, unë mendoj se kjo është si kjo, sorry. Unë do të bëj pikërisht këtë. Nuk e di. [01:24:19] Pra, b minus një. Pra, pse b minus a? Pra, le të thonë se ju drand jep mbrapa një OK int--, unë do të bëj vetëm pjesën tjetër, kështu plus një. Pra, çfarë does-- y është b minus një. Pra, le të themi se drand ju jep mbrapa vlera maksimale që mund ndoshta ju jap. Çfarë është kjo do të jetë? STUDENT: 1. [01:24:43] Davin: 1, e drejtë? Pra, nëse kjo është 1, dhe ju jeni shumëzuar atë me b minus një, mirë, kjo është vetëm Dallimi në mes të minus A. Dhe në qoftë se ju pastaj shtoni atë përsëri mbi një, kjo është ajo? Është b thelb. Ka që e bëjnë kuptim? [01:24:57] STUDENT: Po. [01:24:59] Davin: Pra, nëse ky është maksimumi vlerësojmë se ndoshta mund të jetë, ajo do të jetë 1. Dhe atëherë kjo është vetëm Diferenca midis të dyjave. Shtoni në një, kështu që kjo është do të kthehen të rastit. Dhe në rast këndi drand ju jep mbrapa 1, rastit do të jetë vetëm në mënyrë efektive të b. Por kjo është maksimumi që mund të jetë. Pra, në qoftë se ajo do të jetë më pak se se, kështu që le të themi se saj si 0.9, kështu atëherë 0.9 herë minus b a do të jetë më pak se diferenca midis minus b a. [01:25:33] Dhe pastaj, nëse ju shtoni atë për në një, atëherë kjo vlerë të do të jetë më i madh se a, sepse ju jeni duke shtuar diçka mbi atë, por ajo do të jetë më pak se b. Pra, ju jeni duke shkuar për të marrë një të rastit numrin, sepse ju jeni duke bërë thirrje drand. Dhe kjo Rand, ky numër të rastit është do të jetë diku në mes a dhe b. Ka që e bëjnë kuptim? [01:25:50] Rob: Vetëm për të vënë atë në numra konkrete, në mënyrë le të thonë se ne duam që të marr një Numri i rastit ndërmjet 7 dhe 10. Pra, minus b a është gamën tonë. Pra, ka një varg i tre numrat ne duam të zgjedhur nga. Dhe pastaj shumëzuar që ndërmjet 0 dhe 1 1, në qoftë se pastaj na jep some-- le të themi se na jep 1.5. [01:26:07] Atëherë 1.5, ne duam të shkojnë 7-10. Pra 1.5 plus 7 na çon përsëri në 7 deri në 10 gamën tonë. Dhe atëherë ne jemi duke e ruajtur atë brenda një numër i plotë, kështu që cunguar deri në 8. Dhe pastaj ne kthehen vetëm se. Pra, minus b a është gamën tonë. a ndërrime atë në numrat që ne duam në atë varg. Pra, në mes të 7 dhe 10, dhe pastaj ne mund të kthehet ajo që ne fund me. [01:26:30] Davin: Po, e bukur. [01:26:32] Rob: Ju faleminderit. [01:26:34] Davin: Po, çfarë është lart? [01:26:35] STUDENTORE: A kemi drejtuar atë në çdo lloj të Gabime ASCII kur we're-- nëse drand është kthyer një noton [padëgjueshme]. [01:26:42] Rob: Pra, ashtu si ka thënë Rob, për shkak të rastit nuk është një int, kështu drand do të jetë një noton. Pra, dhe pastaj shumëfishon jashtë. Dhe ju mund të merrni disa lloj i numrave noton. Dhe pastaj do të shkurtoj. [01:26:51] STUDENT: OK. Davin: Po. Rob: Dhe në qoftë se përpiluesit ishin të paralajmëruar ju rreth, si, humbja e saktësi, vetëm hedhur një int në atje, dhe pastaj është e mirë. Davin: Po? [01:27:02] STUDENTORE: A do të ketë njëjti probabilitet për të marrë, si, b ose a [padëgjueshme]? [01:27:08] Rob: Pra is-- që unë jam në të vërtetë wondering-- është RandomInt menduar të jetë një numër nga a për më pak se b? Si, në qoftë se është në mes të 7 dhe 10, cilat janë mundësitë? 7, 8, dhe 9, ose 7, 8, 9, 10? Davin: I harroj. Në problemit set-- [01:27:19] Rob: Unë mendoj se është 7, 8, 9. [01:27:20] Davin: Ajo në mënyrë specifike thotë një-së përfshirëse dhe një të veçantë. [01:27:22] Rob: Po. [01:27:23] Davin: Por unë don't-- unë jam not-- [01:27:23] Rob: Kështu që unë mendoj se këto është nuk janë përfshirë, në të cilin rast, ka një të barabartë Mundësia e 7, 8, dhe 9. Nuk ka probabilitet 10. Davin: Po? STUDENT: Unë kam një pyetje. Ne duam që të përcaktojë një funksion kthehet jo një vlerë, por një grup. Atëherë çfarë do të jetë Sintaksa pas kthehen? [01:27:41] Davin: OK, kështu atëherë ju would-- pas kthimit? Pra, le të thonë se ju kishte deklaruar një koleksion diku lart atje. Atëherë ju vetëm do të kthehen emri i vektorit. [01:27:49] STUDENT: OK, thank you. Pastaj vetëm të kthehet me a-- Davin: Oh wait, kështu keq. Pyetja ishte se si ju ktheheni një rrjet. [01:27:54] Rob: Edhe pse kjo nuk mund të të një sërë deklarohet në rafte apo diçka të tillë. Ajo do të duhet të jetë diçka malloced, sepse malloc është se si ju merrni rreth Alokimi automatike kujtesës. [01:28:01] Davin: Po. Rob: Si ju merrni rreth fushës vendore. [01:28:09] Davin: Por ju do të vetëm kthimi name-- saj [01:28:11] STUDENT: [padëgjueshme] nuk është një me vlerë, për shembull, dy numra, kështu [Padëgjueshme]. [01:28:18] Davin: Ju nuk mund të kthehen numrin e të shumta. Ju nuk mund, si, return-- [01:28:20] STUDENT: Kam biseduar rreth kthimit një grup ose diçka të tillë. [01:28:23] Davin: Yeah, kështu që pyetja është mund të kthehet vlera të shumëfishta. Ju nuk mund të kthehen vlera të shumëfishta. Ju nuk mund të, si, kthehet një pas kthehen b ose diçka si kjo. Sepse pasi ju të ktheheni, ju kthehet nga funksioni. Dhe pastaj funksioni është kryer, dhe si Rob tha, është në rafte. [01:28:35] Pra, të gjithë se kujtesa vetëm merr kthyer kompjuter. Çdo gjë merr harruar, në thelb. Pra, nëse ju doni të ktheheni të shumta vlerat, ju duhet të kthehen një rrjet, Dhe mënyra që ju bëni që është mallocing. Dhe pastaj ju do të ktheheni x si kjo. Në thelb, ju vetëm të kthehet emrin. Dhe kur ju të ktheheni diçka si kjo, ju jeni vërtetë nuk kthehen vlerën. [01:28:53] Pra, le të thonë se ju ruajtur vlerat në një rrjet. Ju nuk jeni të vërtetë kthehen këto vlera. Si, në qoftë se unë u kthye një int, unë jam me të vërtetë kthehen kopje të vlerave. Por në qoftë se unë do të kthehen diçka si kjo, Unë jam kthyer një referencë të këtyre vlerave. Kështu që unë jam kthyer, në thelb, një Adresa e kujtesës vlerave. Ka që e bëjnë kuptim? STUDENT: Po. Davin: Bukur. Po? [01:29:13] STUDENT: Kur ju jeni përdorur drand këtu, ju keni për të vënë srand para kësaj? [01:29:17] Davin: Jo, jo, unë nuk mendoj kështu. [01:29:20] Rob: Yeah, kështu që nuk keni të them asgjë në lidhje me srand? Parazgjedhur prej jush nuk thotë srand në të gjitha është që vetëm të bëjë srand të null. Pra drand në vetë punën e tij do. Dhe kjo automatikisht do të prishem me koha e tanishme, është ajo që ai përdor. Davin: Po? STUDENTORE: A ju [padëgjueshme] me numrat? Davin: Po, mundeni. STUDENT: Pra, ju mund të thonë, si, 4 herë 2. Gjë është, ju nuk mund të marrë atëherë një int është katër bytes. Only-- [01:29:51] Davin: Unë do të thotë, për quiz mundeni. [Qesh] [01:29:54] Rob: Mm, nr. Davin: Po, po, ju mundeni. Nëse ata ju pyes se sa i madh një int është, ju nuk mund të jetë, si, katër apo tetë. ROB: Oh, kështu që nëse Pyetja është veçanërisht, si, në qoftë se ajo është një problem coding, ju duhet të thoni madhësinë e int. Në qoftë se kjo është një tavolinë, ose ajo thotë se shumë bytes, ju nuk duhet të plotësoni në madhësi të ints. [01:30:08] STUDENTËT: [qesh] [01:30:18] Davin: E drejta, kështu që pse është e Madhësia e int rëndësishme këtu? Pra si, në qoftë se ne jemi duke shkuar për të 32-bit procesor apo diçka si kjo, atëherë ajo do të jetë katër bytes. Por në disa nga më të reja sende, ajo mund të jetë ajo? Ajo mund të jetë tetë, e drejtë? Pra this-- nëse ju vetëm kodi hard katër, pastaj në disa makina, ajo do të punojë. Disa makina, ajo nuk do të funksionojë. Por në qoftë se në quiz ne jeni si sa e madhe është një int? Vendos katër. Rob: E drejta. Davin: Po? STUDENT: Pra, sepse ne jemi deklaruar [Padëgjueshme] në brendësi të një funksioni, ne duhet të vënë 3 brenda këtij funksioni? Ose ne mund të përdorni atë jashtë? Davin: Ju mund të përdorni atë jashtë atë funksion. Kështu që ai është duke kërkuar për të lira. [01:30:49] STUDENT: Lose udhë e ku [padëgjueshme]. [01:30:51] Rob: Oh, i lirë nuk happen-- kjo është pjesë e magjisë së malloc është se ju nuk jeni kufizuar të fushës vendore. Ju keni kontroll të plotë mbi sa kohë variabla tuaja të jetojnë. Pra, ne e quajmë malloc këtu, ajo mund të jetë një funksion krejtësisht të veçantë. Ajo mund të jetë 10 orë më vonë se ne fund quajmë të lirë. [01:31:08] Davin: Kështu për shembull, si një çift javë nga tani, kur ju më në fund bëni speller tuaj fjalor psets, ju do të jeni të ketë disa funksion që krijon ton nyjet. Pra, ju jeni mallocing ton e nyjet në këtë funksion. Dhe pastaj më vonë në a funksion të veçantë, ju jeni do të duan për të liruar të gjitha këto nyje. Kështu që ju mund të vërtetë vetëm të kalojë në lirosh një tregues, kështu që një adresë e memories me atë që ju malloced. Dhe kjo do të jetë mirë. Ju nuk keni për të liruar, si, në të njëjtin funksion. Po? [01:31:30] STUDENT: Pra a malloc variable [padëgjueshme] jashtë? Është se çfarë ju jeni duke thënë? Davin: Prisni, thonë se? Më vjen keq. [01:31:38] STUDENT: Nëse një variabël malloc mund të jetë i lirë kudo në kodin, atëherë ata mund të arrihen kudo në kodin? Ju mund të mbani ato lokale? [01:31:45] Davin: Oh, ajo pyeti, si, e ndryshueshme, like-- [01:31:51] Rob: Pra, ju ende nevojë për të kanë disa lloj të referencës në bllokun e malloc së kujtesës. Pra këtu, ne jemi duke u kthyer x. STUDENT: Oh. Rob: Nëse ne nuk kthehemi x këtu, dhe kjo ishte vetëm e pavlefshme, atëherë ne nuk do të ketë qasje në tregues ishte malloced, dhe kjo është rrjedhur kujtesës. [01:32:05] STUDENT: OK. [01:32:06] Davin: Pra si, le të themi të kanë këtë, si, të drejtë këtu. Rob: Jo Davin: Në funksion tim kryesor, unë nuk mund të vetëm thirrje këtë x dhe të jetë, si, OK, në këtë funksion, unë e bëri këtë. [01:32:14] Rob: E drejta. [01:32:14] Davin: Kështu që unë jam duke shkuar për të thirrur në x, si, kryesore ose diçka të tillë. Ju nuk mund ta bëjë këtë. Ju jeni do të kthehen diçka. Por, çfarë po ju do të ktheheni? Ju jeni do të kthehen një adresë e memories. Dhe për shkak se ju të ktheheni një kujtim adresa, të cilat mund të arrihen diku tjetër. Ndonjë pyetje më shumë? Po? [01:32:28] STUDENTORE: A është funksioni më sipër duke qenë kontrolloni për [padëgjueshme]? [01:32:33] Davin: Pse nuk kam nevojë për të bërë këtë? STUDENT: [padëgjueshme]. Davin: Sepse ju jeni Nuk mallocing asgjë. Pra, kjo është not-- yeah, kjo është jo si një string s. Kjo është një tregues diku. Këto janë vetëm vlera. STUDENT: OK. Davin: Po. Çdo gjë tjetër? Rob: Po? STUDENT: Por kur ju [padëgjueshme]? [01:32:55] Rob: Pra, në mënyrë të lirë kujtesës, ne do të themi këtu. Pra, x është tregues tonë të bllok i kujtesës. Ne lirë që akrep. Dhe ne nuk do domosdoshmërisht të bëjë këtu. Ne mund ta bëjmë atë kudo. Por ju vetëm të telefononi falas në diçka që malloc kthimet. Pra malloc, këtu, u kthye çfarë është duke u ruajtur në x. Pra, ne mund të telefononi falas në x. Çdo pyetje e fundit? [01:33:20] Davin: Çdo pyetje e fundit? Vërtet? [01:33:22] STUDENT: Na vjen keq, ju mund të ri-shpjegoj pse ju do të lira në atje? Pse [padëgjueshme]? [01:33:26] Davin: Sepse këtu? [01:33:27] STUDENT: Po, si e drejtë pas. Davin: Ju ndoshta nuk duan një të lirë këtu. Rob: Ju ndoshta nuk do. Davin: Po, se kjo do të bëjë asgjë. Kjo do të, si, të krijojë kujtesës, të bëjë gjëra në të, dhe pastaj menjëherë harrojmë për këtë, vërtet. [01:33:37] Rob: Por ne mund të bëjmë, si, këtu për disa arsye. Ne mund të themi yllin e int y barabartë array kthimit. Të bëjë disa gjëra me y, ndoshta shtypura përmbajtjen. Dhe pastaj, në fund, ne jemi duke bërë. Ne mund të lirë y. STUDENT: [padëgjueshme]. Davin: A duhet të lëvizni poshtë? Thanks. Rob: Bukur. [01:34:02] Davin: OK, kjo është ajo. Rob: Në rregull, mirë. Fat të mirë. [01:34:05] Davin: Nëse keni pyetje, na dërgoni me email. Fat të mirë.