Jason Hirschhorn: Welcome līdz A5, ikviens. Mums ir aizraujoša nedēļas pirms mums, galvenokārt tāpēc, ka ir tik daudz jaunu saskaras šajā telpā. Tas ir brīnišķīgi. Daudzi no jums ir šeit nejauši, kas ir pat labāk. Tāpēc cerams, jūs pastāvīgi savieno mūs. Šonedēļ mēs esam gatavojas pavadīt lielākā daļa nodaļas Gatavojoties viktorīnas. Tātad, par mūsu darba kārtībā, mēs ejam runāt mazliet par resursu klasē, bet arī viktorīnu, un pēc tam atkal pavada lielāko daļu klases runājot par jautājumiem. Pēc tam, kad mēs esam darīts atbildēt uz jūsu jautājumiem, vai ja jūsu jautājumiem protams, ved mūs uz kādu kodēšanas, es ir izlases problēmas no midterms pagātnē, mēs kodu dzīvot sadaļā kopā, kas rada arī dažas citas labas tēmas, lai segtu izdevumus. Tātad, pirmkārt, kā mēs esam izgājuši cauri, lai pēdējo pāris nedēļu laikā, lai atgādinātu jums puiši, ir ton resursu pieejams šajā kursā. Daudzi no viņiem būs neticami noderīgi jums, kā jūs turpināt mācīties viktorīnu 0, jo tā otrdienas pēcpusdienā. Tāpēc viss, kas jums ir mācās mazliet. Ir lekciju piezīmes un avota kodu, kas jums vajadzētu noteikti izbraukšana. Skatīties šorti. Pārbaudiet study.cs50.net. Un tad, uzskaitīti turpmāk, numurs no citiem resursiem. Atkal, viktorīna 0 ir rīt plkst 01:00. Ja vēl neesat to izdarījis, pārbaudiet out Par Viktorīna 0 dokuments par Protams, mājas lapa, lai noskaidrotu kur jūs lietojat viktorīnas. Viktorīna sākas 1:10 un beidzas 70 minūtes vēlāk. Tātad, ja jums parādās pēc 01:10, tu esi gatavojas iegūt, ka daudz mazāk minūtes nekā 70 veikt testu. Tāpēc pārliecinieties, ka jūs tur uz laiku. Ja esat paplašinājums students, vai ir dažas citas pārbaudes apsvērumiem, tā varētu būt rīt 01:00. Bet atkal, pārbaudiet Par Quiz 0 dokumentu, lai pārliecinātos, ka jūs zināt, kad jūs lietojat viktorīnas. Es uzrakstīju 75 minūtes šeit. Es domāju, ka ir labi, nevis 70. Tas attiecas uz visu materiālu no nedēļas 0 līdz pagājušās nedēļas lekciju trešdien. Un atkal, par šo viktorīnu, par ka dokuments, jūs saņemsiet vienu divpusējs un 8 1/2 11 papīra lapas, kas jums izmantot kā piezīmes viktorīnas laikā. Daudzi cilvēki, ja ne lielākā daļa cilvēku, ir konstatēts, ka vislielākās noderīgs veids studēt par viktorīnas ir veikt pētījumu diagrammas vai viena sider, viņu pašu. Tā paskatās pagātnē tiem, ja jūs esat redzējis pagātnes ones. Aizsniegt draugiem, lai redzētu, kas viņi liekot uz savējo. Bet rokas uz leju, labākais veids, kā jūs varat Pētījums ir iet cauri visam un drāzt to uz leju, lai to, kas ir vai neiederas šajā lapā papīru, jo tas ir tikai patiešām noderīga, lai jūs varētu pārliecināties, jūs iet cauri visam un ir daži familiaritāte ar to. Lielākā daļa cilvēku, mēs redzam, pat ja tie ir papīra lapas sēdes tiesības pie viņiem uz viktorīnu, nav savukārt uz to, ka, atkal, ka ir ļoti process iet cauri informācija ir palīdzējis viņiem mācīties to. Vai kāds ir kādi jautājumi par viktorīnu 0? Ir visiem - Es neesmu gatavojas darīt, paceļot roku. Nekas. I gatavojas lūgt kurš sāku studēt. Bet es negribu, lai jūs visi nepalielinās rokas. Tātad, piemēram, es teicu - jā, Avi, iet uz priekšu. AVI: Kāds varētu būt noderīga lieta likts uz vienu peidžeri? STUDENTU: Tas ir atkarīgs no jums. Jason Hirschhorn: Jūs saņemsiet izmantot savu spriedumu. Noderīgas lietas likts uz vienu peidžeri, Ja Jums ir neskaidrības par lielo O runtime dažāda veida meklējumiem un veidu, nodot, ka uz tur parocīgs dandy diagramma. Tādā veidā, ja jūs lūdza, ka viktorīna, jums nav nepieciešams, lai mēģinātu skaitlis tā veic vai iemesls caur runtime. Jūs varat vienkārši kopēt to uz leju. Ja paskatās viktorīnas pagātnē, daudz reizes, tur ir darba laika jautājumus. Lai būtu piemērs labs lieta, lai jūsu vienu pager. Citas labas lietas, kas likts uz, ja jūs sajaukt par to, kā deklarēt funkciju vai ko dažādas daļas funkcija deklarācija ir, rakstiet ka tur, vispārējs versija un tad varbūt piemērs. Ja jūs sajaukt par norādes, shēma, kā norādes darbs ir iespējams, patiešām noderīga. Ja jūs sajaukt par recursion, a paraugu rekursīvā funkcija tur varētu arī izrādīties ļoti noderīga. Vai tas dod jums dažas idejas? AVI: Jums ir nepieciešams, lai izprastu Visu apkopojot process, piemēram, kā tas viss darbojas? Jason Hirschhorn: Viss , kas ir ietvertas varētu parādās uz viktorīnas. Jautājumi - bet atkal, dažas lietas būs svērtā stipri nekā citi. Dažas lietas ir jānāk klajā atkal un atkal klasē, lekcija, un apakšpunktu. Citas lietas ir ne jānāk klajā, kas bieži. Mēs esam daudz runājuši par # ietvert -L kaut ko, un tas, ko tie nozīmē apkopošanas process. Mēs esam daudz runājuši par gdb, piekļauties, šie dažādie karogi, ko mēs izmantojam, kad mēs apkopotu kaut ko, un kādi make15, piemēram, patiešām nozīmē, un tiešām. Mēs nerunājam tik daudz par katru soli apkopošanas process. Mēs esam vēl runājuši par to. Tātad, tas ir vēl kaut kas jums jāzina. Bet atkal, mēs nebrauksim, lai būtu - lietas, kas nāk klajā biežāk klasē biežāk nākt klajā vairāk bieži un ir smagāki vērtē uz viktorīnas. Atdzist. Jebkādi citi jautājumi par viktorīnas 0? Labi, tāpēc man sarakstu tēmas uz kuģa. Es devos caur mācību programmu. Es devos caur pārskatīšanas posmā no pēdējā naktī, un šajos slaidos nākt klajā ar nepilnīgu sarakstu tēmām ka mēs esam uz līdz šim CS50 un lietas, kas varētu parādās uz viktorīnas. Tāpēc es neesmu gatavojas iet cauri katrs no tiem. Tas būtu nepieciešams daudz vairāk laiks, nekā mēs esam tagad. Bet man tas šeit, cerams, jog atmiņas par lietām, kas var vai var nebūt tik pazīstams ar jums. Un man patīk pavadīt lielāko daļu sadaļā atbildēt uz jūsu jautājumiem par Šīs tēmas, tēmas, neattiecas šeit. Mēs varam rakstīt pseido kodu. Mēs varam rakstīt reālu kodu lai nodrošinātu, ka jūs - Es varu atbildēt uz Jūsu jautājumu un palīdzēt visi būtiski saprast no šiem jautājumiem daudz, lai jūs jūtaties sagatavoti un ērti nonākšana viktorīna rīt. Tāpēc pārlasīt sarakstu. Jūs, cerams, ir pienācis sadaļu ar dažiem jautājumiem, kā arī. Kad esat gatavs, paceliet roku un mēs sāktu. Paturiet prātā, ka jautājumi, kas jums ir, nav muļķīgu jautājumu. Mēs esam dzirdējuši, ka daudz. , Un jautājumi, jums ir, es esmu gatavs derēt, daudziem citiem cilvēkiem, gan te sēžam un skatoties tiešsaistē, ir, kā labi. Tātad, jūs var tikai palīdzēt cilvēkiem uzdodot jautājumus. Marcus. Marcus: Starp kaudze un kaudze, vai ir iepriekš piešķirtas procentos no atmiņas, kas ir definēta kā tas ir kaudze vai kaudzes? Vai to, kā tas darbojas, tieši tā? Jason Hirschhorn: Great jautājums. Es esmu gatavojas atgriezties izsekot mazliet. Vai visiem - lūdzu, esiet godīgi šeit. Es zinu, es esmu lūdzot jums paaugstināt savu roku priekšā jūsu vienaudžiem. Bet ir cilvēki, kas jūtas neērti ar steku un kaudzes un vēlētos, lai iet pār un ko tie nozīmē? Paaugstināt savu roku, ja - OK. Paldies. Tāpēc mēs esam gatavojas iet kaudzīti un kaudze tiešām ātri, un pēc tam pārvietoties atbildot uz jūsu jautājumu. Tātad, ja mēs izņemt lodziņu, lai pārstāvētu atmiņas datorā, kādi ir daži lietas, kas iet šajā ailē? Galvenais. Galvenā funkcija. Kur tas galvenais aiziet? STUDENTU: [nedzirdama]. Jason Hirschhorn: lai mēs likts galvenais leju šeit. Kas vēl iet šajā ailē? STUDENTU: funkcijas, kas jums zvana. Jason Hirschhorn: funkcijas ko mēs saucam. Un kur viņi iet? STUDENTU: kaudze. Jason Hirschhorn: viņi iet kaudze. Tāpēc mēs esam gatavojas nosaukt šo lieta noteikti šeit kaudze. Un uz augšu augšu, mums ir kaudze. Tāpēc atmiņa nav kaste, tāpat kā šis. Bet tas ir faktiski diezgan līdzīgs. Tas būs daudz kastes vairāk un vairāk, atkarībā no tā, cik liels jūsu dators ir vai cik liels jūsu atmiņas. Pie quote-likt pēdiņas beigās "no apakšas" ir kaudze. Un tur ir vairākas lietas kas iet uz skursteņa. Un tie ir atkarīgi no funkcijām Jums ir jūsu kodu. Jums vienmēr ir viena funkcija, kas jūsu kods sauc galvenais, lai tur vienmēr sadaļa noteikti šeit kaudze veltīta galveno. Šie posmi kaudze sauc kaudze rāmji. Kad jūs izsauktu citu funkciju, saka galvenais aicina bināro meklēšanas funkciju, mēs ieliekam vēl vienu kadru uz skursteņa. Precīzāk, mēs gatavojamies ziedot rieciens atmiņas par mūsu dators uzglabāt bināro meklēšanu vietējām mainīgie un palaist bināro meklēšanas kodu. Tāpēc mēs saucam bināro meklēšanu. Šajā rieciens atmiņas, mēs ejam saglabāt savu vietējo mainīgie. Mēs ejam, lai saglabātu tās printf zvaniem. Jebkurā gadījumā, šī funkcija ir būs jāuzglabā labi tur. Binārā meklēšana gatavojas izpildīt. Tas notiek, lai pabeigtu izpildi. Kas ir vārds C, kas nozīmē ka funkcija būtu pabeigt tā izpildi? STUDENTU: Atgriešanās. Jason Hirschhorn: Atgriešanās. Tātad, ja jūs redzat atgriešanās paziņojumu, Funkciju gali kad tas hits to. Tā binārā meklēšana dosies tās atdevi. Šī daļa atmiņas būtībā tiek atbrīvots. Un galvenais dosies atpakaļ uz izpildi. Tāpēc galvenais būs pauze, kur bija zvans bināro meklēšanu, dabūt atgriezto vērtību, un turpināt izpildi. Tas kaudze rāmis dosies prom. Ja mēs saucam rekursīvā funkcija, kas ir funkcija, kas sevi dēvē par vairāk nekā un vairāk, mēs varētu saņemt - teikt, ka mēs darīja bināro meklēšanu rekursīvi. Mēs varētu saņemt bināro meklēšanu versiju vienu, binārā meklēšana divi, binārā meklēšana trīs, bināro meklēšanu četri, bināro meklēšanu pieci. Un tad šis pēdējais bināro meklēšanu pieci dosies bāzes, un tam ir kaudze rāmji dosies atpakaļ un saglabāt slēgšanu kamēr mēs saņemam atpakaļ uz galveno. Mēs varam iet pa rekursijas mazliet. Bet tas viss ir, ja tu esi zvanot vairākas funkcijas laikā, tur būs vairāki kaudze rāmji uz skursteņa. Kaudzes, no otras puses, up šeit nav par funkcijām, nevis vietējo mainīgajiem. Tas ir dinamiski piešķirta mainīgie. Tāpēc tie ir mainīgie, kas var būt inicializēts vai nu galveno vai funkcija, kas galvenās zvanus. Jebkur jūsu kodu, viņi var tikt inicializēts. Un, lai sāktu dinamiski piešķirti mainīgs. Kādu funkciju C mēs izmantojam? STUDENTU: malloc. Jason Hirschhorn: malloc. Jūs saucat malloc. Jūs saņemsiet telpu atmiņas. Un šī vieta atmiņas ir uz kaudzes. Un šī vieta atmiņas paliek tur līdz brīdim, kad zvanīt bez maksas. Tik dinamiski piešķirti mainīgie kaudze pastāvēs tik ilgi, cik jūs vēlaties, lai pastāv, un viņiem nebūs iet prom, kamēr jūs skaidri viņiem saku, lai iet prom. Jūs varat izveidot tos vienā funkciju. Šo funkciju žetonu rāmis dosies prom. Bet tas mainīgais joprojām pastāv kaudzes, kamēr tas atbrīvojas, iespējams, ar funkciju, ko sauc par bināro meklēšanu vai neatkarīgi. Tātad šie kaudze mainīgie tur uzturēties tik ilgi, cik jūs vēlaties, viņiem palikt tur. Un viņiem likts šeit. Un tad nākamais izpaužas likts tur. Tie glabāt kļūst aizpildītas, un tie palikt tur līdz brīdim, kad zvanīt bez maksas. Un būtībā, kaudze un kaudze, kļūst Marcus jautājumu, augt uz otru. Un, ja tie uzskriet viens otram, jūs esat izmantojis visu atmiņu jūsu datoru, un jūsu programma būs atmest jo jums nav nekādu vairāk atmiņas pa kreisi, lai izmantotu. Starp tiem, ir potenciāli citas lietas. Bet uz ko attiecas šī, protams, jūs nav jāuztraucas par to. Tā, ka bija atbilde uz jūsu jautājumu. Neuztraucieties par to. Bet tas bija sen atbilde. Viss, kas jums jāzina, ir kaudze un kaudze būs - kāds sāk apakšā. Kaudze dara. Kaudze ir tur augšā. Tie augs tuvāk viens otram. Un, ja tā skar, kas ir problēma. Jūs ilga no atmiņas. Bet arī papildus Zinot, kur tos, kas tiek glabāta gan kaudze un kaudze. Curtis. CURTIS: Kad viņi saduras, ir tas, ka kaudze pārplūdes? Jason Hirschhorn: Kad viņi saduras, tas nav kaudze pārplūdes. Kaudze pārplūdes ir atšķirīgs joma ka mēs varam iet pāri, ja vēlaties. Labi, mēs būsim atpakaļ, ka mazliet. STUDENTU: Kas ir vārds sauc kad tie hit otru, kaudze un kaudze? Jason Hirschhorn: Tagad, neuztraucieties par to. Tikai zinu, - Es atbildēšu uz šo jautājumu pēc klases. Ja tie uzskriet viens otram, ilga atmiņas, jo tur ir ne vairāk kosmosa tur. STUDENTU: Atvainojiet, kas ir seg vaina? Jason Hirschhorn: segments vaina var saukt par - tas ir atkarīgs, kāpēc SEG vainas ir sauc. Dažreiz, jūsu kaudze pārplūdes, tas būs saka SEG vainu par kļūdu. STUDENTU: Kas par dereferencing null mainīgais? Ir tas, ka seg vaina? Jason Hirschhorn: dereferencing null rādītājs - Labi, tāpēc, ja jums ir rādītājs, ka jums noteikts vienāds ar null, norādes, atgādināt, veikals atmiņas adreses kā to vērtības. Un null rādītājs ir būtiski uzglabātu 0, 0-th jārisina šajā mainīgajā. Tātad 0x, 0, 0, 0, 0, un tā tālāk. Ka 0-th adrese atmiņu, kas nav mūsu attēlu, kas ir tur augšā kaut kur, kas ir aizsargātas uz datora. Mēs nav atļauts pieskarties to. Tātad, ja jūsu programma ir izpildes, ja kaut kas mēģina iet uz atmiņu adresi 0, tas zina, ka kas ir tukša vērtība. Tā zina, nekas būtu tur. Tātad, ja jūs mēģināt izmantot kaut ko tur un pret kaut ko, piemēram, tur, vai mēģināt iet uz šo vietu, jūs esat gatavojas iegūt seg vaina vai kļūda. Tas, ka atbildi uz savu jautājumu? Un tagad mēs iesim atpakaļ kaudze pārplūdes. Lietas steku, kā jūs puiši ir redzējis, jo - pieņemsim pievērst ciešu up of skursteni rāmja. Var visi redzēt, ka? Tāpēc mums ir kaudze rāmi. Mēs esam ietaupot masīvu tik vietējā mainīgais šo funkciju. Tā teikt, mūsu masīvs ir piecas vietas. Tiks saglabāti visi pieci no tiem šajā kaudze rāmi. Ja mēs sāktu rakstīt tālāk robežas šī masīva - tāpēc, ja mēs sāktu rakstīt par, pieņemsim, ka ir 0. Tie ir pieci indeksi Mūsu masīvs. Ja mēs sāktu rakstīt uz indeksu 5, kas mums nav, kad mums ir masīva izmēru 5, mēs sākam rakstot uz indekss 6, 7, 8, 9, var iegūt Stack Pārplūdes kļūda. Parasti tas nav - jums būs iespējams nokļūt nepatikšanās ja jums iet pār pa vienam. Bet vispār, jūs nokļūsiet visvairāk nepatikšanas, ja jums iet pār ar daudz un doties tik tālu pāri, ka jūs rakstāt pār atgriešanās adresi, kas funkcija, kas atrodas apakšā kaudze rāmja. Tāpēc, vai ne? Tu - in - sorry. Nav ", jo labi." Kaudze rāmi, jums ir Jūsu vietējās mainīgie. Pašā apakšā skursteņa rāmis ir atgriešanās adresi. Tas ir, ja funkcija iet tad, kad tas ir beidzies. Un, ja jūs pārrakstīt, ka atgriešanās adresi, tad, kad tas kaudze rāmis, kad jūs iet caur kaudze rāmis un īstenojot katru pozīciju, jūs esat gatavojas doties uz savu jauno atpakaļadresi kas ir rakstīts tur, nevis faktiskais vienu. Un tas, kā mēs esam redzējuši daži drošības pārkāpumiem var notikt ar datoru. Tātad kaudze pārplūdes, īsi sakot, ir tad, kad jūs pārrakstīt daļu kaudze jūs vajadzēja izmantot, vietējās mainīgais jūs vajadzēja izmantot, un jo īpaši, kad jūs sākat pārrakstīšanu svarīgas lietas, piemēram, atpakaļ adresi. Un tas ir, ja jūs saņemsiet kļūdas. Vai varbūt pat jūs varētu sākt pat rakstot uz - saka binārā meklēšana bija tieši virs galvenās. Ja jūs pārrakstīja daudz, jums varētu rakstīt par galveno. Bet vispār, jūs saņemsiet kļūdas, pirms Pēc tam, ka dators zina jūs darāt kaut ko nevajadzētu darīt. Jā. Students: Kāda ir atšķirība starp kaudze pārplūdi un bufera pārpildes? Jason Hirschhorn: Bufera pārpildes ir vairāk vispārējs veids ko es tikko aprakstīts. STUDENTU: Tik kaudze pārplūdes ir piemērs bufera pārpildes. Jason Hirschhorn: Tieši tā. Tas ir masīvs, mēs varam iedomāties, kā buferis, telpu, lai lietas iet iekšā Tas ir kaudze bufera pārpildes. Mēs varētu būt kaudze bufera pārpildes. Ja ir bijis buferis, kas ir vien ir masīvs kaudze, un mēs pārrakstīja šīs robežas, tad mēs būtu ir kaudze bufera pārpildes. Un plašāki par šo kursu, viņi atklāti mazliet savādāk. Kompilators ir īpaša veidi, kā atklāt katra. Bet bufera pārpildes ir vispārīgāka par to, ko es aprakstīju veidu, kas bija kaudze bufera pārpildes. Bija, ka atbildi uz savu jautājumu? Salds. Tur bija kādi citi jautājumi, kas saistīti lai kaudze vai kaudzes? Jā. STUDENTU: Es zinu, jums ir bezmaksas stīgas tāpēc, ka viņi ir kaudze un jūs nevēlaties, lai noplūdes atmiņu. Bet jums ir, lai atbrīvotu globālo mainīgo un sīkumi, piemēram, ka? Vai arī tie automātiski atbrīvoti? Jason Hirschhorn: Labs jautājums. Tātad CS50.H, mēs radām šo lietu lai jūs sauc virkni. String ir patiešām to, ko? STUDENTU: Char zvaigzne. Jason Hirschhorn: char zvaigzne, rādītājs līdz rakstzīmei rādītājs masīvs rakstzīmes. Tas ir tas, ko virkne ir. Tāpēc mums ir nepieciešams, lai atbrīvotu to, jo getstring, kuru mēs izmantojām daudz - string nosaukums ir vienāds getstring - ka mallocs mums dažas atmiņas par kaudze, un pēc tam atgriež rādītāju uz pirmais simbols, kas string, char zvaigzne. Tātad it kā, ja jums nav bijis rakstot free uz kādu no jūsu stīgas ka jūs esat tik tālu sauc, jums ir nav noplūdes dažas atmiņas. Protams, mēs neesam runājuši par tā, lai neviens ir gotten nepatikšanas, lai dara to. Bet iet uz priekšu, jā. Kad jūs zvanu getstring, tu esi mallocing dažas vietas uz kaudzes. Un, ja jums nav zvanīt bez maksas, vēlāk, ka string, jums ir atmiņas noplūde. Ka atbildi uz savu jautājumu? Yeah STUDENTU: Tātad, lai to izdarītu, mēs izmantojam brīvu tieši pirms atgriešanās? Tāpat, ietvaros, es domāju, ja mēs sakām, piemēram, int galvenais, laikā Kodeksa darbības joma, kas ir robežās, kas cirtaini bikšturi, tieši pirms - jūs zināt, kur jūs vēlaties parasti laiž atpakaļ. Vai jūs nodot bez maksas pirms tam? Jason Hirschhorn: Tātad jūs varat ievietot bez maksas kur vēlaties ievietot bez maksas. Tāpēc, ka tie ir dinamiski piešķirta mainīgie, jo tie var dzīvot neietilpst īpaši funkcija, ja jūs zvanīt malloc in atsevišķa funkcija, piemēram, getstring, jūs varat zvanīt bez maksas galvenais. Jums nav nepieciešams, lai izsauktu to konkrētajā funkcijas kur malloc sauc. Bet jums ir nepieciešams, lai izsauktu to pirms galvenajām atgriešanās. Un tas tiešām ir atkarīgs. Tas atkarīgs no tā, kāpēc jums malloced ka telpu pirmajā vietā. Daži cilvēki zvana atbrīvotu diezgan ātri. Daži cilvēki nevar zvanīt bez maksas, kamēr end to programmu. Un tie būs iet cauri un bez maksas viss. Tas atkarīgs no tā, kāpēc jūs sauc malloc. STUDENTU: Un ko jūs teiktu ja jūs sauc izmantošanas getstring? Jūs teiktu, ka bez maksas, ko? Jason Hirschhorn: Tātad sintakse bez maksas ir vienkārši bezmaksas, atvērtā paren, close paren, un nosaukumu rādītāju. Tātad, ja jūs rakstīt String nosaukums vienāds getstring, jūs likts vārdu šeit. Tas ir vārds rādītāja. Un tā zina, lai atbrīvotu šo atmiņu. STUDENTU: Tad, kad tas atbrīvo šo atmiņu, rādītājs joprojām norāda uz šo vietu atmiņā? Vai ir rādītājs arī iztukšo adrese, ka tas norāda uz. Jason Hirschhorn: Mums ir jāmēģina to. Mums vajadzētu kodu, kas. Let 's nāk atpakaļ, kad mēs nokļūt kodēšanas, un pieņemsim kodu, kas. Un, ja jūs vēlaties, lai noskaidrotu atbildi to, ka jūs varat arī kods, kas starplaikā. Bet tas ir liels jautājums. STUDENTU: Vai ir iespējams bez kaut pārāk ātri? Tātad, jums joprojām ir nepieciešams to savu programmu, un jūs atbrīvoja, ka atmiņas vietas? Jason Hirschhorn: Jā. Tas ir iespējams, ja jūs brīvus kaut un tad jūs to izmantot atkal, jums būs uzskriet kļūda. Bet tas ir par jums, jo jūs atbrīvoja kaut ko, un sauca to vēlāk. Tā, ka bija programmētāja kļūda. Bet jā. Jūs varētu rakstīt, ka. Kādi vēl jautājumi par - Jā. STUDENTU: Tātad, ja jums ir paredzēts tikai atbrīvotu to vispār pirms programmas beigām, tas nozīmē, ja programmas beigām, un jums nav atbrīvot to, ka atmiņa ir vēl piešķirts? Jason Hirschhorn: Ja jūsu programma beidzas un esat aizmirsis, lai atbrīvotu kaut ko, tad ka atmiņa tika piešķirti visā kalpošanas jūsu programmā. Ja jūsu programma aizveras pilnībā, ka atmiņa nav gatavojas palikt tur uz visiem laikiem. Dators ir pietiekami gudrs, lai zinātu ka tad, kad programma aizveras, tā būtu atbrīvoties no visa atmiņu, kas bija saistīta ar šo programmu. Tomēr, ir instrumenti, jūs varat palaist par programmu, lai noteiktu, vai, ja programma pabeigta, tu aizmirsi , lai atbrīvotu atmiņu. Un par savu nākamo problēmu noteikt, kur jūs izmantojat malloc un izmantojot norādes, jums būs darboties šajā programma par savu programmu, lai redzētu, vai, ja galvenie atgriežas, jums bija dažas lietas, kas bija pa kreisi unfreed. Tātad viņi nav gatavojas palikt malloced uz visiem laikiem savā datorā. Tas varētu būt izšķērdīgs, jo ļoti ātri, datori varētu pietrūkt atmiņas. Bet, ja tie darbojas līdz beigām jūsu programma un viņi nav atbrīvoti un jūsu programma iziet, tas joprojām ir problēma ka šis instruments palīdzēs jums risināt. STUDENTU: Vai tas Valgrind? Jason Hirschhorn: Ir sauc Valgrind. Un jūs būsiet - STUDENTU: Bet mums nav jāzina ka viktorīnu, lai gan? Es domāju, tas bija runāja par mazliet lekciju. Jason Hirschhorn: So Valgrind ir nosaukums šo rīku. Zinot to, ko tas ir pietiekami viktorīnas. Bet jums ir neizmanto to vēl par savu Problēma noteikti tāpēc, ka mums nav bijis Problēma, kas, kas ir skaidri jārisina ar malloc, vai jūs izmantojat malloc. Tātad jums ir neizmanto Valgrind vēl. Bet jūs to izmantot agrāk nevis vēlāk. STUDENTU: Vai jūs varat atkārtot kāda Valgrind ir? Jason Hirschhorn: Sorry? STUDENTU: Vai jūs varat atkārtot to, ko mērķis Valgring ir? Jason Hirschhorn: Valgrind ir nosaukums - piemēram GDB palīdz jums atkļūdot savu programmu, Valgrind palīdz jums saprast, ja lietas nav atbrīvoti ja jūsu programma aizveras. Tātad jūs palaist to uz savu programmu. Un jūsu programma izejām, un tas teiks jūsu programma sauc malloc tas daudz reizes šo daudz baitu, un jūs tikai sauc par brīvu šo vairākas reizes. Un lai jūs atstājis šos daudzos baiti bez atbrīvoja. Vai tas būs, ka jūs esat atbrīvoti visu. Labs darbs. STUDENTU: OK. Un to sauc Valgring? Jason Hirschhorn: V-A-L-G-R-I-N-D. STUDENTU: jautājums par norādes. Tā teikt, jums ir n zvaigzne x ir vienāds ar kaut ko. Kas ir vienāds, neatkarīgi jūs nodot tur ir tā, ka to, kas tiek likts iekšā kāda x ir vērsta uz, vai rādītājs no x? Jason Hirschhorn: Vai jūs atkārtot jautājumu? Mēs varam izdarīt to, kamēr jūs to sakāt? STUDENTU: Ar viktorīnu, faktiski, vienu jūs mūs sūtījis, tas bija, piemēram, char star patiesība vienāds CS50 klintis, vai ne? Tātad tas nozīmē, ka šis CS50 ieži ir tas, kas patiesība ir vērsta uz? Jason Hirschhorn: Tātad jūs runājat par char zvaigzne virkni, kā , kas darbojas? Jā. OK. Pieņemsim izdarīt to vairāk nekā šeit. [SIDE Saruna] Jason Hirschhorn: Tātad šis mainīgais būs tipa char zvaigzne. Cik liela ir mainīgs Tipa char zvaigzne? Cik baiti? Studenti: četri. Jason Hirschhorn: Tas ir četri baiti. Cik tiesības ir mainīgs int tipa zvaigzne? Studenti: četri. Jason Hirschhorn: četri baiti. Ja tas ir rādītājs, tad tas vienmēr ir četri baiti, jo norādes, to vērtība ir atmiņas adrese. Un atmiņas adreses uz CS50 Ierīce ir četri baiti. Tātad, kad mēs saucam getstring, vai tad, kad mēs teiksim, stringname vienāds, un pēc tam pēdiņas nodot virkni, mēs esam liekot - labi, ka ir nedaudz atšķirīgs. Mēs darīsim getstring kā piemērs. Vai char zvaigzne kaut vienāds virkni. Žēl, iedodiet man piemēru izlasīt? STUDENTU: char zvaigzne patiesība ir vienāds "CS50 rocks" pēdiņās. Jason Hirschhorn: Tātad šī zvaigzne, tas mēs saucam šo mainīgo X mūsu par sugas. Mēs esam izveidojuši mainīgo sauc x. Tas ir veids char zvaigzne. Tas ir rādītājs uz virkni rakstzīmju. Tātad, šeit lejā - Tātad, tas ir, kā tas būtu strādā atmiņā. Tas varētu glabāt atmiņas adresi. Tā varētu glabāt atmiņas adresi pirmais simbols masīvā. Un tad, kad jūs pēc rādītājs, jūs būtu iegūt pirmo rakstzīmi. Un, ja jūs lasāt šo lietu, piemēram, string, jūsu dators ir gudrs pietiekami, lai zinātu, izlasiet visu šo lietu , līdz tas kļūst par pretreakcijas 0. Bet, ja jūs lasāt to rakstzīmi laiks, lai jūs atkārtojot caur Tas string, tad jums būs tikai lasīt raksturu laikā, kamēr jums slīpsvītru 0. Kas varētu atbildēt uz Jūsu jautājums, though. STUDENTU: Jā, bet jums nav malloced ka kosmoss vēl par šo rādītāju. Jason Hirschhorn: Tāpēc es neesmu pilnīgi pārliecināts jūs meklējat tieši to, jo man nav veikt šo testu. , Kas bija vajadzēja būt noderīgs resursu no cita TF. Ja jūs veidojat virkni par sakraut vai kā vietējās mainīgo, tas būs vienkārši masīvs maksas nevis parasti char zvaigzne, kas norāda uz citu stīgu. Bet es nezinu. Tas varētu būt rādītājs uz citu string uz skursteņa, kā arī. Jā. STUDENTU: Es zinu, ka jums ir nepieciešams, lai piešķirt atmiņu, ja rādītājs ir kļūst deklarēta iekšpusē citas funkcijas. Vai jums ir nepieciešams darīt to pašu, ja tas ir tiek pasludināts iekšpusē galvenais, jūs izmantojat to iekšpusē galvenais? Jason Hirschhorn: Tātad, jā. Jūs varat deklarēt rādītāju uz jebkuru atmiņas adrese atmiņā. Tas var būt atmiņas adrese vietējā mainīgs, lai gan nereti, cilvēki nedeklarē atmiņas adreses vietējiem mainīgie, jo tie iet prom, kad šī funkcija atgriež, kas Tāpēc mēs parasti malloc lietas. Bet jā, jūs varētu pasludināt rādītāju uz citu vietējo mainīgo. Tas ir vienkārši parasti nav izdarīts. Bet es varētu apskatīt, kas specifiska lieta pēc klases. Jā. STUDENTU: Es domāju, ka tas ir sava veida par to, kas tiek prasīts. Tas šķiet dīvaini, lai inicializēšana rādītājs nav tik adresi, bet to, kas šķiet vērtību. Šķiet, tāpat CS50 ir tas, kas ir iekšā lieta ir norādīja uz un nevis faktiskā adrese, vai ne? Jason Hirschhorn: Tāpēc, ka ir nav gadījums, though. Tas nav tas, kas notiek. Kad jūs atzīt char zvaigzne, tas ir atmiņas adrese. Norādes ir visas atmiņas adreses norāda uz kaut ko citu. Ka kaut kas cits varētu būt kaudze, bet gandrīz vienmēr ir ieslēgts sakraut tā, kā mēs redzēsim to izmanto. Bet stringname vienāds dubultās citātu "Getstring," mēs varam redzēt, ka, un mēs var meklēt, izmantojot šo un kodu, kas. getstring virkne netiek saglabāts ka mainīgs, vai kāds string vārds netiek saglabāts, ka mainīgs, jo tas nav kā norādes strādāt. Vai tas ir jēga? STUDENTU: Jā. Jason Hirschhorn: OK. Cerams, ka nebija mulsinoši ikvienam. Bet, ja tas bija, mēs varam apskatīt to vēlreiz mazliet, jo mēs esam patiesībā notiek ar kodu kaut ko, kas, cerams, strādā ar stīgām un palīdzēt jums justies ērtāk ar tiem. Jebkādi citi jautājumi, kas saistīti ar šiem tēmas un citām tēmām, kas Es nolikšu atpakaļ uz augšu? Un - tiesības tagad. Jā, Alden. ALDEN: Tātad tas ir pilnīgi nesaistīts, bet mēs varam tikai iet pa ļoti ātri, kas mums ir jāzina par starpību starp 32 un 64-bitu mašīna? Jason Hirschhorn: Jā. Tātad, 32 biti ir, cik baiti? ALDEN: Tas ir četri baiti. Jason Hirschhorn: Tas ir četri baiti. Un 64 bitu ir, cik baiti? STUDENTU: Eight. Jason Hirschhorn: Astoņi baiti. Tātad vēlreiz, astoņi biti ir viens baits. Tavs CS50 ierīce ir 32-bitu mašīna. Tāpēc atmiņas adreses četri baiti. Ir 2 līdz 32 atmiņas adreses. No 0 līdz 2 līdz 32 mīnus 1. Un es neesmu pozitīvs, bet tas ir droši vien joma, kas jums ir nepieciešams, lai zinu par 32 bitu mašīna, ka atmiņa adreses ir, atkal, četri baiti garš, un tas ir maksimālais apjoms atmiņas adreses. Arī datu tipi - tas varētu būt kaut kas tik labi, ka ir vērts pieminēt. Par datu tipu lielums ir atkarīgs mašīna jūs strādājat ar. Tātad char, viena raksturs, ir veids, kā daudzi baiti uz mūsu CS50 iekārtas? Vienu baitu. Un tas ir tiešām viens baits kā labi uz 64-bitu mašīna. Un lielākā daļa datu tipi ir vienādi numuru baitu gan mašīnām. Bet daži datu tipi būs atšķirīgs uz abām mašīnām. Lai būtu iespējams Vienīgais, kas jums ir jāzina. Bet pat tas, es domāju, ir ārpus robežas - Es esmu gandrīz pozitīvs, ja paskatās atpakaļ vecās viktorīnas, tā saka, pieņemt, kodēšanas problēmas, jūs izmantojat 32-bitu mašīna. Bet ir, lai iet kopā ar to, kas Gadījumā, ja jūs interesē, ir datu veidi, kas ir tāds pats lielums uz visām mašīnām. Ja esat redzējis kaut ko līdzīgu uint32_t, jūs var vai nebūtu redzējis, ka. Tas ir datu tips. Kas saka, ka 32 biti vienalga ko mašīna tas ir ieslēgts. Tātad, kad cilvēki rakstot pārnēsājamu kods, viņi, iespējams, neizmantos Ints. Tie būs vietā izmantot šos citus datus veidiem, ka viņi zina, kas ir tāds pats lielums par katru mašīnu. Madhu. Madhu: Man bija jautājums par apkopošanas process. Tātad, ja jūs esat rakstiski programma, kas izmanto bibliotēka, piemēram, CS50 vai kaut ko piemēram, ka es zinu, ka bibliotēka ir, kādā brīdī, būs apkopoti un saistīti iekšā Bet cik daudz tas notiek laikā, apkopošana jūsu programmā? Kāda daļa no šīs bibliotēkas procesu notiek tad, kad tu esi Sastādot savu programmu? Jason Hirschhorn: Tātad, pieņemsim iet pāri parasti soļi šī procesa. Jūs rakstāt savu. C failu. Jūsu. C failu, jums # iekļaut savu header bibliotēkas, piemēram, cs50.h. Ko tas asas ietver line darīt, lai savu programmu? Akchar. AKCHAR: Tā piebilst prototipus funkcijas no galvenes failus bibliotēkās. Jason Hirschhorn: Tieši tā. Tā piebilst, šo funkciju prototipus savu kodu. Tātad, ja jūsu kods tiek apkopota sākumposmā, kompilators zina ka šīs funkcijas patiešām pastāv, un ka kaut kur tie ir definēti. The. H faili neietver definīcijas šīm funkcijām vai kā viņi faktiski strādā. Cs50.h tikai ietver kaut kas saka getstring ir reāla lieta, ka var notikt. Un standardio.h saka printf ir reāla lieta, kas var notikt. Tātad jūsu c valoda ar šo. Header failu izpaužas pārvērtās dažus mašīnlasāmā kods, kas galu galā izpaužas pārvērtās bināro kodu, 0 s un 1 s. Un tas ir kods, kas galu galā izpaužas izpildīts. -L CS50 line - piemēram, kad jūs esat rakstiski šķindēt - un tad jūs iekļaujat-l CS50, Rakstot, ka iekšā Un jūs redzēsiet, ka. Rakstot izdarīt, jūs redzēt, ka līnijas šeit. Un mēs redzam, ka sekundē, kad mēs kodu vai vēlāk, kad mēs kodu. Bet tas, l CS50 line dara kaut ko nedaudz savādāka nekā # include cs50.h. Ko tas-l CS50 līnijas darīt? Avi? AVI: Es gribu teikt, ka tas ir saistīts Bibliotēka funkcijai zvanu, piemēram,. o failus. Jason Hirschhorn: Tik ļoti tuvu, ja ne vietas-on. -L CS50 ņem bināro failu un apvieno to ar savu bināro failu. Tātad cs50.h, nav jēgas pagrieziena cs50.h no C valodas bināro ik reizi, kad tas tiek izmantots. Tas būtu muļķīgi, jo tas varētu atkritumu daudz laika. Tātad tas jau ir apkopoti un pārvērtās izpildāmā. Un tagad tas būs jāapvieno ar failu beigās. Tā, ka šie 1 s un 0 's gatavojas apvienoties ar saviem uzņēmumiem un 0 s beigās. Tātad tagad jūs faktiski ir faktiskais 1 s un 0 s, kas nosaka, cik getstring, Piemēram, darbu, vai arī kā printf, Piemēram, darbojas. Un, lai iegūtu vairāk informācijas, tur īsi kompilatoru, ka Nate dod, ka Jums vajadzētu pārbaudīt, kas iet caur šiem soļiem. Bet - Jā. STUDENTU: Vai tie vienmēr o failus. ja viņi bibliotēkas formā, gatavi jāapvieno, saistītas - tāpat kā viņi ir bināro kodu? Jason Hirschhorn: OK. Ko - STUDENTU: Vai tas vienmēr attiecas uz bibliotēkas, kad jūs saite viņiem? Jason Hirschhorn: Jā. Tātad tur ir. S failus, kas būs mašīnu kodu, kas būs arī noslēpumains jums. Jums nav jāuztraucas par tiem. Bet vispār, jā, tie būs būt. o failus gatavi iet. STUDENTU: Tātad, ja jūs kuģis bibliotēka, tu tikai kuģis . h un. o? Jums nav kuģis. C vai. S. Jason Hirschhorn: So - un tas ir šajā īsajā, kā arī, ja šo informāciju, šķiet, nāk maz ātri. Bet īsi par kompilatoru runā par to, kā labi. Kad jūs kuģis bibliotēku, ja jūs kuģis . h header failu, tos funkciju prototipus, un 1 s un 0 s, tas ir viss, kas jums ir nepieciešams, lai dotu. Jums nav nepieciešams, lai dotu kā funkcija darbojas,. c fails. Sakarā punktu ieguvei, vai punktu API, punkts šajā SPL, Stanford portatīvie bibliotēka, tā ir Jums nav jāuztraucas par to, kā jaunā GRect darbus, vai to, kā virzīties uz darbu, vai to, kā pievienot darbus. Viss, kas jums jāzina, ir tas, ka add ir funkcija, ka jūs varat izmantot, un tas tiek panākts. Tātad jums tiešām nav nepieciešams zināt, kā tas ir rakstīts C Jums vienkārši nepieciešams, lai zināt, šeit ir funkcijas, ko viņi darīt, un šeit ir 1 s un 0 s ja jūs patiešām vēlaties, lai tos izmantot. Atdzist. Kādi vēl jautājumi par kompilatoru vai citām tēmām uz kuģa? STUDENTU: Man ir jautājums par Īstenojot rekursīvs funkcijas. Jautājums par rekursijas. Man bija sajūta, ka varētu nākt klajā. Tā ļauj ātri iet cauri rekursijas ar specifisku Piemēram, faktoriālā funkcija. Jo tas ir piemērs, kas bieži nāk uz augšu, vai tiek izmantots lai ilustrētu rekursija. Tāpēc "4!" ir lasāma kā 4 faktori. Un ko 4 faktoriāls nozīmē? Ko tas dara? Kā jūs aprēķināt 4 faktoriālu? 4 reizes 3 reizes 2 reizes 1. Tātad vēl viens veids, kā rakstīt 4 faktoriālu ir rakstīt to. 4 reizes 3 faktori. Jo 3 faktoriāls ir 3 reizes 2 reizes 1. SO 4 reizes 3 faktoriāls ir 4 reizes 3 reizes 2 reizes 1. Tas ir iemesls, kāpēc faktoriāls ir lieliska kandidāts rekursijas, jo tas ir skaidrs, ka tur ir kaut kas notiek vairāk un vairāk un vairāk par mazāks vairākas lietas līdz jūs sasniedzat beigām. Kad jūs sasniedzat 1, 1 faktoriāls ir 1. Jūs nevarat iet daudz tālāk. 0 faktoriāls tiek definēts kā 1. Tātad, ja jums ir 1 vai 0, tu esi gada beigās, un jūs varat sāk iet atpakaļ uz augšu. Tātad, ja mēs vēlējāmies, lai rakstītu rekursīvo funkciju, lai aprēķinātu faktoriālu, mēs esam gatavojas rakstīt dažus pseudocode par to tagad. Pirms mēs rakstām, ka pseudocode - Es došu jums, puiši pāris minūtes rakstīt pseido kodu vai vienkārši domāju, ka par to - ir divas lietas, kas ik rekursīvā funkcija ir. Kas ir šīs divas lietas? JACK: Tas ir, lai izsauktu sevi. Jason Hirschhorn: Noah? Ak, Jack. Iet uz priekšu. JACK: Tas ir, lai izsauktu sevi. Jason Hirschhorn: So rekursīvs funkcija ir rekursīvo zvanu, zvanīt uz sevi. Tas ir viens. Un, kas ir cita lieta? JACK: bāzes scenārijs. Jason Hirschhorn: bāzes scenārijs. Bāzes scenārijs ir, lūk, ja mēs apstāties. Tātad jūsu funkcija izpaužas sauc. Bāzes scenārijs ir pirmajā vietā. Jūs vēlaties zināt, ja jūs beigās. Un, ja jūs neesat beigās, jūs padarīt jūsu rekursīvas zvanu. Un jūs iet caur šo funkciju atkal, pārbaudiet savu bāzi lietu vēlreiz. Ja jūs neesat beigas, jums pelnīt cits rekursīvs zvanu, un tā tālāk, un tā tālāk. Tas ir iemesls, kāpēc rekursīvas funkcijas vienmēr nepieciešams šos bāzes lietas, un tie, rekursīvas zvani. Ja jums nav rekursīvas zvanu, tas nebūtu rekursīvas funkcijas. Ja jums nav pamata gadījums, Jūs varētu iet uz visiem laikiem, un nebūtu beigas. Un bāzes scenārijs vienmēr ir pirmajā vietā, jo jūs vienmēr vēlaties pārbaudīt ja jūs beigās pirmās. Tātad, pirms mēs kādu pseudocode, kāpēc nav jūs ņemt minūti, lai padomātu par cik rekursīvs faktoriāla funkcija būtu rakstīts? Tāpat, kā daudz, kā jūs darāt, rakstot to veic uz papīra ir ko jūs nāksies darīt viktorīnas rīt. Tāpēc, iespējams, laba prakse, lai padarītu Noteikti kodu jūs rakstiski leju uz papīra lapas - vai jūs varat darīt to. Jūs zināt, kur semikoliem ir. Atceraties sintaksi. Jo jūs nevarēsiet būt kompilators pateikt jums ir pieļāvusi kļūdu. Arī pa šo līniju, rīt, kad Jums ir kodēšanas problēmas, ja jūs ir steidzās uz laiku, vai arī, ja jūs esat ļoti sajaukt par to, kā jūs vajadzēja rakstīt konkrētu lietu C, tas varētu pienākties jums rakstīt pseido kodu vai rakstīt komentārus, kā arī. Jo tur ir daļēja atlaide par jautājumiem par viktorīnas daudz. Lai jūs varētu steidzināt, vai arī jūs var tikai sajaukt. Rakstot komentāros vai pseido-kodu bieži vien ir veidi, kā jūs var saņemt daļēju kredītu. Tāpēc neatstāj kaut tukšu viktorīnas. Tur nav sods par liekot lietas iekšā Patiesībā, ieviešot pseido-kodu vai komentāri ir gatavojas palīdzēt greiders izdomāt, ja jūs tiešām zināt, ko jūs runājat, un varbūt balvu Jums dažas daļēju kredītu par to. Arī pa šo līniju, skaidri rakstīt. Ja mēs nevaram īsti tas, ko jūs esat rakstiski, Mēs nebrauksim, lai zvanu jums pusnaktī rīt skaitli , ko jūs wrote. Mēs esam tikai gatavojas pacelties punktus. Skaidri uzrakstīt, lai mēs varētu dzirdēt, vai drīzāk, mēs varam izlasīt, ko jūs rakstījāt. Un, ja tā saka divus teikumus, nerakstiet punktu. Sekojiet instrukcijām. Skaidri rakstīt. Un rakstīt šos komentārus, vai pseudocode jautājumiem, kas varētu piešķirt daļēju kredītu. Labi, iesim uz faktori. Tāpēc mums ir funkcija faktori. Ja es būtu, lai faktiski rakstīt to C, kas man ir nepieciešams, lai pirms nosaukuma Funkcijas? Atgriezes tipa, kas šajā gadījumā, mēs arī tā int. Un tad iekšpusē cirtaini bikšturi, ir kas notiek iekšpusē cirtaini bikšturi funkcija? Studenti: Argument veids. Jason Hirschhorn: Tās argumenti. Tāpēc faktoriāls būs iespējams pieņemt argumentu. Tas būs iespējams veikt tikai vienu argumentu. Un mēs sakām tā ņemšu vesels skaitlis sauc x. Un atkal, rakstot prototips funkcija vai rakstot funkciju savu kodu pirms definējot to, jums rakstīt datu tipu un nosaukumu ka mainīgais tikai par šo funkciju. Tātad jūs varat nodot kādu numuru uz šo funkcija, tas būs minēta kā x iekšēji. Mums ir mūsu Faktoru funkcija. Mums ir nepieciešams divas lietas, bāzes lietu un rekursīvas zvanu. Kas ir bāzes scenārijs par faktoriāls? Kāds, kurš rakstīja to, un kas nav runā vēl, kas ir pamats gadījumā faktoriāls? Students: ja n ir mazāks par 2, return 1. Jason Hirschhorn: Ja n ir mazāka par 2, return 1. Man patīk, ka, jo tas rūpējas par 0 un 1. Tāpēc mēs darīsim x <2, atgriešanās 1. Ja mēs pagājis 0, ja mēs pagājis 1, šī funkcija tiks nekavējoties atgriezties 1. Ja mēs nodots dažus skaits ir lielāks par vai vienāds ar 2, mēs spēsim ir mūsu rekursīvas zvanu. Un tā kā tas, ka iet uz darbu? Vai kāds cits, kas strādāja pie šī kurš nav runājis vēl man rekursīvas zvans šo funkciju in pseudocode? Ja mēs tiekam pieņemti skaitļa x un tas ir lielāks par 2, ko mēs vēlamies darīt? Mums ir arī piemērs rakstīts puse, kas var sniegt jums mājienu. STUDENTU: Call x reizes faktoriāls no x mīnus 1? Jason Hirschhorn: Tieši labi. Mēs ejam, lai atgrieztos x reizes faktoriālu x mīnus 1. Un, lai gan es uzrakstīju uz augšu, Būtībā, ko jūs teicāt, angļu valodā, Tas faktoriāls funkcija saņems sauc atkal. Tas būs izpildīt par x mīnus 1. Tas būs atpakaļ ar kādu skaitlim, un tad tas būs vairoties šīs divas kopā, un vērtība būs atpakaļ neatkarīgi no to nosauca faktoriālo funkcija, kas var ir vēl viens piemērs Tas faktoriāls funkcija. Tātad tas ir piemērs rekursīva funkcija, ļoti vienkārši rekursīvas funkcijas. Bet lielākā daļa no tiem būs līdzīgs šim. Ja vēlaties labu rekursīvo izaicinājums viktorīnas, mēģiniet kodēšana bināro meklēšanu rekursīvi. Jo, ja jūs bināro meklēt Problēma noteikti trīs, jūs, iespējams, to darīja iteratīvi brītiņa cilpa. Bet tā var būt arī rakstīts rekursīvi. Jūs esat dodas uz nepieciešamību rakstīt savu atsevišķa funkcija, kas prasa zināmu dažādas komandrindas argumentus - vai nav komandrindas argumentus, daži dažādas tikai regulāri argumenti. Bet jūs varētu rakstīt bināro meklēšanu rekursīvi kā arī. STUDENTU: Tātad, jūs varētu būt arī rakstīts, nevis x mīnus 1, jūs varētu būt arī rakstīts x mīnus mīnus, vai jūs varētu būt rakstisks mīnus mīnus x. Vai jūs vienkārši izskaidrot, tiešām ātri, kāpēc tie varētu būt dažādas lietas, piemēram, kāda atšķirība ir starp x mīnus mīnus un mīnus mīnus x? Jason Hirschhorn: Nē, es neesmu gatavojas iet uz to. Bet es runāt ar jums par to pēc klasē. x mīnus mīnus mīnus mīnus x Samazināt x līdz 1. Bet viņi to dara mazliet savādāk. Bet es negribu iedziļināties to. Citi jautājumi par rekursijas vai šī funkcija? Tas nav īsti pat pseudocode. Tas būtībā kodu C jūs varētu rakstīt par to. OK, visiem citiem jautājumiem par tēmām šeit? Jā. STUDENTU: Man ir ātrs nolietota peldošā komata un precizitāte. Jason Hirschhorn: Mainīga punktu un precizitāte. Vai kāds tiešām ātri man nolietota peldošā komata un precizitāti? Jums visiem bija to darīt savu Problēma noteikti, lai jūs visi iepazinušies ar to. Vai varbūt ne visi no jums. Kāds? Dodiet man sākās vietas. Peldošā komata un precizitāte. Kāda ir problēma? Jā. Victoria? VANESSA: Vanessa. Jason Hirschhorn: Vanessa. Piedodiet. VANESSA: Ir tikai ierobežots skaits skaitļu, ka tos var uzskatīt jo jūs esat par, jo mūsu gadījumā 32 bitu sistēma. Tātad jūs veida ir izdarīt dažus skaitļus. Jason Hirschhorn: Tāpēc, ka ir tieši labi. Ir tikai zināma skaitļi, kas var tikt pārstāvētas. Ja jūs reizināt divas ļoti lielu skaitu, tas varētu pārplūst summu Telpu jums ir pārstāvēt vesels skaitlis. Tas ir iemesls, kāpēc dažreiz mēs izmantojam ilgi ilgi nevis int. Tas ir vairāk vietas. Kas var turēt lielāku skaitu. Peldošā komata precizitāti, ir saistīts ar ka, bet ir arī saistīts ar Fakts, ka zīmēm numuri ne vienmēr bija. Piedodiet. Ļaujiet man nodot šo atpakaļ uz augšu. Decimālskaitlis 1.0 ne vienmēr pārstāv tāpat kā jūs varētu gaidīt, 1,000000000. Tas dažreiz pārstāvēja 1,000000001 vai 0,999999999. Tas varētu būt pat 89 izmesti tur kaut kur. Tātad šie zīmēm numuri nav pārstāv tieši tāpat kā jūs būtu gaidīt tos pārstāvēt. Tātad problēma komplekts - tas bija divi? - Problēma noteikti divi, kur mēs aplūkoti peldošā komata skaitļus, kad mēs vēlējāmies tos pārstāvētu tieši to, ko mēs vēlējāmies tos pārstāv, skaits pennies vai vairāki centiem, mēs reizinot tos ar 100. Mēs noapaļota tos. Un tad mēs nogrieztu visu aiz komata. Tas bija, lai nodrošinātu, ka tie būtu faktiski vienāda tieši tas, ko mēs vēlējāmies viņiem vienāds. Jo, kad jūs lietojat kaut ko, kas ir peldēt un pārvērst to int, jūs nogrieztu visu uz labo pusi no komata. Jo tur ir dažas peldošā komata neprecizitāte, 100.000 varētu būt pārstāvēja 99,999999999. Un, ja jūs vienkārši nogrieztu visu, lai tiesības uzreiz, jūs gatavojas saņemt nepareizu numuru. Jā. STUDENTU: Man bija jautājums par liešana. Kādā secībā tas notiek? Ja jūs darīt peldēt, kronšteini, 1 dala ar 10, tas dara 1 dalīts ar 10, tad saņemt 0.1, pēc tam ieslēdziet to pludiņa? Jason Hirschhorn: Ja jūs peldēt 1 dalīts ar 10 - STUDENTU: Jā, un pēc tam ir vienāds - Nu, tas būtu normāli ir tā vienāda - Jā. Jūs vēlaties, lai būtu peldēt, vai ne? Jason Hirschhorn: Labi, tāpēc mēs esam gatavojas izmantot šo segue uz norādītas atbildes uz šiem jautājumiem izmantojot kodēšanas. Tāpēc, ka jūs, iespējams, ir daudz Šīs minūtes jautājumus, un labs veids, kā lai atrisinātu tās ir ar kodēšanu. Tāpēc mēs esam gatavojas kodu šīs tiesības tagad, un tad mēs atgriezīsimies un kodu uz jautājumu, jums bija. Tātad pirmā līnija - Es nebūtu uzrakstījis to - kas ir Pirmā lieta, ko mēs vēlamies darīt, kad mēs atvērt jaunu failu gedit? STUDENTU: Iekļaut. Jason Hirschhorn: Iekļaut ko? STUDENTU: CS50 bibliotēka. Jason Hirschhorn: OK. Kas vēl mums būtu jāietver? Mēs esam tikai gatavojas, lai pārbaudītu, kas notiek kad jūs nodot kaut ko apgrozāmos līdzekļus. Bet ko darīt, mums ir nepieciešams iekļaut, ja mēs esam gatavojas uzrakstīt C programmu? STUDENTU: Standard I / O. Jason Hirschhorn: stdio.h. Mēs faktiski nav nepieciešama, jo tas programma, cs50.h, pat ja tas ir vienmēr ir lietderīgi iekļaut to. Bet mēs vienmēr vajag stdio.h. STUDENTU: Kad kodēšanas C? Jason Hirschhorn: Kad kodēšanas C. Tāpēc es to saglabāt, jo tas. C failu. Man kādu jauku sintakse izceļot. Es uzrakstīju tukšumu iekšā galvenais. Kāda spēkā neesošu nozīmē? STUDENTU: neveic nekādus komandrindas argumentus. Jason Hirschhorn: Void līdzekļi, jo šis gadījumā, galvenais neuzņemas nekādu atbildību komandrindas argumentus. Citos gadījumos, tas nozīmē, ka funkcija neņem komandrindas argumentus. Vai funkciju, ja man bija rakstīt par spēkā neesošu galvenais (spēkā neesošs), kas teiktu galvenos s neatgriezīsies neko. Tāpēc spēkā neesošu tikai nozīmē neko. Ko es varētu rakstīt, ja es būtu veikt komandrindas argumentus? STUDENTU: int loka c virkne loka v Jason Hirschhorn: int argc string argv. Tas ir labi? STUDENTU: Tas ir char zvaigzne ARGV iekavās. Jason Hirschhorn: Tātad, jūs varētu uzrakstīt string ARGV kronšteini vai char zvaigzne argv kronšteini, bet jums ir nepieciešams iekavās. Jo argv ir masīvs stīgas, atcerēties. Tas ir ne tikai viens string. Tāpēc string argv ir, šeit ir viens string sauc argv. String ARGV kronšteini ir, lūk, masīvs stīgas. Tāpēc int argc virkne ARGV kronšteini būtu kaut kas man droši vien rakstīt. Tātad jūs vēlētos, lai saglabātu veselam skaitlim? STUDENTU: Jā, vesels skaitlis. Vai peldēt. Jason Hirschhorn: In apgrozāmos līdzekļus? Tāpat, float x ir 1 dalīts ar 10. Jason Hirschhorn: OK. Kā es varu izdrukāt peldēt printf? Kas? STUDENTU:% f. Jason Hirschhorn:% f. Kas ir vesels skaitlis? d vai i. Kas ir virkne? STUDENTU: s. Jason Hirschhorn: s. Kā es varu iegūt jaunu rindu? STUDENTU: Reversā slīpsvītra n. Jason Hirschhorn: Ko es varu atgriezties ja galvenās darbojas pareizi? STUDENTU: 0. Vai man ir nepieciešams rakstīt šo līniju, lai gan? STUDENT: Nē. Labi, mēs ne rakstīt, tad. Vai visi lasīt, ka? Tas izskatās mazliet maza. Var ikviens redzētu, vai būtu Es padarītu to lielāku? Es domāju, ka par kameru, mēs veiksim tā nedaudz lielāks, lai gan. Jason Hirschhorn: Ja es gribu, lai ieslēgtu šo . C failu izpildāmā, ko es varu rakstīt? STUDENTU: Marka testu. Jason Hirschhorn: Sorry? STUDENTU: Marka testu. Jason Hirschhorn: Marka testu. Mēs runājām par Šī līnija agrāk. Šķindēt. Kas ir šķindēt? Par kompilatoru nosaukums. Kas ir šī pozīcija? STUDENTU: iestata to izmantošanai gdb. Jason Hirschhorn: Sets it up izmantošanas gdb. Šī līnija, kas ir kas? STUDENTU: Pirmkods. Jason Hirschhorn: Tas ir avota failu. c fails. Ko šīs divas līnijas darīt? Vai šie divi nav rindas. STUDENTU: Tā nosaukumus tā pārbaudītu. Jason Hirschhorn: Tātad domuzīme o saka: nosaukt to kaut ko savādāk. Un šeit jūs aicināt to pārbaude. Ja man nebija, ka, kāda būtu to nosaukt šo? STUDENTU: a.out. Jason Hirschhorn: a.out. Ko tas dara? STUDENTU: Saites math bibliotēka. Jason Hirschhorn: Tas saista in math bibliotēkā. Mēs neiekļāva math bibliotēka, bet jo tas ir tik bieži, tie esam rakstīts make vienmēr iekļaut math bibliotēka. Un tāpat, tas ietver CS50 bibliotēka. Labi, tāpēc, ja mēs sarakstā, mums tagad ir izpildāmā sauc tests. To izpildīt, es rakstīt testu. Es redzu, ka mans peldošo punktu, kā plānots, ir vienāds ar 0. Tas, ka - tā - STUDENTU: Tad, ja jūs nodot peldēt tagad, kā jūs nodot to kā apgrozāmos līdzekļus - Jason Hirschhorn: Cast 1 pludiņa? STUDENTU: Nē, lietie pilnu lieta - yeah. Ja jūs tikko bija, ka būtu kas padara to 0,1? Jason Hirschhorn: Labi, tāpēc tiešām ātri, 1 dalīts ar 10, tie ir veseli skaitļi tiek sadalīta. Tātad, ja jūs sadalīt skaitļu, viņi 0, un jūs ietaupīt, ka 0 peldēt, jo slīpsvītru ir tikai skaitlis sadalīšanu. Tāpēc tagad mēs esam pagrieziena kaut uz apgrozāmos līdzekļus. Let 's redzēt, kas notiek. Mēs veiksim testu. Tāpēc tagad mēs redzam, ka tas slash nav skaitlis sadalījumu, tas bija peldošs punktu sadalījums. Jo viena no tās argumentus tika nodotas uz apgrozāmos līdzekļus. Tāpēc tagad tas jau teicu, pret šo sadalījums, piemēram, mums ir darīšana ar peldošās punkti, nevis ar veseliem skaitļiem. Un tāpēc mēs saņemt atbildi mēs sagaidām. Paskatīsimies, kas notiek - Ups. Ja es gribēju drukāt vairāk decimāldaļu plankumi, kā es varētu darīt? STUDENTU: Point dot f, vai tik daudz, zīmēm aiz komata, cik vēlaties. Jason Hirschhorn: Tāpēc es drukāt 10 zīmēm plankumi. Un mēs tagad redzam, mēs esam nonākuši daži dīvaini sīkumi. Un tas iet atpakaļ uz savu jautājumu par peldošā komata neprecizitātes. Ir dīvaini sīkumi saglabāti šeit. Labi, tas, ka atbildi uz savu jautājumu? Kas vēl jūs vēlaties ar kodu ātri? STUDENTU: Es tikai gribēju redzēt, vai nē, ja jūs atbrīvoja kādu rādītāju, vai šis rādītājs joprojām ir saglabāta tā adrese, kas tas bija norādot uz iepriekš. Jason Hirschhorn: OK, tāpēc pieņemsim darīt. Char zvaigzne PTR, tas rada mainīgo sauc PTR tipa char zvaigzne. Kā es varu uzrakstīt malloc? Alden? ALDEN: Just malloc. Bet tad tas ir jābūt lielumu, un Šajā gadījumā, es domāju, jūs gribētu ir vērsta uz char. Tāpēc tas lūdzu būt char. Jason Hirschhorn: Labi, tāpēc vairāk vispārīgi, Inside - pieņemsim rediģēt. Iekšā malloc, jūs vēlaties numuru baitu no kaudzes. Vispār, ko mēs esam redzējuši, ka mēs esam dara, ir, mēs ejam uz malloc virknes, piemēram, vai bloki no veseliem skaitļiem. Tātad, ja mēs gribam 10 veseli skaitļi, vai 10 simboli, 10 dos mums 10. Un tad izmērs chars dotu mums, ka izmērs simboliem, kas šī lieta ir 1 baits. Mēs saņemam 10 baiti. Ja mēs būtu rakstīt izmēru int, kas dod mums 40 baiti. Tātad vairāk vispārīgi, iekšpusē malloc ir baitu skaits, ko vēlaties. Šajā gadījumā mēs esam nonākuši 1 baitu. Kas šķiet dīvaini izmantošanu no malloc, bet mūsu mērķiem ir jēga. Tāpēc tur ir, ka. Mēs ejam, lai izsauktu bezmaksas. Mēs atbrīvoties no tā, un mēs izmantojam PTR atkal. Un ko jūs vēlaties pārbaudīt? STUDENTU: Es tikai gribēju, lai pārbaudītu, vai vai tur bija kaut kas iekšpusē no tā. Jason Hirschhorn: Tātad, vai tā norādīja uz kaut ko? STUDENTU: Jā, tieši tā, vai tas joprojām bija atmiņas adresi. Jason Hirschhorn: Tātad jūs vēlaties lai pārbaudītu vērtību PTR? STUDENTU: Jā, tieši tā. Jason Hirschhorn: Ko es rakstīt šeit ja es gribu, lai pārbaudītu vērtību punkts - kas ir, Jordan teica, vērtība? Vai kas tiek glabāts iekšpusē PTR? STUDENTU: atmiņas adrese. Jason Hirschhorn: atmiņas adrese. Tātad, ja es rakstu tikai to, tas būs iedodiet man vērtību PTR. Un kā es varu izdrukāt atmiņas adrese? Kas ir formāta virkne par atmiņas adresi? STUDENTU:% p. Jason Hirschhorn:% p. % S ir virkne. % P par rādītāju. Tas ir labi? Tas ir labi. Tā PTR vienāds - tas joprojām ir kaut kas tajā. Tas ir iespējams, vairāk interesants jautājums. Ko tas līnija darīt? STUDENTU: SEG defekti. Jason Hirschhorn: Kas? STUDENTU: Es domāju, ka tas seg kļūdas. Jason Hirschhorn: Hm? STUDENTU: Es domāju, ka tas būs seg vaina. Jason Hirschhorn: Tātad, šī līnija no koda, zvaigzne PTR, ko tas zvaigzne nozīmē? STUDENTU: saturs. Jason Hirschhorn: Jā. Iet, lai iegūtu saturu. Tāpēc tas ir gatavojas iet uz atmiņas risināt tur, un man to. Es mēdzu% c tieši šeit, jo tur ir rakstzīmes glabāti tur. Tāpēc mēs esam gatavojas iet uz šo adresi mēs tikko redzēju - vai tas būs iespējams, mazliet atšķirīgs šo reizi, kad mēs palaist programmu. Bet mēs iesim uz šo adresi ko mēs zinām, joprojām pastāv un redzēt, kas ir tur. Tāpēc tas nav seg vaina. Tas vienkārši nedeva mums neko. Tas varētu būt tiešām devusi mums kaut ko, mēs vienkārši nevaram redzēt. Un tas iet atpakaļ uz šo ideju - un mēs neesam gatavojas saņemt pārāk daudz to, jo tas ir ārpus apjoms šajā kursā. Bet mēs runājām par to tieši šeit, ja mēs gāja aiz robežas masīva ar 1, mēs nevarētu nokļūt nepatikšanās. Dažreiz, kad jūs vienkārši iet off par 1, jūs darāt kaut ko nepareizi, un jums varētu nokļūt nepatikšanās. Bet jūs ne vienmēr iekļūt nepatikšanās. Tas atkarīgs no tā, cik daudz slikti jums Vai, jūs gatavojas nokļūt nepatikšanās. Kas nav teikt, apliets ar savu kodu. Bet tas ir, programma nebūs vienmēr atmest, pat ja jūs kaut kur aiziet jūs neesat vajadzēja iet. Labs piemērs tam ir daudz cilvēki savu problēmu noteikts 3, kas bija 15, nepārbaudīja robežas no kuģa. Tātad jūs paskatījās pa kreisi, izskatījās labi, skatījās uz augšu, izskatījās uz leju. Bet jums nav pārbaudīt, lai redzētu, vai top faktiski būs uz kuģa. Un daudz cilvēku, kas to izdarīja, un Izrādījās, ka, viņu programma strādāja lieliski, jo, ja tas, ka padome uzglabā atmiņā, ja jums gāja viens virs tā vai arī pārbaudīts, ka atmiņa adresi, tur nebija nekas īpaši briesmīgs par to, lai jūsu programma nebija gatavojas kliegt pie jums. Bet mēs joprojām varētu pacelties punktus, ja jums nav pārbaudīt, ka, jo jūs darīja kaut ko nebija vajadzēja darīt, un jums varētu būt gotten nepatikšanas. Izredzes ir, lai gan, jūs, iespējams, nav. Tātad šis ir parādīt, ka, jā, mēs vēl varam iet uz to. Un mēs esam nesaņemu problēmas šajā lietā. Ja mēs mēģinājām darīt izlasītu Nākamie 100 rakstzīmes, mēs gribētu iespējams nokļūt nepatikšanās. Un jūs varat kodu lasīt nākamo 100 rakstzīmes, ja jūs vēlaties, darot kādu veida cilpa. Jā. STUDENTU: Tā kā mums tika piešķirtas, ka kosmosa faktisko vērtību, mēs nebūtu faktiski varētu redzēt neko. Mums vajadzētu mēģināt to ar ko nosaka, ka vienāds ar, piemēram, C vai kaut ko? Jason Hirschhorn: Great jautājums. Kā es varu noteikt šo vērtību - kāda līnija koda man rakstīt uz līnijas septiņi darīt to, ko jūs teicāt? STUDENTU: Star PTR vienāds single quote c beidzas vienu citātu. Jason Hirschhorn: Tātad, kas ir liekot raksturs, c, šajā vietā, kas jo atkal, ka zvaigzne nozīmē iet tur. Un ja to izmanto kreisajā pusē uzdevums operators, kas ir vienāds parakstīt, mēs nebrauksim, lai iegūtu, ka vērtība tik daudz, kā noteikts šo vērtību. Tagad pieņemsim redzēt, kas notiek. Mēs kaut ko tur un tas bija tur. Mēs sauc par brīvu. Daži sīkumi, iespējams, noticis uz kaudzes. Tāpēc tas nav tur vairs. Bet atkal, mēs esam nesaņemu nepatikšanas par iet tur. Es daru to, kas ar kodu, lai ilustrētu ka daudzi no šiem jautājumi, kas jums ir, viņi patiešām interesanti atbildes daudz laika. Un viņi patiešām labi jautājumi. Un jūs varat saprast tos uz savu, ja, piemēram, mēs neesam sadaļā. Jā. STUDENTU: Tā kā jūs neesat sūtīt Pointer jebkur, jums ir nepieciešams, lai lietošanā malloc? Jason Hirschhorn: Tātad tas iet atpakaļ uz savu sākotnējo jautājumu. [? ?] Tas ir tikai vietējās mainīgais? Malloc šeit nav tik pārliecinošs. Gada malloc izmantošana šeit nav ka pārliecinoši, jo tas ir tikai vietējā mainīgs. STUDENTU: Tātad jūs varētu darīt char star PTR vienāds sveiki? Jason Hirschhorn: Ak. Tātad, mēs ejam, lai tagad saņemtu atpakaļ uz savu sākotnējo jautājumu. Es domāju, ka jūs nebijāt apmierināts ar manu atbildi. OK? Piemēram, ka? STUDENTU: Jā. Gaidīt. Jason Hirschhorn: Un kur Vai jūs vēlaties izdrukāt? Tāpēc mēs izdrukāt virkni, piemēram, ka? STUDENTU: Interesanti. Jason Hirschhorn: Tātad tas saka, ka tas arguments ir par raksturu veidu. Tāpēc tas ir raksturs. STUDENTU: Just notiek pirmā. Jason Hirschhorn: Tātad šis ir tas, ko es teicu iepriekš. Tāpat kā es teicu, tas nav glabāšanai string iekšpusē mainīgo rādītāju. Tas ir glabāšanai - STUDENTU: Pirmā vērtība virknes. Jason Hirschhorn: adreses pirmā vērtība virkni. Ja mēs būtu izdrukāt šo, mēs esam iegūt vērtību iekšā rādītājs. Un mēs redzam, ka ir, protams, atmiņas adrese. Vai tas ir jēga? Piedodiet. Pagaidiet, tas, kas atbildētu uz jūsu jautājums, lai gan? STUDENTU: Jā. Jason Hirschhorn: Šī līnija kods ir radot virkni un tad vēl mainīgais rādītājs, kas ir vērsta uz šo virkni, kas masīvs. Jā. STUDENTU: Tātad, ja mēs gājām vienu atmiņu risināt tālāk, vai mēs saņemt h? Vai tas ir saglabāts kā virkne? Jason Hirschhorn: Tāpat kā, mēs to izdarījām - tāpēc tas ir vērtīgs, lai darīt. Šis ir punkts aritmētiskais, ko jūs guys ir redzējis, un ir jābūt samērā ērti. Tas ir līdzīgs rakstot - ja mēs rakstīt šo līniju kodu, mēs esam redzējuši masīva pierakstu pirms tam. Tam vajadzētu dot mums par otro vērtība šajā masīvs, h. Ja mēs to darījām, tas arī dod mums otrā vērtība šajā masīvā. Jo tas notiek nevis ar atmiņu adrese pirmā lieta, bet atmiņas adrese lieta vienu vairāk. Un tad zvaigzne operators dereferences ka rādītājs. Un atkal, paskatīsimies. Mēs h vēlreiz. STUDENTU: Ko tieši dereference nozīmē? Jason Hirschhorn: Nedefinētās vērtibas ir iedomāts vārds doties. Iet uz to un saņemt to, kas tur ir dereference rādītājs. Tas ir tikai iedomātā vārdu par to. Students: Ja mēs vēlējāmies, lai drukāt visa virkne, mēs varētu to aizvieto & zīmes rādītāju? Jason Hirschhorn: Labi, mēs esam gatavojas, lai apturētu šeit. Mēs gatavojas pārtraukt šeit. Ampersand dod jums adresi vietu, tad, kad jūs aizvieto & zīmes ar mainīgs, tas dod jums adresi ja šis mainīgais tiek saglabāts. Ampersand rādītājs dos jums adrese PTR kur PTR ir atmiņā. Mēs nebrauksim, lai dotos uz šim piemēram. Jūs varat izrēķināt šos lietas, par savu. Bet atkal, tas pat varētu būt robežojas bit tikai to, kas jums ir nepieciešams zināt joma šajā vidusposmā - vai tas viktorīna, diezgan. Piedodiet. Mēs gatavojamies virzīties uz priekšu, jo es būtu vēlētos darīt vienu kodēšanas problēmu pirms laika ir uz augšu. Un mēs ar kodu, ko es domāju, ir visvairāk pārliecinoši no šiem piemēri, atoi. Tātad tas bija jautājums par to, viktorīna pirms diviem gadiem. Un man ir tas uz kuģa šeit. Cilvēki uzdeva par viktorīnas - viņiem tika dota nedaudz vairāk tesxt in jautājums, bet es likvidēta teksts, jo tas bija nevajadzīgs mūsu mērķiem tagad. Tas bija tikai daži fona par to atoi darīja. Bet jūs visi zināt, un ir ļoti iepazinušies ar atoi. Es iesaku jums kodu šo uz papīra loksnes. Es arī iesakām izmantot stratēģiju ka mēs esam pārgājuši daudz mūsu sadaļā. Pirmkārt, pārliecinieties, ka jūs saprotat ko atoi dara. Uzzīmēt attēlu vai nākt klajā ar kādu garīgās attēlu no tā galvu. Tālāk, rakstīt pseudocode šim. Uz viktorīnu, ja viss jums ir pseudocode, vismaz jūs likt kaut ko uz leju. Un tad karte, kas pseudocode uz C. Ja jums ir pārbaudīt ar jūsu pseudocode, piemēram, pārbaudīt, ja kaut kas ir 1, ka kartes uz ja stāvoklis un tā tālāk. Un visbeidzot, kodētu programmu C. Lai iet atpakaļ uz atoi un veikt piecas minūtes kodēt to uz lapas papīrs, kas ir iespējams, ir apmēram cik ilgi jūs varētu uzņemties viktorīna kodeksa atoi. Piecas līdz 15 minūtes, no pieciem līdz 12, piecu līdz 10 minūtes, ir par summu reizi, kad jūs vēlaties tērēt par šo jautājums viktorīnas. Tātad, ņem piecas minūtes tagad, lūdzu. Un, ja jums ir kādi jautājumi, paaugstināt savu roku un es atnākšu apkārt. [SIDE SARUNAS] Jason Hirschhorn: OK, lai tas bija piecas minūtes. , Kas, iespējams, bija par summu laika jūs tērējat ka viktorīnu, varbūt zemas šajā laikā. Mēs Atgādinājums mazliet. Sāksim kodēšanas to. Un, ja mēs nesaņem visu ceļu cauri, atbildes uz šo un to viktorīna jautājums ir pieejami, atkal, 2011 Rudens ir tad, kad šis jautājums parādījās uz viktorīnas. Un tas bija tā vērts astoņi punkti uz viktorīnas tad. Astoņi punkti ir par augstu beigām punktu summa kaut ir vērts. Lielākā daļa jautājumu ir diapazonā ar vienu līdz sešiem punktiem. Tāpēc tas ir daudz grūtāks Jautājums, protams. Var kāds saņemt mani sākās? Vispār, ko mēs gatavojamies vēlaties darīt ar šo darboties atoi, loģiski? Ko mēs vēlamies darīt? Tāpēc mēs esam gatavojas rakstīt daži pseudocode. STUDENTU: Pārvērst rakstzīmes uz veseliem skaitļiem. Jason Hirschhorn: Pārvērst rakstzīmes uz veseliem skaitļiem. OK. Tātad, cik rakstzīmes mēs esam būs nepieciešama, lai iet cauri? STUDENTU: Visi no tiem. STUDENTU: Visi simboli virknē. Jason Hirschhorn: Visi rakstzīmes virknē. Tātad, ja mēs vēlējāmies, lai iet caur katru rakstzīmju virknē, kas ir lieta C mēs esam redzējuši, kas ļāva mums iet cauri katram rakstzīmju virknē? Studenti: uz cilpas. Jason Hirschhorn: uz cilpas. Tāpēc mēs esam gatavojas cilpa ar Katram varonim s. Tad ko mēs gatavojas vēlaties darīt kad mēs iegūtu specifisko raksturu? Saka, ka mēs esam kļūst pagājis 90. Mēs saņemam 9. Tas ir raksturs. Ko mēs vēlamies darīt ar ka raksturs 9? STUDENTU: Atņemt to no rakstura 0? STUDENTU: Add 0? Jason Hirschhorn: Atņemt to no rakstura 0? STUDENTU: Jā. Jason Hirschhorn: Kāpēc Jūs vēlaties to darīt? STUDENTU: [dzirdams] vērtību. Tās int vērtību. Jason Hirschhorn: Labi, tāpēc mēs raksturu 9, atņemt to no raksturs 0 nokļūt Faktiskais skaitlis 9. Salds. Un kā jūs zināt, ka raksturu 9 mīnus 0 raksturs ir 9? Kas diagrammas jūs apskatīt? STUDENTU: Ir loģiski deviņi vietu starp 9 un 0. Vai jūs varētu apskatīt ASCII tabulu. Jason Hirschhorn: ASCII tabulu. Bet jā, jūs pareizi, kā arī. Tāpēc mēs atņemt 0. Tāpēc tagad mums ir vesels skaitlis 9. Un tas, ko mēs vēlamies darīt ar to? Ja mums ir 90, tas ir pirmais skaitlis Mēs esam tas, ko mēs vēlamies darīt? STUDENTU: Es gribētu īstenot pagaidu skaitlim masīvs, tad do math, lai to vēlāk, lai padarītu to beigām. Jason Hirschhorn: OK. STUDENTU: Jūs varat sākt beigās masīvs un pēc tam virzīties uz priekšu, lai ka katru reizi, kad jūs virzīties uz priekšu, jūs reizināt to ar 10. Jason Hirschhorn: OK. Tas izklausās diezgan pārliecinoši ideja. Mēs var sākt beigās mūsu masīva, un mēs varam izmantot strleng. Mēs varam izmantot strleng šeit. Mēs iegūtu garuma mūsu virknes. Mēs sākas beigās. Un + pirmo, mēs tikai pieņemt, ka skaitlis, un varbūt mēs radām, piemēram Jaunais skaitlis mainīgais up top, kur mēs esam glabāšanai viss. Tāpēc mēs cilpa ar katru char s no atpakaļ uz priekšu, mēs atņemt 0, un tad mēs ņemt to, un atkarībā no tā, ja tā ir, mēs pavairot to ar jaudu 10. Tāpēc, ka pirmais, ko mēs reizināt rightmost rakstzīmi? Students: 10 līdz 0. Jason Hirschhorn: 10 līdz 0. Ko mēs reizināt otrajā tālākais raksturs, ko? STUDENTU: [nedzirdama]. Jason Hirschhorn: Kas? Students: 10 ar 1. Jason Hirschhorn: 10 ar 1. Trešo tālākais raksturs? Students: 10 ar 2. Jason Hirschhorn: 10 uz 2. STUDENTU: Atvainojiet, es nesaprotu tas, ko mēs darām šeit. Jason Hirschhorn: OK, iesim atpakaļ, tad. Tāpēc mēs esam gatavojas saņemt nodots virknē. Tāpēc, ka mēs esam rakstiski atoi. Lai mēs iegūtu pagājis virknē. Saka, ka mēs esam kļūst nodots virknē 90. Pirmā lieta, ko mēs gatavojamies darīt, ir noteikt jauna skaitlim mainīgais, kas mēs esam tikai gatavojas, lai radītu kā mūsu jauno skaitlim. Tas ir tas, ko mēs gatavojamies atgriezties beigās. Mums ir nepieciešams, lai iet caur katru rakstura string jo mēs esam noteikuši, ka mums ir nepieciešams, lai pieskarties katru vienu un Pēc tam pievienojiet to uz mūsu jauno skaitlim. Bet mēs nevaram vienkārši pievienojiet to kā skaitli. Mēs nevaram vienkārši ņemt 9 un Pievienot 9 mūsu skaitlim. Tas atkarīgs no tā, kādu vietu tas ir virknē. Mēs ejam, lai ir vairoties tas ar jaudu 10. , Jo tas ir kā bāze 10 darbi. Tāpēc mēs esam gatavojas saņemt faktisko raksturs, vai faktiskais skaitlis numuru, atņemot raksturs 0 No rakstura 9, kā mēs to darījām ar atņemot rakstzīmju kapitāla A no kāds raksturs mums bija viens no šīs problēmas. Tāpēc mēs faktiski iegūtu numuru no 0 līdz 9 saglabāts kā reālu skaitli, un mēs reizināt to ar 10 jauda atkarībā par to, kur mēs esam virknē. Un tad mēs ejam, lai pievienotu to atpakaļ mūsu jaunajā skaitlim mainīgo. Tātad, ko tas izskatās būtu ir - mēs izdarīt vairāk nekā šeit. Ja mēs nodots virknē 90 - STUDENTU: [nedzirdama]. Jason Hirschhorn: Bet atoi notiek virkni. Tāpēc mēs esam gatavojas iet cauri saimniecība. Mēs dabūsim pieņemts 90. Mēs ejam no aizmugures uz priekšu. Ņemam 0. STUDENTU: Es atvainojos. Varbūt tas ir stulbi. Ja mēs esam kļūst pieņemts virkni, kāpēc ir 90, ko mēs esam kļūst pieņemts? Jo 90 ir vesels skaitlis. Jason Hirschhorn: Tā atoi notiek stīgu un pārvērš to skaitlim pārstāvība šīs virknes. Bet string 90 nav vesels skaitlis 90 vai numuru 90. String 90 ir masīvs no divām vai trīs rakstzīmes, bet, 9 raksturs, 0 raksturs, un slīpsvītru 0 raksturs. Un mēs esam rakstiski atoi, jo, Piemēram, ja jūs lietojat komandu line arguments, un tas ir saglabāts argv, tas ir saglabāts kā virkni. Bet, ja jūs vēlaties, lai ārstētu to kā numuru, Jums ir nepieciešams, lai pārvērstu to Faktiskais skaitlis. Ko mēs darījām vienu no mūsu problēmu kopu. Ko mēs darījām vairākos mūsu problēmu kopu. Ikvienam, kas bija veselam skaitlim kā komandrindas arguments. Tātad, tas ir, kāpēc mūsu atoi funkcija aizņem virkni. Tātad vēlreiz, mūsu piemērā šeit, mēs esam gatavojas pieņemt pēdējais. Mēs ejam, lai atņemtu raksturu 0 no tā, jo rakstzīmes 0 atņemti ar raksturu 0 dod jums Faktiskais skaitlis 0, saskaņā ar ASCII math, ko mēs darām. Jo rakstzīmes tiek pārstāvēja savādāki nekā to faktiskā - raksturs, piemēram, mazie ir 97. Tas nav - Oops! Tas nav, ko jūs sagaidāt ka tas ir, 0, for example. Tātad jums ir, lai atņemtu raksturs, lai saņemtu 0. Tāpēc mēs gatavojamies darīt, ka šeit lai iegūtu faktisko skaitu. Un tad mēs reizināt to ar jauda 10, atkarībā no tā, kur to ir virknē, un tad tas un pievienot to mūsu vietā īpašniekam mainīgais, lai mēs varētu nākt klajā ar mūsu gala jaunu skaitlim. Vai tas ir jēga, lai visiem? Tāpēc mēs nebrauksim kodēt šo tieši tagad, jo mēs esam iegūt īsā laikā. Es atvainojos par to laiku, kas. Bet tas ir tas, kas, cerams, jūs varētu varētu darīt uz viktorīnas - pie Vismaz, saņemt šo pseudocode uzrakstīts. Un tad, ja mēs rakstītu pseudocode, patiesībā, mēs varētu to izdarīt diezgan ātri. Katrs no komentāriem līniju mēs rakstījām šeit pārveido par viena līnija C kodu. Deklarē jaunu mainīgo, rakstot cilpa, daži atņemšanu, daži reizināšanu, un daži uzdevums. Mēs droši vien arī vēlas, lai rakstīt atgriešanās līniju. Mēs varētu arī vēlaties, lai dažas pārbaudes šeit. Jā. STUDENTU: Tātad mēs varam ārstēt s kā faktisko virknes? Jo es zinu, tas ir tikai adresi. Tāpat, kā jūs saņemsiet garumu string ir pabijuši? Jason Hirschhorn: Tātad, kā to darīja garuma virknes? Strlen. STUDENTU: strlen, jā. Bet jūs varat nodot s kā arguments par to? Jason Hirschhorn: So strlen aizņem char zvaigzne. Un no tā izriet, ka char zvaigzne, un tas tur skaitot līdz tas izpaužas slīpsvītru 0. strlen faktiski viens no citas programmas, mēs gatavojas kodu. Tas ir vēl viens labs vienu kodu. Tas viens ir mazliet vieglāk, jo, ja jūs gatavojas domāt par to, ka konceptuāli - Es tikai teicu to skaļi - strlen šādi rādītājs un tur notiek, un skaitīšanas un sekotu līdz jūs sasniedzat slīpsvītru 0. STUDENTU: Labi, got to. Jason Hirschhorn: Tāpēc novēlu luck par viktorīnas 0 rīt. Ja Jums ir kādi jautājumi, es ņemšu jāatrodas ārpus pēc tam. Justies brīvi, rakstiet man. Panākt, lai jūsu pašu TF, ja esat nav manā sadaļā, vai arī saņemt savu e-pastu, ja jūs vēlaties to. Ja jūs vēlaties, lai ķēms, un tikai sūtīt man e-pastu, freakout e-pastu, es ņemšu nosūtīt jums atpakaļ, piemēram, smiley sejas, vai, piemēram, joks vai kaut ko. Lai justies brīvi darīt, kā labi. Good luck atkal, un es ņemšu see you all nākamnedēļ.