JASON HIRSCHHORN: Karibu kwa A5, kila mtu. Tuna wiki kusisimua mbele yetu, hasa kwa sababu kuna watu wengi mpya inakabiliwa na katika chumba hiki. Ni ajabu. mengi ya wewe ni hapa kwa ajali, ambayo ni bora zaidi. Hivyo hopefully wewe utadumisha kujiunga na sisi. Wiki hii tunakwenda kutumia wingi wa sehemu maandalizi kwa ajili ya jaribio. Hivyo kwa ajenda yetu, sisi ni kwenda kuzungumza kidogo kuhusu rasilimali kwa ajili ya darasa, lakini pia kwa jaribio, na kisha, tena, kutumia wingi wa darasa kuzungumza juu ya maswali. Mara baada ya sisi ni kosa kujibu yako maswali, au kama maswali yako kawaida kutuongoza baadhi coding, mimi kuwa na matatizo ya sampuli kutoka midterms siku za nyuma kwamba sisi ya kificho kuishi katika sehemu pamoja pia kuleta nyingine mada nzuri ya bima. Hivyo kwanza, kama tumekuwa wamekwenda kupitia kwa michache iliyopita wiki kuwakumbusha guys, kuna tani ya rasilimali kutosha kwa ajili ya kozi hii. Wengi wao kuwa incredibly kusaidia na wewe kama wewe kuendelea kujifunza kwa jaribio 0, kwa sababu ni Jumanne mchana. Basi wote wa umekuwa kusoma kwa kidogo. Kuna maelezo ya hotuba na chanzo kificho kwamba ni lazima dhahiri kuangalia nje. Kuangalia kaptula. Angalia study.cs50.net. Na kisha, hapa chini, idadi ya rasilimali nyingine. Tena, jaribio 0 ni kesho saa 1 kamili. Kama hujafanya hivyo tayari, kuangalia nje Kuhusu Quiz 0 hati juu ya Mzee kozi kufikiri ambapo wewe ni kuchukua jaribio. Jaribio kuanza saa 1:10 na mwisho dakika 70 baadaye. Hivyo kama wewe kuonyesha up baada ya 1:10, wewe ni kwenda kupata dakika kwamba wengi wachache zaidi ya 70 kuchukua jaribio. Ili kuhakikisha uko huko kwa wakati. Kama wewe ni ugani mwanafunzi au kuwa na baadhi ya masuala mengine kupima, wanaweza kuwa katika 1:00 kesho. Lakini tena, angalia Kuhusu Quiz 0 hati kuhakikisha unajua wakati wewe ni kuchukua jaribio. Niliandika dakika 75 hapa. Nadhani hiyo ni haki, si 70. Ni inashughulikia nyenzo zote kutoka wiki 0 kwa hotuba ya wiki iliyopita juu ya Jumatano. Na tena, kwa jaribio hili, kwa kuwa hati, unaweza kupata moja kuwili na 8 1/2 na 11 karatasi kwamba kupata kutumia kama maelezo wakati wa jaribio. Watu wengi, kama si watu wengi, na iligundua kuwa moja na manufaa zaidi njia kujifunza kwa jaribio ni kwa kufanya utafiti karatasi, a moja ya sider, yao wenyewe. Ili kuangalia katika wale nyuma kama wameweza kuona majeshi ya zamani. Kufikia nje kwa rafiki kuona nini wao ni kuweka juu ya yao. Lakini mikono ya chini, njia bora unaweza utafiti ni kwenda kwa kila kitu na whittle ni chini ya kile lazima au lazima si ni juu ya kwamba karatasi ya karatasi, kwa sababu hiyo tu kweli njia manufaa kwa wewe kuhakikisha wewe kwenda kwa kila kitu na na baadhi uzoefu nayo. Watu wengi, tunaona, hata kama kuwa karatasi ameketi haki karibu na wao juu ya jaribio, si kugeuka hiyo, kwa sababu, tena, kwamba sana mchakato wa kwenda kwa njia ya habari imewasaidia kujifunza. Je, mtu yeyote una maswali yoyote kuhusu jaribio 0? Ina kila mtu - Mimi si kwenda kufanya show za mikono. Kamwe akili. Mimi alikuwa anaenda kuuliza ni nani kuanza kusoma. Lakini mimi sitaki kufanya wote si kuinua mikono yako. Hivyo kama nilivyosema - Ndiyo, Avi, kwenda mbele. AVI: Je, kuwa jambo muhimu kuweka juu ya moja ya pager? Mwanafunzi: Hiyo ni juu yenu. JASON HIRSCHHORN: Unaweza kupata kutumia hukumu yako. Mambo muhimu kuweka juu ya moja ya pager, kama wewe ni kuchanganyikiwa kuhusu O kubwa Runtime ya aina mbalimbali za utafutaji na kila aina, kuweka kwamba huko katika Handy dandy chati. Kwa njia hiyo, kama wewe ni aliuliza kwamba juu ya jaribio, huna haja ya kujaribu na takwimu nje au sababu kupitia Runtime. Unaweza tu nakala yake chini. Kama ukiangalia Quizzes iliyopita, mengi ya mara kwa mara, kuna mbio maswali wakati. Hivyo kwamba itakuwa mfano wa mema kitu ya kuweka kwenye yako moja pager. Mambo mengine nzuri ya kuweka juu, kama wewe ni kuchanganyikiwa kuhusu jinsi ya kutangaza kazi au nini sehemu mbalimbali za kazi tamko ni, kuandika kwamba kuna, toleo la generic na kisha labda mfano. Kama wewe ni kuchanganyikiwa kuhusu kuyatumia, mchoro wa jinsi ya kuyatumia kazi ni pengine kweli kusaidia. Kama wewe ni kuchanganyikiwa kuhusu kujirudia, a sampuli kazi ya kujirudia huko inaweza pia kuthibitisha kuwa kweli kusaidia. Je, hiyo kukupa baadhi ya mawazo? AVI: Unahitaji kuelewa nzima kuandaa mchakato, kama jinsi matendo yote? JASON HIRSCHHORN: Kila kitu ambayo imekuwa kufunikwa inaweza show up kwenye jaribio. Maswali - lakini tena, baadhi ya mambo kuwa mizigo sana kuliko wengine. Baadhi ya mambo wamekuja tena na tena katika darasa, katika hotuba, na sehemu. Mambo mengine na si kuja mara kwa mara. Tumekuwa aliongea mengi kuhusu # ni pamoja na na -L kitu na nini wale maana katika mchakato wa kutungwa. Tumekuwa aliongea mengi kuhusu GDB, kushikamana, wale bendera mbalimbali kwamba sisi kutumia wakati sisi kukusanya kitu, na nini make15, kwa mfano, kwa kweli ina maana na haina kweli. Sisi si kuzungumza kama mengi juu ya kila hatua moja katika mchakato wa kutungwa. Tumekuwa bado kuongea kuhusu hilo. Hivyo bado kitu ambacho wewe lazima familiar with. Lakini tena, sisi siyo kwenda kuwa - mambo ambayo kuja mara nyingi zaidi katika darasa ni zaidi uwezekano wa kuja zaidi mara nyingi na kuwa na zaidi sana mizigo juu ya jaribio. Baridi. Maswali mengine kuhusu jaribio 0? OK, hivyo mimi kuweka orodha ya mada kwenye bodi. Nilikwenda kupitia mtaala. Nilikwenda kupitia mapitio sehemu ya kutoka jana usiku na slides wale kuja na mashirika yasiyo ya orodha kamili ya mada kwamba tuna kufunikwa hivyo mbali katika CS50 na mambo ambayo huenda kuonekana kwenye jaribio. Hivyo mimi nina si kwenda kupitia kila moja ya haya. Ambayo ingeweza kuchukua zaidi wakati kuliko sisi sasa. Lakini mimi kuweka hii hapa kwa hopefully jog kumbukumbu yako kama mambo ambayo inaweza au inaweza kuwa kama ukoo na wewe. Na ningependa hupenda kutumia wingi wa sehemu ya kujibu maswali yako kuhusu haya mada, mada si kufunikwa hapa. Tunaweza kuandika Pseudo code. Tunaweza kuandika code halisi kuhakikisha kwamba - Siwezi kujibu swali lako na kusaidia kila mtu kimsingi kuelewa mengi ya mada hizi ili utasikia kujisikia tayari na starehe kwenda katika Jaribio kesho. Basi kusoma juu ya orodha. Wewe hopefully wamekuja sehemu na baadhi ya maswali pia. Wakati uko tayari, kunyanyua mkono wako na sisi kuanza. Kumbuka, maswali una, hakuna maswali ya kijinga. Tumesikia kwamba mengi. Na maswali na, mimi niko tayari bet, watu wengine wengi wote ameketi hapa na kuangalia online na vile vile. Hivyo unaweza tu kuwasaidia watu kwa kuuliza maswali. Marcus. MARCUS: Kati ya stack na chungu, kuna kabla ya zilizotengwa asilimia ya kumbukumbu hiyo hufafanuliwa kama hii ni kwa ajili stack au kwa chungu? Au jinsi gani kwamba kazi, hasa? JASON HIRSCHHORN: Mkuu swali. Mimi kwenda nyuma kuwaeleza kidogo. Je, kila mtu - tafadhali kuwa waaminifu hapa. Najua mimi kuuliza kuongeza yako mkono mbele ya wenzako. Lakini kuna watu ambao wanaona wasiwasi na stack na chungu na wangependa kwenda juu ya kwamba na nini wale maana yake nini? Kunyanyua mkono wako kama - OK. Asante. Hivyo sisi ni kwenda juu stack na chungu kweli haraka na kisha kuhamia katika kujibu swali lako. Hivyo kama sisi kuteka sanduku kuwakilisha kumbukumbu kwenye kompyuta yako, ni nini baadhi ya mambo ambayo kwenda katika sanduku hili? Kuu. kazi kuu. Wapi kuu kwenda? Mwanafunzi: [inaudible]. JASON HIRSCHHORN: Hivyo tutaweza kuweka kuu hapa chini. Nini kingine huenda katika sanduku hili? Mwanafunzi: kazi ambayo wito. JASON HIRSCHHORN: kazi kwamba sisi kuwaita. Na ni wapi wao kwenda? STUDENT: Katika stack. JASON HIRSCHHORN: Wao kwenda katika stack. Hivyo sisi ni kwenda kuwaita hii kitu hapa chini stack. Na juu juu, tuna chungu. Hivyo kumbukumbu si sanduku tu kama hii. Lakini ni kweli pretty sawa. Ni kwenda kuwa mengi ya masanduku ya juu ya na juu, kulingana na jinsi kubwa yako kompyuta ni au jinsi kubwa kumbukumbu yako ni. Katika quote-unquote "chini" ni stack. Na kuna mambo mbalimbali kwamba kwenda juu ya stack. Na wale wanategemea kazi una katika kanuni yako. Daima kuwa moja ya kazi katika yako code aitwaye kuu, hivyo kuna daima sehemu hapa chini katika stack kujitoa kwa kuu. Sehemu hizi katika stack walioitwa muafaka stack. Wakati wewe piga kazi nyingine, wanasema kuu wito binary kazi ya kutafuta, sisi kuweka sura nyingine juu ya stack. Zaidi hasa, sisi ni kwenda kuchangia chunk ya kumbukumbu juu yetu kompyuta kuhifadhi binary search wa ndani vigezo na kuendesha binary search code. Hivyo tunatoa wito search binary. Katika chunk hii ya kumbukumbu, tunakwenda kuhifadhi vigezo yake ya ndani. Sisi ni kwenda kuhifadhi wito wake printf. Chochote kinachotokea, kazi ambayo ni kwenda kuhifadhiwa haki pale. Search kisha ni kwenda kutekeleza. Ni kwenda kukamilisha utekelezaji. Ni neno katika C yale ambayo kunaashiria kwamba kazi ya lazima kukamilisha utekelezaji wake? Mwanafunzi: Return. JASON HIRSCHHORN: Kurudi. Hivyo wakati wowote kuona taarifa ya kurudi, ncha kazi wakati hits hiyo. Search hivyo binary hit kurudi wake. Hii ni sehemu ya kumbukumbu mapenzi kimsingi kuwa huru up. Na kuu kwenda nyuma kwa kunyongwa. Itakuwa hivyo kuu pause popote mara, wito search binary, kupata baadhi ya thamani ya kurudi, na kuendelea utekelezaji. Sura hii stack kwenda mbali. Kama sisi wito kazi kujirudia, ambayo ni kazi kwamba wito yenyewe juu ya na tena, tupate kupata - kusema sisi alifanya search binary recursively. Sisi ili kupata binary search toleo moja, search binary mbili, binary search tatu, tafuta binary nne, search binary tano. Na kisha hii tafuta mwisho binary tano hit kesi ya msingi, na stack muafaka kwenda nyuma na kuweka kufunga mpaka sisi kupata nyuma kuu. Tunaweza kwenda zaidi ya kujirudia katika kidogo. Lakini haya yote ni kusema, kama wewe ni wito kazi nyingi kwa wakati, kutakuwa na stack nyingi muafaka juu ya stack. chungu, kwa upande mwingine, hadi hapa, si kwa ajili ya kazi, si kwa vigezo ndani. Ni kwa ajili ya dynamically zilizotengwa vigezo. Basi hizi ni vigezo ambayo inaweza kuwa kuanzishwa katika ama kuu au kazi kwamba wito kuu. Mahali popote katika kanuni yako, unaweza kuanzishwa. Na initialize dynamically zilizotengwa kwa ajili ya kutofautiana. Nini kazi katika C tunatumia? Mwanafunzi: malloc. JASON HIRSCHHORN: malloc. Wewe piga malloc. Kupata nafasi ya kumbukumbu. Na kwamba nafasi ya kumbukumbu ni juu ya chungu. Na kwamba nafasi ya kumbukumbu anakaa huko mpaka wito bure. Hivyo dynamically zilizotengwa vigezo katika chungu kuwepo kwa muda mrefu kama wewe wao wanataka kuwepo, na wao si kwenda mbali mpaka waziwazi kuwaambia kwenda mbali. Unaweza kujenga yao katika moja ya kazi. Stack kwamba kazi ya ya sura ya kwenda mbali. Lakini hiyo variable bado zipo katika chungu mpaka ni huru, uwezekano wa na kazi hiyo aitwaye search binary au chochote. Hivyo wale vigezo chungu kukaa huko kwa muda mrefu kama unataka yao ya kukaa huko. Na wao kupata kuweka hapa. Na kisha moja ijayo anapata kuweka huko. Wao kushika kupata kujazwa katika, na wao kukaa huko mpaka wito bure. Na kimsingi, chungu na stack, kupata swali Marcus ya, kukua kwa kila mmoja. Na kama wao kukimbia katika mtu mwingine, wameweza kutumika juu kumbukumbu zote katika yako kompyuta, na mpango wako kuacha kwa sababu huna kumbukumbu yoyote zaidi kushoto na kutumia. Katika baina yao, kuna mambo uwezekano wa nyingine. Lakini kwa wigo wa kozi hii, wewe hawana haja ya kuwa na wasiwasi juu ya hilo. Ili kwamba ilikuwa jibu swali lako. Je, si wasiwasi kuhusu hilo. Lakini hiyo ilikuwa jibu kwa muda mrefu. Wote unahitaji kujua ni chungu na stack mapenzi - moja kuanza saa chini. stack gani. chungu juu huko. Wao kukua karibu na mtu mwingine. Na wakigusa, kwamba ni tatizo. Mbio nje ya kumbukumbu. Lakini pia, pamoja na kujua wapi wao ni, ni nini kuhifadhiwa katika wote stack na chungu. Curtis. CURTIS: Wakati wao yanapogongana, ni kwamba stack kufurika? JASON HIRSCHHORN: Wakati wao yanapogongana, si kwamba stack kufurika. kufurika stack ni eneo tofauti kuwa tunaweza kwenda juu kama unataka. OK, tutaweza kuja nyuma na kwamba katika kidogo. STUDENT: Nini neno aitwaye wakati wao hit kila mmoja, stack na chungu? JASON HIRSCHHORN: Kwa sasa, msiwe na wasiwasi juu. Tu kujua - Nami kujibu swali hilo baada ya darasa. Kama wao kukimbia katika kila mmoja, mbio nje ya kumbukumbu, kwa sababu hakuna zaidi nafasi huko. STUDENT: Sorry, nini seg kosa? JASON HIRSCHHORN: sehemu ya kosa anaweza kuitwa kwa - inategemea kwa nini wake aitwaye seg kosa ya. Wakati mwingine, stack yako kufurika, kutakuwa na kusema seg kosa kama makosa. STUDENT: Je kuhusu dereferencing null variable? Ni kwamba seg kosa? JASON HIRSCHHORN: Dereferencing null pointer - OK, hivyo kama una pointer kwamba kuweka sawa kwa null, kuyatumia, kukumbuka, anwani kuhifadhi kumbukumbu kama maadili yao. Na null pointer kimsingi ni kuhifadhi 0, 0-th kushughulikia kwa kuwa kutofautiana. Hivyo 0x, 0, 0, 0, 0, nakadhalika. Kwamba anwani 0-th katika kumbukumbu kwamba si katika picha wetu, hiyo ni hadi pale mahali fulani, hiyo ni zimehifadhiwa kwa ajili ya kompyuta. Sisi ni hawaruhusiwi kugusa yake. Hivyo wakati mpango wako ni utekelezaji, ikiwa kitu ni kujaribu kwenda kumbukumbu anwani 0, anajua kwamba kwamba ni thamani tupu. Ni anajua hakuna kitu lazima kuwa huko. Hivyo kama wewe kujaribu na kutumia kitu pale na kutibu kitu kama huko au kujaribu kwenda kwenye eneo hilo, wewe ni kwenda kupata kosa seg au makosa. Je, hiyo kujibu swali lako? Na sasa tutaweza kwenda nyuma stack kufurika. Mambo katika stack, kama nyie na kuona mbele, katika - hebu kuteka karibu up ya sura ya stack. Je, kila mtu kuona kwamba? Hivyo tuna stack sura yetu. Sisi ni kuokoa safu katika kama ndani variable katika kazi hii. Hivyo kusema safu yetu ina matangazo tano. Zote tano za wale kuhifadhiwa katika kwamba sura ya stack. Kama sisi kuanza kuandika zaidi ya mipaka ya safu hii - hivyo kama sisi kuanza kuandika ndani, hebu kusema kwamba 0. Wale ni bahati tano ya safu yetu. Kama sisi kuanza kuandika katika index 5, ambayo hatuna wakati tuna safu ya ukubwa 5, sisi kuanza kuandika katika index 6, 7, 8, 9, tunaweza kupata Stack Makosa kufurika. Kwa ujumla si - pengine kupata katika matatizo kama wewe kwenda juu ya kwa moja. Lakini kwa ujumla, utapata katika zaidi shida kama wewe kwenda juu na mengi na kwenda mbali zaidi ya kwamba kuandika juu ya kurudi pepe ya kwamba kazi, ambayo iko katika chini ya sura ya stack. Kwa sababu, sawa? You - katika - sorry. Si "kwa sababu ya haki." Katika sura ya stack, una vigezo lako. Chini kabisa ya stack frame ni kurudi anwani. Hiyo ambapo kazi huenda wakati juu. Na kama wewe overwrite kwamba kurudi mitaani, kisha wakati huu frame stack, wakati wewe ni kwenda kwa stack sura na utekelezaji wa kila mstari, wewe ni kwenda kwa mwezi anwani yako ya kurudi kwamba imeandikwa huko badala ya halisi moja. Na kwamba ni jinsi gani tumeona baadhi ukiukaji wa usalama yanaweza kutokea kwa kompyuta. Hivyo stack kufurika, katika muda mfupi, ni wakati ninyi overwrite sehemu katika stack wewe ni wanatakiwa kutumia, serikali za mitaa variable uko walidhani kutumia, na hasa wakati wa kuanza overwriting mambo muhimu kama kurudi anwani. Na hapo ndipo utapata makosa. Au labda hata unaweza kuanza hata kuandika katika - kusema search binary mara haki juu ya kuu. Kama overwrote mengi, wewe unaweza kuandika ndani ya kuu. Lakini kwa ujumla, unaweza kupata makosa kabla ya basi, kwa sababu ya kompyuta anajua wewe ni kufanya kitu haipaswi kufanya. Yeah. STUDENT: Nini tofauti kati ya stack kufurika na kufurika buffer? JASON HIRSCHHORN: Buffer kufurika ni ya aina zaidi generic ya nini nimekuwa tu kama ilivyoelezwa. STUDENT: Kwa hiyo stack kufurika ni mfano wa buffer kufurika. JASON HIRSCHHORN: Hasa. Hii ni safu tunaweza kufikiria kama buffer, nafasi kwa ajili ya mambo kwenda in Hii ni stack buffer kufurika. Tunaweza kuwa na lundo buffer kufurika. Kama kulikuwa na buffer, ambayo kuna mara nyingi ni safu chungu, na sisi overwrote mipaka hayo, basi sisi ingekuwa na chungu buffer kufurika. Na zaidi ya upeo wa kozi hii, wao ni wanaona tofauti kidogo. compiler ina maalum njia ya kuchunguza kila mmoja. Lakini buffer kufurika ni zaidi generic aina ya kile ilivyoelezwa, ambayo ilikuwa stack buffer kufurika. Je, kwamba kujibu swali lako? Tamu. Kulikuwa na maswali yoyote kuhusiana kwa stack au chungu? Yeah. STUDENT: Mimi najua wewe kuwa na masharti bure kwa sababu wao uko katika chungu na hawataki kuvuja kumbukumbu. Lakini je, una bure vigezo kimataifa na mambo kama hayo? Au ni wao moja kwa moja huru? JASON HIRSCHHORN: swali Good. Hivyo katika CS50.H, sisi kujenga jambo hili kwa wewe kuitwa kamba. kamba ni kweli nini? Mwanafunzi: Char nyota. JASON HIRSCHHORN: nyota char, pointer tabia, pointer kwa safu ya wahusika. Hiyo ni nini string ni. Hivyo tunahitaji bure, kwa sababu GetString, ambayo sisi kutumika mengi - kamba jina sawa na GetString - kwamba mallocs kwa sisi baadhi ya kumbukumbu juu ya chungu na kisha anarudi pointer kwa tabia ya kwanza ya kwamba kamba, nyota char. Hivyo zenye, kama hamjakuwa kuandika bure yoyote ya masharti yako kwamba umefanya kuitwa hivyo mbali, una imekuwa kinachovuja baadhi ya kumbukumbu. Bila shaka sisi si aliongea juu ya yake, hivyo hakuna mtu wamezipata katika shida kwa kufanya hivyo. Lakini kwenda mbele, ndiyo. Wakati wewe piga GetString, wewe ni mallocing baadhi ya nafasi juu ya chungu. Na kama huna simu bure baadaye kwamba kamba, una kumbukumbu leak. Kwamba kujibu swali lako? Yeah STUDENT: Kwa hiyo kufanya hivyo, je, sisi kutumia bure sahihi kabla ya kurudi? Kama, ndani ya wigo wa, mimi nadhani kama tunasema, kama, int kuu, ndani ya wigo wa kificho kwamba ni ndani ya wale braces curly, haki kabla ya - unajua ambapo d kawaida kuweka kurudi. Je, kuweka bure kabla ya kwamba? JASON HIRSCHHORN: Hivyo unaweza kuweka bure popote unataka kuweka bure. Kwa sababu hizi ni dynamically zilizotengwa vigezo, kwa sababu wanaweza kuishi zaidi ya upeo wa fulani kazi, kama simu malloc katika kazi tofauti, kwa mfano, GetString, unaweza kupiga bure katika kuu. Huna haja ya kuiita katika kazi maalum ambapo malloc inaitwa. Lakini huna haja ya kuiita kabla ya kurudi kuu. Na ni kweli inategemea. Inategemea nini malloced kwamba nafasi katika nafasi ya kwanza. Baadhi ya watu kuwaita bure pretty haraka. Baadhi ya watu si kuwaita bure mpaka mwisho wa mpango wao. Na wao itabidi kwenda kwa njia ya na bure kila kitu. Inategemea sababu ya kuita malloc. STUDENT: Na nini unaweza kusema kama wewe kuitwa matumizi GetString? Ningependa kusema huru nini? JASON HIRSCHHORN: Kwa hiyo syntax kwa ajili ya bure ni tu bure, paren wazi, karibu paren, na jina la pointer. Hivyo kama wewe kuandika kamba jina usawa GetString, kuweka jina katika hapa. Hiyo ni jina la pointer. Na anajua bure kumbukumbu. Mwanafunzi: Basi inatufanya kuwa kumbukumbu, pointer bado anazungumzia mahali katika kumbukumbu? Au ni pointer pia ombwe anwani hiyo inaelekeza kwa. JASON HIRSCHHORN: Tunapaswa kujaribu kuwa. Tunapaswa kificho kwamba. Hebu kuja nyuma wakati sisi kupata coding, na hebu kificho kwamba. Na kama unataka kufikiri jibu na kwamba, unaweza pia kificho kwamba katika huo huo. Lakini hiyo ni swali kubwa. Mwanafunzi: Je, inawezekana bure kitu mapema mno? Hivyo bado haja yake kwa mpango wako, na wewe huru kuwa nafasi kumbukumbu? JASON HIRSCHHORN: Ndiyo. Inawezekana, kama wewe bure kitu na kisha kuitumia tena, utakuwa kukimbia katika makosa. Lakini hiyo ni juu ya sababu wewe huru kitu na kisha kuitwa baadaye. Ili kwamba ilikuwa programu ya kosa. Lakini ndiyo. Unaweza kuandika hiyo. Yoyote maswali zaidi juu ya - ndiyo. STUDENT: Hivyo kama wanatakiwa tu bure ni kwa ujumla kabla ya mpango mwisho, haina maana kwamba kama mpango mwisho na huna bure yake, kwamba kumbukumbu bado ni zilizotengwa? JASON HIRSCHHORN: Kama mpango wako mwisho na kusahau bure kitu, basi kwamba kumbukumbu zilizotengwa kwa ajili ya katika maisha ya programu yako. Wakati mpango wako kufunga kabisa, kwamba kumbukumbu si kwenda kukaa humo milele. kompyuta ni smart kutosha kujua kwamba wakati mpango wa kufunga, ni lazima kujikwamua yote ya kumbukumbu kwamba mara yanayohusiana na mpango huo. Hata hivyo, kuna zana unaweza kuendesha juu ya mpango wa kuchunguza kama, wakati mpango kumaliza, alisahau bure baadhi ya kumbukumbu. Na kwa tatizo lako ijayo kuweka ambapo wewe utakuwa kutumia malloc na kutumia kuyatumia, utakuwa mbio hii mpango juu ya mpango wako kuona kama, wakati anarudi kuu, na baadhi ya mambo ambayo walikuwa kushoto unfreed. Hivyo siyo kwenda kukaa malloced milele katika kompyuta yako. Hiyo itakuwa fujo, kwa sababu haraka sana, kompyuta kukimbia nje ya kumbukumbu. Lakini kama wao kukimbia mpaka mwisho wa yako mpango na siyo huru na yako mpango exits, hiyo ni bado ni tatizo kuwa chombo hiki itasaidia kushughulikia. Mwanafunzi: Ni kwamba Valgrind? JASON HIRSCHHORN: Ni aitwaye Valgrind. Na wewe utakuwa - STUDENT: Lakini hatuna kujua kwamba kwa jaribio, ingawa? I mean, ilikuwa ni kuongelea kidogo katika hotuba. JASON HIRSCHHORN: Kwa hiyo Valgrind ni jina la chombo kwamba. Kujua nini yake ni kutosha kwa ajili ya jaribio. Lakini ninyi si kutumika bado juu yako kuweka tatizo kwa sababu sisi si alikuwa na tatizo kuweka kwamba ina wazi kushughulikiwa na malloc au kutumia malloc. Hivyo si kutumika Valgrind bado. Lakini utatumia ni mapema kuliko baadaye. STUDENT: Je, unaweza kurudia nini Valgrind ni? JASON HIRSCHHORN: Sorry? STUDENT: Je, unaweza kurudia yale madhumuni ya Valgring ni? JASON HIRSCHHORN: Valgrind ni jina - kama GDB husaidia Debug mpango wako, Valgrind husaidia kufikiri kama mambo si huru wakati mpango wako kufunga. Hivyo itabidi kuendesha kwenye programu yako. Na mpango wako exits, na kutakuwa na kusema mpango wako aitwaye malloc na hayo, wengi mara kwa hii ka wengi, nanyi tu aitwaye bure hili mara nyingi. Na hivyo kushoto ka mingi bila kuwa huru. Au itabidi kusema umefanya huru kila kitu. Kazi nzuri. Mwanafunzi: OK. Na ni kuitwa Valgring? JASON HIRSCHHORN: V-A-L-G-R-I-N-D. Mwanafunzi: swali kuhusu kuyatumia. Hivyo kusema kuwa n nyota x sawa na kitu. Hiyo ni sawa na, chochote ni kuweka huko, ni kwamba nini kuwa kuweka ndani ya nini x ni akizungumzia, au pointer ya x? JASON HIRSCHHORN: Je, unaweza kurudia swali? Je, sisi kuteka ni unaposema yake? STUDENT: Katika jaribio, kwa kweli, moja alimtuma sisi, ilikuwa ni kama, char nyota ukweli ni sawa na CS50 miamba, sawa? Hivyo haina maana kwamba kuwa CS50 miamba ni nini ukweli ni akizungumzia? JASON HIRSCHHORN: Hivyo wewe ni kuzungumza kuhusu nyota char katika kamba, jinsi kwamba kazi? Yeah. OK. Hebu kuteka hii zaidi ya hapa. [SIDE MAZUNGUMZO] JASON HIRSCHHORN: Kwa hiyo variable hii ni kwenda kuwa ya aina char nyota. Jinsi kubwa ni kutofautiana ya aina char nyota? Jinsi ka wengi? WANAFUNZI: Nne. JASON HIRSCHHORN: Ni ka nne. Jinsi haki za wengi ni variable ya aina int nyota? WANAFUNZI: Nne. JASON HIRSCHHORN: ka nne. Kama ni pointer, basi ni daima ka nne, kwa sababu kuyatumia, wao thamani ni kumbukumbu anwani. Na kumbukumbu anwani juu ya CS50 appliance ni ka nne kwa muda mrefu. Hivyo wakati sisi kuwaita GetString, au wakati sisi kusema, stringname sawa, na kisha katika quotes mbili kuweka kamba, sisi ni kuweka - vizuri, hiyo ni tofauti kidogo. Tutaweza kufanya GetString kama mfano. Au char nyota kitu sawa na kamba. Sorry, nipe mfano kwamba kusoma? Mwanafunzi: char nyota ukweli ni sawa na "Cs50 miamba" katika quotes mbili. JASON HIRSCHHORN: Kwa hiyo nyota hii, tutaweza wito huu x variable kwa ajili yetu madhumuni ya kurefusha maisha. Tumeunda variable kuitwa x. Ni aina char nyota. Ni pointer kwa mfululizo ya wahusika. Hivyo hapa chini - Hivyo hii ni jinsi hii ingekuwa kazi katika kumbukumbu. Hii itakuwa kuhifadhi kumbukumbu anwani. Itakuwa kuhifadhi kumbukumbu ya barua pepe ya tabia ya kwanza katika safu. Na wakati wewe ikifuatiwa pointer, ungekuwa kupata tabia ya kwanza. Na kama wewe ni kusoma jambo hili kama kamba, kompyuta yako ni smart kutosha kujua, kusoma jambo hili zima mpaka anapata kuwepo kwa kuzorota 0. Lakini kama wewe ni kusoma tabia katika wakati, hivyo wewe iterating kupitia kamba hii, basi utakuwa tu kusoma tabia ya wakati mpaka kupata backslash 0. Kwamba wanaweza kujibu yako swali, ingawa. STUDENT: Yeah, lakini una si malloced kuwa nafasi lakini kwa kuwa pointer. JASON HIRSCHHORN: Kwa hiyo mimi nina uhakika kabisa nini hasa ni kuangalia, kwa sababu mimi si kufanya jaribio hilo. Kwamba ilitakiwa kuwa na manufaa rasilimali kutoka TF mwingine. Kama wewe ni kujenga kamba juu ya stack au kama variable ndani, itabidi tu kuwa safu ya mashtaka badala ya ujumla char nyota akizungumzia kamba nyingine. Lakini mimi sijui. Hiyo inaweza kuwa pointer na mwingine kamba juu ya stack kama vizuri. Yeah. Mwanafunzi: Mimi najua kuwa wewe haja ya kutenga kumbukumbu kama pointer ni kupata alitangaza ndani ya ya kazi nyingine. Je, unahitaji kufanya kitu kimoja kama ni kutangazwa kuwa ndani ya kuu, wewe ni kutumia ndani ya kuu? JASON HIRSCHHORN: Hivyo ndiyo. Unaweza kutangaza pointer yoyote kumbukumbu anwani katika kumbukumbu. Inaweza kuwa kumbukumbu ya barua pepe ya ndani variable, ingawa mara nyingi, watu wala kutangaza anwani kumbukumbu kwa vigezo ndani kwa sababu wao kwenda mbali mara moja kazi kwamba anarudi, ambayo ni kwa nini sisi kwa ujumla malloc mambo. Lakini ndiyo, unaweza kutangaza pointer kwa kutofautiana mwingine ndani. Ni kwa ujumla tu si kufanyika. Lakini siwezi kuangalia kwamba kitu maalum baada ya darasa. Yeah. STUDENT: Nadhani hii ni aina ya nini kuwa aliuliza. Ni gani wanaonekana ajabu kuwa initializing pointer si kama mitaani, lakini kama nini Inaonekana kama thamani. Inaonekana kama CS50 ni nini ndani ya kitu kuwa alisema kwa na si anwani halisi, sawa? JASON HIRSCHHORN: Basi hiyo ni si kesi, ingawa. Hiyo si nini kinatokea. Wakati kutangaza nyota char, ni kumbukumbu anwani. Kuyatumia ni anwani zote kumbukumbu akizungumzia kitu kingine. Kwamba kitu kingine inaweza kuwa juu ya stack, lakini karibu kila mara ni juu ya chungu katika njia tutaona kutumika. Lakini stringname sawa na mara mbili-quote "GetString," tunaweza kuona kwamba na sisi unaweza kuangalia njia ya kuwa na kificho kwamba. GetString kamba si kuokolewa katika kwamba variable, au chochote string jina ni si kuokolewa kwa kuwa variable, kwa sababu si kwamba jinsi kuyatumia kazi. Je, hiyo mantiki? STUDENT: Yeah. JASON HIRSCHHORN: OK. Hopefully, kwamba hakuwa utata kwa mtu yeyote. Lakini kama ilivyokuwa, tunaweza kuangalia tena katika kidogo, kwa sababu sisi ni kweli kwenda na kanuni kitu ambacho mapenzi hopefully kazi na masharti na kukusaidia kujisikia vizuri zaidi pamoja nao. Maswali yoyote kuhusiana na haya mada au mada nyingine kwamba Mimi itabidi kuweka nyuma up? Na - hivi sasa. Ndiyo, Alden. ALDEN: Hivyo hii ni unrelated kabisa, lakini tunaweza tu kwenda juu kweli haraka nini tunahitaji kujua kuhusu tofauti kati ya 32 na 64-bit mashine? JASON HIRSCHHORN: Ndiyo. Hivyo 32 bits ni jinsi ka wengi? ALDEN: Ni ka nne. JASON HIRSCHHORN: Ni ka nne. Na 64 bits ni jinsi ka wengi? Mwanafunzi: nane. JASON HIRSCHHORN: Nane ka. Hivyo tena, bits nane ni byte moja. CS50 yako appliance ni 32-bit mashine. Hivyo anwani kumbukumbu ni ka nne kwa muda mrefu. Kuna 2-32 kumbukumbu anwani. 0 to 2-32 minus 1. Na mimi si mazuri, lakini hiyo ni pengine wigo wa nini unahitaji kujua kwa ajili ya 32-bit mashine, kwamba kumbukumbu anwani ni mara ya pili, ka nne kwa muda mrefu, na kwamba kiasi cha juu ya anwani kumbukumbu. Pia, aina data - hii inaweza kuwa kitu kama vizuri kwamba ni yenye thamani ya kubainisha. ukubwa wa aina data inategemea mashine wewe ni kufanya kazi pamoja. Hivyo char, tabia moja, ni jinsi ka wengi juu ya CS50 yetu appliance? Moja Byte. Na ni kweli byte moja kama vizuri juu ya 64-bit mashine. Na aina ya data ni idadi sawa ya ka kwenye mashine zote mbili. Lakini baadhi ya aina data itakuwa tofauti juu ya mashine zote mbili. Hivyo kwamba itakuwa uwezekano wa Kitu tu unahitaji kujua. Lakini hata hilo, nadhani, ni zaidi ya mipaka - Mimi nina karibu chanya, kama wewe kuangalia nyuma katika umri wa Quizzes, inasema, kudhani kwa coding matatizo unatumia 32-bit mashine. Lakini kuna, kwenda pamoja na kwamba katika Uchunguzi wewe ni nia, kuna aina data ambazo ni sawa ukubwa juu ya mashine yote. Kama umefanya kuona kitu kama uint32_t, wanaweza au si wameona kwamba. Hiyo ni aina data. Hiyo ni kusema, kuwa 32 bits bila kujali nini mashine hii ni juu ya. Basi, hao watu ni kuandika portable code, wao pengine si kutumia ints. Wao itabidi badala yake kutumia hizi data nyingine aina kuwa wanajua itakuwa sawa ukubwa juu ya kila mashine moja. Madhu. Madhu: Mimi nilikuwa na swali kuhusu mchakato wa kutungwa. Hivyo kama wewe ni kuandika mpango kwamba anatumia maktaba kama CS50 au kitu kama kwamba, najua kwamba maktaba ina, wakati fulani, kuwa na ulioandaliwa na uhusiano in Lakini ni kiasi gani cha kinachotokea wakati wa mkusanyiko wa mpango wako? Sehemu gani ya kwamba mchakato wa maktaba hutokea wakati uko kuandaa programu yako mwenyewe? JASON HIRSCHHORN: Basi hebu kwenda juu ya kwa ujumla hatua ya mchakato huu. Kuandika c faili yako.. Katika c faili yako., Unaweza # ni pamoja na yako maktaba header, kwa mfano, cs50.h. Je, hiyo ni pamoja na mkali line kufanya mpango wako? Akchar. AKCHAR: Ni anaongeza prototypes ya majukumu kutoka header files katika maktaba. JASON HIRSCHHORN: Hasa. Inaongeza wale kazi prototypes na kanuni yako. Hivyo wakati code yako ni kuwa ulioandaliwa katika hatua za mwanzo, compiler anajua kwamba kazi hizi kweli zipo, na kwamba mahali fulani wamekuwa defined. Files. H si ni pamoja na ufafanuzi kwa kazi hizi au jinsi wao kweli kazi. Cs50.h tu ni pamoja na kitu ambacho anasema GetString ni kitu kweli kwamba yanaweza kutokea. Na standardio.h anasema printf ni kitu halisi ambayo yanaweza kutokea. Header hivyo lugha yako c na hili. file anapata akageuka katika baadhi mashine-someka code, ambayo hatimaye anapata akageuka katika binary code, 0 na 1 ya. Na kwamba kificho kwamba hatimaye anapata kunyongwa. -L cs50 line - kwa mfano, wakati wewe ni kuandika Clang - na kisha ni pamoja na-l cs50, unapoandika kwamba in Na unaweza kuona kwamba. Wakati kuandika kufanya, itabidi kuona kwamba line up hapa. Na tutaweza kuona kwamba katika pili wakati sisi kanuni au baadaye wakati sisi code. Lakini hiyo-l cs50 line hana kitu tofauti kidogo kuliko # Ni pamoja na cs50.h. Je, hiyo-l cs50 line nini? Avi? AVI: Mimi nataka kusema kwamba ni viungo maktaba na kazi simu, kama. files o. JASON HIRSCHHORN: Hivyo sana karibu, kama si doa-on. -L cs50 inachukua file binary na huingiza kwa faili yako binary. Hivyo cs50.h, hakuna hatua kwa kumfanya cs50.h kutoka C lugha ya binary kila wakati moja ni kuwa kutumika. Hiyo itakuwa silly, kwa sababu itakuwa kupoteza muda mwingi. Hivyo tayari ulioandaliwa na akageuka katika kutekelezwa. Na sasa ni kwenda kuwa zimeunganishwa kwa faili yako mwishoni. Hivyo wale 1 na 0 yanaenda kwa kuunganisha pamoja na watoto wenu na 0 mwishoni. Hivyo sasa itabidi kweli na halisi 1 na 0 kwamba kufafanua jinsi GetString, kwa mfano, kazi, au jinsi printf, kwa mfano, kazi. Na kwa taarifa zaidi, kuna Waandishi wa short kwamba Nate anatoa kwamba unapaswa kuangalia nje kwamba huenda kupitia hatua hizi. Lakini - ndiyo. STUDENT: Je, wao daima katika o files. wakati wao uko katika aina maktaba, tayari zimeunganishwa, wanaohusishwa - kama wao uko katika code binary? JASON HIRSCHHORN: OK. Nini - STUDENT: Je, kwamba daima kesi kwa maktaba wakati kiungo wao? JASON HIRSCHHORN: Ndiyo. Hivyo kuna. S files, ambayo itakuwa mashine code, ambayo pia kuwa cryptic na wewe. Huna haja ya kuwa na wasiwasi kuhusu hizo. Lakini kwa ujumla, yeah, wao itabidi kuwa katika. o files tayari kwenda. Mwanafunzi: Hivyo wakati wewe meli maktaba, je, tu meli H. Na o.? Huwezi meli c. Au s.. JASON HIRSCHHORN: Kwa hiyo - na hii ni katika hii short pia, kama habari hii inaonekana kuwa kuja kidogo haraka. Lakini short juu ya compilers mazungumzo kuhusu hili pia. Wakati meli maktaba, kama meli H., Header file, wale kazi prototypes, na 1 na 0, kwamba wote unahitaji kutoa. Huna haja ya kutoa jinsi kazi kazi. c file. Kwa sababu hatua kwa ujumla, au uhakika APIs, hatua SPL hii, Stanford portable maktaba, ni kwa wewe na wasiwasi juu ya jinsi namna mpya ya GRect kazi, au jinsi hoja matendo, au jinsi kuongeza kazi. Wote unahitaji kujua ni kwamba kuongeza ni kazi ambayo unaweza kutumia, na ni gani hii. Hivyo kweli hawana haja ya kujua jinsi ya imeandikwa katika C. Wewe tu haja ya kujua, hapa ni kazi, nini kufanya, na hapa ni 1 na 0 ya wakati kweli wanataka kuwatumia. Baridi. Yoyote maswali zaidi juu ya compilers au mada nyingine kwenye bodi? STUDENT: Nina swali la utekelezaji wa kazi ya kujirudia. swali kuhusu recursion. Mimi nilikuwa na hisia kwamba atakuja up. Basi hebu haraka kupitia kujirudia na maalum mfano, kazi factorial. Kwa sababu hii ni mfano kwamba mara nyingi anakuja juu au hutumika kuonyesha recursion. Hivyo "4!" ni kusoma kama 4 factorial. Na nini 4 factorial maana yake nini? Je, hiyo nini? Jinsi gani mahesabu 4 factorial? Mara 4 mara 3 mara 2 1. Hivyo njia nyingine ya kuandika 4 factorial ni kwa kuandika hii. Mara 4 3 factorial. Kwa sababu 3 factorial ni Mara 3 2 mara 1. Hivyo mara 4 3 factorial ni 4 mara mara 3 2 mara 1. Hii ni kwa nini factorial ni kubwa mgombea wa kujirudia, kwa sababu ni wazi kwamba kuna kitu ambacho hutokea tena na tena na zaidi juu ya ndogo idadi ya mambo mpaka kufikia mwisho. Wakati wewe kufikia 1, 1 factorial ni 1. Huwezi kwenda mengi zaidi. 0 factorial pia kuelezwa kama 1. Hivyo wakati wewe kupata 1 au 0, wewe ni mwishoni, na unaweza kuanza kurejea up. Hivyo kama sisi alitaka kuandika kujirudia kazi kwa mahesabu ya factorial, sisi ni kwenda kuandika baadhi pseudocode kwa sasa. Kabla ya sisi kuandika kwamba pseudocode - Mimi nitakupa guys ya dakika kadhaa kuandika Pseudo code au kufikiria tu juu yake - kuna mambo mawili kila kazi kujirudia mahitaji. Ni mambo hayo mawili ni nini? JACK: Ni kujiita. JASON HIRSCHHORN Nuhu? Oh, Jack. Kwenda mbele. JACK: Ni kujiita. JASON HIRSCHHORN: Kwa hiyo kujirudia kazi mahitaji ya wito kujirudia, simu kwa yenyewe. Hiyo ni moja. Na nini kitu kingine? JACK: kesi ya msingi. JASON HIRSCHHORN: kesi ya msingi. kesi ya msingi ni, hapa wakati sisi kuacha. Hivyo kazi yako anapata kuitwa. kesi ya msingi anakuja kwanza. Unataka kujua kama wewe ni mwishoni. Na kama wewe si mwishoni, wewe kufanya wito wako kujirudia. Na kwenda kwa njia ya kazi hii tena, kuangalia kesi yako msingi tena. Kama wewe si mwisho, unaweza kufanya mwingine wito kujirudia, nakadhalika, na kadhalika. Hiyo ni kwa nini kazi ya kujirudia daima haja ya kesi hizo msingi na wale kujirudia wito. Kama huna wito kujirudia, ni bila kuwa na kazi ya kujirudia. Kama hakuwa na kesi ya msingi, ungependa kwenda milele na hakutakuwa na mwisho. Na kesi ya msingi daima huja kwanza, kwa sababu wewe siku zote wanataka kuangalia kama wewe ni mwishoni kwanza. Hivyo kabla ya sisi kufanya baadhi ya pseudocode, kwa nini wewe kuchukua dakika kufikiri juu ya jinsi ya kujirudia factorial kazi vingeandikwa? Pia, kama wengi kama wewe ni kufanya, kuandika ni nje ya karatasi ni nini wewe kwenda kuwa na kufanya juu ya jaribio kesho. Vitendo hivyo pengine nzuri ya kufanya uhakika code wewe ni kuandika chini juu ya karatasi - au unaweza kufanya hivyo. Unajua ambapo semicolons ni. Unakumbuka syntax. Kwa sababu wewe ni kuwa na uwezo wa kuwa na compiler kuwaambia alifanya makosa. Pia, pamoja na mistari hizo, kesho, wakati una coding matatizo, kama wewe ni alikimbia kwa muda, au kama wewe ni sana kuchanganyikiwa kwa jinsi gani uko walidhani kuandika kitu fulani katika c, ni itakuwa pasa wewe kuandika pseudo-code au kuandika maoni katika vilevile. Kwa sababu kuna sehemu mikopo kwa ajili ya maswali mengi juu ya jaribio. Basi unaweza kuwa alikimbia, au ili tu kuwa na kuchanganyikiwa. Kuandika katika maoni au pseudo-code ni mara nyingi njia ambazo unaweza wanaweza kupata sehemu ya mikopo. Hivyo si kuacha jambo fulani tupu juu ya jaribio. Hakuna adhabu kwa kuweka mambo in Kwa kweli, kuweka katika pseudo-code au maoni ni kwenda kusaidia grader kufikiri kama kweli kujua nini wewe ni kuzungumza juu, na labda tuzo baadhi ya mikopo sehemu kwa ajili hiyo. Pia pamoja na mistari hizo, kuandika wazi. Kama tunaweza si kweli nini wewe kuandika, sisi siyo kwenda kuwaita usiku wa manane kesho na takwimu nini aliandika. Sisi ni kwenda tu kuchukua mbali pointi. Kuandika wazi ili tuweze kusikia, au tuseme, tunaweza kusoma nini aliandika. Na kama anasema hukumu mbili, wala kuandika aya. Kufuata maelekezo. Kuandika wazi. Na kuandika katika maoni hayo au pseudocode kwa maswali ambayo inaweza tuzo sehemu ya mikopo. OK, hebu kwenda factorial. Hivyo tuna kazi factorial. Kama ningekuwa kwa kweli kuandika hii katika C, je, mimi haja ya kuweka kabla ya jina ya kazi? aina kurudi, ambayo, katika hii kesi, tutaweza kuwapa int. Na kisha ndani ya braces curly, ni yale yanayoendelea ndani ya braces curly kwa kazi? WANAFUNZI: Hoja aina. JASON HIRSCHHORN: hoja yake. Hivyo factorial pengine kuchukua hoja. Ni pengine utasikia tu kuchukua hoja moja. Na tutaweza kusema itabidi kuchukua integer aitwaye x. Na tena, wakati wa kuandika mfano wa kazi au kuandika kazi katika kanuni yako kabla ya kufafanua yake, kuandika aina data na jina la kwamba kutofautiana kwa kuwa kazi tu. Hivyo unaweza kupita baadhi ya idadi ndani ya hii kazi, kutakuwa na kuwa inajulikana kama x ndani. Tuna kazi yetu factorial. Tunahitaji mambo mawili, kesi ya msingi na wito kujirudia. Kesi ya msingi kwa factorial ni nini? Mtu ambaye aliandika nje na ambaye ana si amesema bado, ni nini ni msingi kesi kwa factorial? STUDENT: Kama n ni chini ya ya 2, kurudi 1. JASON HIRSCHHORN: Kama n ni chini ya 2, kurudi 1. Mimi kama kwamba, kwa sababu inachukua huduma ya 0 na 1. Hivyo tutaweza kufanya x <2, kurudi 1. Kama sisi kupata kupita 0, kama sisi kupata kupita 1, kazi hii itakuwa mara moja kurudi 1. Kama sisi kupata kupita baadhi idadi kubwa kuliko au sawa na 2, tunakwenda na wito wetu kujirudia. Na hivyo ni jinsi gani ni kwamba kwenda kufanya kazi? Je, mtu mwingine ambaye alifanya kazi katika hii ambaye amesema bado nipe wito kujirudia kwa kazi hii katika pseudocode? Kama sisi kupata kupita katika idadi x na ni zaidi ya 2, nini tunataka kufanya nini? Sisi pia mfano yameandikwa juu ya upande kwamba anaweza kukupa ladha. Mwanafunzi: Wito mara x factorial ya x minus 1? JASON HIRSCHHORN: Hasa haki. Sisi ni kwenda na kurudi mara x factorial ya x minus 1. Na kwamba, hata ingawa niliandika juu, kimsingi, nini alisema katika lugha ya Kiingereza, kazi hii factorial kupata kuitwa tena. Kutakuwa na nitafanya juu ya x minus 1. Ni itabidi kurudi kwa baadhi integer, na kisha kutakuwa na kuzidisha hizi mbili pamoja, na thamani ambayo itakuwa akarudi chochote kuitwa hii kazi factorial, ambayo inaweza kuwa mfano mwingine wa kazi hii factorial. Hivyo kwamba ni mfano wa kujirudia kazi, sana rahisi kujirudia kazi. Lakini wengi wao watakuwa kama hii. Kama ungependa kujirudia nzuri changamoto kwa jaribio, kujaribu coding search binary recursively. Kwa sababu kama alivyofanya search binary kwa kuweka tatizo tatu, pengine alifanya hivyo iteratively katika kitanzi wakati. Lakini inaweza pia kuwa imeandikwa recursively. Wewe ni kwenda haja ya kuandika yako mwenyewe kazi tofauti kwamba inachukua baadhi amri ya mstari wa mbalimbali hoja - au si amri ya mstari wa hoja, baadhi mbalimbali hoja tu mara kwa mara. Lakini unaweza kuandika search binary recursively pia. Mwanafunzi: Hivyo unaweza pia imeandikwa, badala ya x minus 1, inaweza kuwa pia imeandikwa x minus minus, au unaweza kuwa na imeandikwa minus minus x. Unaweza tu kueleza kweli haraka kwa nini hizo bila kuwa na mambo mbalimbali, kama nini tofauti ni kati ya x minus minus na minus minus x? JASON HIRSCHHORN: Hapana, mimi nina kwenda katika hiyo. Lakini mimi kuzungumza na wewe kuhusu hilo baada ya darasa. x minus minus, minus minus x kuongezwa x kwa 1. Lakini wao kufanya ni kidogo tofauti. Lakini mimi si unataka kwenda katika hiyo. Maswali mengine kuhusu kujirudia au kazi hii? Hiyo ni kweli hata pseudocode. Kwamba kimsingi code katika C ungependa kuandika kwa hili. OK, maswali yoyote kuhusu mada hapa? Yeah. STUDENT: Nina mnyonge ya haraka ya yaliyo ya uhakika na usahihi. JASON HIRSCHHORN: Floating uhakika na usahihi. Je, mtu kweli haraka nipe mnyonge ya yaliyo ya uhakika na usahihi? Wote walikuwa kufanya hivyo kwa ajili yako kuweka tatizo, hivyo ni wote familiar nayo. Au labda si nyote. Mtu yeyote? Nipe doa kuanza. Yaliyo ya uhakika na usahihi. Tatizo ni nini? Ndiyo. Victoria? Vanessa: Vanessa. JASON HIRSCHHORN: Vanessa. Sorry. Vanessa: Kuna tu idadi finite ya idadi ambayo yanaweza kuwakilishwa kwa sababu uko juu, katika yetu kesi, mfumo wa 32-bit. Hivyo aina ya kuwa na kufanya juu ya idadi ya baadhi ya. JASON HIRSCHHORN: Basi hiyo ni sahihi kabisa. Kuna tu kiasi fulani cha idadi ambayo yanaweza kuwakilishwa. Kama wewe kuzidisha namba mbili kubwa sana, inaweza kufurika kiasi ya nafasi una kuwakilisha integer. Hiyo ni kwa nini wakati mwingine sisi kutumia muda mrefu muda mrefu badala ya int. Hiyo ina nafasi zaidi. Kwamba wanaweza kushikilia idadi kubwa. Yaliyo hatua usahihi ina nini na hiyo, lakini pia ina nini na ukweli kwamba idadi decimal ni si daima kuwakilishwa. Sorry. Hebu kuweka nyuma hii up. idadi decimal 1.0 ni daima kuwakilishwa kama wewe bila kutarajia, 1.000000000. Wakati mwingine ni kuwakilishwa kama 1.000000001 au .999999999. Inawezekana kuwa hata 89 kutupwa huko mahali fulani. Hivyo idadi ya wale decimal ni si kuwakilishwa hasa kama wewe ungekuwa wao wanatarajia kuwa kuwakilishwa. Hivyo katika kuweka tatizo - ilikuwa ni mbili? - kuweka tatizo mbili, ambapo sisi kushughulikiwa na idadi yaliyo uhakika, wakati sisi alitaka yao ya kuwakilisha nini hasa sisi alitaka yao ya kuwakilisha, idadi ya pennies, au idadi ya senti, sisi kuzidisha yao na 100. Sisi mviringo yao. Na kisha sisi kukatwa kila kitu nyuma ya uhakika decimal. Hiyo ilikuwa ni kuhakikisha kwamba wangeweza kweli sawa nini hasa sisi alitaka wao sawa. Kwa sababu wakati wewe kuchukua kitu ambacho a kuelea na kurejea katika int, wewe kukatwa kila kitu kwa haki ya uhakika decimal. Kwa sababu kuna baadhi ya hatua yaliyo kutokuwa sahihi, 100.000 inaweza kuwa kuwakilishwa kama 99.999999999. Na kama wewe tu kukatwa kila kitu haki ya haki mbali, wewe kwenda kupata idadi sahihi. Yeah. STUDENT: Mimi nilikuwa na swali kuhusu akitoa. Utaratibu gani gani kutokea katika? Kama ungependa kufanya kuelea, mabano, 1 kugawanywa na 10, je, ni je, 1 kugawanywa na 10, kisha kupata 0.1, kisha kurejea ndani kuelea? JASON HIRSCHHORN: Kama wewe kufanya kuelea 1 kugawanywa na 10 - STUDENT: Yeah, na kisha ni sawa na - vizuri, kwa kawaida kuwa ni sawa katika - Yeah. Unataka kufanya hivyo kuelea, sawa? JASON HIRSCHHORN: OK, hivyo tunakwenda kutumia kwa segue katika kuhesabia majibu ya maswali haya kupitia coding. Kwa sababu pengine utasikia kuwa na mengi ya maswali haya dakika, na njia nzuri ya kuyatatua kwa njia ya coding. Hivyo sisi ni kwenda na kanuni hii hivi sasa, na kisha sisi ni kwenda nyuma na ya kificho swali alikuwa. Hivyo mstari wa kwanza - Mimi lazima kuwa imeandikwa ni - ni nini Jambo la kwanza tunataka kufanya wakati sisi kufungua faili mpya katika gedit? Mwanafunzi: Ni pamoja na. JASON HIRSCHHORN: Ni pamoja na nini? Mwanafunzi: CS50 maktaba. JASON HIRSCHHORN: OK. Nini kingine lazima sisi ni pamoja? Tuko tu kwenda kuangalia nini kinatokea wakati kutupwa kitu kuelea. Lakini je, tunahitaji ni pamoja na kama sisi ni kwenda kuandika C mpango? STUDENT: Standard I / O. JASON HIRSCHHORN: stdio.h. Sisi kwa kweli hawana haja, kwa hii mpango, cs50.h, hata kama ni daima kusaidia kwa pamoja. Lakini sisi daima haja stdio.h. STUDENT: Wakati coding katika C? JASON HIRSCHHORN: Wakati coding katika C. Basi, mimi ila ni kama hii. C file. Mimi kupata baadhi ya nzuri syntax mwangaza. Niliandika utupu ndani ya kuu. Gani utupu maana yake nini? Mwanafunzi: Je, si kuchukua yoyote amri ya mstari wa hoja. JASON HIRSCHHORN: njia tupu, katika hii kesi, kuu haina kuchukua yoyote amri ya mstari wa hoja. Katika kesi nyingine, ina maana kazi haina kuchukua amri ya mstari wa hoja. Au kazi, kama ningekuwa kuandika utupu kuu (utupu), kwamba kusema kuu ya si kurudi kitu chochote. Hivyo utupu tu ina maana chochote. Gani mimi kuandika kama ningekuwa kuchukua amri ya mstari wa hoja? Mwanafunzi: int arc c kamba arc v JASON HIRSCHHORN: int argc kamba argv. Hiyo ni kweli? Mwanafunzi: Ni char mabano nyota argv. JASON HIRSCHHORN: Ili wewe uandike mabano kamba argv au char nyota argv mabano, lakini unahitaji mabano. Kwa sababu argv ni safu ya masharti, kumbuka. Siyo string moja tu. Hivyo kamba argv ni, hapa ni kamba na mtu mmoja aitwaye argv. Mabano kamba argv ni, hapa safu ya masharti. Hivyo int mabano argc kamba argv itakuwa kitu ambacho mimi pengine kuandika. Hivyo alitaka kuokoa katika integer? STUDENT: Yeah, integer. Au katika kuelea. JASON HIRSCHHORN: Katika kuelea? Kama, kuelea x sawa na 1 kugawanywa na 10. JASON HIRSCHHORN: OK. Je, mimi magazeti nje kuelea katika printf? Nini? Mwanafunzi:% f. JASON HIRSCHHORN:% f. Nini integer? d au i. Nini kamba? STUDENT: s. JASON HIRSCHHORN: s. Jinsi gani mimi kupata line mpya? Mwanafunzi: backslash n. JASON HIRSCHHORN: Je, mimi kurudi kama anaendesha kuu kwa usahihi? STUDENT: 0. Je, mimi haja ya kuandika kwamba line, ingawa? STUDENT: Hapana OK, sisi sipendi kufanya hivyo, basi. Je, kila mtu kusoma kwamba? Inaonekana kidogo kidogo. Je, kila mtu kuona, au lazima Mimi kufanya hivyo kubwa? Nadhani kwa ajili ya kamera, tutaweza kufanya ni kidogo kubwa, ingawa. JASON HIRSCHHORN: Kama nataka upande huu . C faili ndani kutekelezwa, nini mimi kuandika? STUDENT: Matokeo ya mtihani. JASON HIRSCHHORN: Sorry? STUDENT: Matokeo ya mtihani. JASON HIRSCHHORN: Matokeo ya mtihani. Sisi walikuwa wanazungumza juu ya line hili mapema. Clang. Nini Clang? jina la compiler. Nini mstari huu? Mwanafunzi: Sets ni kwa ajili ya matumizi ya GDB. JASON HIRSCHHORN: Sets ni kwa ajili ya matumizi ya GDB. Mstari huu, nini hiyo? Mwanafunzi: code Kupunguza. JASON HIRSCHHORN: Hiyo ni chanzo faili. c file. Je, mistari hizi mbili nini? Au hizi mbili si mistari. Mwanafunzi: Ni majina ni mtihani. JASON HIRSCHHORN: Kwa hiyo dash o anasema, jina ni kitu tofauti. Na hapa wewe ni wito ni mtihani. Kama mimi hawakuwa na kwamba katika, itakuwa ni jina hili? Mwanafunzi: A.out. JASON HIRSCHHORN: A.out. Je, hii nini? Mwanafunzi: Viungo maktaba math. JASON HIRSCHHORN: Ni viungo katika maktaba math. Sisi hawakuwa ni pamoja na maktaba math, lakini tangu kwamba jambo la kawaida, wameweza kufanya imeandikwa na daima ni pamoja na math maktaba. Na vivyo hivyo, hii ni pamoja na Maktaba CS50. OK, hivyo kama sisi orodha, sasa tuna kutekelezwa aitwaye mtihani. Nitafanya hivyo, mimi kuandika mtihani. Mimi naona kwamba hatua yangu yaliyo, kama ilivyotarajiwa, ni sawa na 0. Je, hiyo - hivyo - STUDENT: Kisha kama wewe kuweka kuelea sasa, kama wewe kutupwa kama kuelea - JASON HIRSCHHORN: Tupa 1 kwa kuelea? STUDENT: Hapana, kutupwa kitu kamili - yeah. Kama wewe tu alifanya hivyo, ingekuwa kwamba kufanya hivyo ni 0.1? JASON HIRSCHHORN: OK, hivyo kweli haraka, 1 kugawanywa na 10, wale ni integers kugawanyika. Hivyo wakati wewe kugawanya integers, wao ni 0, na wewe ni kuokoa kwamba 0 katika kuelea, kwa sababu slash ni integer tu mgawanyiko. Hivyo sasa sisi ni kugeuka kitu ndani ya kuelea. Hebu kuona nini kinatokea. Tutaweza kufanya mtihani. Hivyo sasa tunaona kwamba slash hakuwa integer mgawanyiko, ilikuwa yaliyo hatua mgawanyiko. Kwa sababu moja ya hoja yake alikuwa ametiwa kwa kuelea. Basi sasa alikuwa akisema, kutibu mgawanyiko kama sisi ni kushughulika na pointi yaliyo, si kwa integers. Na hivyo kupata jibu sisi kutarajia. Hebu angalia nini kinatokea - oops. Kama nilitaka magazeti zaidi decimal matangazo, ni jinsi gani mimi kufanya hivyo? STUDENT: Point dot f, au kama wengi maeneo decimal kama unataka. JASON HIRSCHHORN: Kwa hiyo mimi magazeti 10 matangazo decimal. Na sisi sasa kuona sisi ni kupata baadhi ya mambo ya ajabu. Na kwamba huenda nyuma kwa swali lako kuhusu yaliyo hatua kutokuwa sahihi. Kuna mambo weird kuhifadhiwa katika hapa. OK, je, hiyo kujibu swali lako? Gani kingine unataka na kanuni haraka? Mwanafunzi: Mimi nilitaka kuona kama au si, kama wewe huru juu ya baadhi ya pointer, kama bado kwamba pointer alikuwa kuhifadhiwa katika ni anwani ya nini alikuwa akizungumzia hapo awali. JASON HIRSCHHORN: OK, hivyo hebu kufanya hivyo. Nyota Char PTR, hii inajenga variable aitwaye PTR ya aina char nyota. Je, mimi kuandika malloc? Alden? ALDEN: Just malloc. Lakini basi ina kuwa ukubwa wa, na katika kesi hii, mimi nadhani wewe d akizungumzia kwa Char. Hivyo Ningependa kuwa char. JASON HIRSCHHORN: OK, hivyo zaidi yaliyotokea, Ndani ya - hebu hariri. Ndani ya malloc, unataka namba ya ka juu ya chungu. Kwa ujumla, nini tumeona kwamba sisi ni kufanya ni tunakwenda malloc masharti, kwa mfano, au arrays ya integers. Hivyo kama tunataka integers 10, au 10 chars, 10 itatupa 10. Na kisha ukubwa wa chars bila kutoa sisi kwamba ukubwa wa chars, ambayo katika kesi hii ni 1 Byte. Sisi kupata 10 bytes. Kama tulikuwa na kuandika ukubwa wa int, kwamba atatupa 40 bytes. Hivyo zaidi yaliyotokea, ndani ya malloc ni idadi ya ka unataka. Katika kesi hiyo, sisi ni kupata 1 Byte. Ambayo inaonekana kama matumizi weird ya malloc, lakini kwa ajili yetu madhumuni ya hufanya akili. Hivyo kuna hiyo. Sisi ni kwenda kuwaita bure. Sisi kujikwamua ni na sisi kutumia PTR tena. Na nini unataka kuangalia? Mwanafunzi: Mimi nilitaka kuangalia kama au si kulikuwa na kitu chochote ndani yake. JASON HIRSCHHORN: Hivyo kama Ni alisema kwa kitu chochote? STUDENT: Yeah, hasa, kama bado alikuwa na kumbukumbu anwani. JASON HIRSCHHORN: Kwa hiyo unataka kuangalia thamani ya PTR? STUDENT: Yeah, hasa. JASON HIRSCHHORN: Je, mimi kuandika hapa kama nataka kuangalia thamani ya uhakika - ni nini, Jordan akasema, thamani? Au ni nini kuhifadhiwa ndani ya PTR? Mwanafunzi: anwani kumbukumbu. JASON HIRSCHHORN: anwani kumbukumbu. Basi, ikiwa mimi kuandika tu hii, utakuwa nipe thamani ya PTR. Na jinsi gani mimi magazeti nje kumbukumbu anwani? Nini string format kwa ajili ya kumbukumbu ya mitaani? Mwanafunzi:% p. JASON HIRSCHHORN:% p. % S ni kamba. % P kwa pointer. Hiyo ni kweli? Hiyo ni haki. Hivyo PTR sawa na - bado ina kitu ndani yake. Hii pengine ni zaidi kuvutia swali. Je, hiyo line nini? Mwanafunzi: seg makosa. JASON HIRSCHHORN: Nini? STUDENT: Nadhani ni seg makosa. JASON HIRSCHHORN: Hm? STUDENT: Nadhani kutakuwa na seg kosa. JASON HIRSCHHORN: Hivyo mstari huu ya kificho, nyota PTR, nini haina nyota maana yake nini? Mwanafunzi: Content ya. JASON HIRSCHHORN: Yeah. Kwenda kupata maudhui ya. Hivyo hii ni kwenda kwa kumbukumbu kushughulikia huko na nipe. Nilikuwa% c haki hapa kwa sababu kuna ni wahusika kuhifadhiwa huko. Hivyo sisi ni kwenda kwa kuwa hotuba sisi niliona - au pengine utasikia kuwa kidogo, hii ni tofauti wakati sisi kuendesha programu. Lakini tutaweza kwenda kwa anwani hiyo ambayo tunajua bado ipo na kuona nini huko. Hivyo hakuwa na seg kosa. Ni tu hakutupa kitu chochote. Anaweza kuwa kweli ametupa kitu, sisi tu hawezi kuona. Na kwamba huenda nyuma na wazo hili - na sisi siyo kwenda kupata sana katika hii, kwa sababu hiyo zaidi ya wigo wa kozi hii. Lakini kuongelea haki hapa, kama sisi akaenda zaidi ya mipaka ya safu na 1, sisi wanaweza kupata shida. Wakati mwingine, wakati wewe tu kwenda mbali na 1, wewe ni kufanya kitu kibaya, na inaweza kupata shida. Lakini huna daima kupata katika matatizo. Inategemea ni kiasi gani cha jambo baya ninyi kufanya, wewe kwenda kupata shida. Ambayo si kusema, kuwa sloppy na kanuni yako. Lakini ni kusema, mpango si daima kuacha, hata kama wewe kwenda mahali fulani wewe si wanatakiwa kwenda. mfano mzuri wa kwamba ni, mengi ya watu katika matatizo yao kuweka 3, ambayo ilikuwa 15, hakuwa na kuangalia mipaka ya bodi. Hivyo inaonekana wa kushoto, inaonekana haki, inaonekana ya juu, inaonekana chini. Lakini hakuwa na kuangalia kuona kama juu ilikuwa kweli kwenda kwenye ubao. Na mengi ya watu ambaye alifanya hivyo na akageuka kuwa katika, mpango wao kazi kikamilifu, kwa sababu ambapo bodi hiyo ilikuwa kuhifadhiwa katika kumbukumbu, kama wewe akaenda moja juu au kuangaliwa kwamba kumbukumbu mitaani, hapakuwa na kitu chochote hasa kutisha juu ya kwamba, hivyo mpango yako hakuwa kwenda kupiga kelele saa wewe. Lakini sisi bado kuchukua mbali pointi kama hakuwa kuangalia kwamba, kwa sababu wewe walikuwa kufanya kitu hawakuwa na wanatakiwa kufanya, na unaweza kuwa na wamezipata katika matatizo. Ni tabia mbaya, ingawa, pengine hakufanya hivyo. Hivyo hii ni kuonyesha kwamba, ndiyo, sisi bado wanaweza kwenda yake. Na sisi siyo kupata katika shida katika kesi hii. Kama sisi alijaribu kufanya kusoma ijayo wahusika 100, tunatarajia pengine kupata katika matatizo. Na unaweza kusoma ya kificho 100 ijayo wahusika kama unataka kwa kufanya baadhi ya aina ya kwa kitanzi. Yeah. Mwanafunzi: Tangu sisi walikuwa kwa ajili kwamba nafasi thamani halisi, sisi bila kweli kuwa na uwezo wa kuona chochote. Je, sisi kujaribu na kuweka kwamba sawa na kama c au kitu? JASON HIRSCHHORN: Mkuu swali. Je, mimi kuweka thamani kwamba - nini mstari wa kanuni mimi kuandika juu ya line saba kufanya nini alisema? STUDENT: Star PTR sawa na moja quote c mwisho moja quote. JASON HIRSCHHORN: Kwa hiyo hiyo ni kuweka tabia, c, katika eneo hilo, kwa sababu tena, kwamba nyota ina maana kwenda huko. Na wakati wa kutumiwa katika upande wa kushoto wa kazi operator, kwamba ni sawa na ishara, sisi siyo kwenda kupata kwamba thamani sana kama kuweka thamani hiyo. Sasa hebu angalia nini kinatokea. Sisi kuweka kitu pale na huko. Sisi kuitwa bure. Baadhi ya mambo pengine kilichotokea juu ya chungu. Hivyo si huko tena. Lakini tena, sisi siyo kupata katika shida kwa ajili ya kwenda huko. Mimi nina kufanya hii kwenye kanuni kuonyesha kwamba mengi ya haya maswali kwamba wewe kuwa, wao ni kweli kuvutia majibu muda mwingi. Na wao ni maswali mzuri. Na unaweza kufikiri yao nje ya yako mwenyewe kama, kwa mfano, sisi siyo katika sehemu. Yeah. STUDENT: Kwa sababu wewe si kutuma pointer mahali popote, je, unahitaji kutumia malloc? JASON HIRSCHHORN: Hivyo hii inakwenda nyuma swali yako ya awali. [? ?] Je, ni tu variable ndani? Malloc hapa ni kwamba kulazimisha. matumizi ya malloc hapa ni si kwamba kulazimisha kwa sababu ni tu variable ndani. STUDENT: Hivyo unaweza kufanya char nyota PTR sawa na hujambo? JASON HIRSCHHORN: Oh. Hivyo sisi ni kwenda kwa sasa kupata nyuma swali yako ya awali. Nadhani walikuwa hawaridhishwi na jibu langu. OK? Kama hiyo? STUDENT: Yeah. Kusubiri. JASON HIRSCHHORN: Na ambapo unataka magazeti nje? Hivyo tutaweza magazeti nje kamba kama hayo? Mwanafunzi: kuvutia. JASON HIRSCHHORN: Hivyo hii anasema hii hoja ina aina ya tabia. Hivyo hii lazima tabia. STUDENT: Just inachukua moja ya kwanza. JASON HIRSCHHORN: Hivyo hii ni kile alisema kabla. Kama nilivyosema, siyo kuhifadhi kamba ndani ya kutofautiana pointer. Ni kuhifadhi - Mwanafunzi: thamani ya kwanza ya kamba. JASON HIRSCHHORN: pepe ya thamani ya kwanza ya kamba. Kama tulikuwa na magazeti nje ya hii, sisi ni kupata thamani ndani ya pointer. Na tutaweza kuona ni kweli, kumbukumbu anwani. Je, hiyo mantiki? Sorry. Kusubiri, je, hiyo kujibu yako swali, ingawa? STUDENT: Yeah. JASON HIRSCHHORN: line hii ya code ni kujenga kamba na kisha mwingine variable pointer hiyo akizungumzia kamba hiyo, ya kwamba safu. Yeah. STUDENT: Hivyo kama sisi akaenda kumbukumbu moja kushughulikia zaidi, tungepata h? Je, ni na kuhifadhiwa kama kamba? JASON HIRSCHHORN: Kama, sisi alifanya - hivyo hii ni muhimu kufanya. Hii ni hatua ya hesabu, ambayo guys tumeona kabla na lazima kiasi starehe na. Hii ni sawa na kuandika - kama tulikuwa kuandika mstari wa kanuni, tumeona safu nukuu kabla ya. Hii inapaswa kutupatia pili thamani katika safu hii, h. Kama sisi alifanya hii, lazima pia kutoa sisi thamani ya pili kwa kuwa safu. Kwa sababu ni kwenda si kwa kumbukumbu barua pepe ya jambo la kwanza, lakini kumbukumbu ya barua pepe ya jambo moja zaidi. Na kisha dereferences nyota operator kwamba pointer. Na tena, hebu angalia. Sisi kupata h tena. STUDENT: Ni nini hasa gani dereference maana yake nini? JASON HIRSCHHORN: Dereference ni neno dhana kwa kwenda. Kwenda huo na kupata nini huko ni kwa dereference pointer. Ni tu neno dhana kwa ajili hiyo. Mwanafunzi: Kama tulitaka magazeti kamba nzima, tunaweza kufanya Ampersand pointer? JASON HIRSCHHORN: OK, sisi ni kwenda pause hapa. Sisi ni kwenda mwisho hapa. Ampersand anatoa pepe ya eneo, hivyo wakati wa kufanya Ampersand ya variable, inakupa anwani ambapo kwamba kutofautiana ni kuhifadhiwa. Ampersand pointer nitakupa barua pepe ya PTR ambapo PTR ni katika kumbukumbu. Sisi siyo kwenda juu ya kwa mfano huu. Unaweza kufikiri haya mambo juu yako mwenyewe. Lakini tena, hii inaweza hata kuwa verging kidogo zaidi ya kile unahitaji kujua kwa wigo wa hii katikati mrefu - au jaribio hili, badala. Sorry. Sisi ni kwenda kusonga mbele, kwa sababu napenda kama kwa kufanya moja coding tatizo kabla ya wakati ni up. Na sisi ni kwenda na kanuni nini nadhani ni kulazimisha zaidi ya haya mifano, atoi. Hiyo ilikuwa swali juu ya Jaribio miaka miwili iliyopita. Na mimi kuwa ni juu ya bodi hapa. Watu waliulizwa juu ya jaribio - walipewa kidogo zaidi tesxt katika swali, lakini mimi kuondolewa Nakala kwa sababu ilikuwa ni lazima kwa madhumuni yetu sasa. Ilikuwa ni baadhi tu ya background juu ya nini atoi alivyofanya. Lakini wote tunajua na ni sana ukoo na atoi. Mimi zinaonyesha Kanuni hii juu ya karatasi. Mimi pia kupendekeza kutumia mkakati kwamba tumeenda juu ya mengi katika sehemu yetu. Kwanza, kuhakikisha unaelewa nini atoi ya kufanya. Kuchora picha au kuja na baadhi picha ya akili yake katika kichwa yako. Next, kuandika pseudocode kwa hili. On jaribio, kama wote kupata ni pseudocode, angalau kuweka kitu chini. Na kisha ramani kwamba pseudocode kwenye C. Kama una kuangalia katika yako pseudocode, kama kuangalia kama kitu ni 1, kwamba ramani kwenye kama hali na kadhalika. Na hatimaye, Kanuni mpango C. Basi nenda nyuma atoi na kuchukua dakika tano kwa kanuni hii juu ya karatasi ya karatasi, ambayo pengine ni kuhusu kiasi cha muda itachukua juu ya Jaribio na kanuni atoi. Tano kwa dakika 15, tano hadi 12, tano kwa Dakika 10, ni kuhusu kiasi cha wakati wewe d kutumia katika hii swali katika jaribio. Hivyo kuchukua muda wa dakika tano sasa, tafadhali. Na kama una maswali yoyote, kuongeza mkono wako na mimi itabidi kuja karibu. [SIDE CONVERSATIONS] JASON HIRSCHHORN: OK, hivyo kwamba alikuwa dakika tano. Hiyo ilikuwa pengine juu ya kiasi cha wakati wewe d kutumia juu ya kwamba juu ya jaribio, labda ya mwisho ya chini ya wakati huo. Tutaweza kurejea katika kidogo. Hebu kuanza coding hii. Na kama sisi si kupata njia zote, majibu ya hii na hii swali jaribio zinapatikana, tena, Fall 2011 ni wakati swali hili alionekana kwenye jaribio. Na ilikuwa yenye thamani ya pointi nane juu ya jaribio wakati huo. Pointi nane ni juu ya mwisho juu ya kiasi cha pointi kitu ni thamani. Maswali mengi ni katika mbalimbali ya pointi moja hadi sita. Hivyo hii ni changamoto zaidi swali, kwa uhakika. Je, mtu yeyote kupata yangu ilianza? Kwa ujumla, ni sisi kwenda kutaka kufanya na hii kazi atoi, mantiki? Tufanye nini unataka kufanya nini? Hivyo sisi ni kwenda kuandika baadhi pseudocode. STUDENT: Convert wahusika ndani ya integers. JASON HIRSCHHORN: Convert wahusika ndani ya integers. OK. Hivyo ni jinsi wahusika wengi ni sisi kwenda haja ya kwenda kwa? STUDENT: All wao. Mwanafunzi: wahusika wote katika kamba. JASON HIRSCHHORN: All ya wahusika katika kamba. Hivyo kama sisi alitaka kwenda kwa njia ya kila tabia katika kamba, ni kitu gani katika C tumeona kwamba ina kuruhusiwa yetu kupitia kila tabia katika kamba? WANAFUNZI: A kwa kitanzi. JASON HIRSCHHORN: A kwa kitanzi. Hivyo sisi ni kwenda kwa kitanzi kwa njia ya kila tabia katika s. Basi kwa nini sisi ni kwenda kutaka kufanya wakati sisi kupata tabia ya maalum? Kusema sisi ni kupata kupita 90. Sisi kupata 9. Ni tabia. Tufanye nini wanataka kufanya na kwamba tabia 9? Mwanafunzi: Ondoa kutoka tabia ya 0? STUDENT: Kuongeza 0? JASON HIRSCHHORN: Ondoa kutoka tabia ya 0? STUDENT: Yeah. JASON HIRSCHHORN: Kwa nini unataka kufanya hivyo? Mwanafunzi: [inaudible] thamani. Int yake thamani. JASON HIRSCHHORN: OK, hivyo sisi kuchukua tabia ya 9, Ondoa kutoka tabia ya 0 kupata integer halisi 9. Tamu. Na jinsi gani unajua kwamba tabia ya 9 minus 0 tabia ni 9? Nini chati gani kuangalia? Mwanafunzi: Kuna mantiki ni tisa maeneo kati ya 9 na 0. Au unaweza kuangalia katika meza ASCII. JASON HIRSCHHORN: meza ASCII. Lakini ndiyo, wewe ni sahihi pia. Hivyo sisi Ondoa 0. Hivyo basi, tuna integer 9. Na nini tunataka kufanya na kwamba? Kama tuna 90, ni integer kwanza tuna, nini tunataka kufanya nini? Mwanafunzi: Ningependa kuweka katika integer muda safu, basi math yake baadaye kufanya hivyo ndani ya mwisho. JASON HIRSCHHORN: OK. Mwanafunzi: Unaweza kuanza mwishoni mwa safu na kisha kusonga mbele ili kwamba kila wakati kusonga mbele, kuzidisha ni na 10. JASON HIRSCHHORN: OK. Kwamba inaonekana kama pretty kulazimisha wazo. Tunaweza kuanza mwishoni mwa safu yetu, na tunaweza kutumia strleng. Tunaweza kutumia strleng katika hapa. Tutaweza kupata urefu wa kamba yetu. Sisi kuanza mwishoni. Na + moja kwanza, sisi tu kuchukua integer, na labda sisi kujenga kama mpya integer variable juu juu ambapo sisi ni hifadhi kila kitu. Hivyo sisi kitanzi kwa njia ya kila char katika s kutoka nyuma na mbele, sisi Ondoa 0, na kisha sisi kuchukua yake, na kulingana na ambako ni, sisi kuzidisha kwa nguvu ya 10. Kwa sababu moja ya kwanza, sisi kufanya nini kuzidisha tabia ya rightmost na? STUDENT: 10 0. JASON HIRSCHHORN: 10 0. Tufanye nini kuzidisha pili rightmost tabia na? Mwanafunzi: [inaudible]. JASON HIRSCHHORN: Nini? STUDENT: 10 1. JASON HIRSCHHORN: 10 1. tatu rightmost tabia? STUDENT: 10 na 2. JASON HIRSCHHORN: 10 na 2. STUDENT: Sorry, Sielewi nini sisi ni kufanya hapa. JASON HIRSCHHORN: OK, hebu kwenda nyuma, basi. Hivyo sisi ni kwenda kupata kupita katika kamba. Kwa sababu sisi ni kuandika atoi. Hivyo sisi kupata kupita katika kamba. Kusema sisi ni kupata kupita katika string 90. Jambo la kwanza tunakwenda kufanya ni kuweka mpya integer variable kwamba sisi ni tu kwenda kujenga kama integer wetu mpya. Hiyo ni nini tunakwenda kurudi mwishoni. Sisi haja ya kwenda kwa kila tabia katika kamba kwa sababu tumethibitisha kwamba tunahitaji kugusa kila moja na kisha kuongeza kwa integer wetu mpya. Lakini hatuwezi kuongeza tu kama idadi. Hatuwezi tu kuchukua 9 na kuongeza 9 kwa integer yetu. Ni inategemea mahali nini ni katika kamba. Sisi ni kwenda haja ya kuzidisha ni kwa nguvu ya 10. Kwa sababu hiyo ni jinsi msingi 10 kazi. Hivyo sisi ni kwenda kupata halisi tabia, au integer halisi posta, kwa kutoa tabia ya 0 kutoka tabia ya 9 kama tulivyofanya kwa kutoa mapato tabia ya mji mkuu wa A kutoka chochote tabia tulikuwa katika moja ya matatizo hayo. Hivyo tutaweza kweli kupata idadi kutoka kwa 0 9 kuokolewa kama idadi halisi, na sisi itabidi kuzidisha ni kwa nguvu ya 10 kulingana juu ya ambapo sisi ni katika kamba. Na kisha sisi ni kwenda kuongeza nyuma ndani ya integer wetu mpya kutofautiana. Basi nini hii bila kuangalia kama ingekuwa kuwa - tutaweza kuteka zaidi ya hapa. Kama sisi kupata kupita katika string 90 - Mwanafunzi: [inaudible]. JASON HIRSCHHORN: Lakini atoi inachukua kamba. Hivyo sisi ni kwenda kupitia kufanya. Tutaweza kupata kupita katika 90. Sisi kwenda kutoka nyuma na mbele. Sisi kuchukua 0. STUDENT: Samahani. Labda hii ni ya kijinga. Kama sisi ni kupata kupita katika kamba, kwa nini ni 90 nini tuko kupata kupita katika? Kwa sababu 90 ni integer. JASON HIRSCHHORN: Kwa sababu atoi inachukua kamba na anarudi kwenye integer uwakilishi wa kamba hiyo. Lakini string 90 ni si integer 90 au idadi 90. kamba 90 ni safu ya wawili, au herufi tatu, badala yake, 9 tabia, 0 tabia, na backslash 0 tabia. Na sisi ni kuandika atoi kwa sababu, kwa mfano, wakati kuchukua amri hoja line, na ni kuokolewa katika argv, ni kuokolewa kama kamba. Lakini kama unataka kutibu kama posta, unahitaji kubadilisha kwa halisi integer. Ambayo sisi alifanya moja ya seti tatizo letu. Ambayo tulivyofanya katika idadi ya seti tatizo letu. Kila mtu kwamba alichukua integer kama hoja ya mstari amri. Hivyo ndiyo sababu atoi yetu kufanya kazi inachukua kamba. Hivyo tena, katika mfano wetu hapa, sisi ni kwenda kuchukua moja ya mwisho. Tunakwenda Ondoa tabia ya 0 na hayo, kwa sababu wahusika 0 subtracted na tabia 0 anatoa idadi halisi 0, kulingana na ASCII math kwamba sisi kufanya. Kwa sababu wahusika ni kuwakilishwa kama tofauti na halisi yao - tabia ya a, kwa mfano, lowercase a ni 97. Siyo - oops! Siyo chochote bila kutarajia kwa kuwa, 0, kwa mfano. Hivyo kuwa na Ondoa tabia ya kupata 0. Hivyo sisi ni kwenda kufanya hivyo hapa kupata idadi halisi. Na kisha sisi ni kwenda kuzidisha ni kwa nguvu ya 10 kulingana na ambapo ni katika kamba, na kisha kuchukua na kuongeza wetu mmiliki mahali variable ili tuweze kuja na mwisho mpya integer yetu. Je, ambayo inafanya hisia na kila mtu? Hivyo sisi ni si kwenda Kanuni hii sasa hivi, kwa sababu tuko kupata short kwa wakati. Mimi kuomba msamaha kwa muda ya kwamba. Lakini hii ni nini, hopefully, ungekuwa kuwa na uwezo wa kufanya juu ya jaribio - katika sana angalau, kupata pseudocode hii imeandikwa nje. Na kisha, kama tulikuwa kuandika pseudocode, kwa kweli, tunaweza kufanya hii pretty haraka. Kila mstari wa maoni sisi tuliandika hapa tafsiri ya juu mstari mmoja wa C code. Kutangaza mpya variable, kuandika kitanzi, baadhi kutoa, baadhi kuzidisha, na baadhi kazi. Pengine tunatarajia pia wanataka kuandika line kurudi. Tunaweza pia unataka kuweka baadhi hundi katika hapa. Yeah. STUDENT: Kwa hiyo tunaweza kutibu s kama kamba halisi? Kwa sababu najua tu anwani. Kama, jinsi gani unaweza kupata urefu wa kamba kuwa kupita kwa njia ya? JASON HIRSCHHORN: Hivyo jinsi gani urefu wa kamba? Strlen. Mwanafunzi: strlen, yeah. Lakini unaweza kuweka s kama hoja kwa kuwa? JASON HIRSCHHORN: Kwa hiyo strlen inachukua nyota char. Na kinachofuata ni kwamba nyota char, na anaendelea kuhesabu mpaka anapata a backslash 0. strlen kwa kweli mojawapo ya mipango mingine sisi walikuwa wanakwenda code. Hiyo ni mtu mwingine nzuri ya code. Moja Hiyo ni kidogo rahisi, kwa sababu kama utaenda kufikiri juu ya kwamba conceptually - I just alisema kwa sauti kubwa - strlen ifuatavyo pointer na anaendelea kwenda na kuhesabu na kuweka wimbo mpaka kufikia backslash 0. STUDENT: OK, got it. JASON HIRSCHHORN: Kwa hiyo bora ya bahati juu ya jaribio 0 kesho. Kama una maswali yoyote, mimi itabidi kuwa nje baada ya hii. Jisikie huru email yangu. Kuwafikia TF yako mwenyewe kama wewe ni si katika sehemu yangu, au kupata wangu email kama unataka. Kama unataka kituko nje na kutuma tu barua pepe yangu, freakout email, mimi itabidi kutuma nyuma, kama, smiley uso, au, kama, joke au kitu. Hivyo jisikie huru kufanya hivyo pia. Bahati nzuri tena, na mimi itabidi kuona nyote wiki ijayo.