[Musika jotzen] DOUG LLOYD: Ondo da. Bakar batekin lan egitea aldagai nahiko dibertigarria da. Baina, zer nahi dugu, lan egiteko aldagai asko batekin, baina ez dugu nahi mordo bat izatea Izen desberdinak gure kodea inguruan hegan? Kasu honetan, array dira benetan erabilgarri etorriko da. Arrayak benetan oinarrizko datuak dira edozein programazio hizkuntza-egitura hori erabili ahal izango duzu. Eta benetan, oso erabilgarria ari dira, batez ere, gisa ikusiko dugu, CS 50 urtean. Matrizeak erabiltzen dugu eutsi datu mota bereko balioak memoria Elkarren ondoko lekuetan. Bestela esan, bat da era horretan talde-ahal dugun zenbakien sorta batean elkarrekin memoria edo karaktere-sorta bat edo memoria flotatzen benetan elkarrekin itxi eta obra haiekin bakoitzak eman behar izan gabe bere izen berezia egin zuten, zeinek ahal lortu astuna une baten ondoren. Orain, modu batean arrayak analogize den da zure tokiko post pentsatzen bigarren bat bulegoan. Beraz, urratsa kanpoan programazio-tik eta besterik ez itxi begiak eta zure kontuan ikusteko zure tokiko postetxean. Normalean, post gehienetan bulegoak, ez banku handi bat da a postetxean, horman kutxak. Array bat bloke erraldoi bat da Alboko oroimenaren, mail bat duten modu berean Zure posta-bulego batean, banku- espazio handi bat da postetxean horman. Arrayak dira txikitan zatitzen da; berdinean espazioa bloke tamaina, eta horietako bakoitzak elementu bat deitzen da, in Modu berean post horma hori bulegoan izan txikietan zatitzen da; berdinean espazioa bloke tamaina, bertan posta-kutxa bat deitu dugu. Array elementu bakoitzeko Datu kopuru jakin bat gordetzeko, Post Office kutxa bakoitzak gai besterik ez da mail kopuru jakin bat eduki. Zer elementu bakoitzaren gorde daitezke Array datuak bereko aldagai da mota, hala nola, int edo char, bezala Zure Post Office kutxa batean bezala, Gauza bakarra doi dezakezu antzeko mota bat, besteak beste, gutunak edo pakete txiki gisa. Azkenik, elementu bakoitzaren sartu ahal izango dugu zuzenean indizea zenbakia ek array, Gure postetxean sar daiteke bezalaxe dugu bere postontzi kopurua jakitea koadroa. Zorionez, analogiaren Laguntzak zure burua lortuko duzu arrayak ideia inguruan beste zerbait analogizing Ziur aski duzula Dagoeneko ezagutzen. C, array baten elementuak dira indexatutako 0 eta 1 hasita, ez. Eta hau da benetan garrantzitsua. Eta hain zuzen ere, horregatik dugu, CS 50, Horregatik ordenagailu eta zientzialari maiz egingo 0-tik, da delako C array indexatzeko, eta horrek beti 0 hasten da. Beraz, array bat n elementu osatzen bada, Array horretan lehenengo elementua da indizea 0 kokatuta dago, eta array azken elementua hau da, indizea n ken 1 dago. Berriz ere, n elementuen ez bada gure array, azken indizean n ken 1 da. Beraz, gure array 50 elementu, badu Lehenengo elementua da indizea 0 kokatuta dago, eta azken elementu da indizea 49 at dago. Tamalez, edo zorionez, zure ikuspegitik arabera, C oso xelebrea da hemen. Ezin izango da saihesteko duzu bertatik Zure array mugetatik kanpo joan. Ken Sar dezakezu 3 Zure array elementu edo 59th zure array elementu, Zure array 50 elementu bakarra badu. Ez da zure programa gelditzeko bertatik konpilatzean, baina exekuzio garaian, a zenitzake beldurgarria segmentazio errua memoria sartzeko hasten bazara zer mugetatik kanpo dago Zure programa emango zaizu. Beraz, kontuz ibili. Zer array bat egiten du deklarazio itxura? Zelan existentzia sartu array kode dugu bezalako beste edozein aldagai kode dugu? Badira hiru zati array mota bat declaration--, izen bat, eta tamaina batean. Hau oso antzekoa da deklarazio aldakorra, eta horrek besterik mota bat eta izen bat da, tamaina elementua izateaz array baten kasua berezia da, dugu horietako sorta bat ari delako aldi berean. Beraz motaren zer aldagai mota da duzu Nahi array elementu bakoitzari izan. Ez al da zenbaki osoen array bat nahi? Ondoren, zure datuak int mota izan behar du. Egin bat izatea nahi duzu bikoitzak edo karroza array? Datu mota bikoitza izan edo flotatzen behar. Izena, zer da zuretzat Zure array deitu nahi. Zer erraldoi honetan izena eman nahi duzu osoentzat eta karroza edo karakteretan banku edo bikoizten, edo dena behar duzu? Nola deitzen nahi duzu? Nahiko auto azalpen. Azkenik, tamaina, doan kortxete barruan, nola da askotan elementu zenituzkeen Zure array eduki bezala. Zenbat zenbaki osoen nahi duzu? Zenbat karroza nahi duzu? Beraz, adibidez, int ikaslea kalifikazio 40. Hau Ikasle izeneko array bat adierazten kalifikazio Horietatik 40 zenbaki osoko ditu. Nahiko auto azalpen, espero dut. Beste adibide bat. Menu bikoitza prezioak 8. Hau izeneko array bat sortzen du Menu prezioak, eta hori osatzen memorian gela zortzi bikoitzak egiteko. Elementu bakoitzaren uste baduzu erako datu-mota multzo baten, beraz, adibidez, elementu bakar bat mota int array bat, modurik duzu bera Beste edozein lituzkeenik int mota aldakorra, ezagunak eragiketa guztien dugun Lehen aipatu eragiketak Bideo zentzurik izango. Hortaz, hona hemen, array bat deklaratzen izan dugu Truthtable izeneko Booleans, horietatik 10 Booleans gela ditu. Eta gero, besterik gabe, nahi besterik ezin dugu esleitu motako beste edozein aldagai balioa Boolean, zerbait esan genezake Truthtable kortxetea bezala 2, hau da, nola adieraziko dugu, egiazki mahai elementu? Hirugarren elementua egiaren mahai, gogoratzen delako, 0-tik ari gara kontatuta. Beraz, nola adieraziko dugu Hirugarren egiaren mahai elementurik. Truthtable 2 berdin faltsua, besterik Aldarrikatzen dugu antzeko edo esleitu ahal izan genuen, baizik eta, edozein Boolean aldagai mota faltsua izan. Halaber dugu erabili daiteke baldintzetan. bada (truthtable 7 == Egia), eta horrek esan nahi baita, Zortzigarren elementua bada Truthtable egia da, agian, mezu bat inprimatu nahi dugu erabiltzaileak, printf ("egia! n") ra ;. Eragiten digu Truthtable esateko 10 berdin egia da, ezta? , Beno, ezin dut, baina polita da arriskutsua da, zeren gogoratu, 10 Booleans array bat izan dugu. Beraz, indize altuena duten Konpiladore eman du 9 da gurekin. Programa honetan bildu egingo dira, baina bada zerbait memorian beste existitzen non genuke Espero Truthtable 10 joan, segmentazio matxura bat jasaten izan ditugu. Dugu ihes zitekeen, baina, oro har, Nahiko arriskutsua. Beraz, zer egiten ari naiz hemen C legala, baina ez du zertan mugitzen onena. Orain, aldarrikatu duzu eta array bat hasieratu aldi berean, ez da benetan polit bat sintaxia berezia duzula bete array erabil daiteke Bere hasierako balioekin. Astuna eskuratu ahal izango da tamaina 100 array bat deklaratzen, eta, ondoren, esan nahi baita, elementu 0 berdin hau; elementu 1 berdinen honetan; elementu 2 berdinen. Zer da puntua, ezta? Array txiki bat bada, zuk honen antzeko zerbait egin daiteke. Bool truthtable 3 funtzioak irekia kizkur eta gero koma elementuen zerrenda bereiztuko array jarri nahi duzula. Ondoren itxi kizkur koma. Hau array bat sortzen du tamaina hiru Truthtable deitzen, elementu faltsua, egia, eta egia batekin. Eta hain zuzen ere, instantiation du sintaxia hemen daukat da zehazki egiten berberak banakako elementu sintaxia azpian. Bi kodetze modu hauek litzateke zehatza array bera ekoizteko. Era berean, batetik bestera joateko izan dugu elementu guztiak baino gehiago array bat begizta baten bidez, eta bertan, urtean Izan ere, oso oso gomendagarria bat at home ariketa. Zelan array bat sortzeko 100 osokoak, non array elementu bakoitzak bere indizea da? Beraz, adibidez, 100 multzo bat dugu osokoak, eta lehen elementua ere, 0 jarri nahi dugu. Bigarren elementua, 1. jarri nahi dugu. Hirugarren elementua ere, nahi dugu 2 jarri da; eta abar eta abar. Hori da benetan ona at home ariketa hori egin. Hemen, ez du begiratu bezala gehiegi aldatu da. Baina konturatu ere artean Parentesi karratua, oraingo honetan, Benetan Nik kendutako kopurua da. Oso hau badarabilzu instantiation bereziak sintaxia bat sortzeko array, benetan ez duzu tamaina adierazteko behar Array aldez aurretik. Konpilatzailea smart nahikoa da nahi duzun jakin benetan 3 tamaina sorta bat egin nahi, Hiru elementu jarri duzulako Berdintasun ikurraren eskubidea. Zuk ipini lau bada, hau izango da Emandako Egia lau tamaina taula bat; eta abar eta abar. Arrayak ez dira batera mugatua dimentsio, hau da, oso politak. Benetan izan daiteke askotan bezala Bigarren mailako bereziak nahi duzun bezala. Beraz, adibidez, sortu nahi baldin baduzu Joko gerra egiteko taula bat eta bertan, Inoiz jokatu baduzu, hori da joko bat da 10 zorrozkiloa batera jokatzen 10 bider, hau bezalako array bat sortzeko asmoz. Boolearra Esan daiteke gerra kortxetea 10 itxitako plaza kortxetea tarte 10 kortxetea itxita. Eta gero, aukeratu dezakezu interpretatzeko hau zure kontuan 10 gisa 10 zelulen bider. Orain, hain zuzen ere, memoria, benetan besterik 100 elementu bat izan arren, dimentsioko array bakar. Eta hau da, hain zuzen ere, baduzu doa hiru dimentsiotan edo lau edo bost izatea. Benetan, besterik gabe biderkatu du indices-- guztia edo tamaina guztiak specifiers-- elkarrekin, eta besterik ez duzu bat-dimentsioko Tamaina horretako sorta. Baina erakundearen aldetik eta bistaratzea eta giza pertzepzioa, asko errazagoa izan daiteke to-zerrenda batekin lan Joko bat ari zara lanean bada TIC-TAC behatz edo gerra bezala, edo horrelako zerbait. Abstrakzioa handi bat da, ordez izatearen to a Tic-TAC-tep pentsatzen board bederatzi lerro gisa plazetan edo gerra taula bat 100 plazetan lerro gisa. A 10 10 grid edo hiru batek Hiru arabera grid da seguruenik Asko gehiago erraz nabaritzen. Orain, zerbait benetan Array buruz garrantzitsua. Banakako bakoitza tratatu ahal izango dugu array aldagai gisa elementurik. Lehenago ikusi dugu denean esleitzea ari ginen balioa jakin Booleans to True edo probatzen horiek baldintzazkoak ere. Baina ezin dugu osoan tratatzeko array beraiek aldagai gisa. Ezin dugu, adibidez, esleitu array bat beste array esleipena erabiliz operadorea. Ez da lege C. Den, nahi dugun adibide bada zer Adibide hori izango litzateke egiten array bat kopiatu sartu beharko litzateke. Hori, egia esan, ez dugu egin nahi badugu begizta bat erabili baino kopiatu behar banakako elementu bakoitza denbora batean. Ezagutzen dut denbora pixka bat kontsumitzen da. Beraz, adibidez, bikote hauek izan badugu kode lerro, litzateke lan hau? Beno, ez, ez litzateke izango, ezta? Saiatzen ari garelako food esleitzeko bar da. Hori ez da lanera joan, array bat delako, eta oraintxe deskribatu dugun hori ez da lege C. Horren ordez, bada nahi dugu food edukiak kopiatu bar, hau da, zer sartu Hemen egiten saiatzen ari gara, Hau bezalako sintaxia beharko genuke. Loop doa daukagu J-tik 0 berdinak 5era sortu da, eta J Kontatzailea dugu iterazio bakoitzean begizta eta horrelako elementu esleitzeko. Hau bar eragin litzateke, era berean, izateaz bat, bi, hiru, lau, bost, baina hau oso egin behar dugu elementu-by-elementu modu motela, ordez arabera array osoa kopiatuz. Beste programazioan hizkuntzetan, modernoagoa direnak, dezakezu, hain zuzen ere, ez besterik horren erraza sintaxia berdin. Baina C, zoritxarrez, ez gara Ez onartzen ez da egin behar. Orain, ez da bat bestearen gauza aipatu nahi dut Array buruz apur bat izan daiteke Pixka lehenengo aldia duzu delikatua haiekin lan. Eztabaidatu dugu bideo batean esparrua aldagai buruz, Hori C aldagai gehienak, deitzen duzunean horiek funtzio berean, balio igaro ziren. Gogoan al duzu zer esan nahi duen balio by zerbait pasatzeko? Kopia bat egiten garela esan nahi du aldagai horren batean ari gainditu. The callee funtzioa, funtzio hori aldakorra jasotzeko, ez du aldagai bera lortu. Bertako propioa daukala kopia berarekin lan. Arrayak, jakina, ez Ez arau hori betetzen. Hobeto esanda, zer deitzen dugun da joana erreferentzia. Callee benetan Array jasoko du. Ez du jasotzen bere kopia lokala izena. Eta pentsatzen baduzu da, zentzu honetan. Arrayak benetan handiak badira, hura Denbora eta ahalegina hainbeste hartzen multzo baten kopia bat egin 100 edo 1.000 edo 10.000 elementu, Ez da hori merezi duela batentzat funtzionatu kopia bat jasotzeko, Lan egin da, eta, ondoren, besterik den kopia batekin egin; ez du behar izan inguruan zintzilik da jada. Zenbait arrayak daudelako tamaina handiko eta astuna, pasatzeko besterik ez ditugu kontuan hartuta. Funtzio hori dugu fidatzen den, ez dute ezer apurtu. Beraz, ez du benetan array lortzeko. Ez du bere kopia lokala propioa lortu. Beraz, zer esan nahi du horrek, orduan, callee du manipulatzen array elementu? Zer gertatzen da? Oraingoz, distira zaitugu zergatik zehazki hori baino gehiago gertatzen, zergatik arrayak erreferentzia iragaiten eta beste guztia da balio igaro ziren. Baina, hitzematen dut, egingo dugu itzuli eta erantzuna ematen duzu horri geroago bideo batean. Hona hemen zuretzat ariketa bat gehiago bildu dugu, gauzak aurretik array. Hemen kodea sorta, hori da Ez da bereziki ona estiloa, besterik Oharra hori egin dut. Ez da, ez da iruzkinik hemen ere, zein inprimaki nahiko txarra da. Baina besterik ez da behar izan nuelako Dena kabitzen pantailan gai. Goialdean, ikusi ahal izango duzu dut horretan Multzo array egiteko funtzioak bi aitorpenen eta ezarri int. Multzo array itxuraz array bat hartzen du lau zenbaki osoen sarrera gisa. Eta multzo int itxuraz zenbaki oso bakar bat bere sarrera gisa. Baina biak ez irteera bat dute. Irteera, itzulera idazten, bakoitza hutsunea. Main ere, ez dugu bat Kode lerro pare. Osoko aldagai aldarrikatzen dugu A deitzen da eta 10 balioa esleitu. Lau zenbaki osoen array bat deklaratzen dugu B izeneko eta elementuen 0, 1 esleitzeko, 2 eta 3, hurrenez hurren. Ondoren, dei bat ezarri behar dugu int eta dei bat array ezartzeko. Multzo array eta set-definizioak int behera beherago daude, behealdean. Eta, beraz, berriro, zuk eskatzen dut galdera. Zer lortzen inprimatutako Hemen Main amaieran? Ez dago inprimaketaren col bat da. Naiz bi zenbaki osoen inprimatzeko. Egindako naiz inprimatzeko A edukiak eta B kortxetea 0 edukia. Pausatu bideoa hemen eta minutu bat hartu. Ezin duzu irudikatu zer hau Funtzio egingo amaieran inprimatu? Zorionez, gogoratzen bazara egin balio pasatuz arteko bereizketa eta joana erreferentzia, hau Arazoa ez zen gehiegi zuretzat delikatua. Eta erantzuna zenituzkeen dute aurkitu da hau. Benetan ziur gisa ez bada zergatik Hori horrela, hartu bigarren, go back, berrikusi zer besterik izan dut arrayak pasatzen buruz eztabaidatzen erreferentzia, pasatzen versus Beste aldagai balio moduan, eta, zorionez, egin beharko da zentzu apur bat gehiago. Naiz Doug Lloyd, eta hau da CS50.