ANDI PENG: Lahat ng karapatan. Maligayang pagdating sa apat na linggo ng section. Ito ay isang magandang araw dito sa New Haven kaya talagang sa tingin ko ang mga kalat-kalat pagkalat ng mga bata na sumali sa akin seksyon ngayon, salamat. Kaya mabilis, bago lang kami magsisimula, ang agenda para sa araw na ito. Kami ay pagpunta sa pumunta sa paglipas ng mga maikling announcements. Kami ay may isang talagang wacky schedule paparating na sa susunod na dalawang linggo o kaya kaya kami ay pagpunta sa pumunta sa paglipas na. Pangalawa, alam ko paboritong topic-- lahat Ako ba na ito ay natunaw ang iyong isip sa panahon ng panayam, huwag mag-alala, Ako pa rin ang uri ng hindi makakuha ng ito. Ayos lang. Iyon ay isang biro. Ko talagang gawin makakuha ng ito. Ngunit ako ay siguraduhin na ang ka guys kumuha ito, masyadong. Kaya kami ay pagpunta sa gastusin ng isang tunay, tunay mabuti halaga ng mga oras ng pakikipag-usap tungkol sa pointer ngayon. Tulad ng iyong nakikita, kendi talk ay napakalaking ngayon. Kami ay talagang pagpunta sa panatilihin na- oo, na karapatan. Panatilihin ang pagkuha ng kendi. Pupunta ako upang pumasa ito sa paligid ngayon. Huwag mag-alala. Kami ay pagpunta sa talagang subukan upang panatilihin ang asukal sa dugo ng mga tao up dahil utak na pagpunta sa paso ilang oxygen ngayon dahil payo ay talagang, talagang mahirap. Pagkatapos kami ay pagpunta sa makipag-usap tungkol memory management kung aling uri ng ay sa parehong kaharian. At kami ay pagpunta upang ilipat sa sa pag-redirect at file I / O kung saan ay lamang syntax, nice mga bagay na dapat naming makipag-usap tungkol sa. At pagkatapos ay sa wakas, ako pagpunta sa sandaling muli subukan na umalis tulad ng 10, 15 minuto para pset4. Iyan ay dahil sa ilang araw kaya kami pagpunta sa talagang uri ng magbibigay sa iyo ng ilang kapaki-pakinabang na mga pahiwatig kung kayo na kayong makapagsimula sa na. Cool. SIGE. Kaya ang ilang mga anunsyo para sa mga paparating na linggo. Grading. Hindi ko talaga alam kung sa sa puntong ito kung ilan sa inyo guys ay sa tunay na aking section-- mo OK doon? SIGE. Ngunit, para sa mga mo na sa aking seksyon, lamang ng ilang mga komento sa grading. Una, talagang magandang trabaho ng pagkomento. Yaong mo na hindi puna, ikaw kung sino ka dahil ikaw ay malamang na nakuha ang ilang mga puntos style dinged sa linggong ito. Siguraduhin lamang na sa lahat ng iyong mga programa magdagdag ng isang pares ng mga komento. Talagang, estilo ay talagang madaling makakuha ng tamang punto bilang isang saklaw. Kaya para sa amin, kailangan lang gumawa siguraduhin na ikaw ay mabait ng pagdaragdag ng isang maikling paglalarawan sa lahat ang iyong mga programa tungkol sa kung ano ang iyong ginagawa. Secondly-- ito ay isang malaking isyu para sa isang pulutong ng mga TAS ito nakaraang week-- kaya siguraduhin na ikaw ay mag-upload sa tamang folder na may tama pinangalanan programs. At ang dahilan kung bakit hinihiling namin para sa ay dahil tayo, sa kurso ng pagmamarka, talagang magpatakbo ng isang script sa iyong code na awtomatikong nagda-download ang lahat ng iyong psets, ay tumatakbo pagsusuri kawastuhan sa lahat ng mga ito, at pagkatapos ay in-upload ang iyong mga marka direkta sa markahan. Gayunpaman, sa anumang punto, kung ikaw pinangalanan ang iyong programa ng hindi tama, ito screws up ang buong program para sa lahat. At ito, lehitimong, ito maganda ang script na namin ang nakasulat na gumagana ang lahat ng ito para sa amin, ganap nag-crash kung wala kang tama ang pangalan ng iyong programa. Kaya i-upload lang sa tamang folder, may pangalan na ito nang tama, at pagkatapos ay buhay ay mabuti. Nakukuha ko ang iyong psets likod sa inyo guys mas maaga dahil nakukuha ko sa kanila grade mabilis. Oo. SIGE. At din namin ang pagpunta sa makipag-usap about-- Yale ay talagang isang, talagang wacky schedule sa mga susunod na dalawang linggo. Kaya sa mga ka guys sa Harvard, ito ay hindi nalalapat. Ngunit para sa amin kaibig-ibig na bata sa Yale kami bagay na tinatawag na tag-lagas ng break Paumanhin, Harvard-- kung saan mayroon kaming limang araw off ng paaralan. At habang ito ay kaibig-ibig, ito uri ng messes up ang aming pset ritmo dahil psets ay dahil Huwebes, Biyernes. At kaya kung hindi kami dito Huwebes, Biyernes, kami ay Hindi maaaring magkaroon ng trabaho para sa inyo guys dahil sa Huwebes, Biyernes. Kaya kung ano ang namin ang pagpunta sa gawin is-- hindi namin tulad ng 99% sigurado na ito ay kung ano ang nangyayari, maaaring may mga ilang baguhin ngunit sa tingin ko ay subtle-- ay namin ang pagpunta sa have-- sa linggong ito ay normal. Kaya na namin ang aming seksyon sa Martes na sinundan ng mga oras ng opisina sa buong natitirang bahagi ng linggo at pagkatapos pset4 ay dahil sa Biyernes. Pagkatapos, bilang lahat ng alam mo guys, tulad ng Ipinaalala ko sa inyo guys noong nakaraang linggo, na namin ang aming pagsusulit 0 pagdating up sa Miyerkules. At ito, ang pagiging isang mag-aaral sa sarili ko, Alam ko na ang ilang mga ng sa iyo guys ay aktwal na nagtatrabaho sa pset5 ang dalawang araw bago ang iyong pagsusulit. Kaya kung ano ang namin ang pagpunta sa maaaring humantong sa paggawa ay, na Lunes ng gabi, kami ay pagpunta upang aktwal na, 5:30-07:00, magkaroon ng isang maikling pagsusuri session sa mga paksa sakop. Hindi malinaw kung ito ay isang repasuhin ang session o isang Q & A. Ito ay ilang mga uri ng review form na kung saan kami ay sumasakop ang ilang mga paksa na may kaugnayan para sa iyo guys. At pagkatapos ay Lunes at Martes ng gabi ng linggo na 8:00-11:00, kami ay pagpunta sa may oras ng opisina. Oras mga opisina ay pinaka malamang ay higit pa sa kapapasok pa lamang, tanungin TAS iyong mga katanungan tungkol sa anumang mga konsepto ikaw ay naguguluhan tungkol sa, at ang mga ito uri ng pumunta sa paglipas ng sa iyo at konsepto review para sa mga pagsusulit. Pagsusulit 0, kung gusto mo ng Monday, section Miyerkules, ay Miyerkules ng panahon class-- sa Miyerkules sa panahon ng klase. At pagkatapos ay kung gusto mo ng Martes, Huwebes seksyon, ay panahon ng klase sa Huwebes din. Talagang hindi mo maaaring piliin ang kung saan ang isa sa iyo pumunta sa. Kung ikaw ay isang Lunes, Miyerkules, kailangan mong pumunta sa Miyerkules. Kung ikaw ay sa Martes, Huwebes kailangan mong pumunta sa Huwebes. Ngunit pagkatapos ng gabing iyon, amin lovely staff, ay magkaroon ng isang higanteng pagsusulit pagmamarka partido sa na kung saan kami makakuha ng iyong mga marka ng pabalik sa iyo na gabi. Anong oras? Hindi malinaw, na nakakaalam, ngunit ito ay bumalik sa iyo sa loob ng 24 na oras upang ikaw guys sana magkaroon ng ilang puna sa pamamagitan ng Biyernes. At pagkatapos kami ay may isang talagang wacky linggo. Kaya pset5 ay isa sa mga pinakamahirap psets ng taon. Kaya paumanhin guys. Ano kami ay pagpunta sa subukan upang gawin ay kami ay pagpunta sa may ilang mga aktwal na suporta na weekend. Dahil, tulad ng maaari mong makita ang isang lalaki, ang pset ay dahil bago fall break. Wala kaming suporta para sa ka guys sa panahon ng taglagas pahinga at iba talaga namin uri ng nais na phrase na ito bilang, sabihin makakuha ng ito sa paglipas ng, Magtulungan tunay, talagang mahirap ipaalam mga susunod na dalawang linggo, kumuha ng pagsusulit na ito at magdagdag ng mga dalawang psets tapos na at pagkatapos ay ka guys ay may isang magandang nagpapatahimik pitong araw na walang pag-iisip tungkol CS. Kaya sa order para sa na mangyayari, kami ay marahil pagpunta sa ilipat ang aking mga seksyon sa Linggo ng hapon. Ito ay kinukunan kaya walang alalahanin kung hindi ka maaaring dumating. Ngunit ang mga online paggawa ng pelikula ay maging doon at naa-access upang ikaw guys kung Linggo, Lunes, Martes, sa trabaho sa pset5. At pagkatapos ito ay mahulog masira at walang CS at pagkatapos ay dumating kami sa likod at sa kanyang likod sa giling. Ngunit ito ay magiging isang kaibig-ibig na linggo para sa pagkahulog pahinga at kami ay talagang nais na gumawa ng mga ito bilang stress libre para sa lahat hangga't maaari na ay kung bakit namin inilipat ang pset na dahil bago fall break na sa halip na matapos. Dahil it's-- ibig sabihin ko, ako uri ng pakiramdam tulad nito pagkatalo sa layunin ng pagkakaroon ng ang deadline matapos mahulog pahinga kung may walang suporta anyways sa panahon ng taglagas break. Kaya ito ay rather-- tingin ko mas gugustuhin naming tumutok sa mga ito ngayon. Kahit sino ay may mga katanungan tungkol na schedule? Anumang bagay na nakalilito? Oo. Madla: Mayroon pa rin namin isang panayam sa ika-21? ANDI PENG: Oo. Kaya sa ika-21, may ay magiging isang panayam na live mula sa Harvard. Hindi ko alam kung David ay paggawa ng pelikula ito o kung talagang siya ay lecturing, ngunit ito ay pagpunta sa maging magagamit online para sa iyo guys upang access. Kaya't tiyakin na magkatay ng isang lamang hour out saanman sa pagkahulog pahinga kaya ka guys ay maaaring abutin hanggang sa na lecture. Oo? Madla: Oo. Sorry. Nakatanggap ako dito isang couple-- ANDI PENG: Huwag mag-alala. Dito, tumagal ng ilang kendi. Madla: Hey, nahuli ko na. Kaya lang sa paglalagom, hindi bukas ngunit ang Miyerkules pagkatapos na, kami ay may isang pagsusulit. ANDI PENG: Tama. Madla: At ito ay pagpunta sa be-- kung ano ang format ng pagsusulit? ANDI PENG: Oh. Kaya makikita namin magpadala ng isang email na sumasaklaw sa lahat na mas malalalim na. Ngunit, mahalagang, ay sumasakop lamang ito mga pangunahing paksa na sakop sa unang kalahati ng semestre. Magkakaroon kami review session at katanungan at sagot kaya walang mga alalahanin tungkol sa na. Ngunit kami ay makikita na ang pagpunta sa na masyadong. Madla: Ito ba ay magiging, namin dalhin ang aming mga computer at code there-- ANDI PENG: No. Ito ay magiging iyo guys pagsulat at pagsagot sa mga tanong sa pamamagitan ng kamay. Madla: Oh. ANDI PENG: Kaya bibigyan namin out na kasanayan at bagay-bagay kaya ka guys ay maaaring gusto mong marahil pumunta sa likod at sa pagsulat na muli ng Mario sa pamamagitan ng kamay lamang upang tiyakin na ikaw ay may isang lalaki ng ideya kung paano upang gawin iyon. Dahil kung minsan kapag sumulat ka sa pamamagitan ng kamay mo kalimutan semicolons at bagay-bagay at iyon ang ganap na hindi maayos. Madla: Hindi ba na maging [hindi marinig]? Tulad ng, ikaw ay nakakakuha ng isang tuldok-kuwit sa your-- ANDI PENG: Oo at hindi. Susubukan naming makipag-usap sa mga mas malalalim tungkol sa kung paano ang mga pagsusulit layout ay at kung paano namin pagpunta sa grado. Ngunit mahalagang, lamang malaman na ang pangkalahatang format ay magiging iyo guys mag-interpret code-- pagsagot sa mga pangunahing mga katanungan. Kung tatanungin ko kayo, kung ano ang isang library? Ikaw guys dapat malaman kung ano ang isang library ang ginagawa at isulat na pababa. O maaari kong sabihin, magsulat ng isang programa na Kopya Hello World sa screen. Ikaw guys ay sumulat, int pangunahing void printf hello world semicolon. Oo. Madla: Kaya ito ay hindi pagpunta na kahit saan [hindi marinig] antas ng kahirapan ng problema set? ANDI PENG: No. Hindi. Won't-- namin oo. Isulat ang kabuuan ng laro ng 15 sa 20 minuto, pumunta. Hindi, ito ay hindi na. Hindi. Madla: OK. Kaya na ay Miyerkules. Sa panahon na linggo din namin nagtakda ng mga pinakamahirap na problema? ANDI PENG: No. Kaya itakda ang problema na ito dahil ang araw bago fall break. Ang schedule-- sa email ay talagang magpadala out 20 minuto ang nakalipas tungkol sa lahat ng ito. Kaya mo guys lamang na suriin ang iyong mga email. Makikita ito ay doon. Oo. Huwag mag-alala. Cool. Anumang mga pangkalahatang mga katanungan tungkol sa anunsyo, pagmamarka, mga pagsusulit, bago namin sumisid pakanan papunta payo na kung saan ay ubusin sa karamihan ng aming mga oras section ngayon? Cool. Lahat tama. Panoorin ang lahat Kaya ginawa mo guys ito lovely-- Hindi ko alam kung ano ang kanilang tawag dito. Ang bagay na kung saan ang claymation hinipan up sarili dahil sa ito hindi gamitin ang isang pointer ng tama. Well, ang iyong programa ay pagpunta sa marahil sumabog ang sarili nito kung ikaw ay huwag gumamit ng mga payo tama rin. Kaya kami ay pagpunta sa gumawa Siguraduhin na hindi mangyayari. Ngayon kami ay pagpunta sa gawin ang ilang mga masasayang pointer. Pupunta ako sa pumunta sa paglipas ng mga bagay-bagay bilang maayos bilang tingin ko ay posible sa isang maliit na frame ng oras. Ngunit mayroon lamang kaya magkano upang masakop na ko talagang gusto mong lalaki, kung hindi mo maintindihan ang isang bagay, upang hindi lamang hayaan mo akong panatilihin ang pagpunta. Dahil kung hindi mo gusto maunawaan ang isang bagay, ikaw ay malamang na hindi pagpunta sa maunawaan kahit ano sinasabi ko matapos na. Kaya mangyaring ihinto sa akin at humingi ng isang katanungan. Dahil ito ang lahat ng uri ng snowballs magkasama. Tulad ng, mga payo humantong sa memory lead sa iba pang mga bagay. At kaya kung hindi mo maintindihan ang mga payo, huminto sa akin at kami na malaman ito at buhay ay maging fine. Cool. Kaya kung gaano karaming ng ka guys sa panayam, kapag nabanggit payo David, iyong talino uri ng naka sa maging halaya-O? Oo. Good. Kami ay pagpunta sa subukan upang de-maging halaya-O iyong talino ngayon. Kami ay pagpunta sa talagang sistematikong pumunta sa pamamagitan ng kung ano ang eksaktong isang pointer ay, ano ang ginagawa nito, at kung paano namin ginagamit ang mga ito. Kaya lahat pointers-- kaya normal na may mga variable hindi namin ginagamit sa coding, tulad ng variable tulad ng integer o mga string o sa kamay, ang mga ito ay ang lahat ng mahalagang ang halaga na itinalaga sa kanila pati na rin ng isang address tumuturo sa halagang iyon. Kaya ako ng pagpunta sa gumuhit ito sa ngayon. Mayroon kaming halos walang tisa ngunit iyan ay OK. Kaya halimbawa, normal ang paraan na kami ay gumagamit ng mga variable ay lumikha namin ang mga pangalan ng variable ng uri int, sabihin sabihin lang. Kaya dito namin nakuha ng int x at hindi namin Sinisimulan na int sa 50. Kaya dito sa block na ito ng memory sa aming mga computer na naka-imbak namin ang isang bilang ng mga 50. Kaya kung saan payo dumating sa paglalaro ay na ang iyong computer itself-- gusto, dito, pisikal na sa hard drive sa RAM ng aking computer-- ito lamang ay may isang tiyak na halaga ng memory. Hindi ka na panatilihin ang pag-iimbak ng mga bagay-bagay sa itaas ng mga bagay-bagay sa itaas ng mga bagay-bagay at magkaroon ng mga ito lahat. Kaya ang paraan na aming magilas mag-ukol memory para makapag-imbak ng kung ano ang gusto namin at pag-access sa mga ito, ay sa pamamagitan ng pagkakaroon ng mga payo. Kaya isipin sa iyong memory space, right. Kung ito ang RAM ng iyong computer, ikaw ay may mga maliit na piraso o mga bloke o bytes ng memorya sa which-- ang mga ito ay maliit lamang bloke na ay inilalaan sa labas ang hard drive o RAM ng iyong computer, at sa loob ng bawat isa sa mga bloke maaari mong itabi ang iba't ibang mga bagay. Kaya halimbawa, isa array sa halimbawang ito dito ay isa byte na kung saan ay na binubuo ng walong bits. Ang numero nagbabago depende sa operating system ng iyong computer. Halimbawa, kung ilan sa inyo ay may narinig ng 32-bit kumpara sa 64-bit operating sistema? Mismong. Kaya lahat ng iyan ay sinasabi ay na ang mga na memorya na ang paraan na ang iyong computer namamahala ng memory ay naiiba. Aling ang dahilan kung bakit ito ay talagang Mahalaga na maunawaan bakit memory mismo mga function sa halip kaysa bigyang-pansin ang mga numero. Kaya hindi namin talagang pakialam kung paano malaki ang array na ito ay, kailangan lang na pag-aalaga tungkol kung paano malaki ang kailangan namin isang int upang maging, kung paano malaki do kailangan namin ng isang string upang maging, kung paano malaki ay isang pointer? SIGE. Kaya ito ay magiging isang pulutong ng mabigat, siksik na impormasyon. Pupunta ako upang bigyan ka guys isang ilang comic relief sandali dito. Ikaw guys dapat ma lahat upang maunawaan na ito ngayon. Dahil alam namin na payo ay mga address, at ang mga ito ay naiiba mula sa mga variable. SIGE. Cool. CS jokes ay ang pinakamahusay na, oo? Kaya ang paraan na kami ay pumunta tungkol sa paglikha ng isang pointer ay isang napaka-tukoy na uri ng syntax. Tulad ng sa paglikha ng anumang uri ng variable, ito ay pagpunta sa isang tiyak na syntax na ginagamit namin upang lumikha ng ito. Kaya kapag deklarasyon anumang pointer, isang pointer lamang essentially-- Sa tingin ko ang mga mahahalagang bahagi ng payo ay na kung saan ang isang variable ay pareho ang halaga at isang address, isang pointer ay isang address. Ang halaga nito ay isang address. Kaya ito ay isang address na naka-imbak sa ibang address. Kung na gumagawa ng anumang mga kahulugan. Kami ay pumunta sa paglipas ng ito nang mas detalyado, ngunit iyan ay ang generic na form ng why-- ng kung paano ang isang printer ay naka-imbak. Kaya ang paraan na ikaw ay lumikha ng isang pointer ay sa pamamagitan ng paggawa ng anumang uri ng data na ang pointer ay pagpunta upang maging sanggunian at then-- may star-- at pagkatapos ay ang pangalan ng pointer. Kaya dito, kung gusto naming upang lumikha ng isang pointer na tulis patungo sa isang integer, at kami pinaghahanap ang pangalan ng pointer na x, Gusto naming gawin int star x. Oo? Madla: At kaya kung ang sumusunod na linya sa iyo gawin int x, ay ang int star x ipahiwatig ang lokasyon ng mga x ka na pagtukoy pagkatapos? ANDI PENG: Talagang mahusay na tanong. Susubukan naming pumunta sa paglipas na ito sa isang pares slide mamaya. Oo. At pagkatapos ay parehong bagay sa pansamantalang trabaho at parehong kamay bagay. Basta alam na sa puntong ito lumikha kami ng isang pointer, hindi pa namin na talagang i-set ito sa pantay na kahit ano pa. Hindi namin talagang isinangguni dito. Ang parehong bagay dito kapag lumikha ka ng isang variable, nalikha mo na ang pangalan ng variable, hindi mo pa talagang i-set ang halaga sa mga ito. Parehong bagay dito. SIGE. Kaya paano namin-set ng mga halaga sa mga payo? Ito ay sa pamamagitan ng sanggunian at dereferencing. Kaya ang paraan na maaari naming isangguni isang varia-- isang pointer, sa kakanyahan bumalik kami ng address sa memory ng kung saan ang isang variable ay naka-imbak. Kaya kung ako ay isang pointer-- makikita ko gumuhit ito sa sandaling makuha namin sa susunod na slide, ngunit lamang malaman na, mahalagang, ang at- mga ampersand at ang variable-- lahat na ay ay sabihin sa iyo ang address ng kung saan ang isang bagay ay naka-imbak. At dereferencing ay ang kabaligtaran ng mga iyon, na kung saan ay lamang ang star. Ang bituin ay nagbibigay lamang sa iyo ang aktwal data na naka-imbak sa address na iyon. Kaya isa ay nagbibigay sa iyo ang address naka-imbak sa isang address, ang iba pang nagbibigay sa iyo ng tunay na mga halaga na naka-imbak sa address. Kaya silang dalawa ay bigyan iyo ng iba't ibang mga bagay. Muli, ang mga slide ay lahat ng mga online kaya walang mga alalahanin kung hindi maaaring kopyahin mo guys down na ito sa oras. Kaya sabihin tumagal ng isang pagtingin sa halimbawang ito dito. Kaya Mayroon namin ang isang higanteng memory array dito, tama? Saan kami na lang na mga bloke ng memorya, o bytes ng memorya, kung saan maaari naming tindahan ng iba't ibang mga bagay. Sabihin lang sabihin ang mga ito ay ang address puntos sa memory. Kaya anumang oras mayroon kang - makita ang 0x, lahat ng iyon ay nagsasabi sa iyo ay na ang iyan ay isang hexadecimal numero. Bilang ka guys alam ng lahat, mga numero maaaring batay sa iba't ibang mga naka-base. Base 10 ay kung paano namin karaniwang bigyang-kahulugan ang mga numero. Mayroon din ng base 2, na kung saan ay binary. At sa kasong ito, hexadecimal ay base 16. Ito lamang ay isang iba't ibang mga paraan ng sinasabi mula sa zero sa 10-- o zero sa siyam at pagkatapos din A, B, C, D, E, F. Sumasangguni Gayundin magkakaibang numero. Dumaan si David na ito sa panayam sa madaling sabi. Kung ikaw guys ay nalilito, Google lamang ito. Mayroon talagang mga madaling paraan upang malaman ang kung ano ang isang hexadecimal digit ay. Ang lahat ng iyon ay talagang may-katuturang ngayon ay para sa iyo guys na malaman na ang isang hexadecimal digit sa C Sinasabi you-- na karaniwang ay nagsasabi sa iyo na ito ay isang pointer. O iyon ang isang address. Kaya sa halimbawa dito, int x ay katumbas ng 5. Kami ay ang paglikha ng isang integer-- Paumanhin, isang variable ng uri integer at kami ay Sinisimulan ito sa 5. Kaya dito sa aming memory board, maaari naming makita na x ay ang address ng 0x0 at ang halaga na na sa iyo naka-imbak sa loob ng mga ito ay 5. Na dapat magkaroon ng kahulugan sa lahat ng tao, di ba? SIGE. At pagkatapos ay kung ano ang aming nagawa sa pangalawang linya ng code ay na ginawa namin isang pointer ng uri int. Ano Iyan ang int star pointer ay ginagawa. At iyon ay katumbas na ang ampersand x ay nagbibigay sa iyo ng address ng isang bagay. Kaya ang address ng x sa halimbawang ito ay 0x0. At kaya address na pagiging naka-imbak sa na pointer. Ba na magkaroon ng kahulugan sa lahat ng tao? Kaya sa tingin ng this-- tingin ng pointers-- dito sa Yale kami ay may isang PO box sistema kung saan ang bawat mag-aaral ay may isang mailing address kung saan maaari kang pumunta sa silong ng LW at maaari kang pumunta lamang at grab ano man ang kailangan mo mula sa address na iyon. Ang parehong bagay ang nangyayari dito sa isang computer. Mayroon kang mga bytes ng memorya na Maaari kang mag-imbak ng impormasyon sa, ngunit upang malaman kung aling mga mga piraso ng impormasyon match up ng kung ano ang iyong sinusubukan na hanapin at kung saan, kailangan mo ng isang pointer na ay nagsasabi sa iyo kung paano pumunta doon. Kaya halimbawa, para sa akin, ang aking PO box, Mayroon akong isang tiyak na limang digit na numero. Iyon ang aking address. Kaya ko pisikal na pumunta sa memory, Maaari ko bang tingnan ang address, Maaari ba akong pumunta sa na PO box at i-access sa loob ng data. Ba na magkaroon ng kahulugan sa lahat ng tao Ang iyong computer ay mahalagang ginagawa ang eksaktong parehong bagay. Kaya lahat ng pointer ay ginagawa ay na lamang ito ay ang paglikha ng isang memory at ang data nito memory ay talagang ang address ng iba pa. Pagkatapos ay maaari kang pumunta at hanapin iyon. Ang bawat mabuti? Ang bawat mabuting kasama ko sa ngayon? SIGE. Cool. Lahat tama. Kaya halos ang parehong bagay tulad ng dati. Kaya kami, una, isang variable tinatawag na x kung saan case-- Pupunta ako upang baguhin ang halaga na ito sa 5. Sabihin lang sabihin ang address ng mga ito sa memory ay 0x0. 00. Great. Kaya nga, sa aming ikalawang linya ng code, hindi namin pagpunta upang lumikha ng isang pointer tinatawag ptr pointer. At ang address ng na, sabihin lamang sabihin na ang 0x01 sa memorya. At ang aming talagang nais na store-- ang ampersand x ay nagbibigay sa iyo ng address ng kung ano ang x ay. At ang address ng x ay 0x00. Kaya ito pointer ngayon ang tunay na may address naka-imbak na rin ang kanyang halaga ng kung ano ang x ay. Ang bawat kasama ko sa ngayon? Cool. At pagkatapos ay, ang paraan na Gusto naming kopyahin na, ay kung kami ay magpahayag at magpasimula isa pang bloke ng memorya ng uri int. Right? Ito ay magiging isang int. Ito ay tinatawag na kopya. At ikaw ay pagpunta sa get-- kaya ang star pointer ay nagbibigay sa iyo ang aktwal na data mula sa address na iyon. Ampersand ay nagbibigay sa iyo ang address, ang bituin ay nagbibigay sa iyo ng data. Kung kaya't ang data sa pointer. Pointer ito ay tumuturo sa 5. At kaya ang function na ito here-- ang star pointer-- napupunta, makakakuha anuman ang nasa block na ito at mga tindahan ng mga ito dito. Ang bawat malinaw sa kung paano na nangyari? Kaya ang dalawang mga operator right there-- mga ampersand at ang star-- lamang gawin ang iba't ibang mga bagay-bagay kapag ginamit sa mga payo. Makakakuha ka ng isa sa mga address, isa makakakuha ka ng mga aktwal na halaga. Kaya't tiyakin na kapag ikaw guys ay coding na hindi mo lituhin ang dalawa dahil ang mga ito ng malaking-malaki naiiba. Narito kami ay may isang magandang halimbawa ng isang 0x01. Iyan ay isang tunay na ganda maliit na bilang na matandaan. Sa iyong aktwal na computer ikaw ay pagpunta sa may isang higanteng asno numero na ay isang bagay na iyan ay hindi maganda, hindi kaaya-aya. Ito ay pagpunta sa ilang mga halaga ng basura. At kaya ito ay pagpunta sa talagang, talagang gumulo sa iyong mga programa. Ito ay napakahalaga ngayon na kami ay may ang mga batayan down para why-- gusto, ano ang pisikal na nangyayari kapag ikaw ay nagpapatakbo ng mga bloke ng code. Everyone-- oo? Madla: Kaya katumbas int x int kopya? ANDI PENG: Hindi dahil, sa kasong ito, int x-- ang halaga ng x-- katumbas ng 5, di ba? At pagkatapos int copy katumbas ng 5. Kaya kung ikaw ay upang equate ang mga ito sa bawat isa dahil ang mga ito ay integer, yes, ang mga ito ay suriin sa totoo. Ngunit kung sila ay mga string sa memory, tulad ng ang isa na ginawa ni David sa panahon halimbawa, na iba dahil sila ay tumutukoy ang mga address ng mga lugar sa memory at sila equate sa false. Kaya dito ay ito ay totoo dahil ikaw ay direktang paghahambing values-- integers-- ngunit sa iba ikaw sanggunihan points. Dahil ang isang string ay sa isang array, at all-- namin makipag-usap tungkol sa mga ito later-- ngunit array ay mahalagang lamang ng isang pointer sa isang bungkos ng mga karakter sa memorya. Kaya ang mga ay medyo naiiba. Ngunit sa kasong ito, oo, maaari mong gawin na. Madla: Maaari mong ipaliwanag ang address ng kopya? ANDI PENG: Oo. Kaya na just-- ko ay hindi punan ang halaga ngunit ito ay ang ilang mga random na lang ng iba pang mga halaga ng basura na hindi namin pag-aalaga tungkol. Dahil sa sandaling simulan mo ang program nauunawaan mo na hindi namin talagang talagang pakialam kung ano ang aktwal na mga address ay, kailangan lang nating malaman kung ano ang sa mga address. Oo. Madla: Ang bituin sa tabi ng int sa pangalawang linya, na iba than-- ANDI PENG: Oo. Madla: -ang dereferencing at sanggunihan star? ANDI PENG: Oo. Kaya ang mga may-akda ng C-- sinumang nagpasya na isulat ang wika ng C-- ay hindi masyadong smart. Sila ay hindi masyadong matalino sa sinusubukan upang malaman kung bakit dapat nating gawin ito. Kung ito ay sa akin, gagawin ko talaga gamitin ang dalawang magkaibang mga character. Subalit sila ay nagpasya na gamitin ang parehong isa. Kaya ang star pagkatapos ng isang int, na nagsasabi sa ang computer na ikaw ay tungkol sa upang lumikha ng isang pointer. Ngunit kung ikaw ay sinusubukan upang dereference something-- sa ibang salita, pumunta sa address at hilahin ang mga data mula somewhere-- ang bituin ay ginagamit naiiba. Kaya mo guys maging maingat tungkol lamang Hindi panggugulo up ang dalawang gamit. Cool. Oo? Madla: Kaya lang ulitin sa tiyakin na ako following-- ANDI PENG: Ganap fine. Madla: --In kaliwang bahagi ng na slide, gawin namin ang isang bagay na alam natin. Ipinapahayag namin ang isang integer [Hindi marinig] na katumbas ng 5. ANDI PENG: Oo. Madla: Karapatan. At pagkatapos kami ay may isang int star na bagay at na nagsasabi na, OK, uri ng tulad namin ipinahayag ng isang integer, ngayon kami ay deklarasyon ng isang pointer. ANDI PENG: Tama. Tamang. Madla: Right? At ang aming mga pointer ay ptr. ANDI PENG: Yep. Ang pangalan ng pointer ay ptr. Pointer. Madla: At pagkatapos na ito katumbas nx na lang nagsasabi C na ito ay nais na ma-access ang halaga sa integer x-- ang halaga na integer x ay itinalaga. ANDI PENG: Mag-ingat dahil ampersand x talaga Sinasabi you-- ang computer na kayo nais upang hilahin ang address ng kung ano ang x ay. Kaya ampersand nagbibigay sa iyo ng address, star nagbibigay sa iyo ng ang halaga. Madla: Kaya gusto namin ang address. Ipagpalagay natin na x ay at-- ANDI PENG: Kami ay talagang malaman kung ano ang x ay, di ba? Dahil alam namin na x was-- Ako paggawa ng ito up ngunit sabihin lamang sabihin, nagkataon, ito ay 0x00. Right? Upang malaman namin ang mga address na ito ay 0x00, at kaya kapag pumunta kami at ampersand x, alam namin na na dapat suriin upang 0x00. Alin ang kung bakit namin na naka-imbak na bilang ang halaga ng aming pointer. Ba na magkaroon ng kahulugan? Madla: Oo. At copy papunta sa dereference ptr-- ANDI PENG: Kanan. Madla: --which ay isang pointer na kami ipinahayag na sinasabi sa atin ng address ng integer x. ANDI PENG: Oo. Madla: At sa ganitong isang kaso, star ptr ay katumbas ng halaga ng x kung saan ay katumbas ng 5. ANDI PENG: Tama. Madla: Cool. At iyon ay isang simpleng paraan upang makakuha ng na o ay na ang tanging way-- ANDI PENG: So sa ngayon ito ay hindi mukhang tunay lohikal na para sa amin gastusin sa lahat ng oras na ito ang paggawa ng ito sobrang komplikadong bagay kapag lahat ng aming nagawa ay lumikha lamang ng dalawang integers na may halaga ng 5, di ba? Hindi ito magkaroon ng kahulugan. Ngunit sa sandaling kami ay pumunta sa paglipas ng memory laang-gugulin at- bibigyan namin ng pumunta sa kung bakit ito ay maaaring magaling at kapaki-pakinabang sa susunod. Tiwala sa akin kapag sinasabi ko ang ginagawa namin hindi lamang lumikha ng mga arbitrary function para sa iyo guys upang matuto dahil hindi namin sinusubukan sa gulo sa iyo. May aktwal na gumagamit ng para sa lahat ng mga mga bagay-bagay at kami ay makipag-usap tungkol sa kanila. Madla: Kahanga-hanga. ANDI PENG: Oo. Madla: [hindi marinig]. ANDI PENG: Magandang katanungan. Madla: [hindi marinig]. ANDI PENG: Ito ay hindi. Ito ay talagang hindi. Madla: --two variable na din pantay [hindi marinig]. SIGE. ANDI PENG: Oo. SIGE. Bago ako magpatuloy, ay malinaw sa lahat? Alam ko Taylor, nakuha mo sa isang bit late. Ito ay OK. Ito ay online. Makikita panoorin ang unang 20 minuto at ikaw ay ang lahat ng mabuti. SIGE. Cool. Lahat tama. Kaya ito ay mahalagang uri ng isang mga katulad na bagay na lang namin ginawa. Ito ay lamang sa isang graphical form. Kung kayo ay upang subaybayan kung ano ang nangyari lamang, int x ay katumbas ng 5, lahat ng aming nagawa sa puntong ito ay lumikha ng isang variable na pinangalanan x uri ng int. Kami ay pagpunta sa tindahan ng halaga ng 5 sa loob ng mga ito. Walang pointer dahil kami ay hindi talaga pa lumilikha ng isang pointer, di ba? At pagkatapos ay sa susunod na line, int star pointer, na kung saan kami ay talagang pisikal na paglikha ng pointer at kami ay-set na pantay-pantay sa, o sanggunihan ang pointer, upang ampersand x. Alin ang kung saan saan man sa memory na ito nangyari na. Hindi ko talaga mag-abala paggawa ng up ang halaga ng oras na ito. Ngunit sa kasong ito, sa puntong iyon ikaw ay magiging katumbas iyon. At pagkatapos ay down doon, ang star pointer ay ang dereferencing. Iyon ay kung saan hindi namin paghila ng impormasyon. Kaya na halaga sa x ay talagang magiging katumbas ng 35. Kaya sa puntong ito, na namin ng mahalagang reinitialized lamang x sa 35 nang hindi aktwal na pagpindot x. Sa pamamagitan lamang ng pointer noon ay tumuturo sa x, maaari naming talagang baguhin kung ano ang x ay. Pupunta ako sa gumuhit ito out pati na rin. Kaya dito na nilikha namin ang ilang mga random address dito. Sabihin lang sabihin 0x00 muli. Sabihin lang sabihin iyon ang address. At ginawa namin ang isang integer na may pangalang x at ang halaga na itinalaga kong ito ay 5. Sa pangalawang linya, int pointer-- kaya ngayon na namin Nakakuha ito ikalawang bagay dito na tinatawag na isang pointer-- at kami ay pagpunta to-- sabihin lamang sabihin ito ay ang ilang iba pang mga random memory address. Kaya kami ay pagpunta sa set na ito katumbas ng kahit na ano na iyon. At ito pointer ay pagpunta sa point patungo sa halaga ng x At pagkatapos ay, kung babaguhin namin the-- kung gagawin natin ang star pointer, na pagpunta sa mga halaga ng aming pointer. Sa kasong ito, ito ay pagpunta upang subaybayan ito palaso sa ibabaw sa ang halaga na ito ng x at ito ay pagpunta upang baguhin ito sa 35. Mabisa, binago namin lamang x nang hindi pagpindot x. Sa pamamagitan lamang ng sanggunihan mga payo, maaari naming pumunta at baguhin ang halaga ng x. Ba na magkaroon ng kahulugan? Kaya sa ganitong paraan, maaari naming aktwal na palitan ang pangalan at rechange at muling italaga ang halaga sa mga bagay na hindi namin ginawa tunay na gumawa ng ating sarili. Ba na magkaroon ng kahulugan sa lahat ng tao? Cool. SIGE. Kaya complex graphic dito. Pumunta linya sa pamamagitan ng linya. Mahalaga, gawin lamang ang eksaktong parehong bagay na ako lang ang ginawa. Bago ako magpatuloy, ako talagang gusto mong gumawa na lang sigurado lahat ay talagang malinaw sa mga ito. Kaya hanggang dito, ang mga code na kami ay int isang katumbas ng 3, b ay katumbas ng 4, c ay katumbas ng 5. Kaya lumikha kami ng tatlong integer pinangalanan a, b at c na katumbas ng 3, 4 at 5. At pagkatapos ay namin ang paglikha ng tatlong mga payo sa puntong iyon sa bawat isa sa mga variable. At ngayon kami ay pagpunta upang pumunta sa ibabaw ng mahalagang kung ano ang mangyayari kapag gumana sa iyo sa kanila. Kaya gumuhit ng mga ito out. Kumuha ng isang sheet ng paper-- hindi ako alam kung ikaw guys lahat ay may papel, ngunit sa mga mo na hindi, siguro humiram mula sa mga mo na gawin. Dalhin mga sheet ng papel at pumunta linya sa pamamagitan ng linya. At sa bawat operasyon na ginawa mo, Gusto ko sa iyo guys upang aktwal na isulat ang ano ang a, b at c sa puntong ito. At ano ang mga address, kung ano ang mga ang mga payo na tumuturo sa a, b at c sa puntong ito? At pagkatapos ay inaasahan namin na ito ay mga uri ng hakbang sa iyo guys sa pamamagitan ng kung paano mag-isip tungkol sa mga payo. Hindi namin pagpunta upang pumunta sa pamamagitan ng lahat ng mga ito. Siguro kukunin ko na bigyan five-- mo tulad ng, tatlong minuto. Magsimula sa ilang mga unang. Oh. Oops. Madla: Sa pangalawang linya, bakit ay hindi ang star [hindi marinig] variable? ANDI PENG: Alalahanin in operator, sa unang linggo, usapan natin ang tungkol sa kung paano kung gagawin mo plus katumbas, na nangangahulugan lamang ng isang katumbas ng isang plus c. Sa ganitong case-- kaya ito ay isa pang paraan na kung saan ang mga bituin ay maaaring gamitin. Sa karagdagan sa mga sanggunian ng at isinasaysay ang mga payo, tandaan na ito rin ay nangangahulugan ng pagdami. Kaya sa kasong ito, ito Gusto lang maging isang katumbas ng isang beses c. Iyan na lamang ang bilang ng iba't ibang paraan ng pagsulat na. Madla: a ay katumbas ng isang oras c. ANDI PENG: Oo. Madla: Ano ang ibig sabihin kung ito ang sabi ng isang ampersand sulat? ANDI PENG: Ampersand paraan ikaw ay pagpunta sa na- ikaw pagpunta sa mga lugar na ang pointer ay pagturo at kumukuha ang address. Kaya ampersand nagbibigay sa iyo ang address, star nagbibigay sa iyo ang mga aktwal na halaga doon. Madla: Sigurado namin pagbuo sa linya sa pamamagitan ng linya? ANDI PENG: Kayo ay pagbuo sa linya sa pamamagitan ng linya. Kaya pumunta lamang sa isang linya sa isang oras at then-- mo Hindi mo na kailangang mag-alala tungkol sa Tinatapos ang buong bagay. Subukan nating makuha sa pamamagitan ng Hayaan marahil dalawa, tatlong linya at pagkatapos ay gagamitin namin tipon at tapusin ito. Ito ay lubos na OK kung ikaw guys ay mawawala. Ito ay isang tunay na mahirap na konsepto. Kung ikaw guys ay nag-aalala na ang klase napupunta tulad nito tulad Sinasabi ni David, ito ay hindi. Kami ay pag-abot sa pangkonseptong peak ng kahirapan at pagkatapos ito ay pagpunta sa maging pababa kiling. Kaya ka guys ay halos doon. Mayroon kaming maraming ng kendi upang makakuha ng ka guys sa pamamagitan ng mga umbok. Sa tingin ko medyo marami matapos mahulog masira kami ay magiging sa ibabaw ng umbok at buhay ay maging muli fine. Kaya huwag mag-alala sa lahat. Lahat tama. Bibigyan kita ng isang lalaki 20 segundo pa upang tapusin. SIGE. Lahat tama. Tingnan natin ang isang ulos sa ito. Bilang mo guys bigyan ako ng mga sagot, Tingin lang ako sa pagpunta sa uri ng mga ito sa. At sana Maaari we-- ko? Ako ang tunay na hindi maaaring i-type ito. Kukunin ko gumuhit ito sa board. Kaya dito sa unang linya kami ay may isang katumbas b star c. Gayundin Elliot nagdala up ng isang tunay, tunay mabuti point. Dahil nakalimutan ko na bukod sa ang dalawang paraan na maaari naming gamitin ang mga simbolo ng bituin, may tunay na isang ikatlong paraan. Pagpaparami. At kaya lang hindi makakuha ng nalilito dahil na ay ang unang paraan ng paggamit ng isang bituin. Ito ay nagsasabi sa lamang ang computer na ako tungkol sa upang lumikha ng isang pointer. Ang ikalawang paraan sa pamamagitan ng paggawa star ng iyong pointer, na nagsasabi ng pointer na gusto mo upang ma-access ang data sa na pointer. At pagkatapos ay, of course, may simple lang pagpaparami pagitan ng dalawang numero na nagsasabi sa iyo na gusto kong i-multiply ng dalawang. Kaya mayroong isang pulutong ng mga paraan maaari naming gamitin ang simbolong star. Huwag makakuha ng nalilito. Tiyakin na ikaw guys maunawaan lamang kung ano mismo ang lahat ng tatlong ng mga ito ginagawa. Kaya sa unang linya, isang katumbas na beses b c. Kaya sabihin pumunta sa pamamagitan ng kung ano ang ay isang, ano b, ano c? At ano ang pointer ng isang, ang pointer sa b, at ang pointer sa c? Ano ang mga lahat pinapantayan? SIGE. Kaya simulan namin off sa isang katumbas ng 3, b ay katumbas ng 4, at c ay katumbas ng 5, di ba? Kaya matapos na unang linya, maaari tao sabihin sa akin kung ano ang isang ay? Oo. Huwag mag-atubiling upang mag-shout out ng mga sagot lamang. 20. Good. Ano b? Madla: 4. ANDI PENG: Ano ang c? Madla: 5. ANDI PENG: Yay. Good. Ano pa, pb, at pc? Madla: 000,001 at 002? ANDI PENG: Oo. Kaya ang uri ng isang kahanga-hangang gawa tanong ngunit hindi talaga dahil dito ako Drew ang aktwal na alaala. Ngunit dahil, para sa isang halimbawa, ay hindi kami talaga alam kung ano ang mga numero ay, maaari naming lamang sabihin ampersand. Hindi ko kahit na malaman kung ako ay maaaring maglabas ng isang ampersand. Ito ay like-- paano mo gawin ito? Madla: Tulad ng pagguhit ng isang walong. ANDI PENG: Tulad ng isang walong. Tulad niyan. SIGE. Madla: Bingo. ANDI PENG: pagpatay ito. Kaya ampersand a, maaari mo lamang gawin iyon. Dahil hindi namin talagang aalaga kung ano ang halaga ng na ay, at ito ay ang ilang mga pang halaga asno anyways, aming ginagamit lamang giong sabihin ampersand a. At kung ano pb? Madla: [hindi marinig]. ANDI PENG: Oo. Cool. Lahat tama. Easy unang linya. Nakuha namin ito. Payo ay madali. Ito ay OK. Ikalawang linya. At kaya star katumbas ay pareho bagay tulad ng sinasabi ng isang katumbas ng isang beses c. Ito lamang ay isang mas madaling paraan ng pagsulat. Kaya kami ay hindi sinusubukan upang gumawa ng isang punto o kahit ano dito. So tapos na ang unang linya. Ano ang isang sa pangalawang linya pagkatapos gawin mo ang isang katumbas ng isang beses c? Madla: 100? ANDI PENG: Ito ay 100. Good. Paano ang tungkol sa b? Madla: [hindi marinig]. ANDI PENG: Paano ang tungkol sa c? Madla: [hindi marinig]. ANDI PENG: At kung paano tungkol sa mga payo? Sigurado they-- pareho, di ba? SIGE. Ngayon ikatlong linya. Little trickier. b ay katumbas ng star pa. Maaari isang tao sabihin sa akin, una, kung ano ang ginagawa star pa pantay-pantay? Madla: Ito ay ang halaga na naka-imbak sa isang. ANDI PENG: Eksakto. At ano ang halaga na naka-imbak sa isang? Madla: 100. ANDI PENG: OK. Kaya kung ano ang nais ng isang ay matapos Isinasagawa na ang linya ng code? Madla: [hindi marinig]. ANDI PENG: Ano ang tungkol b? Madla: 100. ANDI PENG: Oo. At pagkatapos ang lahat ng iba pa ay medyo marami ang hindi nagbabago, di ba? Dahil hindi namin ginawa hawakan ito. Cool. Ika-apat na linya. Bahagyang mas mahirap unawain. Kaya pc-- muli, pc ay ang pointer na itinuturo sa c-- katumbas pa. Ano ang isang? Madla: 100. ANDI PENG: Ano b? Madla: 100. ANDI PENG: Ano ang c? Madla: 5. ANDI PENG: Ano pa? Madla: ampersand a. ANDI PENG: pb? Madla: Ampersand b. ANDI PENG: At nakakalito, kung ano ang pc ngayon? Madla: ampersand a. ANDI PENG: Yay. Woo hoo. Ikaw guys makita? Ito ang lahat ng karapatan. Ito ay hindi masyadong masama. Mayroon kaming higit pang mga kendi na kung ito ay hindi lahat karapatan, ngunit sa tingin ko ito ang lahat ng karapatan. At kami ay pagpunta sa pumunta sa ibabaw ng isa lang mas bago namin pindutin ang mas mahirap na iyan. Ang mga sagot ay may up ako dito. Totoo, alam na ito ay tulad ng math at sa puntong ito. Kapag mayroon ka ng mga simpleng equation tulad ng isang plus b, isang beses c, na madaling gawin. At kapag sinimulan mo ang pagpapalawak sa ito, pumunta lamang pagkakasunud-sunod ng mga operasyon. Parehong bagay tulad ng dati. Subaybayan kung ang iyong star ay nasa harap ng isang bagay. Iyon ay nagsasabi sa iyo ang halaga. Kung mayroon kang isang at bago isang bagay, ito ay nagsasabi sa iyo ang address. At dapat kang magtalaga ng alinman sa payo o halaga. Kaya sabihin pumunta sa paglipas ng ito huling isang tunay na mabilis. Hindi ito huling isa, sorry. Sa totoo lang, ikaw guys ay maaaring kunin. Aling isa ang gagawin mo guys nais na pumunta higit sa labas ng natitirang tatlong na kami? Hindi sa tingin ko maaari naming lamang gawin iyon dahil hindi namin lamang tumalon sa linya. SIGE. Hindi ka guys magkaroon ng isang pagpipilian, ito lamang ay ang third sa huling isa. Star pc katumbas beses b c. Madla: Star pb? Madla: Star pb. ANDI PENG: Sorry? Madla: Star pb. ANDI PENG: Star pb. Oh, ang aking masama. Star pb katumbas beses b c. Pupunta ako upang bigyan ka ng isang lalaki 10 segundo. Just mabilis mag-isip. Ito ay na kami ay may kaya Sa ngayon, kung ano ang mangyayari pagkatapos naming execute na ikalimang linya doon? SIGE. Ano ang isang? Madla: 100. ANDI PENG: 100. Ano b ngayon? Madla: 500. ANDI PENG: Good. Isang tao na gusto ba na ipaliwanag sa akin kung bakit ito ay 500? Masama ang pakiramdam ko tulad namin talagang kailanman baliw b. Paano nakarating ang pamahalaan namin na baguhin ang halaga ng b walang hawakan b? Oo? Madla: Dahil star pb ay nangangahulugan na ang halaga sa pb-- ANDI PENG: Eksakto. Madla: --which ay b. ANDI PENG: Eksakto. Kaya dito sa aming diagram, ang aming pointer pb ay aktwal na tumuturo sa karapatang ito dito, kung saan ay ang aktwal na pisikal na b. At kaya kung ikaw ay pumunta at gawin mo star pb, na ang sumusunod ang iyong mga arrow ng iyong pointer at pisikal na pagbabago sa halaga ng b. Kaya na ang dahilan kung bakit namin b binago sa 500 nang hindi aktwal na pagpindot b. At pagkatapos lahat ng iba pa ay nananatiling pareho dahil hindi namin ginawa hawakan iyon. Iyan ay b. Cool. At then-- Madla: Mayroon akong lamang ng isang katanungan. ANDI PENG: Oo? Madla: Dahil we've-- may hindi na ampersand c, na ang ibig sabihin ampersand isang nagre-redirect sa mga parehong bagay ngayon? ANDI PENG: Yep. So-- Madla: Kaya ang mga arrow uri ng lamang gumagalaw at- ANDI PENG: So essentially-- Madla: --now hindi namin access-- ANDI PENG: --when namin dereference c on-- panday ko. Ano iyon? Ang ikatlong linya? Fourth. Ika-apat na linya. Lahat ng aming ginawa ay, mahalagang, baguhin ang arrow at ito ay may tulis patungo sa isang halip. Madla: Kaya hindi namin ma-access c anymore. ANDI PENG: Kung ikaw ay nagkaroon na ito eksaktong number, maaari mong ma-access ito. Pero hindi. Hindi namin magkaroon ng isang pointer pagturo patungo c anymore. Sa tingin ko kung nais mong upang muling i-access ito, ikaw ay lumikha ng isa pang pointer na muling nakatutok sa c o dereferenced ito at itinuturo sa likod. So, hindi, tulad ng sa ngayon, ang tatlong mga payo, wala sa kanila ang point c. Ang bawat mabuti? Sagot ay online. Huwag mag-atubiling, pagkatapos ng seksyon, pumunta sa sa huling dalawang at pagsubok sa inyong sarili. Parehong concepts, tulad ng isang maliit na bit trickier. Sundan lamang sa pamamagitan ng lohika ng bakit ang mga bagay ay iba't ibang mga bagay. At hint, payo ay isang paksa na gustung-gusto namin upang masakop sa quizzes dahil ang mga ito conceptually lubhang mahirap. Kaya Gusto ko iminumungkahi na iyong suriin ang lahat ng guys ang chart na ito o slash katulad na konsepto sa ito bago ang iyong pagsusulit sa susunod na linggo. Madla: Mawalang galang na. ANDI PENG: Oo? Madla: [hindi marinig] final one-- [hindi marinig]. ANDI PENG: 50,000? Gusto ko kailangan upang sundin ang mga ito pabalik down. Ngunit somewhere-- tingin ko ang mga linya bago, nilikha mo ang giant c halaga. c ay katumbas ng mga ito higanteng bagay na kung saan ay 100 beses na 500. Hindi. Madla: [hindi marinig]. ANDI PENG Oo. 100 beses na 100 na kung saan ay 10,000. Alin ang 10,000. Kaya bumalik down doon ikaw ay multiply b at c. Kaya ang pointer na tumuturo sa b-- na kung saan ay ang halaga ng 500-- beses a-- Madla: [hindi marinig]. ANDI PENG: Maaari na ang mali. Madla: Hindi, hindi, ito ay hindi. [Hindi marinig] pointer sa c ay tumuturo na ngayon sa a-- ANDI PENG: Oo. Siya ay karapatan. Madla: --it ay sa kanyang sa isang equals isang times-- ito ay ang halaga ng mga c. ANDI PENG: Maaari mong sabihin na ang isang maliit na bit louder kaya lahat ng tao ay maaaring marinig mo? Madla: Kaya pointer sa c points ngayon sa kung ano ang pointer ng isang ginamit upang ituro to-- at does-- pa rin ngunit itinuturo ng mga ito ang parehong bagay kung saan ay ang isang, di ba? Ang halaga ng isang, gayunpaman ito ay nai-bagong tinukoy. At sa simula ng na ikaw ay sinasabi ng isang dati ay 100 beses ang halaga sa b kung saan ay 500. At kaya na subalit marami na. 50,000. Sila ka reassigning na sa kung ano ang memory space sa c is-- ang pointer sa c ay tumuturo sa kung saan ay isang. Kaya ikaw ay muling pagtutukoy ng isang upang maging 50,000. ANDI PENG: Maaaring siya magturo ng seksyon para sa akin. Susunod na oras na ito ay ang lahat ng iyo. Narito. Narito ang higit pang mga kendi para sa na. Karapat-dapat ka na kendi para sa na. Madla: ako halos nahuli na. ANDI PENG: Malapit ka nang nahuli na. Ayos lang iyan. Oo. Ngunit siya ay akmang-akma. Kaya kung ano ang kailangan mong gawin ay na- tingin ko namin kailangang sundin ang mga katunayan na ang mga payo ay ngayon tumuturo sa iba't ibang mga halaga. Kaya ang value-- Paumanhin, ang pointer ng c repointed sa a. At upang ang Paglipat sa lahat ng aming mga numero. At iyon ang dahilan kung bakit, kapag na-access mo ang stored value doon, ito ay naiiba. Ba na magkaroon ng kahulugan? SIGE. Cool. Ang bawat mabuti, bago ako lumipat sa? Madla: ba the-- kapag kayo ay pagpunta down ang mga hilera sa kaliwang haligi, ay ang unang hilera makakaapekto sa pangalawang hilera at pagkatapos ay ang second-- tulad, ito ay all-- ANDI PENG: Oo. Kaya isipin ito code kung saan ako lang type sa isang katumbas b ulit c, isang bituin ay katumbas ng c. Isipin lamang na hindi ko na bumangga lang ang code na ito at hindi ko i-print out kung ano lahat ng mga bagay ay. Kung ako ay lamang na i-print ang unang bagay sa itaas, ito ay magiging dito. Kung matapos kong tumakbo ang lahat ng mga linya ng code, kung ano ang mga halagang ito ay dapat na sa katapusan ay na. Kaya ako ang tunay na nakasulat sa isang program dito. Hindi ko pa tapos ang lahat ng ang pagpaparami. Ngunit lamang isipin. Kaya dito ko na lang ay isang programa na tinatawag na mga payo. Pupunta ako upang mag-zoom in kung guys-- ka OK. Kaya ako ay lumikha ng mga variable a, b, at c. Na-set ko sila pantay-pantay sa 3, 4, at 5 at na ako nilikha ang kanilang mga kaukulang payo. At pagkatapos dito ako lamang ang pagpunta upang i-print out kung ano na. Kaya hayaan mo akong tumakbo na. Gusto mo ba guys see-- crap. Huwag mo guys makita kung paano ang isang, b at c ay ang mga halaga ngunit ang kanilang mga payo ay ito higanteng halaga ng basura na hindi namin pag-aalaga tungkol sa? Kaya kung ako ay upang aktwal na plug sa lahat ng pagpaparami at pagkatapos ay muling i-print ang lahat ng ito, ito execute out sa kung ano na ang nasa ibaba. Kaya kung nais mong guys na maglaro sa paligid sa aktwal na pisikal na coding, ka guys ay maaaring lamang plug ang lahat ng mga nasa. Ang code ay online at pagkatapos ang iyong mga halaga ay dapat mag-print sa na pagkatapos. At pagkatapos ay makikita mo kung paano ang pointer addresses ay may tunay na inilipat. Kaya makikita mo kung paano ang address ng c talagang nagiging sa pantay anuman ang address ng isang ay. At ang mga ito ay tumugma sa anumang na ang mga malalaking numero ay. Magandang tanong. Ang bawat lahat ng karapatan? Isang huling tawag para sa mga katanungan. SIGE. Lahat tama. Kaya maghanda upang magkaroon ng iyong isip matangay ng isang bahagyang bit higit pa. Ang mga array ay talagang lamang payo. Iyon lang ang mga ito. At tandaan, kung ano ang mga string? Sila rin ay array. Kaya kung ano talaga ang mga string? Sila ay tulad ng mga payo sa mga simula ng isang pansamantalang trabaho ng higit na karakter. Kaya lamang konsepto na simulan na bumuo sa ibabaw ng bawat isa. Kaya na why-- mo tandaan sa panayam, David, kapag siya ay nagkaroon ng paghahambing na ng int string mom ay isang bagay at pagkatapos ay isa pang string mom at ikaw subukan upang equate ang dalawa sa bawat isa, bigyan ka nila ng iba't ibang mga halaga. Ito ay dahil ang mga string kanilang sarili ay hindi na halaga. Lahat ng mga ito ay mga memory address char-- ang mga ito ay mga array ng mga karakter at mga array ay lamang payo. Kaya, sa kakanyahan, kapag Si David ay comparing-- ay ito ang OK kung burahin ko ang lahat ng mga ito? Kaya sa panayam ng si David nagkaroon mom katumbas ng ay katumbas mom, sa amin na parang ang mga parehong bagay. Right? Ngunit, sa computer sa ilalim ng hood, kung ano ang tunay na nangyayari ay na ang string na ito, lahat na ay isang array. Sa pamamagitan ng isang ampersand-- o, paumanhin, may null terminator sa dulo. Right? Backslash 0. Maling backslash. Kaya lahat were-- nila ang lahat mga dalawang string were-- ay ang dami ng mga nakadapa laki na may ang mga titik ng mom and mom. Ngunit ano ang mga array ay talagang ay lamang payo sa isang tiyak na lugar sa memory na nagsasabi sa iyo upang simulan ang iyong array. Kaya sa kasong ito, ang lahat ng mga ito ay ay lamang ng ilang mga halaga ng basura, ilang mga random na pointer. At lahat ng ito ay ay sa ilang ibang mga halaga ng basura. Sabihin natin 0x200 lamang. At kaya kapag sinusubukan mong pantay-pantay ang mga ito ng dalawang sa bawat isa, suriin nilang false dahil ang addresses-- ang mga payo na sila were-- ay naiiba. Sapagkat ito ay naiiba kung ikaw ay sinusubukan upang ihambing ang aktwal na integer. Tulad ng kung nais na compare-- sa huling example-- int isang b, sila suriin sa tunay na tulad ng sinabi Elliot sapagkat sila ay integer na naka-imbak at ikaw ay pinahahalagahan lamang ang mga halaga. Dito, dahil string ay array at ang lahat ng array ay mga payo, na ang dahilan kung bakit sila ay hindi pantay-pantay sa bawat isa. Kaya uri ng nakalilito, graphic na. Ngunit isipin sabihin lang. Na namin lumikha ng isang hanay ng mga laki 3 na may index mula 0 hanggang 2-- 0, 1, 2 sa mga halaga ng 1, 2, at 3 naka-imbak sa mga ito. Ang lahat ng mga array ay talagang does-- dito, sabihin lamang sabihin Lumilikha ako ng pointer sa na array na pag-access sa ang halaga sa unang index ng array. Kaya dito ay ito ay 0. Right? Ba ang lahat maunawaan kung paano na sinusuri unang linya? Great. At kaya kung nais mo upang magpasimula ang karagdagang halaga pagkatapos na, lahat ng aming ginagawa ay reassigning. Kaya 0, 1, 2, 1. Kaya ito pointer na minsan tumuturo sa dito, ang lahat ng aming ginagawa ay lumipat ito pababa. Iyon ay kung ano ang plus 1 ay ginagawa. At pagkatapos ay maaari naming ilagay ang 2 doon. Kung gusto naming ilagay ang 3 sa isa pagkatapos, kami ay burahin ang pointer, ilagay 3 sa doon. Ba na magkaroon ng kahulugan sa lahat? Oo. Mayroon ka ba ng isang katanungan? Madla: Ito ay [hindi marinig] may isang tanong, kukunin ko na ito sinasabi pa rin. Hindi sa tingin ko ito ay talagang isang tanong but-- sa Ingles, array ay katumbas ng 1 katuturan. Humihingi kami ng gusto, OK, ang unang bagay. Subalit ang bagay ay 0 index [Hindi marinig] ang array ay katumbas ng 0 upang ipahiwatig ang unang puwesto. ANDI PENG: Oo. Kaya talagang ginagawa ko dito ay Hindi ko ma-access ang unang index. Lahat ako ay doing-- kaya una sa lahat, sabihin sa akin kung ano ang ibig star array gawin? Ano ang ginagawa ng isang bituin bago ang isang pointer gawin? Madla: Ito ay nagpapahiwatig ng isang pointer. Na ka na ng deklarasyon ng isang pointer. De-- Ito ANDI PENG: Ito dereferences na paraan ito napupunta at talagang makakakuha ng mga halaga. Right? Kaya sa kasong ito, nais mong makakuha ng ang halaga dito at i-set na sa 1. Oo? Kaya hindi ako actually-- hindi ako talagang pakialam tungkol sa index ng mga ito, lahat ako ginagawa lamang iterating pababa sa pamamagitan ng paglipat ng aking pointer down ang array. At pagkatapos ay ako sa huli kung itigil ito, right? At ang paraan na itigil ko ay kapag pindutin ko, sa kaso ng isang string, ang isang null terminator. Alam ko, oh, kung pinindot ko ang isang back-- kung makikita ko backslash 0, alam ko ako tapos na may ganitong at alam ko na maaari ko na lang itigil iterating sa pamamagitan ng. Talagang mahusay na tanong. At kami ay talagang kailangan pumunta mas malayo malalalim na ito sa susunod na linggo dahil ang mga piraso na pupuntahan magdawit ng isang pulutong ng paggamit ng mga payo. Ngunit lamang malaman na sa ngayon, ito lamang ay isang iba't ibang mga more-- ito lamang ay isang iba't ibang mga paraan para sa ang computer na magsulat, mahalagang, kung ano ang namin ang paggawa. Tulad ng sinabi ni David sa magbigay ng panayam, ang mga paraan na aming ma-access ang isang array ay lamang sa pamamagitan ng paggawa array 0, bracket 0, kung kami lamang Nais na i-access ang unang halaga. Ang lahat ng mga computer ay ginagawa sa pamamagitan ng pagpapaandar na sa na at iterating mismo. Kaya tinatawag namin itong syntactic asukal na kung saan ay lamang isang magarbong paraan ng sinasabi ng mga user friendly paraan ng pag-alam sa amin kung paano sa programa. Ngunit ang computer sa ilalim, kung ano ang ginagawa, ito ay talagang lamang ng pagkakaroon isang pointer na pag-aayos. Ngunit ang paraan na isulat namin ito, dahil ito ay mas madali para sa amin mag-isip tungkol sa mga bagay sa mga tuntunin ng kahon at kung paano ilipat down boxes, ay sa pamamagitan ng pagkakaroon ng mga bracket. Paumanhin, iyan ay tunay, talagang hindi maganda but-- oo. Madla: Kaya kung paano mong paghambingin ang dalawang mga string upang makita kung ang mga ito ay pantay-pantay sa bawat isa? ANDI PENG: Kaya sumulat si David ang program na ito sa panayam kaya lang ako pagpunta sa pumunta higit sa mabilis at madaling sabi. Ang paraan na nais mong gawin na ay na gusto mo talagang kailangan upang pumunta at ihambing ang mga addresses-- o ang mga halaga makuha mula sa mga payo. Kaya tandaan, kung paano ito gawin makakuha ng mga halaga dito? Wala akong pakialam tungkol sa mga address dito. Paano ko talagang makakuha ng mga halaga ng anumang meron dito? Madla: [hindi marinig]. ANDI PENG: Eksakto. Kaya ikaw ay ihambing ang star dito kumpara sa star dito. Ay ang mga pantay-pantay. At pagkatapos mong bumaba. Sigurado ang star dito at ang star dito pantay-pantay? SIGE. Ang mga ito ay pantay-pantay. At mo lamang panatilihin ang pagpunta down hanggang sa ikaw ay pindutin ang end ng pareho. At kung ang lahat ng mga ito ay pantay-pantay, at pagkatapos ay alam mo ang iyong string ay pantay. At C talaga ay isang function na nakasulat na tinatawag na String Comp saan talagang lamang ginagawa na para sa iyo kaya wala ka ' kailangang isulat ito sa iyong sarili. Oo? Madla: Sa tingin ko sa lecture ay kapag ang mga namin ihambing. Hindi namin talagang kailangan ng isang counter tulad ng pay, tama? ANDI PENG: Hindi mo dahil hindi namin talagang pakialam kung gaano karaming mga kahon namin iterated sa pamamagitan ng. Lahat ng pag-aalaga namin na kami ay pagpunta sa panatilihin ang pagpunta hanggang alam ko na huminto. At alam mo upang itigil kapag mayroong ilang mga uri ng mga pahiwatig na ikaw ay nasa isang null terminator. Oo. So-- Madla: [hindi marinig]. ANDI PENG: Oo. Kaya sa kaso ng paghahambing string, hindi ko talaga aalaga kung gaano karaming mga titik are-- kailangan ko upang ihambing kung sila ay totoo o hindi kung ang mga ito ay pantay-pantay sa bawat isa. Wala akong pakialam kung gaano karaming mga titik ay sa bawat isa sa kanila, di ba? Lamang ako pag-aalaga na ito tumutugma sa mga ito at ang isa matapos tugma at ang isa matapos tumutugma sa lahat ng mga paraan up hanggang sa katapusan. Right? Ba na magkaroon ng kahulugan? Kaya hindi ko talagang pakialam kung gaano karaming mga titik, Pag-aalaga ko lamang na ang lahat ng mga titik match. Oo. SIGE. Maaari ko bang ilipat sa mula sa mga ito? Great. Nagpapatakbo ka namin ng isang maliit na short sa time kaya ako pagpunta upang payagan lamang sa iyo guys sa madaling sabi hitsura at ito. Patakbuhin ang mga ito sa iyong ID kung ka guys ay hindi karaniwan. At ka guys ay maaaring makita kung ano ang ito ay pag-print out. SIGE. Kaya ang isang bagay na kailangan din namin pindutin sa isang bit ay ang ideya ng pointer aritmetika. Kung saan, ang lahat ng mga ito ay, ay sa halip ng pag-aayos ang mga halaga ng kung ano ang naka-imbak na sa address ng iyong pointer, ito lang ang tunay na pagbabago ang mismong address. Kaya't kung ikaw bilang Nais ng tao upang ayusin ang iyong pointer mano-mano, ang paraan na gusto mong gawin na lamang gawin n beses ang laki ng pointer. Right? Kaya sa isang int. Isang int kung ilang bytes sa memory ay isang int? Ito ay apat na, tama? Kaya kung alam ko na mayroon akong isang array ng lahat ints at gusto ko ito upang tumuro sa isa pagkatapos, gusto ko alam ko na lang ay ang ilipat ang aking pointer down na apat na bytes, di ba? At kaya n beses ang laki ng pointer bytes ay gayunpaman maraming bytes ikaw lamang pagpunta sa ilipat ang iyong pointer hiwalay ayon. Kaya halimbawa, kung kami ay may isang hanay ng mga ints, ang unang isa, sabihin lamang sabihin, ay naka-imbak bilang 0x00. Alam mo sa susunod na isa ay magiging sa 0x04 dahil na apat na bytes mamaya. At ang isa pagkatapos na pupuntahan maging 0x08 at iba pa at iba pa. At kaya, guys, tingnan. Lahat ng iyong ginagawa dito ay na mayroon kang isang pointer y at magdadagdag ka na sa iyong memory upang maaari mong ilipat pababa ang mga bloke ng memory inilalaan. Uri ng isang mas mataas na konsepto na antas. Ikaw guys ay hindi kailangan malaman para sa linggong ito, ngunit na ang lahat ng ito ay ginagawa doon. SIGE. Isa pang oras joke. Dalawang string maglakad papunta sa isang bar. One nagsasabing, Gusto ko ng rum at Coke halaga ng basura. Ang iba pang mga nagsasabing, magkakaroon ka upang humingi ng paumanhin ang aking mga kaibigan, siya ay hindi null tinapos. Ikaw guys kumuha ito. Sorry. Ito ay kung paano panatilihin ang aking sarili pagpunta kapag Prep ako para sa section ay kong ipasok ang isang pares joke slide. Anyways. SIGE. Bago ako lumipat on-- kaya, mahalagang, na namin sakop ang lahat ng haka-haka mga isyu na may kaugnayan sa mga payo. At pagkatapos kami ay pagpunta sa talk-- paglipat higit pa, makipag-usap tungkol sa kung bakit na mahalaga at kung paano magkasya sa ideya ng pamamahala ng memory. Ngunit bago ko ilipat sa, kahit sino ay may mga katanungan tungkol sa paggamit pointer, kung ano ang nangyayari kapag ikaw ay lumilikha ng mga payo, kung paano ang mga sanggunian sa bawat isa, kung paano sila ay dereferencing? Ang anumang mga katanungan tungkol sa na bago ako lumipat sa? SIGE. Great. Kaya ito ay magbibigay sa amin sa ito mas malaki mas mataas na konsepto na antas ng pamamahala ng memory bilang isang buo. Kaya, mahalagang, sa ang iyong computer, may dalawang pangunahing uri ng memory o mga rehiyon kung saan ang memorya ay naka-imbak. Mayroon kang dito kung ano ang tinatawag magbunton at mayroon kang down dito ano ang tinatawag na stack. At kami ay pagpunta sa makipag-usap tungkol sa stack unang dahil ito ay ang isa pang finagley na kayo kung ang uri ng conceptually maunawaan kung ano ang nangyayari sa. Kaya ang lahat ng stack is-- tingin ng ito bilang isang pisikal na stack ng memory kung saan ikaw ay may isang bloke ng memorya na magtabi para sa iyong mga programa habang tumatakbo ito. At ito ay kung saan, mahalagang, ang lahat ng mga ng iyong lokal na mga variable ay naka-imbak. Kaya ito ay isang naka-zoom lang sa larawan ng na stack. Ang stack down doon, ako lang mag-zoom in pa ng kaunti. Kaya, mahalagang, sa isang stack mayroon kang ng grupo ng mga function sa iyong programa. Kaya sabihin pumunta lang pabalik sa week dalawang halimbawa na kung saan kami ay nagkaroon ng aming pangunahing function pati na rin ang isang kubo function kung saan namin sinubukan upang lumikha ng isang function na cubed-- na kinuha ng mga parameter ng input, nakakubo kanila at bumalik mga ito pabalik sa main. Kaya ang paraan na iyan ay naka-imbak sa memory ay na mayroon ka sa iyong pangunahing pag-andar dito sa ibaba. At pagkatapos ay sa bawat karagdagang pag-andar na tawag mo at idagdag sa itaas ng na, ang memorya lamang stack sa itaas. Isipin ito bilang isang pisikal na stack. At kaya mayroon ka ng lahat ng mga ka main variable sa iyong pangunahing pag-andar, lahat ng bagay na nangyayari sa dito, naka-imbak. At pagkatapos ay kapag ikaw ay tinatawag kubo, ito ay pumunta at ito lumilikha ng mga kopya ng lahat ng mga mga parameter at mga tindahan na ito sa kanila sa itaas sa isang iba't ibang mga lugar. At kaya bakit namin pag-aalaga? Ang dahilan sa pag-aalaga namin na hindi namin maaari lamang gamitin ang mga parameter here-- ang mga variable here-- at baguhin natin ang mga ito, inaasahan nating kanila na ring nagbago dito, di ba? Ang ideya ay na ang mga ito ay nai-save sa iba't ibang lugar sa memory nang sa gayon, kapag ina-access mo iba't ibang pag-andar, kung ano sa tingin mo ang nangyayari ay hindi aktwal na nangyayari dahil ang memory bits ay hindi interconnected. At kaya tanong na talaga mahalaga para sa amin na uri ng maunawaan ay, kung ano kung, kapag kami ay tumatakbo isang programa, ang laki ng isang function stack frame-- kaya pisikal, kung paano maraming memory ang mayroon upang bigyan ito ng tayo? Siguro ito ay isang higanteng function kaya namin kailangang magbigay ng mga ito na maraming memory. Ngunit kung ito ay mas maliit gusto namin kailangan ng isang maliit na maliit na maliit na bit. Kaya ang ideya ay na kapag kami ay tumatakbo isang programa sa laki ng na function ay nakasalalay sa kung gaano karaming variable at ang uri ng variable na nais naming bigyan ang mga ito. Ngunit paano kung ang bilang ng mga variables-- at ang kanilang mga sukat, na tinutukoy hindi sa pamamagitan ng sa iyo ang mga encoder ngunit ay tinutukoy sa pamamagitan ng aktwal na user ng iyong programa. Kaya kung nais kong lumikha ng isang function na kinuha string mula sa gumagamit, ngunit hindi ko talaga alam kung paano malaki mga string ay, mahirap para sa akin mag-ukol ng mga tiyak na kinakailangan na halaga ng memory. Right? Dahil kung ito function-- kung input sa user na ito ng isang higanteng string, ito ay pagpunta upang lumikha ng isang error ng kung ano ang tinatawag mahalagang stack overflow kung saan ka pumunta sa ibayo ng hanggahan ng memory na mayroon ka. At kaya pagkatapos ay kung ano ang gagawin namin? Kung hindi lamang namin ay maaaring lumikha ng mga ito higanteng stack na maaaring i-save ang lahat ng bagay, ano ang gagawin namin upang malutas ang problema? Kaya kami ay pagpunta sa ilipat sa at makipag-usap tungkol sa ikalawang uri ng memory at pagkatapos ay maaari naming makipag-usap tungkol sa kung paano maaari naming gamitin ang dalawang magkasama upang malutas ang tanong na iyon. Kaya ngayon kami ay pagpunta sa ilipat up sa ibang bahagi ng memorya sa aming mga computer. Iyan ay tinatawag ang magbunton. Kaya lahat ng magbunton ay ay isang pool ng mga magagamit na memorya na maaaring dynamic na inilalaan. Kaya na maaaring baguhin habang ang iyong programa ay tumatakbo. At kaya isang rehiyon ng hindi nagamit na memory na maaari maging allowed-- na maaaring maging inilaang gamit ang function tinatawag malloc, o memory laang-gugulin. Kaya, mahalagang, kapag ikaw ay nagpapatakbo ng isang programa, maaari mong dynamic na lumikha ng memorya mula sa magbunton at gamitin na ang lahat dito sa ibaba. At kaya pagkatapos, ang lahat ng iyong mga pag-andar dito ay maaaring ma-access ang magbunton. At kaya malloc, ideya na ito na si David uri ng mabilis, madaling sabi glossed higit sa panayam, ay lamang ng isang paraan para sa iyo na kontrolin ang iyong memorya. Tulad ng, kapag na ikaw lamang ang paglikha stack function, kapag handa ka na lang pagkakaroon ng iyong pangunahing pag-andar sa iyong mga random function, sa tingin mo ng mga ito bilang mga bata na lang tumakbo ang layo kapag kayo ay tapos na sa mga ito. Sila ay ganap na hindi maayos na bata. Lumikha ka ng mga ito, ikaw turuan ang mga ito sa isang bagay, at pagkatapos ay kung nais mong ma-access ang mga ito muli ang mga ito hindi doon dahil ang iyong memory lamang tumakbo ang layo. Ngunit malloc, o magbunton, ay isang paraan ng pagkakaroon ng mas mahusay na mga bata, na kung saan ang maaari mong uri ng lumikha kanila, magtalaga ng mga ito na mga halaga, gamitin them-- na tunog talagang bad-- gamitin ang mga ito subalit ang iyong nais, ngunit pagkatapos na ma-control ang mga ito at pagkatapos ay magbakante ng memorya kapag kailangan mo ang mga ito. Kaya nga, kapag tapos ka na sa iyong function, ang mga bata ay bumalik sa iyo at ikaw pa rin ang data na iyon doon. Kaya ang paraan na aming malloc, o lumikha, memorya ay sa pamamagitan ng walang bisa function star size malloc sa bytes. Kaya ito lamang ang prototype para sa kung bakit namin iyon. Kaya ang isang halimbawa ay lumikha kami ng isang pointer ng uri int equals int star pointer-- size malloc ng int. Kaya ang dahilan kung bakit ginagawa namin ang laki ng at hindi lamang isang number-- dahil alam namin ang lahat na isang int ay apat na bytes, right-- ngunit isang int ay lamang ng apat bytes sa mga tiyak na mga operating system. Ang mga ideya para sa amin bilang mga programmers ay na tayo nais upang lumikha ng code na maaari tumakbo sa lahat ng mga computer, hindi lamang ang aming simpleng mga computer. At kaya na kung bakit gusto namin na gamitin laki ng at hindi lamang ang bilang apat. Ba na magkaroon ng kahulugan sa lahat ng tao? Kaya laki of-- ang lahat ng ito ay isang C function o operator na ay nagsasabi sa iyo kung gaano karaming mga byte ng memorya ay isang tiyak na uri ng variable tumagal ng hanggang. Kaya sa kasong ito, ang laki ng isang int ay apat. Apat bytes. At malloc ay pagpunta sa magbakante up apat na bytes sa iyong magbunton, pagkatapos ay maaari mong pagkatapos ay gamitin sa iyong pangunahing function na upang makapag-imbak ng memory. Malinaw sa na sa ngayon ay sa lahat? Oo? Madla: Ako malinaw ngunit na lamang sa loob ng clear-- ANDI PENG: OK. Ganap fine. Madla: --size ng ay [hindi marinig] Maaari talagang [hindi marinig] at ito ay talagang gawin ang bagay na gusto namin ito sa. Ito ay hindi ilang pseudocode. ANDI PENG: No. Madla: Ito ay tulad ng isang tunay na thing-- ANDI PENG: Ito ay tunay na code. Madla: Maaari --we gamitin ito. Ito ay aktwal na. Cool. ANDI PENG: Sukat ng lumapit sa C. Madla: Na ginagawang mas masaya ang aking buhay. ANDI PENG: Oo. Kaya't kung ikaw ay isang tamad programmer tulad ko uri ng am kung minsan, Hindi ko gusto ang pagsasaulo ano ang laki ng isang int ay, hindi ko gusto ang pagsasaulo sa laki ng isang float ay. Laki ng lamang ay nagsasabi sa iyo kung ano ang ito ay at na ang isang pulutong mas madali. Lahat tama. Kaya isang mahalagang bagay na ang lahat ng gusto mong guys na dapat tandaan kapag ikaw ay gamit malloc ay na palagi kang kung suriin upang makita kung ito ay null. Kaya tulad ng sinabi ko, bumalik sa na ang larawan ng magbunton. Magbunton ay lamang higanteng ito stack ng memorya na nakuha mo na. At gusto mong magagawang gumawa chunks ng memorya mula sa mga ito at gamitin ito, i-right? Ngunit ano kung ikaw ay walang higit pang memory sa na magbunton? Paano kung na ako na ginamit ko ang lahat ng mga ito at subukan kong malloc higit pa? Iyon ay hindi umiiral. Well, na kung bakit ikaw ay pagpunta upang makakuha ng isang error. Ikaw ay pagpunta sa seg fault. Ikaw ay pagpunta na magkaroon ng isang segmentation fault kung saan mo subukan upang ma-access ang mga bagay na wala doon. At upang ang mga paraan namin sa na iyon at ang paraan na aming maiwasan ang mga iyon ay na-check namin upang makita kung null ang pointer ni. Kaya kung ako ay sa malloc isang bagay at ako ay walang higit pang memory, na-print ng isang error dahil ang pointer ibabalik sa iyo ay lamang null. At upang ang mga paraan namin sa this-- ito ay lamang ng mahusay na disenyo, kabisaduhin lang this-- ay na ang anumang mga oras na subukan mong malloc anumang bagay, ikaw ay pagpunta sa kailangan upang suriin upang makita kung ito ay null. Dahil sa tuwing sinusubukan mong makakuha ng memorya mula sa magbunton, palagi kang may upang gumawa ng mga Siguraduhin na mayroon kang memory. Iyan na ang lahat ng ito ay. Kaya medyo marami ang mga tatlong linya ng code, kabisaduhin. Sa bawat oras na malloc, gumawa ng mapa ang mga ito sa. Ikaw ay pagpunta sa kailangan ang mga ito. Dahil garantiya ko sa iyo, kami ay pagpunta upang subukan mo sa isang kaso at ang iyong computer ay pagpunta sa sumabog dahil ikaw ay pagpunta sa subukan na access memory na hindi doon at ang mga bagay ay pagpunta sa crash at ito ay hindi magiging mabuti. Kaya mag-drill lamang na sa iyong utak. Malloc, null. Good. Lahat tama. Pagkatapos ito ay nagbubunga ng tanong ng kung ano ang mangyayari pagkatapos kami ay tapos na gamit na memory. Dahil ang buong ideya ng pagkakaroon ng malloc ay na taglay namin ang kimpal na maaari naming gawin memory mula sa at pagkatapos ay maaari naming gamitin ito. Right? At pagkatapos ay kung ano ang mayroon kaming matandaan ay na, pagkatapos namin ay tapos na sa mga ito, pagkatapos ay maaari naming magbakante ito. Bumitaw. Maaari naming ipaalam ito pumunta. O kung hindi ka din ng pagpunta sa tumagas memory at mas masamang bagay ang mangyayari. Mahalaga, kapag ka ng pagpindot memory, masamang bagay ang mangyayari kung ikaw huwag gawin nang tama bagay. Kaya kailangan mong suriin upang makita, una, kung mayroon kang mga magagamit na memorya. At pagkatapos ay pagkatapos tapos ka na, gusto mong libreng ito at pahintulutan ang iyong operating system upang bawiin ito. Kaya ang paraan namin na lamang na function, walang bisa libre, at ang pointer sa na magbunton ng memory. Kaya ang mga halimbawa ay libre pointer. Ito ay medyo madali, simple, hindi mo nais na kalimutan ito. Kaya suriin upang makita kung ito ay null, libre. Ang bawat mabuti? Kaya muli, code na iyong guys Maaari uri ng mabilis na kumuha ng isang sulyap sa. Alam ko ito ay isang pulutong ng mga bagong syntax at ito ay ang lahat ng karapatan kung ikaw ay tulad ng, ah, kung ano ang ibig sabihin na muli? Huwag mag-alala. Ang lahat ng ito ay sinadya upang maging ay pagpapakita ng isang aksyon, kung paano ang lahat ng mga bagay na ito ay maaaring gamitin nang magkasama. Kaya na ay magkasama tulad ng isang grupo ng nakaraan slides nagpunta kami lamang sa pamamagitan ng sa isang programa. Madla: Sa isang paraan na maaari naming actually-- ANDI PENG: Sa isang paraan na maaari naming tunay na paggamit. Ikaw ay maaaring gumawa ng mapa na sa iyong ID, maaari mong patakbuhin ito at ito ay gumagana. Madla: OK. Kaya na ang mga tunay na? ANDI PENG: Iyan ay tunay. Oo. Subukan ko na gawin ito upang ang font ay naiiba sa gayon na kapag nagta-type ako real code ang font ay code font at na ang aking note code ay naiiba, ngunit Hindi ko alam kung na talagang gumagana. Madla: No. Sa tingin ko-- ANDI PENG: OK. Madla: --sometimes [Hindi marinig] at ako tulad ng, na ay talagang maganda kung ito ay talagang isang kapaki-pakinabang na bagay ngunit pagkatapos ito ay hindi isang magagamit na bagay. Gusto ko na ito ay isang kapaki-pakinabang na bagay. ANDI PENG: OK. Oo. Kukunin ko pumasa na kasama. Maging tulad ng, David, ang mga bata ay talagang malungkot kapag ikaw ay sumulat ng mga pekeng code. Lahat tama. Oo? Madla: Kaya ang ptr dito ay hindi tunay na isang pointer, ito ay isang bloke ng memory? ANDI PENG: So sinasabi mo ang unang linya o ang isa rito? Ikaw ba ay pakikipag-usap tungkol sa isang ito dito? Madla: ptr ay iba't ibang bagay in-- ANDI PENG: Well, kaya hanggang dito ano ako doing-- talaga, hayaan pumunta lamang sa pamamagitan dito. Ang ganitong uri ng relasyon sa mabuti ang lahat ng mga concepts. Kaya dito mayroon kaming int star ptr. Kaya int pointer, na kung saan ang talaga namin ang paglikha isang pointer na tumuturo sa isang integer. Well, ito ay pagpunta upang tumuro sa isang integer. At kami ay pagpunta sa malloc, o bigyan ito, inilaan ng sapat na memorya sa tindahan ng isang integer. Kaya apat na bytes sa kasong ito. At pagkatapos ay kung na katumbas null-- equals katumbas null-- kami ay pagpunta sa i-print. Oh, mayroon kang isang error dahil nasa labas ka ng memory, tama? Kung hindi man ang pagbabalik ng isa, na lamang ay nagsasabi sa iyong mga programa na nakuha mo na ang isang error. At pagkatapos ay kung gagawin mo Mayroon na memory, ito ay pagpunta sa mga tindahan ng kahit anong makuha Binibigyan ka ng int sa lokasyon at itakda ito bilang ang halaga ng pointer. Kaya ito ay tunay na pagpunta sa pisikal na burahin ang halaga na ito at ilagay ang kahit anong makakuha int nagbabalik. At pagkatapos ang iyong pagpunta sa print kahit anong ipinasok nila. Madla: At na magiging sa magbunton? ANDI PENG: Iyon ang nangyayari upang maging sa magbunton. Madla: At upang ang ay maa-access. ANDI PENG: Eksakto. Nice. Good. Madla: Kaya kapag magbakante namin ptr na ito huling hakbang, ay pagbabakante namin ang pointer o kami ay pagbabakante ang block? ANDI PENG: Oo. Kaya kami ay pagbabakante ang pointer-- well, pagbabakante ang bloke ng memorya. Kaya ang tanging paraan na maaari naming kahit na access ang memorya ay sa pamamagitan ng pagkakaroon ng pointer. Kung hindi ka magkaroon ng mga pointer, ikaw ay tulad ng, oh, hindi ko alam kung saan ito, right? Kaya kung magbakante mo ito, hindi mo talaga pagbabakante na ang buong block. Pagkatapos alam ng iyong computer, oh, may walang magagamit ang meron dito, Maaari ko bang ilagay lamang ng basura mga halaga bumalik sa mga ito muli. Madla: Kaya integer ang umiiral sa mga iyon? ANDI PENG: Huwag umiiral integers? Sorry. Maaari mong rephrase iyong katanungan? Madla: nilalayong ko, pagkatapos palayain mo ang pointer, ang integer na iyong nakuha, Makikita pa rin ang umiiral na? ANDI PENG: Hindi, ito ay hindi. O hindi bababa sa makikita ito umiiral sa iyong memory bago ang iyong computer anuman sa mga ito, ngunit mayroong walang paraan para sa iyo upang makakuha ng na. Dahil ikaw napalaya ang pointer. Hindi mo alam kung saan ito ay ngayon. Oo. Pupunta ako sa move on dito. Phew. Kaya hindi namin sa pamamagitan ng isang pulutong ng mga haka-haka paghihirap ng memory management at lamang kami ay pagpunta sa mahalagang gastusin 5, 10 minuto ang pagpunta higit sa syntax ng mga bagay na ay magiging kapaki-pakinabang at kapaki-pakinabang para sa iyo guys, ngunit wala masyadong conceptually out doon. SIGE. Kaya kami ay ganap na pagbabago gears dito. Memory management, mahirap. Payo, mahirap. Oo. Ito ay talagang, talagang mahirap. Ganap fine. Iyon ang dahilan kung bakit ang iyong mga piraso ay magiging talagang mahirap. Ngunit kung ikaw ay pumunta at gawin ang mga bagay na hindi namin dapat na gawin, gumawa bang bagay na ito ay null, siguraduhin na suriin kung ang mga bagay ay null, siguraduhin na libreng memorya, tiyakin bagay ay hindi pagtulo, makikita mo ang magandang. Ikaw ay naka-set. Lahat tama. Kaya kami ay pagpunta upang ilipat ito ganap na bagong konsepto ng pag-redirect. At kaya bago ngayon, ang pangunahing paraan na kami ay nakikipag-ugnayan sa aming programa ay sa pamamagitan ng standard input at standard output. Right? Kami bilang mga user input mga bagay-bagay at ang computer spits ito pabalik sa amin sa terminal. Ngunit may mga iba pang paraan para sa amin upang makipag-ugnayan sa mga computer gamit ang aming mga programa na hindi sa akin lamang pisikal na pag-type ng mga bagay-bagay sa ako kapag ako ay na-prompt. At ang paraan namin na sa pamamagitan ng mga mas malaki kaysa carrot at ang simbolong pipe. Kaya maaari rin naming basahin at sumulat sa mga file gamit na. Kaya ang paraan na ginagawa namin ito ay ang mas malaki kaysa carrot, lahat ng iyon ay ginagawa ay ang pagsulat ano man ang iyong file ay sa isang hiwalay na file. Kaya halimbawa, kung ako nais na tumakbo hello world at nais ko ang output sa i-save sa isa pang file at hindi lamang naka-print out sa akin, ako Maaari lamang gawin mas malaki kaysa carrot, output.txt. Kaya lahat na ginagawa ay ang pagkuha aking hello.world program, at anuman ang output ay, ito ay pag-save sa isang file na tinatawag na output.txt. Kaya ang paraan na ginawa ni David ang Csv na may mga pangalan ng mga mag-aaral, ito ay ang parehong na maaaring gawin sa iyo guys. At kung ano ang lalo kapaki-pakinabang dito ay ang mas higit na than-- ang dalawang mas malaki kaysa carrot palatandaan na maaari mong idagdag sa isang output file, na nangangahulugan na ikaw ay Maaari lamang idagdag sa itaas ng mga ito. Maaari mo lamang panatilihin ang pagdaragdag sa output.txt ng bawat karagdagang bagay na ginagawa mo. O, kung nagsimula ka sa pagkuha sa mas maraming komplikadong mga programa, ang dalawang mas malaki kaysa carrot, na lamang ng mga kopya ang mga mensahe ng error. Kaya sabihin nating mayroon kang isang higanteng halaga ng mga mensahe ng error at gusto mong basahin sa pamamagitan ng lahat ng mga ito at sa iyo hindi mo nais na mag-scroll sa pamamagitan ng iyong terminal, Maaari mong aktwal na gawin lamang mas malaki kaysa sa output.txt at ito ay pagpunta upang i-save ang lahat ng iyong mga error sa isang file na tinatawag na output.txt na maaari kang pumunta sa at basahin. Madla: Saan naka-save na ang text file? ANDI PENG: Ito ay nai-save sa parehong directory na ang iyong programa ay. Kaya bumalik ka na lang at maghanap ng mga ito. At ganoon rin namin maaaring gawin para sa pag-input ay maaari naming talagang gawin ang mga nilalaman ng ilang mga file at maaari naming input na sa aming programa. Kaya sa halip na sa pagkakaroon na gawin ang utos line argumento ng kung saan ikaw ay pisikal na kailangang mag-type ng mga bagay ng lahat ng oras, ikaw maaaring aktwal na magkaroon lamang ng isang file na tinatawag na input.txt na inilalagay lamang ang lahat ng ito sa loob. At pagkatapos pipe ay espesyal na cool dahil maaari itong tumagal ang output ng isang programa at gamitin ito bilang ang input ng isa pang programa. Kaya halimbawa, sa iyong guys 'Vigenere, doon ay ang linya ng code na kayo guys ay tumatakbo na siguro marahil ay hindi talaga alam kung ano ito ay doing-- ito ./generate 1000 pipe ./42. Right? Kaya lahat na ginagawa, kung kami lamang kumuha ng isang pagtingin sa ito hakbang-hakbang, ang ./generate, na nangangahulugan na ako tumatakbo ang aking mga programa makabuo. Iyon ay ang pagkuha sa 1,000 sa kanyang input. Kaya gusto ko upang makabuo ng 1,000 random numero at ako pagpunta sa pipe na- o ako pagpunta sa gamitin na- output bilang input para sa aking mga programa na tinatawag na find. At ako pagpunta sa subukan upang mahanap ang 42 sa labas ng ang mga numero na nabuo mula sa mga 1,000 numero. Ba na linya ng code gumagawa kahulugan sa lahat ng ibang tao? Kaya sa ganitong paraan namin ay nagse-save ang ating mga sarili ng isang tonelada ng mga hakbang. Wala kaming upang tumakbo bumuo, i-save ang file at pagkatapos ay ilagay ito sa find. Maaari lang namin na gawin ang lahat ng ito sa isang linya. Kaya kahit anong bumuo ay outputting, gumawa ng mapa na ito ng tama bumalik sa upang mahanap. Oo? Madla: At sa mga tuntunin ng utos argumento line, ay na- na tatlong linya ng command argumento? Ito ay bubuo, find-- no, four-- bumuo, 1000, hanapin at 42? O kaya ay the-- ANDI PENG: Kaya ang pipe ay hindi tunay mabibilang bilang isang argument command line dahil ang tagatala o ang alam terminal na pipe, oh, alam ko na ako dapat tumingin bago ang pipe dahil iyon ang aking output at dapat kong alagaan ang pipe dahil iyon ang aking input. Kaya ito alam na- ang ./generate at 1000, mga dalawang utos pagkatapos arguments lamang para sa unang program. At pagkatapos ay ang ./find 42 dalawang utos argumento line para sa ikalawang programa. Oo. Ang bawat mabuting sa mga ito? Kaya lang tunay na mabilis, ano ang gagawin mga tatlong linya ng code? Medyo simple. Kahit sino gusto mong sabihin sa akin ano ang ginagawa ng unang linya? Madla: [hindi marinig]. ANDI PENG: Isipin ito bilang just-- ano ang ginagawa ng mas malaki kaysa carrot gawin? Madla: Ito ay naglalagay ng isang bagay sa susunod na linya. ANDI PENG: Kaya kung ano ang ang kabaligtaran ng mga iyon? Madla: Ito ay inilalagay sa mga susunod na bagay sa unang bagay. ANDI PENG: Oo. Kaya lahat na ginagawa ay ikaw pagpapatakbo ng isang programa .hello-- ikaw ay nagpapatakbo ng isang programa na may pangalang hello. Ikaw ay pagpunta upang bigyan ito ng isang input na tinatawag input.txt. Right? Dahil sa tingin ng mga ito bilang lamang pisikal na pagpunta sa hello. At pagkatapos ikaw ay pagpunta upang i-save ang output sa isang file na tinatawag na output.txt. Paano ang tungkol sa ikalawang line? Nais mo bang sabihin sa akin kung ano ikalawang linya ang ginagawa? Madla: [hindi marinig]. ANDI PENG: Sorry. Sabihin na muli. Elliot. Madla: Kaya inilalagay ito ng isang listahan ng mga numero sa find. ANDI PENG: Oo. Kaya mahanap, tandaan, sa Upang patakbuhin mahanap mo kailangan mong malaman kung saan kayo ay naghahanap. At kaya ang lahat na ito ay ginagawa dito ay na ito ay nagbibigay sa iyo ng isang pre itinalaga set ng numero, pagkatapos ay hanapin ang nangyayari upang maghanap ng mga para sa bilang ng mga 42. At pagkatapos ay 15. Tandaan, ikaw ang bumangga guys ito kapag ikaw nasubok ang iyong code. Ngayon mo maunawaan kung ano ito ay ginagawa? Madla: Ito ay ang paglalagay sa ang hanay ng mga tagubilin na [hindi marinig] sa pamamagitan ng isang tatlong sa pamamagitan ng tatlong upang makakuha the-- upang manalo ang laro. ANDI PENG: Oo. Madla: input Ito ang mga mga tagubilin sa programa. ANDI PENG: Medyo marami. Kaya ang tilde CS50. / Pset3 / 3x3, ang lahat na ay ginagawa ay na lumikha kami ng isang text file na may lahat ng mga mga pamagat na handa para sa iyo guys. At kaya para sa iyong mga laro upang i-play, just-- mo ilagay lang namin na sa inyong programa. Kaya ay nilikha namin ito board at pagkatapos ay ipinapadala namin paglagay na board sa inyong programa na tumakbo ito at lumikha ng isang tile ng tatlong sa pamamagitan ng tatlong. Iyan na ang lahat na ito ay ginagawa. At kaya may tunay na magic nangyayari sa likod ng mga eksena na iyong guys ay hindi program na aming program. Ngunit ngayon ang iyong guys maintindihan kung bakit ginawa namin na kaya lahat ng mabuti. Lahat tama. Kaya habang redirection ay isang napaka kapaki-pakinabang, C ay may isang pangkalahatang mekanismo para sa pagbabasa at pagsusulat file ng kanyang sarili. Walang conceptually mahirap dito kaya hindi ako lamang ang pagpunta sa pumunta sa pamamagitan ng tunay, tunay mabilis. Lahat ng ito ay ilang pagsasaulo at siguraduhin mo guys ay syntactically ito gamit nang tama. Ang paraan na nais naming gawin iyon ay lumikha ng isang reference sa file, Gusto naming buksan ang file, at pagkatapos namin ay gawin ang lahat ng pagbabasa at pagsusulat at pagkatapos isara ang file. Kapag bagay ka guys nais na panatilihin sa isip ay na habang ginagawa ito, dahil ay pagsasara at pagbubukas ng mga file namin, sa lahat ng mga utos ay kasama sa standard-- ang standard I / O library. Kaya't tiyakin na tuwing ikaw ay paggawa na ito na iyong included-- # included-- standard I / O dot h. Kaya real mabilis. Hakbang isa, nais mong lumikha ng isang reference sa file na iyon. At ngayon na kami tapos mga payo, ikaw ay maaaring sabihin sa akin guys kung ano na ang linya ng code ay ginagawa. Right? Lahat na ito ay ginagawa ay ang paglikha ng isang pointer pinangalanang file ng uri ng file. Dahil alam mo na ito ay pagpunta sa punto sa isang file at ikaw ay pagpunta upang buksan ang file. Pagkatapos ay ikaw ay f open-- lahat ito ay hindi ay buksan ang file. Ito ang pangalan ng file. At may tatlong bagay na maaari mong gawin. Maaari kang magbasa, magsulat o ikakabit. Karamihan sa pangkalahatan, ikaw guys ay pagbabasa o pagsusulat dahil ikaw ay alinman magiging inputting ng isang file o outputting isa. Kaya medyo marami r at w ay ang dalawang mga bagay na iyong pagpunta sa gumagamit pinaka. Kaya sa kasong ito, ang lahat ng aking nagawa ay lumikha ng isang pointer sa isang file na tinatawag na file. Ako pagbubukas nito at ako reading-- Ako pagbubukas na ito ng file na tinatawag file.txt at ako sa pagbabasa nito. Iyon lang ako ng paggawa sa puntong ito. At pagkatapos ay ang mga ito ay ang mga function na lamang sa na kung saan maaari mong basahin ang iba't ibang mga bagay o magsulat ng iba't ibang mga bagay o lumaktaw sa iba't ibang lugar kung saan nais mong tingnan. Lahat ng mga ito ay naka-online. Lahat ng mga ito ay maaari mo lamang Google. Hindi na kailangang kabisaduhin ang mga ito. Ang mga ito ay lamang doon, disposable para sa iyong paggamit kung nais mong maaaring gamitin ang mga ito. Kaya kung nais kong basahin lamang sa isang character sa isang pagkakataon, Gusto kong gawin file fgetc. O kung gusto ko na basahin sa isang linya ng text sa isang panahon, ang gusto kong gawin fgets. At iba pa. Lahat ng mga ito lamang gawin ng iba't ibang Maaaring gamitin ng mga bagay-bagay sa iyo guys. At pagkatapos ay sa wakas, pagkatapos ng Ako tapos na sa pagbabasa o pagsusulat, Lamang ako ng pagpunta sa fclose file na iyon. At tandaan, ito ay isa ng mga, tandaan, mangyaring gawin ito o iba ang iyong file ay hindi pumapasok sa trabaho. Laging buksan ang isang file bago pagbabasa o pagbabasa, kailangan mong palaging isara ito kung bubuksan mo ito. Parehong bagay sa memory, tama? Ikaw ay may na laging dalhin memory at libre ito. Narito mayroon kang laging buksan ang isang maghain bago subukan na basahin ito at lagi mo kung isara ito matapos buksan mo ito. Kaya ito ay online din. Pupunta ako sa hamunin mo guys sa uri ng magsulat ng isang programa na kopya hello.world sa isang file. Ito ay talagang simple. Ito mahalagang lamang nagsasangkot ang ilang linya ng code na na lang nakasulat na dati. Ikaw ay pagpunta sa ilagay ang mga ito sama-sama at magsulat na. Kaya ang ilang mahalagang mga bagay upang tandaan habang ikaw guys na sinusubukan mong gamitin ito. Kung ito ang lahat ng lubhang kapaki-pakinabang para sa iyong pset sa linggong ito, ay na fopen lumilikha ng isang file pointer. Ito ay hindi tunay na ang mga pisikal na file. Lahat ng ito ay tumuturo sa mga file na nais mong buksan. At ikaw ay totoo, kahit kailan gumagamit ka ng alinman sa iba pang mga pag-andar tulad fread o fwrite o fgetc o fgets, ay na lamang ka sa pagpasa sa paligid na ito pointer sa lahat ng mga pag-andar. Kaya ikaw ay hindi aktwal na pagkuha na maghain at gamitin ito para sa iyong mga pag-andar, ikaw ay dinadala lamang ang pointer at inilagay ito sa mga pag-andar sa gayon ay maaari mong gamitin. At kung nakalimutan mo upang isara ang iyong file pagkatapos mong gamitin ito, ang iyong programa ay pagpunta sa mahayag memory. Mahalaga, ang lahat ng mga paraan na ay na masamang bagay ang mangyayari at ang iyong mga programa ay hindi gumana nang maayos. At iba pa ang pset in sa simula, sa palagay ko may isang maikling kung saan siya explained-- Nate explained-- ano Valgrind ay. Lahat ng Valgrind ay isang paraan para sa iyo upang tiyakin na hindi ka na pagtulo ng memory. Kaya nais mong guys na gumawa bang pinapanood mo na ang maikling dahil na nagpapaliwanag ito talagang mabuti kung ano ang mangyayari. SIGE. Kaya nagpunta ako sa pamamagitan ng na tunay, talagang mabilis dahil ako talaga nais upang makakuha ng pakikipag-usap tungkol ang pset bago kayo umalis guys. Kahit sino ay may mga katanungan conceptually? Mas madalas na ang lahat ng ito ay para lamang syntax na maaari mong gamitin upang magbasa o magsulat ng mga file. Sa wakas, paborito ng lahat. Kami ay pagpunta sa makipag-usap tungkol sa pset ngayon. Kaya, ipakita ng mga kamay, kung ilan sa ikaw guys basahin ang spec sa linggong ito? Oh, na ang kalahati. Mabuti yan. Kaya ito ay talagang isang tunay, talagang masaya pset sa kamalayan na sa tingin mo tulad ng isang detective dahil ikaw ay paggawa ng lahat ng mga talagang cool na mga bagay-bagay na hindi ninyo alam na maaari mong gawin ngunit ngayon ito ay talagang cool na maaari mong gawin ang mga ito. At ito ay tunay na isang pulutong mas simple kaysa sa iyo guys tingin. Kaya ang pangunahing halves ng ang program na ito ay handa ka pagpunta upang i-download ang source code o code distribution nakasulat sa pamamagitan ng sa amin. At ikaw ay pagpunta sa may isang folder tinatawag BMP at ng iba pang folder tinatawag JPG. Sa loob ng iyong BMP, ikaw ay pagpunta sa may tatlong mga programa. Isa sa mga ito ay isinulat para sa iyo. Kaya copy.c ay isang programa namin na nakasulat na para sa inyo na kayo ay pagpunta upang i-download. Ang lahat ng iyon ay ay tumagal ng input ng isang larawan at gumagawa ng isang kopya ng mga ito bilang output. Iyon lang ang file na ito ay ginagawa. Ngunit kung ano ang gusto mong gawin para sa whodunit-- kaya kung paano marami sa inyo guys tandaan sa ika-limang grado o maybe-- ka younger-- siguro ikatlong grado, kapag ikaw guys ay nagkaroon ng lihim na mensahe at mga nagkaroon ka na maglagay ng isang piraso ng papel sa ibabaw nito upang mabasa ang mga mensahe? Oo? Kaya na ang lahat ng aming ginagawa maliban sa oras na ito para sa isang computer. Kaya binigyan ka namin ang kaibig-ibig na imahe. Mukhang hindi anumang bagay ngunit sa ilalim ito ay isang palatandaan na ang pagpunta upang makatulong sa iyo sa pagsagot sa tanong na hinihiling namin sa iyo. Mahalaga kung ano ang gusto mong gawin ay input na file, mag-tweak ang ilang mga bagay sa paligid, siguro ayusin ang mga kulay, maglipat ng mga bagay-bagay, kaya na kahit na ano ang mensahe ay maaaring dumating sa pamamagitan ng. Kaya sa loob may mga nakatagong pixels at impormasyon na kung sumulat ka nang tama ang iyong code ay pagpunta upang mabasa at sabihin sa iyo kung ano ang palatandaan ay. At kaya ang ilang mga kapaki-pakinabang na mga pahiwatig sa kung paano Gusto mong pumunta tungkol sa papalapit na ito. Gusto mo talagang maging pamilyar ang iyong sarili sa file ko / O dahil kami ay pagbabasa mula sa file at pagsusulat sa mga file. Right? At kaya sa tuwing ginagawa namin na iyon, na nagsasangkot maghain I / O. Ikaw ay kung pamilyar ka sa, paano mo buksan up ng mga larawan ng mga file? Paano mo magsulat sa mga file ng mga litrato? Paano mo gawin ang lahat ng mga bagay? Iyon ay magiging talagang kapaki-pakinabang. Pangalawa, kung paano ka pagpunta sa magagawang baguhin ang mga kulay na i-clear up ang larawang ito? Marahil ito ay pagpunta sa magdawit pagsasaayos ng iyong mga pixels o ang iyong mga halaga ng RGB saanman sa may, mahalagang. Walang karapatan na paraan ng paglutas ng mga ito hangga't kayo can-- hangga't maaari mong uri ng ayusin ang mga pixels sa gumawa ito hitsura ng isang bagay na mahalaga sa iyo. Iyon lang ang pinapahalagahan namin tungkol sa pati na rin. Kaya mayroong maraming mga paraan upang gawin ito. I-play ang tingin lamang sa mga ito hanggang makakakuha ka ng isang bagay na gumagana. At gusto mong maging talagang mamangha kung ilang linya ng code kailangan mo na talagang gawin ito. Pakikipag-usap ako tulad ng tatlong mga linya ng pagiging code na kailangan mong isulat upang gawin ito. Kaya kung nakita mo ang iyong sarili pagsulat ng 40, 30 linya ng code, marahil ang iyong ginagawa ito mali. Ang kailangan mo lang gawin ay ang uri ng mga play sa paligid na may kulay at makita kung paano na gumagana out. Kaya pagkatapos namin ang ulo sa isang bit na mahirap ng isang problema. Narito kami ay baguhin ang laki na kung saan kami ay humihiling sa iyo to-- kami ay nagbibigay sa iyo bilang input isang larawan at ang iyong mga pagbabago ng laki ang larawan na ito sa isang bagay mas malaki o mas maliit na bagay depende sa sukat bigyan ka namin. Kaya tandaan sa panayam na si David mabilis glanced higit kung paano impormasyon ay nakita ng iyong mga computer na nangangahulugan na ito ay isang uri ng file. Kaya ang isang Word file ay may mga espesyal na character sa harap ng na sabihin sa iyong computer na ito ay isang Word file. Parehong bagay sa isang JPEG. Sa kasong ito kami ay pagpunta upang mabigyan ka ng isang JPEG file. Lahat alam namin ay na JPEG file ay isang larawan, i-right? Ngunit ang Tinutukoy ng computer ito sa napaka-tukoy na paraan. Kaya sa simula ng anumang JPEG file, ikaw ay pagpunta sa may kung ano ang tinatawag na ang bitmap header info at ang header bitmap file. Lahat ng mga ito ay mga iba't ibang piraso ng data na sabihin sa iyong computer, hey, makinig up, isang JPEG pagdating up at ito ang mga sukat o mga katangian ng JPEG na. Kaya mo guys talagang gusto mong malaman kung ano ang impormasyon ay naka-imbak sa loob ng mga header at ano ang laki ng mga ito. Dahil kapag ikaw ay nagpapatakbo ng sa pamamagitan ng iyong programa, ikaw ay pagpunta sa nais na laktawan sa paglipas ng halagang iyon. Right? Dahil hindi mo pag-aalaga tungkol sa pagbabago ng mga header, pinapahalagahan mo ang pagbabago kung ano ang pagkatapos. Right? Kaya gumawa alam sigurado ka guys kung paano malaki ang mga bagay ay. Pangalawa, bago ka magsimula sinusubukan na baguhin ang laki ng iyong mga imahe, marahil ikaw ay pagpunta sa nais na i-save ang mga sukat ng orihinal. Right? Dahil kung sinasabi ko sa inyo ang larawang ito ay 100 pixels by 100 pixels, at gusto ko sa iyo na gumawa ng ito ng apat na beses na mas malaki, alam mo na mayroon ka na multiply ang mga sukat sa pamamagitan ng apat. Kaya nga ang nais mo ng isang output file 400 by 400 pixels, halimbawa. Kaya ito ay talagang kapaki-pakinabang para sa iyo guys sa i-save ang mga sukat ng orihinal. At pagkatapos ay pagkatapos, matapos tapos ka na sa pagbabago ng laki, maari kang magsulat ng bagong header sa mga bagong sukat matapos pagpapalit ng sukat. At ang paraan na ikaw ay pisikal na ay maaaring lumikha ng sa mga malalaking pixels ay na maaari mong isulat bagong RGB-- tandaan, RGB, lahat na nakatayo para sa ay pula, berde, at blue-- pixels sa isang out file. At ikaw ay pagpunta sa nais na may iba't-ibang halaga ng kung ano ang ang tawag namin sa padding. Lahat ng padding ay mga puwang bago at pagkatapos ng mga larawan na sabihin your-- mahalagang na sabihin sa iyong mga larawan kung paano malaki ito dapat ay ang pagkuha up. Ito ay lubhang mahirap unawain para sa isang pulutong ng mga sa iyo kung hindi mo pa basahin ang pset spec, ngunit ito ay magiging lubhang kapaki-pakinabang para sa kapag tunay na ikaw ay pagbabasa sa pamamagitan ng mga ito. Ikaw ay tulad ng, oh, oo, na makatuwiran. Bakit ko kailangang gawin ito? Saysay. Sa wakas, ito ay marahil ang isa sa mga ang pinaka-nakakabigo programa kailanman dahil lamang hindi mo maaaring sabihin sa kung ito ay gumagana o hindi. Lahat ng programa na ito, mabawi, ay ginagawa na, kung maayos tumakbo, ito ay dapat na ma-bigla mabawi ang 50 mga imahe na ay nawala sa aming mga hard drive. At upang ang mga problema sa programang ito ay na hindi mo talaga maaaring subukan ito dahil alinman sa iyo mababawi ang mga ito o ikaw ay hindi. At kaya mo uri ng lamang upang i-play sa paligid sa mga ito, at kung ang iyong programa ay gumagana nang maayos, makikita mo ang biglang makita na sa inyong direktoryo na sa iyo Nakakuha ng higanteng halaga ng mga larawan na ngayon doon. Kaya kung paano ko lapitan ang problemang ito ay, hindi namin pagpunta sa iyo kung ano ang tinatawag na isang card.raw file. Totoo, na ang lamang ng isang sirang file kasama ang lahat ng mga larawan na naka-imbak na ikaw ay pagpunta sa kailangan upang makuha mula sa. Kaya marahil ikaw ay pagpunta sa nais na ipasok ang inyong card.raw, o bukas, iyong card.raw file at ikaw ay pagpunta sa nais na mamanipula ito upang makapag-imbak ng mga JPEG. Kaya nais kong magsimula sa pamamagitan ng pagsubaybay at pag-iimbak bawat indibidwal na JPEG mahanap mo ito. Hindi ka pagpunta upang isa-isa ang lahat ng ng isang biglaang lumikha lamang ng lahat ng 50 mga JPEG. Ikaw ay pagpunta sa nais na panatilihin subaybayan kung gaano karaming ikaw ay pagbubukas. At pagkatapos ay gusto mong siguraduhin, kapag handa ka pagsulat sa isang buffer-- ka guys malalaman kung ano ang sinasabi ko sa sandaling mong basahin ang spec-- gusto mong tiyakin na ikaw ay gumagamit ng isang wala pang kontratang char buffer. At pagkatapos ay nais mong itanong inyong sarili ang mga tanong ng, kung ilang bytes ay sa isang CF-- ay sa isang file card? Iyan ay kung gaano karaming ikaw ay pagpunta sa nais na basahin sa iyong buffer. Ikaw ay pagpunta sa nais na tiyakin ang dalawang align dahil pagkatapos mo ay hindi magkakaroon ng random memory pagtulo out. Alam mo nang eksakto kung gaano karaming bytes na kailangan mo at kung gaano karaming bytes na gusto mo sa kanila na may. At pagkatapos ay sa wakas, na nais mong gumamit ng isang function na tinatawag na sprint-- print s f-- upang bumuo ng mga pasadyang file mga pangalan para sa bawat bagong JPEG na mahanap ka. Kaya bilang lumikha ka at maghanap ng mga JPEG sa iyong card, ikaw ay pagpunta sa nais na tindahan ng mga ito at pangalan ng mga ito. Right? At kaya ka ng pagpunta sa nais na gamitin ang function na upang lumikha ng mga pangalan na Maaaring mag-imbak ang lahat ng iyong mga JPEG. At sa wakas, huwag kalimutan upang isara bawat JPEG matapos tapos ka na. Dahil kung ano ang iyong pagpunta sa gawin ay ikaw pagpunta sa marahil ay may ilang uri ng isang loop na iterates sa pamamagitan ng lahat ng iyong mga JPEG. Ikaw ay pagpunta sa magsulat ng isang JPEG at palitan ang pangalan nito bilang mahanap mo ito. Ngunit pagkatapos tapos ka na sa bawat solong JPEG, kailangan mong isara ang mga ito upang maaari mong simulan ang paulit-lumipat sa sa susunod na larawan. At kaya ng isang bagay na tunay na masaya na gusto naming gawin, dahil ito ay naka-set tulad ng isang kakaibang problema kundi pati na rin ang isang weirdly nagbibigay-kasiyahan problema set, ay na ang lahat ng mga larawan namin magkaroon ng para sa iyo, kung makuha mo ng maayos, lahat ng mga larawan ang mga larawan ng iyong kahanga-hangang mga kawani ng pagtuturo, parehong ng Harvard, sa here-- at dito sa Yale. At kung ikaw mangyari upang mabawi ang lahat ng mga larawan at kilalanin ang mga tauhan mga kasapi sa mga cards, at kumuha ng selfies sa amin kung hanapin ka sa amin sa paligid ng campus, para sa bawat larawan na isinumite mo sa amin, bibigyan namin ng magbibigay sa iyo ng isang gigabyte ng Dropbox space. Kaya sabihin gawin ang matematika dito. Kung may 50 mga larawan at 50 miyembro kawani ng pagtuturo, kung mangyari sa iyo upang mahanap ang lahat ng 50 ng amin, na ang 50 gigabytes ng Dropbox, talaga, makikita ang pagbibigay namin sa inyo guys. Kaya ang ilang dagdag na idinagdag insentibo kung ka guys ay hindi lamang pag-aalaga tungkol sa pagbawi nawala imahe. May ilang mga idinagdag insentibo din. Ito ay isang masaya set problema. Ito ay tunay na. Ito ay uri ng nakakabigo ngunit pagkatapos na ito nagiging tunay na masaya kapag nauunawaan mo, Wow, ito ay gumagana at ngayon ako mayroon ng lahat ng mga larawan na lang ko na nilikha sa pamamagitan ng aking sarili. Anumang mga katanungan sa pset? Para sa kahit sino na ang nagsimula, kung mayroon kang mga katanungan, Kukunin ko dito para sa isang ilang minuto pagkatapos section kung gusto mong makipag-usap sa akin. Magaling, guys. Sorry, impormasyon ko dumped sa iyo guys. Payo ay tunay, tunay mahirap at nakakadismaya. At ako ay talagang natutuwa na ka guys nanatili sa akin. Susubukan naming makipag-usap sa mga mas malalalim tungkol sa mga susunod na linggo bilang namin simulan ang paggawa ng hash talahanayan at higit pang mga function na kasangkot ang mga ito. Oo. Kaya kung ang sinuman ay may anumang mga katanungan, kukunin ko na maging sa paligid. Salamat para sa darating at kumuha ng higit pa kendi dahil mayroon pa kendi. Cool.