[Muusika mängib] DOUG LLOYD: Okei. Töö ühe muutujad on päris lõbus. Aga kui me tahame töötada palju muutujaid, aga me ei taha olla kamp eri nimede sõidavad ringi meie koodi? Sel juhul massiivid on tulemas tõesti mugav. Massiivid on tõesti fundamentaalne andmeid struktuuri iga programmeerimise keel et te kasutate. Ja nad on tõesti kasulik, eriti, kui me näeme, CS 50. Me kasutame massiivid hoida väärtusi sama andmetüüp kell sidusmäluplokki kohtades. See tähendab, et see on nii, et saame grupi kamp täisarvud koos mälu või hunnik tähemärki või hõljub mälu tõesti lähestikku ja töö nendega ilma et anda igale üks on oma ainulaadne nimi, mis võib saada tülikas mõne aja pärast. Nüüd, üks viis analogize massiivid on mõelda oma kohaliku postitus ametis teist. Nii sammu kaugusel programmeerimine ja lihtsalt sule silmad ja visualiseerida meelt kohaliku postkontori. Tavaliselt on kõige postitus kontorid, seal on suur pank postkontor kastid seina peal. Hulgaliselt on hiiglaslik blokk sidusmäluplokki, samamoodi, et mail pank oma postkontor on suur ruumi seina postkontoris. Massiivid on liigendatud väike, identselt plokke ruumi, millest igaüks nimetatakse element, in Samamoodi, et seina postitus office on liigendatud väike, identselt plokke ruumi, mida me nimetame PO box. Iga element massiivi saab talletada teatud andmemaht nagu iga postkasti on võimalik hoida teatud summa mail. Mis saab panna iga elemendi massiiv on muutujate samadele andmetele tüüp, näiteks int või char, vaid nagu oma postkasti, saab ainult sobivad asjad Samasugust tüüpi, näiteks tähti või väikepakendis. Lõpuks suudame iga elemendi massiivi otse registrinumbrit, nagu suudame meie postkontor kasti teades oma kõneposti number. Loodetavasti et analoogia aitab teil oma peaga idee ümber massiive analogizing midagi muud et olete ilmselt juba tuttav. In C massiivi elemente on indekseeritud alates 0, mitte 1. Ja see on tõepoolest oluline. Ja tegelikult, see on põhjus, miks me, CS 50, ja miks arvuti teadlased sageli loeb 0, on sest C on massiiv indekseerimine, mis algab alati 0. Nii et kui massiivi koosneb n elementi, esimene osa, mis massiivi asub indeks 0, ja Viimase element massiivi asub indeks n miinus 1. Jällegi, kui seal on n elementi meie massiivi viimase indeks on n miinus 1. Nii et kui meie massiiv on 50 osast, Esimene element asub indeks 0, ja viimane element asub indeks 49. Kahjuks või õnneks sõltuvalt oma seisukohast, C on väga leebed siin. See ei takista teil läheb auti oma valikut. Sa võid pääseda miinus 3 osa oma rida või 59. osa oma rida, kui teie massiiv on ainult 50 elementi. See ei peatu oma programmi koostamisel, kuid töötamise ajal, , mis võivad tekkida Kartsin killustatust süü kui hakkad juurde mälu mis on väljaspool piire, mida sa palusid oma programmi teile. Nii ei ole ettevaatlik. Mida tähendab massiivi deklaratsiooni välja näeb? Kuidas me koodi massiivi tegutsema nagu me kood muu muutuja? Seal on kolm osa massiivi declaration-- tüüp, nimi, ja suurus. See on väga sarnane muutuja deklaratsiooni, mis on lihtsalt tüüp ja nimi, suurus element on erijuhul massiivi, sest me oleme kobar samal ajal. Nii et tüüp on, millist muutujat sa tahan iga element massiivi olla. Kas tahad seda massiivi täisarvud? Siis, oma andmete tüübi peaks olema int. Kas sa tahad seda olla massiivi kahekordseid või ujub? Andmetüüp tuleb topelt või sularahaga. Nime on see, mida sa soovite helistada oma valikut. Mida sa tahad selle nime hiiglane Bank of täisarvud või ujukite või sümbolit või kahekordistab või mis iganes olete? Mida sa tahad seda kutsuda? Päris enesestmõistetavad. Lõpuks, suurus, mis läheb sees nurksulgudes, on mitu elementi soovid nagu sinu rida sisaldama. Mitu täisarvud sa tahad? Mitu ujukite sa tahad? Nii näiteks int õpilane klassid 40. See kinnitab massiivi nimega Student klassid, mis koosneb 40 täisarvud. Päris mõistetav, ma loodan. Siin on veel üks näide. Kahe menüü hindadega 8. See loob massiivi nimetatakse Menüü hind, mis koosneb ruumi mälu kaheksa kahekordistub. Kui te arvate, iga element massiivi tüüpi andmete tüüpi, Nii näiteks, ühe elemendi massiivi tüüpi int, samamoodi kui Võiks arvata, muu muutuja tüüpi int, kõik tuttavad operatsioone, et me eelpool teenindus- video on mõtet. Nii et siin me võiksime kuulutada massiivi tõeväärtused nimetatakse Truthtable, mis koosneb ruumi 10 tõeväärtused. Ja siis, just nagu me võiks lihtsalt anda väärtus mistahes muu muutuja tüüpi Loogiline, võiksime öelda midagi nagu Truthtable nurksulg 2, mis on see, kuidas me näidata, mis osa tõde lauale? Kolmas element tõeväärtustabelitega, sest mäletan, me arvestame 0. Nii see on, kuidas me näitama Kolmas osa tõde tabelis. Truthtable 2 võrdub vale, nagu võiksime declare-- või võiksime omistada pigem tahes Loogiline tüüpi muutuja valeks. Me saame seda kasutada ka tingimustes. if (truthtable 7 == true), mis tähendab, kui kaheksanda elemendi of Truthtable on tõsi, äkki soovite printida sõnum kasutaja, printf ("tõsi! n") ;. See paneb meid ütlema Truthtable 10 võrdub tõsi, eks? Noh, ma saan, aga see on päris ohtlik, sest mäletan, meil hulgaliselt 10 tõeväärtused. Nii kõrgeim indeks, et koostaja on andnud meile on 9. See programm koostada, kuid kui midagi mälestuseks eksisteerib, kui oleksime oota Truthtable 10 minna, me võiks kannatada killustatust süü. Me Võib pääse ta, kuid üldiselt päris ohtlik. Mida ma teen siin on juriidiline C, kuid mitte tingimata parim liikuda. Nüüd, kui sa tunnistada ja initsialiseerida massiivi üheaegselt, seal on tegelikult päris süntaksit, et teil saab kasutada täita kuni rida oma lähteväärtustest. Seda saad tülikas Kinnitan massiivi suurus 100, ja siis pean ütlema, element 0 võrdub selle; element 1 võrdub see; element 2 võrdne. Mis mõtet, eks? Kui see on väike massiiv, siis võiks teha midagi sellist. Bool truthtable 3 võrdub avatud lokkis traksidega ja seejärel komaga eraldada elementide loetelu mis sa tahad panna massiivi. Seejärel sulgege lokkis traksidega semikooloniga. See loob hulgaliselt suurus kolm nimetatakse Truthtable, elementidega vale, tõsi, ja tõsi. Ja tegelikult instantiation süntaks Mul on siin täpselt sama nagu teed individuaalne element süntaks allpool. Need kaks võimalust variatsiooni toodavad täpselt sama rida. Samamoodi võiksime itereerima üle kõik elemendid massiivi kasutades loop, mis Tegelikult on väga rangelt soovitatav kodus kasutada. Kuidas luua massiivi 100 täisarvud, kus iga element massiivi on selle indeks? Nii näiteks on meil hulgaliselt 100 täisarvud ja esimeses element, tahame panna 0. Teises element, me tahame panna 1. Kolmandas element, me tahame panna 2; ja nii edasi ja nii edasi. See on tõesti hea kodus harjutust teha. Siin, see ei tundu nagu liiga palju muutunud. Aga teate, et vahel Nurksulgudes seekord Olen tegelikult jätta arvu. Kui te kasutate seda väga erilist instantiation süntaks luua massiivi, siis tegelikult ei ole vaja näitab suurust massiivi varem. Koostaja on piisavalt targad teada, et te tegelikult tahad massiivi suurus 3, sest paned kolm elementi paremal võrdusmärki. Kui teil oli panna neli, siis oleks andnud teile tõtt tabelis suuruse neli; ja nii edasi ja nii edasi. Massiivid ei piirdu üheainsa mõõde, mis on päris lahe. Võite tegelikult on nii palju pool specifiers kui soovid. Nii näiteks, kui soovite luua juhatuse mängu Soomuslaev, mis kui te olete kunagi mänginud, on mäng, mis on mängitakse pesulõksud kohta 10 10 võrku, võid luua massiivi niimoodi. Võiks öelda Bool lahingulaev nurksulg 10 Suletud nurksulg ruut bracket 10 suletud nurksulg. Ja siis, saate valida tõlgendab seda meelt kui 10 10 grid rakke. Nüüd, tegelikult mälust see tõesti lihtsalt jääb 100 elementi, ühe kolmemõõtmelise massiivi. Ja see, et tegelikult läheb, kui sa on kolm mõõdet või neli või viis. See on tõesti lihtsalt ei korrutada kõik indices-- või kõik suurust specifiers-- kokku ja sa saad ühemõõtmeline massiiv, mis suurus. Aga nii organisatsiooni ja visualiseerimine ja inimese taju, see saab olema palju lihtsam töötada võre Kui te töötate mängu nagu Tic-tac-toe või Soomuslaev või midagi sellist. See on suurepärane võtmiseks, selle asemel mõelda Tic-tac-toe pardal joonena üheksa ruudud või Soomuslaev juhatuse joonena 100 ruutu. 10 10 võrku või kolm kolm grid on ilmselt palju kergemini tajuda. Nüüd midagi tõeliselt oluline umbes massiivid. Me võime ravida iga massiivi element muutujana. Me nägime, et varem kui olime määrates väärtuse True teatud tõeväärtused või nende testimist tingimusavaldistes. Kuid me ei saa ravida kogu massiivid end muutujaid. Me ei saa näiteks anda ühe massiivi teise massiivi kasutades loovutamise operaator. See ei ole õiguslikku C. Kui me tahame, et example-- mida me teeks selle näite Oleks kopeerida ühe massiivi teise. Kui me tahame teha, et me tegelikult vaja kasutada loop kopeerida üle iga üksiku elemendi ühe korraga. Ma tean, et see on natuke aeganõudev. Nii näiteks, kui meil oleks neid paari rida koodi, siis see toimib? Noh, ei, see ei oleks, eks? Kuna me üritame määrata toidu baar. See ei hakka tööle, sest see on massiivi, ja me lihtsalt kirjeldatud et see ei ole juriidiline C. Selle asemel, kui me tahame kopeerimiseks toidu juhtplaadi, mis on see, mida me üritame teha siin, meil oleks vaja süntaks niimoodi. Meil on silmus, mis läheb alates J on võrdne 0 kuni 5, ja me juurdekasvu J iga iteratsiooni silmuse ja Määra elementide niimoodi. See tooks kaasa bar ka olles üks, kaks, kolm, neli, viis, kuid me peame seda tegema seda väga aeglane element-by-element viis, selle asemel, et lihtsalt kopeerida kogu massiivi. Teiste programmeerimine keeled, rohkem moodsate, saab tegelikult teha just Nii lihtne võrdub süntaks. Aga C, kahjuks me oleme ei ole lubatud seda teha. Nüüd, seal on üks teine asi, mida ma tahan mainida umbes massiivid, mis võib olla natuke veidi keeruline esmakordsel nendega koostööd tegema. Arutasime video umbes muutuva ulatusega, et enamik muutujaid C, kui helistate neid funktsioone, mida läbib väärtus. Kas sa mäletad, mida see tähendab edasi midagi, mida väärtust? See tähendab, et me teeme koopia muutuja, mis kuramuse möödunud aastal. Väljakutsutute funktsiooni funktsioon mis on saanud muutuja ei saa muutuja ise. Läheb oma kohaliku koopia koos töötada. Massiivid, muidugi tegema ei järgi seda reeglit. Pigem me nimetame seda möödub viitega. Väljakutsutute tegelikult ei saanud massiivi. See ei saa oma oma kohaliku koopia. Ja kui sa arvad see on see mõttekas. Kui massiivid on tõesti suur, võtab nii palju aega ja vaeva teha koopia massiivi 100 või 1000 või 10000 elemendid, et see ei ole seda väärt jaoks funktsioneerida saada selle koopia, teha mõned tööd, ja siis lihtsalt võimalik teha koopia; see ei pea olema see rippus ümber enam. Kuna massiivid on mõned mahukad ja kohmakad, me lihtsalt mööda need tooted. Me lihtsalt loodan, et funktsiooni et, ei riku midagi. Nii see tegelikult saada massiivi. See ei saa oma kohaliku koopia. Mida see tähendab, siis, kui Väljakutsutu manipuleerib elemendid massiivi? Mis juhtub? Praegu me läike üle, miks just see juhtub, miks massiivid on läbinud viitega ja kõik muu on vastu võetud väärtus. Aga ma luban, me tagasi ja teile vastus Käesoleva uuringu hilisemas video. Siin on veel üks harjutus sulle enne kui me pakkima asju massiivid. Hunnik koodi siin, see on mitte eriti hea stiil, lihtsalt ma teen, et hoiatus. Ei ole kommentaare siin, mis on päris halb vorm. Aga see on ainult sellepärast, et ma tahtsin olla mahuvad kõik ekraanil. Ülaosas, näed, et ma pean kaks funktsiooni deklaratsioonide array ja määrata int. Määra massiivi ilmselt võtab massiivi Nelja täisarvud sisendina. Ja komplekt int ilmselt võtab täisarv sisendina. Aga nad mõlemad ei ole väljund. Toodangu, tagastamise kirjuta, iga üks on tühine. Põhi on meil paar rida koodi. Me kinnitame täisarv muutuja A-ks ja määrata selle väärtus 10. Me kinnitame massiivi neli täisarvud nimetatakse B ja määrata elementide 0, 1, 2 ja 3, vastavalt. Siis on meil kõnet, int ja kõnet, et massiivi. Definitsioone massiivi ja komplekt int on allapoole, allosas. Ja nii uuesti, ma palun teil on küsimus. Mis saab välja trükkida siin lõpus Main? Seal on väljatrükk col. Ma olen väljatrükk kaks täisarvu. Ma väljatrükk sisu ja sisu B nurksulg 0. Peata video siin ja võta minut. Kas sa aru saada, mis see funktsioon prindib lõpus? Loodetavasti, kui te mäletate vahet möödub väärtus ja kulgeb läbi viite, seda Probleem ei olnud liiga keeruline sinu jaoks. Ja vastus soovid leidnud on see. Kui sa ei ole päris kindel, et miks see on nii, võta teine, tagasi minna, vaadata, mida ma olin lihtsalt arutada umbes kulgeb massiivid lähtudes, võrreldes kulgeb muude muutujate väärtuste järgi, ja loodetavasti see teen natuke rohkem mõistust. Ma olen Doug Lloyd, ja see on CS50.