1 00:00:00,000 --> 00:00:03,388 >> [MUSIC JOC] 2 00:00:03,388 --> 00:00:05,104 3 00:00:05,104 --> 00:00:06,020 DOUG LLOYD: Bine. 4 00:00:06,020 --> 00:00:07,680 Lucrul cu un singur variabile este destul de distractiv. 5 00:00:07,680 --> 00:00:09,500 Dar dacă vrem să lucreze cu o mulțime de variabile, 6 00:00:09,500 --> 00:00:12,760 dar nu vrem să avem o grămadă de nume diferite care zboară în jurul codul nostru? 7 00:00:12,760 --> 00:00:15,980 În acest caz, sunt matrice să vină în foarte la îndemână. 8 00:00:15,980 --> 00:00:19,510 Arrays sunt un adevărat fundamental de date Structura pentru orice limbaj de programare 9 00:00:19,510 --> 00:00:20,260 pe care le va folosi. 10 00:00:20,260 --> 00:00:24,450 Și sunt foarte, foarte util, în special, după cum vom vedea, în CS 50. 11 00:00:24,450 --> 00:00:27,870 >> Noi folosim matrice de a deține Valorile de același tip de date 12 00:00:27,870 --> 00:00:29,830 la locații de memorie contigue. 13 00:00:29,830 --> 00:00:32,430 Asta este de a spune, este un încât putem grup 14 00:00:32,430 --> 00:00:35,430 o grămadă de numere întregi împreună în memorie sau o grămadă de personaje 15 00:00:35,430 --> 00:00:38,270 sau plutește în memorie într-adevăr aproape împreună și de muncă 16 00:00:38,270 --> 00:00:41,930 cu ei fără a fi nevoie pentru a da fiecare un nume propriu unic, care poate 17 00:00:41,930 --> 00:00:44,500 obține greoaie după puțin timp. 18 00:00:44,500 --> 00:00:48,130 >> Acum, un mod de a analogii matrice este să se gândească la postarea dvs. locală 19 00:00:48,130 --> 00:00:49,000 birou pentru o secundă. 20 00:00:49,000 --> 00:00:51,820 Deci, pas departe de programare și doar închide ochii 21 00:00:51,820 --> 00:00:54,120 și vizualiza în mintea ta oficiul poștal local. 22 00:00:54,120 --> 00:00:57,160 De obicei, în cele mai multe post- birouri, exista o mare bancă 23 00:00:57,160 --> 00:01:00,490 o căsuțele poștale pe perete. 24 00:01:00,490 --> 00:01:03,510 >> O matrice este un bloc uriaș de memorie contiguă, 25 00:01:03,510 --> 00:01:06,120 același mod în care un e-mail banca în oficiul poștal 26 00:01:06,120 --> 00:01:11,230 este un spațiu mare de pe perete de oficiul poștal. 27 00:01:11,230 --> 00:01:15,750 Arrays au fost împărțit în mici, identic blocuri de dimensiuni de spațiu, 28 00:01:15,750 --> 00:01:19,930 fiecare dintre care este numit un element, în același mod în care peretele de post 29 00:01:19,930 --> 00:01:23,840 birou a fost împărțit în mici, identic blocuri de dimensiuni de spațiu, 30 00:01:23,840 --> 00:01:27,560 pe care o numim o căsuță poștală. 31 00:01:27,560 --> 00:01:31,650 Fiecare element al tabloului poate stoca o anumită cantitate de date, 32 00:01:31,650 --> 00:01:37,540 la fel cum fiecare cutie poștală este capabil să dețină o anumită cantitate de e-mail. 33 00:01:37,540 --> 00:01:41,540 >> Ce pot fi stocate în fiecare element al matrice este variabile de același date 34 00:01:41,540 --> 00:01:45,300 tip, cum ar fi Int sau char, pur și simplu ca în caseta de posta, 35 00:01:45,300 --> 00:01:47,300 puteți potrivi numai lucruri de un tip similar, 36 00:01:47,300 --> 00:01:50,430 cum ar fi scrisori sau pachete mici. 37 00:01:50,430 --> 00:01:55,050 În cele din urmă, putem accesa fiecare element al matrice direct de numărul de index, 38 00:01:55,050 --> 00:01:59,770 la fel cum putem accesa sediul nostru posta caseta prin cunoașterea numărul căsuței poștale. 39 00:01:59,770 --> 00:02:02,750 Sperăm că, că analogie vă ajută să obțineți cap 40 00:02:02,750 --> 00:02:05,540 în jurul ideii de matrice de analogie cu altceva 41 00:02:05,540 --> 00:02:08,400 că vă sunt, probabil deja familiarizați cu. 42 00:02:08,400 --> 00:02:13,182 >> În C, elementele unei matrice sunt indexate începând de la 0, nu de la 1. 43 00:02:13,182 --> 00:02:14,390 Și acest lucru este foarte important. 44 00:02:14,390 --> 00:02:18,530 Și, de fapt, de aceea, în CS 50, Și de ce oamenii de stiinta de calculator frecvent 45 00:02:18,530 --> 00:02:22,150 va conta la 0, este din cauza matrice C a 46 00:02:22,150 --> 00:02:24,660 indexare, care începe întotdeauna de la 0. 47 00:02:24,660 --> 00:02:28,730 Deci, în cazul în care o serie format din n elemente, primul element de care matrice 48 00:02:28,730 --> 00:02:32,960 este situat la indexul 0, și ultimul element de matrice 49 00:02:32,960 --> 00:02:36,610 este situat la indexul n minus 1. 50 00:02:36,610 --> 00:02:43,160 Din nou, în cazul în care nu există n elemente în nostru matrice, ultima indicele este n minus 1. 51 00:02:43,160 --> 00:02:46,820 >> Deci, dacă oferta noastră dispune de 50 elemente, primul element este situat la indexul 0, 52 00:02:46,820 --> 00:02:51,060 și ultimul element este situat la indexul 49. 53 00:02:51,060 --> 00:02:53,940 Din păcate, sau din fericire, în funcție de perspectiva dumneavoastră, 54 00:02:53,940 --> 00:02:56,170 C este foarte indulgent aici. 55 00:02:56,170 --> 00:02:59,480 Nu te va împiedica să merge în afara limitelor de matrice dumneavoastră. 56 00:02:59,480 --> 00:03:03,080 Ai putea accesa minus 3 element de matrice dvs. 57 00:03:03,080 --> 00:03:07,400 sau elementul 59 de matrice dvs., dacă matrice are numai 50 de elemente. 58 00:03:07,400 --> 00:03:11,060 Acesta nu se va opri programul de la compilarea, dar la momentul execuției, 59 00:03:11,060 --> 00:03:14,350 s-ar putea întâlni o eroare de segmentare temut 60 00:03:14,350 --> 00:03:17,460 dacă începeți să acceseze memoria care este în afara limitele a ceea ce 61 00:03:17,460 --> 00:03:19,260 ai cerut programul pentru a vă oferi. 62 00:03:19,260 --> 00:03:21,250 Deci, nu fi atent. 63 00:03:21,250 --> 00:03:23,120 >> Ce face o serie declarație arata ca? 64 00:03:23,120 --> 00:03:26,940 Cum putem cod o serie în existență ca și cum am codul oricare altă variabilă? 65 00:03:26,940 --> 00:03:31,250 Există trei părți la o serie declaration-- un tip, un nume, 66 00:03:31,250 --> 00:03:31,880 și o dimensiune. 67 00:03:31,880 --> 00:03:34,088 Acest lucru este foarte similar cu un declarație variabilă, care 68 00:03:34,088 --> 00:03:36,970 este doar un tip și un nume, elementul dimensiune fiind 69 00:03:36,970 --> 00:03:39,860 în cazul special pentru o matrice, pentru că suntem obtinerea o mulțime de ele 70 00:03:39,860 --> 00:03:41,830 in acelasi timp. 71 00:03:41,830 --> 00:03:45,560 >> Deci tipul este ce fel de variabilă doresc fiecare element al tabloului de a fi. 72 00:03:45,560 --> 00:03:47,150 -L vreau la o serie de numere întregi? 73 00:03:47,150 --> 00:03:49,010 Apoi, tipul de date ar trebui să fie Int. 74 00:03:49,010 --> 00:03:51,760 Vrei sa fie o serie de camere duble sau flotoare? 75 00:03:51,760 --> 00:03:54,545 Tipul de date ar trebui să fie de două ori sau float. 76 00:03:54,545 --> 00:03:56,420 Numele este ceea ce doriți să o apelați matrice dumneavoastră. 77 00:03:56,420 --> 00:04:00,970 Ce vrei să numească acest gigant bancă de întregi sau flotoare sau caractere 78 00:04:00,970 --> 00:04:03,250 sau duble, sau orice ai? 79 00:04:03,250 --> 00:04:04,700 Ce vrei să-i spunem? 80 00:04:04,700 --> 00:04:06,110 Explicativ auto Destul de. 81 00:04:06,110 --> 00:04:08,610 >> În cele din urmă, dimensiunea, care merge în interiorul paranteze pătrate, 82 00:04:08,610 --> 00:04:12,180 este cât de multe elemente v-ar ca matrice pentru a conține. 83 00:04:12,180 --> 00:04:13,530 Câte numere întregi vrei? 84 00:04:13,530 --> 00:04:15,570 Câte flotoare vrei? 85 00:04:15,570 --> 00:04:19,070 >> Deci, de exemplu, int clasele studenți 40. 86 00:04:19,070 --> 00:04:26,020 Aceasta declară un tablou numit Student clasele, care constă din 40 de numere întregi. 87 00:04:26,020 --> 00:04:28,180 Destul de sine explicativ, sper. 88 00:04:28,180 --> 00:04:29,330 Iată un alt exemplu. 89 00:04:29,330 --> 00:04:31,560 Prețurile meniu Double 8. 90 00:04:31,560 --> 00:04:34,610 Acest lucru creează o matrice numit Preturi meniu, care constă 91 00:04:34,610 --> 00:04:38,300 de cameră în memorie timp de opt camere duble. 92 00:04:38,300 --> 00:04:42,000 93 00:04:42,000 --> 00:04:45,750 >> Dacă credeți că de fiecare element de o serie de tip de tip de date, 94 00:04:45,750 --> 00:04:49,860 așa de exemplu, un singur element de o serie de tip int, la fel cum 95 00:04:49,860 --> 00:04:52,770 s-ar gândi de orice alt variabila de tip int, 96 00:04:52,770 --> 00:04:56,440 toate operațiile familiare pe care le discutat anterior în manualul operațional 97 00:04:56,440 --> 00:04:58,270 video va avea sens. 98 00:04:58,270 --> 00:05:01,620 Deci, aici, am putea declara un tablou de Booleans numite Truthtable, 99 00:05:01,620 --> 00:05:05,590 care constă din camerei timp de 10 Booleans. 100 00:05:05,590 --> 00:05:09,650 >> Și apoi, la fel ca am putea atribui doar o valoare la orice alt variabila de tip 101 00:05:09,650 --> 00:05:13,470 Boolean, am putea spune ceva ca Truthtable suport pătrat 102 00:05:13,470 --> 00:05:18,040 2, care este modul în care arată, care element al tabelului de adevăr? 103 00:05:18,040 --> 00:05:20,350 Cea de a treia element al tabel de adevăr, pentru că amintiți-vă, 104 00:05:20,350 --> 00:05:21,800 suntem de numărare de la 0. 105 00:05:21,800 --> 00:05:25,690 Deci, asta e modul în care ne indica al treilea element din tabelul de adevăr. 106 00:05:25,690 --> 00:05:28,680 Truthtable 2 este egal cu false, la fel ca am putea declare-- 107 00:05:28,680 --> 00:05:33,560 sau am putea atribui, mai degrabă, orice Variabila de tip boolean a fi false. 108 00:05:33,560 --> 00:05:35,050 >> Putem, de asemenea, folosi în condiții. 109 00:05:35,050 --> 00:05:39,000 dacă (truthtable 7 == true), care este de a spune, 110 00:05:39,000 --> 00:05:42,370 în cazul în care elementul a opta de Truthtable este adevărat, 111 00:05:42,370 --> 00:05:46,760 poate că doriți să imprimați un mesaj pentru utilizator, printf ("True! n") ;. 112 00:05:46,760 --> 00:05:50,290 Care ne face să spunem Truthtable 10 este egal cu adevărat, nu? 113 00:05:50,290 --> 00:05:53,590 Ei bine, eu pot, dar e destul de periculos, pentru că amintiți-vă, 114 00:05:53,590 --> 00:05:56,260 avem o serie de 10 Booleans. 115 00:05:56,260 --> 00:06:02,340 Deci cel mai mare indice că compilator ne-a dat este de 9. 116 00:06:02,340 --> 00:06:06,010 >> Acest program va compila, dar dacă altceva în memorie 117 00:06:06,010 --> 00:06:09,110 există în cazul în care ne-ar așteaptă Truthtable 10 pentru a merge, 118 00:06:09,110 --> 00:06:13,980 am putea suferi o eroare de segmentare. Noi s-ar putea să scape cu ea, dar, în general, 119 00:06:13,980 --> 00:06:14,710 destul de periculos. 120 00:06:14,710 --> 00:06:19,759 Deci, ceea ce fac aici este C legal, dar nu neapărat cea mai frumoasă fază. 121 00:06:19,759 --> 00:06:22,300 Acum, când declara și inițializa o serie simultan, 122 00:06:22,300 --> 00:06:23,960 există de fapt o destul de sintaxă specială pe care le 123 00:06:23,960 --> 00:06:26,250 pot utiliza pentru a umple matrice cu valorile sale de pornire. 124 00:06:26,250 --> 00:06:30,130 Se poate ajunge la greoaie declara o serie de dimensiuni 100, 125 00:06:30,130 --> 00:06:33,430 și apoi trebuie să spun, elementul 0 este egal cu acest lucru; Element 1 este egal cu acest lucru; 126 00:06:33,430 --> 00:06:34,850 Element 2 este egală cu cea. 127 00:06:34,850 --> 00:06:36,370 Ce rost, nu? 128 00:06:36,370 --> 00:06:39,470 >> Daca este o matrice mici, ar putea face ceva de genul asta. 129 00:06:39,470 --> 00:06:44,360 Bool truthtable 3 este egal deschis bretele cret si apoi virgulă 130 00:06:44,360 --> 00:06:48,060 separa lista elementelor pe care doriți să pună în matrice. 131 00:06:48,060 --> 00:06:50,520 Apoi închideți cret virgulă bretele. 132 00:06:50,520 --> 00:06:53,910 Aceasta creează o serie de Dimensiunea trei numit Truthtable, 133 00:06:53,910 --> 00:06:56,090 cu elemente false, adevărat, și adevărat. 134 00:06:56,090 --> 00:06:59,270 Și, de fapt, instanțierea sintaxa am aici este 135 00:06:59,270 --> 00:07:03,350 exact la fel ca face următoarele sintaxă individ element de mai jos. 136 00:07:03,350 --> 00:07:09,380 Aceste două moduri de codificare ar produce același matrice exact. 137 00:07:09,380 --> 00:07:11,740 >> În mod similar, am putea repeta peste toate elementele 138 00:07:11,740 --> 00:07:15,400 unui tablou folosind o buclă, care, în De fapt, este un foarte recomandat 139 00:07:15,400 --> 00:07:16,790 at-home exercițiu. 140 00:07:16,790 --> 00:07:20,720 Cum vă creați un array 100 numere întregi, unde 141 00:07:20,720 --> 00:07:23,477 fiecare element al tabloului este indexul său? 142 00:07:23,477 --> 00:07:26,560 Deci, de exemplu, avem o gamă de 100 numere întregi, iar în primul element, 143 00:07:26,560 --> 00:07:27,790 vrem să 0. 144 00:07:27,790 --> 00:07:29,810 În al doilea element, vrem să pună 1. 145 00:07:29,810 --> 00:07:33,319 În al treilea element, ne-o dorim pentru a pune 2; și așa mai departe și așa mai departe. 146 00:07:33,319 --> 00:07:35,360 Asta e un foarte bun at-home exercițiu pentru a face acest lucru. 147 00:07:35,360 --> 00:07:38,190 148 00:07:38,190 --> 00:07:40,220 >> Aici, nu arata ca prea mult sa schimbat. 149 00:07:40,220 --> 00:07:44,170 Dar observați că între cele paranteze drepte, de data aceasta, 150 00:07:44,170 --> 00:07:45,830 Am omis de fapt numărul. 151 00:07:45,830 --> 00:07:48,000 Dacă utilizați acest lucru foarte instanțierea special 152 00:07:48,000 --> 00:07:50,380 sintaxa pentru a crea un matrice, de fapt nu 153 00:07:50,380 --> 00:07:53,491 trebuie să indicați dimensiunea de matrice prealabil. 154 00:07:53,491 --> 00:07:55,740 Compilatorul este destul de inteligent să știi că tu de fapt 155 00:07:55,740 --> 00:07:58,980 doresc o serie de dimensiuni 3, pentru că ai pus trei elemente 156 00:07:58,980 --> 00:08:00,640 în partea dreaptă a semnului egal. 157 00:08:00,640 --> 00:08:04,140 Dacă ai fi pus patru, aceasta ar trebui dat un tabel de adevăr de mărimea patru; 158 00:08:04,140 --> 00:08:06,270 și așa mai departe și așa mai departe. 159 00:08:06,270 --> 00:08:09,380 >> Array nu sunt limitate la un singur dimensiune, care este destul de rece. 160 00:08:09,380 --> 00:08:12,000 Puteți avea, de fapt cât mai multe specificatori laterale după cum doriți. 161 00:08:12,000 --> 00:08:16,470 Deci, de exemplu, în cazul în care doriți să creați un consiliu de joc Battleship, care, 162 00:08:16,470 --> 00:08:20,910 dacă ai jucat vreodata, este un joc care este a jucat cu cuie pe 10 cu 10 de rețea, 163 00:08:20,910 --> 00:08:22,450 ai putea crea un tablou de genul asta. 164 00:08:22,450 --> 00:08:26,030 Ai putea spune Bool Battleship pătrat suport 10 165 00:08:26,030 --> 00:08:29,590 pătrat închis suport pătrat Suport 10 închis suport pătrat. 166 00:08:29,590 --> 00:08:32,710 >> Și apoi, puteți alege să interpreta acest lucru în minte ca un 10 167 00:08:32,710 --> 00:08:35,576 prin 10 grila de celule. 168 00:08:35,576 --> 00:08:37,409 Acum, de fapt, în memorie, într-adevăr nu doar 169 00:08:37,409 --> 00:08:42,440 rămâne un element 100, matrice dimensionale singur. 170 00:08:42,440 --> 00:08:46,070 Și aceasta, în fapt, este valabil și pentru tine dacă au trei dimensiuni sau patru sau cinci. 171 00:08:46,070 --> 00:08:49,420 Este într-adevăr doar nu multiplica toate indices-- 172 00:08:49,420 --> 00:08:51,130 sau toate dimensiunile specifiers-- împreună, 173 00:08:51,130 --> 00:08:53,480 și doar veți obține un one-dimensional matrice de această mărime. 174 00:08:53,480 --> 00:08:57,090 >> Dar, în ceea ce privește organizarea și vizualizare și percepția umană, 175 00:08:57,090 --> 00:08:59,240 aceasta poate fi mult mai ușor de a lucra cu o grilă 176 00:08:59,240 --> 00:09:02,980 dacă sunteți de lucru pe un joc ca Tic-tac-toe sau Battleship, 177 00:09:02,980 --> 00:09:05,179 sau asa ceva. 178 00:09:05,179 --> 00:09:06,970 Este o mare abstracție, în loc de a avea 179 00:09:06,970 --> 00:09:09,340 să se gândească la un Tic-tac-toe bord ca o linie de nouă 180 00:09:09,340 --> 00:09:13,810 pătrate sau un consiliu de Battleship ca o linie de 100 de pătrate. 181 00:09:13,810 --> 00:09:16,010 A 10 cu 10 grilă sau trei de trei grila este, probabil, 182 00:09:16,010 --> 00:09:17,225 mult mai ușor de a percepe. 183 00:09:17,225 --> 00:09:19,820 184 00:09:19,820 --> 00:09:22,280 >> Acum, ceva cu adevarat importante despre tablouri. 185 00:09:22,280 --> 00:09:25,950 Putem trata fiecare individ Element de matrice ca o variabilă. 186 00:09:25,950 --> 00:09:27,700 Am văzut că mai devreme atunci când am fost atribuirea 187 00:09:27,700 --> 00:09:32,240 valoarea Adevărat la anumite Booleans sau testarea acestora în conditionale. 188 00:09:32,240 --> 00:09:35,960 Dar nu putem trata întreaga se Arrays ca variabile. 189 00:09:35,960 --> 00:09:41,760 Nu putem, de exemplu, atribui o matrice la un alt array folosind atribuirea 190 00:09:41,760 --> 00:09:42,930 operatorul. 191 00:09:42,930 --> 00:09:44,640 Nu e legal C. 192 00:09:44,640 --> 00:09:47,920 >> Dacă vrem să, pentru example-- ce ne-ar face în acest exemplu 193 00:09:47,920 --> 00:09:50,200 ar fi de a copia un tablou în alta. 194 00:09:50,200 --> 00:09:53,810 Dacă vrem să facem acest lucru, ne-am de fapt, necesitatea de a utiliza o buclă pentru a copia peste 195 00:09:53,810 --> 00:09:56,550 fiecare element individual la un moment dat. 196 00:09:56,550 --> 00:09:58,700 Știu că e un pic consumatoare de timp. 197 00:09:58,700 --> 00:10:04,022 >> Deci, de exemplu, dacă am avea aceste cuplu de linii de cod, ar acest lucru? 198 00:10:04,022 --> 00:10:05,230 Ei bine, nu, nu ar fi, nu? 199 00:10:05,230 --> 00:10:07,860 Pentru că noi încercăm pentru a atribui produselor alimentare la bar. 200 00:10:07,860 --> 00:10:09,860 Asta nu va merge, pentru că este o matrice, 201 00:10:09,860 --> 00:10:13,130 și ne-am descris că nu e legal C. 202 00:10:13,130 --> 00:10:15,580 >> În schimb, dacă vrem să copiați conținutul de produse alimentare 203 00:10:15,580 --> 00:10:18,070 în bar, care este ceea ce noi încercăm să facem aici, 204 00:10:18,070 --> 00:10:19,970 am avea nevoie de o sintaxă ca aceasta. 205 00:10:19,970 --> 00:10:24,170 Avem o pentru buclă care merge din J este egal cu 0 până la 5, 206 00:10:24,170 --> 00:10:28,390 și ne-am incrementa J pe fiecare iterație a bucla și elementele Atribuirea de genul asta. 207 00:10:28,390 --> 00:10:33,360 Acest lucru ar duce la bar, de asemenea, fiind unul, doi, trei, patru, cinci, 208 00:10:33,360 --> 00:10:36,730 dar trebuie să o facă foarte acest lent mod element cu element 209 00:10:36,730 --> 00:10:40,009 în loc de doar prin copierea întreaga rețea. 210 00:10:40,009 --> 00:10:42,050 În altă ordine de programare limbi, cele mai moderne, 211 00:10:42,050 --> 00:10:45,610 puteți, de fapt, nu doar, simplu este egal cu sintaxa. 212 00:10:45,610 --> 00:10:49,620 Dar, C, din păcate, suntem nu au voie să faci asta. 213 00:10:49,620 --> 00:10:52,026 >> Acum, există un alt lucru pe care vreau să menționez 214 00:10:52,026 --> 00:10:54,650 despre matrice, care poate fi un pic pic dificil prima dată te 215 00:10:54,650 --> 00:10:55,990 lucra cu ei. 216 00:10:55,990 --> 00:10:59,860 Am discutat într-un video despre domeniul de aplicare variabil, 217 00:10:59,860 --> 00:11:04,940 că cele mai multe variabile în C, atunci când apelați le în funcții, sunt transmise de valoare. 218 00:11:04,940 --> 00:11:08,620 Îți amintești ce înseamnă să treacă ceva de valoare? 219 00:11:08,620 --> 00:11:12,570 Înseamnă facem o copie a variabilă care este fiind trecut în. 220 00:11:12,570 --> 00:11:16,290 Funcția apelat, funcția care este primit variabila, 221 00:11:16,290 --> 00:11:17,730 nu se variabila în sine. 222 00:11:17,730 --> 00:11:20,850 Ea devine propriul său nivel local copie a acestuia de a lucra cu. 223 00:11:20,850 --> 00:11:24,070 >> Arrays, desigur, nu nu urmeze această regulă. 224 00:11:24,070 --> 00:11:27,600 Mai degrabă, ceea ce noi numim acest trece prin referință. 225 00:11:27,600 --> 00:11:31,360 Callee de fapt va primi matrice. 226 00:11:31,360 --> 00:11:34,207 Ea nu primește sale copie locală proprie a acestuia. 227 00:11:34,207 --> 00:11:36,040 Și dacă te gândești la ea, acest lucru are sens. 228 00:11:36,040 --> 00:11:39,750 Dacă matrice sunt foarte mari, aceasta nevoie de atât de mult timp și efort 229 00:11:39,750 --> 00:11:44,470 pentru a face o copie de o serie de 100 sau 1000 sau 10.000 de elemente, 230 00:11:44,470 --> 00:11:48,290 că nu merită pentru un funcționează pentru a primi o copie a acestuia, 231 00:11:48,290 --> 00:11:51,037 face unele de lucru cu el, și apoi doar să fie făcut cu copia; 232 00:11:51,037 --> 00:11:53,120 nu are nevoie să aibă o mai agățat în jurul. 233 00:11:53,120 --> 00:11:54,710 >> Deoarece matrice sunt unele voluminoase și greoaie, 234 00:11:54,710 --> 00:11:56,001 am doar le trece prin referire. 235 00:11:56,001 --> 00:12:01,210 Tocmai am încredere că funcția la, nu rupe nimic. 236 00:12:01,210 --> 00:12:03,010 Deci, se ajunge, de fapt, matrice. 237 00:12:03,010 --> 00:12:05,290 Ea nu se propria copie locală a acestuia. 238 00:12:05,290 --> 00:12:07,170 >> Deci, ce înseamnă acest lucru, apoi, când callee 239 00:12:07,170 --> 00:12:08,970 manipulează elemente ale șirului? 240 00:12:08,970 --> 00:12:10,780 Ce se întâmplă? 241 00:12:10,780 --> 00:12:13,210 Pentru moment, vom luciu peste ce exact acest 242 00:12:13,210 --> 00:12:15,320 se întâmplă, de ce tablouri sunt transmise prin referință 243 00:12:15,320 --> 00:12:17,810 și orice altceva este trecut prin valoare. 244 00:12:17,810 --> 00:12:20,470 Dar îți promit, vom întoarce și vă va oferi răspunsul 245 00:12:20,470 --> 00:12:23,750 la acest într-un video mai târziu. 246 00:12:23,750 --> 00:12:28,110 >> Iată un exercițiu mai mult pentru tine înainte de a ne încheia lucrurile pe tablouri. 247 00:12:28,110 --> 00:12:31,400 Buchet de cod aici, asta e nu deosebit de stil bun, 248 00:12:31,400 --> 00:12:33,400 doar voi face asta avertisment. 249 00:12:33,400 --> 00:12:36,660 Nu există nici un comentariu aici, care este forma destul de rău. 250 00:12:36,660 --> 00:12:39,750 Dar e numai pentru că am vrut să fie capabil pentru a se potrivi totul pe ecran. 251 00:12:39,750 --> 00:12:44,360 >> În partea de sus, puteți vedea că am două declarații de funcții pentru set matrice 252 00:12:44,360 --> 00:12:45,820 și a stabilit Int. 253 00:12:45,820 --> 00:12:49,680 Set tablou aparent are o serie de patru numere întregi ca intrarea sa. 254 00:12:49,680 --> 00:12:52,767 Și set Int aparent ia un singur număr întreg ca intrare sa. 255 00:12:52,767 --> 00:12:54,350 Dar ambele dintre ele nu au o putere. 256 00:12:54,350 --> 00:12:57,689 Ieșirea, revenirea tip, de fiecare dintre ele este nulă. 257 00:12:57,689 --> 00:12:59,480 În principal, avem o câteva linii de cod. 258 00:12:59,480 --> 00:13:02,730 Declaram o variabila integer numit A și atribuie valoarea 10. 259 00:13:02,730 --> 00:13:07,080 Declaram o serie de patru numere întregi numit B și atribuiți elementelor 0, 1, 260 00:13:07,080 --> 00:13:08,730 2, și 3, respectiv. 261 00:13:08,730 --> 00:13:12,190 Apoi, avem un apel pentru a seta int și un apel pentru a seta matrice. 262 00:13:12,190 --> 00:13:15,910 Definițiile set matrice și set Int sunt jos, în partea de jos. 263 00:13:15,910 --> 00:13:17,640 >> Și astfel, din nou, vă pun întrebarea. 264 00:13:17,640 --> 00:13:20,770 Ce se imprimate aici, la sfârșitul principal? 265 00:13:20,770 --> 00:13:23,020 Există un col imprimare. Sunt imprimarea două numere întregi. 266 00:13:23,020 --> 00:13:28,010 Sunt imprimarea conținutul A și conținutul B suport pătrat 0. 267 00:13:28,010 --> 00:13:29,880 Întrerupe videoclipul aici și să ia un minut. 268 00:13:29,880 --> 00:13:35,482 Poate îți dai seama ce acest Funcția va imprima la sfârșitul? 269 00:13:35,482 --> 00:13:38,190 Sperăm că, dacă amintesc distincție între trecere de valoare 270 00:13:38,190 --> 00:13:41,680 și care trece prin referință, această problemă nu a fost prea complicat pentru tine. 271 00:13:41,680 --> 00:13:44,130 Și răspunsul ați au găsit asta. 272 00:13:44,130 --> 00:13:47,660 Dacă nu sunteți sigur cu privire la de ce acesta este cazul, să ia un al doilea, 273 00:13:47,660 --> 00:13:50,620 du-te înapoi, revizuirea ceea ce am fost doar discuta despre trecerea tablouri 274 00:13:50,620 --> 00:13:53,450 de referință, față de care trece alte variabile de valoare, 275 00:13:53,450 --> 00:13:56,680 și sperăm, se va face un pic mai mult sens. 276 00:13:56,680 --> 00:13:59,760 >> Sunt Doug Lloyd, iar acest lucru este CS50. 277 00:13:59,760 --> 00:14:01,467