[TĒMA MUSIC] 

SPEAKER 1: Sveiki, visiem. Laipni lūdzam atpakaļ uz sadaļu. Jauka diena out--, kas ir iemesls, kāpēc, es esmu Protams, ir tikai četri no jums šeit un nav mūsu ierasts pack. Man ir bijis slims šīs nedēļas nogalē. Tāpēc man nav zvaigžņu dzimšanas jums puiši. Un es varētu sākt klepus briesmīgi visu šo. Tik tikko sedz ar mani. Es esmu gatavojas, lai tiešām mēģinātu un saņemt, izmantojot šo pirmo, lai gan, pirms man ir klepošana uzbrukumu. Bet tikai jābūt vienkārši uz mani ar maz bit-- tas ir viss, es jautāju. 

Tātad mūsu darba kārtība today-- tikai reminder-- jūsu viktorīna ir nākamnedēļ. Es jums šo pagājušajā nedēļā teica, lai to nebūtu nozvejas jums off aizsargs. Tāpēc es esmu atgādinot jums vēlreiz. Nākamās nedēļas jūsu viktorīna. Lai to panāktu, nākamnedēļ s sadaļa būs daudz vairāk of-- Es mēģināšu un strādāt kādā pārskatīšanu. Tātad, ja jūs puiši varētu man palīdzēt, nosūtot mani lietas, kas esat apmierināts ar, ka jūs uztrauc, tēmas, kas jūs gribētu, lai man aptvert, ka gribētu būt liels. Tāpēc es varu mēģināt un strādāt tos mūsu sadaļā nākamnedēļ vai nosūtīt jums papildu materiālu vai ieplūdes ka jūs nevarēsiet saņemt citur. 

Yeah! Vairāk cilvēku nāk! Es domāju, es to izdarīju slikti pagājušajā nedēļa, ka neviens negrib nākt atpakaļ? Es esmu nobijies. Tāpēc pārējiem trim lietām ka mēs ejam, lai iet pa ir novirzīšana, failu I / O, un Tad norādes un dinamisku atmiņas. Es esmu pārliecināts, ka jūs visi esat super sajūsmā pointers-- ikviena mīļākie tēmu, tik vienkārši saprast. Es esmu pārliecināts, ka jūs puiši visi sanāca, ka, labi? 

Tātad pirmās lietas, pirmkārt, redirection-- tas ir būtībā tikai veids kontrolēt, kā jūs ievadi lietas uz savu programmu, kā jūs izejas lietas no jūsu programmā. Galvenie veidi, kā jūs guys Ir mijiedarbojas ar to, ir tikai ar standarta out ar savu print screen šeit. Bet ir veidi pipe-- kā mēs redzam šeit ir viens no mūsu words-- veida no caurules, ka informācijas vai ka dati par failu no faila. Tas ir tikai dažādi veidi iegūt lietas savā programmā un no sava programmu, tā vietā, lai vienkārši izdrukāt tos šajā ekrānā vai ievadot lietas no komandrindas. 

Tātad pirmais ir maz lielāks nekā caret. Tik output-- tas vienkārši drukā produkciju failu, nevis jūsu ekrāna. Tātad, ja jums bija kaut kas iespiests "Hello, world!" uz ekrāna, ja jūs nodot to vietā lai output.text, ka rada šo failu ar nosaukumu output.text. Un, atverot to, tas būs saka "Hello, world!" tur. Tas var būt noderīgi, super ja jums ir ton kļūdas patiesībā, kā mēs redzam šo vienu. Ja jūs darīt divas caret, tas būs drukāt kļūdu ziņojumus. 

Tātad, ja jums ir problēmas ar apkopojot, tas ir daudz kļūdu un jūs kļūst bogged leju, mēģinot lai ritinātu jūsu komandrindu ar visiem tiem, jūs varat vienkārši izdrukāt tos uz failu, atvērt šo tāpēc, ka failu var ritināt caur tiem vieglāk. Es faktiski izmanto, ka Daudz, kad man bija atkļūdošana mans 181 psets mehāniskā mācībām. Līdz ar to var būt super noderīgi vēlāk. Tā ir arī noderīga, ja jums ir programma ka varbūt ir radīt bibliotēka vai rada kādu komplektu stīgas, un tu nepieciešams, lai varētu redzēt, ka tas rada tos pareizi. Tas ir veids, kā to darīt. 

Tātad, ja jūs drukāt tos failā, jums var vieglāk tos pārbauda, ​​vai ne? Versus mēģinot ritinātu caur komandrindu. Un tad viena lieta atzīmēt ir tā, ka tikai ar lielāku nekā caret, ja jūs rakstāt uz failu, kas jau exists-- tāpēc, piemēram, ja mums bija tas pirmais laiks, mēs ieliekam to output.text, un tad mums bija otrais programmu ka drukāts to kā programmu divu un bija lielāks nekā output.text, tas pārrakstīs that-- tik pārrakstīt, kas bija kādreiz ka fails, lai sāktu ar. 

Tātad, ja jūs vēlaties pievienot failā, kā mēs redzam šeit, jūs vienkārši darīt divas lielāka nekā zīmēm. Un tas būs pievienot to. Tas nebūs pārrakstīt. Tātad, ja jums ir nepieciešams, lai palaistu vairākas programmām un veids turēt dziesmu, ko visi no tiem ir atgriežoties pie jums failā, tas ir veids, kā to izdarīt. Ja jums nav vienalga, kas ir jūsu failā un tas ir atļauts pārrakstīts, jūs varat izmantot vienu lielāks nekā. Vai tas ir jēga visiem? 

Mērķauditorija: Tāpat dot slash sveiki lielāks kā izejas dot tekstu, piemēram, divas reizes, tas būs tikai parādīs tikai produkciju dot teksta otrā LAIKU_ 

SPEAKER 1: Labais. Tātad tas būtu būtībā tikai pilnīgi pārrakstīt, kas bija tur, lai sāktu ar. Ja šis fails šeit output.text jau pastāv, būtībā kāds jums zvana ka atkal ar vienu lielākai nekā jūs varat domāt par to kā, piemēram, tas aizstāja failu. Kā tad, kad jūs ietaupot Word dokuments, un jūs saglabāt kā, un saglabāt tādu pašu nosaukumu, un tas pilnībā pārraksta it-- tas ir tas pats veida lieta. Ikviens ir kādi jautājumi par tikai izvadi uz failu? Awesome. 

Tātad, protams, ja jūs mainīt arrow virzienu, to var darīt ievadi. Tātad, ja jūs puiši bija tāpat kā Cēzara vai VISIONEER un jums bija ieejas kaut ko, jums bija komandrindas argumentu kas faktiski ievadi. Tas ir vēl viens veids, kā to darīt. Tā vietā, lai gaida par komandrindas, piemēram, kad jūs lūdza savu vēstījums ķeizaram vai VISIONEER, ja jums bija teksta failu kas bija jūsu ziņu, jūs varētu vienkārši ierakstiet to, ka. 

Tātad, ja tas bija, piemēram, dot slash Cēzaru 3 mazāk nekā bultiņas ievadi tekstu, kas ir jūsu ziņa, ka varētu palaist tikai naudas sodu. Kad jūsu Caesar programma faktiski lūdza ieguldījumu no lietotāja, tā jau ir, jo esat ievadījis šajā failā. Tas ir tikai vēl viens veids. Tikai reversa output-- tikai ieejas jūsu datiem. 

Un tad pēdējais ir caurules. Tāpēc šī ir diezgan vēss. Jo tas ļauj jums ņemt izejas viena programma un nodot to kā ieejas uz citu programmu. Es nezinu, vai kāds no jums spēlēja ar atšifrēt ka CS50 varētu būt dots jums, bet tas ļauj jums veikt kādu izlasi failu, ierakstiet to savā šifrēšanu, un tad no turienes ierakstiet ka jūsu atšifrēšanu lai pārliecinātos, ka tas izrādījās pats. Tātad, tas ir veids, piemēram, trīsceļu cilpa. Iet uz to. 

Mērķauditorija: Ja programmas ir vairākas ieejas, Vai ir veids, kā pateikt to, kas ievade izmantot teksta failu vai izvadi? 

SPEAKER 1: Tas ir vairākas ieejas. Neatkarīgi failu savu input--, kad tas ir lūdzot ievadi šo pirmo reizi, tas ir gatavojas pieņemt, es domāju, tas ir dodas uz cauruli visā failā. Tātad, ja jums ir vairākas ieejas, tu esi būs cauruļvadu vairākus failus. Tātad, ja jūs esat jautā ziņām trīs reizes savu kodu, jūs gatavojaties būt liekot trīs dažādiem failiem. Un tas kļūst traks. Un jums nevajadzētu jāuztraucas par to, ka tieši tagad. Bet tas ir ideja. 

Tātad yeah, caurule ir tikai izejas viena Programma izmanto ieguldījumu otru. Ikvienam labs tur? Atdzist. OK. Jūs, iespējams, nebūs to darīt pārāk daudz ar to. Bet jums vajadzētu saprast veidi, kā jūs varat izmantot šo. Un tur ir daži gadījumi, ka jūs varētu vēlēties, lai izmantotu to. 

