[Musiikkia] DOUG Lloyd: Selvä. Työskentely yhden muuttujat on aika hauskaa. Mutta mitä jos haluamme työskennellä jossa on paljon muuttujia, mutta emme halua olla nippu eri nimiä lentelee meidän koodi? Tässä tapauksessa taulukot ovat tulossa todella kätevä. Taulukot ovat todella perustavanlaatuinen tiedot rakenne tahansa ohjelmointikielellä jota käytät. Ja he todella, todella hyödyllinen, varsinkin, kun näemme, CS 50. Käytämme taulukot pitää arvot samaa tietotyyppiä klo vierekkäisiä muistipaikkaa. Toisin sanoen, se on tapa, jolla voimme ryhmä joukko kokonaislukujen yhdessä muistiin tai joukko merkkejä tai kelluu muistiin todella lähekkäin ja työ niitä ilman antaa jokaiselle yksi oma yksilöllinen nimi, joka voi saada hankalia hetken kuluttua. Nyt, yksi tapa analogize paneelit on mieti paikallisen postin toimisto toista. Joten askel poispäin ohjelmointi ja sulje silmäsi ja visualisoi mielessäsi paikallisesta postista. Yleensä useimmissa post toimistot, siellä suuri pankki postilokerot seinälle. Array on jättiläinen lohko yhtenäistä muistia, samalla tavalla kuin posti pankki omassa postissa on suuri tilaa seinä posti. Taulukot on jaettu pieniin, identtisesti kokoisia lohkoja tilaa, joista kukin on kutsutaan elementtiä Samalla tavoin, että seinämä kentältä toimisto on osioitu pieniksi, identtisesti kokoisia lohkoja tilaa, jota kutsumme postilokero. Jokainen alkio voi tallentaa tietty määrä tietoa, aivan kuten jokainen posti laatikko pystyy pitää tietty määrä postia. Mitä voidaan tallentaa jokaisen elementin matriisi on muuttujat samat tiedot tyyppi, kuten int tai char, vain kuten omassa posti laatikko, voit vain sovi asioita Samantyyppisiä, kuten kirjaimia tai pienissä pakkauksissa. Lopuksi voimme käyttää jokaisen elementin array suoraan indeksin numero, aivan kuten voimme käyttää myös posti box tuntemalla sen postilaatikon numero. Toivottavasti että analogisesti auttaa saat päätäsi noin ajatus matriisia analogizing jotain muuta että olet todennäköisesti jo tuttu. C, elementit jono ovat indeksoitu alkaen 0, ei 1. Ja tämä on todella tärkeää. Ja itse asiassa tästä syystä me, CS 50, ja miksi tietotekniikan tutkijoita usein laskee 0, on koska C: n array indeksointi, joka aina alkaa 0. Joten jos joukko koostuu n elementtejä, ensimmäinen osa, joka array sijaitsee indeksi 0, ja viimeinen osa array sijaitsee indeksi n miinus 1. Jälleen, jos on n alkiota meidän array, viimeinen indeksi on n miinus 1. Joten jos meidän joukko on 50 elementtejä, ensimmäinen elementti sijaitsee indeksi 0, ja viimeinen osa sijaitsee indeksi 49. Valitettavasti tai onneksi riippuen näkökulmasta, C on hyvin lievä täällä. Se ei estä sinua menee out of bounds oman array. Voisit miinus 3 osa sinun array tai 59. osa sinun array, jos joukko on vain 50 elementtejä. Se ei lopeta ohjelmaa kokoamiseen, mutta suorituksen aikana, saatat kohdata pelätty segmentointi vika jos alkaa käyttää muistia että on rajojen ulkopuolella, mitä pyysit ohjelma antaa sinulle. Joten älä ole varovainen. Mitä array ilmoitus näyttää? Miten koodata array olemassaoloon kuten me koodata muitakin muuttujia? On kolme osaa array declaration-- tyyppi, nimi, ja koko. Tämä on hyvin samankaltainen muuttuja ilmoitus, joka on vain tyyppi ja nimi, koko elementti on erikoistapaus varten array, koska saamme nippu niitä samaan aikaan. Joten tyyppi on, millaista muuttuja haluavat jokainen osa array olla. Halua sen joukko kokonaislukuja? Sitten tietosi, olisi oltava int. Haluatko sen olevan joukko tupla tai kelluu? Tietotyyppi pitäisi olla kaksinkertainen tai kellua. Nimi on mitä haluavat soittaa array. Mitä haluat nimetä tämän jättiläinen pankki kokonaislukujen tai kellukkeet tai merkkiä tai kahden, tai mitä olet? Mitä haluat soittaa sitä? Melko itsestään selvä. Lopuksi, koko, joka menee sisällä hakasulkeissa, on kuinka monta elementtiä olisit kuten teidän array sisältää. Kuinka monta kokonaislukua haluat? Kuinka monta kellukkeet haluat? Niinpä esimerkiksi, int opiskelija laadut 40. Tämä ilmoittaa array nimeltään Student laadut, joka koostuu 40 kokonaislukuja. Melko itsestään selvä, toivottavasti. Tässä toinen esimerkki. Kaksinkertainen valikko hinnat 8. Tämä luo array nimeltään Valikko hintoja, joka koostuu tilaa muistiin kahdeksan kaksinkertaistuu. Jos luulet jokaisen elementin on joukko tyyppi tietojen tyyppi, niin esimerkiksi yksittäinen elementti joukko int, samalla tavalla kuin ajattelisi muuta muuttuja tyyppiä int, kaikki tutut toiminnot että me keskusteltu aiemmin Operations video on järkeä. Joten tässä, voisimme julistaa array on Booleans kutsutaan Truthtable, joka koostuu tilaa 10 Booleans. Ja sitten, aivan kuten me voisi vain antaa arvo muihin tyyppisenä muuttujana Boolean, voisimme sanoa jotain kuten Truthtable hakasulje 2, joka on, miten me osoittavat, joka elementti totuustaulukon? Kolmas elementti totuustaulu, koska muistan, olemme laskien 0. Niin, että miten me osoittavat kolmas elementti totuustaulu. Truthtable 2 tuloksena vääriä, aivan kuten voisimme declare-- tai voimme luovuttaa, vaan kaikki Boolean tyyppi muuttuja vääriksi. Voimme myös käyttää sitä olosuhteissa. jos (truthtable 7 == tosi), joka on sanoa, jos kahdeksas elementti on Truthtable on totta, ehkä me haluat tulostaa viestin käyttäjälle, printf ("totta! n") ;. Jotka antaisivat aiheen sanoa Truthtable 10 vastaa totta, eikö? No, voin, mutta se on melko vaarallista, koska muistan, meillä on joukko 10 Booleans. Joten korkein indeksi kääntäjä on antanut meille on 9. Tämä ohjelma kokoaa, mutta jos jotain muuta muistiin olemassa, kun olisimme odottaa Truthtable 10 mennä, voisimme kärsiä segmentointi vika. Me voi koira veräjästä, mutta yleensä, melko vaarallinen. Joten mitä teen täällä on laillinen C, mutta ei välttämättä parhaan tilanteen. Nyt, kun julistaa ja alustaa array samanaikaisesti, siellä oikeastaan ​​aika syntaksinsa että olet voi käyttää tankata array sen lähtöarvot. Se voi saada hankala julistaa joukko koko 100, ja sitten täytyy sanoa, elementti 0 vastaa tämä; elementti 1 vastaa tämän; elementti 2 on sama kuin. Mitä järkeä, eikö? Jos se on pieni joukko, sinua voisi tehdä jotain tällaista. Bool truthtable 3 vastaa auki kihara ahdin ja sitten pilkku erillinen luettelo elementtien että haluat laittaa array. Sulje sitten kihara ahdin puolipiste. Tämä luo erilaisia koko kolme kutsutaan Truthtable, elementtejä väärä, totta, ja totta. Ja itse asiassa, instantiation syntaksi Minulla on tässä täsmälleen sama kuin tekee yksittäinen elementti syntaksi alla. Nämä kaksi tapaa koodaus olisi tuottaa täsmälleen sama joukko. Samoin voisimme kerrata yli kaikki elementit array käyttäen silmukan, mikä Itse asiassa on erittäin suositeltavaa at-home liikuntaa. Miten luoda array 100 kokonaislukuja, jossa jokainen alkio on sen indeksi? Niinpä esimerkiksi, meillä on joukko 100 kokonaislukuja ja ensimmäinen elementti, haluamme laittaa 0. Toisessa elementti, haluamme laittaa 1. Kolmannessa elementti, haluamme laittaa 2; ja niin edelleen ja niin edelleen. Se on todella hyvä at-home liikuntaa tehdä. Täällä, se ei näytä kuten liian paljon on muuttunut. Mutta huomaa, että väliin hakasulkeita, tällä kertaa, Olen itse pois numero. Jos käytät tätä erittäin erityinen instanssien syntaksi luoda array, te itse ei täytyy ilmoittaa koko array etukäteen. Kääntäjä on fiksu tietää, että olet itse haluavat taulukon koko 3, koska laitat kolme tekijää oikealla yhtäläisyysmerkki. Jos olisit laittaa neljä, se olisi antanut sinulle totuuden taulukko koko neljä; ja niin edelleen ja niin edelleen. Paneelit eivät rajoitu yhteen ulottuvuus, joka on aika siistiä. Voit itse olla niin monta puoli suunnittelijat kuin haluat. Niinpä esimerkiksi, jos haluat luoda aluksella peli Battleship, joka, Jos olet koskaan pelannut, on peli, joka on pelataan tapit 10 10 verkkoon, voit luoda erilaisia ​​näin. Voisi sanoa Bool taistelulaiva hakasulku 10 suljettu hakasulje neliö kiinnike 10 suljettu hakasulku. Ja sitten, voit valita tulkita tämä mielessäsi kuin 10 10 ruudukon solujen. Nyt, itse asiassa, muistiin, se todella vain edelleen 100 elementti, yksi ulotteinen array. Ja tämä itse asiassa pätee jos on kolme ulottuvuutta tai neljä tai viisi. Se oikeastaan ​​vain ei moninkertaistaa kaikki indices-- tai kaikki koon specifiers-- yhdessä, ja juuri saada yksiulotteisen joukko, että koko. Mutta suhteen organisaatiossa ja visualisointi ja ihmisen käsitys, se voi olla paljon helpompaa työskennellä verkkoon jos olet työskennellyt peli kuten Ristinolla tai Battleship, tai jotain sellaista. Se on hyvä abstraktio, sen sijaan, ajatella Ristinolla Aluksella linja yhdeksän neliön tai taistelulaiva hallitus kuten linja 100 neliöitä. 10 10 verkkoon tai kolme kolme ruudukko on luultavasti paljon enemmän helppo hahmottaa. Nyt, jotain todella tärkeää noin taulukot. Voimme käsitellä jokaisen yksittäisen alkiota muuttujana. Näimme, että aiemmin kun olimme osoitetaan arvo True tiettyihin Booleans tai testaamalla niitä conditionals. Mutta emme voi kohdella koko paneelit itseään muuttujia. Emme voi esimerkiksi määrittää yhden ryhmän toiseen matriisi toimeksianto operaattori. Se ei ole oikeudellista C. Jos haluamme, sillä example-- mitä sivuuttaisimme siinä esimerkissä olisi kopioida yhden ryhmän toiseen. Jos haluamme tehdä niin, me todella täytyy käyttää silmukan kopioida kukin yksittäinen elementti kerrallaan. Tiedän, että se vähän aikaa vievää. Niinpä esimerkiksi, jos meillä olisi nämä pari riviä koodia, olisi tätä työtä? No, ei, se ei olisi, eikö? Koska me yritämme määrittää ruokaa baarissa. Se ei tule toimimaan, koska se on joukko, ja me vain kuvattu että se ei ole oikeudellista C. Sen sijaan, jos haluamme kopioida ruoka osaksi baari, joka on mitä yritämme tehdä täällä, tarvitsisimme syntaksi näin. Meillä varten silmukka, joka menee J on yhtä suuri kuin 0 enintään 5, ja me kasvattaa J jokaisen iterointia silmukka ja määrittää elementtejä niin. Tämä johtaisi baarissa myös on yksi, kaksi, kolme, neljä, viisi, mutta meidän on tehtävä se tämän hyvin hidas elementti-by-elementti tavalla, sijaan vain hieman kopiointi koko ryhmän. Muissa ohjelmointi kielet, enemmän uudempiin, voit itse asiassa tehdä juuri että yksinkertainen vastaa syntaksin. Mutta C, valitettavasti olemme ei saa tehdä. Nyt on olemassa yksi muu asia, jonka haluan mainita noin taulukot, jotka voivat olla hieman vähän hankala ensimmäisen kerran työskennellä heidän kanssaan. Keskustelimme video noin kiikaritähtäimellä, että useimmat muuttujat C, kun soitat ne toiminnot, johdetaan arvosta. Muistatko, mitä se tarkoittaa siirtää jotain arvon? Se tarkoittaa, että teet kopion muuttuja, joka on parhaillaan kulunut. Callee toiminto, funktio joka on vastaanottava muuttuja, ei saa itse muuttujan. Se saa oma paikallinen kopio työskennellä. Taulukot, tietenkin, do ei noudata tätä sääntöä. Pikemminkin, mitä me kutsumme tätä on ohi viitteenä. Callee todella ei saa jono. Se ei saa sen oma paikallinen kopio. Ja jos ajattelee se, että tämä on järkevää. Jos paneelit ovat todella suuria, se vie niin paljon aikaa ja vaivaa tehdä kopion joukko 100 tai 1000 tai 10000 elementtejä, että se ei ole sen arvoista toimiakseen saada jäljennös niistä, tehdä töitä sen kanssa, ja sitten vain tapahduttava jäljennös; sen ei tarvitse olla se roikkuu ympäri enää. Koska paneelit ovat joitakin iso ja raskas, me vain siirtää ne viittaamalla. Me vain luottaa siihen, että toiminto on, eivät riko mitään. Joten se ei itse saada jono. Se ei saa oma paikallinen kopio. Joten mitä tämä tarkoittaa, silloin, kun soiton manipuloi taulukon alkiot? Mitä tapahtuu? Nyt me kiilto yli miksi juuri tämä tapahtuu, miksi taulukot välitetään viittaamalla ja kaikki muu on ohi arvo. Mutta lupaan teille, me palata ja antaa sinulle vastauksen tähän myöhemmässä video. Tässä yksi enemmän liikuntaa sinulle ennen kuin paketoida asioita paneelit. Nippu koodia täällä, se on ei erityisen hyvä tyyli, vain Teen että varoitus. Ei ole kommentteja täällä, joka on melko huono muoto. Mutta se on vain koska halusin olla pystyä sopimaan kaiken ruudulla. Ylimpänä, voit nähdä, että minulla on kaksi toimintoa ilmoitukset asettaa array ja asettaa int. Aseta array ilmeisesti vie array neljä kokonaislukuja sen panos. Ja joukko int ilmeisesti vie yksi kokonaisluku sen panos. Mutta molemmat heistä ei ole tuotos. Lähtö, paluu kirjoitat, jokainen on mitätön. Main, meillä pari riviä koodia. Me julistamme kokonaisluku muuttuja nimeltään ja määrittää sen arvo 10. Me julistamme johdosta neljä kokonaislukuja nimeltään B ja antaa elementit 0, 1, 2, ja 3, vastaavasti. Sitten meillä on asettamiseen int ja asettamiseen array. Määritelmät asettaa array ja asettaa int ovat alhaalla, alareunassa. Ja niin, taas, pyydän teitä kysymyksen. Mikä saa tulostaa täällä lopussa Main? On tuloste col. Olen tulostamalla kaksi kokonaislukua. Olen tulostamalla sisältöä ja sisältö B hakasulku 0. Tauko video täällä ja kestää minuutin. Voitko selvittää, mitä tämä toiminto tulostaa lopussa? Toivottavasti jos muistatte erottelu ohi arvo ja ohi viittaus, tämä ongelma ei ollut liian hankala sinulle. Ja vastaus olisit ovat löytäneet on tämä. Jos et ole aivan varma siitä, miksi näin on, ota toinen, palata, tarkastella, mitä olin juuri keskustelemme siitä kulkee paneelit viittaamalla, vs. kulkee muiden muuttujien arvon, ja toivottavasti, se tulee tehdä hieman enemmän järkeä. Olen Doug Lloyd, ja tämä on CS50.