[Zenelejátszási] DOUG LLOYD: Rendben. Munka egységes változók elég szórakoztató. De mi van, ha akarunk dolgozni egy csomó változók, de nem akarjuk, hogy van egy csomó különböző nevek repkednek a kódot? Ebben az esetben a tömbök fog jönni az igazán praktikus. A tömbök egy igazán alapvető adatok szerkezet bármely programozási nyelv fog használni. És ők nagyon, nagyon hasznosak, Különösen, mint látni fogjuk, a CS 50. Mi tömböket használnak, hogy tartsa értékek az azonos típusú adatok A folytonos memóriát helyeken. Azaz, ez egy így tudjuk csoport egy csomó egész együtt memória vagy egy csomó karakter vagy úszik a memória igazán közel egymáshoz, és a munka velük, anélkül, hogy minden egyes Egy saját, egyedi nevet, ami hogy nehézkes miután egy kicsit. Most, egy módja annak, hogy analogize tömbök az, hogy átgondolják a helyi posta második hivatali. Tehát lépésre a programozási és csak csukd be a szemed és láthatóvá a fejedben a helyi posta. Általában, a legtöbb hozzászólás irodában, van egy nagy bank A postafiókok a falon. A tömb egy hatalmas tömb összefüggő memóriaterületet, Ugyanúgy, ahogy egy-mail bank a posta egy nagy tér a fal a posta. A tömbök is osztjuk kicsi, azonos méretű blokkok a tér, amelyek mindegyike az úgynevezett egy elem, a azonos módon, hogy a fal a poszt hivatal már osztjuk kicsi, azonos méretű blokkok a tér, ahogy mi hívjuk a PO box. Minden eleme a tömb tárolja egy bizonyos mennyiségű adat, mint ahogy az egyes postafiók képes tartani egy bizonyos összeget a postán. Mit lehet tárolni minden eleme A tömb változók ugyanazon adatok típusú, mint például int, vagy char, csak mint a postafiók, akkor csak illik a dolgokat A hasonló típusú, például levelek vagy kis csomagokban. Végül, akkor érheti el az egyes elemét A tömb közvetlenül index száma, mint ahogy mi is elérheti a posta doboz ismeretében a postafiók számát. Remélhetőleg, hogy az analógia alkalmazás segít a fejed körül azt az elképzelést tömböket analogizing valami másra hogy Ön valószínűleg már ismerik. C-ben a tömb elemeit egy olyan indexelt 0-tól, nem 1-jétől. És ez nagyon fontos. És valóban, ez az, amiért mi, a CS 50, és miért számítógépes szakemberek gyakran számítanak 0, a mert a C- tömb indexálás, amely mindig 0-nál kezdődik. Tehát, ha egy tömbben áll az n elem, az első eleme, hogy tömb található index 0 és Az utolsó elem a tömb található n index mínusz 1. Ismét, ha van n eleme a mi tömb, az utolsó index n mínusz 1. Tehát, ha a tömb 50 elem, a első elem található index 0, és az utolsó elem található index 49. Sajnos, vagy szerencsére, attól függően, hogy a perspektíva, C nagyon engedékeny itt. Ez nem akadályozza meg a megy ki a határokat a tömb. Lehet elérni a mínusz 3 eleme a tömb vagy a 59. eleme a tömb, ha a tömb csak 50 elemet. Ez nem fog megállni a program összeállítása, de futás közben, Ön is találkozhat a rettegett szegmentációs hiba ha elkezd hozzáférni a memória ami kívül esik a határokat, hogy mi Azt kérdezted a programot, hogy az Ön. Szóval ne légy óvatos. Mit jelent egy tömböt nyilatkozatot néz ki? Hogyan kódot tömb létre mint mi kódolni bármilyen más változó? Három részből tömbbé declaration-- típusú, egy nevet, és a mérete. Ez nagyon hasonló egy változó deklaráció, amely csak egy típust és egy nevet, A méret elemként jelent A speciális eset egy tömb, mert kaptunk egy csomó őket ugyanabban az időben. Tehát a típus milyen változót szeretnénk minden eleme a tömb lenni. Ne akarja, hogy egy sor egész? Ezután az adatok típusát kell int. Tudni szeretné, hogy legyen egy tömb páros vagy úszik? Adat típus legyen dupla vagy lebegni. A név, amit Szeretné felhívni tömb. Mit akar elnevezni ezt a hatalmas partján egész vagy úszók vagy karakter vagy páros, vagy bármi, ugye? Mit akar nevezni? Elég magától értetődő. Végül, méret, ami megy belsejében szögletes zárójelben, az, hogy hány elemet szeretnéd mint a tömb tartalmazza. Hány egész akarsz? Hány úszók akarsz? Így például int hallgatói évfolyamon 40. Ez kijelenti nevű tömbben Student fokozat, amely a 40 egész számok. Elég magától értetődő, remélem. Itt egy másik példa. Dupla menü ára 8. Ez egy tömböt hoz létre az úgynevezett Menü ára, amely A szoba memória nyolc páros. Ha úgy gondolja, az egyes elemek egy tömb típusú adat-típusú, így például egy egyetlen eleme tömb int típusú, ugyanúgy, ahogy a azt hiszem, más típusú változó, minden a megszokott műveleteket, hogy mi korábban tárgyalt az Üzemben videó lesz értelme. Tehát itt, tudtuk egy tömböt A Logikai nevű Truthtable, amely teret 10 Logikai. És akkor, mint mi is csak rendelni érték bármely más típusú változó Logikai, mondhatnánk valamit mint Truthtable szögletes zárójel 2, ami így azt jelzi, amely eleme az igazság asztalra? A harmadik elem a igazságtábla, mert emlékszem, Számítunk 0. Szóval mi így jelzik a harmadik eleme az igazság táblázat. Truthtable 2értéke hamis, mint tudjuk declare-- vagy tudnánk rendelni, hanem bármely Logikai típusú változó, hogy hamis. Azt is használja a feltételeket. if (truthtable 7 == igaz), ami azt, ha a nyolcadik elem A Truthtable igaz, Talán szeretnénk nyomtatni egy üzenetet a felhasználó, printf ("IGAZ! n") ;. Olyan tény, amely azt Truthtable 10 egyenlő igaz, ugye? Nos, tudom, de ez elég Veszélyes, mert emlékszem, van egy sor 10 Logikai. Tehát a legmagasabb index, amely a fordító adott nekünk 9. Ez a program összeállításához, de ha valami mást emlékére van, ahol mi lenne számíthat Truthtable 10 menni, tudnánk szenvedni szegmens hiba. Mi Lehet, hogy megúszod, de általában, elég veszélyes. Szóval mit csinálok itt legális C, de nem feltétlenül a legjobb lépés. Most, amikor kijelentem, és alaphelyzetbe tömb egyidejűleg, van valójában egy csinos speciális szintaxist, hogy segítségével töltse ki a tömb A kiindulási értékeket. Meg tud nehézkes egy tömböt a mérete 100, majd meg kell mondanom, elem 0 megegyezik ez; 1 elem megegyezik ez; elem 2 megegyezik. Mi az értelme, ugye? Ha ez egy kis tömb, akkor tehetett ilyet. Bool truthtable 3értéke nyitott kapcsos zárójel, majd vessző külön a fenti elemek hogy el kívánja helyezni a tömbben. Ezután zárja kapcsos zárójel pontosvessző. Ez létrehoz egy sor mérete három úgynevezett Truthtable, elemekkel hamis, igaz, és igaz. És valóban, a példányosítás szintaxis van itt pontosan ugyanaz, mint csinál a egyes eleméhez szintaxis alább. Ez a két módon kódolási lenne termel pontosan ugyanazt a tömb. Hasonlóképpen, tudtuk ismételget felett az összes elem egy tömb segítségével egy hurok, amely Tény, hogy egy nagyon erősen ajánlott otthoni gyakorlat. Hogyan hozható létre egy tömböt 100 egészek, ahol minden eleme a tömb indexét? Így például, hogy van egy sor 100 egész számok, és az első elem, akarjuk helyezni 0. A második elem, azt akarjuk, hogy 1. A harmadik elem, szeretnénk hogy 2; és így tovább, és így tovább. Ez egy nagyon jó otthoni edzés erre. Itt nem úgy néz ki mintha túl sok minden változott. De észre, hogy a szögletes zárójelben, ebben az időben, Már tényleg kimaradt a számot. Ha használja ezt a nagyon Különleges példányosítását szintaxist, hogy hozzon létre egy tömb, hogy tényleg nem szükség van, hogy jelezze a méret A tömb előtt. A fordító elég okos ahhoz, Fontos tudni, hogy ténylegesen szeretnénk egy sor mérete 3, mert teszel három elem a jogot az egyenlőségjel. Ha már fel négy, neki kellene adott neked igazság táblázat méretét négy; és így tovább, és így tovább. A tömbök nem korlátozódik egyetlen dimenziót, ami elég jó. Tudod valójában annyi oldalán előírást, ahogy szeretné. Így például, ha azt szeretné, hogy hozzon létre A fórumon a játék Battleship, amely, Ha valaha is játszottam, egy játék, játszott kampót a 10 10 grid, tudna létrehozni egy tömböt, mint ez. Azt lehetne mondani, Bool csatahajó szögletes zárójel 10 zárt szögletes zárójel téren konzol 10 zárt szögletes zárójel. És akkor, akkor választhat, hogy értelmezi ezt a fejedben, mint egy 10 10 rács a sejtek. Most, sőt, a memóriában, ez tényleg csak továbbra is 100 elem, egydimenziós tömbben. És ez, sőt, megy, ha Van három dimenzióban vagy négy vagy öt. Ez tényleg csak nem szaporodnak az összes indices-- vagy az összes mérete specifiers-- együtt, és akkor csak kap egy egydimenziós tömb, amely méretét. De a szervezés és vizualizáció és az emberi érzékelés, akkor sokkal könnyebb dolgozni egy rács ha dolgozik egy játék mint a Tic-tac-toe vagy csatahajó, vagy valami ilyesmi. Ez egy nagy absztrakció, ahelyett, gondolkodni egy tic-tac-toe táblán, mint a sorban kilenc négyzet vagy egy csatahajó társasjáték mint egy vonal a 100 négyzetek. A 10, 10 vagy táblázatban három három rács talán sokkal több könnyű észlelni. Most, valami igazán Fontos mintegy tömbök. Tudjuk kezelni az egyes elem a tömb, mint egy változó. Láttuk, hogy a korábbi amikor mi voltunk kiosztása értékének Igaz, hogy bizonyos Logikai vagy tesztelés őket feltételes. De nem tudjuk kezelni a teljes tömbök magukat változók. Nem tudjuk például, hogy rendeljen tömb egy másik tömbben a feladat üzemben. Ez nem jogi C. Ha azt akarjuk, hogy, a mi example-- mi tenne ebben a példában lenne másolni egy tömböt a másik. Ha meg akarjuk csinálni, hogy mi valójában kell használni a hurok másold át minden egyes elem egy olyan időpontban. Tudom, hogy ez egy kicsit időigényes. Így például, ha volna ezeket a házaspár sornyi kódot, lenne ezt a munkát? Nos, nem, nem, nem igaz? Mert mi próbálunk rendelni ételt bárban. Ez nem fog működni, mert egy tömb, és mi csak le hogy ez nem jogi C. Ehelyett, ha azt akarjuk, hogy másolni élelmiszer a bárban, amely a mi próbálunk csinálni itt, szükségünk lenne egy szintaktikai, mint ez. Van egy ciklusban, hogy megy : J egyenlő 0 legfeljebb 5, és mi növedék J minden iterációjában a hurok, és hozzá elemeket, mint ezt. Ez azt eredményezné, hogy bár is hogy egy, kettő, három, négy, öt, de meg kell csinálni ezt a nagyon lassú element-by-element módon, ahelyett, hogy a most másolás a teljes tömb. Más programozási nyelvek, modernebb is, akkor, sőt, nem csak Ilyen egyszerű egyenlő szintaxis. De C, sajnos, mi vagyunk Nem tehettem meg. Nos, van egy másik dolog, amit szeretnék megemlíteni, körülbelül tömbök, hogy lehet egy kicsit kicsit trükkös az első alkalommal, amikor velük együtt dolgozni. Megbeszéltük a videót mintegy változó alkalmazási körét, hogy a legtöbb változók C, amikor telefonál őket funkciók, érték szerint adódnak át. Emlékszel, hogy mit jelent átadni valamit érték? Ez azt jelenti, hogy még van egy példányt a változó, amit most telt be. A hívott fél funkció, a függvény hogy nem fogadják el a változó, nem kapja meg a változó magát. Egyre saját helyi másolatát, hogy dolgozni. Tömbök, persze, nem nem követi ezt a szabályt. Inkább hívjuk ezt Múlik hivatkozással. A hívott fél ténylegesen kapja meg a tömb. Ez nem kapja meg saját helyi másolatát. És ha belegondolunk ez, ennek van értelme. Ha elrendezések valóban nagy, vesz annyi időt és energiát hogy egy példányát egy sor 100 vagy 1000 vagy 10000 elem, hogy nem éri meg a működik, hogy kap egy példányt belőle, némi munkát vele, majd Csak tenni a másolat; nem kell, hogy ez lógott többé. Mert tömbök néhány terjedelmes és nehézkes, mi csak átadni azokat hivatkozást. Mi csak bízom abban, hogy a funkció a, nem törik semmit. Tehát ez tényleg csak a tömb. Ez nem lesz saját helyi másolatát. Szóval mit jelent ez, Ezután, amikor a hívott manipulálja elemei a tömb? Mi történik? Egyelőre mi fényes mint hogy miért éppen ez történik, miért tömbök átadása hivatkozás és minden mást fogad el érték. De ígérem, mi lesz vissza, és megadja a választ hogy ezt egy későbbi videót. Itt van még egy edzés az Ön számára mielőtt lezárja a dolgokat tömbök. A csomó kódot itt, ez nem különösebben jó stílusban, Csak teszem, hogy kivétellel. Nincs hozzászólás itt, ami elég rossz formában. De csak azért, mert szerettem volna lenni tudja, hogy illeszkedjen mindent a képernyőn. A tetején, akkor láthatjuk, hogy van két funkció nyilatkozatok beállított tömb és állítsa int. Set tömb nyilván tart egy tömböt A négy egész számot, mint a bemeneti. És set int nyilván tart Egyetlen egész, mint a bemeneti. De mindketten nincs kimenet. A kimenet, a visszatérés írja, mindegyik érvénytelen. Main, van egy pár sornyi kódot. Kijelentjük, ami egy egész szám úgynevezett A és rendelje hozzá a 10-es értéket. Kijelentjük, egy sor négy egész számot úgynevezett B és rendelheti elemek 0, 1, 2, és 3., ill. Aztán van egy hívás, hogy hozzanak int és egy felhívást, hogy hozzanak tömb. A meghatározások beállított tömb és készlet int a lent, a lap alján. És igen, megint kérem a kérdést. Mi lesz kinyomtatható itt a végén Main? Van egy kinyomtatott col. Vagyok kinyomtatásával két egész szám. Én kinyomtatott tartalmát és tartalmát B szögletes zárójel 0. Szünet a videót itt, és egy perc. Tud kitalálni, mi ez függvény kiírja a végén? Remélhetőleg, ha felidézzük a megkülönböztetése elhaladó értéke és referenciakénti, ez a probléma nem volt túl bonyolult az Ön számára. És a válasz tenné Találtunk ez. Ha nem vagy benne biztos, hogy Ezért ez a helyzet, hogy egy második, menj vissza, áttekintsék, milyen voltam megvitatni a tömbök átadása referenciaként, versus elhaladó Más változók értékét, és remélhetőleg, ez lesz, hogy egy kicsit több értelme van. Én Doug Lloyd, és ez CS50.