Tāpēc failu I / O- Es zinu, ko jūs esat saying-- mēs esam pieraduši lasījums no un rakstot uz mūsu ekrāna tur, kas ir standarta un standarta out. Un tas, ko jūs guys ir bijis darot kopš klasi šeit. Bet jūs varat arī lasīt un rakstīt failus, kas ir visi failu I / O- tik failu ievadi, izeja ir viss tas nozīmē. Tātad tas būtībā nozīmē, ka Jūs varat uzglabāt jūsu datus tagad. 

Kad jūs vienkārši izdrukāt to ekrāns, tas ir būtībā aizgājuši, vai ne? Tiklīdz jūs veicat "Hello pasaule "un palaist" Hello pasaule " tas drukā "Hello World", uz ekrāna. Bet jūs nevarat īsti darīt kaut kas ar to no turienes. Ja jūs glabājat tekstā failu, tad pēkšņi Jums ir šos datus, ka jūs esat ļāva manipulēt vai nodot to failā, vai nodot to programmu vēlāk. Viens no iemesliem kāpēc mēs to darām, ir tikai kā veids, kā uzglabāt datus vēlākai izmantošanai. 

Man ir pāris soļus šeit tikai ejot cauri standarts I / O. Ar vienu soli, jums ir nepieciešams, lai izveidotu atsauci lietai ar visu cepures FILE zvaigzne failu. Tā, ka rada rādītāju uz failu. Tātad jūs vēlaties, lai to atvērtu. Un jūs sakāt, burtiski, tikai failu vienāds fopen. Un tas ir gatavojas atgriezties rādītāju uz faila tikko atvērts. Es redzēju pāris jums puiši pie biroja darba. 

Bet viena no lietām ir remember-- norādes var būt daži adrese vai null, vai ne? Ja mums kādreiz ir gadījums, kad kaut ko var atgriezties null, ko darīt, mums ir jādara Pirms mēs kādreiz izmantot to? Mums ir nepieciešams, lai pārbaudītu, vai tas null vai ne, vai ne? Tā kā daži no jums, iespējams, ir bijusi jautājums, kur kāds objekts tika atgriezās starplaikos bija null. Jūs mēģinājāt veikt daži funkcija par to. Un datoru vietā faulted. Taisnība? I bet pāris jums varēja šo jautājumu. 

Tātad ar fopen, fopen vai nu atgriezties rādītāju uz failu, vai arī, ja kaut kas noiet greizi, tas gatavojas atgriezties null. Tātad jums vienmēr ir nepieciešams, lai pārbaudītu ka tā nav atgriezta null Pirms jūs mēģināt darīt kaut ko citu. Tas ir kā standarta paradigmas ka jūs gatavojas nepieciešams šeit. Ja tur kādreiz iespēja, ka kaut varētu atgriezties null, pārbaudiet, lai pārliecinātos, ka tas nav, pirms Jūs turpināt. Pretējā gadījumā jūs gatavojas nokļūt jauki vietnes kļūdas. Un neviens patīk tikt galā ar tiem. 

Tā kā mēs redzam šeit, pirmo argumentu ir tikai ceļš uz failu. Ja šis fails neeksistē, tas notiek, lai radītu šo failu. Un tas ir tikai būs tukšs. Un tad otrs arguments ir veids, ka jūs vēlaties. Vai mēs gribam, lai lasa no šīs lietas? Vai jūs vēlaties rakstīt no tā? Vai jūs vēlaties pievienot? Tik tiešām, ko es tikko said-- ja fails neeksistē un jūs mēģināt nolasīt no tas, tas būs mest kļūdu. Ja fails name-- patīk, ja file.text vēl neeksistē un jūs vēlaties, lai rakstītu uz to, tas radīs tukšu failu ar nosaukumu file.text jums. Un, ja jūs vēlaties pievienot, Jums vajadzētu darīt to pašu. Vai tas ir jēga? Ja jūs mēģināt nolasīt no failu, kas neeksistē vēl, tas būs mest kļūdu. Pretējā gadījumā, tas radīs failu Jums darīt to, ko jūs vēlaties, lai to. Atdzist. Tagad mēs varam nolasīt no faila. Un tas ir tikai sava veida iet caur dažādām funkcijām ka mums ir par failu I / O. Šī griba būt vajadzīgi šīs nedēļas PSET, ja pareizi atceros. Jā, tas absolūti būs nepieciešamas šīs nedēļas PSET. Tātad fgetc atgriež nākamo rakstzīmi. fgets vienkārši atgriež teksta rindiņu. Tas atgriezīsies kaut līdz jauna līnija, un tā būs pārtraukums. Tātad fread skan noteiktu baitu skaits un sasaista tos masīvs, kas ir kaut kas jūs varētu vēlaties darīt ar atkārtotu size-- varētu būt noderīga. 

Cik daudz cilvēku ir izlasījuši PSET spec, starp citu? OK. [Dzirdams] 

SPEAKER 1: OK. Labi. Noteikti lasīt that-- tas ir jautri PSET. Jums, lai atgūtu svītrots atmiņu card-- tiešām aizraujoši, kad tā darbojas. Bet noteikti, sākt lasīt to. Nāciet runāt ar mani, ja jums ir jautājumi par to. 

Labi, tā kā es jau teicu, fread skan noteiktu skaitu baitu. Tas ir daži patvaļīgi skaits ka jūs esat gatavojas noteikt. Un tad fseek tikai kustas uz noteiktu pozīciju. Tā varbūt jums nav aprūpi par nākamajiem 10 baitu. Jūs vienkārši vēlaties, lai izlaistu uz priekšu. Jums nav jārūpējas par tiem. Jūs vēlaties lasīt, sākot no 11 baitu. fseek ļauj to darīt. Tātad tas ļauj jums būt selektīvs par to, ko jūs lasāt. Jo fgetc, fgets un fread izlasītu no konkrētu vietu failā. 

Veids, kā domāt par to ir, ja tas ir mūsu failu, kad pirmo reizi to atvērtu, Jums ir šo nostāju failā kas sākas sākumā. Ikreiz, kad jūs zvanu fgetc, fgetf vai fread, tas notiek, lai sāktu no šī nostāja marķieris. Pieņemsim, ka jūs vienkārši vēlaties lasīt šis rieciens atmiņas nekā šeit. Jūs varat ne tikai zvanīt. Jums ir meklēt vairāk nekā šeit un pēc tam lasīt no turienes vai lasīt, izpaužas, vai getc, atkarībā no tā, ko jūs vēlaties. Tik meklēt tikai ļauj izlaist porcijas atmiņas. Un tas ir vienīgais veids, kā jūs varat izlaist lietas neizlasot tos savā buferī. Vai tas ir jēga visiem? 

Acīmredzot, tur ir paralēlas here-- daudz mūsu produkcija, vai ieejas novirzīšana, jūs esat lasīt un rakstīt. Tik fputc tikai raksta raksturs failā. fputs raksta līniju. Fprintf izdrukas formāta produkciju. Tātad, ja jums ir cilnes, vai telpa, vai plauktiņš. Un tad fwrite raksta daži masīvs baitu uz failu. Tātad, tas ir tas pats veids fwrite un fread ir analogi opposites-- fgets, fputs, un tad fputc un fgetc-- daudz no traks, ātri lietas. 

Tikko veida saglabāt šo handy-- jums ir dažādos laikos kur varbūt jūs vienkārši vēlaties viens raksturs laikā. Varbūt jūs vēlaties visu līniju. Ar savu vārdnīcu pset-- kas sastāv no divām psets, Es uzskatu, mēs jums visu vārdnīca teksta formātā kas ir katru vārdu atdalītas ar līniju. Tātad, ja jūs vēlējāties izlasīt ar vienu vārdu vienlaicīgi, Ko jūs varētu izmantot, ja jūs lasāt un viņi visi ir nodalīta jaunām līnijām, un jūs vienkārši vēlaties, vienu vārdu vienā reizē? 

Mērķauditorija: Fgets 

SPEAKER 1: Labais. Fgets-- jo tas atgriežas kāds ir uz vienas līnijas. Un, ja katrs vārds ir tās pašu līniju, mēs varam izmantot fgets. Atdzist. Vai, ka jēga, ikvienam? Forši? Jā, mēs ejam, lai saņemtu jautri daļa ar norādes ļoti drīz, kur jums nokļūt darīt daži math. Un tas būs lieliski. 

Pēdējā step-- aizveriet failu. Ar tik daudz lietas šeit, viens no mūsu paradigmu ir, ja tā var atgriezties null, pārbaudiet null. Ja jūs atvērt kaut ko, jūs labāk to aizvērtu. Labi, lai jūs esat nav izdarīts, līdz jūs esat darīts, ja vien jūs esat slēgta to. Veida, piemēram, tas nav beidzies kamēr tauku dāma dzied. Tas ir tāpat kā slēdzot savu failu. Kā tas saka šeit, tikai atkārtot, vienmēr atvērt failu, pirms jūs esat lasot vai rakstot uz to. Un vienmēr aizveriet to, ja esat atvēris to. Viss kārtībā? Atdzist. 

