1 00:00:00,000 --> 00:00:03,388 >> [MUZIKO Ludante] 2 00:00:03,388 --> 00:00:05,104 3 00:00:05,104 --> 00:00:06,020 DOUG LLOYD: Bone. 4 00:00:06,020 --> 00:00:07,680 Laborante kun sola variabloj estas sufiĉe amuza. 5 00:00:07,680 --> 00:00:09,500 Sed kion se ni volas labori kun multaj variabloj, 6 00:00:09,500 --> 00:00:12,760 sed ni ne volas havi faskon de malsamaj nomoj flugante ĉirkaŭ nia kodo? 7 00:00:12,760 --> 00:00:15,980 En tiu kazo, tabeloj estas tuj veni en vere oportuna. 8 00:00:15,980 --> 00:00:19,510 Arrays estas vere fundamentaj datumoj strukturon por ajna programlingvo 9 00:00:19,510 --> 00:00:20,260 ke vi uzos. 10 00:00:20,260 --> 00:00:24,450 Kaj ili estas vere, vere utila, aparte, kiel ni vidos, en CS 50. 11 00:00:24,450 --> 00:00:27,870 >> Ni uzas tabeloj por teni valoroj de la sama datumtipo 12 00:00:27,870 --> 00:00:29,830 ĉe apudaj memoro lokojn. 13 00:00:29,830 --> 00:00:32,430 Tio estas, ĝi estas maniero ke ni povas grupigi 14 00:00:32,430 --> 00:00:35,430 faskon de entjeroj kune en memoro aŭ faskon de karakteroj 15 00:00:35,430 --> 00:00:38,270 aŭ flosas memore vere fermi kune kaj laboro 16 00:00:38,270 --> 00:00:41,930 kun ili sen devi doni ĉiun unu sian propran unikan nomon, kiu povas 17 00:00:41,930 --> 00:00:44,500 akiri maloportuna post iom da tempo. 18 00:00:44,500 --> 00:00:48,130 >> Nun, unu maniero analogize tabeloj estas pensi pri via loka posteno 19 00:00:48,130 --> 00:00:49,000 oficejo dum sekundo. 20 00:00:49,000 --> 00:00:51,820 Do paŝu for de programado kaj simple fermu viajn okulojn 21 00:00:51,820 --> 00:00:54,120 kaj visualizar en via menso via loka poŝtoficejo. 22 00:00:54,120 --> 00:00:57,160 Kutime, en plej posteno oficejoj, ekzistas granda banko 23 00:00:57,160 --> 00:01:00,490 poŝtejo skatoloj sur la muro. 24 00:01:00,490 --> 00:01:03,510 >> Tabelo estas giganta bloko de apudaj memoro, 25 00:01:03,510 --> 00:01:06,120 sammaniere ke poŝto banko en via poŝtejo 26 00:01:06,120 --> 00:01:11,230 estas granda spaco sur la muro de la poŝtoficejo. 27 00:01:11,230 --> 00:01:15,750 Arrays estis dispartigita en malgrandaj, idente grandeco blokojn de spaco, 28 00:01:15,750 --> 00:01:19,930 el kiuj ĉiu estas nomata ero, en sammaniere ke la muro de la post 29 00:01:19,930 --> 00:01:23,840 oficejo estis dispartigita en malgrandaj, idente grandeco blokojn de spaco, 30 00:01:23,840 --> 00:01:27,560 kiun ni nomas PO kesto. 31 00:01:27,560 --> 00:01:31,650 Ĉiu elemento de la tabelo povas stoki iun kvanton de datumoj, 32 00:01:31,650 --> 00:01:37,540 Tiel ĉiu poŝtejo skatolo povas teni certan kvanton de poŝto. 33 00:01:37,540 --> 00:01:41,540 >> Kio povas esti stokita en ĉiu elemento de la tabelo estas variabloj de la sama datumoj 34 00:01:41,540 --> 00:01:45,300 tipo, kiel ekzemple int aŭ char, nur kiel en via poŝtoficejo skatolo, 35 00:01:45,300 --> 00:01:47,300 Vi nur povas persvadi aferoj de simila tipo, 36 00:01:47,300 --> 00:01:50,430 kiel literoj aŭ malgrandaj pakoj. 37 00:01:50,430 --> 00:01:55,050 Finfine, ni povas aliri ĉiu ero de la tabelo rekte per indekso numeron, 38 00:01:55,050 --> 00:01:59,770 kiel ni povas aliri nian poŝtoficejo skatolo de scianta lia leterkesto nombro. 39 00:01:59,770 --> 00:02:02,750 Espereble, ke analogio helpas vin akiri vian kapon 40 00:02:02,750 --> 00:02:05,540 ĉirkaŭ la ideo de sensilo per analogizing al io alia 41 00:02:05,540 --> 00:02:08,400 ke oni verŝajne jam konas. 42 00:02:08,400 --> 00:02:13,182 >> En C, la elementoj de tabelo estas indeksita ekde 0, ne de 1. 43 00:02:13,182 --> 00:02:14,390 Kaj tiu estas vere grava. 44 00:02:14,390 --> 00:02:18,530 Kaj fakte, ĉi tiu estas kial ni, en CS 50, kaj kial komputikistoj ofte 45 00:02:18,530 --> 00:02:22,150 rakontos de 0, estas pro C la tabelo 46 00:02:22,150 --> 00:02:24,660 indeksado, kiu ĉiam startas je 0. 47 00:02:24,660 --> 00:02:28,730 Do se tabelo konsistas de n eroj, la unua elemento de tiu tabelo 48 00:02:28,730 --> 00:02:32,960 situas ĉe indeksa 0, kaj la lasta elemento de la tabelo 49 00:02:32,960 --> 00:02:36,610 situas ĉe indekso n minus 1. 50 00:02:36,610 --> 00:02:43,160 Denove, se estas n elementoj en nia tabelo, la lasta indekso estas n minus 1. 51 00:02:43,160 --> 00:02:46,820 >> Do se nia tabelo havas 50 elementoj, la unua ero situas ĉe indeksa 0, 52 00:02:46,820 --> 00:02:51,060 kaj la lasta elemento situas ĉe indekso 49. 53 00:02:51,060 --> 00:02:53,940 Bedaŭrinde, aŭ bonŝance, Dependanta sur via perspektivo, 54 00:02:53,940 --> 00:02:56,170 C estas tre malsevera tie. 55 00:02:56,170 --> 00:02:59,480 Ĝi ne malhelpas vin de irante el baroj de via tabelo. 56 00:02:59,480 --> 00:03:03,080 Vi povus aliri la minus 3 elementon de via tabelo 57 00:03:03,080 --> 00:03:07,400 aŭ la 59a ero de via tabelo, se via tabelo nur havas 50 elementojn. 58 00:03:07,400 --> 00:03:11,060 Ĝi ne ĉesos vian programon el kompilado, sed en tempo de ekzekuto, 59 00:03:11,060 --> 00:03:14,350 vi eble malkovros timitan segmentación kulpo 60 00:03:14,350 --> 00:03:17,460 se vi komencas aliri memoro kiu estas ekster la saltegoj de kio 61 00:03:17,460 --> 00:03:19,260 vi petis vian programon por doni al vi. 62 00:03:19,260 --> 00:03:21,250 Do zorgu. 63 00:03:21,250 --> 00:03:23,120 >> Kion faras tabelo deklaro aspektas? 64 00:03:23,120 --> 00:03:26,940 Kiel ni kodigi tabelo en ekziston kiel ni kodi ajna alia variablo? 65 00:03:26,940 --> 00:03:31,250 Ekzistas tri partoj al tabelo declaration-- tipo, nomo, 66 00:03:31,250 --> 00:03:31,880 kaj grandeco. 67 00:03:31,880 --> 00:03:34,088 Ĉi tio estas tre simila al ŝanĝiĝema deklaro, kiu 68 00:03:34,088 --> 00:03:36,970 estas nur tipo kaj nomo, la grandeco elemento estanta 69 00:03:36,970 --> 00:03:39,860 la speciala kazo por tabelo, ĉar ni plialtigas faskon de ili 70 00:03:39,860 --> 00:03:41,830 samtempe. 71 00:03:41,830 --> 00:03:45,560 >> Do la tipo estas kia variablo vin volas ĉiu elemento de la tabelo esti. 72 00:03:45,560 --> 00:03:47,150 Ĉu deziras ĝin al aro de entjeroj? 73 00:03:47,150 --> 00:03:49,010 Tiam, via datumtipo devus esti int. 74 00:03:49,010 --> 00:03:51,760 Ĉu vi deziras ĝin esti tabelo de duobloj aŭ flosoj? 75 00:03:51,760 --> 00:03:54,545 Datumtipo devus esti duobla aŭ flosi. 76 00:03:54,545 --> 00:03:56,420 La nomo estas kion vi volas nomi via tabelo. 77 00:03:56,420 --> 00:04:00,970 Kion vi volas nomi tiun giganto banko de entjeroj aŭ kaleŝegoj aŭ signoj 78 00:04:00,970 --> 00:04:03,250 aŭ duobligas, aŭ kion ajn vi havas? 79 00:04:03,250 --> 00:04:04,700 Kion vi volas nomi ĝin? 80 00:04:04,700 --> 00:04:06,110 Bela mem klarigan. 81 00:04:06,110 --> 00:04:08,610 >> Laste, grandeco, kiu iras ene de rektaj krampoj, 82 00:04:08,610 --> 00:04:12,180 estas kiom da elementoj vi farus kiel via tabelo enhavi. 83 00:04:12,180 --> 00:04:13,530 Kiom da entjeroj vi volas? 84 00:04:13,530 --> 00:04:15,570 Kiom da flosoj vi volas? 85 00:04:15,570 --> 00:04:19,070 >> Do ekzemple, int studento gradoj 40. 86 00:04:19,070 --> 00:04:26,020 Tio deklaras tabelo nomita Studenta kvalifikojn, kiu konsistas de 40 entjeroj. 87 00:04:26,020 --> 00:04:28,180 Bela memo klarigaj, mi esperas. 88 00:04:28,180 --> 00:04:29,330 Jen alia ekzemplo. 89 00:04:29,330 --> 00:04:31,560 Duobla menuo prezojn 8. 90 00:04:31,560 --> 00:04:34,610 Tio kreas aron vokis Menuo prezoj, kiu konsistas 91 00:04:34,610 --> 00:04:38,300 de ĉambro en memoro por ok duobloj. 92 00:04:38,300 --> 00:04:42,000 93 00:04:42,000 --> 00:04:45,750 >> Se vi pensas de ĉiu ero de tabelo de tipo datumoj-tipo, 94 00:04:45,750 --> 00:04:49,860 tiel ekzemple, sola ero de tabelo de tipo int, la sama maniero vi 95 00:04:49,860 --> 00:04:52,770 pensus pri iu ajn alia variablo de tipo int, 96 00:04:52,770 --> 00:04:56,440 ĉiuj familiaraj ekspluatadoj ke ni diskutis antaŭe en la Operacioj 97 00:04:56,440 --> 00:04:58,270 video sencon. 98 00:04:58,270 --> 00:05:01,620 Do jen, ni povus deklari tabelo de Booleans nomita Truthtable, 99 00:05:01,620 --> 00:05:05,590 kiu konsistas el ĉambro por 10 Booleans. 100 00:05:05,590 --> 00:05:09,650 >> Kaj tiam, ĝuste kiel ni povus simple asigni valoron al ajna alia variablo de tipo 101 00:05:09,650 --> 00:05:13,470 Buleaj, ni povus diri ion kiel Truthtable kvadrata krampo 102 00:05:13,470 --> 00:05:18,040 2, kiu estas kiel ni markas, kiu ero de la vero tablo? 103 00:05:18,040 --> 00:05:20,350 La tria ero de la vertabelo, ĉar memoru, 104 00:05:20,350 --> 00:05:21,800 ni rakonti de 0. 105 00:05:21,800 --> 00:05:25,690 Do jen kiel ni indikas la tria elemento de la vertabelo. 106 00:05:25,690 --> 00:05:28,680 Truthtable 2 egalas malvera, ĝuste kiel ni povus declare-- 107 00:05:28,680 --> 00:05:33,560 aŭ ni povus atribui prefere ajnan Buleaj tipo variablo esti falsa. 108 00:05:33,560 --> 00:05:35,050 >> Ni povas ankaŭ uzi ĝin en kondiĉoj. 109 00:05:35,050 --> 00:05:39,000 se (truthtable 7 == vera), kiu estas, 110 00:05:39,000 --> 00:05:42,370 se la oka ero de Truthtable estas vera, 111 00:05:42,370 --> 00:05:46,760 eble ni volas presi mesaĝon al la uzanton, printf ("VERA! n") ;. 112 00:05:46,760 --> 00:05:50,290 Kiu kaŭzas nin diri Truthtable 10 egalas vera, ĉu ne? 113 00:05:50,290 --> 00:05:53,590 Nu, mi povas, sed ĝi estas sufiĉe danĝera, ĉar memoru, 114 00:05:53,590 --> 00:05:56,260 Ni havas aron de 10 Booleans. 115 00:05:56,260 --> 00:06:02,340 Do la plej alta indico kiu la tradukilo donis nin estas 9. 116 00:06:02,340 --> 00:06:06,010 >> Tiu programo kompilos, sed se io alia en memoro 117 00:06:06,010 --> 00:06:09,110 Ekzistas kie ni volus atendi Truthtable 10 iri, 118 00:06:09,110 --> 00:06:13,980 ni povis suferi segmentación kulpo. Ni povus foriri per ĝi, sed en ĝenerala, 119 00:06:13,980 --> 00:06:14,710 bela danĝera. 120 00:06:14,710 --> 00:06:19,759 Do kion mi faras ĉi tie estas jura C, sed ne nepre la pli bona movado. 121 00:06:19,759 --> 00:06:22,300 Nun, kiam vi rakontos kaj pravalorizi tabelo samtempe, 122 00:06:22,300 --> 00:06:23,960 ekzistas reale belan speciala sintakso ke vi 123 00:06:23,960 --> 00:06:26,250 povas uzi por plenigi la tabelo kun lia komenca valoroj. 124 00:06:26,250 --> 00:06:30,130 Ĝi povas akiri ĝene deklari tabelo de grandeco 100, 125 00:06:30,130 --> 00:06:33,430 kaj tiam devi diri, elemento 0 egalas ĉi; elemento 1 egalas ĉi; 126 00:06:33,430 --> 00:06:34,850 elemento 2 egalas tio. 127 00:06:34,850 --> 00:06:36,370 Kio estas la punkto, dekstra? 128 00:06:36,370 --> 00:06:39,470 >> Se ĝi estas malgranda tabelo, vi povus fari ion kiel tiu. 129 00:06:39,470 --> 00:06:44,360 Bool truthtable 3 egalas malfermita krispa streĉa kaj tiam komo 130 00:06:44,360 --> 00:06:48,060 apartigi la lerta de elementoj ke vi volas meti en la tabelo. 131 00:06:48,060 --> 00:06:50,520 Tiam fermi krispa streĉa punktokomo. 132 00:06:50,520 --> 00:06:53,910 Tio kreas aron da grandeco tri nomitaj Truthtable, 133 00:06:53,910 --> 00:06:56,090 kun elementoj malvera, vera kaj vera. 134 00:06:56,090 --> 00:06:59,270 Kaj fakte, la instantiation sintakso mi havas ĉi tie estas 135 00:06:59,270 --> 00:07:03,350 ĝuste la sama kiel faranta la individua elemento sintakso sube. 136 00:07:03,350 --> 00:07:09,380 Tiuj du manieroj de kodigo volus produkti la ĝusta sama tabelo. 137 00:07:09,380 --> 00:07:11,740 >> Simile, ni povis persisti super ĉiuj de la elementoj 138 00:07:11,740 --> 00:07:15,400 de tabelo uzante buklo, kiu, en Fakte, estas tre forte rekomendita 139 00:07:15,400 --> 00:07:16,790 ĉe-hejmo ekzerco. 140 00:07:16,790 --> 00:07:20,720 Kiel vi kreas tabelon de 100 entjeroj, kie 141 00:07:20,720 --> 00:07:23,477 ĉiu ero de la tabelo estas ĝia indekso? 142 00:07:23,477 --> 00:07:26,560 Do ekzemple, ni havas aron de 100 entjeroj, kaj en la unua elemento, 143 00:07:26,560 --> 00:07:27,790 ni volas meti 0. 144 00:07:27,790 --> 00:07:29,810 En la dua ero, ni volas meti 1. 145 00:07:29,810 --> 00:07:33,319 En la tria elemento, ni volas meti 2; kaj tiel plu kaj tiel plu. 146 00:07:33,319 --> 00:07:35,360 Tio estas vere bona ĉe-hejmo ekzerco fari tion. 147 00:07:35,360 --> 00:07:38,190 148 00:07:38,190 --> 00:07:40,220 >> Ĉi tie, ĝi ne aspektas kiel tro multe ŝanĝiĝis. 149 00:07:40,220 --> 00:07:44,170 Sed rimarki ke en inter la rektaj krampoj, ĉifoje, 150 00:07:44,170 --> 00:07:45,830 Mi fakte preterlasis la numeron. 151 00:07:45,830 --> 00:07:48,000 Se vi uzas ĉi tre speciala instantiation 152 00:07:48,000 --> 00:07:50,380 sintakso krei tabelo, vi fakte ne 153 00:07:50,380 --> 00:07:53,491 bezonas indiki la grandecon de la tabelo anticipe. 154 00:07:53,491 --> 00:07:55,740 La tradukilo estas sufiĉe lertaj scii ke vi efektive 155 00:07:55,740 --> 00:07:58,980 volas tabelo de amplekso 3, ĉar vi metis tri elementoj 156 00:07:58,980 --> 00:08:00,640 dekstre de la egalsigno. 157 00:08:00,640 --> 00:08:04,140 Se vi metis kvar, ĝi havus donis al vi vertabelo de grandeco kvar; 158 00:08:04,140 --> 00:08:06,270 kaj tiel plu kaj tiel plu. 159 00:08:06,270 --> 00:08:09,380 >> Arrays estas ne limigita al sola dimensio, kiu estas sufiĉe freŝa. 160 00:08:09,380 --> 00:08:12,000 Vi povas fakte havi tiom da flanko specifiers kiel vi deziras. 161 00:08:12,000 --> 00:08:16,470 Do ekzemple, se vi volas krei estraron por la ludo Battleship, kiu, 162 00:08:16,470 --> 00:08:20,910 se vi iam ludis, estas ludo kiu estas ludis kun kejloj sur la 10 por 10 krado, 163 00:08:20,910 --> 00:08:22,450 vi povus krei tabelo kiel ĉi. 164 00:08:22,450 --> 00:08:26,030 Vi povus diri Bool batalŝipo kvadrata krampo 10 165 00:08:26,030 --> 00:08:29,590 fermita kvadrata krampo kvadrataj krampo 10 fermita kvadrata krampo. 166 00:08:29,590 --> 00:08:32,710 >> Kaj tiam, vi povas elekti interpreti tion en via menso kiel 10 167 00:08:32,710 --> 00:08:35,576 per 10 krado de ĉeloj. 168 00:08:35,576 --> 00:08:37,409 Nun, fakte, en memoro, ĝi vere faras ĝuste 169 00:08:37,409 --> 00:08:42,440 resti 100 elemento, ununura dimensia tabelo. 170 00:08:42,440 --> 00:08:46,070 Kaj tio, fakte, iras por se havas tri dimensiojn aŭ kvar aŭ kvin. 171 00:08:46,070 --> 00:08:49,420 Ĝi vere nur faras multobligi ĉiuj indices-- 172 00:08:49,420 --> 00:08:51,130 aŭ ĉio el la grandeco specifiers-- kune, 173 00:08:51,130 --> 00:08:53,480 kaj vi simple akiri unu-dimensia tabelo de tiu grandeco. 174 00:08:53,480 --> 00:08:57,090 >> Sed en terminoj de organizo kaj videbligo kaj homa percepto, 175 00:08:57,090 --> 00:08:59,240 ĝi povas esti multe pli facila labori kun krado 176 00:08:59,240 --> 00:09:02,980 se vi laboras sur ludo kiel Tic-tac-piedfingro aŭ Marbatalo, 177 00:09:02,980 --> 00:09:05,179 aŭ io simila. 178 00:09:05,179 --> 00:09:06,970 Estas granda abstrakteco, anstataŭ havanta 179 00:09:06,970 --> 00:09:09,340 pensi en Tic-tac-piedfingro tabulo kiel linio de naŭ 180 00:09:09,340 --> 00:09:13,810 kvadratojn aŭ Marbatalo estraro kiel linio de 100 kvadratoj. 181 00:09:13,810 --> 00:09:16,010 Ĉirkaŭ 10 per 10 krado aŭ tri per tri krado estas probable 182 00:09:16,010 --> 00:09:17,225 multe pli facile percepti. 183 00:09:17,225 --> 00:09:19,820 184 00:09:19,820 --> 00:09:22,280 >> Nun, iu vere grava pri tabeloj. 185 00:09:22,280 --> 00:09:25,950 Ni povas trakti ĉiu individua elemento de la tabelo kiel variablo. 186 00:09:25,950 --> 00:09:27,700 Ni vidis ke pli frue kiam ni asignanta 187 00:09:27,700 --> 00:09:32,240 la valoron True to certaj Booleans aŭ provi ilin en Conditionals. 188 00:09:32,240 --> 00:09:35,960 Sed ni ne povas trakti ĉiun tabeloj sin kiel variabloj. 189 00:09:35,960 --> 00:09:41,760 Ni ne povas, ekzemple, atribui unu tabelo al alia tabelo uzante la asigno 190 00:09:41,760 --> 00:09:42,930 operatoro. 191 00:09:42,930 --> 00:09:44,640 Ĝi ne estas laŭleĝa C. 192 00:09:44,640 --> 00:09:47,920 >> Se ni volas, por example-- kio ni farus en tiu ekzemplo 193 00:09:47,920 --> 00:09:50,200 estus kopii unu tabelo en alian. 194 00:09:50,200 --> 00:09:53,810 Se ni volas fari tion, ni efektive bezonas uzi buklo kopii super 195 00:09:53,810 --> 00:09:56,550 ĉiu individua elemento unuope. 196 00:09:56,550 --> 00:09:58,700 Mi scias ke estas iom tempo konsumanta. 197 00:09:58,700 --> 00:10:04,022 >> Do ekzemple, se ni havis tiujn paro de linioj de kodo, farus tiun laboron? 198 00:10:04,022 --> 00:10:05,230 Nu, ne, ĝi ne volis, ĉu ne? 199 00:10:05,230 --> 00:10:07,860 Ĉar ni provas atribui manĝon al trinkejo. 200 00:10:07,860 --> 00:10:09,860 Tio ne tuj funkcios, ĉar ĝi estas tabelo, 201 00:10:09,860 --> 00:10:13,130 kaj ni ĵus priskribita ke tio ne laŭleĝa C. 202 00:10:13,130 --> 00:10:15,580 >> Anstataŭe, se ni volas kopiu la enhavon de nutraĵo 203 00:10:15,580 --> 00:10:18,070 en trinkejo, kiu estas kiu ni provas fari tie, 204 00:10:18,070 --> 00:10:19,970 ni bezonus sintakson kiel ĉi. 205 00:10:19,970 --> 00:10:24,170 Ni havas por buklo kiu iras de J estas egalaj al 0 ĝis 5, 206 00:10:24,170 --> 00:10:28,390 kaj ni pliigo J sur ĉiu ripeto de la buklo kaj atribui elementoj tiel. 207 00:10:28,390 --> 00:10:33,360 Tiu rezultus en trinkejo ankaŭ esti unu, du, tri, kvar, kvin, 208 00:10:33,360 --> 00:10:36,730 sed ni devas fari ĝin ĉi tre malrapida elemento post elemento vojon, 209 00:10:36,730 --> 00:10:40,009 anstataŭ per nur kopianta la tuta tabelo. 210 00:10:40,009 --> 00:10:42,050 En aliaj programado lingvoj, pli modernaj, 211 00:10:42,050 --> 00:10:45,610 vi povas, fakte, do nur ke simplaj egalas sintakso. 212 00:10:45,610 --> 00:10:49,620 Sed C, bedaŭrinde, ni estas ne rajtas fari tion. 213 00:10:49,620 --> 00:10:52,026 >> Nun, ekzistas unu alia aferon mi volas mencii 214 00:10:52,026 --> 00:10:54,650 pri sensilo kiu povas esti iom iom malfacila la unua tempo vi 215 00:10:54,650 --> 00:10:55,990 labori kun ili. 216 00:10:55,990 --> 00:10:59,860 Ni diskutis en video pri variablo medion, 217 00:10:59,860 --> 00:11:04,940 ke plej variabloj en C, kiam vi nomas ilin en funkcioj, estas pasitaj de valoro. 218 00:11:04,940 --> 00:11:08,620 Cxu vi memoras, kion signifas pasi iun por valoro? 219 00:11:08,620 --> 00:11:12,570 Ĝi signifas ni fari kopion de la variablo ke tio esti pasis en. 220 00:11:12,570 --> 00:11:16,290 La callee funkcio, la funkcio tio estas ricevi la variablon, 221 00:11:16,290 --> 00:11:17,730 ne ricevas la variablo mem. 222 00:11:17,730 --> 00:11:20,850 Ĝi ricevas sian propran lokan kopio por labori kun. 223 00:11:20,850 --> 00:11:24,070 >> Arrays, kompreneble, fari ne sekvas tiun regulon. 224 00:11:24,070 --> 00:11:27,600 Prefere, kion ni nomas tiun irante referenco. 225 00:11:27,600 --> 00:11:31,360 La callee reale does ricevi la tabelo. 226 00:11:31,360 --> 00:11:34,207 Ĝi ne ricevas liajn propra loka kopio. 227 00:11:34,207 --> 00:11:36,040 Kaj se vi pensas pri ĝi, tiu havas sencon. 228 00:11:36,040 --> 00:11:39,750 Se tabeloj estas vere granda, prenas tiom da tempo kaj peno 229 00:11:39,750 --> 00:11:44,470 fari kopion de tabelo de 100 aŭ 1,000 aŭ 10,000 elementoj, 230 00:11:44,470 --> 00:11:48,290 ke tio ne valoras por funkcii ricevi kopion de ĝi, 231 00:11:48,290 --> 00:11:51,037 fari iun laboron kun ĝi kaj poste nur esti farita kun la teksto; 232 00:11:51,037 --> 00:11:53,120 ĝi ne bezonas havi ĝi pendis ĉirkaŭ anymore. 233 00:11:53,120 --> 00:11:54,710 >> Ĉar arrays estas iuj dikigitaj kaj pezaj, 234 00:11:54,710 --> 00:11:56,001 ni simple preterpasas ilin por referenco. 235 00:11:56,001 --> 00:12:01,210 Ni nur esperas ke funkcio al, ne rompas nenion. 236 00:12:01,210 --> 00:12:03,010 Do ĝi reale preni la tabelo. 237 00:12:03,010 --> 00:12:05,290 Ĝi ne ricevas sian propran lokan kopion de ĝi. 238 00:12:05,290 --> 00:12:07,170 >> Do kio faras ĉi tiun mezumon, tiam, kiam la callee 239 00:12:07,170 --> 00:12:08,970 Manipulas elementoj de la tabelo? 240 00:12:08,970 --> 00:12:10,780 Kio okazas? 241 00:12:10,780 --> 00:12:13,210 Por nun, ni forgliti super kial ĝuste tiu 242 00:12:13,210 --> 00:12:15,320 okazas, kial tabeloj estas pasitaj por referenco 243 00:12:15,320 --> 00:12:17,810 kaj ĉio alia estas pasita por valoro. 244 00:12:17,810 --> 00:12:20,470 Sed mi promesas al vi, ni volas reveni kaj doni al vi la respondon 245 00:12:20,470 --> 00:12:23,750 al tiu en posta vidbendo. 246 00:12:23,750 --> 00:12:28,110 >> Jen unu pli ekzerco por vi Antaŭ ol ni finos aferojn sur tabeloj. 247 00:12:28,110 --> 00:12:31,400 La faskon de kodo tie, jen ne aparte bona stilo, 248 00:12:31,400 --> 00:12:33,400 nur mi faros ke averto. 249 00:12:33,400 --> 00:12:36,660 Mankas komentoj tien, kiuj estas sufiĉe malbona formo. 250 00:12:36,660 --> 00:12:39,750 Sed estas nur ĉar mi volis esti povis konveni ĉion sur la ekrano. 251 00:12:39,750 --> 00:12:44,360 >> Ĉe la supro, vi povas vidi ke mi havas du funkcio deklaroj por aro tabelo 252 00:12:44,360 --> 00:12:45,820 kaj starigis int. 253 00:12:45,820 --> 00:12:49,680 Aro tabelo ŝajne prenas tabelo de kvar entjeroj kiel ĝia enigo. 254 00:12:49,680 --> 00:12:52,767 Kaj aro int ŝajne prenas sola entjero kiel ĝia enigo. 255 00:12:52,767 --> 00:12:54,350 Sed ambaux ne havas eliron. 256 00:12:54,350 --> 00:12:57,689 La produktaĵo, la reveno tajpi, de ĉiu estas malplena. 257 00:12:57,689 --> 00:12:59,480 En Main, ni havas paro de linioj de kodo. 258 00:12:59,480 --> 00:13:02,730 Ni deklaras entjera variablo nomitaj A kaj atribui al ĝi la valoron 10. 259 00:13:02,730 --> 00:13:07,080 Ni deklaras tabelo de kvar entjeroj nomata B kaj asigni la elementoj 0, 1, 260 00:13:07,080 --> 00:13:08,730 2, kaj 3, respektive. 261 00:13:08,730 --> 00:13:12,190 Tiam, ni havas alvokon starigi int kaj alvokon starigi tabelo. 262 00:13:12,190 --> 00:13:15,910 La difinoj de aro tabelo kaj aro int estas sube, ĉe la fundo. 263 00:13:15,910 --> 00:13:17,640 >> Kaj do, denove mi petas vin la demando. 264 00:13:17,640 --> 00:13:20,770 Kio gets presita eksteren tie ĉe la fino de Main? 265 00:13:20,770 --> 00:13:23,020 Ekzistas printaĵo col. Mi estas presi el du entjeroj. 266 00:13:23,020 --> 00:13:28,010 Mi presi el la enhavon de A kaj la enhavo de B kvadrata krampo 0. 267 00:13:28,010 --> 00:13:29,880 Paŭzi la video tie kaj preni momenton. 268 00:13:29,880 --> 00:13:35,482 Ĉu vi povas diveni kio tiu funkcio estos presi fine? 269 00:13:35,482 --> 00:13:38,190 Espereble, se vi memoras la distingo inter preteriranto valoro 270 00:13:38,190 --> 00:13:41,680 kaj pasinte preter referenco, ĉi problemo ne estis tro malfacila por vi. 271 00:13:41,680 --> 00:13:44,130 Kaj la respondo vi farus trovis estas jena. 272 00:13:44,130 --> 00:13:47,660 Se vi ne estas vere komprenis, kial tio estas la kazo, preni duan, 273 00:13:47,660 --> 00:13:50,620 reiri, revizii kion mi estis ĵus diskuti pri pasanta tabeloj 274 00:13:50,620 --> 00:13:53,450 por referenco, kontre pasanta aliaj variabloj laŭ valoro, 275 00:13:53,450 --> 00:13:56,680 kaj espereble, gxi devos fari iomete pli sentita. 276 00:13:56,680 --> 00:13:59,760 >> Mi Doug Lloyd, kaj ĉi tiu estas CS50. 277 00:13:59,760 --> 00:14:01,467