>> [Muzika]
CAMILLE REKHSON: Hi, të gjithë.
Mirë se vini në quiz CS50 Sesioni zero shqyrtim.
Unë jam Camille.
Dhe unë jam duke shkuar për të shkuar mbi disa tema me ju
djema sot për t'ju ndihmuar përgatitur për quiz.
Kështu që këtu është jonë jo shteruese Lista e temave të
duhet të jetë njohur me të për quiz.
Këto janë marrë direkt nga planin mësimor.
Unë e di kjo duket si një shumë.
Por me besim, keni mësuar të gjitha këto gjëra në javët e fundit.
>> Pra, ne patjetër do të shkojnë mbi një shumë prej këtyre sotme.
Por edhe të marrë disa kohë në tuaj vet për të rishikuar këto gjëra.
Dhe në qoftë se nuk keni qenë të njohur me atë që disa nga këto gjëra janë,
sigurohuni që ju të pyesni njëri prej nesh.
Gjithashtu, për fjalën zyrtare në quiz, shkoni në këtë link.
Kjo do të keni të gjithë informacionin me të cilën dhomë ju duhet të shkoni në,
ndarë sipas rendit alfabetik, dhe edhe disa këshilla se çfarë materiale
ju duhet të studiuar, dhe çfarë lloj i pyetjeve quiz ju mund të presin.
Prandaj sigurohuni që të kontrolloni se jashtë.
>> Gjithashtu, disa këshilla për kur ju janë duke u përgatitur për provim.
Praktikoni kodim në letër.
Unë e di se ju keni marrë përdorur për të pasur çeku IDE për gabimet tuaja për ju,
dhe it's-- kur ju jeni të shtypni atë, kjo është pak më ndryshe se sa që ka
për të shkruar gjëra jashtë.
Pra praktikë duke bërë disa kodim.
Disa funksione të mira për të praktikuar duke bërë janë strlen dhe atoi,
të shohim nëse ju mund të shkruani ato jashtë në tuaj.
Të jenë të njohur me grupe problemit.
Shumica vjet atje janë Pyetjet që lidhen
për disa prej problemeve të vendosur materialit.
Prandaj sigurohuni që ju të kuptoni se si të bëjë të gjitha grupe problemit.
>> Provoni duke bërë disa kuize vjetra nën kufizim kohor minutën e 75.
Një shumë e kuize mund të jetë lloj i gjatë.
Pra, kjo është një mënyrë e mirë për të dhënë veten disa praktikë,
dhe sa kohë do të të marrë ju, dhe si ju
duhet të ndani kohën tuaj për t'u siguruar keni mbaruar çdo gjë deri në fund.
Dhe gjithashtu, që ju të merrni një një faqe, dy fletë referencë njëanshëm
që ju mund të shkruani çdo gjë që ju duan për të përdorur gjatë quiz.
Pra, kur ju jeni duke krijuar kjo, kjo është edhe
mënyrë me të vërtetë e madhe për të studiuar, sepse ju do lloj i shqyrtimit të gjërave
si ju jeni duke shkruar atë.
>> Kështu që çdo pyetje të përgjithshme rreth quiz, apo se si funksionon?
Po.
>> Audienca: A do që lista e temave se ju vetëm të treguar të jetë në dispozicion për ne
Online?
>> CAMILLE REKHSON: Ky tërë rrëshqitje Shfaqja do të postohen në faqen e internetit.
Gjithashtu, video e rishikimit sotme Seanca do të jetë në faqen e internetit.
Pra, mos u shqetësoni shumë për shkruar gjëra poshtë të gjithë.
E gjithë kjo do të jetë atje.
Ndonjë pyetje të tjera?
OK, kështu që le të ketë filluar.
>> Pra, një gjë që të jenë të njohur me të është llojet e ndryshme të të dhënave dhe madhësia
që ata marrin.
Kjo mund të jetë një gjë e madhe për të shkruani në fletë tuaj të referencës,
vetëm për t'u siguruar që ju mos harroni të gjitha këto.
But-- kështu chars janë 1 bajt.
Ints janë 4 bytes.
Një kohë të gjatë, të gjatë, e cila është në thelb më shumë hapësirë ​​për një numër të plotë, është 8 bytes.
Një noton është 4 bytes.
Një dyfishtë, e cila në thelb ju jep më shumë hapësirë ​​për të ruajtur një noton, është 8 bytes.
Dhe pastaj një tregues është edhe 8 bytes.
Ndonjë pyetje në lidhje me këto?
>> Pra binar është një tjetër temë që ne kemi mbuluar pak ta heqësh këtë semestër.
Pra, le të bëjë disa praktikë me konvertimin
midis binar dhe dhjetore.
Pra, dikush ndonjë ide se çfarë se pari do të jetë?
Çdokush?
Po, kjo është 42.
Pra, nëse ju kujtohet, çdo nga vendet në binar
është në thelb si 2 në pushtet atë vend së.
>> Në mënyrë që vend i parë është 2 fuqisë 0.
Dhe ne kemi 0 atje, kështu që asgjë atje.
Vendi tjetër është 2 në pushtetin e parë.
Dhe ne nuk kemi një 1 atje, kështu që është në thelb një 2.
Vendi tjetër është 2 për e dytë, që është 4.
Ne nuk kemi asgjë atje.
Vendi tjetër është mbi 2 për i treti, cili do të jetë 8.
Dhe ne nuk kemi një të tillë atje.
Dhe ne do të mbajë.
Që last-- e largët të një majta është ku ne kemi 32.
Dhe kështu, ne thelb kemi 32 plus 8 plus 2 për të marrë 42.
Ndonje pyetje?
>> Audienca: Çfarë është Kaloje për?
>> CAMILLE REKHSON: The Kaloje thelb na tregon se është binar.
Pra, ka një 2 atje.
Nëse do të kishte like-- në tjetrën një, ose kur ne jemi konvertimin decimal
në binar, ka një 10 na tregon se ky numër është fillimisht në dhjetore.
>> Audienca: Ju faleminderit.
>> CAMILLE REKHSON: Po.
Çdo pyetje të tjera në se një?
OK, kështu që le të përpiqemi të ardhshëm një pastaj, decimal në binar.
Pra, duke marrë 50 dhe vënien që në binar.
Si do ta bëni këtë?
Po.
>> Audienca: 110010.
>> CAMILLE REKHSON: Po.
Pra one-- një mënyrë e thjeshtë për të menduar për konvertimin nga decimal të binar
është to-- ajo shpesh ndihmon për të shkruar jashtë çfarë fuqitë e ndryshme të 2 janë.
Dhe pastaj të shkojnë nëpërmjet saj, dhe shikoni Sido që të jetë më e larta nga ato
është se ju mund të vënë në të Numri dhjetor pa kaluar mbi të.
>> Pra, në këtë rast, një nga fuqitë e 2 është 32.
Pra, 32 shkon në 50.
Por pushteti i ardhshëm do të jetë deri 64, që padyshim nuk i përshtatet në 50.
Pra, më e larta që kemi është 32.
Një tjetër deri në 16.
Dhe 32 plus 16 është vetëm 48.
Kështu që ende i përshtatet në 50.
Pra, ne kemi 1 në të dyja këto.
Dhe pastaj në qoftë se ne vazhdojmë duke shkuar poshtë, e vetmja gjë që duhet lënë
është 2 më shumë për të marrë nga 48 deri në 50.
Pra, atëherë ne kemi një 1 në atë pozitë, dhe a 0 në pozicionin e fundit.
Sepse nuk ka asgjë në 2 deri në vendin e 0-të.
Pyetjet për konvertimin decimal në binar?
>> Pra, tani le të provoni duke bërë disa shtesë binar.
Si kur ju shtoni ato dy up?
Po.
>> Audienca: 11100.
>> CAMILLE REKHSON: Po.
Pra, duke bërë shtesë në binar është mjaft shumë e njëjtë si duke bërë atë në dhjetore.
Përveç në qoftë se ju keni dy qenien e 1 shtimit bashku, 1 plus 1 është 2,
por 2 në binar është 1 0.
Kështu që ju duhet për të kryer 1, dhe për të mbajtur mbante atë për këto kolona çift.
Dhe përveç kësaj, vetëm të shtoni normalisht.
Ndonjë pyetje për këtë?
Po.
>> Audienca: Na vjen keq, çfarë është vendi i fundit?
Ka gjashtë numra.
Kështu kolona pari nga e majta, çfarë vlerë është ajo?
CAMILLE REKHSON: Në këtë një fund?
Audienca: Në një krye, për 50.
CAMILLE REKHSON: Për 50?
Oh, kështu që ai i pari nga e majta është 32.
>> Audienca: 32?
>> CAMILLE REKHSON: Yeah, kështu që do të jetë 32, 16, pastaj 8, 4, 2, 0-- ose 1.
E pra, kjo është 2 të zeroth, e cila është 1.
Po.
Çdo pyetje të tjera në këtë?
OK, kështu që atëherë ne jemi duke shkuar për të bërë pak me heksadecimal.
Pra, kjo mund të jetë një pak më pak të njohur,
sepse unë e di që ne kemi bërë shumë më tepër me binar.
Por një mënyrë me të vërtetë e mirë për të mendoni për heksadecimal
është për të prishur një binare Numri në 4 chunks bit.
Sepse çdo 4 copa të një numri binar është në thelb
një nga numrat hexadecimal.
>> Pra, nëse kemi këtë një të parë, ne kemi në thelb tetë 1-së.
Pra, ata mund të ndahen up--
>> Audienca: 255.
>> CAMILLE REKHSON: Thuaj atë përsëri.
Audienca: 255 në decimal, ose 0xFF në heksadecimal.
CAMILLE REKHSON: Po, ajo është.
Pra, në qoftë se ju ndarë se deri në dy chunks 4-bit,
ne thelb kemi katër grupe të 1.
E cila është maximum-- thelb maksimale
ne mund të merrni me 4-bit në binar.
Dhe maksimumi që ne mund të merrni për që në heksadecimal do të jetë një F.
Pra, ne do të kemi dy F-së.
Ndonjë pyetje për këtë?
Po?
>> Audienca: A mund të përsëris se.
CAMILLE REKHSON: Sigurisht.
Pra secili, në thelb, vendi i heksadecimal është
ekuivalent me 4-bit te nje binar.
Pra, mënyra më e lehtë për të bërë këtë është për të thyer atë në 4-bit chunks.
Pra, në këtë rast, ne kemi tetë 1-së.
Pra, nëse kemi ndarë ato në dy chunks 4-bit,
ne do të kemi dy grupe nga katër të 1.
Dhe secili nga ata është e barabartë me F.
Nëse ju mendoni se? Për Unë e di se truri ynë janë të
lloj i Wired për të menduar më shumë përmes decimal,
sepse kjo është ajo që ne jemi duke përdorur për të.
Pra, një mënyrë ju mund të mendoni për atë si katër 1 s eshte e barabarte me 15 në dhjetore.
Dhe 15 në heksadecimal është F. Pra kjo është një mënyrë tjetër ju mund të mendoni nëpërmjet saj.
Po.
>> Audienca: Çfarë është 0x për?
>> CAMILLE REKHSON: The 0x tregon se kjo është heksadecimal.
Pra, ne vetëm vënë atë prefiksin atje, normalisht.
Pyetje të tjera në këtë.
OK, kështu që le të do të përpiqet mënyra të tjera më pas.
Në këtë rast ne have-- vjen keq?
Audienca: [padëgjueshme].
CAMILLE REKHSON: Ne jemi duke shkuar për binar.
Pra, do mënyrë tjetër.
Por në këtë rast, ne kemi 5 dhe A. Pra, nëse ne mendojmë për këtë,
në qoftë se secili prej those-- të 5 dhe A janë që të dy do të përfaqësojnë një pjesë të 4-bit,
se si do të thoni 5 në binar?
>> Audienca: 0101.
>> CAMILLE REKHSON: Po, kështu që është pjesa e 0101.
Dhe pastaj si do ju them një in--
>> Audienca: 10.
CAMILLE REKHSON: Thuaj it-- Na vjen keq?
Audienca: 10.
CAMILLE REKHSON: Yeah, kështu që kjo është pjesa e dytë e saj.
Dhe pastaj, në qoftë se ju vendosni ata të dy së ​​bashku, kjo është
si ju merrni të plotë binar për heksadecimal.
Po?
>> Audienca: Për të ditur se një është 1010, ju keni për të mësuar përmendësh atë?
Ose mund të like--
>> CAMILLE REKHSON: Pra, nëse ju, duke filluar differe-- kështu
kur ju jeni duke kaluar nëpër binar, në thelb binar
ka 0 deri 9 dhe pastaj një përmes F si 16 gjërat e saj.
Pra, nëse të gjithë rrugën 0 për 9-- nëse ju, duke filluar 9 dhe pastaj A, në thelb
nëse kemi konvertuar ajo të dhjetore, A do të jetë si 10, B do të jetë si 11.
Dhe në qoftë se ju mendoni rreth binary 1010 është 8 dhe 2,
sepse ato janë dy vende që shtojnë deri në 10, të cilat
është pikërisht ajo që një është e barabartë me.
Pra, kjo është lloj i lehtë mënyrë për të menduar për këtë.
Pyetje të tjera në heksadecimal.
>> OK, kështu që tani ne jemi duke shkuar për të marrë Një Shiko Në operatorëve bitwise.
Kështu që këto mund të patjetër të dalë në quiz.
Unë e di që ne nuk kemi ka punuar me ta shumë.
Por ne jemi vetëm duke shkuar për të bërë një rishikim pak prej tyre.
Kështu që shpresojmë se këto do të jenë një pak më shumë të njohura për ju.
Kështu gjashtë operatorët e bitwise që kemi janë të listuara këtu.
Dhe ata le të manipuluar bit individuale.
Pra, dhe Operatori është një simbol i vetëm.
A nuk e ngatërruar atë me simbol të dyfishtë,
që është e logjikshme dhe se na lejon të krahasojmë dy gjëra.
>> E vetme dhe është se si ne mund të manipuluar gjërat bitwise.
Pra, kjo na jep rezultatin e 1 qoftë se të dy prej argumenteve që ne jemi duke krahasuar
janë same-- ose janë 1.
Dhe bar vertikale, OSE, do të japë SHBA 1 nëse të paktën njëri prej tyre është 1.
Pra, në thelb pikërisht çfarë fjalë nënkuptojnë.
Dhe, në qoftë se të dy bit janë 1, 1 dhe 1 na jep 1.
Por me ose, nëse është 0 ose 1, ose 1 ose 1, në çdo rast,
ne kemi 1 si një prej tyre.
Pra, atëherë ne do të merrni një 1.
Audienca: Çfarë do të thotë që ai thotë se ajo i jep 1?
>> CAMILLE REKHSON: The rezultat. Lloj, si ju
would-- qoftë se keni kryer 0 dhe 1, rezultat i që do të jetë 1-- ose 0
dhe 1 me rezultatin e që do të jetë 0, sorry.
Po, ajo ishte lloj i rezultat i shprehjes.
Dhe pastaj, ky simbol caret është XOR, ose ekskluzive OSE.
Kështu që do të thotë vetëm një ose saktësisht një nga dy argumenteve është e barabartë me 1.
Dhe pastaj do të ju jap 1.
>> Linja pak squiggly është operatori jo.
Pra, ndryshe nga pjesa tjetër e tyre, që veprojnë në një palë bit,
operatori nuk merr vetëm një grimë, dhe do të rrokullisje atë.
Pra, nëse ju give-- nëse ju bëni NUK 0, kjo do të ju jap 1.
Dhe në qoftë se ju nuk e bëni 1, kjo do të ju jap 0.
Po?
>> Audienca: Cila është diferenca midis ose me një linjë
dhe OR me dy?
CAMILLE REKHSON: Pra, ose me dy linja është OSE logjike.
Pra, kjo është për të krahasuar dy integers plota, ose two--
për të parë nëse gjërat janë të barabartë.
Apo si ta bërë këtë është e barabartë me këtë, OSE kjo është e barabartë me këtë tipit gjë.
Ndërsa bar të vetme ose, është për të bërë gjëra bitwise.
Po.
>> Audienca: Çfarë doni të thoni me bitwise?
>> CAMILLE REKHSON: Pra bitwise është duke punuar drejtpërdrejt me copa në binar.
>> Audienca: Oh, unë shoh.
>> CAMILLE REKHSON: Yeah, kështu që duke punuar me 0 dhe 1 i.
Ne do të bëjmë disa shembuj të kësaj pas, vetëm kështu që nuk është shumë konfuze.
Dhe pastaj dy të fundit janë Left Shift dhe zhvendosja e drejtë.
Të cilat janë në thelb dy më pak se shenja apo dy më të madhe se shenjave.
Dhe ata u zhvendos në bit numri i dhënë i vendeve
që ju jepni atë në drejtim.
Pra, kjo ose do të zhvendoset atë në të majtë, apo të djathtë.
Po?
Audienca: Çfarë është sintaksë për drejtimin?
>> CAMILLE REKHSON: Ne jemi duke shkuar për kalojnë nëpër një shembull, në një të dytë.
Kështu që shpresojmë, që do të ndihmojë.
Çdo pyetje në vetëm çfarë është këtu, më herët, OK.
Pra, duke kaluar disa shembuj.
Le të fillojmë me të dhe ato.
Çfarë do të marrim në qoftë se ne e bëmë 0 dhe 1?
>> Audienca: 0.
CAMILLE REKHSON: OK, dhe në qoftë se ne e bëmë 1 dhe 1?
Audienca: 1.
CAMILLE REKHSON: Po, çfarë nëse ne e bëmë 0 ose një?
Audienca: 1.
CAMILLE REKHSON: Si për 1 ose 1?
Audienca: 1.
CAMILLE REKHSON: OK, si në lidhje me 0 XOR 1?
Audienca: 1.
CAMILLE REKHSON: Dhe 1 XOR 1?
Audienca: 0.
CAMILLE REKHSON: Ju djema janë të mira.
Si për të mos 0?
>> Audienca: 1.
CAMILLE REKHSON: dhe jo 1?
Audienca: 0.
CAMILLE REKHSON: OK, dhe pastaj ky i fundit një është i vogël me zhvendosjen.
Pra, në qoftë se ne fillimisht të vendosur x të jetë 8, dhe atëherë y është x zhvendosur në të majtë 3,
çfarë do që të na japë?
>> Audienca: [padëgjueshme].
CAMILLE REKHSON: Thuaj atë përsëri.
Audienca: [padëgjueshme].
CAMILLE REKHSON: Pra, kjo në fakt na jep 64.
Audienca: [padëgjueshme].
CAMILLE REKHSON: Pra, unë jam vetëm do ta shkruaj këtë deri këtu,
kështu që kjo e bën pak kuptim.
Nëse kemi 2 me 0, 2 me 1, 2 në 2, 2 deri 3 do të jetë 8.
Dhe në qoftë se ne duam të zhvendoset 3 copa më shumë në të majtë, që do të jetë 2 për 4,
2 në 5, dhe 2 me 6, dhe 2 në 6 është 64.
A kjo ka kuptim?
Po.
>> Audienca: A do të ndërrimeve të gjitha 1-së dhe 0-së e numrit binar në the--
>> CAMILLE REKHSON: Po.
Dhe ju nuk do të duhet të shqetësohen mbi quiz në lidhje me këto të qenë negativ.
Ne nuk do të bëjë që të merren me ndërrime negative në asnjë mënyrë.
Çdo pyetje të tjera në lidhje me këtë?
Po.
>> Audienca: Nëse është e zhvendosur në të djathtë, është çdo gjë që wasn't-- çdo gjë që
nuk ishte fillimisht pjesë e sendit 0?
>> CAMILLE REKHSON: Po, ti do të vetëm të shtoni 0-së në në origjinal.
Po.
>> Audienca: Pra, çfarë është ajo 100 zhvendosur në të djathtë tri herë?
CAMILLE REKHSON: 100 zhvendosur në të djathtë,
kështu që do të marrë të gjitha të 1 dhe 0 dhe vetëm të zhvendoset ato
në të djathtë sa herë ju se të zhvendoset në të djathtë.
>> Audienca: [padëgjueshme]?
CAMILLE REKHSON: E pra, 100-- janë ju duke folur për 100 në binar,
ose 100 në decimal?
Audienca: Më vjen keq, 100 në binar.
>> CAMILLE REKHSON: 100 në binar, në qoftë se ju të ndryshojë atë në right--
në qoftë se ju të zhvendoset në të djathtë një herë, ajo do të bëhet 10.
Nëse ju zhvendoset atë në të djathtë dy herë, ajo do të bëhet 001.
Dhe pastaj në qoftë se ju të ndryshojë atë përsëri, ju lloj i humbni pak.
Po, kjo është vetëm 0.
Çdo pyetje të tjera në këtë?
Po.
>> Audienca: Pra, atëherë ajo bëhet 000.
>> CAMILLE REKHSON: Po.
OK, kështu që le të kalojnë nëpër një pak i ASCII matematikë.
Pra, personazhet mund të në thelb të trajtohen si numra të plotë
bazuar në vlerat e tyre të ASCII.
Pra, nëse ne u ul int A është e barabartë me 65, int B barabartë me një plus 1, int char C është e barabartë me
D minus 1, dhe char D është e barabartë me 68, çfarë do të shtypura nga në fund?
>> Pra, ne jemi shtypjen these-- bekoftë ju, duke filluar ne jemi
shtypjen gjitha këto si Chars bazuar mbi përqind C.
Pra, ne jemi në thelb printim vlera karakteri i të katër
prej këtyre variablave.
Si një aluzion, 65 është vlera ASCII e kapitalit A. Ndoshta kjo ka ndihmuar.
Çfarë?
>> Audienca: ABCD.
>> CAMILLE REKHSON: Yeah, kështu që kjo do të shtypura nga saktësisht
ABCD sepse ne kemi vendosur int A barabartë me vlerën ASCII e A.
Pra, nëse kemi shkruar se si një karakter, ne vetëm të merrni kapitalit A,
Një plus 1 do të jetë një B kapital në ASCII.
D minus 1 do të jetë një C kapital në ASCII.
Dhe 68 është vlera ASCII e D. pyetjesh mbi ASCII?
Po.
>> Audienca: Pra, citat shënon rreth A, bën që të ndryshojë një në ASCII?
>> CAMILLE REKHSON: Është uses-- atë Kuotat e vetme count-- rreth A
e bën atë një karakter.
Dhe në qoftë se ju jeni që kanë të bëjnë me në numrin form--
kështu që kur, si në këtë rast, është duke u trajtuar si një int--
atëherë ajo do të merrej me atë është vlera ASCII.
Po.
>> Audienca: A ju rekomandojmë që ne kemi një tryezë të referencës ASCII?
>> CAMILLE REKHSON: Unë nuk think--
>> Audienca: Ose do ai vetëm të merret me këto?
>> CAMILLE REKHSON: Unë mendoj se ne do të bëjë atë me gjëra të lehtë.
Unë nuk mendoj se kjo do të lënduar të shkruani ndoshta
çfarë kapitali Një dhe të vogla A janë, vetëm çfarë ato vargjet janë duke filluar me.
Por unë nuk mendoj se ju duhet të merrni të gjitha hapësirë ​​për të vënë një tabelë e tërë ASCII.
Po.
>> Audienca: Cila është diferenca midis thënë int A dhe char C,
si ju bëni në krye?
>> CAMILLE REKHSON: Pra, kjo është vetëm sa që është ruajtur në kujtesë.
Por ju mund të trajtoni atë as mënyrë.
Ashtu si ne shohim këtu, ne bëjmë të shtypura nga A si një karakter.
Audienca: Pra, kjo është e njëjtë si A?
CAMILLE REKHSON: Po.
Ndonjë pyetje të tjera?
>> Audienca: Pra, për qind C është duke thënë të shkruar një char?
>> CAMILLE REKHSON: Po.
>> Audienca: Pra, edhe në qoftë se një ka vetëm është përkufizuar si një numër i plotë,
nëse ne përpiqemi për të shkruar një char si 65, ajo would--
CAMILLE REKHSON: Ajo do të shkojë në në thelb shkon në tabelë ASCII
dhe merr çfarëdo karaktere në tabelë ASCII për atë 65.
>> Audienca: Ju faleminderit.
>> CAMILLE REKHSON: Po.
Po?
>> Audienca: Pra, nëse ju e bëri% I,% I, Unë%,% unë, do atë vetëm print--
CAMILLE REKHSON: Po, në qoftë se keni kryer të gjitha 4% unë, ajo
do të shtypura nga ASCII vlerat e katër prej tyre.
Ndonjë pyetje të tjera?
OK, kështu që fushëveprimi, në thelb kjo na ndihmon të përcaktojë se ku
një variabël ekziston në programin tuaj.
Pra, ne kemi biseduar për dy të ndryshme llojet e fushës, globale dhe lokale.
>> Në qoftë se një variabël është scoped globalisht, kjo do të thotë të gjithë programin tuaj
ka qasje në këtë variabël.
Dhe në qoftë se ju globalisht Shtrirja një variabël, ju
shpallin atë para funksion tuaj kryesor.
Pra, kjo është bërë e drejtë off bat.
Dhe pastaj e tërë tuaj Programi mund të përdorni atë.
>> Në qoftë se kjo është scoped vetëm në nivel lokal, që ndryshueshme mbyllur në një rajon të veçantë.
Pra, nëse ju të deklarojë brenda një për lak, vetëm se për lak mund të përdorni atë.
Ose në qoftë se ju të deklarojë brenda një funksion të veçantë,
vetëm se funksioni mund të përdorni atë.
Pyetjet për fushës.
>> OK, kështu që funksioni prototyping.
Në thelb sepse C, kur ajo harton, lexon lartë poshtë.
Nëse ju të deklarojë një funksion vonë në kodin tuaj,
përpiluesit nuk e di që ekziston se funksioni.
Pra, ajo që ne përdorim janë prototipa, e cila në thelb tregojnë përpilues,
ky funksion ekziston, shkoni shikoni për atë më vonë në kodin.
Kështu që mënyra që ju të bëni një prototip funksion
është pikërisht se si ju filloni off shkruar një funksion.
Ju jepni llojin e kthimit, emri i funksionit,
dhe pastaj çdo argumente se se funksioni merr.
>> Pra, për të parë në një shembull të shpejtë, në këtë lendes funksionin tonë që ne jemi duke përdorur këtu
është në thelb një funksion fuqi e tretë.
Pra, duke marrë në një numër të plotë dhe kthyer kubike e asaj numër të plotë.
Pra, për shkak se ne kemi shkruar se Funksioni nën funksionin kryesor,
dhe ne duam të përdorim Prodhimi i that-- ose ne
dua të atë funksion në funksion tonë kryesor,
ne kemi vënë rrugën e saj prototip në krye programit tonë.
Dhe atëherë kur ne e quajmë ajo në funksion tonë kryesor,
përpiluesit e di se se funksioni është shkruar më vonë, dhe do të shkoni të shikoni për të,
dhe do të përdorin atë siç duhet.
Pyetjet për prototyping?
Po.
>> Audienca: Pra, çfarë është pika?
Unë nuk do të marrë pikën e prototyping.
Pse jo vetëm të ketë atë atje?
>> CAMILLE REKHSON: E pra në qoftë se është këtu poshtë, atëherë kur
që ju të merrni të vijë kubike e x në funksion tuaj kryesor,
përpiluesit do të ketë asnjë ide se funksioni kubike në fakt ekziston.
>> Audienca: nuk mund të ju vetëm vënë atë në frontin?
>> CAMILLE REKHSON: Është e Praktika më e mirë coding
për ta vënë atë në funksion tuaj kryesor.
Pra, kjo është arsyeja pse ne do bëjë prototyping.
Vetëm për shkak se, në qoftë se ju kishte një shumë të funksioneve,
ajo do të jetë me të vërtetë i çrregullt për lexuar nëpër të gjitha këto funksione
Para se të merrni në mishin e programit tuaj.
Po, dhe keni pasur një q--
>> Audienca: Pra, është deklaruar ndryshueshme tuaj deri në krye
kështu që ju mund të hyni në atë, e bëjnë atë një ndryshore globale?
A është kjo e ngjashme me këtë ku është e deklaruar atë
atje lart, në mënyrë që ajo e di se ajo do të hyni në atë më vonë
dhe ju mund ta përdorni atë?
>> CAMILLE REKHSON: Po.
Po.
>> Audienca: Duhet the-- ndonjë shtesë Funksionet e keni krijuar çelësin jashtë
e këtë gjë, or--
>> CAMILLE REKHSON: Po, në qoftë se ju jeni krijimi tjera kryesore functions--
në vetvete është function-- kështu që nëse ju jeni duke krijuar funksione të tjera,
ata duhet të jenë jashtë.
Po?
>> Audienca: Çfarë është qind D?
CAMILLE REKHSON: Përqindja D është e njëjta gjë si për qind I.
Ajo i referohet një numër të plotë.
Po.
>> Audienca: Pra, çfarë është vepër int main?
Çfarë ishte ajo e pavlefshme?
CAMILLE REKHSON: Void thotë ajo merr në pa argumente.
Audienca: [padëgjueshme].
CAMILLE REKHSON: A mund të flasin një Louder pak, keq?
Audienca: Po, më vjen keq, përse ju vënë të pavlefshme për një të parë,
dhe pastaj int kontribut për një të dytë?
CAMILLE REKHSON: Oh, sepse të dy different-- për funksionin kryesor
kundrejt funksion kubike?
Pra, në funksion kryesor, ne përdorim pavlefshëm për shkak se ka
ka parametra të marra në.
Ndërsa në kubike funksion, ne kemi një kontribut.
Kjo është arsyeja pse ajo thotë se int, të dhëna, sepse ka argumente që ne jemi
duke marrë në për të drejtuar funksionin tonë.
Po.
A ka pyetje?
>> OK, dhe pastaj shpejt lundrues-pikë pasaktësi.
Pra, ne kemi pafundësisht shumë numra reale.
Por ka vetëm një numër i caktuar i bit
që ne mund të përdorim për të shfaqur ato numra, dhe përfaqësojnë ata.
Pra, atëherë ne fund me disa pasaktësi.
Dhe numrat e juaj nuk do të gjithmonë të jetë mjaft saktësisht çfarë
ju mendoni se ata janë kur ju jeni që kanë të bëjnë me lundrues-pikë.
Kjo është vetëm diçka e mirë për të dini.
Pyetje për këtë?
Po.
>> Audienca: A është kjo duke iu referuar me idenë e bit fryhen
që ishte në leksion?
Ishte kjo diçka e ndarë?
>> CAMILLE REKHSON: Ata janë krejtësisht të veçantë, vërtet.
OK, e madhe.
Pulak Goyal: Hi, të gjithë.
Emri im është Pulak, dhe unë do të të jetë duke shkuar mbi pointers.
OK, kështu që le të parë think për atë që e kujtesës duket si.
Kështu si ju mund të shihni këtu, të kujtesës dhe ndajmë atë
në një bandë e blloqeve.
Dhe ne referim çdo bllokuar nga një adresë, e drejtë?
Dhe ka njeri të mbani mend se çfarë lloji i simbol ne përdorim për të treguar një adresë?
>> Audienca: Hexadecimal, 0x.
>> Pulak Goyal: Hexadecimal, e drejtë?
Pra 0x do të thotë që ne jemi duke folur për heksadecimal.
OK, kështu Si mund të krijojmë pointers?
Pra, ne kemi marrë llojin, ne vënë it-- shtoni një yll në të,
dhe pastaj shtojmë emrin e ndryshueshme.
Pra, shembujt që kemi parë janë int Ylli x, y yll char, dhe noton fillojnë z.
Pra, kur unë them yll int x, mund dikush të më thoni
Çfarë unë jam lloj të folur për atje?
>> Audienca: Vendndodhja e diskut.
>> Pulak Goyal: Na vjen keq, çfarë?
A mund të përsëris se?
Audienca: Vendi i disk.
>> Pulak Goyal: Pra actually-- kështu çfarë Unë do të thotë, është kur ne kemi int yll x,
ne jemi duke thënë është krijuar një akrep, dhe ajo
mund të ruajë adresën e një variabël kjo është një int, e drejtë?
Pra me y yll char, ne jemi duke krijuar një akrep
që mund të ruajë adresën e një variabël që është një char.
Kështu që e bëjnë kuptim për të gjithë?
OK, të ftohtë
>> OK, kështu që me pointers, ka dy operacione të rëndësishme që mund të bëjmë.
Ka referenca, dhe Ka dereferencing.
Po?
>> Audienca: A mund të shkoni pak më ngadalë?
>> Pulak Goyal: Sigurisht.
Po, so-- Po, të bëni pyetje si unë shkoj së bashku në qoftë se ju, duke filluar në qoftë se diçka është e paqartë.
Pra, ne kemi referenca dhe dereferencing.
Pra, kur ju doni të merrni adresën e një ndryshore, atëherë përdorni simbol të.
Pra, le të thonë se unë kam shpallur int x diku.
Dhe unë dua të të marrë adresën e që dhe të kalojë atë në, unë do të bëj ampersand x.
Dhe kur ju doni të merrni Vlera e lidhur me një akrep,
ju përdorni dereference operator, i cili është një yll.
>> Kështu që lejon të thonë se unë kam int yll x, dhe Unë kisha atë duke treguar për diçka.
Nëse unë dua të të marrë vlerën e asaj që është treguar, unë do të vetëm të bëjë yll x.
A është kjo e qartë?
Ndonjë pyetje në lidhje me këtë?
Po.
>> Audienca: Pra në përgjithësi, ju nuk do të jetë në gjendje të bëjë në x dhe yll
x me të njëjtin x.
Është e saktë?
Sepse nëse x është një ndryshueshme, atëherë ju keni
për të bërë në x për të marrë se kjo është një akrep.
Por në qoftë se x është një tregues, atëherë ju keni nevojë për për të bërë yll x për të marrë ndryshueshme.
>> Pulak Goyal: Po, kështu që Pyetja ishte rreth kur
bëjmë ne përdorim një star-- kur do të ju përdorni yll,
dhe kur ne përdorim simbol, dhe mund të kemi
e përdorin atë me të njëjtin lloj të variabël?
Pra, zakonisht, nëse ju keni, për shembull, një int x,
ju më së shumti do të jetë duke përdorur simbol për të marrë adresën e që.
Për shkak se ajo nuk ka të bëjë kuptim për respekt në x.
Ndërsa, nëse do të kishim yll int x, ju do të jetë duke përdorur operacionin dereference
sepse kjo do të kishte asnjë kuptim për të përdorur në x në këtë rast.
A kjo ka kuptim?
>> Audienca: Pra, ju nuk mund të dhe, dhe pastaj nje tregues?
Pulak Goyal: Pra ju teknikisht, në të vërtetë
mund të bëjë zëvendësojeni e një akrep.
Por kjo është nga të Shtrirja e kësaj klase.
Për purpose-- për djemtë tuaj ' qëllime, sa herë që ju keni pointers,
ju doni të përdorni operatorin dereference për të marrë vlerën e shoqëruar me atë.
Dhe kur ju keni të rregullt variabla, si një int x,
ju doni të përdorni simbol të Operatori për të marrë adresën e që.
NE RREGULL?
>> OK, kështu që le të shohim në pointers dhe se çfarë ndodh nën kapuç.
Pra, gjëja e parë që kam bërë këtu është deklaruar int x është i barabartë me 5.
Adresa e kësaj variable është 0x04, dhe vlera është 5.
Pra, le të shohim se çfarë ndodh me linjë tjetër.
Pra, tani që ne të deklarojë një akrep.
Adresa e saj është 0x08, dhe e saj Vlera është adresa e x.
A ka që e bëjnë kuptim për të gjithë?
Ndonjë pyetje në lidhje me këtë?
>> OK, dhe tani le të shohim se çfarë ndodh me linjë tjetër.
Pra, me këtë linjë tjetër, ne kemi adresa e kopje të qenë 0x10,
dhe vlera e saj është 5.
Pra, arsyeja që ne mori pesë është e thamë, ne dereference
akrep, të cilat ne deklaruar një yll int.
Dhe kështu went-- kur ne dereference saj, ajo tha: OK, ajo që është në slot 0x04.
Dhe ajo shkoi në atë.
Dhe çfarë x është një x0-- 0x04, dhe vlera është 5.
A ka kjo kuptim?
Po?
>> Audienca: Pse është adresa kopja e vetëm 4 bytes mësipërme x akrep?
>> Pulak Goyal: Po, ky është një gabim on--
>> CAMILLE REKHSON: Pra, po, mbani mend kjo është e shkruar në heksadecimal.
Pulak Goyal: Oh, po.
CAMILLE REKHSON: Pra kjo në fakt është 8 dhe pastaj 16
sepse kemi thënë se: tregues, mos harroni,
në IDE tonë do të jetë 8 bytes gjatë.
Pulak Goyal: Po.
Pra, vetëm të jetë i qartë, pointers janë 8 bytes gjatë.
Një int është 4 bytes.
Pra, arsyeja pse çfarë kërceu nga 0x04 0x08 në
është për shkak se kemi pasur për të bëjë një kërcim prej 8 bytes.
Dhe pastaj for-- që prej Kopja është vetëm një int,
është 4 bytes, e cila është gjysma e 8 bytes.
Pra, ne vetëm të hidhen në 0x10, cila është dy larg nga 0x08.
Ndonjë pyetje të tjera?
OK, let's-- vërtet?
>> Audienca: Pse nuk është e vlera e kopjes int
vetëm the-- pse është 5 në vend të 0x04?
>> Pulak Goyal: OK, pse është 5?
OK, kështu që kur the-- kështu që le të parë mendojnë për këtë në aspektin e llojeve.
Kështu që unë jam duke thënë kopje int është e barabartë me yll tregues.
Pra, çfarë është lloji i akrep?
Ai është një yll int.
Dhe kur unë dereference se, lloji bëhet një int.
Pra, ajo që ne presim për të ruajtur këtu është në fakt një int.
A ka kjo kuptim?
Audienca: Sigurisht, pak.
Pulak Goyal: Pra, zakonisht kur ju mendoni se në aspektin e llojeve,
ajo ju ndihmon të kuptoni se çfarë është lloji i vlerës që duhet të shkojë atje.
Kështu që ju mund të zakonisht përjashtojnë shumë nga këto gabime të zakonshme
nga të menduarit në aspektin e llojeve.
Më lejoni të shkoj nëpër një pak më shumë slides.
Dhe ne mund të merrni në pyetje fundi i seksionit tregues.
OK, kështu që ne kemi një program buggy këtu.
Dhe kështu ka anyone-- dikush mund të them mua se çfarë është e gabuar me këtë program?
E drejtë, kështu që ajo që ne jemi duke pritur për të bërë këtu
is-- ajo që ne duam të bëjmë është marrë int ndryshueshme x
dhe të kthehet it-- bëjnë të barabartë me 5 në vend të 3 dhe pastaj të shtypura atë.
Por kjo nuk po ndodh.
A mund dikush të më thoni pse?
Po?
>> Audienca: Kur funksioni to_five merr x si është argumenti,
ajo nuk ka marrë x vete, por në vend që krijon një kopje, një, të saj.
Dhe kjo formon operacione në atë.
Por për shkak të kësaj, ju nuk e bëni të ndryshojë vlerën aktuale të x.
Që ju jeni [e padëgjueshme].
>> Pulak Goyal: E drejta, e drejtë, kështu që kur ne e quajmë
to_five funksion, çfarë ne jemi duke bërë është duke menduar,
më jepni një kopje të Vlera për atë funksion.
Se funksioni, atëherë, po shkon dhe duke bërë disa manipulime.
Por sapo ajo kthehet, është tani jashtë e fushës së funksionit kryesor këtu.
Dhe kështu x është ende, në fakt, e barabartë me 3, dhe ne printuar 3.
OK, kështu që le të shohim se si ndodh kjo.
>> OK, kështu që nuk ka asgjë të deklaruar.
Pastaj, ketu, x është e barabartë me 3.
Dhe tani ajo is-- në pozicionin e dy, një ende nuk është në fushëveprimin.
Dhe tani ne do të shkojmë në pozicionin tre, ku një tani merr vlerën e 3.
Në katër, ne tani të ndryshojë një në 5.
Por tani, kur hidhen përsëri në pesë, që është deklarata e shtypura,
një është tani jashtë fushës.
Dhe x është ende e barabartë me 3.
A ka kjo kuptim për të gjithë?
OK, kështu që tani le të flasim rreth asaj se si ne mund të përdorim pointers për të rregulluar këtë.
A ka dikush ndonjë ide se si ne mund të rregullojmë këtë duke përdorur pointers?
>> Audienca: Ju merrni në një yll int në vend të një int për to_five.
>> Pulak Goyal: Na vjen keq, mund të flasin?
>> Audienca: Ju merrni në një yll int në vend të një int për to_five.
Pulak Goyal: OK, po.
Pra, le të pass-- në vend të kalimit të vetëm vlera, le të kalojë atë duke iu referuar.
Ky funksion i ri, e drejtë?
Dhe kështu duke kaluar adresën në, Ne mund të bëjnë manipulime në adresën.
Dhe kështu që ne jemi në fakt, në fakt, duke ndryshuar x.
Pra, le të shohim se si punon kjo.
>> OK, kështu që në këtë shembull ne caktuar atë.
Ne kemi ndryshuar firmën tonë i to_five për të marrë në një int
yll në vend të vetëm një int këtu.
Pastaj ne dereference këtë një dhe të caktojë 5 të saj.
Dhe tani kjo do të, në fakt, të shtypura 5.
Pra, le të shohim se si hapat punojnë këtu.
>> Pra, me hapin e parë, nuk ka asgjë të shpallur ende.
Kështu që këtu, me hapin e dytë, kemi thënë x është e barabartë me 3,
por një është ende jashtë fushës.
Tani nga linja e tretë, ne kemi x është ende e barabartë me tre.
Dhe tani, ne kemi kaluar in-- çfarë është ruhet në një tani është adresa e x.
A ka që e bëjnë kuptim për të gjithë, se si ne e mori atë?
E drejtë, ne kemi amper-- që është si kemi kaluar simbolin komercial x të funksionit
to_five.
Dhe pastaj në rreshtin tjetër, çfarë ne bëjmë, është që ne dereference një.
>> Dhe nga dereferencing një, ne jemi në gjendje për të ndryshuar vlerën e x nga 3 deri në 5.
Sepse x jeton në atë 0x12 adresën.
Dhe pastaj, në fund, kur ne të kthehen prapa në kryesore,
edhe pse kjo është një tani jashtë fushëveprimi, ne kemi, në fakt, ndryshoi x.
Dhe kjo është 5.
Çdo pyetje në lidhje me këtë?
Po?
>> Audienca: A mund të më thoni çfarë simbol x ishte?
Mendova simbol ishte si dhe.
>> Pulak Goyal: Po, kështu që ne përdorim të njëjtën gjë Simbol për shumë gjëra të ndryshme.
Kështu që këtu, kur ju have-- në këtë rast, kur ju keni,
I guess-- kështu që në këtë rast, kur ju jeni që kanë të bëjnë me pointers,
kur ju vënë simbol të para e një int, një int ndryshueshme, ose një char,
ose një rrjedhë, çfarë ju jeni duke thënë është, më jepni adresën e kësaj.
Por ajo që ju u menduar për të, kur të tjerët ju do të përdorni zëvendësojeni është, le të themi,
në një në qoftë se deklarata.
Ju keni një të vërtetë, dhe disa variabla që të vlerësojë në një farë Boolean,
dhe disa variabla të tjera që provoj disa Boolean
dhe ju doni të merrni dhe të atë.
Pastaj ju do të përdorni simbol të.
SPEAKER 1: Yeah, kështu që vetëm sot, ne kemi biseduar rreth tre përdorime të ndryshme
i simbolin komercial.
Ne kemi dy ampersands, i cili është çfarë Pulak ka përshkruar vetëm.
Ne kemi një simbol të, e cila është ajo që Camille përshkroi
parë, i cili është një simbol.
Dhe kjo është për bitwise DHE.
Dhe vini re se dy AND-- kushtëzuar ose, sorry,
logjike DHE dhe bitwise DHE, ata kanë dy numra, e drejtë?
Ajo ishte diçka simbol diçka simbol,
diçka diçka simbol.
Këtu, kur ne vetëm duhet simbol të diçka, që është dereferencing.
>> Pulak Goyal: Po, pyetje e madhe.
Po.
>> Audienca: Pse në linjë 5a dhe yll një bëhet N / A?
Pse nuk e ata vetëm lloj i ruajnë Vlerat e njëjtë nga rreshti i mëparshëm?
>> Pulak Goyal: Sepse ne kemi dalë nga funksioni.
Dhe kështu çfarë happens-- kështu what-- tani që ne jemi
jashtë fushës së këtij funksioni, çfarë ndodh në fakt
është ata janë hequr nga memoria.
Po.
>> Audienca: Midis 3 ose 4 yje një është e barabartë me 5.
Pulak Goyal: Po.
Audienca: Çfarë do që pikërisht treguar?
Pulak Goyal: Çfarë do të thotë kjo?
Audienca: Po.
Pulak Goyal: Pra, Pyetja ishte, ajo që është
that-- çfarë jeni duke bërë në internet kur themi, ylli është e barabartë me 5?
Pra mbani mend Star Operatori dereference.
Pra, kur një, në këtë rast, është një akrep.
Është një yll int.
Pra, kur ne dereference akt duke përdorur yll, ajo që ne jemi duke thënë
po, shkoni në çdo gjë që është ruajtur në adresa, ruhet në a-- aq take-- kështu një,
tani, ka disa Adresa e ruajtura në të.
Go to se ku pikat drejtohet, dhe tani ndryshojë çfarëdo që është në pesë.
Po.
>> Audienca: A mund të thoni në terma të thjeshtë?
Të ndryshuar adresën e një në 5.
>> Pulak Goyal: Ne nuk jemi ndryshuar adresën e një në 5.
A ka disa address në të, i cili është Adresa e variablit të interesit.
Dhe kështu që ajo që ne jemi duke thënë kur ne dereference është,
tani ne duam të change-- ne jemi tani referenca
Interesi direkt variablit së.
A kjo ka kuptim?
>> SPEAKER 1: Një tjetër mënyrë për të menduar e ajo është go-- kështu që një është një adresë.
Ylli thotë të shkojnë në atë trajtuar dhe të kërkoni në vlerën e saj.
Dhe tani të vendosur vlerën e saj në 5.
Pra, ajo thotë, të shkojnë në adresa e X, të cilat
do të jetë ajo që është ruajtur në një, dhe për të ndryshuar atë në 5.
Pulak Goyal: Po?
Audienca: Pra, pozita është ku treguesin po shkon, adresën.
Por vlera është një caktuar vlera e bazuar në adresën.
Pulak Goyal: Po.
Çdo pyetje të tjera në lidhje me këtë?
Audienca: Unë kam një pyetje.
Pulak Goyal: Po, sorry.
Audienca: Pra, kur ju store-- kështu në qoftë se ju jeni duke thënë [e padëgjueshme] a.
Pulak Goyal: Po.
Audienca: A keni të dyqan x me simbolin komercial?
Pse nuk mund të ju them vetëm x para int tuaj [e padëgjueshme]?
Pulak Goyal: So--
Audienca: [padëgjueshme].
Pulak Goyal: Pra, është question-- juaj oh.
Pra, pyetja juaj është, pse nuk mund të we-- në to_five funksionit, pse nuk mund të kemi
vetëm të kalojë një x, apo jo?
>> Audienca: E drejta.
>> Pulak Goyal: OK, po, kështu që kjo përsëri shkon prapa në diskutimin tonë mbi lloje.
Pra to_five funksion është tani në pritje të një lloj ylli int.
Pra, çfarë është lloji i X?
X është vetëm një int.
Por ajo që ky funksion pret është një yll int.
Pra, ajo pret një variabël që ka një adresë të depozituara në të.
Pra, kjo është se si ju, duke vënë simbol, dhe kështu që kjo është
se si ne të kalojë në adresa, e cila është now--
dhe që interpreton se si një yll int, po.
Pyetje e madhe.
Çdo pyetje të tjera në këtë?
OK, i ftohtë.
>> OK, kështu që tani le të flasim për akrep aritmetikë.
Kështu që këtu, duke shtuar dhe zbritur I rregullon akrep
nga unë herë më i madh lloji i bytes akrep.
Pra, le të shohim se si ajo duket si.
Kështu që këtu, ne kemi deklaruar int x është e barabartë me një 5.
Dhe tani ne jemi duke shkuar për të deklaruar një akrep y, dhe të kalojë në adresën e x atje.
Pra, ne kemi atë.
Pra, x është ruajtur në 0x04.
Kështu tani y është e barabartë me këtë.
Dhe mund dikush më tregoni se çfarë ata mendojnë do të ndodhë kur ne bëjmë y plus barabartë 1?
Po?
>> Audienca: A do të ndryshojë në 0 herë 0 8?
>> Pulak Goyal: Madhësia, dhe type--
>> Audienca: Ju jeni duke lëvizur adresën.
Pulak Goyal: Po kjo was-- po.
Drejtë So--.
Pra, kjo do të ndryshojë në 0x08.
Dhe because-- kështu që ju do të përdorni këtë formula, 1 herë madhësia e akrep
dhe pointers janë të size--
>> [STUDENTËT shushurimë]
>> Pulak Goyal: E drejta.
>> [STUDENTËT shushurimë]
>> SPEAKER 1: Pra, lloji që pikat Pointer to--
>> Pulak Goyal: A është, vërtet, Po, kjo është 4 bytes.
>> SPEAKER 1: Pra Ints janë 4 bytes.
>> Pulak Goyal: Pra, nëse do të kishim a-- le themi deklaruar, unë mendoj, një char.
Çfarë do të that-- kështu që le të themi se kanë x char të barabarta për një apo diçka.
Dhe ne kishim adresën e që në 0x04, çfarë do të y plus barabartë 1 bëjmë tani?
Me fal, cfare?
>> Audienca: 0x05.
Pulak Goyal: 0x05, e drejtë.
A të gjithë të shohin se?
OK, dhe tani le të thonë se kjo është një noton.
Çfarë do të ndodhë?
Çdokush?
Pra, gjithandej janë si shumë bytes?
>> Audienca: 4 bytes.
>> Pulak Goyal: E drejta.
Pra, kjo do të jetë e njëjta gjë si kjo.
Ftohtë.
OK, dhe tani le të flasim për pointers dhe vargjeve.
Pra, ju e panë këtë në dy grupe mëparshme P,
ku ne mund të treat-- vargjeve kështu dhe pointers nuk janë e njëjta gjë.
Por ne mund të trajtojë e vargjeve si pointers.
Kështu që këtu, ne kemi këtë koleksion këtu, e cila ka tre lojëra elektronike.
Në kemi parë slot-- kanë një, dy dhe tre.
>> Pra, nëse we-- kështu që ne mund të caktojë se duke thënë, ne kemi rrjet,
dereference se.
Dhe atëherë kur ne dereference se, ajo që ne jemi të vërtetë duke bërë
është e referuar në të njëjtin çarë.
Pra grup yll është e barabartë me 1.
Ne could- si mund kemi shkruar that-- çfarë është
një mënyrë alternative ne mund të shkruani se?
>> Audienca: Array 0 barabartë 1.
>> Pulak Goyal: Pikërisht, bën të gjithë të shohin se?
Pra, e njëjta gjë me këtu.
Pra, kur ne kemi rrjet plus 1, ne do-- kështu even--
mos harroni me aritmetikë që ne vetëm biseduar rreth, kur ne bëjmë plus 1
ose të lëvizin atë përsipër nga 4 bytes, e drejtë.
A të gjithë të shohin se?
Dhe kjo anë, kur ne dereference se, ne mund të vënë atë në 2.
Dhe kjo është se si ne kemi vendosur bllok tjetër për 2.
Dhe kështu një mënyrë alternative për të shkruar që gjithashtu do të jetë array kllapa
0 kllapa është e barabartë me 1.
>> Audienca: A keni nevojë kllapa?
>> Pulak Goyal: Po, sepse ju jeni dereferencing tërë sasinë
array plus 1.
OK, dhe e njëjta gjë për grup plus 2.
Çdo pyetje në lidhje me këtë?
Po.
Audienca: Pra array është vendosur automatikisht me 0?
>> Pulak Goyal: Array is-- Na vjen keq, çfarë?
>> Audienca: Array është 0.
Adresa e array është vetëm 0.
>> Pulak Goyal: Pra pyetja ishte, është adresa e grup vetëm 0?
Pra, jo, array ka disa adresa.
Pra, kur ne dereference saj, that's-- kështu që ju mund të mendoni? Për
fjalë për fjalë si një duke treguar akrep në fillim të një grup.
Kështu që ka disa adresa.
Ne nuk e dimë se çfarë është.
Por, kur ne dereference të, ne e dimë ky është fillimi i vektorit.
Dhe kështu, kur ne shkojmë nga 1, ne jemi vetëm duke lëvizur
në lidhje me ku se adresa ishte.
Ndonjë pyetje të tjera?
Po?
>> Audienca: Pra, nëse ju bëni array kllapa plus 1--
Pulak Goyal: Na vjen keq, I-- mund të flasin?
Audienca: Po, në qoftë se ju bëni array kllapa [e padëgjueshme].
Prandaj, nëse ju vendosni të pointer--
Pulak Goyal: Na vjen keq, unë nuk mund të dëgjoni ju.
Mund të them atë një herë më shumë?
>> Audienca: Ju jeni OK.
>> Pulak Goyal: OK, Na vjen keq.
OK, i ftohtë.
Any-- vërtet.
Pra, kur ju shkoni në array kllapa 3--
>> Pulak Goyal: Po.
>> Audienca: --isn't there-- nuk do të jetë katër njolla si 0, 1, 2 dhe 3?
Pse është mos int array 2?
>> Pulak Goyal: Jo, kështu që vetëm konventa e C is-- kur ne shpallim array,
we-- numrin kemi vënë atje është sa slots duam.
Por indekset e vektorit janë në fakt array 0, array 1, dhe array 2.
Pra, kjo është vetëm konventa se si ne shpalljen e vargjeve.
Po, ndonjë pyetje tjetër?
Po.
Audienca: Pra, ne jemi ende duke folur për pointers, e drejtë?
Pulak Goyal: Po.
Audienca: Mund të ju ende bëni yll për array 0 është e barabartë me 1?
Pulak Goyal: Jo, jo, so-- OK, kështu që pyetja ishte e mundur
ju vetëm bëni yll kllapa array zero, dhe pastaj thotë se barabarte me 1.
Pra, jo, ajo që ne jemi duke thënë këtu është se ne mund të think--
ne mund të trajtojë e vargjeve si pointers.
Pra, ne have-- ajo që ne jemi duke thënë se është ne kemi dy mënyra
tani referencë në të njëjtin bllok.
Pra doing-- nëse keni rrjet zero, llojin e që tani është një int.
Dhe në qoftë se ju merrni yll që, që ju të merrni një gjë e pavlefshme.
Pra, ajo që ne jemi duke thënë se këtu është ka dy mënyra alternative
t'i referohemi bllokut të njëjtë.
Ju ose mund të bëni array kllapa 0 është e barabartë me 1.
Ose ju mund të bëni dereference grup, dhe kanë që të barabartë me 0.
Pra, vetëm dy mënyra të duke bërë të njëjtën gjë.
Po.
>> Audienca: Pse nuk është ajo Madhësia e int 1 të shtuar to--
>> Pulak Goyal: Madhësia e int 1.
>> Audienca: Sepse kjo është në lëvizje një off.
>> Pulak Goyal: Sepse kjo është vetëm mënyrë C funksionon.
Kjo është vetëm mënyrë akrep aritmetik është përcaktuar.
Ajo do të marrë treguesin.
Dhe pastaj çdo gjë që ju të shtoni për të, ajo do të shumohen se
nga madhësia e çfarëdo dyqan tregues është, vërtet.
Po.
>> Audienca: Pra, ju thoni që ne mund të trajtojmë pointers dhe vargjeve të njëjtë,
por se ata janë të ndryshëm.
Pra, ajo që i bën ata të ndryshëm?
Çfarë nuk mund të bëjë të me një por jo tjetri?
>> Pulak Goyal: Për qëllime të këtij klasë, unë mendoj it's-- çfarë ju, duke filluar
>> SPEAKER 1: Pra, we-- OK, kështu që, për shembull, në qoftë se ju të ndajë kujtesës
dhe ju keni një tregues për një numër i plotë, për shembull.
Në qoftë se ju u përpoq për të filluar duke bërë pointer aritmetikë
dhe shkojnë përtej sasinë e kujtesës që ju ndahen, ju do të kandidojë në gabime.
Ne e dimë me vargjeve, ne them para kohe, OK, unë
dua të allocate-- kjo në thelb thotë, unë dua të ndajë
hapësirë ​​të mjaftueshme për tre integers.
Dhe kështu që tani ne mund të trajtojnë kujtesën sikur ne kemi të gjithë këto tre integers.
A këtë lloj kuptim?
>> Pulak Goyal: Po.
Po.
>> Audienca: Pra, një yll array, është se caktimin e 1
në indeksin e vektorit 0?
Pulak Goyal: Po.
>> Audienca: Pra, çfarë është pas dy linja ardhshme në drejtim të the-- I
e kuptoj se ju jeni duke u përpjekur për të përdorur akrep aritmetike këtu,
por përsëri, unë nuk e kuptoj çfarë pointer aritmetikë është.
Pra array plus 1, ju jeni duke thënë se ju jeni tani
do të dua të flas për indeksi i parë në grup.
>> Pulak Goyal: E drejta, dhe kështu Arsyeja që punon është grup,
këtu, ne mund të mendoj si një yll int.
Dhe kështu, kur ne nuk treguesin aritmetike në të, kujtojmë formulën ku
ne kemi marrë the-- I guess çfarëdo adresa e tanishme është:
dhe pastaj kur i shtojmë 1 në të, ne fakt
shumohen 1 nga madhësia e gjë ne jemi duke manipuluar.
Pra, në këtë rast, madhësia e një int.
Dhe pastaj ne të lëvizin atë përcjellë nga kjo shumë.
>> SPEAKER 1: Pra pretendojë ju keni yll array b.
Pulak Goyal: OK, po.
SPEAKER 1: me dorën tuaj.
Shko këtu.
Pulak Goyal: Ose unë mund të just-- vërtet.
OK kështu here--, kështu pozicion para fillim, është vetëm e drejtë këtu.
Pra, kur ne dereference grup, ishim vetëm duke iu referuar bllokun e parë këtu.
Por tani, kur unë bëj rrjet plus 1, që is-- këtë shigjetë tani është e drejtë këtu.
A kjo ka kuptim?
E drejtë, sepse ky bllok është e madhësisë int, e cila është 4 bytes.
Dhe kështu, ajo që ne po bëjmë është që ne jemi që lëviz kursorin me 4 bytes më shumë.
Sa herë që ne bëjmë aritmetikë mbi të, ajo gjithmonë do të
lëvizur atë nga increments prej 4 bytes.
Sepse kjo është si një yll int.
A ka kjo kuptim?
NE RREGULL.
>> Audienca: Pra, gjërat në grup ishin 5 bytes, ne do të lëvizin atë 5 bytes--
>> Pulak Goyal: E drejta, kështu që nëse do të kishim një Ylli char, ne do të lëvizin atë nga vetëm 1 bajt.
Pra, në rastin e yjeve char, ajo do të jetë vetëm lëvizin atë përsipër nga 1.
Audienca: Për të marrë tjetër ju keni nevojë për një yll.
Pulak Goyal: Po, po, bën që ka kuptim?
SPEAKER 1: Ne mund të bisedojnë në lidhje me të më vonë.
Pulak Goyal: Po, po, me siguri.
OK, i ftohtë.
Le të lëvizin për në pjesën tjetër.
SPEAKER 1: Oh, OK ftohtë.
Po, kjo është më.
Të gjithë të drejtë, i tmerrshëm.
OK, i ftohtë, kështu që tani ne jemi në një nivel pak shumë informacion të përgjithshëm në lidhje me kujtesën.
Gjithashtu, unë vlerësoj faktin që ata ishin duke shkuar shumë shpejt.
Kjo është një shumë e materialit të marrë përmes në një orë e gjysmë.
Por nëse ka ndonjë temat që ju duan të shkojnë më shumë në thellësi në,
ne do të kemi orarit të punës këtë javë
ku ju mund të bisedojnë me ne një mbi një.
Ose ju mund të vijë vetëm deri në nivel fund dhe ne do të bisedojnë për gjërat.
Dhe si gjithmonë, të ndjehen të të lirë të bëni pyetje.
Mbresëlënës.
Kështu që këtu është foto tonë të kujtesës që ne kemi parë në leksionin një miliard herë.
Dhe ne e dimë se kjo rafte rritet nga fundi
dhe tog rritet poshtë.
Dhe çfarë është dallimi në mes gjërave që ne të zbatojmë në grumbull dhe gjëra të
që ne të zbatojmë në rafte?
Dikush hedhin diçka atje.
Po.
>> Audienca: A është rafte për gjëra që janë vetëm
Variablat fiksuar se ne jemi vetëm deklaruar përdorur funksione të caktuara?
SPEAKER 1: Bukur, po.
Pra, në çdo kohë, ku, le të thonë se ne jemi në një funksion,
dhe ne vetëm kemi disa variabla lokale.
Ata do të përfundojë deri në rafte.
Në qoftë se, në vend të kësaj, ne e quajmë malloc dhe në fakt të siguroj kujtesë,
që gjithmonë vjen nga plehrat.
Pra, vërtet Best?
>> Dhe kështu mos harroni se çdo kujtim që ju të ndajë përdorur malloc,
që do të përfundojë deri në grumbull.
Dhe në qoftë se ju harroni të ajo lirë, kompjuteri-së
nuk do të dinë se ju jeni bërë me të.
Pra, kjo është vetëm do të rri atje në kujtesën.
Dhe ju jeni në thelb rrjedh se kujtesës.
Ju jeni të humbur atë.
Sepse ju kurrë nuk tha kompjuter, hej unë jam bërë duke e përdorur atë, të ndjehen të lirë për të përdorur,
vënë gjëra të tjera atje.
Ftohtë.
Çdo pyetje atje?
Po.
>> Audienca: Pra, çfarë lloji e kujtesës është rafte?
Ushqim jo dinamik, i deleguar?
Çfarë do të thërrasë atë?
>> SPEAKER 1: Sigurisht, kështu që ju mund të të mendojnë për atë si ndryshore lokale.
Thirrjet aktuale për funksionet do të rafte.
Ndonje gje tjeter?
Po?
Audienca: Si mendoni ju falas memorie ju shtuar në the--
SPEAKER 1: Sigurisht, kështu që kur ju të ndajë kujtesës në grumbull, ju e quani malloc.
Dhe kështu që atëherë që ju jep përsëri një treguesin në një adresë në kujtesë.
Pra, thonë se ju quajti këtë tregues, e drejtë?
Pastaj, ju them vetëm treguesin e lirë.
Dhe kjo liron kujtesën.
Ftohtë.
Pyetje të tjera?
Po.
>> Audienca: Çfarë bën dinamike ndarë do të thotë?
>> SPEAKER 1: alokuar dinamike do të thotë, në rrjedhën e programit tuaj.
Pra, kur ju telefononi malloc në mes të programit tuaj,
në fillim të programit, nuk ka asnjë kujtim ndarë.
Dhe si kompjuter hap nëpër atë kod,
ajo do të ndajë kujtesën.
Pra, kjo është ajo që ne kuptojmë me dinamike.
Pyetje e mirë.
Po?
Audienca: Kur ju të përcaktojë një grup me kllapa katrore,
bën që ende [e padëgjueshme]?
SPEAKER 1: Kjo është një pyetje e mirë.
Unë mendoj se kur ju të ndajë një grup, ai në fakt e vë atë në rafte.
Unë nuk jam pozitive për që, kështu që nuk do të japin kuotën e mua.
>> SPEAKER 2: Unë mendoj it-- vërtet ajo e vë atë në rafte.
>> SPEAKER 1: Vë atë në rafte.
OK, i ftohtë, i konfirmuar.
Pyetje të tjera?
Po?
>> Audienca: Kur ti delegojë malloc, nuk kompjuteri automatikisht
kujtesës për variablat tuaj?
SPEAKER 1: Po, sepse variabla tuaj lokal,
ajo automatikisht e vë kujtesës në rafte.
Audienca: Pra, çfarë është Pika e përdorimit malloc?
SPEAKER 1: Çfarë është Pika e përdorimit malloc?
Pra, ne pamë një bandë e shembujve, si, për shembull, duke përdorur swap,
ku ne duam fushëveprimin e variabli të jetë diçka
përtej vetëm thirrje e saj funksion.
Dhe ne duam diçka që ne mund të kalojë rreth
dhe që ne mund të hyni nga vende të ndryshme.
Kjo është ajo ku ne do të duan të vënë kujtesës në grumbull.
Kështu që të gjitha këto të ndryshëm Funksionet mund të përdorni atë.
>> Audienca: A mund të shpjegoni këtë?
>> SPEAKER 1: Pra, një opsion is-- kështu pyetja ishte, mund të jemi vetëm allocate--
vjen keq, mund të deklarojë një globale variabel, në thelb.
Ky është një opsion.
Por, me një shumë prej atyre, ata kanë tendencë për të marrë të vërtetë çrregullt.
Dhe ne zakonisht mendojmë e atij dizajnit si të keqe.
Po.
Cool, ndonjë pyetje tjetër?
Mbresëlënës.
OK, duke lëvizur në.
Pra, kjo është në fakt se si ne të ndajë kujtesës.
Ne biseduam në lidhje me këtë pak.
Ne përdorim këtë funksion të quajtur malloc.
Dhe ju them se sa shumë bytes në kujtesës, kështu që si shumë bytes në grumbull,
ti deshiron.
Dhe ajo do të kthehet adresën, kështu një tregues të, një pjesë e kujtesës
se ajo është ndarë për ju.
Pra, lloji do të jetë ylli i pavlefshëm.
Ajo do të jetë një tregues për Çfarëdo që ju vendosni për të vënë në atje.
Çdo herë që ju e quani malloc, ne tashmë ka thënë
ju duhet për të liruar atë kështu që ne nuk kanë rrjedhjet e kujtesës.
>> Çfarë është gjëja tjetër që ju absolutisht
duhet të bëni çdo të vetme herë ju e quani malloc?
OK, ju duhet për të liruar atë.
Çfarë është gjë tjetër?
Kontrollo për null, e bukur.
Pra, vërtet, kjo është e drejtë atje lart në bord.
Në qoftë se ju do të përpiqet të ndajë kujtesës dhe ju kanë lënë asnjë kujtim,
kompjuteri do të thotë, Nuk kam asgjë për të ju jap.
Dhe kjo ju jep përsëri null.
Pyetje për këtë?
Po.
>> Audienca: Pse do të doni ndonjëherë të të deklarojë një tregues me një lloj të veçantë
kur ylli i pavlefshëm mund të trajtojë Të gjitha llojet Pointer anyways?
SPEAKER 1: Pyetje e mirë.
Pse do të themi yllin int në krahasim me të pavlefshme yll
kur ylli i pavlefshëm mund të trajtojë çdo gjë?
Pra, ne nuk duam të ndonjëherë të hedhura në mënyrë eksplicite pointers.
Kjo është vetëm praktikë e keqe.
Por ne do të flasim për yjet e int ashtu si një kuptim i,
ky është një tregues për një numër të plotë.
>> Audienca: OK.
>> SPEAKER 1: Po, dhe kjo i lejon ju për të manipuluar vlerat në të
si integers.
>> Audienca: Oh, OK.
Dhe ylli i pavlefshëm nuk do të ju lejojnë të bëni këtë?
>> SPEAKER 1: Kjo varet nga Konteksti Yeah, kështu që mos u bëni merak
mos u shqetësoni shumë për llojin atje.
Vetëm e di se, në përgjithësi, malloc kthen një tregues për diçka.
Pyetje e mirë.
>> Audienca: Përse shumohen ajo herë 10? [Padëgjueshme].
>> SPEAKER 1: Sigurisht, kështu që unë kam qenë vetëm duke bërë shembull rastit këtu ku
Doja që të ndajë të mjaftueshme dhomë për të ruajtur 10 integers.
Vetëm një zgjedhje e rastësishme.
Po.
Po, çfarë është lart?
>> Audienca: Çfarë bëni ju do të thotë duke kontrolluar for null?
A doni të kontrolloni akrep for null apo malloc?
SPEAKER 1: Po, pikërisht.
Pra, pyetja është, çfarë kuptojmë me kontroll nga null?
Ne duam to-- kurdo ne e quajmë malloc dhe ne jemi kthyer një tregues,
ne duam të themi është tregues të barabartë me null?
Kështu që fjalë për fjalë PTR.
A është PTR e barabartë me null.
Po.
Audienca: Pra, unë kam qenë i sjellshëm e pyesin, në qoftë se ju
nisja treguesin në malloc, bën ajo pikë në fillim të malloc?
Sepse në qoftë se kjo është një array--
SPEAKER 1: Kjo është një pyetje e madhe.
Po, në qoftë se ju e quani malloc, The tregues se it-- le të themi,
kështu që këtu ne të ndajë 10 byte memorje.
Pra, unë jam i keq, e mjaftueshme dhomë për 10 integers,
ne jemi duke shkuar për të marrë adresën e se pjesa e parë e kujtesës.
Kjo është një pyetje e mirë.
Po.
>> Audienca: Me ndarjen e 10 integers përhapura,
ju në fakt mund të përdorni atë akrep si like-- pothuaj
si një rrjet të integers?
SPEAKER 1: Yeah, kështu që mund të ju e përdorin atë si një grup i integers?
Po, pikërisht, kjo është ajo që Pulak vetëm tregoi ju on-- një çift slides më parë,
ku ne themi, OK, kjo është vërtetë vetëm lloji of-- ne
mund të mendojnë për atë si një grup prej 10 integers.
Ajo vetëm ndodh të jetë në grumbull.
Audienca: Por ju nuk mund të qasjes ajo me katror simbol kllapa?
SPEAKER 1: Ju në fakt mund të hyni ajo me katror simbol kllapa, po.
Ju mund ta trajtoni ata të njëjtën gjë.
Po.
>> Audienca: Pse do tregues ndonjëherë të jetë i pavlefshëm?
>> SPEAKER 1: Pse do tregues ndonjëherë të jetë i pavlefshëm?
Në qoftë se ju do të përdorë të gjitha kujtesës në grumbull tuaj.
Nëse programi juaj është të hahet lart, hahet deri, hahet deri kujtesës,
dhe nuk ka asgjë të majtë, atëherë malloc do të say-- qoftë se ju thonë:
Dua 100 bytes më tepër, ajo do për të thënë, unë nuk kam 100 bytes.
Ja null.
Që do të thotë, unë dështuar.
Po.
>> Audienca: Në këtë rast, null nuk është asgjë, e drejtë?
>> SPEAKER 1: Po, në se rast, nuk është asgjë null.
Ju nuk keni adresë.
Nuk ka asnjë kujtim.
Të gjithë të drejtë, duke lëvizur në.
OK, le të flasim me të vërtetë shpejt për tampon del nga shtrati.
Kur mund të hasim buffer overflow?
Le të themi se kemi a-- ne akordojë një copë e kujtesës,
dhe ne jemi duke shkuar për të shkruar string në.
Dhe ne jemi duke shkuar për të thënë, OK, unë jam duke shkuar për të alokuar
vend të mjaftueshëm për gjashtë karaktere.
Dhe unë jam duke shkuar për të pyetur përdoruesi për disa të dhëna.
Dhe inputet e përdoruesit, për shembull, përshëndetje.
Dhe që i përshtatet të përkryer mirë, sepse ne kemi
vend për të gjithë personazhet e hello, dhe karakteri null ndërprerjen.
Mjaft hapësirë, nuk ka problem.
>> Por, çfarë nëse ne japim mundësi për një përdorues i keq për të përdorur programin tonë,
dhe ata nuk shkruani në gjashtë karaktere, apo jo pesë karaktere, por një milion.
Ata mbajnë shtypni, dhe shtypni, dhe typing, çfarë do të ndodhë?
E pra ne vetëm jap enough-- kompjuter apo keq,
ne vetëm i dha këtë varg hapësirë ​​të mjaftueshme për 5 karaktere.
Pra, ne jemi duke shkuar për të marrë diçka si ky, ku personi i keq i cili është
shtypja në të dhëna mund të prishësh madhësia e tampon,
dhe mund të shkojnë në fakt e kaluara e shumës se ajo është ndarë fillimisht.
Dhe pastaj çfarë ju mund të bëni, aq më gjë që me të vërtetë e keqe që ju mund të bëni,
është prishësh adresën e kthimit.
E cila në thelb do të thotë ju mund të lloj i marrë
kontrolli i sjelljes së programit.
Pra, në një nivel shumë të lartë buffer overflow është kur
ju ndajë disa sasinë e kujtesës.
Dhe pastaj ju, duke filluar kjo për shkak se ju jeni duke marrë të dhëna përdoruesi ose diçka
si that-- ju shkoni mbi kufijtë për atë që keni ndarë fillimisht
dhe të fillojnë messing deri programin tuaj.
Po?
>> Audienca: Pse nuk do që vetëm kthehen një defekt segmentimit?
>> SPEAKER 1: Pse nuk dua që kthehen një defekt segmentimit?
Ajo mund.
Ndonjëherë përpilues apo gjatë një prej Runtime tuaj
është në të vërtetë duke shkuar për të kontrolluar atë.
Në qoftë se disa gjëra ndodhin, dhe kjo është lloj i nivelit më të ulët,
atëherë ju duhet të dini.
Por në qoftë se ju nuk e projektimit këto sisteme duhet,
atëherë ju keni mundësi e nuk infektues atë dhe vetëm
duke lejuar kompjuterin take-- Personi i keq për të kontrolluar kompjuterin tuaj.
Po.
>> Audienca: [padëgjueshme]?
SPEAKER 1: Sigurisht.
Oh, kur unë them tampon, unë vetëm do të thotë Shuma e kujtesës që e keni ndarë.
Kështu që këtu kam thënë, oh, ne kemi ndarë gjashtë char-- vend të mjaftueshëm për gjashtë karaktere.
Dhe unë vetëm thirrje që tampon tim ku unë mund të shkruaj informacion.
Po.
Çdo pyetje të tjera në këtë?
Po.
>> Audienca: Si mund të ndaluar atë?
Si mund të ndaluar atë?
SPEAKER 1: pyetje mbresëlënës.
Si mund të ndaluar atë?
Si mund të parandaluar tampon del nga shtrati?
Edhe një mënyrë për të bërë atë është diçka si GetString, ku ne vazhdimisht të rritur
sasia e kujtesës që ne të ndajë nëse përdoruesi hyn një shumë të tekstit.
Një tjetër gjë është, në qoftë se ju vetëm dua gjashtë karaktere, të bëjë një kontroll të shpejtë.
Thuaj input vetëm gjashtë shkronja.
Po.
Pra, le të thonë se ju ishit duke punuar on-- ne jemi duke shkuar
për të shkuar në faqen e gjëra pak më vonë në course-- por le të
thonë se ju jeni duke punuar në një formular, ju do të vetëm kufizojnë sa mund të dorëzohet në.
Po.
>> Audienca: getString tërheq kujtim nga rafte, e drejtë?
Vetëm për të sqaruar?
SPEAKER 1: Një herë më shumë?
Audienca: A getString të kujtesës nga rafte?
SPEAKER 1: Unë besoj Getm-- get int merr kujtesën nga plehrat
sepse ai e quan alloc.
Audienca: Oh.
NE RREGULL.
SPEAKER 1: Po, malloc dhe risigurimi.
Pyetje të tjera?
Po.
>> Audienca: Pra, duke përcaktuar madhësia e buffering,
ju parandaluar dikë nga duke qenë në gjendje për të injektuar kodin
që mund të rrëshqitje e kaluara [e padëgjueshme].
>> SPEAKER 1: Pra, duke përcaktuar madhësia e tampon,
ju keni thënë, OK këtu është se si sa memorie ne mund të përdorim.
Nëse ju lejojnë përdoruesit për të shkruar mbi të, atëherë ju jeni do të kandidojë në probleme.
Ka kuptim.
Mbresëlënës.
Le të lëvizin së bashku.
Në rregull.
Duke folur për gabimet, këtu janë disa mesazhet e gabimit të përbashkët
që mund të kanë treguar deri ndërsa ju ishit kodim, duke punuar në grupe tuaj problemit.
Shans të mirë që prej këto tregon deri në quiz
në qoftë se vitet e fundit janë ndonjë indikacion.
Pra, përgjigjet janë lloj i deri këtu në bord.
Por të ndjehen të lirë të thirrura nga disa më shumë.
>> Pse mund të ndodhë një faji segmentimit?
Pse mund të merrni një defekt segmentimit kur ju po xhironi programin tuaj?
>> Audienca: [padëgjueshme].
>> SPEAKER 1: Mirë.
Po, në qoftë se ne të përpiqemi për qasje kujtesës që nuk është dhënë për të na.
Në qoftë se ne dereference një tregues null.
Për shembull, në qoftë se ne e quajmë malloc, dhe të harrojmë për të parë nëse është i pavlefshëm,
dhe ne vetëm përpiqemi duke e përdorur atë, kompjuteri-së do të na japin një defekt segmentimit.
Të mirë.
Po në lidhje me nënkuptuar Deklarimi i funksionit?
Cfare do te thote ajo?
Audienca: Ju jeni duke u përpjekur për të përdorur një funksion që ju nuk e keni definuar.
SPEAKER 1: Mirë.
Ju jeni duke u përpjekur për të përdorur një funksion që ju nuk keni përcaktuar.
Kështu që mund të jetë një nga dy gjëra.
Ndoshta kjo ishte si shembulli Camille ju tregoi më herët.
Dhe ju keni një funksion kryesor që e quan diçka të quajtur kubike.
Dhe le të thonë se ju e harruat për të shkruar këtë prototip.
Keni harruar për të thënë, hej kompjuter, Unë kam këtë funksion të quajtur kubike.
Ju do të shihni atë më vonë.
Le të thonë se keni harruar të shkruani prototip, ju mund të merrni këtë gabim.
Një tjetër gjë është, le të themi ju u përpoq për të përdorur printf,
dhe harruar të përfshijë biblioteka standarde,
atëherë ajo do të thonë se nënkuptuar Deklarimi i funksionit.
Dhe e fundit, por jo më pak, identifikues padeklaruar.
Po.
>> Audienca: Ju keni marrë një fushë të problemit.
Ashtu si ndoshta ju jeni duke u përpjekur për thërrasë një variabël lokale që është
në një lloj të ndryshme të zonës.
SPEAKER 1: Madh, kështu që nëse keni një variabël që nuk është në fushëveprimin,
dhe ju jeni duke u përpjekur të përdorin atë, ju jeni do të merrni në telashe.
Dhe vetëm më në përgjithësi, le të themi ju përpiqeni të përdorni x, me gjithnjë e duke thënë int
x është e barabartë me 5, atëherë ju jeni do të kandidojë në telashe.
Më falni, pyetje mbi këtë?
Awesome, chugging drejtë së bashku.
>> OK, recursion, pse might-- le see-- I Lost My sch-- oh këtu ne do të shkojmë,
vetëm sigurohuni që ne jemi afërsisht në orar.
Të gjithë të drejtë, të ftohtë.
OK, recursion, ideja e përgjithshme e recursion, një funksion gjithkund rekursive
është një funksion që e quan veten.
OK, kështu që është ajo që kam do të thotë nga një koncept i programit
ku një funksion e quan veten.
Çfarë do të jetë some-- çfarë është një arsye e mirë për të përdorur recursion?
Kur mund të jetë e dobishme?
Ose whats e një program që me të vërtetë jep veten për recursion?
>> Audienca: kërko Binary.
>> SPEAKER 1: kërko Binary jep veten për recursion,
sepse ju e keni këtë problem që ju mund të prishen në copa të vogla,
dhe vazhdimisht të kryejë e njëjta algorithm mbi të.
Kjo çon në, në shumë raste, më shumë Kodi elegante që është më i saktë.
Ne vetëm janë shembulli e kërkimit binar.
Një shembull tjetër është të bashkojë lloj.
Ndonjëherë, kur ju mendoni se e një algoritmi, si faktorial,
ajo vetëm ndjehet gjithkund rekursive, e drejtë?
Sepse ne e dimë se faktorial i 5 është një faktorial 4 herë 5.
Dhe kështu, kur ju të ngritur një problem Në këtë mënyrë, ajo vetëm ndjehet rekursive.
Kështu që do të jetë një mënyrë e madhe për të shkruar atë.
Pyetje?
Po.
>> Audienca: Çfarë është një rast bazë?
>> SPEAKER 1: Oh çfarë është një rast bazë?
Unë i thashë, mos harroni për të përfshirë një rast bazë.
Le të themi se ishin të shkruar një funksion faktorial,
dhe ne ishim duke bërë faktorial prej 5.
Dhe ne e dimë një faktorial prej 5 është 5 herë një faktorial i 4,
blah, blah, blah, blah.
Si mund ta dimë kur do të ndalet?
Si mund ta dimë se ne në fakt kanë një numër?
Sepse në qoftë se ne kemi mbajtur quajtur faktorial, atëherë ne kurrë nuk do të merrni një përgjigje, apo jo?
Pra, kur e dimë se si për të ndaluar në shembull faktorial.
Çdokush, vërtet.
>> Audienca: Kur 1 faktorial është 1.
SPEAKER 1: Mirë.
Pra, ne e dimë.
Ne mund të marrë për të dhënë se 1 faktorial është e barabartë me 1.
Pra, në qoftë se ne të merrni në pikën ku ne jemi duke bërë thirrje faktoriale në 1,
thjesht shkoni përpara dhe të kthehet 1.
Dhe kjo është çështja juaj bazë.
Sepse ne e dimë se dikur ne hit, dhe ne gjithmonë do të goditur atë, ne do të never--
ne nuk do të vetëm të mbajë përgjithmonë.
Çdo pyetje të tjera në recursion?
Po.
>> Audienca: Pra, kur ju kthehen 1, ajo vetëm automatikisht
do të ndalojë programin, e drejtë?
>> SPEAKER 1: Po kështu kur ju quajnë kthim 1, if-- le të themi,
le të themi faktorial i 2 thirrjeve faktorial i 1, faktorial e 1
vetëm do të ktheni 1.
Dhe tani faktorial i 2 do të thonë OK, 2 herë 1 është 2, dhe kthimi se përgjigje.
Po.
>> Audienca: A kemi për t'u shqetësuar për qëllimin në recursion
kur ju shkoni në një algoritmi?
>> SPEAKER 1: Ah, po.
Po, ju keni për t'u shqetësuar në lidhje me Shtrirja në kontekstin e recursion.
Pra, vetëm variablat të përcaktuara në atë afat e funksionit
do të jenë të dobishme.
Po pyetje e mirë.
Në rregull, le të mbani lëviz së bashku.
Sepse ne kemi një shumë të material për të marrë përmes.
Por, siç thashë, të ndjehen të lirë për të goditur deri orarit të punës, ose na pas faktit.
>> Kjo është vetëm një rrëshqitje të vërtetë të shpejtë.
Ne kemi mësuar shumë në lidhje me kërkimet dhe llojet.
Ju lutem, ju lutem, ju lutem, Këto seksione janë në internet,
Unë besoj në cs50.net/quizzes~~pobj.
Kështu që të shkojnë të marrë këtë tabelë dhe vënë atë në fletë tuaj shqyrtues,
sepse nuk do të jetë një pyetje për këtë.
Ju lutem mos merrni atë të gabuar.
Vetëm shumë shpejt, çfarë do të thotë kjo tabelë,
është ajo flet o për të madhe, të cilën ne e dimë të jetë e sipërme detyruar i një algoritme
running kohë.
Dhe ne kemi omega, i cili është do të jetë më e ulët lidhur
i një Runtime algoritme.
NE RREGULL?
>> Audienca: [padëgjueshme].
>> SPEAKER 1: Po, çfarë është gjëja e fundit?
Çfarë është theta?
Kjo është në qoftë se we-- ne jemi vetëm do të intereson në këtë klasë në rastin
ku tonë sipërme detyruar dhe lidhur ynë ulëta janë të njëjta.
Po, kjo është hera e vetme është duke shkuar për të ardhur deri në këtë klasë.
OK, unë jam duke shkuar për të do të mbajë.
Nëse ju nuk e keni marrë foton tuaj, Unë premtoj këto do të jenë online.
>> OK, awesome, structs.
Pse mund duam structs?
Çfarë është një arsye e dobishme ne mund të dëshironi structs.
Dikush bërtas diçka jashtë.
E pra, le të shohim në Shembulli në bord.
Le të themi se kemi të bëjmë me të gjithë këta studentë.
Nëse ne jemi duke bërë një program për CS50, ka si 800 njerëz.
Ne kemi nevojë për write-- ne jemi duke shkuar për të nevojë për të trajtuar një shumë informacion
për studentët.
Ajo do të jetë mirë në qoftë se ne mund të lloj i grupit
this-- të gjithë informacionin që ka të bëjë me një nxënës të veçantë
në një lloj të dhënave.
Por ne e dimë se nuk ka të dhëna lloji i quajtur, Student, e drejtë?
Ne kemi një numër të plotë, ne kemi një noton, ne kemi një varg, ose një yll char,
por ne nuk kemi, një student.
>> Pra, ne mund të bëjmë në fakt është lloj i përcaktojnë vet struktura jonë, e quajti atë student,
dhe ne mund të shoqërojnë disa fusha të ndryshme me këtë struct.
Pra, në këtë rast, le të thonë se ne kemi një nxënës.
Dhe gjërat që kemi kujdes lidhje janë numri ID studenti
dhe emri i nxënësit.
Dhe tani ne mund të shoqërojnë këtë ID dhe ky emër me një student të caktuar.
Pra, le të shohim disa shembuj.
>> OK, kështu që këtu unë them, OK, le të thonë se ne duam të bëjë një student.
Unë e quaj atë studenti 1.
Dhe numri i tij ID, në ky rast, ne mund të hyni
duke bërë vetëm emrin e studentit dot në fushë ne duam për të hyrë.
Pra, kjo do të jetë vetëm nxënës 1 pikë ID, dhe ne vendosur ajo e barabartë me 1.
Sepse mos harroni, kemi thënë se ID do të jetë një numër të plotë.
Dhe shumë të ngjashme, mund të themi, kjo emri i studentit do të jetë Davin,
për shembull.
Pra, ne mund vetëm të hyni në fushë e një struct duke përdorur këtë dot.
Pyetje për këtë?
Po.
>> Audienca: A ka ndonjë mënyrë për të mbrojtur variablave tuaj?
A ka ndonjë mënyrë për të mbrojtur variablave nga të qenit të arrihen nga jashtë?
>> SPEAKER 1: A ka gjithsesi për të mbrojtur variablave tuaj
nga të qenit të arrihen nga jashtë?
Jo në fushën e CS50.
Pyetje të tjera?
Po.
>> Audienca: Çfarë është typedef struct?
Çfarë do të thotë çdo komponent?
SPEAKER 1: Ah, çfarë është typedef struct?
Çfarë e bën çdo komponent do të thotë e këtë djalë?
>> Audienca: Po.
>> SPEAKER 1: OK, cool.
Pra kjo thotë, hej kompjuter, unë duan të krijojnë një strukturë të re.
Dhe unë jam duke shkuar për të përcaktuar një përkufizim për të, të tilla që unë mund të përdorni atë
sikur të ishte një lloj gjatë gjithë programin tim.
OK, kështu që unë dua të përcaktojë një strukturë.
Dhe unë jam tani do të jetë gjendje ta përdorin atë si një lloj.
Dhe emri i tij është studente.
Dhe këtu janë fusha të saj.
>> Audienca: Pra, është se typedef struct [e padëgjueshme]?
SPEAKER 1: Nëse ju doni të jenë në gjendje të përdorin këtë e strukturës në të gjithë programin tuaj,
dhe në shumicën e rasteve në CS50 ne bëjmë, ne duhet të themi tipit Def.
Dhe se e lejon atë që të përdorin atë të njëjtën gjë mënyrë që ne përdorim si int apo noton.
Kompjuteri do të gjithmonë e di se çfarë është ajo.
Po.
>> Audienca: A mund të të shkruaj kjo në header dosje?
>> SPEAKER 1: Oh, sorry.
A e kemi shkruar këtë në header dosje?
Ju mund të shkruaj këtë në krye të tuaj Programi, në krye të programit tuaj c.
Po, kjo do të jetë më vend i arsyeshëm për të.
Atje.
Audienca: Same pyetje, kështu që para kryesore?
SPEAKER 1: E drejta, ju duhet kjo të jetë diku që të gjithë mund të përdorni atë.
Pra, para se të kryesor në rastin tuaj, vërtet.
Audienca: A ka ndonjë dallim në mes vënë nxënësin në krye dhe në fund?
SPEAKER 1: Ah, a ka një Dallimi në mes vënien studentit
në krye apo në fund?
Let-- shpëtuar kësaj pyetjeje, dhe kur ne të merrni për listat e lidhura,
ne do të shohim se, në rregull?
Pra, të mbajë në të atë për një të dytë.
Gjëja e fundit që dua të përmend këtu, është në vend të një strukturë,
ne kemi një tregues për një strukturë, ne mund të ndryshojmë simbol tonë
të jetë nicer pak.
>> Ne mund të themi, le të themi që kemi një tregues për një student në vend se vetëm
një student.
Në qoftë se ne duam qasje në një fushë, në vend të duke bërë, edhe shko dereference treguesin,
dhe pastaj hyni emrin fushë.
Ky simbol duket pak çrregullt me ​​yll në këtë pikë.
Krejtësisht e saktë, por një lloj rruga e pastër për të bërë atë,
është vetëm për të thënë emrin akrep shigjetë.
Dhe që në fakt kombinon dereferencing dhe qasjen në një simbol të bukur.
Pyetje për këtë?
>> Audienca: them vetëm se një herë më shumë.
>> SPEAKER 1: thonë se një herë më shumë.
>> Audienca: Pikërisht ajo që ju sapo tha.
SPEAKER 1: Sigurisht, pikërisht që sapo thashë.
Në qoftë se ne kemi një tregues për një student sesa nxënësit vetë,
ne can-- një mënyrë që ne mund të hyni në fushë është dereference te tij, dhe pastaj
Emri qasje.
Një tjetër, mënyrë nicer ne mund ta bëjë këtë, e cila është vetëm
pak sheqer sintaksore, është vetëm për të bërë treguesin shigjetë emrin.
Dhe kjo do të kombinohen dereferencing dhe aksesimit.
Po, pretty cool.
Në rregull.
>> Pra, le të flasim për pyetjen tjetër.
Le të hidhen në nyje, të cilat ne jemi duke shkuar për të përdorur
në listat e lidhur në vetëm një të dytë.
Kështu që këtu, ju do të vëreni se ka është fjala nyja si në pjesën e poshtme,
dhe në majë.
Para, kur ne ishim përcaktimin student, ne vetëm kishte nxënës në pjesën e poshtme.
Ne nuk kemi nxënës në krye.
Çdokush e di pse kjo mund të jetë?
Çfarë është dallimi?
Po.
Audienca: Pra, ju përdorni nyje është përcaktimi i nyjeve,
kështu që kjo është një gjë rekursive?
SPEAKER 1: Mirë.
Po, ne kemi nevojë për nyjet tona për kanë tregues për nyjet e tjera.
Kështu që ne e përdorim këtë lloj para se të përcaktohet në fakt,
ne kemi nevojë për të vënë atë në krye vetëm kështu që e di se çfarë është ajo.
Audienca: Pra, ne ende nevojë për të në fund?
SPEAKER 1: Po.
Audienca: Pra, gjithmonë në fund.
SPEAKER 1: Gjithmonë në fund.
Kështu që të gjithë e juaja do të kanë atë në fund.
Ndonjë pyetje të tjera?
Të gjithë të drejtë, kështu që lejon të vërtetë flasin në lidhje me listat e lidhur me të vërtetë shpejt.
Pra, listat e lidhura are-- ne i përdorim ato në vend të vargjeve në disa raste,
sepse ne e dimë se vargjeve janë një gjatësi fikse, kurse listat e lidhura
ne mund të rritet dhe tkurret si ne duam.
Pra, ky është një shembull i asaj që një listë e lidhur mund të duket si.
Ajo që ne duhet të shohim është kreu i listës.
Pra, ku lista fillon.
Dhe pastaj ai nyje, secila nyje mëvonshëm, është
përgjegjës për njohjen ku nyja tjetër është.
Pra, në këtë rast, nyja që ruan 1 është përgjegjës për të ditur se ku 3 është.
Personi që ruan 3 është përgjegjës për ditur se ku është 9.
Dhe 9 ka askush tjetër për pikë për të.
Është fundi i listës, kështu që ai vetëm i thotë null.
NE RREGULL?
>> Audienca: Cila është pika e kjo?
>> SPEAKER 1: Cila është pika e kjo?
>> Audienca: Po.
SPEAKER 1: Sepse, le të them se ne kemi disa të dhëna.
Dhe ne nuk e dimë saktësisht se si shumë të dhëna që ne duam para kohe.
Pra, me një grup, le të themi, ku ne duan për të numëruar njerëzve në radhë të parë.
Shanset janë se nuk do të ndryshojë.
Ne mund të themi vetëm, OK, unë duan një rrjet të madhësisë gjashtë.
Por në qoftë se ne duam diçka që do të ndryshojë.
>> Për shembull, le të thonë se unë kam qenë duke u përpjekur të mbajnë gjurmët e nxënësve
si ata të vijnë në sallën e për seancën e shqyrtimit.
Unë nuk kam asnjë ide se si shumë prej jush njerëzit janë duke shkuar për të treguar deri.
Kështu që unë mund të dua një strukturë të dhënave që unë mund të zgjerohet dhe tkurret.
Sepse ndoshta dikush do të largohen, ndoshta dikush do të vijë.
Dhe kështu, në çdo kohë, ne mund të shtoni ose hiqni nyje.
Cool, pyetje e madhe.
Po.
>> Audienca: Në qoftë se ju mund të përdorni diçka si getString
që mban lejuar që ju të merrni më shumë të dhëna si ju keni nevojë për atë, pse nuk keni nevojë për këtë shumë?
>> SPEAKER 1: Pse do ju përdorni listës kur i lidhur
ju mund të përdorni diçka si getString?
Kjo është një pyetje e mirë.
Mos harroni se Get-- një e downfalls e getString
është se ne nuk e ka bërë një shumë të punë e mirë e liruar atë kujtesës,
dhe ne kemi prezantuar një bandë e kujtim rrjedhjet në programin tuaj?
Ju mund të marrë atë një mënyrë statike array mesme dhe të vazhdojë të rritet atë.
Por ju do të keni për të gjetur vende të reja në kujtesë.
Ajo do të jetë vetëm një shumë të lart.
>> Një nga gjërat e këndshme për të lidhur listat në krahasim me vargjeve, është vargjeve
janë të gjitha në të njëjtin vend në kujtesë.
Ajo duhet të jetë e vazhdueshme chunks e kujtesës.
Ndërsa listat e lidhura, 2 dhe 3 maj të jetë plotësisht në vende të ndryshme.
Ashtu si 2 është këtu, dhe 3 është këtu.
Dhe për aq kohë sa ata kanë një tregues për njëri-tjetrin, kjo është në rregull.
Ne e dimë se ne mund të gjeni ato.
Pyetje atje?
>> Audienca: getString është një funksion në bibliotekë CS50, e drejtë?
Ajo nuk ekziston në programe reale.
>> SPEAKER 1: Correct.
E drejtë, kjo është gjë tjetër.
GetString nuk ekziston jashtë kontekstit të CS50.
Po.
>> Audienca: Pra, e bën fakti se dy mund të jetë me të vërtetë shumë larg,
bën që ndikojnë në efikasitetin e qasjen elementet në listë?
SPEAKER 1: Kjo është një pyetje e madhe.
Pyetja ishte, e bën këtë ndikim efikasiteti i qasjes
këto elemente të ndryshme në listën.
Në fakt, po.
Sepse ne e dimë if-- le thonë se ne duam për të hyrë në
elementi i dytë i grup, ne e dimë ne mund të bëjmë vetëm array kllapa 1, e drejtë.
Ajo gjithmonë do të jetë i njëjtë vendndodhjen.
Por në qoftë se ne duam që të merrni në atë 3, ne nuk mund të them vetëm, shkoni merrni atë 3.
Ne kemi për të thënë, OK, të fillojë në fillimi i listës,
dhe tani ne fakt kemi të ecin nëpër derisa ne
gjeni numrin ne jemi të interesuar në.
>> Pra, në këtë rast themi, OK ky është numri i pari.
Pra, në thelb, kjo është indeksi 0.
Tani ne duhet të gjejmë numrin e dytë.
Kjo është indeksi 1.
Kështu që është në të vërtetë ndodh to-- vetëm qasjes, do të marrë kohë N.
Cool, N. madh i vjetër Po.
>> Audienca: Cilat janë secili prej listave?
A janë ata secili vargjeve, apo çfarë?
SPEAKER 1: Kjo është një pyetje e madhe.
Cilat janë secilin nga struktura që unë kam tërhequr?
Ata janë nyje.
Pra, secili nga këto pak Struktura ka dy pjesë.
Ajo ka një numër të plotë që mban.
Kjo është të dhënat aktuale se ajo e mban mbi.
Kjo është lloj i një pjese të dobishme.
Dhe, kjo është ajo që e bën atë një listë e lidhur,
ajo ka një tregues për nyjen e ardhshme.
Pyetje mbresëlënës.
Të gjithë të drejtë, kështu që le të shohim shumë shpejt të shohim disa shembuj të asaj që
ne mund të bëjë me listat e lidhura.
>> Pra, një shembull shumë i shpejtë është, mendoj që ne duam të bëjmë një kërkim.
Çfarë lloj i kërkimit nuk mund ne bëjmë në listat e lidhura?
>> Audienca: Binary.
>> SPEAKER 1: Binary.
Pse nuk mund të përdorim kërkimin binar?
>> Audienca: [padëgjueshme].
SPEAKER 1: E drejta, sepse me binar kërko, kemi dashur të mbështetet në faktin
që ne mund vetëm të kërcejnë në grup në çdo moment.
Ne mund të themi vetëm, të shkojnë në elementin e mesit.
Me këtu, siç thamë pak më herët,
ne nuk mund vetëm të kërcejnë në elementi mesme.
Në mënyrë që të gjeni ndonjë element, ne fakt
duhet të ecin nëpër të gjithë listën tonë.
>> Pra, nëse ne të kërkuar për të bërë një kërkim, The më të mirë ne mund të bëjmë është vetëm një kërkim linear.
Ne të fillojë në krye, ne check-- le të thonë se ne jemi
kërkoni për 9-- ne të fillojë në krye.
Ne themi, është kjo 9?
Jo.
A është ky 9?
Jo.
A është ky 9?
Po, kemi gjetur atë.
OK, kjo është e gjitha ajo.
Këtu është pak e pseudo-kod.
Unë jam duke shkuar për të lënë këtë për ju djema për të dybek gjatë në tuaj,
vetëm për shkak se ne jemi duke pak të shkurtër në kohë.
>> Lejon të flasim për futje.
Ne pamë një demo të vërtetë të ftohtë e kjo në leksion, ku kemi thënë,
OK, ne kemi këtë listë e lidhur ku të gjithë është duke treguar për njëri-tjetrin,
dhe dikush vjen në skenë.
Si nuk kemi futur se Personi në listën tonë të lidhura?
E pra, një mënyrë e gabuar për të bërë, e cila po unë mendoj se ajo që pamë në fillim,
është kur personi në front automatikisht
vuri në dukje person të ri.
Dhe pastaj ne lloj i braktisur gjysma e dytë e listës, e drejtë?
Sepse ne nuk e dimë se ku ajo eshte ne memorien më.
Pra, të jenë shumë të kujdesshëm në lidhje me mënyrë në të cilën ne të futur gjëra.
>> Kështu që këtu, le të thonë se ne duam të vënë 1 në pjesën e përparme të listës sonë.
Së pari, ne kemi 1 pikë në dytë element-- ose element
që përmban 1.
Pra, ne bëjmë atë, vetëm kështu ne nuk jemi shkuar për të humbur në gjysmën e dytë.
Dhe tani, ne mund të kemi pikë kokë me 1.
Pra, përsëri, kjo është vetëm si nivel super të lartë.
Kjo është se si ne do të futur një nyje.
Ne kemi një shumë të pseudo-kod here-- keq,
Unë nuk e di pse unë jam duke e quajtur atë pseudo-kod.
Kjo është kodi aktual.
Ju mund të shkoni check it out më vonë.
>> Të gjithë të drejtë, le shumë quickly-- ndonjë pyetje më shumë
në listat e lidhura para se të lëvizin mbi një tjetër çift të dhënave
Strukturat në 10 minuta tona të fundit.
>> Audienca: A kemi nevojë për të tani sa për të shkruar atë në një provë?
>> SPEAKER 1: A kemi nevojë të dini se si to--
>> Audienca: Shkruani atë në një provë.
>> SPEAKER 1: Ne kemi nevojë për to-- ju duhet të jenë të përgatitur
për të shkruar, insert, hequr, dhe kërkoni për listat e lidhura në provë.
Kjo është diçka që ne e mund të presin që ju të bëni.
Thjesht shkoni mbi të.
Nëse keni ndonjë pyetje në Kodi, xhiruar TF tuaj një e-mail,
vijnë për të orarit të punës.
Ka ende shumë kohë për të studiuar, për të mos u shqetësoni.
Të gjithë të drejtë, ndonjë tjetër pyetje në lidhje me listat e lidhura?
Po.
>> Audienca: Pra, nëse ju nuk e përdorni tregues për të shkuar në një në të djathtë
para se të përdorni treguesin për ai në të majtë, kjo është
ekuivalente e fshirjes çdo gjë, e drejtë?
SPEAKER 1: Po.
Audienca: [padëgjueshme].
SPEAKER 1: E drejta, pasi ne nuk mund të marrë atë, kjo është në fakt edhe më keq.
Sepse jo vetëm që nuk e dimë aty ku është, ne nuk mund të përdorë atë,
por we've-- ne nuk jemi liruar atë memorie më.
Pra, kjo është vetëm lartësi rreth dhe jo të jetë e dobishme, sepse ne nuk mund të gjeni atë.
Po, pyetje ftohtë.
>> Të gjithë të drejtë, le të flasim për oxhaqet.
Ne pamë shumë paratë shumë shpejt.
Ata janë parë në të fundit Strukturat jashtë të dhënave.
Pra, ne mendojmë për oxhaqet në Annenberg e tabaka ku ne pirg gjëra në krye.
Dhe në qoftë se ju jeni do të të vijë të marrë një tabaka, ju jeni
gjithmonë do të marrë atë në të lartë, e cila është më e recently--
e cila është gjëja që më vënë kohët e fundit në krye të rafte.
Kështu që ju mund të lloj të mendojnë për këtë lloj të vizuale kur ju jeni duke menduar e oxhaqet.
Dhe atëherë, ne kemi popped diçka off majë të pirg.
>> Nëse ne are-- oh, dhe fjalët që ne përdorin kur ne jemi duke folur për këto të dhëna
Strukturat është zakonisht, nëse ne vënë diçka në rafte,
ne themi ne jemi shtyjnë atë në rafte.
Dhe nëse marrim diçka jashtë rafte, ne themi ne jemi popping off rafte.
Nëse ju jeni duke shkuar për të zbatuar një stack-- që unë patjetër
ju rekomandojmë që të provoni out-- ju jeni do të duan të mbajnë gjurmët e,
le të thonë se ju jeni duke përdorur një rrjet.
Unë e di se në leksion ne biseduam rreth përdorimit të dy vargjeve
ose listat e lidhura për të zbatuar një pirg.
Nëse jeni duke përdorur një grup, ju keni nevojë për keep--
justifikim me-- ne duhet të mbajnë gjurmët e madhësisë dhe kapacitetit.
Kështu numrin maksimal që rafte ynë mund të mbajë.
Pyetjet për oxhaqet?
>> Audienca: Cila është diferenca në mes të madhësisë dhe kapacitetit?
SPEAKER 1: Dallimi në mes Madhësia dhe kapaciteti, pyetje tmerrshëm.
Pra, le të thonë se ne jemi të duke përdorur një rrjet, dhe ne
ndajë vend të mjaftueshëm për 10 integers.
Dhe ne të fillojnë për të mbushur atë lart.
Dhe ne të shtyjë gjërat në, dhe ne pop gjërat off.
Ne duam që të mbajnë gjurmët e në maksimum Numri ne mund të mbajë, kjo është kapaciteti.
Dhe ne duam të mbajnë gjurmët e të Numri aktual që kemi, kjo është madhësia.
Pyetje e mirë.
Çdo gjë tjetër në oxhaqet?
Të gjithë të drejtë, le të flasim për befasi, rradhë.
>> Ndryshe nga oxhaqet, të cilat janë parë në të fundit jashtë, këto janë parë në, nga e para.
Pra, kjo është like-- mendojnë për një linjë.
Mendoni për rreshtim deri në Apple Dyqan për të marrë çfarëdo produkti.
Dhe personi i parë në linjë duhet të të jetë personi i parë i cili e ka ndihmuar.
Gjëja e parë kështu që është shtyrë është kjo Gjëja e parë që është popped.
Ftohtë?
Shumë similarly-- Oh, fjalët që ne përdorim në vend të shtytje dhe pop--
që unë vetëm përdorur, Unë jam sorry-- është të themi,
në qoftë se ne jemi duke vënë diçka në radhë, ne themi enqueued atë.
Nëse ne jemi duke marrë diçka nga radhë, themi ne dequeued.
Ajo.
Unë mund të shqiptimit ato gabuar, por ju merrni ide.
Dhe pastaj përsëri, ashtu si oxhaqet, në qoftë se ne jemi implementimit këtë si grup,
ne duhet të mbajnë gjurmët e të madhësia, kapaciteti, dhe kreu.
Çfarë dua të them me kokë?
Pse nuk kemi nevojë për të mbajtur gjurmët e kokës?
>> Audienca: Sepse kjo është ajo ku fillimi i listën tuaj është.
SPEAKER 1: Po, në thelb koka është ku fillimi i radhës tonë është.
Sepse ne e dimë, ndryshe nga oxhaqet, which-- Unë jam duke shkuar në përpjekje për t'u përballur me këtë way--
ne e dimë se ajo gjithmonë do të tkurret në këtë mënyrë dhe të rritet në këtë mënyrë.
Radhët, njerëzit vijnë në fund dhe të largohet nga fillimi,
kështu që ne duhet të mbajnë gjurmët e ku fillimi është.
Kjo është ajo që dua të them me ne duhet të mbajnë gjurmët e ku koka është.
Ftohtë?
Në rregull.
Tetë minuta, çift më shumë tema, ne mund të bëjmë atë.
>> Të gjithë të drejtë, tryezë hash.
Ne biseduam shkurtimisht për tabelat hash.
Për quiz, ju vetëm duhet të kuptojmë ato në një nivel të lartë.
Ideja themelore është që ju të keni këto të dhëna.
Dhe ne duam të hyni në atë në kohën që është më shpejt se diçka si një i lidhur
lista.
Sepse kemi thënë, në qoftë se ne ishim duke kërkuar nëpër një listë të lidhura,
që mund të marrë kohë N.
Edhe qasjes mund të marrë Ora N në një listë të lidhura.
Tabelat hash na japin një mënyrë që ne mund të më shpejt të hyrë gjëra, dhe më shumë
shpejt të kërkoni për gjëra, pa duke pasur kufizimet e një sërë
ku ne kemi caktuar madhësi.
>> Pra, ne mendojmë për një strukturë të dhënave ku, ku ne kemi vënë atë në strukturën e të dhënave
varet nga kjo Funksioni magjike hash.
Pra, në këtë rast, të hash magjike funksion është vetëm duke marrë një fjalë,
kontrolluar se çfarë letra e parë është, dhe atëherë vetëm zgjidhja atë sipas rendit alfabetik.
Pra, ne thelb vënë ato në kova të ndryshme.
Kur ne shohim banane, të themi, OK, le të vënë në B kovë.
Kur ne shohim Apple, le të e vënë atë në një kovë.
Nëse ne pamë kajsi, le të vënë në një kovë.
NE RREGULL?
>> Kështu që mendoj unë po kërkoni for-- I nuk e di, çfarë është tjetër fruta?
Mendoj unë isha duke kërkuar për portokalli.
Ku duhet të shikoni?
Në O kovë.
Po, ka vetëm një vend se portokalli mund të jetë, në rregull?
Kështu që unë thashë më parë se çfarë ndodh if-- edhe thashë më parë,
le të thonë se ne kemi vënë in-- kajsi, por unë me të vërtetë të adresuar faktin se, oh jo,
në qoftë se unë do të vënë kokrra të kuqe në, është do të bien ndesh me banane.
Ku ne kemi vënë atë në qoftë se ka tashmë diçka në tabelën tonë?
E pra, ne kemi një mundësi çift.
>> Opsioni numër një është linear probing, që do të thotë në thelb,
le të thonë se unë dua të provoni të vënë kokrra të kuqe, dhe unë shoh, oh jo,
banane tashmë atje, Unë vetëm them OK, le të
më shikoni për vendin tjetër në dispozicion.
Kështu që unë ecin poshtë, unë them, oh, nuk ka asgjë në D kovë.
Unë nuk mund të vërtetë të mendojnë për ndonjë frutave që fillojnë me shkronjën D,
kështu që unë jam vetëm duke shkuar për të vënë kokrra të kuqe në atje.
Durian.
OK, kështu që nuk ka asgjë në atje akoma,
Unë mund edhe të përdorin vetëm atë vend.
Çfarë është Disavantazhi i kësaj?
>> Audienca: Kjo është jashtë funksionit.
>> SPEAKER 1: Na vjen keq?
Audienca: Kjo është jashtë funksionit.
>> SPEAKER 1: Është out-- e drejtë, ne mund të përfundojë
me gjëra që nuk janë të in-- ruhen në kova në rrugë
që ne presim që ata të jenë.
Pra, nëse ne kemi qenë në kërkim për kokrra të kuqe, para se të thënë:
oh ne mund të shikojmë në një kovë.
Kjo mund të jetë vetëm në një kovë.
Por tani, me të vërtetë, ajo mund të jetë në të gjitha kova, e drejtë?
>> OK, këtu është një tjetër alternativë, chaining-- veçantë
e cila është ideja që ne jemi duke shkuar për të përdorur një pak më vonë në P vendosur 5.
Në vend se vetëm duhet një hapësirë ​​në çdo kovë,
pse nuk kemi çdo kovë të jetë një tregues për një listë të lidhura?
Ku ne themi, OK, ka një kovë për çdo gjë që fillon me A.
Dhe nuk është vetëm do të jetë një i lidhur Lista e frutave që fillojnë me A.
Pra, në qoftë se ne të merrni një fryt të ri, le të themi ne get-- ne avokado, ne kemi mollë,
le të thonë se ne kemi marrë kajsi, si do ne kemi vënë në listë?
E pra ne do të shkojnë në kovë 0, dhe ne do të vetëm futur atë në listën tonë të pëlqyer,
thjeshtë si ajo.
>> Tani unë mbaj duke thënë kovë.
Ne mund të zbatojë këtë në një numër mënyrash.
Një mënyrë tipike se kjo lloj foto sugjeron,
po ndoshta duke pasur një rrjet të pointers në listat e lidhura.
Kjo është një mënyrë që ne mund të zbatojë një tabelë hash.
Audienca: A do të duhet një tjetër Lista shkak banane dhe kokrra të kuqe janë jashtë
e rendit?
SPEAKER 1: do ju need-- ah, do të
nevojë për një listë për shkak se banane dhe kokrra të kuqe janë jashtë funksionit?
Në këtë rast, funksioni ynë hash, e cila na tregon se ku për të vënë gjërat
nuk kujdeset për letrën e dytë.
Ajo nuk kujdeset për alfabetizohen, ajo vetëm kujdeset për letrën e parë.
Pyetje?
>> Audienca: Cili është përkufizimi i që funksion, dhe çfarë e bën atë të duket si?
SPEAKER 1: Ah, mirë.
OK, kështu që ne nuk kemi nevojë të shqetësoni shumë për këtë quiz.
Kështu që unë nuk e kam vënë në slides.
Ne jemi duke shkuar për t'u futur për atë për P vendosur 5.
Por në thelb, ajo thotë se, duke pasur parasysh një element i ri, ku duhet të vënë atë?
Ose, le të thonë se unë jam duke kërkuar për një element, ku mund të jetë ai?
Po, pyetje e madhe.
>> OK, shumë shpejt, pemë dhe përpiqet.
Pra, një pemë është vetëm ndonjë lloj i strukturës së të dhënave të organizuar.
Dhe ne jemi duke shkuar për të parë një shumë prej fotografive që do të bëjë ky super të qartë.
Dhe një Trie, që pamë në klasë, është një lloj shumë i veçantë i pemës
që në thelb punon si një tabelë hash multi-nivel.
Është super cool.
Ne jemi duke shkuar për të parë atë në vetëm një sec.
Të gjithë të drejtë, kështu që le të flasim për pemët e parë.
Pra, kjo është me të vërtetë shembull tipik i një pemë, ku ne kemi disa hierarki.
Ju shihni se njëra është në shumë të lartë, e drejtë?
Dhe unë mund të them lartë, sepse nuk ka në mënyrë të qartë një urdhërimin sepse ne
kanë këto shigjeta duke shkuar poshtë.
Kështu që, gjëja në krye, Unë e quaj se nyjen rrënjë.
Pra, një është nyja rrënja.
Dhe gjërat në fund, të cilat kanë asgjë nuk vijnë jashtë tyre,
Unë them këto janë nyje fletë.
Kështu 8,9 5, 6, 7, në rregull.
Dhe zakonisht terminologjia ne mund të them është, 1 është prind 3-it.
Pra, kjo është gjëja që vjen një nivel mbi të, dhe pikë për të.
Dhe 3 është fëmija 1 s.
Kjo është gjëja që 1 pikë për të.
Pyetje?
>> Audienca: A mund të kthehemi në rrëshqitje mëparshme, ju lutem?
>> SPEAKER 1: A mund të kthehem në rrëshqitje mëparshme?
I sigurt.
Pyetje për këtë?
Ose ju vetëm të kërkuar për të parë atë?
Audienca: Unë thjesht nuk e kam marrë nëpërmjet saj.
>> SPEAKER 1: OK, cool, po.
Këto do të jenë në internet kështu që nuk bëjnë shqetësohen për marrjen e çdo fjalë.
Dhe në interes të herë, unë jam duke shkuar për të shkuar.
A është kjo në rregull?
Mbresëlënës.
OK, i ftohtë.
Pra, le të flasim për një kind-- shumë specifike
kështu që ne kemi këto të përgjithshme Struktura e pemëve,
e cila është vetëm diçka që na lejon llojit të rangut gjërave hierarkike.
>> Pemë binare janë gjëra ku çdo nyjë ka jo më shumë se dy fëmijë.
NE RREGULL?
Atëherë unë thashë: OK, kështu që duket të përshtaten këtij përshkrimi.
Unë i thashë nyje, nuk është një pemë binare e kërkimit.
Çfarë është një pemë binare e kërkimit?
Është e renditura.
Kështu që ju e dini se në një pemë binare e kërkimit,
gjithçka për çdo gjë tree-- në nyjet e majtë është më e vogël,
dhe çdo gjë të nyjet e drejtë është më e madhe.
Pra, kjo nuk është një pemë binare e kërkimit.
Kjo është vetëm një pemë binare.
Pra, ne kemi kategorinë e madhe e pemë, kategoria pak më e vogël
e pemëve binare, kërko nga Pemët a-- kërkimit binar.
Ftohtë?
Në rregull.
>> Dhe tani, më të fun të të gjithë, ne kemi përpiqet tona.
Ju djema e pa këtë foto në leksion?
Po, ajo duhet të duken super të njohur.
Le të shohim se si ne mund të në fakt të zbatojë këtë.
Ose në të vërtetë, le të shohim, bën që edhe të dalë?
Jo.
Të gjithë të drejtë, ne nuk kemi as të shqetësohen për atë stuff nivelit të ulët.
Ne do të keni mjaft kohë për të adresuar pastaj P vendosur 5.
Por tani për tani, vetëm të nivelit shumë të lartë, ne e dinë se kjo është ajo që duket si.
Ne e përshkroi atë si lloj një tabelë hash multi-nivel
where-- Çfarë e bën këtë dyqan?
Kjo ruan emrat e Shkencëtarët që ne mund të vërtetë të
shikoni për nga lloji i vetëm duke ndjekur tavolina të ndryshme hash poshtë, të gjithë të drejtë?
>> Dhe qëllimi i kësaj është, në teori, ato ofrojnë kohë konstante Look up.
Pra, nëse unë dua të kontrolloni se, për shembull, i cili është someone--
që Mandel është në këtë Trie, unë mund shumë shpejt
në linear-- unë jam i keq, në kohë konstante, të kuptoj se
nëse janë apo jo kjo është në Trie.
Por një con, është të shohim se si e madhe është kjo.
Ne nuk jemi as ruajtjen që shumë të dhëna, dhe ai është i madh.
Pra, një con i madh është se ai përdor një sasi të madhe të kujtesës.
Po.
>> Audienca: Pse nuk është të sigurojë kohë konstante, saktësisht?
>> SPEAKER 1: Një herë më shumë?
>> Audienca: Çfarë është intuita Pse ai jep kohë të vazhdueshme?
>> SPEAKER 1: pyetje e shkëlqyer.
Pse e bën atë të sigurojë kohë të vazhdueshme?
Pra, çfarë mund të bëjmë është, le të thonë se ne jemi duke kërkuar për Mandel.
Ne e dimë se ne duam të fillojë në nivelin e parë në M.
Ne e dimë se ne duam të ndjekim atë të E. Pra kjo është marrë një hap, dy hapa, apo jo?
Ne ndjekim atë N. Ne ndjekim atë D. Ne ndjekim atë për E. Ne ndjekim atë L.
Dhe pastaj gjë tjetër që ne të kontrolloni says-- kjo delta thotë: Po, kjo është e
në tabelën tonë.
Kjo është një fjalë.
Kjo është një hyrje e vlefshme në Trie tonë.
Pra, ju jeni duke thënë, OK, që mori shtatë hapa.
Por nëse kemi shtuar si një miliona më shumë Shkencëtarët në këtë strukturë të të dhënave,
ne nuk do të duhet të kontrolloni një miliona më shumë gjëra.
Ne jemi vetëm ndonjëherë do të duhet të marrë shtatë shkallore, gjatësia e person-së
Emri.
>> Pra, ne si të mendojnë e kohën e duhur si, mendoj
ne të rritur madhësinë e tonë Struktura e të dhënave, sa më të gjatë
është ajo do të marrë?
Në këtë rast, në qoftë se ne shtoni një bandë më shumë shkencëtarët, kjo nuk ka rëndësi.
Është ende do të marrë të njëjtën sasi e kohës.
Është koha konstante.
Po.
>> Audienca: Si mund të nuk e di për të scan mbi numrat e tjerë?
SPEAKER 1: Si mund ta di se si to--
Audienca: Ashtu si nuk e dini ju shkoni direkt nga M në E dhe jo për M në A?
SPEAKER 1: Oh, i sigurt.
Sepse unë e dija se ishte kërkoni për fjalën Mandel,
dhe unë vetëm e di se është M-E. Pra that-- vërtet, të shkojnë përpara.
Audienca: A nuk do që ju keni për të parë në letrat e tjera
në pjesën tjetër të [e padëgjueshme]?
>> SPEAKER 1: Ah, nuk do të kam për të parë në the-- OK, i madh.
Kjo është një pyetje e madhe.
Kjo varet se si ne e zbatojnë atë.
Nëse ne zbatojë atë si vetëm si një seri e vargjeve
ku ne e dimë se është e E gjithmonë në pozicionin 0,
Unë nuk e di, çfarë Indeksi numër është në.
Po, ne vetëm mund të bëjmë konstante kohë, do, do, do, bëj.
Ftohtë.
Pyetje atje?
>> Audienca: A është koha konstante e njëjta gjë si kohë reale?
SPEAKER 1: A është koha konstante e njëjta gjë është në kohë reale?
Unë nuk jam shumë i sigurt në kohë reale është.
Audienca: kohë si kjo fjalë për fjalë përparon dytë
nga të dytë në krahasim me të qenit një variabël i pavarur.
>> SPEAKER 1: Oh, po, ju mund të mendojnë për atë në këtë mënyrë.
Me fjalë të tjera, ajo nuk është e varur të madhësisë së strukturës së të dhënave.
Kjo është një mënyrë për të menduar për këtë.
Ndonjë pyetje të tjera?
Ndoshta në të parën herë në histori, kemi mbaruar me kohë.
Nëse keni ndonjë pyetje, mos lirë për të ardhur të na pyesin, të shkojnë në seksionin,
bisedoni me TFS tuaj, zyra Orët janë të 08:00 dhe 08:30
në ora 11:00 të hënën dhe të martën, kështu që kjo është një pak kohë të ndryshme,
prandaj sigurohuni që ju të vini re se.
Po.
>> Audienca: A kemi nevojë të dimë stuff like argumente command line,
ls dash, dash çfarëdo?
>> SPEAKER 1: Command line argumentet, dhe komandat Linux,
Po, ju duhet të dini ato.
Very-- është si lloj i nivelit gjëra kemi mbuluar në seksionin 0,
aq sa Linux komandat shkojnë.
>> Audienca: A janë orë në Annenberg?
SPEAKER 1: Orari i punës, unë nuk jam plotësisht i sigurt ku ata janë.
Por ju mund të kontrolloni faqen e internetit, dhe ajo do të ju them.