Tātad, šeit ir piemērs. Tāpēc tiny-- es nezinu, ja jums puiši var redzēt, ka ļoti labi. Ja tikai mēs varētu palielināt spilgtums kaut kā. Ļaujiet man patiešām to dara, ja es varu. Labi, jūs puiši nevar īsti redzēt, ka vispār, jūs varat? Labi, mēs esam gatavojas to darīt, tad. [Dzirdams] 

Es pieņemu, tas ir daudz labāk, lai redzētu. Var kāds redzētu, kur manu pele devās ir jautājums? Ah, tur tas is-- ko cīnās! 

OK. Būtībā, jums puiši ir jābūt sava veida par ideju par to, ko tas dara. Tas nav ideāls. Bet es labprātāk izskaidrot to, nekā tērēt vairāk laika cenšas formatēt to pareizi. Būtībā, kā jūs redzēt šeit, sākam ar failu atvērt. Un mums ir daži datu bāzes failu, ka mēs esam atverot, ka saka, ka tā ir mūsu studenti. Un mēs ejam, lai rakstīt to. Tātad, protams, atgriezties null. Tātad mums ir, lai pārbaudītu null. Un tad, ja tas nav null, mēs ejam cauri. Un, kā jūs redzat, mēs esam looping cauri šeit. Tur ir studenti. Studenti ir hash definēta kā trīs. Un tas, ko mēs darām, ir, mēs esam drukāšana uz failu, vai ne? Tātad, ko mēs izdrukāt, lai mūsu failu? 

AUDITORIJA: Punkti kas ir masīvs? 

SPEAKER 1: Jā. Rādītāji, kas ir kas array-- precīzi. Tātad mēs atveram šo datu bāzes failu, kas Es pieņemu, ir zināma veida atzīmju datubāzi. Un mēs esam tikai izdrukāšana rādītāji katram studentam uz šo failu. Forši? Labi. Awesome. OK. Pieņemsim nokļūt atpakaļ kuri paredzēti, 

Mērķauditorija: Man ir ātrs jautājums. Vai printf nav cilpa? Tas ir tikai tajā, ja cilpa? SPEAKER 1: Nē, tas ir cilpa. Es neredzu savu peli ļoti labi šeit. Tāpēc es esmu cīnās, lai formāts, kas pareizi. Šis kronšteins būtu pagājis. Tai vajadzētu būt uz leju šeit. Tas ir tas, kas ir jūsu cilpas. Tur. Tagad tas ir diezgan. Tātad tas, kā tas būtu be-- izņemot šajā pēdējā grupā, kas man jānoraida. OK. Vai tas ir jēga visiem? OK. Mēs ejam, lai pārvietotos tālāk uz nākamo lieta then-- kas, patiesībā, jūs gatavojas nepieciešams, lai redzētu kodu. Tāpēc es esmu tikai gatavojas kopēt, ka vairāk nekā tagad. OK. Tāpēc es esmu gatavojas parādīs puiši šo kodu. Un es gribu, lai jūs, lai mēģinātu skaitlis kas tas ir vajadzēja darīt. 

Tātad, ņemot vērā that-- ņemt minūti, vai arī tā. Izmēģināt un saprast, kas notiek šeit. 

Jebkuras idejas? 

Mēs zinām, ka mums ir vismaz divas argumenti komandrindas, vai ne? Es pieņemu, no kuriem viens būs ka [dzirdams] no mūsu programma ir un tad kaut kas cits. Jo, ja [dzirdams] ir mazāks nekā divi, mēs kliegt uz viņiem. Taisnība? Un no izmantošanas, tas izskatās tas būs daži no faila veida. Mēs visi piekrīt, ka? Tāpēc tagad, kas ir cilpa dara? Kas tas iet cauri? 

Mērķauditorija: Visi faili. SPEAKER 1: Tieši tā. Tas iet cauri visiem faili, kas mēs esam ievadi tur. Tātad par katru failu, tas ir atverot kādu stīgu tur. Tas atverot šo failu. Taisnība? Un tas ir lasījums no tā. Protams, pārbaudot, vai tā ir null. Un tad tas ir drukāšanas. Ja tas ir spēkā, tas ir tikai stāsta mums ka tas nav fails, kas pastāv. Jo atceros, ar izlasiet fails ir pastāvēt. Taisnība? Ar rakstīt un pievienot, jūs varat saņemt prom ar to. Bet ar lasīt, mūsu fails ir pastāvēt. 

Un tad, ja tas pastāv, ko mēs šeit darām? Pieņemsim tikai sākt šeit. Kas tas do-- šo pirmo rakstzīmi. Ko tas dara? Viņš saņem vienu rakstzīmi, vai ne? Tātad, kas ir tas dara? Tas kļūst par pirmo rakstzīmi. Ikviens zina EOF? 

Mērķauditorija: faila beigas? 

SPEAKER 1: beigas file-- precīzi. Tātad, tas notiek, lai iet cauri visa lieta, vai ne? Un tad tas notiek, lai atjauninātu ar kļūst katru turpmāko raksturs. Taisnība? Un, kas ir tas dara? Mērķauditorija: Liekot ka in-- 

SPEAKER 1: putchar izdrukas jūsu ekrānsaudzētājs. [Dzirdams] raksturs. Un tad, kad tas [dzirdams] tas aizveriet failu. 

Mērķauditorija: Vai jums nav nepieciešams [? cits? ?] 

SPEAKER 1: Ne vienmēr. Es domāju, tas ir sava veida nozīmēja šajā. Jo tas atgriežas, lai gan, ja vien jo tas nenoķer, jūs esat labi. Es domāju, tas ir iespējams, labi praktizēt to darīt citam. Bet cits ne vienmēr vajadzīga, jo īpaši Ja jums ir kaut kas kā atgriešanās, kas nozīmē, ka šajā gadījumā, ja tas uztver tas, jūsu programma ir beigsies un tas nekad nokļūt šo. Tas ir vairāk, lai gadījumā, ja jūs esat ne vienmēr atgriežas kaut ko. Jo, ja tas nav atgriežoties neko, tas nozīmētu, ka, ja tā būtu taisnība, pārējā tas joprojām darbojas. Un tādā gadījumā, jums gribētu nepatiesa. Ja tā ir atgriešanās, un Jūsu programmas beigas, cits nav nepieciešams visu laiks, atkarībā no apstākļiem. Jēkabs bija jums ir jautājums? AUDITORIJA: Jā. Tātad tas fgetc saņemt nākamo rakstzīmi? Kā raksturs pieaugs? SPEAKER 1: Jā. Tātad fgetc saņem nākamo rakstzīmi. Jūs varat domāt par to, piemēram, C ++ savā ziņā. 

Mērķauditorija: Tātad, kas bija EOF? 

SPEAKER 1: EOF ir faila beigas. Tas ir tikai marķieris, kas ļauj jums zināt ka jūs beigās jūsu failu. Tātad, tas notiek, lai drukātu Jūsu standartam out. Un tad tas notiek, lai aizvērtu failu, kad tas ir izdarīts. Un tad iesim uz nākamo failu, vai ne? Tātad kopumā, ko tas programma darīt? 

[Dzirdams] 

SPEAKER 1: Jā. Tā vienkārši izdrukā viss tur. Tātad, ja jūs guys kādreiz sadaļā CAT un tad vārds kādu file-- Es nezinu, vai kāds no jums ir kādreiz darīts, ka uz jūsu terminālu. Bet, ja jūs kādreiz izmantot komandu CAT-- C--T-- un tad kāds fails Jums ir there-- to izdrukā to, lai jūsu terminālu, kurā var būt super ērts dažām lietām. Es to izmantot daudz. Vai tas ir jēga visiem? Forši? 

Labi, tāpēc jūsu uzdevums now-- nu pats vai ar apkārtējiem cilvēkiem you-- ir vienkārši uzrakstīt vienkāršu programmu kas būs tikai rakstīt "Hello, World!" out failā. 

[Dzirdams] 

[Dzirdams] 

SPEAKER 1: Man bija, piemēram, darīja Man, ka slikti pagājušajā nedēļā? Es nedomāju, ka tas bija tik slikti. Es esmu priecīgs jūs visi šeit. Tas patiešām padara mani laimīgu. Es esmu meitene vienkārši baudām. Es tikai gribētu, kad mans sadaļā apmeklē. Tāpēc es esmu tikai iegūt šo uzsākts jūs puiši, lai mēs varētu kods kopā. Man nepatīk, liekot nevienam par vietas, ja jūs vēlaties būt. 

Mērķauditorija: Par viktorīnu, do mums ir uzrakstīt programmu? 

SPEAKER 1: Jums var lūgt uzrakstīt vienkāršas programmas ar rokām. Yup. 

Mērķauditorija: viktorīna ir nākamnedēļ, vai ne? 

