[00:00:00] [Musika sa pag-play] [00:00:11] DAVIN: Ang lahat ng mga karapatan, guys. Kaya ito ay ang pagsusuri para sa unang pagsusulit. Handa na ang lahat para sa ang pagsusulit sa Miyerkules? Allison: Woo! MAG-AARAL: Woo! DAVIN: Oo. Allison: Oo! DAVIN: Iyon tao ay handa na. Na tao, dalawang kamay, mabait. Kaya pagsusuri pagsusulit ngayon, ang pagpunta ito upang maging halos isang oras at kalahati. Kami ay pagpunta sa pumunta sa paglipas ng lahat ng mga pangunahing konsepto na dapat mong malaman para sa pagsusulit. Kami ay pagpunta sa pumunta sa paglipas ng ilang mga coding sa pamamagitan ng kamay mga halimbawa, kung saan ay sa bawat pagsusulit. At kung mayroon kang mga katanungan, huwag mag-atubiling itaas ang iyong mga kamay at lahat ng bagay tulad na. Well, logistik tungkol sa ang pagsusulit ay online. Kaya kami ay pagpunta sa hatiin ang mga tao hanggang sa iba't-ibang mga kuwarto. Ito ay batay sa kanilang mga pangalan. Kaya kung mayroon kang anumang mga katanungan tungkol sa kung saan upang pumunta o tungkol sa kung anong materyal ay, tulad ng, ang opisyal na salita sa kung ano ang nangyayari upang maging sa pagsusulit, suriin online. At iyon ang lahat ng hanggang sa petsa. Kaya kung walang mga tanong sa mga magsimula sa, kami ay pagpunta upang magsimula. At narito Allison. [00:00:56] [CLAPS] [00:00:57] Allison: OK, salamat, Rob. Pinahahalagahan ito. Davin dapat Binaligtad nang upang ito. Ito ang di-malawakan listahan ng mga mga paksa, gaya ng lagi, pati na Davin sinabi lamang. Kumonsulta sa dokumentasyon online na pagsusulit tungkol sa zero. Ngunit ito ay medyo much-- ito sa syllabus ay ang lahat ng bagay na nawala namin sa paglipas ng sa gayon ay malayo. Lahat dito ay patas na laro, pati na rin ang anumang bagay na maaaring nabanggit sa aralin. [00:01:21] Aking seksyon, dito, ay lamang ng maraming pagsusuri. May ilang pagsasanay maaaring gumana na guys sa. Ngunit para sa pinaka-bahagi, kami talaga Gusto upang makapunta sa Davin sa mga code sa pamamagitan ng kamay pagsasanay. [00:01:31] Kaya ako pagpunta sa lumipad sa pamamagitan na ito. Kung mayroon kang anumang mga katanungan, titigil sa akin. Itaas ang iyong kamay. Nangangako ako magpapadala ako malamang na iyong nakikita. Kung hindi, iwagayway lang ito sa paligid. Pupunta ako sa ay pakikipag-usap nang mabilis. Umaasa ako sa lahat ng tao OK lang na may mga iyon. [00:01:43] OK, espesyal na salita, Davin nang walang alinlangan Nakalimutan upang i-flip sa pamamagitan ng mga slide. [LAUGHS] Ikaw sa problema, tao. Kaya mga tip para sa pagsusulit zero, pagsasanay coding sa papel. Ikaw guys ay pumunta upang makakuha ng ilang -ensayo sa na ngayon sa Davin, kaya hindi mo ay magiging ganap sa pamamagitan ng iyong sarili. Sa tingin ko talaga kami ng pagpunta sa pamamagitan ng mga dalawang function. Kaya ikaw ay may mahusay na inihanda doon. [00:02:04] Maging pamilyar sa iyong mga hanay ng problema. Nagkaroon ng tanong sa nakaraang pagsusulit na hihilingin sa iyo, halimbawa, upang Code up ng isang bagay na halos kapareho sa Mario. Kaya pagiging napaka-pamilyar sa Nagtatakda ang iyong problema, pati na rin bilang ng mga tanong hinihiling namin sa iyo sa simula sa form na punan, ay maghatid sa iyo nang mahusay. [00:02:20] Gumawa ng isang nakaraang pagsusulit sa ilalim ng ang oras hadlang. Ang mga pagsusulit ay matagal. Ang oras na pumupunta talagang mabilis. At madalas, hindi mo nauunawaan kung paano mabilis pupunta ito hanggang sa iyong aktwal na ilagay ang iyong sarili sa ilalim ng mga hadlang. Kaya kung maaari mo lamang mag-ukit out, alam mo na, 75 minuto, alinman ngayong gabi o bukas gumawa ng isa sa mga pagsusulit sa ilalim ng na, ikaw ay nasa mas mahusay na hugis. [00:02:41] At din, ang paglikha ng iyong reference sheet. Tandaan, makakuha ka ng isa front page at likod bilang sanggunian para sa iyong pagsusulit sa Miyerkules. Paglikha na ay isang mahusay na paraan upang pag-aralan. Anumang bagay na nagkakaroon ka ng problema may gusto mong isama sa doon. Anumang bagay na iyong TFs naging, tulad ng, ito ay talagang mahalaga. Dapat mong malaman na ito, hindi siguro mga bagay na mayroon ka sa doon kung wala kang mga ito kabisado. Kahit mo alam ang mga ito talaga na rin, minsan nagkakaproblema ito sa may lamang ang uri ng ginhawa para sa iyo, na kilala ko pagsusulit ay nakababahalang. Kaya maaaring makatulong sa anumang ginhawa iyong makukuha. Ang lahat ng mga karapatan, din, kumuha ng pagtulog at kumain at gusto ang normal na mga bagay na sabihin namin sa iyo para sa mga pagsusulit. [00:03:16] Kaya nagsisimula off madali, mga uri ng data at laki. Tulad ng sinabi ko, ito ay lamang ng pagpunta na ako masusuka ng maraming mga bagay-bagay hanggang dito na dapat mong malaman. Kaya mayroon namin ang aming mga char na isang byte, ints na apat na bytes, ang haba ang haba, na kung saan ay walong bytes. Talaga, ito ay mo lamang nais upang i-hold ang mas malaking integer. Sa kamay, na apat, doubles, na mga alas-otso. Muli, ay nagbibigay lamang sa iyo nang higit pa espasyo para sa iyong mga kamay. At pagkatapos i-type bituin, kaya ang anumang mga pointer sa isang 32-bit na machine, na kung saan ay kailangan mo ang lahat ng guys malaman, ay apat na bytes. [00:03:44] Kaya lahat ng bagay dapat mong alam, siguro bagay Gusto mong magkaroon sa iyong reference sheet. OK, binary conversion sa binary, conversion sa hexadecimal, pabalik-balik, lahat ng bagay na dapat mong malaman. Kaya mula sa binary sa decimal. Ikaw guys nais na magsagawa ng mabilis na minutong at subukan at malaman kung bawat isa sa mga at pagkatapos ay sabihin sa akin kung ano ang mga ito? [00:04:06] Mayroon din akong kendi sa aking bag, kaya't sinuman na sumasagot ay makakakuha ng kendi, sa pamamagitan ng mga paraan. At Mayroon akong maraming mga ito. Hayaan akong-grab ito. Pupunta ako upang bigyan ito upang Gabe. Kaya maaari mong out kendi sa kahit sino ay maganda at matulungin. [00:04:21] OK, Nakita ko ang isang kamay doon sa likod. [00:04:26] MAG-AARAL: Oo, ang una ay 42. [00:04:28] Allison: Oo, una ay 42, tama. MAG-AARAL: [hindi marinig]. [Tawa] Allison: Ikalawa isa, Mayroon bang bumalik sa kulay dilaw? MAG-AARAL: 110,010. Allison: Tama, at ang huli, pababa dito sa ibaba? Gayundin, oo, alam mo gusto? Palabunutan lang kendi. Paano tungkol sa kendi para sa lahat? [00:04:46] MAG-AARAL: [hindi marinig] kapag tapos na kami. [00:04:47] Allison: Shh. At pagkatapos ay ang huli. Sino ang nais ni upang sagutin? I-right doon. [00:04:52] MAG-AARAL: 11,100. [00:04:54] Allison: 11,100, tingnan iyon. Binabati kita, mahusay na trabaho, sa lahat. OK, lahat ng tao uri ng maunawaan ang proseso para sa paggawa na ito? Ikaw, ng pagpunta mula sa binary sa decimal ang daan ay may posibilidad kong gawin ito, ay sumusulat out ang kapangyarihan ng 2. Kaya sabihin ko, OK, 0 beses 2-0, kaya na 0, 1 beses 2 sa unang, 2 pagpunta pasulong na paraan. Ba ako sa malinaw na gusto mo pumunta sa pamamagitan ng isang halimbawa ng binary? OK, cool. [00:05:28] Decimal sa binary ay halos katulad na. Malamang kong isulat ang kapangyarihan ng 2. Magsimula sa isa na ay ang pinakadakilang, ngunit hindi pumunta lagpas sa decimal na hinahanap mo. At pagkatapos ay uri ng gumana ang iyong paraan paurong pagdaragdag up ng mga bagay tulad ng kinakailangan. [00:05:42] At pagkatapos ay may karagdagan, ito ay tulad ng normal na karagdagan. Kung sakaling mayroon kang kaso kung saan ikaw ay pagdagdag ng dalawang 1s, ito ay nagiging malinaw naman 2. 2 sa binary na ngayon ang 1 0 kaya kailangan mo upang isakatuparan ang iyong 1 sa susunod na hanay. Ayos. [00:05:59] Hexadecimal, ito ay maaaring maging isang bagay na bahagyang mas pamilyar. Kaya bilang Rob ay lamang na nagsasabi sa akin sa simula pa, ang kanyang bilis ng kamay para sa ay upang hatiin ito up lamang sa apat na chunks byte, OK? Bits, paumanhin. Tingnan? Salamat Rob. Ito ang dahilan kung bakit ikaw ay dito. [Ingay] OK, kaya masira lang namin ito up sa apat na chunks bits. Kaya sa binary sa hexadecimal, tinitingnan namin ang unang 4, na kung kami ay may apat na 1s sa isang hilera, kung ano ang numero ng na katawanin? [00:06:25] MAG-AARAL: F. [00:06:26] Allison: Kaya sa kasong ito, ano ang 11111111 or-- yes? MAG-AARAL: FF. Allison: Perpekto, FF. Kaya mahusay, candy para sa iyo. Ngayon, para sa kung paano hexadecimal sa binary, namin Sa tingin lamang tungkol dito uri ng sa reverse. Para sa bawat numero o titik na mayroon kaming sa aming hexadecimal, -convert lang ito sa kanyang apat na bit [LAUGHS] sa kanyang apat na bit conversion. Kaya 5, sa kasong ito, ano ang 5 kung kami ay kumakatawan ito sa apat na piraso? [00:06:58] MAG-AARAL: 010? Mm-Hm. At pagkatapos A, na kung saan ay talaga 10, magiging? 1010. Kaya mayroon kaming iyon, dito. Kaya nagko-convert sa pagitan ng hexadecimal at binary aktwal na ay hindi na masama. Kung tumingin ka sa ito sa apat na bit chunks, magiging golden. Everyone-- yes? [00:07:19] Rob: Ito ay walang isip, ngunit laging tandaan ako A, dahil ang ay dapat na maging 10. At binary ay 10 lamang 10, so-- [00:07:26] Allison: Ah, doon kami pumunta. [00:07:27] Rob: Uy. [00:07:28] Allison: Uy, kendi para sa Rob. May mga bagay-bagay na di-tsokolate doon. Kaya maaari kang magkaroon ng ilan. Kaya ASCII matematika. Kumilos. Kaya ASCII matematika, tulad ng sa iyo guys Marahil na rin matandaan p-set 2 na may Visioneer at Caesar, ginawa mo ng maraming ito. Tandaan, ang mga character ay sa panimula lamang ng mga numero. Kaya maaari naming gawin matematika sa kanila, tulad ng ginagawa namin sa math na may ints. [00:07:54] Kaya mayroon kaming maliit lamang simpleng bagay dito. Mayroon kaming ilang sa isang na nasimulan sa 65. At B katumbas ng halaga ASCII ng isang plus 1, pansamantalang trabaho C katumbas D minus 1, at char D patas sa 68. Kaya pagkatapos kami ay pagpunta sa pag-print lahat ng mga ito, tulad ng nakikita namin dito. At maaari sinuman sabihin sa akin kung ano na ito ay mag-print? MAG-AARAL: [hindi marinig]. Allison: Eksakto, kaya isang bagay na napansin ay na pag-print out namin mga character sa bawat oras, dito. Kami ay pagtatalaga ng kahit A at B mga ints kapag inihayag namin ang mga ito sa itaas. Kami sa pag-print ay ang mga ito bilang mga character sa pamamagitan ng ang porsyento C at ang aming printf pahayag, kaya sila lahat ng mag-print ng mga character. At syempre, ang halaga ASCII 65 kalooban -print bilang A. Ang halaga ASCII ng isang plus 1 ay magiging 66, na gagawin mapagmataas sa B. Kaya sa katunayan, namin makakuha ng isang B C D. Ang bawat tao'y magandang doon? Anumang mga katanungan? Kahanga-hanga. [00:08:52] OK, saklaw. Kaya ang saklaw ay malinaw naman isang napaka mahalagang bagay upang maunawaan, narito. Marami sa inyo, kung Mayroon kino-compile ang mga error, at sinasabi nito na hindi mo kailangang access sa ilang mga variable, marahil ito ay dahil sa iyo tinukoy ito sa loob ng loop at pagkatapos ay sinubukang i-access ito out ng mga ito, o visa versa. [00:09:12] Kaya ang saklaw sa core nito, Tinutukoy lamang nito kung saan sabihin namin ang isang variable na umiiral, kung saan kami Maaari itong baguhin, kung saan maaari naming i-access ito. Ito ay lamang uri ng sinasabi ng mga ito ay ang tanging mga lugar kung saan mayroon kang access sa variable. [00:09:26] Kaya ang dalawang saklaw na makipag-usap kami tungkol sa sa panahon ng klase ay pandaigdigan at lokal. Kaya mga pangkalahatang variable makipag-usap kami tungkol sa kapag ikaw ay pagtukoy sa mga ito sa itaas pangunahing. Nangangahulugan ito na ang iyong buong programa ay may access dito, at ito ang umiiral para sa hangga't bilang ang nagpapatakbo ng programa, OK? Lokal na nangangahulugan na ito mas saradong sa isang rehiyon. Kaya sa tuwing mayroon kang tukoy na mga function tulad ng swap, palagi naming makipag-usap tungkol sa. Palagi kaming makipag-usap tungkol sa swap A at B. A at B umiiral sa loob ng na function. Hindi ito umiiral kahit saan pa. [00:09:56] Pati na rin, kapag mayroon kang kung pahayag o para sa loop. Sa tuwing mayroon kaming, halimbawa, sa isang para sa loop mayroon kaming int katumbas ko 0. Mayroon kaming ilang mga kundisyon at i-update namin ito. Umiiral na lang ako sa loob ng brace ng iyon para sa loop. Kung sinubukan mong i-access ito sa ibang lugar, ang iyong mga compiler ay sumigaw sa iyo. Gusto Ito ay tulad ng, kung ano ang gusto ninyong gawin? Ito ay hindi umiiral. Kaya iyon ang dalawang iba't ibang uri ng saklaw. Ay na magkaroon ng kahulugan sa lahat? [00:10:23] Kaya halimbawa dito, ang lamang ng ilang simpleng mga programa. Ano sa tingin guys ay pagpunta sa mangyari sa bawat punto na subukan namin na mag-print? Kaya ang isang ito dito, kung ano ang nangyayari sa mangyayari? MAG-AARAL: Ito ay i-print ang tatlo. Allison: I-right. Ito i-print ang tatlo. Paano ang tungkol dito? MAG-AARAL: Hindi ito gagana. Allison: Hindi ito gagana. Naubusan ka na ng saklaw, tama? Lokal na variable ay hindi umiiral sa labas ng mga brace, ang lahat ng karapatan? At pagkatapos ay kung ano ang tungkol dito? [00:10:56] MAG-AARAL: [hindi marinig]. [00:10:57] Allison: Ano? Rob, pumunta. [00:10:59] Rob: Kakalagay ko lang sinabi. Mga pangkalahatang variable ay dapat na global underscore variable. [00:11:04] Allison: Ah, oo, paumanhin. Salamat, Rob. Rob ay tulad ng ating resident compiler. Makikita niya lamang sumigaw sa amin kung kailan namin kailangan ito. [LAUGHS] Oo, na dapat na pandaigdigang underscore variable. Kaya sa pag-aakala na iyon ay pandaigdigang underscore variable, kung ano ang nangyayari sa mangyayari dito? MAG-AARAL: Iyon ang gagana. Allison: Ito makikita gumagana. Kaya ito ay i-print, kaya lang isang napaka-simpleng halimbawa. OK, mga modelo. Kaya malinaw naman, kami talaga bigyang-diin para sa iyo guys upang gumawa ng mga pag-andar kung ito magkaroon ng kahulugan sa iyong mga programa. Ngunit siyempre, kapag nag gumawa ng iyong sariling mga pag-andar, Karaniwang makikita mo tukuyin ang mga ito pagkatapos ng pangunahing. At makikita mo subukang tumawag ang mga ito sa pangunahing. At kung hindi ka gumagamit ng isang prototype, ang iyong mga compiler ay sumigaw sa iyo. [00:11:46] Prototype ay isa lamang nagsasabi lamang ang iyong compiler na mayroon akong ang function na ito sa ibaba ng pangunahing. Pupunta ako sa tawagan ito bago ko ito tukuyin. Matagal lang sa. Nangangako ako na ito ay tinukoy, at Magkakaroon ng lahat ng bagay na kailangan mo. [00:12:00] Kaya ang paraan ginagawa namin ito ay ang iyong return lamang uri, ang iyong pangalan ng function, ang iyong pag-input listahan. Ito ay isa lamang ang unang linya ng iyong pag-andar na pagpapahayag. Ito ay talagang ang lahat ng ito ay. Ngunit ito lamang ang pangkalahatang uri ng format. [00:12:14] Kaya sa aming mga halimbawa dito, kung saan mo guys dapat na nakita sa seksyon sa ilang mga punto, mayroon kaming ilang int kubo na tumatagal ng ilang int ng pag-input. At mayroon kaming pangunahing function, na tinatawag kubo. At kubo ay tinutukoy pagkatapos ng katotohanan. [00:12:28] Kaya kung hindi namin ginawa magkaroon ng int kubo ng pag-input sa itaas, kapag tinatawag naming kubo sa loob ng pangunahing, ang aming compiler Gusto makakuha ng galit na galit sa amin. Gusto Ito ay tulad ng, kung ano ang kausap mo tungkol sa? Cube ay hindi umiiral. Hindi ko alam kung ano ang iyong humihingi. At pupuntahan ko lang stop. [00:12:43] Ngunit dahil ginawa namin ang aming prototype sa itaas, nai-sinabi namin, alam mo na, kapag nakita mo kubo, huwag mag-alala tungkol dito. Nangangako ako ito ay tinukoy sa ibang pagkakataon. At makikita ito ipaalam gawin mo kung ano ang gusto mo. Kaya kung sakaling mayroon kang isang function na ipinahayag pagkatapos mong tawagan ito para sa unang pagkakataon, kailangan mong Mayroon itong prototyped sa itaas. [00:13:01] Oo? [00:13:02] Rob: Ito ay nakalapat, hindi cubing. [00:13:04] Allison: Oh aking Diyos. Hindi ko have-- Gabe, naisip ko na kayo ay aming tagawasto. OK guys, makisama sa akin, dito. Umaasa ako sa lahat ng tao ang pagkuha ng mga ideya. OK, sa gayon ito ay dapat magkaroon na nakalapat, hindi nakakubo. Ngunit ang ideya ay nananatiling pareho. Anumang mga pag-andar na aming pagtawag pagkatapos ng ang katotohanan ay dapat magkaroon ng prototype. Ang bawat tao'y may mahusay na? Anumang iba pang mga typo? OK. Anumang mga typo dito bago namin simulan, Rob? [LAUGHS] OK, kaya structs. Talaga, payagan mo structs upang likhain ang iyong sariling uri ng data. Kaya tulad ng isang int o isang pansamantalang trabaho o isang float, ito ay isa lamang uri. Gusto kong isipin na ito bilang, tulad ng, lumikha ng iyong sariling uri ng data. Kaya pinapayagan ka upang gawin iyon. At hold iba't ibang mga uri ng data. [00:13:56] Kaya kung tandaan mo, sa isang array, namin maaari lamang humawak ng mga bagay ng parehong uri. Structs-daan sa amin upang i-hold ang maramihang bagay ng iba't ibang mga uri. Kaya sa kasong ito dito, namin magkaroon ng struct tinatawag na Mag-aaral, na may pangalang dito sa ibaba. At mayroon kaming ilang mga int id at ang ilang mga pangalan ng string. Kaya ito ay isa lamang uri ng data. Mayroon na kami ngayong ng isang uri ng data na tinatawag na Mag-aaral. [00:14:20] Kaya dahil maaari naming isipin ito bilang isa lamang uri ng data, maaari naming ipinapahayag na variable tulad ng gagawin namin sa anumang iba pang. Kaya sa halip ng pagkakaroon lamang, tulad ng, ang isang int mag-aaral, mayroon lamang kami ng isang mag-aaral, mag-aaral 1. Oh, hanapin. Ito ay Rob. Kaya dito kami ay deklarasyon isang struct, o isang variable na tinatawag na mag-aaral 1 ng mag-aaral uri. Kaya ito ay pagpunta sa may id at pangalan na nauugnay dito. [00:14:45] At ang paraan ma-access namin ang mga mga elemento sa loob ng aming struct ay may tuldok operator, dito. Kaya sa kasong ito, kami mga ipinahayag na ang ilang mga mag-aaral 1. Itinalaga namin ang ID na maging 1. At nagtalaga kami ng mga pangalan upang Rob. OK, lahat maganda sa iyon? Gamitin lamang like-- ito yes? [00:15:06] MAG-AARAL: Oo, typedef-- kapag kailangan naming gamitin ang typedef? [00:15:09] Allison: Kaya typedef lamang sabi ni Rob that--, mo maitatama sa akin sa kung ako wrong-- ngunit typedef lamang ang aktwal na deklarasyon ito bilang isang uri na maaari mong gamitin, i-right? [00:15:19] Rob: Oo, ito ay isa lamang, kaya lang ito sa paglikha ng alyas, o isang palayaw para sa isang uri. Kaya maaari mong i-type na [hindi marinig]. Kaya Umiiral na [hindi marinig], at ngayon kami ay may lamang [Hindi marinig] paraan nang eksakto ang parehong bagay. At kaya dito, kami ay nai-type, sa palagay ko, ang ilang mga uri ng struct 2 [hindi marinig]. Kaya ito ay isang palayaw lamang para sa isang naibigay na uri. [00:15:40] MAG-AARAL: String [hindi marinig] library ay na-type up tulad ng pansamantalang trabaho star. [00:15:51] Allison: Para sa aming mga layunin dito, kung naka-deklarasyon ng struct, gawin lamang typedef struct. OK, kaya sa simula pa, ito ay lamang ng isang normal na variable dito. -Access namin ito gamit ang dot. kung mayroon kaming isang pointer sa isang struct, maaari naming aktwal gamitin ang isang arrow, na kung saan ay medyo cool. [00:16:10] Kaya sa kasong ito, mayroon kaming isang pointer sa isang mag-aaral 1 na ng mag-aaral uri. Tandaan, kasama ang iyong pointer ng konstruksiyon, Gusto mo anumang-type ang iyong pointer ay nagtuturo sa upang maging sa simula. Kaya mayroon kaming ilang mga mag-aaral 1, dito. At dahil mag-aaral ito 1 ay isa na ngayong matulis, maaari naming aktwal na pumunta mag-aaral pangalan 1 arrow sa halip ng tuldok, dahil ito ay isang pointer, at magtalaga Rob. At ngayon kung gusto naming baguhin Rob sa Davin, ito ay lamang ng pagpapakita sa iyo ang ibang paraan upang magawa ito. [00:16:43] Kaya sa halip na gamitin ang mga arrow, mo Maaari also-- ako matapos na ito at pagkatapos ay tumagal na question-- ng dati mo ring gawin reference mag-aaral 1. Na sinasabi tulad ng pumunta sa anumang ay sa mag-aaral 1, na ay magiging aming mga mag-aaral struct. I-access ito sa isang tuldok at ang elemento na gusto mo, at pagkatapos ay i-reassign ito. Nagkaroon ng isang katanungan. MAG-AARAL: Oo, kaya kung paano dumating mayroon kang gamitin ang [hindi marinig] kapag ikaw ay paggawa ng mag-aaral na walang bituin [Hindi marinig] mag-aaral? Allison: Dahil ito ay ang paglikha ng isang pointer. Rob: Kami ay pagpunta sa makipag-usap tungkol dito. Allison: Kami ay pagpunta sa makipag-usap tungkol na sa paglaon sa pagsusuri. Kaya hawakan lamang sa pag-iisip na iyon. Kung bothers mo ito pa rin sa pagtatapos, ay makipag-usap sa isa sa amin. [00:17:20] Kaya ang mga ginagawa nang eksakto ang parehong bagay. Ka lamang nagpapakita kami sa iyo ng dalawang iba't ibang paraan upang gawin ito. Mag-aaral 1 ay isa na ngayong pointer, kaya Maaari mong ma-access ang elemento ng Pangalan sa loob ng struct na may isang arrow. O maaari mong dereference iyong pointer, at pagkatapos ay i-access ito tulad ng karaniwan mong ginagawa. Sinusuportahan ba na saysay sa bawat isa? Kung ang buong pointer ng bagay ay isang maliit na nakakalito, Gabe ay makipag-usap tungkol sa na, at pagkatapos ay marahil na ito ay gawing mas kahulugan. Oo? [00:17:46] MAG-AARAL: Oo, kaya kung paano ay ito naiiba mula sa? Allison: Ang nakaraang isa? Kaya ng mag-aaral 1 sa kaso ay hindi isang pointer. Ito ay lamang ang iyong aktwal na struct. [00:17:54] MAG-AARAL: OK. [00:17:55] Allison: Sapagkat ang isang ito ay isang pointer sa isang struct. [00:17:58] MAG-AARAL: OK, ngunit ginagawa nito uri ng napupunta gumagana sa parehong [hindi marinig]. [00:18:02] Allison: Ito ay epektibong ay gumagana sa parehong. Ang iyong syntax ay naiiba lamang. MAG-AARAL: OK. [00:18:05] Allison: Oo, ang mga ito ay ang parehong epektibo. Lamang Ito ay depende sa konteksto, baka gusto isa sa ibabaw ng iba pang. Oo? [00:18:11] MAG-AARAL: Kapag ginawa mo mga sanggunian sa 1-- Allison: MM-Hm? MAG-AARAL: Bakit mo may panaklong? Allison: Dahil ang mag-aaral 1 ay ang pointer. Kaya kailangan mong tiyakin na ikaw ay dereferencing lamang ang pointer. [00:18:22] MAG-AARAL: OK. [00:18:23] Allison: Kaya sa kasong ito dito, ang mga panaklong sa paligid nito Nangangahulugan ka dereferencing mag-aaral 1. Kaya na iyong pupuntahan kung saan ang mag-aaral 1 punto, na ang iyong struct. Maaari mong Kaya ngayon tingin ng ito bilang na struct, upang maaari naming gamitin ang aming normal na operasyon tuldok. Ang anumang iba pang mga tanong? Mahusay, kahanga-hangang. [00:18:48] Kaya huling bagay, sa tingin ko ang aking huling slide, mang-akit! OK, kaya lumulutang na tuldok imprecision. Kami usapan sa madaling sabi tungkol sa ito sa panahon ng panayam. Talaga, mayroon kaming walang hanggan maraming mga tunay na numero. At kung anuman sa iyo guys Gustung-gusto matematika, mayroong lahat ng uri ng mga cool na bagay sa amin. [00:19:05] Ngunit may mga walang katapusan maraming mga tunay na numero. Ngunit ang mga ito ay may hangganan lamang maraming mga piraso na mayroon kami. Kaya ka palaging pagpunta sa Mayroon imprecision, ay lahat. At na ito lamang uri ng tulad ng isang bagay na dapat mong malaman. Na tulad namin maaaring hilingin sa iyo kung bakit ang lumulutang na tuldok imprecision umiiral? Isang bagay kaya lang dapat mong malaman. At gamit na, ako pag ito sa ibabaw ng Pointer. [00:19:27] BINKY: Hello, guys. Binky ang aking pangalan ni. Pupunta ako sa makipag-usap tungkol sa mga payo. Oo, kaya pointer ay talagang ang aking mga paboritong bahagi sa kursong ito. Kaya lamang upang gumawa ng malinaw kung ano ang Allison ay pinag-uusapan dito, kaya ang mga dahilan why-- ang pagkakaiba lamang dito, ang malaking pagkakaiba ay ang paraan ipinahahayag namin bagay. Kaya mag-aaral na bituin ay nangangahulugan ito ay isang pointer sa isang mag-aaral. Sapagkat ang slide bago, mag-aaral ay isang aktwal na struct, tulad ng isang aktwal na mag-aaral, naglalaman ng anuman sa mga bagay. [00:19:54] At ang dahilan kung bakit namin Gusto to-- oo, Davin? [00:19:57] DAVIN: Ano ang ibig sabihin ng arrow? [00:19:58] BINKY: Ang arrow paraan ang parehong eksakto tulad ito. Kaya huwag talagang kailangan mo ang mga arrow. Tulad ng, kung ikaw lamang ang programa sa C, maaari mo lamang gamitin ito. Paumanhin, gagawin ko hindi kung ano na. Maaari mo lamang gamitin ang syntax na ito. [00:20:14] Ngunit ang ilang mga tao, kapag sila ay pagdidisenyo C, nila naisip na ang mga tao ginamit na syntax kaya magkano, na sila ay gustong lamang makabuo na may syntax istraktura para dito. At ito nangyari sa anyo ng mga ito arrow. At ito ay talagang maganda, dahil ito simbolo ng isang bagay tulad ng aktwal na namin sinusubaybayan ang arrow, ito pointer, patungo sa ilang espasyo sa memory. At kapag makuha namin doon, gusto naming Inaasahan ng pangalan ng mag-aaral na, kung na saysay. OK? [00:20:43] Kaya ito ay eksaktong kapareho. Eksaktong Ito ay ang parehong bagay bilang na ito. Sila makakuha ng OK pinagsama-sama ang eksaktong pareho,? At ang dahilan kung bakit dito kami malloc ang isang bagay, ay dahil sa kasong ito, ang aming mga variable ay ang tunay lamang sa isang variable ng pointer. Kaya mayroon lamang namin ang ilang mga puwang sa memorya na hawak ang isang pointer. Hindi kami talaga mayroon kang anumang mga puwang na hold ang aktwal na struct. [00:21:06] Kaya ito ay dapat gawin sa dalawang hakbang. Mayroon kaming upang likhain ang memory upang ilagay ang struct in. At mayroon kaming upang lumikha ng memory upang ilagay ang pointer sa. Kaya ang mga ito ay isa lamang sa dalawang iba't-ibang mga variable, dito. Ang isa sa mga ito ay mag-aaral ng uri, maliban ito ay hindi talagang magkaroon ng isang pangalan. At ang iba pang isa ay ng uri ng mag-aaral na bituin. At pagkatapos ay mag-aaral 1 punto doon, kung na make-unawa. OK? [00:21:28] Kaya ang dahilan kung bakit ginagamit namin mga payo ay dahil ang lahat ng bagay sa isang computer, ang bawat variable sa isang computer ay may dalawang mga bagay. Ito ay ang halaga nito. At ito ay ang address nito. At isang mahusay na paraan upang conceptualize ito ay mayroong maraming mga problema kapag nag subukang gamitin ang pag-andar. At kami ay pagpunta upang subukang tumingin sa isa sa mga iyon. Lalo, ito ay pagpunta sa -isip ng memorya bilang mga kahon. [00:21:50] Palagi kang naisip ng mga variable kapag sinabi mo Na katumbas ng 5. Sa tingin mo na ilagay ang 5 sa isang kahon. Kaya kung ano kung gusto mong pumasa na int sa isang function? Pass-- mo lang gagawin ko hindi know-- x sa isang function. Ngunit kung ano ang mangyayari ay normal bilang tao, mo Gusto sa tingin ng isang bagay tulad ng ako ay pagpasa sa kahon sa isang tao. At hindi talaga mangyari sa mga computer. Ano ang mangyayari ay kopyahin mo ang value ng kahon sa kahon ng tao. [00:22:17] Kaya kung ano ang sinusubukan ko sasabihin ay kung mayroon kang function-- sorry-- dito, kung kami ay may isang function tulad ng sa limang up doon, kung susubukan mo upang pumasa sa isang variable, lamang ito ng pagpunta sa kopyahin. Kung ang isang pagsisimula ng pag-nx ay katumbas ng 3, ito ay pagpunta upang kopyahin ang halagang ito hanggang sa isang variable up doon. OK, at ito ay uri ng mga dahilan bakit gusto naming gamitin ang mga payo. Dahil sa halip na pagbibigay lamang ang halaga, sa halip na lamang ang pagpasa lamang ang halaga sa isang function, gusto naming dinadaanan ang reference. Ano ang tinatawag naming pass sa pamamagitan ng sanggunian ay uri ng pagbibigay ang kahon upang ang pag-andar, nang sa gayon ay ang pag-andar maaari ring baguhin ang mga halaga sa loob ng kahon. [00:22:53] OK, kaya lamang ang ilang pangunahing pointer mga bagay-bagay ay upang lumikha ng mga payo, pinahahayag lang ito ng isang uri, at kang maglagay ng star kanan pagkatapos nito. At ang uri ng lamang kung ano ang iyong na tumuturo sa. Kaya kung ito ay isang int bituin, ka na tumuturo sa isang int. Kung ito ay isang pansamantalang trabaho bituin, ka na tumuturo sa isang chart. At kung ito ay isang mag-aaral ng bituin, ka na tumuturo sa isang mag-aaral. OK? [00:23:08] At ang mga ito ay ang lahat ng 4 bytes mahaba. Dahil ang variable hindi tunay Kailangan upang i-hold ang isang pansamantalang trabaho, isang int, o isang mag-aaral. Kailangan lamang ito upang i-hold ang isang address. Iyon ang dahilan kung bakit ang mga ito ay ang lahat ng 4 bytes mahaba sa isang normal na 32-bit na machine. OK? Kaya dito, x ay isang variable na tumuturo papunta sa isang int. y mga punto sa isang pansamantalang trabaho. z puntos sa isang float. Ang anumang mga tanong dito? Ayos. At mayroong dalawang iba't ibang mga simbolo ang mga ito ay na dapat tandaan kapag na nanggagaling sa pointer. Kaya tumutukoy at dereferencing ang malaki bago. Kaya ang ampersand ng pangalan ng variable ay nagbibigay sa iyo ng? MAG-AARAL: Address. BINKY: Address. Kaya kung ipinahayag mo int isang ay katumbas ng 5, pagkatapos ay i-ampersand ng isang ay pagpunta sa magbibigay sa iyo ng address. At maaari mong aktwal na subukan mag-print na iyon at makita ano address sa memory ang iyong mga variable na may. At pagkatapos ay dereferencing-- nang sa gayon ay tumutukoy, pagkuha ng address-- dereferencing ay ang eksaktong kabaligtaran. OK, tulad ng mga oras ay ang sa tapat ng isang sangay, star ay ang tapat ng ampersand. Kaya dereferencing paraan pumunta doon. Kaya kung bibigyan ka star-- ko huwag know-- 50, na pagpunta sa subukan upang pumunta sa address ng numero 50 sa loob ng iyong computer. OK, at bakit nakikita natin na ang mga ito ay opposites? Dahil kung ano ang mangyayari kung gagawin mo isang bagay tulad ng bituin ampersand isang? Well, ampersand ang nagbibigay sa iyo ng address ng isang variable, ang address ng isang. Ngunit bituin ay nangangahulugan na pumunta doon. [00:24:35] Kaya kung ano ang mangyayari kung pumunta sa address ng isang? Kang makakuha lamang sa isang, i-right? Kaya pagpunta sa address ng isang kaparehong bagay ang bilang. Iyon ang dahilan kung bakit ang mga ito ay karaniwang tinutukoy ang same-- ito at ito ay tinukoy sa bilang tapat operator. OK? Kaya cool. [00:24:53] Sa ilalim ng hood, halimbawa, kung ipinahayag namin int x ay katumbas ng 5, mayroon kaming isang variable. At tandaan na ang sinabi ko sa bawat variable-- at ito ay isang magandang bagay upang panatilihin sa mind-- mayroon itong dalawang iba't ibang bagay na nauugnay sa. Mayroon itong naka-address at ng isang halaga. OK? [00:25:07] Kaya ang halaga sa kasong ito ay 5. At ang address is-- sabihin nating, ako ay paggawa ng isang bagay up-- ito 0x04. At ang tanging dahilan kung bakit namin karaniwang kumakatawan sa mga address sa hexadecimal ay isa, dahil ito ay tulad ng mabuti. Ito napupunta na rin sa binary. Ito ay madali upang i-convert sa at mula sa binary. At hindi ito makakuha ng masyadong malaki kung mayroon kang isang napaka-malaking numero. Kaya gusto naming gamitin ang hexadecimal sa pagpi-print address. Ngunit maaari kong kumatawan ito bilang isang integer. Ito ay multa. [00:25:32] At kaya ito ay may isang address 4 at isang halaga na 5. At pagkatapos ay sinabi ko int star pointer. Kaya ito ay isang iba't ibang mga uri, abiso. Int star pointer ay katumbas ng ang address ng x. Kaya kung ano ay magiging ang halaga ng ptr? Ito ay magiging ang address ng x, pababa dito. OK, kaya ang halaga ay pagpunta sa maging kapareho ng address. Iyon ay nagpapatakbo ang pagtatalaga ako ginagawa. At pagkatapos ay ptr ay pagpunta sa may sarili nitong address, na nag-o-out, sa kasong ito, ang 8, OK? [00:26:03] At pagkatapos ay ako lilikha ng bagong kopya ng integer. At sinasabi ko ay katumbas ng pumunta doon int kopya. Kaya pumunta sa kung ano ang ptr ay tumuturo sa. Well, kung ano ang ptr na ito? Ptr may 0x04. Ano ang mangyayari kapag sinusubukan kong pumunta doon? Ay ko mahahanap ang taong may address x at kung sino ang may address 4. At kung sino ang may apat na tugunan ay x. Ay na magkaroon ng kahulugan? Oo? [00:26:28] MAG-AARAL: Sa kasong ito, ay ang pointer sa isang stack? [00:26:32] BINKY: Sa kasong ito, it's-- mahusay na pinag-uusapan. Ako ay hindi tunay na isipin ang tungkol na ito kapag gumagawa ng hanggang mga address na ito. Ngunit kung ito ay, tulad ng, ang lahat ng mga ito ay mga lokal na variable, pagkatapos x ay pagpunta sa mabuhay in-- lahat Mawawala na mabuhay sa stack. Kaya lahat ay pagpunta na tumuturo sa stack. Ikaw lamang makapunta sa kimpal kapag simulan mong gamitin ang malloc, tama? [00:26:52] Kaya kung isipin mo stack ay tuwing mong tawagan ang isang function sa iyong programa, tulad ng, ang mga pangunahing halimbawa, o anumang iba pang mga function, tulad ng printf. Ang lahat ng mga lokal na variable ay pagpunta upang ilagay sa isang stack frame. At sila ay pagpunta upang makakuha ng tulad ng nakasalansan up sa stack. Iyon ay kung ano ang tinatawag na stack. At ang lahat ng mga lokal na variable ay magiging doon. At ang heap-- at kami ay pagpunta makipag-usap nang higit pa tungkol sa later-- ang kimpal ay kung saan lahat ng dynamic na ilalaan buhay memory. Cool? [00:27:20] Pumunta kami sa slide na ito. Oo? [00:27:22] MAG-AARAL: Bakit hindi int Kopyahin ang bumabalik na 0x04? [00:27:27] BINKY: Bakit hindi int Kopyahin ang bumabalik na 0x04? [00:27:30] MAG-AARAL: Bakit hindi na [hindi marinig]? [00:27:32] BINKY: Dahil kung ano ang isang halaga ng ptr? [00:27:37] MAG-AARAL: 0x04. [00:27:38] BINKY: 0x04. Ano ang mangyayari kung pupunta ka sa 0x04? Ano ang kang makakuha? [00:27:41] MAG-AARAL: Oh, OK. BINKY: mong makita? MAG-AARAL: Oo. BINKY: Kaya makakakuha ka ng 5. Kaya kopya ay pagpunta sa may 5, kung na saysay. Oo? [00:27:49] MAG-AARAL: ma namin nakuha 5 sa halaga box [hindi marinig] kung ilalagay namin int kopyahin [hindi marinig]. [00:27:55] BINKY: Int-- gagawin namin, oo. Na sana ay tapos na medyo marami ang parehong bagay. Subalit sa ganitong paraan, maaari naming ipasa tugunan upang function. At iyon ang cool na bagay kami ay pagpunta sa gawin ngayon. [00:28:06] Kaya ang ganitong uri ng pagsasanay na laging ay lumalabas on-- napaka-karaniwang ay lumalabas sa mga pagsusulit. Kaya ito ay talagang mahusay na upang subukang gawin na uri ng iyong sarili bagay. Kaya subukan na ang subaybayan kung ano ang address ay at nais ang mga halaga ng variable ay nasa bawat punto. Kaya ito ay eksaktong kung ano ang pagpunta naming gawin. Dito, mayroon kaming mga hakbang, isa, dalawa, tatlo, apat, lima. Ang isa, dalawa, tatlo, apat, lima. At kami ay pagpunta sa subaybayan ng mga halaga ng x at. [00:28:34] Kaya kung ano ang ginagawa, kung ito ay isang maraming surot code, sinusubukan naming gawin sa limang. Kaya naming sinusubukang upang makakuha ng sa isang variable at baguhin ang halaga nito upang 5. At tandaan ang aking pagkakatulad ng pagkakaroon ng box at handing ang kahon sa isang tao? Kaya pangunahing ay ang kahon na ito na tinatawag na x. At ito ay naglalaman ng mga halaga 3. At sinusubukan ko ipasa ang kahong ito upang i-lima. [00:28:58] At gusto ko sa limang upang baguhin ang halaga ng ang kahong ito upang 5. At pagkatapos ay i-print ko lang ang halaga ng x. Ito ay kung ano ang aking function-- ito ay kung ano ang sinusubukan ko ang gagawin. Lamang sinusubukan ko upang i-update ang halaga ng x sa 5. Ito ba ay malinaw kung ano ang ginagawa ang pag-andar? [00:29:16] OK, kaya kung ano ang magiging ang mga halaga ng x at may karapatan dito, ang unang linya, bago mismo ang unang line-- Gusto ko say-- ng programa? [00:29:27] MAG-AARAL: Malamang basura. [00:29:28] BINKY: basura bagay lamang. Kaya ko bang ilagay lamang N / A. Kaya hindi namin talaga alam. Tulad ng, isang hindi kahit pa umiiral, dahil hindi pa namin na tinatawag na sa limang. Int isang ay hindi ipinahayag. At x ay pagpunta sa umiiral dito, ngunit mayroon kaming hindi talaga bibigyan ng anumang mga halaga sa mga ito, kaya OK? [00:29:46] At pagkatapos ay, kung ano ang magiging ang mga halaga ng x at sa numero ng dalawang? [00:29:54] MAG-AARAL: [hindi marinig]. [00:29:55] BINKY: Kaya x ay magiging 3. Iyon ay madali, dahil kami ay nagtatalaga ng 3 dito. At pa rin ay hindi umiiral dahil ang isang lamang nabubuhay sa limang. Kaya ako ng pagpunta sa may 3 at wala. o tulad ng basura, kahit ano, hindi talagang tinukoy. At ngayon, ito ang mahalagang linya. Dito, kami ay pagpunta sa talagang tumawag sa limang. At tandaan kung ano ang aking sinabi. Kami ay hindi kailanman pumasa sa kahon. Kopyahin lamang namin ang halaga ng ang kahon sa isa pang box. Iyon ang lahat ng mga computer ko, kopyahin bagay mula sa isang lugar patungo sa isa pa. [00:30:27] Kaya sa limang, kung ano talaga ang ginagawa nito ito kopya ang halaga ng x sa isang. Kaya kung ano ay magiging dito? Ang mga halaga ng x at. 3 at 3, makikita namin lamang makopya ito sa mula sa x sa isang. Ayos. [00:30:45] Ngayon kami dito. At ngayon kami ay pagpunta i-update ang isang katumbas ng 5. Ano ang pagpunta sa mangyayari sa apat na linya? [00:30:55] MAG-AARAL: [hindi marinig]. [00:30:56] BINKY: isang maipo-update, ngunit x ay hindi-update. Dahil x ay nabubuhay pa rin sa pangunahing, ito ay isang ganap na naiibang mga bloke ng memorya. Ito ay isang iba't ibang mga variable. ng isa pang variable. Nangyayari ang mga ito upang magkaroon ng parehong halaga dahil ako nakopya ang halaga ng x sa isang. Ngunit ngayon kapag gumawa ako ng katumbas ng 5, ito hindi talagang epekto x sa anumang paraan. Ito ang trickier bahagi. Ay gawin itong kamalayan sa lahat? Oo? MAG-AARAL: Isa pang tanong, mayroon kang 3. Bakit ang isang already-- oh, hindi, ito ay 3. Paumanhin, hindi bale. Nabasa ko 5. [00:31:29] BINKY: Oo, 3, 3. [00:31:30] MAG-AARAL: [hindi marinig], oo. BINKY: At pagkatapos naming magtalaga ng 5 hanggang ng, ngunit hindi talagang baguhin ang x. Magandang? MAG-AARAL: Oo. BINKY: Oo? Maaari mong ipaliwanag kung paano muli isang nakakakuha nakopya [hindi marinig]? [00:31:42] BINKY: OK, kaya kapag tumawag ka sa limang ng x, kaya ito linya ng code dito. sa limang ng x, kung ano ang x? x 3 lang sa puntong ito, tama? Kaya maaari mong tingin lamang ng paglalagay ng 3 in dito at forgetting tungkol sa x. Maglagay lang ng 3 dito. Tulad ng, kami ay pagpunta sa kopyahin sa ibabaw ng halaga ng x sa isang int na ang bahala doon. OK? [00:32:13] Kaya ang halaga ng x 3. Kami ay pagpunta sa kopyahin 3 sa paglipas ng sa isang. At lahat ng ito sa iba pang mga bloke ng memorya, ang iba pang mga variable tinatawag na magkakaroon ng 3, pati na rin. Ay na magkaroon ng kahulugan? Oo? [00:32:25] MAG-AARAL: Kung magbibigay sa iyo sa limang tulad ng Mayroon ito bilang integer x sa halip na isang, Gusto na ayusin ang lahat ng bagay? [00:32:32] BINKY: Kung ito ay isang integer-- hindi, na hindi ayusin ang lahat. Kaya iyon ay isang napakahusay na pinag-uusapan. Ito ay hindi talagang mahalaga kung ano ang Tatawagan ka ng mga variable. Muli, ito ay isang isyu ng saklaw, dahil ang mga ito ay hindi ang parehong x. Ang mga ito ay ganap na iba't ibang mga puwang sa memorya. MAG-AARAL: [hindi marinig]. BINKY: Kaya hindi talaga mahalaga kung ano ang tawagan mo ang mga ito. Hindi nito maayos ang mga bagay, OK? Higit pang mga tanong? Oo? [00:32:55] MAG-AARAL: Paano ay ito pabalik sa numero ng limang [hindi marinig]? BINKY: OK, kami ay hindi tapos na pa. Sabihin pumunta sa numero ng limang, pagkatapos. [00:33:03] MAG-AARAL: [hindi marinig]? [00:33:04] BINKY: Ano? [00:33:05] MAG-AARAL: Mayroon ka ng isang balik sa lahat ng ba? BINKY: Wala kaming sa isang pabalik, hindi ng pangunahing. Ngunit awtomatikong pangunahing babalik 0 kung hindi mo nagbalik ng anuman. Oo? [00:33:15] MAG-AARAL: mai gagawin mo main-- o maaaring gumawa ka ng limang balik ang isang? [00:33:24] BINKY: Kami ay maaaring magkaroon ng sa limang magbalik ng, oo. Ngunit pagkatapos ay mayroon kaming upang magtalaga x ay katumbas ng return halaga ng limang, na kung saan ay magiging isang bahagyang iba't ibang mga programa. Ito ay gumagana. Ngunit kung ano ang gusto naming gawin ay kung ano ang tinatawag na pagbabago ng isang bagay sa lugar. Kaya gusto namin upang aktwal na baguhin ang na kahon at mag-alala tungkol sa pagkakaroon upang bumalik mga halaga o kahit ano. OK? [00:33:46] Ito ay tulad lang ang magpalitan ng pag-andar Nagpakita si David sa panayam, maliban ako lamang pagharap sa isang variable. At siya ay ginamit ng dalawang, kaya int isang at b at pagkatapos ay pansamantalang variable at watnat. OK? Kaya kung ano ang huling linya? Pagkatapos ng limang babalik ito, lamang ang isang ay pagpunta sa pumunta ang layo. Hindi namin ay may ngayon, at lamang x ay nakatira pa rin sa. [00:34:10] At hulaan kung ano? x ay hindi baguhin ang halaga nito, pagkatapos ng lahat, dahil kami lamang sa pagbabago ng halaga ng isang. Iyon ang dahilan kung bakit x 3 ay buong lugar. OK? Mahusay. Kaya ang program na ito ay hindi makamit kung ano ang gusto naming. Ngayon ayusin ito ipaalam. [00:34:24] At ang pag-aayos ng programa ay gumagamit ng mga payo. Ano ang ginagawa namin ay mayroon kaming tatlong linya na iba. Ang unang mga hindi namin ang pagpasa sa x. Kami ay pagpasa sa address ng x. Kaya sa halip ng pagkopya sa ibabaw ang halaga ng kahon, Pupunta ako pa rin upang kopyahin ang higit sa isang bagay. Ngunit ako ng pagkopya sa ibabaw ang address ng box. [00:34:45] Kaya kung pumasa ko ang address ng kahon sa limang, pagkatapos ay i-limang magagawang makita na sa memorya at baguhin ang halaga nito. [00:34:53] Kaya at pagkatapos ay i-up doon, mayroon akong na ang ay hindi isang int na ngayon. isang ay isang int bituin. Ito ay isang pointer sa isang integer. At pagkatapos, dahil ako pagpasa sa tugunan dito, at pagkatapos ay kung ano ang gagawin ko ay hindi isang katumbas ng 5, dahil isang ay may hawak na isang address. Kaya kung ano ang gusto kong gawin ay pumunta doon at i-update ang mga nilalaman ng address na ito may 5. [00:35:18] OK, na pumunta sa pamamagitan ng kaya hayaan ang lahat ng mga linya nang paisa-isa. Kaya kapag nagsimula ko dito, ako Mayroon pa ring N / A, N / A, N / A para sa lahat ng bagay sa unang linya, dahil mayroon akong hindi talaga mga ipinahayag na mga bagay-bagay pa. At pagkatapos ay i-line dalawang, mayroon akong x ay katumbas ng 3. Ang isang int star isang hindi umiiral, parehong bagay tulad ng dati. [00:35:39] Ngayon kagiliw-giliw na ito ay nakakakuha. Kaya ako ng pagpunta sa pumasa. At Ipagpalagay na ang address na ipaalam ng x 12 sa hexadecimal. Ipagpalagay na lang ito Hayaan. Ginawa ko ito up. Kaya kung ano ang ako ng pagpasa dito ay isang limang. Ako pagpasa sa 12. [00:35:56] Kaya kung ano ang halaga ay isang mayroon? [00:36:04] MAG-AARAL: [hindi marinig]. [00:36:06] BINKY: Paumanhin? [00:36:06] MAG-AARAL: [hindi marinig]. BINKY: Oo, tulad ng, upang sabihin ipagpalagay na kami ay narito, ngayon. Ako nagtatanong. [00:36:12] MAG-AARAL: [hindi marinig]. [00:36:13] BINKY: Ito ay pinasimulan. [00:36:14] MAG-AARAL: [hindi marinig]. BINKY: Dahil kami ang pumasa ng isang bagay sa function. Oo? [00:36:19] MAG-AARAL: Address ng x. BINKY: Ito ay pagpunta sa Mayroon ang address ng x. At ang address ng x 12, mabuti. Kaya x ay magiging 3, dahil hindi pa namin na talagang nagbago pa x. At pagkatapos ay may ay magiging 0x12, kaya ang address ng x, dahil iyon kung ano ang namin ipapasa sa limang. [00:36:38] At pagkatapos ay kung ano ang mangyayari kung sinusubukan naming pumunta doon? Ano kami makapupunta upang mahanap? Kaya kung subukan mong mag-print ng star ang isang, kami ay pagpunta sa sundin ang address na ito at makuha ang halaga sa loob. At ang halaga ay lamang ang parehong halaga na x May dahil iyon ang address ng x, na magiging 3. Sigurado namin magandang? [00:36:56] OK, at pagkatapos ngayon, namin talagang pumunta doon. At namin i-update ang anumang Nasa sa address na ito 12. Ginagawa naming 5. Kaya ngayon parehong x at bituin ng mga 5. [00:37:13] Bakit iyon? Dahil ang address ng x 12. At may 12 bilang halaga nito. Kaya kung sinusunod namin ang 12, kami ay lamang ng pagpunta sa makahanap ng x. Kaya kahit anong ginagawa namin star isang ay pagpunta sa mangyayari sa x, dahil naglalaman ng ang address ng x. OK? [00:37:34] At ito ay tulad ng pinakabuod ng pag-aayos. Kaya ngayon namin magawang, mula sa limang, talagang -access memory na nanirahan sa pangunahing. Kaya ito memory hindi nakatira sa limang, tulad ng dati, sa address na ito 12. At namin nagawang pumunta doon at baguhin ang halaga nito upang 5. [00:37:50] At pagkatapos ay kapag bumalik namin, nakalimutan namin tungkol sa isang. Nakalimutan namin tungkol sa isang star. At x ay limang pa rin. Kaya kung nais mong ipatupad ang magpalitan function, Gusto mong gawin lamang ang eksaktong parehong bagay, maliban kailangan mong i-int bituin dito, at iba pa at iba pa. OK? Sigurado namin magandang? Ayos. [00:38:10] Kaya pointer aritmetika. Ito ay isang bahagyang nakakalito paksa. Kaya ito ay lumiliko out na payo lamang integer. Maaari mong isipin na ang mga ito bilang integer. Dahil sa memorya, mayroon ka tulad ng memory address zero, isa, dalawa, tatlo, apat, lima. Upang maaari naming sabihin sa ilang memory address. [00:38:23] At iyon ay karaniwang kung ano ang gagawin kapag ikaw ay nasa at array, halimbawa. Isang array ay nais lamang magkadikit bloke ng memorya, ng maraming mga karakter, halimbawa, ng maraming mga ints. Kaya kung nais mong pumunta sa pangalawang int o sa mga third int, maaari mong sabihin sa ilang lamang ng isang bagay sa unang address, at ka pagpunta sa makarating doon. Kaya ito ay talagang kapaki-pakinabang para sa mga iyon. [00:38:39] At ang mga bagay na dapat sa isip, bagaman, ay na ito ay hindi lamang nais normal palatuusan sa kamalayan na kung pagharap sa, sabihin nating, isang int bituin, at magdagdag ka ng 1 dito, pagkatapos ay hindi ka pagpunta magdagdag ng 1 sa address, na iyong pupuntahan upang magdagdag ng 4 sa address. Dahil sa isang int 4 bytes. [00:38:57] Kaya ito ay tulad ng paglalakad sa isang array. Kung mayroon kami ng isang hanay ng maraming mga ints at pagkatapos ay subukan namin upang pumunta sa pangalawang isa, ito ay isa lamang lamang summing ang address ng una plus 1. Ngunit iyon ay hindi be-- lamang sabihin nating na ang address ng una ay 4. Dito, sa kasong ito. At kung sabihin sa ilang namin, kaya ito ay kung ano ang nangyayari. Mayroon kaming isang int. Int x ay katumbas ng 5. May halaga 5 X. At initialize namin ito pointer, int y int bituin y katumbas ang address ng x. [00:39:31] Ipagpalagay ang address ng x 4 Hayaan. Ano ang pagpunta sa mangyayari ngayon kung ako Sum magdagdag ng 1 sa y? Ito ay pagpunta sa aktwal halagang 4 sa halip na 1 lang. Kaya magdagdag ako ng 1, ngunit ito talaga Idinagdag 4, dahil computer na smart. Kaya ito ay pagpunta sa aktwal na magdagdag sa pamamagitan ng i beses ang laki ng mga uri ng pointer. OK? [00:39:58] Kaya kung ito ay isang pansamantalang trabaho, halimbawa, kung ito ay isang pansamantalang trabaho star y, at kung nagdagdag kami ng 1 pagkatapos ng gagawin na ito magiging 5, dahil pansamantalang trabaho ay 1 byte ang haba. Magandang? [00:40:10] At sa wakas, nakuha namin sa mga payo at array. Ito ay lumiliko out na ang bawat oras ka pagharap sa isang array, aktwal na pagharap sa isang pointer. Ang napaka maganda ang haka-haka na dahilan para sa ito ay ang array ay masyadong malaki. Kaya tandaan na ang sinabi ko na sa tuwing kayo na ipasa ang mga bagay-bagay sa paligid, kopyahin mo ang lahat. Kaya kung mayroon kang isang array na talaga, talagang malaki, hindi mo ba talagang i- kopyahin ang lahat ng bagay sa bawat oras ipasa mo ito sa paligid sa isa pang function, dahil iyon lamang napakalaking halaga ng trabaho. Kaya kung ano ang ginagawa mo lamang ang nakalipas ang address ng unang byte. At pagkatapos ay ang function ay magkakaroon ng access sa lahat ng mga elemento sa array na. Kaya ka nakapasa sa array ng address nito, kaya ang address ng unang byte. [00:40:48] Kaya kung ipinahayag namin int array 3, dito, alam namin paano i-access ang unang elemento gamit ang pagtatanda bracket. Kung naaalala mo ang bracket pagtatanda, array bracket 0 ay katumbas ng 1. Well, ito ay magiging eksaktong katulad ng pumunta lamang doon at ilagay 1. OK, nang eksakto ang parehong bagay. Kaya ang bracket pagtatanda in dito ay magiging katulad ng linyang ito. [00:41:13] At hulaan kung ano ang pagtatanda bracket para sa array bracket 1 ay magiging? Ito lamang ang parehong bagay bilang na ito. Kaya idagdag ang isa sa array. Ilipat ang isang kasama sa memory. Pumunta doon, at maglagay ng 2. OK? At ang linyang ito ang parehong bagay. Gusto naming pumunta sa mga third kahon, kaya array plus 2. Pumunta doon, at maglagay ng 3. Kaya sa memory, kung ano ang pagpunta sa mangyari ay hindi namin pagpunta sa may 1, 2, at 3 bilang tatlong elemento ng array. [00:41:44] Na namin ma tapos na ito gamit ang ang aming mga pamilyar na bracket pagtatanda. Gusto ko lang sa iyo guys malaman na ang mga ito ay ang parehong bagay. OK, mga tanong tungkol dito? Nice. Ngayon, pupunta ako ipasa ito sa paglipas ng sa Hannah, [00:41:59] Hannah: Ayos, yee-haw. [00:42:00] BINKY: pinag-uusapan ng memorya at bagay-bagay artikulo. [Palakpakan] [00:42:06] Hannah: Hi, cool na, kaya kami ay pagpunta sa makipag-usap nang higit pa nang kaunti tungkol sa memory, na kung saan namin lamang -address gamit ang mga payo. Kaya mayroong dalawang pangunahing mga bahagi ng memorya na nag-aalala ka namin. Mayroon kaming ng stack, na kung saan ay lumalaki hanggang sa ibaba, at kimpal, na pupunta pababa mula sa itaas. At ang stack ay pagpunta upang i-hold lahat ng aming mga variable halimbawa. Kaya ang bawat tawag sa isang function ay makakakuha ng sarili nitong maliit na frame sa stack. Kaya bilang mas maaga nabanggit Gabe, kung namin tumawag muli at muli ang pag-andar, kami ay pagpunta sa stack bagay sa stack. [00:42:35] At katulad, ang kimpal, na nagsisimula sa tuktok Mawawala na hawakan ang lahat ng mga memory na pabago-bago namin maglaan. At sa gayon ay namin pabagu-bagong maglaan ng memorya, ito ay bumaba patungo sa ibaba. Ilang bagay na dapat malaman kapag ginagamit namin ang stack at ang kimpal, may stack, kung kami ay may masyadong ni say-- recursive tawag many-- ipaalam, at kami ay tumawag muli ang isang function, at muli, at muli, at muli, at ito ay stacking up, stacking up, stacking up. At ito ay pagpunta sa pag-crash sa kimpal. Kami ay pagpunta sa maubusan ng memory. Na pupuntahan maging sanhi ng problema para sa mga computer. At na tinatawag na stack overflow. Kaya na talagang isang bagay sa iyo dapat magkaroon ng kamalayan ng at subukan upang maiwasan. At ang mga kimpal, kailangang tandaan hindi sinasadyang tumagas memory. Anumang oras na gamitin mo ang malloc, hindi kalimutan upang magbakante na memory. Kung hindi man, ipapakita ito lamang nasa kimpal nasayang, at hindi malalaman na ang computer ito ay libreng gamitin na memorya. Kaya mga ilang bagay upang maging maingat sa kung kailan ka pagharap sa ng stack at ang kimpal. Ang anumang mga katanungan na may ito? Kahanga-hanga. [00:43:31] OK, cool. Kaya ang ganitong uri ng may kaparehong ideya ng stack overflow, kung saan kami ay lagpas sa mga hangganan ng kung ano ang memorya ay namin ang dapat magagawang gamitin. Kaya tumagal, halimbawa, ang isang buffer, o mo maaaring sa tingin lamang ng mga ito bilang isang array. At sinabi namin, OK, kami ay pagpunta sa lumikha ng magandang maliit na array. Ito ay magiging isang string. O kaya ito ang nangyayari upang mag-imbak character. At lamang ito ng pagpunta sa kamustahin. At ito ay hindi tiyak. Iyan na ang lahat. [00:43:53] Ngunit kung ako ay may isang taong masama at nais na gawin ang isang bagay masamang gamit ang array, kung ano ang Maaari kong gawin ay subukan na magsulat nakalipas na ang dulo ng string. At tulad ng makikita mo, kung Sumulat ako ngayon sapat, Maaari ko talagang makakaapekto ang return address. At kung sisimulan ko ang upang makaapekto ang return address, Makakaapekto ko kung paano talaga tumatakbo ang programa. At sa halip na bumabalik, mo alam, isang masaya string tulad ng halo, ako maaaring gawin ang isang bagay masamang, tulad ng pumunta sa sa isang lugar tao sa iyong computer, pa rin memorya, baguhin ito, kahit anong gusto kong gawin. Kaya na kung ano ang magiging hitsura ng ay kung lamang uri ng ko napuno up ito may random na halaga ng basura, sa kasong ito, isang. At pagkatapos ay kapag ako ay talagang Nakakuha sa memory address, Ako makapagsimula ng pagpuno ito sa isang bagay na ginawa kung ano ang nais ko ito upang gawin. Ang anumang mga katanungan na may buffer overflow? Galing, lumilipad pakanan sa pamamagitan ng mga bagay-bagay na ito. [00:44:40] OK, kaya usapan natin ng maraming tungkol sa pointer sa Gabe. Paano talaga kami makakuha ng isang pointer? Paano ako makakakuha kami ng isang address sa memorya? Well, maaari naming gamitin ang magaling malloc tawag function, kung saan Mawawala upang makakuha ng isang maliit na bahagi ng memorya, partikular sa kimpal, bilang namin tinalakay, at ito ay pagpunta sa magbibigay sa iyo ng likod ng pointer sa na address sa memorya. At ang argument na kami kailangang ibigay sa malloc ay kung magkano ang espasyo sa memory namin na gusto. [00:45:04] Kaya maaari mong makita ang laki sa byte. Sabihin nating, halimbawa, o talaga, sa halimbawang ito, sapat na kaming maglaan espasyo para sa 10 integer. Kaya marahil kung ano ang pagpunta naming nais upang ilagay dito ay isang hanay ng mga 10 integer. Kaya namin ibinigay ito laki ng ints, na natutunan namin ay kung gaano karaming mga byte? MAG-AARAL: 4. Hannah: 4, maganda, at kami Gusto 10 ng mga sunud-sunod, kaya mayroon kaming sapat na espasyo upang iimbak ang lahat ng 10 integer, sa kasong ito. Isang bagay na sobrang mahalaga, anumang oras tumawag ka malloc, mayroon kang mag-check para sa null. Kung hindi mo check para sa null, mahusay, malloc kung ito ay nagpapatakbo na ng puwang at hindi na magbibigay sa iyo ng anumang higit pang memory, ito ay bumalik null. Kaya kung hindi mo suriin, malloc maaaring bumalik null. At pagkatapos ay kung sinusubukan naming dereference isang null pointer, kami ay pagpunta upang makakuha ng segmentation fault, na kung saan ay namin makipag-usap tungkol sa ngayon. Kahanga-hanga. [00:45:56] OK, mga tanong na may malloc? Oo? [00:46:00] MAG-AARAL: ba null pagsuri [Hindi marinig] huwag gawin ito sa pagsusulit? [00:46:05] Hannah: Oo naman, ang tanong ay aabutin matter-- sa pagsusulit, makakakuha ka ng mga puntos off kung hindi mo check para sa null? Oo, makakakuha ka ng mga puntos off kung hindi mo check para sa null. Anumang oras na tumawag ka malloc, parehong sa pagsusulit at ang iyong psets at sa tunay na buhay, mayroon kang mag-check para sa null. Magandang katanungan. [00:46:18] Gabe: Paano kapag hindi ko magbakante? Hannah: Nais ni na alam Gabe paano kung hindi namin libre. Pagkatapos ay magkakaroon kami ng isang memory tumagas sa aming kimpal. Ang anumang iba pang mga tanong? Oo? [00:46:27] MAG-AARAL: Maari you-- pumunta sa paglipas ng buffer overflow tunay na mabilis na muli? [00:46:30] Hannah: Oo naman. Ang tanong ay maaari naming pumunta sa paglipas ng buffer overflow talagang mabilis. Sabihin bumalik sa mga slide. Kaya isang buffer, maaari mo lamang isipin na ito bilang isang array, tama? Mayroon kang ilang mga puwang sa memorya. At noong una naming lumikha ng aming array, alam namin array Naayos laki, o sa aming buffer ay may isang nakapirming laki. [00:46:45] Kaya sabihin nating sa kasong ito, mayroon kaming lamang sapat na espasyo upang isulat ang string halo. Kung pumunta kami nakalipas na nakagapos, kung pumunta kami nakalipas kung ano ang aming array namin sinabi maaari itong pindutin nang matagal, maaaring namin talagang simulan pagsusulat sa memory na ang computer ay hindi Gusto sa amin upang isulat sa. At partikular, kung pindutin namin isang bagay tulad ng pagbalik tugunan ng pag-andar, kung saan, tulad ng anumang iba pang mga piraso ng memorya, lamang sa isang lugar sa iyong computer, maaari mo talaga baguhin iyon at simulan upang gumawa ng sama bagay. Sagutin ang iyong tanong? Galing, ano pa man? Oo? [00:47:17] MAG-AARAL: Kaya stack [hindi marinig], mo Sinabi pumunta mula sa ibaba ng pagpunta up. Sa loob ng hanay ng stack, ang ang memorya pumunta mula sa, tulad ng, tuktok down na tumutukoy sa bawat bakasyon? [00:47:28] Hannah: Paano ko you-- umalinsunod sa Rob sa isang ito. [00:47:35] Rob: Ito ay lalaki sa parehong direksyon tulad ng stack ay lumalaki. Hannah: OK. Rob: Kaya nakukuha ko nalilito. Ito ay magiging abstraction. Hannah: OK. Rob: Ito ay tama. Kaya kung ang stack ay lumalaking up, pagkatapos ay i-generally-- ito Hindi na kailangang maging ganito. ngunit maaari mong idedeklara int x. Pagkatapos ay ipinahahayag ninyo int y. Pagkatapos int x ay pangkalahatan ay maging mas mababa sa stack sa int y. Ngunit iyon lamang ang isang katotohanan lamang. Na hindi gusto ang isang mahalagang binhi bagay. [00:48:02] Rob: Kaya ang tanong muli ay isa lamang kung ano ang mangyayari sa bawat frame build up. Kaya ay makakakuha ng bawat pag-andar ng maliit na bahagi ng stack. At bilang pumunta up ka, sa loob ng maliit na piraso, sa loob ng frame na iyon, ipapakita namin sinasabi na variable sa loob ng frame na umakyat din. Tanong? [00:48:17] Rob: lamang upang maging sa mic. Hannah: Oh, oo. Rob: Makikita ko makipag-usap sa iyo. Hannah: Oh, oo, ang OK. Rob: pagbubukod ay para sa array at structs, kung saan array, ang isang mas mababang index sa array, at sa structs sa mas mataas na patlang sa structs ay garantisadong maging sa mas mababang address kaysa sa isang mas huling halaga sa array. Kaya iyon ay garantisadong. Ngunit anumang partikular na mga variable sa loob, tulad ng int x at int y sa loob ng isang function, walang kinakailangang mga relasyon sa pagitan ng kanilang mga address. Hannah: Ang isa pang tanong sa paglipas dito? MAG-AARAL: Kaya sa buffer daloy, buffer overflow lamang lamang ang nangyari kapag na, tulad ng, itinalaga isang halaga ng isang array na pagkatapos ay mas malaki? Tulad ng, maaari kang? Kaya kung hinihingi para sa isang bagay mula sa user-- [00:49:05] Hannah: MM-Hm. MAG-AARAL: Maaari bang sila papuwersa magbibigay sa iyo ng isang bagay na bumalik na mas malaki kaysa sa anumang mo na inilaan para sa kanila? Hannah: Oo naman, kaya ang tanong ay isa lamang, Maaari user ang nagbibigay sa iyo higit sa hilingin sa iyo para sa? MAG-AARAL: Oo. Hannah: Well, maaari mong pigilan ang user mula sa paggawa na. Maaari mong sabihin ay hindi bigyan mo ako ng higit sa x bilang ng mga byte Binigyan ko lang sa iyo na kuwarto para sa x bilang ng mga byte, x bilang ng mga character. Kaya na ang isang bagay na gusto mong pigilan. Oo? Ano ang pagkakaiba sa pagitan ng stack overflow at buffer overflow? [00:49:30] Hannah: OK, kaya ang stack overflow-- oh, ano ang pagkakaiba sa pagitan ng stack overflow at buffer overflow? Kaya gusto naming mag-isip ng stack overflow nangyayari kapag kami ay talagang stacking up ang mga tawag function. Sabihin nating mayroon kang isang recursive function, dahil alam namin na sa bawat oras na tumawag sa isang function, ito ay makakakuha ng sarili nitong frame sa stack. [00:49:45] Kaya stack up namin masyadong mataas, at pagkatapos ay sisimulan namin ang pag-apaw. At ginagamit namin ng masyadong maraming memorya, At Hindi pa namin kahit saan iniwan ko. Makuha namin ang error na iyon. [00:49:51] Buffer overflow ay sa loob ng programa. Gusto naming maaaring hindi kinakailangang magkaroon Naubusan ng memory sa parehong paraan na maaari kung kami ay stacking namin hanggang kaya maraming mga function na tawag, ngunit isulat namin nakaraan ang memorya na alam namin na maaari naming gamitin. At na nagbibigay-daan sa amin upang gumawa ng sama bagay. Oo? [00:50:08] Rob: Oo, baka gusto ulitin ito lamang, ngunit maaari ka ring mag-isip ng isang stack overflow bilang tulad ng isang partikular na uri ng buffer overflow. O sa tingin mo lang sa iyong stack bilang isang talagang malaking buffer. Pagkatapos ay kapag apaw mo stack, ito ay uri ng tulad ng isang buffer overflow. Ngunit ng stack overflow lamang tiyak na termino na ginagamit kapag ang stack mismo overflows. [00:50:24] Hannah: I-right, kaya upang ulitin para sa video, ito maaari mong isipin stack overflow bilang ang partikular na uri ng buffer overflow. Cool? Anumang higit pang mga tanong bago kami pumunta sa? Kahanga-hanga. [00:50:37] OK, cool, ni pag-usapan kaya hayaan ilang karaniwang mga error na mensahe. Ito ay isang bagay na may ipinapakita ng hanggang sa maraming mga pagsusulit, kaya isang bagay na Sulit pagkuha ng isang pangalawang hitsura sa. Ako ba na iyong naranasan hindi bababa sa ilan sa mga tulad ng iyong ginagawa Nagtatakda ang iyong problema. Kaya tiyaking maaari kang makipag-usap tungkol sa mga ito sa pagsusulit. [00:50:50] Kaya ang una ay ng segmentation fault. At iyon anumang oras namin subukan na i-access memory na hindi namin pinapayagan ka upang i-access. Kaya migh na nakita mo ito, halimbawa, sa breakout. Kung nakita banggaan bumalik null, at pagkatapos ay sa iyo Sinubukan gawin ang isang bagay sa na halaga null, Maaaring magbigay ang computer ka ng segmentation fault. Kaya isa, isang mahalagang bagay na dapat gawin upang subukan upang maiwasan ang mga ito ay upang laging suriin para sa null. [00:51:13] Maaaring nakita rin implicit deklarasyon ng function. Kaya ito ay kung ano ang mangyayari kapag nagpakita ka Allison kung paano namin gumawa ng prototype, i-right? Kaya sabihin nating mayroon kaming ilang mga function na namin tukuyin. Hayaan sabihin ng kubo. At na napupunta sa ibaba sa aming mga pag-andar, sa ilalim ng pangunahing. [00:51:27] Kung nakalimutan naming sabihin sa computer tungkol sa kubo, kapag pangunahing sinusubukan na tumawag sa kubo, ang computer ay, tulad ng, oh aking susmariyosep. Wala akong palagay kung ano ang ibig sabihin nito ay. Hindi ko alam kung ano ang gagawin, narito. Kaya ang prototype sabi ni huwag mag-alala. Pupunta ako sa sabihin sa iyo. [00:51:42] Ito darating. Huwag sumigaw sa akin. Huwag magbigay sa akin ng isang implicit deklarasyon ng function. Kaya kung kang makakuha ng error na ito, isa sa bagay na iyong pupuntahan gustong gawin ay siguraduhin na mayroon kang ang iyong mga prototype. OK? [00:51:53] At huling ngunit hindi bababa sa, hindi nagbigay-alam identifier ay mahalagang kapag sinusubukan mong gamitin ang isang variable na hindi mo ipinahayag. Kaya ang lahat ng isang biglaang simulan mo sinasabi tulad n plus plus. At sinasabi ng computer na kung ano ang n? Hindi mo sinabi sa akin n ay isang bagay. [00:52:06] Kaya isang bagay na mayroon ka upang matiyak na ginawa ay sabihin ang computer kung ano n ay. Kaya halimbawa, n maaaring maging isang integer. At pagkatapos ay mong iwasan ang error na ito. Ang anumang mga katanungan sa karaniwang mga error? Oo? [00:52:17] MAG-AARAL: Para sa implicit deklarasyon ng function, maaaring ito ay din na tinanggal ng isa ng mga library na ipagpalagay upang isama, sa halip na ang prototype? [00:52:24] Hannah: I-right, kaya ang tanong ay, maaari mong ring makakuha ng error na ito kung nakalimutan mong isama ang isang library. [00:52:28] MAG-AARAL: Oo. [00:52:29] Hannah: Oo naman, dahil sa parehong paraan na gusto naming ilagay ang aming mga modelo bago ang pangunahing pag-andar, kung kami ay may isang library, ang mga pupunta sa tunay na isama ang mga modelo, isama ang mga kahulugan ng pag-andar. Mahusay na tanong. [00:52:40] MAG-AARAL: Para sa pagse-segment pagkukulang, gusto na rin mangyayari kung namin, tulad ng, sinubukan -access ang isang variable, tulad ng, sa ibang [hindi marinig] kaysa ito ay ipinahayag sa? Hannah: Oo naman, kaya kami ay makakuha ng segmentation fault kung sinubukan naming i-access ang isang variable sa labas ng saklaw? Ay na ang isang tanong? MAG-AARAL: Oo. Hannah: Magandang. Kaya marahil, na iyong pupuntahan upang makakuha ng hindi nagbigay-alam identifier error sa halip. Kaya lang pagpunta sa sabihin Hindi ko alam kung ano na. Mahusay, kahit ano? Oo, OK, maganda. [00:53:10] Lahat ng righty, kaya't Rekursiyon. Kaya nabanggit ko ng dalawang beses na maaari naming makakuha ng isang stack overflow dahil kami ay pagtawag sa aming recursive function na sa gayon maraming beses. Kami ay nakakakuha ng lahat ng mga stack mga frame, blah, blah, blah. Ano ang kahit ay isang recursive function na? Well, isang recursive function ay anumang function na tawag mismo. [00:53:26] Ang ilang mga bagay na dapat malaman kung kailan mo ay pagpapatupad ng recursive function, huwag kalimutan na isama ang isang base kaso. Ang isang base kaso ay ang punto kung saan magtapos namin. Kaya, halimbawa, kung kami ay coding, , Sabihin nating, Fibonacci recursively, nais naming tiyakin na kapag makuha namin sa 0 o ang unang Bilang Fibonacci, ang dalawang numero ay may mga kasong ito, dahil iyon ay hindi umaasa sa mga bagay na dumating bago. Ang mga mayroon ng kanilang sariling halaga. [00:53:51] Ang ilan sa mga pro upang Rekursiyon, na isang tanong nasaksihan namin sa mga nakaraang pagsusulit. Maaari silang humantong sa higit pang madaling maintindihan, eleganteng code. At ng maraming mga pag-andar, isang maraming iba't ibang mga algorithm, talaga ninyo bang ipahiram sa kanilang sarili na Rekursiyon. Ang kanilang mga kahulugan ay maaaring maging recursive in at ng mismo. Kaya Fibonacci ay isa. Factorial ay isa. Pagsamahin ang pag-uuri ay kung one-- lahat mga bagay na maaari mong tingnan. OK, anumang mga katanungan? Oo? [00:54:15] MAG-AARAL: Ay isang sulok kaso katulad ng isang batayang kaso? O kaya ay na para sa ilang mga iba pang uri ng [hindi marinig]? [00:54:22] Hannah: Oo naman, kaya ang sulok kaso ay any-- kaya ay sulok kaso katulad ng base kaso? Ang isang sulok kaso ay anumang bagay na iyong Maaaring kumilos code ng kaunti naiiba. Base kaso ay isang uri ng mga kaugnay na, sa na ang mga ito ay tulad ng partikular na mga kaso na nais mong tingnan. Ngunit ang ideya ng isang base kaso ay Nais mo ang iyong recursive function na upang ihinto sa ilang mga punto. Hindi ito maaaring panatilihin sa pagtawag mismo magpakailanman. Kailangan itong ihinto sa ilang mga punto. [00:54:49] Rob: Oo, madalas, ang iyong base ng kaso Maaaring maging mga halimbawa ng sulok bases. [00:54:53] Hannah: I-right, cool, kahit ano? [00:54:55] MAG-AARAL: Maaari mo bang ipaliwanag bases nang kaunti pa? Hindi ko pa maintindihan [Hindi marinig] base kaso. [00:55:01] Hannah: Ng base kaso? [00:55:02] MAG-AARAL: kaso Base, oo. [00:55:03] Hannah: Oh oo, sigurado. Tingnan natin Hayaan. Huwag namin tisa sa paglipas dito? Oo, gawin namin. OK, kaya talagang mabilis, idedetalye ko subukan na isulat malaki sapat sa gayon maaari mong makita sa screen. Ay makipag-usap tungkol sa Hayaan, talagang mabilis, Fibonacci. Kaya kukunin ko na magbibigay sa iyo ng pagkakasunud-sunod Fibonacci. Maaari mong hanapin ang kahulugan. [00:55:17] Mahalaga, ang bawat numero sa pagkakasunod-sunod ay ang kabuuan ng dalawang nakaraang mga numero. OK, kaya ang paraan na ako lamang na inilarawan Fibonacci, maaari mong marinig ang Rekursiyon, tama? Kapag sinabi ko sa bawat numero ay ang kabuuan ng dalawang nakaraang mga numero, maaari naming sabihin ang OK. Well, ang nth Fibonacci number-- kaya sabihin sabihin nating mayroon namin ang function na ito tinatawag na fib-- maliit na kasinungalingan ng n ay magiging katumbas ng maliit na kasinungalingan ng n minus 1 plus-- ng paumanhin, magpapadala kami ng pagpunta sa susunod na linya higit sa here-- maliit na kasinungalingan ng n minus 2. [00:55:52] OK, kaya ito gumagana mahusay na kung ikaw ay tinitingnan, halimbawa, ang zero, isa, dalawa, tatlo, apat, ikalimang Bilang Fibonacci, kung saan maaari mong sabihin na 5 ay katumbas ng 2 plus 3. Ngunit ano kung ikaw ay sa simula? Paano kung lamang mong naaabot ang ang mga unang dalawang mga halaga? [00:56:08] Upang makakuha ng mga ito 1, hindi mo magagawa sabihin idagdag ang nakaraang dalawang, dahil na zero and-- Hindi ko alam. Kaya sa isang punto, kailangan naming ihinto. Sa ilang mga punto, kailangan naming sabihin na ang mga dalawang lang ay ang kanilang sariling mga kahulugan. Ang bilang 0 Fibonacci ay 0. At ang unang Bilang Fibonacci ay 1. [00:56:26] Kaya ang paraan na maaari kong code na ito, ako sasabihin kung n ay mas mababa sa dalawang, pagkatapos ay bumalik lamang n. At iyon ay magiging aking base kaso. Iyon ay kung paano alam kong itigil may isang recursive function. Malinaw ba iyon? Kahanga-hanga. Ano pa sa Rekursiyon? Maganda. [00:56:45] Mabilis na pag-usapan natin ang -uri-uriin magpatakbo ng mga oras sa paghahanap at. At pagkatapos ay ako ay magbibigay sa Davin ilang oras upang makipag-usap tungkol sa coding mga halimbawa. Kaya dito ay ang mga pangunahing paghahanap at uri na dapat mong malaman tungkol sa. Guarantee-- Hindi ko magagarantiya, dahil hindi ko nakita ang quiz-- ngunit ito ay lumalabas pagsusulit pagkatapos ng pagsusulit pagkatapos umalis. Kaya nga gamitin ang tsart na ito. Tulad ng, tumagal ang chart na ito. Ilagay ito sa iyong impostor sheet. Ikaw ay isang masaya tao. [00:57:09] Sinasabi nito sa atin ang mga oras run ng bawat ng mga pag-uuri at mga search algorithm. Kaya linear paghahanap, maaari mong makita run oras, at parehong may binary paghahanap. Pumunta sa kung ano ang mga algorithm gawin, ang pangkalahatang ideya. Tingnan ang ilang mga pseudocode, kung hindi code mismo. [00:57:25] Makikita mo na bubble-uuri-uri ay may mas mataas na nakatali sa pinakamasama kaso ng n nakalapat. Kaya kung ang aming array ay ganap na paurong bago namin nais na ayusin ito, Gusto naming sabihin na iyon pagpunta sa tumagal n nakalapat na hakbang. Ngunit sa pinakamahusay na mga kaso, kaya ang mas mababang nakatali para sa pinakamahusay na kaso ay magiging kung ito ay na lubos na pinagsunod-sunod. Pagkatapos lahat ng mayroon kaming gawin ay suriin na ito ay pinagsunod-sunod. Mayroon bang isang katanungan sa paglipas dito? [00:57:47] MAG-AARAL: Kapag gagawin nais mong gamitin ang pag-uuri? Ang pag-uuri. Ako lang malaman. [00:57:52] Hannah: Kapag gagawin mo nais na gumamit ng pag-uuri seleksyon? Isa ito? Ang isa na n nakalapat sa parehong mga sitwasyon? [00:57:55] MAG-AARAL: [hindi marinig]. [00:57:56] Hannah: Kaya ibang-iba. Kung mayroon kang tukoy na mga kinakailangan para sa iyong programa, tulad ng mga bagay tulad ng kung sinabi namin lamang ipatupad ang search-- sorry-- ipatupad ang pag-uuri, ikaw malamang na gusto mong pumunta para sa isa sa mga iyon May pinakamahusay na kaso ng n, o ang isang mas mababang bound sa pinakamahusay na kaso ng n. Ngunit may maaaring maging ang ilang mga bagay tulad ng, sabihin nating, swaps ay talagang mahal para sa ilang mga kadahilanan. Pagkatapos ay gusto mo gawin bubble-uri-uriin, dahil hindi mo kailangang gawin sa maraming swaps, mga bagay tulad na. Anumang other-- yes? [00:58:23] MAG-AARAL: Gusto itong maging [hindi marinig] sasabihin na [hindi marinig]? Hannah: Iyon ang isang bagay na sabihin sa iyo kung naghahanap ka sa pagpapatupad. Ang paraan gagawin ko talaga isipin ang tungkol sa kung bakit ito n squared ay mayroon kaming upang tumakbo sa pamamagitan ng aming hanay ng mga haba n, paggawa ng hindi hihigit, n swaps bawat oras. At mayroon kaming upang gawin ito proseso ng n beses. [00:58:46] Kaya kapag mayroon kang magsagawa ng hindi hihigit, n swaps at para n nagpapatakbo sa pamamagitan ng array, Mayroon bang pupuntahan dapat n nakalapat. Ngunit oo, ito ay nagsiwalat sa pamamagitan ng double para sa loop, bilang ang tanong asked-- o nested para sa loop, dapat ko bang sabihin. OK? [00:59:00] At pagkatapos ay pagsamahin ang pag-uuri, na ay ang pinakamabilis na uri-uriin kami ngayon, o na-sakop namin sa CS50, alam na ang pangunahing algorithm ay ideyang ito ng pagsira sa Pinagbukud-bukod piraso at pagkatapos ay pinagsasama-sama ang mga pinagsunod-sunod bits. At ay makakakuha sa amin mag-log n log n. Ang anumang mga tanong sa paghahanap at uri bago ako pumasa ito sa? Tingnan natin Hayaan. [00:59:21] Oh, naka-link na mga listahan. Paumanhin, mayroon akong isa pang paksa. OK, kahanga-hangang, naka-link na mga listahan. Problema sa mga array, mayroon sila ng isang nakapirming laki. Kaya kung hindi mo alam kung gaano kalaki iyong input ay magiging, hindi mo nais na lumikha ng isang array. Dahil kung lumikha kami ng isang array na ay masyadong maliit, maaari naming patakbuhin sa buffer overflow. [00:59:35] Kaya sa halip, maaari naming gawin ang isang bagay na may naka-link na mga listahan, na Binibigyang-daan sa amin upang magkaroon ng isang dynamic na sized na istraktura ng data na magbibigay-daan sa amin upang mag-imbak ng mas may kakayahang umangkop dami ng data. Kaya sa loob ng bawat node sa aming listahan na naka-link, mayroon kaming dalawang piraso. Mayroon kaming aktwal na halaga na nag-iimbak ito. Kaya ito lamang ang bagay na gagawin mo makita sa array, halimbawa. At pagkatapos naming panatilihin din ang track ng isang pointer sa susunod na bagay sa memorya. [01:00:04] Hindi tulad ng array, na Alam namin ay pumunta sa lahat sa be-- mga elemento ng array ay ang lahat sa isang pagkatapos ng isa pang sa memory-- na naka-link mga listahan ay maaaring saanman sa memory. Ang mga ito ay di-makatwirang mga lokasyon. Kaya kung kami ay upang talaga pumunta makita ang mga ito, kami Kailangan upang masubaybayan ang susunod na bagay sa aming listahan. [01:00:19] At pagkatapos ay upang malaman kung saan listahang iyon bilang isang buo ay, ang mayroon kami upang masubaybayan ang napaka unang elemento sa aming listahan na naka-link. At makikita na nagbibigay-daan sa amin upang sundin sa pamamagitan ng. [01:00:31] Kaya ito ay kung paano mo maaaring tukuyin ang isang mode. Ito ay isang mahusay na pagkakataon upang samantalahin ang structs. Dahil mayroon kang ideyang ito, mahusay, para sa isang naibigay na node, mayroon akong dalawang piraso. Mayroon akong aktwal na halaga mismo. At pagkatapos ay mayroon akong isang pointer sa susunod na elemento sa naka-link na listahan. Kaya tingnan mo, mayroon kaming isang integer n, na kung saan ay magiging aktwal na halaga, at pagkatapos ay isang pointer sa isang node, na tinatawag na susunod. Kaya na pupuntahan ang susunod na sangkap sa aming listahan na naka-link. MAG-AARAL: Oo? Mayroon ba kayong upang tukuyin iyon ang bituin ay tulad ng isang struct? [01:01:01] Hannah: Oo, kaya dahil ito ay halos tulad ng isang uri ng, ito ay tila isang recursive kahulugan sa na namin kailangan mong malaman kung ano ang isang node ay sa loob sa paghahanap ng isang node. Dahil hindi talaga alam kung ano ang isang node ay lubos na hanggang sa makuha namin sa dulo ng this-- at pagkatapos na ito maaari naming tumawag lang ito isang node-- sa loob ng kahulugan na ito, kailangan naming tumawag ito ng isang struct node. Mahusay na tanong. Ano pa? Oo? [01:01:26] MAG-AARAL: Bakit ginagawa namin ang masasabi node dalawang beses? Dahil kapag kami ay nasa [hindi marinig] Nagkaroon lamang nating gawin ito sa tuldok-kuwit, ngunit ngayon ay mayroon kaming na makita na ang struct node? [Hindi marinig]. Hannah: Kaya naniniwala ako sa huling halimbawa, kami ay lamang sa paglikha ng anumang oras sa iyo Nais na gumamit ng isang mag-aaral matapos iyon, Nagkaroon gamitin ang struct node-- Ako sorry-- mag-aaral struct. Pinapayagan kami nito na, pagkatapos ng katotohanan, lamang paggamit node magdagdag ng bagong uri, mahalagang. Na make-unawa? Kaya gusto naming bumalik at tingnan ang code bago. Ngunit Gusto ko hulaan na hindi namin gamitin typedef. At hiniling namin ang tanong, bakit kailangan naming gamitin typedef? Binibigyang-daan ka Typedef sa amin upang maiwasan ang salita struct sa simula. Oo? MAG-AARAL: Ano ang uri ng mga tanong na makabuo sa mga tuntunin sa mga tuntunin ng nodes at naka-link listahan? [01:02:10] Hannah: Kaya ang isang bagay ay maaaring namin sabihin kung paano maaari kang maghanap sa pamamagitan ng isang naka-link na listahan? OK, dahil ito ay isang kaunti pa kumplikado kaysa sa kung namin hinahanap sa pamamagitan ng isang array. Maaari lang namin tumingin sa elemento zero, elemento ng isa, elemento ng dalawa, blah, blah, blah. Kung gusto naming maghanap sa pamamagitan ng isang naka-link na listahan, nais naming aktwal na kailangang sundin ang maliit na maze ng mga payo. Kaya sabihin aktwal na pumunta sa pamamagitan ng tunay mabilis. Ano ang maaari naming gawin sa -order to-- ipaalam sabihin ng namin Gusto upang umulit lamang sa pamamagitan ng aming lubos na naka-link listahan. Gusto naming simulan sa ulo. At pagkatapos ay upang lumipat sa susunod na elemento, sa halip na lamang incrementing sa pamamagitan ng isa tulad ng maaari sa pagpunta sa pamamagitan ng isang array namin, talaga kami ng pagpunta sa sundin ang mga susunod na pointer, upang maaari naming makita kung saan sa memorya ng susunod na elemento ay. Kaya alam ko hindi ito sapat upang gawin ang lahat ng ito sa ngayon, ngunit magkakaroon ka ng mga slide. Kaya maaari kang pumunta sa pamamagitan ng mas mabagal ng kaunti ito. Ngunit mahalagang, kung ano ang gusto namin gawin ay sundin ang mga payo sa pamamagitan ng ang kabuuan ng naka-link na listahan. Kaya ito ay isang tanong maaaring hilingin. [01:03:01] Isang bagay na napansin sa pagpapasok ng, sabihin nating Nais namin upang ilagay ang isang bagong elemento sa harap ng aming mga listahan na naka-link. Mayroon kaming upang maging maingat tungkol sa pagkakasunud-sunod kung namin reassigned sa mga payo. Dahil sabihin nating ko lang sinabi OK. Gumawa ng ulo punto upang ang bagong elemento. Tiyakin lang ito ay tumuturo sa 1 Pagkatapos, hindi namin mahalagang nawala ang natitira sa aming listahan, dahil hindi ko matandaan kung saan 2 buhay. [01:03:25] Kaya dapat nating gawin sa isang napaka-tukoy na order. Una, gumawa kami ng bagong point elemento sa ulo. At pagkatapos ay gawin namin ang ulo nagtuturo sa mga bagong elemento. Kaya tingnan natin kung ano na kamukha may arrows-- katulad nito. Kaya mayroon kang muna ang bagong point elemento sa lumang ulo. At ngayon, mayroon kaming ang ulo tumuturo sa unang bagong elemento. Ang anumang mga katanungan na may ito? [01:03:49] OK narito muli ang ilang mga code, ang isang bagay upang tumingin sa isang maliit na bit sa ibang pagkakataon. At ngayon ay magpapasara ko ito sa paglipas ng sa Davin para sa GDB at ng kaunting kasanayan coding sa papel. Maganda. [01:04:01] Rob: At Rob. [01:04:01] Hannah: Oh, Davin at Rob. Sorry. [01:04:03] MAG-AARAL: Woo! [01:04:08] Rob: Salamat. [01:04:09] DAVIN: Gusto mo bang sabihin lahat ng tunay na mabilis? Rob: Oo, oo. DAVIN: Kapag ako up. OK, habang naglalagay Rob ang mikropono sa, kaya kung ano ang GDB? Dapat na nakita Ang bawat tao'y GDB sa klase at din sa oras ng opisina. At dapat kang maging ang paggamit nito. Kaya kung ano ang GDB? Sinuman? [01:04:28] MAG-AARAL: Ito ay isang debugger. [01:04:29] DAVIN: Ito ay isang debugger. At ano ang pinapayagan ito mong gawin? Tulad ng, kung bakit gusto namin GDB? MAG-AARAL: Upang pabagalin ang programa. DAVIN: I-right, sa gayon ay maaari kang maglakad sa pamamagitan nito ng isang tao mong bilis. At kaya kung ano ang ilang mga command na maaari mong gawin? Well, pahinga ay marahil ang iyong mga paboritong command. Dahil na nagbibigay-daan sa iyo masira ang programa at aktwal na maglakad sa pamamagitan nito linya sa pamamagitan ng linya. [01:04:44] Run ay nagbibigay-daan sa iyo upang patakbuhin ito. Susunod, tulad ng stepping sa pamamagitan ng. Ano ang susunod na sa pagitan ng at na hakbang? Maghintay, sabihin natin na nang malakas. Ito ay tama. [01:04:54] MAG-AARAL: [hindi marinig]. [01:04:55] DAVIN: Oo, kahanga-hanga. Kaya tulad ng, susunod na hakbang at, kung you're-- sabihin nating mayroon kang isang function sa iyo tukuyin. Ipagpalagay natin na ang ilan sa iyong pangunahing pag-andar, at lamang mong naaabot ang susunod, susunod, sa susunod. Aktwal na iyong pupuntahan maisagawa na function, ngunit ka pagpunta sa lundagan ito. Kung pinindot ninyo ang hakbang na ito, o s o anumang, ikaw ay pagpunta sa aktwal na tumalon sa na pag-andar, at pagkatapos ay maaari mong pindutin ang susunod upang makita ang iba't ibang mga tawag sa loob ng partikular na function. Oo? [01:05:16] MAG-AARAL: Mayroon bang isang paraan upang lumipat, tulad ng, i-back out? DAVIN: Tapos na, oo, matapos may tumalon out ka. Kaya pupuntahan matapos na function, at pagkatapos ikaw ay magiging pabalik sa pangunahing, halimbawa. I-print ay i-print ito nang isang beses. Isang bagay na laging ko bang gamitin ang display. Display ay i-print ito Patuloy sa buong kabuuan ng iyong programa. [01:05:32] Halimbawa, kung ikaw ay sa isang para sa loop, at Gusto upang makita kung paano ang pagbabago ng isang bagay, at hindi mo nais na, tulad ng, patuloy ginagawa tulad ng pag-print, -print, i-print, display Ipapakita variable na patuloy na, sa tuwing ang mo pindutin ang Susunod. At magpatuloy. Kaya GBD, na GDB. [01:05:47] MAG-AARAL: Ano ang isang kung saan mo [hindi marinig]? DAVIN: Ano ito? [01:05:52] MAG-AARAL: Ano ang the-- ang lokal na mga variable. Rob: May isang bagay na talagang tulad ng lokal o isang bagay. Can't-- ko [01:05:58] DAVIN: Ito ay maaaring maging isang bagay tulad na, oo. [01:05:59] Hannah: Sa mga lokal? [01:06:00] DAVIN: Iyon na. Iyon ang isa. Rob: Magandang. [01:06:03] DAVIN: Oo. [01:06:04] MAG-AARAL: Ano ang patuloy na gawin? [01:06:06] DAVIN: Ito continues-- kaya lang pagpunta upang ipagpatuloy ang iyong mga programa. Kaya kung masira at pindutin ang magpatuloy, ito ay pagpunta upang tumakbo lamang ng programa na hanggang ito ay umabot muli break na iyon. Kaya halimbawa, kung sinira sa isang function, at tapos ka pagpunta sa gawin tulad ng para sa loop o isang bagay tulad na, at pindutin ka magpatuloy, ito ng pagpunta sa magpatuloy at bumalik sa break na iyon. O kaya walang pahinga, ito ay pagpunta sa magpatuloy at tapusin sa programa. [01:06:22] Rob: gusto Kaya lang tumakbo hinto sa pinakadulo unang breakpoint mo pindutin, kung pagkatapos ay pindutin ang magpatuloy, magkakaroon ito panatilihin pagpunta hanggang sa ito sa susunod na breakpoint. At pagkatapos ay magpatuloy ay pupunta sa susunod na breakpoint. DAVIN: Anumang iba pang mga katanungan sa GDB? Kaya tingin ko sa nakaraan, na hiniling namin sa iyo kung ano ang GDB ay at bigyan ng halimbawa ng ilang bagay sa iyo Maaari gawin sa GDB, kaya tunay na simple, ngunit oo. Mayroon kang pumunta. At node? [01:06:43] Rob: Oo, kaya kung aling mga direksyon ay ito? MAG-AARAL: Iyon ay ito. DAVIN: Maghintay. Rob: tao na ito? DAVIN: isa iyon. Rob: tao na ito, naku, ako ay hindi nauunawaan. Kaya kami ay hindi malinaw sa kung anong the-- kong gawin hindi alam kung sino ang was-- ito ngunit ang tanong. Hindi namin alam kung ano ang mismong ay nagtatanong tungkol dito, kaya lang upang linawin ang isang bagay. Kaya una, tulad ng sinabi ko bago, typedef ka laging gamit lamang lumikha ng isang palayaw para sa isang uri. Kaya dito mismo, ang palayaw na kami ay paglikha ay para sa uri ng struct node. [01:07:13] Kaya unang, nang binabalewala ang node sa typedef, kaya ito struct node kulot suhay pababa sa susunod na kulot suhay ang uri struct node. At kailangan naming na node up doon, dahil kami kailangan na banggitin ang mga node in dito. Kaya sa ganitong uri ng recursive struct, Kailangan mong bigyan ito struct ng pangalan, o iba hindi mo magagawa sabihin struct node in dito. Sapagkat bago sa mag-aaral kapag tayo ay nai-type, sa palagay ko, hindi namin masasabi mag-aaral up doon, dahil kami Hindi na kailangang sabihin struct mag-aaral sa loob ng struct mismo. Kaya ito ang recursive na Pinipilit sa amin upang sabihin node doon. [01:07:43] Node na ito ay lamang ang pangalan namin pagbibigay node para sa typedef. Kaya na node ay hindi katulad ng na node. Ngunit ito struct node ay ang parehong bilang na struct node. DAVIN: Kaya sa tuwing kang tumawag, tulad ng, node sa iyong pangunahing pag-andar, Hindi ka pagpunta sa ang masasabi struct node. Maaari mo lang sabihin node, dahil node ay isang different-- ay isa lamang na iyong sinasabi, OK. Sa halip na tumawag struct node sa aking code, Gusto ko lang palitan ang pangalan nito bilang node upang gawing mas madali. [01:08:04] Rob: Kung palagi gamitin typedef, pagkatapos ito ay ang tanging lugar na iyong pupuntahan ay may idedeklara isang variable na may struct node lagyan ng star, oo. [01:08:14] DAVIN: OK, kaya ang huling bahagi Mahirap magturo because-- Rob: Ano? [01:08:24] DAVIN: Dahil ito ay coding sa papel. Kaya bawat taon kami ay code sa mga tanong papel. Kaya palagay ko noong nakaraang taon, 12 out sa 80 puntos ay code sa papel. Taon bago iyon, 10 out ng 80, taon bago iyon, 20 sa 100, kaya marami-dami ng mga ito. Kaya ka ng pagpunta sa may upang magawang sa code up ang mga pag-andar sa pamamagitan ng kamay. [01:08:40] Kaya naisip ko na maaari naming pumunta sa pamamagitan ng isang ilang sa mga ito at makita kung paano gawin ng mga tao, uri ng maglakad sa pamamagitan ng ang mga ito dahan-dahan sa mga tao. Kaya sa pangkalahatan, strlen at atoi naging napaka-tanyag. Nitong nakaraang taon, sa tingin ko namin ay may GetPositiveInt at RandomInt. Ngunit yukod, kaya kapangyarihan, din isang positibong isa masyadong. Hayaan pumunta lamang sa pamamagitan ng siguro isa o dalawa sa mga magkakasama. Ano ang nais na makita ng mga tao? [01:09:05] MAG-AARAL: Atoi. MAG-AARAL: Oo. DAVIN: Atoi? MAG-AARAL: [hindi marinig]. DAVIN: OK, pupunta ako upang gawin ito sa board. Mayroon ba kayong kagustuhan kung gagawin ko dito o doon? Doon, sabi ni Gabe doon. [01:09:16] Rob: At ito ang pangkalahatang mga saloobin sa mga coding katanungan. Subukan na magsulat ng isang bagay. Huwag mag-iwan itong blangko. [01:09:22] DAVIN: Oo. Rob: Kung maaari mong makuha ang bumalik tamang uri, o marahil maaari naming ibigay ito sa ka, ngunit kung maaari, tulad ng, isulat ang pangkalahatang function na lagda, Kung maaari kang makakuha ng tamang base kaso, o kaso sulok, o pagtanda ng tseke para sa null, hangga't mayroon kang ilang mga mga bagay, at pagkatapos ay marahil kami maaaring magbigay sa iyo ng ilang tumuturo para sa mga problema. Huwag mag-iwan lamang itong blangko. [01:09:36] DAVIN: Oo, at kung ay ganap lamang stumped sa kung paano talagang maging code. Kung nagsusulat ka pseudocode, na mahusay masyadong. Kaya ito ay tulad ng, ito ay isang anim na punto-uusapan, at isulat mo ang tamang pseudocode, makakakuha ka ng hindi bababa sa dalawang mga punto. Kaya huwag lamang mag-iwan ang mga ito blangko. Subukang maglagay ng isang bagay. [01:09:50] Rob: Kailangan itong maging tamang pseudocode, bagaman. [01:09:51] DAVIN: Oo. Rob: Kaya hindi namin sa pangkalahatan ay mas kaunti hindi mahigpit na may mga bug sa pseudocode. DAVIN: OK, kaya mo guys Nais upang makita atoi. OK, kaya lamang really-- kaya kung ano ang gusto mong gawin ay ka pagpunta sa maging ibinigay ng ilang mga uri ng numero. Subalit ang bilang na ito ay hindi magiging isang int, i-right? Ano ang ito ng pagpunta sa maging? [01:10:08] MAG-AARAL: [hindi marinig]. [01:10:09] DAVIN: Ito ay pagpunta sa maging isang string, i-right? Kaya kung saan bibigyan isang string-- ni say-- ipaalam [01:10:13] Rob: Dapat ko bang makuha ang isang editor? Maaari ko bang hilahin up-- [01:10:16] DAVIN: Oh, gusto mong gawin ito on-- [01:10:16] Rob: Ginusto mo ba ang board? [01:10:17] DAVIN: Ano ang gusto mong gawin? Ibig kong sabihin, ang gusto mong gawin ito sa pamamagitan ng kamay? O nais mong gawin ito sa pamamagitan ng computer? [01:10:21] Rob: Gawin ito sa pamamagitan ng kamay. [01:10:22] DAVIN: [LAUGHS] Rob: Gawin ito sa pamamagitan ng kamay. [01:10:23] DAVIN: OK, kaya magiging atoi. Kaya kung ano ang it-- ibig kong sabihin, kami ay marahil bigyan ito sa iyo. Ngunit kung ano ang ito pagpunta sa bumalik? [01:10:29] MAG-AARAL: Int. [01:10:29] DAVIN: Ito ay pagpunta upang bumalik int, i-right? So-- hindi ko nais upang gawin ito doon. Makikita kong gawin ito dito. [01:10:34] Rob: Maaari mong hilahin ito pababa at pagkatapos ay itulak up dito. [01:10:38] DAVIN: oo. [LAUGHS] pagbabago Laro. OK, kaya magiging int atoi, at kung ano ang ito pagpunta sa tumagal? Ang isang pansamantalang trabaho bituin, kaya lang ang isang string, star s, tulad ng iyon. [01:10:57] Rob: Nice bituin, mabait. DAVIN: Ito ay maaaring maging doon, OK. Rob: Oo. DAVIN: OK, kaya ang unang bagay na gusto mong do-- ko hindi alam kung tumingin kahit sino sa pagsasanay solutions-- ngunit kung ano ang iyong pagpunta sa nais na gawin ay ikaw pagpunta sa nais na magkaroon ng loop, dahil ikaw ay pagpunta sa nais na aktwal magbasa-basa ang string na ito. Kaya helpful-- kaya sabihin nating kami ay pagpunta sa may para sa loop, at kami ay pagpunta upang magbasa-basa bawat elemento ng string. Gaano katagal na? Gaano karaming beses kami makapupunta upang umulit sa na para sa loop? MAG-AARAL: Sterln? DAVIN: Sterln, oo. Kaya sabihin nating haba int katumbas sterln s. At lamang malaman, kung bakit ito ay palaging uri ng mas mahusay na gawin ito sa labas ng loop? Tulad ng, kung bakit ito ay mas mahusay na tumawag sa ang function na ito sa labas ng isang loop? Lamang ng isang mabilis na katinuan check? Oo? MAG-AARAL: Kaya hindi mo gusto mayroon upang panatilihing ng pagsuri ito. Maaari mo lamang [hindi marinig]. [01:11:59] DAVIN: Eksakto, kaya oo, kung ano ang eksaktong sinabi niya. Kaya namin Hindi mo na kailangang panatilihin ang pagsuri ito. Kaya halimbawa, kung gumagamit ako ng pagtawag ang function na ito sa loob ng loop, pagkatapos Pupunta ako sa panatilihin ang pagtawag function na ito nang maraming beses. At na pupuntahan bawasan ang pagiging epektibo ng iyong programa. Kaya ito ay palaging kapaki-pakinabang idedeklara ito sa labas. [01:12:12] Rob: Iyon ang sinabi, sa ang anuman sa mga problemang ito, halos hangga't kang makakuha ng nagtatrabaho solusyon, makakakuha ka ng ganap na kredito. Kaya huwag mag-alala kung ang iyong disenyo ay ganap na horrendous. Maaaring gumawa kami magbaligtag sa pagbabasa ng iyong code. Subalit hangga't ito gumagana, makakakuha ka ng mga puntos. [01:12:28] DAVIN: Oo. OK, kaya pagkatapos ay pupuntahan ko Ipinahahayag ng ilang mga variable. Lamang Ito ay pagpunta sa tumawag sa int halaga. At pupuntahan ko upang i-set na ito katumbas ng zero, tulad ng iyon. At na lamang ang pagpunta upang maging isang placeholder. Kaya na magiging kung ano ang Pupunta ako sa bumalik. Kaya ako ng pagpunta sa huli bumalik halagang out sa programang ito. Kaya ba akong magkaroon ng dalawang variable. Mayroon akong haba. Mayroon akong halaga. At sa tumalon sa aming mga string na ngayon hayaan. [01:12:48] Kaya ay nagbibigay-daan mayroon ang aming para sa loop. Kaya apat int ko ay katumbas ng 0 w, habang Ako ay mas mababa kaysa sa haba ko plus plus. At now-- Rob: Nice. DAVIN: OK, at ngayon dito pagdating ng karne ng aming mga code. Kaya maaari mong aktwal na gawin ito talaga sa isang linya. Kaya ang sinuman magkaroon ng ideya ng kung ano ang iyong pupuntahan namin ang susunod na gagawin? OK, sa gayon ang OK. Kaya aming ginagawa upang sabihin halagang equals-- hayaan mo akong mabilis na ito over-- kabuuan ay katumbas ng beses halagang 10 plus-- kami pagpunta sa tumagal s ko minus isa quote 0 isang quote na, tulad ng iyon. Rob: Bihirang-intuitive. [01:13:56] DAVIN: durog ito. OK, kaya someone-- ko nakuha ko, nakuha ko ito. OK, kaya ito ay malinaw na pagpunta up. Ano ang ibig sabihin nito? Kaya ang sinuman malaman kung ano ang ibig sabihin nito? Maaari lahat makita ito? Hindi, walang sinuman ang makakakita nito, OK. Pupunta ako to-- [01:14:18] Rob: Pupunta ako sa isulat ang formula lang dito mismo. DAVIN: OK, pupuntahan Rob upang gawin ito sa computer, na kung saan ay masaya. Rob: Oh aking Diyos. O kaya hindi ako'y. DAVIN: Stand sa pamamagitan ng. MAG-AARAL: Mayroon akong tanong. DAVIN: Oo, sigurado. MAG-AARAL: [hindi marinig]? DAVIN: OK, kaya talagang, tulad ng, lamang sa pangkalahatan, kung ikaw ay upang ilagay ang, tulad ng, sa pagpapahayag int Ay katumbas ng haba ko 0 kuwit ay katumbas ng sterln, that-- [01:14:59] MAG-AARAL: [hindi marinig]. [01:15:01] DAVIN: Iyon ay pinong, dahil that-- MAG-AARAL: Bakit gagawin mo kahit na kailangan upang gamitin ang haba? Bakit dati hindi namin lamang [hindi marinig] sterln s, tulad ng buong oras [hindi marinig]? [01:15:08] DAVIN: sabihin mo dito mismo? [01:15:09] MAG-AARAL: Oo. DAVIN: Dahil ang bawat oras na ito para sa loop ay tumatakbo, ito ay pagpunta upang suriin ang kundisyong ito. MAG-AARAL: I-right. DAVIN: At kung mayroon kang sterln doon, pagkatapos ito ay pagpunta sa may upang aktwal na tumawag sa na function ng bawat solong oras. Kaya sa halip na lamang paghahambing nito sa isang int, na iyong pupuntahan ay pagtawag ng function at pagkatapos ay paghahambing nito sa halaga ng kita. Oo, kaya lang, oo. [01:15:28] Nice, OK, kaya ngayon lahat ng tao ang maaaring makakita nito. Ano does-- ito ay tulad, ito ay ito. Ito ang jam, dito mismo. Ano ang ibig sabihin na? Ano ang aking ginagawa? Oo, ang isang ideya? Oo? [01:15:43] MAG-AARAL: Well, kaya kapag naglalagay ka ng isang array, na iyong pupuntahan ay pagpunta mula kaliwa papuntang kanan, kaya ka ng pagpunta sa ma-pagpunta sa decimal mula pababa sa [hindi marinig]. DAVIN: Eksaktong. MAG-AARAL: Kaya ang bawat isa kailangan mong i-multiply kung ano ang nakita mo na rin ang halaga ng int sa pamamagitan ng ang oras makakuha mong ilipat na higit sa isa. [01:15:59] DAVIN: Perpekto, perpekto, kaya halimbawa, sabihin sabihin Nagbigay ako ng you-- ako pagpunta sa magsulat sa paglipas dito. Hindi, hindi ako. Pupunta ako sa magsulat sa paglipas dito. Sabihin nating Nagbigay ako sa iyo 76, tama? Sabihin nating bigyan ko sa inyo 76. Iyon ay isang string na nagsisimula sa, OK? [01:16:15] Kaya haba ay kung ano? 2, i-right? Sum ay 0. Pagkatapos ay lumipat kami sa aming para sa loop. OK, ang unang pag-ulit ng ito, ano ang ito pagpunta sa maging? Ito ay magiging halagang ay 0. Kaya sabihin sa ilang beses 10 0. Iyon ay walang kahulugan. Pagkatapos kung ano ang ginagawa nito? MAG-AARAL: [hindi marinig]. [01:16:33] DAVIN: Ito ay pagpunta sa i-na na character sa isang integer, tama? Ito ay uri ng tulad ng sa iyong problema set-- ito light-- ito ay uri ng tulad ng sa itakda ang problema sa Visioneer. Ka pagharap sa mga halaga na ASCII. Kaya kung bibigyan ko kayo, tulad ng, ang isang pitong, ngunit ito ay isang karakter, at gusto mong malaman, OK, ano na digit na ay na? Oo, maaari mo, oo. Kaya kung ano na digit na ay na? Maaari mong ibawas 0 mula dito, ngunit kailangang ibawas 0, ang character. [01:16:59] At kung saan ang ilang mga tao makakuha ng tripped up, ang mga ito ay tulad ng, OK, mahusay, kailangan kong malaman ang mga halaga ASCII para sa pagsusulit? Hindi, gawin mo talagang hindi kailangan mong malaman ang mga ASCII mga halaga ng, tulad ng, lowercase isang, uppercase A, zero. [01:17:09] Rob: Walang dahilan upang kailanman ilagay ito sa impostor sheet. [01:17:12] DAVIN: Talagang hindi -aaksaya ng iyong space na may ito. Maaari mong literally-- sa halip lamang ng pagsabi 48, tulad ng karapatan up doon, iyon ay katumbas ng sinasabi ng isa, isa kudlit, tulad ng iyon, ang eksaktong pareho. [01:17:27] Rob: maaari ka nang mag-isip ng ito bilang if-- Diyos, kailangan ko ang aking, oops-- maaari mong halos isipin na ito parang mayroon kaming isang bagay tulad na hash tukuyin ang 0 bilang 48. Iyon ay hindi gagana. Ngunit sa tingin ng mga ito bilang nag-iisang quote 0 single quote, at para sa lahat ng mga character. Isipin ito sa bilang isang pare-pareho na Kinakatawan ng halaga na ASCII. [01:17:47] DAVIN: Oo. OK, kaya sa unang pagkakataon sa pamamagitan ng, kaya may 76-- kaya sa unang pagkakataon sa pamamagitan ng, ito ay lamang ng character 7 minus ng character na 0, at ang mga ito ay pitong integers-- na rin, ang mga ay pitong puwang ang layo mula sa bawat iba pang mga sa tsart ASCII o anumang. Kaya na ang nangyayari upang bumalik sa isang int ng 7. Kaya ngayon, halagang katumbas 7. [01:18:08] OK, na rin, ang tumalon ipaalam sa ito para sa loop muli. OK, ngayon ito halagang beses 10. Kaya ikaw ay epektibong paggalaw sa 7 sa kaliwa. Ay na magkaroon ng kahulugan? Ikaw ay epektibo gumagalaw ito sa kaliwa. [01:18:19] At pagkatapos mong add-- ito ay magiging 6 minus 0. Iyon ay 6. Kaya ito ay magiging 70 plus 6. 76, na iyong numero. Kaya hindi alintana ng kung ano ang numero Nagbigay ako sa iyo, ito ay mabagal lamang pagpunta sa shift ang mas malaking halaga sa kaliwa, 1 factor ng 10 bawat oras sa para sa loop, at pagkatapos ay idagdag sa bilang kinakailangan. [01:18:37] Sa likod? MAG-AARAL: Hindi namin kailangang gawin anumang-check in sa program? [01:18:41] Rob: Kaya ngayon bilang ng pagtingin pupunta para sa programa, Gusto naming sabihin sa iyo ang kaakit-akit magkano ang kailangan mong suriin. Kung hindi namin masasabi sa iyo anumang bagay, at pagkatapos ay sa pangkalahatan ipagpalagay na mayroon ka upang suriin ang karamihan sa mga bagay. Tulad ng maaaring iyo, upang maging ligtas lamang, mo dapat marahil tingnan hey, ay walang bisa s? Pagkatapos ay wala akong mga ideya kung ano ang upang bumalik. Ngunit nais naming sabihin sa iyo ang ganitong uri ng bagay. 0, hindi ko alam. [01:18:59] DAVIN: At bakit gusto mong upang suriin kung s ay katumbas ng null? MAG-AARAL: [hindi marinig]. DAVIN: Dahil char bituin. Ito ay isang pointer. Kaya isang perpektong katanggap-tanggap pagpapahayag, maaari akong sabihin, OK, s ay katumbas null, sapagkat ito maaaring maging isang pointer sa null. Kaya sa tuwing mayroon kang mga payo sa iyong path sa ganito, dapat mong malamang suriin. Dahil kung hindi mo suriin na, at pagkatapos ay pumunta sa iyo pagkatapos ay sa iyong para sa loop, at doing-- ka sumibad pababa. Sumibad pababa. [01:19:22] Rob: Paumanhin, hindi iyon ito. [01:19:23] DAVIN: At kaya, tulad ng, kung ito ay walang bisa, at pagkatapos ay sa iyo gawin ito, kung ano ang error pupunta ka ba upang makakuha? MAG-AARAL: ka ng pagpunta makakuha ng isang hanay kasalanan. DAVIN: ka ng pagpunta sa itakda pagkukulang, kanan, dahil ikaw ay sinusubukang i-index sa null. Kaya ka pagpunta sa subukan na i-index sa memory na hindi mo pag-aari. Kaya ito, kung ito ay walang bisa, at gagawin mo ito, kakailanganin mong cycle. [01:19:39] Rob: tingin din ako sa pagsusulit kung saan hiniling namin ang tanong na ito, sabihin namin sa iyo na maaari mo lamang ipinapalagay ito ay isang positibong numero. Dahil atoi ay inaasahan ding upang pangasiwaan ang mga negatibong numero, kaya magkakaroon ka ng sa mga espesyal na kaso. Uy, ay ang unang character ng gitling, kung saan, OK, ngayon ito ay isang negatibong integer. Sasabihin namin sa iyo ang mga uri ng mga bagay. Sasabihin namin sa iyo kung ano ang kailangan mo upang mahawakan. DAVIN: Oo. Kaya ako bang maaari have-- ilang mga tao kung nagsimula ka ng pagtingin sa lumang pagsusulit, Nakita mo na ang sterln. Iyon ay isang sikat na isa. At sa tingin ko sa sterln, nagkaroon ka na gawin ang check para sa null, ang return 0 o isang bagay tulad na. Tulad ng, nagkaroon ka upang tingnan ang mga null. At kung hindi mo ginawa, na ay tumuturo off sa pagsusulit. Kaya pa rin, ang lahat huwag mag-OK sa atoi? Kahit sinong gusto ba sa pumunta muli sa paglipas ng mga bahagi? Rob: Oh oo, sa palagay ko sabihin mo rin kami sa iyo maaaring ipagpalagay na ang lahat ng bagay na is-- talaga sila naglalagay ka ng isang numero, na hindi mo kailangang mag-alala tungkol sa, tulad ng, mga titik na nasa loob ng string, kaya. DAVIN: Oo. Oo? MAG-AARAL: Maaari kang pumunta sa ibabaw ng isa pang beses kapag gumamit ka ng double quote at solong quote? [01:20:37] DAVIN: Oo naman, kaya double quote, napaka lamang, ay double quotes ay mga string. Kaya kung double quote sa iyo anumang bagay, na isang string. Kaya, tulad ng, kung mayroon akong ito 0 paglipas dito, at ginawa ko ito, na isang string. Iyon ay hindi na isang character. Kaya hindi ko mahanap ang halagang ito sa aking ASCII chart, dahil ito ay isang string, oo. [01:20:57] OK, ang anumang iba pang mga tanong? Oo? [01:21:00] MAG-AARAL: Kaya ikaw ay nasagot na ito, ngunit tulad ng, kapag kami ay talagang pagsulat na ito sa pagsusulit, nais mo sa amin upang isulat sa slashes zeroes [hindi marinig]? DAVIN: Hindi. Ang tanong ay dapat mong maglagay ng slash sa pamamagitan ng mga zero upang ipahiwatig kung ang mga ito ay zero? Hindi, ipapakita namin malaman ito. Oo, salamat, ang mga ito ay mabuti. OK, kahit ano? Gusto ba ng sinuman to-- kaya ako sa tingin tumakbo kami ng kaunti sa paglipas ng panahon. Huwag nais mong makita ang isa pa, o? MAG-AARAL: RandomInt. [01:21:29] DAVIN: RandomInt, OK, eksakto. Kaya sabihin gawin RandomInt. Makikita kong gawin ito sa dito. Kaya RandomInt ay talagang mas simple. Sa tingin ko atoi ay marahil ang hardest isa na tinanong natin sa nakaraang taon. MAG-AARAL: [hindi marinig]. [01:21:46] DAVIN: Ano? Rob: akong nakikitang kung ito ay uri ng matitingnan mula sa mahigit dito. DAVIN: ito ba? Rob: Hindi sa tingin ko ito going-- tingin ko ito ay pagpunta sa tumakas sa kanan. DAVIN: OK, kaya ako makakakita gawin ang isang ito. At pagkatapos ay ilagay mo lamang ito sa screen. [01:21:56] Rob: Lahat ng karapatan. [01:21:57] DAVIN: Gusto mong maging ang aking mga manunulat? [01:21:58] Rob: Oo. [01:21:58] DAVIN: Nice. OK, maaari ko bang burahin ito? [01:22:02] MAG-AARAL: Oo. [01:22:04] DAVIN: Iyon ang dahilan kung kaya mahirap. (Pagkanta) kang ginagawa kung ano ang iyong ginagawa. At ginagawa kung ano ang hindi mo gusto. Lahat ng karapatan. [01:22:19] OK, kung natatandaan ko nang tama, sa ang pagsusulit sa RandomInt ay tulad, OK, pupunta ako upang bigyan ka ng dalawang numero, tulad ng isang at b. At gusto ko sa iyo na bigyan ako ng RandomInt sa pagitan ng mga numero. Kaya RandomInt ay pagpunta magsagawa ng dalawang numbers-- kaya RandomInt-- at ito ay pagpunta upang bumalik sa isang int. [01:22:41] Kaya kung ano ang halaga ng pagbabalik? Ko lang sinabi sa iyo. Int, i-right? Tulad nito, at pagkatapos ito ay pagpunta sa gawin ang dalawang ints. Kaya ito ay pagpunta sa tumagal int isang at int b, tulad ng iyon. Kaya kung ano RandomInt ay pagpunta sa gawin ito nangyayari upang bumalik sa ilang mga random na halaga sa pagitan ng dalawang mga halaga. Kaya ito ay magiging mas malaki kaysa sa isang, mas mababa sa b. Kaya sa tingin ko maaari mong malamang na ipinapalagay na ng ang mas maliit sa dalawang mga halaga. Kaya kung kami ay pagharap sa randomness, kung ano ang function na na namin nakita na Binibigyan kami ng random na mga bagay? MAG-AARAL: Drand. DAVIN: Drand, eksakto. Kaya na iyong pupuntahan marahil nais na gamitin ang iyong drand. Kaya maaari mong sabihin int random, at kami ay lamang ito sinasabi ay katumbas ng 0 ngayon. At sila kami ng pagpunta sa sabihin, OK, random equals drand 48. At kung ano ay bumalik ito? Ano ang function na ito magbibigay sa iyo? [01:23:43] MAG-AARAL: Sa pagitan ng 0 at 1. [01:23:45] DAVIN: Oo, sa pagitan ng 0 at 1. Kaya ito ay pagpunta sa be-- [01:23:48] Rob: At ito is-- tingin ko Gusto naming sabihin sa iyo na ito. Tulad ng, maaari mong gamitin drand 48. Maaari mong i-verify ito sa mga nakaraang pagsusulit. Ngunit marahil naming sabihin sa iyo Maaaring gamitin drand 48, na ay nagbabalik ng float sa pagitan ng 0 at 1. [01:23:58] DAVIN: Oo, oo, ako medyo sigurado sa pagsusulit sinasabi nito marahil nais na gumamit ng drand, oo. Kaya ito ang nangyayari upang bumalik ang ilang mga halaga sa pagitan ng 0 at 1. At pagkatapos ay kung ano ang pagpunta sa nais na gawin? Well, na nais mong i-multiply by-- maghintay, sa palagay ko ito na tulad nito, paumanhin. Kukunin ko na lang gawin ito. Hindi ko alam. [01:24:19] Kaya b minus a. Kaya bakit b minus isang? Kaya sabihin nating drand nagbibigay sa iyo ng likod isang int-- OK, lang Magtatagal ako na ang bahala, kaya pati na rin ng. Kaya kung ano does-- y ay b minus a. Kaya sabihin nating na drand nagbibigay sa iyo ng likod ang maximum na halaga ito ng dati posibleng magbibigay sa iyo. Ano ang na magiging? MAG-AARAL: 1. [01:24:43] DAVIN: 1, tama? Kaya kung ito ay 1, at ikaw ay -multiply ito sa pamamagitan ng b minus ng, na rin, ito lamang ang pagkakaiba sa pagitan ng minus A. At kung pagkatapos ay idagdag mo na bumalik sa isang, iyon ay kung ano? Talaga Ito ay b. Ay na magkaroon ng kahulugan? [01:24:57] MAG-AARAL: Oo. [01:24:59] DAVIN: Kaya kung ito ang maximum na Pinahahalagahan maaari itong posibleng maging, ito ay magiging 1. At pagkatapos ay ito lamang ang pagkakaiba sa pagitan ng dalawang. Idagdag sa, kaya ito ay pagpunta sa bumalik random. At sa sulok kasong iyon drand nagbibigay sa iyo ng bumalik 1, random na lang ay epektibo ay b. Ngunit iyon ang maximum na maaari itong maging. Kaya kung ito ay magiging mas mababa sa iyon, kaya sabihin nating na tulad nito 0.9, kaya pagkatapos ay 0.9 beses b minus ng ay magiging mas mababa kaysa sa pagkakaiba sa pagitan b minus a. [01:25:33] At pagkatapos ay kung kang magdagdag ng na sa sa isang, pagkatapos ay halaga na hindi magiging mas malaki kaysa sa isang, dahil nagdadagdag ka ng isang bagay sa ito, ngunit ito ay magiging mas mababa kaysa b. Kaya ka pagpunta upang makakuha ng isang random numero, dahil ka sa pagtawag drand. At na ribete, na random na numero ay magiging isang lugar sa pagitan ng isang at b. Ay na magkaroon ng kahulugan? [01:25:50] Rob: lamang sa ilagay ito sa kongkreto numero, kaya sabihin nating gusto naming pumili ng isang random na numero sa pagitan ng 7 at 10. Kaya b minus isang ay ang aming hanay. Kaya mayroong isang hanay ng tatlong numero gusto naming pumili mula sa. At pagkatapos ay i-multiply na sa pagitan ng 0 at 1 1, kung na pagkatapos ay nagbibigay sa amin ng some-- sabihin nating na nagbibigay sa amin ng 1.5. [01:26:07] Pagkatapos ay 1.5, nais naming pumunta 7-10. Kaya 1.5 plus 7 pinagsasama-amin pabalik sa aming mga 7-10 na saklaw. At pagkatapos ay namin ang pag-iimbak nito sa loob ng isang integer, kaya pinutol pababa sa 8. At pagkatapos ay bumalik lang namin iyon. Kaya b minus isang ay ang aming hanay. isang shift up ito sa numero ng na gusto naming sa loob ng saklaw na iyon. Kaya sa pagitan ng 7 at 10, at pagkatapos ay namin makakabalik kung ano ang hahantong kami sa. [01:26:30] DAVIN: Oo, mabait. [01:26:32] Rob: Salamat sa iyo. [01:26:34] DAVIN: Oo, kung ano ang up? [01:26:35] MAG-AARAL: Gawin tumakbo namin ito sa anumang uri ng Error ASCII kapag we're-- kung drand ay pagbabalik ng isang float [hindi marinig]. [01:26:42] Rob: Kaya tulad ng sinabi Rob, dahil random ay hindi isang int, kaya drand ay magiging isang float. Kaya at pagkatapos ay i-multiply ito out. At maaari kang makakuha ng ilang uri ng mga numero ng float. At pagkatapos nito pupuntahan pungusan. [01:26:51] MAG-AARAL: OK. DAVIN: Oo. Rob: At kung ang compiler ay upang bigyan ng babala sa iyo, tulad ng, pagkawala ng katumpakan, itinapon lamang sa isang int sa doon, at pagkatapos ito ay mabuti. DAVIN: Oo? [01:27:02] MAG-AARAL: Gusto ito ay may parehong posibilidad ng pagkuha, tulad ng, b o isang [hindi marinig]? [01:27:08] Rob: Kaya is-- talaga ako wondering-- ay dapat RandomInt upang maging isang numero mula sa isang mas mababa kaysa b? Tulad ng, kung ito ay sa pagitan ng 7 at 10, ano ang mga posibilidad? 7, 8, at 9, o 7, 8, 9, 10? DAVIN: ko makalimutan. Sa problema set-- [01:27:19] Rob: tingin ko ito ay 7, 8, 9. [01:27:20] DAVIN: Ito partikular na sabi ng isang tao kasama at isa ng eksklusibong. [01:27:22] Rob: Oo. [01:27:23] DAVIN: Ngunit don't-- ko ako not-- [01:27:23] Rob: Kaya sa tingin ko ang mga ito ay hindi kasama, kung saan, mayroong isang katumbas posibilidad ng 7, 8, at 9. Walang posibilidad ng 10. DAVIN: Oo? MAG-AARAL: Mayroon akong tanong. Gusto naming tukuyin ang isang function Ibinabalik ng hindi isang halaga, ngunit isang array. Pagkatapos ay ano ang magiging bumalik pagkatapos ng syntax? [01:27:41] DAVIN: OK, kaya pagkatapos mo would-- pagkatapos ng pagbabalik? Kaya sabihin nating ay ipinahayag isang array sa isang lugar hanggang doon. Pagkatapos ay gusto mong bumalik lamang ang pangalan ng array. [01:27:49] MAG-AARAL: OK, salamat sa iyo. Pagkatapos ay bumalik lamang sa a-- DAVIN: Oh maghintay, kaya paumanhin. Ang tanong ay kung paano huwag kang bumalik sa isang array. [01:27:54] Rob: Kahit na ito ay hindi magagawa ay ipinahayag na isang array sa stack o anumang bagay tulad na. Ito ay kailangang maging isang bagay malloced, dahil malloc ay kung paano makakakuha ka sa paligid awtomatikong paglalaan ng memory. [01:28:01] DAVIN: Oo. Rob: Paano mo makakuha ng sa paligid ng lokal na saklaw. [01:28:09] DAVIN: Ngunit paano mo ito gagawin bumalik lang name-- nito [01:28:11] MAG-AARAL: [hindi marinig] ito ay hindi isa halaga, halimbawa, dalawang mga numero, kaya [Hindi marinig]. [01:28:18] DAVIN: Hindi mo maaaring ibalik ang maramihang mga numero. Maaari mong hindi, tulad ng, return-- [01:28:20] MAG-AARAL: usapan ko ang tungkol sa mga bumabalik isang array o isang bagay tulad na. [01:28:23] DAVIN: Oo, kaya ang tanong ay Maaari ko bang isauli ang maramihang mga halaga. Hindi mo maaaring ibalik ang maramihang mga halaga. Maaari mong hindi, tulad ng, bumalik ng isang pagkatapos ay bumalik b o isang bagay tulad na. Dahil pagkatapos mong bumalik, mo bumalik sa labas ng function. At pagkatapos ay ang function ay tapos na, at tulad ng sinabi Rob, ay nasa stack. [01:28:35] Kaya ang lahat ng memory na lang ang nakakakuha ibalik sa computer. Ang lahat ay makakakuha ng nakalimutan, talaga. Kaya kung nais mong bumalik ng maramihang mga halaga, kailangan mong bumalik ng isang array, At ang paraan gagawin mo na mallocing. At pagkatapos ay gusto mong bumalik x tulad na. Talaga, bumalik ka lang ang pangalan. At kapag bumalik ka isang bagay na tulad nito, ikaw ay hindi tunay na bumabalik na ang halaga. [01:28:53] Kaya sabihin nating naka-imbak ang mga halaga sa isang array. Hindi ka talaga bumabalik na mga halaga iyon. Tulad ng, kung ibinalik ko ang isang int, ako talagang bumabalik na mga kopya ng mga halaga. Ngunit kung i ay upang bumalik isang bagay na tulad nito, Ako pagbabalik ng isang reference sa mga halagang iyon. Kaya ako bumabalik, talaga, isang memory address sa halaga. Ay na magkaroon ng kahulugan? MAG-AARAL: Oo. DAVIN: Nice. Oo? [01:29:13] MAG-AARAL: Kapag handa ka gamit drand sa paglipas dito, huwag kang magkaroon ng upang ilagay ang srand bago iyon? [01:29:17] DAVIN: Hindi, hindi, hindi ko sa tingin. [01:29:20] Rob: Oo, kaya ang mayroon kayo upang sabihin ng anumang bagay tungkol sa srand? Ang default ng hindi ka na kailanman sinasabi srand sa lahat ay gagawin lamang srand ng null. Kaya drand sa sarili nitong kalooban trabaho. At ito ay awtomatikong Buto sa sa kasalukuyang panahon, ay kung ano ang ginagamit nito. DAVIN: Oo? MAG-AARAL: Gusto mo ba [hindi marinig] kasama ang mga numero? DAVIN: Oo, magagawa mo na. MAG-AARAL: Kaya maaari mo sabihin, tulad ng, 4 na beses 2. Ang bagay ay, hindi ka maaaring ipagpalagay pagkatapos ay sa isang int ay apat na bytes. Ang only-- [01:29:51] DAVIN: Ibig kong sabihin, para sa mga pagsusulit magagawa mo na. [LAUGHS] [01:29:54] Rob: mm, hindi. DAVIN: Oo, yes magagawa mo na. Kung hilingin nila sa iyo kung gaano kalaki ang isang int ay, Hindi mo maaaring, tulad ng, apat o walong. Rob: Oh, kaya kung ang tanong ay partikular, tulad ng, kung ito ay isang problema sa coding, dapat mong sabihin ang laki ng int. Kung ito ay isang talahanayan, o sinasabi nito kung gaano karaming mga byte, hindi mo dapat punuin ang laki ng ints. [01:30:08] ESTUDYANTE: [LAUGHS] [01:30:18] DAVIN: I-right, kaya kung bakit ay laki ng int mahalaga dito? Kaya tulad ng, kung namin pagpunta sa 32-bit processor o isang bagay tulad na, pagkatapos ito ay magiging apat na bytes. Ngunit sa ilan sa mga mas bagong mga bagay-bagay, maaaring ito ay kung ano? Ito ay maaaring maging walong, tama? Kaya this-- kung kamakailan mo lamang na hard code apat, pagkatapos ay sa ilang mga machine, ito ay gumagana. Ang ilang mga machine, hindi ito gagana. Ngunit kung sa pagsusulit kami ay tulad ng kung gaano kalaki ang isang int? Ilagay ang apat. Rob: I-right. DAVIN: Oo? MAG-AARAL: Kaya dahil kami ay deklarasyon [Hindi marinig] sa loob ng isang function, dapat ilagay namin 3 loob na pag-andar? O maaari itong naming gamitin sa labas? DAVIN: Maaari mo itong gamitin labas na function. Kaya humihiling siya ng libre. [01:30:49] MAG-AARAL: Mawalan ng track ng kung saan [hindi marinig]. [01:30:51] Rob: Oh, ang libreng ay hindi happen-- na bahagi ng magic ng malloc ay na ikaw ay hindi Pinaghihigpitan sa mga lokal na saklaw. Mayroon kang ganap na kontrol sa kung gaano katagal live ang iyong mga variable. Kaya tinatawag naming malloc dito, maaari itong maging isang ganap na nakahiwalay function. Maaaring maging 10 na oras sa ibang pagkakataon na sa wakas kami tatawag sa libre. [01:31:08] DAVIN: Kaya halimbawa, tulad ng, sa ilang linggo mula ngayon kapag sa wakas ka gawin ang iyong speller diksyunaryo psets, na iyong pupuntahan na magkaroon ng ilang mga pag-andar na lumilikha tonelada ng mga node. Kaya ka mallocing tonelada ng mga node sa function na ito. At pagkatapos ay sa ibang pagkakataon sa isang hiwalay na function, ikaw ay pagpunta sa nais upang magbakante lahat ng mga node. Kaya maaari mong literal na pumasa lamang sa magbakante ng pointer, kaya isang memory address sa kung ano ang iyong malloced. At iyon ay magiging multa. Hindi mo na kailangang magbakante, tulad ng, sa parehong pag-andar. Oo? [01:31:30] MAG-AARAL: Kaya ang isang malloc variable [hindi marinig] sa labas? Iyan ba kung ano ang iyong sinasabi sa iyo? DAVIN: Maghintay, sabihin na? Sorry. [01:31:38] MAG-AARAL: Kung ang isang malloc variable ay maaaring maging libre saanman sa code, pagkatapos ay maaari silang ma-access saanman sa code? Maaari ninyo bang itago ang mga ito lokal? [01:31:45] DAVIN: Oh, tinanong niya, tulad ng, ang variable, like-- [01:31:51] Rob: Kaya kailangan mo pa ring may ilang mga uri ng sanggunian upang i-block ang malloc ng mga memory. Kaya dito, kami ay bumabalik x. MAG-AARAL: Oh. Rob: Kung hindi namin ginawa bumalik x dito, at ito ay walang bisa lamang, pagkatapos ay namin ay walang access sa ang pointer na malloced, at ito ay leaked memory. [01:32:05] MAG-AARAL: OK. [01:32:06] DAVIN: Kaya tulad ng, sabihin nating sa iyo Mayroon na ito, tulad ng, dito mismo. Rob: Hindi. DAVIN: Sa aking pangunahing pag-andar, hindi ko makakaya tawagan lamang ang x at maging, tulad ng, OK, sa function na ito, ginawa ko ito. [01:32:14] Rob: I-right. [01:32:14] DAVIN: Kaya Pupunta ako sa tumawag sa x sa, tulad ng, ang mga pangunahing o isang bagay tulad na. Hindi mo maaaring gawin iyon. Na iyong pupuntahan upang magbalik ng bagay. Ngunit ano ang iyong pagpunta sa bumalik? Na iyong pupuntahan upang magbalik ng memory address. At dahil bumalik ka ng memory address, na maaaring ma-access sa ibang lugar. Anumang higit pang mga tanong? Oo? [01:32:28] MAG-AARAL: ba ang pag-andar sa itaas pagiging tseke para sa [hindi marinig]? [01:32:33] DAVIN: Bakit hindi ko kailangang gawin iyon? MAG-AARAL: [hindi marinig]. DAVIN: Dahil ikaw ay Hindi mallocing kahit ano. Kaya not-- oo, ito ay Hindi gusto ng isang string s. Ito ay isang pointer sa isang lugar. Ang mga ito ay lamang ang mga halaga. MAG-AARAL: OK. DAVIN: Oo. Ano pa? Rob: Oo? MAG-AARAL: Ngunit kapag [hindi marinig]? [01:32:55] Rob: Kaya upang magbakante ang memorya, gusto naming sabihin dito. Kaya x ay ang aming pointer sa ang bloke ng memorya. Magbakante namin na pointer. At gusto hindi namin kinakailangang gawin ito dito. Maaari naming gawin ito kahit saan. Pero tumawag ka lamang libreng on isang bagay na malloc babalik. Kaya malloc, narito, ibinalik kung ano ang naka-imbak sa x. Kaya maaari naming tawagan ang libreng on x. Anumang huling tanong? [01:33:20] DAVIN: Anumang huling tanong? Oo? [01:33:22] MAG-AARAL: Paumanhin, maaari mong muling ipaliwanag kung bakit nais mong magbakante doon? Bakit [hindi marinig]? [01:33:26] DAVIN: Para dito? [01:33:27] MAG-AARAL: Oo, tulad ng karapatan pagkatapos. DAVIN: mo marahil ayaw ng libreng dito. Rob: marahil kang gagawin hindi. DAVIN: Oo, na ito ay wala. Ito ay, tulad ng, lumikha ng memory, gawin ang mga bagay-bagay na ito, at pagkatapos ay agad-agad kalimutan ang tungkol dito, oo. [01:33:37] Rob: Ngunit maaari naming gawin, gaya ng, in dito para sa ilang mga kadahilanan. Maaari naming sabihin int star y ay katumbas ng pagbabalik ng array. Gawin ang ilang mga bagay-bagay na may y, siguro i-print ang mga nilalaman. At pagkatapos ay, sa wakas, tapos na kami. Maaari naming magbakante y. MAG-AARAL: [hindi marinig]. DAVIN: Dapat ba akong mag-scroll pababa? Salamat. Rob: Nice. [01:34:02] DAVIN: OK, na ito. Rob: Lahat ng karapatan, mabuti. Good luck. [01:34:05] DAVIN: Kung mayroon kang mga katanungan, mag-email sa amin. Good luck.