[Powered by Google Translate] [Wiki 4, Inaendelea]
[David J. Malan - Chuo Kikuu cha Harvard]
[Hii ni CS50. - CS50.TV]
>> Hii ni CS50, na hii ni mwisho wa wiki 4.
Hivyo baadhi ya habari njema na baadhi ya habari mbaya.
Hakuna hotuba ya Jumatatu, hakuna tatizo kuweka wiki ijayo. [Wanafunzi cheering]
Wewe si kwenda kama ambapo hii ni kwenda.
Lakini hatuwezi kuwa na hii badala Jumatano ijayo,
na pia kuna kila hotuba mtaala 1 Ijumaa ijayo Ijumaa ili tuweze kukaa njiani.
Lakini kila kitu itakuwa zingine kama kawaida, hivyo usiwe na wasiwasi.
>> Na kuhusiana na Quiz 0 nini tutaweza kufanya kuelekea mwisho wa wiki
ni baada ya juu cs50.net homepage kozi ya maelezo
ya aina gani ya matarajio unapaswa kuwa linapokuja quiz ya kwanza.
Kwa ujumla, itakuwa nyingi uchaguzi, kweli-uongo, short jibu, short matatizo coding.
Wewe hutaenda kutarajiwa kutekeleza sawa
ya tatizo kwamba ungependa kuona kwenye pset, ambayo una kompyuta
na debugger na kama, lakini kutakuwa na ndogo coding matatizo.
>> Na hakika, kiongozi bora ya kupata hisia ya kile CS50 Quizzes ni kama
ni kwenda cs50.net, kwenda kiungo Quizzes,
na unaweza kuona nyuma ya miaka kadhaa yenye thamani ya Quizzes.
Tu kutambua kwamba mitaala imekuwa daima imekuwa si sawa zaidi ya miaka.
Wakati mwingine sisi kuongeza, wakati mwingine Ondoa,
hivyo kama unaweza kuona baadhi ya mada juu ya moja ya wale kale Quizzes
kwamba hawana wazo nini ni kuzungumza juu, ni aidha kwamba hatukuwa kuifunika
au kwamba hatukuwa kuifunika.
Lakini kwa namna ya kitaalam, hii Jumapili, Jumatatu, Jumanne na
kama vile kozi nzima mapitio kikao siku ya Jumapili usiku -
muda na mahali kwa kuwa alitangaza juu ya homepage ya shaka -
wewe wote kuwa na fursa ya kupitia upya na wenzake kozi ya mafundisho
vifaa kwa ajili ya mwaka huu, katika sehemu na kama darasa kamili,
na wale itakuwa zingine kama kawaida vilevile.
>> Wote haki. Hivyo bila wasiwasi zaidi, moja ya maoni juu ya kupita / kushindwa na kuongeza / tone.
Unaweza tumeona maelezo yangu jana usiku, na hii ni kweli baadhi tu ya ziada reassurance
kwamba kama wewe ni miongoni mwa wale hasa chini ya starehe au mahali fulani katika kati ya
na wewe ni hisia tu kidogo katika juu ya kichwa yako,
kutambua kwamba ni kweli kabisa ya kawaida, na kuna kutosha msaada muundo katika mahali,
moja ambayo masaa ya ofisi walikuwa dhamira ya kuboresha zaidi wote kwa usiku barua pepe yangu ya mwisho,
na kutambua pia kwamba chaguo kama kupita / kushindwa kwa darasa kama hili
kweli ni maana kama utaratibu wa kuchukua makali mbali bila shaka kama hii,
ili tena kama wewe ni matumizi ya wale 10, 15, masaa 20
tu kujaribu kupata baadhi pset kufanya kazi na wewe kujua wewe ni 90-95% ya njia pale
lakini huwezi kupata baadhi mdudu damn, katika kupita / kushindwa mfano kwamba ni aina ya sawa.
>> Wazo ni kwamba, kwa utaratibu kwamba unaweza kisha kwenda kuzingatia psets yako mengine
au kulala au chochote ni kwamba unataka kuzingatia.
Hivyo kutambua kwamba una mpaka Jumanne hii kuja - kitaalam Jumatatu 5,
lakini ni likizo, hivyo hii Jumanne ijayo - kubadili kutoka kupita / kushindwa kinyume graded au kinyume chake.
Na kama wewe ni kweli juu ya poromoko na ni mawazo ya kuacha kabisa,
tafadhali catch me baada ya hotuba au kuacha mimi kumbuka.
Tunatarajia upendo na mazungumzo angalau kabla nikawaage.
Wote haki. Hivyo sisi kuanza kuchukua magurudumu mafunzo mbali wakati wa mwisho.
Hasa, sisi ililenga katika kamba.
Kamba ni kitu ambacho alisema katika maktaba CS50,
hasa katika kuwa faili inayoitwa cs50.h ambayo tutaweza kuanza kuangalia wiki hii na ijayo.
Lakini string ni kweli tu kurahisisha kitu
hiyo kidogo zaidi arcanely kama ilivyoelezwa * Char.
Char tuko familiar with. Ni tu tabia moja.
Lakini * kama ya Jumatatu ulionyehsa nini? >> [Mwanafunzi] pointer.
pointer. Na nini pointer? >> [Mwanafunzi] anuani.
>> Ni kama anuani, mahali katika kumbukumbu.
Nini anwani au mahali au kumbukumbu?
Tena, sisi sote tuna Laptops na GIG au gigabytes 2 ya RAM zaidi uwezekano siku hizi,
na hiyo ina maana una ka bilioni au bilioni 2 thamani ya kumbukumbu.
Na ni kweli haina jambo gani kimwili inaonekana kama,
lakini kuchukua imani kwamba unaweza kuzihesabu yote ya ka mtu kuwa mbali yako mwenyewe ana -
hii ni Byte 0, hii ni Byte 1, hii ni Byte bilioni 2 -
na kwamba ni nini hasa kompyuta gani.
Wakati wewe kutenga nafasi kwa ajili ya tabia moja, kwa mfano,
ni wazi ana kuishi mahali fulani katika kumbukumbu ya kompyuta yako,
na labda ni katika idadi Byte 12,345,
na kwamba ni mahali fulani hapa juu katika kumbukumbu ya kompyuta yako.
Na anuani ya basi ya tabia ya kuwa ni 12,345.
>> Sasa, katika wiki 0 kupitia sasa hivi sasa, sisi si kweli kumjali
ambapo katika mambo kumbukumbu ni kuhifadhiwa kwa sababu sisi kawaida kutumia ishara,
vigezo, na arrays kwa kweli kupata katika takwimu zetu.
Lakini kama ya Jumatatu na zaidi wote leo, wewe sasa kwenda na
uwezo wote zaidi expressive na mipango kuandika
kwa kweli kuendesha kumbukumbu ya kompyuta hata hivyo unaweza kuona inafaa,
kwa wote madhumuni mazuri na mabaya,
Bugs kuwa matokeo ya kawaida sana katika hatua hii ya kujifunza mambo haya.
Lakini ni nini kweli maana ya kuwa * Char?
Hebu kwenda mbele nyuma - na tutaweza kurudi Binky kama alivyoahidi leo.
Hebu kwenda mfano rahisi hapa.
Hebu kuokoa faili hii kama compare.c, na napenda tu kupata baadhi ya kanuni template hapa
hivyo ni pamoja na stdio.h, napenda pia kutoa mwenyewe ni pamoja cs50.h. Mimi itabidi zoom katika huko.
Napenda kuanza kuandika int kuu, kuu (utupu), na sasa nataka kufanya kitu kama hii:
printf ("Nipe string:") na kisha nitatumia string s anapata GetString
kupata kamba kutoka kwa mtumiaji, basi mimi naenda kuuliza mtumiaji kwa ajili ya mtu mwingine.
("Nipe mwingine string:") na mimi nina kwenda kuuliza yao kupitia GetString kupata hiyo.
Mimi nitakuita ni t sababu t inakuja baada ya s na s ni jina nzuri kwa kamba kama ni pretty generic.
Hivyo GetString, na sasa mimi nataka tu kufanya kuangalia sanity na mimi nina kwenda kusema
kama (s == t) basi Mimi tu kwenda kuwaambia mtumiaji printf ("Wewe typed kitu kimoja \ n!");
mwingine nitakacho magazeti nje kitu kama ("Wewe typed kitu tofauti \! n")
au chochote hukumu itakuwa. Hivyo kitu kama hicho.
Kisha kama kawaida, mimi itabidi kurudi 0 ambayo tu akabashiri kwamba hakuna kitu kibaya kilichotokea,
na mimi nina kwenda mbele na kukusanya na kukimbia mpango huu.
>> Lakini Jumatatu sisi mbio katika mpango huu,
na kweli waliambiwa kwamba HELLO si HELLO na kwaheri si kwaheri.
tabia tuliona ilikuwa ni kidogo zaidi kama hii.
Hebu kwenda katika chanzo saraka yangu, zoom katika hapa, na hebu kufanya kufanya kulinganisha.
Imekusanywa sawa. Hebu kukimbia kulinganisha. Nipe string: HELLO.
Nipe mwingine string: HELLO.
Uliyoandika kitu tofauti!
Vizuri, basi mimi kujaribu kitu rahisi kama 50, 50. Uliyoandika kitu tofauti!
hi, hi. Hivyo ni wazi, kuna kitu kinachoendelea hapa.
Lakini kile ambacho kilikuwa maelezo kwa nini?
Inavyoonekana, mstari 12 ni kabisa dysfunctional.
Nini tatizo la msingi hapa? Yeah. >> [Mwanafunzi] Ni kulinganisha anwani.
Yeah, kwa uhakika. Ni kweli kulinganisha anwani
ambayo HELLO na HELLO ni kuhifadhiwa.
Siyo kulinganisha barua HELLO tena na tena,
kwa sababu ni nini hasa kilichotokea, wakati huu wote tumekuwa kutumia GetString -
Ubao huu ni tena kumbukumbu ya kompyuta yetu,
na hebu sema mimi wito GetString baada ya kutangaza s kutofautiana.
Nini kumbukumbu yangu kuangalia kama?
Hebu kiholela kusema kwamba s inaonekana kama hii. Ni mraba.
Na pretty much yoyote wakati nimekuwa inayotolewa kipande cha kumbukumbu kwenye screen
kama ni 32 bits Nimekuwa kuchora mraba kama hii kwa sababu kwa kweli katika appliance,
pointer, anuani, ni 32 bits. Ni sawa kama int.
Hiyo inaweza kutofautiana kulingana na mfumo wa kompyuta.
Wale ambao ni vaguely familiar na ukweli kwamba Mac au PC yako ni 64 bits,
kwamba kweli inaashiria kuwa kompyuta yako kwa kutumia kuyatumia 64-bit,
64-bit anwani, na kati ya upsides ya kwamba ni kompyuta yako
unaweza kuwa na mengi zaidi kuliko RAM yesteryear.
Long hadithi fupi, nyuma katika siku wakati kompyuta tu kutumika bits 32
kuwakilisha anwani, namba kubwa ya ka unaweza kuwakilisha
katika kesi hiyo ilikuwa nini kama una bits 32?
Hivyo bilioni 4, haki, kwa sababu 2-32 ni bilioni 4.
Idadi hii imekuwa mara kwa mara katika shaka.
>> Hivyo kama wewe tu bits 32, idadi kubwa zaidi unaweza kuhesabu kwa ni takribani bilioni 4.
Lakini hiyo ilikuwa kiwango cha juu ya msingi ya kompyuta hadi miaka michache iliyopita
kwa sababu kama unaweza tu kuhesabu kama juu kama bilioni 4,
haijalishi kama wewe kununua 8 gigabytes ya RAM au hata gigabytes 5 ya RAM;
huwezi kuhesabu kwamba juu, hivyo ilikuwa ya maana.
Unaweza tu kupata kwanza gigabytes 3 au 4 ya kumbukumbu ya kompyuta yako.
Hiyo ni chini ya suala sasa, na unaweza kununua pros MacBook na Dells
na 8 gigabytes ya RAM au hata zaidi siku hizi.
Lakini kama mimi kutenga urahisi kabisa katika mpango huu pointer, pointer kuitwa s,
inaweza kuangalia kama hii kwenye screen kwa sababu kwa kweli tunahitaji peel nyuma safu hii.
Naendelea kusema kamba, lakini kama ya Jumatatu, kamba ni kweli Char *,
anuani ya tabia fulani.
Basi hebu kuchukua gurudumu mafunzo mbali hata kama tutaweza kuendelea kutumia GetString kwa sasa.
Hivyo nimekuwa alitangaza, na hii ni chunk ya kumbukumbu, bits 32.
Nini katika hapa katika kumbukumbu na default? >> [Inaudible mwanafunzi majibu]
Nini hiyo? >> [Mwanafunzi] Takataka. >> Takataka. Hasa.
Kama programu wala kuweka thamani katika variable, ambaye anajua ni nini?
Wakati mwingine unaweza kupata bahati na ni 0, ambayo ni aina ya thamani nzuri, safi default,
lakini kama tuliona Jumatatu, wakati mwingine ni kamili nonsense,
baadhi kubwa kweli kweli chanya au hasi idadi kwamba alikuja kutoka wapi?
Yeah. >> [Mwanafunzi] kazi kabla. >> Yeah.
>> Mara nyingi kazi kwamba got kuitwa mbele kwa sababu kumbuka,
kama wewe piga kazi katika kumbukumbu, wao kuchukua zaidi na nafasi zaidi kutoka chini kwenda juu,
na haraka kama anarudi kazi, kumbukumbu kwamba anapata reused
kwa guy ijayo kwamba anapata kuitwa, ambaye ni kutumia kipande yako hiyo ya kumbukumbu.
Na kama wewe wameweza takataka kushoto huko, uliopita maadili,
sisi ili makosa s kama baada ya baadhi ya thamani wakati kwa kweli sisi si kuweka chochote huko.
Hivyo RAM wetu katika hatua hii inaonekana kama hii.
Sasa upande wa kulia wa mstari 7 tuko wito GetString,
ambayo tumekuwa kufanya sasa kwa wiki, lakini kile GetString kweli kufanya?
GetString zilizoandikwa na wafanyakazi CS50 ni kidogo akili
kwa kuwa haraka kama mtumiaji kuanza kuandika funguo na hits Ingiza,
GetString takwimu nje jinsi wengi keystrokes alifanya hit user,
ngapi wahusika nahitaji kutenga RAM kwa.
Na pale ambapo RAM kwamba anakuja kutoka, ambaye anajua?
Ni mahali fulani katika gigabytes kompyuta yako 2 au whatnot wa kumbukumbu.
Lakini hebu tuseme kwamba kompyuta kupatikana nafasi kwa neno HELLO haki hapa.
neno mimi typed ilikuwa H-E-L-L-O.
Na kama sisi kuteka hii kama mlolongo wa wahusika, tupate kuteka ni kama hii.
Lakini mimi haja ya kufanya kitu 1 ziada. Kile ambacho ni mali ya mwisho wa kamba yoyote katika C?
tabia null, ambayo sisi kuandika kama \ 0.
Ni kitaalam 0 idadi, lakini backslash hufanya wazi wote
kwamba hii ni halisi idadi 0, 0 integer;
siyo, kwa mfano 0, quote-unquote kwamba unaweza aina katika keyboard.
Hivyo hii ni HELLO.
>> Na nini sisi kusema juu ya Jumatatu kwamba kazi kama GetString
ni kweli kurudi wiki haya yote?
Ni si kurudi string per se sababu kwamba kweli haina maana kuwa
kwa sababu masharti hazipo. Wao ni aina ya upotoshaji katika maktaba CS50.
Je, ni kweli kamba, zaidi kitaalam? >> [Mwanafunzi] Ni tabia ya kwanza.
Hasa. Ni rahisi kabisa anuani ya tabia ya kwanza kwamba mtumiaji typed in
Hivyo kama neno langu HELLO mwisho ni juu katika 123 Byte idadi na kisha saa idadi Byte 124,
125, 126, na kadhalika, kama mimi tu idadi bytes yangu kutoka 0 juu juu,
kile kwa kweli ni GetString kurudi ni literally 123 idadi.
Basi nini anapata kuweka katika s ni 123 idadi, si H barua, si neno HELLO,
kabisa tu anuani ya saa ambayo naweza kupata barua ya kwanza ya HELLO.
Lakini hiyo haina kuonekana kama kutosha. Nilimuuliza wewe kwa kamba, si tabia.
Hivyo ni jinsi gani sisi au kompyuta kujua kwamba ELLO aina ya kuja pamoja na H?
Nini aina ya mkataba tuna? Yeah.
[Mwanafunzi] Inalifanya kuwaambia yenyewe kupata wahusika baadhi zaidi. >> Hasa.
>> Kuna hii mkataba binadamu-kompyuta ambapo wakati wewe ni kushughulika na masharti,
inayojulikana sasa kama nyota Char, wewe tu kuwa na takwimu kutoka
ambapo mwisho wa kila uzi katika maisha ni kwa kweli tu iterating juu yake na kwa kitanzi,
kitanzi wakati, na kwa chochote, hivyo kwamba wakati wewe kupata mwisho wa kamba
sasa unaweza infer kutoka kwamba, oh, neno zima lilikuwa HELLO.
Wale wa wewe na uzoefu kabla ya programu wapate kujua katika Java
unaweza kuwaita tu urefu. na katika lugha nyingine unaweza kupiga urefu au sawa.
Hiyo ni kwa sababu katika mengi ya lugha, hasa mambo kuitwa kitu-oriented lugha,
urefu wa kitu ni aina ya ndani ya zimegawanywa ya kipande cha data yenyewe,
kiasi kama sisi Vitambulisho zimegawanywa na majina na nyumba ndani ya mwanafunzi Jumatatu.
Lakini C ni ya chini sana ngazi. Hakuna vitu au madarasa, kama wewe Nimesikia sheria hizo kabla.
Wote una kweli ni kumbukumbu anwani.
Hivyo hii ni aina ya njia ya zamani-fashioned ya anayewakilisha data kuvutia miundo.
Una thamani ya kuanza kama anuani ya tabia ya kwanza
na kisha baadhi tu mkataba holela kwamba kila mtu anakubaliana na kufuata.
Hivyo ni jinsi gani string urefu kutekelezwa, gani sisi kupendekeza?
Strlen, strlen, ambayo baadhi yenu sasa kutumika mara chache. Ni pretty rahisi, sawa?
Ni kama mistari 2 ya maadili.
Ni pretty much kitanzi kwa wa aina fulani, labda kwa variable ya ziada ya mitaa.
Lakini strlen tu ana kuchukua pointer na kisha kuanza kuangalia kwa \ 0.
>> Na haraka kama huikuta, inaweza kurudi idadi ya jumla ya hatua ya kuwa ni kuchukuliwa katika kamba hiyo.
Hivyo tunaweza infer kutoka hii yale yanayoendelea ijayo.
Tuseme basi mimi kutangaza t kama nimepata kufanyika katika mstari wa 10.
Hii ni baadhi ya thamani ya takataka. Nani anajua kwa mara ya kwanza?
Lakini upande wa kulia wa mstari wa 10 mimi nina wito GetString tena.
Nani anajua ambapo hii inaishia?
Hebu kiholela kusema kwamba mfumo wa uendeshaji kupatikana chumba kwa njia zaidi ya hapa.
Mimi kutokea kwa bahati aina ya H-E-L-L-O tena,
na hivyo tunaweza kuchora moja aina ya picha.
Lakini ukweli kwamba nimekuwa redrawn picha hii ni makusudi
sababu ni tofauti HELLO kuliko huu.
Hivyo hapa kuwa hii inaweza kuwa mahali 456, hii ni 457, na kadhalika.
Basi nini anapata kuweka ambapo alama swali moja mara?
Katika kesi hii 456.
Sisi ni kuokota namba hizi kiholela kwa sababu kwa kweli baada ya leo
tuko hataenda kujali sana kuhusu nini anwani ya kitu chochote ni.
Wote sisi huduma ya juu ni kwamba tunaweza kufikiri anuani ya baadhi kipande cha data kama HELLO.
>> Hivyo kweli nini watu wengi katika sayansi ya kompyuta wakati wakizungumza kuhusu anwani kumbukumbu
na kuzungumza juu ya kuyatumia hasa,
badala ya bother kuhesabia 123 - anayejali ambapo mambo haya kwa kweli ni,
sisi tu kujua kwamba ni katika anuani baadhi namba -
sisi kurahisisha dunia na kusema tu kwamba s ni akizungumzia tabia ya kuwa
na t akizungumzia tabia hiyo.
Na ukweli kwamba ni mshale ni kabisa kukusudia
sababu halisi sasa s ananyoosha katika H na t akionyesha H nyingine
kwa sababu mwisho wa siku, haijalishi nini anwani ni,
lakini haina suala kwamba tuna uwezo wa kueleza kwamba anuani na baadhi ya kipande cha code.
Sisi si kweli manipulated anwani hizi bado tu
hivyo tutaweza kuona ambapo tunaweza interject na aina ya kufanya mambo kwa kuyatumia,
lakini kwa sasa katika mstari 12 literally nini maadili ni sisi kulinganisha
kulingana na hadithi hii katika mstari wa 12?
Sisi ni kusema ni 123 sawa sawa na 456? Na kwamba ni dhahiri si kesi.
Na hata conceptually, pointer hii ni dhahiri si sawa kama hii
kwa sababu wewe kuitwa GetString mara mbili, na GetString haina kujaribu kuwa super wajanja,
haina kujaribu kutambua, oh, uliyoandika HELLO dakika 5 iliyopita;
nikupe pointer sawa niliokupa kabla,
tu kutenga fungu jipya la kumbukumbu kila wakati simu yake.
>> Hivyo ni jinsi gani sisi kurekebisha tatizo hili?
Kama ngazi nataka kulinganisha masharti HELLO na HELLO -
Mimi sijali kuhusu kuyatumia - jinsi gani mimi kwenda kuhusu kujibu swali,
hakuwa mtumiaji aina kitu kimoja? Nini lazima hapa? Yeah.
[Mwanafunzi] Matumizi ya kazi. >> Naweza kutumia kazi nje ya boksi.
Naweza kutumia kazi kuitwa strcmp, s-t-r-c-m-p,
tu toleo abbreviated ya kusema string kulinganisha.
Na kama sisi kwenda katika, kwa mfano, kulinganisha 2, ambayo ni kati ya takrima ya leo,
Mimi kufanya hasa kwamba.
Mimi naendelea kila kitu kingine huo kutoka mstari 1 juu ya chini 26 au hivyo,
na sasa taarifa sehemu hii imebadilika kidogo tu.
Hebu kupuuza mstari 28 kwa wakati na kuzingatia tu juu ya hili.
Nini sisi kusema kwamba Jumatatu kulinganisha str gani?
Hushughulikia mchakato wa kuchukua kuyatumia 2, s na t katika kesi hii,
aina ya karibu kuweka kidole chake juu ya barua hizo 2,
na nini ni lazima kufanya ni kitu kama kitanzi wakati au kwa kitanzi,
na anasema ni hizo hizo? Kama ni hivyo, ni hatua ya vidole au kuyatumia mbele.
Je, haya sawa, hawa, hizi, sawa
hizi, hawa? Na ooh, mimi nina katika mwisho wa kamba saa mbili s na t.
Sijayaona utata wowote. Ndiyo, haya masharti ni sawa.
Na nini str kulinganisha kurudi ikiwa 2 masharti ni sawa, inaonekana? Zero.
Hivyo 0 ni nzuri katika kesi hii kwa sababu kama hiyo anarudi -1 au 1,
hiyo ina maana kwamba tu kinachotokea kuja kabla ya t alphabetically au baada ya t.
Na ni kwa nini kwamba kuwa na manufaa kwa kuwa na kazi anayewaambia ambayo string huja kabla ya
au baada ya katika kamusi?
[Mwanafunzi] Searching. >> Searching na kuchagua.
>> Hivyo unaweza kufanya mambo kama tafuta binary au aina Bubble au kuunganisha aina
ambapo una kulinganisha vitu.
Hivi sasa tumekuwa aina ya kukata pembe na baadhi tu aliyesema kuhusu uchambuaji
katika mazingira ya idadi kwa sababu ni nzuri na rahisi kwa majadiliano juu,
lakini unaweza shaka kulinganisha masharti, apple na ndizi,
kwa sababu kama apple inajulikana kuja kabla ya ndizi, vile vile,
unaweza hoja masharti kuzunguka katika kumbukumbu tu kama alivyofanya kwa Rob aina kuunganisha katika video
na sisi tulikuwa hapa juu ya hatua kwa uteuzi aina, aina insertion, na aina Bubble.
Hivyo ambapo mwingine tunaweza kuchukua hii? Hebu jaribu hii.
Aina Hebu ya kusahau kwamba somo kwa wakati na kujaribu sasa na nakala 1.c kufanya yafuatayo.
Katika mstari 21 mimi kusema magazeti kitu,
basi nina kupata kamba kutoka kwa mtumiaji,
basi mimi nina kuangalia hii.
Sisi si kweli wamezipata katika tabia hii bado, lakini hebu sasa kufanya hili.
Hebu kweli peel nyuma safu hii. Hii ni kweli Char *. Guy huu ni kweli Char *.
Hivyo ni nini maana ya kuwa kuangalia kama s == null?
Ni zinageuka kuwa wakati wewe piga kazi kama GetString
au zaidi kwa ujumla tu kuuliza kompyuta kutoa baadhi ya kumbukumbu,
kitu inaweza kwenda vibaya.
Unaweza kuwa mambo na kuuliza kompyuta kwa terabyte ya kumbukumbu
kwa kuuliza kwa matrilioni ya ka ya kumbukumbu ya kwamba tu hazipo katika kompyuta,
lakini GetString na kazi nyingine haja ya baadhi ya njia ya kunguruma katika wewe
kama wameweza aliuliza kwa sana.
Na njia GetString gani hii ni kama una aliuliza kwa zaidi ya kumbukumbu
kuliko inapatikana katika kompyuta, hata kama kwamba ni super, super Asili uwezekano
kwa sababu hakuna hata mmoja wetu ni kwenda andika herufi trilioni na kisha hit Enter,
lakini chini uwezekano ingawa inaweza kuwa, mimi bado wanataka kuangalia kwa ajili yake tu katika kesi,
na thamani maalum kwamba GetString, jibu, na kazi nyingine anarudi
kama kitu amekwenda vibaya ni null katika kofia wote.
>> Na ni nini null? Null tu hivyo hutokea kuwakilisha pointer. Ni kumbukumbu ya anuani 0.
dunia aliamua kwamba kiholela, kama hii ni kumbukumbu ya kompyuta yangu - unajua nini? -
tunakwenda kuiba tu 1 Byte ya kumbukumbu kila kompyuta, na hii ni mahali 0.
Sisi ni kwenda kuwapa jina la utani la null, na tunakwenda ahadi
kuwa sisi kamwe kweli kuweka data halisi kuna
kwa sababu sisi tu kiholela haja thamani maalum, 0, aka null,
ili tuweze yell katika watumiaji kama kitu fulani kitaenda vibaya.
Vinginevyo unaweza kujua haina maana 0 kuweka kitu hapa
au haina maana kitu potoka?
Tuna kwa wote wanakubaliana kwamba null chochote njia zilizorudishwa,
anuani hakuna halisi zilizorudishwa.
Sasa, hapa mimi tu kupitisha mkataba wangu binadamu ya mimi kurudi kutoka 1 kuu
kama kitu fulani kitaenda vibaya.
Hiyo ni kwa sababu kurudi kuu ya mkataba ni kurudi 0 ikiwa nzuri,
1 au baadhi thamani mengine ikiwa mbaya.
Lakini GetString na kazi yoyote ambayo inahusika katika anarudi kumbukumbu null kama kitu fulani kitaenda vibaya.
>> Sawa. Hivyo kwa bahati mbaya, line 27, super rahisi ingawa ni, kabisa inashindwa nakala kamba.
Kwa nini? Tunaweza kuona hii kama ifuatavyo.
Mimi nina wakidai katika mstari 27 kuwa maamuzi nakala ya s na kuiita t.
Hivyo Mimi si kuuliza mtumiaji kwa masharti 2 wakati huu; Mimi tu kusema thamani katika s
atafukuzwa katika t pia.
Hivyo sasa tu kuonyesha jinsi hii ni kuvunjika, katika mstari 29 kuendelea je, Mimi kufanya?
Kwanza mimi nina kuangalia kama urefu wa t, ni mkubwa kuliko 0.
Kuna baadhi ya kamba huko. user typed kitu in
Nini ni mstari 32 kufanya, inaonekana?
[Inaudible mwanafunzi majibu] >> Haki. Unaweza aina ya infer kutoka kile alisema ni kufanya.
Lakini kitaalam, ni nini hii kufanya? t [0] inawakilisha nini?
[Mwanafunzi] tabia 0. >> [Malan] tabia 0.
Au, zaidi ya binadamu-kama, tabia ya kwanza katika t, chochote kile, H labda katika kesi hii.
Na toupper anafanya nini anasema. Ni capitalizes tabia 0 wa t na ni mabadiliko hayo.
Hivyo hii ina maana kuchukua tabia ya t 0, kufanya hivyo uppercase,
na kuiweka nyuma katika eneo hilo hilo.
Hivyo kama ninapoandika hujambo katika lowercase, hii inapaswa kubadilika h lowercase kwa H. mtaji
Lakini tatizo ni kwamba katika mistari 35 na 36 mimi nina nini kuhusu kufanya ni kuchapa nje kwa ajili yetu s na t.
Na nini hunch yako?
Hivi mimi kweli kwenda kuona kama mimi typed katika hujambo katika lowercase wote?
Nini kinaendelea kupata kuchapishwa? >> [Inaudible mwanafunzi majibu] >> gani hiyo?
[Mwanafunzi] Big H na wengine wadogo. >> H kubwa na ndogo kwa ajili ya mapumziko ambayo, s au t?
[Mwanafunzi] Wote. >> Wote. Hasa. Basi hebu angalia nini kinaendelea hapa.
>> Hebu kwenda mbele na kukusanya hii. Hii ni copy1, hivyo kufanya copy1. Wote haki.
Zoom in Hebu kwenda mbele na kukimbia copy1, Ingieni, Sema kitu: hello katika lowercase.
Ni mtaji nakala, lakini inaonekana kama mtaji awali vizuri,
sababu kile kinachotokea sasa katika hadithi hii?
Katika mstari 27 mimi si kweli wanaonekana kuwa kuiga kamba,
lakini hata ingawa unaweza kuwa na matumaini kwamba intuitively kuwa kesi,
kama unafikiri kuhusu picha hii, kweli yale nimefanya?
Nusu ya picha ni sawa.
Basi hebu nirudishe katika muda ili t bado haina zipo katika hadithi.
S unaweza kuwepo katika hadithi, lakini hebu Herufi za chini hujambo wakati huu.
Hivyo basi mimi kurekebisha kile Mimi kweli typed in
Katika kesi hii hapa tuna h-e-l-l-o.
Tutaweza kuteka ni kama mlolongo wa wahusika, kuweka separator mistari yangu hapa na yangu \ 0.
Hivyo hii ni mahali ambapo sisi ni haraka kama mstari 1 24 kupitia-ish, kutoa au kuchukua, haijanyonga.
Hii ni picha ya kumbukumbu yangu.
Wakati mimi kupata mstari 27, nini kitatokea?
Tu kama kabla, mimi kupata pointer, ambayo mimi itabidi kuteka kama mraba huu.
Ni wito t. Na nini thamani yake na default? Nani anajua? Baadhi ya thamani ya takataka.
>> Hivyo mimi itabidi abstract kwamba mbali kama alama swali.
Na haraka kama upande wa kulia ya mstari 27 executes, je, Mimi kuweka ndani ya t?
kitu kimoja kwamba katika s.
Hivyo kama sisi kwa muda kuondoa hii abstraction ya mshale na sisi kusema,
oh, hii ni kumbukumbu ya mzigo anuani 123, wakati wewe kusema t anapata s, semicolon,
wewe ni literally kuweka 123 hapa.
Sasa kama sisi aina ya kurahisisha dunia yetu tena na picha,
nini umefanya kweli kufanyika ni tu aliongeza mwingine mshale dunia yako
hiyo akizungumzia kutoka t kwa kamba huo halisi.
Hivyo wakati katika mstari 31 na 32 mimi kweli kwenda juu ya kubadilisha t [0],
kile ni t [0] inaonekana sawa na sasa? s [0]
Basi hiyo ni yote yale yanayotokea.
Na hata kama aina hii ya anahisi kidogo kiwango cha chini na arcane
na aina hii ya anahisi kama labda intuitively hii lazima tu kazi -
Nimekuwa alifanya nakala za mambo kabla na ni haki kazi -
kama kweli kufikiri kuhusu nini string kweli ni, ni * Char.
Naam, hiyo ni nini? Ni anuani ya tabia fulani.
Kisha labda inakuwa na mantiki zaidi kwamba wakati wewe kujaribu kufanya kitu
super inaonekana rahisi kama hii, yote wewe kufanya ni kuiga anuani kumbukumbu.
Wewe si kweli kufanya kitu chochote kwa kamba yenyewe.
Hivyo hata kama huna wazo jinsi gani kutatua tatizo hili katika kanuni,
ngazi ya juu, conceptually, nini tunahitaji kufanya ili kufanya ta kweli nakala ya s, inaonekana?
Yeah. >> [Mwanafunzi] Kuwapa eneo jipya? >> Hasa.
>> Sisi haja ya kutoa t bidhaa mpya mahali.
Tunahitaji namna fulani kujenga dunia ambayo sisi kupata chunk mpya ya kumbukumbu,
ambayo kwa ajili tu ya ufafanuzi mimi itabidi kuteka haki chini ya hii moja, lakini haina haja ya kuwa huko.
Lakini inahitaji kuwa muziki huo, hivyo mimi itabidi kuteka mistari haya wima katika sehemu moja.
Ni faini kama hii yote ni takataka awali. Nani anajua huko?
Lakini hatua ya 1 ni kwenda kuwa nipe kama kumbukumbu kiasi kama nahitaji
walionao nakala ya hello, kisha kufikiri jinsi ya nakala h hapa, e hapa,
l hapa na kadhalika.
Lakini hii tayari anatakiwa kujisikia kidogo dhahiri hata kama baadhi ya maelezo ni bado kufikirika.
Kwa nakala hii kamba katika hili, ni tu kwa kitanzi au kitanzi wakati
au kitu fulani na ambayo umefanya kuwa wote zaidi ya ukoo.
Basi hebu jaribu hii. Hebu kwenda katika copy2.c.
Katika copy2.c tuna karibu mpango huo ila kwa mstari 27.
Inaonekana tata kidogo, lakini kama sisi kuvunja chini kipande kwa kipande,
upande wa mkono wa kushoto ni sawa.
Char * t inajenga jambo hili katika kumbukumbu, angalau kwa swali alama
kwa sababu sisi hatuna wazo nini huko na default.
Upande wa kulia tuko sasa kuanzisha mpya kazi, malloc,
kwa kumbukumbu kutenga, nipe kumbukumbu,
na inaonekana inachukua jinsi hoja nyingi, mambo mangapi ndani ya mabano?
Nikasikia manung'uniko ya 1 na 2, lakini ni 1 tu.
Hakuna comma, ambayo ina maana kuna kitu tu 1 ndani ya mabano.
Hata ingawa kuna mabano nyingine, napenda kuonyesha
nini ndani ya mabano yttersta, na ni hii kujieleza:
(Strlen (s) + 1) * sizeof (Char).
Hivyo kama sisi kweli nadhani hii kupitia, hii ni kusema nipe urefu wa s.
Kwa nini mimi, ingawa, akiongeza 1 kwenye urefu? >> [Inaudible mwanafunzi majibu]
Hasa. Tunahitaji nafasi kwa guy hii ifikapo mkia, tabia ya sita kwamba haina maana Kiingereza
lakini haina una maalum kimpango maana.
>> Hivyo tunahitaji + 1 kwa kuwa kwa sababu strlen anarudi matumaini ya binadamu ya urefu,
hujambo au 5, haina kukupa ziada null tabia.
Hivyo mimi manually kuongeza hii kwa + 1.
Na kisha hii, ukubwa wa * (Char), hatujaona hii kabla.
Hii si kitaalam kazi.
Ni Keyword maalum kwamba tu anakwambia kile kawaida ni ya baadhi ya aina data kwenye komputa
kwa sababu katika hali halisi, baadhi ya sisi kuwa na kompyuta 32-bit.
Mimi kuwa na kompyuta pretty umri wa nyumbani, na anatumia tu bits 32 kuwakilisha kuyatumia.
Na hivyo kama mimi ukubwa wa aina data, inaweza kuwa 32 bits.
Lakini kama mimi nina kutumia dhana yangu mpya ya kompyuta, mimi ili kupata nyuma thamani ya bits 64
kwa kitu kama anwani.
Hivyo katika kesi hii, tu kuwa super salama, sisi siyo kwenda kitu ngumu code kama -
vizuri, ni nini na ukubwa wa Char kulingana na kile ambacho tumekuwa alisema hadi sasa?
Tumekuwa pretty much alisema maneno kwamba ni 1 Byte, na kwamba ni kiasi pretty kweli katika bodi.
Lakini tena, mawazo huwa na kuwa mbaya.
Wao kusababisha programu Buggy ikiwa watu kutumia programu yako katika njia wewe hakuwa na nia.
Hivyo hebu abstract hii mbali na tu zaidi generically kusema
Nahitaji chunks hayo, wengi wa kumbukumbu
na kila chunk ya kumbukumbu inapaswa kuwa sawa na ukubwa wa tabia,
ambao kwa kweli ni sawa na 1 katika kesi hii, lakini ni njia zaidi generic ya kuandika hivyo.
Hivyo kama neno ni hello, jinsi wengi ka haina malloc inaonekana kutenga kwa hujambo?
[Mwanafunzi] Sita. >> Sita. Hasa kama wengi kama tuna swali alama juu ya screen.
Na kisha kuchukua nadhani sasa kwa kuzingatia uelewa wako wa GetString
nini malloc pengine kurudi? >> [Mwanafunzi] anuani.
anuani ya nini? Ya chunk ya kwanza ya kumbukumbu.
>> Sisi hatuna wazo nini huko kwa sababu baadhi ya kazi nyingine
wangeweza kutumia kumbukumbu hii hapo awali.
Lakini malloc, kama GetString, anarudi anuani ya Byte kwanza ya kumbukumbu
kwamba imetenga kwa ajili yenu.
Hata hivyo, nini haina kufanya ni kujaza tupu hii na tabia null backslash
kwa sababu ni zamu nje unaweza kutumia malloc kutenga chochote: ints, masharti, arrays,
ikifungwa, mwanafunzi miundo.
Unaweza kutumia malloc kabisa generically.
Ni hajali au kujua nini wewe kugawa kumbukumbu kwa.
Hivyo itakuwa presumptuous kwa malloc kuweka 0 \
mwisho wa kila chunk ya kumbukumbu ni kutoa
kwa sababu hii \ 0 kitu ni mkataba kwa masharti.
Ni si kutumika kwa ajili ya ints, siyo kutumika kwa ajili ya ikifungwa, siyo kutumika kwa ajili ya wanafunzi.
Na hivyo gotcha na malloc ni kwamba mzigo ni wewe kabisa juu ya programu
kukumbuka jinsi wengi ka wewe zilizotengwa na si kwa milele kutumia kwa kitanzi
au kitanzi wakati na kwenda nyuma ya mpaka wa chunk ya kumbukumbu tumekuwa aliyopewa.
Weka kwa njia nyingine, haraka kama wewe kutenga kumbukumbu,
huwezi kuuliza mfumo wa uendeshaji, oh, kwa njia, jinsi kubwa ya chunk ya kumbukumbu ilikuwa hii?
Ni kabisa hadi wewe kukumbuka kama unahitaji kuwa thamani.
>> Basi hebu angalia jinsi mimi kuendelea kutumia kumbukumbu.
Katika mstari 28 na 29 kwa nini mimi kufanya hili?
Tu jumla sanity hundi.
Tu katika kesi kitu potoka, naomba kwa kiasi fulani mambo ya kumbukumbu
au mimi mambo mengi mbio juu ya kompyuta kwamba kuna tu siyo kumbukumbu ya kutosha,
kitu kama hicho, mimi angalau wanataka kuangalia kwa null.
Katika hali halisi, wengi kompyuta nitakupa udanganyifu kwamba kila mpango
Unaweza kutumia ukamilifu wa RAM yako,
lakini hata hivyo, kama mtumiaji aina katika string baadhi crazy muda mrefu labda kwa sababu ni mtu mbaya
na wao ni kweli kujaribu ajali programu yako au hack ndani yake,
unataka angalau kuangalia thamani ya kurudi kwa malloc na kama ni sawa null.
Na ikiwa hivyo, hebu tu kuacha haki sasa kwa sababu mimi sijui nini cha kufanya katika kesi hiyo.
Ninawezaje nakala kamba? Kuna njia kadhaa za kufanya hivyo.
Kuna str nakala kazi katika C, lakini ni super rahisi kwa sisi kufanya hii ya zamani-fashioned njia.
>> Kwanza napenda kufikiri nini urefu wa s ni.
Ningeweza kuweka hii katika kitanzi lakini badala yake mimi tu kuweka nje hapa kwa ufafanuzi.
Hivyo n sasa maduka ya urefu wa kamba ya awali, ambayo ni inaonekana 5.
Kisha katika kitanzi yangu kwa mimi nina iterating kutoka juu ya 0 hadi n,
na juu ya kila iteration mimi nina kuweka s [i] ndani ya t [i].
Hivyo kwamba ni nini mimi alisema kwa vidole vyangu 2 akionyesha masharti kabla.
Kama hii kwa kitanzi iterates kama hii, mimi nina kwenda kuwa kuiga h ndani ya hapa,
e katika hapa, l ndani ya hapa kwa sababu hii ni s, hii ni t.
Na kisha mwishowe, katika mstari 35 kwa nini mimi kufanya hili?
Mimi haja ya kuhakikisha kwamba mimi nina kumaliza t kamba.
Na mimi ni njia hii kuwa super wazi.
Lakini kupendekeza, mtu, kama unaweza, njia mbalimbali za kufanya hivi.
Mimi si kweli wanahitaji line 35. Kuna njia nyingine ya kufanya hili.
Yeah. >> [Inaudible mwanafunzi majibu] >> Sema nguvu zaidi.
[Mwanafunzi] Chini ya au sawa na. >> Hasa.
Tunaweza tu kusema chini ya au sawa na n, ambayo kwa ujumla imekuwa mbaya
kwa sababu karibu kila mara wakati sisi kwenda sawa na kitu sisi ni kuhesabu
sisi kwenda 1 hatua mbali mno.
Lakini kumbuka, jinsi ka wengi hawakuwa sisi kutenga?
Sisi zilizotengwa strlen ya s, hivyo 5 + 1 kwa jumla ya 6.
Hivyo katika kesi hii tunaweza kufanya kitu kama hiki
hivyo kwamba sisi ni kuiga si tu hujambo lakini pia 0 \ mwishoni sana.
Vinginevyo, tunaweza kutumia kazi kuitwa str nakala, strcpy,
lakini kwamba itakuwa si kuwa karibu kama furaha sana.
Lakini hiyo yote ni gani chini ya Hood.
Kisha mwisho, sisi kufanya kitu kimoja kama kabla.
Mimi capitalize t na kisha mimi kudai kwamba awali inaonekana kama hii na nakala inaonekana kama kwamba.
Basi hebu jaribu hii sasa. Hebu kwenda katika hapa. Matokeo copy2. Tutaweza kukuza ndani na kukimbia copy2.
Mimi naenda aina katika hujambo katika lowercase, na kwa kweli mimi kupata Herufi za chini hujambo kama awali
lakini mtaji Wapendwa kwa nakala.
Lakini mimi nina kufanyika bado tu. Mimi haja ya kufanya mwisho 1 kitu hapa.
46 na 47 ni wazi kumkomboa kumbukumbu, lakini ni nini maana ya kwamba kweli?
Hivi mimi nafanya nini, unafikiri, kwa wito line 46 na mstari 47?
Nini athari gani kwamba kuwa? Yeah.
[Inaudible mwanafunzi majibu] >> Hasa.
>> Wewe ni tu kuwaambia mfumo wa uendeshaji, hey, shukrani kwa ajili ya kumbukumbu hii.
Unaweza sasa matumizi yake kwa mtu mwingine.
Na hapa ni mfano kamili wa maadili ya takataka.
Mimi tu kutumika kumbukumbu hii kwa kuandika neno hujambo katika maeneo 2,
hapa, hapa, hapa, na hapa.
Hivyo hii ni h-e-l-l-o-\ 0.
Lakini basi mimi piga mstari 46 na mstari 47, na wewe kujua nini kinatokea pale katika suala la picha?
Kweli, ngoja, picha hii ni moja ya zamani.
Mara sisi kufanya nakala, guy hii ni kweli akizungumzia hapa,
hivyo hebu kuondoa idadi na tu abstract mbali kama mishale yetu tena.
Nini kinatokea katika picha hii wakati mimi kuwaita bure?
[Inaudible mwanafunzi majibu] >> Si hata.
Kama mimi wito bure kwenye s na t - aina ya swali hila - picha hii haina mabadiliko wakati wote
kwa sababu wito s na wito t tu anaelezea mfumo wa uendeshaji,
hey, unaweza kutumia kumbukumbu hii tena, lakini haibadilishi hii null
au baadhi ya tabia maalum, haina mabadiliko hayo,
haibadilishi h au e au l au l au o katika aidha mahali pa kitu kingine chochote.
Katika suala la picha, haraka kama wewe piga mabadiliko bure kitu,.
Na humo uongo asili ya maadili ya takataka kwa sababu kama mimi kisha baadaye katika mpango huu
kuuliza mfumo wa uendeshaji kwa ajili ya kumbukumbu zaidi na GetString au malloc au kitu kama hicho
na mfumo wa uendeshaji anasema, hakika, nina ka 12 ya kumbukumbu tu zilizotolewa,
matumizi haya, nini unakwenda kuwa mitupu?
Mtakuja kuwa mitupu chunk ya kumbukumbu kwamba sisi ingekuwa kawaida kuteka
na alama ya kuuliza, lakini nini ni alama swali hizo?
Wao kutokea kwa kuwa h-e-l-l-o, h-e-l-l-o.
Hizi ni takataka wetu mpya maadili haraka kama wewe bure juu ya kwamba kumbukumbu.
>> Kuna ulimwengu halisi Kidokezo hapa pia.
Hii hutokea kwa kufanya na RAM, lakini kompyuta yako
kweli kufanya kitu kimoja na disk.
Tutazungumzia hili hasa kwa kuweka baadaye tatizo kwamba inalenga katika forensics.
Lakini nini hasa kinatokea kama una baadhi ya nyeti ya fedha faili kwenye desktop yako
au baadhi JPEG sketchy na wewe Drag ni ndani ya takataka yako,
kile kinachotokea wakati Drag ni ndani ya takataka au kusaga bin?
Ulijua nini nilikuwa kuzungumza juu. [Kicheko]
Nini kinatokea wakati umeweka dragged kuwa ushahidi katika bin yako kusaga au takataka unaweza?
[Inaudible mwanafunzi majibu]
Naam, hivyo makini. Nini kinatokea wakati wewe kufanya hivyo?
jibu fupi ni kitu, sawa?
Sketchy au nyeti faili bado wamekaa tu pale mahali fulani katika gari yako ngumu.
Wengi wetu angalau wamejifunza njia ngumu kwamba unahitaji tupu takataka yako
au yako kusaga bin kwa kweli kufuta files.
Na kwa kweli, wakati wewe haki bonyeza au Udhibiti click juu ya takataka yako inaweza
au kuchagua faili, Tupu Trash au chochote
na kweli tupu takataka unaweza au kusaga bin, nini hasa kinachotokea basi kwa picha hii?
Zaidi chochote. Hivyo kitu kweli kinachotokea kwenye disk.
>> Na kama sisi tu muda digress na kuandika - I'll tu kutumia nyuma ya hii.
Hivyo sasa ni kubadilisha hadithi kutoka RAM, ambayo ni programu ambapo zipo
wakati wewe mbio yao, ili disk, ambayo ni ambapo wao ni kuhifadhiwa muda mrefu
hata wakati nguvu huenda nje, kwa sasa - na tutaweza kurudi huu katika siku zijazo -
hebu tu kujifanya kuwa hii inawakilisha bidii gari ndani ya kompyuta yako
kwa sababu nyuma katika siku waliyo kuwa mviringo disks, kiasi kama disks floppy.
Hivyo kama wewe kufanya kuwa na baadhi ya nyeti Excel faili, inaweza kuchukua hadi hii chunk ya kumbukumbu
kwenye disk ya kompyuta yako, na Mimi tu kuchora huo holela 1s na sekunde 0.
Wakati wewe Drag faili kama kwamba kwa takataka yako inaweza au kusaga bin,
literally hakuna kinachotokea kwa sababu Apple na Microsoft kuwa tu aliamua
takataka unaweza na kusaga bin ni kweli tu placeholder muda.
Labda hatimaye OS itakuwa tupu ni kwa ajili yenu, lakini kwa kawaida, haina kufanya kitu chochote,
angalau mpaka uko kweli chini juu ya nafasi.
>> Hata hivyo, wakati wa kwenda takataka tupu au tupu ya kusaga bin,
vile vile, hakuna kinachotokea kwa picha hii.
Yote ambayo hufanyika ni mahali pengine kwenye kompyuta yako, kuna baadhi ya aina ya meza.
Ni aina ya kama karatasi kidogo kudanganya kwamba anasema kwamba, hebu sema, resume.doc,
hivyo resume yako katika faili Microsoft Word kutumika kuishi katika eneo 123 juu ya hard disk yako,
si katika kumbukumbu na si katika RAM lakini juu ya hard disk yako,
na JPEG yako sketchy maisha katika 456, na yako Excel faili anaishi 789 au popote.
Wakati wewe kufuta kwa kweli kuondoa takataka au kusaga bin,
picha hii haina mabadiliko. Sekunde 0 na 1s kwenye gari yako ngumu hawaendi popote.
Lakini hii meza, hii database kidogo ya aina, anafanya mabadiliko.
Wakati wewe kufuta resume yako, ni kana kwamba faili ni ilifutwa kwa maana ya baadhi,
lakini kompyuta wote gani ni kusahau ambapo kitu kwamba anaishi kwenye gari yako ngumu.
Sekunde 0 na 1s kwamba compose resume yako au yeyote wa files haya mengine ni bado intact.
>> Hivyo kama wewe alifanya hii ajali, bado kuna uwezekano zisizo sifuri
kwamba unaweza kupona data zako kwa kutumia Norton Utilities au baadhi programu ya kibiashara
kusudi lake katika maisha ni kupata sekunde 0 na 1s ambayo aina ya wamekuwa yatima,
wamesahau hapa lakini kushoto hapa, ili uweze kupata data yako ya nyuma.
Au kuchunguza mauaji wapelelezi na polisi au FBI ingekuwa kweli kuchukua gari ngumu
na kwa kweli kuangalia kwa mifumo ya sekunde 0 na 1s kwamba kuangalia kama JPEGs, kuangalia kama files Excel,
na kuokoa wale njia hata kama kompyuta ina wamesahau yao huko.
Hivyo njia pekee ya kweli kufuta data, kama tutaweza kujadili katika siku zijazo,
ni kwa kusugua au kuifuta faili au disk ngumu na -
Unaweza si kweli kujikwamua na sekunde 0 1s
kwa sababu vinginevyo wewe d kuanza na gari gigabyte ngumu
na wewe d kuishia na gari megabyte ngumu kama wewe daima walikuwa kufuta,
literally, sekunde 0 na 1s.
Basi nini ungefanya kama kweli alitaka cover tracks yako
na tatizo la msingi ni kwamba bado kuna sekunde 0 na 1s kwenye disk?
Naona mtu gesticulating kwamba ungependa kimwili kuvunja kifaa. Hiyo itakuwa kazi.
[Kicheko] Lakini kama kwamba ni aina ya ufumbuzi ghali, nini itakuwa busara zaidi?
Yeah. >> [Mwanafunzi] overwrite yao. >> Overwrite yao na nini? >> [Mwanafunzi] Nyingine data.
Nyingine data. Unaweza tu overwrite disk yako kwa sekunde 0 au 1s au yote sekunde 0, wote 1s.
>> Na kwamba ni kweli nini baadhi ya programu gani.
Unaweza kununua software au hata kupata programu huru,
na hata kujengwa katika Mac OS siku hizi, chini hivyo katika Windows,
ni uwezo wa kufuta salama.
Kweli, kama unataka nyumbani wote kukimbia leo kama una Mac na kufanya hili,
kama nimepata baadhi ya mambo katika takataka yako inaweza, unaweza kufanya salama Tupu Trash,
ambayo haina hasa ile.
Badala tu ya kufuta files hapa, haina kufuta hapa na sekunde 0 1s,
badala yake, ni tu kuvibadilisha wote, kwa mfano, kwa sekunde 0 na dot, dot, dot.
Basi mmoja wa psets yako ya baadaye itakuwa kweli kuwa kwa makusudi kuokoa data -
picha kwamba tumekuwa kuchukuliwa wa watu, mahali, na mambo ya chuo
ambayo tutaweza kufanya sanamu ya kuchunguza mauaji ya kadi ya kumbukumbu kamera ya digital ya,
ambayo ni exact wazo - na itabidi wapewe changamoto ya kweli kupata
mwelekeo kwamba kuwakilisha JPEGs kwenye gari yako ngumu,
kiasi kama mwanafunzi wa zamani ambaye kwamba mimi kusoma barua pepe wiki chache zilizopita alifanya
kuokoa picha ya dada yake.
Mbona sisi kuchukua mapumziko 5-dakika hapa, na tutaweza regroup na zaidi juu ya kumbukumbu.
Hivyo hapa ni ambapo mambo kupata kidogo akili-bending, lakini hii ni hatua ya nguvu sana
kuelekea kuelewa hii yote zaidi.
Hapa ni mpango ujulikanao pointers.c.
Ni kati ya sampuli code ya leo.
Ona kwamba katika mistari michache ya kwanza, 19 kupitia 22, wote sisi ni kufanya ni kitu kama GetString
na kurudi anuani, hifadhi hiyo katika s.
Tangu sasa kwa pset hata 3 kama unataka lakini pset 4 na juu ya
ambapo unaweza kuanza kuchukua magurudumu haya mafunzo mbali mwenyewe,
hakuna sababu ya kujifanya kuwa masharti kuwepo tena.
Ni hakika sawa na kuanza tu kusema * Char.
>> Kama kando, katika marejeo online na katika vitabu unaweza kuona mara nyingi nyota baada ya kutofautiana.
Unaweza hata kuona maeneo kuzunguka pande zote mbili ya hiyo.
Wale wote ni functionally sahihi.
Kwa sasa, ingawa, tutaweza standardize juu ya mbinu hii kufanya super wazi
kwamba * Char ni kama kusema tabia pointer.
Hiyo ni aina data.
Na kisha jina la kutofautiana ni s katika kesi hii.
Hivyo tumekuwa Gotten kamba na tumekuwa kuitwa ni s.
Na kisha chini hapa taarifa kwamba mimi nina kufanya kweli kidogo ya udanganyifu.
Hii inaitwa pointer arithmetic, ambayo ni aina ya rahisi super.
Ni njia tu kuongeza na Ondoa idadi ya kuyatumia.
Lakini hii kweli kazi.
Mpango huu inaonekana Prints string s 1 tabia kwa kuwa mstari wa vile matokeo ya mwisho -
Hivyo tu tunaweza nyara ambapo hii ni kwenda, kufanya kuyatumia, kukimbia kuyatumia, basi mimi zoom in
Sasa basi mimi aina katika kitu kama HELLO na aina Ingiza
na Prints 1 tabia kwa kila mstari.
Hadi pili iliyopita, sisi ingekuwa amefanya hili na nukuu za mraba mabano.
Tunatarajia kuwa kwa kitanzi na tunatarajia kufanya printf ya s [i] na tunatarajia kufanya hivyo tena na tena na tena
na n backslash mwisho wa kila mstari.
Lakini mpango huu ni tofauti. Mpango huu ni kutumia, literally, hesabu.
Basi nini kinaendelea hapa?
Awali ya yote, kabla ya kitanzi hii hata executes, nini, tu kuwa wazi, ni ya kweli?
S ni? >> [Mwanafunzi] anuani. >> Anuani.
>> Na ni anuani ya, katika kesi ya hello, tabia ya kwanza katika neno kwamba, ambayo ni h.
Hivyo ni s, katika mfano huu, hasa anuani ya h.
Hivyo ni nini maana ya kufanya s + i?
Naam, i kuanza saa 0 katika hii kwa kitanzi. Tumefanya mara nyingi.
Mimi ni kwenda hadi urefu wa kamba, inaonekana.
Kadhalika iteration kwanza ya kitanzi hii, i ni wazi 0.
Hivyo msemo huu ni kusema s + i - badala yake, s +0--hiyo ni wazi tu s.
Hiyo ni nini * s hapa?
Sasa sisi ni kutumia nyota katika njia tofauti kidogo.
Hebu kwenda mbele na kujikwamua t kwa sababu sisi ni kosa kuzungumza juu ya t na nakala ya s.
Sasa sisi tu nataka kuwaambia hadithi kuwashirikisha s.
Na hivyo kwa wakati huu, baada ya kuwa na aina kamba, dunia yetu inaonekana kabisa kama ilivyokuwa kabla ya
pamoja na haki ya hifadhi ya anuani ya h na kwa ujumla zaidi akionyesha string hello.
Kama mimi sasa kufanya mstari kama * (s + i), hebu jaribu hii nje.
Hivyo * (s + i). Hebu kurahisisha hii kwa sababu hii ni 0, hivyo hii ni * (s 0).
Naam, kusubiri dakika. Kurahisisha zaidi. Hii ni * (s).
Naam, sasa mabano ni aina ya kijinga, hivyo sasa hebu tu kufanya * s.
Hivyo katika iteration ya kwanza ya hii kitanzi, kwamba line hiyo yalionyesha, 26,
ni kiasi pretty sawa na uchapishaji huu.
Je, ni aina ya data * s?
Katika hali hii, kwa sababu nyota hutokea kwa kuwa karibu na s yenyewe,
lakini zaidi hasa, kwa sababu sisi ni tena kutangaza s,
sisi siyo kujenga variable tena, hakuna kutaja ya * Char katika mstari 26,
hakuna kutaja ya kamba Keyword, sisi ni tu kwa kutumia variable kuitwa s,
zinageuka sasa nyota ina tofauti kidogo na, admittedly, kuwachanganya maana.
* S hapa ina maana ya kwenda anuani katika s na magazeti chochote ni pale.
Hivyo s ni hapa, * s ni - aina ya kama Chutes na Ladders, kufuata mshale - hapa.
Hivyo hii ni * s.
>> Basi nini anapata kuchapishwa kwenye iteration ya kwanza ya kwamba kitanzi katika mstari 26?
Mimi magazeti nje% c, ambayo ni placeholder kwa tabia,
kisha \ n kwa mstari mpya. * (S + i) ambapo i ni 0 ni tu hii.
Basi nini Char gani mimi kuweka katika kwa c%? H.
Katika iteration ya pili ya kitanzi - pengine unaweza kuona ambapo hii ni kwenda -
iteration ijayo i ni wazi 1, hivyo njia hii ya 1,
na kisha sasa sijui haja mabano kwa sababu sasa nyota anahitaji kusema
kwenda kumbukumbu anuani ya 1.
Je, ni s? Hebu roll nyuma katika wakati na kusema arrow hii sasa si kweli kufanya sisi neema yoyote.
Hebu zaidi hasa kusema kwamba hii ni hifadhi ya 123 idadi
kwa sababu ya kuanza kwa kamba hii hello, hii ni anwani ya 123, hii ni 124, na kadhalika.
Kadhalika iteration pili wakati mimi kusema s 1, hiyo ni kama kusema 123 1,
inayojulikana kama 124, hivyo nini Char anapata kuchapishwa kwenye iteration pili?
E katika kumbukumbu anuani 124.
Ndipo + tena, 125, 126, 127, na kitanzi hii nashiriki ataacha kabla ya sisi kupata hapa
kwa sababu mimi nina kutumia strlen kuhakikisha kwamba i haina hesabu kubwa mno.
Hivyo kwamba pia ni yake.
Tena, hii ni kama tu kwamba sisi tulikuwa kufanyika wiki iliyopita.
Hebu kuandika kwenye mstari chini hata kama hatutaki kufanya wote.
Hii ni sawa sasa kwa hii.
>> Hivyo hata kama ni s kamba, kama tumekuwa na kuiita kwa wiki, s ni kweli * Char.
Hivyo kama tunataka kuwa super anal, ni kweli sahihi kuandika tabia maalum
katika eneo idh kutumia anwani hizi numeric na hii operator nyota,
lakini kusema ukweli, hii ni kiasi tu safi. Hivyo hii si mbaya.
Hakuna sababu ya kuacha kufanya mstari 27 hapa, lakini 26 ni functionally sawa,
na ni functionally sawa kwa sababu hasa kwamba sisi tumekuwa kujadili hivi sasa.
Na Mwisho, 29 ni nzuri tu ya mazoezi.
Wito bure ya s ina maana kwamba sasa wewe ni kutoa nyuma kumbukumbu kwamba GetString akakupeni
kwa sababu tena, kama nilivyoeleza Jumatatu, GetString kwa wiki
imekuwa kuanzisha mdudu katika kanuni yako.
Code yako kwa wiki imekuwa na uvujaji kumbukumbu
ambapo tumekuwa kuuliza GetString kwa kumbukumbu lakini wewe sijawahi kutoa ni nyuma.
Na kwamba alikuwa makusudi waliochaguliwa na sisi pedagogically
sababu ni tu sana kufikiria kuhusu mapema.
Lakini sasa tunahitaji zaidi ulinganifu.
Ukiuliza kompyuta kwa ajili ya kumbukumbu, kama ilivyo kwa ajili GetString,
kama ni kesi inaonekana kwa malloc,
lazima sasa kwa pset kuendelea 4 pia bure yoyote kumbukumbu hizo.
Taarifa hii ni tofauti na kusema n int.
Huna haja ya bure hii kwa sababu wewe hakutuita GetString
na wewe hakutuita malloc.
>> Na hata kama wewe kuitwa GetInt kama tutaweza hatimaye kuona,
GetInt haina kutenga kumbukumbu kwa sababu wewe unaweza kweli kupita karibu integers
na ikifungwa na chars njia tu tumekuwa kufanya kwa wiki.
Strings, ingawa, ni maalum kwa sababu kwa kweli wao ni concatenation ya chars nyingi.
Hivyo wao ni tu tofauti na chars na ikifungwa na ints na kama.
Lakini tutaweza kuja nyuma na kwamba kabla ya muda mrefu.
Maswali yoyote juu ya hili kisha mwanzo ya kuyatumia? Yeah.
[Inaudible mwanafunzi swali]
Ah, vizuri sana swali.
Moja ya mambo machache C kweli haina maana wewe, ambayo ni rahisi,
je, ni takwimu nje kwa nini ya kawaida ni wa aina data
na kisha gani kwamba aina ya kuzidisha kwa ajili yenu.
Hii ni lisilo katika kesi ya chars kwa sababu karibu kila mara Char ni 1 Byte,
hivyo hii kazi tu.
Lakini kwa ajili ya majadiliano, kama wewe walikuwa kweli uchapishaji integers
na wewe walikuwa wakijaribu magazeti nje baadhi ya thamani ya kwamba alikuwa akionyesha integer,
wewe vile vile bila haja ya kufanya + 4 * i tu kwa sababu ni int 4 ka.
Pointer arithmetic ina maana kuwa C na compiler kufanya math kwamba wote kwa ajili yenu.
Wote una jali ni hesabu katika aina ya hisia za binadamu. Yeah.
[Mwanafunzi] Kama wewe kutangaza string ndani kwa kitanzi, je, una huru baadaye?
Nzuri swali.
>> Kama alitangaza ndani ya kamba ya kwa kitanzi, unahitaji huru baadaye?
Wewe tu haja ya kumbukumbu bure kwamba kutenga na GetString au na malloc.
Hivyo kama wewe tu kusema kitu kama - basi mimi kuweka braces curly sasa ili code wote ni kuhusiana.
Kama alifanya kitu, angalau buggily, kama hii, char * t = s,
huna haja ya t bure kwa sababu t hawakuwa kuhusisha yoyote kutaja malloc au GetString.
Kama kwa kulinganisha wewe alifanya hivyo, GetString, basi ndiyo, ungependa haja ya t bure.
Na kwa kweli, nafasi yako ya pekee ya kufanya hivyo ni sasa ndani ya kitanzi hii, kwa suala hilo hilo la wigo
kwamba tumekuwa kujadiliwa katika siku za nyuma.
Vinginevyo wewe d kuwa kugawa kumbukumbu, kugawa kumbukumbu, kugawa kumbukumbu,
na mwisho wa mpango kwa sababu wewe ni nje ya kitanzi kwamba,
t haipo, lakini kamwe aliiambia mfumo wa uendeshaji
kwamba hawakuwa na haja ya kuwa kumbukumbu tena.
Na kabla ya muda mrefu, kwa pset 4 au 5 tutaweza kuvipa wewe na programu inayoitwa Valgrind,
ambayo ni sawa katika roho kwa GDB katika kwamba ni got kiasi fulani ya interface arcane,
lakini kusudi lake katika maisha ni kukusaidia.
Na Valgrind ni mpango huo katika siku za baadaye kutafuta mipango yako
kuangalia kwa uvujaji kumbukumbu, kama kutoka GetString au malloc,
ambayo tutaweza kuanza kutumia zaidi ya yote kama sisi kuacha kutumia maktaba CS50 kama mengi.
Sisi hatimaye sasa kuwa na aina ya msamiati na aina ya mtindo wa akili katika nadharia
na katika kutatua mpango kuvunjwa.
>> Hivyo katika mpango huu kuvunjwa, wabadilishane kazi ndani ya kubadilishana,
lakini kamwe kweli kazi katika kuu kwa sababu kuu kupita katika x na y, wanakumbuka,
na wale zimepitishwa na maadili, hivyo kusema.
Nakala za wamepewa wabadilishane.
Na mwisho wa kubadilishana, a na b alikuwa kweli imekuwa kubadilishana,
lakini bila shaka x na y, kama sisi kujadiliwa siku ya Jumatatu, isingekuwa.
Hivyo napendekeza katika kijani hapa kwamba hii ni kweli suluhisho hapa.
Na kweli, basi mimi hoja nyota wangu tu kuwa thabiti
hata ingawa, tena, functionally hii haijalishi.
Katika wiki baadaye tutaweza kueleza lini na kwa nini ni gani jambo.
Hivyo katika kijani sasa ni ufumbuzi.
Kusema ukweli, inaonekana sana nzima messier kwa sababu mimi na wote wa nyota hizi.
Hebu kumweka nje jambo moja.
line ya juu hapa ambapo anasema int * a na b int *
ni kimsingi kufanya kitu kimoja kama daima ina.
Ni kutangaza hoja 2 au vigezo wabadilishane,
ya kwanza ambayo ni pointer int walioitwa,
pili ambayo ni ya pointer int kuitwa b.
Kitu tu kwamba ni mpya katika hatua hii ni ukweli kwamba kuna nyota huko.
>> Hiyo ina maana gani? si int, b si int.
ni anuani ya int na b ni anuani ya int tofauti.
Chini hapa, hii ni pale ambapo mimi kukubali C anapata utata.
Sasa sisi ni kutumia nyota, lakini ina maana tofauti katika muktadha huu.
Kwa sababu sisi siyo kutangaza kuyatumia kama sisi ni hapa juu,
hapa sisi ni dereferencing mambo.
Basi kitaalam, nyota katika muktadha huu wa mstari wa kwanza, wa pili, na wa tatu ndani ya kubadilishana
ni operator dereference, ambayo ina maana tu kwenda huko.
Hivyo tu kama kidole changu ikifuatiwa mshale h,
* Njia kwenda kwa anwani hiyo na kupata mimi int kwamba pale.
* B njia kwenda anuani na kupita kwangu kuna nini huko.
Basi hebu redraw picha kutoka Jumatatu sasa kutumia stack ya muafaka,
moja chini ambayo ni ya kwenda kuwa kuu,
moja juu ya ambayo ni kwenda kuwa byta,
hivyo kwamba dunia yetu inaonekana, kama Jumatatu, kama hii.
Hapa ni chunk ya kumbukumbu kwamba kuu ni kwenda kutumia.
>> Kumbuka kutoka Jumatatu kwamba mpango tu alikuwa vigezo 2,
mtu mmoja aitwaye x na mtu mmoja aitwaye y, na mimi alikuwa na kuweka namba 1 na 2 hapo.
Sasa wakati mimi kuwaita wabadilishane kama mimi alifanya juu ya Jumatatu,
hapo awali wakati mimi kutumika version nyekundu ya mpango huu, ambayo inaonekana kama hii,
I got vigezo 2, b na, na ni nini sisi kuandika hapa na hapa?
Tu 1 na 2, literally nakala za x na y.
Leo sisi mabadiliko hayo.
Leo badala ya kupita katika ints na b tunakwenda kupita katika anwani 2.
Wale anwani kutokea kwa uhakika na ints, lakini wale anwani si ints wenyewe.
Wao ni anwani. Ni kama anwani ya posta badala yake.
Hivyo sasa tunahitaji tu kutoa mwenyewe kidogo zaidi kwa undani juu ya screen.
Hii ni kumbukumbu ya kompyuta yangu kama ni kuwa siku zote.
Sasa tunahitaji baadhi holela hesabu ya mfuko huo.
Basi hebu kusema tu, tu kwa bahati, kwamba hii ni kumbukumbu ya anuani 123, 124.
Hebu tu kusema hii ni 125, hii ni 126, na kadhalika, lakini hiyo ni kabisa holela.
Sisi tu haja ya baadhi ya mpango wa nambari katika kumbukumbu yangu.
Hivyo sasa wakati mimi kwa kweli kupita katika x na y, Sitakuja kupita katika x na y;
Mimi naenda kupita katika anwani ya posta, ili kuzungumza, ya x na y ya
ili kile anapata kuhifadhiwa hapa na hapa ni si 1 na 2,
lakini kama unaweza kuona Nakala yangu ndogo, nini anapata kupita hapa na hapa?
[Inaudible mwanafunzi majibu] >> Hasa. 123 anapata kuweka hapa na 124 anapata kuweka hapa.
>> Sasa, kwa sababu mimi kutumika nyota katika njia hii ya kwanza kabisa line up hapa kwa juu,
mpango wangu tu anajua kwamba 123 na 124, ingawa wao ni wazi integers
kwamba binadamu yeyote anaweza taarifa, wanapaswa kufasiriwa kama anwani, nambari anwani.
Wao si katika na wenyewe ints, wao uko anwani,
na kwamba kwa sababu mimi waziwazi kuweka nyota huko.
Hivyo sasa katika line yangu ya kwanza, ya pili, na wa tatu wa code halisi kile kinachotokea hapa?
Hebu kuteka wengine wa picha.
TMP ni kama ilikuwa siku ya Jumatatu. Hakuna kitu maalum kuhusu TMP.
Ni haki ya mitaa 32 bits variable, na ndani ya kwamba mimi inaonekana kuhifadhi thamani ya *.
Sasa, kama mimi tu alisema TMP = a, gani mimi kuweka hapa? >> [Mwanafunzi] 123.
123. Lakini si kwamba nini mimi kufanya.
Mimi kusema TMP = * a. Star njia kwenda huko.
Hivyo hapa ni, 123. Jinsi gani mimi kwenda huko? Kujifanya kama kuna mshale.
Naam, kuna ni, 1. Basi nini anapata kuhifadhiwa katika TMP, inaonekana? 1 tu.
Hivyo kwa maneno mengine, TMP ni * a, * njia kwenda kwa anwani hiyo kwa sasa ni katika,
ambayo ni inaonekana 123.
>> Okay, hapa sisi ni katika eneo 123, naona idadi 1,
hivyo mimi nina kwenda kuweka namba 1 hapo.
Sasa nini mimi katika mstari 2, * a = * b?
Hii moja ni kidogo zaidi kushiriki kwa sababu sasa ni nini? Ni 123.
Hivyo * ni wapi? Haki ambapo nilikuwa kabla. Hivyo kwenda huko. Sawa.
Sasa, mwishowe, na kisha hatimaye huu utaanza kufanya akili, hopefully,
* B ina maana nini katika b? 124. Kwa hiyo mimi haja ya kwenda huko, ambayo ni 2.
Basi je, mimi kuweka wapi?
2 huenda katika hapa kwa sababu * b huenda katika *. Hivyo mimi itabidi kufanya hivyo.
Na unaweza tayari kuona, pengine, kwamba sisi ni hivyo karibu sana
kutatua hayo ya kijinga, rahisi tatizo kikamilifu, kwa mara ya kwanza
kwa sababu sasa bado tuna kumbukumbu ya kile x ilikuwa,
tuna nakala 2, admittedly, ya y,
lakini mstari 3 sasa anasema * b.
Hivyo hapa ni b. * B njia kwenda huko. Hivyo ambapo ni mahali 124?
Ni dhahiri hapa. Basi je, mimi kuweka hapa? Ni wazi, TMP.
Hivyo sasa mimi kufanya hili. Hivyo nina 1 hapa na 2 hapa.
Na sasa nini kuhusu haya yote, 123, 124, na 1?
Haraka kama byta anarudi, kumbukumbu hii ni nzuri kama waliopotea
kwa sababu haraka kama byta anarudi, mfumo wa uendeshaji
ni huru kutumia kwamba kumbukumbu tena katika siku zijazo.
Tu kuu ya kumbukumbu chini ya hii stack kinachojulikana vijiti kuzunguka.
>> Na hivyo sisi hatimaye kuwa sasa version kazi.
Hebu kwenda katika swap.c, na taarifa zifuatazo.
Katika juu ya mpango nimekuwa iliyopita mfano wangu kuwa int * a na int * b.
Hivyo kitu pekee mimi iliyopita na kwenda kutoka nyekundu, ambayo ilikuwa mbaya, kwa kijani, ambayo ni nzuri,
ni mimi aliongeza nyota hizi leo.
Lakini kisha chini hapa katika wabadilishane yenyewe nilikuwa na nakala, kuweka nini ilikuwa tu kwenye slide.
Nina nyota hapa, nyota hapa - kwamba mechi mfano -
na kisha mambo yote haya sasa kuwa na nyota isipokuwa kwa TMP
kwa sababu matumizi ya variable muda, kuna kitu kipya huko.
Mimi tu haja ya kuhifadhi muda kwa int.
Hivyo hatuna haja nyota huko.
Sisi tu haja ya nyota ili tuweze kuvuka mipaka ya aina hii ya holela
kati ya hizi muafaka 2 katika kumbukumbu ya kompyuta yangu.
Lakini jambo moja mwisho kubadilika, na unaweza kuwa glimpsed tayari.
Gani nyingine mstari ni wazi tofauti na sasa? >> [Mwanafunzi] & x.
>> Yeah, hivyo ni 25 mstari wa mwisho wa code mimi haja ya kubadili kwa hii kazi.
wiki iliyopita na hata juu ya Jumatatu mstari 25 inaonekana kama hii, wabadilishane x na y,
na hii mara tu kuvunjwa kwa sababu kama wewe kusema byta (x, y)
wewe ni kutoa nakala za x na y wabadilishane, basi ni kufanya jambo yake,
lakini wewe ni kweli kamwe kubadilisha x na y yenyewe.
Hivyo hata kama wewe sijawahi kuona tabia hii kabla na ampersand katika kanuni,
tu kuchukua nadhani. Je ampersand kufanya, inaonekana?
[Mwanafunzi] Takes anuani. >> Takes anuani.
Hivyo ni kusema ampersand nipe anuani ya x.
Nani anajua ambapo ni? Hutokea kwa kuwa 123. Mimi sijali. Tu nipe anuani ya x.
& Y maana nipe anuani ya y.
Na katika hadithi ni kwamba hatua kikamilifu sambamba na picha tulianzisha wakati iliyopita.
>> Hivyo mimi itabidi kukubali kuyatumia, hakika kwa mimi wakati mimi kwanza kuanza kujifunza hii,
walikuwa dhahiri moja ya mambo ya gumu wrap akili yangu kote.
Lakini kutambua, hasa kama sisi kuendelea kucheza na aina hii ya mambo,
kama wewe kuvunja chini kwa aina hizi super rahisi ya kielimu uninteresting matatizo
ya kusonga tu idadi kote, jibu mkanganyiko na kuyatumia
kweli inaweza kuwa derived kutoka mechanics haya ya msingi sana.
Hapa ni anuani. Kwenda huko na nyota.
Au kinyume chake, hapa ampersand. Kufikiri nini anwani kweli ni.
Wote haki.
Hivyo ambapo ni aina ya kumbukumbu hii kuja kutoka?
Tumepata picha hii michache ya nyakati, na mimi kuendelea kuahidi tutaweza kuja nyuma yake,
lakini hapa ni uwakilishi wa kumbukumbu ya kompyuta yako
hiyo kidogo zaidi kuliko labeled ubao wetu hapa ni.
Nakala sehemu ya juu inawakilisha nini kwa heshima na mpango wako?
[Inaudible mwanafunzi majibu] >> Samahani? Sema tena.
[Mwanafunzi] mpango halisi. >> Mpango halisi.
>> Hivyo Clang sekunde 0 na 1s kwa kuwa compiled baada ya kuandika code C na kisha kukimbia
na kuzalisha ncha sekunde 0 na 1s up kupata tucked huko katika kumbukumbu
sababu wakati wewe bonyeza mara mbili icon kwenye Mac au PC yako
au kukimbia amri kama Mario katika haraka yako, sekunde 0 yako na 1s kutoka disk
kupata kubeba katika kumbukumbu ili kompyuta inaweza kuendesha yao
na kuitekeleza kwa haraka zaidi.
Hivyo initialized data na data uninitialized, sisi si kuzungumza mengi juu ya hizo,
lakini wale ni tu kimataifa vigezo.
Initialized maana vigezo kimataifa uliyonipatia maadili;
uninitialized maana vigezo kimataifa kwamba hawakuwa bado kutoa maadili kwa.
Kisha kuna vigezo mazingira haya ambayo mimi itabidi kabisa kupitisha mkono wangu,
lakini wao wapo na kuwa maduka mambo kama user jina lako
na mengine ya aina ya maelezo ya chini ya kiwango.
Lakini vipande juiciest ya layout kumbukumbu yako ni hiki kitu kinachoitwa stack na lundo.
stack tena, kwa kuwa wazi, ni kumbukumbu kuwa alitumia kila kazi ni wito,
wakati wowote kuna vigezo mitaa
na wakati wowote kuna vigezo kuwa alipita kote.
Yote ambayo hufanyika katika stack.
lundo sisi si aliongea juu, lakini kuchukua nadhani ambaye anatumia lundo.
Tu chunk tofauti ya kumbukumbu.
Hufanyika kwa kuwa inayotolewa hapa kwa juu, lakini hiyo ni holela pictorial mkataba.
Nani amefunguliwa kutumia kumbukumbu kutoka lundo kwa wiki?
Ni kitaalam wewe lakini si moja kwa moja. >> [Mwanafunzi] GetString.
GetString na malloc. Hivyo hapa ni tofauti ya kimsingi.
>> Unajua kwa wiki chache zilizopita kwamba kama unahitaji kumbukumbu, tu kutangaza kutofautiana.
Kama unahitaji kura ya kumbukumbu, kutangaza haki ndani ya safu ya kazi yako.
Lakini tatizo tumekuwa naendelea yanayowakabili ni kama wewe kutangaza vigezo ndani ya nchi ndani ya utendaji,
haraka kama anarudi kazi, nini kinatokea kwa kumbukumbu na vigezo wale?
Tu aina ya ni tena kwako, sawa? Ni tu kutoweka aina ya conceptually.
Ni bado kuna kimwili, ni wazi, lakini ni hakuna tena haki yako ya kutumia.
Hii ni wazi tatizo kama unataka kuandika kazi katika maisha
kwamba kweli kutenga kumbukumbu na si kutoa ni nyuma mara moja.
Uchunguzi katika kumweka: kusudi GetString katika maisha ni kuwa hakuna wazo mapema
jinsi kubwa ya kamba nitakacho andika katika keyboard,
lakini ni got kuwa na uwezo wa kutenga kumbukumbu kushikilia Daudi au hujambo
au insha nzima kwamba mtumiaji anaweza kuwa typed in
Hivyo GetString imekuwa ikitumia malloc.
Malloc hiyo lazima kutumia si stack;
badala ni kutumia kitu kinachoitwa lundo.
Kuna kitu tofauti kuhusu kumbukumbu. Ni si kwa kasi au polepole au kitu kama hicho.
Ni tu kimwili katika eneo tofauti.
>> Lakini utawala ni kwamba kumbukumbu hiyo zilizotengwa katika kifusi
kamwe ataondolewa wewe mpaka kuwaita - kuchukua nadhani - bure.
Kwa kulinganisha, kumbukumbu yoyote ya kuuliza kwa juu ya stack na tu kutangaza safu
au kutangaza variable kama tumekuwa kufanya kwa wiki,
kwamba kwa default inaishia kwenye stack.
Na kwamba kazi kubwa 90% ya muda, lakini juu ya matukio hayo rarer
ambapo unataka kutenga kumbukumbu na kushika ni kuzunguka,
basi unahitaji kutumia kazi kama malloc.
Au tuna kutumika kazi kama GetString, ambayo kwa upande anatumia malloc.
Hebu angalia ambapo hii inaweza kuvunja chini na kisha kuchukua Peek saa Binky.
Tutaweza kuja nyuma na kwamba katika siku zijazo.
Hapa ni super rahisi mpango kwamba katika mistari ya kwanza 2 anafanya nini?
Katika lugha ya Kiingereza, je, hizi kwanza mistari 2 ya maadili ya kufanya ndani ya kuu?
[Inaudible mwanafunzi majibu]
Makini. Haina nipe anuani ya x au y.
[Mwanafunzi] Hutoa kuyatumia kwa ints. >> Good. Nipe kuyatumia 2 kwa integers.
Kwa maneno mengine, nipe chunks 2 ya kumbukumbu kwamba mimi kuendelea kuchora leo,
hata mimi erased sasa, kama miraba.
Nipe chunks 2 ya kumbukumbu, mtu mmoja aitwaye x, mtu mmoja aitwaye y -
kabla ya hapo nilikuwa akawaita s na t - na nini ni ya aina ya kwamba chunk ya kumbukumbu?
Ni kwenda kuhifadhi anwani.
Ni aina ya * int.
>> Hivyo anuani ya int hatimaye kuishi katika x,
anuani ya int hatimaye kuishi katika y,
lakini awali nini ndani ya x na y? Nani anajua? Takataka maadili.
Ina chochote cha kufanya na kuyatumia.
Kama sisi si kuweka kitu pale, ambaye anajua nini ni kweli huko?
Sasa, x. Nini kinatokea hapa? Hii ni legit sasa kwa sababu x ni pointer. Ni * int.
Hivyo kwamba maana siwezi kuweka katika x anuani ya baadhi chunk ya kumbukumbu.
Je malloc kurudi? Perfect, kuirudisha anwani,
anuani ya Byte kwanza katika chunk nzima ya kumbukumbu.
Jinsi ka wengi ni hii inaonekana kugawa, kwa mfano, katika appliance?
Nini ukubwa wa int? 4.
Kama unafikiri nyuma kwa wiki 1, siyo super muhimu daima kukumbuka kwamba,
lakini katika kesi hii ni muhimu kujua, ka 4.
Hivyo hii ni kugawa juu ya lundo ka 4
na ni kurudi anuani ya kwanza kwangu kiholela.
Sasa, ni nini x kufanya?
* X = 42 ni kufanya nini?
Kama katika hatua hii kwa hadithi tuna x, ambayo inaonekana kama hii na thamani ya baadhi ya takataka,
hii ni sasa na thamani y baadhi ya takataka, sasa katika mstari 3 nimekuwa zilizotengwa ka 4.
Hii picha kimsingi inaonekana kama hii.
Au zaidi hasa, kama hii ni holela anuani 123, hii ni nini hadithi yetu sasa inaonekana kama.
* X = 42 sasa maana yake nini? Hiyo ina maana kwenda 123 anuani na kuweka namba 42 hapo.
Sihitaji kuteka mistari haya kwa sababu sisi siyo kufanya masharti.
>> Mimi lazima tu yaliyoandikwa ni kama hii, na kwa ajili tu ya maandamano,
42 kama aina int ya inachukua hadi mengi ya nafasi, ka 4.
Basi hiyo ni nini kilichotokea huko, lakini kuna tatizo sasa.
* Y = 13. Nini kitatokea hapa?
Tatizo ni * y katika dunia yetu kilichorahisishwa tu ina maana kwenda anuani katika y.
Nini katika y? Ni baadhi ya thamani ya takataka.
Basi hebu kudhani kwamba thamani ya takataka ni 5551212, kitu mambo kama hayo.
* Y njia kwenda kushughulikia 5,551,212.
Hiyo kama zaidi hapa. Ni haipo, kwa mfano.
Hivyo * y anapata njia 13 mimi nina kujaribu kuteka 13 hapa. Ni haipo.
Nimekuwa ilizidi sehemu ya ubao. Nini mimi kupata?
Hiyo cryptic ujumbe segmentation kosa kwa sababu mimi nina kujaribu kuweka katika kumbukumbu
thamani kama 13 katika eneo ambalo haipo.
wengine wa mpango ili kazi sawa, lakini hadi kwamba hatua hiyo haina.
Basi hebu jaribu kuwaambia hadithi hii.
Tutaweza kurudi mara moja kwamba tumekuwa aliyesema kuhusu hex.
Turudi kwa hii na kuhitimisha na hii kitu inayoitwa Binky,
ambayo wanakumbuka ni profesa Stanford kukaa nyumbani kucheza na claymation,
kuwaambia hadithi ya mpango hasa kwamba huo.
Ni tu kuhusu 3 dakika ya muda mrefu. Hapa tuna Binky.
[Kiume msemaji kwenye video] Hey Binky, kuamka. Ni wakati kwa ajili ya kujifurahisha pointer.
[Binky] Nini hiyo? Jifunze kuhusu kuyatumia? Oh, GOODY!
[Msemaji kiume] Naam, kwa kuanza, mimi nadhani sisi ni kwenda haja ya kuyatumia wanandoa.
>> [Binky] Sawa. Kanuni hii inatenga kuyatumia 2 ambayo inaweza kumweka kwa integers.
[Kiume msemaji] Sawa. Naam, naona kuyatumia 2, lakini hawaonekani kuwa akizungumzia chochote.
[Binky] Hiyo ni haki. Awali, kuyatumia hawana uhakika na kitu chochote.
mambo ya wao wanaongelea wanaitwa pointees, na kuweka yao juu ni hatua tofauti.
[Kiume msemaji] Oh, haki, haki. Mimi nilijua kwamba. pointees ni tofauti.
Eri, hivyo ni jinsi gani unaweza kutenga pointee?
[Binky] Sawa. Kanuni hii inatenga mpya integer pointee, na sehemu hii seti x kwa uhakika na hilo.
[Kiume msemaji] Hey, kwamba inaonekana zaidi.
Hivyo kufanya hivyo kufanya kitu. >> [Binky] Sawa.
Mimi itabidi dereference x pointer kuhifadhi namba 42 katika pointee wake.
Kwa hila hii mimi itabidi wand yangu ya uchawi wa dereferencing.
[Kiume msemaji] wand yako uchawi wa dereferencing? Hiyo ni kubwa.
[Binky] Hii ni nini code inaonekana kama. Mimi itabidi kuweka idadi na ... [Popping sound]
[Kiume msemaji] Hey kuangalia, kuna unaendelea.
Kufanya hivyo dereference juu ya x ifuatavyo arrow kupata pointee yake,
katika kesi hii ya kuhifadhi 42 katika huko.
Hey, jaribu kutumia na kuhifadhi idadi 13 kupitia pointer nyingine, y.
[Binky] Sawa. Mimi itabidi kwenda juu hapa y na kupata namba 13 ya kuanzisha
na kisha kuchukua wand ya dereferencing na tu ... [Buzzing sound] Ho!
[Kiume msemaji] Oh hey, kwamba hawakuwa na kazi.
>> Sema, Binky, sidhani dereferencing y ni wazo nzuri
kwa sababu ya kuanzisha pointee ni hatua tofauti
na sidhani sisi milele alifanya hivyo.
[Binky] Hmm, nzuri uhakika.
[Kiume msemaji] Yeah. Sisi zilizotengwa y pointer lakini sisi kamwe kuweka kwa uhakika na pointee.
[Binky] Hmm, sana wachunguaji.
[Kiume msemaji] Hey, wewe ni kuangalia nzuri huko, Binky.
Je, unaweza kurekebisha ili y pointi pointee sawa kama x? >> [Binky] Uhakika.
Mimi itabidi kutumia wand yangu ya uchawi wa zoezi pointer.
[Kiume msemaji] Ni kwamba kwenda kuwa tatizo kama kabla?
[Binky] Hapana, hii haina kugusa pointees.
Ni tu mabadiliko moja pointer kwa uhakika na kitu sawa kama mwingine. [Popping sound]
[Kiume msemaji] 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 zaidi ya 13.
[Binky] Uh, okay. Hapa unaendelea. [Popping sound]
[Kiume msemaji] Hey, kuangalia kwamba. Sasa dereferencing kazi juu y.
Na kwa sababu kuyatumia wanashiriki kwamba moja pointee, nao wote wawili kuona 13.
[Binky] Yeah, kugawana. Chochote.
>> Hivyo ni sisi kwenda kubadili maeneo sasa?
[Kiume msemaji] Oh kuangalia, tuko nje ya muda. >> [Binky] Lakini -
[Msemaji kiume] Kumbuka tu sheria pointer 3.
Idadi 1, 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 2, pointer dereferencing kuanza saa pointer na ifuatavyo mshale wake juu ya
kupata pointee wake.
Kama sisi wote kujua, hii kazi tu kama kuna pointee,
ambayo aina ya anapata nyuma kutawala namba 1.
Idadi 3, pointer zoezi inachukua moja pointer na hulibadilisha
kwa uhakika na pointee sawa kama pointer mwingine.
Hivyo baada ya zoezi, kuyatumia 2 nitawaelekezeni kwa pointee sawa.
Wakati mwingine kwamba wito kugawana.
>> Na kwamba ni yote kuna ni kweli. Bye bye-sasa.
Hii ni Binky. Hii ni CS50. Tutaweza kuona wewe wiki ijayo. [Applause]
>> [CS50.TV]