SPEAKER 1: viktorīna ir nākamo trešdien. Tas nozīmē, ka tur ir jauki [? CSE?] šķirošanas puse tam, kas nozīmē, ka jūs saņemsiet savus punktus atpakaļ, ka night-- cikos? Kas to lai zina? Bet tas būs, ka nakts. 

Labi. Kā mēs vēlamies sākt šo? Es došu jums hint-- sākas ar to. 

Mērķauditorija: Jums ir atvērt failu. 

SPEAKER 1: Jā. Tātad, ko jūs vēlaties, lai izsauktu šo? Vai jūs vienkārši vēlaties, lai izsauktu to "fails"? Let 's padarīt to viegli. Tātad fopen--, kas ir mūsu izeja tests būs? To sauc par "Sveiki." Un kāda ir mūsu režīms? Ko mēs darām, lai šo failu? 

AUDITORIJA: Lasīt. Rakstiski. SPEAKER 1: Mēs rakstām, lai to. Jauki. Labi, tāpēc mums ir šo failu tagad. Kas mums jādara? Mērķauditorija: Pārbaudiet, vai tas ir null. SPEAKER 1: Pārbaudiet, vai tas ir null-- precīzi. Tas ir tas, ko es gribētu dzirdēt. Kas būtu automātiska, īpaši diezgan daudz no šī brīža. Ja jūs sākat segfaulting, jūs, iespējams, nebija pārbaudīt null kaut kur. Deviņas reizes no desmit, kas ir būs jūsu kļūda. Tātad, ja jūs varētu tikai iegūt ieradums, vienmēr pārbaudiet, vai tas ir nulle, jūsu dzīve ir būs jauka un easy-- vai vieglāk. 

Tāpēc pārbaudiet, vai tas ir null. Tātad, ja tas nav null, kas ir tas, kas sprādziena vienāds means-- nav null-- tas ir derīgs. Ko mēs vēlamies darīt? Mēs vienkārši vēlamies, lai drukātu uz šo failu, vai ne? Tātad, ko mēs gatavojamies izmantot? 

AUDITORIJA: fprintf 

SPEAKER 1: Fprintf-- jauki. Un fprintf ņem divas arguments-- vajadzības tas notiek, un to, ko mēs gribam izdrukāt. Tātad, kas ir pirmais? Kur tas notiek? 

AUDITORIJA: File. 

SPEAKER 1: Tas būs failu. Un tas, ko mēs vēlamies drukāts? "Hello, world!" Labi. Mums ir viena pēdējā thing-- vēl viens liels paradigma šeit. AUDITORIJA: Close. SPEAKER 1: Close. Tur jums iet. 

Mērķauditorija: Vai tas notiek Ja fails ir nulle? SPEAKER 1: Nē, tas ir, ja tā nav spēkā. Mērķauditorija: Ak, ja tas ir not-- OK. Lai fopen un pēc tam divi argumenti, kas iet iekšā, Kāda pirmais arguments nozīmē atkal? 

SPEAKER 1: arguments ir tāpat kā faila nosaukumu ka jūs vēlaties doties. Tātad, pēc tam iet, jūs varētu ir daži failu ar nosaukumu "sveiki" ka bija "Hello, World" tajā. Tas ir viss. Tikai nosaukums. 

Mērķauditorija: Un tā kā tas ir rakstiski, fails nav jau pastāv. Ir tā, ka tas, ko jūs teicāt? 

SPEAKER 1: Labais. Tieši tā. Ja "Hello", kā failu neeksistē vēl, tas ir iet uz izveidot failu sauc Hello "un rakstīt to jums. 

Mērķauditorija: Kad jūs esat stāsta programma rakstīja uz failu, kāpēc jūs rakstīt "failu", nevis faila nosaukums un fprintf-- 

SPEAKER 1: Tā kā šajā gadījumā, mēs esam ka liela FILE-- visi caps-- zvaigzne, failu. Tātad, tas ir rādītājs uz failu ka jūs runājat par. Tas ir tā, ka mēs vienkārši atsaukties uz to. Tātad šajā gadījumā, jums var domāt par file-- AHA, mēs varam izmantot this-- failu šeit atsaucas uz atvēršanu "Hello" un ļaujot tam rakstīt. 

Mērķauditorija: Vai mēs ieliekam "Hello" vietā [? lai tikai?] f failu? SPEAKER 1: Nē, jo "Hello" jābūt atklātam un rakstāms. Failu šeit ir līdzīgi apzīmējums, kas saka OK, mēs ir šī file-- hello-- ka mēs meklējam. Tā ir atvērta. Un mēs rakstīt to. Ja jūs tikai izmantot "Hello", kas ir iekļauta tajā. Tātad, tas notiek, lai ķēms. Es domāju, jūs varētu būt nosauca to. Jūs varētu darīt failu, zvaigzne, "Hello", ir vienāda. Bet viss ir tas, ka jums vajag failu zvaigžņu rādītāju, lai lai varētu izmantot šīs funkcijas. Mērķauditorija: Vai jūs varētu darīt failu, zvaigzne, fails, "Hello" vai jums ir likts failu zvaigzne, failu ar to? SPEAKER 1: Jums varētu do failu, zvaigzne, "Hello". Jūs varat mainīt šo kāds nosaukums vēlaties. Tas ir pilnīgi patvaļīgi ko tas vārds ir. Jūs varat nosaukt to neko. Nosaukt to peld spageti, ja vēlaties. 

Mērķauditorija: Kas ir "w" pēdiņās atrast? 

SPEAKER 1: "w" ir tikai režīmā. Tāpēc mēs esam rakstiski uz šo failu. Ikvienam labs? Skaidrs? Jā. 

Mērķauditorija: Tātad, ja tā raksta šis failu, kur mēs pēc tam atrast šo failu? 

SPEAKER 1: Tas būšu pats katalogs, kurā tu atrodies. Ja tu esi PSET trīs un Palaižot šo, jūsu PSET trīs mape būs šo failu ar nosaukumu "Hello". Forši? Ikvienam labs? Es jūtu, ka jūs visi panākt, lai to, kas ir lieliski. OK. Tātad atpakaļ uz manu slaidu show-- Man patīk, kad viss strādā. Labi, pointers-- Vai jūs guys satraukti? Norādes ir lieliski. Viņi ņem mazliet wrap galvu ap. Šis ir mans otrais gads mācību norādes. Un es domāju, ka es beidzot saņēmu to. Tātad, ja jūs cīnās, tas ir OK. Kā jau teicu iepriekš, zīmēšana palīdz daudz ar lietām CS, tik daudz, kā es domāju, ka cilvēki mēdz domāt ak, mēs esam pie datora. Mums vajadzētu tikai kodu. No-- zīmēšana būs tiešām jums palīdzēt. Un es tiešām aicinam jūs savlaicīgi savā kindergartner pusē un izcelt krītiņi vai marķieri un izloze. Jo tas jums palīdzēs. Un, ja jūs redzat mani darba laika, es būs līdzi kaudzēm papīru ar pildspalvas zīmēšanas lietas. 

Tāpēc jo īpaši ar pointers-- izdarīt attēlus. Un es esmu pārliecināts, ka mēs patiešām gatavojas būt zīmēšanas dažas bildes arī šeit. 

Tātad jūs puiši visi dabūja redzēt mīkstās, Šī atdzist claymation lieta. Un mēs domājam, ka tas ir patiešām smieklīgi, kad viņš eksplodē ķekars gabalos. Tas ir sava komiksu atvieglojums par klasi. C [dzirdams] tas lieliski spēja lai varētu kontrolēt atmiņu. Un tā ir viena no lietām, kas patiešām padara to tik spēcīgu valodu. Bet ar lielu spēku nāk liela atbildība. Un trakas lietas var notikt Ja jūs neesat uzmanīgi. Tātad, ja jūs izmantojat norādes, jūs vēlaties, lai padarītu pārliecināts, ka jūs patiešām saprotat tieši to, ko jūs darāt. Cerams, ka nākamais mazliet laiks palīdzēs jums tiešām saprast norādes, kā tos izmantot, un to, kā manipulēt ar viņiem. 

Tāpēc memory-- es esmu pārliecināts, ka mēs esam redzējis šo diagrammu iepriekš. Tātad tas ir tikai vienkāršs diagramma kā lietas varētu uzglabāt atmiņu. Tātad, jūs būtībā ir šie milzīgs bloki no viena baitu blokiem ir tas, ko mēs esam here-- neliela soli pa vienam katru reizi. Tas ir hex [dzirdams] tik astoņu bitu bloki. Un katrs bloks ir saistīta ar kādu heksadecimālo adresi. Tātad, ja jūs kādreiz redzēt 0x, ka ir tikai notating ka tas ir heksadecimālajā adresi. Jūs varat pieņemt, tas nozīmē, daži adresi atmiņā. Mēs runājam par atmiņas adreses kad jūs redzat heksadecimālo. 

