>> [Prehrávanie hudby]
DOUG LLOYD: Dobre.
Práca s single premenné je celkom zábavné.
Ale čo keď chceme pracovať s mnohými premennými,
ale my nechceme mať veľa rôzne mená lietanie okolo našej kód?
V tomto prípade, sú polia príde naozaj vhod.
Polia sú naozaj základné údaje štruktúra pre ľubovoľnom programovacom jazyku
že budete používať.
A sú naozaj, naozaj užitočné, najmä, ako uvidíme, v CS 50.
>> Používame pole držať hodnoty rovnakého dátového typu
na súvislých pamäťových miest.
To znamená, že je to spôsob, ako môžeme skupina
banda celých čísel spolu pamäte alebo partia znakov
alebo pláva v pamäti naozaj blízko pri sebe a práce
s nimi bez toho, aby bolo, aby každý jedným jeho vlastný jedinečný názov, ktorý môže
dostať ťažkopádne po chvíli.
>> Teraz, jeden spôsob, ako analogize polí je premýšľať o vašom miestnom príspevok
kanceláriu na sekundu.
Takže krok od programovania a len zatvorte oči
a predstaviť vo svojej mysli Váš miestny pošta.
Zvyčajne sa vo väčšine stĺpiku kancelárie, tam je veľká banka
A poštovej schránky na stene.
>> Pole je obrie blok súvislé pamäti,
rovnakým spôsobom, že poštové Banka vo svojej pošte
je veľký priestor na stena na pošte.
Arrays boli rozdelené do malých, rovnako veľké bloky priestoru,
pričom každý z nich je nazývaný prvok, v rovnakým spôsobom, že steny stĺpika
office bol rozdelený do malých, rovnako veľké bloky priestoru,
ktorý nazývame PO box.
Každý prvok poľa môže uloženie určitého množstva dát,
rovnako ako každá poštová schránka je schopný držať určité množstvo pošty.
>> Čo môže byť uložený v každom prvku poľa je premenné rovnakého dát
typu, ako napríklad int alebo char, len rovnako ako vo vašej poštovej priehradku,
sa zmestí len veci podobného typu,
napríklad písmená alebo malých baleniach.
A konečne, môžeme prístup ku každému prvku pole priamo číslom indexu,
rovnako ako môžeme prístup do nášho pošta box tým, že pozná jej číslo schránky.
Dúfajme, že analógia vám pomôže dostať svoje hlavy
okolo myšlienky polí strany analogizing na niečo iné
že ste pravdepodobne už oboznámení s.
>> V jazyku C, prvky polia sú indexovaných od 0, nie je od 1.
A to je naozaj dôležité.
A v skutočnosti, to je dôvod, prečo sme v CS 50, A prečo počítačoví odborníci často
sa bude počítať od 0, je pretože C je matica
indexovanie, ktorý vždy začína na 0 ° C.
Takže ak pole sa skladá z n elementy, prvý prvok daného poľa
sa nachádza na indexe 0, a posledný prvok poľa
sa nachádza na indexe n mínus 1.
Opäť platí, že ak je tu n prvky v našej pole, posledný index n mínus 1.
>> Takže ak naše pole má 50 prvkov, Prvý prvok je umiestnený na indexe 0,
a posledný prvok sa nachádza na indexe 49.
Bohužiaľ alebo našťastie, V závislosti na uhle pohľadu,
C je veľmi zhovievavý.
Nebude brániť ísť von hranice svojho poľa.
Tie by mohli získať prístup k mínus 3 prvok svojho poľa
alebo 59. prvok vášho poľa, ak vaše pole má iba 50 prvkov.
To sa nezastaví svoj program z kompilácie, ale za behu,
môžete naraziť na obávanej chyba segmentácia
ak začnete prístup k pamäti že je mimo hranice toho, čo
ste požiadal svoj program, aby vám.
Takže buďte opatrní.
>> Čo pole Vyhlásenie vyzerať?
Ako môžeme kód poľa do existencie ako by sme kód akoukoľvek inou premennou?
K dispozícii sú tri časti na pole declaration-- typ, meno,
a veľkosť.
To je veľmi podobné deklarácie premenných, ktoré
je len typ a meno, veľkosť prvkom je
Špecifický prípad pre maticu, pretože sa dostávame veľa z nich
v rovnakom čase.
>> Takže typ je, aký druh premenné, ktorú chcete, aby každý prvok poľa byť.
Chcem ju do poľa celých čísel?
Potom sa typ dát by mal byť int.
Prajete si, aby to byť Poľa štvorhry alebo plaváky?
Typ dát by mal byť dvojité alebo plávať.
Meno je to, čo chcete volať svoje pole.
Čo chcete, aby pomenovanie tohto obra banka celých čísiel alebo plaváky alebo znakov
alebo štvorhra, alebo čo ste?
Čo chcete, aby to hovoriť?
Celkom samozrejmý.
>> A konečne, veľkosť, ktorá vedie vnútri hranatých zátvoriek,
je, koľko prvky by ste ako vaše pole obsahovať.
Koľko celé čísla chcete?
Koľko plaváky chceš?
>> Tak napríklad, int študentov známky 40.
To deklaruje pole s názvom Študent stupňa, ktoré sa skladá z 40 čísel.
Celkom samozrejmý, dúfam.
Tu je ďalší príklad.
Dvojitých cien Menu 8.
To vytvorí pole s názvom Ceny menu, ktoré sa skladá
priestoru v pamäti pre osem zdvojnásobí.
>> Ak si myslíte, že každého prvku z poľa typu dátového typu,
takže napríklad, jeden prvok pole typu int, rovnakým spôsobom,
by sa myslieť na akýkoľvek iný premenná typu int,
všetky známe operácie, ktoré my už bolo zhora uvedené v prevádzkovej
Video bude mať zmysel.
Takže tu by sme mohli vyhlásiť pole of Boolean zvaných Truthtable,
ktorý sa skladá z miestnosti po dobu 10 Boolean.
>> A potom, rovnako ako sme mohli len priradiť hodnota, ktorá má akýkoľvek iný premennej typu
Boolean, mohli by sme povedať niečo ako Truthtable hranatých zátvorkách
2, čo je, ako ukazujú, ktorý prvok pravdivostnú tabuľky?
Tretím prvkom pravdivostná tabuľka, pretože nezabudnite,
budeme počítať od 0.
Tak to je, ako sme sa označujú Tretí prvok pravdivostnú tabuľky.
Truthtable 2 rovná false, rovnako ako by sme mohli declare--
alebo by sme mohli postúpiť, skôr akýkoľvek Boolean premenná typu, že je falošný.
>> Môžeme ho použiť aj v podmienkach.
if (truthtable 7 == true), čo znamená,
v prípade ôsmeho prvku z Truthtable je pravda,
Možno, že chceme vytlačiť správu pre užívateľov, printf ("PRAVDA! n");.
To nás vedie k povedať Truthtable 10 rovná pravda, že jo?
No, môžem, ale je to celkom nebezpečný, pretože nezabudnite,
máme rad 10 Boolean.
Takže je najvyšší index, že kompilátor dal nám je 9.
>> Tento program bude zostavovať, ale ak niečo iné v pamäti
existuje tam, kde by sme Očakávame Truthtable 10 ísť,
sme mohli trpieť chybu segmentácie. My mohol dostať preč s ním, ale všeobecne,
dosť nebezpečné.
Takže to, čo tu robím je legálne C, ale nemusí byť nevyhnutne najlepšie ťah.
Teraz, keď ste deklarovať a inicializáciu poľa súčasne,
je to vlastne celkom špeciálna syntax, ktorá vás
môžete použiť na vyplnenie poľa s počiatočnými hodnotami.
To môže dostať ťažkopádne deklarovať poľa veľkosti 100,
a potom musím povedať, prvok 0 rovná sa to; prvok 1 rovná sa to;
prvok 2 rovná.
Aký to má zmysel, že jo?
>> Ak je to malé pole, vy mohol urobiť niečo také.
Bool truthtable 3 rovná open zložená zátvorka a potom čiarka
oddeliť zoznam prvkov, že chcete, aby v poli.
Potom zavrite zloženú zátvorkou bodkočiarku.
To vytvorí pole Veľkosť Tri volal Truthtable,
s prvkami false, pravda, a pravda.
A v skutočnosti, že inštancia syntax Aj tu je
presne rovnaký ako robí jednotlivý prvok syntax nižšie.
Tieto dva spôsoby kódovania odkázaný produkovať presne rovnaké pole.
>> Podobne, mohli by sme iterovat cez všetky prvky
z poľa pomocou slučky, ktorá v Skutočnosť, je veľmi dôrazne odporúča
at-home cvičenia.
Ako si vytvoriť pole 100 celých čísel, kde
každý prvok matice je jeho index?
Tak napríklad, máme rad 100 celé čísla, a v prvom prvku,
Chceme dať 0.
V druhom prvku, chceme dať 1.
V treťom prvku, chceme dať 2; a tak ďalej a tak ďalej.
To je naozaj dobrá at-home cvičenia, ako to urobiť.
>> Tu, to nevyzerá ako príliš nezmenilo.
Ale všimnite si, že v medzi hranaté zátvorky, tentoraz,
Ja som vlastne vynechať číslo.
Ak používate túto veľmi špeciálny inštancie
syntax vytvoriť pole, v skutočnosti nie
je potrebné uviesť veľkosť matice vopred.
Kompilátor je dosť šikovný, vedieť, že vás vlastne
chcieť poľa veľkosti 3, preto, že ste dal tri elementy
napravo od znamienka rovná.
Ak ste dal štyri, malo by to vám dal pravdivostnú tabuľky o veľkosti štyroch;
a tak ďalej a tak ďalej.
>> Polia nie sú obmedzené na jeden rozmer, čo je celkom v pohode.
Môžete si skutočne mať toľko Bočné Špecifikátor, ako si prajete.
Tak napríklad, ak chcete vytvoriť tabuľa pre hru bojová loď, ktorá,
Ak ste niekedy hrali, je hra, ktorá je hral si s štipce na 10 o 10 mriežkou,
môžete vytvoriť pole, ako je tento.
Dalo by sa povedať Bool bojová loď hranatú zátvorku 10
uzavretej hranatá zátvorka square držiak 10 zatvorené hranatú zátvorku.
>> A potom, môžete si vybrať interpretovať to vo svojej mysli, ako 10
o 10 mriežky buniek.
Teraz, v skutočnosti, v pamäti, to naozaj len
zostávajú 100 prvok, single rozmerné pole.
A to v skutočnosti platí aj pre ak Vás majú tri rozmery alebo štyri alebo päť.
Je to naozaj len to vynásobiť všetky indices--
alebo všetky veľkosti specifiers-- dohromady,
a vy len získať jednorozmerný pole o danej veľkosti.
>> Ale pokiaľ ide o organizáciu a vizualizácie a ľudské vnímanie,
to môže byť oveľa jednoduchšie pracovať s mriežkou
ak pracujete na hru ako Tic-tac-toe alebo bojová loď,
alebo niečo také.
Je to skvelý abstrakcie, namiesto toho, aby
premýšľať o Tic-tac-toe board ako čiara deviatich
štvorca alebo ich Battleship doska ako rad 100 štvorcov.
A 10 o 10 mriežkou alebo tri o tri mriežka je pravdepodobne
oveľa viac ľahko vnímať.
>> A teraz, niečo naozaj dôležitého poľa.
Môžeme liečiť každý jednotlivec prvok poľa ako premenné.
Videli sme, že skôr keď sme boli priraďovaní
Hodnota true na určité Boolean alebo ich testovanie v conditionals.
Ale nemôžeme liečiť celokrajné Pole sa ako premenné.
Nemôžeme napríklad priradiť jednu sústavu, do iného poľa pomocou priradenia
operátor.
To nie je legálne C.
>> Ak chceme, za to, čo example-- budeme robiť v tomto príklade
bude kopírovať jednu sústavu, do druhého.
Ak chceme urobiť, sme vlastne je potrebné použiť slučku skopírovať
každý jednotlivý element jeden po druhom.
Viem, že je to trochu časovo náročné.
>> Tak napríklad, keď sme mali týchto pár riadkov kódu, by to fungovať?
No, nie, to by nebolo, že jo?
Vzhľadom k tomu, že sa snažíme priradiť jedlo bar.
To nebude fungovať, pretože je to pole,
a my sme práve popísali že to nie je legálne C.
>> Namiesto toho, ak chceme skopírujte obsah potravín
do baru, ktorý je to, čo sa snažíme robiť tu,
by sme potrebovali syntax ako je tento.
Máme pre sláčiky, ktorá ide od J je rovné 0 až 5,
a my prírastok J na každej obrátke slučka a priradiť prvky, ako to.
To by malo za následok tiež baru je jeden, dva, tri, štyri, päť,
ale musíme to urobiť tento veľmi pomalé element-by-prvkom spôsob,
namiesto toho, tým, že len kopírovanie celého poľa.
V iných programov jazyky, modernejšie,
môžete v skutočnosti, robiť len Tak jednoduché rovná syntax.
Ale C, bohužiaľ, my sme nie je dovolené robiť.
>> A teraz, je tu ešte jedna ďalšia vec, ktorú chcem spomenúť
o pole, ktoré môže byť trochu trochu zložitejšie prvýkrát, čo
pracovať s nimi.
Diskutovali sme vo videu o premenné rozsah,
že väčšina premenné v jazyku C, keď zavoláte je vo funkciách, sú odovzdané hodnotou.
Spomínate si, čo to znamená odovzdať niečo podľa hodnoty?
To znamená, že robíme kópiu premenná, ktorá je práve prešiel dovnútra.
Funkcie volaným, funkcie ktorá je obdrží premennú,
nedostane premennú sám.
To dostane jeho vlastné miestne kópiu, ktorá s ním pracovať.
>> Pole, samozrejme, že nie nenasledujú toto pravidlo.
Skôr, čo nazývame je okolo odkazom.
Volaný vlastne sa dostávajú poľa.
To nedostane vlastné lokálne kópie.
A ak si myslíte o to, to má zmysel.
Ak pole sú naozaj veľké, to zaberie toľko času a úsilia,
vytvoriť kópiu poľa 100 alebo 1000 alebo 10000 prvky,
že to nestojí to za fungujú dostať kópiu toho,
urobiť nejakú prácu s ním, a potom len byť hotové s kópiou;
to nemusí mať to potĺka okolo už nie.
>> Pretože pole sú niektoré objemné a ťažkopádne,
my len odovzdať je odkazom.
Len Veríme, že funkcia k, neporušujú nič.
Tak to skutočne dostať poľa.
To už ani nemôže svoju vlastnú lokálnu kópiu.
>> Takže čo to znamená, potom, keď volaný
manipuluje prvky poľa?
Čo sa deje?
Pre teraz, budeme lesk nad tým, prečo práve toto
deje, prečo polia sú odovzdané podľa odkazu
a všetko ostatné je odovzdaný podľa hodnoty.
Ale sľubujem vám, budeme vrátiť a dať vám odpoveď
k tomu v neskoršom videu.
>> Tu je ešte jeden cvičenie pre vás Než sme sa zabaliť veci na poliach.
Zväzok kódu tu, to je nijako zvlášť dobrý štýl,
Len Budem robiť, že námietku.
Tam je žiadne komentáre tu, čo je dosť zlá forma.
Ale je to len preto, že som chcel byť schopný, aby sa zmestili všetko, čo na obrazovke.
>> Na vrchole, môžete vidieť, že mám dve vyhlásenia funkcie pre nastavenú pole
a nastavenie int.
Set poľa zrejme berie poľa zo štyroch celých čísel ako vstup.
A set int vraj berie celé číslo ako jeho vstup.
Ale obaja z nich nemajú výstup.
Výstup, návrat typ, na každý z nich je neplatné.
V Main, máme pár riadkov kódu.
Prehlasujeme premennú integer volal a priraďte jej hodnotu 10.
Prehlasujeme pole štyroch celých čísel volal B a priradiť prvky 0, 1,
2, a 3, v uvedenom poradí.
Potom máme hovor nastaviť int a volania pre nastavenie poľa.
Definície nastaveného polia a sady int sú dole, na dne.
>> A tak, opäť by som vám položiť otázku.
Čo sa bude vytlačená tu na konci Main?
Je tu col výtlačok. Som vytlačiť dve celé čísla.
Ja som vytlačenie obsahu a obsah B hranatých zátvorkách 0.
Pozastaviť video tu a chvíľu trvať.
Môžete zistiť, čo to Funkcia vytlačí na konci?
Dúfajme, ak ste si spomenúť na Rozdiel medzi okoloidúci hodnotou
a odovzdávanie odkazom, tento Problém bol v tom nie je príliš zložité pre vás.
A odpoveď by ste našli to je.
Ak si nie ste úplne istý, ako sa prečo je to tak, vziať druhý,
vrátiť, skontrolovať, čo som bol len diskutovať o odovzdávaní polí
formou odkazu, v porovnaní s priechodom iné premenné podľa hodnoty,
a dúfajme, bude to robiť trochu väčší zmysel.
>> Som Doug Lloyd, a to je CS50.