[Predvaja glasba] Doug LLOYD: V redu. Delo z single spremenljivke je precej zabavno. Toda kaj, če želimo delati z veliko spremenljivk, vendar ne želimo, da imajo kup različna imena plujejo okoli našega kodo? V tem primeru so nizi dogaja, da pridejo zelo prav. Polja so res temeljni podatki struktura za katero koli programskega jezika ki ga boste uporabili. In oni so res, res uporabno, posebej, kot bomo videli, v CS 50. Mi uporabljamo nize, da imajo Vrednosti istega podatkovnega tipa na sosednjih pomnilniških lokacijah. To se pravi, da je Tako da bomo lahko skupina kup celih skupaj spomin ali kup znakov ali pa plava v spomin res tesno skupaj in delo z njimi, ne da bi dal vsak ena svojo edinstveno ime, ki lahko dobite okorni po malo časa. Zdaj, eden od načinov za analogize nize je, da razmišljajo o vaši lokalni pošti urad za sekundo. Torej korak stran od programiranja in samo zaprite oči in vizualizirati v tvoji glavi vaša lokalna pošta. Ponavadi je v večini pošti pisarne, tam je velika banka a poštnih predalov na steni. Množica je velikan blok stičnega spomina, na enak način, da se pošta banka v vašem poštnem uradu je velik prostor na stena poštnem uradu. Nizi so bile razdeljene na majhne, enako velikih blokov prostora, od katerih je vsak imenovani element, pri enak način, da steni mesto pisarna je bila razdeljena v majhne, enako velikih blokov prostora, ki jo imenujemo poštni predal. Vsak element matrike lahko shraniti določeno količino podatkov, prav tako kot je vsak post office box sposoben da imajo določeno količino pošte. Kaj se lahko shranijo v vsakem elementu matrika je spremenljivke istih podatkov tip, kot int ali char, samo kot v poštni predal, lahko fit samo stvari podobnega tipa, kot so pisma ali manjših paketov. Nazadnje smo lahko dostopate vsak element array neposredno s številko indeksa, tako kot smo lahko dostopate našo pošto polje s poznavanjem svojo številko predala. Upajmo, da je analogija vam pomaga dobiti svojo glavo okoli idejo nizi ga analogizing nekaj drugega da ste verjetno že poznajo. V C elementi matrike so indeksirajo izhajajoč iz 0, ne od 1. In to je zelo pomembno. In v bistvu je to zato, v CS 50, In zakaj računalniški znanstveniki pogosto bo štel od 0, je Zaradi dodatnih C je indeksiranje, ki se vedno začne pri 0. Torej, če niz sestavljen iz n elementov, Prvi element te matrike se nahaja na indeks 0, in zadnji element matrike se nahaja na indeksom n minus 1. Še enkrat, če je n elementov v našem matrika, zadnji indeks n minus 1. Torej, če je naš nabor 50 elementov, Prvi element se nahaja na indeks 0, in zadnji element se nahaja na indeks 49. Na žalost ali na srečo, odvisno od vaše perspektive, C je zelo prizanesljivi tukaj. To vam ne bo preprečilo dogaja izven igrišča vašega array. Lahko dostop do minus 3 element vaše matrike ali 59. element vaše array, če ima vaš nabor le 50 elementov. To ne bo ustavil svoj program iz pripravo, vendar na doživljenjsko času, boste morda naleteti bala krivda segmentacija če začnete dostop do pomnilnika ki je izven meja kaj boste morali svoj program, da vam. Torej, bodite previdni. Kaj array Izjava izgledal? Kako bomo kodo array v obstoju kot smo kodo nobene druge spremenljivke? Obstajajo trije deli na matriko declaration-- vrsto, ime, in velikost. To je zelo podoben spremenljivka deklaracija, ki je le tip in ime, velikost element čemer posebno velja za niz, saj smo dobili kup njih ob istem času. Torej, tip je kakšno spremenljivko ste ponudbe vsak element matrike biti. Ali jo želite niz celih števil? Nato bi moral tvoj tip podatkov biti int. Ali želite, da biti array dvojicah ali plovci? Vrsta podatkov mora biti dvojna ali plavajo. Ime je kaj želite poklicati svojo paleto. Kaj želite poimenovati ta velikan Banka celih ali plovci ali znakov ali podvoji, ali karkoli že imaš? Kaj hočeš, da ga pokličete? Precej samoumevne. Nazadnje, velikost, ki gre znotraj oglatih oklepajev, je, kako bi jih mnogi elementi kot tvoj array vsebujejo. Koliko celih hočeš? Koliko plava hočeš? Tako, na primer, int študentske ocene 40. To izjavlja array imenovano Student stopnje, ki je sestavljena iz 40 celih števil. Precej samoumevne, upam. Tu je še en primer. Dvojne cene Meni 8. To ustvarja paleto imenovano Cene menijev, ki jih sestavljajo prostora v pomnilniku za osem dvojic. Če menite, da vsakega elementa od array tipa tip-podatkov, tako, na primer, en sam element niz tipa int se vam enak način bi bilo razmišljati o vseh drugih spremenljivka tipa int, vse znane operacije, da smo že razpravljali v operativnem video bo smiseln. Torej, tukaj smo lahko razglasi niz od Booleans imenovanih Truthtable, ki je sestavljen iz prostora za 10 Booleans. In potem, tako kot smo se lahko samo določite vrednost za vsako drugo spremenljivko tipa Boolean, bi lahko rekli kaj kot Truthtable kvadratni nosilec 2, ki je, kako smo se kažejo, kateri element resnice mizo? Tretji element Resnica mizo, saj se spomnite, smo štetje od 0. Torej, to je, kako bomo navesti Tretji element resnice mizo. Truthtable 2 enaka false, tako kot smo lahko declare-- ali bi lahko dodelite, ampak vsak Logični tip spremenljivke, da je lažna. Lahko jo uporabite tudi v pogojih. če (truthtable 7 == Res), kar pomeni, če osmega elementa od Truthtable je res, morda želimo natisniti sporočilo za uporabnika, printf ("TRUE! n") ;. Ki nam povzroča reči Truthtable 10 je enako res, kajne? No, lahko, ampak to je precej nevaren, saj se spomnite, imamo celo paleto 10 Booleans. Torej najvišji indeks, da je prevajalnik je dal nam je 9. Ta program bo sestavil, vendar če je nekaj drugega, v spomin obstaja, če bi mi pričakujejo Truthtable 10 iti, smo lahko trpijo napako segmentacije. Mi lahko izmaže, vendar na splošno, precej nevarno. Torej, kaj delam tukaj je pravna C, vendar pa ni nujno najboljša poteza. Zdaj, ko se prijavijo in inicializirati array hkrati, tam je pravzaprav precej posebno sintakso, ki vas lahko uporabite, da bi zapolnili array s svojimi izhodiščnimi vrednostmi. Prav tako lahko dobili težje razglasi paleto velikosti 100, in potem moram reči, element 0 enak to; Element 1 enak temu; element 2, da je enak. V čem je smisel, kajne? Če je majhen niz, si lahko naredil kaj takega. Bool truthtable 3 enaka odprta kodrasti brace in nato vejica ločevanje seznam elementov ki jo želite dati v matriki. Nato zaprite zavit oklepaj podpičjem. To ustvarja niz Velikost tri imenuje Truthtable, z elementi false, true, in res. In v resnici, o primeru sintaksa imam tu natanko isto kot počne Posameznik skladenjski element spodaj. Ta dva načina kodiranja bi pa proizvajajo točno isto vrsto. Podobno bi lahko Ponovil preko vseh elementov od array uporabo zanko, ki je v Dejstvo, je zelo zelo priporočljivo at-home vaja. Kako si ustvariti niz 100 celih števil, kadar vsak element matrike je njen indeks? Tako na primer imamo paleto 100 cela števila, in v prvem elementu, želimo postaviti 0. V drugem elementu, želimo postaviti 1. V tretji element, želimo postaviti 2; in tako naprej in tako naprej. To je res dobra at-home vaja, da to storim. Tukaj ni videti kot je preveč spremenila. Ampak obvestilo, da je med oglati oklepaji, ta čas, Sem dejansko izpustimo številko. Če uporabljate to zelo posebno o primeru sintaksa da ustvarite matrika, ki jih dejansko ne morate navesti velikost array vnaprej. Prevajalnik je dovolj pameten, vedeti, da vas dejansko želijo paleto velikosti 3, ker si dal tri elemente na desni strani enačaja. Če bi si dal štiri, bi bilo vam dal resnico tabelo velikosti štiri; in tako naprej in tako naprej. Nizi niso omejene na eno samo razsežnost, ki je precej kul. Lahko dejansko imajo toliko stranske projektantje kot želite. Torej, za primer, če želite ustvariti tabla za igro Battleship, ki, če si kdaj igral, je igra, ki je igral s čepki na 10. do 10. omrežje, lahko ustvarite paleto, kot je ta. Lahko bi rekli, bool bojna oglati oklepaj 10 zaprt oglati oklepaj square Nosilec 10 zaprt oglati oklepaj. In potem se lahko odločite za to razlagajo v tvoji glavi kot 10 10 mrežo celic. Sedaj v bistvu v spomin, res ne samo ostane 100 element, single dimenzionalni array. In to v resnici, gre za, če vas imajo tri dimenzije ali štiri ali pet. To je res samo ne množijo vse indices-- ali vseh velikosti specifiers-- skupaj in ste pravkar dobili enodimenzionalna array te velikosti. Ampak v smislu organizacije in vizualizacija in človeška percepcija, je lahko veliko lažje za delo z omrežjem če delate na igro kot Tic-tac-toe ali Battleship, ali nekaj takega. To je velika abstrakcija, namesto da razmišljati o Tic-tac-toe svet kot linijo devetih kvadratov ali Battleship board kot vrstica 100 kvadratov. 10-10 omrežje ali tri s tremi omrežje je verjetno Veliko bolj enostavno zaznati. Zdaj pa nekaj res Pomembno približno nizi. Mi lahko privoščite vsak posameznik element matrike kot spremenljivko. Videli smo, da prej ko smo dodeljevanju vrednost True nekaterim Booleans ali jih je testiranje v pogojnih. Vendar ne moremo obravnavati cele sami nizi kot spremenljivke. Ne moremo na primer dodelite en niz na drugi matriki, ki uporablja razporeditev operater. To ni pravna C. Če želimo, za example-- kaj pa bi storili v tem primeru bi bilo, da bi kopirali en niz v drugega. Če želimo narediti, da smo dejansko morali uporabiti zanko, da bi kopirali več vsak posamezen element enega naenkrat. Vem, da je malo zamudno. Torej, za primer, če bi imeli te par vrstic kode, bi to delo? No, no, da ne bi, kajne? Ker smo poskušali dodeliti hrano bar. Da ne bo delovalo, ker je matrika, in smo pravkar opisali da to ni pravna C. Namesto tega, če želimo kopirati vsebino hrane v baru, kjer je kaj smo poskušali narediti tukaj, mi bi potrebovali sintakso, kot je ta. Imamo za zanke, ki gre od J enak 0 do 5, in smo prirastek J na vsaki ponovitvi zanka in določite elemente, kot da. To bi povzročilo baru tudi pri čemer ena, dva, tri, štiri, pet, ampak jo moramo to storiti zelo počasno element-by-element način, Namesto s pravkar kopiranje celotno paleto. V drugih programskih jeziki, bolj sodobni tisti, lahko v resnici, ne samo Tako preprosto je enako sintakso. Ampak C, žal, smo ni dovoljeno, da to storim. Zdaj obstaja ena druga stvar bi rad omenil o nizi da lahko malo bit težavno, ki ste ga prvič delo z njimi. Smo razpravljali v videoposnetku o variabilnega področja, da večina spremenljivke v C, če pokličete jim v funkcijah, so po vrednosti. Se spomnite, kaj to pomeni da prenese nekaj po vrednosti? To pomeni, da smo kar kopijo spremenljivka, ki se je opravil v. Funkcija callee, funkcija da je prejemanje spremenljivko, ne dobijo spremenljivko sam. To postane sama lokalna izvod to delati. Nizi, seveda, ne ne po tem pravilu. Namesto, kar imenujemo to je po referenci. Callee dejansko ne prejme niz. To ne prejme njeno lastna lokalna kopija. In če mislite, da o tem da je to smiselno. Če so nizi zelo velika, tako traja toliko časa in truda narediti kopijo array 100 ali 1.000 ali 10.000 elementi, da je ni vredno za delovati prejeti kopijo njega, narediti nekaj dela z njim, in nato samo je treba storiti s kopijo; to ni potrebno imeti da visi okoli več. Ker so nizi nekateri zajetno in okorni, smo jih pravkar prenese z referenco. Samo zaupamo, da funkcijo da, ne zlomi ničesar. Tako da se dejansko dobil niz. To ne bi dobili svojo lokalno kopijo. Torej, kaj to pomeni, potem, ko je callee manipulira elemente matrike? Kaj se zgodi? Za zdaj, bomo zatajili več, zakaj ravno ta se zgodi, zakaj nize so opravili s sklicevanjem in vse ostalo se prenese po vrednosti. Ampak obljubim ti, bomo vrnil in vam odgovor da je to v kasnejšem video. Tukaj je še ena vaja za vas preden smo zaviti stvari na nizi. Kup kode tukaj, to je ni posebej dober stil, Pravkar sem bom, da to opozorilo. Ni komentarjev tukaj, ki je precej slaba oblika. Ampak to je samo zato, ker sem hotel biti sposobni prilagoditi vse na zaslonu. Na vrhu, lahko vidite, da imam dve deklaracije funkcij za set paleto in nastavite int. Set paleto očitno traja niz štirih števil kot vložek. In set int očitno traja ena celo kot svoj vložek. Toda oba nimajo izhoda. Izhod, vrnitev tip, za ničen vsak. V glavnem, imamo nekaj vrstic kode. Izjavljamo celo število spremenljivko imenuje in mu dodeliti vrednost 10. Izjavljamo niz štirih števil imenovano B in določite elemente, 0, 1, 2 in 3, v tem zaporedju. Nato smo klic, da nastavite int in klic, da nastavite paleto. Opredelitve pojmov nastavljeno paleto in nabor int so pod tla in na dnu. In tako, še enkrat, sem vam zastavil vprašanje. Kaj dobi izpisal tukaj na koncu Main? Tam je izpis col. Jaz sem tiskanje dve celi števili. Jaz tiskanje vsebine in vsebina B kvadratni nosilec 0. Premor video tukaj in traja približno minuto. Lahko ugotovimo, kaj je to Funkcija bo izpisal na koncu? Upajmo, če spomnimo Razlikovanje med mimogrede po vrednosti in po referenci, to Problem ni bil preveč zapleteno zate. In odgovor bi jih Ugotovili to. Če niste prepričani, da se zakaj je temu tako, bo drugi, iti nazaj, pregledali, kaj sem pravkar razpravljali o prehodu nize z referenco, v primerjavi poteka druge spremenljivke po vrednosti, in upam, da bo to, da malo več smisla. Sem Doug Lloyd, in to je CS50.