Mums ir Ints ir mainīgie, pludiņiem ir mainīgie, kas saglabā. Tātad Ints veikalu Ints. Pludiņiem veikals pludiņi. Tātad mums ir arī norādes ka veikals atmiņas adreses. Tas ir sava veida kartēšanu. Norādes ir tikai atmiņas adresēm. Tātad tas ir kā sava veida tur. Jūsu ierīce ir 32-bit, kas nozīmē, ka atmiņas adrese ir četri baiti. Tāpēc jebkurš rādītājs, ka jums ir arī būs četri baiti. Vai arī, ja tas ir četri baiti, atmiņa ir četri baiti. Norādes veikals atmiņas. Tāpēc viņi četri baiti. Cool-- vienkārši vēlamies stiprināt to. 

Jums vajadzētu saņemt šo komiksu tagad. Es nezinu, cik daudzi no jums ir xkcd fani, bet es mīlu xkcd. Tas ir lieliski. 

Labi. Tā radot pointers-- kā jau teicu, tas ir diezgan daudz, tāpat kā kaut kas cits. Jums ir veidu. Jums ir nosaukums. Taisnība? Tas ir tas, ko mēs esam tur. [? Hex?] Zvaigzne nozīmē, ka tas ir rādītājs, un tad ko jūs vēlaties, lai izsauktu to. Tātad veids pārstāv ko jūs varat saglabāt. Viss kārtībā? Tādā pašā veidā, ka, ja mēs Ints, Mēs zinām, mēs uzglabātu int tur. Ar rādītājs, to tur atmiņas adresi. Bet ko tas nozīmē ir that-- šeit ir, ja zīmējums gatavojas noderēs. Tātad, šajā gadījumā, mums ir daži value-- teiksim četri. Četri ir vienā adresē. OK? 

Šis pirmais šeit nozīmē ka tas ir rādītājs 2x. Taisnība? Tas ir daži rādītājs x. x var būt kaut kas, neatkarīgi. Neatkarīgi x is-- teikt x ir četri. Tas notiek, lai saglabātu atmiņas adrese šeit. Tātad int, zvaigzne, X- tas ir dažas citas slots memory-- kas zina, kas tas ir. Bet tas notiek, lai saglabātu adresi šeit. Tas būtu like-- Šajā gadījumā, lai kāds, tiek uzglabāts 0x1-- kāds tiek glabāti pēc adreses, ka mūsu rādītājs tur, ir jāsakrīt ar ko mēs esam izraudzīta. Tātad 0x1, šajā gadījumā, tas ir x. Tas var tikai kādreiz būt int, kamēr mēs, izmantojot šo. 

Tāpat, ja mēs esam cits 1g, neatkarīgi adrese tiek glabāta ar y ir būt char-- pats ar z. Tādā pašā veidā, kad jūs mēģināt un darīt intx vienāds ar 0,4, tas notiek, lai kliegt pie jums, un būs piemēram, nē, jūs teicāt, ka gribēja int. Tas ir vajadzētu būt int. Pietura mēģina padarīt to pludiņš. 

So let lietas, ko viņi vēlas būt. Ļaut lietas būt paši. Tik liela lieta ir tikai neatkarīgi no rādītāja veids tā ir, tas ir vienīgais lieta, ko jūs varat glabāt tur. OK? Ar praksi, kā ar pagājušajā nedēļā, viss Šķiet tiešām veida abstrakts. Mēs darīsim zināmu praksi. Tas būtu daudz lietderīgāk. 

Tik norādes un dereferencing-- tas ir ļoti svarīgi, lai saņemtu šos taisni. Man joprojām ir atsvaidzināt šad un tad. Un es esmu, piemēram, jāgaida, kuriem viens es gribu? Tātad & zīme būs faktiski dod Jums atsauce vai adrese. Tātad tas atgriež adresi atmiņa mainīgo tiek glabāti. Tātad, tas notiek, lai tiešām atgriezīsies pie jums heksadecimālo, savukārt dereferencing to ir faktiski gatavojas sniegt jums dati, kas glabājas tur. OK? Tātad mēs ejam apskatīt piemēru ļoti ātri, vai faktiski pat blakus. 

OK. Tāpēc mums ir jādomā patiešām rūpīgi par to. Tātad šeit mums ir dažas skaitlim x. Es esmu gatavojas izmēģināt un izdarīt to , lai labāko no savām spējām. Tātad mēs ejam, lai būtu šo spēļu x. Un tas ir glabāšanai pieci. Tās adrese ir 0x4. Forši? Viss ir labi. 

Tāpēc tagad mums ir šo rādītāju. Tas bija vairāk nekā šeit. Un & zīme dod mums adrese kaut ko. Tātad, šajā gadījumā, tā ir adrese, x. Kāda ir adrese x? 04-- un šis rādītājs ir 0x08. Forši? Tātad, jūs varat domāt par to rādītājs, 04, tikai norāda nekā šeit. Un viņi sauc norādes jo, kā mēs iegūtu vairāk uz šo, jūs gatavojas, lai redzētu, norādot uz lietām. Un viena kvartāla norādot uz otru bloks būs daudz lielāka jēga. Tātad, šeit ir divi. Un tad mums ir dažas kopija, kas ir what-- 0x0c. Un tas notiek, lai dereference mūsu rādītājs. 

Tātad, kas tas ir saprotams, ir Labi, šeit ir mūsu rādītājs. Vērtība, tas saglabā ir 0x04 un kādi tas ir saprotams, ir doties uz šo adresi un man pateikt, ko tas nozīmē. Tā ka ir efektīvi Ko tas bultiņa dara. Jūs varat domāt par to kā savu zvaigzni. Tātad Labi, kad mēs zvaigzni, tas nozīmē sekot. Iet uz šo adresi. Un tas ir būtībā tikai pēc tas bultiņu, lai šajā atmiņas rieciens. Un dot mums to, kas ir tajā, kas ir 5. Tas ir iemesls, kāpēc mūsu kopija ir vienāds ar 5. Vai tas ir jēga? Vai kāds ir nepieciešams, man iet cauri ka atkal, vai lēnāk? Tu gribi, lai iet caur to vēl vienu reizi? OK. Mēs ejam, lai ievilktu to vēlreiz. Kad mēs sākam, mēs visi piekrītam, mēs esam daži rieciens atmiņas, kas ir mainīga x, ka mēs, kas vienāds ar 5. Mums nav kontrolēt, kur tas ir atmiņā. Tātad, šīs vietas ir tikai patvaļīgi piešķirts. Labs tur? OK. Tad mēs inicializēt rādītāju uz int. Tieši tāpēc tas ir atļauts norādīt uz x jo mums ir int šeit. Mums ir vēl viens rieciens Atmiņas jo šis rādītājs ir mainīgs, tāpat kā kaut kas cits. Tas ir patvaļīgi piešķirts dažas vietas atmiņā. Un ko tas saglabā ir adrese x. Ampersand nozīmē adresi x. Tātad, kas ir adrese x? 

AUDITORIJA: Tas ir zero-- SPEAKER 1: 0x04. Tik then-- pēdējais. Mums ir dažas copy-- atkal tikai vēl viens mainīgais. Tāpēc pieņemsim piešķirt kādu patvaļīgu vietu. Un mēs dereference mūsu rādītājs. Zvaigzne nozīmē doties adrese glabājas manā rādītājs. Man pateikt, kas ir tur. Tāpēc adrese uzglabā Mūsu rādītājs ir 0x04. Tātad mēs ejam uz šo adresi. Tas norāda uz šo adresi. Kas ir iekšā šajā atmiņas bloku? Tas ir piecas. Tāpēc, ka tas, ko mēs piešķirt mūsu kopiju. Ikvienam labs? Atdzist. Again-- bildes. 

Tā uzskaites vērtības here-- es esmu gatavojas let jūs guys domā par to. Mēs varam izdarīt vēl vienu attēlu. Bet es gribu, lai jūs, lai mēģinātu un iemesls caur šo par savu minūti. 

Tā kā tie nedeva mums piemērs adrese, Es esmu tikai gatavojas darīt aizvieto & zīmes X- kam vajadzētu palīdzēt vadīt to mājās. Ampersand nozīmē adresi. 

Tātad vispirms vienā, visiem iet ar pirmo līniju. Daži x komplekts s five-- dažus izlases slots atmiņā. Int zvaigzne rādītājs ir vienāds uz adresi x, vai ne? Int zvaigzne rādītājs rada Šis bloks prasa tas rādītājs, un piešķir to uz adresi, x. Es esmu briesmīgi ampersands. 

Tagad to, ko mēs darām, ir mēs sakām Labi, dereference mūsu rādītājs. Tātad mēs ejam Labi, kāda ir mūsu rādītājs? Tā ir zīme & x. Iet uz Ampersends x un pārdalīt to. 

Tāpēc tagad, & zīme x būs 35. Vārdu sakot, ja esat dereferencing, jums iet OK. Jūs esat būs zīmēšanas bildes patika to. Jūs esat būs zīmēšanas jūsu bultiņām nekā, kur tas ir. Lai iet uz šo slots atmiņā un vai nu dod man šo vērtību atpakaļ, vai mainīt to. Šajā gadījumā, jo mēs pie šī vērtību, mēs piešķirot tai jābūt 35. Tā kā pēdējā viens, ja pamanāt, mēs Tika piešķiršanu, kas bija šeit, lai kaut kas cits. 

