[Přehrávání hudby] DOUG LLOYD: Dobře. Práce s single proměnné je docela legrace. Ale co když chceme pracovat s mnoha proměnnými, ale my nechceme mít spoustu různá jména létání kolem naší kód? V tomto případě, jsou pole přijde opravdu vhod. Pole jsou opravdu základní údaje struktura pro libovolném programovacím jazyce že budete používat. A jsou opravdu, opravdu užitečné, zejména, jak uvidíme, v CS 50. Používáme pole držet hodnoty stejného datového typu na souvislých paměťových míst. To znamená, že je to způsob, jak můžeme skupina banda celých čísel spolu paměti nebo parta znaků nebo plave v paměti opravdu blízko u sebe a práce s nimi, aniž by bylo, aby každý jedním jeho vlastní jedinečný název, který může dostat těžkopádné po chvíli. Nyní, jeden způsob, jak analogize polí je přemýšlet o vašem místním příspěvek kancelář na vteřinu. Takže krok od programování a jen zavřete oči a představit ve své mysli Váš místní pošta. Obvykle se ve většině sloupku kanceláře, tam je velká banka A poštovní schránky na zdi. Pole je obří blok souvislé paměti, stejným způsobem, že poštovní Banka ve své poště je velký prostor na stěna na poště. Arrays byly rozděleny do malých, stejně velké bloky prostoru, přičemž každý z nich je nazýván prvek, v stejným způsobem, že stěny sloupku office byl rozdělen do malých, stejně velké bloky prostoru, který nazýváme PO box. Každý prvek pole může uložení určitého množství dat, stejně jako každá poštovní schránka je schopen držet určité množství pošty. Co může být uložen v každém prvku pole je proměnné stejného dat typu, jako například int nebo char, jen stejně jako ve vaší poštovní přihrádku, se vejde jen věci podobného typu, jako například písmen nebo malých baleních. A konečně, můžeme přístup ke každému prvku pole přímo číslem indexu, stejně jako můžeme přístup do našeho pošta box tím, že zná její číslo schránky. Doufejme, že analogie vám pomůže dostat své hlavy kolem myšlenky polí strany analogizing na něco jiného že jste pravděpodobně již obeznámeni s. V jazyce C, prvky pole jsou indexovaných od 0, není od 1. A to je opravdu důležité. A ve skutečnosti, to je důvod, proč jsme v CS 50, A proč počítačoví odborníci často se bude počítat od 0, je protože C je matice indexování, který vždy začíná na 0 ° C. Takže pokud pole se skládá z n elementy, první prvek daného pole se nachází na indexu 0, a poslední prvek pole se nachází na indexu n minus 1. Opět platí, že pokud je tu n prvky v naší pole, poslední index n minus 1. Takže pokud naše pole má 50 prvků, První prvek je umístěn na indexu 0, a poslední prvek se nachází na indexu 49. Bohužel nebo naštěstí, V závislosti na úhlu pohledu, C je velmi shovívavý. Nebude bránit jít ven hranice svého pole. Ty by mohly získat přístup k minus 3 prvek svého pole nebo 59. prvek vašeho pole, pokud vaše pole má pouze 50 prvků. To se nezastaví svůj program z kompilace, ale za běhu, můžete narazit na obávané chyba segmentace pokud začnete přístup k paměti že je mimo hranice toho, co jste požádal svůj program, aby vám. Takže buďte opatrní. Co pole Prohlášení vypadat? Jak můžeme kód pole do existence jako bychom kód jakoukoli jinou proměnnou? K dispozici jsou tři části na pole declaration-- typ, jméno, a velikost. To je velmi podobné deklarace proměnných, které je jen typ a jméno, velikost prvkem je Zvláštní případ pro matici, protože se dostáváme spoustu z nich ve stejnou dobu. Takže typ je, jaký druh proměnné, kterou chcete, aby každý prvek pole být. Chci ji do pole celých čísel? Poté se typ dat by měl být int. Přejete si, aby to být Pole čtyřhry nebo plováky? Typ dat by měl být dvojité nebo plavat. Jméno je to, co chcete volat své pole. Co chcete, aby pojmenování tohoto obra banka celých čísel nebo plováky nebo znaků nebo čtyřhra, nebo co jste? Co chcete, aby to říkat? Docela samozřejmý. A konečně, velikost, která vede uvnitř hranatých závorek, je, kolik prvky byste jako vaše pole obsahovat. Kolik celá čísla chcete? Kolik plováky chceš? Tak například, int studentů známky 40. To deklaruje pole s názvem Student stupně, které se skládá z 40 čísel. Docela samozřejmý, doufám. Zde je další příklad. Dvojích cen Menu 8. To vytvoří pole s názvem Ceny menu, které se skládá prostoru v paměti pro osm zdvojnásobí. Pokud si myslíte, že každého prvku z pole typu datového typu, takže například, jeden prvek pole typu int, stejným způsobem, by se myslet na jakýkoli jiný proměnná typu int, všechny známé operace, které my již bylo shora uvedeno v provozní Video bude mít smysl. Takže tady bychom mohli prohlásit pole of Boolean zvaných Truthtable, který se skládá z místnosti po dobu 10 Boolean. A pak, stejně jako jsme mohli jen přiřadit hodnota, která má jakýkoli jiný proměnné typu Boolean, mohli bychom říci něco jako Truthtable hranatých závorkách 2, což je, jak ukazují, který prvek pravdivostní tabulky? Třetím prvkem pravdivostní tabulka, protože nezapomeňte, budeme počítat od 0. Tak to je, jak jsme se označují Třetí prvek pravdivostní tabulky. Truthtable 2 rovná false, stejně jako bychom mohli declare-- nebo bychom mohli postoupit, spíše jakýkoli Boolean proměnná typu, že je falešný. Můžeme ho použít i v podmínkách. if (truthtable 7 == true), což znamená, v případě osmého prvku z Truthtable je pravda, Možná, že chceme vytisknout zprávu pro uživatele, printf ("PRAVDA! n") ;. To nás vede k říci Truthtable 10 rovná pravda, že jo? No, můžu, ale je to docela nebezpečný, protože nezapomeňte, máme řadu 10 Boolean. Takže je nejvyšší index, že kompilátor dal nám je 9. Tento program bude sestavovat, ale pokud něco jiného v paměti existuje tam, kde bychom Očekáváme Truthtable 10 jít, jsme mohli trpět chybu segmentace. My mohl dostat pryč s ním, ale obecně, dost nebezpečné. Takže to, co tady dělám je legální C, ale nemusí být nutně nejlepší tah. Nyní, když jste deklarovat a inicializaci pole současně, je to vlastně docela speciální syntaxe, která vás můžete použít k vyplnění pole s počátečními hodnotami. To může dostat těžkopádné deklarovat pole o velikosti 100, a pak musím říct, prvek 0 rovná se to; prvek 1 rovná se to; prvek 2 rovná. Jaký to má smysl, že jo? Pokud je to malé pole, vy mohl udělat něco takového. Bool truthtable 3 rovná open složená závorka a pak čárka oddělit seznam prvků, že chcete, aby v poli. Poté zavřete složenou závorkou středník. To vytvoří pole Velikost Tři volal Truthtable, s prvky false, pravda, a pravda. A ve skutečnosti, že instance syntax I zde je přesně stejný jako dělá jednotlivý prvek syntax níže. Tyto dva způsoby kódování odkázaný produkovat přesně stejné pole. Podobně, mohli bychom iterovat přes všechny prvky z pole pomocí smyčky, která v Skutečnost, je velmi důrazně doporučuje at-home cvičení. Jak si vytvořit pole 100 celých čísel, kde každý prvek matice je jeho index? Tak například, máme řadu 100 celá čísla, a v prvním prvku, Chceme dát 0. Ve druhém prvku, chceme dát 1. Ve třetím prvku, chceme dát 2; a tak dále a tak dále. To je opravdu dobrá at-home cvičení, jak to udělat. Tady, to nevypadá jako příliš nezměnilo. Ale všimněte si, že v mezi hranaté závorky, tentokrát, Já jsem vlastně vynechat číslo. Pokud používáte tuto velmi speciální instance syntax vytvořit pole, ve skutečnosti ne je třeba uvést velikost matice předem. Kompilátor je dost chytrý, vědět, že vás vlastně chtít pole o velikosti 3, proto, že jste dal tři elementy napravo od rovnítka. Pokud jste dal čtyři, mělo by to vám dal pravdivostní tabulky o velikosti čtyř; a tak dále a tak dále. Pole nejsou omezeny na jeden rozměr, což je docela v pohodě. Můžete si skutečně mít tolik Boční Specifikátory, jak si přejete. Tak například, pokud chcete vytvořit tabule pro hru bitevní loď, která, Pokud jste někdy hráli, je hra, která je hrál si s kolíčky na 10 o 10 mřížkou, můžete vytvořit pole, jako je tento. Dalo by se říci Bool bitevní loď hranatou závorku 10 uzavřené hranatá závorka square držák 10 zavřeno hranatou závorku. A pak, můžete si vybrat interpretovat to ve své mysli, jako 10 o 10 mřížky buněk. Nyní, ve skutečnosti, v paměti, to opravdu jen zůstávají 100 prvek, single rozměrné pole. A to ve skutečnosti platí i pro pokud Vás mají tři rozměry nebo čtyři nebo pět. Je to opravdu jen to vynásobit všechny indices-- nebo všechny velikosti specifiers-- dohromady, a vy jen získat jednorozměrný pole o dané velikosti. Ale pokud jde o organizaci a vizualizace a lidské vnímání, to může být mnohem jednodušší pracovat s mřížkou pokud pracujete na hru jako Tic-tac-toe nebo bitevní loď, nebo něco takového. Je to skvělý abstrakce, místo toho, aby přemýšlet o Tic-tac-toe board jako čára devíti čtverce nebo jejich Battleship deska jako řada 100 čtverců. A 10 o 10 mřížkou nebo tři o tři mřížka je pravděpodobně mnohem více snadno vnímat. A teď, něco opravdu důležitého pole. Můžeme léčit každý jednotlivec prvek pole jako proměnné. Viděli jsme, že dříve když jsme byli přiřazování Hodnota true na určité Boolean nebo jejich testování v conditionals. Ale nemůžeme léčit celokrajné Pole se jako proměnné. Nemůžeme například přiřadit jednu soustavu, do jiného pole pomocí přiřazení operátor. To není legální C. Chceme-li, za to, co example-- budeme dělat v tomto příkladu bude kopírovat jednu soustavu, do druhého. Pokud chceme udělat, jsme vlastně je třeba použít smyčku zkopírovat každý jednotlivý element jeden po druhém. Vím, že je to trochu časově náročné. Tak například, když jsme měli těchto pár řádků kódu, by to fungovat? No, ne, to by nebylo, že jo? Vzhledem k tomu, že se snažíme přiřadit jídlo bar. To nebude fungovat, protože je to pole, a my jsme právě popsali že to není legální C. Místo toho, pokud chceme zkopírujte obsah potravin do baru, který je to, co se snažíme dělat tady, bychom potřebovali syntaxi jako je tento. Máme pro smyčce, která jde od J je rovno 0 až 5, a my přírůstek J na každé obrátce smyčka a přiřadit prvky, jako to. To by mělo za následek také baru je jeden, dva, tři, čtyři, pět, ale musíme to udělat tento velmi pomalé element-by-prvkem způsob, místo toho, tím, že jen kopírování celého pole. V jiných programů jazyky, modernější, můžete ve skutečnosti, dělat jen Tak jednoduché rovná syntaxi. Ale C, bohužel, my jsme není dovoleno dělat. A teď, je tu ještě jedna další věc, kterou chci zmínit o pole, které může být trochu trochu složitější poprvé, co pracovat s nimi. Diskutovali jsme ve videu o proměnné rozsah, že většina proměnné v jazyce C, když zavoláte je ve funkcích, jsou předány hodnotou. Vzpomínáte si, co to znamená předat něco podle hodnoty? To znamená, že děláme kopii proměnná, která je právě prošel dovnitř. Funkce volaným, funkce která je obdrží proměnnou, nedostane proměnnou sám. To dostane jeho vlastní místní kopii, která s ním pracovat. Pole, samozřejmě, že ne nenásledují toto pravidlo. Spíše, co nazýváme je kolem odkazem. Volaný vlastně se dostávají pole. To neobdrží vlastní lokální kopie. A pokud si myslíte o to, to má smysl. Pokud pole jsou opravdu velké, to zabere tolik času a úsilí, vytvořit kopii pole 100 nebo 1000 nebo 10000 prvky, že to nestojí to za fungují obdržet kopii toho, udělat nějakou práci s ním, a pak jen být hotové s kopií; to nemusí mít to potlouká kolem už ne. Protože pole jsou některé objemné a těžkopádné, my jen předat je odkazem. Jen Věříme, že funkce k, neporušují nic. Tak to skutečně dostat pole. To už ani nemůže svou vlastní lokální kopii. Takže co to znamená, pak, když volaný manipuluje prvky pole? Co se děje? Pro teď, budeme lesk nad tím, proč právě toto děje, proč pole jsou předány podle odkazu a všechno ostatní je předán podle hodnoty. Ale slibuji vám, budeme vrátit a dát vám odpověď k tomu v pozdějším videu. Zde je ještě jeden cvičení pro vás Než jsme se zabalit věci na polích. Svazek kódu tady, to je nijak zvlášť dobrý styl, Jen Budu dělat, že námitku. Tam je žádné komentáře tady, což je dost špatná forma. Ale je to jen proto, že jsem chtěl být schopný, aby se vešly vše, co na obrazovce. Na vrcholu, můžete vidět, že mám dvě prohlášení funkce pro nastavenou pole a nastavení int. Set pole zřejmě bere pole ze čtyř celých čísel jako vstup. A set int prý bere celé číslo jako jeho vstup. Ale oba z nich nemají výstup. Výstup, návrat typ, na každý z nich je neplatné. V Main, máme pár řádků kódu. Prohlašujeme proměnnou integer volal a přiřaďte jí hodnotu 10. Prohlašujeme pole čtyř celých čísel volal B a přiřadit prvky 0, 1, 2, a 3, v uvedeném pořadí. Pak máme hovor nastavit int a volání pro nastavení pole. Definice nastaveného pole a sady int jsou dole, na dně. A tak, opět bych vám položit otázku. Co se bude vytištěna zde na konci Main? Je tu col výtisk. Jsem vytisknout dvě celá čísla. Já jsem vytištění obsahu a obsah B hranatých závorkách 0. Pozastavit video zde a chvíli trvat. Můžete zjistit, co to Funkce vytiskne na konci? Doufejme, pokud jste si vzpomenout na Rozdíl mezi kolemjdoucí hodnotou a předávání odkazem, tento Problém byl v tom není příliš složité pro vás. A odpověď byste našli to je. Pokud si nejste úplně jistý, jak se proč je to tak, vzít druhý, vrátit, zkontrolovat, co jsem byl jen diskutovat o předávání polí formou odkazu, ve srovnání s průchodem jiné proměnné podle hodnoty, a doufejme, bude to dělat trochu větší smysl. Jsem Doug Lloyd, a to je CS50.