>> SPEAKER 1: Sveiki visiem.
Mēs gatavojamies, lai sāktu.
Es domāju, ka cilvēki joprojām dodas būt filtrāciju.
Bet interesēs laikā, tāpēc mēs varam Get You puiši no šejienes uz laiku,
mēs ejam, lai sāktu.
Tātad laipni lūdzam CS50 Quiz 0 pārskatīšanu.
Attiecībā uz tiem no jums, kas nav sapratuši vēl, jums ir jautājums par trešdien.
Woo-hoo.
>> Ja jūs neesat sācis studēt vēl vai nav sapratuši, ka tas pastāv vēl,
pagātnes viktorīnas un visa informācija par Jūsu viktorīna ir uz cs50.net/quizzes.
Tur ir dažas diezgan labas sīkumi tur, pagātnes viktorīnas no pēdējā 10
gadiem, kā arī informācija par šo viktorīnas un tēmām
, kas tiks segtas.
Tātad, pieņemsim sāktu.
>> Tātad jūs guys varētu atcerēties, pirmais diena klases Dāvida bija šīs lampas uz.
Tātad būtībā, viss, kas iet gada ar kapuci no datora ir
darīts bināro.
Binārā nozīmē, ko tas izklausās piemēram, 0 un 1 s.
Tai ir divas vērtības, kas var tikt pārstāvētas.
>> Tātad tāpat kā pirmajā dienā sadaļas kad David ieslēgts gaismu
spuldze pārstāvēt tālāk, vai 1, mūsu datoru saprot bināro kā 0 un
1 s, ieslēgt vai izslēgt.
Pamati bināro.
Katrā vietā ir pārstāvēts bāzē divi.
Tātad jūs pievienot 2 līdz 0 līdz 1 līdz 2 visu ceļu uz augšu.
>> Lai aprēķinātu, ko jūsu bināro ir decimal, jūs vienkārši sekot šo vienādojumu
tipa lieta.
Ja jums ir 1 kādā no šīm vietām, jūs reizināt to ar jebkādiem
pamatot tas ir, pievienojiet to uz augšu, un jums decimālo.
Tātad, tas ir, kā jūs skaits 5 bināro.
Tāpat kā tas, ko mēs darām uz pēdējais slaids, tas ir, kā jūs būtu
pārstāvēt 1 līdz 5.
>> Tāpat, tāpat kā jūs varat pievienot un atņemt decimālā vai balstīt 10, vai
īsti bāze, uz var pievienot un atņemt bināro.
Tieši tas, ko jūs varētu sagaidīt, kad jūs pievienot divas augšu, ja tas būs vienāds lielāks
par 1, jums ir 1, padara 0, un to papildinājumu, ka veidā, tikai
kā jūs varētu gaidīt ar regulāru decimālā vai jebkura cita bāze.
Cool.
>> Tātad, piemēram, es teicu, viss, kas iet saskaņā ar kapuci mūsu datora
tiek darīts 0 un 1 s, vai bināro.
Tātad, kā mēs izteikt, piemēram, burti vai skaitļi vai simboli?
Un to, ka atbilde ir ASCII.
>> ASCII ir kartēšana starp rakstzīmēm ka mēs parasti redzam
Angļu valoda, piemēram, s, B s, C s, uzsvērt, domuzīmes, un
kaut kā tā.
Un tas kartes, kas uz ASCII vērtību.
ASCII vērtība ir tikai skaitlis, kas var saprast ar datoru.
Un, tāpat kā jūs varat darīt saskaitīšanu un atņemšanu ar numuriem, jūs varat darīt
viņiem ar ASCII vērtībām.
>> Tātad, šajā piemērā, ko būs šis izdrukāt?
Jā, tā vienkārši telpa B telpa C telpa D. Kur mana pele iet?
Ievērojiet, jūs varat definēt int 65.
Un, kad jūs drukāt, ka, izmantojot C procentiem, tas būs interpretēt, ka
raksturs un izdrukāt A.
>> Līdzīgi, jūs varat deklarēt tā kā char.
Un, kad jūs to izdrukāt, izmantojot procentiem C, tas būs interpretēt, ka
procenti D. Un, tāpat kā jūs varat pievienot numuru, jūs varat pievienot rakstzīmes
ASCII vērtības, šajā gadījumā.
>> Tātad nedaudz rādītājs visiem.
5, kā virkne, nav faktiski vienāds 5.
Tātad, kā mēs varbūt pārvērst string 5 līdz veselam skaitlim 5?
Jebkuras idejas?
Jā.
>> Tātad, ja mums ir 5 kā virkne, mēs varam atņemt 0.
Un tas mums dos 5.
Un tāpat, ja mums ir 5, skaitlis, piebilst, ka uz virkni 0.
Un tas dod mums virkni 5.
Cool.
>> Tagad, atgādināt atpakaļ uz lekciju vienu kur mēs runājām par algoritmiem.
Tātad, kā mēs patiesībā gribam datoru darīt interesantas lietas?
Jūs zināt, tikai pievienojot un atņemot numuri un drukāšanas lietas nav
kas aizraujošs.
Parasti, mēs vēlamies, lai mūsu datoru, lai veikt kādu algoritmu.
Kaut nedaudz sarežģītāka nekā tikai vienkārša aritmētika.
>> Algoritms ir tikai soli pa solim komplektu norādījumus, kā veikt
noteiktu task--
tāpat kā recepti.
Jūs varētu atcerēties pirmo dienu klase, kur Dāvids mums rēķināties istabu
cilvēki un cik daudz cilvēku bija telpā.
Jūs varētu izmantot, lai skaitīšanu pa vienam.
1, 2, 3, 4.
Tādā gadījumā, lineārā laika algoritms.
>> Bet Dāvids ieviesa algoritms jūs saskaitīt cilvēkus telpā
kur visi pieceļas, tu saki JŪSU numurs citai personai, piebildīšu, ka
numuru uz augšu, un viens cilvēks apsēžas.
Un jūs atkārtot, ka.
Tas ir viens veids algoritmu.
Mēs varam analizēt, kā efektīvāks algoritms ir balstīts uz tā darbības laiks.
Bet mēs runājam mazliet vairāk par to vēlāk.
>> Lai visi algoritmi var arī raksta pseudocode.
Pseudocode ir tikai angļu valodā, piemēram, sintakse izmanto, lai pārstāvētu
programmēšanas valoda.
Piemēram, ja mēs vēlējāmies uzdot lietotāju uzminēt manu iecienītāko numuru, mēs
varētu būt pseudocode kā tādu.
>> Get a lietotājiem uzminēt.
Ja minējums ir pareizs, pateikt viņiem viņi ir pareizi, cits pateikt viņiem
viņi nav pareizi.
Un pseudocode ir veids, kā viegli pārstāv ideja vai algoritms.
Tātad tagad mēs varētu vēlēties, lai faktiski rakstīt Tas valodā ka dators
varētu izpratne.
Lai mēs varētu rakstīt savu pseudocode un interpretēt, ka uz avota kodu.
>> Līdz šim, pirmkods ir jāievēro ar noteiktu sintaksi
programmēšanas valoda.
Un līdz šim, jo ​​CS50, mēs esam bijis, izmantojot galvenokārt c.
Tātad tas varētu būt pirmkods c.
Vēlāk gaitā, tu nakts nākt saskarsmē ar citiem plānošanas
valodas, piemēram, PHP.
Vai, ja jūs pat veikt citas klases, jums varētu darīt, Java, Python, vai pat OCML.
Bet mūsu c programmas valoda, tas ir kā mēs varētu rakstīt pirmkodu
pseudocode algoritms, kas Es tikko aprakstīts iepriekš.
>> Tātad, kā jūsu dators faktiski saprotu, ka?
Tāpat kā es teicu, tas tikai patiešām saprot nullēm un tiem.
Tātad, kā tas saņem no avota kodu, lai kaut ko, kas var būt
saprot?
Nu, mums ir kaut kas sauc kompilatoru.
>> Ja jūs atceraties atpakaļ lielāko daļu jūsu psets, jums bija sava veida programmas
uzrakstīts dot c failu.
Un tad jūs varētu rakstīt marku.
Tātad, ko darīt dara?
>> Jūs varat ierakstīt make sastādīt savu programmu, jo someone--
kurš uzrakstīja savu p komplektu; iespējams David--
radīja make failu.
Un, kas stāsta padara jāzina, lai palaistu jūsu kompilatoru, ko sauc šķindēt, ka griba
tad sastādīt savu pirmkodu iebilst kods, kas ir nullēm un tiem
ka jūsu dators saprot.
Bet nedaudz vēlāk, mēs iesim dziļāk par kompilatoru.
>> Tātad atgādināt PSET 0, where-- jā, Jums ir jautājums?
>> Mērķauditorija: [dzirdams]?
>> SPEAKER 1: Jā.
Es domāju, ka viņi tiešām vajadzētu būt tiešsaistē.
Jā.
>> AUDITORIJA: Vai tas, piemēram, [nedzirdama]?
>> SPEAKER 1: nav.
Ir uz cs50.net/quizzes.
>> AUDITORIJA: Slash viktorīnas, slash 2013, slīpsvītra 0, un vienkārši noklikšķiniet caur
viktorīnas 2013. un viktorīna 0, pārskata sadaļā slaidi.
>> SPEAKER 1: Jā, tāpēc, ja jūs puiši vēlas velciet to uz augšu, un apskatīt to uz jūsu
pašu datoru, tas ir jauki too.
Teikt, ka atkal.
>> AUDITORIJA: [nedzirdama].
>> SPEAKER 1: Jā, [nedzirdama] ir mākslīgais mainīgais.
Ak, jā?
>> Mērķauditorija: [dzirdams]?
>> SPEAKER 1: Nē, streiki nav uz eksāmenu.
Atvainojiet, viņas jautājums bija, bija streiki uz eksāmenu.
Un tā nav.
Tātad PSET 0, jums puiši ir jābūt visiem īstenota kaut izmantojot nulles.
Un mēs uzzinājām dažus pamata programmēšanu celtniecības bloki, izmantojot nulles.
>> Tātad, pieņemsim to apskatīt dažus no šiem pamatelementiem
, kas veido programmu.
Pirmais ir Būla izteiksme.
Būla izteiksmes ir tie, un 0 s vai kaut kas ir iecelta
divas iespējamās vērtības.
Šajā gadījumā, patiess vai nepatiess, ieslēgt vai izslēgt, un jā vai nē.
Piemērs vienkāršs, ļoti vienkāršs, programma, kas izmanto Būla
izteiksme šeit.
>> Tātad, lai par Būla izpausmju ziņā būt noderīga, mums ir Būla operatorus.
Tie ir uzņēmēji, kas var tikt izmantotas salīdzināt dažas vērtības.
Tātad mums ir, un vai nav vienāds ar, mazāk par vai vienāda ar vai lielāka par
vienāds ar, un mazāk nekā vai lielāks.
Bet šie operatori nav ļoti noderīgs ja mēs varam tos apvienot
nosacījumi.
>> Tātad jūs puiši varētu atcerēties no nulles un no sava p nosaka, ka mēs
bija apstākļus.
Tie ir, būtībā, tāpat dakšas loģika savu programmu, kas
izpilda atkarībā no tā, vai nosacījums ir izpildīts.
Tātad viens no nosacījumiem, kas mums bija izmanto daudzas reizes šajā kursā ir
ja cits, ja, un cits nosacījumi.
>> Lūk, piemērs, kā jūs varētu izmantot.
Vai kāds zina atšķirību starp tikai izmantojot ja paziņojumus visiem
galam vārsmas, ja cits, ja, un cits apvienot?
Jā?
>> AUDITORIJA: [nedzirdama].
>> SPEAKER 1: Tieši tā.
Tātad, ja man bija, ja visu ceļu pa šo veidā, pat tad, ja šis nosacījums atdevi
taisnība, tas joprojām turpinās testēšana nākamo divas.
Tā kā, ar ko citu-ja, kas VĒL paziņojumu, ja viens atgriež patiess,
citi netiek pārbaudītas.
Visus jautājumus par to?
Cool.
>> Tātad jūs izmantojat, ja-cits no Else paziņojums, ja jūs zināt, ka tas var tikai
būt viens no šiem gadījumiem.
Tātad mēs zinām, ja x ir mazāks par 0, tas ir noteikti nebūs
lielāks par 0.
>> Nākamais, vēl pamatelements ka mēs uzzinājām cilpas.
Mums ir trīs veidu cilpas.
Cilpas, kamēr cilpas, un darīt, kamēr cilpas.
Un vispār, kad jūs sēdēt rakstīt kaut ko, jums ir jāizlemj
kurš no trim, kuru vēlaties izmantot.
Tātad, kā mēs izlemt, kurš?
>> Mēs parasti izmanto, lai cilpa, ja mēs zinām, cik reizes mēs vēlamies atkārtot
cauri kaut vai cik reizes mēs vēlamies, lai veiktu uzdevumu.
Mēs izmantojam kamēr cilpas, ja mums ir nepieciešams zināms nosacījums, lai būtu patiesība, lai saglabātu darbību.
Un mēs izmantojam darīt, kamēr ļoti līdzīgs kamēr, bet mēs vēlamies, lai mūsu kods palaist
Vismaz vienu reizi.
>> Tātad darīt, kamēr, kāds ir do būs vienmēr veikt vismaz vienu reizi.
Tā kā ar laiku, to nedrīkst darboties vispār, ja
nosacījums nav izpildīts.
Visus jautājumus ar šo?
>> Tātad struktūra cilpa.
Jums puiši visi esam redzējuši šo.
Tu inicializēt to.
Jums ir sava veida stāvoklī.
Tā, piemēram, varam sāktu kā man ir vienāds ar 0.
i ir mazāks par 10.
Un es ++.
Ļoti vienkāršs, ko mēs esam darījuši.
>> Par kamēr cilpa, tāpat, jums ir ir sava veida inicializācijas,
sava veida stāvoklī, un sava veida atjauninājumu.
Tātad, mēs varam īstenot mūsu cilpa arī kā kamēr cilpa, izmantojot šo.
Un līdzīgi ar do kamēr cilpa, mēs varētu būt dažas inicializācijas,
izpildīt kaut ko, to atjaunina, un Tad pārbaudīt stāvokli.
>> Tāpēc tagad funkcijas.
Mēs ieliekam visu kopā.
Mēs varētu vēlēties uzrakstīt kādu veida funkciju.
Kopējā funkcija, kas jūs varētu esmu redzējis jau ir galvenais.
Galvenais ir funkcija.
Tā ir atgriešanās tipa, int.
Tā ir funkcija nosaukums, galvenais.
Un tas ir argumentus, argc un ARGV.
Tātad galvenais ir tikai funkcija.
>> Citas funkcijas, jūs varētu būt izmantotas, printf-- printf ir function--
GetInt, toupper.
Bet tie gadās bijis īstenoti mums pa
sava veida bibliotēkas.
Ja jūs guys atcerēties, ieskaitot šis CS50.h bibliotēku vai
standarta I / O bibliotēka.
Jā, jautājums?
>> AUDITORIJA: Vai galvenais tikai raksturīga c?
Vai tas ir tikai sava veida [nedzirdama]?
>> SPEAKER 1: Jautājums ir ja galvenais ir raksturīgs c.
Un jā, visas funkcijas ir galvenā funkcija.
Tas ir sava veida nepieciešamas datora zināt, kur sākt
darbojas kodu.
>> AUDITORIJA: Tātad tu negribēji [nedzirdama]?
>> SPEAKER 1: Nē
Jebkādi citi jautājumi?
Cool.
Tātad, tāpat kā jūs varat izmantot funkciju , kas ir rakstīts, lai jūs, jūs varat arī
uzrakstiet savu funkciju.
Šī ir funkcija, ka kāds varētu ir rakstīts, lai aprēķinātu tilpumu
no Q, piemēram.
Tur ir atgriešanās tips šeit, šajā gadījumā int, mūsu funkcijas nosaukums q un mūsu
saraksts parametru.
>> Un ņemiet vērā, ka jums ir, lai rakstītu datus Parametra vēlaties veids
izmantot vai arī funkcija nav zināt, kāda veida
parametrs man būtu pieņemt.
Tātad, šajā gadījumā, mēs gribam skaitlis kā mūsu ieguldījumu.
Tātad, kāpēc, iespējams, mēs vēlamies izmantot funkcijas?
>> Pirmkārt, liels organizācijai.
Tās palīdz izjaukt jūsu kodu vairāk organizēts gabalos un padarīt
vieglāk lasīt.
Vienkāršošana.
Tas ir labs dizains.
Kad jūs lasāt kādu kodu un galvenā funkcija ir patiešām,
tiešām garš, tas varētu būt grūtāk iemesls, par to, kas notiek.
Tātad, ja jūs sadalīt minēto funkciju, tas varētu būt vieglāk lasīt.
Un atkārtoti-spējas.
Ja jums ir rieciens kodu, kas ir to sauc vai palaist vairākas reizes,
vietā pārrakstīšana šī kodeksa 10 reizes savu galveno funkciju, jūs varētu
vēlas atkārtoti to.
Un tad katru reizi, jums ir nepieciešams, lai izmantotu, ka gabals koda, zvanu funkciju.
>> Tāpēc tagad, ja mēs atceramies atpakaļ uz nulles, mēs arī runājām par dažiem jēdzieniem,
no kuriem viens ir vītņu.
Pavediens ir jēdziens vairākiem sekvences koda
izpildes, tajā pašā laikā.
Tāpēc domāju, ka atpakaļ uz vienu dienu, kad Deivids bija Jūs guys skaits off skaitu
cilvēki telpā.
>> Būtībā, kas notiek gada ir visiem jums, puiši bija
darbojas atsevišķus pavedienus.
Un šie diegi nāca kopā saņemt kādu atbildi.
Līdzīgi, Scratch, ja jums ir vairākas sprites, jūs varētu
ir kaķis un suns.
Un viņi būtu vienlaicīgi rādīt savus skriptus.
Tas ir piemērs vītni.
>> Un otra jēdziens, kas bija ieviesta nulles bija notikumiem.
Un notikumi, kad vairākas daļas jūsu kods komunicēt ar otru.
Jo nulles, tas bija tad, kad tu izmanto raidījums kontrole un Kad es
Saņem blokus.
>> Un arī, kas Problēmas Set 4, mēs redzējām mazliet par notikumiem, kā arī.
Jums puiši varētu būt izmantoti Gevent bibliotēka.
Un tur bija funkcija waitForClick kurā tu gaidīja
lai lietotājam klikšķi.
Un jūsu klikšķi, šajā gadījumā, būtu notikums un gaidīt klikšķi ir Tavs
notikumu apdarinātājs.
>> Un arī visā rādīt psets un strādā pie saviem psets, tu
varētu nonākt saskarē ar daži no šiem komandas.
Tas ir tas, ko jūs drukāti uz jūsu termināla logu vai kāds logs
, kas parādās uz jūsu g rediģēt līdz, būtībā, vadīt savu datoru.
>> Tā, piemēram, LS uzskaitīti saturu direktorijā.
Padarīt katalogs izveido jaunu mapi.
CD, mainīt direktoriju.
RM, noņemt, dzēš failu vai kādu direktoriju.
Un pēc tam noņemiet direktoriju noņem direktoriju.
>> Mērķauditorija: [dzirdams]?
>> SPEAKER 1: Jā, protams.
Atvainojiet, jautājums bija, ja jums ieteiktu liekot šo
uz apkrāptu lapas.
Tas varētu palīdzēt.
Ja jums ir telpa, jūs varat nodot to tālāk.
Tas ir arī tikai parasti pietiekami labs atcerēties, ka tad, kad jūs to izmantot
Jūs varētu vēlēties, lai tikai ir to iegaumētu.
Kas būs padarīt savu dzīvi daudz vieglāku.
Vai es atbildētu uz jūsu jautājumu?
>> Tātad tagad, mēs runājām mazliet īsi par bibliotēkām.
Bet divi galvenie tie, kas mēs esam bijuši izmantojot līdz šim gaitā ir
standarta I / O un CS50.
Kāda veida lietas ir iekļauti standarta I / O bibliotēka?
>> Jā, tik tālu mēs esam izmanto printf.
Jo CS50, mēs esam izmanto GetInt un GetString.
Un datu tips string arī notiek jādeklarē šajā CS50 bibliotēkā.
Mēs runājam nedaudz padziļināti par kā bibliotēkas darbu un to, kā viņi
mijiedarbojas ar pārējo savu kodu.
Bet tie ir divi galvenie, ka mēs saskārusies ar tik tālu
kurss.
>> Veidi.
Tie ir labi atcerēties, cik daudz katrs veids tiek pārstāv vai cik
daudzi baiti katra tipa requires--
int, 4 baiti; char, 1 baits.
Pludiņš ir 4 baiti.
Kas ir dubultā?
>> AUDITORIJA: [nedzirdama].
>> SPEAKER 1: Jā, tāpēc peldēt bet divtik.
Kas par ilgu?
>> AUDITORIJA: [nedzirdama].
>> SPEAKER 1: OK.
Kas ir ilgi?
>> AUDITORIJA: [nedzirdama].
>> SPEAKER 1: Jā, dubultā int.
Jā.
>> AUDITORIJA: [nedzirdama].
>> SPEAKER 1: Long [nedzirdama].
Un tad ilgi ilgi ir divas reizes.
>> AUDITORIJA: Nē, nē.
Sen ir tikai int.
Tas ir atkarīgs no arhitektūras pirms [nedzirdama]
un int ir vienāda izmēra.
[Nedzirdama].
>> SPEAKER 1: Tik garš un int ir vienādi.
Un tad ilgi ilgi ir dubultā int.
Cool.
Un tad, kas ir pēdējais veids?
>> AUDITORIJA: Pointer.
>> SPEAKER 1: Jā, tāpēc mēs uzzinājām mazliet par norādes.
Un neatkarīgi no tā, ko rādītājs ir norādot kuri paredzēti, tas varētu būt char zvaigzne
vai int star--
tas vienmēr ir 4 baiti rādītājs.
Jautājumi par ka?
Jā?
>> Mērķauditorija: [dzirdams]?
>> SPEAKER 1: Tik garš un int ir pats šajā CS50 ierīces.
>> AUDITORIJA: Ierīce ir pilnīgi savstarpēji aizvietojami.
>> SPEAKER 1: Jā.
Tik tad ilgi ilgi ir dubultā int.
>> AUDITORIJA: Tas ir 32 bitu?
>> SPEAKER 1: 32 bit, jā.
>> AUDITORIJA: Tātad [nedzirdama]?
>> SPEAKER 1: Jā, ja tā nav skaidri saka, jums
būtu jāuzņemas 32 bitu.
>> AUDITORIJA: Tas kaut ko teikt piemēram, pieņemot
arhitektūra kā ierīces.
64 bit, vienīgās lietas, kas pārmaiņas ir garie un norādes.
Viņi abi [nedzirdama].
>> SPEAKER 1: Jā?
>> AUDITORIJA: Jautājums.
Tātad par vienu no prakses viktorīnas, tā vaicā par neparakstītu int.
Tātad, kā tas, ka jānosaka no int [nedzirdama]?
>> SPEAKER 1: neparakstīts kas ir arī 4 baiti.
Bet to, kas ir atšķirīgs par parakstīta int un neparakstīts int?
>> AUDITORIJA: [nedzirdama].
>> SPEAKER 1: Right.
Var pārstāvēt negatīvas vērtības.
Bet kā tas izdarīt?
>> AUDITORIJA: [nedzirdama].
>> SPEAKER 1: Jā, tas ietaupa 1 bitu pārstāvēt zīmi.
Parakstīja ir viens bits, ka pārstāv zīmi.
Un neparakstīts vienkārši visus pozitīvos.
>> AUDITORIJA: OK.
Tātad jūs sakāt, ka dubultā ir divas reizes lielāka par pludiņa?
>> SPEAKER 1: Double ir divreiz lielums pludiņa, jā.
>> AUDITORIJA: Kā rādītāju lai ilgi ilgi [nedzirdama]?
>> SPEAKER 1: Tātad jautājums ir, kā tas rādītāju uz ilgu long--
cik ir tas, ka tikai četri baiti kad ilgi ilgi tās 8 baiti.
Tātad, atcerieties, kas ir rādītājs, būtībā, pie ļoti bāzes vērtību.
>> AUDITORIJA: [nedzirdama].
>> SPEAKER 1: Jā, tāpēc rādītājs ir tikai vieta atmiņā.
Tāpēc tas nav svarīgi, cik daudz vietas ka rādītājs ir vērsta uz.
Tas tikai vajag 4 baiti, lai sekotu šīs atmiņas vietā.
Jebkādi citi jautājumi?
Cool.
>> Tātad pēdējā lieta, man ir ir standarta produkcija.
Jums vajadzētu izmantot tos bieži pietiekami, ka jūs varat atcerēties.
Bet tas ir tad, kad mēs izmantojam printf, piem.
Un mums ir šie vietturus, ka sauca formāta kodi.
>> Tātad procenti c char, procenti i par int, un mēs varam izmantot arī procentiem d.
Tas ir tas pats.
Bet, vispār, kas CS50 mēs mēģināt izmantot procentiem i.
Procenti f par apgrozāmos līdzekļus.
Procenti ld ilgi ilgi un procenti s virkni.
>> Tāpat mēs esam, izmantojot dažus Šo escape.
Piemēram, slīpsvītru n jaunu līniju.
Tas ir tikai tad, kad jūs esat formatēšanu Jūsu kods drukas f.
Jā?
>> AUDITORIJA: Kas ir procenti d atrast?
>> SPEAKER 1: Tātad jautājums ir tas, kas ir procenti d atrast?
Procenti d ir ints.
Percent d un procenti i ir vienādi.
>> AUDITORIJA: Kāda ir atšķirība starp slīpsvītru n un slīpsvītru r?
>> SPEAKER 1: Tātad jautājums ir par to, kas ir Atšķirība starp negatīva reakcija n un
Brīvkustību r?
Es domāju, ka reversā slīpsvītra r is--
>> AUDITORIJA: Tātad slīpsvītru r vienkārši nozīmē atgriežas rindas sākumā
bez faktiski iet uz jaunu līniju.
Tātad, ja jūs drukāt reversā slīpsvītra r un jūs doties atpakaļ uz rindas sākumā
tad jūs drukāt vairāk stuff, jūs pārrakstīt sīkumi, kas ir jau par
[Nedzirdama].
Tā kā n faktiski iet uz jaunu līnijas un iet uz [nedzirdama].
>> SPEAKER 1: Nu, kādi citi jautājumi?
Viss labi.
Es esmu gatavojas nodot to off Dan kurš turpināsies.
>> [Aplausi]
>> DAN: Visu righty.
Tāpēc es ņemšu runāt par citu plata diapazons idejas no klases, kas ir
aptuveni pārstāvis nedēļas divas un sākums nedēļas trīs sākot off
ar liešanu, kas ir tikai veids apstrādājot vērtību konkrēta veida, kā
vērtība cita tipa.
Tātad, mēs varam izdarīt ar simboliem līdz ints, pludiņi, lai ints, un
ilgi ilgojas divkāršot.
>> Visas šīs lietas var izmantot kā veidos ārstē kādu skaitlisku vērtību
mīnus char kā daži citi skaitliska vērtība.
Tātad ir daži jautājumi, ar to, no Protams, kas nāk, kad jūs cast
lietas, piemēram, peldēt uz ints.
Tātad tas ir mazliet dīvaini.
Mums ir pludiņš, kas ir 1,31.
Mēs reizināt to ar 10000.
Un tad mēs to izdrukāt, kā int.
Ko tas izeja?
10.000 reizes 1.31.
Tātad 13,000, ir tas, ka minējums?
>> AUDITORIJA: Es domāju, ka tas ir 10,000.
>> DAN: Tāpēc es esmu reizinot to ar 10000 pirms es esmu liešana to.
>> AUDITORIJA: Ak.
Nebūtu tur būt viens 9 un daži 0 skaitļi?
>> DAN: Jūs varētu būt daži dīvaini cipariem.
Tik labi, tas ir 1,3 reizes 10000.
Tā ka ir 13,000.
Un šis papildu weird--
>> AUDITORIJA: 13,100.
>> DAN: 13,100.
Paldies jums, Rob.
Un šis papildu weirdness--
šis 9,9--
ir vienkārši tāpēc, ka šī liešana beidzās noapaļošana uz leju, kur
tā nedrīkst būt.
Jā.
>> AUDITORIJA: liešana notiek pēc tam, kad kaut kas cits?
>> DAN: Tāpēc, ka man ir šī drukātā, tā tas šo vairošanos pirms tā
tas šo liešana.
>> AUDITORIJA: [nedzirdama].
>> DAN: Es domāju, ka tas varētu likt pirmkārt, yeah, kas būtu 10000.
Kaut kas cits?
Cool.
Tātad tas ir 13,099.
Kāpēc tas notiek?
Neprecizitāte.
>> Pludiņi nav ideāls.
Tie var tikai pārstāvēt numurus noteikts skaits nozīmīgiem cipariem.
Tātad, ja mēs izdrukāt 8 sig vīģes uz šis float, mēs iegūstam sava veida
neglīts meklē numurs.
Un tas ir tāpēc, ka 1,31 nevar precīzi pārstāvēs vienkāršu
pilnvaras divas mašīnas.
Tātad, tas beidzas līdz ņemot vistuvāk uzminēt, kas beidzas
ir nedaudz zems.
Jēga?
OK.
>> Tagad, ieslēgts ir savādākas darot nosacījuma pārskatus, ja visas
mums rūp, ir viena mainīga.
Tātad šajā konkrētajā piemērā, mēs esam kļūst vesels skaitlis no lietotāja.
Un tad mēs esam apskatot kas tas skaitlis ir.
Jādomā, tas ir numurs no viena līdz četriem.
Tas ir tas, ko mēs prasām.
>> Tātad jums pāreju uz citu mainīgā nosaukums.
Tad jums izveidot gadījumus iespējams vērtības, tas varētu būt.
Tātad, ja viens, saka, ka tas ir zems.
Un tad jūs pauze izkļūt slēdža stāvoklī, lai
jums nav saglabāt turpinās.
>> Nākamajā case--
tik lieta divus lieta three--
ja tas ir gadījums, divi tas tikai pilieni uz leju, lai pirmajā rindā kodu, tā uzskata par ar
gadījumā trīs līdz tā redz pārtraukuma.
Tātad iemesls, jūs saņemsiet vienu lietu, lai tikai drukāt zema ir tāpēc, ka I
ir šī pārtraukuma šeit.
Ja es, teiksim, ignorēja šo break-- ja es threw šo breakaway--
tas varētu drukāt zema, un tad tas izdrukāt vidū, un tad tas varētu izjaukt.
>> Tātad pārtraukumi ir svarīga daļa gada pāriet apstākļus un
viņiem vajadzētu būt tur.
Jebkuras lietas, kas nav norādīts skaidri tiek apstrādāti ar noklusējuma
gadījums slēdzi un tiek iemesta.
>> AUDITORIJA: Tātad 1, 2, 3, un 4 būtu n?
>> DAN: Vērtības, ka n var būt.
Jā.
Yeah?
>> AUDITORIJA: Tātad, ja jums ir ka [nedzirdama]?
>> DAN: Jūs varētu drukāt zema, un pēc tam tas varētu drukāt vidū, un
tad tas saplīst.
>> AUDITORIJA: Kāpēc tas tā drukāt middle ja [nedzirdama]?
>> DAN: Tātad viss saskaņā ar lietu Pirms pārtraukuma ietilpst.
Tātad lieta viena izdruka zem gadījums viens, kā tas ir pēc drukas.
Yeah?
>> Mērķauditorija: [dzirdams]?
>> DAN: Tātad šis skaitlis ir tikai īpaši vērtība, ka šis mainīgais
var veikt, labi?
Vai tas ir jēga?
Jā.
>> Mērķauditorija: [dzirdams]?
>> DAN: Jā, lieta divi varētu drukāt vidū un tad pārtraukums.
>> Mērķauditorija: [dzirdams]?
>> DAN: Es domāju, ka jebkurš?
Kādi citi datu tipi Jūs varat pārslēgties?
>> AUDITORIJA: Jūs varat pārslēgties pār jebkuru datu tipu.
Bet tas nozīmē tikai to, kaut pār chars un ints un sīkumi, piemēram, ka, jo
ja jūs pārejot rādītāju ka nav īsti jēgas,
pārslēgšanās slodzes, ja tā pat pieņemsim jūs darīt, jo peldošā komata
ar precizitāti, jums nebūtu īsti vēlas to darīt anyway.
Tātad diezgan daudz, tikai ints un chars un sīkumi, piemēram, ka.
>> DAN: Jā, tas ir, kad jums ir nepārprotama vērtības, ka jūs zināt, es domāju, var būt
ka slēdzis ir patiešām noderīga.
Labs?
OK.
>> Joma ir diapazons, ka deklarētā mainīgais paplašina.
Tātad šajā maz rieciens kodu man ir, tas būtu pilns ar kļūdām.
Un iemesls ir man paziņojusi, ka šis int i ietvaros šis cilpas.
Un tad es cenšos atsauces, ka i ārpus ka cilpas jomu.
>> Vārdu sakot, jūs varat domāt par jomu kā kaut ko, kas jums paziņojam
ar iekšpusē komplektu cirtaini lencēm tikai pastāv šajās cirtaini lencēm.
Un, ja jūs mēģināt izmantot šo mainīgo ārpus šīm cirtaini bikšturi, jūs
saņemt kļūda no kompilatoru.
Yeah?
>> AUDITORIJA: Tātad tas viens nedarbojas?
>> DAN: Tas nedarbojas, jā.
Stīgas.
String char *.
Viņi tieši tas pats.
Tie ir tikai norādes uz rakstzīmes.
Un visas virknes, kas jums ir jābeidzas ar slīpsvītru nulles, kas ir tikai
c konvencija.
>> To sauc NULL terminators.
Un NULL--
kapitāls N, kapitāls U, kapitāls L, kapitāls L--
nav tāds pats kā NULL terminators.
Tas ir rādītājs.
Tas ir raksturs.
Tie ir ļoti atšķirīgas.
Atcerieties to.
Tā būs viktorīnas, droši vien.
Es neesmu redzējis viktorīnas.
Yeah?
>> AUDITORIJA: Tātad NULL ir, teiksim, rādītājs?
>> DAN: Jā.
>> AUDITORIJA: Kāda [nedzirdama]?
>> DAN: Ja, teiksim, malloc sauc, kad tevi nav pietiekami daudz atmiņas, lai saņemtu
neatkarīgi no lieluma jūs lūdz, malloc atgriezīsies NULL.
Tas ir, būtībā, kad funkcija ir vajadzēja atgriezties rādītāju, tu
nepieciešams pārbaudīt pret NULL tāpēc, ka NULL ir diezgan good--
tas ir, sava veida, atkritumu vērtība.
Tas ir nulles cik norādes iet.
>> Ikreiz, kad jūs zvanu funkciju, kas atgriež rādītāju.
Jūs gatavojas vēlaties pārbaudīt būt pārliecināti, ka šis rādītājs nav NULL
jo NULL ir ļoti bieži.
Tas ir sava veida atkritumu atgriešanās.
Tātad, ja kaut kas negāja labi, vienkārši atgriezties null vietā.
>> Mērķauditorija: [dzirdams]?
>> DAN: Jā, un tas ir tas.
>> Mērķauditorija: [dzirdams]?
>> DAN: Pareizrakstības to, kā šī.
Tas ir NULL terminators.
Tas ir mazie N-U-L-L, ja jūs pareizrakstību tā.
>> AUDITORIJA: Un es tikai gāja atpakaļ un testē to.
Un, ja jūs mēģināt likt peldošu punktu vērtība uz slēdzi, tas būs kliegt pie jums
sakot, paziņojums prasa izteiksmi gada skaitlim veida.
>> DAN: Tur jums iet.
Bet jā, kāds bija jautājums atkal?
>> Mērķauditorija: [dzirdams]?
>> DAN: Tātad kapitāls N, kapitāls U, kapitāls L, kapitāls L ir faktiskais c lieta.
Tas ir NULL rādītājs un būs jāuzskata tikai par tādiem.
Jums nav kādreiz mēģināt un pareizrakstības NULL raksturs un redzēt jebkurš
cits veids nekā šis.
Yeah?
>> AUDITORIJA: Tātad atgriežoties char max vai kaut piezīmēs, tas tā
iemieso to pašu funkciju kā [nedzirdama]?
>> AUDITORIJA: Tātad jūs atsaucoties uz atgriežoties char max no getchar, vai
kāds tas ir?
>> AUDITORIJA: Jā.
>> AUDITORIJA: Jā, tā vispārējās termins visām šīm lietām
ir kontrolputniem vērtības.
Tātad, piemēram, atgriežoties int max no GetInt un char max no getchar, tas ir
vajadzēja būt, piemēram, visu labo, ja šīs lietas atgriežas pie mums,
kaut kas nogāja greizi.
>> Par norādes, mēs vienkārši gadās būt šī sargs vērtība, ka ikviens
vienojas par.
Un šī ir lieta, ko jūs atgriezties kad lietas iet greizi.
Tātad char max ir tas, ko mēs izmantojam pārstāvēt kaut ko
piemēram NULL vai getchar.
>> AUDITORIJA: Tātad, ja jūs testēšanas getchar, jūs varētu vienkārši likt NULL?
Tas, ka kaut ko mainīt?
>> DAN: Jūs varētu ne tikai pārbaudīt NULL.
Jūs ir jāpārbauda char max arī tāpēc atgriešanās vērtību no funkcijas ir
raksturs nav rādītājs.
Yeah?
>> AUDITORIJA: Šis jautājums lūdz par stīgu garuma.
Vai tas ietver null raksturs?
>> DAN: Nē
Un tas, patiesībā, kā stīgu garums zina to pārtraukt, jo tas iet cauri
Jūsu masīvs rakstzīmes līdz tā redz null raksturs.
Un tad tas ir, piemēram, visi Labi, es esmu darīts.
>> Mērķauditorija: [dzirdams] pieci?
>> DAN: Sveiki, būtu pieci.
Yep.
Tik masīvi ir nepārtraukts bloki atmiņā.
Viņiem ir tūlītēja piekļuve, sakot nosaukt masīva un tad, cirtaini
breketes, neatkarīgi indekss jūs vēlaties doties lai, viņi indeksētas no nulles līdz
garums masīva mīnus 1.
>> Un viņi deklarē ko veidam lieta, ka jūs esat uzglabātu
masīvs, nosaukumu masīva, un pēc tam kāds izmērs ir šī masīva.
Tātad tas ir char masīvs garuma seši, kas ir šīs vērtības.
Yeah?
>> Mērķauditorija: [dzirdams]?
>> DAN: Jā.
>> Mērķauditorija: [dzirdams]?
>> DAN: Ja jums ir to, kas notiek uz masīva jau.
Lai jūs varētu norādīt šo vietā, kā, teiksim, palijas, neatkarīgi nosaukums jūsu
masīvs ir tukšs kronšteini vienāds cirtaini sasprindzināt H komats E komats L komatu L komatu
O komats NULL raksturs un cirtaini lencēm.
Tas strādā arī kā deklarācija.
>> Mērķauditorija: [dzirdams]?
>> DAN: Tad jums ir nepieciešams, lai būtu izmērs jau.
>> Mērķauditorija: [dzirdams]?
>> DAN: Jā.
Viss righty.
Komandrindas argumenti ir veids, kā iegūt informāciju no lietotāja, kā
argumenti par galveno.
Galvenais aizņem divus argumentus.
Argumentus skaitu, kas tiek pagājis gar komandrindas un a
string vektora vai string masīvs no visiem argumentiem.
>> Tātad, ja es, teiksim, ko sauc funkciju, piemēram, dot out 1 telpa, 2 telpas, trīs,
argc būtu 4.
Un argv 0 būtu dot out.
Argv1 būtu 1.
argv2 būtu 2. argv3 būtu 3, šajā konkrētajā gadījumā.
Yeah?
>> Mērķauditorija: [dzirdams]?
>> DAN: pēdējais elements masīvā jo masīvs ir garums argc plus
viens argb, pēdējais elements ir NULL rādītājs.
Tas ir argc plus 1.
Tātad gadījumā, ja es tikko teicu, tas būtu ARGV 0 ir dot out.
argv 1 ir 1 argv2 ir; 2. ARGV 3 ir 3.
argv 4, kas ir lielāks par vienu nekā argc būtu NULL.
>> Un tas ir NULL rādītājs.
Jā.
Un tas ir tāpēc, ka virkne ir char zvaigzne ir rādītājs.
Tātad tas ir tāda paša tipa.
Yeah?
>> AUDITORIJA: Divi jautājumi.
Tik viens, kāda ir atšķirība starp šo un GetString izņemot viena veida
lietošanas dzinējs?
Un divas, tas glabāti Jūsu nesen atmiņu?
Tātad, piemēram, GetString būtu būt [nedzirdama]?
>> DAN: Kur tas glabājas?
Es nezinu, kur tas tiek uzglabāts.
>> AUDITORIJA: Tātad, faktiski, jūs zināt, kā jebkurš darbotos zvanāt tas ir argumenti
tiek glabāti kaudze?
Tik argc un argv ir argumenti uz galveno un tie ir uz skursteņa, vai tiešām
nedaudz virs, ko jūs domājat par sākums kaudze.
, Kas bija otra daļa jautājuma?
>> AUDITORIJA: Tātad, kas ir [nedzirdama]?
>> DAN: Jā, tas ir tikai cits veids, iegūt informāciju no lietotāja.
Šis viena ir nedaudz efektīvāka un tas ir ērtāk, lai skriptus, jo jums
var tikai nodot argumentus jūsu galvenais funkcija nevis jāgaida
lietotājiem, ja jums nav nekādu lietotāji.
>> AUDITORIJA: Un jā, saņemt stīgas būtu [nedzirdama].
Tas uzglabāt stuff jums ir nepieciešams.
>> DAN: Yeah?
>> Mērķauditorija: [dzirdams]?
>> DAN: Jā, argv 0 vienmēr ietver dot slash no funkciju zvanu.
Yeah?
>> Mērķauditorija: [dzirdams]?
>> DAN: Jā, katru no argumentiem ir beidzās null raksturs jo tie
ir virknes.
>> Mērķauditorija: [dzirdams]?
>> DAN: Jā, argv argc ir NULL rādītājs.
>> Mērķauditorija: [dzirdams]?
>> DAN: Ak jā.
Jā, žēl.
>> AUDITORIJA: Tātad [nedzirdama]?
>> DAN: Tātad jautājums ir, ja jums bija komandrindas dot slash ir dot out 1, 2,
būtu skaits komandrindas argumenti būt divas vai tas būtu trīs?
>> AUDITORIJA: Es domāju, ka tas nav tiešām jautājums.
Es mēdz teikt, ak, jūs neizturēja jebkuri komandrindas argumentus kad,
protams, jūs sauc funkciju.
Tāpēc es parasti vokāli izslēgt funkcija no komandrindas
argumenti, pat ja tas ir iekļautas ARGV.
>> DAN: Bet, ja tas bija uz test--
yeah--, un arī tad, ja jūs kaut ko pateikt tāpat argc vienāds 3,
tu esi drošā stāvokli.
Yeah?
>> Mērķauditorija: [dzirdams]?
>> DAN: Es domāju, ka, ja tā vietā, aicinot šo in argc un stīgu ARGV iekavās
bet tur ir tādi paši un tikai sauc viņiem kaut kas cits, piemēram,
un b, tas tā joprojām strādā?
Un tas joprojām strādā, jūs just--
nevis izmantojot argc-- jūs gribētu izmantot, un b.
Yeah?
>> Mērķauditorija: [dzirdams]?
>> DAN: Tātad jautājums ir GetString ir gatavojas glabāt atmiņas kaudzes
jo GetString ir char *.
Tā veikalos atmiņas kaudzes, jo tas aicina tagad malloc laikā faktiskais
īstenošana GetString.
OK, pārvietojas on.
>> Drošība.
Tātad, lai būtu patiesi droša, jūs paļaujaties uz nē vienu un jūs ļaujat neviens pieeju jebkuram
jūsu informāciju, kas ir iemesls, kāpēc visi būvē savas mašīnas,
savas operētājsistēmas, visu to programmas no nulles, un acīmredzot
nav savienojumu ar jebkuru citu mašīnām caur internetu.
Tāpēc datori ir nedrošs.
Viņi īsti ir.
Mums ir jāuzticas citus cilvēkus.
>> Un ideja par drošību, ir, ka tu esi mēģinot ierobežot apjomu
ticu, ka jums ir nepieciešams.
Un viens no līdzekļiem, jūs darīt, ka ir ar kriptogrāfiju.
Kriptogrāfija ir, būtībā, mums ir noslēpumi.
>> Dažreiz mums ir jānokārto mūsu noslēpumus kopā ar, teiksim, internets vai
citas lietas.
Un mēs negribam cilvēkus zināt šos noslēpumus.
Tātad mēs šifrēt mūsu noslēpumus par ceļu ka mēs ceram, ka neviens nevar izrēķināt.
>> Tātad, mēs used--
caur gaitā šo class--
lietas, piemēram, Cēzara šifru un [Nedzirdama], kas abi ir ļoti, ļoti
nedrošs veidi šifrējot lietas.
Viņi viegli izdomāt, ko viņi ir un kādas ir jūsu noslēpumi.
Reālajā pasaulē izmanto daudz vairāk sarežģītas šifrēšanas shēmas.
Un mums nebūs iekļuvuši daudz vairāk nekā to.
>> Atkļūdošanas.
GDB ir labākais.
Es esmu gatavojas uzsvērt vēlreiz.
Izmantojiet GDB visu laiku katru reizi, jums ir problēma.
Komandas, kas ir noderīgi GDB ir pauze, kas jums iet nu līniju
numuru, funkcijas nosaukums, būtībā kur savu kodu, jūs vēlaties, lai apturētu,
un varētu veikt kontroli.
>> Drukāt ņem mainīgo un izdrukā kāds, ka mainīgais ir, ka
punkts jūsu izpildi.
Nākamais pārceļas jūsu izpildi gar vienu soli.
Un soli soļus iekšpusē funkciju Jūsu izpildi.
>> Pārējās lietas darbojas, kas ir kā jūs faktiski palaist savu kodu.
Turpināt veic visus pasākumus, kas nepieciešami nokļūt uz nākamo lūzuma punkts.
Un ir daudzi, daudzi citi.
Tos uzmeklēt.
Viņi lieliski.
Yeah?
>> Mērķauditorija: [dzirdams]?
>> DAN: Jā, kas ir atkļūdotājs.
Tātad atkļūdotājs ir programma, kas ļauj jums atkļūdot savu programmu.
Tas nav programma, kas atrod bugs tu, lai gan tas būtu lieliski.
>> Un pēdējais man ir meklēt.
Tātad veidiem meklēšanas ka mēs runājām par šajā klasē ir lineāra meklēšanu,
kas ir tikai, ka jūs meklēt, izmantojot katru Mekljuma telpas elements, viens
elements laikā, līdz jūs atradīsiet to, ko jūs meklējat, vai līdz brīdim, kad jūs sasniegsiet
beigās jūsu meklēšanas telpu, kurā norāda jūs sakāt, ka jūs nevar atrast
elements, kas jūs meklējat.
Un tas notiek labākajā pastāvīgu laiku, kas ir 0 1 un sliktākajā lineāru
laiku, kas ir 0 un n.
>> Binārā meklēšanu, kas nepieciešama sordid elementi.
Tu ej uz vidu jūsu elementiem, redzēt, ja elements jūs meklējat
ir lielāks vai mazāks nekā elements ka tu esi vidū.
Tā tas ir lielāks, jūs sakāt, ka apakšā Jūsu meklēšanas telpa ir Jūsu
pašreizējo atrašanās vietu, vidējā, un jūs restart procesu.
Ja tas ir mazāks, tu izskaties teikt ka the-- yeah, kas notiek?
>> Mērķauditorija: [dzirdams]?
>> DAN: Jā.
Kāds no veida veida, kas ir mācīts klase ir godīga spēle testam.
>> [Smiekli]
>> DAN: Un tas, ka jums nav bijis darīt to par problēmu kopumu, tas ir godīgi
spēle testam.
>> AUDITORIJA: Vai mēs varam iet pār to, kā kuri paredzēti,
>> DAN: Tas būs pagājis vairāk.
>> SPEAKER 2: faktiskais kods [Dzirdams] ir uz study.cs50.net.
Tātad, ja paskatās prakses problēmas kas sapludināšanas kārtošanas lapā
study.cs50.net, ir kods īstenošanai apvienot veida.
Tātad, jums nav, lai īstenotu tas pats šovakar.
Bet, pārliecinieties, ka jūs saprotat to drīzāk nekā tikai iegaumējot to.
>> Mērķauditorija: [dzirdams]?
>> SPEAKER 2: sapludināšanas kārtošanas lapa study.cs50.net, pastāv prakse
Problēma, ka, ja jūs noklikšķiniet ar problēma, pašās beigās ir
šķīdumu, kas ir sapludināšanas kārtošanas īstenošanu.
Bet, pārliecinieties, ka jūs to saprotat nevis tikai iegaumējot to
vai kopēt to uz leju.
>> AUDITORIJA: Un perfekti derīgs problēma eksāmenu būtu
kaut kā šeit ir saraksts.
Ko tas saraksts izskatās pēc viens solis Atlase veida vai
ievietošanas kārtošanas vai neatkarīgi.
Viena pilna atkārtojuma saraksta.
Tātad, pat ja jums nav galu galā nepieciešamības kods to, jums ir nepieciešams, lai saprastu to
pietiekami, lai zinātu, kā tas notiek lai mainītu šo masīvu.
>> DAN: Tas ir tas par mani.
>> [Aplausi]
>> LUCAS: Hei visiem.
Mans vārds ir Lucas.
Es esmu gatavojas runāt par recursion, visi par veidu, ka mēs esam iemācījušies, un
mazliet no visiem norādes.
OK?
Tātad vispirms, rekursijas.
Ko tas nozīmē teikt, ka funkcija ir rekursīvs?
>> AUDITORIJA: Zvani sevi.
>> LUCAS: OK, sevi dēvē, jā.
Tātad, piemēram, šo attēlu, piemēram.
Tas ir tāpat kā attēlā iekšpusē no attēla, un tā tālāk.
Tā, piemēram, jūs varat have-- kā Dan kas runā par bināro meklēšanu.
Viens no veidiem, binārā meklēšana ir rekursīvs ir fakts, ka tu esi
mēģinot atrast numuru.
Tātad jūs iet uz vidu.
Un tad jūs pārbaudiet, ja šie numuri tur kas pa kreisi un pa labi.
>> Un tad, ja jūs uzzinātu, skaits ir būs pa kreisi, tas ir tas pats
lieta kā dara meklēšanu atkal, bet tikko pa kreisi no saraksta.
Tātad tas, kā tas izklausās kā tas ir rekursīvs.
Tātad, tas ir iemesls, kāpēc jums puiši ir rekursīvs risinājums sapludināšanas kārtošanas.
>> Labi, tāpēc šeit ir piemērs.
Tātad, pieņemsim, ka es gribu, lai izvēlētos visi skaitļi no 1 līdz n.
Es varu saprast, ka ar n summa numurs ir n plus n mīnus 1 līdz 1.
Bet tad, ja es paskatos n mīnus 1 plus n mīnus 2 plus 1, tas ir tas pats
lieta kā saskaita numuriem līdz n mīnus 1.
Tāpēc es varu teikt par vienlīdzīgas summas apmērā vienāds n plus n mīnus 1 summu.
Vai tas ir jēga?
>> Un es arī būtu kaut kas cits sauc gadījums, kas ir tāds, ka
skaitļu summa up līdz nullei varētu būt nulle.
Tāpēc, tiklīdz man skaitu nulle, es apstājos skaitīšanas.
Vai tas ir jēga?
>> Tātad, šeit ir piemērs tam, kā Es varu īstenot to.
Tāpēc man ir šī funkcija daži.
Kas aizņem veselu n.
Tātad, šeit es pirmo reizi pārbaudīt, ja n ir mazāks vai vienāds ar nulli.
Tātad, ja tas ir mazāks vai vienāds ar nulli, es atgriezties nulli, kas ir mūsu bāzes scenārijs.
Pretējā gadījumā, es varu tikai atgriezties n plus skaitļu summa no
viens pret n mīnus viens.
Jēga?
OK.
>> Tātad, šeit ir, kā tas izskatās.
Jums ir summa 2 līdztiesīgu 2 plus gada 1 summa.
Un daži no 1 ir 1 plus summa ir 0, kas ir 0.
Jēga?
Tātad, ja mēs skatāmies uz kaudze jūsu programma, tas ir, kā tas izskatās.
>> Pirmkārt, mums ir galvenā funkcija.
Un tad galvenā funkcija sauc summa 2.
Un tad summa 2 gatavojas teikt, ak, summa 2 ir vienāds ar 2 plus vienu summu.
Tāpēc es pievieno summu no 1 līdz kaudze.
Un 1 summa gatavojas zvanīt summu 0, kas arī tiks pievienots
uz skursteņa.
Un pēc tam katrs no šiem tiem, kas ir virs otra, ir atgriezties
pirms citiem tiem var glabāt notiek.
>> Tā, piemēram, šeit, summa ir 0, pirmkārt, gatavojas atgriezties 0.
Un pēc tam izvēlēties summu 1.
Tad summa 1 gatavojas atgriezties 1 līdz Apkopojot gada 2.
Un, visbeidzot, summa 2 notiek atgriezties 3 uz galveno.
Vai tas ir jēga?
>> Tas ir ļoti svarīgi saprast, kā kaudze strādā un mēģināt
redzētu, vai tas ir jēga.
Labi, tā šķirošana.
Tātad, kāpēc ir šķirošanas svarīgi, pirmām kārtām?
Kāpēc mums būtu jāuztraucas?
Ikviens?
Dodiet man kādu piemēru?
Yeah?
>> AUDITORIJA: [nedzirdama].
>> LUCAS: Jā, OK.
Tātad, jūs varat meklēt efektīvāk.
Tas ir labs veids.
Tā, piemēram, mums ir daudz lietas, faktiski, jo mūsu dzīvi, ka
ir sakārtoti.
Piemēram, vārdnīcas.
>> Tas ir ļoti svarīgi, lai visi vārdi kādu lai mēs
var piekļūt viegli.
Tātad tas ir tas, ko viņš saka.
Jūs varat meklēt efektīvāk.
Padomā par to, cik grūti tas būtu, lai būtu vārdnīca, kurā vārdi ir
izlases kārtībā.
Jums ir apskatīt, diezgan daudz, katru vārdu, līdz atrodat
vārds, ka jūs meklējat.
>> Ja jūs izmantojat Facebook arī tad, kad jūs meklējat pie saviem draugiem, jūs esat
gatavojas redzēt, ka Facebook nodot jūsu tuvāk draugs ir virs tiem
ka jums nav runāt ar, ka daudz.
Ja jūs iet visu ceļu uz leju jūsu draugs sarakstu, jūs gatavojas, lai redzētu
cilvēki, jūs, iespējams, nav pat atcerieties, ka jūs esat draugos ar.
Un tas ir tāpēc, ka Facebook veidu jūsu draugi balstās uz to, kā
tuvu jums ir uz tiem.
>> Tik organizējot datus.
Arī Pokemon.
Tātad jūs redzat, ka visiem pokemoniem ir numuri.
Un tas ir tāpat kā viegli veids, kā piekļūt datiem.
>> AUDITORIJA: Piekļuve Pokemon.
>> LUCAS: Jā.
>> AUDITORIJA: [nedzirdama].
>> LUCAS: Yep.
Labi, tāpēc atlase kārtošanas.
Atlase kārtošanas gatavojas izvēlētos vismazākā nešķiroti vērtību saraksta katras
laiks katrā atkārtojuma.
Tas ir veida, piemēram, tāda veida, ka jūs darāt savā galvā, kad jūs mēģināt
kārtotu sarakstu uz rokām.
>> Būtībā, viss, kas Jums jādara, ir jums izskatīties vismazākās numuru.
Jūs nodot to šķirotas sarakstā.
Un tad jūs meklēt nākamais mazākais numurs.
Un tad jūs turpināt darīt ka un tā tālāk.
>> Tātad izvēle kārtošanas būtībā tu izvēlēties katru reizi mazāko
nešķiroti vērtība.
Put beigās sakārtoti daļa no saraksta.
Un saglabāt darām.
Tātad, pieņemsim ātri redzēt, kas tas izskatās.
Tātad, šeit ir sakārtoti un nešķiroti sarakstā.
>> Tātad sakārtoti saraksta, tas sākotnēji tukšs.
Un tad es esmu gatavojas, lai izvēlētos mazākais numurs šeit, kas ir 2.
Tāpēc man numuru 2, un man priekšā sarakstā.
Un tad es meklēt nākamais mazākais elements, kas ir 3.
Tāpēc es to beigās no sakārtoti sarakstā.
Un tad es saglabātu darot to.
Es uzskatu, 4, un nodot to beigās.
Atrast 5 un nodot to beigās.
>> Un apskatīt, cik vispār no tiem laikiem, ka Es saku nodot to gals ir,
būtībā, pārnešana divas vērtības.
OK?
Un tad pēdējais, jūs vienkārši ir vēl viens elements.
Tātad tas jau ir sakārtoti.
>> Labi, tā ievietošanas kārtošanas.
Ievietošanas kārtošanas jūs nāksies arī ka lieta, ka tā sakārtoti un
nešķiroti sarakstā.
Vienīgais ir tas, ka katru reizi, kad jūs pievienojot elementu sakārtoti
sarakstu, jūs vienkārši izvēlēties elements, kas ir priekšā nešėirotus sarakstā.
Un tad jūs gatavojas atrast, ko novietojiet to būtu sakārtots
daļa no saraksta.
>> Let 's redzēt, kas tas ir tik tas ir lielāka jēga.
Tātad sākotnēji, piemēram, es cenšos ievietot numuru trīs in
sakārtots daļa no saraksta.
Tātad sarakstā nav neko.
Tāpēc es varu tikai likt numuru 3.
>> Tagad es gribu, lai pievienotu numuru 5 līdz sakārtots daļa no saraksta.
Tāpēc es paskatos numuru 5.
Es ievēroju, ka tā ir lielāka par 3.
Tāpēc es zinu, ka tam ir jābūt pēc 3.
Tāpēc man 3 un 5.
>> Tad es gribu ievietot numuru 2.
Es ievēroju, ka numurs 2 ir faktiski ilgt tad gan 3 un 5.
Tāpēc man tiešām ir, lai to visu veidā no saraksta sākumā.
Tāpēc man ir, sava veida, novirzīt visu elementi sakārtoti sarakstā, lai es varētu
padarītu telpu numuru 2.
>> Tad es redzu numuru 6.
Es redzu, ka tas būtu pēc 5.
Tāpēc man to tur.
Un visbeidzot, es paskatos uz numuru 4.
, Un es ievēroju, ka vajadzētu būt starp 3 un 5.
Un tad es to tur un maiņa visi pārējie elementi.
Jēga?
>> Burbulis Kārtot.
Tātad burbulis kārtošanas ir būtībā tas, ko tu esi gatavojas do-- mēs to saucam burbulis
kārtošanas jo jūs iet cauri list-- tas ir tiešām labāk, ja es vienkārši parādīt
jums patīk this--
un jūs gatavojas, lai salīdzinātu blakus numurus.
Un jūs gatavojas apmainīt savu pozīcijas, ja viņi nav
pareizā secībā.
>> Tātad būtībā, kas gatavojas notikt ir šeit, piemēram,
Jums ir 8 un 6.
Jūs zināt, ka šķiroto pasūtījums būs faktiski ir 6 un 5, vai ne?
Tātad jūs gatavojas apmainīt pasūtījumus.
Tad es redzu, 8 un 4 šeit.
Un man darīt to pašu.
Es swap vēlreiz.
Un, visbeidzot, 2 un 8.
Es arī mijmaiņas tiem.
>> To sauc Bubble Kārtot jo pēc Katrā no šīm iterācijas, patiesībā,
vislielākais numurs sarakstā saņem visu veids beigām sarakstā.
Vai tas ir jēga?
Tāpēc, ka tas tur pārnešana to un pārvietojot to pa labi.
>> Labi, tāpēc šī ir otrā atkārtojuma.
Tas būtu tas pats.
Es darīšu vienu swap un Pēc tam pēdējais.
Es, ka nav mijmaiņas darījumi un saraksts ir sakārtots.
Tātad Bubble Sort, mēs būtībā glabāt iet cauri sarakstam un pārnešana
lietas, kamēr es ievēroju, ka es to nedarīju jebkuri mijmaiņa dara, ka atkārtojuma, kas
nozīmē, ka saraksts jau ir sakārtots.
Jēga?
>> Parunāsim mazliet par darba laika.
Tātad jūs guys atcerēties Big O, Omega, un Theta?
Yeah?
OK, kas ir Big O, vispirms?
>> AUDITORIJA: [nedzirdama].
>> LUCAS: Jā, to sauc sliktākajā gadījumā runtime, kas nozīmē tikai to, ka tā ir
cik daudz jūs sagaida programmu veikt, lai palaistu.
Tāpat kā, runājot of--
Šajā case-- n.
Elementu skaits saraksts sliktākajā gadījumā.
Tāpat kā, sliktākajā iespējamā lietas.
>> Tātad burbulis Sort, piemēram, mums ir Big O no n laukumā.
Kāpēc mums ir kas?
Kāpēc Bubble Kārtot Big O n kvadrāts?
>> AUDITORIJA: [nedzirdama].
>> LUCAS: Jā, tāpēc sliktākajā gadījumā būs ka man būs jādara n atkārtojumiem.
Tātad, katrs no atkārtojumiem būs celt lielāko elementu beigās
saraksta.
Tātad sliktākajā gadījumā ir tas, ka man ir darīt, ka lieta n reizes.
Un par katru no tiem laikiem, man ir do n mijmaiņas darījumus, jo man ir, lai salīdzinātu
katrs divi elementi.
Tātad, tas ir iemesls, kāpēc tas ir n kvadrātā tāpēc, ka tas ir n reizes n.
>> Tad izvēle veida ir arī n kvadrātveida jo katram atkārtojumam, man ir
apskatīt katru elementu sarakstā.
Un tad atrast mazākais, kas nozīmē, ka man ir
skatīties caur n elementiem.
Un man ir jādara, ka n reizes, jo Man ir, lai atlasītu visus n elementus.
>> Ievietošanas veida ir arī n kvadrātveida jo sliktākajā gadījumā būs
būt, viens, man ir ievietot n skaitļi, vai ne?
Tāpēc es jau zinu, ka es esmu gatavojas ir n atkārtojumiem.
Bet katram no šiem numuriem, ja man bija apskatīt visas numuriem
sakārtoti sarakstu un nodot to visu ceļu priekšā, ka būs n kvadrātveida
jo tas būs n reizes n vēlreiz.
Jēga?
Kas par omega?
>> AUDITORIJA: [nedzirdama].
>> LUCAS: Tas ir labākais scenārijs.
Tātad, tas ir tāpat, jo daudz laikiem šķirošanas, labākais scenārijs ir
ja saraksts ir jau sakārtots.
Tātad jums nav īsti ir kaut ko darīt.
Burbulis Kārtot ir labākais scenārijs n.
Vai jūs guys zināt, kāpēc?
>> AUDITORIJA: [nedzirdama].
>> LUCAS: Jā, ja jums sekot vai dati deva bija kādi mijmaiņas darījumus vai
nē, ja jums ir kaut kas, piemēram, iestatīt taisnība, ja tur bija atkārtojuma, ja
saraksts jau ir sakārtots, būtībā, kas notiek varētu notikt, ir es esmu gatavojas
mēģināt apmainīt katru divas blakus elementi.
Es esmu gatavojas, lai redzētu, ka nav mijmaiņas darījumi.
Un es vienkārši atgriezties uzreiz.
>> Tātad, tas nozīmē, ka man tikko bija iet cauri saraksta vienu reizi.
Tātad, tas ir n, jo es izskatos pie n elementiem.
Kāpēc izvēle kārtot n kvadrāts?
>> Jā, pat tad, ja saraksts ir sakārtots, lai katru atkārtojuma atlases veida, es
ir izvēlēties minimālo elementu.
Tātad tas nozīmē, ka man ir, lai apskatīt visos elementiem nešķiroti
uzskaitīt un atrast minimumu par katru atkārtojuma.
Vai tas ir jēga?
>> Ievietošana un zobens ir n, jo lieta, ka es cenšos, lai ievietotu
numurus un visus numurus, kad es mēģiniet ievietot tos, es redzu, ka viņi
atrodas pareizā stāvoklī.
Man nav, lai iet pārbaudīt visu otras numuri ar nešķirotiem sarakstā.
Tātad, tāpēc tas būs n.
Jēga?
Un kas ir teta?
>> AUDITORIJA: [nedzirdama].
>> LUCAS: Kas, žēl?
Saku vēlreiz.
>> AUDITORIJA: [nedzirdama].
>> LUCAS: Tieši tā.
Tātad jūs varat redzēt, ka tikai izvēle glabājas sapludināšana kārtošanas ir thetas.
Un tas ir tāpēc, ka jums ir tikai teta ja abas Big O un omega ir vienādi.
OK.
Un, visbeidzot, apvienot veida ir log n.
>> Un tad, kā Dan teica, sapludināšana kārtošanas ir veida, piemēram, tādā pašā veidā, ka
jūs bināro meklēšanu.
Tātad jūs saņemsiet sarakstu.
Un jūs gatavojas samazināt uz pusi.
Un tad jūs samazināt tos mazākās daļās.
Un tad jūs tos apvienot.
Jūs guys atcerēties, ka, labi?
OK, kā viņš saka.
>> Labi, norādes.
Tātad, kas ir rādītājs?
>> AUDITORIJA: [nedzirdama].
>> LUCAS: adrese.
OK.
Es zinu, ka Deivids parāda ķekars videoklipi Binky un lietas norādot
otru.
Bet man patīk domāt par norādes par vienkāršu adresi.
Tātad, tas ir mainīgais, kas notiek uzglabāt adresi.
>> Tātad, tas ir tikai šī īpašā mainīgais ka ir četri baiti.
Atcerieties, ka rādītājs uz kaut ko ir vienmēr četri baiti ilgi mūsu 32-bit
mašīna tik gadījumā ierīce.
Un tas tikai ir vietas ir mainīgs iekšpusē no tā.
>> Labi, tāpēc tur ir šī atmiņa, būtībā.
Tātad katrs bloks atmiņas tiešām ir Etiķete, kas ir adrese
slotty atmiņu.
Tātad tas nozīmē, ka es varētu būt rādītājs, kas vērsta uz
jebkura no šīm adresēm.
Tātad, iemesls, kāpēc mēs izmantosim norādes ir ja man ir atcerēties atrašanās vietu
ka īpaša mainīgais ir atmiņas.
>> Un jūs guys atcerēties, ka viens no tiem gadījumi bija, ja man ir funkcija
ja man ir tiešām gribu, lai jūs swap par reals, es tiešām
ir jānosūta rādītāju.
Ne mainīgais.
Vai jūs guys atcerēties, ka?
Atšķirība between--
kāds ir nosaukums?
Zvanot pa vērtības un aicinot ar norādi, vai ne?
>> Labi, jā.
Tāpēc zvaniet pēc vērtības.
Kad jūs vienkārši nosūtīt mainīgo darbotos jūs vienkārši nosūtot vērtību.
Tātad jūs faktiski nosūtot kopija mainīgā.
Un jūsu programma nevarēja aprūpes mazāk par to, ja pats mainīgais faktiski
padara kopiju.
>> Un zvanot pa norāde nozīmē, ka Es tiešām nosūtot kopiju
rādītāju uz šo mainīgo.
Tātad, tas nozīmē, ka es esmu nosūtot izvietojums šo mainīgo.
Tāpēc sajust man ir vietu mainīgs, kad es zvanu funkciju
ar norādes, es esmu spējīgs reāli mainītu datus, kas bija galvenais.
Jēga?
>> Kaut gan, rādītājs ir kopija, rādītājs joprojām ir reālu adresi
mainīgais, ka es vēlos mainīt.
Jēga?
>> Tā radot norādes.
Atcerieties, rādītāju vienmēr ir tipa, ka tas ir norādot
pozīcijā un pēc tam zvaigzni.
Un tad jūs nodot vārdu.
Tāpēc atcerieties, ka, ja jums ir kāda zvaigzne, tas ir kā rādītāju uz
ka neatkarīgi mainīgais ierakstiet, ka jums bija.
>> Tātad šeit zvaigzne, piemēram, tas ir rādītājs un skaitlis.
Un tad char zvaigzne ir rādītājs char zvaigzne un tā tālāk.
Yeah?
>> AUDITORIJA: Ko darīt, ja mums ir rādītājs n zvaigzne x.
Es zinu, ka rada rādītāju uz x.
Vai tas arī paziņot x skaitlim?
>> LUCAS: OK, tad, kad jūs sakāt n zvaigzne x, jūs neesat izveidot rādītāju uz
mainīgais x.
Jūs veidojat rādītāju nosaukts x.
>> AUDITORIJA: [nedzirdama].
>> LUCAS: Tātad, kad es saku n zvaigzne x, es esmu sakot, hey, atmiņā, es esmu gatavojas
saņemt vienu no šiem trīs kastes.
Un es esmu gatavojas teikt, ka būs X, kas ir
būs rādītāju.
Un kaut ko interesantu par norādes ir tā, ka mēs sakām, ka viņiem ir
4 baiti uz 32 bitu mašīna.
Un iemesls tam ir tāpēc, ka 4 baiti ir 32-bitu.
>> Un iekārtas, kas ir 64 biti faktiski ir norādes adreses
kas ir 64 bitus garš.
Tātad, tas tikai nozīmē, ka izmērs adreses mašīna ir atšķirīgs.
>> Tik Atsauču un dereferencing.
Ir divi operatori, kas jūs guys vajadzētu atcerēties.
Pirmais ir Ampersand.
Otrais ir zvaigzne.
Nesaņem sajaukt ar šo zvaigzni, un tas STAR prasībām, jo ​​atceros, ka
šajā gadījumā, jums ir n zvaigzne.
>> Tas ir tāpat kā visa lieta kopā.
Nav n telpa zvaigzne.
Tātad, tas nozīmē, ka tas ir veids.
Atcerieties, ka, ja jums ir mainīgais zvaigzne, tu esi
runājam par veidu.
>> Ja jums ir tikai zvaigzne un tad nosaukums mainīgo, tas nozīmē, ka
jūs dereferencing rādītāju, kas nozīmē, ka jūs meklējat pie
rādītājs, atrast adresi, tas ir norādot uz, dodoties uz minēto adresi,
un meklē, kad jums ir tur.
Tāpēc es saku saviem studentiem, ka, ja jums ir zvaigzne, jums vajadzētu domāt, ka tā ir
saīsinājums satura.
>> Tātad, ja jums ir rādītājs, un tu do zvaigzne rādītāju, tas ir
satura rādītāja.
Tātad jūs iet, lai neatkarīgi no tā, norādot uz un apskatīt nemainīgu saturu.
Un Ampersand ir tāds pats lieta kā adresi.
>> Tātad, ja man ir mainīgais A--, piemēram, pieņemsim teikt, ka man bija int vienāds 3--
ja es gribu, lai atrastu adresi, kas mainīgais atmiņas, es varu tikai darīt
Ampersand.
Tātad, tas ir adrese.
Jēga?
>> Tātad, šeit ir piemērs.
Šis ir pazudis int b un int c.
Tātad int līdzvērtīga 3 nozīmē, ka Es iešu uz atmiņu.
Un es esmu gatavojas, lai atrastu slota un nodot skaits 3 šeit.
>> Un tad int b vienāds 4.
Es esmu gatavojas darīt to pašu.
Iet uz atmiņu un nodot numuru 4 vienā no kastes.
Un int vienāds ar 5.
Atrast citu lodziņu un nodot vairākus 5.
>> Tātad, kas ir šī līnija dari? n zvaigzne pa vienāds aizvieto & zīmes a.
Tātad, pirmkārt, n zvaigzne pa.
Ko tas dara?
>> AUDITORIJA: [nedzirdama].
>> LUCAS: Jā, tāpēc n zvaigzne gadā, pirmkārt, deklarē rādītāju sauc pa.
Un tad tas ir piešķirot vērtību ka rādītājs ir adrese.
Tik Ampersand.
Tad, ja man zvaigzne PB, kas ir zvaigzne pb?
>> Ak, piedodiet.
Tas ir arī pazudis. n zvaigzne pb.
Es domāju zvaigzne pc.
Es esmu tik žēl.
Tas ir tas pats.
Bet tagad es esmu labs ar radot rādītāju B un pēc tam rādītāju uz c.
Yeah?
>> Mērķauditorija: [dzirdams]?
>> LUCAS: Jā.
Tātad, ja jums iet uz atmiņu un doties uz kaste, kas ir apzīmējums, lai pa,
jūs tiešām gatavojas skat adreses.
OK?
Yeah?
>> Mērķauditorija: [dzirdams]?
>> LUCAS: Jā, rādītājs ir adrese.
Nekad aizmirst, ka.
Tas ir tāpat kā vissvarīgākais daļa par norādes.
Tur uzglabātu un adreses uz kādu mainīgo.
Kaut kas cits?
Jebkādi citi jautājumi?
OK.
>> Tik Pointers un masīvi.
Atcerieties, ka tad, kad man int masīvs 3, būtībā, ko es daru, ir, es esmu, veida
gada, deklarējot rādītājs.
Tik masīvs ir veids kā rādītāju uz īpašu vietu atmiņā, kurā es
piešķirti trīs slots par veselu skaitļu.
Vai tas ir jēga?
>> Tātad, kad man int masīvs 3, ko es esmu darot, būtībā, ir radīt trīs
slots atmiņā.
Tāpēc es vienkārši atrast trīs slots atmiņā.
Tātad, ja es daru, tad, zvaigzne masīvs, to būtībā nozīmē saturu masīva,
kas nozīmē, ka es izdzēst rādītāju, man iet uz šo vietu, kas tas ir, kas liecinātu,
un man nodot numur viens.
>> Un tad, ja man zvaigžņu masīvs plus 1, tas ir tas pats, kas dara masīvs
stiprinājums viens, kas nozīmē tikai to, es eju uz vieta, ka tas norādot uz.
Un tad plus 1 markas me pārslēgtos par vienu pozīciju.
Tad es eju uz šo pozīciju, faktiski, un nodot numuru divi.
>> Un tad, beidzot, kad man masīvs plus 2, es eju uz to, kur
Array rāda.
Un tad es eju uz atmiņas blokiem.
Un tad es nodot skaits trīs šeit.
Yeah?
>> AUDITORIJA: Tātad zvaigzne masīvs ir vienkārši sakot ļoti pirmo punktu.
Un jūs varat pievienot 1, tikai tāpēc, ka mēs esam tikai patiešām
atsaucoties uz šo pirmo adresi.
>> LUCAS: Jā.
Kāpēc mēs, piemēram, saka masīvs 0, masīvs 1, un masīvs 2?
Es saku, kāpēc jūs darāt 0, 1, 2, 3, nevis 1, 2, 3?
Viens no iemesliem ir tas, viens, datoru programmētāji dod priekšroku, lai sāktu
skaitot no 0.
Divi ir tāpēc, ka tad, kad jūs masīvs 0, tas ir tas pats, kas dara masīvs
plus 0, kas nozīmē, es eju šī nostāja, un man nav
izlaist visas atmiņas blokus.
Tāpēc man nav pārvietot visas atmiņas bloku.
Yeah?
>> Mērķauditorija: [dzirdams]?
>> LUCAS: Tātad viņa jautā, kas ir atšķirība starp dara
tas vai darot malloc.
Viena no atšķirībām ir tā, ka int masīvs 3 ir radīt
masīvs uz skursteņa.
Un, kad es darīt malloc, to rada uz kaudzes.
Vai tas ir jēga?
>> Tātad, kā tas malloc faktiski strādā?
Tad kāpēc mēs pat nepieciešams izmantot malloc?
Jūsu sastādītājs veida skaitļu out all mainīgie, kas jums deklarētās.
Un viņš rada telpu visiem no tiem kaudze.
Tātad visiem jūsu mainīgo dodas būs kaut kur kaudze.
Tātad, šeit ir vides mainīgos.
>> Tātad būtībā, vieta tiem mainīgajiem atmiņā tiek piešķirti
apkopot laiku.
Tātad, tas nozīmē, ka jūsu dators ir zināt visu šo mainīgo
iepriekš.
Tas nav nepieciešams zināt, kāda vērtība jūs gatavojas likt tiem.
Bet tas ir nepieciešams zināt, kā daudz atmiņas jums nepieciešams.
>> Bet tagad pieņemsim, ka, piemēram, jūs radot masīvu, vai, ņemot
string, ka jūs lietojat no lietotāja.
Jūs nezināt, cik ilgi string būs, piem.
Tātad, jūs nezināt, cik tieši Atmiņas bloki jums piešķirt, vai ne?
>> Tātad, tas nav īsti jēgas tu teikt likt 100 rakstzīmes.
Un tad, ja lietotājs raksta 150?
Jūs esat būs ieskrūvē.
>> Vārdu sakot, jūs varat būt pārliecināti par to, kā daudz atmiņas jums ir nepieciešams piešķirt
kad jūs sastādīt programmu.
Jūs tikai zināt, ka palaist laiku.
Tātad, tas ir iemesls, kāpēc jums ir kaudze.
Tātad kaudze nāksies atmiņu ka jūs piešķirot laikā
ilgums programma darbojas.
>> Vārdu sakot, ja jūs darīt malloc, ko jūs darāt novirza atmiņu
runtime, kas nozīmē, ka jūs esat Lemjot tiesības tajā brīdī, ka jums
būtu šo atmiņu.
Tātad, tas ir, kad jūs tā piešķiršanu.
Vai tas ir jēga?
>> Līdz ar to atcerēties, kaudze ir mainīgie , kas ir izveidoti uz kompilēšanas laikā.
Un tad kaudze ir mainīgie , kas tiek veidots kā jums iet
ar malloc, piemēram.
>> Mērķauditorija: [dzirdams]?
>> LUCAS: Tātad GetString ir saukšu malloc.
Ļaujiet man runāt par malloc, un Es paskaidrošu GetString.
Tātad malloc ir pats kā atmiņas sadalījumu.
Tātad, tas notiek, lai sadalītu atmiņas uz kaudzes.
Un tas notiek, lai atgrieztos rādītāju uz ja šis atmiņa tika piešķirti at.
>> Tātad, kad jūs do--
šeit example--
n zvaigzne rādītājs.
Un tad rādītājs ir vienāds ar malloc izmērs collu reizes 10.
Es veidoju rādītāju.
Un tad es esmu piešķirot šo rādītāju uz vērtība rādītāja ka malloc
dod man.
>> Tāpēc es esmu lūdzot malloc jūs varat piešķirt vieta 10 veselu skaitļu.
Tas, ko tā saka.
Un malloc dod man atpakaļ rādītāju uz šo vietu.
Jēga?
OK.
Es Un GetString ir, būtībā, darot zvanīt uz malloc, lai jūs varētu piešķirt
atmiņas laikā Runtime.
>> Vienmēr atcerieties, lai pārbaudītu null jo malloc gatavojas atgriezties null
ja tā nevar piešķirt atmiņu.
Pieņemsim, ka jūs lūgt smieklīgs atmiņas apjomu.
Jūsu dators nebūs spēj piešķirt, ka daudz.
>> Tik malloc ir tikai gatavojas atgriezties null.
Tāpēc vienmēr atcerieties, lai pārbaudītu, vai rādītājs, ka jums no malloc ir
null vai nav, jo, ja tā ir, jūs varētu būt dereferencing rādītāju un
izraisot sānu kļūdas.
Un visbeidzot, neaizmirstiet savu brīvo atmiņu.
>> Malloc rada atmiņu kaudzi.
Un jums ir, lai atbrīvotu atmiņu pirms programmas beigām.
Labi, ka viss ir par mani.
Atvainojiet, Rob.
Paldies.
>> [Aplausi]
>> LUCAS: Kādi pēdējie jautājumi pirms Rob nāk?
Nē?
Yeah?
>> AUDITORIJA: es neredzēju tas viens tiešsaistē.
Vai esat augšupielādējis to vēl?
>> LUCAS: Es domāju, ka Deivs ir augšupielādējot to drīz.
>> DAVE: Tas būs publicēta.
>> LUCAS: Tas būs tiešsaistē.
>> AUDITORIJA: Tas ir atkarīgs.
>> LUCAS: Tas ir atkarīgs?
OK.
Yeah?
>> Mērķauditorija: [dzirdams]?
>> LUCAS: Jā, jums vajadzētu atbrīvot visus atmiņa, kas ir likts uz kaudzes.
>> Mērķauditorija: [dzirdams]?
>> LUCAS: Jā.
Jebkurā laikā, ka jums ir kultūras malloc, Jums ir jābūt kultūra bezmaksas
pēc tam, jums jāpārtrauc lietot šo mainīgo.
Tik malloc un bezmaksas ir vienmēr kopā.
Viņu labākie draugi.
Jā.
Aplaupīt?
>> ROB: Es iešu ātri.
Un arī video tiks safasēti.
Man ir mic par.
>> Labi, tāpēc šonedēļ pieci sīkumi.
Pirmā lieta, kas mums ir, ir kaudze.
Tāpēc atcerieties, ka tur ir tikai viens kaudze kadri aktīvo funkciju zvanu.
Mēs redzam, ka sekundē.
, Kā arī atcerēties to, kas patiesībā notiek Katrā kaudze rāmī ir būs
vietējās mainīgie mūsu funkcijas, argumenti, kas tiek nodotas uz mūsu
funkcijas, kopā ar pāris citas lietas, jums nav īsti
jāuztraucas par.
>> Tātad, šeit ir piemērs programma, kurā, paziņojums, galvenais ir printfing atgriešanos
vērtība foo 4.
foo ir tikai gatavojas atgriezties vērtība bar 4 komats 6.
Un bar gatavojas noteikt dažas vietējās mainīgais n ir vienāds ar 4 reizes 6.
Un pēc tam atgriezties n.
>> Tātad, pieņemsim apskatīt kaudze visā faktiskais atkārtojuma šīs programmas.
Tātad tur ir apakšā mūsu kaudze.
Atcerieties, ka kaudze aug uz augšu.
Tātad, apakšā mūsu skursteni, mēs ir kaudze rāmis galvenais.
Kad programma sākas, galvenais vienmēr būs pie
apakšā mūsu kaudze.
>> Un kāda ir iekšā mūsu kaudze rāmis maģistrālo?
Tātad, pat ja nepastāv vietējā mainīgie galvenais, kā es teicu iepriekš,
mēs esam argc un RGV aizņem vietu iekšpusē galvenais kaudze rāmi.
Tātad galvenais tagad gatavojas zvanu funkciju foo.
Un tas nozīmē, ka foo gatavojas saņemt savu kaudze rāmi.
>> Tāpēc tagad mēs esam iekšpusē funkcija foo.
Un to, kas ir nepieciešams, lai iet Foo žetonu rāmis?
Nu, foo ir arguments n.
Un n ir vienāds ar 4, jo tas, ko Galvenais ir iet kā Foo argumentu.
>> Tāpēc tagad foo gatavojas zvanīt bar.
Kas bar nāksies iekšā tās "kaudze rāmi?
Tā ir x ir vienāds ar 4 y ir vienāds ar sešiem.
Tas vēl nav viss, ko mēs esam nāksies kaudze rāmī tāpēc, bar
ir arī vietējā mainīgs n.
Un n mēs ejam, lai uzstādītu vienāds ar 24.
>> Tāpēc tagad bar gatavojas atgriezties n.
Tātad bar atgriežas 24 līdz kaudze rāmis foo.
Un tāpēc, ka josla ir tagad atgriežas, ka nozīmē, ka mēs esam popping kaudze rāmi
bāra nost no skursteņa.
Tātad viss atmiņas ka josla bija izmantojot tagad pie skursteņa.
>> Tagad, foo ir arī gatavojas atgriezties 24 uz galveno.
Tāpēc tagad, ka foo atgriežas, atmiņu ka foo tika izmantojot savā '
kaudze rāmis ir pagājis arī.
Un tagad, galvenais gatavojas zvanīt printf.
Tātad printf ir tikai vēl viena funkcija.
Kad mēs saucam printf, tas būs vēl kaudze rāmis par printf
funkcija zvans.
>> Ko mums iet printf?
Tas ir to, kas notiek, lai iet uz tās steku rāmja.
Vismaz, mēs iet ka procenti i slīpsvītru n un
arguments 24.
Tas varētu būt vairāk, jo tas ir kaudze rāmis ja printf notiek, ir, izmantojot kādu
vietējie mainīgie.
Mēs nezinām.
>> Bet viss, kas iet printf gados kaudze rāmi.
Tas notiek, lai izpildīt printf.
Tad printf ir darīts.
Tā atgriezīsies.
Visbeidzot, galvenais ir izdarīts.
Galvenais atgriezīsies.
Un tad mūsu programma tiek darīts.
Yeah?
>> AUDITORIJA: Vai jums redzēt [nedzirdama]
argumenti [nedzirdama]
parametri?
>> ROB: Tātad ir smalks atšķirība starp argumentiem un parametriem.
Un tiešām, jo ​​kopējā runā, cilvēki mēdz vienkārši sajauc tos visu laiku.
Bet parametri ir formāla nosaukt par lietām.
>> Tik argc un argv ir parametrus uz galveno.
Argumenti ir tas, ko jūs patiesībā caurlaide kā šo parametru.
Tātad, kad es aicinu foo 4, 4 ir arguments es esmu garāmejot.
Un parametrs n, iekšpusē foo, uzskata par vērtību 4
jo 4 bija arguments.
>> Mērķauditorija: [dzirdams]?
>> ROB: n ir vietējais mainīgais bar.
n joprojām ir vietējā foo, bet tas ir parametrs foo.
Tas nav vietējā mainīgs.
Yeah?
>> Mērķauditorija: [dzirdams]?
>> ROB: foo ir tikai zvana bar un atgriežoties neatkarīgi bar atdevi.
>> Mērķauditorija: [dzirdams]?
>> ROB: Jā, tikai, lai redzētu vairākas kaudze rāmji.
Yeah?
>> AUDITORIJA: Kāpēc foo saukta pirms printf?
>> ROB: Kāpēc foo pazvanot printf?
Lai es varētu būt, tā vietā, izdarīt kaut ko piemēram int x vienāds foo no 4
un pēc tam izdrukāts x.
Bet tā vietā, es apvienot funkciju zvaniet uz printf arguments.
>> Bet paziņo, ka mēs nevaram reāli izpildīt aicinājumu printf, kamēr mēs
izdomāt, ko foo no 4 ir.
Tāpēc mēs ejam, lai novērtētu to.
Un tikai tad, kad tas ir izdarīts gatavojas nākt atpakaļ un izvērtēt šo problēmu.
Yeah?
>> AUDITORIJA: Tā gan bārā [nedzirdama]
vērtība, kāpēc mums nav [nedzirdama]?
>> ROB: Tie pilnībā būtu int.
Kas netika noķerti vairāk Vairāku caurlaides.
Lai tā būtu int bar un int foo jo gan no tiem
atgriežas veseli skaitļi.
Void ir tikai tad, ja viņi nenāks atgriezties faktiskās vērtības.
Yeah?
>> AUDITORIJA: Ja Jums ir bijusi līnija iepriekš atgriešanās, [nedzirdama]?
>> ROB: līnija virs atgriešanās?
>> AUDITORIJA: Jā.
Tāpat kā, ja jūs printf un [nedzirdama] tas tā drukāt divreiz?
>> ROB: Tātad iekšpusē foo?
Ja mums bija printf tieši šeit?
>> AUDITORIJA: Jā.
>> ROB: Tātad, ja mums bija printf tiesības šeit, tas varētu drukāt vienu reizi.
Tā mēs aicinām foo reizi tiesības šeit, tad mēs hit printf.
Tad mēs saucam bar.
Un tad foo atgriezīsies.
Un tas arī viss.
Mēs tikai kādreiz saskarties printf vienreiz.
Yeah?
>> Mērķauditorija: [dzirdams]
printf zvanot foo, jo mēs esam pirmais zvanot printf un tad mēs esam garām
argumenti.
>> ROB: Tātad teorētiski, nav printf zvanot foo?
Līdz ar to nav.
Tikai piespriest c gatavojas izpildīt šīs lietas ir, pirms mēs varam
izsauktu funkciju, visiem argumentus funkcijai ir
pilnībā novērtēta.
Tāpēc tas tiek pilnībā novērtēti?
Jā, tas ir tikai string.
Tas ir tikai vērtība.
>> Tad mums ir pilnīgi izvērtēt šo.
Kad tas ir izdarīts, tagad visi tās argumenti ir novērtēti.
Un tagad mēs varam darīt zvanīt printf.
Yeah?
>> AUDITORIJA: Viens jautājums.
Ja jums ir anulēts funkcija, jābūt Jums ir atgriešanās semikolu?
>> ROB: Jums nav atgriešanās semikolu ja jums ir anulēts funkcija.
OK.
Tātad tagad daži kaudze sīkumi.
Tātad, kaudze ir, kā mēs spēsim tikt galā ar dinamisku atmiņas vadību.
Un tas ir tieši pretrunā ar kaudze, ko mēs saucam automātiskā
atmiņas pārvaldības.
>> Tātad uz skursteņa, jūs nekad īsti ir tikt galā ar to, kā vietējās mainīgie
tiek grūsti un popped off visu šie kaudze rāmji un visu, kas stuff.
Jums nav jāuztraucas par to.
Tas ir automātiska.
Tātad kaudze ir rokasgrāmata.
Un [nedzirdama]
nāk no šīm funkcijām malloc un bezmaksas.
>> Tātad, šeit ir cita programma.
Viss, ko mēs darām, ir mallocing skaitlis.
Mēs esam uzglabājot to zvaigžņu x.
Protams, mums ir jāpārbauda lai redzētu, ja x ir nulle.
Tad mēs ejam vienkārši noteikt, ko x ir vērsta, lai līdz 50.
Drukāt, kas x ir vērsta uz, Print X, un pēc tam brīvi x.
>> Tātad, kā tas ir patiesībā skatīsies ja mēs skatāmies uz mūsu skursteņiem un kaudzes?
Tātad mēs sāksim atkal.
Mūsu kaudze apakšas kā iepriekš.
Atceries, ka tev sakraut tieši iebilst kaudze?
Tāpēc mēs esam nāksies top mūsu kaudzes tur.
>> Tātad apakšā mūsu kaudze, mēs esam mūsu kaudze rāmis galvenais.
Tā ir telpa, argc, ARGV, un mēs tagad ir vietējās mainīgo x, kas
ir int zvaigzne.
Tāpēc mēs ejam atkārtot izmantojot šo programmu.
Pirmā lieta, kas mums ir, ir zvans uz malloc.
>> Tāpēc mēs nesam zvanu uz malloc.
Malloc ir funkcija.
Tas notiek, lai iegūtu kaudze rāmi.
Ko mums iet uz malloc?
Kas notiek, lai iet iekšā no skursteņa rāmja.
Mēs iet lielumu n, kas ir 4.
Tāpēc, ka ir nodota malloc.
>> Kāda malloc darīt?
Tā grabs mums dažas vietas uz kaudzes.
Tāpēc mēs gatavojamies iet uz kaudzi.
Un mēs ejam paķert 4 baiti no kaudzes.
Tāpēc pieņemsim tikai dot, ka patvaļīga adresi.
0x123 Tikai izlikties, ka ir adresi, kas ir uz kaudzes.
>> Tātad, kas ir faktiski iekšpusē, ka reģions atmiņas pie adrešu Ox123?
Atkritumu.
Tātad mēs neesam saglabāti neko tajā.
Tātad, cik mums zināms, varētu būt kaut kas.
Jums nevajadzētu pieņemt, tas ir nulle.
Tas, visticamāk, nav nulle.
>> Tātad tagad malloc atgriežas.
Un ko mēs darām, kad malloc atdevi?
Mēs, kas ko tas atgriežas.
Mēs noteikti x vienāds ar to, ko tas atgriežas.
Tātad, kas tas atgriežas?
Tas atgriežas 0x123, jo tas ir adrese bloka atmiņā, ka tā
tikai piešķirti kaudzē.
>> Tātad atgriezties 0x123 x tagad būs jānosaka vienāds ar 0x123, kas, gleznieciski,
mēs bieži izdarīt kā x ar faktisko bultiņa norāda uz šo bloku.
Bet x ir tikai glabāšanai šo adresi.
Tāpēc tagad mums ir jāpārbauda, ​​ja x ir nulle.
Tas nav null.
Mēs izliekamies, ka malloc izdevās.
>> Tātad tagad zvaigzne x ir vienāds 50.
Tātad zvaigzne atceras, tas nozīmē, dodieties uz šo adresi.
Tātad 0x123 Mēs ejam, lai dodieties uz šo adresi.
Tāpēc, ka mūs tur augšā.
Ko mēs darām šajā adresē?
Mēs glabāšanai 50.
>> Tātad, pēc šīs līnijas, kas ir tas, ko lietas gatavojas izskatās.
Tāpēc tagad tas vairs nav atkritumu tur.
Tagad mēs zinām, ka 50 ir, ka īpaši adrese jo
mēs noteikt to, ka.
OK?
Tāpēc tagad mēs ejam, lai drukātu f.
>> Tātad vispirms mēs ejam, lai drukātu zvaigzne x.
Tātad, kas ir zvaigzne x?
Atkal, zvaigzne x nozīmē doties lieta, ka x ir vērsta uz.
Tātad x ir uzglabāt 0x123 Iet uz to.
Mēs 50.
Tik drukāt f kas.
Un tas nozīmē, ka tas notiek, lai drukātu 50.
Un tad, kas atgriežas.
>> Un tad mums ir otrais printf.
Tagad mēs esam procentiem p.
Ja jūs neesat redzējuši, ka ir cik jūs drukāt rādītāju.
Tāpēc mums ir procentiem i, procenti f, un visiem tiem, kas jau.
Tātad procenti p, drukāt rādītāju.
>> Tātad x ir rādītājs.
Tātad, ja mēs ejam, lai drukātu x sevi, mēs drukāšanas to, kas ir patiesībā iekšā
x, kas ir 0x123 Tātad pirmais drukas f gatavojas drukāt 50.
Otrais drukas f notiek drukāt 0x123 Yeah?
>> AUDITORIJA: Vai jūs izmantojat procentiem x, lai izdrukātu rādītāju?
>> ROB: Tātad jūs izmantojat procentiem x, lai izdrukātu rādītāju?
Tātad jūs varat, bet procenti x ir tikai, vispārīgāk, piemēram, ja jums ir kāda
skaitlim un vēlaties drukāt tā kā heksadecimālo.
Tas ir tāpat, kā jūs darīt.
>> Tā kā procenti d būtu drukāt kā aiz komata.
Tas ir bija mums nokļūt procentiem d. i ir tikai skaitlis.
procenti p ir speciāli uz norādes.
>> Tātad x ir rādītājs.
Mēs vēlamies izmantot procentiem p.
Bet procenti x varētu strādāt.
Yeah?
>> Mērķauditorija: [dzirdams]?
>> ROB: Jā.
Vismaz par to call-- lai es neiekļāva to šeit.
Bet šie divi argumenti ir obligāti iekšpuses šo kaudze rāmja
kopā ar visiem vietējiem mainīgajiem printf gadās būt, izmantojot.
Un tad nākamais zvans printf tagad iekšpusē printf kaudze rāmis
procenti p slīpsvītru n un neatkarīgi vērtība x ir, kas ir 0x123.
Yeah?
>> Mērķauditorija: [dzirdams]?
>> ROB: Tas būs drukāt kaut ko ka izskatās šādi.
>> AUDITORIJA: [nedzirdama].
>> ROB: Tātad tas drukā to adreses formā.
Izskatās, adresi.
Yeah?
>> Mērķauditorija: [dzirdams]?
>> ROB: Kāpēc ir kas?
>> Mērķauditorija: [dzirdams]?
>> ROB: Kāpēc tas ir rādītājs 4 baiti?
Tātad tur ir vesels bars no 0 gados priekšā to.
Tātad, tas ir patiešām 0x0000000123.
Uz 64 bitu sistēmā, nebūtu viss ķekars vairāk nullēm.
Yeah?
>> AUDITORIJA: [nedzirdama].
>> ROB: Tātad pirmais printf gatavojas print--
>> AUDITORIJA: [nedzirdama].
>> ROB: Jā, tas notiek, lai drukātu kāda x ir vērsta uz.
Zvaigzne saka, kas tas ir lieta norādot uz.
Paķert to.
Tātad, kas ir tas norādot uz?
50.
Paķert to.
Tas ir tas, ko mēs ejam, lai drukātu.
Tā kā nākamo, mēs esam tikai drukāšanas x sevi.
Kas ir iekšpusē f?
0x123.
OK.
>> Un tad, beidzot, mums ir bezmaksas.
Ko mums iet, lai atbrīvotu?
Mēs iet x.
Šis laiks man tiešām redzams tas ir kaudze rāmī.
>> Tāpēc mēs esam iet vērtību 0x123, lai atbrīvotu.
Tagad tik brīvi zina, labi, Man ir jāiet līdz kaudze
un brīvu, ka atmiņas.
Tas vairs izmantojot to, ko ir adrešu 0x123.
>> Tik brīva gatavojas atbrīvot ka no kaudzes.
Tagad mūsu kaudze atkal ir tukša.
Mums nav atmiņas noplūde.
Tagad bezmaksas atgriezīsies.
Ievērojiet, ka x joprojām ir 0x123.
Bet tas tagad nav derīgs atmiņas.
Mēs vairs dereference x.
Yeah?
>> AUDITORIJA: Vai atgriezties 0 lieku?
>> ROB: Vai returen 0 lieks?
Jā.
Mēs tikai nodot, ka tur, jo mums ir peļņu viens pēc gaisa.
Tātad, tas ir, piemēram, jā, ļauj ietver atgriešanās 0.
Yeah?
>> Mērķauditorija: [dzirdams]?
>> ROB: Tātad, pēc brīvām x, kas notiek, ja mēs cenšamies dereference rādītāja?
Tas ir iespējams, ka nekas noiet greizi.
Tas ir iespējams, ka mēs joprojām saņemsiet 50.
>> Tas ir iespējams, arī, ka atmiņa ir tagad tiek izmantots kaut kas cits.
Tātad, tas ir nenoteikts uzvedību.
Un undefined nozīmē neko var notikt.
Yeah?
>> Mērķauditorija: [dzirdams]?
>> ROB: Nē, tāpēc, ja jūs piešķirat x uz kaut ko citu.
Tātad, ja tepat mēs teicām x vienāds malloc kaut else--
malloc size event--
Pēc tam, ka sākotnējā bloks atmiņas netiek atbrīvots.
Un mēs esam oficiāli zaudējis.
Tas ir atmiņas noplūde.
Mēs esam zaudējuši visas atsauces šai bloka atmiņas.
Tātad tur nav veids, kā mēs nekad nevar atbrīvot to.
Labi, tā tad atgriezties 0 līdzekļus darīts.
>> Labi, tāpēc kaudze pārplūdes.
Kāda ir ideja šeit?
Līdz ar to atcerēties, kaudze ir iet uz leju.
Kaudze ir iet uz augšu.
Tātad tas bija piemērs no lekciju, Es domāju, kur galvenais ir tikai gatavojas
nosaukt šo funkciju foo, kas gatavojas lai izsauktu sevi rekursīvi vairāk un
atkal.
>> Tātad kaudze rāmji gatavojas strādā tieši tāds pats.
Tāpēc mēs esam gatavojas sākt ar galveno kā apakšējā kaudze rāmi.
Tad galvenais gatavojas aicināt foo, kas gatavojas saņemt kaudze rāmi.
>> Tad foo gatavojas zvanīt foo atkal, kas notiek, lai iegūtu
vēl kaudze rāmis.
Un tad atkal, un atkal, un atkal, un atkal, līdz, visbeidzot, mēs palaist
uz kaudzes.
Tātad, tas ir, kā mēs kaudze pārplūdes.
Un šajā brīdī, jūs SEG vaina.
Vai jūs tiešām seg vaina pirms šis punkts, bet jā.
>> AUDITORIJA: Vai core dump pats kā SEG vaina?
>> ROB: Tātad jūs redzēsiet segmentāciju vaina core dempinga cenām.
Jūs saņemsiet kodols izgāztuves, kad tas Jums SEG vaina.
Un tas ir kā izgāztuvē visu saturs jūsu pašreizējo atmiņas tik
ka jūs varat mēģināt un identificēt kāpēc jūs SEG pārmest.
Yeah?
>> Mērķauditorija: [dzirdams]?
>> ROB: Tātad segmentācija vaina līdzeklis tur ir kaudze pārplūdes.
Tāpēc ne vienmēr.
Segmentēšana vaina, nozīmē to, ka tu esi aizkustinošs atmiņa tādā veidā
Jums nevajadzētu būt.
Tātad viens no veidiem, ka tas notiks, ir tad, kad jūs kaudze pārpildes, sākam aizkustinošs
atmiņa tādā veidā, ka mums nevajadzētu būt.
Yeah?
>> Mērķauditorija: [dzirdams]?
>> ROB: Tātad iekšpusē bezgalīgu cilpu.
Tāpat kā, tas ir kā rekursīvo bezgalībā cilpu, un lai mēs iegūtu vēl
kaudze rāmis katru reizi.
Bet tikai iekšpusē regulāri bezgalīgs kamēr one--
labi, pieņemsim nav pat drukāt F--
kaut ko darīt.
Neatkarīgi.
>> Mēs nebrauksim, kļūst vēl kaudze rāmis.
Mēs esam tikai gatavojas glabāt looping pār šo vienu instrukciju.
Kaudze nepieaug.
Tas ir fakts, ka katrs rekursīvs zvans tiek dodot mums kaudze rāmi.
Tieši tāpēc mēs iegūtu kaudze pārplūdes.
Yeah?
>> AUDITORIJA: Tātad, ja jūs teicāt, lai iegūtu kamēr cilpa un tad [nedzirdama]?
>> ROB: Tātad, ja iekšpusē kamēr cilpa tur bija printf, jūs joprojām būtu
nav seg vaina.
Es tikai negribēju, lai maldinātu lietas.
Tas būtu cilpa.
Tu gribētu saņemt vienu kaudze rāmis par printf.
>> Tad printf varētu atgriezties.
Tad jūs gribētu cilpa vēlreiz.
Tu gribētu saņemt vienu kaudze rāmis par printf.
Tas varētu atgriezties.
Single kaudze rāmis.
Tātad jūs nesaņemat šo bezgalīgs krājas kaudze rāmji.
>> Mērķauditorija: [dzirdams]?
>> ROB: Jā.
Tātad šis kaudze pārplūdes notiek jo neviens no tiem
zvani uz foo atgriežas.
Tātad, ja mēs atgriežamies, tad mēs būtu sāk zaudēt kaudze rāmji.
Un tad mēs nebūtu kaudze pārpildes.
Un tas ir iemesls, kāpēc jums ir nepieciešams bāzes lietu jūsu personīgo funkcijām.
Yeah?
>> AUDITORIJA: Vai potenciāls lielums un kaudze par kaudzes pats par
visas programmas?
>> ROB: Aptuveni.
Ir potenciāls lielums kaudze un kaudze vienādi visām programmām?
Rupji.
Ir daži randomizācijas līdz kur kaudze sākas un
kur kaudze sākas.
Ja jums gadās būt visai daudz globālie mainīgie un lietas, jūs varētu
atņemt daži telpu Jūsu kaudzē.
>> Uz 64 bitu sistēmā, jūs praktiski ir bezgalīgs atmiņu.
Tur ir tikai tik daudz.
Starp 32 bitu un 64 bitu, ka ir būtiska atšķirība.
>> Jūs esat gatavojas iegūt visai daudz vairāk kaudze un kaudze vietas uz 64-bit
sistēma, jo tur ir tikai vairāk adreses, ka viņi var izmantot.
Bet uz individuālu sistēmu, tā būs ir aptuveni tikpat daudz kaudze
un kaudze telpu.
Viss labi.
>> Tātad pēdējā lieta ir apkopojums.
Tātad jums vajadzētu zināt šo procesu.
Ir četri lieli soļi.
Tātad pirmais vajadzētu būtu viegli atcerēties.
Pirmapstrāde.
Tā ir prefiksu pre tajā.
Tātad runa ir par pirms viss pārējais.
>> Lieta atcerēties ir hash.
Tik hash definē un hash ietver visos no tiem.
Tie ir visi iepriekš procesors direktīvām.
Tās ir lietas, ka pre-procesors rūpējas.
>> Tātad, ko tas iepriekš procesors darīt?
Tas ir patiešām mēms lieta.
Viss tas ir spējīgs, ir visi šie kopēt, un samazināt, un ielīmēt darbību.
>> Tātad hash ietver standarta i0 dot h.
Kas ir tas, ka dara?
Tas satveršanas standarta I0 dot h failu un ielīmējot to uz augšu
kur tā saka hash iekļauti Standarta i0 dot h.
>> Un jebkurš hash nosaka, ka mēs esam redzējis, kas ir tas, ka dara?
Tās kopēšana vērtību šo hash definēti tiek definēta kā un ielīmējot ka
kur jūs izmantojat vērtību.
Tik apstrādātāju tikai nav īsti vienkāršs teksta balstītas operācijas.
Tas nekas gudru.
Tātad, viss pārējais ir sarežģītāka.
>> Tāpēc tagad, ka apstrādātāju ir darīts, mēs faktiski sastādīt.
Tātad, ko apkopojot nozīmē?
Mēs tagad iet no c kodu līdz montāžas kodu.
Yeah?
>> Mērķauditorija: [dzirdams]?
>> ROB: Jā, mēs nozvejotas ka.
Tātad apkopojot.
Mēs ejam no c līdz montāžai.
Tātad tas ir faktiskais valodas maiņa.
Apkopojot sevi nozīmē iet no augstāka līmeņa valodu
zemāka līmeņa valoda.
>> Un c ir augsta līmeņa valoda salīdzinot ar montāžu.
Kas ir montāža?
Tās instrukcijas, kas ir, diezgan daudz, veikti jūsu CPU.
Bet jūsu dators joprojām nav nesaprot montāža.
Tas tikai saprot vieninieku un nuļļu.
Tātad nākamais solis ir montāža, kas mūs no šiem norādījumiem, ka
jūsu CPU saprot un faktiski pārveido tos, lai
tie, un nullītes.
>> Tātad C līdz montāžai uz bināro.
Bet man nav izpildāmā vēl.
Tāpēc domāju, ka no CS50 bibliotēkas.
Mēs esam jums ar bināro šis CS50 bibliotēka, kas ir GetString
un GetInt un viss kas.
>> Bet CS50 library--
in un itself-- nav izpildāms.
Tā nav galvenā funkcija.
Tas ir tikai ķekars bināro ka jūs varat izmantot.
Tātad, saistot ir, kā mēs savest kopā visi Šo dažādo bināro failu
uz faktisko izpildāmā.
Viens, ka jūs varat ierakstīt dot slash ir dot out.
>> Tātad tas ir kā failu, kas jums rakstīja, - neatkarīgi no jūsu programma is--
Ceaser dot c.
Bet tagad tas ir apkopota uz leju, lai bināro.
Tātad Ceaser dot o.
Un tas ir mūsu CS50 bibliotēkas bināro.
Un viņi tiek apvienoti vienā izpildāmā.
Yeah?
>> Mērķauditorija: [dzirdams]?
>> ROB: Tātad vispirms ietver, atcerieties, hash ietver faktiski
pre-procesors solis.
Bet tas ir atsevišķs.
Ja nelietojat nekādas funkcijas, kas ir ārpus jūsu vienā failā, tad,
nē, jums nav nepieciešams saistīt neko jo jums ir viss.
>> Ka teica, printf tiek saslēgti.
Ja jūs kādreiz izmantot printf, tas ir kaut kas kas ir jāsaista ar
jo jums nav rakstīt, ka.
Un, patiesībā, printf ir automātiski saslēgti.
Jūs zināt, kā pie komandrindas, vai tad, kad tu tipa veikt, jūs redzētu to ir
domuzīme l CS50, kam ir saikne ar CS50 bibliotēkā?
Printf, un sīkumi, piemēram, ka notiek jāsaista automātiski.
Jebkādi citi jautājumi, par kaut ko?
>> Mērķauditorija: [dzirdams]?
>> ROB: Saistošā?
Mums ir viss ķekars dažādas bināro failus.
Tas ir kanonisko piemērs ka mēs izmantojam, ir CS50 bibliotēka.
Mēs esam apkopojuši un Jums ar bināro šajā CS50 bibliotēkā.
>> Jūs vēlaties izmantot GetString savā programmā.
Tātad jūs iet un izmantot GetString.
Bet bez manas bināro kodu GetString, kad jūs sastādīt savu kodu
uz leju, jūs nevarat patiešām palaist savu programmu, jo GetString String ir
vēl nav pilnībā noteikts.
>> Tas ir tikai tad, kad jūs saite manā binārā kas satur GetString ka tagad visi
labi, es varu tiešām izpildīt GetString.
Mans fails ir pabeigta.
Un es varu palaist to.
Yeah?
>> AUDITORIJA: Vai sasaiste konvertēt binārā izpildāmā?
Tātad, pat tad, ja jums nav citas bibliotēkas, nebūtu tas joprojām būtu
nepieciešams tulkot [nedzirdama]?
>> ROB: Tātad izpildāmā joprojām ir bināro.
Tas ir tikai apvienojot vienu veselumu ķekars binaries.
>> AUDITORIJA: Paldies tik daudz.
>> ROB: Nekādu problēmu.
Jebkādi citi jautājumi?
Pretējā gadījumā mēs visi noteikti.
Viss labi.
Paldies.
>> [Aplausi]
>> AUDITORIJA: Paldies.
>> ROB: Jā.