Tāpēc viņi ir šo awesome tabulu. Tas nav tik slikti. Jūs guys strādāt par to. Es esmu gatavojas izdarīt to ārā uz klāja. Mēs ejam, lai aizpildītu to ārā kopā, OK? Tātad greifers dažas papīra, grab partneris, sākt strādāt. Es esmu gatavojas saņemt lielāks gabals krītu. Jo tas būs daudz. OK. PROFESSOR: OK. Sāksim ar pirmo rindu. Mēs sāksim tur, tad jūs puiši var varbūt strādāt ar dažas vairāk. OK. vienāds b reizes c tā, kādi ir? Tas nav āķīgs jautājums, es apsolu. 

STUDENTU: 4 reizes 5. 

PROFESSOR: 4 reizes 5. 20. Tātad, kas ir b? STUDENTU: 4. 

PROFESSOR: Un c? STUDENTU: 5. PROFESSOR: 5. Un tad tas ir tikai gatavojas tikt Ampersends a, b aizvieto & zīmes, c & zīme, vai ne? Nav slikti. Tas ir pietiekami vienkārši. OK. Tātad nākamo. Vienāds reizes C, ja ikviens bija svešs ar to. Vai visi pazīstami ar laiki ir vienāds? Labi, tas viss means-- tas ir saīsinājums vienāds reizes c. Jūs varat arī darīt to ar sadalījumu, Pievienojot, ar atņemšanu. Jūs varat darīt ir vienāds, vai plus vienāds c ir vienāds plus c, mīnuss vienlīdzīgu c būtu vienāds ar mīnus c. Tas ir tikai sintaktisko cukura. 

Tātad, šajā gadījumā, ir vienāda ar a reizes c dotu mums, ko? Atkal, ne āķīgs jautājums. 

STUDENTU: 100. 

PROFESSOR: 100. Vai kaut kas cits jāmaina? Nē. Varbūt es beidzot saņemt labāk maniem ampersands. 

STUDENTU: OK, sorry, kā jūs saņemsiet 100? PROFESSOR: OK. Tātad, ir vienāds ar reizes c, tāpēc reizes c. STUDENTU: Ak, jūs izmantojat par previous-- PROFESSOR: Jā. Tātad šie ir mūsu jaunākās vērtības. Šie ir tas, ko jums vajadzētu būt izmantojot kā mēs virzāmies uz leju, OK. Tātad, b ir vienīgā lieta mainās, vai ne? Tāpēc pieņemsim jāaizpilda viss cits. B. Kas ir b būs? Būt vai nebūt. Tātad, kas ir tas dara? Kas ir zvaigzne pa dara? 

STUDENTU: Kods uz vietu gadā. 

STUDENTU: Nē, ne gluži. Tātad tas ir d atsauces. 

STUDENTU: Tātad b ir roku vērtība gadā. 

PROFESSOR: Jā, tā ir pa adresi, vai ne? Tātad, tas ir saprotams, iet uz to, kur ir uzglabā un arī tā šo vērtību. Tātad, kas ir b? STUDENTU: 100. PROFESSOR: 100. Perfekta. Labi, tāpēc dators ir to, kas mainās. Viss pārējais paliek tas pats. Kas ir pc būs? Vienkāršs uzdevums. Pc ir vienāds ar gadā, un to, kas ir pa? 

STUDENTU: & zīme. PROFESSOR: Perfect. Tagad mēs esam kļūst interesanti. Labi, pieņemsim pārtrauktu šo vienu uz leju. Pirmkārt, kas ir b reizes C, jo tas ir viegli daļu no šo vienu, vai ne? B reizes c is-- 

STUDENTU: 500. 

PROFESSOR: Jā, tāpēc Kas tas ir viens dara, Ja tas ir zvaigžņu pb, to, kas mainās? 

STUDENTU: Kas the-- PROFESSOR: Kas ir b? STUDENTU: Kas telpā ka pb ir vērsta uz. PROFESSOR: Un pb ir vērsta kuri paredzēti, STUDENT: B. PROFESSOR: vienīgais B. So lieta mainās ir b, taisnība. Tātad b reizes c, 500. Tā ka ir kādas izmaiņas tagad. Atdzist. Jauki. Jūs puiši dara lieliski. Visas tiesības, pārkāpj šo vienu uz leju. C mainās, vai ne? Tātad, mēs varam aizpildīt viss pārējais. Paskatīsimies. OK. Mēs zinām, ka c būs produkts diviem cipariem, vai ne? Kādi divi skaitļi, gan? 

STUDENTU: un c? 

PROFESSOR: Tātad ir tiesības uz pirmo. Tāpēc mēs gribētu atsauču p, vai ne? P A līdz, tāpēc mēs zinām, ka tas būs 100 reizes, ko? Reizes Kāda pc punktu? Norāda. Tātad 100 reizes 100 ir 10,000. Vai tas ir jēga? Atdzist. Mājās stiept, puiši, pēdējā rindā. OK. Kas mainīsies šeit? 

STUDENT: A. PROFESSOR: A. Perfect, tāpēc viss pārējais var palikt tāds pats. OK. Un kas ir? Tātad, tas ir reizes, ko? Tas ir zvaigzne pb. Tātad zvaigzne pb nozīmē šeit ir pb, PB norāda uz b. 

STUDENTU: 500. 

PROFESSOR: 500. Tāpēc mums ir 500 100 reizes. Tas ir 50.000. Whew! Paskaties, ka. 

STUDENTU: Kāpēc mums ir un c par last-- PROFESSOR: Sorry. STUDENTU: Ak, OK. PROFESSOR: Mana slikti. Daudz rakstiski. Ikvienam labs? Ne pārāk slikti, vai ne? Tikai ņem nedaudz bet uz darbu cauri. Ja jūs sadalīt, saprast, kas katras daļas atsaucas kuri paredzēti, kā ar visu tas ir, yes-- pārtrauktu to uz leju, lai maz problēmas, un tad Gabalus, un jūs varat darīt dažas awesome stuff. Tur ir atbildes, bet mēs to izdarīja. Rādītājs aritmētika. Ah. Manas rokas ir visas kaļķaina. Tātad pievienojot vai atņemot int pielāgo rādītāju ar izmēru no rādītāja veida. Atceros, kā visu veidu ir cits izmērs? Tātad, piemēram, dubultā vai ilgi ilgi astoņi un int ir četri, bet char ir viens. 

Tātad, ko jūs vēlaties darīt is-- viena lieta, kas jāatceras ir tikai, ka, cik daudz jūsu rādītājs vērtība faktiski mainās būs atkarīgs no rādītāja veida tā ir. Ikvienam labi ar šo? Vai es varu izdzēst? Mēs esam labi? Awesome. 

Tātad, ja mums ir daži rādītājs that-- tas gatavojas be-- es esmu gatavojas darīt to int rādītājs. Tas saglabā to. Ja tu būtu teikt rādītāju plus viens, ko tā gatavojas darīt tas notiek, lai atjauninātu tas ar izmēru int jo tas ir no rādītāja veida tā ir. 

Ar C, viss ir ļoti stingri un regulēta. Int rādītājs gatavojas atjaunināt ar vietas daudzumu int varētu veikt. Int ir četri baiti. 

Tātad, kas būtu tas pārvērtīsies? Jūs vienkārši pievienojot četrus uz šo. Tagad jūsu rādītājs būs be-- OK. 

Tātad, ja tas bija char un mēs to darījām rādītāju plus viens, kas tas būtu tagad? Ja tas started-- izliekoties mēs started-- šobrīd tas ir 0x08. Pieņemsim tagad saka, ka tas bija char rādītāju, un mēs pievienojām vienu. Ko tas mainītu to? Cik baitu ir char? 

AUDITORIJA: One. 

SPEAKER 1: One. Mērķauditorija: Tātad 0x09. SPEAKER 1: Tātad tas būtu deviņi. Tik vienkārši kaut ko atcerēties. Tikai tad, kad jūs pievienot vienu, tas nav pievienojot vienu, ja vien tas ir char. Tas ir piebilstot, cik baiti veidu, ka tā ir, kas ir iemesls, kāpēc mēs esam šis vienādojums šeit. Tātad, tas ir int reizes izmērs no gada rādītāja veida. 

Tātad mums ir piemērs šeit. y tika piešķirts šo vērtību, 0x4, kad mēs darījām y plus vienāds vienu. Kas ir tajā, kas ir X, nemainās. Kas mainās, ir to, kas ir y. Adrese glabājas y atjaunināts ar četri tāpēc, ka ir četri baiti ir int un tas ir int rādītājs. 

Labi. Tāpēc tagad mums ir cits uzdevums. Tātad jautājums ir par to, kas būs drukāt. Jebkuras idejas? 

Mērķauditorija: of skaits rakstzīmes laimīgs kaķis? SPEAKER 1: Tieši tā. Tik patīk ar savu auklu. Vai visi iegūtu, ka? Vai mēs gribam, lai iet caur to? 

