>> [MUSIC KUCHEZA]
DAVID J. Malan: All wa kulia.
Hii ni CS50, na hii ni mwisho wa Wiki ya Nne.
Na moja ya mada leo ni ile ya forensics digital,
sanaa ya kurejesha habari.
Na hakika, hata kama wewe ni katikati
hivi sasa ya Amani katika Tatu na kuzuka, wiki ijayo,
mkazo uwe kwenye just uwanja huu.
>> Hivyo moja ya kazi coolest mimi milele alikuwa alikuwa nyuma katika shule ya kuhitimu,
wakati nilikuwa kazi kwa ajili ya mitaa Middlesex County Wilaya ya Mwanasheria
ofisi, kufanya forensics kazi.
Hivyo kimsingi, Massachusetts Hali Polisi, juu ya tukio,
wakati wa kufanya kazi juu ya kesi ingekuwa kuleta katika mambo kama anatoa ngumu
na floppy disks na kadi ya kumbukumbu na kama.
Na wangeweza mkono wao kwangu na mshauri wangu,
na lengo letu lilikuwa kupata ushahidi, kama kulikuwa na yoyote, kwenye vyombo vya habari hizi.
Kiza sasa, unaweza kuwa na kuonekana wa ulimwengu huu wa forensics
katika vyombo vya habari, TV na sinema.
Lakini kazi Mimi nilikuwa, na daresay dunia kwamba,
ni si kabisa kama ungependa kuona.
Hebu kuangalia nini ve pengine kuona.
[VIDEO avspelning]
-OK.
Sasa, hebu kupata nzuri kuangalia wewe.
>> [MUSIC KUCHEZA]
>> -Hold Yake.
Kukimbia kwamba nyuma.
>> -Wait Dakika.
Kwenda kulia.
-Kuna.
Freeze hiyo.
-Kamili-Screen.
>> -OK.
Freeze hiyo.
-Tighten Juu ya kwamba, je,?
>> -Vector Katika juu ya kwamba guy na gurudumu nyuma.
>> -Zoom Katika haki hapa kwenye doa hii.
>> -Kwa Vifaa sahihi, picha inaweza wazi na makali.
>> -Nini Hiyo?
>> -Ni Ni mpango kukuza.
>> -Je Wewe wazi kwamba up yoyote?
>> -I Hawajui.
Hebu kuongeza yake.
>> -Enhance Sehemu A6.
Mimi kuimarishwa undani, and--
-I Nadhani kuna kutosha kuimarisha.
Kutolewa kwa screen yangu.
>> -I Kuimarishwa reflection katika macho yake.
-Let Kukimbia hii kwa njia ya video kukuza.
>> -Edgar, Unaweza kuongeza hii?
>> -Hang Juu ya.
>> -I've Wamekuwa wakifanya kazi katika reflection huu.
>> Reflection -Kuna ya mtu.
>> -Reflection.
-Kuna Ni reflection ya uso wa mtu.
>> -The Reflection!
-Kuna Ni reflection.
-Zoom Katika juu ya kioo.
Unaweza kuona reflection.
>> -Je Wewe kuongeza picha kutoka hapa?
-Je Wewe kuongeza yake?
-Je Sisi kuongeza hii?
-Je Wewe kuongeza yake?
-Hold Ya pili.
Mimi itabidi kuongeza.
-Zoom Katika juu ya mlango.
-Times 10.
-Zoom.
-Move Katika.
-Zaidi.
-Wait, Kuacha.
-Stop.
-Pause Yake.
-Rotate Us digrii 75 karibu wima, tafadhali.
>> -Stop.
Nenda nyuma sehemu juu ya mlango tena.
>> -Got Picha enhancer ambayo inaweza bitmap?
>> -Maybe Tunaweza kutumia Pradeep Singh njia ya kuona ndani ya madirisha.
>> Programu -The ni hali ya sanaa.
>> -The Eigenvalue ni mbali.
>> -Kwa Haki mchanganyiko wa algorithms--
>> Hapo ya kuchukuliwa kuja algorithms ngazi ya pili,
na siwezi matumizi yao ya kuongeza picha hii.
>> -Lock Juu na kupanua z-mhimili.
>> -Enhance.
Kuimarisha.
-Enhance.
-Freeze Na kuongeza.
[END video avspelning]
DAVID J. Malan: Hivyo wale ni maneno hayo yote, lakini hawakuwa
kutumika katika hukumu kwa usahihi.
Na hakika katika siku zijazo, wakati wowote, tafadhali, wewe kusikia mtu kusema neno,
"Kuongeza," chuckle kidogo tu.
Kwa sababu wakati wewe kujaribu kuboresha, kwa mfano, hii ni kile kinachotokea.
>> Hivyo hapa ni picha gorgeous.
Hii ni CS50 ya mwenyewe Daven.
Na kudhani kwamba sisi alitaka kuzingatia katika juu ya twinkle katika jicho lake,
au reflection ya guy mbaya kwamba ilikuwa wazi
alitekwa na kamera ya usalama.
Hii ni kile kinachotokea wakati wewe zoom katika juu ya picha kwamba
ina tu idadi finite ya bits yanayohusiana na hayo.
>> Hiyo ni nini ungependa kupata.
Na hakika, katika jicho Daven ya ni lakini nne, labda sita saizi
ambayo kutunga nini hasa mara glimmering huko.
Hivyo Set Tatizo Tarakimu hatimaye kuwa na wewe kuchunguza dunia hii, hasa
na asili ya kitu sisi kuwaita faili i / o, ambapo
i / o ni njia tu ya dhana ya akisema pembejeo na mazao.
>> Hivyo hivi sasa, yote ya mwingiliano tulikuwa na kompyuta
wamekuwa kwa kiasi kikubwa na yako keyboard na screen,
lakini si sana na disk ngumu, au kuokoa files ya zaidi ya wale wewe
mwenyewe kuandika.
Mipango yako hivi sasa na si kujenga, na kuokoa,
na uppdatering files yao wenyewe.
>> Naam, ni nini faili ni nani?
Naam, kitu kama JPEG.
Hii ni picha waweza na au upload kwa Facebook,
au kuona mahali popote kwenye mtandao.
Hakika, kwamba picha sisi tu saw ya Daven mara JPEG.
Na nini kuvutia kuhusu files kama JPEGs
ni kwamba wanaweza kuwa na kutambuliwa, kawaida, na mifumo ya baadhi ya bits.
>> Kwa maneno mengine, je ni kwamba tofauti kati ya JPEG kutoka GIF
kutoka PING kutoka kwa Neno la hati kutoka Excel file?
Naam, ni tofauti tu mifumo ya bits.
Na wale mifumo tofauti ni kawaida katika mwanzo wa files wale.
>> Hivyo kwamba wakati kompyuta yako kuufungua Neno doc, au wakati kompyuta kufungua JPEG,
inaonekana kawaida katika kwanza bits kadhaa katika faili.
Na kama ni inatambua muundo, inasema, oh, hii ni picha.
Hebu kuonyesha ni kwa user kama graphic.
Au, oh, hii inaonekana kama Neno doc.
Hebu kuonyesha kuwa na user kama insha.
>> Hivyo kwa mfano, JPEGs, ni zamu nje, ni
haki kisasa chini ya Hood.
Lakini kwanza ka tatu katika wengi kila JPEG kuanza na namba hizi tatu.
Hivyo Byte sifuri, moja, na wawili ni, katika wengi kila JPEG, 255, kisha ya simu
216, kisha namba 255.
>> Na nini wewe utakuwa na uwezo kuanza kufanya wiki ijayo
ni kweli poking chini ya kofia ya files kama JPEGs
na kama files bitmap, na kuona nini daima imekuwa pale kwa muda mrefu
kama wewe tumekuwa kutumia kompyuta.
>> Lakini kuna nini huko ni si kawaida imeandikwa kama namba decimal kama hii.
Wanasayansi wa kompyuta kufanya si huwa na kusema katika decimal.
Wao si kweli kuzungumza katika binary.
Kwa kawaida, wakati tunataka kueleza idadi,
sisi kweli matumizi hexadecimal, ambayo unaweza kukumbuka
kutoka, kusema, Tatizo Set Moja, ambayo changamoto ya
wewe kufikiri juu ya mfumo tofauti.
>> Sisi, bila shaka, ni ukoo na decimal, zero kwa njia ya tisa.
Sisi aliyesema kuhusu binary.
Na sisi si kweli kuwa kutumia kiasi kwamba hapa
juu ya nje, kwa sababu kompyuta kutumia hiyo.
Lakini programmers mapenzi sana mara nyingi, lakini si mara zote,
kutumia hexadecimal, ambayo ina maana tu una barua 16 katika alfabeti yako,
kinyume na mbili au 10.
>> Hivyo ni jinsi gani wewe kuhesabu juu ya tisa katika hexadecimal?
Unaweza kwenda 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, tu kwa mkataba.
Lakini nini muhimu ni kwamba kila kati ya hayo ni ishara moja.
Hakuna 10.
Hakuna 11, per se, kwa sababu kila ya tarakimu yako, tu kama katika decimal
na kama tu katika binary, lazima tu kuwa tabia moja, na mkataba.
>> Hivyo kwamba basi ni alfabeti tuna tulizonazo kwa hexadecimal.
Kwa hiyo ni nini JPEG kuangalia kama kama wewe walikuwa na kuandika wale watatu wa kwanza
ka si kama decimal lakini, kwa mfano, kama hexadecimal?
Na kwa nini ni hex hata yote muhimu?
>> Naam, kuangalia haraka katika mfano.
Hivyo kama mimi kuandika bits kwamba kuwakilisha hizi numbers-- decimal
hii inaweza kuwa kutu kidogo sasa kutoka wiki chache nyuma,
lakini moja wa kushoto na haki moja ni pretty rahisi.
255 ilikuwa kubwa idadi sisi inaweza kuwakilisha na bits nane.
Ilikuwa ni wale wote.
Hivyo moja tu kwamba ni upole kuvutia ni moja kati.
Na kama wewe aina ya kufanya nje math, utakuwa kuthibitisha kwamba, kwa kweli,
kwamba mfumo wa moja na zeros inawakilisha 216.
Basi hebu tu inasema kwa sasa kwamba hizi ni sahihi.
Lakini kwa nini hii ni ya kuvutia?
>> Naam, Byte, bila shaka, ni bits nane.
Na zinageuka kuwa kama unadhani ya Byte kama chunks wawili wa bits nne,
kama hii.
Napenda tu kuongeza baadhi ya nafasi.
Basi, kabla ya, baada ya.
Nimekuwa tu aliongeza baadhi ya nafasi nyeupe kwa ajili visualization hapa.
Jinsi gani sisi sasa kuwakilisha katika, kusema, hexadecimal kila quad ya bits,
kila seti ya bits nne?
>> Hivyo kwa mfano, upande wa kushoto sasa, tuna 1,111 katika binary.
Je, ni kwamba idadi katika decimal, kama wewe kufanya nje math?
Una ndio mahali, wawili-wawili mahali, fours mahali, na eights mahali.
>> Watazamaji: 15.
DAVID J. Malan: Ni 15.
Hivyo kama sisi kufanya nane pamoja na nne pamoja na mbili pamoja na moja, sisi kupata 15.
Ili niweze kuandika 15 chini 1111, lakini hatua nzima hapa
ni hexadecimal, si decimal.
Hivyo badala ya kuandika 15, 1-5, Mimi nina kwenda kuandika kwamba katika hex,
ambayo kama wewe kufikiri nyuma, kama una zero kupitia f, ni nini 15 kwenda kuwa?
Watazamaji: f.
DAVID J. Malan: Hivyo ni zamu nje ni ya f.
Na unaweza kufanya kazi nje kwamba kwa kusema, vizuri, kama ni 10, kisha OK, f ni 15.
Hivyo kweli, tunaweza kuandika upya kuweka hii moja ya namba kama f f.
Na kisha kama sisi kufanya kidogo ya math, tutaweza kuthibitisha kwamba hiyo ni d.
Nane ni pretty rahisi, kwa sababu sisi na moja katika eights mahali.
Na kisha, sisi kuwa wanandoa zaidi f f ya.
>> Basi nini binadamu huwa na kufanya kwa mkataba wakati matumizi ya hexadecimal ni wao tu
kuandika hii kidogo zaidi kwa ufupi, kujikwamua zaidi ya nafasi ya kuwa nyeupe.
Na tu kuwa super wazi kwa wasomaji kwamba hii ni hexadecimal,
mkataba kati ya rahisi binadamu ni wewe kuandika zero
x, ambayo haina maana nyingine kuliko kitambulisho Visual ya,
hiyo inakuja idadi hex.
>> Na kisha, unaweza kuweka tarakimu mbili za, f f katika kesi hii, basi d, basi f f.
Hivyo hadithi muda mfupi, hexadecimal tu huelekea
kuwa na manufaa kwa sababu kila moja ya yake tarakimu, sifuri kupitia f, kikamilifu mistari
up na muundo wa bits nne.
>> Hivyo kama una tarakimu hexadecimal mbili, zero kupitia F, tena na tena,
kwamba anatoa kikamilifu bits nane au Byte moja.
Hivyo ndiyo sababu inaelekea kuwa conventionally muhimu.
Hakuna miliki maudhui kweli zaidi ya hapo,
zaidi ya matumizi yake halisi.
>> Sasa JPEGs ni si tu faili format kwa graphics.
Unaweza kukumbuka kwamba kuna files kama hii katika dunia,
angalau kutoka miaka michache nyuma.
>> Hivyo hii ilikuwa kweli imewekwa katika Windows XP
juu ya mamilioni ya PC duniani kote.
Na hii ilikuwa bitmap faili, BMP.
Na bitmap faili, kama utaona ya wiki, tu ina maana ya muundo wa dots,
Ukubwa kama wao ni kuitwa, a ramani juu ya bits, kwa kweli.
>> Basi nini kuvutia, ingawa, kuhusu hili format file, BMP, ni
kwamba chini ya Hood, ni ina zaidi ya ka tatu tu
ambayo kutunga header yake, hivyo kusema, kwanza kuumwa chache.
Ni kweli inaonekana kidogo ngumu katika mtazamo wa kwanza.
Na utaona hili katika P kuweka.
Na kupata kitu nje fulani ya hii sasa
si hivyo muhimu, kama tu ukweli kuwa katika mwanzo wa kila bitmap
file, format graphical, kuna rundo zima wa idadi.
>> Sasa Microsoft, mwandishi wa muundo huu,
huelekea kuwaita wale mambo si ints na chars
na ikifungwa lakini maneno na d maneno na anatamani na ka.
Hivyo wao ni tu aina tofauti data.
Wao ni majina tofauti kwa kitu kimoja.
Lakini utaona kwamba katika P Set Nne.
>> Lakini hii ni tu kusema kwamba kama binadamu mbili-Clicks baadhi ya faili .bmp upande wake
au gari yake kwa bidii, na dirisha kuufungua up kuonyesha kwake picha kwamba,
kwamba kilichotokea kwa sababu uendeshaji mfumo labda niliona si tu
.bmp Faili ugani katika jina la faili,
lakini pia ni ukweli kwamba kuna baadhi ya mkataba kwa mfano wa bits
mwanzoni sana ya kwamba bitmap faili.
>> Lakini hebu sasa kuzingatia kama faili ngumu,
lakini badala yake juu ya kitu kama hiki.
Tuseme hapa katika gedit, mimi tu mwanzo
wa mpango huo pretty rahisi.
Mimi nimepata baadhi ni pamoja na juu juu.
Sasa mimi nimepata #include "structs.h" lakini Mimi itabidi kuja nyuma na kwamba katika wakati huu.
Lakini hii ni muhimu kwa sasa.
Hivyo hii ni mpango hiyo ni kwenda kutekeleza
kama database msajili ya.
Hivyo database ya wanafunzi, na kila mwanafunzi katika dunia
ina jina na nyumba na pengine baadhi ya mambo mengine, lakini tutaweza kushika ni rahisi.
Kila mwanafunzi ana jina na nyumba.
>> Hivyo kama mimi alitaka kuandika mpango ambao lengo katika maisha
mara tu iterate kutoka sifuri juu ya hadi tatu,
kama kuna wanafunzi watatu katika Chuo Kikuu cha Harvard.
Na mimi nataka tu kupata, kwa kutumia GetString, jina la kila mwanafunzi na nyumba,
na kisha tu magazeti wale nje.
>> Hii ni aina ya kama Wiki Moja, Wiki Barua mambo sasa,
ambapo mimi nataka tu kwa kitanzi au kitu kama hicho.
Na mimi nataka kuwaita GetString chache mara kwa mara, na kisha magazeti f mara chache.
Hivyo jinsi gani mimi kufanya hivyo, ingawa, wakati wote jina na nyumba
ni kushiriki kwa kila mwanafunzi?
>> Hivyo silika yangu ya kwanza nguvu kuwa kufanya kitu kama hiki.
Mimi anaweza kusema kwanza, vizuri, nipe, kusema, safu ya masharti kuitwa majina.
Na sitaki hardcode tatu hapa.
Nini nataka kuweka huko?
Hivyo WANAFUNZI, kwa sababu hiyo tu mara kwa mara alitangaza saa ya juu,
hivyo tu sina kwa hardcode tatu katika maeneo mbalimbali.
Kwa njia hii, siwezi mabadiliko hayo sehemu moja, na huathiri mabadiliko kila mahali.
Na kisha, mimi ili kufanya kamba nyumba WANAFUNZI.
>> Na sasa, mimi ili kufanya kitu kama kwa (int i = 0; i <WANAFUNZI; i ++.
Hivyo mimi nina kuandika haraka, lakini hii ni pengine familiar syntax sasa.
>> Na sasa, hii ilikuwa zaidi ya hivi karibuni.
Kama mimi nataka kuweka katika i-th jina mwanafunzi, mimi nadhani kufanya hivyo.
Na kisha, si majina lakini nyumba mabano i.
Mimi kufanya hivyo, GetString, na basi mimi kwenda nyuma na kurekebisha mstari huu.
Kukubaliana?
Hawakubaliani?
Siyo sana user-kirafiki.
Sikumwambia user nini cha kufanya.
>> Lakini sasa, kama mimi pia alitaka baadaye, hebu
kusema, magazeti hayo out-- hivyo TODO baadaye.
Mimi nina kwenda kufanya zaidi na Haya hii arguably yaani
utekelezaji sahihi ya kupata majina na nyumba, tatu
wao jumla ya kila mmoja, kutoka kwa mtumiaji.
>> Lakini hii si nzuri sana kubuni, haki?
Nini kama mwanafunzi ana si tu jina na nyumba, lakini pia ID ya simu,
na namba ya simu, na barua pepe,
na labda ukurasa wa nyumbani, na labda Twitter kushughulikia,
na idadi yoyote ya maelezo mengine kuhusishwa na mwanafunzi au mtu,
ujumla zaidi.
Jinsi gani sisi kuanza kuongeza utendaji kwa mpango huu?
>> Naam, mimi najisikia kama njia rahisi nguvu kuwa kufanya kitu kama, hebu sema,
int Vitambulisho WANAFUNZI.
Hivyo siwezi kuweka vitambulisho yao yote huko.
Na kisha, kwa ajili ya kitu kama namba za simu,
Mimi nina uhakika jinsi ya kuwakilisha kwamba bado tu.
Basi hebu kwenda mbele na wito tu hii Twitters WANAFUNZI, ambayo
ni ajabu kidogo, but-- na rundo mashamba zaidi.
>> Nimeanza kwa ufanisi nakala na kuweka hapa.
Na hii ni kwenda kukua pretty unwieldy pretty haraka, haki?
Je, si ni kuwa nzuri kama kulikuwa na katika dunia muundo data inayojulikana
si kama int au kamba, lakini kitu ngazi ya juu, kufikirika, hivyo
kusema, unaojulikana kama mwanafunzi?
C hakuwa kuja na kujengwa katika utendaji kwa ajili ya wanafunzi,
lakini nini kama mimi alitaka kuwapa hizo?
>> Naam, ni zamu nje, mimi nina kwenda kufungua faili inayoitwa structs.h hapa,
na unaweza kufanya hasa kwamba.
Na sisi ni kwenda kuanza kufanya hivi sasa.
Na chini ya Hood ya P Set ya Tatu, umefanya tayari kufanya hivyo sasa.
Hakuna kitu kama vile g rect ni au g mviringo katika lugha ya programu C.
>> Folks katika Stanford kutekelezwa wale aina data kwa kutumia mbinu hii hapa,
kutangaza yao wenyewe data mpya aina kutumia keyword mpya
kuitwa struct na mwingine mtu mmoja aitwaye typedef.
Na hakika, hata kama syntax inaonekana tofauti kidogo kutoka kwa mambo
tumeona kabla, katika Kimsingi, ni super rahisi.
>> Hii ina maana "kufafanua aina."
Hiyo inaenda kuwa muundo, na muundo
ni tu kama chombo kwa ajili ya mambo mbalimbali.
Na muundo kwamba ni kwenda kuwa na string kuitwa jina,
na string kuitwa nyumba.
Na hebu kuwaita, tu kwa urahisi, muundo data hii yote mwanafunzi.
>> Hivyo wakati wewe kupata semicolon, una sasa
kuundwa data yako mwenyewe aina kuitwa mwanafunzi
kwamba sasa anasimama sambamba int, na kuelea, na char, na kamba,
na g rect, na g mviringo, na idadi yoyote ya mambo mengine watu kuwa wakiyazua.
>> Basi nini muhimu kuhusu hii sasa ni kwamba kama mimi kwenda nyuma
kwa struct 0 na kumaliza hii utekelezaji, ambayo niliandika
mapema hapa, taarifa kwamba wote ya messiness kuepukika kwamba
ilikuwa juu ya kuanza kinachotokea kama mimi aliongeza namba za simu na Twitters na wote
mambo haya mengine kwa mwanafunzi ufafanuzi,
sasa ni ufupi ilimalizika kama safu moja tu ya wanafunzi.
>> Na kila mmoja wa wanafunzi hao sasa ina mambo mbalimbali ndani yake.
Hivyo kwamba tu majani swali moja.
Jinsi gani unaweza kupata katika jina, na nyumba, na ID,
chochote ambacho ni ndani ya mwanafunzi?
Super rahisi, kama vile.
New syntax, lakini wazo rahisi.
>> Wewe tu index katika safu, kama tulivyofanya wiki iliyopita na hii.
Na nini wazi kipande mpya ya syntax?
Tu., Ambayo ina maana ya "kwenda ndani muundo na kupata shamba iitwayo
jina, kupata shamba iitwayo nyumba, kupata shamba iitwayo mwanafunzi. "
>> Hivyo katika P Set Tatu, kama wewe ni bado kazi hiyo,
na folks wengi bado ni, kutambua kwamba kama wewe
kuanza kutumia vitu kama g rects na g ovals
na mambo mengine ambayo hawaonekani kuja kutoka Wiki Zero, One, au mbili,
kutambua kwamba hiyo ni kwa sababu Stanford alitangaza baadhi ya aina mpya data.
>> Na hakika, hiyo ni nini hasa sisi itabidi kufanya, kama vile, katika P Set Nne, wakati
sisi kuanza kukabiliana na mambo kama picha, bitmaps, na zaidi.
Hivyo hiyo ni teaser na mfano wa akili kwa nini kuja.
Sasa, mimi procrastinated kidogo asubuhi hii.
Mimi nilikuwa aina ya curious kuona nini Karatasi ya Microsoft kweli
inaonekana kama leo.
Na zinageuka mtu mwaka 2006 kweli alikwenda karibu just
doa huo kupiga picha katika hali halisi kile kinachoonekana kama kwamba siku hizi.
shamba ni sasa kidogo iliyojitokeza.
>> Hivyo akizungumza sasa wa picha, hebu kuleta nyuma Daven hapa
juu ya screen na Nicholas, na tu kuwakumbusha
kwamba kama wewe Ningependa kujiunga na sisi kwa chakula cha mchana Ijumaa hii, kichwa na kawaida URL yetu
hapa.
>> Hivyo ambapo gani sisi kuondoka mbali juu ya Jumatatu?
Sisi ilianzisha tatizo hili, haki?
Hii ilikuwa inaonekana sahihi utekelezaji wa wabadilishane,
ambapo wewe kuchukua ints mbili, mtu mmoja aitwaye, na mtu mmoja aitwaye b,
wabadilishane yao, kama alivyofanya Laura hapa juu ya hatua kwa maziwa na maji,
kwa kutumia muda variable, au kikombe tupu,
ili tuweze kuweka b katika na katika b bila kufanya fujo ya mambo.
Sisi kutumika kutofautiana.
Ni wito temp.
>> Lakini kile ambacho kilikuwa msingi tatizo na kanuni hii juu ya Jumatatu?
Na tatizo hapa ni nini?
Yeah.
>> Watazamaji: Ni inachukua hadi nafasi zaidi.
>> DAVID J. Malan: Inachukua hadi zaidi nafasi, kwa sababu mimi nina kutumia variable,
na kwamba ni sawa.
Hiyo ni kweli, lakini mimi nina kwenda kusema kwamba ni sawa.
Ni bits 32 tu katika grand mpango wa mambo, hivyo si kubwa mpango huo.
Mawazo mengine?
Watazamaji: Ni tu swaps vigezo ndani ya nchi.
DAVID J. Malan: Hasa.
Ni tu swaps vigezo ndani ya nchi.
Kwa sababu wakati wowote wewe piga function-- wakati nilikuwa trays kutoka Annenberg
mara ya mwisho, una kuu juu ya chini.
Haraka kama wewe piga kazi kuitwa wabadilishane, wabadilishane haina kupata x na y,
awali maadili.
Je wabadilishane kupata, hatukufanya kudai?
Watazamaji: Nakala.
DAVID J. Malan: Hivyo nakala yao.
Hivyo anapata moja na mbili, kama wewe kukumbuka mfano kutoka wakati wa mwisho,
lakini nakala ya moja na mbili kwamba ni mafanikio swapped.
Lakini kwa bahati mbaya katika mwisho, maadili hayo bado ni sawa.
Ili tuweze kuona hii na yetu rafiki mpya, hopefully GDB,
kwamba wewe au TFS na Ca ya kuwa na wamekuwa kuongoza wewe kuelekea kama ifuatavyo.
>> Hivyo hakuna kukumbuka wabadilishane inaonekana like-- hebu kufungua Haya inaonekana kama hii.
Sisi initialized x kwa moja, y miwili.
Rundo la magazeti f ya.
Lakini basi, kitufe cha kupiga simu hapa ilikuwa wabadilishane, ambayo
ni hasa code sisi tu kuona wakati iliyopita.
Ambayo ni sahihi kwa mara ya kwanza mtazamo, lakini functionally,
mpango huu hana kazi, kwa sababu haina kudumu wabadilishane x na y.
>> Basi hebu angalia hii, joto haraka up hapa na GDB, ./noswap.
rundo la habari mno kwamba Mimi itabidi kujikwamua na Kudhibiti L kwa sasa.
Na sasa, mimi nina kwenda kwenda mbele na kukimbia nayo.
Na kwa bahati mbaya, kwamba sio kwamba muhimu.
Ni mbio mpango ndani ya hii programu inayoitwa GDB, HatiJava,
lakini hakuwa na napenda poke kuzunguka.
>> Hivyo ni jinsi gani mimi kwa kweli pause utekelezaji ndani ya mpango huu?
Hivyo mapumziko.
Na mimi naweza kuvunja juu ya yoyote line ya simu, moja, 10, 15.
Lakini siwezi pia kuvunja mfano kwa kusema mapumziko kuu.
Na kwamba ni kwenda kuweka mapumziko uhakika, inaonekana katika mstari 16 katika kuu.
Na ambapo ni mstari 16?
Hebu kwenda hadi code na kwenda hadi noswap.
Na hakika, line 16 ni sana kwanza katika mpango.
>> Hivyo sasa, kama mimi kwenda mbele na aina kukimbia wakati huu, kuingia, ni paused.
Basi hebu poke kuzunguka.
Magazeti x-- kwa nini ni x sifuri?
Na kupuuza ishara ya dola.
Hiyo tu kwa fancier matumizi ya mpango huo.
Kwa nini ni x sifuri wakati huu?
Yeah.
>> Watazamaji: Ni paused haki kabla ya mstari 16, si kweli juu ya mstari 16.
DAVID J. Malan: Hasa.
GDB, by default, ina paused utekelezaji tu kabla ya mstari 16.
Hivyo ina haitekelezwi, ambayo ina maana x ni ya baadhi ya thamani haijulikani.
Na sisi got bahati kwamba ni kitu safi kama sifuri.
Hivyo sasa kama mimi aina ya pili, sasa ni kunyongwa 16.
Ni kusubiri kwa ajili yangu na nitafanya 17.
Hebu kwenda mbele na magazeti x.
Ni moja.
Hebu kwenda mbele na magazeti y.
Nifanye kuona sasa?
>> Watazamaji: [inaudible]
>> DAVID J. Malan: sauti kidogo.
>> Watazamaji: [inaudible]
DAVID J. Malan: Si kabisa makubaliano.
Hivyo ndiyo, sisi kuona baadhi ya thamani ya takataka.
Sasa, y ni 134514064 huko.
Naam, ni baadhi tu ya thamani ya takataka.
Mpango wangu anatumia RAM kwa malengo tofauti.
Kuna kazi nyingine.
Watu wengine aliandika ndani ya kompyuta yangu.
Hivyo bits wale wamekuwa kutumika kwa ajili ya maadili mengine, na kile Mimi nina kuona
ni mabaki ya baadhi matumizi kabla ya kuwa kumbukumbu.
>> Hivyo hakuna mpango mkubwa, kwa sababu kama hivi karibuni kama mimi aina ya pili na kisha magazeti y,
ni initialized kwa thamani kwamba mimi nataka.
Hivyo sasa, hebu kwenda mbele kasi kidogo.
N kwa ajili ya pili.
Hebu kufanya hivyo tena.
Lakini mimi si unataka hit hapa, kwa sababu kama mimi
wanataka kuona nini kinaendelea ndani ya ya wabadilishane, nini amri?
>> Watazamaji: hatua.
>> DAVID J. Malan: hatua.
Hivyo hii hatua yangu ndani ya kazi, badala ya juu yake.
Na sasa, ni kidogo cryptic uaminifu, lakini hii ni
kuniambia mimi nina katika line 33 sasa.
Na hebu kufanya hii tena.
Print temp.
Takataka thamani, hasi wakati huu, lakini hiyo ni bado thamani ya takataka.
Basi hebu kufanya ijayo, magazeti temp.
Ni initialized kwa 1, ambayo Ilikuwa thamani ya x, aka.
>> Sasa, ambapo ni a wetu na X kuja kutoka?
Naam, taarifa katika kuu, sisi kuitwa maadili haya x na y.
Sisi basi kupita yao wabadilishane kama ifuatavyo.
X alikuja kwanza, comma y.
Na kisha, wabadilishane inaweza kuwaita x na y.
Lakini kwa uwazi, ni kuwaita na b.
Lakini a na b ni sasa kwenda kuwa nakala za x na y, kwa mtiririko huo.
>> Hivyo kama mimi kurejea GDB, temp sasa ni moja na sasa ni moja.
Lakini kama mimi kufanya ijayo na sasa kufanya magazeti a, a tayari wakiongozwa juu.
maziwa amekwisha miminia wa zamani kioo juisi ya machungwa, au kinyume chake.
>> Na kama mimi kufanya ijayo tena, na sasa kama mimi magazeti nje kama sanity hundi,
a ni bado mbili, lakini b ni sasa moja.
Kwa kweli, bado kuna.
Mimi sijali nini temp ni.
Lakini kwa haraka kama mimi sasa aina, hebu sema, kuendelea kwenda nyuma, sasa mimi nina mwishoni mwa
mpango.
Na kwa bahati mbaya, x ni bado moja na y ni bado mbili.
>> Hivyo kile alikuwa matumizi ya GDB huko?
Ni hakuwa na msaada kwangu kurekebisha tatizo per se,
lakini hopefully kusaidia mimi kuelewa ni kwa kutambua
kwamba ndiyo, mantiki yangu ni ya haki, lakini code yangu si hatimaye kuwa
athari ya kudumu.
Hivyo hiyo ni tatizo sisi ni kwenda sasa kutatua leo.
>> Lakini hebu kupata huko kwa njia ya hii.
String ni uongo.
Yake, pia, si aina data kwamba ipo katika C. Ni
imekuwa kisawe kwa baadhi muda kwa ajili ya kitu kingine,
na tunaweza yanaonyesha kwamba kama ifuatavyo.
>> Hebu kwenda mbele na kufungua mpango aitwaye kulinganisha-0.
Na badala ya aina hii moja nje, tutaweza kuanza kutembea kwa njia ya code
Mimi tayari aliandika, lakini ni tu mistari michache.
Hivyo hii ni kulinganisha-0.
Na jambo la kwanza mimi nina kufanya ni kupata mstari wa maandishi.
>> Lakini taarifa ya nini mimi nina kufanya kwa mara ya kwanza.
Nini ni tofauti kwa uwazi juu ya line 21?
Kwa kweli, kusubiri dakika.
Hii ni nakala mbili.
Hilo wala siyo hata mpango wa haki.
Haki zote, spoiler tahadhari.
Haki zote, hivyo kamwe akili kwamba.
Hiyo ni jibu la swali siku zijazo.
>> Hapa ni kulinganisha-0, na mimi nina kuhusu kupata mstari wa maandishi.
Programu ya rahisi sana.
Hivyo hii ni moja kwa moja.
Hii ni kama wiki moja, Wiki Barua mambo wakati huu. kamba s = GetString.
Sasa, mimi kusema tena hapa chini.
kamba t = GetString.
Na kisha, jambo la mwisho katika hii mpango, kama jina lake anapendekeza,
ni mimi nina kwenda kujaribu kulinganisha yao.
>> Hivyo kama s, kamba ya kwanza, sawa na t =, basi mimi nina
kwenda kusema wewe aina kitu kimoja.
Kingine, mimi nina kwenda kusema unapoandika mambo mbalimbali.
Basi hebu kukusanya na kukimbia mpango huu.
Hivyo kufanya kulinganisha sifuri.
Inaonekana nzuri.
Hakuna makosa mkusanyiko.
>> Hebu kwenda mbele sasa na aina ./compare-0.
Hebu kwenda mbele na kusema kitu : Daven na kitu: Rob.
Na mimi aina ya mambo mbalimbali.
Hadi sasa, hivyo nzuri.
Programu inaonekana kuwa sahihi.
>> Lakini hebu kukimbia tena.
Sema kitu: Gabe.
Wote haki.
Labda mimi hit nafasi bar au kitu funky.
Hebu kufanya hivyo tena.
Hivyo Zamyla.
Zamyla.
Mambo mbalimbali.
Hivyo ni nini kinaendelea?
>> Hivyo tuna mistari hizi mbili za code, GetString kuitwa mara mbili.
Na kisha, mimi nina tu kujaribu kulinganisha s na t.
Lakini nini kweli basi kinachoendelea?
Naam, handwriting yangu kuhusu kuwaueni mfano huu kwa kiasi fulani.
Na hebu kweli kutupa hii up juu ya hapa, kama vile.
>> Hivyo tuna line kama kamba s = GetString.
Hivyo kwamba ni tu kwanza kuvutia line kutoka mpango huo.
Lakini nini wakati huu wote imekuwa kinachoendelea chini ya Hood?
Naam, juu ya mkono wa kushoto upande ni kamba, ambayo ni baadhi ya aina ya kutofautiana,
na ni kuitwa s.
Hivyo Mimi najua kuwa hii ni kwa kutumia kumbukumbu, au RAM, katika kompyuta yangu kwa namna fulani.
Hivyo nina kwenda kwa abstractly kuteka kwamba kama mraba.
32 bits, ni zamu nje, lakini zaidi juu ya kwamba katika siku zijazo.
Na kisha, nini kinaendelea juu ya hapa?
>> Naam, GetString ni wazi anapata kamba kutoka kwa mtumiaji.
Na GetString got Zamyla au Gabe au Daven.
Basi hebu kuchagua kwanza kati ya hizo, ambayo ilikuwa Daven.
Hivyo kwa ufanisi, nini GetString got mimi katika kesi hiyo ya kwanza ilikuwa D-v-e-n.
Na kisha, nini mwingine alifanya ni nipe siri?
Watazamaji: [inaudible]
DAVID J. Malan: Yeah, / 0 au null tabia.
Hivyo ni ufanisi alinipa kamba.
Lakini sisi tayari kujua kutoka uliopita inaonekana kwamba string ni tu safu
ya wahusika, na ni terminated na hii sentinel tabia maalum, / 0.
>> Lakini kama hii ni kweli na hii ni mraba,
hii ni wazi Mstatili kubwa sana.
Na hakika, hii ni, Mimi kudai, bits 32 tu.
Na hii ni wazi zaidi ya 32 bits, kwa sababu hii pengine ni
nane pamoja na nane pamoja na nane pamoja na nane pamoja na nane,
kwa sababu tu ya ka katika ASCII.
Jinsi heck ni sisi kwenda na kifafa Daven katika hili sanduku kidogo hapa?
>> Naam, ni nini GetString kweli kufanya?
Naam, gridi ya taifa hii hapa inawakilisha kumbukumbu ya kompyuta yangu au RAM.
Basi hebu kiholela kusema kwamba kama kila moja ya haya inawakilisha Byte,
basi tunaweza kufikiri ya kila Byte kama kuwa mitaani,
kama 33 Oxford Street, au 34 Oxford Street, au 35 Oxford Street.
>> Hivyo tu kama nyumba na anwani na majengo na anwani,
hivyo kufanya ka ya mtu binafsi ya kumbukumbu na anwani au namba
kwamba kipekee kutambua yao.
Sasa, hii ni holela.
Lakini kushika ni rahisi, mimi nina kwenda kwa kutumia hexadecimal tu kwa mkataba huo,
lakini 0x ina maana chochote kuliko "hii ni hexadecimal."
na mimi nina kwenda kudai kwamba "D" mwisho hadi saa Byte One katika kumbukumbu.
>> I got kitu kingine kinachoendelea katika kumbukumbu, hivyo Daven got doa kwanza
katika Byte One.
Hii basi, ni kwenda kuwa 0x2.
Hii ni kwenda 0x3.
Hii ni kwenda kuwa 0x4.
Hii ni kwenda 0x5.
Hii ni kwenda kuwa 0x6.
>> Lakini mara moja kuanza kufikiri kuhusu nini matendo ya kompyuta
chini ya Hood, unaweza kuanza kudai
jinsi gani, baadhi ya miaka iliyopita, ingekuwa kutekelezwa C yenyewe.
GetString pengine ni nini returning-- kwa sababu
anahisi kama si kurudi Daven, per se,
kwa sababu yeye hakika si kwenda fit katika hii box-- kidogo
hivyo kile ni GetString pengine kurudi?
>> Watazamaji: [inaudible]
>> DAVID J. Malan: eneo la Daven.
Na imekuwa ni kufanya hivyo tangu wiki moja.
Nini GetString ni kweli kurudi ni si kamba, per se.
Hiyo ni moja ya nyeupe kidogo uongo.
Ni kurudi pepe ya kamba katika kumbukumbu, anwani ya kipekee.
Daven anaishi saa 33 Oxford Street.
Lakini zaidi kwa ufupi, Gavin anaishi katika 0x1, anwani Idadi Mmoja.
>> Basi nini anapata kuweka katika hii sanduku kidogo basi, kuwa wazi,
ni tu pepe ya kamba hiyo.
Hivyo muda wote huu, hii ina kinachoendelea.
Lakini nini hii mwanga katika sasa ni kwamba kama kila s ina
Idadi ya ndani yake, ambaye ni kuacha wewe, programu,
kutoka kuweka idadi yoyote katika yoyote kutofautiana na kuruka tu
kwa kuwa chunk ya kumbukumbu?
Na hakika, tutaweza kuona hiyo ni tishio wakati ujao.
>> Lakini kwa sasa, hii anahisi halitoshi.
Kama mimi kusema, kupata yangu kamba, wewe nipe Daven.
Lakini wewe si kweli nipe Daven.
Wote nipe ni Daven ya mahali.
Je, mimi kisha kujua kwa uhakika ambapo Daven huanza na ends--
hadithi ya kupata weird-- ambapo Daven huanza na kuishia,
na kisha, karibu kamba katika kumbukumbu kuanza?
>> Naam, kama wewe ni kuwapatia me mwanzo wa Daven,
kimsingi, jinsi gani mimi kujua ambapo mwisho wa jina lake ni?
Hiyo maalum null tabia, ambayo ni muhimu zaidi sasa
kama masharti chini ya kofia ni tu kutambuliwa
kipekee na makazi yao katika kumbukumbu.
Hivyo muda wote huu, hiyo ni nini imekuwa kinachoendelea.
>> Hivyo wakati sisi kuangalia sasa katika code hapa, kueleza
kama wewe ungekuwa mdudu katika line 26.
Kwa nini ni Zamyla na Zamyla tofauti?
Kwa nini ni Gabe na Gabe tofauti?
Yeah, katika nyuma.
>> Watazamaji: Wana anwani tofauti.
>> DAVID J. Malan: Tu kwa sababu wana anwani tofauti.
Kwa sababu wakati wewe piga GetString tena, ambayo mimi itabidi kufanya haraka hapa,
kama hii ni mstari wa pili, kamba t, kama mimi katika mpango huo,
sawa na mwingine wito kwa GetString.
wakati mwingine mimi wito GetString, mimi nina kwenda
kupata chunk tofauti ya kumbukumbu.
>> GetString ni kuruhusiwa kuuliza uendeshaji
mfumo kwa ajili ya kumbukumbu zaidi na zaidi.
Ni si kwenda kutumia tena huo ka sita kila wakati.
Ni kwenda kupata mpya chunk ya kumbukumbu, ambayo
ina maana t ni kwenda kupata baadhi thamani mengine zaidi ya hapa.
>> Hivyo wakati mimi kufanya s ni sawa na = t, wewe si kulinganisha
D dhidi ya huu na dhidi ya huu na V dhidi ya hii.
Wewe ni kulinganisha hii dhidi ya hii, ambayo
kusema ukweli ni pretty useful-- useless-- ni pretty haina maana, kwa sababu ambao kwa kweli
anayejali ambapo masharti ni katika kumbukumbu?
>> Na hakika, sisi si.
Na sisi siyo kwenda kuanza hasa kujali.
Tu kwa kiasi kwamba mende yanaweza kutokea na vitisho vya usalama yanaweza kutokea mapenzi
sisi kweli kuanza huduma kuhusu hili.
Basi hebu kurekebisha tatizo hili.
Zamu nje, wewe kurekebisha super tu.
>> Na hebu kweli, kabla ya mimi yanaonyesha kwamba tena, gani
nini kama katika CS50 darasani, na wewe alikuwa na kutekeleza
kulinganisha dhidi ya masharti mawili.
You wazi hawezi tu kutumia s ni sawa na = t.
Lakini tu mantiki, jinsi ingekuwa wewe kulinganisha kamba hii
dhidi ya kamba hii kwa kutumia C kanuni?
Yeah.
>> Watazamaji: Tu kufanya kwa kitanzi [inaudible]
DAVID J. Malan: Perfect.
Watazamaji: [inaudible]
DAVID J. Malan: Yeah.
Tu ya matumizi ya kwa kitanzi au a kitanzi wakati au chochote.
Lakini tu kuomba wazo msingi kwamba kama hii ni chunk ya kumbukumbu au safu
na hii ni, iterate juu ya wote wawili kwa wakati mmoja.
Na tu kulinganisha barua.
>> Na nimepata kuwa kidogo makini, kwa sababu wewe
hawataki kidole moja kwenda nyuma ya nyingine
kwa sababu kamba moja ni muda mrefu zaidi ya wengine.
Hivyo wewe ni kwenda unataka kuangalia kwa hii thamani maalum mwishoni, null.
Lakini kwa kweli ni, katika mwisho, kama rahisi kama hiyo.
Na kusema ukweli, hatuna haja ya reinvent gurudumu hiyo.
Hapa ni Version Barua.
Na kile Mimi nina kwenda kusema hapa ni kwamba badala ya kulinganisha s ni sawa na = t,
Mimi nina badala kwenda kusema, kama kamba kulinganisha s comma t sawa na = 0.
Sasa, ni nini string kulinganisha?
>> Ni zinageuka, ni kazi ambayo kuja na C, ambao lengo katika maisha
ni kulinganisha masharti mawili.
Na koroga kulinganisha, kama sisi kusoma wake mtu au nyaraka ukurasa au CS50
kumbukumbu, itakuwa tu kukuambia kwamba koroga
kulinganisha anarudi ama hasi idadi au idadi chanya au sifuri,
ambapo zero maana wao ni sawa.
>> Hivyo tu dhana tu.
Nini kinaweza maana kama kuchochea anarudi kulinganisha
thamani hasi au chanya thamani?
Watazamaji: Kubwa kuliko au chini ya.
DAVID J. Malan: Yeah, kubwa zaidi kuliko au chini ya.
Hivyo kama wewe alitaka kutatua nzima rundo ya masharti katika dictionary--
kama sisi hatimaye chini road-- kazi kamili kwa kutumia uwezekano,
kwa sababu ni kwenda kufanya hivyo kulinganisha ya masharti kwa ajili yenu, na kuwaambia
wewe gani huja kabla ya b, au gani b kuja kabla ya alphabetically.
Tunaweza kufanya hasa kwamba.
>> Na ilani mimi mtu mwingine kitu katika mfano huu.
Nini kingine imebadilika juu up katika kazi hii kuu?
Char *.
Na hii ni kwamba nyingine nyeupe uongo.
Muda wote huu, wakati wewe wameweza wamekuwa kuandika kamba,
tumekuwa siri rewriting kamba kama * Char ili Clang kweli
anaelewa wewe.
>> Kwa maneno mengine, katika CS50.h na kama tutaweza hatimaye kuona,
sisi alifanya kamba kisawe kuitwa hiyo ni kitu kimoja kama * Char.
Na kwa sasa, kujua tu kwamba *, Katika hali hii, angalau,
ina maana mahali.
>> anwani ya nini?
Naam, ukweli kwamba mimi alisema * Char, na si int au kuelea * *,
ina maana kwamba * Char ni pepe ya char.
Hivyo hii sanduku kidogo hapa, aka kamba, ni kweli ya aina * Char,
ambayo ni tu njia dhana ya kusema, katika sanduku hii kwenda ya mahali.
Na je anwani kwamba rejea?
Inavyoonekana, char.
>> Lakini tunaweza kabisa na int * na mambo mengine.
Lakini kwa sasa, * Char ni kweli zaidi moja kwa moja na moja ya riba.
Hivyo tatizo hili ni kwenda kupanda, ingawa, tena.
>> Tuseme mimi kufungua mpango huu.
Hebu angalia kama sasa tunaweza kutabiri nini mbaya na kanuni hii.
Hivyo katika mpango huu, nakala-0, mimi nina kwenda mbele na tena kuwaita
GetString na kuhifadhi thamani katika s.
>> Na kisha, kwa nini mimi kufanya hili, tu kama mawaidha kutoka wiki iliyopita?
Sisi alifanya kusema kwamba GetString wakati mwingine anarudi null.
Ina maana gani kama GetString anarudi null?
Kitu potoka.
Ni pengine ina maana string ni pia kubwa, nje ya kompyuta ya kumbukumbu.
Ni hutokea super, super, super mara chache, lakini inaweza kutokea.
Tunataka kuangalia kwa ajili yake, na kwamba wote sisi ni kufanya.
>> Kwa sababu tutaweza kuona sasa, kama huna kuanza kuangalia huongeza kwa ajili ya mambo
kama null, waweza kweli kuanza kwenda
kwa anwani katika kumbukumbu kwamba ni batili.
Na wewe ni kwenda kuanza inducing zaidi na zaidi segmentation makosa.
Au katika Mac au PC, tu kusababisha kompyuta hutegemea
au mpango wa kufungia, uwezekano.
>> Hivyo sasa, mimi kudai katika nakala-0.c, kwamba mimi naenda nakala masharti hayo kwa njia
ya mstari 28.
Na kisha, mimi nina kwenda kudai chini
hapa kwamba mimi nina kwenda kubadili mmoja wao.
>> Hivyo taarifa hii.
Mimi nina wito rafiki yetu ya zamani strlen.
Na tu kueleza katika lugha ya Kiingereza nini mstari huu 34 ni kufanya?
Je t bracket 0 kuwakilisha upande wa kushoto.
Yeah.
>> Watazamaji: tabia ya Kwanza ya t?
DAVID J. Malan: tabia ya Kwanza ya t.
Hiyo ni.
Tabia ya kwanza ya t, nataka hawawajui version uppercase
ya tabia ya kwanza katika t.
Hivyo hii ni pamoja na kuyafanyia barua ya kwanza.
Na kisha, jambo la mwisho sana mimi kufanya katika mpango huu ni mimi kudai hapa
awali, s, na hapa ni nakala, t.
>> Lakini kulingana na hadithi sisi tu aliiambia kuhusu nini kweli ni masharti,
ni nini line 28 kweli kufanya, na kile ni
mdudu kusababisha kwenda kuwa juu ya screen?
>> Hivyo kwanza, swali la kwanza, 28.
Je, ni kamba t = s kweli kufanya?
Kama tuna juu ya mkono wa kushoto upande hapa kamba t = s;
kwamba anatoa mimi sanduku moja hapa na sanduku moja hapa.
Na kudhani anwani hii ni 0x, hebu sema, 50 wakati huu, kiholela.
Je kamba t = s kufanya chini ya Hood?
>> Watazamaji: [inaudible]
>> DAVID J. Malan: Ni maduka kumbukumbu kushughulikia huko, ili 0x50 huenda huko.
Hivyo kama sasa, mimi kwenda kwanza tabia katika t na uppercase yake,
nini mimi kufanya kwa ufanisi kwa s?
Mimi nina kweli kufanya kitu kimoja, sawa?
Kwa sababu kama ya mitaani 0x50-- na ya haki, mimi hawana chumba mengi juu ya bodi hapa,
lakini kudhani kwamba hii ni 0x50 hapa chini, mahali fulani katika kumbukumbu ya kompyuta yangu.
>> Na mimi, kwa mfano, Gabe Herufi za chini katika hapa, kama hii.
Nami nimesema t bracket 0 anapata mtaji.
Naam, t bracket 0 ni barua ya kwanza katika t.
Hivyo g kidogo ni kwenda kuwa kubwa G. Lakini tatizo
ni, je, s pia uhakika na?
>> Watazamaji: moja.
>> DAVID J. Malan: kitu hicho hicho halisi.
Hivyo maelezo rahisi labda, hata kama syntax ni kidogo weird.
Basi hebu kufanya hili.
Tengeneza nakala-0 na kisha ./copy-0.
Sema kitu: Gabe.
Na kwa bahati mbaya, wote wawili wa yao sasa imekuwa mtaji,
lakini kwa kuwa msingi sababu kwamba sisi ni tu
sasa kukabiliana na anwani.
>> Hivyo ni jinsi gani sisi kuanza address-- no pun intended--
jinsi gani sisi kuanza kushughulikia tatizo hili hasa?
Naam, katika copy1.c, mambo yanakwenda kupata kidogo ngumu zaidi.
Lakini napenda kudai conceptually rahisi ufumbuzi.
>> Kwa bidii ili kupata katika mtazamo wa kwanza.
Si kwenda kuwa rahisi kwa mara ya kwanza wakati unapoandika nje, pengine,
lakini kama tatizo ni kwamba tu kufanya t = s tu
nakala ya mitaani, nini, tena kama naweza kuchukua juu ya wewe,
ni kwenda kuwa suluhisho kwa kweli kuiga kamba?
>> Watazamaji: Sisi itabidi pengine kutumia kitanzi tena.
>> DAVID J. Malan: Yeah.
Hivyo sisi ni kwenda haja ya kitanzi tena.
Na kwa sababu kama tunataka nakala kamba s katika string mwingine,
sisi pengine wanataka kufanya hivyo tabia kwa tabia.
Lakini tatizo ni, kama hii ni awali s,
sasa tunahitaji kuanza kupanga kugawa kumbukumbu kwa ajili ya t.
>> Kwa maneno mengine, hebu redraw mara ya mwisho hii moja.
Kama hii ni kamba s = GetString.
Na hebu kuweka hii up hapa, kama vile.
Hii ni GetString.
Na kisha, picha kwa ajili ya kitu kama kwamba ni kwenda kuwa kama kabla,
g-b-e- / 0.
Kwamba inaonekana kitu kidogo kama hii.
Na s hiyo, sisi wito huu 0x50, na kwamba kinaendelea kuwa 51, 52.
>> Hivyo hii ni 0x50.
Na kisha, mimi kufanya string t.
Katika kumbukumbu, hiyo ni kwenda tu kwa nipe mraba kidogo kama hii.
Basi nini hatua muhimu sasa?
Kama mimi nataka nakala s katika t, nini tupu gani sisi haja ya kujaza katika hapa?
Au je, sisi haja ya kufanya katika ngazi ya juu?
Yeah?
Mtu?
Yeah.
>> Watazamaji: Tunahitaji [inaudible].
DAVID J. Malan: Yeah, sisi haja ya kujaza tupu hii.
Siwezi nakala na kisha capitalize jina Gabe ya
mpaka mimi kuuliza mfumo wa uendeshaji kwa chunk nyingine ya kumbukumbu
kwamba angalau kama kubwa kama awali.
Hivyo kwamba zinatuacha na swali.
>> Je, mimi kuuliza mfumo wa uendeshaji si tu kwa ajili ya rahisi pointer-- kidogo
kama hii inaitwa, ya mitaani, pointer-- si
kwa rahisi sanduku kidogo kama hii inayoitwa kamba?
Je, mimi kuuliza uendeshaji mfumo kwa chunk kubwa ya kumbukumbu?
Hivi sasa, nimekuwa tu waliopata kuwa nyuma moja kwa moja kwa wito GetString.
Hivyo ni jinsi ni GetString hata kupata kumbukumbu yake?
>> Naam, ni zamu nje kwamba kuna kazi nyingine hii hapa
kwamba tutaweza sasa kuanza kutumia.
Sasa, hii inaonekana njia zaidi cryptic than-- na mimi ni mmoja tu ambaye anaweza kuona it--
mstari huu inaonekana njia zaidi cryptic kisha ni lazima katika mtazamo wa kwanza.
Lakini hebu tease ni mbali.
>> Kwa upande wa mkono wa kushoto, nina char * t.
Hivyo katika Kiingereza, hebu kuanza kuunda hukumu sahihi katika jargon ya kiufundi.
Hivyo hii ni kugawa variable ya aina * Char kuitwa t.
Sasa, je, hiyo kweli maana?
>> Naam, hiyo ina maana, je, Mimi naenda kuweka katika variable hii inaitwa t?
pepe ya char.
Hivyo hiyo ni rahisi, zaidi ya kuridhisha njia
ya kuelezea upande wa mkono wa kushoto.
Hivyo kwamba inajenga sanduku hili hapa tu.
Hivyo upande wa kulia, labda, ni kwenda
kutenga kuwa kubwa chunk ya kumbukumbu jinsi gani?
Basi hebu tease hii mbali.
>> Ni balaa katika mtazamo wa kwanza, lakini nini kinaendelea ndani ya hapa?
Kwanza, kuna malloc, ambayo ni inaonekana rafiki yetu mpya,
"Kumbukumbu kutenga."
Hivyo hii ni hoja kuwa alipita ndani yake, hivyo ni hoja pretty kubwa.
Basi hebu tease hii mbali.
>> strlen ya s, bila shaka, inawakilisha the--
Watazamaji: idadi ya wahusika.
DAVID J. Malan: Tu idadi ya wahusika katika s.
Hivyo urefu wa s, kamba ya awali.
Hivyo G-b-e.
Hivyo ni pengine nne katika kesi hii.
Kwa nini mimi kufanya 1 baada ya wito strlen ya s?
Watazamaji: [inaudible]
DAVID J. Malan: Kwa kuwa maalum null tabia.
Kama unaniuliza nini urefu wa Jina Gabe ya, Mimi kwenda kusema minne.
Chini ya Hood, ingawa, mimi haja kwamba Byte tano for null tabia.
Hivyo ndiyo sababu mimi nina kufanya 1.
>> Sasa tu katika kesi wewe ni mbio hii programu katika kompyuta nyingine kuliko, kusema,
CS50 appliance, ambapo ukubwa wa char
inaweza kuwa tofauti kutoka computer-- yangu mwenyewe
zinageuka kuwa siwezi kuwaita hii operator sizeof, tu kuuliza kompyuta,
nini ni ukubwa wa Char kwenye kompyuta hii?
>> Na kwa kuzidisha tano katika hii mfano na ukubwa wa Char, ambayo
juu ya kompyuta nyingi mapenzi tu kuwa moja, malloc
ni kwenda kutenga kwa ajili yangu hii kubwa chunk ya kumbukumbu juu ya hapa juu ya haki.
Na itakuja kwa return-- ni function-- hivyo ni
kwenda na kurudi kwangu nini?
Watazamaji: anwani?
DAVID J. Malan: anwani ya nini?
Watazamaji: Bila kumbukumbu ni zilizotengwa?
DAVID J. Malan: Bila kumbukumbu ni zilizotengwa.
Kwa hiyo mimi hawana wazo, kusema ukweli, ambapo hii ni kwenda kuishia.
Mimi nina kwenda kupendekeza kwamba ni kwenda kuishia katika 0x88.
Kabisa holela, lakini mahali fulani zaidi ya 0x50,
kwa sababu mfumo wa uendeshaji, nini Windows na Mac OS kufanya kwa ajili yangu, ni
kuhakikisha kwamba ni kutoa mimi chunks mbalimbali ya RAM.
>> Hivyo hii ni thamani ambapo hii chunk ya kumbukumbu inaweza kuishia.
Hivyo hii ni nini mwisho juu katika hapa, 0x88.
Hivyo sasa wazi, siwezi kuelewa kwamba hii si sawa na kama hii,
kwa sababu wao ni akizungumzia katika chunks mbalimbali ya kumbukumbu.
Hivyo kama mimi sasa kweli wanataka nakala hii katika, hebu kufanya ufumbuzi wako mapendekezo.
>> Hebu tu kwenda, kujenga kwa kitanzi, na kufanya t bracket i anapata s bracket i.
Kwa sababu sasa naweza kutumia hii safu-kama nukuu,
kwa sababu hata kama malloc sana generically kutenga mimi kumbukumbu,
kumbukumbu ni ka tu contiguous.
Byte, Byte, Byte, nyuma kwa nyuma kwa nyuma.
>> Naweza hakika kama programu kutibu kama safu, ambayo
ina maana naweza kutumia hii hatimaye ukoo nukuu ya baadhi tu ya mabano mraba.
>> Hivyo basi mimi pause huko, kwa sababu hii ni mengi wote kwa mara moja, hata
ingawa wazo msingi kwa kurejea ni kamba kwamba, muda wote huu,
ni si data mpya aina per se.
Ni tu kinachojulikana pointer, anwani ya tabia,
ambayo ina maana tu ni idadi kwamba kwa mkataba wa binadamu
sisi huwa na kuandika kama 0x kitu.
>> Lakini ni tu ya simu, kama 33 Oxford Street,
ambayo hufanyika kuwa CS jengo la mahali.
Maswali yoyote juu ya maelezo haya?
Yeah?
>> Watazamaji: Kwa nini sisi kuangalia kwa t sawa na null?
>> DAVID J. Malan: Kwa nini sisi kuangalia kwa t sawa na null?
Kama sisi kusoma documentation-- question-- kubwa kwa malloc,
ni kwenda kusema katika magazeti faini, wakati mwingine malloc ili kurudi null,
tu kama GetString.
Na hakika, GetString anarudi null kama, kwa upande wake, malloc anarudi null,
kwa sababu GetString anatumia malloc.
>> Na kwamba kinaweza kutokea ikiwa OS, Mac OS, Windows, chochote, ni tu
nje ya kumbukumbu kwa ajili yenu.
Hivyo kwamba ni nini kilichotokea huko.
>> Na napenda yatangaza jambo moja nyingine kwamba ili tu pigo akili yako
au kabisa kuwa mbali pia juu ya line.
Lakini ngoja kuvuta up sawa kwa kitanzi kwa kuiga,
ambayo wakati iliyopita, kukumbuka mara huu. t bracket i anapata s bracket i.
>> Nice na user-kirafiki.
Anahisi kama Wiki Barua tena.
Lakini toleo hili kweli unaweza kuwa kuandikwa upya kama hii, ambayo inaonekana cryptic.
Ni mbinu ya kuitwa pointer hesabu, anwani hesabu.
Lakini kwa nini gani kazi hii?
>> Sasa annoyingly, waandishi wa C aliamua kutumia
* Ishara kwa malengo tofauti.
Tumeona ni kutumika mara moja tayari, * Char, ambayo ina maana ya "nipe variable
ambayo inaenda vyenye pepe ya char. "
Hivyo * Char katika mazingira maana yake ni "nipe variable."
>> Kwa bahati mbaya, kama wewe kutumia * bila neno mbele yake, kama Char,
ni sasa inaitwa dereference operator.
Na tutaweza kuona zaidi ya hii kabla ya muda mrefu.
Lakini ni tu ina maana ya "kwenda huko."
Ni kama kusema, kama mtu mitupu yangu juu ya kipande cha karatasi "33 Oxford Street,"
kama mimi kufanya "* 33 Oxford Street," hiyo ina maana "Kwenda chini ya barabara ya jengo CS."
>> Hivyo * tu ina maana kwenda huko kama hakuna neno katika mbele yake.
Kwa hiyo kile ni t, kuwa wazi?
t ni pepe ya chunk ya kumbukumbu ambayo ilitolewa nyuma yangu.
s ni anwani ya nini, kuwa wazi, katika mfano tumekuwa kujadili,
ya lowercase Gabe?
s ni mahali of--
Watazamaji: kamba.
DAVID J. Malan: Of Gabe ya jina ya awali.
Hivyo ni pepe ya chunk hii ya kumbukumbu.
Hivyo kama mimi kusema t + i-- i, angalia, ni tu rafiki yetu ya zamani.
Ni tu index variable hiyo iterating kutoka sifuri juu ya up
kwa urefu wa kamba s.
Hivyo ni kwenda kuwa sifuri, basi moja, kisha mbili, kisha tatu, kisha nne.
Basi hebu kukusanyika hizi mpya Puzzle vipande Scratch-kama, kama wewe,
hata ingawa, tena, syntax ni mbali zaidi kuliko arcane Scratch.
Hivyo t ni anwani + i ni kwenda nipe
idadi, kwa sababu haya yote ni namba kwamba sisi tumekuwa kuchora kama hex.
Lakini wao ni idadi tu.
>> Hivyo kama pepe ya t sisi alisema mara 0x88, nini 0x88 pamoja na sifuri.
Hata kama wewe ni si vizuri na hex bado, kuchukua nadhani.
>> Watazamaji: ya awali.
>> DAVID J. Malan: Bado 0x88.
Kwa hiyo ni nini * 0x88 maana yake nini?
Ni maana yake, "kwenda huko" ambayo ina maana ya kwa ufanisi, "kuweka kidole yako hapa."
Na sasa juu ya upande wa kulia wa msemo huu, * na kisha katika parens,
s + i maana s, ambayo ni kushughulikia hadi hapa ya g kidogo.
s + 0 ni, bila shaka, s, s chochote ni.
>> Hivyo sasa, ni * s, ambayo tu kama * 33 Oxford Street ina maana kwenda mahali
s.
Hivyo hapa ni kidole hii, mkono wa kulia.
Basi nini mimi kwenda nakala katika nini?
kitu juu ya haki, ambayo ni Gabe, g kidogo hapa, katika hapa.
>> Na hivyo athari za kuwa iteration kwanza ya kitanzi,
kama wewe mapendekezo, ingawa inaonekana mambo ngumu zaidi kuliko kitu chochote
tumeona kabla, ni tu kusema kwenda hapa na nakala ya kwamba tabia hapa.
Ni kutoa ramani kwa sehemu zote.
>> Na tutaweza kuona mbali zaidi ya hili.
Lakini kwa sasa, matumaini ni tu kwa kuanzisha baadhi ya mawazo haya ya msingi.
Na hakika, hebu tuangalie moja mpango wa mwisho hapa,
na kisha claymation ahadi, ambayo itafanya kila kitu sawa.
Wote haki.
Hivyo basi mimi kufungua huko sisi kwenda up--.
Hivyo basi me-- tutaweza kurudi kwa picha hii kabla ya muda mrefu.
Hebu kufungua mfano hii ya mwisho hapa.
>> Hivyo hapa ni super, super mpango kwamba accomplishes
kitu katika maisha kwamba hana yafuatayo.
Ni kwanza anatangaza vigezo mbili, x na y, ambayo si namba wakati huu,
per se.
Wao ni si integers, per se.
Wao ni inaonekana int *.
Hivyo tu mtu yeyote, ni nini maana kama aina yako data, variable yako,
ni ya aina int * nyota?
Hiyo ni pepe ya int.
>> Hivyo nimekuwa na wazo ambapo ni bado.
Ni tu ina maana "kuweka, hatimaye, pepe ya int hapa. "
0x50, 0x88, popote ni katika kumbukumbu, pepe kwenda huko.
Na kwamba ni nini y ni kwenda kuwa, kama vile.
>> Kama mimi sasa kusema x = malloc (sizeof (int)), hii ni njia dhana ya kusema,
hey mfumo wa uendeshaji, kupitia malloc, nipe kumbukumbu ya kutosha kwa ukubwa
ya int, ambayo pengine ni kwenda kuwa bits 32 au ka nne.
>> Kwa hiyo ni nini malloc kurudi?
Malloc anarudi ya mahali.
Hivyo nini kinaendelea kupata kuhifadhiwa katika x?
anwani ya chunk ya kumbukumbu, ka nne, kwamba malloc
tu kupatikana kwa ajili yangu kwa kuuliza mfumo wa uendeshaji.
>> Sasa wakati huo huo, line nne hapa, * x = 42.
Tu kuwa wazi, nini kinaendelea chini huko?
Kwa upande wa mkono wa kushoto, * x.
hiyo ni kama * 33 Oxford Street.
Hivyo * x nini maana ya?
>> Watazamaji: Nenda.
>> DAVID J. Malan: Nenda kwa anwani hiyo.
Popote kwamba chunk ya kumbukumbu ni, kwenda kwa hilo.
Na kuweka nini kuna, ni wazi?
Watazamaji: 42.
DAVID J. Malan: 42.
Haki wote, * y, wazo moja.
Kwenda mahali katika y.
Weka namba 13 huko, lakini ni y wakati gani?
Watazamaji: Hakuna kumbukumbu kwa ajili ya y.
DAVID J. Malan: Kuna hakuna kumbukumbu kwa ajili ya y.
Hivyo nini y pengine zina, kama tumekuwa kusema?
>> Watazamaji: takataka.
>> DAVID J. Malan: Baadhi ya thamani ya takataka.
Sasa, thamani ya takataka ni bado idadi.
Ni bado unaweza kuwa na makosa kwa mahali.
Ni kana kwamba mtu scribbled kitu chini,
na mimi vibaya kama maana jengo baadhi chini ya mitaani.
Na kama wewe tu kujaribu kwenda katika baadhi ya jengo huna mwenyewe,
au baadhi chunk ya kumbukumbu una si imekuwa aliyopewa, mambo mabaya yanaweza kutokea.
Kompyuta inaweza ajali, au nyingine tabia undetermined inaweza kutokea.
>> Hivyo intro, basi, kwa Binky ni hii.
Mimi bado kumbuka, 20 baadhi ya miaka isiyo ya kawaida baadaye,
ambapo mimi nilikuwa wakati mimi hatimaye kueleweka kuyatumia.
>> Ambayo ni kusema, kama wewe kuondoka hapa katika dakika ya tatu
na nadhani hawana kuelewa kuyatumia, kutambua
Nami nimelikumbuka kwa ajili ya 20 miaka kwa sababu baadhi ya mambo
wakati na kwa nini ni hatimaye kuzamishwa katika, kukaa na mafundisho yangu
wenzake, Nishat Mehta katika nyuma ya Eliot Dining Hall.
Sasa, nimekuwa ikumbukwe hii kwa sababu hii ilikuwa
moja ya mada I, katika Hasa, Jihadi pamoja na.
Na kisha, hatimaye clicked, kama Mimi kuthubutu kusema mengi ya mada
hatimaye mapenzi.
Na sasa, kwa kufanya kujisikia wote furaha na wote zaidi kushawishi,
hebu tuangalie mwisho katika yetu dakika ya mwisho tatu hapa katika Binky,
kutoka kwa rafiki yetu, Nick Parlante kutoka Stanford.
>> [VIDEO avspelning]
>> -Hey, Binky.
Kuamka!
Ni wakati kwa pointer na furaha.
>> -Nini Hiyo?
Kujifunza kuhusu kuyatumia?
Oh, goody!
>> -Naam, Kwa kuanza, mimi nadhani sisi ni kwenda haja kuyatumia wanandoa.
>> -OK.
Kanuni hii kutenga kuyatumia mbili, ambayo inaweza kumweka kwa integers.
-OK.
Naam, naona kuyatumia mbili, lakini wao hawaonekani kuwa akizungumzia chochote.
>> -Kwamba Ni haki.
Awali, kuyatumia hawana uhakika na kitu chochote.
mambo wao kumweka kwa walioitwa pointees, na kuweka yao juu ya
hatua tofauti.
>> -Oh, Haki, haki.
Nilijua kwamba.
pointees ni tofauti.
Eri, hivyo ni jinsi gani kutenga pointee?
>> -OK.
Naam, kanuni hii kutenga mpya integer pointee,
na seti sehemu hii x kwa uhakika na hilo.
>> -Hey, Kwamba inaonekana bora.
Hivyo kufanya hivyo kufanya kitu fulani.
>> -OK.
Mimi itabidi dereference pointer x kwa kuhifadhi namba 42 katika pointee yake.
Kwa hila hii, mimi itabidi haja yangu Uchawi Wand ya Dereferencing.
>> -Wako Magic Wand ya Dereferencing?
That-- kwamba ni kubwa.
>> -Hii Ni nini code inaonekana kama.
Mimi itabidi kuanzisha idadi, na [POP]
>> -Hey, Kuangalia.
Kuna unaendelea.
>> -Basi Kufanya dereference juu ya x ifuatavyo arrow kupata pointee yake.
Katika kesi hiyo, duka 42 huko.
Hey kujaribu kutumia kwa kuhifadhi idadi 13 kupitia pointer nyingine, y.
>> -OK.
Mimi itabidi kwenda juu hapa y, na kupata namba 13 kuweka up.
Na kisha, kuchukua Wand ya Dereferencing na tu [BUZZ]
>> -Oh!
>> -Oh, Hey!
Kwamba hakuwa na kazi.
Sema, Binky, sidhani dereferencing y ni wazo nzuri, kwa sababu unajua,
kuanzisha pointee ni hatua tofauti.
Na sidhani sisi milele alifanya hivyo.
>> -Good Uhakika.
-Yeah.
Sisi zilizotengwa pointer y, lakini sisi kamwe kuweka kwa uhakika na pointee.
>> -Very Mwangalifu.
-Hey, Wewe ni kuangalia nzuri huko, Binky.
Je, unaweza kurekebisha hivyo kwamba pointi y kwa pointee sawa kama x?
>> -Sure.
Mimi itabidi kutumia yangu uchawi Wand Pointer ya Assignment.
>> -Je Kwamba kwenda kuwa tatizo kama kabla?
-Hakuna.
Hii haina kugusa pointees.
Ni tu mabadiliko pointer moja kwa uhakika na kitu kimoja kama mwingine.
>> -Oh, Naona.
Sasa y pointi kwenye sehemu moja kama x.
Hivyo kusubiri.
Sasa, y ni fasta.
Ina pointee.
Hivyo unaweza kujaribu Wand ya Dereferencing tena kwa kutuma 13 juu.
>> -Uh, OK.
Hapa unaendelea. [POP]
>> -Hey, Kuangalia kwamba.
Sasa dereferencing kazi juu y.
Na kwa sababu kuyatumia wanashiriki kwamba pointee moja, wao wote kuona 13.
-Yeah.
Kushiriki, chochote.
Hivyo ni sisi kwenda kubadili maeneo sasa?
>> Oh, kuangalia.
Sisi ni nje ya muda.
>> -But--
>> -Tu kumbuka tatu sheria pointer.
Idadi Mmoja, muundo wa msingi ni kwamba una pointer,
na inaelekeza juu ya pointee.
Lakini pointer na pointee ni tofauti,
na makosa ya kawaida ni kuanzisha pointer,
lakini kusahau kuwapa pointee.
>> Idadi Barua, pointer dereferencing kuanza saa pointer
na ifuatavyo mshale wake juu ya kupata pointee yake.
Kama sisi wote kujua, hii tu kazi kama kuna
pointee, ambayo aina ya anapata nyuma ya namba moja ya utawala.
>> Idadi ya Tatu, pointer zoezi inachukua pointer moja
na mabadiliko hayo kwa uhakika na pointee sawa kama pointer mwingine.
Kwa hiyo baada ya kazi, kuyatumia mbili
uhakika na pointee sawa.
Wakati mwingine, kwamba wito kugawana.
Na kwamba ni yote kuna hiyo, kwa kweli.
Bye-bye sasa.
[END video avspelning]
DAVID J. Malan: Hiyo ni kwa CS50.
Tutaona wewe wiki ijayo.