>> [Mūzikas atskaņošanai]
Doug LLOYD: Nu labi.
Darbs ar vienotu mainīgie ir diezgan jautri.
Bet ko tad, ja mēs gribam strādāt ar daudz mainīgo lielumu,
bet mēs nevēlamies būt ķekars dažādi nosaukumi peld ap mūsu kodu?
Šajā gadījumā, masīvi ir gatavojas nākt ļoti parocīgs.
Masīvi ir patiešām būtiski dati struktūra jebkurā programmēšanas valodā
ka jūs izmantojat.
Un viņi patiešām, patiešām noderīga, īpaši, jo mēs redzēsim, CS 50.
>> Mēs izmantojam bloki turēt vērtības paša datu tipa
pie blakus atmiņas vietām.
Proti, tas ir veids, kā mēs varam grupa
ķekars veselus skaitļus kopā atmiņa vai ķekars rakstzīmju
vai pludiņiem atmiņā patiešām cieši kopā un darbs
ar viņiem bez dot katram viena pati unikāls nosaukums, kas var
saņemt apgrūtinoša pēc kāda brīža.
>> Tagad, viens veids, kā analogize bloki ir jādomā par savu vietējo pastu
biroja uz otru.
Tātad solis prom no programmēšanas un vienkārši aizvērt acis
un vizualizēt savā prātā jūsu vietējā pasta nodaļa.
Parasti, vairumā pastu biroji, tur ir liela banka
pasta nodaļa kastes pie sienas.
>> Masīvs ir milzu bloks blakusesošo atmiņu,
tāpat, ka pasta banka savā pasta nodaļā
ir liela telpa uz siena pastā.
Masīvi ir sadalīts mazs, identiski izmēra bloki telpā,
katrs no kuriem tiek saukta elements, jo tādā pašā veidā, ka sienas post
birojs ir sadalīts mazs, identiski izmēra bloki telpā,
ko mēs saucam PO BOX.
Katrs no masīva elementa uzglabāt noteiktu datu apjomu,
tāpat kā katrs pasta nodaļa kaste ir spējīgs turēt zināmu pastu.
>> Ko var uzglabāt katra elementa masīvs ir mainīgie ar tādu pašu datu
tips, piemēram, int vai char, tikai tāpat savā pasta kastē,
jūs varat tikai fit lietas līdzīga veida,
piemēram, burtiem vai mazos iepakojumos.
Visbeidzot, mēs varam piekļūt katra elementa masīvs tieši indeksa numurs,
tāpat kā mēs varam piekļūt mūsu pastā kaste zinot savu pastkastes numurs.
Cerams, ka analoģija palīdz jums savu galvu
ap ideju masīvu ar analogizing uz kaut ko citu
ka jūs, iespējams, jau ir pazīstami ar.
>> In C, elementi masīva ir indeksēta sākot no 0, ne no 1.
Un tas ir ļoti svarīgi.
Un patiesībā, tas ir iemesls, kāpēc mēs, CS 50, Un kāpēc datoru zinātnieki bieži
pieskaitīs no 0, ir jo C ir masīva
indeksācija, kas vienmēr sākas ar 0.
Tātad, ja masīvs sastāv no n elementiem, Minētā masīva pirmais elements
atrodas pie indeksu 0, un pēdējais elements masīva
atrodas pie indeksa n mīnus 1.
Atkal, ja tur ir n elementi mūsu masīvs, pēdējais rādītājs ir n mīnus 1.
>> Tātad, ja mūsu masīvs ir 50 elementi, kas pirmais elements atrodas pie indeksu 0,
un pēdējais elements atrodas pie indeksa 49.
Diemžēl, vai par laimi, Atkarībā no jūsu viedokļa,
C ir ļoti bargas šeit.
Tas nebūs novērst jūs no iet ārpus robežām jūsu masīvs.
Jūs varētu piekļūt mīnus 3 elements jūsu masīvs
vai 59. elements jūsu masīvs, Ja jūsu masīvs ir tikai 50 elementi.
Tas nebūs pārtraukt savu programmu no apkopojot, bet pie palaist laikā,
jūs varētu sastopaties dreaded segmentāciju vaina
ja jūs sākat, lai piekļūtu atmiņas kas ir ārpus robežas, kuras
jūs lūdza savu programmu, lai dotu jums.
Tāpēc jābūt uzmanīgiem.
>> Kāda masīvs deklarācija izskatās?
Kā mēs kods masīvs spēkā esamību tāpat mēs kodu jebkuru citu mainīgo?
Ir trīs daļas, masīva declaration-- veidu, nosaukumu,
un izmērs.
Tas ir ļoti līdzīgs mainīgs deklarācija, kas
ir tikai veids un nosaukums, lielums elements ir
īpašais gadījums masīva, jo mēs kļūst ķekars no tiem
tajā pašā laikā.
>> Tātad veids ir kāda veida mainīgo jums gribu katrs masīva elements būt.
Vai vēlaties to masīvs integers?
Tad jūsu datu tips ir int.
Vai jūs vēlaties, lai būt masīvs dubultspēlē vai pludiņiem?
Datu veids būtu dubultā vai peldēt.
Nosaukums ir tas, ko tu vēlaties, lai izsauktu masīvs.
Ko jūs vēlaties nosaukt šo gigants banka veseli skaitļi vai pludiņiem vai chars
vai dubultspēlē, vai kāds tu esi?
Ko jūs vēlaties, lai izsauktu to?
Diezgan pašsaprotami.
>> Visbeidzot, lielums, kas iet iekšpusē kvadrātiekavās,
ir cik elementi turat piemēram, jūsu masīvs, lai apturētu.
Cik veseli skaitļi jūs vēlaties?
Cik pludiņi jūs vēlaties?
>> Tā, piemēram, int studentu atzīmes 40.
Tas apliecina, masīvu sauc Student pakāpes, kas sastāv no 40 veseli skaitļi.
Diezgan pašsaprotami, es ceru.
Lūk, vēl viens piemērs.
Dubultie izvēlne cenas 8.
Tas rada masīvu sauc Izvēlne cenas, kas sastāv
vietas, atmiņā astoņus dubultspēlēs.
>> Ja jūs domājat, ka katra elementa no masīva tipa datu tipu,
tā, piemēram, viens elements masīvs int tipa, tāpat jums
varētu domāt par kādu citu int tipa mainīgais,
Visas pazīstamās operācijas, ka mēs apspriests iepriekš ekspluatācijas
video būs jēga.
Tātad šeit, mēs varētu deklarēt masīvu no Booleans sauc par Truthtable,
kas sastāv no istabas 10 Booleans.
>> Un tad, tāpat kā mēs varētu tikai piešķirt vērtība uz jebkuru citu mainīgo tipa
Būla, mēs varētu kaut ko pateikt tāpat Truthtable kvadrātiekava
2, kas ir tas, kā mēs norāda, kas no patiesības tabulas elements?
No trešā elements patiesība galda, jo atceros,
mēs skaitot no 0.
Tātad tas, kā mēs norādīt no patiesības tabulas Trešais elements.
Truthtable 2 ir vienāds nepatiesa, tāpat kā mēs varētu declare--
vai mēs varētu piešķirt, drīzāk, jebkurš Boolean tipa mainīgais būt nepatiesa.
>> Mēs varam arī izmantot to nosacījumiem.
ja (truthtable 7 == true), kas nozīmē,
ja astoto elementa no Truthtable ir taisnība,
varbūt mēs vēlamies, lai izdrukātu ziņu lietotājam, printf ("TRUE n!") ;.
Tas liek mums teikt Truthtable 10 vienāds taisnība, vai ne?
Nu, es varu, bet tas ir diezgan bīstami, jo atceros,
mums ir masīvs 10 Booleans.
Tātad augstākais rādītājs, ka kompilators ir devis mums ir 9.
>> Šī programma būs apkopot, bet ja kaut kas cits atmiņā
pastāv, ja mēs būtu sagaida Truthtable 10 iet,
mēs varētu ciest segmentāciju vaina. Mēs varētu saņemt prom ar to, bet kopumā,
diezgan bīstami.
Tātad, ko es daru šeit ir juridiska C, bet ne vienmēr ir labākais gājiens.
Tagad, kad jums paziņot, un inicializēt masīvu vienlaicīgi,
tur ir tiešām diezgan īpaša sintakse, kas jūs
var izmantot, lai uzpildītu masīvs ar sākuma vērtībām.
To var iegūt apgrūtinošas deklarēt masīvu izmēru 100,
un tad jāsaka, elements 0 vienāds šis; elements 1 vienāds šis;
elements 2 vienāda.
Kāda tam jēga, vai ne?
>> Ja tas ir mazs masīvs, jums varētu darīt kaut kas līdzīgs šim.
Bool truthtable 3 vienāds open cirtaini lencēm un tad komats
atdalīt elementu saraksts ka jūs vēlaties, lai masīvā.
Tad aizveriet cirtaini lencēm semikolu.
Tas rada masīvs izmērs trīs sauc Truthtable,
ar elementiem nepatiesa, taisnība, un patiesība.
Un patiesībā, konkretizāciju sintakse Man šeit ir
tieši tāds pats kā dara individuāls elements sintakse zemāk.
Šie divi veidi kodēšanas darītu ar ražot tieši tādu pašu masīvu.
>> Tāpat mēs varētu atkārtot pa visu elementu
no masīva, izmantojot cilpas, kas, Fakts, ir ļoti ļoti ieteicama
at-home vingrinājums.
Kā jūs izveidot masīvu 100 veseli skaitļi, kur
katrs masīva elements ir tās indekss?
Tā, piemēram, mums ir masīvs 100 veseli skaitļi, un ar pirmo elementu,
mēs vēlamies likt 0.
Otrajā elementu, mēs vēlamies likt 1.
Trešajā elementu, mēs gribam likt 2; un tā tālāk, un tā tālāk.
Tas ir ļoti labs at-home vingrinājums, lai to izdarītu.
>> Lūk, tas neizskatās piemēram, pārāk daudz kas ir mainījies.
Bet paziņojums, ka starp kvadrātiekavas, šoreiz,
Esmu tiešām izlaist numuru.
Ja jūs izmantojat šo ļoti special konkretizāciju
sintakse, lai izveidotu masīvs, jūs faktiski nav
ir nepieciešams, lai norādītu izmēru masīva iepriekš.
Kompilators ir pietiekami gudrs zināt, ka jūs faktiski
gribu masīva izmēru 3, jo jūs nodot trīs elementus
pa labi no vienādības zīmi.
Ja tu būtu likts četri, tas būtu devis jums patiesība tabulu lielumu četru;
un tā tālāk, un tā tālāk.
>> Masīvi ir ne tikai viena dimensija, kas ir diezgan foršs.
Jūs faktiski var būt tik daudz sānu tehnisko specifikāciju, kā vēlaties.
Tā, piemēram, ja jūs vēlaties, lai izveidotu valdes par spēli Battleship, kas,
ja jums kādreiz ir bijusi, ir spēle, kas ir spēlēja ar tapām par 10 līdz 10 režģi,
jūs varētu izveidot masīvu, kā šis.
Jūs varētu teikt bool līnijkuģis kvadrātiekava 10
slēgta kvadrātiekava square kronšteins 10 slēgts kvadrātveida kronšteinu.
>> Un tad, jūs varat izvēlēties, lai interpretēt to savā prātā, kā 10
10. režģa šūnas.
Tagad, patiesībā, atmiņas, tas tiešām vienkārši
joprojām ir 100 elements, single dimensiju masīvs.
Un tas, patiesībā, iet, ja jums ir trīs dimensijas vai četru vai piecu.
Tas tiešām vienkārši nav reizināt visi no indices--
vai visi no lieluma specifiers-- kopā,
un jūs tikai iegūt vienas dimensijas masīvs šī lieluma.
>> Bet attiecībā uz organizācijas un vizualizācija un cilvēka uztvere,
tas var būt daudz vieglāk strādāt ar režģi
ja jūs strādājat par spēli piemēram, Tic-tac-toe vai Battleship,
vai kaut kas tamlīdzīgs.
Tā ir lieliska abstrakcija, tā vietā,
domāt par Tic-tac-toe board kā līnija deviņiem
laukumi vai to Battleship board kā līnija 100 kvadrātu.
10 līdz 10 režģi vai trīs ar trīs režģis ir iespējams
daudz vairāk viegli uztvert.
>> Tagad, kaut kas patiešām svarīgi par blokiem.
Mēs varam ārstēt katrs indivīds masīva kā mainīgo elements.
Mēs redzējām, ka agrāk kad mēs bijām piešķirot
vērtība True noteiktām Booleans vai pārbaudot tos conditionals.
Bet mēs nevaram izturēties pret visu vielas bloki sevi kā mainīgajiem.
Mēs nevaram, piemēram, piešķirt viens bloks uz citu masīvu, izmantojot uzdevumu
operators.
Tas nav juridisks C.
>> Ja mēs gribam, lai example-- ko mēs varētu darīt šajā piemērā
Būtu kopēt viens bloks uz citu.
Ja mēs vēlamies darīt, mēs faktiski nepieciešams izmantot cilpu kopēt vairāk
katrs indivīds elements pa vienam.
Es zinu, tas ir mazliet laikietilpīgs.
>> Tā, piemēram, ja mēs būtu šos pāris no koda rindiņas, varētu šo darbu?
Nu, nē, tā nebūtu, vai ne?
Tāpēc, ka mēs cenšamies lai piešķirtu pārtikas bar.
Tas nav dodas uz darbu, jo tas ir masīvs,
un mēs tikko aprakstītā ka tas nav juridisks C.
>> Tā vietā, ja mēs gribam, lai kopēt saturu pārtikas
uz bāru, kas ir tas, ko mēs cenšamies darīt šeit,
mums būtu nepieciešams sintaksi, kā šis.
Mums ir cilpa, kas iet no J ir vienāds ar 0 līdz 5,
un mēs pieauguma J par katru atkārtojuma cilpa un piešķirt elementi, piemēram, ka.
Tas novestu pie bāra arī ir viens, divi, trīs, četri, pieci,
bet mums tas ir jādara šajā ļoti lēni elements-by-elementu veidā,
nevis, tikai nokopēt visu masīvu.
Citās programmēšana valodas, vairāk audzēs,
jūs varat, faktiski, darīt tieši tik vienkārši vienāds sintaksi.
Bet C, diemžēl, mēs esam nav atļauts to darīt.
>> Tagad tur ir viens cits lieta, ko es gribu pieminēt
par masīvu, kas var būt nedaudz mazliet viltīgs, kad pirmo reizi
strādāt ar viņiem.
Mēs apspriedām ar video par mainīgo jomu,
ka lielākā daļa mainīgie C, kad jūs zvanāt tos funkcijas, ir pagājis pēc vērtības.
Vai tu atceries, ko tas nozīmē nodot kaut ko vērtību?
Tas nozīmē, ka mēs nesam kopiju no mainīgais, kas ir tiek pieņemts.
Callee funkcija, funkcija kas ir saņēmusi mainīgo,
nesaņem mainīgo pati.
Tas izpaužas savs vietējais tā kopiju strādāt.
>> Bloki, protams, darīt neievēro šo noteikumu.
Drīzāk, tas, ko mēs saucam ir iet ar atsauci.
Callee faktiski tas saņem masīvu.
Tā nesaņem tās pašu vietējo kopiju.
Un, ja jūs domājat par tā, tas ir jēga.
Ja masīvi ir tiešām liels, to aizņem tik daudz laika un pūļu
veikt kopiju masīva 100 vai 1000 vai 10000 elementi,
ka tas nav tā vērts priekšlikums funkcionēt saņemt tā kopiju,
darīt kādu darbu ar to, un pēc tam vienkārši izdarīt ar kopiju;
tas nav nepieciešams, lai būtu tas karājas ap vairs.
>> Jo masīvi ir daži lielgabarīta un apgrūtinoša,
mēs vienkārši nodot tos ar atsauci.
Mēs vienkārši uzticas šo funkciju to, nav pārtraukumu neko.
Tātad tas faktiski iegūtu masīvu.
Tas nav iegūt sava vietējā kopiju.
>> Tātad, ko tas nozīmē, pēc tam, kad callee
manipulē elementu masīva?
Kas notiek?
Tagad mēs spīdums pār kāpēc tieši šis
notiek, kāpēc bloki ir pagājis ar atsauci
un viss pārējais ir pagājis pēc vērtības.
Bet es jums apsolu, mēs atgriezties un sniegt jums atbildi
uz šī vēlākā video.
>> Lūk, vēl viens vingrinājums jums Pirms mēs satīt lietas, par masīvu.
Par kodu šeit ķekars, kas ir nav īpaši labs stils,
tikai es ņemšu veikt šo brīdinājumu.
Tur nav komentāru šeit, kas ir diezgan slikta forma.
Bet tas ir tikai tāpēc, ka es gribēju būt spējīgiem viss uz ekrāna.
>> Augšpusē, jūs varat redzēt, ka man ir divfunkciju deklarācijas set masīvs
un noteikt int.
Set masīvs acīmredzot notiek masīvs četri veseli skaitļi, kā savu ieguldījumu.
Un kopa int acīmredzot notiek viens vesels kā savu ieguldījumu.
Bet gan no tiem nav izejas.
Produkciju, atgriešanās tips, katra no tām ir spēkā neesošs.
Galvenajā, mums ir pāris koda rindiņas.
Mēs paziņojam skaitlim mainīgo sauc par un piešķirt tai vērtību 10.
Mēs deklarēt masīvu četru veselu skaitļu sauc par B un piešķirt tos elementus, 0, 1,
2, un 3, attiecīgi.
Tad mums ir zvanu, lai uzstādītu int un aicinājums noteikt masīvu.
Uzstādītie masīvs un kopuma definīcijas int ir uz leju zem, apakšā.
>> Un tā, atkal, es jums uzdot jautājumu.
Kas izpaužas izdrukāt šeit beigās Main?
Tur ir izdruka col. Es esmu izdrukāšana divus veselus skaitļus.
Es esmu izdrukāšana saturu un saturs B kvadrātiekava 0.
Pauze video šeit un ņemt minūti.
Vai jūs varat izdomāt, ko tas funkcija drukāt beigās?
Cerams, ja jūs atceraties Atšķirība starp iet pa vērtību
un iet ar atsauci, šis Problēma bija ne pārāk grūts, lai jūs.
Un atbilde jūs būtu ir atraduši tas ir.
Ja jūs neesat īsti pārliecināts par to, kāpēc tas tā ir gadījumā, ņem otru,
iet atpakaļ, pārskatīt to, kas man bija tikai diskutējot par iet bloki
atsaucoties, salīdzinot iet citi mainīgie pēc vērtības,
un, cerams, tas būs padarīt mazliet vairāk sajūtu.
>> Es esmu Doug Lloyd, un tas ir CS50.