Jā, OK. Tātad, ko mēs esam here-- I kā šis tik daudz vairāk. Man nav [Dzirdams] smieklīgi. 

Tātad mums ir virkne šeit, laimīgs kaķis. Jauki. Mums ir daži skaitītājs, kas mēs sekotu. Tātad mums ir dažas char * rādītāju ka tikai ir noteikts vienāds str. Ko tas dara, ir tā piešķirot kādu rādītāju uz sākumu jūsu virknes. Tāpēc, ka es esmu pārliecināts, jo tas Tika minēts lekcijā esam radījuši jums puiši šis datu tips sauc virkne. 

Bet tiešām stīgas ir tikai masīvs of-- piemēram char *. Tas ir rādītājs, lai ķekars rakstzīmes ka ir blakusesoši atmiņā. Tātad, tas tikai nosaka to vienāds ar jebkuru virkne ir identificē ar kur savu pirmo raksturs ir. Tātad tas ir tikai nosakot kādu punktu vienāds ar sākuma virkni. Ikvienam labs tur? Atdzist. 

Tātad šis ir dereferencing mūsu rādītāju. Tātad, tas ir patiešām gatavojas dod mums kādu vērtību šeit mūsu string, ka mēs runājam par. Un mēs esam sakot, tik ilgi, cik tas nav null terminatoru. Tā turpināt iet, kamēr jūs saņemsiet līdz beigām virkni. Atjaunināt savu rādītāju par vienu. Tātad r, tas tiešām atjaunināt ar vienu katru reizi, jo tas ir char, char *. 

Tātad, tas notiek, lai iet cauri. Tas notiek, lai atjauninātu. Tātad, pirmo reizi tas iet, tas būs šeit h. Tas notiek, lai atjauninātu. 

Tā būs. Tas būs p, y, un tā tālāk, un tā tālāk. Mēs atjaunināt skaitītāju. Kad tas sasniedz beigām, to vienkārši drukā, cik tālu tas ir gotten. Jā. 

Mērķauditorija: Tātad Tas skaita telpa kā viens, vai ne? OK. 

SPEAKER 1: Padomā tik. Ir tas, ka ar question-- 

Mērķauditorija: [dzirdams]. 

SPEAKER 1: Neraizējieties. Tas man darīt. Viss ir labi, tāpēc viena lieta, ko es saprotu, ir tas, ka ar masīvu, Jūs varat arī uzskatīt to par rādītājs, jo bloki ir tikai nepārtraukti plankumi atmiņā. 

Tātad jūs varat ārstēt to tādā pašā veidā. Jūs varat manipulēt ar viņiem ar norādes, too. Tā vietā, lai dara, šajā gadījumā, analogs lieta būtu masīvs 0 ir vienāds ar 1. 

Bet tādā pašā veidā, ka virkne ir noteikta ar sākuma kur tās pirmais raksturs ir, masīvs nosaka kur tās pirmais elements ir. Jo mēs zinām, mēs esam garantēts, ka šie gribam būt nepārtraukta bloki atmiņā. Tas ir tas, kas ļauj mums to darīt. Mēs zinām, ka viņi nepārtraukti bloki atmiņā. 

Tātad, šajā gadījumā, ar dereferencing tikai masīvs, kas stāsta mums, Labi, dodieties uz sākumu Jūsu masīvs, kas ir šeit. Tātad jūs varat iestatīt tā, kas vienāds ar vienu. Un šajā gadījumā, neatkarīgi no jūsu masīvs veids ir, kad jūs atjaunināt to ar vienu, tas ir tāpat kā atjaunināt tā uz nākamo indeksu. Jūs varat darīt, jo jums zināt, kas ir jūsu masīvs. Tātad, tas zina, cik daudz atjaunināt savu rādītāju par, kāda adrese, to atjaunināt uz tā ka tu esi nākamajā slota. 

Tātad tas ir tikai cits veids rakstot masīvs 0 ir 1, masīvs 1 vienāds 2, masīvs kronšteins 2 ir vienāds ar 3. Tas ir tikai vēl viens veids, kā domāt par to. Jo tie ir nepārtraukts bloki atmiņā, Jūs varat atsaukties uz tiem vai nu masīvs notation-- ko es personīgi atrast easier-- bet varbūt Jums ir nepieciešams, lai manipulēt ar to stingri atmiņas adreses. Un tas ir veids, kā jūs varētu darīt. Veida vairāk, piemēram, cool lieta, ko jūs varētu darīt versus varbūt nav kaut kas jūs esat patiešām gatavojas īstenot. 

Es to izmantot 61. Jūs puiši, iespējams, nav nepieciešams jāuztraucas par to pārāk daudz. Bet, ja jūs interesē, ņemt 61 nākamgad. Mēs esam mājās stiept puiši. Es zinu, tas ir garš. Dynamic Memory Allocation-- tāpēc mēs zinām, ka viens par lietām, kad mēs runājām laikā mūsu pirmā sadaļa kopā, mēs paskatījās mijmaiņas funkcija, kur tas bija ārpus mūsu galvenā funkcija. Un mums bija garām šīm vērtībām tas būtu efektīvi kopijas. 

Un, kad mijmaiņas pabeigts izpildes, tā vienkārši atstāja kaudze. Atcerieties, ka mēs esam kaudze rāmis swap. Tas atstāj un tie, vērtības atstāt ar to. Un viņi bija aizgājuši. Mēs nevarētu darīt neko ar viņiem un mums bija skumji jo mēs nevaram mijmaiņas savas vērtības. 

Bet ar C, kā jau minēju, jūs ir daudz varas pār atmiņas. Tātad, ko jūs varat darīt, ir varat piešķirt lietas uz kaudzes šeit ka paliks tur līdz tu viņiem savādāk. 

Viņi, piemēram, labu bērniem. Viņi tur paliek. Tie neatstāj. Tie būs palikt tur, kamēr jūs esat piemēram, OK, jūs varat iet prom. 

Bet lietas uz steku, who-- viņi tāpat nerātns bērni. Tie būs vienkārši palaist prom, kad jūs vēlaties būt tur, un tad viņi aizgāja. Jūs nevarat saņemt tos atpakaļ. 

Tāpēc kaudze is-- mēs ejam runāt par malloc un bez maksas, kas Es esmu pārliecināts, ka puiši dzirdējuši par lekciju. Un tas ir būtībā veids ir ļoti noturīgi dati. Tātad jūs varat glabāt datus apkārt tik ilgi, cik vēlaties. Mhm. 

Mērķauditorija: Vai jūs varat definēt kaudze un kaudze? Vai viņiem patīk vietas, lai darītu lietas? 

SPEAKER 1: Tātad viņi būtībā just-- viņi veids, kā mēs atsaukties tikai uz atmiņu. Tik kaudze ir tikai vietas, kur atmiņa tiek piešķirti dinamiski, savukārt kaudze atsaucas vairāk kaudze rāmji kas ir vairāk svarīgi, lai funkcijas, kuras faktiski darbojas. Jums nav īsti ir kontrole. 

Liela atšķirība, jums ir kontrolēt virs kaudzes, ja jūs vēlaties, lai. Jums ir mazāka kontrole pār kaudze. Kaudze atkarīgs funkcijas, kas darbojas, un kārtību, kādā tie ir palaist, un, kā lietas tiek atgrieztas. Bet ar kaudzes, kā mēs redzēsim, jūs varat teikt, Labi, es gribu šī vērtība būtu apkārt, kamēr es jums saku savādāk. Jums nav atļauts, lai atbrīvoties no tā. Jūs neesat atļauts ignorēt to. Jūs gatavojas, lai saglabātu to apkārt tik ilgi, cik es jums saku. Jūs saņemsiet, lai boss kaudzes, tā kā stack-- Varbūt, ja tu tāpat finagle savu ceļu Jūs varat būt boss. Bet ne gluži. Un tas patiešām ir tikai atmiņas. Tas ir tikai dažādos veidos no atsaucoties uz atmiņu. 

Atdzist. Tātad ar to, kā kontrolēt savu atmiņu. Tas ir, ar malloc, kas jūs gatavojas saņemt izmantot. Tāpēc tas ir tikai īstermiņa atmiņas sadali. Tas ir viss, tas ir. Tur ķekars citu atdzist funkcijas, kas ir alloc beigās, un tie ir dažādas lietas. 

Tātad, ja jums ir nepieciešams, uzglabāšanu, kas nepieciešama pārdzīvot savu pašreizējo funkciju, lai ka tad, kad jūsu pašreizējā funkcija iet prom, Jums vēl ir dati, ka jums ieguva no tā, jūs vēlaties izmantot malloc. Kas būs inicializēt to uz kaudzes. Un, kā jau teicu, un saglabāt sakot, jūs pastāvīgi to tur kamēr jūs pateikt to savādāk, kas ir svarīga lieta šeit. 

