>> [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.