SPIKA 1: Hi kila mtu. Sisi ni kwenda kupata kuanza. Nadhani watu bado ni kwenda kuwa kuchuja katika. Lakini kwa maslahi ya muda, hivyo tunaweza kupata wewe guys nje ya hapa kwa wakati, sisi ni kwenda kuanza. Hivyo kuwakaribisha kwa CS50 Quiz 0 mapitio. Kwa wale wa wewe ambao si barabara hata hivyo, una swali juu ya Jumatano. Woo-hoo. Kama si kuanza kusoma bado au si waligundua kwamba hii ipo bado, zamani Quizzes na wote wa habari kuhusu Jaribio yako ni juu ya cs50.net/quizzes. Kuna baadhi ya mambo nzuri juu ya huko, zamani Quizzes kutoka mwisho 10 miaka kama vile habari kuhusu jaribio hili na mada ambayo itakuwa kufunikwa. Basi hebu kupata kuanza. Hivyo guys wanaweza kukumbuka, kwanza siku ya darasa Daudi alikuwa taa wale. Hivyo kimsingi, kila kitu kwamba huenda juu ya chini ya Hood ya kompyuta ni kufanyika katika binary. Binary nini maana ya sauti kama, 0 na 1 ya. Ina maadili mawili ambayo inaweza kuwakilishwa. Hivyo tu kama katika siku ya kwanza ya sehemu wakati David akageuka juu mwanga bulb kuwakilisha juu, au 1, kompyuta yetu anaelewa binary kama 0 na 1 ya, juu au mbali. Misingi ya Binary. Kila mahali ni kuwakilishwa katika msingi mbili. Hivyo kuongeza 2-0 kwa 1 to 2 njia yote juu. Kukokotoa kile ambacho binary yako ni decimal, wewe tu kufuata equation hii aina kitu. Kama una 1 katika yoyote ya maeneo hayo, wewe kuzidisha ni kwa chochote msingi ni katika, kuongeza it up, na kupata decimal. Hivyo hii ni jinsi gani kuhesabu 5 katika binary. Tu kama nini tunafanya juu ya mwisho slide, hii ni jinsi gani ingekuwa kuwakilisha 1 kwa 5. Vile vile, tu kama unaweza kuongeza na Ondoa katika decimal au msingi 10, au kweli msingi wowote, juu ya anaweza kuongeza na Ondoa katika binary. Hasa nini ungependa kutarajia wakati wewe kuongeza mbili up, ikiwa ni sawa na zaidi ya 1, kubeba 1, kufanya hivyo 0, na kufanya Aidha njia hiyo, tu kama ungependa kutarajia kwa mara kwa mara au msingi decimal nyingine yoyote. Baridi. Hivyo kama nilivyosema hapo kabla, kila kitu unaendelea chini ya Hood ya kompyuta na yetu ni kufanyika katika 0 na 1, au binary. Hivyo ni jinsi gani sisi kueleza, kwa mfano, barua, au namba, au wahusika? Na jibu la kwamba ni ASCII. ASCII ni ramani kati ya wahusika kwamba tunataka kawaida kuona katika Lugha ya Kiingereza kama A ya, B ya, C ya, kusisitiza, dashes, na kitu kama hicho. Na ramani kwamba kwa thamani ASCII. Thamani ASCII ni idadi tu kwamba inaweza kueleweka na kompyuta yako. Na kama unaweza kufanya kujumlisha na kutoa na namba, unaweza kufanya yao na maadili ASCII. Hivyo katika mfano huu, nini itakuwa hii magazeti nje? Yeah, hivyo tu nafasi B nafasi C nafasi D. wapi panya yangu kwenda? Taarifa unaweza kufafanua int saa 65. Na wakati wewe magazeti kwamba nje kwa kutumia asilimia C, kutakuwa na kutafsiri kwamba kama tabia na magazeti nje A. Vile vile, unaweza kutangaza ni kama char. Na wakati magazeti ya nje kwa kutumia asilimia C, kutakuwa na kutafsiri kwamba kama asilimia D. Na kama unaweza kuongeza simu, unaweza kuongeza wahusika ni Maadili ASCII, katika kesi hii. Hivyo pointer kidogo kwa ajili ya kila mtu. 5, kama kamba, haina kweli sawa 5. Hivyo jinsi gani sisi kubadilisha kamba 5 kwa integer 5? Mawazo yoyote? Yeah. Hivyo kama tuna 5 kama kamba, tunaweza Ondoa 0. Na kwamba itabidi kutupa 5. Na vile vile, kama tuna 5 kama integer, kuongeza kwamba kwa kamba 0. Na kwamba inatupa kamba 5. Baridi. Sasa, kukumbuka nyuma kwa hotuba moja ambapo kuongelea algorithms. Hivyo ni jinsi gani sisi kweli wanataka kompyuta kufanya mambo ya kuvutia? Unajua, kuongeza na subtracting tu namba na uchapishaji mambo ya nje ni si kwamba kusisimua. Kwa kawaida, tunataka kompyuta yetu kwa kufanya baadhi ya aina ya algorithm. Kitu kidogo ngumu zaidi kuliko rahisi tu hesabu. algorithm ni tu hatua kwa hatua kuweka ya maelekezo ya jinsi ya kufanya task-- fulani tu kama mapishi. Unaweza kukumbuka siku ya kwanza ya darasa ambapo Daudi alikuwa us kuhesabu chumba ya watu na jinsi watu wengi walikuwa katika chumba. Unaweza kutumika kwa kuhesabu moja kwa moja. 1, 2, 3, 4. Katika kesi hiyo, linear wakati algorithm. Lakini Daudi ilianzisha algorithm kwa wewe kuhesabu watu katika chumba ambapo kila mtu anasimama up, unaweza kusema yako simu kwa mtu mwingine, kuongeza kwamba idadi juu, na mtu mmoja anakaa chini. Na wewe kurudia kwamba. Hiyo ni aina moja ya algorithm. Tunaweza kuchambua jinsi ufanisi an algorithm ni msingi wa ni kukimbia wakati. Lakini tutaweza kuzungumza kidogo zaidi juu ya kwamba baadaye. Hivyo algorithms wote wanaweza pia kuandikwa katika pseudocode. Pseudocode ni tu Kiingereza kama syntax kutumika kuwakilisha lugha ya programu. Kwa mfano, kama sisi alitaka kuuliza user nadhani namba yangu favorite, sisi wanaweza kuwa na pseudocode kama vile. Kupata watumiaji nadhani. Kama nadhani ni sahihi, kuwaambia wao uko sahihi, mwingine kuwaambia wao siyo sahihi. Na pseudocode ni njia ya urahisi anayewakilisha wazo au algorithm. Hivyo sasa sisi kutaka kweli kuandika hii katika lugha ya kwamba kompyuta nguvu na akili. Hivyo tunaweza kuandika pseudocode yetu na kutafsiri kwamba katika chanzo code. Hadi sasa, chanzo code ni lazima zifuate kwa syntax baadhi ya lugha ya programu. Na hadi sasa, katika CS50, tumekuwa wamekuwa wakitumia zaidi c. Hivyo hii inaweza kuwa chanzo code kwa c. Baadaye katika shaka, wewe usiku kuja katika kuwasiliana na programu nyingine lugha kama PHP. Au kama wewe hata kuchukua madarasa mengine, wewe anaweza kufanya Java, Python, au hata OCML. Lakini katika yetu lugha mpango c, hii ni jinsi tupate kuandika chanzo code kwa pseudocode algorithm kwamba I just ilivyoelezwa hapo awali. Hivyo ni jinsi gani kompyuta yako kweli kuelewa kwamba? Kama nilivyosema hapo kabla, tu kwa kweli anaelewa zeros na ndio. Hivyo ni jinsi gani kupata kutoka chanzo code kwa kitu ambacho unaweza kuwa kueleweka? Naam, sisi kuwa na kitu kuitwa compiler. Kama unakumbuka nyuma katika zaidi ya yako psets, alikuwa na aina fulani ya mpango imeandikwa katika dot c file. Na basi ingekuwa aina ya kufanya. Hivyo ni nini kufanya kufanya? Unaweza aina ya kufanya kukusanya yako mpango kwa sababu someone-- mtu aliandika p kuweka yako; pengine David-- kuundwa kufanya file. Na kwamba anasema kufanya kujua kuendesha yako compiler, iitwayo Clang, kwamba mapenzi kisha kukusanya chanzo code yako kwa kitu code, ambayo ni zeros na ndio kwamba kompyuta yako anaelewa. Lakini kidogo baadaye, tutakwenda zaidi katika kina kuhusu compilers. Hivyo kukumbuka pset 0, where-- ndiyo, una swali? Watazamaji: [inaudible]? SPIKA 1: Ndiyo. Nadhani kwa kweli lazima online. Yeah. Watazamaji: Je, ni kama [inaudible]? SPIKA 1: Ni si. The ni juu ya cs50.net/quizzes. Watazamaji: Slash Quizzes, kufyeka 2013, kufyeka 0, na click kupitia tu Quizzes 2013 na jaribio 0, mapitio ya slides sehemu. SPIKA 1: Yeah, hivyo kama wewe guys wanataka kuvuta it up na kuangalia ni juu yako kompyuta mwenyewe, hiyo ni nzuri pia. Kusema kwamba tena. Watazamaji: [inaudible]. SPIKA 1: Yeah, [inaudible] ni variable dummy. Oh, ndiyo? Watazamaji: [inaudible]? SPIKA 1: No, migomo si juu ya mtihani. Sorry, swali lake lilikuwa, alikuwa mgomo juu ya mtihani. Na ni si. Hivyo pset 0, you guys lazima kuwa na kila kutekelezwa kitu kwa kutumia mwanzo. Na sisi kujifunza baadhi ya programu ya msingi ujenzi wa vitalu kwa kutumia mwanzo. Basi hebu tuangalie baadhi wa vitalu haya jengo kwamba kufanya juu ya mpango. Kwanza ni kujieleza Boolean. Maneno Boolean ni ndio na 0 au kitu chochote maadili mbili iwezekanavyo. Katika kesi hiyo, kweli au uongo, juu au mbali, na ndiyo au hapana. mfano wa rahisi, rahisi sana, mpango kwamba anatumia Boolean kujieleza hapa. Hivyo ili kwa maneno Boolean kwa kuwa na manufaa, tuna operators Boolean. Hizi ni watoa huduma ambayo inaweza kutumika kulinganisha maadili fulani. Hivyo tuna na au si sawa na chini, kuliko au sawa na, kubwa zaidi kuliko au sawa na, na chini ya au mkuu kuliko mimi. Lakini waendeshaji wa haya si muhimu sana isipokuwa tunaweza kuchanganya yao katika masharti. Hivyo guys wapate kukumbuka kutoka mwanzo na kutoka p yako seti kwamba sisi alikuwa masharti. Wao ni, kimsingi, kama uma katika mantiki ya mpango wako kwamba executes kutegemea kama hali ni alikutana. Hivyo moja ya masharti kwamba tulikuwa kutumika mara nyingi katika kozi hii ni kama, mwingine, kama, na hali mwingine. Hapa ni mfano wa jinsi unaweza kutumia hiyo. Je, mtu yeyote kujua tofauti kati ya kutumia tu kama kauli zote njia ya chini mistari kama, mwingine, kama, na mwingine pamoja? Ndiyo? Watazamaji: [inaudible]. SPIKA 1: Hasa. Hivyo kama mimi alikuwa kama njia yote chini hii njia, hata kama hali hii anarudi kweli, itakuwa bado wanaendelea kupima miwili ijayo. Wakati ambapo, na-kama mwingine, mwingine taarifa yake, kama moja anarudi kweli, wengine ni si kupima. Maswali yoyote kuhusu hilo? Baridi. Hivyo unaweza kutumia kama-mwingine wa mwingine kauli kama unajua kwamba unaweza tu kuwa moja ya kesi hizi. Hivyo sisi kujua kama x ni chini ya 0, ni dhahiri si kwenda kuwa kubwa kuliko 0. Next, mwingine kuzuia ujenzi kwamba sisi kujifunza ni loops. Tuna aina tatu za loops. Kwa loops, wakati tanzi, na kufanya wakati loops. Na kwa ujumla, wakati wewe kukaa chini kwa kuandika kitu, una kuamua ambayo ya tatu unataka kutumia. Hivyo ni jinsi gani sisi kuamua ambayo moja? Sisi kwa ujumla kutumia kwa kitanzi kama sisi kujua mara ngapi tunataka iterate kwa njia ya kitu au mara ngapi tunataka kufanya kazi. Sisi kutumia wakati loops kama sisi haja ya baadhi ya hali kuwa ni kweli kuweka mbio. Na sisi kutumia kufanya wakati sawa na wakati, lakini tunataka kanuni zetu kukimbia katika angalau mara moja. Hivyo kufanya wakati, chochote ni katika do mapenzi daima kukimbia angalau mara moja. Wakati ambapo, kwa wakati, inaweza si kukimbia wakati wote kama hali si ameridhika. Maswali yoyote kwa hilo? Hivyo muundo wa kwa kitanzi. You guys kuwa wote kuonekana hii. You initialize. Una baadhi ya aina ya hali hiyo. Hivyo, kwa mfano, tunaweza initialize kama kwa i ni sawa na 0. i ni chini ya 10. Na i ++. Rahisi sana moja kwamba tumefanya. Kwa kitanzi wakati, vile vile, una kuwa na baadhi ya aina ya initialization, baadhi ya aina ya hali, na baadhi ya aina ya update. Hivyo tunaweza kutekeleza wetu kwa kitanzi pia kama kitanzi wakati kutumia hii. Na vile vile kwa do wakati kitanzi, tuweze kuwa na baadhi initialization, nitafanya kitu, update, na kisha kuangalia hali. Hivyo sasa kazi. Sisi kuweka kila kitu pamoja. Sisi kutaka kuandika baadhi aina ya kazi. Kazi ya kawaida kwamba huenda tumeona tayari ni kuu. Kuu ni kazi. Ina aina ya kurudi, int. Ni ina kazi jina, kuu. Na ina hoja, argc na argv. Hivyo kuu ni tu kazi. Kazi nyingine unaweza kuwa na kutumika, printf-- printf ni function-- GetInt, toupper. Lakini hizi kutokea kwa kuwa kutekelezwa kwa ajili yetu kwa baadhi ya aina ya maktaba. Kama wewe guys kumbuka ikiwa ni pamoja na maktaba hii CS50.h au standard I / O maktaba. Ndiyo, swali? Watazamaji: Je, kuu tu asili katika c? Je, ni aina tu ya [inaudible]? SPIKA 1: swali ni kama kuu ni asili katika c. Na ndiyo, kazi zote kuwa na kazi kuu. Ni aina ya muhimu kwa ajili ya kompyuta kujua wapi kuanza mbio code. Watazamaji: Hivyo wewe ungekuwa si [inaudible]? SPIKA 1: Hapana Yoyote maswali mengine? Baridi. Hivyo kama wewe unaweza kutumia kazi kwamba imeandikwa kwa ajili yenu, unaweza pia kuandika kazi yako mwenyewe. Hii ni kazi ambayo mtu anaweza wameandika kwa mahesabu ya kiasi q ya, kwa mfano. Kuna aina ya kurudi hapa, katika kesi hii int, yetu jina kazi q na yetu orodha ya vigezo. Na kumbuka kuwa una kuandika data aina ya parameter unataka kutumia au mwingine kazi haina kujua ni aina gani ya parameter anatakiwa kuwa na kukubali. Hivyo, katika kesi hii, tunataka integer kama pembejeo zetu. Hivyo kwa nini huenda tunataka kutumia kazi? Awali ya yote, kubwa kwa ajili ya shirika. Wao kusaidia kuvunja kanuni yako katika zaidi kupangwa chunks na kufanya ni rahisi kusoma. Kurahisisha. Hii ni nzuri kwa ajili ya kubuni. Wakati wewe ni kusoma kipande cha code na kazi kuu ni kweli, kweli kwa muda mrefu, inaweza kuwa vigumu kwa sababu kuhusu nini kinaendelea. Hivyo kama wewe kuvunja chini katika kazi, inaweza kuwa rahisi kusoma. Na kutumia tena-uwezo. Kama una chunk ya maadili ya hiyo kuwa kuitwa au kukimbia mara nyingi, badala ya marudio ya andiko kwamba kanuni mara 10 katika kazi yako kuu, unaweza wanataka kutumia tena hiyo. Na kisha kila wakati unahitaji kutumia kwamba kipande cha code, piga kazi. Hivyo sasa kama sisi kumbuka nyuma scratch, sisi pia alizungumzia kuhusu dhana chache, moja ambayo ni ya threading. Thread ni dhana ya nyingi Utaratibu wa kanuni utekelezaji kwa wakati mmoja. Hivyo kufikiri nyuma kwa siku moja ambapo Daudi alikuwa you guys kuhesabu off ya simu ya watu katika chumba. Kimsingi, nini kinachoendelea juu ya ni wote wa wewe guys walikuwa mbio threads tofauti. Na wale threads walikuwa kuja pamoja kupata baadhi ya aina ya jibu. Vile vile, katika Scratch, wakati una sprites nyingi, waweza kuwa na paka na mbwa. Na wangekuwa wakati huo huo mbio scripts zao wenyewe. Hiyo ni mfano wa threading. Na dhana nyingine kwamba alikuwa ilianzisha katika mwanzo alikuwa matukio. Na matukio ni sehemu wakati mbalimbali ya code yako ya kuwasiliana na kila mmoja. Katika Scratch, hii ilikuwa wakati wewe kutumika matangazo ya kudhibiti na Wakati mimi Kupokea vitalu. Na pia, katika Tatizo Set 4, tuliona kidogo ya matukio kama vizuri. You guys wanaweza kuwa na kutumika Maktaba Gevent. Na kulikuwa na kazi waitForClick katika ambayo wewe walikuwa wakisubiri kwa mtumiaji click. Na click yako, katika kesi hii, itakuwa tukio hilo na kusubiri kwa ajili ya click ni yako tukio handler. Na pia, katika mbio psets yako na kufanya kazi juu ya psets yako, anaweza kuwa kuja katika kuwasiliana na baadhi ya amri hizi. Hii ni nini typed ndani yako terminal dirisha au chochote dirisha kwamba inaonyesha juu ya g yako hariri kwa, kimsingi, navigate kompyuta yako. Hivyo kwa mfano, LS orodha yaliyomo ya directory. Kufanya directory inajenga folder mpya. CD, mabadiliko directory. RM, kuondoa, deletes faili au baadhi ya directory. Na kisha kuondoa directory kuondosha directory. Watazamaji: [inaudible]? SPIKA 1: Yeah, uhakika. Sorry, swali lilikuwa kama wewe kupendekeza kuweka hii kwenye karatasi kudanganya. Ni inaweza kusaidia. Kama una chumba, unaweza kuweka juu. Ni pia kwa ujumla tu nzuri ya kutosha kukumbuka kwa sababu wakati matumizi yake unaweza kutaka tu kuwa ni kujikumbusha. Kwamba kutakuwa na kufanya maisha yako rahisi sana. Je, mimi kujibu swali lako? Hivyo sasa, sisi aliyesema kidogo kwa ufupi kuhusu maktaba. Lakini wale kuu mbili ambazo tumekuwa kutumia hadi sasa katika shaka ni standard I / O na cs50. Ni aina gani ya mambo ni pamoja na katika kiwango I / O maktaba? Yeah, hivyo mbali tumekuwa kutumika printf. Katika cs50, tumekuwa kutumika GetInt na GetString. Na kamba ya aina data pia hutokea kutangazwa kuwa katika maktaba hii cs50. Tutaweza kuongea kidogo zaidi katika kina kuhusu jinsi maktaba kazi na jinsi wao kuingiliana na wengine wa code yako. Lakini hao ndio kuu mbili ambazo sisi kuwa kuja katika kuwasiliana na hadi sasa katika bila shaka. Aina. Hizi ni nzuri kwa kukumbuka ni kiasi gani kila aina ni inawakilishwa na au jinsi ka wengi kila aina ya requires-- int, 4 ka; char, 1 Byte. Float ni 4 ka. Nini ni mara mbili? Watazamaji: [inaudible]. SPIKA 1: Yeah, hivyo kuelea lakini mara mbili ya ukubwa. Nini juu ya muda mrefu? Watazamaji: [inaudible]. SPIKA 1: OK. Nini ni muda mrefu? Watazamaji: [inaudible]. SPIKA 1: Yeah, mara mbili int. Ndiyo. Watazamaji: [inaudible]. SPIKA 1: Long [inaudible]. Na kisha kwa muda mrefu kwa muda mrefu ni mara mbili kwamba. Watazamaji: No, no. muda mrefu ni tu int. Ni inategemea usanifu kabla ya [inaudible] na int na ukubwa huo. [Inaudible]. SPIKA 1: Kwa hiyo kwa muda mrefu na int ni sawa. Na kisha kwa muda mrefu kwa muda mrefu ni mara mbili int. Baridi. Na kisha, nini ni ya aina mwisho? Watazamaji: Pointer. SPIKA 1: Yeah, hivyo sisi kujifunza kidogo kuhusu kuyatumia. Na bila kujali nini pointer ni akizungumzia to-- inaweza kuwa nyota char au int star-- mara nyingi ni 4 ka kwa pointer. Maswali kuhusu hilo? Ndiyo? Watazamaji: [inaudible]? SPIKA 1: Kwa hiyo kwa muda mrefu na int ni huo katika hii appliance CS50. Watazamaji: appliance ni kabisa interchangeable. SPIKA 1: Yeah. Hivyo basi kwa muda mrefu kwa muda mrefu ni mara mbili int. Watazamaji: Hii ni kidogo 32? SPIKA 1: 32 kidogo, yeah. Watazamaji: Hivyo [inaudible]? SPIKA 1: Ndiyo, kama hana wazi kusema, wewe lazima kudhani 32 bit. Watazamaji: Ni bila kusema kitu kama kuchukua usanifu kama appliance. Kwa 64 kidogo, mambo tu kwamba mabadiliko ni longs na kuyatumia. Wote wawili [inaudible]. SPIKA 1: Ndiyo? Watazamaji: Swali. Hivyo kwenye moja ya Quizzes mazoezi, anauliza kuhusu unsigned int. Hivyo jinsi gani kwamba kuwa amedhamiria kutoka int [inaudible]? SPIKA 1: unsigned katika ni pia 4 ka. Lakini nini ni tofauti kuhusu saini int na unsigned int? Watazamaji: [inaudible]. SPIKA 1: Haki. Mtu anaweza kuwakilisha maadili hasi. Lakini jinsi gani kufanya hivyo? Watazamaji: [inaudible]. SPIKA 1: Yeah, ni anaokoa 1 bit kuwakilisha ishara. saini ina moja kidogo kwamba inawakilisha ishara. Na unsigned tu ni chanya wote. Watazamaji: OK. Hivyo, unaweza kusema kwamba mara mbili ni mara mbili ya ukubwa wa kuelea? SPIKA 1: Double ni mara mbili ukubwa wa kuelea, ndiyo. Watazamaji: Ni jinsi gani pointer kwa muda mrefu muda mrefu [inaudible]? SPIKA 1: Hivyo swali ni jinsi gani pointer kwa muda mrefu long-- jinsi ni kwamba nne tu ka wakati ya muda mrefu yake 8 bytes. Hivyo kukumbuka nini ni pointer, kimsingi, katika thamani ya msingi sana. Watazamaji: [inaudible]. SPIKA 1: Yeah, hivyo pointer ni tu eneo la kumbukumbu. Hivyo haijalishi ni kiasi gani nafasi kwamba pointer ni akizungumzia. Ni tu mahitaji 4 ka kuweka wimbo ya kwamba eneo la kumbukumbu. Yoyote maswali mengine? Baridi. Kwa hivyo jambo la mwisho nina ni pato standard. Unapaswa kutumia yao mara kwa mara kutosha kwamba unaweza kukumbuka. Lakini hii ni wakati sisi kutumia printf, kwa mfano. Na tuna placeholders haya ambayo waliitwa codes format. Hivyo asilimia c char, asilimia i kwa int, na tunaweza pia kutumia asilimia d. Ni kitu kimoja. Lakini kwa ujumla, katika CS50 sisi kujaribu kutumia asilimia i. Asilimia f kwa kuelea. Asilimia LD kwa muda mrefu kwa muda mrefu na asilimia s kwa kamba. Vile vile, sisi tumekuwa kutumia chache Utaratibu wa haya kutoroka. Kwa mfano, backslash n kwa mstari mpya. Hii ni kwa wakati wewe ni formatting code yako kwa ajili ya magazeti f. Ndiyo? Watazamaji: asilimia d ni kwa nini? SPIKA 1: Hivyo swali ni nini ni asilimia d kwa? Asilimia d ni kwa ints. Asilimia d na asilimia i ni sawa. Watazamaji: Nini tofauti kati ya backslash n na backslash r? SPIKA 1: Hivyo swali ni nini tofauti kati ya kuwepo kwa kuzorota n na kuwepo kwa kuzorota r? Nadhani backslash r is-- Watazamaji: Hivyo backslash r tu ina maana anarudi mwanzo wa mstari bila kweli kwenda mstari mpya. Hivyo kama wewe magazeti backslash r na wewe kwenda nyuma ya mwanzo wa mstari kisha magazeti mambo zaidi, overwrite mambo ambayo tayari juu ya [Inaudible]. Wakati, n kweli inakwenda kwa mpya line na huenda na [inaudible]. SPIKA 1: Naam, maswali mengine yoyote? Wote haki. Mimi nina kwenda mkono ni mbali na Dan ambao utaendelea. [Makofi] DAN: righty yote. Hivyo mimi itabidi kuzungumza juu ya mwingine pana mbalimbali ya mawazo kutoka darasa kwamba ni takribani wiki mbili mwakilishi wa na mwanzo wa wiki tatu kuanzia mbali na akitoa, ambayo ni njia tu ya kutibu thamani wa aina fulani kama thamani ya aina tofauti. Hivyo tunaweza kufanya huu kwa chars kwa ints, ikifungwa kwa ints, na longs kwa muda mrefu kwa mara mbili. Mambo yote haya inaweza kutumika kama njia ya kutibu baadhi ya thamani numeric minus char kama baadhi ya wengine numeric thamani. Hivyo kuna baadhi ya masuala na hii, Bila shaka, ambayo inakuja wakati kutupwa mambo kama kuelea kwa ints. Hivyo hii ni kidogo weird. Tuna kuelea kwamba ni 1.31. Sisi kuzidisha ni kwa 10,000. Na kisha sisi magazeti kama int. Je pato hili? Mara 10,000 1.31. Hivyo 13,000, ni kwamba nadhani? Watazamaji: Nadhani ni 10,000. DAN: Hivyo mimi nina kuzidisha ni kwa 10,000 kabla ya mimi nina akitoa yake. Watazamaji: Oh. Je, si kuna mmoja 9 na baadhi 0 namba? DAN: Unaweza kuwa baadhi tarakimu weird. Hivyo kulia, ni 1.3 mara 10,000. Hivyo hiyo ni 13,000. Na weird-- hii ya ziada Watazamaji: 13,100. DAN: 13,100. Asante, Rob. Na weirdness-- hii ya ziada hii 9,9-- ni kwa sababu tu akitoa hii kuishia rounding chini ambapo ni lazima kuwa. Yeah. Watazamaji: akitoa hutokea baada ya kitu kingine? DAN: Kwa hiyo kwa sababu mimi kuwa na hii katika magazeti, gani kuzidisha hii kabla gani akitoa huu. Watazamaji: [inaudible]. DAN: Nadhani itakuwa kutupwa kwanza, yeah, ambayo itakuwa ni 10,000. Kitu kingine? Baridi. Hivyo hii ni 13,099. Kwa nini hii kutokea? Kutokuwa sahihi. Ikifungwa ni si kamilifu. Wanaweza tu kuwakilisha idadi ya baadhi ya idadi ya takwimu muhimu. Hivyo kama sisi magazeti nje 8 sig tini katika kuelea hii, sisi kupata aina ya ugly kuangalia idadi. Na hiyo ni kwa sababu 1.31 hawawezi usahihi kuwakilishwa na rahisi mamlaka ya mbili katika mashine. Hivyo ni kuishia kuchukua karibu nadhani, ambayo mwisho juu kuwa kidogo chini. Mantiki? OK. Sasa, switched ni njia tofauti ya kufanya kauli masharti ambapo wote sisi huduma ya juu ni variable moja. Hivyo katika mfano huu hasa, sisi ni kupata integer kutoka kwa mtumiaji. Na kisha sisi ni kuangalia nini kwamba integer ni. Takribani, ni idadi kati ya mmoja na nne. Hiyo ni nini sisi ni kuuliza kwa. Hivyo kufanya kubadili ya jina kutofautiana. Kisha wewe kuanzisha kesi ya uwezekano wa maadili inaweza kuwa. Hivyo kesi moja, wanasema ni ya chini. Na kisha kuvunja kupata nje wa hali ya kubadili hivyo huna kuendelea. Katika case-- ya hivyo kesi mbili na kesi three-- kama ni kesi mbili tu matone chini ya mstari wa kwanza wa code anaona kama kwa Uchunguzi tatu mpaka anaona mapumziko. Hivyo sababu wewe kupata kesi moja kwa tu magazeti ya chini ni kwa sababu mimi kuwa na mapumziko hii hapa. Kama mimi, kusema, kupuuzwa break-- hii kama mimi kurusha breakaway-- hii ingekuwa magazeti ya chini, na basi ingekuwa magazeti katikati, na basi itakuwa mapumziko. Hivyo mapumziko ni sehemu muhimu ya kubadili hali na wanapaswa kuwa huko. Kesi yoyote ambayo si alisema waziwazi ni kubebwa na default kesi katika kubadili na kutupwa. Watazamaji: Hivyo 1, 2, 3, na 4 itakuwa n? DAN: Maadili n wanaweza kuwa. Ndiyo. Yeah? Watazamaji: Hivyo wakati una kwamba [inaudible]? DAN: Wewe ingekuwa magazeti chini, na kisha ingekuwa magazeti katikati, na basi ingekuwa kuvunja. Watazamaji: Kwa nini ni magazeti katikati kama [inaudible]? DAN: Kwa hiyo kila kitu chini ya kesi kabla ya mapumziko iko chini ya. Hivyo kesi magazeti moja ni chini ya kesi moja kama ni hii magazeti zifuatazo. Yeah? Watazamaji: [inaudible]? DAN: Hivyo idadi hii ni fulani tu thamani kwamba variable hii anaweza kuchukua, haki? Je, hiyo mantiki? Yeah. Watazamaji: [inaudible]? DAN: Ndiyo, kesi mbili bila magazeti katikati na kisha kuvunja. Watazamaji: [inaudible]? DAN: Nadhani yoyote? Ni aina gani nyingine data unaweza kubadili juu? Watazamaji: Unaweza kubadili juu ya aina yoyote data. Lakini ina maana chochote zaidi ya chars tu na ints na mambo kama hayo, kwa sababu kama wewe ni byte juu pointer kwamba si kweli mantiki, byte juu mizigo, ikiwa ni hata hebu unaweza kufanya hivyo, kwa sababu ya hatua floating katika usahihi, wewe ungekuwa si kweli unataka kufanya hivyo anyway. Hivyo pretty much, ints tu na chars na mambo kama hayo. DAN: Yeah, ni wakati una wazi maadili ambayo unajua, nadhani, inaweza kuwa kwamba kubadili ni kweli muhimu. Nzuri? OK. Wigo ni mbalimbali kwamba alitangaza variable hadi. Hivyo katika chunk hii ndogo ya kificho mimi, itakuwa kamili ya makosa. Na sababu ni mimi alitangaza hii int i ndani ya wigo wa hii kwa kitanzi. Na kisha mimi nina kujaribu kumbukumbu kwamba i nje ya kwamba kwa kitanzi upeo. Hivyo kimsingi, unaweza kufikiria juu ya wigo kama kitu chochote ambacho wewe kutangaza na ndani ya seti ya braces curly tu ipo ndani ya braces curly wale. Na kama wewe kujaribu na kutumia variable nje ya braces curly wale, itabidi kupata kosa kutoka compiler. Yeah? Watazamaji: Hivyo hii moja haifanyi kazi? DAN: hii haina kazi, ndiyo. Strings. String * Char. Wao ni sawa. Wao ni tu kuyatumia kwa wahusika. Na masharti yoyote kwamba una lazima mwisho na backslash sifuri, ambayo ni tu c mkataba. Hiyo inaitwa NULL Terminator. Na NULL-- mji mkuu wa N, mji mkuu wa U, mji mkuu wa L, mji mkuu wa L-- si sawa kama NULL Terminator. Hii ni pointer. Hii ni tabia. Wao ni tofauti sana. Kumbuka yake. Itakuwa juu ya chemsha bongo, pengine. Sijaona quiz. Yeah? Watazamaji: Hivyo NULL ni, kusema, pointer? DAN: Ndiyo. Watazamaji: Je [inaudible]? DAN: Kama, kusema, malloc inaitwa wakati hawana kumbukumbu ya kutosha kupata kila kawaida wewe ni kuuliza kwa, malloc kurudi null. Ni, kimsingi, wakati wowote kazi ni wanatakiwa kurudi pointer, wewe haja ya kuangalia juu ya NULL kwa sababu NULL ni good-- pretty ni, aina ya, thamani ya takataka. Ni zero mbali kama kuyatumia kwenda. Wakati wowote wewe piga kazi, kwamba anarudi pointer. Wewe ni kwenda unataka kuangalia kuwa kuhakikisha kwamba kwamba pointer ni si NULL kwa sababu NULL ni ya kawaida sana. Ni aina ya kurudi taka. Hivyo kama kitu hakwenda haki, tu kurudi NULL badala yake. Watazamaji: [inaudible]? DAN: Ndiyo, na kwamba hii. Watazamaji: [inaudible]? DAN: Spell ni kama hii. Ni NULL Terminator. Ni lowercase N-U-L-L kama wewe ni kuzungumzia hilo. Watazamaji: Na mimi tu akaenda nyuma na majaribio yake. Na kama wewe kujaribu kuweka hatua yaliyo thamani katika kubadili, hivyo itabidi yell saa wewe akisema, taarifa inahitaji kujieleza ya integer aina. DAN: Kuna kwenda. Lakini yeah, nini ilikuwa swali tena? Watazamaji: [inaudible]? DAN: Hivyo mji mkuu N, mji mkuu wa U, mji mkuu wa L, mji mkuu wa L ni halisi c kitu. Ni NULL pointer na mapenzi tu kuwa kutibiwa kama vile. Huwezi milele kujaribu na Spell NULL tabia na kuona yoyote njia nyingine zaidi kuliko huu. Yeah? Watazamaji: Hivyo kurudi kwa Char max au kitu katika maelezo, ingekuwa ni uliopo kazi moja kama [inaudible]? Watazamaji: Hivyo ni wewe akimaanisha kurudi char max kutoka getchar, au chochote ni? Watazamaji: Yeah. Watazamaji: Yeah, hivyo kwa ujumla mrefu kwa ajili ya mambo hayo yote ni sentinel maadili. Hivyo kama kurudi int max kutoka GetInt na char max kutoka getchar, ni walidhani kuwa kama, haki ya yote, kama mambo haya ni kurudi kwetu, kitu potoka. Kwa kuyatumia, sisi tu kutokea kwa kuwa na hii thamani sentinel kwamba kila mtu anakubaliana juu. Na hili ni jambo wewe kurudi wakati mambo kwenda vibaya. Hivyo Char max ni nini sisi ni kutumia kwa kuwakilisha kitu kama NULL au getchar. Watazamaji: Hivyo kama wewe ni kupima getchar, unaweza tu ya kuweka NULL? Ingekuwa kwamba kufanya tofauti? DAN: Unaweza si tu kuangalia null. Wewe d kuwa na kuangalia char max kwa sababu thamani ya kurudi kutoka kazi ni tabia ya si pointer. Yeah? Watazamaji: Swali hili anauliza kwa kamba urefu. Je, hiyo ni pamoja na tabia ya NULL? DAN: Hapana Na kwamba ni kweli ni jinsi gani string urefu anajua kuacha kwa sababu huenda kwa njia ya safu yako ya wahusika mpaka anaona NULL tabia. Na basi ni kama, kila haki, mimi nina kufanyika. Watazamaji: [inaudible] tano? DAN: Hello itakuwa tano. Yep. Hivyo arrays ni kuendelea vitalu ya kumbukumbu. Wao kupata papo kwa kusema jina ya safu na kisha, katika curly braces, chochote index unataka kwenda kwa, wao ni indexed kutoka sifuri kwa njia ya urefu wa safu minus 1. Na wao ni alitangaza na aina ya kitu kuwa wewe ni hifadhi katika safu, jina la safu, na kisha kila kawaida ni ya kwamba safu. Hivyo hii ni safu ya Char urefu sita ambayo ina maadili haya. Yeah? Watazamaji: [inaudible]? DAN: Yeah. Watazamaji: [inaudible]? DAN: Kama una nini kinachoendelea katika safu tayari alifanya. Hivyo unaweza bayana hili badala kama, kusema, char, jina lolote yako safu ni, mabano tupu sawa na curly wanakabiliwa na H comma E comma L comma L comma O comma NULL tabia ya na curly brace. Hiyo itakuwa pia kufanya kazi kama tamko hilo. Watazamaji: [inaudible]? DAN: Kisha unahitaji kuwa na ukubwa tayari alifanya. Watazamaji: [inaudible]? DAN: Ndiyo. Righty yote. Hoja mstari amri ni njia ya kupata pembejeo kutoka kwa mtumiaji kama hoja kwa kuu. Kuu ya inachukua hoja mbili. idadi ya hoja kuwa ni kuwa ukaendelea mstari amri na a kamba au kamba vector safu ya hoja zote. Hivyo kama mimi, kusema, kuitwa kazi kama vile dot nje 1 nafasi, 2 nafasi, tatu, argc itakuwa 4. Na argv 0 itakuwa dot nje. Argv1 itakuwa 1. argv2 itakuwa 2. argv3 itakuwa 3, katika kesi fulani. Yeah? Watazamaji: [inaudible]? DAN: kipengele mwisho katika safu kwa sababu safu ni urefu argc pamoja na moja ya argb, kipengele mwisho ni NULL pointer. Ni argc plus 1. Hivyo katika kesi kwamba mimi tu alisema, ni itakuwa argv 0 ni dot nje. argv ya 1 ni 1. argv2 ni 2. argv 3 ni 3. argv 4, ambayo ni moja kubwa kuliko argc itakuwa null. Na kwamba ni NULL pointer. Ndiyo. Na hiyo ni kwa sababu kamba ni nyota Char ni pointer. Hivyo ina kuwa aina moja. Yeah? Watazamaji: maswali Barua. Hivyo moja, nini tofauti kati ya huu na GetString zaidi ya aina moja katika injini user? Na mbili, kwa kuhifadhiwa ndani ya kumbukumbu yako ya hivi karibuni? Hivyo kama, GetString ingekuwa kuwa [inaudible]? DAN: Ambapo ni kuhifadhiwa? Sijui ambapo ni kuhifadhiwa. Watazamaji: Hivyo, kwa kweli, unajua jinsi yoyote kazi wewe piga ni hoja ni kuhifadhiwa katika stack? Hivyo argc na argv ni hoja ya kuu na wao ni juu ya stack, au kweli tu juu ya nini unafikiri kama mwanzo wa stack. Ni sehemu gani ilikuwa nyingine ya swali? Watazamaji: Basi nini [inaudible]? DAN: Yeah, ni tu njia tofauti ya kupata pembejeo kutoka kwa mtumiaji. Kidogo zaidi ufanisi na hii moja ya ni handier kwa scripts kwa sababu wewe unaweza tu hoja ya kupitisha kuu yako kazi badala ya kuwa na kusubiri kwa watumiaji kama huna watumiaji yoyote. Watazamaji: Na yeah, kupata masharti itakuwa [inaudible]. Ni ingekuwa kuhifadhi mambo unahitaji. DAN: Yeah? Watazamaji: [inaudible]? DAN: Ndiyo, argv 0 daima ni pamoja na dot kufyeka ya kazi simu. Yeah? Watazamaji: [inaudible]? DAN: Ndiyo, kila mmoja wa hoja ni kumalizika katika NULL tabia ya kwa sababu wao ni masharti. Watazamaji: [inaudible]? DAN: Ndiyo, argv argc ni NULL pointer. Watazamaji: [inaudible]? DAN: Oh yeah. Yeah, sorry. Watazamaji: Hivyo [inaudible]? DAN: Hivyo swali ni kama alikuwa mstari amri dot dot kufyeka nje 1, 2, ingekuwa ya simu ya mstari amri hoja kuwa wawili au itakuwa ni tatu? Watazamaji: Nadhani haina kweli jambo. Mimi huwa kusema, oh, wewe hawakuwa kupita yoyote hoja mstari amri wakati, ni wazi, wewe kuitwa kazi. Kwa hiyo mimi huwa na vocally kuwatenga kazi kutoka mstari amri hoja hata kama ni pamoja na katika argv. DAN: Lakini kama ilikuwa juu ya test-- yeah-- na pia kama wewe kusema kitu kama argc ni sawa na 3, wewe ni katika msimamo salama. Yeah? Watazamaji: [inaudible]? DAN: Nadhani kama badala ya wito huu katika argc na kamba mabano argv lakini naendelea aina moja na tu kuitwa yao kitu tofauti kama na b, itakuwa ni bado kazi? Na bado ingekuwa kazi, ungependa just-- badala ya kutumia argc-- wewe d kutumia na b. Yeah? Watazamaji: [inaudible]? DAN: Hivyo swali ni GetString ni kwenda kuhifadhi kumbukumbu katika lundo kwa sababu GetString ni * Char. Ni maduka kumbukumbu katika chungu kwa sababu wito malloc sasa ndani ya halisi utekelezaji wa GetString. OK, kuhama. Usalama. Hivyo kuwa kweli salama, wanategemea hakuna moja na wewe kuruhusu hawana moja kwa mtu yeyote wa taarifa yako, ambayo ni kwa nini kila mtu hujenga mashine zao wenyewe, mifumo yao wenyewe uendeshaji, wao wote programu kutoka mwanzo, na ni wazi si kuungana kwa mashine nyingine yoyote kupitia mtandao. Hivyo kompyuta ni salama. Wao kweli ni. Tuna imani kwa watu wengine. Na wazo la usalama ni kwamba wewe ni kujaribu kuzuia kiasi cha imani kwamba unahitaji. Na moja ya njia unaweza kufanya hivyo ni kwa njia ya cryptography. Cryptography ni, kimsingi, sisi kuwa na siri. Wakati mwingine tuna kupita siri yetu pamoja kupitia, kusema, internet au mambo mengine. Na hatutaki watu kujua siri hizi. Hivyo sisi encrypt siri zetu katika njia kwamba sisi matumaini hakuna mtu anayeweza kufikiri. Hivyo sisi used-- kupitia kozi ya class-- hii mambo kama Kaisari cipher na [Inaudible], ambayo ni wawili sana, sana njia na upungufu wa encrypting mambo. Wao ni rahisi kufikiri nini wao ni na nini siri yako ni. ulimwengu wa kweli anatumia zaidi ngumu encryption miradi. Na sisi si kupata katika zaidi ya hiyo. Debugging. GDB ni bora. Mimi nina kwenda kusisitiza hili tena. Matumizi GDB wakati wote kila wakati una tatizo. Amri ambayo ni muhimu katika GDB ni kuvunja, ambayo wewe kupita aidha line simu, jina kazi, kimsingi ambapo katika kanuni yako unataka kuacha, na kuwa na uwezo wa kuchukua udhibiti. Print inachukua kutofautiana na Prints nje chochote kile variable ni saa kwamba hatua katika utekelezaji wako. Next hatua utekelezaji yako pamoja hatua moja. Na hatua hatua ndani ya kazi katika utekelezaji wako. Mambo mengine ni kukimbia, ambayo ni jinsi wewe kweli kukimbia code yako. Kuendelea inachukua hatua zote zinazohitajika kupata ijayo mapumziko uhakika. Na kuna wengi, wengine wengi. Kuangalia yao juu. Wao ni kubwa. Yeah? Watazamaji: [inaudible]? DAN: Ndiyo, ambayo ni HatiJava. Hivyo HatiJava ni mpango kwamba inakuwezesha Debug programu yako. Si Ni mpango ambao hupata mende kwa yenu, ingawa kwamba itakuwa kubwa. Na mwisho kwa ajili yangu ni search. Hivyo aina ya search kwamba sisi aliyesema kuhusu katika darasa hili ni search linear, ambayo ni tu kwamba ukiangalia kwa njia ya kila kipengele wa nafasi ya utafutaji, moja kipengele wakati huo, mpaka kupata nini wewe ni kuangalia kwa au mpaka kufikia mwisho wa kutafuta nafasi yako katika ambayo uhakika unaweza kusema kwamba hakuweza kupata kipengele kwamba wewe walikuwa wanatafuta. Na hii inachukua muda saa bora mara kwa mara, ambayo ni 0 la 1 na saa mbaya linear wakati, ambayo ni 0 la n. Search binary, ambayo inahitaji aibu vipengele. Unaweza kwenda katikati ya mambo yako, kuona kama kipengele wewe ni kuangalia kwa ni kubwa au ndogo kuliko kipengele kwamba uko katika katikati. Ni ni kubwa, unaweza kusema kwamba chini ya kutafuta nafasi yako ni yako eneo la sasa, kati, na wewe kuanzisha upya mchakato. Kama ni ndogo, ukiangalia kusema kwamba the-- yeah, nini up? Watazamaji: [inaudible]? DAN: Ndiyo. Aina yoyote ya aina hiyo imekuwa kufundishwa katika darasa ni haki mchezo kwa mtihani. [Kicheko] DAN: Na ukweli kwamba wewe si alikuwa na kufanya hivyo kwa ajili ya kuweka tatizo, ni haki mchezo kwa mtihani. Watazamaji: Je, sisi kwenda juu yake jinsi to-- DAN: Ni itakuwa gone juu. SPIKA 2: code halisi kwa ajili ya [Inaudible] ni juu ya study.cs50.net. Hivyo kama wewe kuangalia tatizo mazoezi katika kuunganisha aina ya ukurasa study.cs50.net, kuna code kwa ajili ya utekelezaji kuunganisha aina. Hivyo huna kuwa na kutekeleza ni wewe mwenyewe usiku wa leo. Lakini kuhakikisha wewe kuelewa ni badala kuliko tu kukariri yake. Watazamaji: [inaudible]? SPIKA 2: ukurasa kuunganisha aina juu ya study.cs50.net, kuna mazoezi tatizo kwamba, kama wewe click kupitia tatizo, mwishoni sana kuna ufumbuzi, ambayo ni kuunganisha aina ya utekelezaji. Lakini hakikisha kuelewa badala ya kukariri ni au kuiga ni chini. Watazamaji: Na kikamilifu halali tatizo kwa ajili ya mtihani itakuwa kitu kama hapa ni orodha. Je, orodha hii kuangalia kama baada ya hatua moja ya uchaguzi namna au insertion aina au chochote. Moja iteration kamili ya orodha. Hivyo hata kama wewe wala kuishia wanaohitaji kanuni kwa ajili ya hayo, unahitaji kuelewa ni kutosha kujua jinsi ya kwenda kuwa kubadilisha safu hii. DAN: Hiyo ni kwa ajili yangu. [Makofi] LUCAS: Hey kila mtu. Jina langu ni Lucas. Mimi nina kwenda kuzungumza kuhusu kujirudia, kila aina tumejifunza, na a kidogo ya kuyatumia yote. OK? Hivyo kwanza ya yote, recursion. Ina maana gani kusema kwamba kazi ni kujirudia? Watazamaji: Wito yenyewe. LUCAS: OK, wito yenyewe, yeah. Hivyo kama picha hii, kwa mfano. Ni kama picha ndani ya wa picha na kadhalika. Hivyo kwa mfano, unaweza have-- kama Dan kwamba alikuwa anazungumza juu ya search binary. Njia moja ambayo search binary ni kujirudia ni ukweli kwamba wewe ni kujaribu kupata idadi. Hivyo wewe kwenda katikati. Na kisha kuangalia kama kuna namba katika kushoto na katika haki. Na kisha kama wewe kupata nje ya idadi ni kwenda kuwa upande wa kushoto, ni sawa na kitu kama kufanya search tena lakini tu upande wa kushoto wa orodha. Hivyo hiyo ni jinsi inaonekana kama ni kujirudia. Hivyo ndiyo sababu wewe guys kuwa na kujirudia ufumbuzi kwa ajili ya kuunganisha aina. OK, hivyo hapa ni mfano. Basi hebu kusema kwamba mimi nataka kuchagua namba zote kutoka 1 kwa n. Mimi unaweza kutambua kwamba Jumla ya n simu ni n pamoja na n minus 1 hadi 1. Lakini basi, kama mimi kuangalia n minus 1 plus n minus 2 plus 1, hiyo ni sawa kitu kama namba summing hadi n minus 1. Hivyo naweza kusema Jumla ya Jumla sawa sawa na n pamoja na Jumla ya n minus 1. Je, hiyo mantiki? Na mimi pia ingekuwa kitu kingine kuitwa kesi ya msingi, ambayo ni kwamba Jumla ya namba up na sifuri itakuwa zero. Basi kwa haraka kama mimi kupata idadi sifuri, mimi kuacha kuhesabu kura. Je, hiyo mantiki? Hivyo hapa ni mfano wa jinsi Siwezi kutekeleza hiyo. Hivyo nina kazi hii katika baadhi. Kwamba inachukua integer n. Hivyo hapa mimi kwanza kuangalia kama n ni chini ya au sawa na sifuri. Hivyo kama ni chini ya au sawa na sifuri, mimi kurudi sifuri, ambayo ni kesi yetu ya msingi. Vinginevyo, mimi unaweza tu kurudi n pamoja na Jumla ya idadi kutoka moja kwa moja n minus. Mantiki? OK. Hivyo hapa ni nini inaonekana kama. Una Jumla ya 2 sawa 2 pamoja na Jumla ya 1. Na baadhi ya 1 ni pamoja na 1 Jumla ya 0, ambayo ni 0. Mantiki? Hivyo kama sisi kuangalia mkusanyiko wa yako mpango, hii ni nini inaonekana kama. Kwanza, tuna kazi kuu. Na kisha kazi kuu kuitwa Jumla 2. Na kisha Jumla 2 ni kwenda kusema, oh, Jumla 2 ni sawa na 2 pamoja na Jumla ya mmoja. Kwa hiyo mimi kuongeza Jumla ya 1 kwa stack. Na jumla ya 1 ni kwenda kuwaita Jumla ya 0, ambayo pia ni kwenda kuongezwa kwa stack. Na kisha kila mmoja wa watu hao kuwa ni juu ya nyingine na kurudi kabla ya wale wengine wanaweza kuendelea. Hivyo kwa mfano, hapa, Jumla ya 0, kwanza, ni kwenda na kurudi 0. Na kisha kuchagua Jumla ya 1. Kisha Jumla ya 1 ni kwenda kurudi 1 kwa jumla ya 2. Na hatimaye, Jumla ya 2 ni kwenda kurudi 3 kwa kuu. Je, hiyo mantiki? Ni kweli muhimu kuelewa jinsi stack ni kazi na kujaribu kuona kama inafanya hisia. OK, hivyo kuchagua. Hivyo ni kwa nini kuchagua muhimu, kwanza ya yote? Kwa nini tunapaswa huduma? Mtu yeyote? Nipe mfano? Yeah? Watazamaji: [inaudible]. LUCAS: Yeah, OK. Hivyo unaweza kutafuta kwa ufanisi zaidi. Hiyo ndiyo njia nzuri. Hivyo, kwa mfano, tuna mengi ya mambo, kwa kweli, katika maisha yetu kwamba ni vyema. Kwa mfano, Mkwawa. Ni muhimu sana kuwa na wote maneno katika baadhi ya aina ya ili kwamba sisi wanaweza kupata kwa urahisi. Hivyo kwamba ni nini alikuwa akisema. Unaweza kutafuta kwa ufanisi zaidi. Fikiria jinsi itakuwa vigumu kuwa na kamusi katika maneno ambayo ni katika random utaratibu. Itabidi kuangalia, pretty much, kila neno moja mpaka kupata neno kwamba wewe ni kuangalia kwa. Kama unatumia Facebook pia, wakati wewe ni kuangalia rafiki yako, wewe ni kwenda kuona kwamba Facebook kuweka yako rafiki wa karibu ni juu ya wale kwamba huna kuzungumza na kwamba mengi. Kama wewe kwenda njia yote chini ya rafiki orodha yako, wewe ni kwenda kuona watu kwamba pengine hawana hata kumbuka kwamba wewe ni marafiki na. Na hiyo ni kwa sababu aina Facebook rafiki yako kulingana na jinsi karibu wewe ni kwao. Hivyo kuandaa data. Pia Pokemon. Hivyo unaweza kuona kwamba pokemons wote kuwa na idadi. Na kwamba ni kama rahisi njia ya kupata data. Watazamaji: Kupata Pokemon. LUCAS: Yeah. Watazamaji: [inaudible]. LUCAS: Yep. OK, hivyo uteuzi aina. Uteuzi aina ni kwenda kuchagua ndogo zisizochambuliwa thamani ya orodha kila wakati katika kila iteration. Ni aina ya kama aina kwamba kufanya katika kichwa yako wakati wewe ni kujaribu aina orodha mkono. Kimsingi, wote kufanya ni wewe kuangalia kwa idadi ndogo. Kuiweka katika orodha sorted. Na kisha ukiangalia kwa ijayo idadi ndogo. Na kisha kuendelea kufanya kwamba na kadhalika. Hivyo uteuzi aina kimsingi ni wewe kuchagua kila wakati ndogo zisizochambuliwa thamani. Kuweka mwishoni mwa yamepangwa sehemu ya orodha. Na kuendelea kufanya hivyo. Basi hebu haraka kuona nini hii inaonekana kama. Hivyo hapa ni namna na zisizochambuliwa orodha. Hivyo kwa namna ya orodha, ni awali tupu. Na kisha mimi nina kwenda kuchagua idadi ndogo hapa, ambayo ni 2. Hivyo mimi kupata namba 2 na mimi kuweka mbele ya orodha. Na kisha mimi kuangalia kwa ndogo ya kipengele, ambayo ni 3. Hivyo mimi kuiweka mwishoni ya orodha Iliyopangwa. Na kisha mimi kuweka kufanya hivyo. Mimi sioni 4 na kuiweka mwishoni. Kupata 5 na kuiweka mwishoni. Na kuangalia jinsi gani wote wa nyakati hizo kwamba Mimi kusema kuiweka mwishoni ni, kimsingi, swapping maadili mbili. OK? Na kisha moja mwisho, wewe tu na moja zaidi kipengele. Hivyo ni tayari Iliyopangwa. OK, hivyo insertion aina. Insertion aina wewe ni kwenda kuwa na pia kwamba jambo ya kuwa na sorted na zisizochambuliwa orodha. Kitu pekee ni kwamba kila wakati kwamba wewe ni kuongeza kipengele ya namna orodha, wewe tu kuchukua kipengele kwamba ni mbele ya orodha zisizochambuliwa. Na kisha wewe ni kwenda kupata nini nafasi ni lazima kuwa katika sorted sehemu ya orodha. Hebu kuona nini hii ni hivyo hii hufanya akili zaidi. Hivyo awali, kwa mfano, mimi nina kujaribu kuingiza namba tatu katika sehemu sorted ya orodha. Hivyo orodha hana kitu chochote. Hivyo siwezi tu ya kuweka namba 3. Sasa, nataka kuongeza namba 5 kwa sehemu sorted ya orodha. Kwa hiyo mimi kuangalia namba 5. Mimi taarifa kwamba ni mkubwa kuliko 3. Hivyo najua kwamba ina kuwa baada ya 3. Basi, mimi kuweka 3 na 5. Kisha mimi wanataka kuingiza namba 2. Mimi taarifa kwamba idadi 2 ni kweli mwisho ndipo wote wawili, 3 na 5. Kwa hiyo mimi kwa kweli kuwa na kuweka yote njia katika mwanzo wa orodha. Hivyo nina, aina ya, kuhama wote vipengele katika orodha Iliyopangwa ili niweze kufanya chumba kwa idadi 2. Kisha naona namba 6. Mimi naona kwamba ni lazima kuwa baada ya 5. Hivyo mimi kuiweka huko. Na hatimaye, mimi kuangalia namba 4. Na mimi taarifa ni lazima kuwa kati ya 3 na 5. Na kisha mimi kuiweka huko na mabadiliko mambo mengine yote. Mantiki? Bubble Aina. Hivyo Bubble aina ni kimsingi nini wewe ni kwenda do-- sisi kuiita Bubble aina kwa sababu wewe kwenda kwa njia ya list-- ni kweli bora kama mimi tu kuonyesha wewe kama Haya na wewe ni kwenda kulinganisha namba karibu. Na wewe ni kwenda wabadilishane yao nafasi kama wao siyo ili haki. Hivyo kimsingi, ni nini kinaenda kutokea ni hapa, kwa mfano, una 8 na 6. Unajua kwamba ili sorted mapenzi kweli kuwa 6 na 5, haki? Hivyo wewe ni kwenda wabadilishane amri. Kisha naona 8 na 4 hapa. Na mimi kufanya kitu kimoja. Mimi wabadilishane tena. Na hatimaye, 2 na 8. Mimi pia wabadilishane yao. Ni wito Bubble Aina kwa sababu baada ya kila moja ya iterations haya, kwa kweli, idadi kubwa katika orodha anapata yote njia ya mwisho wa orodha. Je, hiyo mantiki? Kwa sababu ni kuvaa swapping ni na kuhamia na haki. OK, hivyo hii ni iteration pili. Itakuwa kitu kimoja. Mimi itabidi kufanya wabadilishane moja na kisha moja ya mwisho. Mimi kwamba hakuna swaps na orodha ni Iliyopangwa. Hivyo katika Bubble Panga, sisi kimsingi kuweka kwenda kupitia orodha na swapping mambo mpaka mimi taarifa kwamba mimi si kufanya swaps yoyote ya kufanya hivyo iteration, ambayo ina maana kwamba orodha tayari Iliyopangwa. Mantiki? Hebu majadiliano kidogo kuhusu mbio wakati. Hivyo wewe guys kumbuka Big O, Omega, na Theta? Yeah? OK, ni nini Big O, kwanza ya yote? Watazamaji: [inaudible]. LUCAS: Yeah, ni kuitwa kesi mbaya Runtime, ambayo ina maana ya kwamba ni ni kiasi gani unaweza kutarajia mpango kuchukua kukimbia. Kama, katika suala of-- katika hii n case--. idadi ya vipengele katika orodha katika kesi mbaya. Kama, katika hali mbaya zaidi iwezekanavyo kesi. Hivyo kwa Bubble Aina, kwa mfano, tuna Big O ya n mraba. Kwa nini tuna hiyo? Kwa nini ni Bubble Aina Big O n mraba? Watazamaji: [inaudible]. LUCAS: Yeah, hivyo kesi mbaya itakuwa kwamba mimi itabidi kufanya n iterations. Hivyo kila mmoja wa iterations ni kwenda kuleta kipengele kubwa kwa mwisho ya orodha. Hivyo kesi mbaya zaidi ni kwamba nina kufanya jambo n mara kwa mara. Na kwa kila moja ya nyakati hizo, nina kufanya n swaps kwa sababu mimi kuwa na kulinganisha kila mambo mawili. Hivyo kwamba ni kwa nini ni n squared kwa sababu ni n mara n. Kisha, uteuzi aina ni pia n mraba kwa sababu, kwa kila iteration, nina kuangalia kila kipengele moja katika orodha. Na kisha kupata ndogo, ambayo ina maana kwamba nina kuangalia njia ya mambo n. Na mimi kuwa kufanya hivyo mara n kwa sababu Nina kuchagua mambo yote n. aina insertion ni pia n mraba kwa sababu mazingira ya kesi mbaya mapenzi kuwa, moja, nina kuingiza namba n, haki? Kwa hiyo mimi tayari kujua kwamba mimi nina kwenda kuwa na n iterations. Lakini kwa kila moja ya namba hizo, kama ningekuwa na kwa kuangalia yote ya namba katika orodha sorted na kuiweka njia yote mbele, ambayo itakuwa n mraba kwa sababu itakuwa ni n mara n tena. Mantiki? Nini juu ya omega? Watazamaji: [inaudible]. LUCAS: Ni bora kesi. Hivyo ni kama, katika mengi ya mara kwa kuchagua, bora kesi ni wakati orodha tayari Iliyopangwa. Hivyo si kweli kuwa kufanya kitu chochote. Bubble Aina ana bora mazingira ya kesi ya n. Je, guys kujua kwa nini? Watazamaji: [inaudible]. LUCAS: Yeah, kama wewe kuweka wimbo wa kama data ration alikuwa swaps yoyote au si, kama una kitu kama kuweka kweli kama kulikuwa na iteration, kama orodha ni tayari Iliyopangwa, kimsingi, nini kinaendelea kutokea ni mimi nina kwenda kujaribu wabadilishane kila mbili mambo karibu. Mimi nina kwenda kuona kwamba hakuna swaps. Na mimi tu kurudi haki mbali. Hivyo ina maana kwamba mimi tu alikuwa na kwenda kwa njia ya orodha wakati mmoja. Hivyo ni n kwa sababu mimi kuangalia at n vipengele. Kwa nini uteuzi aina n mraba? Yeah, hata kama orodha ni Iliyopangwa, kwa kila iteration ya uteuzi aina, mimi kuwa na kuchagua kipengele cha chini. Hivyo hiyo ina maana kwamba nina kufanyika kwa kuangalia katika mambo yote katika zisizochambuliwa kuorodhesha na kupata kima cha chini cha kwa kila iteration. Je, hiyo mantiki? Na insertion upanga n kwa sababu katika kesi hiyo mimi nina kujaribu kuingiza idadi na wote wa idadi ya, wakati mimi kujaribu kuingiza yao, naona ya kuwa wao ni katika nafasi ya haki. Sina kwenda kuangalia wengine wote idadi katika orodha zisizochambuliwa. Hivyo ndiyo sababu itakuwa n. Mantiki? Na nini theta? Watazamaji: [inaudible]. LUCAS: Ni, sorry? Sema tena. Watazamaji: [inaudible]. LUCAS: Hasa. Hivyo unaweza kuona kwamba uteuzi tu kuhifadhiwa katika Unganisha aina na thetas. Na hiyo ni kwa sababu wewe tu na theta kama wote wawili Big O na Omega ni sawa. OK. Na hatimaye, kuunganisha aina yaani katika logi n. Na kisha, kama Dan alikuwa akisema, Merge aina ni aina ya kama njia sawa kwamba kufanya search binary. Hivyo kupata orodha. Na wewe ni kwenda kata katika nusu. Na kisha kata yao katika halves ndogo. Na kisha kuunganisha yao. You guys kukumbuka kwamba, haki? OK, kama alikuwa akisema. OK, kuyatumia. Kwa hiyo kile ni pointer? Watazamaji: [inaudible]. LUCAS: mahali. OK. Mimi najua kuwa David inaonyesha rundo la video ya Binky na mambo akizungumzia kila mmoja. Lakini Mimi kama kufikiri ya kuyatumia kama tu mahali. Hivyo ni variable kwamba ni kwenda kuhifadhi mahali. Hivyo ni tu hii variable maalum kwamba ni ka nne kwa muda mrefu. Kumbuka, kwamba pointer na kitu chochote ni daima nne ka muda mrefu kwa ajili yetu 32-bit mashine hivyo kesi kwa appliance. Na ni tu ana eneo ya kutofautiana ndani yake. OK, hivyo kuna kumbukumbu hii, kimsingi. Kwa hiyo, kila block ya kumbukumbu kweli ina studio, ambayo ni pepe ya slotty kumbukumbu. Hivyo hiyo ina maana kwamba siwezi kuwa pointer akizungumzia yoyote ya anwani hizi. Hivyo sababu tutaweza kutumia kuyatumia ni kama mimi kukumbuka eneo kwamba variable maalum ni kumbukumbu. Na wewe guys kukumbuka kwamba mmoja wa wale kesi ilikuwa kama mimi kuwa na kazi kama nina kweli nataka wewe wabadilishane kwa reals, mimi kwa kweli na kutuma pointer. Si kutofautiana. Je, guys kumbuka kwamba? between-- tofauti jina ni nini? Wito kwa thamani na wito kwa kumbukumbu, haki? OK, yeah. Hivyo wito kwa thamani. Wakati wewe tu kutuma kutofautiana kwa kazi wewe ni kutuma tu thamani. Hivyo wewe ni kweli kutuma nakala ya kutofautiana. Na programu yako hawakuweza huduma kidogo kuhusu kama variable huo kweli hufanya nakala. Na wito kwa kumbukumbu ina maana kwamba Mimi kwa kweli kutuma nakala ya pointer kwa variable kwamba. Hivyo ina maana kwamba mimi nina kutuma eneo la kwamba kutofautiana. Hivyo kuhisi nina eneo la variable, wakati mimi wito kazi na kuyatumia, mimi nina uwezo wa kweli mabadiliko ya data kwamba alikuwa katika kuu. Mantiki? Pamoja na kwamba, pointer ni nakala, pointer bado ina anwani halisi ya variable kwamba mimi wanataka mabadiliko. Mantiki? Hivyo kujenga kuyatumia. Kumbuka, pointer daima kuwa aina kwamba ni akizungumzia kwa na kisha nyota. Na kisha wewe kuweka jina. Basi kumbuka kwamba wakati wowote una chochote nyota, ni kama pointer kwa kwamba chochote variable aina kwamba alikuwa. Hivyo hapa katika nyota, kwa mfano, ni pointer na integer. Na kisha char nyota ni pointer char nyota na kadhalika. Yeah? Watazamaji: Je, kama tuna pointer kwa n nyota x. Mimi najua kuwa inajenga pointer kwa x. Je, ni pia kutangaza x integer? LUCAS: OK, hivyo wakati wewe kusema n nyota x, wewe si kujenga pointer kwa variable x. Wewe ni kujenga pointer aitwaye x. Watazamaji: [inaudible]. LUCAS: Hivyo wakati mimi kusema n nyota x, mimi nina akisema, hey, katika kumbukumbu, mimi nina kwenda kupata moja ya masanduku hayo matatu. Na mimi nina kwenda kusema kwamba ni kwenda kuwa x, ambayo ni kwenda kuwa pointer. Na jambo la kuvutia kuhusu kuyatumia ni kuwa sisi tunasema kwamba wana 4 ka kwa ajili ya 32-bit mashine. Na sababu ya kuwa ni kwa sababu 4 ka ni 32-bits. Na mashine kwamba ni 64 bits kweli na kuyatumia anwani kwamba ni 64 bits kwa muda mrefu. Hivyo ni tu ina maana kwamba ukubwa wa anwani katika mashine ni tofauti. Hivyo referencing na Dereferencing. Kuna kampuni mbili ambazo nyie lazima kukumbuka. kwanza ni Ampersand. pili ni nyota. Je, si kupata kuchanganyikiwa na kwamba nyota na hii nyota kwa sababu kukumbuka kwamba, katika kesi hii, una n nyota. Ni kama jambo zima pamoja. Hakuna nyota n nafasi. Hivyo ina maana kwamba ni aina. Kumbuka, kwamba wakati una nyota variable, wewe ni kuzungumza juu ya aina. Wakati una tu nyota na kisha jina la kutofautiana, maana yake ni kwamba wewe ni dereferencing pointer, ambayo ina maana kwamba wewe ni kuangalia katika pointer, kutafuta anwani ni akizungumzia, kwenda kwa anwani hiyo, na kuangalia wakati wowote una huko. Kwa hiyo mimi kuwaambia wanafunzi wangu kwamba wakati una nyota, unapaswa kufikiria kwamba ni abbreviation wa maudhui ya. Hivyo kama una pointer na wewe kufanya nyota pointer, ni maudhui ya pointer. Hivyo wewe kwenda chochote ni akizungumzia na kuangalia maudhui mara kwa mara. Na Ampersand ni sawa na kitu kama pepe ya. Hivyo kama mimi kuwa na kutofautiana a-- kama, hebu kusema kwamba mimi int a sawa na 3-- kama nataka kupata pepe ya kwamba variable kumbukumbu, siwezi tu kufanya Ampersand. Hivyo ni pepe ya. Mantiki? Hivyo hapa ni mfano. Hii ni kukosa int b na int c. Hivyo int sawa na 3 ina maana kwamba Mimi nina kwenda kwa kumbukumbu. Na mimi nina kwenda kupata yanayopangwa na kuweka namba 3 hapa. Na kisha int b sawa na 4. Mimi nina kwenda kufanya kitu kimoja. Kwenda kumbukumbu na kuweka idadi 4 katika moja ya masanduku. Na int sawa na 5. Kupata sanduku mwingine na kuweka namba 5. Hivyo ni mstari huu kufanya nini? n nyota pa sawa na Ampersand a. Hivyo kwanza ya yote, n nyota pa. Je, ni kwa nini? Watazamaji: [inaudible]. LUCAS: Yeah, hivyo n nyota pa, kwanza, anatangaza pointer iitwayo pa. Na kisha ni kumshirikisha thamani ya kwamba pointer kuwa pepe ya. Hivyo Ampersand. Basi, kama mimi kufanya nyota AS, nini ni nyota PB? Oh, sorry. Hii pia ni kukosa. n nyota PB. I mean nyota pc. Mimi hivyo sorry. Ni kitu kimoja. Lakini sasa mimi nina nzuri ar kujenga pointer b na kisha pointer kwa c. Yeah? Watazamaji: [inaudible]? LUCAS: Ndiyo. Hivyo kama wewe kwenda kumbukumbu na kwenda sanduku kwamba ni designator kwa pa, wewe ni kweli kwenda kwa kuona pepe ya. OK? Yeah? Watazamaji: [inaudible]? LUCAS: Yeah, pointer ni mahali. Kamwe kusahau kwamba. Ni kama muhimu zaidi sehemu ya juu ya kuyatumia. Kuna kuhifadhi na anwani kwa baadhi ya kutofautiana. Kitu kingine? Yoyote maswali mengine? OK. Hivyo kuyatumia na Arrays. Kumbuka kwamba wakati mimi kufanya int safu 3, kimsingi, nini mimi kufanya ni mimi nina, aina ya, kutangaza katika pointer. Hivyo safu ni aina ya kama pointer kwa mahali maalum katika kumbukumbu katika ambayo mimi zilizotengwa inafaa tatu kwa integers. Je, hiyo mantiki? Hivyo wakati mimi kufanya int safu 3, nini mimi nina kufanya, kimsingi, ni kujenga tatu inafaa katika kumbukumbu. Hivyo mimi tu kupata inafaa tatu katika kumbukumbu. Hivyo kama mimi kufanya, basi, nyota safu, ni kimsingi ina maana maudhui ya safu, ambayo ina maana mimi kufuta pointer, mimi kwenda kwa nafasi ambayo ni akizungumzia, na mimi kuweka namba moja. Na kisha, kama mimi kufanya nyota safu plus 1, hiyo ni kitu kimoja kama kufanya safu mabano moja, ambayo ina maana tu mimi kwenda mahali kwamba ni akizungumzia katika. Na kisha plus 1 hufanya mimi kuhama nafasi moja. Kwa hiyo mimi kwenda kwa nafasi hii, kwa kweli, na kuweka namba mbili. Na kisha, hatimaye, wakati mimi kufanya safu plus 2, mimi kwenda ambapo akizungumzia safu ya saa. Na kisha mimi hoja ya vitalu kumbukumbu. Na kisha mimi kuweka namba tatu hapa. Yeah? Watazamaji: Hivyo nyota safu ni tu akisema hatua ya kwanza sana. Na unaweza kuongeza 1, kwa sababu tu sisi ni kweli tu referencing anwani ule wa kwanza. LUCAS: Yeah. Kwa nini sisi, kwa mfano, kusema safu 0, safu 1, na safu 2? Mimi kusema, kwa nini wewe kufanya 0, 1, 2, 3 badala ya 1, 2, 3? Moja ya sababu ni, moja, kompyuta programmers wanapendelea kuanza kuhesabu kutoka 0. Barua ni kwa sababu wakati wa kufanya safu 0, ni kitu kimoja kama kufanya safu ni pamoja na 0, ambayo ina maana mimi kwenda nafasi hiyo, na mimi si ruka vitalu kumbukumbu yoyote. Hivyo mimi si hoja vitalu kumbukumbu yoyote. Yeah? Watazamaji: [inaudible]? LUCAS: Kwa hiyo yeye ni kuuliza nini ni tofauti kati ya kufanya hii au kufanya malloc. Moja ya tofauti ni kwamba int safu 3 ni kujenga safu juu ya stack. Na wakati mimi kufanya malloc, ni inajenga juu ya lundo. Je, hiyo mantiki? Hivyo ni jinsi gani malloc kweli kazi? Hivyo kwa nini sisi hata haja ya kutumia malloc? Compiler yako aina ya takwimu nje wote vigezo kwamba wewe alisema. Naye inajenga nafasi kwa ajili ya wote wao katika stack. Basi wote wa vigezo yako ni kwenda kwa kuwa mahali fulani katika stack. Hivyo hapa ni mazingira vigezo. Hivyo kimsingi, nafasi kwa ajili ya vigezo wale katika kumbukumbu ni zilizotengwa katika kukusanya wakati. Hivyo ina maana kwamba kompyuta yako ina kujua yote ya vigezo wale kabla ya wakati. Haina haja ya kujua thamani nini wewe ni kwenda kuweka katika yao. Lakini inahitaji kujua jinsi kumbukumbu gani unahitaji. Lakini sasa hebu kusema kwamba, kwa mfano, wewe ni kujenga safu au kuchukua kamba kwamba wewe ni kuchukua kutoka kwa mtumiaji. Huwezi kujua jinsi ya muda mrefu kamba ni kwenda kuwa, kwa mfano. Hivyo huna kujua hasa jinsi wengi vitalu kumbukumbu kutenga, haki? Hivyo ni kweli haina mantiki kwa wewe kusema kuweka wahusika 100. Na kisha nini kama mtumiaji anaandika 150? Wewe ni kwenda kuwa Star. Hivyo kimsingi, unaweza kuwa na uhakika wa jinsi kumbukumbu gani unahitaji kutenga wakati mpango wa kukusanya. Wewe tu kujua kwamba kwa wakati kukimbia. Hivyo kwamba ni nini una chungu. Hivyo chungu ni kwenda kuwa na kumbukumbu kwamba wewe ni kugawa wakati wa muda wa mpango mbio. Hivyo kimsingi, wakati wa kufanya malloc, nini wewe kufanya ni kugawa kumbukumbu katika Runtime, ambayo ina maana kwamba wewe ni kuamua haki wakati huo kuwa wewe wanapaswa kuwa na kwamba kumbukumbu. Hivyo kwamba wakati wewe ni kugawa yake. Je, hiyo mantiki? Basi kumbuka, stack ina vigezo kwamba ni umba juu ya wakati kukusanya. Na kisha lundo ina vigezo kwamba ni umba kama wewe kwenda kwa malloc, kwa mfano. Watazamaji: [inaudible]? LUCAS: Hivyo GetString ni kwenda kuwaita malloc. Hebu majadiliano juu ya malloc, na Mimi itabidi kueleza GetString. Hivyo malloc ni kitu kimoja kama mgao kumbukumbu. Hivyo ni kwenda kutenga kumbukumbu juu ya lundo. Na ni kwenda na kurudi pointer kwa ambapo kwamba kumbukumbu zilizotengwa katika. Hivyo wakati wewe do-- hapa kwa example-- n nyota pointer. Na kisha pointer sawa na malloc ukubwa wa inch mara 10. Mimi nina kujenga pointer. Na kisha mimi nina kumshirikisha kwamba pointer kwa thamani ya pointer kwamba malloc akinipa. Hivyo mimi nina kuuliza malloc unaweza kutenga nafasi kwa ajili ya 10 integers. Hiyo ni nini ni kusema. Na malloc anitiaye nyuma pointer kwa mahali hapo. Mantiki? OK. Mimi Na GetString ni, kimsingi, kufanya wito kwa malloc hivyo unaweza kutenga kumbukumbu wakati wa Runtime. Daima kumbuka kuangalia kwa null kwa sababu malloc ni kwenda na kurudi null kama hawezi kutenga kumbukumbu. Hebu kusema kwamba wewe kuuliza kwa ujinga kiasi cha kumbukumbu. Kompyuta yako ni si kwenda kuwa uwezo wa kutenga kiasi hicho. Hivyo malloc ni kwenda tu kurudi null. Hivyo daima kumbuka kuangalia kama pointer kwamba got kutoka malloc ni null au si kwa sababu, ikiwa ni, unaweza kuwa dereferencing pointer na kusababisha makosa upande. Na hatimaye, usisahau kumbukumbu yako bure. Malloc ni kujenga kumbukumbu katika chungu. Na una kumbukumbu bure kabla ya mpango ya mwisho. OK, kwamba ni yote kwa ajili yangu. Sorry, Rob. Shukrani. [Makofi] LUCAS: Maswali yoyote mwisho kabla ya Rob inakuja? No? Yeah? Watazamaji: Mimi sikuweza kuona hii moja online. Je, Uploaded bado? LUCAS: Nadhani Dave ni kuweka hiyo hivi karibuni. DAVE: Ni itabidi kuwa posted. LUCAS: Ni utakuwa online. Watazamaji: Ni up. LUCAS: Ni up? OK. Yeah? Watazamaji: [inaudible]? LUCAS: Ndiyo, unapaswa bure wote kumbukumbu kwamba ni kuweka katika chungu. Watazamaji: [inaudible]? LUCAS: Ndiyo. Wakati wowote kwamba una malloc utamaduni, unapaswa kuwa na utamaduni bure baada ya kuacha kutumia variable kwamba. Hivyo malloc na bure ni daima pamoja. Marafiki zao bora. Yeah. Rob? Rob: Mimi itabidi kwenda haraka. Na pia video itakuwa kuweka up. Nina mic juu ya. OK, hivyo wiki tano mambo ya ajabu. Jambo la kwanza sisi ni stack. Basi kumbuka kwamba kuna stack moja tu frame kwa kazi kazi simu. Tutaweza kuona kwamba katika pili. Na pia kukumbuka kile kweli inakwenda katika sura ya kila stack ni kwenda kuwa vigezo mitaa ya kazi yetu, hoja kwamba ni kupita katika yetu kazi, pamoja na michache mambo mengine huna kweli haja ya kuwa na wasiwasi kuhusu. Hivyo hapa ni mfano mpango ambapo, ilani, kuu ni printfing kurudi thamani ya foo 4. foo ni kwenda tu kurudi thamani ya bar 4 comma 6. Na bar ni kwenda kuweka baadhi ya mitaa variable n sawa na 4 mara 6. Na kisha kurudi n. Hivyo hebu tuangalie stack katika iteration halisi ya mpango huu. Hivyo kuna chini ya stack yetu. Kumbuka kwamba stack kukua up. Hivyo chini ya stack yetu, sisi na stack frame kwa kuu. Wakati mpango kuanza, kuu daima ni kwenda kuwa katika chini ya stack yetu. Na nini ni ndani ya yetu stack frame kwa kuu? Hivyo hata ingawa hakuna mitaa vigezo kuu, kama nilivyosema hapo kabla, tuna argc na rgv kuchukua nafasi ndani ya stack frame kuu. Hivyo kuu sasa ni kwenda wito foo kazi. Na hiyo ina maana foo ni kwenda kupata mwenyewe stack frame yake. Hivyo sasa tuko ndani ya kazi foo. Na nini mahitaji ya kwenda katika stack frame foo ya? Naam, foo ina hoja n. Na n ni sawa na 4 tangu kwamba ni nini kuu ni kupita kama hoja foo ya. Hivyo sasa foo ni kwenda kuwaita bar. Je, ni bar kwenda na ndani ya ya 'sura yake stack? Ina x sawa na 4 y sawa na sita. Kwamba si wote kwamba sisi ni kwenda kuwa na katika stack frame kwa sababu bar pia ina mitaa variable n. Na n tunakwenda kuweka sawa na 24. Hivyo sasa bar ni kwenda na kurudi n. Hivyo bar ni kurudi 24 kwa stack frame foo. Na kwa sababu bar sasa inarejea, kwamba ina maana sisi ni popping frame stack kwa bar mbali ya stack. Hivyo kumbukumbu zote kwamba alikuwa bar kutumia ni sasa mbali stack. Sasa, foo pia ni kwenda kurudi 24 kwa kuu. Hivyo sasa kwamba foo ni kurudi, kumbukumbu kwamba foo alikuwa akitumia katika 'yake stack frame pia gone. Na sasa, kuu ni kwenda kuwaita printf. Hivyo printf ni tu kazi nyingine. Wakati sisi kuwaita printf, ni kwenda kuwa frame stack mwingine kwa printf kazi simu. Je, ni sisi kupita printf? Hiyo ni nini kinaendelea kwenda juu ya sura yake stack. Kwa uchache sana, sisi ni kupita asilimia kwamba i Backslash n na Hoja 24. Ni wanaweza kuwa na zaidi katika stack frame ni kama printf hutokea kwa kuwa kwa kutumia baadhi ya vigezo mitaa. Sisi hawajui. Lakini wote kwamba huenda katika printf ya stack frame. Ni kwenda kutekeleza printf. Kisha printf kosa. Ni watarejea. Hatimaye, kuu ni kosa. Kuu ya watarejea. Na kisha mpango wetu ni kosa. Yeah? Watazamaji: Je, wewe kuona [inaudible] hoja [inaudible] vigezo? Rob: Hivyo kuna ni tofauti hila kati ya hoja na vigezo. Na kwa kweli, katika kawaida kusema, watu huwa tu kuchanganya yao juu wakati wote. Lakini vigezo ni rasmi jina ya mambo. Hivyo argc na argv ni vigezo kuu. Hoja ni nini hasa kupita katika kama vigezo wale. Kwa hiyo, kuna wakati mimi wito foo ya 4, 4 ni hoja mimi nina kupita katika. Na parameter n, ndani ya foo, inachukua juu ya thamani 4 tangu 4 ilikuwa hoja. Watazamaji: [inaudible]? Rob: n ni variable mitaa bar. n bado ni mitaa kwa foo, lakini ni parameter kwa foo. Siyo variable mitaa. Yeah? Watazamaji: [inaudible]? Rob: foo wito tu bar na kurudi chochote bar anarudi. Watazamaji: [inaudible]? Rob: Yeah, tu kuona nyingi stack muafaka. Yeah? Watazamaji: Kwa nini foo kuitwa kabla ya printf? Rob: Kwa nini foo kuitwa mbele ya printf? Ili niweze kuwa, badala yake, amefanya kitu kama int x ni sawa na foo ya 4 na kisha kuchapishwa x. Lakini badala yake, mimi pamoja kazi wito katika hoja printf. Lakini taarifa kwamba tunaweza si kweli kutekeleza wito kwa printf mpaka sisi kufikiri nini foo ya 4 ni. Hivyo sisi ni kwenda kufanya tathmini ya hii. Na mara moja tu hiyo ni kufanyika ni kwenda kurudi na kutathmini hii. Yeah? Watazamaji: Kwa kuwa wote wawili bar [inaudible] thamani, kwa nini sisi si kuwa na [inaudible]? Rob: Wao kabisa lazima int. Hiyo ilikuwa si hawakupata juu ya hupita nyingi. Hivyo ni lazima int bar na int foo tangu wote wawili wa wale wanaorejea integers. Utupu ni tu kama wao siyo kwenda kurudi maadili halisi. Yeah? Watazamaji: Kama tungekuwa na juu kurudi, [inaudible]? Rob: line juu ya kurudi? Watazamaji: Yeah. Kama kama alivyofanya printf na [inaudible], itakuwa ni magazeti mara mbili? Rob: Hivyo ndani ya foo? Kama tungekuwa na printf hapa hapa? Watazamaji: Yeah. Rob: Hivyo kama sisi alikuwa na printf haki hapa, ingekuwa magazeti mara moja. Tangu sisi ni wito foo mara moja haki hapa, basi tutaweza hit printf. Kisha tutaweza wito bar. Na kisha foo watarejea. Na hiyo ni yake. Sisi tu milele kukutana printf mara moja. Yeah? Watazamaji: [inaudible] printf wito foo kwa sababu tuko kwanza wito printf na kisha sisi ni kupita hoja. Rob: Hivyo katika nadharia, ni si printf wito foo? Hivyo hakuna. Tu ili c ni kwenda kutekeleza mambo haya ni, kabla ya sisi unaweza wito kazi, hoja zote kwa kazi na kabisa tathmini. Hivyo ni hii kabisa tathmini? Ndiyo, ni kamba tu. Ni tu thamani. Kisha sisi kuwa na kabisa kutathmini hii. Mara hii ni kosa, sasa wote wa hoja yake ni tathmini. Na sasa tunaweza kufanya wito kwa printf. Yeah? Watazamaji: Swali moja. Kama una utupu kazi, lazima una kurudi semicolon? Rob: Je, si kurudi semicolon kama una utupu kazi. OK. Hivyo sasa baadhi ya mambo chungu. Hivyo chungu ni jinsi sisi ni kwenda kukabiliana na usimamizi wa kumbukumbu ya nguvu. Na hii moja kwa moja tofauti na stack ambayo sisi kuita moja kwa moja kumbukumbu ya usimamizi. Kadhalika stack, wewe kamwe kweli kuwa kushughulikia jinsi vigezo mitaa ni kuwa kusukuma na popped mbali yote muafaka haya stack na mambo ambayo yote. Huwezi kuwa na wasiwasi kuhusu hilo. Ni moja kwa moja. Hivyo chungu ni mwongozo. Na [inaudible] linatokana na kazi hizi malloc na bure. Hivyo hapa ni mpango mwingine. Wote sisi ni kufanya ni mallocing integer. Sisi ni hifadhi hiyo katika nyota x. Bila shaka, sisi kuwa na kuangalia kuona kama x ni null. Kisha tunakwenda kuweka kile tu x ni akizungumzia kwa 50. Magazeti nini x ni akizungumzia, magazeti x, na kisha bure x. Hivyo ni jinsi gani hii kwa kweli kwenda kuangalia kama sisi kuangalia stack yetu na lundo? Hivyo tutaweza kuanza tena. chini ya stack yetu kama kabla. Kumbuka kwamba wewe lundo moja kwa moja anapinga stack? Hivyo sisi ni kwenda kuwa na juu ya lundo yetu up huko. Hivyo chini ya stack yetu, tuna stack frame yetu kwa ajili ya kuu. Ni ina nafasi kwa argc, argv, na sisi sasa na za mitaa variable x, ambayo ni nyota int. Hivyo sisi ni kwenda iterate kupitia mpango huu. Jambo la kwanza sisi ni wito kwa malloc. Hivyo sisi ni kufanya wito kwa malloc. Malloc ni kazi. Ni kwenda kupata sura ya stack. Je, ni sisi kupita kwa malloc? Hiyo kwenda ndani ya ya sura ya stack. Sisi ni kupita ukubwa wa n, ambayo ni 4. Hivyo kwamba ni kupita kwa malloc. Je, malloc nini? Ni grabs us baadhi ya nafasi juu ya lundo. Hivyo sisi ni kwenda kwenda chungu. Na sisi ni kwenda kunyakua 4 ka kutoka lundo. Basi hebu tu kutoa kwamba anwani holela. 0x123 Tu kujifanya kuwa ni anwani kwamba ni juu ya lundo. Kwa hiyo kile ni kweli ndani ya kwamba mkoa wa kumbukumbu katika eneo Ox123? Takataka. Hivyo tuna si kuhifadhiwa chochote ndani yake. Hivyo kama mbali kama sisi kujua, ni inaweza kuwa kitu chochote. Usifikiri ni sifuri. Ni zaidi uwezekano si sifuri. Hivyo sasa malloc anarudi. Na nini sisi kufanya wakati malloc kurudi? Sisi kuweka nini anarudi. Sisi kuweka x sawa na kile ni kurudi. Hivyo nini ni kurudi? Ni kurudi 0x123 tangu kwamba ni anwani ya block ya kumbukumbu kwamba ni tu zilizotengwa katika chungu. Hivyo kurudi 0x123 x sasa ni kwenda kuwa na kuweka sawa na 0x123 ambayo, pictorially, sisi mara nyingi kuteka kama x kuwa halisi arrow akizungumzia kuzuia kwamba. Lakini x ni hifadhi ya tu anwani hiyo. Hivyo basi, tuna kuangalia kama x ni null. Ni si null. Sisi kujifanya kuwa kwamba malloc wamefanikiwa. Hivyo sasa nyota x ni sawa na 50. Hivyo nyota anakumbuka ina maana kwenda kwa anwani hiyo. Hivyo 0x123 Sisi ni kwenda kwenda kwa anwani hiyo. Hivyo kwamba inatuleta hadi pale. Tunafanya nini katika anwani hiyo? Sisi ni hifadhi 50. Kwa hiyo baada ya mstari huu, kwamba ni nini mambo ni kwenda kuangalia kama. Hivyo sasa ni tena takataka huko up. Sasa tunajua kwamba 50 ni katika kwamba anwani hasa kwa sababu sisi kuweka kwa hiyo. OK? Hivyo sasa sisi ni kwenda magazeti f. Hivyo kwanza tunakwenda magazeti nyota x. Hivyo nyota x ni nini? Tena, nyota x maana kwenda Jambo kwamba x ni akizungumzia. Hivyo x ni hifadhi ya 0x123 Go hiyo. Sisi kupata 50. Hivyo magazeti f hiyo. Na hiyo ina maana ni kwenda magazeti 50. Na kisha kwamba anarudi. Na kisha tuna printf pili. Sisi ni sasa asilimia p. Kama wewe hawajaona, hiyo ndiyo tu jinsi magazeti pointer. Hivyo tuna asilimia i, asilimia f, na wote wa wale ambao tayari. Hivyo asilimia p, magazeti pointer. Hivyo x ni pointer. Hivyo kama sisi ni kwenda magazeti x yenyewe, sisi ni uchapishaji nini ni kweli ndani ya x, ambayo ni 0x123 Hivyo kwanza magazeti f ni kwenda magazeti 50. magazeti pili f ni kwenda na magazeti 0x123 Yeah? Watazamaji: Je, matumizi ya asilimia x na magazeti pointer? Rob: Hivyo wewe kutumia asilimia x na magazeti pointer? Hivyo unaweza lakini asilimia x ni tu, kwa ujumla, kwa kama kama una baadhi ya integer na unataka magazeti ni kama hexadecimal. Hiyo ni jinsi ya kufanya kwamba tu. Wakati, asilimia d ingekuwa magazeti kama decimal. Hiyo ni Sisi ndio kupata asilimia d. i ni tu integer. asilimia p ni hasa kwa kuyatumia. Hivyo x ni pointer. Tunataka kutumia asilimia p. Lakini asilimia x anaweza kufanya kazi. Yeah? Watazamaji: [inaudible]? Rob: Yeah. Angalau kwa hii call-- hivyo mimi hawakuiweka katika hapa. Lakini hoja hizi mbili ni lazima ndani ya sura hii stack pamoja na vigezo serikali za mitaa printf hutokea kwa kuwa kutumia. Na kisha wito karibu na printf sasa ndani ya printf stack frame ni asilimia p backslash n na chochote thamani ya x ni, ambayo ni 0x123. Yeah? Watazamaji: [inaudible]? Rob: Ni itabidi magazeti kitu kwamba inaonekana kama hii. Watazamaji: [inaudible]. Rob: Hivyo ni Prints katika fomu ya mahali. Inaonekana kama mahali. Yeah? Watazamaji: [inaudible]? Rob: Kwa nini ni nini? Watazamaji: [inaudible]? Rob: Kwa nini ni pointer hii 4 ka? Hivyo kuna rundo zima ya 0 ya mbele ya hii. Hivyo ni kweli 0x0000000123. Katika mfumo 64-bit, kutakuwa na rundo zima la zeros zaidi. Yeah? Watazamaji: [inaudible]. Rob: Hivyo printf kwanza ni kwenda print-- Watazamaji: [inaudible]. Rob: Ndiyo, ni kwenda magazeti nini x ni akizungumzia. Star anasema ni kitu gani kitu akizungumzia. Kunyakua hiyo. Hivyo nini ni akizungumzia? 50. Kunyakua hiyo. Hiyo ni nini sisi ni kwenda magazeti. Wakati ambapo, moja ijayo, sisi ni tu uchapishaji x yenyewe. Nini ni ndani ya f? 0x123. OK. Na kisha, hatimaye, tuna bure. Je, ni sisi kupita kwa bure? Sisi ni kupita x. Kwamba wakati mimi kwa kweli kuonyeshwa ni katika sura ya stack. Hivyo sisi ni kupita thamani 0x123 ya bure. Hivyo sasa bure anajua, haki ya wote, Nina kwenda juu ya lundo na kwamba bure kumbukumbu. Ni tena kwa kutumia kile ni saa anwani 0x123. Hivyo bure utaachia kwamba kutoka lundo. Sasa chungu yetu ni tupu tena. Tuna uvujaji kumbukumbu hakuna. Sasa bure watarejea. Taarifa kwamba x ni bado 0x123. Lakini hiyo ni sasa si halali kumbukumbu. Sisi lazima tena dereference x. Yeah? Watazamaji: Je, kurudi 0 redundant? Rob: Je, returen 0 redundant? Ndiyo. Sisi tu ya kuweka kwamba kuna sababu sisi kuwa na kurudi moja kwa ajili ya hewa. Hivyo ni kama, yeah, lets ni pamoja na kurudi 0. Yeah? Watazamaji: [inaudible]? Rob: Hivyo baada ya bure x, kile kinachotokea kama sisi kujaribu dereference pointer? Ni inawezekana kwamba hakuna kitu chochote kitaenda vibaya. Ni inawezekana kwamba sisi bado itabidi kupata 50. Ni inawezekana, pia, kwamba kumbukumbu ni sasa ni kuwa kutumika kwa ajili ya kitu kingine. Hivyo ni tabia kisichojulikana. Na undefined ina maana yoyote yanaweza kutokea. Yeah? Watazamaji: [inaudible]? Rob: Hapana, hivyo kama wewe hawawajui x kwa kitu kingine. Hivyo kama haki hapa sisi alisema x ni sawa na malloc kitu else-- malloc ukubwa event-- basi hiyo block awali ya kumbukumbu si huru. Na sisi rasmi waliopotea. Hiyo ni kumbukumbu leak. Tumekuwa waliopotea kumbukumbu zote kwa kuwa block ya kumbukumbu. Hivyo hakuna njia tunaweza milele bure yake. OK, hivyo basi kurudi 0 njia kufanyika. Haki zote, hivyo stack kufurika. Nini wazo hapa? Basi kumbuka, chungu ni kwenda chini. Stack ni kwenda up. Hivyo hii ni mfano kutoka hotuba, Nadhani, ambapo kuu ni kwenda tu wito huu foo kazi, ambayo ni kwenda kujiita recursively juu na tena. Hivyo stack muafaka ni kwenda kazi sawa. Hivyo sisi ni kwenda kuanza na kuu kama chini stack frame. Kisha kuu ni kwenda kuwaita foo, ambayo ni kwenda kupata sura ya stack. Kisha foo ni kwenda kuwaita foo tena, ambayo ni kwenda kupata frame mwingine stack. Na kisha tena, na tena, na tena, na tena mpaka, hatimaye, sisi kukimbia ndani ya chungu. Hivyo hii ni jinsi sisi kupata stack kufurika. Na katika hatua hii, wewe seg kosa. Au wewe d kweli seg kosa kabla ya hatua hii lakini yeah. Watazamaji: Je msingi dampo sawa na seg kosa? Rob: Hivyo utaona segmentation kosa msingi kutupwa. Unaweza kupata msingi dampo wakati wewe seg kosa. Na ni kama dampo ya yote ya yaliyomo ya kumbukumbu yako sasa ili kwamba unaweza kujaribu na kutambua nini SEG alipinga viongozi. Yeah? Watazamaji: [inaudible]? Rob: Hivyo segmentation kosa njia kuna stack kufurika. Hivyo si lazima. kosa segmentation ina maana kwamba wewe ni kugusa kumbukumbu katika njia unapaswa kuwa. Hivyo njia moja ya kwamba kinachotokea ni kwamba, wakati stack kufurika, sisi kuanza kugusa kumbukumbu katika njia ya kwamba sisi haipaswi. Yeah? Watazamaji: [inaudible]? Rob: Hivyo ndani ya kitanzi usio. Kama, hii ni kama usio kujirudia kitanzi na hivyo sisi kupata mwingine stack frame kila wakati. Lakini tu ndani ya mara kwa mara usio wakati one-- vizuri, hebu si hata magazeti f-- kufanya kitu fulani. Chochote. Sisi siyo kwenda kuwa kupata frame mwingine stack. Sisi ni kwenda tu kuweka looping juu ya maelekezo haya moja. stack ni si kukua. Ni ukweli kwamba kila kujirudia wito anatupa frame stack. Hiyo ni kwa nini sisi kupata stack kufurika. Yeah? Watazamaji: Hivyo kama wewe alisema kupata kitanzi wakati na kisha [inaudible]? Rob: Hivyo kama ndani ya kitanzi wakati kulikuwa na printf, bado ingekuwa si seg kosa. Mimi tu hakutaka kuchanganya mambo. Ingekuwa kitanzi. Wewe Ningependa kupata stack moja sura kwa printf. Kisha printf atarudi. Kisha wewe d kitanzi tena. Wewe Ningependa kupata stack moja sura kwa printf. Ni atarudi. Single stack frame. Hivyo wewe si kupata hii usio piling up muafaka stack. Watazamaji: [inaudible]? Rob: Ndiyo. Hivyo hii kufurika stack hutokea kwa sababu hakuna hata mmoja wa haya wito kwa foo wanaorejea. Hivyo kama sisi kurudi, basi sisi ingekuwa kuanza kupoteza muafaka stack. Na kisha sisi bila stack kufurika. Na kwamba ni kwa nini unahitaji kesi ya msingi kwa ajili ya kazi yako binafsi. Yeah? Watazamaji: Je, ukubwa uwezo na stack kwa chungu huo kwa mipango yote? Rob: Takribani. Ni uwezo ukubwa wa stack na lundo sawa kwa programu yote? Takribani. Kuna baadhi ya Ubahatishaji kwa ambapo stack kuanza na ambapo lundo kuanza. Kama wewe kutokea kwa kuwa na mengi yote ya vigezo kimataifa na mambo, unaweza kuchukua mbali na baadhi ya nafasi kwa chungu yako. Katika mfumo 64-bit, wewe karibu kuwa na kumbukumbu kubwa. Kuna tu sana. Kati ya bits 32 na 64 bits, kwamba ni tofauti kubwa. Wewe ni kwenda kupata mengi zaidi stack na lundo nafasi kwenye 64-bit mfumo kwa sababu kuna tu zaidi anwani kwamba wanaweza kutumia. Lakini juu ya mfumo wa mtu binafsi, itakuwa kuwa takribani kiasi kama hicho cha stack na lundo nafasi. Wote haki. Kwa hivyo jambo la mwisho ni mkusanyiko. Hivyo unapaswa kujua mchakato huu. Kuna hatua nne kubwa. Hivyo moja kwanza lazima kuwa rahisi kukumbuka. Kabla ya usindikaji. Ina kiambishi awali kabla ndani yake. Hivyo inakuja kabla ya kila kitu kingine. Jambo kukumbuka ni hash. Hivyo hash amefafanua na hash ni pamoja na katika yote ya hayo. Yote haya ni kabla ya processor maelekezo. Haya ni mambo ambayo kabla ya processor inachukua huduma ya. Kwa hiyo ni nini kabla ya processor kufanya nini? Ni jambo kweli bubu. Yote ni uwezo wa ni yote haya nakala, na kata, na kuweka shughuli. Hivyo hash ni pamoja na kiwango i0 dot h. Nini ni kwamba kufanya? Ni grabbing standard i0 dot h faili na pasting ndani ya juu popote anasema hash ni pamoja na standard i0 dot h. Na hash yoyote kufafanua kwamba tumekuwa kuonekana, ni nini kwamba kufanya? Yake kuiga thamani kwamba hash defined hufafanuliwa kama na pasting kwamba popote wewe ni kutumia thamani. Hivyo Preprocessor tu haina kweli Nakala rahisi shughuli msingi. Ni kitu gani smart. Hivyo kila kitu kingine ni ngumu zaidi. Hivyo sasa kwamba Preprocessor ni done, sisi kweli kukusanya. Kwa hiyo ni nini kuandaa maana yake nini? Sisi ni sasa kwenda c code kwa mkutano code. Yeah? Watazamaji: [inaudible]? Rob: Yeah, sisi hawakupata hiyo. Hivyo kuandaa. Sisi ni kwenda kutoka c kwa mkutano. Hivyo hii ni halisi mabadiliko ya lugha. Kuandaa yenyewe ina maana kwenda kutoka juu ngazi ya lugha chini lugha ngazi. Na c ni high lugha ngazi ikilinganishwa na mkutano. Mkutano ni nini? Maelekezo yake kwamba ni, pretty sana, kwa ajili ya CPU yako. Lakini bado kompyuta yako haina si kuelewa mkutano. Ni tu anaelewa ndio na zeros. Hivyo hatua ya pili ni kukusanyika, ambayo huleta sisi kutoka maelekezo haya kwamba CPU wako anaelewa na kwa kweli tafsiri yao, kwa ndio na zeros. Hivyo C kwa mkutano kwa binary. Lakini sina executable bado. Hivyo kufikiri ya maktaba cs50. Tuna zinazotolewa kwa binary kwa hii maktaba cs50, ambayo ina GetString na GetInt na wote. Lakini cs50 library-- katika na itself-- ni si kutekelezwa. Haina kuwa na kazi kuu. Ni tu rundo la binary kwamba unaweza kutumia. Hivyo ni jinsi gani sisi kuunganisha kuleta pamoja wote wa haya files mbalimbali binary ndani ya executable halisi. Moja kwamba unaweza aina dot dot kufyeka nje. Hivyo hii ni kama faili kwamba wewe aliandika, - chochote mpango wako is-- Ceaser dot c. Lakini sasa imekuwa ni compiled chini ya binary. Hivyo Ceaser dot o. Na hii ni cs50 yetu maktaba binary. Na wao ni kuwa pamoja ndani ya executable moja. Yeah? Watazamaji: [inaudible]? Rob: Hivyo kwanza ni pamoja na, kumbuka, hash ni pamoja na ni kweli kabla ya processor hatua. Lakini hiyo ni tofauti. Kama wewe si kutumia kazi yoyote kwamba ni nje ya faili yako moja kisha, hakuna, huna haja ya kuhusisha kitu chochote tangu una kila kitu. Alisema kwamba, printf ni kuwa wanaohusishwa katika. Kama wewe milele kutumia printf, hiyo ni kitu kwamba mahitaji ya kuwa wanaohusishwa katika kwa sababu hakuwa na kuandika kwamba. Na, kwa kweli, printf ni moja kwa moja wanaohusishwa katika. Unajua jinsi katika mstari amri au wakati wewe aina ya kufanya, unaweza kuona ni na dash l cs50, ambayo ina kiungo katika maktaba cs50? Printf, na mambo kama hayo, ni kwenda kuwa na mahusiano moja kwa moja. Maswali yoyote nyingine juu ya kitu chochote? Watazamaji: [inaudible]? Rob: Kuunganisha? Tuna rundo zima la mbalimbali binary files. Huu ni mfano kisheria kwamba sisi kutumia ni cs50 maktaba. Sisi compiled na aliyopewa na wewe binary kwa ajili ya maktaba hii cs50. Unataka kutumia GetString katika mpango wako. Hivyo kwenda na kutumia GetString. Lakini bila kificho wangu binary kwa GetString, wakati wewe kukusanya code yako chini, unaweza si kweli kukimbia yako mpango kwa sababu GetString String ni bado kabisa defined. Ni wakati tu kiungo katika binary yangu ambayo ina GetString kwamba sasa, kila haki, kweli mimi nitafanya GetString. Faili yangu ni kamili. Na siwezi kukimbia hii. Yeah? Watazamaji: Je, kuunganisha kubadilisha binary kwa executable? Hivyo hata kama huna nyingine maktaba, bila bado kuwa muhimu kutafsiri [Inaudible]? Rob: Hivyo executable ni bado katika binary. Ni kuchanganya tu nzima rundo la binaries. Watazamaji: Asante sana. Rob: Hakuna tatizo. Yoyote maswali mengine? Vinginevyo, sisi ni kuweka wote. Wote haki. Shukrani. [Makofi] Watazamaji: Asante. Rob: Yeah.