>> [Musika nagpe-play]
David J. MALAN: Lahat ng karapatan.
Ito ay CS50, at ito ay ang pagtatapos ng Linggo Four.
At ang isa sa mga paksa ngayong araw ay na ng digital forensics,
ang sining ng Pagbawi impormasyon.
At sa katunayan, kahit na ikaw ay nasa kalagitnaan
ngayon ng Kapayapaan sa Tatlong at Breakout, sa susunod na linggo,
ang focus ay magiging sa tiyak domain na ito.
>> Kaya isa sa mga pinakaastig na trabaho kailanman ko Nagkaroon noon ay bumalik sa nagtapos ng paaralan,
kapag ako ay nagtatrabaho para sa mga lokal na Middlesex County District Attorney ni
opisina, ang paggawa forensics gumagana.
Kaya mahalagang, ang Massachusetts Estado Police, sa okasyon,
kapag nagtatrabaho sa mga kaso ng gagawin magdala ng mga bagay tulad ng matapang na drive
at floppy disk at memory card at ang tulad ng.
At ang mga ito ay ipasa ang mga ito sa akin at sa aking Mentor,
at ang aming layunin ay upang mahanap ang katibayan, kung nagkaroon man, sa mga media.
Ngayon, maaari na nakita mo glimpses sa mundong ito ng forensics
sa media, TV at pelikula.
Ngunit ang trabaho ko ay nagkaroon, at daresay mundo na,
ay hindi masyadong tulad ng gusto mong makita ito.
Tingnan natin ang isang pagtingin sa kung ano malamang na nakita mo.
[VIDEO pag-playback]
-OK.
Ngayon, sabihin makakuha ng isang mahusay na pagtingin sa iyo.
>> [Musika nagpe-play]
>> -Hold Ito.
Patakbuhin ang na bumalik.
>> -Wait Ng isang minuto.
Pumunta sa kanan.
-There.
I-freeze na iyon.
-buong-Screen.
>> -OK.
I-freeze na iyon.
-Tighten Up sa na, ikaw?
>> -Vector In sa na tao sa pamamagitan ng likod wheel.
>> -Zoom In dito mismo sa lugar na ito.
>> -With Ang karapatan kagamitan, ang imahe ay maaaring pinalaki at sharpened.
>> -What Iyan?
>> -It Ang isang programa ng pagpapabuti.
>> -Can Mo malinaw na up anumang?
>> Hindi -I kilala.
Paghusayin ni ito Hayaan.
>> -Enhance Seksyon A6.
Pinahusay ko ang detalye, and--
Sa tingin -I mayroong sapat na upang mapahusay.
Palabasin ito sa aking screen.
>> -I Pinahusay na ang pagmuni-muni sa kanyang mga mata.
-Let Ay tumakbo na ito sa pamamagitan ng Pagpapabuti ng video.
>> -Edgar, Maaari mong pagandahin ito?
>> -Hang Sa.
>> -I've Nagtatrabaho sa pagmuni-muni.
>> Panganganinag ng isang tao -There ni.
>> -Reflection.
-There Ay isang salamin ng mukha ng tao.
>> -Ang Salamin!
-There Ay isang pagsasalamin.
-Zoom In sa mirror.
Maaari mong makita ang isang pagsasalamin.
>> -Can Mong mapahusay ang mga imahe mula dito?
-Can Mong mapahusay ito?
-Can Namin mapahusay ito?
-Can Mong mapahusay ito?
-Hold Sa isang segundo.
Kukunin ko paghusayin.
-Zoom In sa pinto.
-Times 10.
-Zoom.
-Move In.
-More.
-Wait, Itigil.
-Stop.
-Pause Ito.
-Rotate Sa amin 75 degrees sa paligid ng vertical, mangyaring.
>> -Stop.
Bumalik sa bahagi tungkol sa pinto muli.
>> -Got Isang Enhancer larawang maaaring bitmap?
>> -Maybe Na maaari naming gamitin ang Pradeep Singh pamamaraan upang makita sa bintana.
>> -Ang Software ay estado ng art.
>> -Ang Eigenvalue Naka-off.
>> -With Ang karapatan kumbinasyon ng algorithms--
>> Kinuha pag-iilaw -He ni algorithm sa susunod na antas,
at maaari ko bang gamitin ang mga ito sa mapapahusay ang larawan.
>> -Lock Sa at palakihin ang z-axis.
>> -Enhance.
Pagandahin.
-Enhance.
-Freeze At paghusayin.
[END VIDEO pag-playback]
David J. MALAN: Kaya mga ay lahat ng mga salita, ngunit sila ay hindi
ginamit sa mga pangungusap nang tama.
At sa katunayan sa hinaharap, anumang oras, mangyaring, maririnig mo ang isang tao ang sinasabi ng mga salita,
"Paghusayin," chuckle lang nang kaunti.
Dahil kapag sinusubukan mong paghusayin, halimbawa, ito ay kung ano ang mangyayari.
>> Kaya narito ang isang gorgeous larawan.
Ito ay sariling Daven CS50 ni.
At ipagpalagay na gusto naming tumuon in sa twinkle sa kanyang mga mata,
o ang salamin ng masamang tao na noon ay malinaw na
nakunan ng seguridad camera.
Ito ay kung ano ang mangyayari kapag mag-zoom in ka sa isang imahe na
mayroon lamang isang tiyak na numero ng mga bit na nauugnay dito.
>> Iyon ay kung ano ang iyong makukuha.
At sa katunayan, sa Daven ng mata ay ngunit apat, siguro anim na mga pixel
na bumuo ng kung ano mismo ang ay glimmering doon.
Kaya Problema Set Four ay sa huli ay may mong galugarin ang mundo na ito, lalo na
sa pamamagitan ng likas na katangian ng isang bagay tinatawag naming file i / o, kung saan
i / o lamang magarbong paraan ng sinasabi ng input at output.
>> Kaya kaya sa ngayon, ang lahat ng mga pakikipag-ugnayan nagkaroon kami sa isang computer na
naging sa kalakhan sa iyong keyboard at ang screen,
ngunit hindi kaya magkano na may mga hard disk, o pagse-save ng mga file na higit pa sa iyong mga nai
isulat ang iyong sarili.
Ang iyong mga programa sa gayon ay malayo mayroon Hindi pa paglikha, at pagse-save,
at pag-update ng kanilang sariling mga file.
>> Well, kung ano ang isang file?
Well, isang bagay tulad ng isang JPEG.
Ito ay isang imahe na maaari mong mayroon o i-upload sa Facebook,
o makita kahit saan sa web.
Sa katunayan, na larawan namin lamang nakita ng Daven ay isang JPEG.
At kung ano ang kawili-wiling tungkol sa mga file tulad ng mga JPEG
ay na sila ay nakilala, karaniwan, sa pamamagitan ng ilang mga pattern ng bits.
>> Sa ibang salita, ano ito na Tinutukoy ang isang JPEG mula sa isang GIF
mula sa isang ping mula sa isang Word dokumento mula sa isang Excel file?
Well, iba ito lamang pattern ng bits.
At ang mga iba't ibang mga pattern ay karaniwan ay sa simula ng mga file na iyon.
>> Kaya na kapag binubuksan ng Salita ng iyong computer doc, o kapag nagbukas ng isang JPEG isang computer,
ito mukhang karaniwang sa unang ilang mga piraso sa file.
At kung kinikilala nito ang isang pattern, sinasabi nito, oh, ito ay isang larawan.
Hayaan akong ipakita ito sa ang gumagamit na ito bilang isang graphic.
O kaya naman, oh, ito mukhang isang Word doc.
Hayaan akong ipakita ito sa mga gumagamit na ito bilang isang sanaysay.
>> Kaya halimbawa, mga JPEG, ito ay lumiliko out, ay
medyo sopistikadong sa ilalim ng hood.
Subalit ang unang tatlong bytes sa karamihan ng mga araw- JPEG magsimula sa mga tatlong numero.
Kaya byte zero, isa, at dalawang mga, sa karamihan sa bawat JPEG, 255, at pagkatapos ay ang numero
216, pagkatapos ay ang numero 255.
>> At kung ano ang magagawa mong upang simulan ang paggawa sa susunod na linggo
ay talagang poking sa ilalim ng hood ng mga file tulad ng mga JPEG
at tulad ng bitmap na file, at nakakakita kung ano ang palagi nang naging doon para sa hangga't
bilang ka pa gamit ang isang computer.
>> Ngunit kung ano ang doon ay hindi karaniwan nakasulat na tulad ng mga numero ng decimal tulad nito.
Mga siyentipiko computer na hindi ay may posibilidad na makipag-usap sa decimal.
Hindi nila talaga makipag-usap sa binary.
Karaniwan, kapag gusto naming upang ipahayag ang mga numero,
talaga naming gamitin hexadecimal, saan ay maaari mong isipin
mula sa, sabihin nating, Problema Set Ang isa, na hinamon
mong isipin ang tungkol sa ibang system.
>> Kami, siyempre, ang pamilyar may decimal, zero sa pamamagitan ng siyam.
Usapan natin ang tungkol sa binary.
At hindi kami talaga mayroon gamitin ang ganoong karaming dito
sa labas, dahil computer ay gagamit na iyon.
Ngunit programmer ay napaka madalas, ngunit hindi laging,
gumamit ng hexadecimal, na kung saan ay nangangahulugan lamang mayroon kang 16 na titik sa iyong alpabeto,
bilang kabaligtaran sa dalawa o 10.
>> Kaya paano mo bilangin sa mas mataas na kaysa sa siyam sa hexadecimal?
Pumunta kang 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, sa pamamagitan lamang ng convention.
Ngunit kung ano ang key ay na ang bawat ng mga ay isang solong simbolo.
Walang 10.
Walang 11, per se, dahil bawat ng iyong mga digit, gusto lamang sa decimal
at tulad lamang ng sa binary, dapat lamang maging isang solong character, sa pamamagitan ng convention.
>> Kaya na pagkatapos ay ang alpabeto mayroon kami sa aming pagtatapon para sa hexadecimal.
Kaya kung ano ang hitsura ng isang JPEG tulad ng kung ay upang isulat ang mga unang tatlong
Bytes hindi bilang decimal ngunit, halimbawa, bilang hexadecimal?
At kung bakit ay hex kahit lahat na kapaki-pakinabang?
>> Well, isang mabilis na pagtingin sa isang halimbawa.
Kaya kung isulat ko ang mga bit na kumakatawan sa mga decimal numbers--
maaaring ito ay isang maliit na kalawangin ngayon mula sa ilang linggo likod,
ngunit sa kaliwa ng isa at ang karapatan isa ay medyo madali.
255 ay ang pinakamalaking bilang namin maaaring kumatawan sa walong bits.
Iyon ay ang lahat ng mga bago.
Kaya ang isa lamang na mildly kawili-wiling ay ang isa gitna.
At kung uri ng mong gawin ang matematika, ikaw deduce na, sa katunayan,
na pattern ng isa at mga zero ay kumakatawan sa 216.
Kaya ipaalam stipulate lamang para sa ngayon na ang mga ito ay tama.
Ngunit bakit kagiliw-giliw na ito?
>> Well, isang byte, siyempre, ay walong bits.
At ito ay lumiliko out na kung sa tingin mo ng isang byte bilang dalawang chunks ng apat na piraso,
tulad nito.
Hayaan akong magdagdag lang ng ilang espasyo.
Kaya bago, pagkatapos.
Lamang ako nagdagdag ng ilang mga puting espasyo alang-alang sa visualization dito.
Paano maaari naming kumakatawan na ngayon sa, sabihin nating, hexadecimal bawat Quad ng mga piraso,
bawat hanay ng mga apat na piraso?
>> Kaya halimbawa, sa kaliwa ngayon, mayroon kaming 1111 sa binary.
Ano ang na numero sa decimal, kung gagawin mo ang matematika?
Kayo ay may lugar sa buhay, ang lugar twos, ang lugar fours, at ang lugar eights.
>> Madla: 15.
David J. MALAN: Ito ay 15.
Kaya kung ang ginagawa namin walong plus apat plus dalawang plus isa, makakakuha tayo ng 15.
Kaya maaari kong isulat 15 sa ibaba 1111, ngunit ang buong punto dito
ay hexadecimal, hindi decimal.
Kaya sa halip na pagsusulat down na 15, 1-5, Pupunta ako sa isulat iyon sa hex,
na kung sa tingin mo pabalik, kung mayroon kang zero sa pamamagitan ng f, kung ano ang 15 ng pagpunta sa maging?
Madla: f.
David J. MALAN: Kaya ito ay lumiliko out ito ni f.
At maaari kang magtrabaho na sumali sa pamamagitan ng sinasabi, na rin, kung ang isang 10, pagkatapos ay OK, f ay 15.
Kaya nga, maaari naming muling isulat ang ang parehong hanay ng mga numero bilang f f.
At pagkatapos ay kung gumawa kami ng kaunting matematika, ipapakita namin deduce na iyon d.
Eight ay medyo madali, dahil kami magkaroon ng isa sa lugar eights.
At pagkatapos, mayroon kaming higit pang f f ng ilang.
>> Kaya kung ano ang mga tao ay may posibilidad na gawin sa pamamagitan ng convention kapag gumamit sila ng hexadecimal ay lang nila
isulat ito ng kaunti pa succinctly, mapupuksa ang karamihan sa mga na white space.
At upang maging napaka malinaw sa makatarungan mga mambabasa na ito ay hexadecimal,
ang simpleng convention sa mga tao ay isulat mo zero
x, na walang kahulugan ng iba pang mga kaysa sa isang visual na tagatukoy ng,
dito ay isang hex numero.
>> At pagkatapos, ilagay mo ang dalawang mga digit, f f sa kasong ito, pagkatapos ay d isang, pagkatapos ay i-f f.
Kaya mahaba kuwento maikli, hexadecimal lamang ay may gawi
upang maging kapaki-pakinabang dahil sa bawat isa sa kanyang digit, zero sa pamamagitan ng f, perpektong linya
up sa isang pattern ng apat na piraso.
>> Kaya kung mayroon kang dalawang digit hexadecimal, zero sa pamamagitan ng F, muli at muli,
na nagbibigay sa iyo ng perpektong walong piraso o isa byte.
Kaya na ang dahilan kung bakit ito ay may gawi na maging conventionally kapaki-pakinabang.
Walang intelektwal na pagmamay- nilalaman talagang lampas na,
bukod sa aktwal na utility nito.
>> Ngayon ang mga JPEG ay hindi lamang ang mag-file format para sa graphics.
Maaari mong isipin ang na may mga mga file na tulad nito sa mundo,
hindi bababa sa mula sa isang ilang taon likod.
>> Kaya ito ay talagang na naka-install sa Windows XP
sa milyun-milyong mga PC sa buong mundo.
At ito ay isang bitmap na file, BMP.
At isang bitmap file, na makikita mo sa tabi linggo, nangangahulugan lamang sa isang pattern ng mga tuldok,
pixels habang ang mga ito ay tinatawag na, isang map sa bits, talaga.
>> Kaya kung ano ang kawili-wiling, bagaman, tungkol sa format ng file, BMP, ay
na sa ilalim ng hood, ito ay may higit sa bytes tatlo lamang
na sumulat ng header nito, kaya upang makipag-usap, ang unang ilang mga kagat.
Ito talaga ang itsura ng kaunti kumplikado sa unang tingin.
At makikita mo ito sa P set.
At ang pagkakaroon ng isang bagay partikular na sa labas ng ito ngayon
Hindi kaya mahalaga, tulad ng sa katotohanang na sa simula ng bawat bitmap
file, isang graphical na format, mayroong isang buong bungkos ng mga numero.
>> Ngayon Microsoft, ang may-akda ng format na ito,
ay may gawi na tumawag sa mga bagay na hindi ints at char
at sa kamay ngunit salita at d mga salita at longs at bytes.
Kaya ang mga ito ay lamang iba't ibang mga uri ng data.
Ang mga ito ay iba't ibang mga pangalan para sa parehong bagay.
Ngunit makikita mo na sa P Magtakda ng Four.
>> Ngunit ito ay lamang na sabihin na kung ang isang tao double-click ang ilang mga .BMP file sa kanyang
o ang kanyang hard drive, at isang window ay magbubukas up na nagpapakita sa kanya na imahe,
na nangyari dahil sa operating baka napansin system ay hindi lamang
ang extension .BMP file sa pangalan ng file,
kundi pati na rin ang katotohanan na mayroong ilan convention sa pattern ng mga piraso
sa pinakadulo simula ng bitmap na file.
>> Ngunit ipaalam tumuon sa ngayon tulad ng isang kumplikadong mga file,
ngunit sa halip sa isang bagay na katulad nito.
Ipagpalagay dito sa GEdit, ako Mayroon lamang ang Beginnings
ng isang programa na medyo simple.
Nakakuha ako ng ilang Kabilang up tuktok.
Ngayon ay na-Nakakuha ako #include "structs.h" ngunit Kukunin ko bumalik sa na sa ilang sandali.
Ngunit ito ay kapaki-pakinabang para sa ngayon.
Kaya ito ay isang programa na pupuntahan ipatupad
tulad ng database ng mga registrar ng.
Kaya ng database ng mga mag-aaral, at bawat mag-aaral sa mundo
May pangalan at isang bahay at marahil ilang iba pang mga bagay-bagay, ngunit itinatago namin itong simple.
Ang bawat mag-aaral ay may isang pangalan at isang bahay.
>> Kaya kung Nais kong magsulat ng isang programa na kung saan ang layunin sa buhay
ay upang umulit lamang mula sa ZERO sa hanggang sa tatlong,
kung mayroong tatlong mga mag-aaral sa Harvard University.
At gusto ko lang upang makakuha ng, gamit GetString, pangalan ng bawat mag-aaral at bahay,
at pagkatapos ay i-print lamang ang mga out.
>> Ito ay uri ng tulad ng Linggo Ang isa, Linggo Dalawang bagay-bagay ngayon,
kung saan ko gusto lamang para sa loop o isang bagay tulad na.
At gusto kong tumawag sa GetString ng ilang beses, at pagkatapos ay i-print f nang ilang beses.
Kaya kung paano maaaring kong gawin ito, bagaman, kapag ang parehong pangalan at isang bahay
kasangkot para sa bawat mag-aaral?
>> Kaya ang aking unang instinct maaari maging upang gawin ang isang bagay na katulad nito.
Maaaring ko muna sabihin, mahusay, ninyo ako, sabihin, isang array ng mga string na tinatawag na mga pangalan.
At hindi ko nais ang isang hardcode tatlong dito.
Ano ang gagawin ko nais upang ilagay doon?
Kaya ESTUDYANTE, dahil ito lamang isang pare-pareho ang ipinahayag sa itaas,
kaya lang hindi ko kailangang mag-hardcode tatlong sa maraming mga lugar.
Sa ganitong paraan, maaari ko ba itong baguhin sa isang lugar, at ito ay nakakaapekto sa isang pagbabago sa lahat ng dako.
At pagkatapos ay, maaari kong gawin Naglalaman string ESTUDYANTE.
>> At ngayon, maaari kong gawin ang isang bagay tulad para sa (int i = 0; i <ESTUDYANTE; ++ i.
Kaya ako mabilis mag-type, ngunit ito ay marahil pamilyar na syntax ngayon.
>> At ngayon, ito ay mas kamakailang.
Kung gusto ko ang ilalagay sa ika-i ang Pangalan ng mag-aaral, sa palagay ko gagawin ko ito.
At pagkatapos, hindi pangalan ngunit bahay bracket i.
Gagawin ko ito, GetString, at hayaang sa akin bumalik at ayusin ang linyang ito.
Sumang-ayon?
Hindi sang-ayon?
Ito ay hindi napaka-user-friendly.
Hindi ko pa sinabi sa mga user kung ano ang gagawin.
>> Ngunit ngayon, kung ako din Nais upang mamaya, sabihin
sabihin nating, i-print ang mga bagay na ito out-- kaya TODO sa ibang pagkakataon.
Pupunta ako sa magagawa sa this-- ito arguably sabihin
isang tamang pagpapatupad ng pagkuha ng mga pangalan at bahay, tatlo
sa kanila kabuuan ng bawat isa, mula sa isang user.
>> Ngunit ito ay hindi napakagandang disenyo, tama?
Paano kung ang mag-aaral ay hindi lamang isang pangalan at isang bahay, kundi pati na rin ng numero ng ID,
at isang numero ng telepono, at ng isang email address,
at marahil isang home page, at siguro isang hawakan ng Twitter,
at anumang bilang ng mga iba pang mga detalye na nauugnay sa isang mag-aaral o ng isang tao,
higit pa sa pangkalahatan.
Paano namin simulan upang magdagdag ng pag-andar sa programang ito?
>> Well, nararamdaman kong ang pinakasimpleng paraan maaari maging upang gawin ang isang bagay tulad ng, sabihin nating,
int id ESTUDYANTE.
Kaya maaari ko bang ilagay ang lahat ng kanilang mga ID sa mga doon.
At pagkatapos ay, para sa isang bagay tulad ng mga numero ng telepono,
Hindi ako sigurado kung paano i- kumakatawan na ngayon.
Kaya sabihin sige at lang tawag ito twitters ESTUDYANTE, na
ay isang maliit na kakaiba, but-- at isang bungkos higit pang mga field.
>> Sinimulan ko upang epektibong kopyahin at i-paste dito.
At ito ay pagpunta sa palaguin ang kaakit-akit unwieldy medyo mabilis, i-right?
Gusto hindi ito maging maganda kung mayroong sa mundo ng istraktura ng data na kilala
hindi bilang isang int o isang string, ngunit isang bagay mas mataas na antas, ang isang abstraction, kaya
upang makipag-usap, na kilala bilang isang mag-aaral?
C ay hindi dumating na may built-in pag-andar para sa mga mag-aaral,
ngunit kung ano kung nais kong bigyan ito tulad?
>> Well, ito ay lumiliko out, pupuntahan ko buksan ang isang file na tinatawag na structs.h dito,
at maaari mong gawin eksakto na.
At kami ay pagpunta upang simulan ang paggawa na ito ngayon.
At sa ilalim ng hood ng P Set Tatlong, na iyong na-paggawa na ito ngayon.
Walang ganoong bagay bilang isang g RECT o g isang hugis-itlog sa programming language C.
>> Kakailanganin ng mga tao sa Stanford ipinatupad mga mga uri ng data sa pamamagitan ng paggamit na ito diskarte dito,
Ang pagdeklara ng kanilang sariling mga bagong data mga uri ng paggamit ng bagong keyword
na tinatawag na struct at isa pa isa na tinatawag na typedef.
At sa katunayan, kahit na ang syntax mukhang ng kaunti mula sa iba't ibang mga bagay-bagay
nasaksihan namin bago, sa prinsipyo, ito ay napaka-simple.
>> Ito lamang ay nangangahulugan na "tukuyin ang isang uri."
Iyon ang nangyayari na maging isang istraktura, at isang istraktura
ay tulad ng isang lalagyan para sa maraming mga bagay.
At istraktura na ay pagpunta upang magkaroon ng isang string na tinatawag na pangalan,
at isang string na tinatawag na bahay.
At ng matawagan lamang para sa kaginhawahan ng ipaalam, ito ang buong istraktura ng data mag-aaral.
>> Kaya sa sandaling nakarating ka na sa ang semicolon, mayroon kang ngayon
Nalikha ang iyong sariling data uri ng mag-aaral na tinatawag na
na ngayon ay nakatayo sa tabi int, at float, at char, at string,
at g RECT, at g hugis-itlog, at anumang mga numero ng iba pang mga bagay na tao ang imbento.
>> Kaya kung ano ang kapaki-pakinabang tungkol sa ngayon ay kung pumunta ako pabalik
sa struct 0 at tapusin ito pagpapatupad, na ako ay nagsulat
nang maaga dito, mapapansin na ang lahat ng maiiwasang messiness na
ay tungkol sa upang simulan ang nangyayari bilang Nagdagdag ako mga numero ng telepono at twitters at ang lahat ng
mga iba pang mga bagay sa Kahulugan ng isang mag-aaral,
ngayon ito succinctly balot up tulad ng array na isa lamang sa mag-aaral.
>> At bawat isa sa mga mag-aaral ngayon ay may maramihang mga bagay sa loob nito.
Kaya na nag-iiwan lamang ng isang katanungan.
Paano mo makakuha ng sa pangalan, at ang bahay, at ang ID,
at ang anumang iba ay sa loob ng mag-aaral?
Super simple, pati na rin.
Bagong syntax, ngunit isang simpleng ideya.
>> Index mo lang sa array, tulad ng ginawa namin noong nakaraang linggo at ito.
At kung ano ang malinaw na ang bagong piraso ng syntax?
Lang., Na nangangahulugang "pumunta sa loob ng istraktura at makakuha ng mga patlang na tinatawag na
pangalan, kunin ang field na tinatawag na bahay, makuha ang field na tinatawag na mag-aaral. "
>> Kaya sa P Set Tatlong, kung ikaw ay Nagsisikap pa rin sa iyon,
at karamihan ng mga tao pa rin ay, mapagtanto na tulad ng sa iyo
simulan ang paggamit ng mga bagay tulad ng g rects at g ovals
at iba pang mga bagay na hindi mukhang nagmumula sa Linggo Zero, One, o Dalawang,
Napagtanto na iyon ay dahil sa Stanford ipinahayag ng ilang mga bagong uri ng data.
>> At sa katunayan, iyon mismo ang idedetalye namin gawin, pati na rin, sa P Set Apat na kapag,
simulan namin upang harapin ang mga bagay tulad ng mga imahe, bitmaps, at higit pa.
Kaya na ang isang teaser at isang lamang modelo ng isip para sa kung ano ang darating.
Ngayon, procrastinated ko medyo ito umaga.
Ako ay uri ng malaman upang makita kung ano ang Microsoft wallpaper talaga
kamukha ngayon.
At ito ay lumiliko out isang tao noong 2006 aktwal na napunta sa mga halos tiyak
parehong lugar sa retrato sa katotohanan ano kamukha na mga araw na ito.
Ang patlang ay ngayon ng kaunti overgrown.
>> Kaya nagsasalita ngayon ng mga imahe, ni magdala pabalik Daven dito hayaan
sa screen at Nicholas, at paalalahanan lamang sa iyo
na kung nais mong sumali sa amin para sa tanghalian ito Biyernes, magtungo sa aming karaniwang URL
dito.
>> Kaya kung saan ay mag-iwan namin off sa Lunes?
Nagpakilala kami ang problemang ito, tama?
Ito ay tila hindi isang wastong pagpapatupad ng swap,
kung saan mo pagkuha dalawang ints, na tinatawag na isa ng, isa na tinatawag na b,
magpalit ang mga ito, tulad lamang ng Laura ginawa dito sa stage na may gatas at ang tubig,
sa pamamagitan ng paggamit ng pansamantalang variable, o isang walang laman na tasa,
nang sa gayon ay maaaring ilagay namin b sa isang at sa b nang hindi gumagawa ng gulo ng mga bagay.
Ginamit namin ang isang variable.
Ito ay tinatawag na Temp.
>> Ngunit ano ay ang pangunahing problema sa ang code na ito sa Lunes?
Ano ang problema dito?
Oo.
>> Madla: Ito ay tumatagal ng mas maraming espasyo.
>> David J. MALAN: Dadalhin hanggang higit pa espasyo, dahil ako ako gamit ang isang variable,
at iyon ang OK.
Iyon ay totoo, ngunit ako pagpunta sa sabihin na OK lang.
Ito ay 32 bits lamang sa enggrandeng scheme ng mga bagay, kaya hindi isang malaking deal.
Iba pang mga saloobin?
Madla: swaps Ito lamang ang mga variable lokal.
David J. MALAN: Eksaktong.
Swaps Ito lamang ang mga variable lokal.
Dahil anumang oras mong tawagan ang isang function-- kapag Ako ang nasa trays mula sa Annenberg
huling oras, mayroon kang pangunahing sa ibaba.
Sa lalong madaling tumawag ka ng isang function na tinatawag na magpalitan, magpalitan ay hindi makakuha ng x at y,
ang orihinal na halaga.
Ano ang swap get, nag-claim namin?
Madla: Ang mga kopya.
David J. MALAN: Kaya mga kopya ng mga ito.
Kaya nakakakuha ito ng isa at dalawa, kung ikaw isipin ang halimbawa mula sa huling beses,
ngunit ang kopya ng isa at dalawa na matagumpay na swapped.
Ngunit sa kasamaang palad sa dulo, mga halaga ay pa rin ang parehong.
Kaya maaari naming makita na ito sa aming mga bagong kaibigan, sana ay GDB,
na mayroon ka o ang TFs at Ca ni Na-paggabay sa iyo patungo gaya ng mga sumusunod.
>> Kaya walang swap pagpapabalik mukhang like-- sabihin buksan ang this-- Mukhang ito.
Nasimulan namin ang x sa isa, y sa dalawa.
Ay nagkaroon ng isang bungkos ng naka-print na f ni.
Ngunit pagkatapos, ang key ng tawag dito ay upang magpalit, na
ay eksaktong code namin Nakita lamang ng ilang sandali ang nakalipas.
Alin ang tama sa unang sulyap, ngunit sa pagtakbo,
ang program na ito ay hindi gumagana, dahil ito ay hindi permanenteng magpalit x at y.
>> Kaya sabihin makita ito, ang isang mabilis na mainit-init hanggang dito sa GDB, isang ./noswap.
Ang isang bungkos ng napakatinding impormasyon na Kukunin ko ang mga rid ng gamit ang Control L sa ngayon.
At ngayon, pupuntahan ko sige at patakbuhin ito.
At sa kasamaang-palad, na ay hindi na kapaki-pakinabang.
Ito ang bumangga sa programa sa loob ng ito programa na tinatawag na GDB, isang debugger,
ngunit hindi ito ipaalam sa akin poke sa paligid.
>> Kaya kung paano ang maaari kong i-pause ang aktwal pagpapatupad sa loob programang ito?
Kaya masira.
At kaya kong masira sa anumang numero, isa, 10, 15 linya.
Ngunit maaari ko rin masira symbolically sa pamamagitan ng sinasabi ng break sa pangunahing.
At na pupuntahan set ng pahinga punto, tila sa 16 na linya sa pangunahing.
At kung saan ay 16 line?
Sabihin pumunta ng hanggang sa ang code at pumunta hanggang sa noswap.
At sa katunayan, 16 linya ay ang pinakaunang sa programa.
>> Kaya ngayon, kung pumunta ako magpatuloy at uri tumakbo oras na ito, ang Enter, naka-pause ito.
Kaya ni poke sa paligid ipaalam.
I-print x-- kung bakit ay x zero?
At huwag pansinin ang dollar sign.
Iyon ay para lamang sa mga fancier paggamit ng programa.
Bakit ay x zero sa sandaling ito?
Oo.
>> Madla: Ito naka-pause bago mismo 16 linya, hindi talagang sa 16 linya.
David J. MALAN: Eksaktong.
GDB, sa pamamagitan ng default, ay naka-pause pagsasagawa lamang bago 16 linya.
Kaya ito ay hindi ipinatupad, na Nangangahulugan x ay ng ilang mga hindi kilalang halaga.
At kami nakakuha ng masuwerteng na ito isang bagay tulad ng malinis zero.
Kaya ngayon kung nagta-type ako sa tabi, ngayon isagawa ito 16.
Ito ay naghihintay para sa akin upang maisagawa 17.
Hayaan akong magpatuloy at i-print ang x.
Ito'y isa.
Hayaan akong sige at i-print y.
Ano ang dapat kong makita ngayon?
>> Madla: [INAUDIBLE]
>> David J. MALAN: Ang isang maliit na louder.
>> Madla: [INAUDIBLE]
David J. MALAN: Hindi masyadong isang consensus.
Kaya oo, nakita namin ang ilang mga halaga ng basura.
Ngayon, y ay 134514064 doon.
Well, ito ay lamang ng ilang mga halaga ng basura.
Aking programa ay gumagamit ng RAM para sa iba't ibang mga layunin.
Mayroong iba pang mga pagpapaandar.
Iba pang mga tao na sinulat sa loob ng aking computer.
Kaya mga bits ay na ginagamit para sa iba pang mga halaga, at kung ano ko na nakikita ang
ay ang mga labi ng ilang naunang paggamit ng na memorya.
>> Kaya walang malaki deal, dahil sa lalong madaling habang nagta-type ako susunod at pagkatapos ay i-print ang y,
ito ay nasimulan sa ang halaga na gusto ko.
Kaya ngayon, ni sige medyo mas mabilis na ipaalam.
N para sa susunod.
Gawin ni itong muli Hayaan.
Ngunit hindi ko nais na hit ito dito, dahil kung ako
Gusto upang makita kung ano ang nangyayari sa loob ng swap, ano ang command?
>> Madla: hakbang.
>> David J. MALAN: hakbang.
Kaya ito hakbang akong isang pag-andar, sa halip na sa ibabaw nito.
At ngayon, ito ay isang maliit na cryptic totoo lang, ngunit ito ay isa lamang
na nagsasabi sa akin ako sa 33 linya ngayon.
At ni gawin muli ito ipaalam.
Magpa-print ng Temp.
Halaga ng basura, negatibong oras na ito, ngunit iyan ay isang halaga na basura pa rin lamang.
Kaya ipaalam gawin ng susunod, i-print ang Temp.
Ito ay nasimulan sa 1, na ay ang halaga ng x, aka isang.
>> Ngayon, kung nasaan ang aming isang at X nagmumula?
Well, mapapansin sa pangunahing, namin na tinatawag na mga halagang ito x at y.
Pagkatapos ay ipinasa namin ang mga ito upang magpalit gaya ng mga sumusunod.
Unang X ay dumating, kuwit y.
At pagkatapos, swap maaaring tumawag sa kanila x at y.
Ngunit para sa kaliwanagan, ito ay pagtawag sa kanila ng at b.
Ngunit isang at b ay ngayon pagpunta sa maging mga kopya ng x at y, ayon sa pagkakabanggit.
>> Kaya kung pumunta ako pabalik sa GDB, Temp ay isa ngayon at ngayon ay isa.
Ngunit kung gagawin ko susunod at ngayon gawin sa pag-print isang, isang Na-ililipat.
Gatas ay poured papunta sa dating salamin orange juice, o vice versa.
>> At kung ang susunod na gagawin ko muli, at ngayon kung i-print out ako bilang isang katinuan check,
isang pa rin ang dalawa, ngunit b ngayon ay isa.
Tapat, ito ay pa rin doon.
Wala akong pakialam kung ano ang Temp ay.
Ngunit sa lalong madaling ngayon nagta-type ako, sabihin nating, magpatuloy upang bumalik, na ngayon ako sa dulo
ang program.
At sa kasamaang-palad, x ay pa rin ng isa at y pa rin ang dalawa.
>> Kaya kung ano ay ang utility ng GDB doon?
Hindi ito makakatulong sa akin ayusin ang problema per se,
ngunit sana ay makatulong sa akin maunawaan ito sa pamamagitan ng napagtatanto
na oo, ang aking logic ay karapatan, ngunit ang aking code ay hindi ganap na pagkakaroon
isang permanenteng epekto.
Kaya na problema kami ay pagpunta sa ngayon malutas ngayon.
>> Ngunit sabihin makarating doon sa pamamagitan ng paraan ng ito.
String ay isang kasinungalingan.
Ito, masyadong, hindi isang uri ng data na umiiral sa C. Ito ay
naging isang kasingkahulugan para sa ilang oras para sa ibang bagay,
at maaari naming ihayag na tulad ng sumusunod.
>> Hayaan akong sige at buksan up isang programa na tinatawag ihambing-0.
At sa halip na i-type ang isang ito out, magsisimula kami upang maglakad sa pamamagitan ng code
Ko na sinulat ni, ngunit ito ay lamang ng ilang linya.
Kaya ito ay ihambing-0.
At ang unang bagay na ako ng paggawa ay hindi nakakakuha ng isang linya ng teksto.
>> Ngunit mapansin kung ano ang ako paggawa sa unang pagkakataon.
Ano ang iba't ibang mga malinaw tungkol sa 21 linya?
Talaga, maghintay ng isang minuto.
Ito ay kopya ng dalawang.
Hindi iyon kahit na ang tamang programa.
Ang lahat ng mga karapatan, spoiler alerto.
Ang lahat ng mga karapatan, kaya hindi bale na.
Iyan ang sagot sa isang susunod na tanong.
>> Narito ay ihambing-0, at ako tungkol sa upang makakuha ng isang linya ng teksto.
Programa ng magkano ang mas simple.
Kaya ito ay prangka.
Ito ay tulad ng Linggo One, Linggo Dalawang bagay-bagay sa sandaling ito. string s = GetString.
Ngayon, sinasabi ko muli pababa dito.
string t = GetString.
At pagkatapos, ang huling bagay sa programa, pati na nagmumungkahi ang pangalan nito,
ay Pupunta ako sa subukan upang paghambingin ang mga ito.
>> Kaya kung s, ang unang string, ay katumbas = t, pagkatapos ay ako
pagpunta sa sinasabi mong i-type ang parehong bagay.
Iba Pa, ako ako pagpunta sa sabihin nagta-type ka ng iba't ibang mga bagay.
Kaya ni makatipon at patakbuhin ang program na ito ipaalam.
Kaya gumawa ihambing zero.
Mukhang mabuti.
Walang mga error compilation.
>> Hayaan akong sige ngayon at i-type ./compare-0.
Hayaan akong sige at sabihin ang isang bagay : Daven at isang bagay: Rob.
At nagta-type ako ng iba't ibang mga bagay.
Sa ngayon, kaya mabuti.
Mukhang tama Program.
>> Ngunit tumakbo ni itong muli ipaalam.
Sabihing isang bagay: Gabe.
Lahat ng karapatan.
Siguro pindutin ko space bar o isang bagay na funky.
Gawin ni itong muli Hayaan.
Kaya Zamyla.
Zamyla.
Iba't ibang mga bagay.
Kaya kung ano ang nangyari?
>> Kaya mayroon kaming mga dalawang linya ng code, GetString na dalawang beses na tinawag.
At pagkatapos, i ako sinusubukan mong ihambing s at t.
Ngunit ano ba talagang pagkatapos ay nangyayari sa?
Well, tungkol sa aking sulat-kamay upang Butcher halimbawang ito medyo.
At sabihin na aktwal na magtapon ito hanggang sa paglipas dito, pati na rin.
>> Kaya mayroon kaming isang linya tulad ng string s = GetString.
Kaya na lang ang unang kagiliw-giliw na linya mula sa programang iyon.
Ngunit ano ang lahat ng mga oras na ito ay naging nangyayari sa ilalim ng hood?
Well, sa kaliwang bahagi ay string, na kung saan ay ang ilang mga uri ng variable,
at ang tawag dito s.
Kaya alam ko na ito ay gumagamit ng memorya, o RAM, sa aking computer kahit papaano.
Kaya pupuntahan ko abstractly gumuhit na bilang isang parisukat.
32 bits, ito ay lumiliko out, ngunit higit pa sa na sa hinaharap.
At pagkatapos ay, kung ano ang nangyayari sa paglipas dito?
>> Well, GetString malinaw naman nakakakuha ng isang string mula sa user.
At GetString Nakakuha Zamyla o Gabe o Daven.
Kaya sabihin piliin ang unang ng mga, na noon ay Daven.
Kaya epektibo, nakuha ko kung ano ang GetString sa akin sa na unang kaso ay D-a-v-e-n.
At pagkatapos ay, kung ano pa ginawa ito akong bigyan lihim?
Madla: [INAUDIBLE]
David J. MALAN: Oo, ang / 0 o null character.
Kaya epektibo ito ay nagbigay sa akin isang string.
Ngunit namin alam mula sa mga nakaraang mukhang na isang string lamang ang isang array
ng mga character, at ito ay winakasan sa pamamagitan ng ito espesyal na character Sentinel, / 0.
>> Ngunit kung ito ay totoo at ito ay isang parisukat,
ito ay malinaw na ang isang mas mas malaking parihaba.
At sa katunayan, ito ay, Inaangkin ko, bits 32 lamang.
At ito ay malinaw na higit sa 32 bits, dahil ito ay marahil
walong plus walong plus walong plus walong plus walong,
dahil lamang ng mga byte na sa ASCII.
Paano ang heck kami makapupunta upang magkasya Daven sa maliit na kahon na ito dito?
>> Well, kung ano ang GetString talaga ginagawa?
Well, dito ay kumakatawan ang grid na ito memorya ng aking computer o RAM.
Kaya sabihin nagkataon natin na kung bawat isa sa mga kumakatawan sa isang byte,
pagkatapos ay maaari naming isipin ang bawat byte bilang pagkakaroon ng isang address,
tulad ng 33 Oxford Street, o 34 Oxford Street, o 35 Oxford Street.
>> Kaya tulad ng mga bahay ay may mga address at mga gusaling may mga address,
kaya gawin indibidwal na byte ng memory may mga address o mga numero ng
na matukoy nang natatangi ang mga ito.
Ngayon, ito ay di-makatwirang.
Ngunit upang panatilihin itong simple, pupuntahan ko gamitin hexadecimal sa pamamagitan lamang ng convention,
ngunit wala ng iba pang mga 0x ay nangangahulugang kaysa sa "ito ay hexadecimal."
at pupuntahan ko upang i-claim na ang "D" ay nagtatapos up sa byte Isa sa memorya.
>> Ako wala pa ang mga nagaganap sa Nakakuha memory, sa gayon Nakakuha Daven sa unang puwesto
sa byte One.
Ito, pagkatapos, ay magiging 0x2.
Ito ay pagpunta sa 0x3.
Ito ay magiging 0x4.
Ito ay pagpunta sa 0x5.
Ito ay magiging 0x6.
>> Ngunit sa sandaling ka magsimula-iisip tungkol sa kung ano ang ginagawa ng computer
sa ilalim ng hood, maaari simulan upang infer
kung paano mo, ilang taon na ang nakalipas, gagawin nagpatupad C mismo.
Ano ang GetString marahil returning-- sapagkat ito
pakiramdam ng tulad ng ito ay hindi bumabalik Daven, per se,
dahil siya ay tiyak hindi pagpunta upang magkasya sa maliit na ito box--
kaya kung ano ang malamang na pagbabalik ay GetString?
>> Madla: [INAUDIBLE]
>> David J. MALAN: Ang lokasyon ng Daven.
At itong ma-paggawa na ito kailanman mula noong Linggo One.
Ano GetString ay talagang bumabalik ay hindi isang string, bawat se.
Iyon ang isa sa mga maliit na puting mga kasinungalingan.
Ito ay bumabalik sa address ng string sa memorya, ang kakaibang address.
Daven nakatira sa 33 Oxford Street.
Ngunit higit pa succinctly, ay nabubuhay Gavin sa 0x1, Address Number One.
>> Kaya kung ano ay makakakuha ng ilalagay sa ito maliit na kahon pagkatapos, upang maging malinaw,
lamang ang address ng na string.
Kaya lahat ng oras na ito, ito May nangyayari.
Ngunit ano ang mga pahiwatig sa ngayon ay kung ang lahat ay may s
ay isang numero sa loob nito, kung sino ang upang itigil mo, ang programmer,
mula sa paglalagay ng anumang numero sa anumang mga variable at lang tumatalon
sa na chunk ng memory?
At sa katunayan, makikita natin ang na isang banta susunod na pagkakataon.
>> Ngunit sa ngayon, ito nararamdaman hindi sapat.
Kung sinasabi ko, kumuha ako ng string, nagbibigay sa iyo sa akin Daven.
Ngunit hindi mo talaga ninyo ako Daven.
Lahat ba ninyo akong bigyan ang address ng Daven.
Paano ko pagkatapos Alam ko para bang kung saan Daven ay nagsisimula at ends--
ang kuwento Nagiging weird-- kung saan Daven ay nagsisimula at nagtatapos,
at pagkatapos, ang susunod na string sa memorya ay nagsisimula?
>> Well, kung ikaw ay handing sa akin simula ng Daven,
mahalagang, paano mo alam ko kung saan ang dulo ng kanyang pangalan ay?
Na espesyal na character na null, na ay ang lahat ng mga mas mahalaga ngayon
kung string sa ilalim ng hood nang simple nakilala
katangi-tangi sa pamamagitan ng kanilang lokasyon sa memorya.
Kaya lahat ng oras na ito, na kung ano ang nangyayari.
>> Kaya kapag tinitingnan namin ngayon sa ang code dito, ipaliwanag
kung gagawin mo ang bug sa 26 linya.
Bakit Zamyla at Zamyla naiiba?
Bakit Gabe at Gabe naiiba?
Oo, sa likod.
>> Madla: Mayroon silang iba't ibang mga address.
>> David J. MALAN: I dahil mayroon sila ng iba't ibang mga address.
Dahil kapag tumawag ka GetString muli, na makikita kong gawin mabilis dito,
kung ito ang pangalawang linya, string t, tulad ng ginawa ko sa programang iyon,
ay katumbas ng isa pang tawag sa GetString.
Ang susunod na oras na tawagan ako GetString, ako ako pagpunta
upang makakuha ng isang iba't ibang mga chunk ng memorya.
>> GetString ang pinapayagan upang hilingin sa operating
system para sa higit pa at higit pa memory.
Hindi ito ng pagpunta sa muling gamitin ang parehong anim na bytes bawat solong oras.
Ito ay pagpunta upang makakuha ng isang bagong chunk ng memorya, na
Nangangahulugan t ay pagpunta upang makakuha ng ilang iba pang mga halaga sa paglipas dito.
>> Kaya kapag gagawin ko s ay katumbas = t, hindi naghahambing ka ng
D laban na ito at laban sa A ito at V laban na ito.
Naghahambing ka ito laban na ito, na
tapat ay medyo useful-- useless-- ay medyo walang silbi, dahil kung sino talaga
pinahahalagahan ng kung saan ang mga string ay nasa memory?
>> At sa katunayan, mayroon kaming hindi.
At hindi namin pagpunta sa simulan lalo na pag-aalaga.
Upang lamang lawak na mga bug maaari lumabas dahil at mga banta ng seguridad ay maaaring lumabas dahil sa kagustuhan
talaga namin simulan upang pangalagaan ang tungkol dito.
Kaya ni ayusin ang problemang ito ipaalam.
Ginagawang out, mo ayusin ito sobrang simple.
>> At sabihin na aktwal na, bago ako magbunyag muli na, kung ano ang gagawin
gagawin mo kung sa isang CS50 klase, at kayo ay nagkaroon na ipapatupad
isang paghahambing laban sa dalawang mga string.
Malinaw ka maaaring hindi lamang gamitin ang mga katumbas = t.
Ngunit lohikal lamang, kung paano Gusto mong ihambing ang string na ito
laban sa ang string na ito gamit ang C code?
Oo.
>> Madla: gawin lang ang mga para sa loop [INAUDIBLE]
David J. MALAN: Perpekto.
Madla: [INAUDIBLE]
David J. MALAN: Oo.
Gamitin lang ang isang para sa loop o isang habang loop o kahit anong.
Ngunit ilapat lamang ang pangunahing ideya na kung ito ay isang chunk ng memory o isang array
at ito ay, sa paglipas ng umulit kapwa sa parehong panahon.
At ihambing lamang ang mga titik.
>> At na kailangan mong maging isang maliit na maingat, dahil hindi mo
ayaw isang daliri upang pumunta nakalipas na ang iba pang mga
dahil ang isa ay string mas mahaba kaysa sa iba pang mga.
Kaya ka ng pagpunta sa gusto mong tingnan para sa ito espesyal na halaga sa dulo, null.
Ngunit ito ay tunay na, sa pagtatapos, kasing simple ng iyon.
At tapat, hindi namin kailangan upang muling baguhin ang wheel na.
Narito ang Bersyon Dalawang.
At kung ano ang pupuntahan ko sabihin dito ay ang sa halip ng paghahambing ng mga katumbas = t,
Sa halip pupuntahan ko sabihin, kung string paghahambing ng kuwit s t katumbas = 0.
Ngayon, kung ano ang ihambing ang string?
>> Ito ay lumiliko out, ito ay isang function na ay may C, na ang layunin sa buhay
ay upang paghambingin ang dalawang mga string.
At stir ihambing, kung basahin namin nito tao o pahina ng dokumentasyon o CS50
sanggunian, ay ito sabihin lang sa iyo na stir
ihambing ang pagbalik ng alinman sa isang negatibong numero o isang positibong numero o zero,
kung saan zero ay nangangahulugan na ang mga ito ay pantay.
>> Kaya lamang haka-haka.
Ano ang maaari itong ibig sabihin kung stir ihambing ang pagbalik
negatibong halaga o positibong halaga?
Madla: Mas mataas sa o mas mababa.
David J. MALAN: Oo, mas malaki kaysa sa o mas mababa kaysa sa.
Kaya kung nais mong upang pagbukud-bukurin sa kabuuan bungkos ng mga string sa isang dictionary--
bilang kami ay malaon pababa sa road-- perpektong pag-andar upang gamitin ang potensyal,
dahil ito ay pagpunta sa gawin iyon paghahambing ng mga string para sa iyo, at sabihin sa
mo ang isang nauuna bago b, o ang b dumating bago ang isang alphabetically.
Maaari naming gawin eksakto na.
>> At abisuhan ako ginawang isang iba pang bagay sa halimbawang ito.
Ano pa ang nagbago mas mataas hanggang sa ito ang pangunahing pag-andar?
Char *.
At ito ay na ang ibang puting kasinungalingan.
Ang lahat ng mga oras na ito, kapag hindi mo nagsusulat string,
na namin nai-lihim muling pagsusulat string na ito bilang char * kaya na clang talaga
naiintindihan mo.
>> Sa ibang salita, sa CS50.h at dahil kakailanganin huli naming makita,
nagsagawa kami ng kasing kahulugan na tinatawag na string iyon ang parehong bagay bilang char *.
At sa ngayon, alam lamang na ang *, Sa kontekstong ito, hindi bababa sa,
Nangangahulugan ang address.
>> Ang address ng kung ano?
Well, ang katotohanan na sinabi ko char *, at hindi int * o lumulutang *,
ay nangangahulugan na ang char * ay ang address ng isang char.
Kaya maliit na kahon na ito dito, aka string, ay talagang ng uri ng char *,
na kung saan ay lamang ng isang magarbong paraan ng sinasabi, sa kahon na ito ay pupunta sa isang address.
At kung ano ang address na mag-refer sa?
Tila, isang char.
>> Ngunit maaari naming ganap Mayroon int * at iba pang mga bagay.
Ngunit sa ngayon, char * ay talagang ang pinaka- prangka at isa sa interes.
Kaya ang problemang ito ay pagpunta upang tumaas, bagaman, muli.
>> Ipagpalagay na buksan ko up sa programa na ito.
Ni makita kung ngayon maaari naming hulaan Hayaan kung ano ang mali sa ang code na ito.
Kaya sa programang ito, kopyahin-0, ako pagpunta sa magpatuloy at muling tumawag
GetString at mag-store ang halaga sa s.
>> At pagkatapos ay, kung bakit ako ginagawa ito, tulad ng isang paalala mula sa nakaraang linggo?
Ginawa namin sinasabi na GetString kung minsan ay nagbabalik null.
Ano ang ibig sabihin kung GetString nagbabalik null?
May nangyaring mali.
Marahil ito ay nangangahulugan na ang string ay masyadong malaki, sa labas ng memory ang computer.
Ito ang mangyayari sobrang, sobrang, sobrang bihira, ngunit maaari itong mangyari.
Gusto naming suriin para dito, at iyon ang lahat ng aming ginagawa.
>> Dahil ipapakita namin makita ngayon, kung hindi mo gusto simulan ang pag-check habitually para sa mga bagay
tulad ng null, maaari mong talagang simulan upang pumunta
naka-address sa memorya na ay hindi wasto.
At ka ng pagpunta sa simulan ang pampalaglag higit pa at higit pa faults segmentation.
O sa Mac o PC, lamang na nagiging sanhi ng isang computer upang mag-hang
o isang programa upang mag-freeze, potensyal na.
>> Kaya ngayon, inaangkin ko sa kopya-0.c, na aking ako ay pagpunta sa kopyahin ang mga string ng paraan
ng line 28.
At pagkatapos, ako pupunta upang i-claim sa ibaba
dito na pupuntahan ko na baguhin ang isa sa mga ito.
>> Kaya mapansin ito.
Ako ng pagtawag sa aming lumang strlen kaibigan.
At ipaliwanag lamang sa Ingles kung ano ang ginagawa ito linya 34?
Ano ang t bracket 0 kumatawan sa kaliwa.
Oo.
>> Madla: Una character ng t?
David J. MALAN: Una character ng t.
Iyan na ang lahat.
Unang character ng t, gusto kong upang italaga ang uppercase na bersyon
ng unang character sa t.
Kaya ito ay capitalize ang unang titik.
At pagkatapos, sa pinakadulo huling bagay gagawin ko sa programang ito ay inaangkin ko ang narito
ang orihinal, s, at narito ang kopya, t.
>> Ngunit batay sa mga kuwento namin lamang Sinabi tungkol sa kung ano talaga ang string,
ano ang 28 linya talaga ginagawa, at ano ang
ang nagreresultang bug pagpunta upang maging sa screen?
>> Kaya unang, ang unang tanong, 28.
Ano ang string t = s talaga ginagawa?
Kung mayroon kami sa kaliwang bahagi ng gilid dito string t = s;
na nagbibigay sa akin ang isang kahon dito at isang kahon dito.
At ipagpalagay na ang address na ito ay 0x, sabihin nating, 50 oras na ito, nagkataon.
Ano ang string t = s gawin sa ilalim ng hood?
>> Madla: [INAUDIBLE]
>> David J. MALAN: nag-iimbak nito sa memory tugunan doon, kaya 0x50 pumupunta doon.
Kaya kung ngayon, pumunta ako sa unang na character sa t at uppercase na ito,
kung ano ang aking ginagawa nang epektibo sa s?
Talaga ako ng paggawa ng parehong bagay, i-right?
Dahil kung Address 0x50-- at lang, ako walang magkano ang room sa board dito,
ngunit ipinapalagay na ito ay 0x50 down na dito, sa isang lugar sa memorya ng aking computer.
>> At ako, halimbawa, Gabe Maliit na titik dito, tulad nito sa.
At ako sinabi t bracket 0 ay makakakuha ng malaking titik.
Well, hindi bracket 0 ay ang unang titik sa t.
Kaya kaunti g ay pagpunta sa maging malaki G. Ngunit ang problema
ay, kung ano ang ibig y ituro din sa?
>> Madla: ang parehong.
>> David J. MALAN: Ang parehong eksaktong bagay.
Kaya isang simpleng paliwanag marahil, kahit na ang syntax ay isang maliit na kakaiba.
Kaya sabihin gawin ito.
Gumawa ng kopya-0 at pagkatapos ay ./copy-0.
Sabihing isang bagay: Gabe.
At sa kasamaang-palad, ang parehong ang mga ito na ngayon ang malaking titik,
ngunit para na napapailalim na dahilan na hindi namin lamang
ngayon pakikitungo na may mga address.
>> Kaya paano ko uumpisahan naming i- address-- walang pun intended--
paano ko uumpisahan naming upang tugunan ang partikular na problema?
Well, sa copy1.c, mga bagay ay pumunta sa upang makakuha ng isang maliit na mas komplikado.
Ngunit Gusto ko i-claim ang isang conceptually simpleng solusyon.
>> Kaya mahirap upang makakuha ng sa unang tingin.
Hindi magiging madali para sa unang oras nagta-type ka ito, marahil,
ngunit kung ang problema ay na lamang ang paggawa t = s lamang
mga kopya ng address, kung ano ang, muli kung ang maaari kong pumili sa iyo,
ay magiging ang solusyon para sa aktwal na pagkopya ng isang string?
>> Madla: namin idedetalye marahil gamitin muli ng isang loop.
>> David J. MALAN: Oo.
Kaya kami ay pagpunta sa kailangan muli ng isang loop.
At dahil kung gusto naming kopyahin isang string s papunta sa isa pang string,
marahil gusto naming gawin ito ng character sa pamamagitan ng character.
Ngunit ang problema ay, kung ang ito ay orihinal na s,
ngayon kailangan namin upang simulan ang tahasang paglaan ng memory para sa t.
>> Sa ibang salita, sabihin redraw ito ang huling oras.
Kung ito ang string s = GetString.
At ni ilagay up dito, pati na rin ipaalam.
Ito ay GetString.
At pagkatapos, ang larawan para sa isang bagay tulad na ay magiging tulad ng dati,
g-a-b-e-/ 0.
Na mukhang isang maliit na isang bagay na katulad nito.
At s samakatuwid, tinatawag namin ito 0x50, at na ang nangyayari upang maging 51, 52.
>> Kaya ito ay 0x50.
At pagkatapos, gagawin ko string t.
Sa memorya, na lamang ng pagpunta sa ninyo ako ng maliit na parisukat na katulad nito.
Kaya ano ang mga pangunahing hakbang ngayon?
Kung gusto ko upang kopyahin ang mga ito sa t, ano blangko ang kailangan naming i-fill in dito?
O kung ano ang kailangan namin upang gawin sa isang mataas na antas?
Oo?
May isang tao?
Oo.
>> Madla: Kailangan nating [INAUDIBLE].
David J. MALAN: Oo, namin kailangan upang punan ang mga ito blangko.
Hindi ko ma kopyahin at pagkatapos ay ika-capitalize pangalan ni Gabe
hanggang sa tanungin ko ang mga operating system para sa isa pang chunk ng memorya
na hindi bababa sa bilang malaki tulad ng orihinal.
Kaya na nag-iiwan sa amin na may isang katanungan.
>> Paano ako tanungin ang operating system ay hindi para lamang sa isang simpleng maliit na pointer--
bilang na ito ay tinatawag na, ang isang address, isang pointer-- hindi
para sa isang simpleng maliit na kahon tulad nito na tinatawag na isang string?
Paano ako tanungin ang operating system para sa isang malaking chunk ng memory?
Kaya ngayon, na-lamang nakuha ko na pabalik hindi tuwiran sa pamamagitan ng pagtawag GetString.
Kaya kung paano GetString kahit pagkuha ng memorya nito?
>> Well, ito ay lumiliko out na mayroong ito ng iba pang mga pagpapaandar dito
na makikita ngayon namin sinimulan nang gamitin.
Ngayon, ito ay mukhang na paraan nang higit pa cryptic than-- at ako ang isa lamang kung sino ang makakakita it--
ang linyang ito ay mukhang na paraan nang higit pa cryptic pagkatapos ay dapat ito sa unang tingin.
Ngunit tease ni ito bukod ipaalam.
>> Sa kaliwang bahagi, mayroon akong char * t.
Kaya sa Ingles, ay magsisimulang upang ipaalam formulate tamang mga pangungusap sa teknikal na pananalita.
Kaya ito ay naglalaan ng isang variable ng uri ng char * tinatawag t.
Ngayon, ano ang na talagang ibig sabihin?
>> Well, ay nangangahulugan na, kung ano ako ng pagpunta ang ilalagay sa ito variable na tinatawag t?
Ang isang address ng isang char.
Kaya iyon ang mas simple lang, higit pang mga makatwirang paraan
ng naglalarawan kaliwang bahagi.
Kaya na lumilikha ang kahon na ito dito lamang.
Kaya kanang gilid, baka, ay pagpunta
upang maglaan ng mas malaki na chunk ng memorya kung paano?
Kaya ni tease ito bukod ipaalam.
>> Ito ay tinatalo sa unang tingin, ngunit kung ano ang nangyayari sa loob dito?
Una, naroon ang malloc, na ay tila ang aming bagong kaibigan,
"Memory maglaan."
Kaya ito ang argumento na ang pumasa sa ito, kaya ito ay isang medyo malaki argumento.
Kaya ni tease ito bukod ipaalam.
>> strlen ng s, siyempre, ay kumakatawan sa the--
Madla: Ang bilang ng mga character.
David J. MALAN: lamang ang bilang ng mga character sa s.
Kaya ang haba ng s, ang orihinal na string.
Kaya G-a-b-e.
Kaya marahil ito ay apat na sa kasong ito.
Bakit ako paggawa +1 pagkatapos pagtawag strlen ng s?
Madla: [INAUDIBLE]
David J. MALAN: Para sa na espesyal na character null.
Kung hihilingin mo sa akin kung ano ang haba ng Pangalan ng Gabe, ako pagpunta sa sabihin apat.
Sa ilalim ng hood, bagaman, kailangan ko na ikalimang byte para sa null character.
Kaya na ang dahilan kung bakit ako paggawa ng +1.
>> Ngayon lamang sa kasong ikaw ay tumatakbo na ito programa sa isang computer bukod sa, sabihin nating,
ang CS50 appliance, kung saan ang laki ng isang char
Maaaring maging iba mula sa aking sariling computer--
lumiliko out na maaari kong tumawag ito operator sizeof, magtanong lamang ang computer,
ano ay ang laki ng isang char sa computer na ito?
>> At sa pamamagitan ng pag-multiply ng limang sa halimbawa sa pamamagitan ng ang laki ng isang char, na
sa karamihan ng mga computer ay maging isa, malloc lamang
ay pagpunta sa maglaan para sa akin ito malaki chunk ng memory sa paglipas dito sa kanan.
At ito ang nangyayari sa return-- ito ay isang function-- kaya
pagpunta upang bumalik sa akin kung ano?
Madla: Ang address?
David J. MALAN: Ang address ng kung ano?
Madla: Sa mga memory ito inilaan?
David J. MALAN: Sa mga memory inilalaan ito.
Kaya wala akong mga ideya, tapat, kung saan ito ay pagpunta sa mga end up.
Pupunta ako sa ipanukala na ito ang nangyayari sa mga end up sa 0x88.
Ganap na di-makatwirang, ngunit sa isang lugar bukod sa 0x50,
dahil sa operating system, kung ano ang Windows at Mac OS gawin para sa akin, ay
tiyakin na ito ay nagbibigay sa sa akin iba't ibang chunks ng RAM.
>> Kaya ito ay ang halaga na kung saan ito chunk ng memorya ay maaaring magtapos up.
Kaya ito ay kung ano ang nagtatapos up in dito, 0x88.
Kaya ngayon malinaw, maaari ba akong maunawaan na ito ay hindi katulad ng ito,
dahil ang mga ito ay tumuturo sa iba't ibang mga chunks ng memorya.
Kaya kung ko talaga ngayon ay nais upang kopyahin ito sa, gawin ang iyong mga ipinanukalang mga solusyon ipaalam.
>> Hayaan pumunta lamang ni, lumikha ng para sa loop, at gawin t bracket i nakakakuha ng mga bracket i.
Dahil ngayon ay maaari ko bang gamitin ang ito array-tulad ng pagtatanda,
dahil kahit malloc napaka generically naglalaan ako ng memorya,
memorya lamang magkadikit bytes.
Byte, byte, byte, bumalik upang i-back sa likod.
>> Maaari ko tiyak bilang isang programmer ituring ito bilang isang array, na
ay nangangahulugan na maaari kong gamitin ito sa wakas ay pamilyar pagtatanda ng lamang ng ilang mga square bracket.
>> Kaya hayaan mo akong i-pause doon, dahil ito ay isang pulutong ng sabay-sabay, kahit
bagaman ang pangunahing ideya sa pagbabalik-tanaw ay ang string, ang lahat ng mga oras na ito,
ay hindi isang bagong uri ng data per se.
Ito ay lamang ng isang tinatawag na pointer, ng isang address ng isang karakter,
na nangangahulugan lamang ito ay isang numero na sa pamamagitan ng convention ng tao
kami ay may posibilidad na magsulat bilang 0x isang bagay.
>> Ngunit ito ay isang numero lamang, tulad ng 33 Oxford Street,
na kung saan ang mangyayari sa maging ang Address CS gusali.
Ang anumang mga katanungan sa mga detalyeng ito?
Oo?
>> Madla: Bakit sinusuri namin para t katumbas ng null?
>> David J. MALAN: Bakit ginagawa namin suriin para sa hindi katumbas ng null?
Kung binabasa namin ang documentation-- mahusay na question-- para sa malloc,
ito ay pagpunta sa sabihin sa fine print, minsan malloc maaaring ibalik null,
tulad ng GetString.
At sa katunayan, GetString nagbabalik null kung, sa pagliko, malloc nagbabalik null,
dahil GetString ay gumagamit ng malloc.
>> At na maaaring mangyari kung ang OS, Mac OS, Windows, kahit anong, ay simpleng
out ng memory para sa iyo.
Kaya na kung ano ang nangyari doon.
>> At ipaalam sa akin magbunyag ng isa sa iba pang mga bagay na maaaring pumutok lang ang iyong isip
o ganap na masyadong malayo sa ibabaw ng linya.
Ngunit ipaalam sa akin hilahin pataas ang pareho para sa loop para sa pagkopya,
kung saan ang isang sandali ang nakalipas, pagpapabalik ay ito. t bracket ay nakakakuha i mga bracket i.
>> Nice at user-friendly.
Pakiramdam muli tulad ng Linggo Dalawang.
Subalit ang bersyon na ito aktwal na maaaring maging rewritten bilang na ito, na kamukha cryptic.
Ito ay isang diskarte na tinatawag na pointer aritmetika, address aritmetika.
Ngunit kung bakit ito gumagana?
>> Ngayon annoyingly, ang mga may-akda ng C nagpasyang gamitin
ang simbolo * para sa iba't ibang mga layunin.
Nakita na namin ito ng isang beses na, char *, na nangangahulugang "ninyo akong bigyan ng variable
na pupuntahan naglalaman ng ang address ng isang char. "
Kaya char * sa konteksto na Nangangahulugan ang "ninyo akong bigyan ng variable."
>> Sa kasamaang palad, kung gagamitin mo ang * nang isang salita sa harap ng mga ito, tulad ng char,
ito ay tinatawag na ngayong ang dereference operator.
At kami makakita ng higit pang mga ito bago ang haba.
Ngunit ang ibig sabihin nito lang ang "pumunta doon."
Ito ay tulad sinasabi, kung may isang taong ipinasa sa akin sa isang piraso ng papel na "33 Oxford Street,"
kung gagawin ko "* 33 Oxford Street," ay nangangahulugan na "Pumunta down na ang daan papunta sa CS gusali."
>> Kaya * ay nangangahulugan pumunta lamang doon kung walang salita sa unahan nito.
Kaya kung ano ay hindi, upang maging malinaw?
t ay ang address ng chunk ng memorya na ay ibinigay pabalik sa akin.
s ay ang address ng kung ano, upang maging malinaw, sa halimbawa na-tatalakayin natin,
ng maliliit na Gabe?
s ay ang address of--
Madla: string ang.
David J. MALAN: Ng orihinal na pangalan ni Gabe.
Kaya ito ang address ng ito chunk ng memorya.
Kaya kung sinasabi ko t + i-- i, paunawa, lamang ang aming lumang kaibigan.
Ito ay lamang ng isang index variable na iterating mula sa zero sa up
sa haba ng string s.
Kaya ito ay magiging zero, pagkatapos ay i-isa, pagkatapos ng dalawang, pagkatapos tatlong, pagkatapos ng apat.
Kaya sabihin magtipun-tipon ang mga bagong Scratch-tulad ng palaisipan piraso, kung gagawin mo,
kahit na, muli, ang syntax ay malayo sa higit pang arcane kaysa sa simula.
Kaya t ay isang address + i ay pagpunta sa magbibigay sa akin
isang numero, dahil ang mga ito ay lahat mga numero na aming na-pagguhit bilang hex.
Ngunit ang mga ito ay lamang ng mga numero.
>> Kaya kung ang address ng t sinabi namin ay 0x88, kung ano ang 0x88 plus zero.
Kahit na ikaw ay hindi komportable may pa hex, maglaan ng hula.
>> Madla: Ang orihinal na.
>> David J. MALAN: pa rin 0x88.
Kaya kung ano ang ibig sabihin ng 0x88 *?
Ang ibig sabihin nito, "pumunta doon" na ang ibig sabihin mabisa, "ilagay ang iyong mga daliri dito."
At ngayon sa kanang gilid ng ito expression, * at pagkatapos ay sa parens,
s + i Nangangahulugan s, na ang tugunan up dito ng maliit g.
s + 0 ay, siyempre, s, kahit anong s ay.
>> Kaya ngayon, ito'y * s, na tulad lang * 33 Oxford Street ay nangangahulugan na pumunta sa address
s.
Kaya narito ang daliri, kanang kamay.
Kaya kung ano ako pagpunta sa kopyahin sa kung ano?
Ang mga bagay sa kanan, na Gabe, kaunti g dito, sa dito.
>> At kaya ang epekto ng na unang iteration ng loop,
bilang mo ang mga ipinanukalang, kahit na mukha itong mabaliw mas komplikado kaysa sa kahit ano
nasaksihan namin bago, ay nagre sinasabi pumunta dito at kopyahin na karakter dito.
Ito ay nagbibigay sa iyo ng isang mapa sa parehong lokasyon.
>> At kami makita malayo higit pa sa mga ito.
Ngunit sa ngayon, ang mga pag-asa ay isa lamang sa ipakilala ang ilan sa mga pangunahing ideya.
At sa katunayan, tingnan natin hayaan isang huling programa dito,
at pagkatapos ay ang ipinangako claymation, na gawin ang lahat ng karapatan ang lahat.
Lahat ng karapatan.
Kaya hayaan mo akong magbukas up-- doon kami pumunta.
Kaya ipaalam me-- magpapadala kami bumalik upang ang larawang ito bago ang haba.
Hayaan akong magbukas ng mga ito panghuling halimbawa dito.
>> Kaya dito ay isang napakabilis, super programa na accomplishes
walang anuman sa buhay na ang mga sumusunod.
Ito unang declares dalawang variable, x at y, na hindi numero oras na ito,
per se.
Hindi ito mga integer, bawat se.
Sila ay tila int *.
Kaya kahit sino lamang, kung ano ang ibig sabihin ng kung ang uri ng iyong data, ang iyong mga variable,
ay ng uri int * star?
Iyan ang address ng isang int.
>> Kaya na hindi ko na walang ideya kung saan pa ito.
Ito lamang ay nangangahulugan "ilagay, sa huli, ang address ng isang int dito. "
0x50, 0x88, kung saan man ito ay nasa memorya, isang address ng pagpunta doon.
At iyon ang y ay magiging, pati na rin.
>> Kung ngayon ko sasabihin x = malloc (sizeof (int)), ito ay isang magarbong paraan ng sinasabi,
hey operating system, sa pamamagitan ng malloc, bigyan mo ako ng sapat na memory para sa laki
ng isang int, na marahil magiging 32 bit o apat na bytes.
>> Kaya kung ano ang bumalik malloc?
Ibinabalik ng Malloc isang address.
Kaya kung ano ang nangyayari upang makakuha ng mga naka-imbak sa x?
Ang address ng chunk ng memorya, ang apat na bytes, na malloc
lamang natagpuan para sa akin sa pamamagitan ng pagtatanong sa operating system.
>> Ngayon samantala, linya apat dito, ang * x = 42.
Lamang na maging malinaw, kung ano ang nangyayari down na doon?
Sa kaliwang bahagi, * x.
na tulad ng * 33 Oxford Street.
Kaya * x ay nangangahulugang kung ano?
>> Madla: Pumunta sa.
>> David J. MALAN: Pumunta sa address na iyon.
Hangga't na chunk ng memorya ay, pumunta dito.
At ilagay kung ano doon, malinaw naman?
Madla: 42.
David J. MALAN: 42.
Ang lahat ng mga karapatan, * y, parehong ideya.
Pumunta sa address sa y.
Ilagay ang numero ng 13 doon, ngunit kung ano ang y sa sandaling ito?
Madla: Walang memory para sa y.
David J. MALAN: Mayroon Walang memory para sa y.
Kaya kung ano ang ginagawa y marahil naglalaman ng, bilang nai-sinasabi namin?
>> Madla: Basura.
>> David J. MALAN: Ang ilang mga halaga ng basura.
Ngayon, halaga ng basura ay isang numero pa rin.
Maaari pa rin itong maging mali para sa isang address.
Ito ay parang isang tao nagsulat ng isang bagay pababa,
at misinterpreted ko ito bilang kahulugan ang ilang mga gusali sa kalye.
At kung susubukan mo lamang na pumunta sa ilang gusali hindi mo pag-aari,
o ilang chunk ng memory mayroon kang hindi naging ibinigay, masamang bagay na maaaring mangyari.
Maaaring pag-crash ng computer, o ilang iba pang hindi tiyak pag-uugali ay maaaring mangyari.
>> Kaya ang intro, pagkatapos, i-Binky ay na ito.
Natatandaan ko pa rin, 20 ang ilang mga kakaibang taon na ang lumipas,
kung saan ako ay kapag ako sa wakas naunawaan na pointer.
>> Aling ay upang sabihin, kung ikaw mag-iwan dito sa tatlong minuto
at sa tingin ko hindi Nauunawaan mga payo, Napagtanto
Ako remembered para sa 20 taon para sa ilang mga nakatutuwang dahilan
kapag at kung bakit ito sa wakas sunk sa, pag-upo sa aking pagtuturo
kapwa, Nishat Mehta sa likod ng Eliot Kakain sa Labas Hall.
Ngayon, nai-remembered ko na ito dahil ito ay
isa sa mga paksa ko, sa partikular, struggled na may.
At pagkatapos, ito sa wakas nag-click, tulad ng Dare ko sabihin ng maraming mga paksa
Sa kalaunan ay.
At ngayon, upang gumawa ng pakiramdam na ang lahat ng mga mas masaya at ang lahat ng higit convincing,
hayaan tumagal ng isang pangwakas na hitsura sa aming huling tatlong minuto dito sa Binky,
mula sa aming mga kaibigan, Nick Parlante mula sa Stanford.
>> [VIDEO pag-playback]
>> -Hey, Binky.
Gumising!
Panahon na para masaya pointer.
>> -What Iyan?
Alamin ang tungkol sa mga payo?
Oh, goody!
>> -Well, Upang makapagsimula, hulaan ko kami ay pagpunta sa kailangan ng ilang mga payo.
>> -OK.
Ang code na ito naglalaan ng dalawang mga payo, na maaaring tumuro sa integer.
-OK.
Well, nakikita ko ang dalawang mga payo, ngunit sila hindi mukhang na tumuturo sa kahit ano.
>> -That Tama.
Sa una, mga payo ay hindi tumuturo sa kahit ano.
Ang mga bagay na ituro ang mga ito sa ay tinatawag na pointees, at pagse-set up ng mga ito
isang hiwalay na hakbang.
>> -Oh, Kanan, kanan.
Alam ko na.
Ang pointees ay hiwalay.
ER, kaya paano mo maglaan ng isang pointee?
>> -OK.
Well, naglalaan ang code na ito isang bagong integer pointee,
at ito bahagi sets x upang tumuro sa ito.
>> -Hey, Na mas mahusay ang hitsura.
Kaya gawin itong gawin ang isang bagay.
>> -OK.
Idedetalye ko dereference ang pointer ng x sa mag-imbak ang numero 42 sa pointee nito.
Para sa mga ito nanlilinlang, kakailanganin ko ang aking Magic Wand ng Dereferencing.
>> Ang inyong Magic Wand ng Dereferencing?
That-- na iyan.
>> -This Ay kung ano ang hitsura ng code tulad ng.
Kukunin ko na lang i-set up ang numero, at [POP]
>> -Hey, Hanapin.
May pumupunta dito.
>> -So Paggawa ng dereference sa mga sumusunod x ang arrow upang ma-access pointee nito.
Sa kasong ito, ang isang tindahan sa 42 doon.
Uy subukang gamitin ito upang mag-imbak ang numero 13 sa pamamagitan ng iba pang mga pointer, y.
>> -OK.
Makikita pumunta sa paglipas ng ko lang dito sa y, at makuha ang numero ng 13 set up.
At pagkatapos, lumabas sa Wand ng Dereferencing at lamang [Buzz]
>> -Oh!
>> -Oh, Hey!
Iyon ay hindi gumagana.
Sabihing, Binky, Hindi sa tingin ko dereferencing y ay isang magandang ideya, dahil alam mo,
pagse-set up ang pointee ay isang hiwalay na hakbang.
At Hindi sa tingin ko kailanman ginawa namin ito.
>> -Good Point.
-Yeah.
Inilalaan namin ang pointer ng y, ngunit namin Hindi kailanman itakda ito upang tumuro sa isang pointee.
>> -Very Observant.
-Hey, Naghahanap ka ng magandang doon, Binky.
Puwede ninyo bang ayusin ito nang sa gayon ay y punto sa parehong pointee bilang x?
>> -Sure.
Makikita ko bang gamitin ang aking Magic Wand Pointer ng Pagtatalaga.
>> -Is Na magiging ng problema tulad ng bago?
-No.
Ito ay hindi pindutin ang pointees.
Nagbabago dito isa lamang pointer sa nagtuturo sa parehong bagay bilang isa pang.
>> -Oh, Nakikita ko.
Ngayon y punto sa parehong lugar bilang x.
Kaya maghintay.
Ngayon, y ay naayos na.
Mayroon itong pointee.
Kaya maaari mong subukan ang Wand ng Dereferencing ulit upang maipadala ang 13 ulit.
>> -Uh, OK.
Narito ito napupunta. [POP]
>> -Hey, Tingnan iyon.
Dereferencing Ngayon gawa sa y.
At dahil ang mga payo ang nagbabahagi na ang isa pointee, parehong nilang makita ang 13.
-Yeah.
Pagbabahagi, kahit anong.
Kaya kami makapupunta upang lumipat ngayon lugar?
>> Oh, hanapin.
Humihingi kami out sa oras.
>> -But--
>> -Just Tandaan ang tatlong mga panuntunan pointer.
Number One, ang pangunahing istraktura ay na mayroon kang isang pointer,
at ito tumuturo sa ibabaw sa isang pointee.
Ngunit ang pointer at pointee ay hiwalay,
at ang karaniwang mga error ay ang pag-set up ng isang pointer,
ngunit upang kalimutan na bigyan ito ng isang pointee.
>> Numero ng Dalawang, pointer dereferencing Nagsisimula sa ang pointer
at sinusundan nito arrow sa ibabaw upang ma-access pointee nito.
Bilang namin ang lahat ng alam, ito Gumagana lamang kung mayroong
isang pointee, kung anong uri ng nakakakuha pabalik sa panuntunan Number One.
>> Numero ng Tatlong, pointer pagtatalaga ay magtatagal ng isang pointer
at nagbabago ito upang tumuro sa parehong pointee bilang isa pang pointer.
Kaya matapos ang pagtatalaga, ang dalawang mga payo
ay tumuturo sa parehong pointee.
Minsan, na tinatawag na pagbabahagi.
At iyon ang lahat doon ay upang ito, talagang.
Bye-bye ngayon.
[END VIDEO pag-playback]
David J. MALAN: Iyon lang para sa CS50.
Makikita natin sa iyo sa susunod na linggo.