Tik viena lieta, lai paziņojuma, un tas parasti ir ļoti svarīgi, ir tas, ka šis sizeof ir super lietderīgi izmantot jo atkarībā no veida mašīnas jūs strādājat, tas var būt dažādā daudzumā Atmiņas, kas nepieciešams. Tātad, jūs vienmēr vēlaties izmantot izmēru tik ka jūs neesat mašīna atkarīgs, tā, ka jūsu kods būs palaist uz jebkura datora. 

Un tas ir tikai daļa rakstot labu kodu. Ja tas darbojas uz vienu mašīnu, bet ne jebkurš no citiem, cik noderīgs bija jūsu programma? Tātad, jūs vienmēr vēlaties pārliecinieties un izmantot sizeof. 

Mērķauditorija: Tā ir, ka, piemēram, izmērs 10 collas [dzirdams]? 

SPEAKER 1: Tas ir lielums 10 Ints. yeah. Tāpēc izmērs Ints atgriezīsies cik daudz tas viens int veikt. Vai lielums char, kā maksā vienu char uzņemties. Un tad cik blokus no ka jūs vēlaties? 

Tātad šajā gadījumā, mēs gribam kaut ko ka mēs varam saglabāt 10 Ints līdz. Un tas darbosies neatkarīgi mašīnas, kas ir forši. Tik, cik daudz baitu būs kas faktiski dod jums? Ātri math. 

AUDITORIJA: 40. SPEAKER 1: 40. Tieši tā. Tātad vēl viens liels lieta. Pointer vai malloc var atgriezties null. 

Tātad vēlreiz, vienmēr pārbaudiet, redzētu, vai tas atgriezās null Pirms jūs mēģināt un darīt kaut ko ar to. Ja jūs mēģināt un dereference šis rādītājs tagad, tas ir tikai gatavojas segfault jo jums gāja un mēģināja pieskarties spēku, kad jums nevajadzētu būt. Tāpēc vienmēr pārbaudiet null. Atkal, visu jūs varat darīt. 

Tas varētu atgriezties null. Tas būs atgriezties null, ja jūs esat vai nu no vietas, vai kāda iemesla dēļ tas uzbrauca kādu atmiņas bug. Tas dažreiz vienkārši atgriež null. Tātad jums vienkārši ir, lai pārbaudītu to. Tas ir viss tas slaids saka. Un tad tas, ko mēs esam šeit ir aicinājums, lai atbrīvotu. Tātad pašā veidā, ka tad, ja jums atveriet failu jums jāaizver failu, ja jūs malloc atmiņu, jūs ir jūs atbrīvotu šo atmiņu. Un jūs puiši saņems darīt tiešām cool stuff. 

Un tur ir programma, jūs varat palaist, lai redzēt, ja jūs esat kādreiz noplūde atmiņu. Bet jūs nevēlaties, lai noplūdes atmiņu. Tas ir patiešām slikti. Tikai izjaukt lietas. 

Tas ir slikti darīt, tāpat kā programmēšana gudrs dizaina efektivitāti. Bet tas ir arī vienkārši veida no slikti jūsu datoram. Tik vienkārši bezmaksas lietas kad jūs malloc tos. 

Jūs guys redzēt symmetries šeit. Super vienkārši. Tikai brīvi un pēc tam neatkarīgi no jūsu rādītājs, kāds nosaukums jūsu rādītājs ir, un tas parūpēsies atbrīvojot to you. Atdzist. 

Tad mums ir šis. Tātad mēs esam tikai gatavojas staigāt pa šo programmu. Un tad jūs puiši tiek darīts. 

Tātad [dzirdams] tikai galvenais. Tātad mums ir dažas int * rādītāju. Tātad mums ir rādītājs kas gatavojas rīkot Ints. Un cik Ints tas gatavojas rīkot? Tikai viens. Lielums int. 

Mēs pārbaudām, vai rādītājs ir nulle, jo tas ir, mēs vēlamies teikt, neko nedara. Tas ir slikti. Tātad mēs drukāt dažas kļūdas ārā no atmiņa, visbiežāk atgriežas 1, kā jūs puiši tiek izmantoti. 

Un tad mēs esam šeit, mēs dereference mūsu rādītājs. Tātad tas nozīmē, ka mēs ejam, lai saglabātu kaut ko vietā, ko mums. Int * rādītājs, vai malloc, atgriež adrese, ja tā atcēla šo atmiņas par jums. Tātad, tas ir būtībā sniedzot jums like-- ja jūs domāt par ķekars mājas apkaimē ka jūs vēlaties, lai Jūsu mēbeles, malloc ir, piemēram, OK, jūs saņemsiet doties uz māju trīs. Un tas dod jums adrese mājā trīs. 

Tātad tas tieši tagad, šajā rādītājs veikali adrese, saglabā adresi jūsu mājā. * PTR līdzekļiem, OK, es esmu pie manas mājas. Atdzist. Man vajag, lai saņemtu kādu skaitli. 

Tātad jūs esat jautā kādam lai dotu jums mēbeles tagad. Tātad jums iegūt kādu int. Un tas liek to savā rādītājs kur tas ir norādot uz. 

Un tad tikai izdrukas out, esat ievadījis kur. Un atkal, atskaites. Tātad tas ir kā jūs devās uz šo risināt un redzējāt, kas tur bija. Forši? 

Un tad, protams, mēs atbrīvotu mūsu rādītāju. Neaizmirstiet, lai atbrīvotu savu rādītāju. Neaizmirstiet pārbaudīt null. Neaizmirstiet, lai atbrīvotu savu rādītāju. Jums ir divas lietas jūs atceraties no tas, vai ka jums vajadzētu atcerēties. Jā. Mērķauditorija: [dzirdams] sīkumi piemēram, ka, char * s. Kā tas nākas, mēs nekad atbrīvot tos? 

SPEAKER 1: Hm? 

Mērķauditorija: Vai tiem, kas līdzīgi stīgām? Jūs teicāt, stīgas ir tāpat kā char * s, vai ne? Tātad, kāpēc nav mēs brīvi virknes? 

SPEAKER 1: Jums tikai bez maksas, ja jūs mallocing. Mērķauditorija: Ak, ja jūs mallocing. SPEAKER 1: Tātad malloc un brīvas ir divas lietas ka jums vienmēr ir kopā. f open, f tuvu, divas lietas Jums ir jābūt kopā. Abos šajos gadījumos, pārbaudiet null. Jā. 

Mērķauditorija: Tātad bez maksas ir tikai ļaujot kaut ko citu jāuzglabā, ka pēc tam, kad šī programma ir lietojuši? 

SPEAKER 1: Tas ir vienkārši sakot, Labi, es esmu darīts ar to. Jums nav nepieciešams, lai saglabātu to apkārt. Citādi jūsu dators būs vienkārši patīk izmēģināt un saglabāt to tur. Un tad jūs can't-- tas darbojas uz atmiņas problēmas vēlāk. Jūs vienmēr vēlaties, lai atbrīvotu to, jo tā stāsta savu datoru, OK, es esmu darīts ar šo vietas atmiņas. Jūs varat to atpakaļ man, lai izmantotu vēlāk. Forši? Jā. 

Mērķauditorija: Tātad mēs izmantojām% d tikko jo dubultā, kas nāk atpakaļ, vai kāpēc is-- [nedzirdama]. 

Mērķauditorija: Vai jūs izmantojat% i? 

SPEAKER 1: Jūs varat izmantot% i. Jebkuras pēdējā brīža jautājumi? Iet uz priekšu. Mērķauditorija: Man vienkārši ir ātrs jautājums. Tātad PTR mainīgs, that's-- piemēram, ar int * PTR = malloc, kas ir vienkārši sakot, ka tas ir norādot uz vietu memory-- SPEAKER 1: Vai jūs vēlaties [dzirdams]? Mērķauditorija: --that ir izmērs of-- nē, tas ir OK. Bet tas ir tikai norādot uz vietu atmiņu, kas ir tāpat kā četri baiti. SPEAKER 1: Labais. Tātad malloc lielumu no int saka, Labi, es iešu notece, atrast četri baiti atmiņas jums. Ja tā konstatē, ka četras atmiņas baiti, to dod jums atpakaļ adresi no tā, kur tā sākas, un tas, ko uzglabā in šautriņu, vai PTR. Labi. Jūs guys izskatās tik apjucis, nekā lielākā daļa cilvēki, kad es runāt par rādītāju, tāpēc es jūtos diezgan labi tieši tagad. 

Labi. Kā vienmēr, jums puiši ir jābūt visiem dabūt savu pset2 pakāpes, ko tagad. Es zinu, ka ir bijuši daži ļodzīgs lietas, kur ir teikts, formula nav spēkā vai kaut ko. Ja saņemat, ka visi Jūsu pakāpes ir derīgas uz manu pusi. Lai es varētu nosūtīt jums ekrānšāviņi no savām atzīmēm. Tikai ļaujiet man, kā arī, ja jūs zināt trūkstošo jebkuru atzīmes vai kaut ko nešķiet jēgas. Nāciet pie manis. 

Esmu bijis super lepni par jums puiši jau ir, lai saglabātu to uz augšu. Un ir labi atpūsties savu nedēļu. Es esmu pārliecināts, ka es redzu dažus no jums pie darba laika.