Tip:
Highlight text to annotate it
X
>> SPIKA 1: Hi kila mtu.
Sisi ni kwenda kuanza.
Nadhani watu bado ni kwenda kuwa kuchuja in
Lakini kwa maslahi ya muda, hivyo tunaweza kupata guys nje ya hapa kwa wakati,
sisi ni kwenda kuanza.
Hivyo welcome CS50 Quiz 0 mapitio.
Kwa wale ambao si barabara Hata hivyo, una swali juu ya Jumatano.
Woo-hoo.
>> Kama si kuanza kusoma bado au si alitambua kwamba hili lipo bado,
zamani Quizzes na taarifa zote 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 mifuniko.
Basi hebu kuanza.
>> Hivyo guys wapate kukumbuka, kwanza siku ya darasa Daudi alikuwa taa wale.
Hivyo kimsingi, kila kitu kwamba huenda juu ya chini ya kofia ya kompyuta ni
kufanyika katika binary.
Kisha maana yake nini inaonekana kama, 0 na 1 ya.
Ina maadili mawili ambayo inaweza kuwakilishwa.
>> Hivyo tu kama katika siku ya kwanza ya sehemu Daudi akageuka kwenye mwanga
bulb kuwakilisha juu, au 1, kompyuta yetu anaelewa binary kama 0 na
1, juu ya au mbali.
Misingi ya mapacha.
Kila mahali ni kuwakilishwa katika msingi mbili.
Hivyo kuongeza 2-0 kwa 1 hadi 2 njia yote hadi.
>> Kukokotoa kile ambacho binary yako ni decimal, wewe tu kufuata equation hii
aina kitu.
Kama una 1 yoyote ya sehemu hizo, 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, kama vile unaweza kuongeza na Ondoa katika decimal au msingi 10, au
kweli msingi wowote, juu ya anaweza kuongeza na Ondoa katika binary.
Nini hasa bila kutarajia wakati kuongeza mbili up, ikiwa ni sawa na zaidi
ya 1, kubeba 1, kufanya hivyo 0, na kufanya Aidha njia hiyo, tu
kama wewe bila kutarajia kwa mara kwa mara decimal au msingi mwingine wowote.
Baridi.
>> Hivyo kama nilivyosema hapo kabla, kila kitu unaendelea chini ya kofia ya kompyuta na yetu
ni kufanyika katika 0 na 1, au mapacha.
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 thamani ASCII.
Thamani ASCII ni idadi tu kwamba inaweza kueleweka na kompyuta yako.
Na kama unaweza kufanya Aidha na kutoa na idadi, 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 magazeti kwamba kwa kutumia asilimia C, kutakuwa na kutafsiri kwamba kama
tabia na magazeti nje A.
>> Vile vile, unaweza kutangaza kama char.
Na wakati magazeti ya nje kutumia asilimia C, kutakuwa na kutafsiri kwamba kama
asilimia D. Na kama unaweza kuongeza posta, 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 integer 5?
Mawazo yoyote?
Yeah.
>> Hivyo kama tuna 5 kama kamba, tunaweza Ondoa 0.
Na kwamba nitakupa sisi 5.
Na vile vile, kama tuna 5 kama integer, kuongeza kwamba kwa kamba 0.
Na kwamba anatupa kamba 5.
Baridi.
>> Sasa, kukumbuka nyuma kwa hotuba moja ambapo kuongelea algorithms.
Hivyo ni jinsi gani sisi kweli unataka kompyuta kufanya mambo ya kuvutia?
Unajua, kujumlisha na kutoa tu idadi 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 hatua kwa hatua kuweka maelekezo kwa jinsi ya kufanya
kazi fulani -
tu kama kichocheo.
Unaweza kukumbuka siku ya kwanza ya darasa ambapo Daudi alikuwa sisi kuhesabu chumba
ya watu na jinsi watu wengi walikuwa katika chumba.
Unaweza kutumika 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, unaweza kusema yako idadi ya mtu mwingine, kuongeza kwamba
Idadi ya juu, na mtu mmoja anakaa chini.
Na kurudia hiyo.
Hiyo ni aina moja ya algorithm.
Tunaweza kuchambua jinsi ufanisi an algorithm ni msingi ni kukimbia wakati.
Lakini tutaweza kuzungumza kidogo zaidi juu ya kwamba baadaye.
>> Hivyo algorithms wote wanaweza pia kuandikwa katika pseudocode.
Pseudocode ni Kiingereza kama syntax kutumika kuwakilisha
lugha ya programu.
Kwa mfano, kama sisi alitaka kumwomba user nadhani namba yangu favorite, sisi
wanaweza kuwa pseudocode kama vile.
>> Kupata watumiaji nadhani.
Kama nadhani ni sahihi, kuwaambia wao ni sahihi, mwingine kuwaambia
wao siyo sahihi.
Na pseudocode ni njia ya urahisi anayewakilisha wazo au algorithm.
Basi sasa sisi kutaka kweli kuandika hii katika lugha kwamba kompyuta
wanaweza kuelewa.
Hivyo tunaweza kuandika pseudocode yetu na kutafsiri kwamba katika chanzo code.
>> Hadi sasa, chanzo code lazima kuambatana kwa syntax baadhi ya
lugha ya programu.
Na hivyo mbali, katika CS50, tumekuwa wamekuwa wakitumia zaidi c.
Hivyo hii inaweza kuwa chanzo kanuni kwa ajili ya c.
Baadaye katika Bila shaka, usiku kuja katika kuwasiliana na programu nyingine
lugha kama PHP.
Au kama wewe hata kuchukua madarasa mengine, wanaweza kufanya Java, Python, au hata OCML.
Lakini katika yetu c mpango lugha, hii ni jinsi tupate kuandika chanzo kanuni kwa ajili ya
pseudocode algorithm kwamba I just ilivyoelezwa hapo awali.
>> Hivyo ni jinsi gani kompyuta yako kweli kuelewa kwamba?
Kama nilivyosema kabla, ni kweli tu anaelewa zeros na ndio.
Hivyo ni jinsi gani kupata kutoka chanzo code kwa kitu ambacho unaweza kuwa
kueleweka?
Naam, tuna kitu aitwaye compiler.
>> Kama unakumbuka nyuma katika zaidi ya yako psets, alikuwa na aina fulani ya mpango
Imeandikwa katika dot c file.
Na basi ingekuwa aina kufanya.
Kwa hiyo kile ni kufanya nini?
>> Unaweza aina kufanya kukusanya yako mpango kwa sababu mtu -
mtu aliandika p kuweka yako; pengine David -
kuundwa kufanya file.
Na kwamba anasema kufanya kujua kukimbia yako compiler, aitwaye Clang, kwamba mapenzi
kisha kukusanya chanzo code yako kitu kanuni, ambayo ni zeros na wale
kwamba kompyuta yako anaelewa.
Lakini baadaye kidogo juu ya tutakwenda zaidi katika kina kuhusu compilers.
>> Hivyo kukumbuka pset 0, ambapo - 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: kufyeka Quizzes, kufyeka 2013, kufyeka 0, na bonyeza kupitia tu
Quizzes 2013 na jaribio 0, kupitia slides sehemu.
>> SPIKA 1: Yeah, hivyo kama wewe guys wanataka kuvuta it up na kuangalia ni juu yako
kompyuta mwenyewe, hiyo ni nzuri sana.
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 mara, alikuwa mgomo juu ya mtihani.
Na si.
Hivyo pset 0, you guys wanapaswa kuwa na wote kutekelezwa kitu kwa kutumia mwanzo.
Na sisi kujifunza baadhi ya programu ya msingi matofali ya ujenzi kwa kutumia mwanzo.
>> Basi hebu tuangalie baadhi ya wa vitalu haya jengo
kwamba kufanya juu ya mpango huo.
Kwanza ni kujieleza Boolean.
Maneno Boolean 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.
>> Kwa hiyo, ili kwa maneno Boolean kwa kuwa na manufaa, tuna operators Boolean.
Hawa ni watoa huduma ambayo inaweza kutumika kulinganisha maadili fulani.
Hivyo tuna na au si sawa na, chini ya kuliko au sawa na, au zaidi kuliko
sawa, na chini ya au zaidi ya.
Lakini waendeshaji 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, hali ikiwa na mwingine.
>> Hapa ni mfano wa jinsi unaweza kutumia.
Je, mtu yeyote kujua tofauti kati ya kutumia tu kama kauli zote
njia ya chini mistari, ikiwa mwingine, kama, na mwingine pamoja?
Ndiyo?
>> Watazamaji: [inaudible].
>> SPIKA 1: Hasa.
Basi, ikiwa mimi alikuwa kama njia yote chini hii njia, hata kama hali hii anarudi
kweli, bado itaendelea kupima miwili ijayo.
Wakati, kwa mwingine-kama, mwingine taarifa, kama mtu anarudi kweli,
wengine si kipimo.
Maswali yoyote kuhusu hilo?
Baridi.
>> Hivyo kutumia kama-mwingine wa mwingine taarifa kama unajua kwamba inaweza tu
kuwa moja ya kesi hizi.
Basi, sisi tunajua kama x ni chini ya 0, ni dhahiri si kwenda kuwa
zaidi ya 0.
>> Next, mwingine kuzuia ujenzi wa kwamba sisi kujifunza ni matanzi.
Tuna aina tatu za matanzi.
Kwa tanzi, wakati tanzi, na kufanya wakati matanzi.
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 tunajua mara ngapi tunataka iterate
kwa njia ya kitu au mara ngapi tunataka kufanya kazi.
Sisi kutumia wakati tanzi kama sisi haja ya baadhi ya hali kuwa ni kweli kuweka mbio.
Na sisi kutumia kufanya wakati sawa na wakati, lakini tunataka kanuni zetu na kukimbia katika
angalau mara moja.
>> Hivyo wakati, chochote ni katika kufanya mapenzi daima kukimbia angalau mara moja.
Wakati, kwa wakati, inaweza si kukimbia wakati wote kama
hali si ameridhika.
Maswali yoyote kwa hilo?
>> Hivyo muundo wa kwa kitanzi.
You guys sote kuonekana hii.
Wewe initialize.
Una aina fulani ya hali hiyo.
Hivyo, kwa mfano, tunaweza initialize kama kwa i sawa na 0.
i ni chini ya 10.
Na i + +.
Rahisi sana mtu tumefanya.
>> Kwa kitanzi wakati, vile vile, una kuwa na aina fulani ya initialization,
baadhi ya aina ya hali, na baadhi ya aina ya update.
Ili tuweze kutekeleza yetu kwa kitanzi pia kama kitanzi wakati kutumia hii.
Na vile vile kwa kufanya wakati kitanzi, tuweze kuwa na baadhi initialization,
kutekeleza kitu, update, na kisha kuangalia hali hiyo.
>> 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 kurudi, int.
Ina kazi jina, kuu.
Na ina hoja, argc na argv.
Hivyo kuu ni kazi.
>> Kazi nyingine unaweza kuwa kutumika, printf - printf ni kazi -
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
kiwango 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 bila [inaudible]?
>> SPIKA 1: Hapana
Maswali yoyote mengine?
Baridi.
Hivyo tu kama 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
ya q, kwa mfano.
Kuna kurudi aina hapa, katika kesi hii int, kazi yetu jina q na wetu
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 mchango wetu.
Hivyo kwa nini huenda tunataka kutumia kazi?
>> Awali ya yote, kubwa kwa shirika.
Wao kusaidia kuvunja code yako katika zaidi kupangwa chunks na kufanya
ni rahisi kusoma.
Kurahisisha.
Hii ni nzuri kwa ajili ya kubuni.
Wakati wewe ni kusoma kipande ya maadili ya na kazi kuu ni kweli,
kweli kwa muda mrefu, inaweza kuwa vigumu sababu kuhusu nini kinaendelea.
Hivyo kama wewe kuvunja chini katika utendaji, inaweza kuwa rahisi kusoma.
Na taka-uwezo.
Kama una chunk ya kificho kwamba ni kuwa aitwaye au kukimbia mara nyingi,
badala ya marudio ya andiko kwamba kanuni mara 10 katika kazi yako kuu, huenda
wanataka kutumia tena yake.
Na kisha kila wakati unahitaji kutumia kipande ya kificho, simu kazi.
>> Hivyo sasa kama sisi kumbuka nyuma mwanzo, sisi pia alizungumzia kuhusu dhana chache,
moja ambayo ni ya threading.
Thread ni dhana ya nyingi Utaratibu wa code
utekelezaji kwa wakati mmoja.
Hivyo kufikiri nyuma siku moja ambapo Daudi alikuwa nyie wahesabu idadi ya
watu katika chumba hicho.
>> Kimsingi, nini kinachoendelea juu ya yote ni yenu guys walikuwa
mbio nyuzi tofauti.
Na wale nyuzi walikuwa kuja pamoja kupata aina fulani ya jibu.
Vile vile, katika Scratch, wakati una sprites nyingi, huenda
kuwa na paka na mbwa.
Na wangekuwa wakati huo huo mbio scripts yao wenyewe.
Hiyo ni mfano wa threading.
>> Na dhana nyingine kwamba alikuwa kuletwa katika mwanzo alikuwa matukio.
Na matukio ni wakati sehemu nyingi za code yako ya kuwasiliana na kila mmoja.
Katika Scratch, huu ni wakati unaweza kutumika matangazo kudhibiti na Wakati mimi
Kupokea vitalu.
>> Na pia, katika kuweka tatizo 4, tuliona kidogo ya matukio kama vizuri.
You guys wanaweza kuwa kutumika Maktaba Gevent.
Basi, kulikuwa na kazi waitForClick ambayo wewe walikuwa wakisubiri
kwa mtumiaji click.
Na click yako, katika kesi hii, itakuwa tukio na kusubiri kwa click ni yako
tukio handler.
>> Na pia, katika mbio psets yako na kazi ya psets yako,
anaweza kuwa kuja katika kuwasiliana na baadhi ya amri hizi.
Hii ni nini typed ndani yako terminal dirisha au chochote dirisha
ambayo inaonyesha juu ya g yako hariri kwa, kimsingi, navigate kompyuta yako.
>> Hivyo kwa mfano, LS orodha ya yaliyomo ya directory.
Kufanya directory inajenga folder mpya.
CD, mabadiliko ya directory.
RM, kuondoa, hufuta file au baadhi ya directory.
Na kisha kuondoa directory kuondosha directory.
>> Watazamaji: [inaudible]?
>> SPIKA 1: Yeah, uhakika.
Sorry, swali kama wewe kupendekeza kuweka hii
kwenye karatasi kudanganya.
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?
>> Basi sasa, sisi aliyesema kidogo kwa ufupi juu ya maktaba.
Lakini kwa wale kuu mbili ambazo tumekuwa kutumia hadi sasa katika shaka ni
kiwango 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
kuingiliana na wengine wa code yako.
Lakini hao ndio kuu mbili ambazo sisi nimekuja kwa kuwasiliana na hivyo mbali katika
bila shaka.
>> Aina.
Hizi ni nzuri kwa kukumbuka ni kiasi gani kila aina ni kuwakilishwa na au jinsi
wengi ka kila ya aina inahitaji -
int, 4 ka; char, 1 Byte.
Float ni 4 ka.
Mara mbili ni nini?
>> Watazamaji: [inaudible].
>> SPIKA 1: Yeah, hivyo kuelea lakini mara mbili ya ukubwa.
Nini kuhusu muda mrefu?
>> Watazamaji: [inaudible].
>> SPIKA 1: OK.
Je, ni kwa muda mrefu?
>> Watazamaji: [inaudible].
>> SPIKA 1: Yeah, mara mbili int.
Ndiyo.
>> Watazamaji: [inaudible].
>> SPIKA 1: Long [inaudible].
Na kisha muda mrefu muda mrefu ni mara mbili kwamba.
>> Watazamaji: No, no.
muda mrefu ni int.
Inategemea usanifu kabla ya [inaudible]
na int na ukubwa huo.
[Inaudible].
>> SPIKA 1: Muda mrefu na int ni sawa.
Na kisha muda mrefu muda mrefu ni mara mbili int.
Baridi.
Na basi, ni nini Aina ya mwisho?
>> Watazamaji: Pointer.
>> SPIKA 1: Yeah, hivyo sisi kujifunza kidogo kuhusu kuyatumia.
Na bila kujali nini pointer ni akizungumzia - inaweza kuwa nyota char
au nyota int -
mara nyingi ni 4 ka kwa pointer.
Maswali kuhusu hilo?
Ndiyo?
>> Watazamaji: [inaudible]?
>> SPIKA 1: Muda mrefu na int ni sawa katika hii appliance cs50.
>> Watazamaji: appliance kabisa kubadilishana.
>> SPIKA 1: Yeah.
Hivyo basi muda mrefu muda mrefu ni mara mbili int.
>> Watazamaji: Hii ni 32 kidogo?
>> SPIKA 1: 32 kidogo, yeah.
>> Watazamaji: Kwa hiyo [inaudible]?
>> SPIKA 1: Ndiyo, kama hana wazi kusema, wewe
lazima kudhani 32 bit.
>> Watazamaji: Ni 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.
Kadhalika moja ya Quizzes mazoezi, anauliza kuhusu unsigned int.
Hivyo jinsi gani kwamba kuangaliwa kutoka int [inaudible]?
>> SPIKA 1: unsigned katika ni pia 4 ka.
Lakini ni nini 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 kidogo 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 kwa muda mrefu [inaudible]?
>> SPIKA 1: Hivyo swali ni jinsi gani pointer kwa muda mrefu muda mrefu -
jinsi ni kwamba ka nne tu wakati muda mrefu muda mrefu wake 8 bytes.
Kwa hiyo kumbukeni ni pointer, kimsingi, katika thamani sana msingi.
>> Watazamaji: [inaudible].
>> SPIKA 1: Yeah, hivyo pointer ni eneo la kumbukumbu.
Hivyo haijalishi ni kiasi gani nafasi kwamba pointer ni akizungumzia.
Tu mahitaji 4 ka kuweka wimbo ya kwamba eneo la kumbukumbu.
Maswali yoyote mengine?
Baridi.
>> Kwa hivyo jambo la mwisho mimi na ni pato kiwango.
Unapaswa kutumia yao mara kwa mara kutosha kwamba unaweza kukumbuka.
Lakini huu ni wakati sisi kutumia printf, kwa mfano.
Na tuna placeholders haya 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 muda mrefu na asilimia s kwa kamba.
>> Vile vile, tumekuwa kutumia chache ya 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: ni asilimia d kwa nini?
>> SPIKA 1: Hivyo swali ni nini asilimia d kwa kuwa ni nani?
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 ni -
>> Watazamaji: Kwa hiyo 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 mpya line na huenda [inaudible].
>> SPIKA 1: Naam, maswali yoyote?
Sawa.
Mimi nina kwenda mkono ni mbali na Dan ambaye itaendelea.
>> [Makofi]
>> DAN: righty yote.
Basi, mimi utakuwa kuzungumza juu ya mwingine pana mbalimbali ya mawazo ya darasa kwamba ni
takribani mwakilishi wa wiki mbili na mwanzo wa wiki tatu kuanzia mbali
na akitoa, ambayo ni njia tu ya kutibu thamani ya aina fulani kama
thamani ya aina tofauti.
Hivyo tunaweza kufanya hii kwa chars kwa ints, ikifungwa kwa ints, na
longs muda mrefu mara mbili.
>> Mambo yote haya yanaweza kutumika kama njia ya kutibu baadhi thamani numeric
minus char kama nyingine numeric thamani.
Hivyo kuna baadhi ya masuala na hii, Bila shaka, ambayo inakuja wakati kutupwa
mambo kama kuelea kwa ints.
Hivyo hii ni weird kidogo.
Tuna kuelea kwamba ni 1.31.
Sisi kuzidisha ni kwa 10,000.
Na kisha sisi magazeti kama int.
Gani pato hili?
Mara 10,000 1.31.
Hivyo 13,000, ni kwamba nadhani?
>> Watazamaji: Nadhani ni 10,000.
>> DAN: Kwa hiyo 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 kwamba ni 13,000.
Na hii ya ziada weird -
>> 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 na hii katika magazeti, gani kuzidisha hii kabla
gani akitoa hii.
>> Watazamaji: [inaudible].
>> DAN: Nadhani itakuwa kutupwa kwanza, yeah, ambayo itakuwa 10,000.
Kitu kingine?
Baridi.
Hivyo hii ni 13,099.
Kwa nini hii kutokea?
Kutokuwa sahihi.
>> Ikifungwa si kamili.
Wanaweza tu kuwakilisha idadi ya idadi fulani ya takwimu muhimu.
Hivyo kama sisi magazeti nje ya 8 sig tini katika kuelea hii, sisi kupata aina ya
ugly kuangalia idadi.
Na kwamba kwa sababu 1.31 hawawezi usahihi kuwakilishwa na rahisi
mamlaka ya mbili katika mashine.
Hivyo kuishia kuchukua karibu nadhani, ambayo mwisho juu
kuwa chini kidogo.
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 yale ambayo integer ni.
Labda, ni idadi kati ya mmoja na nne.
Hiyo ni nini sisi ni kuuliza kwa.
>> Hivyo kufanya kubadili wa jina kutofautiana.
Basi kuanzisha kesi ya uwezekano wa maadili inaweza kuwa.
Hivyo kesi moja, kusema ni ya chini.
Na kisha kuvunja kupata nje wa hali ya kubadili hivyo
huna kuendelea.
>> Katika kesi ijayo -
hivyo kesi mbili na kesi tatu -
kama ni kesi mbili tu matone chini ya mstari wa kwanza wa kanuni ni anaona kama kwa
Uchunguzi tatu mpaka anaona mapumziko.
Hivyo sababu kupata kesi moja kwa tu magazeti ya chini ni kwa sababu mimi
kuwa na mapumziko hii hapa.
Kama mimi, kusema, kupuuzwa mapumziko hii - kama mimi kurusha mgawanyiko huu -
itakuwa magazeti ya chini, na kisha ingekuwa magazeti katikati, na kisha bila kuvunja.
>> Hivyo mapumziko ni sehemu muhimu ya kubadili hali na
wanapaswa kuwa huko.
Kesi yoyote ambayo si alisema waziwazi ni kubebwa na default
Uchunguzi 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: Ungependa magazeti ya chini, na kisha itakuwa magazeti katikati, na
basi itakuwa 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 moja magazeti ni chini ya kesi moja kama ni hii magazeti zifuatazo.
Yeah?
>> Watazamaji: [inaudible]?
>> DAN: Hivyo idadi hii ni hasa thamani kwamba variable hii
anaweza kuchukua, right?
Je, hiyo mantiki?
Yeah.
>> Watazamaji: [inaudible]?
>> DAN: Ndiyo, kesi mbili itakuwa magazeti katikati na kisha kuvunja.
>> Watazamaji: [inaudible]?
>> DAN: Nadhani yoyote?
Ni aina gani nyingine data unaweza kubadili juu?
>> Watazamaji: Unaweza kubadili juu ya wowote data aina.
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 ya mizigo, ikiwa ni hata hebu kufanya hivyo, kwa sababu ya yaliyo hatua
katika usahihi, ungekuwa si kweli wanataka kufanya hivyo anyway.
Hivyo pretty much, tu ints na chars na mambo kama hayo.
>> DAN: Yeah, ni wakati una wazi maadili ambayo unajua, nadhani, inaweza kuwa
kwamba kubadili ni muhimu kweli.
Nzuri?
OK.
>> Wigo ni mbalimbali ambayo ilitangaza variable hadi.
Hivyo katika chunk hiki kidogo cha code 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 mipaka kama kitu chochote kutangaza
na ndani ya seti ya braces curly tu ipo ndani ya braces wale curly.
Na kama wewe kujaribu na kutumia variable nje ya braces wale curly, itabidi
kupata kosa kutoka compiler.
Yeah?
>> Watazamaji: Hivyo hii moja haifanyi kazi?
>> DAN: hii haina kazi, ndiyo.
Masharti.
Kamba char *.
Wao ni sawa.
Wao ni kuyatumia tu wahusika.
Na masharti yoyote ambayo una lazima mwisho na backslash sifuri, ambayo ni
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.
Itakuwa juu ya jaribio, pengine.
Sijaona jaribio.
Yeah?
>> Watazamaji: Kwa hiyo NULL ni, kusema, pointer?
>> DAN: Ndiyo.
>> Watazamaji: Nini maana [inaudible]?
>> DAN: Kama, kusema, malloc inaitwa wakati hawana kumbukumbu ya kutosha kupata
kila kawaida wewe ni kuomba, malloc atarudi null.
Ni, kimsingi, wakati wowote kazi ni wanatakiwa kurudi pointer, wewe
haja ya kuangalia juu ya NULL kwa sababu NULL ni nzuri -
ni, aina ya, thamani ya takataka.
Ni zero mbali kama kuyatumia kwenda.
>> Wakati wowote kuwaita kazi, kwamba anarudi pointer.
Wewe ni kwenda kutaka kuangalia kuwa uhakika kwamba pointer ni si NULL
kwa sababu NULL ni ya kawaida sana.
Ni aina ya kurudi taka.
Hivyo kama kitu hakuwa kwenda kulia, tu kurudi NULL badala yake.
>> Watazamaji: [inaudible]?
>> DAN: Ndiyo, na kwamba hii.
>> Watazamaji: [inaudible]?
>> DAN: Spell ni kama hii.
Ni NULL Terminator.
Ni Herufi za chini N-U-L-L kama wewe ni herufi yake.
>> Watazamaji: Na mimi tu akaenda nyuma na majaribio.
Na kama wewe kujaribu kuweka hatua yaliyo thamani katika kubadili, kutakuwa na kelele saa wewe
akisema, taarifa inahitaji kujieleza ya integer aina.
>> DAN: Kuna kwenda.
Lakini yeah, nini ilikuwa swali tena?
>> Watazamaji: [inaudible]?
>> DAN: Hivyo mji mkuu wa N, mji mkuu wa U, mji mkuu wa L, mji mkuu wa L ni halisi c kitu.
Ni NULL pointer na mapenzi tu kutibiwa kama vile.
Huwezi milele kujaribu na uchawi NULL tabia na kuona yoyote
njia nyingine zaidi kuliko huu.
Yeah?
>> Watazamaji: Kwa hiyo kurudi 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 mwangalizi maadili.
Hivyo kama kurudi int max kutoka GetInt na char max kutoka getchar, ni
walidhani kuwa kama, sawa, kama mambo haya ni kurudi kwetu,
kitu potoka.
>> Kwa kuyatumia, sisi tu kutokea kwa kuwa hii thamani mwangalizi kwamba kila mtu
anakubaliana juu.
Na hili ni jambo kurudi wakati mambo kwenda vibaya.
Hivyo char max ni nini sisi ni kutumia 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 kuangalia tu null.
Ningependa kuwa na kuangalia char max kwa sababu thamani ya kurudi kutoka kazi ni
tabia si pointer.
Yeah?
>> Watazamaji: Swali hili anauliza kwa kamba urefu.
Je, hiyo ni pamoja na NULL tabia?
>> DAN: Hapana
Na kwamba ni kweli jinsi kamba urefu anajua kuacha kwa sababu huenda kwa njia ya
safu yako ya wahusika mpaka anaona NULL tabia.
Na kisha 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 la safu na kisha, katika curly
braces, chochote index unataka kwenda kwa, wao ni indexed kutoka sifuri kupitia
urefu wa safu minus 1.
>> Na wao ni alitangaza na aina ya kitu kwamba ni hifadhi katika
safu, jina la safu, na kisha kila kawaida ni ya kwamba safu.
Hivyo hii ni char safu ya urefu sita ambayo ina maadili haya.
Yeah?
>> Watazamaji: [inaudible]?
>> DAN: Yeah.
>> Watazamaji: [inaudible]?
>> DAN: Kama una nini kinachoendelea katika safu tayari alifanya.
Hivyo unaweza kutaja hii badala kama, kusema, char, jina lolote yako
safu ni, mabano tupu sawa na curly brace H comma E comma L comma L comma
O comma NULL tabia ya na curly brace.
Hiyo pia kufanya kazi kama tamko hilo.
>> Watazamaji: [inaudible]?
>> DAN: Kisha unahitaji kuwa na ukubwa tayari alifanya.
>> Watazamaji: [inaudible]?
>> DAN: Ndiyo.
Righty wote.
Hoja mstari amri ni njia ya kupata pembejeo kutoka kwa mtumiaji kama
hoja kuu.
Kuu inachukua hoja mbili.
idadi ya hoja kwamba ni kwa kuwa ukaendelea amri line na a
kamba vector au kamba safu ya hoja zote.
>> Basi, ikiwa mimi, kusema, aitwaye kazi kama vile a 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: hiki mwisho katika safu kwa sababu safu ni urefu argc pamoja na
moja ya argb, hiki mwisho ni NULL pointer.
Ni argc pamoja na 1.
Hivyo katika kesi kwamba mimi tu alisema, itakuwa argv 0 ni dot nje.
argv 1 ni 1. argv2 ni 2. argv 3 ni 3.
argv 4, ambayo ni moja kubwa kuliko argc itakuwa null.
>> Na kwamba NULL pointer.
Ndiyo.
Na kwamba kwa sababu kamba ni nyota char ni pointer.
Hivyo ina kuwa aina moja.
Yeah?
>> Watazamaji: maswali mawili.
Hivyo moja, nini tofauti kati ya hii na GetString kingine chochote zaidi ya aina moja
katika injini user?
Na mbili, ni kuhifadhiwa ndani ya kumbukumbu yako ya hivi karibuni?
Hivyo kama, GetString ingekuwa kuwa [inaudible]?
>> DAN: wapi kuhifadhiwa?
Sijui ambapo ni kuhifadhiwa.
>> Watazamaji: Kwa hiyo, kwa kweli, unajua jinsi yoyote kazi simu yake ya hoja
ni kuhifadhiwa katika stack?
Hivyo argc na argv ni hoja kuu na wao ni juu ya stack, au kweli
tu juu ya nini unafikiri kama mwanzo wa stack.
Nini sehemu nyingine ya swali?
>> Watazamaji: Basi nini [inaudible]?
>> DAN: Yeah, ni njia tu mbalimbali ya kupata pembejeo kutoka kwa mtumiaji.
Kidogo ufanisi zaidi na hii ni moja ya ni handier kwa scripts kwa sababu wewe
unaweza tu kupita hoja kuu yako kazi badala ya kuwa na kusubiri
kwa watumiaji kama huna watumiaji yoyote.
>> Watazamaji: Na yeah, kupata masharti itakuwa [inaudible].
Itakuwa kuhifadhi mambo unahitaji.
>> DAN: Yeah?
>> Watazamaji: [inaudible]?
>> DAN: Ndiyo, argv 0 daima ni pamoja na dot slash ya kazi ya wito.
Yeah?
>> Watazamaji: [inaudible]?
>> DAN: Ndiyo, kila mmoja hoja ni kumalizika katika NULL tabia kwa sababu wao
ni masharti.
>> Watazamaji: [inaudible]?
>> DAN: Ndiyo, argv argc ni NULL pointer.
>> Watazamaji: [inaudible]?
>> DAN: Oh yeah.
Yeah, sorry.
>> Watazamaji: Kwa hiyo [inaudible]?
>> DAN: Kwa hiyo swali ni kama alikuwa amri line dot kufyeka dot nje 1, 2,
ingekuwa idadi ya mstari amri hoja wawili au itakuwa ni tatu?
>> Watazamaji: Nadhani haina kweli jambo.
Mimi huwa kusema, oh, hakuwa kupita amri yoyote line hoja wakati,
wazi, wewe kuitwa kazi.
Basi, mimi huwa na vocally kuwatenga kazi kutoka mstari amri
hoja hata kama ni pamoja na katika argv.
>> DAN: Lakini kama ni juu ya mtihani -
yeah - na pia kama wewe kusema kitu kama argc sawa na 3,
wewe ni katika msimamo salama.
Yeah?
>> Watazamaji: [inaudible]?
>> DAN: Nadhani kama badala ya wito huu katika argc na kamba argv mabano
lakini naendelea aina moja na tu kuitwa yao kitu tofauti kama
na b, itakuwa ni bado kazi?
Na bado ingekuwa kazi, wewe ungekuwa tu -
badala ya kutumia argc - Ningependa kutumia na b.
Yeah?
>> Watazamaji: [inaudible]?
>> DAN: Kwa hiyo swali ni GetString ni kwenda kuhifadhi kumbukumbu katika chungu
kwa sababu GetString ni char *.
Ni maduka kumbukumbu katika chungu kwa sababu wito sasa malloc ndani ya halisi
utekelezaji wa GetString.
OK, ya kuendelea.
>> Usalama.
Hivyo kuwa kweli salama, wanategemea hakuna moja na kuruhusu hawana moja kwa mtu yeyote
ya taarifa yako, ambayo ni kwa nini kila mtu hujenga mashine zao wenyewe,
mifumo yao wenyewe ya uendeshaji, wao wote mipango kutoka mwanzo, na ni wazi
si kuungana kwa mashine nyingine yoyote kupitia mtandao.
Hivyo kompyuta ni salama.
Wao kweli ni.
Tuna imani ya watu wengine.
>> Na wazo la usalama ni kwamba wewe ni kujaribu kuzuia kiasi cha
kuamini kwamba unahitaji.
Na moja ya njia ya kufanya hivyo ni kwa njia ya cryptography.
Cryptography ni, kimsingi, tuna siri.
>> Wakati mwingine tuna kupita siri yetu pamoja kupitia, kusema, internet au
mambo mengine.
Na hatutaki watu kujua siri hizi.
Hivyo sisi fumbo siri zetu katika njia kwamba tunatarajia hakuna mtu anayeweza kufikiri.
>> Hivyo sisi kutumika -
kupitia kozi ya darasa hili -
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 ndani ya zaidi ya hapo.
>> Debugging.
GDB ni bora.
Mimi nina kwenda kusisitiza hili tena.
Kutumia GDB wakati wote kila wakati una tatizo.
Amri ambayo ni muhimu katika GDB ni kuvunja, ambayo kupita ama line
posta, jina kazi, kimsingi ambapo katika kanuni yako unataka kuacha,
na kuwa na uwezo wa kuchukua udhibiti.
>> Magazeti inachukua kutofautiana na Prints nje chochote kile kutofautiana ni wakati huo
uhakika katika utekelezaji wako.
Ijayo hatua ya utekelezaji yako pamoja hatua moja.
Na hatua hatua ndani ya kazi katika utekelezaji wako.
>> Mambo mengine ni kukimbia, ambayo ni jinsi kweli kukimbia code yako.
Kuendelea inachukua hatua zote zinazohitajika kupata ijayo hatua ya mapumziko.
Na kuna watu wengi, wengine wengi.
Kuangalia yao up.
Wao ni kubwa.
Yeah?
>> Watazamaji: [inaudible]?
>> DAN: Ndiyo, ambayo ni debugger.
Hivyo debugger 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 juu katika darasa hili ni search linear,
ambayo ni tu kwamba wewe kuangalia njia ya kila kipengele cha nafasi search, moja
hiki wakati huo, mpaka kupata kile wewe ni kuangalia kwa au mpaka kufikia
mwisho wa kutafuta nafasi yako ambayo Point wewe kusema kwamba hakuweza kupata
hiki kwamba walikuwa kutafuta.
Na hii inachukua wakati bora mara kwa mara, ambayo ni 0 wa 1 na saa mbaya linear
wakati, ambayo ni 0 ya n.
>> Search kisha, ambayo inahitaji sordid vipengele.
Unaweza kwenda katikati ya mambo yako, kuona kama hiki wewe ni kuangalia kwa
ni kubwa au ndogo kuliko hiki kwamba uko katika katikati.
Ni ni kubwa, unaweza kusema kwamba chini ya kutafuta nafasi yako ni yako
eneo la sasa, kati, na kuanzishwa upya mchakato.
Kama ni ndogo, ukiangalia kusema kwamba - yeah, mambo?
>> Watazamaji: [inaudible]?
>> DAN: Ndiyo.
Aina yoyote ya aina hiyo imekuwa kufundisha katika darasa ni haki mchezo ajili ya mtihani.
>> [Kicheko]
>> DAN: Na ukweli kwamba wewe si alikuwa na kufanya hivyo kwa kuweka tatizo, ni haki
mchezo kwa ajili ya mtihani.
>> Watazamaji: Je, sisi kwenda juu yake jinsi ya -
>> DAN: Ni watakuwa wamekwenda juu.
>> SPIKA 2: code halisi kwa ajili ya [Inaudible] ni juu ya study.cs50.net.
Hivyo kama wewe kuangalia tatizo mazoezi katika kuunganisha aina ukurasa wa
study.cs50.net, kuna code kwa ajili ya utekelezaji kuunganisha aina.
Hivyo huna kuwa na kutekeleza mwenyewe usiku wa leo.
Lakini hakikisha kuelewa badala kuliko tu kukariri yake.
>> Watazamaji: [inaudible]?
>> SPIKA 2: ukurasa kuunganisha aina juu ya study.cs50.net, kuna mazoezi
tatizo hilo, kama wewe click kupitia tatizo, mwishoni mwa sana kuna
ufumbuzi, ambayo ni kuunganisha aina ya utekelezaji.
Lakini hakikisha kuelewa badala ya kukariri ni
au kuiga chini.
>> Watazamaji: Na kikamilifu halali tatizo kwa ajili ya mtihani itakuwa
kitu kama hapa orodha.
Gani orodha hii kuangalia kama baada ya hatua moja ya uchaguzi aina au
kuingizwa aina au chochote.
Moja iteration kamili ya orodha.
Hivyo hata kama huna 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 wote.
OK?
Hivyo kwanza ya yote, recursion.
Ni nini maana ya kusema kwamba kazi ni kujirudia?
>> Watazamaji: Wito yenyewe.
>> LUCAS: OK, wito yenyewe, yeah.
Hivyo kama picha hii, kwa mfano.
Ni kama picha ndani ya ya picha na kadhalika.
Hivyo kwa mfano, unaweza kuwa na - kama Dan kwamba alikuwa anazungumza juu ya kutafuta binary.
Njia moja ambayo search binary ni kujirudia ni ukweli kwamba wewe ni
kujaribu kupata idadi.
Hivyo kwenda katikati.
Na kisha kuangalia kama idadi huko katika upande wa kushoto na katika haki.
>> Na kisha kama wewe kujua idadi ni kwenda kuwa upande wa kushoto, ni sawa na
kitu kama kufanya ni kutafuta tena lakini tu upande wa kushoto wa orodha.
Hivyo ndivyo inaonekana kama ni kujirudia.
Hivyo ndiyo sababu nyie na kujirudia ufumbuzi kwa kuunganisha aina.
>> OK, hivyo hapa ni mfano.
Basi hebu kusema kwamba mimi nataka kuchagua namba zote kuanzia 1 hadi n.
Naweza kutambua kwamba Jumla ya n idadi ni n pamoja na n minus 1 hadi 1.
Lakini basi, kama mimi kuangalia n minus 1 pamoja na n bala 2 plus 1, hiyo ni sawa
kitu kama summing idadi 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 aitwaye kesi ya msingi, ambayo ni kwamba
Jumla ya idadi up kwa sifuri itakuwa zero.
Basi kwa haraka kama mimi kupata idadi sifuri, mimi kuacha kuhesabu kura.
Je, hiyo mantiki?
>> Hivyo hapa ni mfano wa jinsi Naweza kutekeleza hiyo.
Hivyo nina kazi hii katika baadhi.
Kwamba inachukua integer n.
Hivyo hapa mimi kwanza kuangalia kama n ni kidogo au sawa na sifuri.
Hivyo kama ni chini au sawa na sifuri, mimi kurudi sifuri, ambayo ni kesi yetu ya msingi.
Vinginevyo, naweza tu kurudi n pamoja na Jumla ya idadi kutoka
moja kwa n kutoa moja.
Mantiki?
OK.
>> Hivyo hapa ni nini inaonekana kama.
Una Jumla ya 2 usawa 2 pamoja na Jumla ya 1.
Na baadhi ya 1 ni 1 pamoja na Jumla ya 0, ambayo ni 0.
Mantiki?
Hivyo kama sisi kuangalia stack yako mpango, hii ni nini inaonekana kama.
>> Kwanza, tuna kazi kubwa.
Na kisha kazi kubwa aitwaye Jumla 2.
Na kisha Jumla 2 ni kwenda kusema, oh, jumla 2 ni sawa na 2 pamoja na Jumla ya moja.
Basi, 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 hawa kwamba ni juu ya nyingine na kurudi
kabla ya wale wengine unaweza 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 na jumla ya 2.
Na hatimaye, jumla ya 2 ni kwenda kurudi 3 kuu.
Je, hiyo mantiki?
>> Ni kweli muhimu kuelewa jinsi stack ni kufanya kazi na kujaribu
kuona kama ni mantiki.
OK, hivyo kuchagua.
Hivyo ni kwa nini kuchagua muhimu, ya kwanza?
Kwa nini sisi huduma?
Mtu yeyote?
Nipe mfano?
Yeah?
>> Watazamaji: [inaudible].
>> LUCAS: Yeah, OK.
Hivyo unaweza kutafuta kwa ufanisi zaidi.
Hiyo ni njia nzuri.
Hivyo, kwa mfano, tuna mengi ya mambo, kwa kweli, katika maisha yetu kwamba
ni vyema.
Kwa mfano, kamusi.
>> Ni muhimu sana kuwa na wote maneno katika baadhi ya aina ya ili 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 kutafuta.
>> 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 kiasi hicho.
Kama kwenda njia yote chini ya rafiki orodha yako, wewe kwenda kuona
watu kwamba pengine kufanya hata kumbuka kwamba wewe ni marafiki na.
Na hiyo ni kwa sababu aina Facebook rafiki yako kulingana na jinsi
karibu wewe ni yao.
>> Hivyo kuandaa data.
Pia Pokemon.
Hivyo unaweza kuona kwamba pokemons wote kuwa na idadi.
Na kwamba 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 ya kila
wakati katika kila iteration.
Ni aina ya kama aina hiyo kufanya katika kichwa yako wakati wewe ni kujaribu
aina orodha juu ya mkono.
>> Kimsingi, wote kufanya ni kuangalia kwa idadi ndogo.
Kuiweka katika orodha Iliyopangwa.
Na kisha kuangalia kwa ijayo idadi ndogo.
Na kisha kuendelea kufanya kuwa na kadhalika.
>> Hivyo uteuzi aina ni kimsingi wewe kuchagua kila wakati ndogo
zisizochambuliwa thamani.
Kuweka mwishoni mwa sorted sehemu ya orodha.
Na kuendelea kufanya hivyo.
Basi hebu haraka kuona nini hii inaonekana kama.
Hivyo hapa ni vyema na orodha zisizochambuliwa.
>> Hivyo kwa sorted ya orodha, ni awali tupu.
Na kisha mimi nina kwenda kuchagua idadi ndogo ya hapa, ambayo ni 2.
Hivyo mimi kupata namba 2 na mimi kuweka mbele ya orodha.
Na kisha mimi kuangalia kwa ajili ya pili ndogo hiki, ambayo ni 3.
Basi, mimi kuweka mwishoni ya orodha Iliyopangwa.
Na kisha mimi kuendelea kufanya hivyo.
Mimi kupata 4 na kuiweka mwishoni.
Kupata 5 na kuiweka mwishoni.
>> Na kuangalia jinsi gani wote wa nyakati hizo kwamba Mimi kusema kuweka mwishoni ni,
kimsingi, swapping maadili mbili.
OK?
Na kisha moja mwisho, wewe tu na moja zaidi hiki.
Hivyo ni tayari yamepangwa.
>> OK, hivyo kuingizwa aina.
Insertion aina utaenda na pia kwamba kitu ya kuwa sorted na
zisizochambuliwa orodha.
Kitu pekee ni kwamba kila wakati kwamba wewe ni kuongeza hiki ya namna
orodha, wewe tu kuchukua kipengele kwamba ni mbele ya orodha zisizochambuliwa.
Na kisha utaenda kupata nini nafasi ni lazima kuwa katika yamepangwa
sehemu ya orodha.
>> Hebu angalia nini hii ni hii ina maana zaidi.
Hivyo awali, kwa mfano, mimi nina kujaribu kuingiza namba tatu katika
yamepangwa sehemu ya orodha.
Hivyo orodha hana kitu chochote.
Hivyo siwezi tu ya kuweka namba 3.
>> Sasa, nataka kuongeza idadi ya 5 sehemu sorted ya orodha.
Basi, mimi kuangalia namba 5.
Mimi taarifa kwamba ni zaidi ya 3.
Hivyo najua kwamba ina kuwa baada ya 3.
Basi, mimi kuweka 3 na 5.
>> Kisha Mimi nataka kuingiza namba 2.
Mimi taarifa kwamba namba 2 ni kweli mwisho basi wote 3 na 5.
Hivyo mimi kwa kweli na kuweka yote njia katika mwanzo wa orodha.
Hivyo nina, aina ya, kuhama wote mambo katika orodha yamepangwa ili niweze
kufanya chumba kwa idadi 2.
>> Kisha naona namba 6.
Mimi naona kwamba ni lazima 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 ya mambo mengine yote.
Mantiki?
>> Bubble Aina.
Hivyo Bubble aina kimsingi ni nini wewe kwenda kufanya - tunasema Bubble
aina kwa sababu kwenda kwa njia ya orodha - ni kweli bora kama mimi tu kuonyesha
wewe kama hii -
na wewe ni kwenda kulinganisha idadi karibu.
Na wewe kwenda wabadilishane yao nafasi kama 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, sawa?
Hivyo ni kwenda wabadilishane amri.
Kisha naona 8 na 4 hapa.
Na mimi kufanya kitu kimoja.
Mimi kubadilishana tena.
Na hatimaye, 2 na 8.
Mimi pia kubadilishana nao.
>> Ni wito Bubble Aina kwa sababu baada ya kila iterations haya, kwa kweli,
idadi kubwa katika orodha anapata wote njia ya mwisho wa orodha.
Je, hiyo mantiki?
Kwa sababu ni kuvaa swapping ni na kusonga kwa 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 Aina, sisi kimsingi kuweka kwenda kupitia orodha na swapping
mambo mpaka mimi taarifa kwamba mimi hakufanya swaps yoyote ya kufanya hivyo iteration, ambayo
ina maana kwamba orodha tayari yamepangwa.
Mantiki?
>> Hebu kuzungumza kidogo kuhusu mbio wakati.
Hivyo nyie kumbuka Big O, Omega, na Theta?
Yeah?
OK, ni nini Big O, ya kwanza?
>> Watazamaji: [inaudible].
>> LUCAS: Yeah, ni wito kesi mbaya Runtime, ambayo ina maana ya kwamba ni
kiasi gani, unatarajia mpango kuchukua kukimbia.
Kama, katika suala la -
katika kesi hii - n.
idadi ya vipengele katika orodha katika kesi mbaya.
Kama, katika kesi mbaya iwezekanavyo.
>> 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 iterations ni kwenda kuleta hiki kubwa hadi mwisho
ya orodha.
Hivyo kesi mbaya zaidi ni kwamba nina kufanya jambo n mara kwa mara.
Na kwa kila nyakati hizo, mimi na kufanya n swaps kwa sababu mimi kuwa na kulinganisha
kila mambo mawili.
Hivyo ndiyo sababu ni n mraba kwa sababu ni n mara n.
>> Basi, 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 mimi na
kuangalia njia mambo n.
Na nina kufanya hivyo mara n kwa sababu Mimi na kuchagua mambo yote n.
>> aina kuingizwa ni pia n mraba kwa sababu mazingira ya kesi mbaya mapenzi
kuwa, moja, nina kuingiza idadi n, sawa?
Basi, mimi tayari kujua kwamba mimi nina kwenda kuwa na n iterations.
Lakini kwa kila moja ya idadi ya wale, kama ningekuwa na kuangalia wote wa idadi ya katika
orodha yamepangwa na kuiweka njia yote mbele, ambayo itakuwa n mraba
kwa sababu itakuwa n mara n tena.
Mantiki?
Nini kuhusu omega?
>> Watazamaji: [inaudible].
>> LUCAS: Ni bora kesi.
Hivyo ni kama, katika mengi ya mara kwa kuchagua, bora kesi mazingira ni
wakati orodha tayari yamepangwa.
Hivyo si kweli kuwa kufanya kitu chochote.
Bubble Aina ina bora kesi ya n.
Je, guys kujua kwa nini?
>> Watazamaji: [inaudible].
>> LUCAS: Yeah, kama wewe kuweka wimbo wa kama data ration na swaps yoyote au
si, kama una kitu kama kuweka kweli kama kulikuwa na iteration, kama
orodha tayari yamepangwa, 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 mara moja.
>> Hivyo maana yake ni kwamba mimi tu alikuwa na kupitia orodha wakati mmoja.
Hivyo ni n kwa sababu mimi kuangalia katika mambo n.
Kwa nini uteuzi aina n mraba?
>> Yeah, hata kama orodha ni vyema, kwa kila iteration ya uteuzi aina, mimi
na kuchagua hiki kiwango cha chini.
Hivyo hiyo ina maana kwamba nina nje kuangalia katika mambo yote katika zisizochambuliwa
kuorodhesha na kupata kiwango cha chini kwa kila iteration.
Je, hiyo mantiki?
>> Na kuingizwa 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 ni nini theta?
>> Watazamaji: [inaudible].
>> LUCAS: Nini, sorry?
Sema tena.
>> Watazamaji: [inaudible].
>> LUCAS: Hasa.
Hivyo unaweza kuona kwamba uteuzi tu kuhifadhiwa katika Kuunganisha aina na thetas.
Na kwamba kwa sababu wewe tu na theta kama wote wawili Big O na Omega ni sawa.
OK.
Na hatimaye, kuunganisha aina ipo katika logi n.
>> Na kisha, kama Dan alikuwa akisema, kuunganisha aina ni aina ya kama njia sawa kwamba
wewe ni kutafuta binary.
Ili kupata orodha.
Na wewe kwenda kata katika nusu.
Na kisha kata yao katika nusu ndogo.
Na kisha kuunganisha yao.
You guys kumbuka kwamba, haki?
OK, kama alikuwa akisema.
>> OK, kuyatumia.
Kwa hiyo kile ni pointer?
>> Watazamaji: [inaudible].
>> LUCAS: anwani.
OK.
Najua kwamba David inaonyesha rundo la video ya Binky na mambo akizungumzia
kila mmoja.
Lakini mimi kama kufikiri ya kuyatumia kama tu anwani.
Hivyo ni variable kwamba ni kwenda kuhifadhi anwani.
>> Hivyo tu variable hii maalum kwamba ni ka nne kwa muda mrefu.
Kumbuka, kwamba pointer na kitu chochote ni daima ka nne kwa muda mrefu kwa ajili yetu 32-bit
mashine hivyo kesi kwa appliance.
Na tu ina eneo ya ndani ya variable yake.
>> OK, hivyo kuna kumbukumbu hii, kimsingi.
Hivyo kila block ya kumbukumbu kweli ina studio, ambayo ni ya barua pepe ya
slotty kumbukumbu.
Hivyo hiyo ina maana kwamba siwezi kuwa na pointer akizungumzia
yoyote ya anwani hizi.
Hivyo sababu tutaweza kutumia kuyatumia ni kama mimi na kukumbuka eneo
kwamba variable maalum ni kumbukumbu.
>> Na nyie kukumbuka kwamba mmoja wa wale kesi ilikuwa kama mimi na kazi
kama mimi kwa kweli nataka wewe wabadilishane kwa reals, mimi kwa kweli
na kutuma pointer.
Si kutofautiana.
Je, guys kumbuka kwamba?
tofauti kati ya -
jina ni nini?
Wito na thamani na wito kwa kumbukumbu, right?
>> 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 mpango wako hakuweza huduma ya chini kuhusu kama variable moja kweli
hufanya nakala.
>> Na wito kwa kumbukumbu ina maana kwamba Mimi kwa kweli kutuma nakala ya
pointer kwa kuwa kutofautiana.
Hivyo ina maana kwamba mimi nina kutuma eneo la kwamba kutofautiana.
Hivyo nilihisi kuwa nilikuwa na 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 na aina hiyo ni akizungumzia
kwa na kisha nyota.
Na kisha kuweka jina.
Ili kukumbuka kwamba wakati wowote na chochote nyota, ni kama pointer kwa
kwamba variable chochote aina hiyo 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 kwa nyota x.
Najua kwamba 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 jina lake x.
>> Watazamaji: [inaudible].
>> LUCAS: Kwa hiyo 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 ambazo ni 64 bits kweli na kuyatumia anwani
kwamba ni 64 bits kwa muda mrefu.
Hivyo tu ina maana kwamba ukubwa wa anwani katika mashine ni tofauti.
>> Hivyo inayozungumzia na Dereferencing.
Kuna kampuni ya mawili ambayo nyie wakumbuke.
kwanza ni Ampersand.
pili ni nyota.
Hawapati kuchanganyikiwa na kwamba nyota na hii nyota kwa sababu kukumbuka kwamba, katika
kesi hii, una n nyota.
>> Ni kama jambo zima pamoja.
Hakuna n nafasi nyota.
Hivyo ina maana kwamba ni aina.
Kumbuka, kwamba wakati una nyota variable, wewe ni
kuzungumza juu ya aina.
>> Wakati tu nyota na kisha jina la kutofautiana, maana yake ni kwamba
wewe ni dereferencing pointer, ambayo ina maana kwamba wewe ni kuangalia
pointer, kutafuta anwani ni akizungumzia, kwenda kwa anwani hiyo,
na kuangalia wakati wowote una huko.
Basi, mimi kuwaambia wanafunzi wangu kwamba wakati una nyota, unapaswa kufikiri kwamba ni
abbreviation ya maudhui ya.
>> Hivyo kama una pointer na wewe kufanya nyota pointer, ni
maudhui ya pointer.
Hivyo kwenda kwa chochote ni akizungumzia na kuangalia maudhui ya mara kwa mara.
Na Ampersand ni sawa kitu kama barua pepe ya.
>> Basi, ikiwa mimi kuwa na kutofautiana a - kama, hebu kusema kwamba mimi int a sawa na 3 -
kama nataka kupata anwani ya kwamba variable kumbukumbu, naweza tu kufanya
Ampersand.
Hivyo ni ya barua 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 nini mstari huu kufanya nje? 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, asema pointer aitwaye pa.
Na kisha ni kumshirikisha thamani ya kwamba pointer kuwa pepe ya.
Hivyo Ampersand.
Kisha, kama mimi kufanya nyota AS, nini ni nyota PB?
>> Oh, sorry.
Hii pia ni kukosa. n nyota PB.
I mean nyota pc.
Mimi nina 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 ya barua pepe ya.
OK?
Yeah?
>> Watazamaji: [inaudible]?
>> LUCAS: Yeah, pointer ni anwani.
Kamwe kusahau kwamba.
Ni kama muhimu zaidi sehemu ya juu ya kuyatumia.
Kuna kuhifadhi na anwani kwa baadhi ya kutofautiana.
Kitu kingine?
Maswali yoyote mengine?
OK.
>> Hivyo kuyatumia na Arrays.
Kumbuka kwamba wakati mimi kufanya int safu 3, kimsingi, nini mimi kufanya ni mimi nina, aina
wa, kutangaza katika pointer.
Hivyo safu ni aina ya kama pointer kwa mahali maalum katika kumbukumbu ambayo mimi
zilizotengwa kwa ajili inafaa tatu kwa integers.
Je, hiyo mantiki?
>> Hivyo wakati mimi int safu 3, nini mimi kufanya, kimsingi, ni kujenga tatu
inafaa katika kumbukumbu.
Hivyo mimi tu kupata inafaa tatu katika kumbukumbu.
Basi, ikiwa 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, kwamba kitu kimoja kama kufanya safu
mabano moja, ambayo ina maana ya mimi kwenda mahali kwamba ni akionyesha.
Na kisha plus 1 hufanya mimi kuhama nafasi moja.
Basi, mimi kwenda katika sehemu hii, kwa kweli, na kuweka namba mbili.
>> Na kisha, mwisho, 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: Kwa hiyo nyota safu ni tu akisema hatua ya kwanza sana.
Na unaweza kuongeza 1, kwa sababu tu sisi ni kweli tu
inayozungumzia anwani ya kwanza.
>> LUCAS: Yeah.
Kwa nini sisi, kwa mfano, kusema safu 0, safu ya 1, na safu 2?
Mimi kusema, kwa nini kufanya 0, 1, 2, 3 badala ya 1, 2, 3?
Moja ya sababu ni moja, kompyuta programmers wanapendelea kuanza
kuhesabu kutoka 0.
Mbili ni kwa sababu wakati wa kufanya safu 0, ni kitu kimoja kama kufanya safu ni
pamoja na 0, ambayo ina maana mimi kwenda kwamba nafasi, na mimi si
ruka vitalu kumbukumbu yoyote.
Hivyo mimi si hoja vitalu kumbukumbu yoyote.
Yeah?
>> Watazamaji: [inaudible]?
>> LUCAS: Kwa hiyo yeye kuuliza ni nini 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 chungu.
Je, hiyo mantiki?
>> Hivyo ni jinsi gani malloc kweli kazi?
Basi kwa nini sisi hata haja ya kutumia malloc?
Compiler aina yako ya takwimu nje vigezo kwamba alisema.
Na yeye inajenga nafasi kwa wote wao katika stack.
Basi wote wa vigezo yako ni kwenda kuwa mahali fulani katika stack.
Hivyo hapa ni mazingira vigezo.
>> Hivyo kimsingi, nafasi kwa vigezo wale katika kumbukumbu ni zilizotengwa katika
kukusanya wakati.
Hivyo ina maana kwamba kompyuta yako ina kujua yote ya vigezo wale
kabla.
Haina haja ya kujua thamani nini wewe ni kwenda kuweka ndani 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 ni muda gani kamba ni kwenda kuwa, kwa mfano.
Hivyo huna kujua hasa jinsi wengi vitalu kumbukumbu kutenga, sawa?
>> 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, huwezi kuwa na uhakika wa jinsi kumbukumbu gani unahitaji kutenga
wakati mpango wa kukusanya.
Wewe tu kujua kwamba juu ya kukimbia wakati.
Hivyo ndiyo sababu 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 ni kufanya ni kugawa kumbukumbu katika
Runtime, ambayo ina maana kwamba ni kuamua haki wakati huo kwamba
wanapaswa kuwa na kumbukumbu.
Ili wakati wewe ni kugawa yake.
Je, hiyo mantiki?
>> Basi kumbuka, stack ina vigezo kwamba ni ilitengenezwa wakati kukusanya.
Na kisha chungu ina vigezo kwamba ni umba kama wewe kwenda
na malloc, kwa mfano.
>> Watazamaji: [inaudible]?
>> LUCAS: Kwa hiyo 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 ya chungu.
Na ni kwenda na kurudi pointer kwa ambapo kumbukumbu zilizotengwa kwa ajili ya saa.
>> Hivyo wakati wa kufanya -
hapa kwa mfano -
n nyota pointer.
Na kisha pointer sawa na malloc ukubwa wa inch mara 10.
Mimi nina kujenga pointer.
Na basi mimi nina kumshirikisha kwamba pointer kwa thamani ya pointer kwamba malloc
ni kunipa.
>> Hivyo mimi nina kuuliza malloc unaweza kutenga nafasi kwa ajili ya 10 integers.
Hiyo ni nini ni kusema.
Na malloc inatoa mimi nyuma pointer kwa mahali hapo.
Mantiki?
OK.
Mimi Na GetString ni, kimsingi, kufanya kuwaita malloc hivyo unaweza kutenga
kumbukumbu wakati wa Runtime.
>> Daima kumbuka kuangalia kwa null kwa sababu malloc ni kwenda na kurudi null
kama haiwezi kutenga kumbukumbu.
Hebu kusema kwamba kuuliza kwa ujinga kiasi cha kumbukumbu.
Kompyuta yako 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, kama ni, huenda kuwa dereferencing pointer na
kusababisha makosa upande.
Na hatimaye, usisahau kumbukumbu yako ya bure.
>> Malloc ni kujenga kumbukumbu katika chungu.
Na una bure kumbukumbu kabla ya mpango mwisho.
OK, kwamba ni yote kwa ajili yangu.
Sorry, Rob.
Shukrani.
>> [Makofi]
>> LUCAS: Maswali mwisho kabla ya Rob anakuja?
No?
Yeah?
>> Watazamaji: Sikuona hii moja online.
Je, Uploaded bado?
>> LUCAS: Nadhani Dave ni kuweka hivi karibuni.
>> DAVE: Ni utakuwa 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 kwamba kutofautiana.
Hivyo malloc na bure ni daima pamoja.
Marafiki zao bora.
Yeah.
Rob?
>> Rob: nitakwenda haraka.
Na pia video itakuwa kuweka up.
Mimi na mic juu.
>> 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 kumbuka nini hasa huenda katika sura ya kila stack ni kwenda kuwa
vigezo ndani ya kazi zetu, hoja kwamba ni kupita katika yetu
kazi, pamoja na michache mambo mengine si kweli
haja ya kuwa na wasiwasi juu.
>> Hivyo hapa ni mfano mpango ambapo, taarifa, 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 mara 4 6.
Na kisha kurudi n.
>> Hivyo basi tuangalie stack katika iteration halisi ya mpango huu.
Hivyo kuna chini ya stack yetu.
Kumbuka kwamba stack kukua.
Hivyo katika chini ya stack yetu, sisi na stack frame kwa kuu.
Wakati mpango kuanza, kuu daima ni kwenda kuwa katika
chini ya stack yetu.
>> Na kile ambacho ni ndani ya yetu stack frame kwa kuu?
Hivyo hata ingawa hakuna ndani vigezo kuu, kama nilivyosema hapo kabla,
tuna argc na rgv kuchukua nafasi ndani ya stack sura kuu.
Hivyo kuu sasa ni kwenda kuwaita kazi foo.
Na kwamba maana yake foo ni kwenda kupata mwenyewe stack sura yake.
>> Basi 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.
Si kwamba wote kwamba sisi ni kwenda na katika sura ya stack kwa sababu bar
pia ina mitaa kutofautiana 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 yanajitokeza frame stack
kwa bar mbali ya stack.
Hivyo kumbukumbu zote bar ambayo yamekuwa 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 ni pia wamekwenda.
Na sasa, kuu ni kwenda kuwaita printf.
Hivyo printf ni kazi nyingine.
Wakati sisi kuwaita printf, ni kwenda kuwa sura nyingine stack 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 kuwa na zaidi katika ni stack sura kama printf hutokea kwa kuwa kwa kutumia baadhi ya
vigezo ndani.
Hatujui.
>> Lakini wote kwamba huenda katika printf ya stack frame.
Ni kwenda kutekeleza printf.
Kisha printf kosa.
Itakuwa kurudi.
Hatimaye, kuu ni kosa.
Kuu atarudi.
Na kisha mpango wetu ni kosa.
Yeah?
>> Watazamaji: Je kuona [inaudible]
hoja [inaudible]
vigezo?
>> Rob: Kwa hiyo, kuna tofauti hila kati ya hoja na vigezo.
Na kweli, kwa pamoja 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 hizo.
Kwa hiyo, kuna wakati mimi wito foo ya 4, 4 ni hoja mimi nina kupita in
Na parameter n, ndani ya foo, inachukua thamani 4
tangu 4 ilikuwa hoja.
>> Watazamaji: [inaudible]?
>> Rob: n ni variable ndani bar.
n bado ni ndani foo, lakini ni parameter kwa foo.
Siyo variable ndani.
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 aitwaye kabla ya printf?
>> Rob: Kwa nini foo kuitwa mbele ya printf?
Ili niweze kuwa, badala yake, amefanya kitu kama int x sawa na foo ya 4
na kisha kuchapishwa x.
Lakini badala yake, mimi pamoja kazi kuwaita katika hoja printf.
>> Lakini taarifa kwamba tunaweza si kweli kutekeleza wito wa 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 bar [inaudible]
thamani, kwa nini sisi si 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 wale
wanaorejea integers.
Utupu ni tu kama wao siyo kwenda kurudi maadili halisi.
Yeah?
>> Watazamaji: Kama alikuwa mstari wa juu kurudi, [inaudible]?
>> Rob: line juu kurudi?
>> Watazamaji: Yeah.
Kama kama hakuwa printf na [inaudible], itakuwa ni magazeti mara mbili?
>> Rob: Kwa hiyo ndani ya foo?
Kama tungekuwa na printf hapa hapa?
>> Watazamaji: Yeah.
>> Rob: Hivyo kama tulikuwa printf haki hapa, ingekuwa magazeti mara moja.
Tangu sisi ni wito foo mara moja haki hapa, basi tutaweza kugonga printf.
Kisha tutaweza wito bar.
Na kisha foo atarudi.
Na hiyo ni yake.
Sisi tu milele kukutana printf mara moja.
Yeah?
>> Watazamaji: [inaudible]
printf wito foo kwa sababu sisi ni kwanza wito printf na kisha sisi ni kupita
hoja.
>> Rob: Kwa hiyo katika nadharia, si printf wito foo?
Hivyo hakuna.
Tu ili c ni kwenda kutekeleza mambo haya, kabla ya tunaweza
kuwaita kazi, hoja zote kufanya 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 yote ya hoja yake ni tathmini.
Na sasa tunaweza kufanya kuwaita 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 nguvu.
Na hii moja kwa moja tofauti na stack ambayo tunataka kuwaita moja kwa moja
kumbukumbu ya usimamizi.
>> Kadhalika stack, kamwe kweli kuwa kukabiliana na jinsi vigezo ndani
zinashinikizwa 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 na kuangalia kuona kama x ni null.
Kisha tunakwenda kuweka kile tu x ni akizungumzia 50.
Kuchapa x ni akizungumzia, magazeti x, na kisha bure x.
>> Hivyo ni jinsi gani hii kwa kweli kwenda kuangalia kama sisi kuangalia stack yetu na chungu?
Hivyo tutaweza kuanza tena.
chini ya stack yetu kama kabla ya.
Kumbuka kwamba wewe chungu moja kwa moja anapinga stack?
Hivyo sisi ni kwenda kuwa na juu ya chungu yetu kuna up.
>> Hivyo chini ya stack yetu, tuna stack sura yetu kwa ajili ya kuu.
Ina nafasi kwa argc, argv, na sisi sasa na ndani variable x, ambayo
ni nyota int.
Hivyo sisi ni kwenda iterate kupitia mpango huu.
Jambo la kwanza sisi ni wito wa malloc.
>> Hivyo sisi ni kupiga simu kwa malloc.
Malloc ni kazi.
Ni kwenda kupata sura ya stack.
Je, ni sisi kupitisha malloc?
Hiyo kwenda ndani ya ya sura ya stack.
Sisi ni kupita ukubwa wa n, ambayo ni 4.
Hivyo kwamba ni kupita kwa malloc.
>> Gani malloc nini?
Ni grabs sisi baadhi ya nafasi juu ya chungu.
Hivyo sisi ni kwenda kwa chungu.
Na sisi ni kwenda kunyakua 4 ka kutoka chungu.
Basi hebu kutoa tu kwamba anwani holela.
0x123 tu kujifanya kuwa ni kushughulikia kwamba ni juu ya chungu.
>> Kwa hiyo kile ni kweli ndani ya kwamba mkoa wa kumbukumbu katika anwani Ox123?
Taka.
Hivyo tuna si kuhifadhiwa chochote ndani yake.
Hivyo kama mbali kama sisi kujua, ni inaweza kuwa kitu chochote.
Usifikiri ni zero.
Kuna uwezekano mkubwa si zero.
>> Hivyo sasa malloc anarudi.
Na tunafanya nini wakati malloc atakaporudi?
Sisi kuweka nini anarudi.
Sisi kuweka x sawa na yale ni kurudi.
Hivyo ni nini ni kurudi?
Ni kurudi 0x123 tangu kwamba ni anwani ya kuzuia ya kumbukumbu kwamba
tu zilizotengwa katika chungu.
>> Hivyo kurudi 0x123 x sasa ni kwenda 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.
Siyo null.
Sisi kujifanya kwamba malloc wamefanikiwa.
>> Hivyo sasa nyota x sawa na 50.
Hivyo nyota anakumbuka ina maana kwenda kwa anwani hiyo.
Hivyo 0x123 Sisi ni kwenda kwenda kwa anwani hiyo.
Ili huleta sisi huko.
Nini tunafanya katika anwani hiyo?
Sisi ni hifadhi 50.
>> Hivyo, baada ya mstari huu, kwamba ni nini mambo ni kwenda kuangalia kama.
Hivyo sasa ni tena takataka pale.
Sasa tunajua kwamba 50 ni kwa kuwa anwani hasa kwa sababu
sisi kuweka hiyo.
OK?
Hivyo sasa tunakwenda magazeti f.
>> Hivyo kwanza tunakwenda magazeti nyota x.
Hivyo nyota x ni nini?
Tena, nyota x njia kwenda kitu x ni akizungumzia.
Hivyo x ni hifadhi ya 0x123 Go hiyo.
Sisi kupata 50.
Hivyo magazeti f hiyo.
Na kwamba maana yake ni kwenda magazeti 50.
Na kisha kuwa anarudi.
>> Na kisha tuna printf pili.
Sisi ni sasa asilimia p.
Kama hawajaona, hiyo ndiyo jinsi magazeti pointer.
Hivyo tuna asilimia i, asilimia f, na wale wote tayari.
Hivyo asilimia p, magazeti pointer.
>> Hivyo x ni pointer.
Hivyo kama tunakwenda magazeti x yenyewe, sisi ni uchapishaji ni nini hasa ndani ya
x, ambayo ni 0x123 Hivyo kwanza magazeti f ni kwenda magazeti 50.
pili magazeti f ni kwenda magazeti 0x123 Yeah?
>> Watazamaji: Je, kutumia asilimia x magazeti pointer?
>> Rob: Hivyo matumizi ya asilimia x magazeti pointer?
Hivyo unaweza lakini asilimia x ni ya haki, kwa ujumla, kwa kama kama una baadhi ya
integer na unataka magazeti kama hexadesimoli.
Hiyo tu jinsi ya kufanya hivyo.
>> Wakati, asilimia d ingekuwa magazeti kama decimal.
Kwamba walikuwa sisi kupata zaidi ya asilimia d. i ni 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 mwito huu - 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 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 utakuwa magazeti kitu kwamba inaonekana kama hii.
>> Watazamaji: [inaudible].
>> Rob: Kwa hiyo Prints katika fomu anwani.
Inaonekana kama anwani.
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 hili.
Hivyo ni kweli 0x0000000123.
Katika mfumo 64-bit, kutakuwa na kundi zima la zeros zaidi.
Yeah?
>> Watazamaji: [inaudible].
>> Rob: Kwa hiyo printf kwanza ni kwenda magazeti -
>> Watazamaji: [inaudible].
>> Rob: Ndiyo, ni kwenda magazeti nini x ni akizungumzia.
Star anasema ni nini hii kitu akizungumzia.
Kunyakua hiyo.
Hivyo ni nini akizungumzia?
50.
Kunyakua hiyo.
Hiyo ni nini tunakwenda na magazeti.
Wakati, moja ijayo, sisi ni tu uchapishaji x yenyewe.
Je, ni ndani ya f?
0x123.
OK.
>> Na kisha, hatimaye, tuna bure.
Je, ni sisi kupitisha bure?
Sisi ni kupita x.
Kwamba wakati mimi kwa kweli kuonyeshwa ni katika sura ya stack.
>> Hivyo sisi ni kupita thamani 0x123 bure.
Hivyo sasa ni bure anajua, haki ya wote, Mimi na kwenda juu chungu
na kwamba bure kumbukumbu.
Ni tena kwa kutumia kile ni katika anwani 0x123.
>> Hivyo bure ni kwenda kutolewa kwamba kutoka chungu.
Sasa chungu yetu ni tupu tena.
Tuna uvujaji kumbukumbu no.
Sasa bure atarudi.
Taarifa kwamba x ni bado 0x123.
Lakini hiyo ni sasa si halali kumbukumbu.
Tunapaswa 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 hewa.
Hivyo ni kama, yeah, hebu pamoja na kurudi 0.
Yeah?
>> Watazamaji: [inaudible]?
>> Rob: Kwa hiyo baada ya bure x, kile kinachotokea kama sisi kujaribu dereference pointer?
Inawezekana kwamba hakuna kitu kitaenda vibaya.
Inawezekana kwamba sisi bado utapata 50.
>> Inawezekana, pia, kwamba kumbukumbu ni sasa kutumika kwa ajili ya kitu kingine.
Hivyo ni tabia kisichojulikana.
Na kisichojulikana ina maana yoyote yanaweza kutokea.
Yeah?
>> Watazamaji: [inaudible]?
>> Rob: Hapana, hivyo kama hawawajui x kitu kingine.
Hivyo kama haki hapa sisi alisema x sawa na malloc kitu kingine -
tukio malloc kawaida -
kisha kuzuia kwamba awali ya kumbukumbu si huru.
Na sisi kuwa rasmi waliopotea.
Hiyo ni kumbukumbu leak.
Tumekuwa waliopotea kumbukumbu zote kwa kuwa kuzuia wa kumbukumbu.
Hivyo hakuna njia tunaweza milele bure yake.
OK, hivyo basi kurudi 0 njia kufanyika.
>> Yote ya haki, 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 ya 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
sura nyingine stack.
Na kisha tena na tena, na tena, na tena mpaka, hatimaye, sisi kukimbia
ndani ya chungu.
Hivyo hii ni jinsi gani sisi kupata stack kufurika.
Na katika hatua hii, seg kosa.
Au wewe d kweli seg kosa kabla ya hatua hii lakini yeah.
>> Watazamaji: Je msingi dampo sawa na seg kosa?
>> Rob: Kwa hiyo utaona segmentation kosa msingi kutupwa.
Unaweza kupata msingi dampo wakati ninyi seg kosa.
Na ni kama dampo ya yote ya yaliyomo ya kumbukumbu yako sasa ili
kwamba unaweza kujaribu na kutambua kwa nini seg faulted.
Yeah?
>> Watazamaji: [inaudible]?
>> Rob: Kwa hiyo segmentation kosa ina maana kuna stack kufurika.
Hivyo si lazima.
kosa segmentation ina maana kwamba wewe ni kugusa kumbukumbu kwa njia
unapaswa kuwa.
Hivyo njia moja ya kuwa kinachotokea ni kwamba, wakati stack kufurika, sisi kuanza kugusa
kumbukumbu kwa njia ambayo sisi lazima kuwa.
Yeah?
>> Watazamaji: [inaudible]?
>> Rob: Kwa hiyo ndani ya usio kitanzi.
Kama, hii ni kama usio kujirudia kitanzi na hivyo sisi kupata mwingine
stack sura kila wakati.
Lakini tu ndani ya mara kwa mara usio wakati mmoja -
vizuri, hebu hata magazeti f -
kufanya kitu fulani.
Chochote.
>> Sisi siyo kwenda kuwa kupata sura nyingine stack.
Sisi ni kwenda tu kuweka looping juu ya agizo hili moja.
stack 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 kwa kupata kitanzi wakati na kisha [inaudible]?
>> Rob: Hivyo kama ndani ya kitanzi wakati kulikuwa na printf, bado ingekuwa
si seg kosa.
I just hakutaka kuwachanganya mambo.
Ingekuwa kitanzi.
Wewe Ningependa kupata stack moja sura kwa printf.
>> Kisha printf atarudi.
Basi d kitanzi tena.
Wewe Ningependa kupata stack moja sura kwa printf.
Ni atarudi.
Single stack frame.
Hivyo wewe si kupata hii usio zikijaa muafaka stack.
>> Watazamaji: [inaudible]?
>> Rob: Ndiyo.
Hivyo hii kufurika stack hutokea kwa sababu hakuna hizi
wito kwa foo ni kurudi.
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 sawa kwa
mipango yote?
>> Rob: Takribani.
Ni uwezo ukubwa wa stack na chungu sawa kwa mipango yote?
Kwa ukali.
Kuna baadhi ya Ubahatishaji kwa ambapo stack kuanza na
ambapo chungu kuanza.
Kama kutokea kwa kuwa na mengi yote ya vigezo kimataifa na mambo, huenda
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 chungu nafasi ya 64-bit
mfumo kwa sababu kuna tu zaidi anwani kuwa wanaweza kutumia.
Lakini juu ya mfumo wa mtu binafsi, itakuwa kuwa takribani kiasi kama hicho cha stack
na chungu nafasi.
Sawa.
>> Kwa hivyo jambo la mwisho ni mkusanyiko.
Hivyo unapaswa kujua mchakato huu.
Kuna hatua nne kubwa.
Hivyo moja ya 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.
Amefafanua hivyo hash na hash ni pamoja na katika wale wote.
Wale wote ni kabla ya processor maelekezo.
Haya ni mambo ambayo kabla ya processor inachukua huduma ya.
>> Basi ni nini kabla ya processor nini?
Ni jambo la kweli bubu.
Yote ni uwezo wa ni yote haya nakala, na kata, na kuweka shughuli.
>> Hivyo hash ni pamoja na kiwango i0 dot h.
Je, ni kwamba kufanya?
Ni grabbing kiwango i0 dot h faili na pasting ndani ya juu
popote anasema hash ni pamoja na kiwango i0 dot h.
>> Na hash yoyote kufafanua kwamba tumekuwa kuonekana, ni nini kwamba kufanya?
Wake kuiga thamani kwamba hash inavyoelezwa inaelezwa kama na pasting kwamba
popote kwa kutumia thamani.
Hivyo Preprocessor tu haina kweli Nakala rahisi shughuli ya msingi.
Ni kitu gani smart.
Hivyo kila kitu kingine ni ngumu zaidi.
>> Hivyo sasa kwamba Preprocessor ni kufanyika, kwa kweli sisi kukusanya.
Basi ni nini kuandaa maana yake nini?
Sisi ni sasa kwenda c code mkutano code.
Yeah?
>> Watazamaji: [inaudible]?
>> Rob: Yeah, sisi hawakupata hiyo.
Hivyo kuandaa.
Tunakwenda kutoka c mkutano.
Hivyo hii ni halisi mabadiliko ya lugha.
Kuandaa yenyewe ina maana kwenda lugha kiwango cha juu kwa
lugha kiwango cha chini.
>> Na c ni lugha kiwango cha juu 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 inatuleta kutoka maelekezo hayo kwamba
CPU wako anaelewa na kwa kweli tafsiri yao, kwa
ndio na zeros.
>> Hivyo C mkutano kwa binary.
Lakini sina kutekelezwa bado.
Hivyo kufikiri ya maktaba cs50.
Sisi zinazotolewa kwa binary kwa hii maktaba ya cs50, ambayo ina GetString
na GetInt na wote.
>> Lakini maktaba cs50 -
katika na yenyewe - ni si kutekelezwa.
Haina kazi kuu.
Ni tu rundo la binary kwamba unaweza kutumia.
Hivyo kuunganisha ni jinsi gani sisi kuleta pamoja wote haya files mbalimbali binary
ndani ya kutekelezwa halisi.
Moja kwamba unaweza aina dot kufyeka dot nje.
>> Hivyo hii ni kama faili kwamba aliandika, - chochote mpango wako ni -
Ceaser dot c.
Lakini sasa imekuwa ni ulioandaliwa chini ya binary.
Hivyo Ceaser dot o.
Na hii ni maktaba yetu cs50 binary.
Na wao ni kuwa pamoja ndani ya kutekelezwa moja.
Yeah?
>> Watazamaji: [inaudible]?
>> Rob: Kwa hiyo 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 basi,
no, huna haja ya kuunganisha chochote tangu una kila kitu.
>> Alisema, printf ni kuwa na uhusiano in
Kama wewe milele kutumia printf, hiyo ni kitu kwamba mahitaji ya kuwa na uhusiano katika
kwa sababu hakuwa kuandika kwamba.
Na, kwa kweli, printf ni moja kwa moja wanaohusishwa in
Unajua jinsi katika mstari amri au wakati unapoandika kufanya, unaweza kuona ni na
dash l cs50, ambayo ina uhusiano katika maktaba cs50?
Printf, na mambo kama hayo, ni kwenda kuwa na mahusiano moja kwa moja.
Maswali yoyote juu ya kitu chochote?
>> Watazamaji: [inaudible]?
>> Rob: Kuunganisha?
Tuna kundi zima la mbalimbali binary files.
Huu ni mfano kisheria kwamba sisi kutumia ni cs50 maktaba.
Sisi ulioandaliwa na aliyopewa na wewe binary kwa ajili ya maktaba hii cs50.
>> Unataka kutumia GetString katika programu yako.
Hivyo kwenda na kutumia GetString.
Lakini bila kificho yangu binary kwa GetString, wakati kukusanya code yako
chini, huwezi kweli kuendesha 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 kutekeleza GetString.
File langu ni kamili.
Na siwezi kukimbia hii.
Yeah?
>> Watazamaji: Je, kuunganisha kubadilisha binary kwa kutekelezwa?
Hivyo hata kama huna nyingine maktaba, bila bado kuwa na
muhimu kutafsiri [Inaudible]?
>> Rob: Kwa hiyo kutekelezwa ni bado katika binary.
Ni kuchanganya tu zima kundi la binaries.
>> Watazamaji: Asante sana.
>> Rob: Hakuna tatizo.
Maswali yoyote mengine?
Vinginevyo, sisi ni kuweka wote.
Sawa.
Shukrani.
>> [Makofi]
>> Watazamaji: Asante.
>> Rob: Yeah.