>> Kryetari 1: Hi everyone.
Ne jemi duke shkuar për të marrë filluar.
Unë mendoj se njerëzit janë ende duke shkuar të jetë filtrim në.
Por në interes të kohës, kështu që ne mund merrni ju djema nga këtu në kohë,
ne jemi duke shkuar për të filluar.
Pra, të mirëpritur për të CS50 Quiz 0 shqyrtim.
Për ata prej jush që nuk e kanë realizuar megjithatë, ju keni një pyetje të mërkurën.
Woo-hoo.
>> Nëse ju nuk keni filluar duke studiuar ende ose nuk e kanë kuptuar se kjo ekziston ende,
kuize e kaluara dhe të gjitha informatat në lidhje me quiz tuaj janë në cs50.net/quizzes.
Ka disa gjëra mjaft të mirë atje, kuize fundit nga i fundit 10
vjeç si dhe informacion në lidhje me këtë quiz dhe tema të
që do të mbulohen.
Pra, le të ketë filluar.
>> Pra, ju djema mund të mbani mend, i pari Dita e klasës Davidit kishin ato llambat më.
Pra në thelb, çdo gjë që shkon në nën kapuç e një kompjuteri është
bëhet në binar.
Binary do të thotë ajo që tingëllon si, 0 dhe 1 i.
Ajo ka dy vlera që mund të përfaqësohet.
>> Pra, ashtu si në ditën e parë të seksionit Kur Davidi u kthye në një dritë
llambë të përfaqësuar në, ose 1, kompjuterin tonë kupton binar si 0 dhe
1-të, në ose jashtë.
Bazat e Binary.
Çdo vend është i përfaqësuar në bazë të dy.
Kështu që ju të shtoni 2 me 0 për të 1 deri në 2 të gjithë rrugën deri.
>> Për të llogaritur atë binar juaj është që të dhjetore, ju vetëm ndjekin këtë ekuacion
lloj gjë.
Nëse ju keni një 1 në asnjërin nga këto qytete, ju shumohen atë nga çfarëdo
bazojnë është në, të shtoni atë, dhe ju merrni decimal.
Pra, kjo është se si ju të mbështeteni në 5 në binar.
Ashtu si ajo që ne po bëjmë në rrëshqitje të fundit, kjo është se si ju do të
përfaqësojnë 1 deri 5.
>> Në mënyrë të ngjashme, ashtu si ju mund të shtoni dhe të zbres në decimal apo bazë të 10, ose
me të vërtetë ndonjë bazë, në mund të shtoni dhe zbres në binar.
Pikërisht ajo që ju do të presin, kur ju shtoni dy deri, në qoftë se ajo është e barabartë me më të madh
shumë se 1, keni kryer një 1, e bëjnë atë një 0, dhe të bëjë shtimin në këtë mënyrë, vetëm
si ju do të presin me i rregullt decimale apo ndonjë bazë tjetër.
Best.
>> Pra, si kam thënë më parë, çdo gjë që vazhdon nën kapuç e kompjuterit tonë
është bërë në 0 dhe 1, apo binar.
Deri sa nuk kemi të shprehur, për shembull, shkronja ose numra, ose karaktere?
Dhe Përgjigja për këtë është ASCII.
>> ASCII është një hartë në mes të karaktereve që ne normalisht do të shohim në
Gjuha angleze si A-së, B-së, C-së, theksojnë, dashes, dhe
diçka të tillë.
Dhe harta që për një vlerë ASCII.
Një vlerë ASCII është vetëm një numër që mund të kuptohet nga kompjuteri juaj.
Dhe ashtu si ju mund të bëni shtimin dhe zbritja me numrat, ju mund të bëni
ato me vlera ASCII.
>> Pra, në këtë shembull, çfarë do të këtë të shtypura nga?
Yeah, kështu që vetëm një hapësirë ​​B hapësirë ​​hapësirë ​​C D. Ku ka shkuar miu im?
Vini re se ju mund të përcaktojë një int në 65 vjeç.
Dhe kur keni shkruar se duke përdorur qind C, ajo do të interpretojë se si një
karakter dhe do të shtypura nga A.
>> Në mënyrë të ngjashme, ju mund të deklarojë ajo si një char.
Dhe kur ju të shtypura it out duke përdorur për qind C, ajo do të interpretojë se si
qind D. Dhe ashtu si ju mund të shtoni një numri, ju mund të shtoni karaktere janë
Vlera ASCII, në këtë rast.
>> Pra, një tregues pak për të gjithë.
5, si një varg, nuk vërtetë të barabartë 5.
Pra, si mund të kemi kthyer varg 5 tek integer 5?
Ndonjë ide?
Po.
>> Pra, nëse ne kemi me 5 si një varg, ne mund të zbres 0.
Dhe kjo do të na japë 5.
Dhe në mënyrë të ngjashme, në qoftë se ne kemi 5, si një numër i plotë, të shtoj se në vargun 0.
Dhe kjo na jep vargun 5.
Best.
>> Tani, kujtojnë përsëri për të leksion një ku kemi biseduar për algoritme.
Deri sa nuk kemi të vërtetë duan një kompjuter për të bërë gjëra interesante?
Ju e dini, vetëm duke shtuar dhe zbritur Numrat dhe shtypje gjërat jashtë nuk është
se emocionuese.
Zakonisht, ne duam kompjuterin tonë për kryejnë një lloj algorithm.
Diçka një kompleks pak më shumë se vetëm aritmetikë të thjeshtë.
>> Një algoritëm është vetëm një hap pas hapi set e udhëzimeve për mënyrën se si për të kryer
një task-- të caktuar
ashtu si një recetë.
Ju mund të mbani mend ditën e parë të klasë ku Davidi kishte na llogarisin një dhomë
e njerëzve dhe sa njerëz ishin në dhomë.
Ju mund të përdoret për të numërimit një nga një.
1, 2, 3, 4.
Në këtë rast, një algoritmi kohë lineare.
>> Por Davidi futur një algoritëm për ju për të numëruar njerëzit në dhomë
ku të gjithë qëndron lart, ju thoni tuaj numër të një personi tjetër, të shtoj se
Numri i lart, dhe një person i ulet.
Dhe ju përsëris se.
Kjo është një lloj algorithm.
Ne mund të analizojmë se si efikas an algorithm është i bazuar në atë të drejtuar kohë.
Por ne do të flasim pak më shumë për këtë më vonë.
>> Pra, të gjitha algoritme mund të të jetë e shkruar në pseudokod.
Pseudokod është vetëm një angleze si Sintaksa e përdorur për të përfaqësuar
një gjuhë programimi.
Për shembull, në qoftë se ne të kërkuar për të kërkuar një përdorues me mend numrin tim të preferuar, ne
mund të ketë pseudokod si të tillë.
>> Merrni një përdorues me mend.
Nëse guess është e saktë, tregoni atyre ata janë korrekt, tjetër tregoni atyre
ata nuk janë të sakta.
Dhe pseudokod është një mënyrë e lehtë përfaqësojnë një ide apo një algoritmi.
Deri tani ne mund të dëshironi të vërtetë shkruani kjo në gjuhën që kompjuteri
mund të kuptuarit.
Pra, ne mund të shkruani pseudokod tonë dhe interpretuar që në kodin burimor.
>> Deri më tani, kodi burim duhet t'u përmbahen në një sintaksë të caktuar të
një gjuhë programimi.
Dhe deri më tani, në CS50, ne kemi përdorur kryesisht c.
Pra, kjo mund të jetë kodi burim për c.
Më vonë në kurs, ju vijnë natën në kontakt me programimin e tjera
gjuhë si PHP.
Ose në qoftë se ju edhe të marrë klasat e tjera, të mund të bëni Java, Python, apo edhe OCML.
Por në gjuhën tonë programit c, kjo është se si ne mund të shkruani kodin burim për
algorithm pseudokod që Unë vetëm të përshkruar më parë.
>> Pra, si e bën kompjuterin tuaj të vërtetë kuptojnë se?
Ashtu si kam thënë më parë, të vetëm të vërtetë kupton zero dhe ato.
Pra, si e bën atë të marrë nga burimi Kodi për diçka që mund të jetë
kuptohet?
E pra, ne kemi diçka të quhet një përpilues.
>> Nëse ju kujtohet përsëri në shumicën e tuaj psets, keni pasur një lloj të programit
shkruar në një skedar dot c.
Dhe pastaj ju do të tipit make.
Pra, çfarë është duke bërë duke bërë?
>> Ju mund të shtypni make për të hartuar tuaj Programi sepse someone--
kushdo që shkroi vendosur tuaj p; ndoshta David--
krijuar një make file.
Dhe kjo tregon e bëjnë të dini për të drejtuar tuaj përpilues, i quajtur tingëllimë, që vullneti
pastaj përpilojnë kodin tuaj burim të kundërshtojë Kodi, e cila është zero dhe ato
që kompjuteri juaj kupton.
Por, pak më vonë, ne do të shkojmë më shumë në thellësi rreth hartuesit.
>> Pra kujtojnë pset 0, where-- po, ju keni një pyetje?
>> Audienca: [padëgjueshme]?
>> Kryetari 1: Po.
Unë mendoj se ata në të vërtetë duhet të jetë online.
Po.
>> Audienca: A është si [e padëgjueshme]?
>> Kryetari 1: Nuk është.
Janë në cs50.net/quizzes.
>> Audienca: kuize çaj, çaj 2013, çaj 0, dhe vetëm të klikoni përmes
kuize 2013 dhe quiz 0, të shqyrtojë slides seksion.
>> Kryetari 1: Po, kështu që nëse ju djema doni të tërheqë atë dhe të shikojnë atë në tuaj
kompjuter vet, që është në rregull shumë.
Thuaj se përsëri.
>> Audienca: [padëgjueshme].
>> Kryetari 1: Po, [e padëgjueshme] është variabël bedel.
Oh, po?
>> Audienca: [padëgjueshme]?
>> Kryetari 1: Jo, greva nuk janë në provim.
Na vjen keq, pyetja e saj ishte, ishte godet në provim.
Dhe kjo nuk është.
Pra pset 0, ju djema duhet të kenë të gjithë zbatohet diçka duke përdorur zeroja.
Dhe kemi mësuar disa programe themelore blloqe ndërtimi duke përdorur zeroja.
>> Pra, le të marrin një vështrim në disa nga këto blloqe ndërtimi
që përbëjnë një program.
Së pari është shprehje Boolean.
Shprehje Boolean janë ato dhe 0-së apo ndonjë gjë që ka
dy vlera të mundshme.
Në këtë rast, e vërtetë apo e rreme, në ose jashtë, dhe po ose jo.
Një shembull i thjeshtë, shumë e thjeshtë, program që përdor një Boolean
shprehje këtu.
>> Pra, në mënyrë për shprehje Boolean në të jetë e dobishme, ne kemi operatorët Boolean.
Këto janë operatorët që mund të përdoren për të krahasuar vlerat e caktuara.
Pra, ne kemi dhe ose jo të barabartë për të, më pak se ose e barabartë me e madhe se ose
barabartë, dhe më pak se ose më e madhe se.
Por këta operatorë nuk janë shumë të dobishme nëse nuk mund të kombinohen ato në
kushtet.
>> Pra, ju djema mund të mbani mend nga e para dhe nga p juaj vendos se ne
kishte kushte.
Ata janë, në thelb, si forks në logjika e programit tuaj që
ekzekuton varësi të faktit nëse një kusht është plotësuar.
Pra, një nga kushtet që kemi pasur përdorur shumë herë në këtë kurs është
në qoftë se, tjetër, në qoftë se, dhe kushtet tjetër.
>> Ja një shembull se si ju mund të përdorni që.
A ka dikush di dallimin në mes vetëm duke përdorur, nëse deklaratat e të gjitha
shumë më poshtë vargjeve nëse, tjetër, në qoftë se, dhe tjetër e kombinuar?
Po?
>> Audienca: [padëgjueshme].
>> Kryetari 1: Pikërisht.
Pra, nëse kam pasur rast të gjithë rrugën poshtë këtë mënyrë, edhe në qoftë se ky kusht kthimit
vërtetë, ajo do të vazhdojë të vazhdojnë testimin e dy të ardhshëm.
Ndërsa, me një tjetër-nëse, një tjetër Deklaratë, nëse e kthen vërtetë,
të tjerët nuk janë testuar.
Çdo pyetje në lidhje me se?
Best.
>> Pra, ju përdorni një nëse-tjetër e një tjetër deklaratë në qoftë se ju e dini se ajo vetëm mund të
të jetë një nga këto raste.
Pra, ne e dimë, nëse x është më pak se 0, kjo është definitivisht nuk do të jetë
madhe se 0.
>> Tjetra, një tjetër bllok ndërtimi se ne jemi mësuar sythe.
Ne kemi tri lloje të sythe.
Për sythe, ndërsa sythe, dhe të bëjë ndërsa sythe.
Dhe në përgjithësi, kur ti ulesh për të shkruani diçka, ju duhet të vendosni
e cila nga tre që dëshironi të përdorni.
Deri sa nuk kemi vendosë që një?
>> Ne zakonisht përdorim një për lak në qoftë se ne e dimë sa herë që ne duam të iterate
me diçka ose sa herë ne duam të kryer një detyrë.
Ne përdorim ndërsa sythe në qoftë se ne kemi nevojë për disa kusht që të jetë e vërtetë për të mbajtur running.
Dhe ne i përdorim të bërë, ndërsa shumë të ngjashme me ndërsa, por ne duam kodi ynë për të kandiduar në
paktën një herë.
>> Pra, bëni ndërsa, çdo gjë që është në të bërë vullnetin gjithmonë të drejtuar të paktën një herë.
Ndërsa, me kohë, atë nuk mund të kandidojë në të gjitha nëse
kusht nuk është i kënaqur.
Çfarëdo pyetjeje me se?
>> Pra, struktura e një për lak.
Ju djema keni parë të gjithë këtë.
Ju nisja atë.
Ju keni disa lloj gjendje.
Kështu, për shembull, ne mund të nisja si për i barabartë 0.
i është më pak se 10.
Dhe unë ++.
Një shumë të thjeshtë që ne kemi bërë.
>> Për një lak kohë, në mënyrë të ngjashme, ju keni që të ketë disa lloj inicializimit,
një lloj gjendje, dhe një lloj përditësimit.
Pra, ne mund të zbatojë tonë për lak edhe si një lak duke përdorur këtë.
Dhe në mënyrë të ngjashme me një të bërë, ndërsa loop, ne mund të kenë disa inicializimit,
ekzekutuar diçka, update it, dhe atëherë kontrolloni gjendjen.
>> Deri tani funksionon.
Ne kemi vënë çdo gjë së bashku.
Ne mund të dëshironi të shkruani disa lloj funksioni.
Funksioni zakonshme që ju mund të kanë parë tashmë është kryesore.
Kryesore është një funksion.
Ajo ka një lloj kthimi, int.
Ajo ka një emër funksion, kryesore.
Dhe ajo ka argumente, argc dhe argv.
Pra kryesor është vetëm një funksion.
>> Funksione të tjera që ju mund të keni përdorur, printf printf-- është një function--
GetInt, toupper.
Por këto të ndodhë që të ketë qenë zbatohet për ne nga
një lloj biblioteke.
Nëse ju djema mos harroni përfshirë kjo bibliotekë CS50.h ose
I standarde / O bibliotekë.
Po, pyetje?
>> Audienca: A është vetëm e natyrshme në c kryesore?
A ajo vetëm lloj [e padëgjueshme]?
>> Kryetari 1: Pyetja është në qoftë se kryesore është e natyrshme në c.
Dhe po, të gjitha funksionet kanë një funksion kryesor.
Kjo është lloj i nevojshëm për kompjuter të dinë se ku të fillojë
drejtimin kodin.
>> Audienca: Pra, ju nuk do të [padëgjueshme]?
>> Kryetari 1: Nr
Çdo pyetje të tjera?
Best.
Pra, ashtu si ju mund të përdorni një funksion që është shkruar për ju, ju mund të
shkruani funksionin tuaj.
Ky është një funksion që dikush mund kanë shkruar për të llogaritur vëllimin
i Q, per shembull.
Ka një lloj kthimi këtu, në këtë rast int, tonë q emri funksion dhe tonë
lista e parametrave.
>> Dhe vini re që ju duhet të shkruani të dhënat lloj parametri që dëshironi të
përdorë ose tjetër funksion nuk ka e di se çfarë lloj
Parametri duhet të jenë të pranuar.
Pra, në këtë rast, ne duam një numër të plotë si input tonë.
Pra, pse mund të duam të përdorni funksionet?
>> Para së gjithash, e madhe për organizatën.
Ato ndihmojnë për të prishur kodin tuaj në chunks më të organizuar dhe të bëjë
më të lehtë për të lexuar.
Thjeshtimi.
Kjo është e mirë për dizajn.
Kur ju jeni duke lexuar një pjesë të kodit dhe funksioni kryesor është me të vërtetë,
me të vërtetë e gjatë, mund të jetë e vështirë për të Arsyeja për atë që po ndodh.
Pra, nëse ju thyejnë atë në funksione, ajo mund të jetë më e lehtë për të lexuar.
Dhe ripërdorimin-aftësinë.
Nëse ju keni një pjesë të kodit që është duke u quajtur ose drejtuar shumë herë,
në vend të rishkrimin se kodi 10 herë në funksion tuaj kryesor, ju mund të
doni të ripërdorimin atë.
Dhe pastaj çdo herë që duhet të përdorni që pjesë të kodit, të thirrur funksionin.
>> Deri tani në qoftë se ne kujtojmë përsëri në para, ne gjithashtu biseduar për disa koncepteve,
një nga të cilat është e filetim.
Thread është koncepti i shumëfishtë sekuenca e kodit
ekzekutimin në të njëjtën kohë.
Pra, mendoj se përsëri në një ditë ku Davidi kishte ju djema numërimin off të numrit të
njerëz në dhomë.
>> Në thelb, ajo që po ndodhte në është e gjitha e ju djema ishin
drejtimin temat e veçanta.
Dhe ato temat vinin së bashku për të marrë disa lloj përgjigje.
Në mënyrë të ngjashme, në Scratch, kur ju keni sprites të shumta, ju mund të
kanë një mace dhe një qen.
Dhe ata do të jenë në të njëjtën kohë drejtimin Scripts tyre.
Kjo është një shembull i fillesë.
>> Dhe koncepti tjetër që ishte futur në zeroja ishte ngjarje.
Dhe ngjarje janë pjesë kur të shumta e kodi juaj komunikuar me njëri tjetrin.
Në Scratch, kjo ishte kur ju të përdorur kontrollit të transmetimit dhe Kur unë
Merre blloqe.
>> Dhe gjithashtu, në Problem Set 4, pamë pak e ngjarjeve si.
Ju djema mund të ketë përdorur biblioteka Gevent.
Dhe aty ishte një funksion waitForClick në të cilën ju jeni duke pritur
për përdoruesit për të klikoni.
Dhe klikoni tuaj, në këtë rast, do të ishte e ngjarje dhe të presin për klikim është e juaj
Mbajtësi i ngjarjeve.
>> Dhe gjithashtu, të gjithë duke psets tuaj dhe duke punuar në psets tuaj, ju
mund të vijnë në kontakt me disa prej këtyre komandave.
Kjo është ajo që ju shtypur në tuaj dritare terminali ose çfarëdo dritare
që tregon deri në g edit tuaj në, në thelb, të lundruar kompjuterin tuaj.
>> Kështu për shembull, LS listat Përmbajtja e një directory.
Bëni directory krijon një dosje të re.
CD, directory ndryshim.
RM, hiqni, fshin një fotografi ose disa directory.
Dhe pastaj hiqni directory heq një directory.
>> Audienca: [padëgjueshme]?
>> Kryetari 1: Po, sigurisht.
Na vjen keq, pyetja ishte nëse ju do të sugjeroja vënë këtë
në mashtrojnë fletë.
Kjo mund të ndihmojë.
Nëse ju keni hapësirë, ju mund të vënë atë në.
Është gjithashtu vetëm në përgjithësi të mirë sa duhet për të kujtuar, sepse kur ju përdorni atë
ju mund të dëshironi të vetëm të kanë atë përmendësh.
Kjo do të bëjë jetën tuaj shumë më të lehtë.
A e kam të përgjigjem pyetjes tuaj?
>> Deri tani, kemi biseduar pak shkurtimisht për bibliotekat.
Por të dy ato kryesore që ne kemi qenë përdorur deri më tani gjatë janë
I standarde / O dhe CS50.
Çfarë lloj gjëra janë të përfshira në standarde I / O bibliotekë?
>> Po, deri tani ne kemi përdorur printf.
Në CS50, ne kemi përdorur GetInt dhe GetString.
Dhe llojin e të dhënave string ndodh edhe që të deklarohet në këtë bibliotekë CS50.
Ne do të flasim pak më shumë në thellësi rreth se si bibliotekat punojnë dhe se si ata
ndërveprojnë me pjesën tjetër të kodit tuaj.
Por ata janë dy të kryesore që ne kanë ardhur në kontakt me të deri më tani në
kurs.
>> Llojet.
Këto janë të mira për të kujtuar se sa çdo lloj përfaqësohet nga ose si
shumë bytes secili e tipit requires--
int, 4 bytes; char, 1 bajt.
Float është 4 bytes.
Çfarë është një të dyfishtë?
>> Audienca: [padëgjueshme].
>> Kryetari 1: Po, kështu një noton por dyfishojë madhësinë.
Po në lidhje me një kohë të gjatë?
>> Audienca: [padëgjueshme].
>> Kryetari 1: OK.
Çfarë është një kohë të gjatë?
>> Audienca: [padëgjueshme].
>> Kryetari 1: Po, të dyfishtë një int.
Po.
>> Audienca: [padëgjueshme].
>> Kryetari 1: gjatë [padëgjueshme].
Dhe pastaj një kohë të gjatë është e dyfishtë që.
>> Audienca: Jo, jo.
Një kohë të gjatë është vetëm një int.
Kjo varet nga arkitekturës para [padëgjueshme]
dhe int kanë të njëjtën madhësi.
[E padëgjueshme].
>> Kryetari 1: Pra, një kohë të gjatë dhe një int janë njëjtë.
Dhe pastaj një kohë të gjatë është dyfishi i int.
Best.
Dhe pastaj, çfarë është lloji i fundit?
>> Audienca: Pointer.
>> Kryetari 1: Po, kështu kemi mësuar pak për pointers.
Dhe pa marrë parasysh se çfarë është një akrep është duke treguar to-- saj mund të jetë një yll char
ose një int star--
është gjithmonë 4 bytes për një akrep.
Pyetjet rreth se?
Po?
>> Audienca: [padëgjueshme]?
>> Kryetari 1: Pra, një kohë të gjatë dhe një int janë e njëjtë në këtë aplikim CS50.
>> Audienca: Pajisja janë krejtësisht të këmbyeshëm.
>> Kryetari 1: Po.
Pra pastaj një kohë të gjatë është e dyfishtë një int.
>> Audienca: Ky është 32 bit?
>> Kryetari 1: 32 bit, po.
>> Audienca: Pra [padëgjueshme]?
>> Kryetari 1: Po, në qoftë se ajo nuk ka shprehimisht thonë, ju
duhet të marrë një 32 bit.
>> Audienca: Kjo do të thotë diçka si duke marrë një
Arkitektura si aplikim.
Për 64 bit, të vetmet gjëra që ndryshimi janë longs dhe pointers.
Ata të dy [e padëgjueshme].
>> Kryetari 1: Po?
>> Audienca: Pyetje.
Pra, në një nga kuize praktike, ajo pyet për një int panënshkruar.
Pra, si do që të përcaktohet nga një int [padëgjueshme]?
>> Kryetari 1: Një panënshkruar në është edhe 4 bytes.
Por ajo që është e ndryshme për një nënshkruar int dhe një int panënshkruar?
>> Audienca: [padëgjueshme].
>> Kryetari 1: E drejta.
Dikush mund të përfaqësojnë vlera negative.
Por si e bën atë të bëjë këtë?
>> Audienca: [padëgjueshme].
>> Kryetari 1: Po, ai kursen 1 bit për të përfaqësuar shenjë.
E nënshkruar ka një grimë se përfaqëson shenjën.
Dhe unsigned vetëm është e gjitha pozitive.
>> Audienca: OK.
Pra, ju thoni se a është e dyfishtë dy herë madhësinë e një noton?
>> Kryetari 1: Dopjo është dy herë madhësinë e një noton, po.
>> Audienca: Si një akrep për një kohë të gjatë të gjatë [padëgjueshme]?
>> Kryetari 1: Pra, pyetja është se si e bën tregues për një long-- të gjatë
se si është se vetëm katër bytes kur një kohë të gjatë 8 bytes saj.
Pra, mbani mend se çfarë është një tregues, thelb, në vlerën shumë bazë.
>> Audienca: [padëgjueshme].
>> Kryetari 1: Po, kështu një akrep është vetëm një vend kujtim.
Pra, kjo nuk ka rëndësi se sa shumë hapësirë se tregues është duke treguar për të.
Ajo ka nevojë vetëm 4 bytes për të mbajtur nën e atë vend kujtesës.
Çdo pyetje të tjera?
Best.
>> Pra, gjëja e fundit që unë kam është prodhimi standarde.
Ju duhet të përdorin ato shpesh mjaftueshme që ju mund të mbani mend.
Por kjo është kur ne përdorim printf, për shembull.
Dhe ne kemi këto placeholders që quheshin kodet format.
>> Pra qind c char, për qind i për int, dhe ne mund të përdorë gjithashtu edhe për qind d.
Është e njëjta gjë.
Por, në përgjithësi, në CS50 ne të përpiqen të përdorin për qind i.
Përqindja f për noton.
Ld qind për kohë të gjatë dhe qind s për varg.
>> Në mënyrë të ngjashme, ne kemi qenë duke përdorur disa nga këto sekuenca ikjes.
Për shembull, backslash n për linjë të re.
Kjo është vetëm për të, kur ju jeni formatimit kodin tuaj për të shtypura f.
Po?
>> Audienca: Çfarë është qind për d?
>> Kryetari 1: Pra pyetja është ajo që është qind për d?
Përqindja d është për ints.
Përqind d dhe përqind i janë njëjtë.
>> Audienca: Çfarë është dallimi në mes backslash n dhe r backslash?
>> Kryetari 1: Pra, pyetja është çfarë është Dallimi në mes reagim të ashpër n dhe
r reagim?
Unë mendoj se r backslash is--
>> Audienca: Pra r backslash vetëm nënkupton kthehet në fillim të linjës
pa të vërtetë duke shkuar në një linjë të re.
Pra, nëse keni shkruar një r backslash dhe ju të kthehemi në fillim të linjës
atëherë keni shkruar shumë gjëra, ju prishësh sende që është tashmë në
[E padëgjueshme].
Ndërsa, n fakt shkon për një të ri line dhe shkon për [padëgjueshme].
>> Kryetari 1: E pra, ndonjë pyetje të tjera?
Të gjithë të drejtë.
Unë jam duke shkuar për të dorëzuar atë në Dan i cili do të vazhdojë.
>> [Duartrokitje]
>> DAN: Të gjitha Righty.
Kështu që unë do të flasim për një tjetër të gjerë varg i ideve nga klasa që janë
afërsisht përfaqësues i jave dy dhe Fillimi i javës tre duke filluar nga jashtë
me hedh, e cila është vetëm një mënyrë për të trajtimin e një vlerë të një lloji të caktuar si
një vlerë e një lloji të ndryshëm.
Pra, ne mund ta bëjmë këtë me karaktere të Ints, gjithandej në ints, dhe
longs gjatë të dyfishtë.
>> Të gjitha këto gjëra mund të përdoret si mënyra e trajtimit të disa vlera numerike
char minus si disa të tjera vlera numerike.
Pra, ka disa çështje me këtë, i Sigurisht, e cila vjen kur ju hedhin
gjëra të tilla si noton në ints.
Pra, kjo është pak i çuditshëm.
Ne kemi një noton që është 1.31.
Ne shumohen atë nga 10.000.
Dhe atëherë ne print it si një int.
Çfarë e bën këtë output?
10.000 herë 1.31.
Pra 13,000, është që të mend?
>> Audienca: Unë mendoj se është 10,000.
>> DAN: Kështu që unë jam duke e shumëzuar atë me 10,000 para se unë jam hedh atë.
>> Audienca: Oh.
A nuk do të ketë një të tillë 9 dhe disa 0 numra?
>> DAN: Ju mund të keni disa shifra të pazakontë.
Në mënyrë të drejtë, që është 1.3 herë më 10.000.
Pra, kjo është 13.000.
Dhe kjo weird-- shtesë
>> Audienca: 13,100.
>> DAN: 13,100.
Faleminderit, Rob.
Dhe kjo weirdness-- shtesë
kjo 9,9--
është thjesht për shkak se këtë hedh përfundoi arrestimi poshtë ku
ajo nuk duhet të ketë.
Po.
>> Audienca: hedh ndodh pasi çdo gjë tjetër?
>> DAN: Pra, sepse unë kam këtë në shtyp, ajo e bën këtë shumëzimin para saj
e bën këtë hedh.
>> Audienca: [padëgjueshme].
>> DAN: Unë mendoj se do të hidhet së pari, vërtet, e cila do të jetë 10,000.
Çdo gjë tjetër?
Best.
Pra, kjo është 13.099.
Pse ndodh kjo?
Pasaktësi.
>> Gjithandej nuk janë të përsosur.
Ato mund të përfaqësojnë vetëm numrat për një numër i caktuar i figurave të rëndësishme.
Pra, në qoftë se ne të shtypura nga 8 fiq sig mbi ky noton, kemi një lloj
shëmtuar Numri kërkim.
Dhe kjo është për shkak se 1.31 nuk mund të saktë të përfaqësohet nga të thjeshtë
kompetencat e dy në makinë.
Pra, ajo përfundon duke marrë më afër me mend, e cila përfundon
duke qenë pak të ulët.
Kuptim?
OK.
>> Tani, kaloi janë një mënyrë të ndryshme të duke bërë deklarata të kushtëzuar, ku të gjitha
ne lidhje me kujdes është një variabël të vetme.
Pra, në këtë shembull të veçantë, ne jemi marrjen e një tërësi nga ana e përdoruesit.
Dhe atëherë ne jemi duke kërkuar në ajo që është numër i plotë.
Me sa duket, kjo është numër një deri në katër.
Kjo është ajo që ne jemi duke kërkuar për.
>> Kështu që ju të bëni një të kaluar të emrin e ndryshueshme.
Pastaj ju ngritur raste të jetë e mundur vlerat ajo mund të jetë.
Pra një rast, thonë se është e ulët.
Dhe pastaj ju të thyer për të marrë nga të kaloni gjendjen kështu
ju nuk do të mbajë.
>> Në case-- ardhshëm
kështu rast dy dhe rasti three--
në qoftë se është rasti dy vetëm ajo bie poshtë për të vija e parë e kodit që e sheh si me
rast tre deri sa sheh një pushim.
Pra, arsyeja që ju të merrni një rast të vetëm të shtypura të ulët është për shkak se unë
kanë këtë pushim këtu.
Nëse unë, të themi, injoruar këtë break-- në qoftë se unë e hodhi këtë breakaway--
ajo do të shtypura të ulët, dhe pastaj ajo do të shtypura mes, dhe pastaj ajo do të thyejnë.
>> Pra pushimet janë një pjesë e rëndësishme i kaloni kushteve dhe
ata duhet të jenë aty.
Çdo raste që nuk janë deklaruar në mënyrë të qartë trajtohen nga default
Rasti në kaloni dhe duhet të hidhet.
>> Audienca: OS 1, 2, 3, dhe 4 do të ishte n?
>> DAN: Vlerat që n mund të jetë.
Po.
Po?
>> Audienca: Pra, kur ju keni që [e padëgjueshme]?
>> DAN: Ju do të shtypura të ulët, dhe pastaj ajo do të shtypura mesme, dhe
atëherë ajo do të thyejnë.
>> Audienca: Pse do të shtypura mesme në qoftë se [e padëgjueshme]?
>> DAN: Pra, çdo gjë nën një rast para një pushim bie nën.
Pra, çështja e shkruar është rast nën një si është kjo shtypura në vijim.
Po?
>> Audienca: [padëgjueshme]?
>> DAN: Pra, ky numër është vetëm një të veçantë vlera që ky variabël
mund të marrë, apo jo?
Ka që e bëjnë kuptim?
Po.
>> Audienca: [padëgjueshme]?
>> DAN: Po, rasti i dy do të shtypura e mesme dhe pastaj pushim.
>> Audienca: [padëgjueshme]?
>> DAN: Unë mendoj se çdo?
Çfarë lloje të tjera të të dhënave mund të kaloni mbi?
>> Audienca: Ju mund të kaloni mbi çdo lloje të të dhënave.
Por kjo vetëm do të thotë asgjë mbi karaktere dhe Ints dhe stuff like that, sepse
në qoftë se ju jeni switching mbi një akrep që nuk ka të vërtetë të bëjë kuptim,
switching mbi ngarkesat, qoftë ajo edhe le të ju bëni që, për shkak të pikës lundrues
në saktësi, ju nuk do të vërtetë doni të bëni që gjithsesi.
Pra, shumë e shumë, vetëm Ints dhe Shenjë dhe stuff like that.
>> DAN: Po, kjo është kur ju keni të qartë vlerat që ju e dini, unë mendoj, mund të jetë
se një switch është në të vërtetë të dobishme.
Mirë?
OK.
>> Fusha është varg që një deklaruar ndryshueshme shtrihet.
Pra, në këtë copë të vogël të kodit që kam, do të ishte plot me gabime.
Dhe arsyeja është që unë shpallur këtë int Unë në kuadër të kësaj për lak.
Dhe atëherë unë jam duke u përpjekur për të referencës që i jashtë që për qëllimin loop.
>> Pra, në thelb, ju mund të mendoni për qëllimin si çdo gjë që ju të deklarojë
me brenda një sërë formatimin e teksteve kaçurrel vetëm ekziston brenda këtyre formatimin e teksteve kaçurrel.
Dhe në qoftë se ju provoni dhe të përdorin këtë variabël jashtë këtyre formatimin e teksteve kaçurrel, ju do të
merrni një gabim nga përpiluesit.
Po?
>> Audienca: Pra kjo nuk punon?
>> DAN: Kjo nuk funksionon, po.
Vargjet.
String një char *.
Ata janë të njëjtë.
Ata janë vetëm pointers në karaktere.
Dhe çdo vargjet që keni duhet të përfundojë me backslash zero, që është vetëm
një konventë c.
>> Ajo quhet terminator NULL.
Dhe NULL--
Kapitali N, kryeqyteti U, kapitali L, kapitali L--
nuk është e njëjtë si Terminator NULL.
Kjo është një akrep.
Kjo është një karakter.
Ata janë shumë të dallueshme.
Mos harroni atë.
Ajo do të jetë në quiz, ndoshta.
Unë nuk kam parë quiz.
Po?
>> Audienca: Pra NULL është, të themi, akrep?
>> DAN: Po.
>> Audienca: Çfarë e bën [padëgjueshme]?
>> DAN: Në qoftë se, të themi, malloc quhet kur ju nuk kanë kujtesë të mjaftueshme për të marrë
çfarëdo madhësi që ju jeni duke kërkuar për, malloc do të kthehet NULL.
Është, në thelb, sa herë që një funksion është duhet të kthehen një tregues, ju
duhet të kontrolloni kundër NULL sepse NULL është një good-- mjaft
kjo është, lloj, vlera e mbeturinave.
Kjo është një zero sa i përket pointers shkojnë.
>> Sa herë që ju e quani një funksion, që jep një akrep.
Ju jeni do të dëshironi të kontrolloni të jetë i sigurt se se akrep nuk është NULL
sepse NULL është shumë e zakonshme.
Kjo është lloj i një kthim të mbeturinave.
Pra, nëse diçka nuk ka shkuar drejtë, vetëm kthimi NULL në vend.
>> Audienca: [padëgjueshme]?
>> DAN: Po, dhe kjo është kjo.
>> Audienca: [padëgjueshme]?
>> DAN: Spell atë si kjo.
Është terminator NULL.
Është e vogle N-U-L-L nëse ju jeni që shpreh atë.
>> Audienca: Dhe unë shkova vetëm mbrapa dhe testuar atë.
Dhe në qoftë se ju të përpiqen për të vënë një pikë lundrues vlera në një switch, ajo do të çirrem në ju
duke thënë, deklarata kërkon shprehje e tipit integer.
>> DAN: Nuk ju shkoni.
Por vërtet, çfarë ishte pyetja përsëri?
>> Audienca: [padëgjueshme]?
>> DAN: Pra kapitali N, kryeqyteti U, kapitali L, kryeqyteti L është një c gjë aktuale.
Kjo është tregues NULL dhe do vetëm të trajtohet si i tillë.
Ju kurrë nuk do të përpiqet dhe të shpalosë Karakteri NULL dhe të shohin ndonjë
mënyrë tjetër se sa kjo.
Po?
>> Audienca: Pra, të kthehej në char max ose diçka në shënimet shpjeguese, do ajo
mishërojnë të njëjtin funksion si [e padëgjueshme]?
>> Audienca: Pra, jeni duke iu referuar kthyer max char nga getchar, ose
çfarëdo qoftë ajo?
>> Audienca: Po.
>> Audienca: Po, në mënyrë të përgjithshme Termi për të gjitha ato gjëra
janë kujdestare vlerat.
Pra si u kthyer max int nga GetInt dhe max char nga getchar, është e
menduar të jetë si, të gjithë të drejtë, në qoftë se këto gjëra janë duke u kthyer për ne,
diçka shkoi keq.
>> Për pointers, ne vetëm të ndodhë që të ketë kjo vlerë rojtar që të gjithë
pajtohet me.
Dhe kjo është gjë që ju të kthehet kur gjërat shkojnë keq.
Pra max char është ajo që ne jemi duke përdorur për të përfaqësuar diçka
si NULL ose getchar.
>> Audienca: Pra, nëse ju jeni të testimit getchar, mund të ju vetëm vënë NULL?
A do që të bëjë një ndryshim?
>> DAN: Ju nuk mund vetëm të shikoni NULL.
Ju do të duhet të kontrolloni max char, sepse Vlera e kthyer nga funksioni është
a nuk karakter një akrep.
Po?
>> Audienca: Kjo pyetje kërkon për gjatësinë e fijes.
A do të përfshijnë karakterin NULL?
>> DAN: Nr
Dhe kjo është në fakt se si Gjatësia string di për të ndaluar për shkak se ajo shkon përmes
array juaj e karaktereve deri ajo sheh një karakter NULL.
Dhe atëherë kjo është si, të gjithë e drejtë, unë jam duke bërë.
>> Audienca: [padëgjueshme] pesë?
>> DAN: Përshëndetje do të ishte pesë.
Po.
Pra vargjeve janë të vazhdueshme blloqe të memories.
Ata kanë qasje të menjëhershme duke thënë emrin e grup dhe më pas, në kaçurrel
formatimin e teksteve, çfarëdo indeksi ju doni të shkoni për të, ata janë të indeksuar nga zero deri
gjatësia e vektorit minus 1.
>> Dhe ata janë deklaruar nga lloji i gjë që ju jeni ruajtjen në
grup, emri i vektorit, dhe pastaj pavarësisht nga madhësia është i atij array.
Pra, kjo është një grup char e gjatësisë gjashtë që ka këto vlera.
Po?
>> Audienca: [padëgjueshme]?
>> DAN: Po.
>> Audienca: [padëgjueshme]?
>> DAN: Në qoftë se ju keni atë që po ndodh në array bërë tashmë.
Kështu që ju mund të specifikoni këtë vend si, të themi, char, çfarëdo emri i juaj
array është, kllapa bosh barabartë kaçurrel shtrëngoj H presje E presje L L presje presje
O presje karakter NULL dhe mbajtëse kaçurrel.
Kjo do të punojnë edhe si një deklaratë.
>> Audienca: [padëgjueshme]?
>> DAN: Pastaj ju duhet të keni madhësia bërë tashmë.
>> Audienca: [padëgjueshme]?
>> DAN: Po.
Të gjitha Righty.
Argumente command line janë një mënyrë e duke marrë të dhëna nga përdoruesit si
Argumentet për kryesor.
Main merr dy argumente.
Numri i argumenteve që është duke u kalonte vija e komandës dhe një
vektor string ose një koleksion varg e të gjitha argumenteve.
>> Pra, nëse unë, të themi, i quajtur një funksion të tillë si a dot nga 1 hapësirë, 2 hapësirë, tre,
argc do të jetë 4.
Dhe argv 0 do të jetë një dot jashtë.
Argv1 do të jetë 1.
argv2 do të jetë 2. argv3 do të ishte e 3, në këtë rast të veçantë.
Po?
>> Audienca: [padëgjueshme]?
>> DAN: Elementi i fundit në grup sepse array është gjatësia argc plus
një nga argb, element fundit është tregues NULL.
Është argc plus 1.
Pra, në rast se unë vetëm tha, atë do të argv 0 është një dot jashtë.
argv 1 është 1 argv2 eshte 2. argv 3 është 3.
argv 4, e cila eshte e madhe se argc do të jetë NULL.
>> Dhe kjo është tregues NULL.
Po.
Dhe kjo është për shkak se vargu është një yll char është një akrep.
Pra, ajo duhet të jetë e njëjtë lloji.
Po?
>> Audienca: Dy pyetje.
Pra, një, çfarë është dallimi në mes kjo dhe GetString tjetër se një lloj
në motor përdorues?
Dhe dy, është ajo ruhet brenda kujtesa juaj i fundit?
Pra si, GetString do të jetë [e padëgjueshme]?
>> DAN: Ku është ajo e ruajtur?
Unë nuk e di ku është e ruajtur.
>> Audienca: Pra, në të vërtetë, ju e dini se si çdo funksionojë ju telefononi është e argumente
janë ruajtur në rafte?
Pra argc dhe argv janë argumente për të kryesore dhe ata janë në rafte, apo me të vërtetë
vetëm mbi atë që ju mendoni si fillimi i rafte.
Cila ishte pjesa tjetër e pyetjes?
>> Audienca: Pra, çfarë është [e padëgjueshme]?
>> DAN: Po, kjo është vetëm një mënyrë të ndryshme për të marrë të dhëna nga përdoruesit.
Pak më të efektshme dhe kjo e kjo është handier për Scripts sepse ju
vetëm mund të kalojë argumente për kryesor tuaj Funksioni në vend që të presin
për përdoruesit në qoftë se ju nuk keni ndonjë përdorues.
>> Audienca: Dhe vërtet, merrni vargjet do të jetë [e padëgjueshme].
Ajo do të ruajë gjëra që ju nevojitet.
>> DAN: Po?
>> Audienca: [padëgjueshme]?
>> DAN: Po, argv 0 gjithmonë përfshin dot çaj i thirrjes së funksionit.
Po?
>> Audienca: [padëgjueshme]?
>> DAN: Po, secili prej argumenteve janë përfundoi në karakter NULL sepse ata
janë vargjet.
>> Audienca: [padëgjueshme]?
>> DAN: Po, argv argc është një tregues NULL.
>> Audienca: [padëgjueshme]?
>> DAN: Oh yeah.
Po, keq.
>> Audienca: Pra [padëgjueshme]?
>> DAN: Pra, pyetja është nëse keni pasur command line dot çaj një pikë nga 1, 2,
do numrin e linjës së komandës Argumentet të jetë dy apo do të ishte tre?
>> Audienca: Unë mendoj se nuk ka me të vërtetë rëndësi.
Unë priren për të thënë, oh, ju nuk ka kaluar çdo komandë argumentet linjë kur,
natyrisht, ju quajti funksionin.
Kështu që unë priren të me zë të përjashtuar funksioni nga vija e komandës
argumente edhe pse kjo është përfshira në argv.
>> DAN: Por në qoftë se ajo ishte në test--
yeah-- dhe gjithashtu në qoftë se ju thonë diçka si argc barabartë 3,
ju jeni në gjendje të sigurt.
Po?
>> Audienca: [padëgjueshme]?
>> DAN: Unë mendoj se në qoftë se në vend të duke e quajtur këtë në argc dhe string kllapa argv
por mbajti të njëjtat lloje dhe të vetëm të quajtur ata diçka të ndryshme si një
dhe b, do të ishte ende punë?
Dhe kjo do të punojë ende, ju do just--
në vend të përdorimit argc-- ju do të përdorë dhe b.
Po?
>> Audienca: [padëgjueshme]?
>> DAN: Pra, pyetja është GetString është duke shkuar për të ruajtur kujtesën në tog
sepse GetString është char *.
Ajo ruan kujtesën në grumbull, sepse ajo e quan tani malloc brenda aktual
Zbatimi i GetString.
OK, të lëvizin.
>> Sigurimit.
Pra, që të jetë me të vërtetë i sigurt, ju mbështeten në asnjë një dhe ju lejojnë asnjë një qasje në ndonjë
e informacionit tuaj, e cila është arsyeja pse gjithë ndërton makinat e tyre,
sistemet e tyre operative, të gjithë e tyre Programet nga zeroja, dhe padyshim
mos lidheni me çdo makina të tjera nepermjet internetit.
Pra kompjuterat janë të pasigurt.
Ata me të vërtetë janë.
Ne duhet të besojnë njerëz të tjerë.
>> Dhe ideja e sigurisë është se ju jeni duke u përpjekur për të kufizuar sasinë e
besim që ju duhet.
Dhe një nga mjetet që ju bëni që është me anë të kriptografisë.
Cryptography është, në thelb, ne kemi sekrete.
>> Ndonjëherë ne duhet të kalojë sekretet tona së bashku me, të themi, internet ose
gjëra të tjera.
Dhe ne nuk duam njerëzit të dini këto sekrete.
Pra, ne encrypt sekretet tona në një mënyrë të që ne shpresojmë askush nuk mund ta kuptoj.
>> Pra, ne used--
përmes rrjedhës së këtij class--
gjëra të tilla si Cezarit shifër dhe [Padëgjueshme], të cilat janë të dy shumë, shumë
mënyra e pasigurtë të encrypting gjëra.
Ata janë të lehtë për të kuptoj se çfarë ata janë dhe çfarë sekretet tuaja.
Bota reale përdor shumë më tepër Skemat e komplikuara encryption.
Dhe ne nuk do të marrë në shumë më tepër se kaq.
>> Debugging.
Gdb është më e mira.
Unë jam duke shkuar për të theksuar këtë përsëri.
Përdorni Gdb gjithë kohës çdo herë ju keni një problem.
Komandat që janë të dobishme në Gdb janë të thyer, të cilat ju të kalojë ose një linjë të
numrin, një emër funksion, në thelb ku në kodin tuaj që ju dëshironi për të ndaluar,
dhe të jetë në gjendje për të marrë kontrollin.
>> Printo merr një ndryshore dhe printime nga çdo gjë që është e ndryshueshme në se
pikë në ekzekutimin tuaj.
Next lëviz ekzekutimin tuaj së bashku një hap.
Dhe hap hapa brenda një funksion në ekzekutimin tuaj.
>> Gjëra të tjera janë drejtuar, e cila është se si në të vërtetë ju drejtuar kodin tuaj.
Vazhdo merr të gjitha hapat e nevojshme për të shkuar në pikën tjetër pushim.
Dhe ka shumë, shumë të tjerë.
Shikoni ato.
Ata janë të mëdha.
Po?
>> Audienca: [padëgjueshme]?
>> DAN: Po, e cila është një Rregullues.
Pra, një Rregullues është një program që ju lejon të korrigjoj programin tuaj.
Kjo nuk është një program që gjen mete për ju, edhe pse që do të jetë i madh.
>> Dhe e fundit për mua është të kërkoni.
Pra, llojet e kërkimit që kemi biseduar lidhje në këtë klasë janë search lineare,
e cila është vetëm që ju të shikoni me çdo element i hapësirës kërkimit, e
element në një kohë, deri sa ju të gjeni çfarë ju jeni duke kërkuar për të, ose deri sa të arrijë
në fund të hapësirës tuaj të kërkimit në të cilin pika ju thonë se ju nuk mund të gjeni
element që ju po kërkoni.
Dhe kjo merr kohë në të mirë të vazhdueshme, cila është 0 1 dhe në të keqe lineare
kohë, e cila është 0 e n.
>> Kërko Binary, e cila ka nevojë për elemente pistë.
Ju shkoni në mes të elementeve të tua, parë nëse elementi që ju po kërkoni
është më e vogël se ose e elementit se ju jeni në mes.
Kjo është e madhe, ju thoni se në fund i kërkimit tuaj hapësirë ​​është tuaj
vendndodhja aktuale, e mesme, dhe ju rinisni procesin.
Nëse është e vogël, ju duken thoni që the-- vërtet, çfarë është lart?
>> Audienca: [padëgjueshme]?
>> DAN: Po.
Çdo lloj lloj që është mësuar në klasë është lojë e drejtë për testin.
>> [Qeshura]
>> DAN: Dhe fakti që ju nuk keni pasur për të bërë atë për një sërë problemeve, është e drejtë
lojë për testin.
>> Audienca: A mund të shkoj për atë se si to--
>> DAN: Ajo do të jetë zhdukur gjatë.
>> Gjuha 2: Kodi aktual për [Padëgjueshme] është në study.cs50.net.
Pra, nëse ju shikoni në problemin praktikës në faqen e bashkojë e renditjes së
study.cs50.net, ekziston kodi për zbatimin bashkojë lloj.
Pra, ju nuk keni për të zbatuar ajo veten sonte.
Por sigurohuni që ju të kuptoni atë vend se vetëm memorizimin atë.
>> Audienca: [padëgjueshme]?
>> Gjuha 2: faqe bashkojë lloj në study.cs50.net, ekziston një praktikë e
Problemi që, në qoftë se ju klikoni nëpërmjet Problemi, në fund ka një
zgjidhje, e cila është bashkojë Zbatimi lloj.
Por sigurohuni që ju kuptoni atë në vend se vetëm memorizimin
ose kopjimi atë.
>> Audienca: Dhe një të përkryer të vlefshme Problemi për provim do të jetë
diçka si këtu është një listë.
Çfarë e bën këtë listë duket si pas një hap i Zgjedhje lloji ose
lloj futje apo çfarëdo.
Një përsëritje e plotë e listës.
Pra, edhe në qoftë se ju nuk do të përfundojnë që kanë nevojë për Kodi për të, ju duhet të kuptoni atë
mjaftueshme për të dini se si është duke shkuar për të modifikuar këtë koleksion.
>> DAN: Kjo është ajo për mua.
>> [Duartrokitje]
>> Lucas: Hey të gjithë.
Emri im është Lucas.
Unë do të flas për recursion, të gjithë llojet që ne kemi mësuar, dhe një
pak të gjitha pointers.
OK?
Pra, para së gjithash, recursion.
Çfarë do të thotë të them se një funksion është gjithkund rekursive?
>> Audienca: Thirrjet veten.
>> Lucas: OK, e quan veten, po.
Pra, si kjo foto, për shembull.
Është si foto brenda e një foto dhe kështu me radhë.
Kështu për shembull, ju mund të have-- në Dan se ishte duke folur për kërkim binar.
Një mënyrë në të cilën kërko binar është rekursive është fakti se ju jeni
duke u përpjekur për të gjetur një numër.
Pra, ju shkoni në mes.
Dhe pastaj ju kontrolloni nëse numrat atje në të majtë dhe në të djathtë.
>> Dhe pastaj nëse ju gjeni numri është do të jetë në të majtë, është e njëjta
gjë si duke bërë kërkimin përsëri, por vetëm në të majtë të listës.
Pra, kjo është se si kjo tingëllon si ajo e gjithkund rekursive.
Pra, kjo është arsyeja pse ju djema keni rekursive zgjidhje për merge lloj.
>> OK, kështu që këtu është një shembull.
Pra, le të thonë se unë dua të zgjedhur të gjitha numrat nga 1 deri në n.
Unë mund të kuptojnë se shuma e n Numri është n plus n minus 1 deri ne 1.
Por pastaj, në qoftë se unë shoh n minus 1 plus n minus 2 plus 1, që është e njëjta
gjë si numrat e mbledhur deri n minus 1.
Kështu që unë mund të them me shumën e një shumë të barabartë është e barabartë n plus shumën e n minus 1.
Ka që e bëjnë kuptim?
>> Dhe unë gjithashtu do të ketë diçka tjetër quajtur rast bazë, e cila është se
shuma e numrave deri në zero do të jetë zero.
Pra, sa më shpejt që unë të marrë me numrin zero, kam ndaluar duke numëruar.
Ka që e bëjnë kuptim?
>> Kështu që këtu është një shembull se si Unë mund të zbatojë këtë.
Pra, unë kam këtë funksion në disa.
Kjo merr një n numër i plotë.
Kështu që këtu unë së pari të kontrolloni nëse n është më pak ose e barabartë me zero.
Pra, nëse kjo është më pak ose e barabartë me zero, unë kthehen zero, e cila është ndodhur me të bazës.
Përndryshe, unë vetëm mund të kthehen n plus shuma e numrave të
një njerit n minus.
Kuptim?
OK.
>> Kështu që këtu është ajo që duket si.
Ju keni shumën e 2 të barabartëve 2 plus shuma e 1.
Dhe disa nga 1 është 1 plus shuma e 0, e cila është 0.
Kuptim?
Pra, nëse ne shikojmë në rafte e juaj Programi, kjo është ajo që duket si.
>> Së pari, ne kemi funksionin kryesor.
Dhe pastaj funksioni kryesor quhet shuma 2.
Dhe pastaj shuma 2 do të thotë, oh, shuma 2 është e barabartë me 2 plus shumën e një.
Kështu që unë të shtuar shumën e 1 në rafte.
Dhe shuma e 1 do të thërrasë shumën e 0, e cila është gjithashtu do të jetë shtuar
në pirg.
Dhe pastaj secili prej këtyre atyre që janë në krye të një tjetër duhet të kthehen
para se ato të tjera mund të mbajë.
>> Kështu për shembull, këtu, shuma e 0, së pari, do të kthehen 0.
Dhe pastaj të zgjidhni shumën e 1.
Atëherë shuma e 1 do të kthehen 1 për të përmbledhur e 2.
Dhe së fundi, shuma e 2 do të kthehen 3 në kryesore.
Ka që e bëjnë kuptim?
>> Është me të vërtetë e rëndësishme për të kuptuar se si rafte është duke punuar dhe të përpiqen për të
të parë nëse kjo ka kuptim.
OK, kështu që zgjidhja.
Pra, pse është klasifikim i rëndësishëm, para së gjithash?
Pse duhet të kemi kujdes?
Çdokush?
Më jepni një shembull?
Po?
>> Audienca: [padëgjueshme].
>> Lucas: Po, OK.
Kështu që ju mund të kërkoni në mënyrë më efikase.
Kjo është një mënyrë e mirë.
Kështu, për shembull, ne kemi shumë gjërat, në fakt, në jetën tonë që
janë të renditura.
Për shembull, fjalorë.
>> Është shumë e rëndësishme që të ketë të gjitha fjalë në një lloj mënyrë që ne
mund të hyni lehtë.
Pra, kjo është ajo që ai thoshte.
Ju mund të kërkoni në mënyrë më efikase.
Mendoni sa e vështirë do të jetë që të ketë një fjalor ku fjalët janë në
mënyrë të rastit.
Ju do të keni për të parë, shumë e shumë, çdo fjalë e vetme deri sa ju të gjeni
Fjala që ju po kërkoni.
>> Nëse jeni duke përdorur Facebook gjithashtu, kur ju jeni duke kërkuar në miqtë tuaj, ju jeni
shkuar për të parë se Facebook vënë tuaj Miku më afër është në krye të atyre
që ju të mos flisni me se shumë.
Nëse ju shkoni të gjithë rrugën në fund të lista e juaj e mik, ju jeni duke shkuar për të parë
njerëzit që ju ndoshta nuk e bëni edhe mos harroni se ju jeni miq me të.
Dhe kjo është për shkak se llojet Facebook miqtë tuaj bazuar në atë se si
të mbyllur ti je për ta.
>> Pra, organizimin e të dhënave.
Gjithashtu Pokemon.
Kështu që ju shihni se të gjitha Pokemons kanë numra.
Dhe kjo është si një i lehtë mënyrë për të hyrë në të dhënat.
>> Audienca: Përdorimi Pokemon.
>> Lucas: Po.
>> Audienca: [padëgjueshme].
>> Lucas: Po.
OK, kështu që zgjedhja lloj.
Përzgjedhja lloj do të zgjidhni vlera më të vogël Unsorted e një listë çdo
herë në çdo përsëritje.
Kjo është lloj i si lloj që ju bëni në kokën tuaj, kur ju jeni duke u përpjekur për të
zgjidhur një listë në dorë.
>> Në thelb, të gjithë ju bëni është të shikoni për numrin më të vogël.
Ju vënë atë në listën e renditura.
Dhe pastaj ju shikoni për tjetër numri më i vogël.
Dhe pastaj ju të vazhdojmë të bëjmë se dhe kështu me radhë.
>> Pra, zgjedhja lloj është në thelb ju zgjidhni çdo herë më të vogël
Vlera Unsorted.
Vendos në fund të renditura Pjesa e lista.
Dhe të vazhdojmë të bëjmë këtë.
Pra, le të shohim shpejt se çfarë kjo duket si.
Kështu që këtu është renditur dhe lista Unsorted.
>> Pra, për të renditura të listës, kjo është fillimisht bosh.
Dhe atëherë unë jam duke shkuar për të zgjedhur Numri vogël ketu, i cili është 2.
Kështu që unë të marrë numrin 2 dhe kam vënë në pjesën e përparme të lista.
Dhe pastaj unë të shikoni për tjetër më të vogël element, i cili është 3.
Kështu që unë e vënë atë në fund i listës renditura.
Dhe pastaj unë të vazhdojmë të bëjmë këtë.
Unë gjej 4 dhe e vënë atë në fund.
Gjeni 5 dhe e vënë atë në fund.
>> Dhe të shohim se si të gjitha ato herë që Unë jam duke thënë se të vënë atë në fund është,
në thelb, shkëmbejnë dy vlera.
OK?
Dhe pastaj e fundit, ju vetëm të ketë një element më shumë.
Pra, është e renditura tashmë.
>> OK, kështu futje lloj.
Hyrjes lloj që ju jeni do të ketë edhe ajo gjë e ka një të renditura dhe të
një listë Unsorted.
E vetmja gjë është se çdo herë që ju jeni duke shtuar një element të renditura
listë, ju vetëm të vini element që është e para të listës shtëpiake i pa klasifikuar.
Dhe pastaj ju do të jeni për të gjetur se çfarë Pozicioni ajo duhet të jetë në renditura
Pjesa e lista.
>> Le të shohim se çfarë kjo është aq e kjo e bën më shumë kuptim.
Pra fillimisht, për shembull, unë jam duke u përpjekur për të futur numrin tre në
pjesë renditura të listës.
Pra, lista nuk ka asgjë.
Kështu që unë mund vetëm të vënë numrin 3.
>> Tani, unë dua të shtoj numrin 5 të pjesa renditura të listës.
Kështu që unë shoh në numrin 5.
I vini re se kjo është më e madhe se 3.
Kështu që unë e di se ajo duhet të jetë pas 3.
Kështu që unë vënë 3 dhe 5.
>> Pastaj unë dua të futur numrin 2.
Unë konstatoj se numri 2 është në të vërtetë pastaj fundit dy 3 dhe 5.
Kështu që unë në fakt kanë për të vënë të gjitha Mënyra në fillim të listës.
Pra, unë kam për të, lloj, zhvendoset të gjithë elemente në listën e renditura kështu që unë mund
të bëjë vend për numrin 2.
>> Pastaj unë shoh numrin 6.
Unë shoh se ajo duhet të jetë pas 5.
Kështu që unë e vënë atë atje.
Dhe së fundi, unë shoh në numrin 4.
Dhe unë njoftim se duhet të jetë mes 3 dhe 5.
Dhe pastaj kam vënë atë atje dhe ndryshim të gjitha elementet e tjera.
Kuptim?
>> Bubble Renditur.
Pra flluskë lloj është në thelb ajo që ju jeni do të do-- ne e quajmë atë flluskë
lloj sepse ju shkoni nëpër list-- është në fakt më mirë në qoftë se unë vetëm të tregoj
ju pëlqen this--
dhe ju do të jeni për të krahasuar numrat e ngjitur.
Dhe ju jeni do të bie në ujdi tyre Pozicionet nëse ata nuk janë
në mënyrë të drejtë.
>> Pra, në thelb, çfarë do të ndodhë është këtu, për shembull,
ju keni 8 dhe 6.
Ju e dini se rendi renditura do në të vërtetë të jetë e 6 dhe 5, e drejtë?
Pra, ju jeni do të bie në ujdi urdhërat.
Pastaj unë shoh 8 dhe 4 këtu.
Dhe unë bëj të njëjtën gjë.
I bie në ujdi përsëri.
Dhe së fundi, 2 dhe 8.
Unë gjithashtu bie në ujdi tyre.
>> Ajo që quhet Bubble Lloj sepse pas secilin nga këto iterations, në të vërtetë,
numri më i madh në listën e merr të gjithë mënyrë që fundi i lista.
Ka që e bëjnë kuptim?
Për shkak se ajo mban shkëmbejnë atë dhe lëviz atë në të djathtë.
>> OK, kështu që kjo është përsëritje e dytë.
Do të ishte e njëjta gjë.
Unë do të bëj një swap dhe pastaj e fundit.
Unë se nuk ka këmbime dhe lista është e renditura.
Pra, në Bubble Rendit, ne thelb mbajtur duke shkuar nëpër lista dhe të shkëmbejnë
gjëra deri sa të vëreni se unë nuk e ka bërë çdo këmbime bërë atë përsëritje, të cilat
do të thotë se lista është renditur tashmë.
Kuptim?
>> Le të flasim pak në lidhje me kandidimin kohë.
Pra, mendoni ju djema mos harroni Big O, Omega, dhe Theta?
Po?
OK, ajo që është e Big O, para së gjithash?
>> Audienca: [padëgjueshme].
>> Lucas: Po, është quajtur një rast më të keq runtime, e cila vetëm do të thotë se është e
se sa ju presin programin për të marrë për të kandiduar.
Si, në aspektin of--
në këtë case-- n.
Numri i elementeve në Lista e në rastin më të keq.
Si, në rastin më të keq të mundshëm.
>> Pra, për Bubble Rendit, për shembull, ne kemi Big O të sheshit n.
Pse kemi se?
Pse është flluskë Lloj katror Big O n?
>> Audienca: [padëgjueshme].
>> Lucas: Po, kështu rastin më të keq do të jetë që unë do të duhet të bëni iterations n.
Pra, secili nga iterations do të sjellë elementin më të madh deri në fund
të listës.
Pra, rasti më i keq është se unë kam për të bërë këtë gjë n herë.
Dhe për secilin nga ato kohë, më duhet të bëjë këmbime n, sepse unë kam për të krahasuar
çdo dy elemente.
Pra, kjo është arsyeja pse ajo është katror n sepse kjo është n herë n.
>> Pastaj, zgjedhja lloj është edhe n katror sepse, për çdo ripërsëritje, unë kam për të
shikoni në çdo element të vetëm në lista.
Dhe pastaj të gjeni më të vogël, që do të thotë se unë duhet të
parë përmes elementeve n.
Dhe unë kam për të bërë këtë herë n sepse Unë kam për të zgjedhur të gjitha elementet e n.
>> Një lloj futje edhe n katror sepse skenari më i keq do të
të jetë, një, unë kam për të futur numrat n, e drejtë?
Kështu që unë tashmë e di që unë jam duke shkuar të ketë përsëritjeve n.
Por, për secilin nga ato numra, nëse unë kam për të parë në të gjithë numrat në
listë të renditura dhe të vënë atë të gjithë rrugën në para, që do të jetë n katror
sepse ajo do të jetë n herë n përsëri.
Kuptim?
Po në lidhje me omega?
>> Audienca: [padëgjueshme].
>> Lucas: Kjo është skenari më i mirë.
Pra, kjo është si, në një shumë të kohës për sorting, skenari më i mirë është
kur lista është e renditura tashmë.
Pra, ju vërtetë nuk kanë për të bërë asgjë.
Bubble Lloj ka më të mirë Skenari i n.
A e dini ju djema pse?
>> Audienca: [padëgjueshme].
>> Lucas: Po, në qoftë se ju mbani gjurmët e nëse të dhënat racion pasur këmbime ose
jo, në qoftë se ju keni diçka si të vendosur për të e vërtetë në qoftë se ka pasur një përsëritje, në qoftë se
Lista është renditur tashmë, në thelb, çfarë do të ndodhë është që unë jam duke shkuar për të
përpiqen për të bie në ujdi çdo dy elemente ngjitur.
Unë jam duke shkuar për të parë se nuk ka këmbime.
Dhe unë vetëm të kthehet menjëherë.
>> Pra, kjo do të thotë se unë vetëm kishte për të shkoni nëpër lista një kohë.
Pra, kjo është n sepse unë shoh në n elemente.
Pse Zgjedhja lloj n katror?
>> Po, edhe nëse lista është e renditura, për çdo përsëritje e përzgjedhjes lloji, unë
kanë për të zgjedhur elementin minimal.
Kështu që do të thotë se unë kam për të shikoni në të gjitha elementet në Unsorted
lista dhe për të gjetur minimale për çdo ripërsëritje.
Ka që e bëjnë kuptim?
>> Dhe shpata futje është n sepse në rast se unë jam duke u përpjekur për të futur
numra dhe të gjithë numrat, kur unë përpiqen për të futur ato, unë shoh se ata
janë në pozicionin e duhur.
Unë nuk kam për të shkuar të parë të gjitha të tjera numrat në listën shtëpiake i pa klasifikuar.
Pra, kjo është arsyeja pse ajo do të jetë n.
Kuptim?
Dhe çfarë është theta?
>> Audienca: [padëgjueshme].
>> Lucas: Çfarë, sorry?
Thuaj atë përsëri.
>> Audienca: [padëgjueshme].
>> Lucas: Pikërisht.
Kështu që ju mund të shihni se vetëm përzgjedhje ruhet në Merge lloj kanë thetas.
Dhe kjo është për shkak se ju keni vetëm theta nëse dy O madh dhe Omega janë njëjtë.
OK.
Dhe së fundi, shkrihen lloj është në log n.
>> Dhe pastaj, kur Dan ishte duke thënë, Merge lloj është lloj si të njëjtën mënyrë që
ju bëni kërkim binar.
Pra, ju merrni listën.
Dhe ju do të jeni për të prerë në gjysmë.
Dhe pastaj ju prerë ata në gjysmave të vogla.
Dhe pastaj ju bashkojë ato.
Ju djema mbani mend se, e drejtë?
OK, ndërsa ai po thoshte.
>> OK, pointers.
Pra, çfarë është një akrep?
>> Audienca: [padëgjueshme].
>> Lucas: Një adresë.
OK.
Unë e di se David tregon një bandë e videot e Binky dhe gjëra duke treguar
njëri tjetrin.
Por unë doja të mendoj për pointers thjesht si një adresë.
Pra, kjo është një variabël që është duke shkuar për të ruajtur një adresë.
>> Pra, kjo është vetëm kjo variabël të veçantë që është katër bytes gjatë.
Mos harroni, se tregues për çdo gjë është gjithmonë katër bytes gjatë për 32-bit tonë
makinë kështu rasti me aplikim.
Dhe kjo vetëm e ka vendin e një variable brenda saj.
>> OK, kështu që nuk ka këtë memorie, në thelb.
Pra, secili bllok i kujtesës në të vërtetë ka një etiketë, e cila është adresa e
kujtesës slotty.
Kështu që do të thotë se unë mund të ketë një tregues për të treguar
ndonjë nga këto adresa.
Pra, arsyeja pse ne do të përdorim pointers është në qoftë se unë duhet të mbani mend vendndodhjen
se një variabël të veçantë është një kujtim.
>> Dhe ju djema mbani mend se një nga ato raste të ishte në qoftë se unë kam një funksion
në qoftë se unë duhet të vërtetë dua që ju të shkëmbim për reals, unë në të vërtetë
duhet të dërgoni një akrep.
Jo ndryshueshme.
A e mbani mend se ju djema?
Dallimi between--
çfarë është emri?
Thirrja nga vlera dhe duke e quajtur duke iu referuar, e drejtë?
>> OK, po.
Pra, telefononi nga vlera.
Kur ju thjesht dërgoni një ndryshore të funksionojë ju jeni vetëm duke dërguar një vlerë.
Pra, ju jeni në të vërtetë duke dërguar një kopje e variablit.
Dhe programi juaj nuk mund të kujdesen më pak në lidhje me nëse të njëjtën e ndryshueshme të vërtetë
bën një kopje.
>> Dhe duke e quajtur nga referencë do të thotë se Unë jam në të vërtetë i dërguar një kopje të
tregues për këtë variabël.
Pra, kjo do të thotë se unë jam i dërguar vendndodhja e kësaj variable.
Pra kuptim unë kam vendndodhjen e ndryshueshme, kur unë e quaj funksion
me pointers, unë jam në gjendje për të vërtetë të ndryshuar të dhënat që ishte në kryesore.
Kuptim?
>> Edhe pse, akrep është një kopje, akrep ende ka adresën e vërtetë të
variabël që unë dua të ndryshojë.
Kuptim?
>> Pra, duke krijuar pointers.
Mos harroni, në treguesin gjithmonë kanë lloji që është e vënë në
për të dhe pastaj një yll.
Dhe pastaj të vendosni emrin.
Pra, mbani mend se sa herë ju keni çfarëdo yll, është si një tregues për
se çdo gjë e ndryshueshme lloji që keni pasur.
>> Kështu që këtu në yll, për shembull, është e nje tregues dhe një numër të plotë.
Dhe pastaj yll char është një akrep yll char dhe kështu me radhë.
Po?
>> Audienca: Po në qoftë se ne kemi një tregues të n të yll x.
Unë e di që krijon një tregues për x.
A do të deklarojë x një numër të plotë?
>> Lucas: OK, kështu që kur ju thoni yje n x, ju nuk jeni duke krijuar një tregues për një
x ndryshueshme.
Ju jeni duke krijuar një tregues të quajtur x.
>> Audienca: [padëgjueshme].
>> Lucas: Pra, kur unë them yll n x, unë jam duke thënë, hej, në kujtim, unë jam duke shkuar për të
të marrë një nga këto tre kuti.
Dhe unë jam duke shkuar për të thënë se se do të jetë X, i cili eshte
do të jetë një akrep.
Dhe diçka interesante në lidhje me pointers është se ne themi se ata kanë
4 bytes për një makinë 32-bit.
Dhe arsyeja për këtë është për shkak se 4 bytes janë 32-bit.
>> Dhe makina që janë 64 bit të vërtetë kanë Pointers adresat
që janë 64 bit të gjata.
Pra, ai thjesht do të thotë se madhësia e adresat në makinë është e ndryshme.
>> Pra Referenca dhe Dereferencing.
Ka dy operatorë që ju djema duhet të mbani mend.
E para është simbol.
E dyta është yll.
A nuk merrni hutuar nga ky yll dhe kjo Star sepse mos harroni se, në
këtë rast, ju duhet yll n.
>> Është si një gjë të tërë së bashku.
Nuk ka yll hapësirë ​​n.
Pra, kjo do të thotë se është e llojit.
Mos harroni, se kur ju keni yll ndryshueshme, ju jeni
duke folur për llojin.
>> Kur ju keni vetëm yll dhe pastaj emri i variablit, kjo do të thotë se
ju jeni dereferencing në treguesin, i cili do të thotë se ju jeni duke kërkuar në
akrep, duke gjetur adresën është e duke treguar për të, duke shkuar në atë adresë,
dhe duke kërkuar në sa herë që ju keni atje.
Kështu që unë them nxënësit e mi që kur ju keni yll, ju duhet të mendoni se kjo është
shkurtim të përmbajtjes së.
>> Pra, nëse ju keni një tregues dhe ju bëjnë treguesin yll, është e
përmbajtja e pointer.
Pra, ju shkoni në çfarëdo qoftë ajo është duke treguar për dhe të kërkoni në përmbajtjen konstante.
Dhe simbol është e njëjtë gjë si adresë të.
>> Pra, nëse unë kam një ndryshore a-- si, le të të them se kam bërë int a është e barabartë me 3--
në qoftë se unë dua të gjetur adresën e që variabël një kujtim, unë vetëm mund të bëjë
simbol a.
Pra, kjo është adresa e një.
Kuptim?
>> Kështu që këtu është një shembull.
Kjo mungon int b dhe c int.
Pra int një është e barabartë me 3 mjete që Unë jam duke shkuar për të shkuar në kujtesë.
Dhe unë jam duke shkuar për të gjetur një vend i caktuar dhe të vënë numrin 3 këtu.
>> Dhe pastaj int b barabartë 4.
Unë jam duke shkuar për të bërë të njëjtën gjë.
Shko në kujtesë dhe të vënë një numër 4 në një kuti.
Dhe int barabartë me 5.
Gjeni një kuti dhe të vënë një numër 5.
>> Pra, çfarë është kjo linjë duke bërë jashtë? pa yll n barabartë ampersand a.
Pra, para së gjithash, n pa yll.
Çfarë është ajo duke bërë?
>> Audienca: [padëgjueshme].
>> Lucas: Yeah, kështu që n star pa, së pari, deklaron një tregues të quajtur pa.
Dhe pastaj është caktuar vlerën e që tregues të jetë adresa e një.
Pra simbol a.
Pastaj, në qoftë se unë bëj yll BP, çfarë është një pb yll?
>> Oh, më vjen keq.
Kjo është gjithashtu mungon. n star BP.
Unë do të thotë yll pc.
Unë jam aq i keq.
Është e njëjta gjë.
Por tani unë jam i mirë ar krijuar një akrep të b dhe pastaj një tregues për c.
Po?
>> Audienca: [padëgjueshme]?
>> Lucas: Po.
Pra, nëse ju shkoni në kujtesën dhe ju shkoni në kuti që është i destinimit për të pa,
ju jeni të vërtetë do të të shihni një adresë të një.
OK?
Po?
>> Audienca: [padëgjueshme]?
>> Lucas: Po, akrep është një adresë.
Kurrë mos harroni se.
Është si më e rëndësishme pjesë për pointers.
Ka ruajtjen dhe adresën e për disa ndryshore.
Çdo gjë tjetër?
Çdo pyetje të tjera?
OK.
>> Pra Pointers dhe Vargjeve.
Mos harroni se kur bëj int array 3, në thelb, ajo që unë jam duke bërë është që unë jam, lloj
i, duke deklaruar në një akrep.
Pra array është lloj i si një tregues për një vend të veçantë në kujtesën e në të cilat unë
ndarë tre lojëra elektronike për integers.
Ka që e bëjnë kuptim?
>> Pra, kur unë bëj int array 3, atë që unë jam duke bërë, në thelb, është krijuar tre
lojëra elektronike në kujtesën.
Kështu që unë vetëm të gjeni tre lojëra elektronike në kujtesën.
Pra, nëse unë bëj, pra, një array yll, atë në thelb do të thotë përmbajtjen e array,
që do të thotë unë fshihet treguesin, unë shkoj në atë vend që është e treguar për të,
dhe kam vënë numrin një.
>> Dhe pastaj, në qoftë se bëj koleksion star plus 1, kjo është e njëjta gjë si duke bërë koleksion
kllapa një, e cila vetëm do të thotë të shkoj në vendi se është vënë në.
Dhe pastaj plus 1 bën më zhvendoset një pozicion.
Kështu që unë shkoj në këtë pozitë, në të vërtetë, dhe të vënë numrin dy.
>> Dhe pastaj, në fund, kur të bëj array plus 2, unë shkoj aty ku
treguar Array-së në.
Dhe pastaj unë të shkojë në blloqe kujtesës.
Dhe pastaj kam vënë numrin tre këtu.
Po?
>> Audienca: array Pra yll është thjesht duke thënë se pika e parë.
Dhe ju mund të shtoni 1, vetëm për shkak se ne jemi vetëm të vërtetë
referenca atë adresë e parë.
>> Lucas: Po.
Pse, për shembull, thonë array 0, array 1, dhe array 2?
Unë jam duke thënë, pse bëni 0, 1, 2, 3 vend 1, 2, 3?
Një nga arsyet është, një, kompjuter programuesit preferojnë për të filluar
numëruar nga 0.
Dy është për shkak se kur ju bëni koleksion 0, është e njëjta gjë si duke bërë koleksion
plus 0, që do të thotë unë shkoj në se pozita, dhe unë nuk e bëj
kaloni ndonjë blloqe kujtesës.
Kështu që unë nuk do të lëvizin asnjë bllokun e memories.
Po?
>> Audienca: [padëgjueshme]?
>> Lucas: Pra, ajo është duke i kërkuar se çfarë është dallimi në mes duke bërë
këtë apo duke bërë malloc.
Një nga dallimet është se int array 3 është krijuar një
array në rafte.
Dhe kur unë bëj malloc, atë krijon në grumbull.
Ka që e bëjnë kuptim?
>> Pra, si nuk e malloc të vërtetë punojnë?
Pra, pse nuk kemi nevojë edhe për të përdorur malloc?
Lloj juaj përpilues i figurave nga të gjitha variablat që ju të deklaruar.
Ai krijon hapësirë ​​për të gjithë prej tyre në rafte.
Pra, të gjitha variablave tuaja do të jetë diku në rafte.
Kështu që këtu është e mjedisit të ndryshueshëm.
>> Pra, në thelb, hapësirë ​​për ato variabla në kujtim është ndarë në
përpilojnë kohë.
Pra, kjo do të thotë se kompjuteri juaj ka të dini të gjithë atyre variablave
paraprakisht.
Ajo nuk ka nevojë të dinë se çfarë vlera ju jeni duke shkuar për të vënë në to.
Por ajo ka nevojë të dini se si sa memorie keni nevojë.
>> Por tani le të themi se, për shembull, ju jeni duke krijuar një rrjet ose duke marrë një
varg që ju jeni duke marrë nga përdoruesit.
Ju nuk e dini se sa kohë string do të jetë, per shembull.
Pra, ju nuk e dini saktësisht se sa blloqe kujtesës ju të ndajë, e drejtë?
>> Pra, ajo nuk ka të vërtetë të bëjë kuptim për ju për të thënë të vënë 100 karaktere.
Dhe pastaj çfarë nëse përdoruesi shkruan 150?
Ju do të jeni të dehur.
>> Pra, në thelb, ju nuk mund të jeni i sigurt se si sa memorie keni nevojë të ndajë
kur të hartojnë programin.
Ju vetëm e di se në kohë të kandidojë.
Pra, kjo është arsyeja pse ju duhet të grumbull.
Pra grumbull do të ketë memorie se ju jeni ndarjen e gjatë
Kohëzgjatja e programit running.
>> Pra, në thelb, kur ju bëni malloc, çfarë ju jeni duke bërë është caktimin e kujtesës në
runtime, që do të thotë se ju jeni duke vendosur të drejtën në atë moment që ju
duhet të ketë këtë kujtesë.
Pra, kjo është kur ju jeni ndarjes atë.
Ka që e bëjnë kuptim?
>> Pra mbani mend, rafte ka variablave që janë krijuar në kohën e kompilimit.
Dhe pastaj grumbull ka variablave që janë krijuar si ju shkoni
me malloc, për shembull.
>> Audienca: [padëgjueshme]?
>> Lucas: Pra GetString është do të thërrasë malloc.
Më lejoni të flas për malloc, dhe Unë do të shpjegojë GetString.
Pra malloc është e njëjta gjë si ndarjen e kujtesës.
Pra, kjo do të ndajë memorie në grumbull.
Dhe ajo do të kthehet një tregues për ku se kujtesa është ndarë në.
>> Pra, kur ju do--
këtu për example--
n star akrep.
Dhe pastaj akrep barabartë malloc Madhësia e herë inç 10.
Unë jam duke krijuar një akrep.
Dhe atëherë unë jam duke caktuar atë tregues për vlera të kursorit se malloc
është duke i dhënë mua.
>> Kështu që unë jam duke kërkuar malloc mund të ndajë hapësirë ​​për 10 integers.
Kjo është ajo që është duke thënë.
Dhe malloc jep me mbrapa një tregues për atë vend.
Kuptim?
OK.
Unë Dhe GetString është, në thelb, duke bërë një thirrje për malloc kështu që ju mund të ndajë
kujtesës gjatë ekzekutimit.
>> Gjithmonë mos harroni të kontrolloni për null sepse malloc do të kthehen null
në qoftë se ajo nuk mund të siguroj kujtesë.
Le të thonë se ju kërkoni për një qesharake Shuma e kujtesës.
Kompjuteri juaj nuk do të jetë në gjendje të ndajë se shumë.
>> Pra malloc është vetëm do të kthehen null.
Pra, gjithmonë mos harroni të kontrolloni nëse akrep që ju mori nga malloc është
null apo jo sepse, në qoftë se ajo është, ju mund të të dereferencing një tregues dhe
duke shkaktuar gabimet anësore.
Dhe së fundi, mos harroni kujtesën tuaj të lirë.
>> Malloc po krijon memorie në grumbull.
Dhe ju keni për të kujtesë para se programi përfundon.
OK, kjo është e gjitha për mua.
Na vjen keq, Rob.
Faleminderit.
>> [Duartrokitje]
>> Lucas: Çdo pyetje të fundit para Rob vjen?
Nuk ka?
Po?
>> Audienca: Unë nuk e shoh kjo në internet një.
A keni ngarkuar atë ende?
>> Lucas: Unë mendoj se Dave është ngarkimi atë së shpejti.
>> DAVE: Ajo do të jetë postuar.
>> Lucas: Do të jetë online.
>> Audienca: Është e deri.
>> Lucas: Kjo është up?
OK.
Po?
>> Audienca: [padëgjueshme]?
>> Lucas: Po, ju duhet të lirojë të gjithë memorie që është vënë në grumbull.
>> Audienca: [padëgjueshme]?
>> Lucas: Po.
Çdo herë që ju keni një malloc kulturës, ju duhet të keni një kulturë të lirë
pasi ju të ndaluar duke përdorur atë ndryshore.
Pra malloc dhe të lirë janë gjithmonë bashku.
Miqtë e tyre më të mirë.
Po.
Rob?
>> Rob: Unë do të shkoj shpejt.
Dhe gjithashtu video do të vihet dorë.
Unë kam mic në.
>> OK, kështu që javën pesë gjëra.
Gjëja e parë që ne kemi është rafte.
Pra, mos harroni se ka vetëm një pirg kornizë për thirrje aktive funksion.
Ne do të shohim se në një të dytë.
Dhe gjithashtu mos harroni se çfarë në të vërtetë shkon në çdo kornizë rafte do të jenë të
variablat lokale të funksioneve tona, argumentet që janë miratuar në tonë
funksionet, së bashku me një çift gjëra të tjera që ju nuk e bëni me të vërtetë
nevojë për t'u shqetësuar rreth.
>> Kështu që këtu është një program shembull ku, njoftim, kryesore është printfing e kthimit
Vlera e foo 4.
foo është vetëm do të kthehen Vlera e bar 4 presje 6.
Dhe bar do të vënë disa lokale n variable e barabartë me 4 herë 6.
Dhe pastaj kthehen n.
>> Pra, le të shohim në rafte të gjithë përsëritje aktual i këtij programi.
Pra, nuk ka fund të rafte tonë.
Mos harroni se rafte rritet.
Pra, në fund të rafte tonë, ne kanë një kornizë rafte për kryesor.
Kur programi fillon, kryesore është gjithmonë do të jetë në
fund të rafte tonë.
>> Dhe ajo që është brenda tonë rafte kornizë për kryesor?
Pra, edhe pse nuk ka lokale variabla të kryesore, si kam thënë më parë,
ne kemi argc dhe RGV duke marrë deri hapësirë brenda kornizës kryesore rafte.
Pra kryesor tani do të telefononi foo funksion.
Dhe kjo do të thotë foo do të merrni kuadrin e saj rafte.
>> Deri tani ne jemi në brendësi të foo funksion.
Dhe ajo që ka nevojë për të shkuar në kornizë Foo e rafte?
E pra, foo ka një n argument.
Dhe n është e barabartë me 4 pasi që është ajo kryesor është duke kaluar si argumenti foo-së.
>> Deri tani foo do të thërrasë bar.
Çfarë është bar do të ketë brenda i 'kuadrin e saj rafte?
Ajo ka x barabartë me 4 y barabartë me gjashtë.
Kjo nuk është e gjitha që ne do të kemi në kuadër rafte sepse bar
gjithashtu ka një variabël n lokale.
Dhe n ne jemi duke shkuar për të vendosur barabartë me 24.
>> Deri tani bar do të n kthehen.
Pra, bar po kthehet 24 për foo kornizë rafte.
Dhe për shkak se bar tani është kthyer, që do të thotë që ne jemi popping kornizë rafte
për bar off e rafte.
Pra, të gjithë kujtesës që bar kishte qenë duke përdorur tani është jashtë rafte.
>> Tani, foo është gjithashtu do të kthehen 24 në kryesore.
Pra, tani që foo po kthehet, e kujtesës se foo u përdorur në 'e saj
kornizë rafte është zhdukur gjithashtu.
Dhe tani, kryesor do të thërrasë printf.
Pra printf është vetëm një tjetër funksion.
Kur ne e quajmë printf, ajo do të jetë e një tjetër kornizë rafte për printf
thirrje funksion.
>> Çfarë jemi duke kaluar printf?
Kjo është ajo që do të shkojë në kuadrin e saj rafte.
Në shumë pak, ne jemi duke kaluar që për qind i backslash n dhe
argumenti 24.
Ajo mund të ketë më shumë në atë kornizë rafte nëse printf ndodh të jetë duke përdorur disa
variabla lokale.
Ne nuk e dimë.
>> Por të gjitha që shkon në printf-së rafte kornizë.
Ajo do të ekzekutojë printf.
Pastaj printf është bërë.
Ai do të kthehet.
Së fundi, kryesore është bërë.
Kryesore do të kthehet.
Dhe pastaj programi ynë është bërë.
Po?
>> Audienca: A jeni duke parë [padëgjueshme]
Argumentet [padëgjueshme]
Parametrat?
>> Rob: Pra, ka një ndryshim delikate ndërmjet argumenteve dhe parametrave.
Dhe me të vërtetë, në flasin të përbashkët, njerëzit priren për vetëm përzierje e tyre të gjithë kohën.
Por parametrat janë formale emrin nga gjërat.
>> Pra argc dhe argv janë Parametrat për kryesor.
Argumentet janë ato që ju në të vërtetë të kalojë në si këto parametra.
Pra, ka kur unë e quaj foo i 4, 4 është argumenti që unë jam duke kaluar në.
Dhe n parametër, brenda foo, merr në vlerën 4
nga 4 ishte argumenti.
>> Audienca: [padëgjueshme]?
>> Rob: n është një variabël lokale në bar.
n është ende lokale të foo, por kjo është një parametër për të foo.
Kjo nuk është një variabël lokale.
Po?
>> Audienca: [padëgjueshme]?
>> Rob: foo është vetëm duke e quajtur bar dhe kthyer çfarëdo kthimit bar.
>> Audienca: [padëgjueshme]?
>> Rob: Po, vetëm për të parë të shumta rafte korniza.
Po?
>> Audienca: Pse u foo quajtur para printf?
>> Rob: Pse u foo quajtur më parë printf?
Kështu që unë mund të ketë, në vend të kësaj, bëhet diçka si int x është e barabartë foo prej 4
dhe pastaj të shtypura x.
Por në vend të kësaj, unë kombinuar funksionin telefononi në argumentin printf.
>> Por vini re se ne nuk mund të vërtetë ekzekutuar thirrjen për printf deri ne
kuptoj se çfarë foo i 4 është.
Pra, ne jemi duke shkuar për të vlerësuar këtë.
Dhe vetëm një herë që është bërë do të kthehen dhe të vlerësojnë këtë.
Po?
>> Audienca: Që të dy bar [padëgjueshme]
vlera, pse nuk kemi [padëgjueshme]?
>> Rob: Ata tërësisht duhet të jenë të int.
Kjo nuk u kap gjatë kalon të shumta.
Pra, ajo duhet të jetë bar int dhe int foo pasi që të dy ata
po kthehen integers.
Pavlefshëm vetëm në qoftë se ata nuk do të kthehen vlerat aktuale.
Po?
>> Audienca: Nëse keni pasur një linjë më lartë kthimi, [e padëgjueshme]?
>> Rob: Një linjë mbi kthimin?
>> Audienca: Po.
Ashtu si në qoftë se keni kryer printf dhe [e padëgjueshme], do të shtypura dy herë?
>> Rob: Pra, brenda foo?
Nëse do të kishte një printf këtu?
>> Audienca: Po.
>> Rob: Pra, nëse kemi pasur një të drejtë printf këtu, ajo do të shtypura një herë.
Që ne jemi duke e quajtur foo një herë të drejtë këtu, atëherë ne do të goditur printf.
Pastaj ne do të thërrasë bar.
Dhe pastaj foo do të kthehen.
Dhe kjo është ajo.
Ne vetëm ndonjëherë hasni printf një herë.
Po?
>> Audienca: [padëgjueshme]
printf quajtur foo, sepse ne jemi të parë duke e quajtur printf dhe pastaj ne jemi duke kaluar
argumentet.
>> Rob: Pra, në teori, nuk është printf quajtur foo?
Kështu që nuk ka.
Vetëm mënyrë që c do të ekzekutuar këto gjëra është, para se të mund të
thërrasë një funksion, të gjitha argumenteve të funksionit të ketë
të vlerësohen plotësisht.
Pra, është kjo vlerësohet plotësisht?
Po, kjo është vetëm një varg.
Është vetëm një vlerë.
>> Pastaj ne duhet të plotësisht të vlerësojnë këtë.
Pasi kjo është bërë, tani të gjithë Argumentet e tij janë vlerësuar.
Dhe tani ne mund të bëjë thirrje për printf.
Po?
>> Audienca: Një pyetje.
Nëse ju keni një funksion të pavlefshëm, duhet ju keni pikëpresje kthimit?
>> Rob: Ju nuk bëni një pikëpresje kthim në qoftë se ju keni një funksion të pavlefshëm.
OK.
Deri tani disa sende grumbull.
Pra tog është se si ne jemi duke shkuar për t'u marrë me menaxhimin e kujtesës dinamike.
Dhe kjo direkt në kontrast me rafte të cilat ne do të thërrasë automatike
menaxhimin e kujtesës.
>> Pra, në rafte, ju kurrë nuk të vërtetë kanë për t'u marrë me atë se si variablat lokale
janë duke u shtyrë dhe popped off të gjithë këto korniza rafte dhe të gjitha këto gjëra.
Ju nuk keni për t'u shqetësuar në lidhje me të.
Është automatike.
Pra tog është manual.
Dhe [padëgjueshme]
vjen nga këto funksione malloc dhe të lirë.
>> Kështu që këtu është një tjetër program.
Të gjithë ne jemi duke bërë është mallocing një numër të plotë.
Ne jemi ruajtjen atë në yll x.
Sigurisht, ne kemi për të kontrolluar për të parë nëse x është null.
Pastaj ne jemi duke shkuar për të vendosur vetëm çfarë x është duke treguar për të 50.
Print çfarë x është duke treguar për të, printimi x, dhe pastaj lirë x.
>> Pra, si është kjo në të vërtetë do të shikojmë nëse ne shikojmë në rafte tonë dhe tok?
Pra, ne do të fillojnë përsëri.
Fund i rafte tonë si më parë.
Mos harroni se ty të grumbullosh direkt kundërshton rafte?
Pra, ne do të kemi krye të tog tonë deri atje.
>> Pra, në fund të rafte tonë, ne kemi kornizë ynë rafte për kryesor.
Ajo ka hapësirë ​​për argc, argv, dhe ne tani kanë një x ndryshueshme lokale, të cilat
është një yll int.
Pra, ne jemi duke shkuar për të iterate përmes këtij programi.
Gjëja e parë që ne kemi është një thirrje për malloc.
>> Pra, ne jemi duke e bërë një thirrje për malloc.
Malloc është një funksion.
Ajo do të marrë një kornizë rafte.
Ajo që jemi duke kaluar për malloc?
Kjo do të shkojë brenda e kornizës pirg.
Ne duke kaluar madhësinë e N, i cili eshte 4.
Kështu që është kaluar me malloc.
>> Çfarë malloc bëni?
Ajo na grabs disa hapësirë ​​në tog.
Pra, ne jemi duke shkuar për të shkuar në tog.
Dhe ne jemi duke shkuar për të rrëmbyer 4 bytes nga grumbull.
Pra, le të vetëm të jap se një adresë arbitrare.
0x123 Vetëm të pretendojë se është një Adresa e që është në grumbull.
>> Pra, çfarë është në të vërtetë brenda se Rajoni i kujtesës në adresën Ox123?
Garbage.
Pra, ne nuk e kemi ruajtur asgjë në të.
Deri aq sa ne e dimë, atë mund të jetë çdo gjë.
Ju nuk duhet të supozojmë se është zero.
Është më nuk zero gjasa.
>> Kthimet Deri tani malloc.
Dhe çfarë bëjmë ne kur të kthehet e malloc?
Ne kemi vendosur se çfarë do të kthehet.
Ne kemi vendosur x barabarta me atë që ajo është kthyer.
Pra, çfarë është ajo që kthehen?
Është kthyer 0x123 pasi që është adresa e bllokut të kujtesës se saj
vetëm ndarë në grumbull.
>> Pra kthehet 0x123 x tani do të jetë vendosur barabartë 0x123 cili, në pikturë,
ne shpesh barazim si x paturit e një aktuale shigjetë duke treguar për këtë bllok.
Por x është vetëm ruajtjen atë adresë.
Deri tani ne kemi për të parë nëse x është null.
Kjo nuk është null.
Ne pretendojmë se që malloc sukses.
>> Deri tani yll x është e barabartë me 50.
Pra yll kujton kjo do të thotë shkojnë në atë adresë.
Pra 0x123 Ne jemi duke shkuar për të shkojnë në atë adresë.
Kështu që na sjell deri aty.
Çfarë po bëjmë në atë adresë?
Ne jemi ruajtjen 50.
>> Pra pas këtë linjë, që është ajo gjërat do të duken si.
Deri tani nuk është më mbeturinave deri atje.
Tani ne e dimë se 50 është në se Adresa e veçantë për shkak se
ne kemi vendosur atë në se.
OK?
Deri tani ne jemi duke shkuar për të shtypur f.
>> Pra, së pari, ne jemi duke shkuar për të shtypur yll x.
Pra, çfarë është yll x?
Përsëri, yll x do të thotë të shkojnë në gjë që x është duke treguar për të.
Pra, x është ruajtjen 0x123 Shko te që.
Ne kemi marrë 50.
Pra, të shtypura f që.
Dhe kjo do të thotë se do të shtypura 50.
Dhe pastaj se kthehet.
>> Dhe pastaj ne kemi printf dytë.
Ne jemi tani për qind p.
Nëse ju nuk e keni parë atë, kjo është se sa keni shkruar një akrep.
Pra, ne kemi për qind i, për qind f, dhe të gjithë ata tashmë.
Pra qind p, të shtypura një akrep.
>> Pra, x është një akrep.
Pra, në qoftë se ne jemi duke shkuar për të shtypur x vetvete, ne jemi shtypjen atë që është në të vërtetë brenda
x, i cili është 0x123 Kështu parë print f do të shtypura 50.
Print dytë f është duke shkuar për të printuar 0x123 Po?
>> Audienca: A keni përdorur për qind x për të shkruar një akrep?
>> Rob: Pra, ju e përdorni për qind x për të shkruar një akrep?
Kështu që ju mund të, por për qind x është vetëm, në përgjithësi, për të si në qoftë se ju keni disa
numër i plotë dhe ju doni të shtypura ajo si një heksadecimal.
Kjo është vetëm se si ta bëni këtë.
>> Ndërsa, për qind d do shtypura si decimal.
Kjo është se ku kemi marrë për qind d. i është vetëm numër i plotë.
qind p është në mënyrë specifike për pointers.
>> Pra, x është një akrep.
Ne duam që të përdorin për qind p.
Por për qind x mund të punojnë.
Po?
>> Audienca: [padëgjueshme]?
>> Rob: Po.
Të paktën për këtë call-- kështu që unë nuk e përfshijnë atë në këtu.
Por këto dy argumente janë domosdoshmërisht brenda kësaj kornize rafte
së bashku me ndonjë variablave lokale printf ndodh të jetë duke përdorur.
Dhe pastaj thirrja pranë printf tani brenda printf kornizë rafte është
qind p backslash n dhe çfarëdo vlera e x është, e cila është 0x123.
Po?
>> Audienca: [padëgjueshme]?
>> Rob: Ajo do të shtypura diçka që duket si kjo.
>> Audienca: [padëgjueshme].
>> Rob: Pra, ajo printon atë në formë të adresave.
Ajo duket si një adresë.
Po?
>> Audienca: [padëgjueshme]?
>> Rob: Pse është ajo?
>> Audienca: [padëgjueshme]?
>> Rob: Pse është ky tregues 4 bytes?
Pra, ka një bandë e tërë të 0-ta në frontin e kësaj.
Pra, kjo është me të vërtetë 0x0000000123.
Në një sistem të 64-bit, nuk do të një bandë e tërë më shumë zero.
Po?
>> Audienca: [padëgjueshme].
>> Rob: Pra printf parë do të print--
>> Audienca: [padëgjueshme].
>> Rob: Po, ajo do të shtypura ajo që x është duke treguar.
Star thotë se çfarë është kjo gjë e treguar.
Rrëmbej atë.
Pra, çfarë është ajo për të treguar?
50.
Rrëmbej atë.
Kjo është ajo që ne jemi duke shkuar për të shtypur.
Ndërsa, në një tjetër, ne jemi të vetëm shtypjen x vetvete.
Çfarë është brenda f?
0x123.
OK.
>> Dhe pastaj, në fund, ne kemi të lirë.
Ajo që jemi duke kaluar për të liruar?
Ne jemi duke kaluar x.
Kjo kohë që unë në fakt shfaqet ajo në kuadër rafte.
>> Pra, ne jemi duke kaluar vlerën 0x123 për të liruar.
Deri tani pa e di, të gjithë të drejtë, Unë kam për të shkuar deri në tog
dhe se kujtesa e lirë.
Ajo nuk është më e përdorur atë është në adresën 0x123.
>> Pra, të lirë do të lëshojë që nga plehrat.
Tani tog ynë është bosh përsëri.
Ne nuk kemi rrjedhjet e kujtesës.
Tani pa pagesë do të kthehet.
Vini re se x është ende 0x123.
Por që tani nuk është memorie e vlefshme.
Ne duhet dereference jo më të gjatë x.
Po?
>> Audienca: A kthehen 0 tepërt?
>> Rob: A është returen 0 tepërt?
Po.
Ne vetëm vënë se për shkak ne kemi një kthim të një për ajër.
Pra, kjo është si, vërtet, lejon përfshijnë kthimin 0.
Po?
>> Audienca: [padëgjueshme]?
>> Rob: Pra pas lira x, çfarë ndodh nëse ne përpiqemi të dereference treguesin?
Është e mundur që asgjë nuk shkon keq.
Është e mundur që ne ende do të merrni 50.
>> Është e mundur, gjithashtu, se se kujtesa është tani duke u përdorur për diçka tjetër.
Pra, kjo është sjellje e papërcaktuar.
Dhe papërcaktuar do të thotë asgjë mund të ndodhë.
Po?
>> Audienca: [padëgjueshme]?
>> Rob: Jo, kështu që nëse ju të caktojë x për diçka tjetër.
Pra, nëse këtu kemi thënë x është e barabartë me diçka e malloc else--
Madhësia e malloc event--
pastaj se bllok origjinale e kujtesës nuk është liruar.
Dhe ne kemi humbur zyrtarisht atë.
Kjo është një rrjedhje kujtim.
Ne e kemi humbur të gjitha referencat në atë bllok të memories.
Pra, nuk ka asnjë mënyrë ne mund të ndonjëherë të lirë atë.
OK, kështu që pastaj të kthehen 0 mjetet bërë.
>> Në rregull, del nga shtrati kështu rafte.
Çfarë është ideja këtu?
Pra mbani mend, grumbull është duke shkuar poshtë.
Stack është duke shkuar deri.
Pra, kjo ishte shembulli nga leksion, Unë mendoj, ku kryesore është vetëm do të
e quajnë këtë foo funksion, e cila do për të thirrur veten Recursively mbi dhe
pushim.
>> Pra rafte korniza do të punë të njëjtë.
Pra, ne jemi duke shkuar për të filluar me kryesore si kuadër fund rafte.
Pastaj kryesor do të thërrasë foo, e cila do të marrë një kornizë rafte.
>> Pastaj foo do të thërrasë foo përsëri, e cila do të marrë
një tjetër kornizë rafte.
Dhe pastaj përsëri, dhe përsëri, dhe përsëri, dhe përsëri derisa, në fund, ne të drejtuar
në grumbull.
Pra, kjo është se si ne të merrni a del nga shtrati rafte.
Dhe në këtë pikë, ju seg faj.
Ose ju do të vërtetë të seg faj para këtë pikë, por vërtet.
>> Audienca: A është thelbi hale njëjtë si faj Seg?
>> Rob: Pra, ju do të shihni segmentimit core faji hedhur.
Ju merrni një hale thelbësore kur ju seg faj.
Dhe kjo është si një hale të gjitha përmbajtja e kujtesës tuaj të tanishme në mënyrë
që ju mund të provoni dhe për të identifikuar pse ju Seg fajësuar.
Po?
>> Audienca: [padëgjueshme]?
>> Rob: Pra një mjet faji segmentimit ka një overflow rafte.
Pra jo domosdoshmërisht.
Një faji segmentimit do të thotë se ju jeni memorie prekja në mënyrë
ju nuk duhet të jetë.
Pra, një mënyrë që kjo të ndodhë është, kur ju rafte del nga shtrati, ne fillojmë prekëse
memorie në një mënyrë që ne nuk duhet të jetë.
Po?
>> Audienca: [padëgjueshme]?
>> Rob: Pra, brenda një lak të pafund.
Si, kjo është si një Infinite rekursive loop dhe kështu që ne të merrni një tjetër
rafte kornizë çdo herë.
Por vetëm në brendësi të një të rregullt pafund ndërsa one--
mirë, le të mos edhe të shtypura f--
të bëjë diçka.
Çfarëdo.
>> Ne nuk jemi duke shkuar për të marrë një tjetër kornizë rafte.
Ne jemi vetëm duke shkuar për të mbajtur looping mbi këtë udhëzim i vetëm.
Rafte nuk është në rritje.
Është fakt se çdo rekursive Thirrja është duke na dhënë një kornizë rafte.
Kjo është arsyeja pse ne kemi marrë një overflow rafte.
Po?
>> Audienca: Pra, nëse ju tha që të merrni ndërsa lak dhe pastaj [e padëgjueshme]?
>> Rob: Pra, nëse brenda lak kohë ka pasur një printf, ju ende do të
faji nuk seg.
Unë thjesht nuk duan të ngatërruar gjërat.
Ajo do loop.
Ju do të merrni një pirg të vetme kornizë për printf.
>> Pastaj printf do të kthehen.
Pastaj ju do të lak përsëri.
Ju do të merrni një pirg të vetme kornizë për printf.
Ajo do të kthehet.
Vetëm kornizë rafte.
Pra, ju nuk jeni duke marrë këtë pafund grumbullonin korniza rafte.
>> Audienca: [padëgjueshme]?
>> Rob: Po.
Pra, kjo del nga shtrati rafte ndodh sepse asnjë nga këto
thirrjet për foo po kthehen.
Pra, nëse do të kthehemi, atëherë ne do të fillojnë humbur korniza rafte.
Dhe atëherë ne nuk do të rafte del nga shtrati.
Dhe kjo është arsyeja pse ju duhet një rast bazë për funksionet tuaja personale.
Po?
>> Audienca: A është madhësia potenciale dhe rafte për tog njëjtë për
gjitha programet?
>> Rob: Rreth.
A është madhësia potenciale e rafte dhe grumbull i njëjtë për të gjitha programet?
Rreth.
Ka disa randomization të ku fillon rafte dhe
ku fillon grumbull.
Nëse ju ndodh që të ketë një të tërë shumë Variablat globale dhe gjëra, ju mund të
të marrë larg nga një hapësirë për tog tuaj.
>> Në një sistem të 64-bit, ju praktikisht kanë memorie të pafund.
Ka vetëm aq shumë.
Midis 32 bit dhe 64 bit, atë është një ndryshim i rëndësishëm.
>> Ju jeni do të merrni një tërësi shumë më të rafte dhe hapësirë ​​tog në një 64-bit
sistemi, sepse nuk është vetëm më shumë adreson se ata mund të përdorin.
Por në një sistem individual, ajo do të të jetë afërsisht të njëjtën sasi e rafte
dhe hapësirë ​​tog.
Të gjithë të drejtë.
>> Pra, gjëja e fundit që është përpilim.
Kështu që ju duhet të dini këtë proces.
Ekzistojnë katër hapa të mëdha.
Pra, e para duhet të jetë e lehtë për të kujtuar.
Para-përpunimit.
Ajo ka prefiksin parashkollore në të.
Pra, është fjala para se çdo gjë tjetër.
>> Gjë për të kujtuar është hash.
Pra hash përcakton dhe hash përfshin në të gjithë ata.
Ata janë të gjithë para-procesor direktivave.
Këto janë gjërat që para-procesor kujdeset.
>> Pra, çfarë e bën një para-procesor të bëjë?
Kjo është një gjë me të vërtetë memec.
Të gjitha është e aftë për të janë të gjitha këto kopje, dhe të prerë, dhe paste operacionet.
>> Pra hash përfshin standarde I0 dot h.
Çfarë është se duke bërë?
Është grabbing standarde I0 dot h paraqesë dhe pasting atë në krye
kudo që ajo thotë hash përfshin standarde I0 dot h.
>> Dhe çdo hash përcaktojnë se ne kemi parë, çfarë është se duke bërë?
Saj kopjimi vlerën që hash përcaktuar është definuar si dhe pasting se
kudo që të jeni duke përdorur vlerën.
Pra preprocessor vetëm bën me të vërtetë Operacionet tekst i thjeshtë në bazë.
Ajo nuk bën asgjë zgjuar.
Pra, çdo gjë tjetër është më e komplikuar.
>> Pra, tani që preprocessor është bërë, ne fakt përpiloni.
Pra, çfarë do të thotë hartimin?
Ne jemi tani duke shkuar nga kodi c në kodin kuvendit.
Po?
>> Audienca: [padëgjueshme]?
>> Rob: Po, ne kemi kapur që.
Pra hartimin.
Ne jemi duke shkuar nga c të asamblesë.
Pra, ky është një ndryshim gjuha aktuale.
Hartimi veten do të thotë duke shkuar nga një gjuhë të nivelit të lartë për të
një gjuhë të nivelit më të ulët.
>> Dhe c është një gjuhë të nivelit të lartë në krahasim me kuvendin.
Çfarë është kuvendi?
Udhëzimet e saj, që janë, shumë e shumë, e bëri për CPU tuaj.
Por kompjuteri juaj ende nuk nuk e kuptojnë kuvendit.
Ajo vetëm e kuptonte ato dhe zero.
Pra, hapi tjetër është grumbulluar, e cila na sjell nga këto udhëzime që
CPU juaj kupton dhe në fakt përkthen ato, për të
ato dhe zero.
>> Pra C në asamble para binar.
Por unë nuk kam një ekzekutueshme ende.
Pra, mendoj se e bibliotekës CS50.
Ne kemi dhënë me një binar për kjo bibliotekë CS50, e cila ka GetString
dhe GetInt dhe të gjithë se.
>> Por CS50 library--
në dhe e itself-- nuk është i ekzekutueshëm.
Ajo nuk ka një funksion kryesor.
Është vetëm një bandë e binar që ju mund të përdorni.
Pra lidhja është se si ne të sjellë së bashku të gjithë nga këto fotografi të ndryshme binare
në një ekzekutues aktuale.
Një që ju mund të shtypni dot çaj dot jashtë.
>> Pra, kjo është si file që ju shkroi, - çfarëdo programi juaj is--
Ceaser dot c.
Por tani ajo është hartuar deri në binar.
Pra Ceaser dot o.
Dhe kjo është CS50 ynë bibliotekat binar.
Dhe ata janë duke u kombinuar në një ekzekutues të vetëm.
Po?
>> Audienca: [padëgjueshme]?
>> Rob: Pra, së pari të përfshijnë, mos harroni, hash përfshijnë është në fakt një
hap para-procesor.
Por kjo është e veçantë.
Nëse ju nuk jeni duke përdorur funksione që janë jashtë e file të vetëm atëherë,
jo, ju nuk keni nevojë për të lidhur ndonjë gjë pasi ju keni gjithçka.
>> Kjo tha, printf është duke u lidhur në.
Në qoftë se ju përdorni ndonjëherë printf, kjo është diçka e që duhet të jetë i lidhur në
sepse ju nuk e keni shkruar se.
Dhe, në fakt, printf është automatikisht lidhura në.
Ju e dini se si në rreshtin e komandave ose kur ju shkruani bëni, ju shihni se keni
dash l CS50, e cila ka lidhje në bibliotekë CS50?
Printf, dhe stuff like that, do të jetë i lidhur në mënyrë automatike.
Çdo pyetje të tjera në çdo gjë?
>> Audienca: [padëgjueshme]?
>> Rob: Lidhja?
Ne kemi një bandë e tërë e Fotografi të ndryshme binare.
Ky është shembulli kanonik që ne përdorim është bibliotekë CS50.
Ne kemi hartuar dhe dhënë për ju në binar për këtë bibliotekë CS50.
>> Ju doni të përdorni GetString në programin tuaj.
Pra, ju shkoni dhe të përdorni GetString.
Por pa kodin tim binar për GetString, kur ju përpilojnë kodin tuaj
poshtë, ju nuk mund të vërtetë të drejtuar tuaj Programi sepse GetString String është
ende nuk është përcaktuar plotësisht.
>> Është vetëm kur ju lidhë në binar tim që përmban GetString që tani, të gjithë
drejtë, unë mund të vërtetë ekzekutuar GetString.
Dosja ime është e plotë.
Dhe unë mund të kandidojë këtë.
Po?
>> Audienca: A lidh kthyer binar për të ekzekutueshme?
Pra, edhe në qoftë se ju nuk keni të tjera bibliotekat, nuk do të vazhdojë të jetë
nevojshme për të përkthyer [padëgjueshme]?
>> Rob: Pra një ekzekutueshme është ende në binar.
Është vetëm kombinuar një tërësi bandë e binare.
>> Audienca: Ju faleminderit shumë.
>> Rob: Nuk ka problem.
Çdo pyetje të tjera?
Përndryshe, ne jemi të vendosur të gjithë.
Të gjithë të drejtë.
Faleminderit.
>> [Duartrokitje]
>> Audienca: Ju faleminderit.
>> Rob: Po.