DAVID Malan: Hello, na kuwakaribisha nyuma CS50. Hivyo hii ni ya mwisho wa wiki nne. Moja tu tangazo kwanza. Hivyo kinachojulikana tano Jumatatu ni kuja hii Jumatatu ijayo. Hii ni fursa ya kubadili kutoka SAT / UNSAT kwa daraja mbili, au kutoka barua daraja SAT / UNSAT. Annoyingly, mchakato kwamba haina zinahitaji sahihi, kwa sababu una kujaza nje moja ya aina ya wale pink kuongeza / tone. Kwa sababu kitaalam, SAT / UNSAT toleo na toleo barua daraja kuwa na idadi catalog tofauti. Lakini hakuna mpango mkubwa. Tu kuja kwangu au kwa Rob au Lauren katika hatua yoyote. Au barua pepe nasi kama huna aina ya makaratasi unahitaji leo, na sisi kuwa na uhakika na kukusaidia kuchukua huduma ya kwamba kabla ya Jumatatu. Haki ya wote, hivyo leo - kweli, kuna kidogo ya echo. Tunaweza sauti yangu chini kidogo? OK. Hivyo leo, sisi kuanzisha mada inayojulikana kama kuyatumia. Na mimi itabidi kukubali kwamba hii ni moja ya ngumu zaidi mada ya kwamba sisi huwa na kufunika katika darasa hili, au kweli yoyote utangulizi shaka kwamba anatumia C. Lakini kuchukua neno langu kwa ajili yake, hasa kama akili yako anahisi kidogo zaidi bent leo na katika wiki ijayo. Ni si mwakilishi wa wewe kupata yoyote mbaya wakati huu ni njia tu kwamba ni mada hasa kisasa kwamba mimi ahadi, wiki chache hivyo, itakuwa kuonekana yote pia yakawa moja kwa moja katika retrospect. Mimi bado kukumbuka siku hii. Mimi alikuwa ameketi katika Elliott Dining Hall, ameketi karibu na TF yangu Nishat Mehta, ambaye alikuwa mkazi wa Elliott nyumba. Na kwa sababu fulani, hii mada tu Clicks. Ambayo ni kusema kwamba mimi pia alijitahidi na ni kwa baadhi ya kiasi cha muda, lakini mimi kufanya bora yangu ya kusaidia kuepuka vile mapambano na mada kwamba hatimaye ni nguvu kabisa. Kwa kweli, moja ya mada tutaweza kujadili katika wiki ijayo ni kwamba ya usalama, na jinsi unaweza kweli kutumia mashine katika njia kwamba walikuwa si nia. Na wale exploitations ni kawaida matokeo ya mende makosa, kwamba sisi watu kufanya na si kuelewa baadhi ya ya utekelezaji ya msingi maelezo kupitia programu ambayo ni kufanywa. Sasa kufanya hii wanaonekana mtumiaji wote zaidi kirafiki, nilifikiri ningependa kucheza 10 pili hakikisho ya claymation kidogo takwimu aitwaye Binky ambaye aliletwa maisha na rafiki ya yetu katika Stanford, profesa Nick Parlante. Hivyo naomba kukupa hii teaser ya Binky hapa. [Video avspelning] -Hey, Binky. Kuamka. Ni wakati kwa ajili ya kujifurahisha pointer. -Ni nini hiyo? Kujifunza kuhusu kuyatumia? Oh, goodie. [MWISHO video avspelning] DAVID Malan: Hiyo ni Stanford sayansi ya kompyuta. Hivyo zaidi juu ya kwamba kuja. [Makofi] DAVID Malan: Samahani, Nick. Hivyo kukumbuka kuwa mara ya mwisho sisi kumalizika hii cliffhanger kweli kusisimua ambapo kazi hii tu hawakuwa na kazi. Angalau intuitively, waliona kama ni lazima kazi. Tu swapping maadili wa wawili integers. Lakini kukumbuka kwamba wakati sisi kuchapishwa awali ya maadili katika moja kuu, na mbili, bado walikuwa moja na mbili na si mbili na moja. Hivyo basi mimi kweli kubadili juu ya appliance. Na niliandika juu kidogo ya maadili ya kiunzi katika mapema hapa, ambapo mimi kudai kwamba x itakuwa 1, y itakuwa 2. Mimi kisha magazeti nje wote wa zao maadili na f magazeti. Mimi kisha kudai chini hapa kwamba tunakwenda kubadilishana nao. Mimi kushoto doa tupu hapa kwetu kujaza leo katika muda tu. Basi, mimi nina kwenda kudai kwamba vigezo mbili wamekuwa walibadilishana. Basi mimi nina kwenda magazeti yao nje tena. Na hivyo hopefully, mimi lazima angalia 1, 2. 2, 1. Hiyo ni rahisi super lengo hivi sasa. Hivyo ni jinsi gani sisi kwenda juu swapping mbili vigezo? Vizuri kama napendekeza hapa kwamba hawa vikombe wanaweza kuwakilisha kumbukumbu katika kompyuta. Hii ni kuumwa chache, hii mwingine ni kuumwa wachache. Inaweza tuna kujitolea kuja juu ya juu na kuchanganya sisi baadhi ya vinywaji, kama familiar? Kuja juu juu. Nini jina lako? JESS: Jess. DAVID Malan: Jess? Kuja juu juu, Jess. Kama wewe huna akili, tuna kuweka Google vya juu yenu ili tuweze immortalize hii. OK, kioo. Kurekodi video. Na sawa, sisi ni nzuri kwa kwenda na Jess hapa. Wote haki. Nice kukutana na wewe. Basi nini Ningependa kufanya hapa - kama unaweza, kabisa haraka - tu hutoka sisi kioo nusu ya machungwa juisi na nusu glasi ya maziwa, anayewakilisha ufanisi namba 1 katika kikombe kimoja na 2 katika kikombe mengine. Hii ni kwenda kuwa nzuri Footage. JESS: Sorry. DAVID Malan: Hapana, hakuna. Ni sawa. Nice. Haki wote, hivyo tuna ka nne yenye thamani ya maji ya machungwa. Tutaweza kuitwa ni thamani 1. Sasa mwingine ka manne yenye thamani ya maziwa. Itakuwa kuiita thamani 2. Hivyo x na y, kwa mtiririko huo. Haki ya wote, hivyo sasa kama kazi ya saa mkono - kwa ajili yenu, Jess, mbele ya wote wa wanafunzi wako - ni wabadilishane maadili ya x na y vile kwamba tunataka maji ya machungwa katika nyingine kikombe na maziwa katika kikombe hiki, jinsi nguvu wewe - kabla ya kweli kufanya yake - kwenda juu ya kufanya hii? OK, hekima uamuzi. Hivyo unahitaji kidogo zaidi kumbukumbu. Basi hebu kutenga muda kikombe, kama wewe. Na sasa kuendelea wabadilishane x na y. Bora. Hivyo vizuri sana kufanyika. Asante sana, Jess. Hapa ni. souvenir kidogo. OK, hivyo ni wazi, super rahisi wazo. Kabisa angavu kwamba tunahitaji kidogo zaidi ya kuhifadhi nafasi - katika fomu hii, kikombe - kama sisi kweli unataka wabadilishane vigezo hizi mbili. Basi hebu kufanya hasa kwamba. Juu hapa nchini kati ya mahali ambapo mimi kudai mimi nina kwenda kufanya baadhi swapping, mimi itabidi kwenda mbele na kutangaza temp. Na mimi itabidi kuweka sawa na, kusema, x. Basi mimi nina kwenda na mabadiliko ya thamani ya x tu kama alivyofanya Jess hapa na maziwa na maji ya machungwa kuwa sawa na y. Na mimi nina kwenda na mabadiliko y kuwa sawa na si x, kwa sababu sasa tunataka kuwa kukwama katika mduara, lakini badala ya temp. Ambapo mimi muda - au ambapo Jess muda kuweka maji ya machungwa kabla clobbering kwamba kikombe na maziwa. Hivyo basi mimi kwenda mbele sasa na kufanya hii. Ni wito noswap.c. Na sasa basi mimi kukimbia hakuna kubadilishana. Na hakika Mimi naona, kama mimi kupanua dirisha kidogo, kwamba x ni 1, y ni 2. Na kisha x ni 2, y ni 1. Lakini kukumbuka kwamba Jumatatu tulifanya mambo tofauti kidogo ambapo mimi badala kutekelezwa kazi msaidizi, kama wewe, kwamba ilikuwa kweli tupu. Mimi kuitwa ni wabadilishane. Mimi akampa vigezo mbili, na mimi kuitwa wao na mimi aliwaita b. Kusema ukweli, mimi naweza kuwaita x na y. Kuna kitu kuacha mimi kutoka kufanya hivyo. Lakini napenda kusema ni basi utata kidogo. Sababu wanakumbuka kwa Jumatatu kwamba sisi alidai kwamba hawa walikuwa vigezo nakala za maadili ya kupita in Hivyo tu machafuko na yako akili, nadhani, kama matumizi ya hasa vigezo sawa. Hivyo mimi itabidi badala kuwaita na b, tu kwa uwazi. Lakini tungeweza kuwaita zaidi kitu tunataka. Na mimi nina kwenda na nakala na kuweka ufanisi kanuni hii kutoka huko chini ndani hapa. Kwa sababu mimi tu kuona kwamba kazi. Hivyo kwamba ni katika sura nzuri. Na mimi itabidi kubadili x yangu x, yangu ili, y yangu b na y yangu b. Hivyo kwa maneno mengine, exact mantiki. exact kitu kwamba Jess alivyofanya. Na kisha jambo moja mimi kufanya up hapa, bila shaka, ni sasa waomba hii kazi, au piga kazi huu. Hivyo mimi wito huu kazi na mbili pembejeo, x na y, na wimbo wa Hifadhi. Haki ya wote, hivyo kimsingi kitu kimoja. Kwa kweli, nimekuwa pengine alifanya mpango usiokuwa tata na kuandika kazi kwamba tu kuchukua baadhi ya mistari sita ya maadili ambapo mimi hapo awali alikuwa kutekelezwa hii katika tatu tu. Hivyo basi mimi kwenda mbele sasa na remake hii, kufanya hakuna kubadilishana. Haki zote, mimi Star juu hapa. Hii inapaswa kuwa makosa kwamba waweza kuona inazidi kawaida kama yako mipango ya kupata ngumu zaidi. Lakini kuna fix rahisi. Hebu kitabu nyuma hadi hapa. Na nini makosa ya kwanza mimi nina kuona? Kinachojitokeza tamko. Je, kwamba kwa kawaida zinaonyesha? Oh, I forgot mfano. Nimesahau kufundisha mkusanyaji kwamba wabadilishane ni kwenda kuwepo hata ingawa yeye haipo katika mwanzo sana wa mpango. Hivyo nina kwenda tu kusema batili, wabadilishane, int, b int, semicolon. Hivyo mimi nina si kwenda reimplement yake. Lakini sasa ni mechi nini hapa chini. Na notisi, ukosefu wa semicolon hapa, ambayo si muhimu wakati utekelezaji. Hivyo basi mimi remake hii, kufanya hakuna kubadilishana. Bora zaidi sura. Kukimbia hakuna kubadilishana. Na damn it. Sasa tuko nyuma ambapo tulikuwa juu ya Jumatatu, ambapo jambo hakuwa wabadilishane. Na nini maelezo angavu kwa nini hii ni kesi? Yeah? MWANAFUNZI: [inaudible]. DAVID Malan: Hasa. Hivyo na b ni nakala za x na y. Na kwa kweli, wakati wowote wewe tumekuwa wito kazi hivi sasa kwamba hupita vigezo kama ints - tu kama wabadilishane ni kutarajia hapa - nyie wamekuwa kupita katika nakala. Sasa kwa kuwa ina maana inachukua kidogo ya muda, kupasuliwa pili, kwa ajili ya kompyuta na nakala bits kutoka kwa mmoja kutofautiana katika bits ya mwingine. Lakini si kwamba kama mpango kubwa. Lakini wao ni hata hivyo nakala. Na hivyo kwa sasa, katika mazingira ya kubadilishana, Mimi kwa kweli kwa mafanikio kubadilisha b na. Kwa kweli, hebu kufanya haraka sanity kuangalia. Magazeti f ni% i, mpya line. Na kuziba hebu katika. Sasa hebu kufanya kitu kimoja na b. Na hebu kufanya kitu kimoja hapa. Na sasa, napenda nakala mistari hizo hizo tena chini ya kazi tatu baada yangu mistari ya kuvutia wangeweza kunyongwa, na magazeti b na bado tena. Hivyo sasa hebu kufanya hii, kufanya hakuna kubadilishana. Napenda kufanya dirisha terminal kidogo mirefu, ili tuweze kuona zaidi ya mara moja. Na kukimbia hakuna kubadilishana. x ni 1, y ni 2. ni 1, b ni 2. Na kisha, ni 2, b ni 1. Hivyo ni kazi, kama Jess alivyofanya hapa ndani ya kubadilishana. Lakini bila shaka, ni kutokuwa na athari juu ya vigezo katika kuu. Hivyo tuliona hila litupasalo sisi inaweza kurekebisha hili, haki? Wakati wewe ni wanakabiliwa na hii scoping suala hilo, unaweza tu Punt na kufanya x na y aina gani ya vigezo badala yake? Unaweza kufanya nao kimataifa. Kuziweka katika sana juu ya faili kama tulivyofanya, hata katika mchezo wa 15. Sisi kutumia variable kimataifa. Lakini katika mazingira ya mchezo 15, ni busara kuwa na kimataifa kutofautiana anayewakilisha bodi, kwa sababu ukamilifu wa 15.c ni kila kuhusu utekelezaji kwamba mchezo. Hiyo ni nini faili ipo ya kufanya. Lakini katika kesi hii hapa, mimi nina wito wabadilishane kazi. Nataka wabadilishane vigezo mbili. Na ni lazima kuanza kuhisi tu sloppy kama ufumbuzi wa wetu wote matatizo wakati sisi kukimbia katika wigo masuala ya kufanya hivyo ni wa kimataifa. Kwa sababu ya haraka sana mpango wetu ni kwenda kuwa fujo kabisa. Na sisi gani kwamba sana haba kama matokeo katika 15.c. Lakini zinageuka kuna njia bora kabisa. Hebu kweli kwenda nyuma na kufuta magazeti ya f, tu kurahisisha kanuni hii. Na napenda kupendekeza kwamba hii, kwa hakika, ni mbaya. Lakini kama mimi badala kuongeza katika asterisks baadhi na nyota, siwezi badala kugeuka hii kazi katika moja kwamba ni kweli kazi. Hivyo basi mimi kwenda nyuma hapa na kukubali kusema asterisks daima ni mgumu, hivyo mimi itabidi kusema nyota. Mimi itabidi fess hadi kuwa moja. Wote haki. Na sasa, je, Mimi naenda kwa nini badala yake? Hivyo kwanza ya yote, mimi nina kwenda bayana kwamba badala ya kupita katika int kazi wabadilishane, mimi nina badala ya kwenda kusema nyota int. Sasa, je, nyota zinaonyesha? Hii ni kwamba dhana ya pointer kwamba Binky, tabia claymation, alikuwa akimaanisha wakati iliyopita. Hivyo kama sisi kusema nyota int, maana ya hii sasa ni kwamba si kwenda kuwa kupita katika na thamani yake. Ni si kwenda na kunakiliwa in Badala yake, anuani ya ni kwenda kuwa kupita in Hivyo kukumbuka kwamba ndani ya kompyuta yako ni rundo zima la kumbukumbu, vinginevyo inayojulikana kama RAM. Na RAM kwamba ni haki nzima rundo ya ka. Hivyo kama Mac au PC yako ina mbili gigabytes, una 2 bilioni ka ya kumbukumbu. Sasa hebu tu tuseme kwamba tu kuweka mambo nzuri na mpangilio, sisi hawawajui anwani - idadi - kwa kila Byte ya RAM katika kompyuta yako. Byte sana kwanza ya wale 2 bilioni ni kwa sifuri idadi. moja ijayo ni Byte namba moja, idadi mbili, njia yote juu juu, dot dot dot, kwa takribani bilioni 2. Hivyo unaweza idadi ya ka wa kumbukumbu katika kompyuta yako. Hivyo hebu kudhani kwamba kwamba ni nini maana sisi na anwani. Hivyo wakati mimi kuona int nyota a, nini kinaendelea kuwa kupita katika kubadilishana sasa ni anuani ya. Si thamani yake, lakini chochote posta yake anuani ni, hivyo kusema - eneo lake katika RAM. Na vile vile kwa b, mimi naenda kusema kitu kimoja. Int, nyota, b. Kama kando, kitaalam nyota inaweza kwenda katika maeneo mengine. Lakini tutaweza sanifisha juu ya nyota kuwa haki ya karibu na ya aina data. Hivyo wabadilishane saini sasa ina maana, nipe anuani ya int, na wito kwamba anwani. Na nipe anwani nyingine ya int na wito kwamba b anwani. Lakini sasa kanuni yangu hapa ina mabadiliko. Kwa sababu kama mimi kutangaza temp int - ambayo bado ni ya int aina - lakini mimi kuhifadhi ndani yake, aina gani ya thamani? Kuwa wazi, mimi kuweka na kanuni kama imeandikwa hivi sasa? Mimi nina kuweka eneo katika. Lakini mimi sijali kuhusu mahali sasa, haki? Temp ipo tu Jess 'tatu kikombe kuwepo, kwa madhumuni gani? Kuhifadhi thamani. Maziwa au maji ya machungwa. Si kweli kuhifadhi anwani ya aidha ya mambo hayo, ambayo anahisi kidogo nonsensical katika hii halisi dunia muktadha anyway. Hivyo kweli, nini nataka kuweka katika temp si anuani ya, lakini yaliyomo. Hivyo kama ni idadi kama 123, hii ni Byte 123 ya kumbukumbu ya kwamba tu hutokea kwa kuwa occupying, kwamba thamani katika hutokea kwa kuwa uvamizi. Kama mimi nataka kwenda anuani kwamba, Mimi haja ya kusema nyota a. Vile vile, kama ningekuwa na mabadiliko ya nini katika anuani, mimi kubadili hii kuanza. Kama nataka kuhifadhi katika nini katika mahali na nini katika eneo saa b, b nyota nyota. Hivyo katika muda mfupi, hata kama hii si kabisa kuzama katika bado - na mimi bila kutarajia kwamba ingekuwa hivyo haraka - kutambua kwamba wote mimi kufanya ni prefixing nyota hizi kwa vigezo yangu, Msemo si kunyakua maadili. Wala mabadiliko ya maadili. Lakini badala yake, kwenda kwa wale anwani na kupata thamani. Kwenda kwamba anwani na mabadiliko thamani huko. Hivyo sasa napenda kitabu nyuma hadi juu, tu kurekebisha line hii hapa, mabadiliko ya mfano kwa mechi. Lakini mimi sasa haja ya kufanya jambo moja nyingine. Shirikishi, kama nimekuwa iliyopita aina ya hoja wabadilishane kwamba ni kutarajia, nini kingine nahitaji mabadiliko katika kanuni yangu? Wakati mimi wito wabadilishane. Kwa sababu sasa hivi, kile ni Mimi kupita wabadilishane bado? x thamani na thamani ya y, au maziwa na maji ya machungwa. Lakini mimi sitaki kufanya hivyo. Mimi badala unataka kupita katika nini? eneo la x na eneo la y. Je, ni anwani zao za posta, hivyo kusema. Hivyo kufanya hivyo, kuna Ampersand. Ampersand aina ya inaonekana kama anwani. hivyo n, Ampersand, anuani ya x, na anuani ya y. Hivyo ni makusudi kwamba sisi kutumia ampersands wakati wito kazi, na nyota wakati kutangaza na wakati utekelezaji wa kazi. Na tu kufikiria Ampersand kama anuani ya operator, na nyota kama kwenda huko operator - au, vizuri zaidi, dereference operator. Hivyo kwamba ni mengi yote ya maneno tu kusema kwamba sasa, hopefully, wabadilishane ni kwenda kuwa sahihi. Hebu kwenda mbele na kufanya - hebu kweli rename faili, wasije mpango huu bado kuitwa hakuna kubadilishana. Mimi kudai kwamba tutaweza kuiita swap.c sasa. Hivyo kufanya, wabadilishane. Dot, kufyeka, wabadilishane. Na sasa kwa kweli, ni 1 x, y ni 2. Na kisha, x ni 2, y ni moja. Naam hebu angalia kama hatuwezi kufanya hii kidogo kidogo tofauti kama kwa nini kinachoendelea hapa. Kwanza, napenda kuvuta wetu kuchora screen hapa. Na napenda kupendekeza kwa sasa - na wakati mimi kuteka hapa itakuwa huonekana hadi sasa kuna - basi mimi kupendekeza kwamba hapa ni rundo zima la kumbukumbu, au RAM, ndani ya kompyuta yangu. Na hii itakuwa bite ya simu, hebu sema, 1. Hii itakuwa ka namba 2. Na mimi itabidi kufanya rundo zima zaidi, na kisha rundo la dots dot dot zinaonyesha kwamba kuna bilioni 2 ya mambo haya. 4, 5, na kadhalika. Hivyo kuna mitano ya kwanza ka ya kumbukumbu ya kompyuta yangu. Wote haki? Wachache sana nje ya bilioni 2. Lakini sasa mimi naenda kupendekeza zifuatazo. Mimi nina kwenda kupendekeza kwamba x ni kwenda kuhifadhi namba 1, na y ni kwenda kuhifadhi namba 2. Na napenda kwenda mbele sasa na inawakilisha maadili haya kama ifuatavyo. Hebu kufanya hii kama ifuatavyo. Nipe moja tu ya pili. Moja ya pili. OK. Nataka kufanya hii kidogo - hebu kufanya hii tena. Vinginevyo mimi nina kwenda na kutumia hiyo namba, pasipo kukusudia, mara nyingi. Hivyo tu hivyo tuna idadi tofauti kuzungumzia, hebu simu hii Byte simu 123, 124, 125, 126, na dot dot dot. Na napenda sasa wanadai kwamba mimi nina kwenda kuweka thamani 1 hapa, na thamani ya 2 hapa, inayojulikana kama x na y. Hivyo hivyo tu hutokea kwamba hii ni x, y ni hii. Na tu kwa baadhi ya nafasi random, kompyuta, mfumo wa uendeshaji, kilichotokea kwa kuweka x katika eneo simu 123. Na y kuishia kwenye eneo 124 - damn it. Mimi lazima fasta hii. Oh mtu, je, mimi kwa kweli wanataka kufanya hili? Ndiyo, nataka kurekebisha hii na b sahihi juu ya leo hii. Samahani, mpya saa hii. 127, 131, na mimi sitaki kuwa hii tata, lakini kwa nini mimi kubadili idadi huko? Sababu nataka ints kwa kweli kuwa wanne ka. Basi hebu kuwa super anal kuhusu hili. Ili kwamba kama 1 hutokea kushughulikiwa 123, 2 ni kwenda kuwa katika anuani 127 kwa sababu ni 4 tu byes mbali. Hayo ni yote. Na tutaweza kusahau yote ya nyingine anwani katika dunia. Hivyo x ni katika eneo 123, y ni katika eneo 127. Na sasa, je, mimi kwa kweli wanataka kufanya? Wakati mimi wito wabadilishane sasa, nini hasa kinachoendelea? Naam, wakati mimi wito wabadilishane, mimi nina kupita katika anuani ya x na anuani ya y. Hivyo kwa mfano, kama hawa vipande viwili karatasi ya sasa kuwakilisha mbili hoja na b wabadilishane, nini mimi kwenda kuandika juu ya kwanza ya haya, ambayo mimi nina kwenda kuwaita rejea kama? Hasa, 123. Hivyo hii ni mimi kudai. Hii ni parameter. Mimi nina kuweka anuani ya x huko. Nini hiyo? Nini hiyo? Hapana, hakuna. Hiyo ni sawa. Bado ni nzuri, bado ni nzuri. Hivyo hii ni. Na sasa juu ya kipande cha pili cha karatasi, hii ni kwenda kuwa b, na nini mimi kwenda kuwa kuandika juu ya hii kipande cha karatasi? 127. Hivyo kitu pekee ambacho iliyopita tangu kuwaambia yetu ya awali ya hadithi hii ni, badala ya literally 1 na 2, mimi nina kwenda kupita katika 123 na 127. Na mimi nina sasa kwenda kuweka hizi ndani ya ya sanduku hili, wote haki? Ili kwamba sanduku nyeusi sasa inawakilisha kazi wabadilishane. Wakati huo huo, hebu sasa kuwa na mtu kutekeleza kazi wabadilishane. Je mtu hapa kama kujitolea? Kuja juu juu. Nini jina lako? Charlie. Haki zote, Charlie. Kuja juu juu. Hivyo Charlie ni kwenda kucheza jukumu la sanduku wetu nyeusi. Na Charlie, nini Ningependa kufanya sasa ni kutekeleza wabadilishane katika namna kwamba, kutokana na wale anwani mbili, wewe walikuwa kweli kwenda na mabadiliko ya maadili. Na mimi itabidi tetesi katika sikio lako jinsi ya kuendesha TV hapa. Hivyo kwenda mbele, na wewe ni sanduku nyeusi. Kufikia huko. Maadili unaona nini kwa, na maadili unaona nini kwa ajili ya b? CHARLIE: ni 123 na b ni 127. DAVID Malan: OK, hasa. Sasa watakaa huko kwa muda tu. Jambo la kwanza ni kwenda kufanya sasa, kulingana na kanuni - ambayo Mimi itabidi sasa kuvuta juu ya screen - ni kwenda kuwa kutenga kidogo kidogo ya kumbukumbu iitwayo temp. Hivyo nina kwenda mbele na kukupa kwamba kumbukumbu. Hivyo hii ni kwenda kuwa kutofautiana tatu kwamba una kupatikana kwa wewe kuitwa temp. Na nini wewe ni kwenda kuandika kwenye kipande cha karatasi temp? CHARLIE: kuyatumia, haki? DAVID Malan: OK, pia si lazima kuyatumia. Hivyo mstari wa kanuni kwamba nimekuwa yalionyesha upande wa kulia, hebu kuanza huko. Ni anasema nyota a. Hivyo kwa sasa ni kuhifadhi simu 123. Na tu intuitively, nini hakuwa nyota 123 mean? Lakini hasa, ikiwa ni 123, nyota maana yake nini? thamani ya. Au zaidi kawaida, kwenda huko. Hivyo basi mimi kupendekeza kwamba, kufanya katika mkono wako, kwenda mbele na kutibu kwamba kana kwamba ni ramani. Na kutembea mwenyewe juu ya kompyuta kumbukumbu, na kupata sisi ni nini katika eneo 123. Hasa. Hivyo tunaona katika eneo 123 ni nini, ni wazi? OK, hivyo nini thamani ya sasa ni wewe kwenda kuweka katika temp? Hasa. Hivyo kwenda mbele na kufanya hivyo. Na kuandika namba 1 katika kipande cha karatasi hiyo sasa yenye jina temp. Na sasa hatua inayofuata kwamba wewe ni kwenda kutekeleza ni kwenda kuwa nini. Naam, katika mkono wa kulia upande wa ijayo mstari wa kanuni ni nyota b. b, ya Bila shaka, maduka ya anwani. Kuwa anwani 127. Nyota b maana yake nini, casually akizungumza? Kwenda eneo hilo. Hivyo kwenda mbele na kupata sisi nini katika eneo 127. OK. Bila shaka, katika eneo 127, bado ni thamani 2. Basi ni nini kinachoendelea sasa katika kuhifadhi chochote ni katika eneo katika? Hivyo nyota njia kwenda mahali. Je, ni mahali? Hasa. Basi sasa, kama unataka kubadilisha nini katika eneo hilo - Mimi itabidi kwenda mbele na kukimbia Raba ni hapa. Na sasa kuiweka nyuma brashi. Nini idadi ni wewe kwenda kuandika katika sanduku tupu kwamba sasa? Hasa. Hivyo hii mstari wa kanuni, kuwa wazi - basi mimi pause nini Charlie kufanya na kumweka nje ya hapa, nini yeye tu kufanyika ni kuandika ndani ya boksi kuwa katika eneo 123 thamani ya kwamba awali alikuwa katika b. Na hivyo tumekuwa sasa kutekelezwa kwa kweli line hii ya pili ya kificho. Sasa kwa bahati mbaya, kuna bado line moja iliyobaki. Sasa ni nini katika temp, literally? Ni wazi namba moja. Si kwamba anwani. Ni idadi tu, aina ya kutofautiana kutoka wiki moja. Na sasa wakati wewe kusema nyota b, kwamba maana ya kwenda b anwani, ambayo ni ya Bila shaka hapa. Hivyo mara moja kupata huko - Mimi itabidi kwenda mbele na kufuta nini kweli hapo - na ni nini kwenda kuandika sasa katika eneo 127? CHARLIE: Temp, ambayo ni moja. DAVID Malan: Temp, ambayo ni moja. Na nini kinatokea kwa temp katika mwisho? Naam, sisi kwa kweli sijui. Sisi si kweli huduma. Wakati wowote tumekuwa kutekelezwa kazi hivi sasa, yoyote vigezo mitaa una ni kweli mitaa. Na wao tu kutoweka. Wao ni reclaimed na uendeshaji mfumo hatimaye. Hivyo ukweli kwamba bado ana temp thamani 1 ni aina ya kimsingi uninteresting kwetu. Haki ya wote, hivyo pande zote ya applause kama tunaweza kwa Charlie. Vizuri sana kufanyika. Haki ya wote, hivyo nini zaidi anafanya hii ina maana tunaweza kufanya? Hivyo ni zamu nje ambazo tumekuwa kuwaambia chache uongo nyeupe kwa muda kabisa. Hakika, zinageuka kuwa kamba, yote ya wakati huu, si kweli mlolongo wa wahusika per se. Ni aina ya ni kwamba intuitively. Lakini kitaalam akizungumza, kamba ni data aina ya kwamba sisi alitangaza ndani ya Maktaba CS50 kurahisisha dunia kwa ajili ya kwanza wiki chache ya darasa. Nini string kweli ni ni anwani wa tabia ya mahali fulani katika RAM. kamba ya simu ni kweli, kama 123 au 127, kinachotokea kwa kuigawa ambapo kamba huanza katika kompyuta yako ya kumbukumbu. Lakini haina kuwakilisha kamba, per se, yenyewe. Na tunaweza kuona hii kama ifuatavyo. Hebu kwenda mbele na kufungua baadhi ya kanuni hiyo ni miongoni mwa chanzo leo kanuni mifano. Na mimi nina kwenda mbele na kufungua juu, hebu sema, kulinganisha-0.c. Hii ni programu Buggy kwamba ni kwenda kutekelezwa kama ifuatavyo. Kwanza. Mimi nina kwenda kusema kitu. Basi mimi nina kwenda mbele na kupata kamba kutoka mtumiaji kwa kuwa mstari wa pili. Basi mimi nina kwenda kusema tena. Basi mimi naenda kupata mwingine kamba kutoka mtumiaji. Na notisi, mimi nina kuonyesha moja ya masharti katika variable kuitwa, na nyingine ya masharti hayo katika variable kuitwa t. Na sasa mimi nina kwenda kudai, sana sababu, kwamba kama s ni sawa sawa na t, masharti ni sawa. Unapoandika kitu kimoja. Mwingine, masharti ni si kitu kimoja. Baada ya yote, kama sisi pembejeo ints wawili, wawili chars, ikifungwa mbili, mara mbili mbili, yoyote ya aina ya data tumekuwa kuongelea hivi sasa kwa kulinganisha yao - wanakumbuka sisi alifanya wazi sana wakati iliyopita kwamba huna kufanya hivyo, kwa sababu moja ishara sawa ni ya kweli operator zoezi. Hivyo kwamba itakuwa mdudu. Sisi kutumia sawa sawa ishara, ambayo kwa hakika inalinganishwa mambo kwa usawa wa kweli. Lakini mimi kudai hii ni Buggy. Kama mimi kwenda mbele na kufanya kulinganisha sifuri, na kisha kufanya dot kufyeka kulinganisha sifuri. Na mimi aina katika, hebu sema, hello. Na kisha hebu kusema hello tena. Literally kitu kimoja, kompyuta madai mimi niliandika mambo mbalimbali. Sasa labda mimi tu mistyped kitu. Mimi itabidi aina jina langu wakati huu. I mean, hello. Hello. Ni tofauti kila wakati. Naam, kwa nini ni kwamba? Nini kweli kinachoendelea chini ya Hood? Naam, ni nini kweli kinachoendelea chini ya Hood ni kamba kisha Mimi niliandika katika wakati huo wa kwanza kwa mfano ni neno hujambo, bila shaka. Lakini kama sisi kuwakilisha hii chini ya kofia, kukumbuka kwamba kamba ni katika safu. Na tumekuwa alisema kama kiasi katika siku za nyuma. Hivyo kama mimi kuteka kwamba safu kama hii, mimi nina kwenda kuwakilisha kitu kabisa sawa na kile sisi alivyofanya wakati iliyopita. Na kuna kweli kitu maalum hapa, pia. Nini sisi kuamua ilikuwa katika mwisho wa kamba kila? Yeah, hii zero backslash, ambayo ni njia tu ya anayewakilisha, literally, 00000000. Nane 0 bits mfululizo. Sijui, kusema ukweli, nini baada ya hii. Hiyo tu rundo zaidi RAM ndani ya kompyuta yangu. Lakini hii ni safu. Kuongelea arrays kabla. Na sisi kawaida kuzungumzia arrays kama kuwa mahali sifuri, basi mmoja, basi wawili. Lakini hiyo ni kwa ajili ya urahisi. Na kwamba kabisa jamaa. Wakati wewe ni kweli kupata kumbukumbu kutoka kompyuta, ni bila shaka yoyote Bilioni 2 ka baadhi ya isiyo ya kawaida, uwezekano. Hivyo kweli chini ya Hood, muda wote huu, ndiyo. Hii inaweza vizuri sana kuwa mabano sifuri. Lakini kama wewe kuchimba hata zaidi chini ya Hood, kwamba ni kweli kushughulikia idadi 123. Hii ni anwani 124. Hii ni anwani 125. Na sikuwa screw up wakati huu. Haya sasa ni moja ka mbali kwa sababu gani? Jinsi kubwa ni Char? Char ni moja tu Byte. int ni kawaida ya nne ka. Hivyo kwamba ni kwa nini mimi alifanya hivyo 123, 127, 131 na kadhalika. Sasa naweza kutunza hesabu rahisi na tu kufanya pamoja na 1. Na hii sasa ni nini kweli kwenda juu ya chini ya Hood. Hivyo wakati wewe kutangaza kitu kama hii, kamba s, hii ni kweli - zinageuka - Char nyota. Nyota, bila shaka, maana anwani, aka pointer. Hivyo ni anuani ya kitu fulani. Ni nini anwani ya? Naam - Mimi ni mmoja tu ambaye anaweza kuona sana muhimu kumweka mimi nina kufanya, au kufikiri Mimi nina maamuzi. Hivyo kamba - Jambo la kusikitisha ni mimi na kufuatilia haki pale ambapo mimi ingeweza kuonekana kwamba. Haki wote, hivyo kamba s ni nini Mimi alitangaza hapo awali. Lakini zinageuka, shukrani kwa kidogo uchawi katika maktaba CS50, yote hii wakati kamba ana halisi imekuwa Char nyota. nyota tena ina maana pointer au anwani. ukweli kwamba ni flanking neno Char ina maana ni anuani ya tabia. Hivyo kama kupata kamba inaitwa, na ninapoandika katika H-E-L-L-O, sasa kupendekeza nini kupata kamba halisi imekuwa kurudi yote ya wakati huu, hata ingawa tumekuwa badala oversimplified ulimwengu? Je kupata kamba kweli kurudi kama kurudi thamani yake? 123 katika kesi hii, kwa mfano. Tumekuwa awali alisema kwamba kupata kamba tu anarudi kamba, mlolongo wa wahusika. Lakini hiyo ni kidogo ya uongo nyeupe. njia kupata string kweli kazi chini ya Hood ni anapata kamba kutoka mtumiaji. Ni plops wahusika kuwa yeye au aina katika kumbukumbu. Ni unaweka sifuri backslash mwishoni ya wale mlolongo wa wahusika. Lakini basi ni nini kupata kamba literally kurudi? Ni halisi anarudi anwani ya sana kwanza ka katika RAM kwamba kutumika kwa nguvu kwamba. Na zinageuka kuwa tu na kurudi anwani moja ya kwanza tabia katika kamba, kwamba ni kutosha kwa ajili ya kutafuta ukamilifu wa kamba. Kwa maneno mengine, kupata kamba hana kurudi 123 na 124 na 125. Haina kunipa kwa muda mrefu orodha ya yote ya ka kwamba kamba wangu ni kutumia. Kwa sababu moja, wao ni wote nyuma kwa nyuma. Na mbili, ya msingi juu ya anwani ya kwanza, mimi unaweza kufikiri ambapo kamba mwisho. Jinsi gani? maalum null tabia, backslash sifuri mwishoni. Hivyo kwa maneno mengine, kama kupita kote - ndani ya vigezo - anuani ya Char, na kudhani kwamba mwisho wa kamba yoyote, mlolongo wa wahusika kama sisi binadamu kufikiri ya masharti, kama wewe kudhani kwamba mwisho wa kamba yoyote vile kuna sifuri backslash, wewe ni dhahabu. Kwa sababu unaweza daima kupata mwisho wa kamba. Sasa nini kweli kisha kwenda juu katika mpango huu? Kwa nini mpango huu, kulinganisha-0.c, Buggy? Nini ni kweli kuwa ikilinganishwa? Yeah? MWANAFUNZI: [inaudible]. DAVID Malan: Hasa. Ni kulinganisha maeneo ya masharti. Hivyo kama mtumiaji typed katika hodi mara moja, kama mimi, kumbukumbu inaweza kuishia kuangalia kama hii. Kama mtumiaji basi aina katika hodi tena, lakini kwa wito kupata kamba tena, c ni si hasa wajanja isipokuwa wewe kufundisha kuwa ni wajanja na kuandika code. C - na kompyuta kwa ujumla zaidi - kama wewe aina katika neno hodi tena, unajua nini wewe kwenda kupata. Wewe tu kwenda kupata safu ya pili ya kumbukumbu ya kwamba, ndiyo, hufanyika kuwa hifadhi ya H-E-L-L-O na kadhalika. Ni kwenda kuangalia huo kwa sisi binadamu, lakini hii anuani wanaweza kuwa 123. Inaweza tu hivyo kutokea kwamba mfumo wa uendeshaji ina baadhi inapatikana nafasi kwa mfano katika eneo - hebu kusema kitu kiholela, kama hii ni eneo 200. Na hii ni eneo 201. Na hii ni eneo 202. Sisi hatuna wazo ambapo hiyo ni kwenda kuwa katika kumbukumbu. Lakini nini maana ya hii ni kwamba ni nini kwenda kuhifadhiwa hatimaye katika s? simu 123. Nini kinaendelea kuhifadhiwa katika t, katika mfano huu holela? simu 200. Na wote kwamba ina maana basi ni wazi, 123 haina sawa 200. Na hivyo kama hali hii kamwe kutathmini kwa kweli. Kwa sababu kamba wa kupata ni kwa kutumia tofauti bonge la kumbukumbu kila wakati. Sasa tunaweza kuona hili tena katika mfano mwingine. Hebu kwenda mbele na kufungua nakala-0.c. Mimi kudai kwamba mfano huu ni kwenda kujaribu - lakini kushindwa - nakala masharti mawili kama ifuatavyo. Mimi nina kwenda kusema kitu kwa mtumiaji. Mimi kisha kwenda kupata kamba na kuiita s. Na sasa, mimi nina kufanya hii kuangalia hapa. Sisi zilizotajwa hii nyuma wakati. Lakini wakati ili kupata kamba kurudi null, mwingine tabia maalum, au maalum ishara hebu kusema. Kama ni nje ya kumbukumbu. Kwa mfano, kama mtumiaji ni kweli kuwa ngumu na aina mauaji idadi ya herufi katika keyboard na hits kuingia. Kama kwamba idadi ya herufi tu hawezi fit katika RAM kwa chochote mambo sababu, pamoja na kupata kamba nguvu vizuri sana kurudi null. Au kama programu yako yenyewe ni kufanya mengi ya mambo mengine na kuna tu si kumbukumbu ya kutosha kwa kamba wa kupata kufanikiwa, Ni ili mwisho hadi kurudi null. Lakini hebu kuwa sahihi zaidi kama yale hii ni. Je, ni s ya data aina kweli? Char nyota. Hivyo zinageuka sasa tunaweza peel nyuma ya safu ya null. Zinageuka, null ni - ndiyo, ni wazi alama maalum. Lakini ni nini kweli? Kweli, null ni ishara ya kwamba sisi binadamu kutumia kuwakilisha sifuri pia. Hivyo waandishi wa C, na kompyuta zaidi kwa ujumla, aliamua miaka iliyopita kwamba, unajua nini. Mbona sisi kuhakikisha kwamba hakuna mtumiaji data ni milele, milele, milele kuhifadhiwa katika sifuri bye? Kwa kweli, hata katika mfano wangu holela kabla, mimi si kuanza hesabu ka katika sifuri. Mimi kuanza saa moja. Kwa sababu nilijua watu kwamba katika ulimwengu wameamua hifadhi ya sifuri Byte katika RAM ya mtu yeyote kama kitu maalum. Sababu ya kuwa, wakati wowote unataka ishara kwamba kitu amekwenda vibaya kuhusiana na anwani, wewe akarudi null - inayojulikana kama sifuri - na kwa sababu unajua kwamba hakuna legit data katika anuani sifuri, ni wazi kwamba maana makosa. Na kwamba ni kwa nini sisi, kwa mkataba, angalia kwa ajili ya kitu null na kurudi kama moja katika kesi hizo. Hivyo kama sisi kitabu chini sasa, hii ni kisha baadhi ya kuangalia makosa, tu katika kesi kitu potoka na [? dhamana?] kabisa na kuacha mpango na kurudi mapema. Line hii sasa inaweza kuandikwa upya kama hii, ambayo maana yake nini? Upande wa kushoto, nipe mwingine pointer tabia, na kuiita t. Je, Mimi hifadhi ndani ya t, msingi juu ya mstari huu moja ya kanuni? Mimi kuhifadhi mahali. Hasa eneo kwamba alikuwa katika s. Hivyo kama mtumiaji typed katika hello, na kwamba kwanza hujambo hufanyika na kuishia hapa, basi idadi ni 123 kwenda kuja nyuma kutoka kupata kamba na kuhifadhiwa - kama sisi alisema mapema - katika s. Wakati mimi sasa kutangaza mwingine pointer t Char na simu yake, ni nini idadi literally kwenda kuishia katika t kwa mujibu wa hadithi? Hivyo 123. Basi kitaalam sasa zote s na t ni akizungumzia halisi huo chunks ya kumbukumbu. Hivyo taarifa nini mimi kwenda kufanya sasa kwa kuthibitisha kwamba mpango huu ni Buggy. Kwanza mimi nina kwenda kudai, na f magazeti, kuyafanyia nakala ya kamba. Basi mimi naenda kufanya kidogo Hitilafu ya kuangalia. Mimi nina kwenda kuhakikisha. Hebu kuhakikisha kwamba t kamba ni saa angalau zaidi ya sifuri kwa urefu, hivyo kuna tabia ya baadhi ya huko kwa kweli capitalize. Na basi unaweza kukumbuka hii kutokana na mifano uliopita. 2 ya juu - ambayo ni katika faili ctype.h. T mabano sifuri anitiaye sifuri tabia ya t kamba. Na 2 ya juu ya thamani hiyo hiyo, ya Bila shaka, waongofu kwa uppercase. Hivyo intuitively, hii yalionyesha line ya maadili ni kuyafanyia kwanza barua katika t. Lakini siyo kuyafanyia, shirikishi, barua ya kwanza katika s. Lakini kama wewe ni kufikiri mbele, nini mimi juu ya kuona wakati mimi kuendesha mpango huu na magazeti nje wote awali, s, na nakala kinachojulikana, t? Wao ni kweli kwenda kuwa sawa. Na kwa nini ni wao kwenda kuwa sawa? Wao ni wawili akizungumzia hasa kitu kimoja. Basi hebu kufanya hili. Kufanya nakala sifuri. Inaandaa OK. Basi mimi kukimbia nakala sifuri. Hebu aina kitu kama hujambo katika lowercase wote kisha hit kuingia. Na ni madai kwamba wote ya awali na nakala ni kweli kufanana. Basi nini hasa kilichotokea hapa? Hebu redraw picha hii tu kuwaambia hadithi katika njia tofauti kidogo. Nini kweli kinachoendelea chini ya kofia wakati mimi kutangaza kitu kama Char kuanza s, au kamba s, I am kupata pointer - ambayo hutokea kwa kuwa wanne ka katika appliance CS50 na katika mengi ya kompyuta. Na mimi naenda kuwaita hii s. Na hii sasa ina baadhi ya thamani haijulikani. Wakati wewe kutangaza kutofautiana, isipokuwa wewe mwenyewe kuweka thamani pale, ambao anajua kuna nini huko. Ni inaweza kuwa baadhi ya mlolongo random ya bits kutoka utekelezaji uliopita. Hivyo wakati mimi, katika line yangu ya maadili ya kufanya kupata kamba, na kisha kuhifadhi kurudi thamani katika s kupata kamba namna fulani - na hatimaye tutaweza peel nyuma jinsi kupata kamba kazi, kwa namna fulani kutenga safu kwamba pengine inaonekana kidogo kama hii. H-E-L-L-O, backslash sifuri. Hebu tuseme kwamba hii ni anwani 123 tu kwanza msimamo. Hivyo kupata faida kamba, katika yalionyesha line huko, kuirudisha idadi sisi alisema, 123. Hivyo kile kweli inakwenda ndani ya s hapa? Naam, ni nini kweli inakwenda ndani ya s ni 123. Lakini kusema ukweli, mimi nina kupata kidogo kuchanganyikiwa na wote wa anwani hizi, wote wa namba hizi kiholela. 123, 124, 127. Basi hebu kweli kurahisisha dunia kidogo. Tunapozungumzia kuhusu kuyatumia, kusema ukweli, kwa sisi binadamu, ambaye heck anayejali ambapo mambo ni katika kumbukumbu? Hiyo kabisa holela. Ni kwenda itategemea jinsi kiasi RAM mtumiaji ana. Ni kwenda hutegemea wakati katika siku wewe kukimbia mpango, pengine, na nini pembejeo user anakupa. Sisi ni makao juu ya maelezo muhimu. Hivyo abstract hebu mbali na kusema kwamba, wakati kukimbia mstari wa kanuni kama hii, Char nyota s anapata kurudi thamani ya kamba wa kupata. Mbona sisi badala tu kuteka nini sisi kuweka wito pointer kama ingawa ni akionyesha kitu? Hivyo mimi kudai kwamba sasa s hadi kuna pointer - chini ya Hood ni anwani. Lakini ni tu akizungumzia Byte ya kwanza katika kamba kwamba imekuwa akarudi. Kama mimi sasa kurudi katika kanuni hapa, nini kinaendelea katika mstari huu? Naam, katika mstari huu yalionyesha sasa, Mimi kutangaza inaonekana mwingine variable kuitwa t. Lakini pia ni pointer, hivyo mimi nina kwenda kuteka ni kama, katika nadharia, halisi huo ukubwa sanduku. Na mimi nina kwenda kwa simu yake t. Na sasa kama sisi kurudi nyuma kwa kificho tena, wakati mimi kuhifadhi s ndani ya t, nini mimi kitaalam kuweka ndani ya t? Vizuri kitaalam, hii mara 123 ya simu. Hivyo kweli mimi lazima kuandika 123 ya simu huko. Lakini hebu kuchukua ni ngazi ya juu. t, ikiwa tu ni pointer, intuitively, ni hivyo tu. Hayo ni yote hiyo ni kuwa kuhifadhiwa katika huko. Hivyo sasa katika mistari ya mwisho ya kuvutia wa kanuni, wakati mimi kwa kweli kwenda juu kuyafanyia tabia sifuri katika t, ni nini kinaendelea? Naam, t mabano sifuri sasa akizungumzia kwa nini tabia, labda? Ni akizungumzia h. Kwa sababu t mabano sifuri - kukumbuka, hii ni ya zamani syntax. t bracket sifuri tu ina maana kama t ni kamba, t bracket sifuri ina maana kupata sifuri tabia kwa nguvu kwamba. Hivyo kile kwamba kweli ina maana ni kwenda safu hii - na ndiyo, hii inaweza kuwa 123, hii inaweza kuwa 124. Lakini zote ni jamaa, kukumbuka. Wakati wowote kuzungumza juu ya safu, tuna faida ya kuzungumza juu ya jamaa fahirisi. Na hivyo sasa tunaweza tu kudhani kwamba t mabano sifuri ni h. Hivyo kama mimi wito 2 ya juu juu yake, nini kwamba kweli kufanya ni kuwekeza h lowercase kwa uppercase H. Lakini bila shaka, ni nini s? Ni akizungumzia kamba huo darn. Hivyo hii ni kwamba wote ya kinachotokea katika kanuni hii hadi sasa. Basi nini basi maana? Jinsi gani sisi kurekebisha matatizo haya mawili? Jinsi gani sisi kulinganisha na masharti halisi? Vizuri intuitively, jinsi gani wewe kwenda juu ya kulinganisha mbili masharti kwa usawa wa kweli? Ni nini maana kama mbili masharti ni sawa? Wazi si kwamba anwani zao ni sawa katika kumbukumbu, kwa sababu hiyo ni ya chini ngazi ya utekelezaji undani. Wahusika wote ni sawa. Hivyo basi mimi kupendekeza, na napenda kuanzisha katika toleo moja ya compare.c hapa, hivyo kulinganisha-1.c. Napenda kupendekeza kwamba sisi bado kupata pointer kuitwa, na kuhifadhi katika ni kurudi thamani ya string wa kupata. Hebu kufanya kitu kimoja na t. Hivyo hakuna wa kanuni ni tofauti. Mimi nina kwenda kuongeza kidogo zaidi kosa kuangalia sasa. Hivyo sasa kwamba sisi ni aina ya peeling nyuma hii tabaka katika CS50 wa kamba nini kweli ni, tunahitaji kuwa zaidi anal kuhusu kuhakikisha sisi si vibaya batili maadili kama null. Hivyo nina kwenda tu kuangalia. Kama s haina null sawa na t haina null sawa, kwamba ina maana sisi ni OK. Kupata kamba hakuwa screw up kupata ama ya wale masharti. Na unaweza labda nadhani sasa, nini haina STR CMP labda kufanya? Kamba kulinganisha. Hivyo kama wewe wameweza mpango java kabla, hii ni kama njia sawa katika kamba darasa. Lakini kwa wale ambao hawana iliyowekwa mbele, hii ni kazi c. Hutokea kwa kuja katika faili inayoitwa string.h. Hiyo ambapo ni alitangaza. Na kamba kulinganisha - Mimi kwa kweli kusahau matumizi yake, lakini kamwe akili kwamba. Kumbuka kwamba tunaweza kufanya mtu, koroga kulinganisha. Na hii ni kwenda kuleta Linux programmers mwongozo. Na ni, kusema ukweli, kidogo fumbo. Lakini mimi naona hapa kwamba, yep. Nina kuingiza string.h. Na inasema hapa chini ya maelezo, " kamba kulinganisha kazi inalinganishwa masharti mawili S1 na S2 ". Na S1 na S2 inaonekana ni mbili hoja kupita in Mimi si kweli kukumbuka kile const ni, lakini sasa taarifa - na unaweza kuona hii tayari wakati wameweza kutumia kurasa mtu kama wewe kuwa ni wote - kwamba nyota Char ni sawa na kamba. Hivyo inalinganishwa masharti mawili, S1 na S2, na kuirudisha integer chini zaidi au sawa na au zaidi ya sifuri kama S1 ni kupatikana, kwa mtiririko huo, kwa kuwa chini ya, au mechi, au kuwa zaidi ya S2. Hiyo ni njia tu ngumu sana ya kusema kwamba string kulinganisha anarudi sifuri kama mbili masharti ni shirikishi kufanana, tabia kwa tabia kwa ajili ya tabia. Kuirudisha simu hasi kama s, alphabetically, zinatakiwa kuja kabla ya t. Au anarudi idadi chanya kama s zinatakiwa kuja baada ya t alphabetically. Hivyo, pamoja na kazi hii rahisi, inaweza wewe, kwa mfano, aina nzima rundo la maneno? Hivyo katika toleo hili jipya, mimi naenda kwenda mbele na kufanya compare1. Dot kufyeka kulinganisha moja. Mimi itabidi aina katika hujambo katika kesi zote za chini. Mimi naenda aina katika hujambo katika lowercase yote tena. Na nashiriki sasa anatambua Mimi niliandika kitu kimoja. Wakati huo huo, kama mimi aina katika hodi katika chini kesi na na HELLO katika kesi ya juu kulinganisha yao, mimi niliandika mambo tofauti. Kwa sababu si tu ni anwani tofauti, lakini sisi ni kulinganisha tofauti wahusika tena na tena. Naam hebu kwenda moja na kurekebisha nyingine tatizo sasa. Napenda kufungua toleo moja ya nakala, ambayo sasa unashughulikia suala hili kama ifuatavyo. Na hii moja kwenda kuangalia kidogo ngumu zaidi. Lakini kama wewe kufikiri kuhusu nini tatizo sisi haja ya kutatua, hopefully hii itakuwa wazi katika muda tu sasa. Hivyo hii mstari wa kwanza, char kuanza t, katika layman suala inaweza kupendekeza mtu nini mstari huu hapa maana yake? Char nyota t, nini ni kwamba kufanya? Nzuri. Kujenga pointer baadhi doa katika kumbukumbu. Na napenda kuburudisha ni kidogo kidogo. Kutangaza variable kwamba mapenzi kuhifadhi anuani ya baadhi Char katika kumbukumbu, tu kuwa zaidi kidogo sahihi. OK, hivyo sasa kwenye upande wa kulia, nimekuwa kamwe kuona moja ya kazi hizi kabla, malloc. Lakini, nini kinaweza kuwa na maana? Mgao wa kumbukumbu. Kumbukumbu mgao. Hivyo ni zamu nje, hadi sasa, sisi si kweli alikuwa na njia ya nguvu ya kuuliza mfumo wa uendeshaji, kunipatia kumbukumbu. Badala yake, sasa tuna kazi kuitwa malloc kwamba gani hasa kwamba. Hata ingawa hii ni kidogo ya ovyo sasa hivi, taarifa kwamba katika kati ya mabano mbili ni kwenda tu kuwa na idadi. Ambapo nimekuwa typed katika swali alama unaweza kuwa idadi. Na kwamba idadi hiyo ina maana, nipe ka 10. Nipe ka 20. Nipe ka 100. Na malloc kufanya bora zake kwa kuuliza mfumo wa uendeshaji - Linux, katika kesi hii - hey, ni zao 100 ka ya RAM inapatikana? Kama ni hivyo, kurudi ka wale kwangu kwa kurudi anuani ambayo ya wale ka, labda? sana kwanza moja. Hivyo hapa pia - na hii ni iliyoko katika C, wakati wowote wewe ni kushughulika na anwani? Wewe ni karibu daima kushughulika na kwanza vile anwani, hakuna jambo gani kubwa chunk ya kumbukumbu wewe ni kuwa mitupu nyuma, hivyo kusema. Basi hebu kupiga mbizi katika hapa. Mimi ni kujaribu kutenga jinsi wengi ka, hasa? Vizuri. Urefu wa kamba s - hebu kufanya mfano halisi. Kama s ni hello, H-E-L-L-O, nini urefu wa kamba s, ni wazi? Hivyo ni tano. Lakini mimi nina kufanya 1 pamoja na kwamba, kwa nini? Kwa nini mimi nataka ka sita badala ya tano? tabia null. Mimi si wanataka kuondoka mbali hii maalum null tabia. Kwa sababu kama mimi kufanya nakala ya Habari na tu kufanya H-E-L-L-O, lakini mimi si kuweka kwamba tabia maalum, kompyuta wanaweza kuwa na, kwa bahati, backslash sifuri pale kwa ajili yangu. Na hivyo kama mimi kujaribu kufikiri urefu wa nakala, mimi kufikiri kwamba ni 20 wahusika kwa muda mrefu, au milioni wahusika kwa muda mrefu kama mimi tu kutokea kamwe kuikumba sifuri backslash. Hivyo tunahitaji sita ka kuhifadhi H-E-L-L-O, backslash sifuri. Na kisha hii ni kuwa super anal. Tuseme kwamba mimi kusahau yale ukubwa wa Char ni. Sisi kuendelea kusema ni moja Byte. Na ni kawaida ni. Katika nadharia, inaweza kuwa kitu tofauti, juu ya Mac tofauti au tofauti PC. Hivyo ni zamu nje kuna operator hii kuitwa sizeof kwamba kama wewe kupita jina la aina data - kama Char, au int, au kuelea - itakuambia, dynamically, wangapi ka Char inachukua hadi juu ya hii hasa kompyuta. Hivyo hii ni ufanisi tu kama kusema mara 1 au mara kitu. Lakini mimi nina kufanya hivyo tu kuwa super anal, kwamba tu katika kesi Char hutofautiana kwenye kompyuta yako dhidi ya mgodi, kwa njia hii math daima kwenda kuangalia nje. Mwisho, chini hapa mimi kuangalia kwa null, ambayo daima ni mazoezi mazuri - tena, wakati wowote sisi ni kushughulika na kuyatumia. Kama malloc hakuwa na uwezo wa kutoa mimi sita byes - ambayo ni uwezekano, lakini tu katika kesi - kurudi moja mara moja. Na sasa, kwenda mbele na nakala kamba kama ifuatavyo. Na hii ni ukoo syntax, angalau katika nafasi tofauti. Mimi nina kwenda mbele na kupata kamba urefu wa s na kuhifadhi katika n. Mimi kisha kwenda iterate kutoka i sawa sifuri hadi na pamoja n, mkubwa kuliko au sawa na. Hivyo kwamba katika kila iteration, mimi kuweka idh tabia ya s katika idh tabia ya t. Basi nini kweli kinachoendelea chini ya Hood hapa? Vizuri kama hii, kwa mfano, ni s - na mimi kuwa typed katika neno H-E-L-L-O na kuna sifuri backslash. Na tena, hii ni s akizungumzia hapa. Na hapa sasa ni t. Na hii ni akizungumzia sasa nakala ya kumbukumbu, haki? Malloc amenipa nzima chunk ya kumbukumbu. Sijui awali nini yoyote ya maeneo hayo. Hivyo nina kwenda kufikiria haya kama kundi zima la alama swali. Lakini kwa haraka kama mimi kuanza looping kutoka sifuri juu juu kupitia urefu wa s, t mabano mabano sifuri na t 1 - na mimi itabidi kuweka hii sasa juu ya uendeshaji - t mabano sifuri na s mabano sifuri maana kwamba mimi nina kwenda kuwa kuiga iteratively h katika hapa, E-L-L-O. Plus, kwa sababu sikuwa pamoja 1, backslash sifuri. Hivyo sasa katika kesi ya kulinganisha-1.c, katika mwisho, kama mimi magazeti nje mtaji wa t, tunapaswa kuona kwamba s ni bila kubadilika. Hebu kwenda mbele sasa na kufanya hii. Hivyo kufanya copy1. Dot kufyeka copy1. Mimi naenda aina katika hello, kuingia. Na sasa taarifa, tu nakala imekuwa mtaji. Kwa sababu mimi kweli kuwa mbili chunks ya kumbukumbu. Kwa bahati mbaya, unaweza kufanya baadhi pretty mbaya na pretty hatari mambo hapa. Hebu vuta hadi mfano hapa sasa, ambayo inatupa mfano wa wachache tofauti mistari. Hivyo tu intuitively hapa, mstari wa kwanza ya maadili, int nyota x, ni kutangaza variable kuitwa x. Na nini aina data ya kutofautiana kwamba? Nini data aina ya kutofautiana kwamba? Hiyo ilikuwa si cliffhanger. aina ya data ni int nyota. Hivyo nini maana gani? x mapenzi kuhifadhi anwani ya int. Rahisi kama hiyo. Y ni kwenda kuhifadhi anuani ya int. Ni nini mstari wa tatu ya maadili ya kufanya huko? Ni kugawa ngapi ka, uwezekano mkubwa zaidi? Nne. Sababu ya ukubwa wa int ni ujumla nne, malloc ya nne inatoa mimi nyuma anuani ya chunk ya kumbukumbu, ya kwanza ya ka ambaye ni kuhifadhiwa sasa katika x. Sasa sisi ni kusonga kidogo haraka. Nyota x maana yake nini? Ina maana kwamba kwenda anuani na kuweka nini idadi huko? Kuweka namba 42 huko. Nyota y ina maana kwenda kwa nini saa y na kuweka namba 13 huko. Lakini kusubiri dakika. Je, ni katika y wakati huu? Nini anwani ni y hifadhi? Hatujui, haki? Sisi kamwe mara moja kutumia zoezi operator kuwashirikisha y. Hivyo y kama alitangaza juu ya mstari wa pili wa code ni baadhi tu ya thamani ya takataka, kubwa alama ya kuuliza hivyo kusema. Ni inaweza kuwa akizungumzia nasibu na kitu chochote katika kumbukumbu, ambayo ujumla ni mbaya. Hivyo kwa haraka kama sisi hit kwamba line huko, nyota y sawa na 13, kitu mbaya, kitu mbaya sana ni juu ya kutokea kwa Binky. Basi hebu angalia nini kinaendelea na kuishia kinachotokea kwa Binky hapa katika dakika hii au ili kuangalia. [Video avspelning] -Hey, Binky. Kuamka. Ni wakati kwa ajili ya kujifurahisha pointer. -Ni nini hiyo? Kujifunza kuhusu kuyatumia? Oh, goodie. -Naam, kupata ilianza, mimi nadhani sisi ni kwenda haja ya kuyatumia wanandoa. -OK. Kanuni hii kutenga kuyatumia mbili ambayo unaweza kumweka kwa integers. -OK, vizuri, naona kuyatumia mbili. Lakini hawana wanaonekana kuwa na akizungumzia kitu. -Hiyo ni haki. Awali, kuyatumia hawana uhakika na kitu chochote. mambo uhakika na walioitwa pointees, na kuweka yao juu ni tofauti hatua. -Oh, haki, haki. Nilijua kwamba. pointees ni tofauti. Hivyo ni jinsi gani kutenga pointee? -OK. Naam, kanuni hii kutenga integers mpya pointee, na hii sehemu seti x kwa uhakika na hilo. -Hey, kwamba inaonekana zaidi. Hivyo kufanya ni kufanya kitu. -OK. Mimi itabidi dereference x pointer kuhifadhi namba 42 katika pointee wake. Kwa hila hii, mimi itabidi uchawi wangu wand ya dereferencing. Wako-uchawi wand ya dereferencing? Uh, kwamba ni kubwa. -Hii ni nini kanuni inaonekana kama. Mimi itabidi kuweka idadi, na - -Hey, kuangalia. Kuna unaendelea. Kufanya hivyo dereference juu ya x ifuatavyo mshale wa kupata pointee wake. Katika kesi hiyo, kuhifadhi 42 huko. Hey, jaribu kutumia na kuhifadhi idadi 13 kupitia pointer nyingine, y. -OK. Mimi itabidi kwenda juu hapa y na kupata namba 13 kuanzisha. Na kisha kuchukua wand ya dereferencing na tu - Ho! -Oh, hey. Kwamba hakuwa na kazi. Kusema, Binky, sidhani dereferencing y ni wazo nzuri, kwa sababu ya kuanzisha pointee ni hatua tofauti. Na sidhani sisi milele alifanya hivyo. -Hmm. Hatua nzuri. -Yeah, sisi zilizotengwa y pointer. Lakini sisi kamwe kuweka kwa uhakika na pointee. -Hmm. Sana mwangalifu. -Hey, wewe ni kuangalia nzuri huko, Binky. Je, unaweza kurekebisha ili y pointi kwa pointee huo kama x? -Sure. Mimi itabidi kutumia wand yangu ya uchawi wa pointer zoezi. -Ni kwamba kwenda kuwa tatizo kama kabla? -Hakuna. Hii haina kugusa pointees. Ni tu mabadiliko moja pointer kwa uhakika kwa kitu sawa kama mwingine. -Oh, naona. Sasa y pointi kwa nafasi sawa na x. Hivyo kusubiri. Sasa y ni fasta. Ina pointee. Hivyo unaweza kujaribu wand ya dereferencing tena kutuma 13 juu. -OK. Hapa unaendelea. -Hey, kuangalia kwamba. Sasa dereferencing kazi juu y. Na kwa sababu kuyatumia wanashiriki kwamba pointee mmoja, wao wote kuona 13. -Yeah. Kugawana. Chochote. Hivyo ni sisi kwenda maeneo kubadili sasa? -Oh, kuangalia. Tuko nje ya muda. -Lakini - Kumbuka tu-tatu pointer sheria. Namba moja, 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 kwa kusahau aliyopewa pointee. Namba mbili, pointer dereferencing kuanza saa pointer na ifuatavyo yake mshale juu ya kupata pointee wake. Kama sisi wote kujua, hii kazi tu kama kuna ni pointee, ambayo anapata nyuma kutawala namba moja. Namba tatu, pointer zoezi inachukua moja pointer na mabadiliko yake kwa uhakika na pointee huo kama pointer mwingine. Hivyo baada ya kazi, kuyatumia mbili mapenzi uhakika na pointee sawa. Wakati mwingine kwamba wito kugawana. Na kwamba wote kuna hiyo, kwa kweli. Bye bye sasa. [MWISHO video avspelning] DAVID Malan: Hivyo zaidi juu ya kuyatumia, zaidi juu ya wiki Binky ijayo. Tutaweza kuona juu ya Jumatatu.