1 00:00:00,000 --> 00:00:03,388 >> [Speel van musiek] 2 00:00:03,388 --> 00:00:05,104 3 00:00:05,104 --> 00:00:06,020 DOUG LLOYD: Alle reg. 4 00:00:06,020 --> 00:00:07,680 Werk met 'n enkele veranderlikes is redelik pret. 5 00:00:07,680 --> 00:00:09,500 Maar wat as ons wil om te werk met 'n baie veranderlikes, 6 00:00:09,500 --> 00:00:12,760 maar ons wil nie 'n klomp van het verskillende name vlieg rond ons kode? 7 00:00:12,760 --> 00:00:15,980 In hierdie geval, skikkings is gaan om in te kom regtig handig. 8 00:00:15,980 --> 00:00:19,510 Skikkings is 'n baie fundamentele data struktuur vir enige programmeertaal 9 00:00:19,510 --> 00:00:20,260 wat jy sal gebruik. 10 00:00:20,260 --> 00:00:24,450 En hulle is regtig, regtig nuttig, veral as ons sal sien, in CS 50. 11 00:00:24,450 --> 00:00:27,870 >> Ons gebruik skikkings te hou waardes van dieselfde tipe data 12 00:00:27,870 --> 00:00:29,830 op aangrensende geheue plekke. 13 00:00:29,830 --> 00:00:32,430 Dit is om te sê, dit is 'n manier wat ons kan groep 14 00:00:32,430 --> 00:00:35,430 'n klomp van heelgetalle saam in geheue of 'n klomp van die karakters 15 00:00:35,430 --> 00:00:38,270 of dryf in die geheue werklik naby aan mekaar en werk 16 00:00:38,270 --> 00:00:41,930 met hulle sonder om te gee elke een sy eie unieke naam, wat kan 17 00:00:41,930 --> 00:00:44,500 kry swaar na 'n rukkie. 18 00:00:44,500 --> 00:00:48,130 >> Nou, een manier om skikkings analogize is om te dink oor jou plaaslike poskantoor 19 00:00:48,130 --> 00:00:49,000 kantoor vir 'n tweede. 20 00:00:49,000 --> 00:00:51,820 So stap weg van ontwikkeling en net jou oë toemaak 21 00:00:51,820 --> 00:00:54,120 en visualiseer in jou gedagtes jou plaaslike poskantoor. 22 00:00:54,120 --> 00:00:57,160 Gewoonlik, in die meeste post kantore, daar is 'n groot bank 23 00:00:57,160 --> 00:01:00,490 'n poskantoor bokse op die muur. 24 00:01:00,490 --> 00:01:03,510 >> 'N skikking is 'n reuse-blok van aangrensende geheue, 25 00:01:03,510 --> 00:01:06,120 Op dieselfde wyse dat 'n e-pos bank in jou poskantoor 26 00:01:06,120 --> 00:01:11,230 is 'n groot ruimte op die muur van die poskantoor. 27 00:01:11,230 --> 00:01:15,750 Skikkings is verdeel in klein, identies grootte blokke van die ruimte, 28 00:01:15,750 --> 00:01:19,930 elk van wat genoem word 'n element in Op dieselfde wyse dat die muur van die post 29 00:01:19,930 --> 00:01:23,840 kantoor is verdeel in klein, identies grootte blokke van die ruimte, 30 00:01:23,840 --> 00:01:27,560 wat ons noem 'n PO word Posbus. 31 00:01:27,560 --> 00:01:31,650 Elke element van die skikking kan stoor 'n sekere bedrag van data, 32 00:01:31,650 --> 00:01:37,540 net soos elke posbus kan om 'n sekere bedrag van pos beklee. 33 00:01:37,540 --> 00:01:41,540 >> Wat kan gestoor word in elke element van die skikking is veranderlikes van dieselfde data 34 00:01:41,540 --> 00:01:45,300 tipe, soos int of char, net soos in jou posbus, 35 00:01:45,300 --> 00:01:47,300 jy kan net inpas dinge van 'n soortgelyke tipe, 36 00:01:47,300 --> 00:01:50,430 soos briewe of klein pakkette. 37 00:01:50,430 --> 00:01:55,050 Laastens, kan ons toegang elke element van die skikking wat direk deur indeks nommer, 38 00:01:55,050 --> 00:01:59,770 net soos ons kan toegang tot ons poskantoor boks deur die wete sy posbus nommer. 39 00:01:59,770 --> 00:02:02,750 Hopelik dat analogie help om jou kop te kry 40 00:02:02,750 --> 00:02:05,540 rondom die idee van skikkings deur analogizing na iets anders 41 00:02:05,540 --> 00:02:08,400 dat jy waarskynlik reeds vertroud is met. 42 00:02:08,400 --> 00:02:13,182 >> In C, die elemente van 'n skikking is geïndekseer vanaf 0, nie van 1. 43 00:02:13,182 --> 00:02:14,390 En dit is werklik belangrik. 44 00:02:14,390 --> 00:02:18,530 En in die feit, dit is hoekom ons in CS 50, en waarom die rekenaar wetenskaplikes dikwels 45 00:02:18,530 --> 00:02:22,150 tel van 0, is as gevolg van C se verskeidenheid 46 00:02:22,150 --> 00:02:24,660 kruip, wat altyd begin by 0. 47 00:02:24,660 --> 00:02:28,730 So as 'n skikking bestaan ​​uit n elemente, die eerste element van daardie verskeidenheid 48 00:02:28,730 --> 00:02:32,960 is geleë op indeks 0, en die laaste element van die skikking 49 00:02:32,960 --> 00:02:36,610 is geleë op indeks N minus 1. 50 00:02:36,610 --> 00:02:43,160 Weereens, as daar is n elemente in ons skikking, die laaste indeks is N minus 1. 51 00:02:43,160 --> 00:02:46,820 >> So as ons verskeidenheid het 50 elemente, die eerste element is geleë op indeks 0, 52 00:02:46,820 --> 00:02:51,060 en die laaste element is geleë op 49-indeks. 53 00:02:51,060 --> 00:02:53,940 Ongelukkig of gelukkig, afhangende van jou perspektief, 54 00:02:53,940 --> 00:02:56,170 C is hier baie toegeeflik. 55 00:02:56,170 --> 00:02:59,480 Dit sal jou nie verhoed gaan uit van die grense van jou skikking. 56 00:02:59,480 --> 00:03:03,080 Jy kan toegang tot die minus 3 element van jou array 57 00:03:03,080 --> 00:03:07,400 of die 59 element van jou skikking, as jou array het slegs 50 elemente. 58 00:03:07,400 --> 00:03:11,060 Dit sal jou program nie verhoed die opstel van, maar te hardloop tyd, 59 00:03:11,060 --> 00:03:14,350 wat jy kan teëkom n gevreesde segmentering skuld 60 00:03:14,350 --> 00:03:17,460 As jy begin om toegang tot die geheue wat buite die grense van wat 61 00:03:17,460 --> 00:03:19,260 jy gevra jou program om jou te gee. 62 00:03:19,260 --> 00:03:21,250 So moenie versigtig wees. 63 00:03:21,250 --> 00:03:23,120 >> Wat doen 'n verskeidenheid verklaring lyk? 64 00:03:23,120 --> 00:03:26,940 Hoe weet ons die kode 'n skikking in bestaan soos ons kodeer enige ander veranderlike? 65 00:03:26,940 --> 00:03:31,250 Daar is drie dele om 'n verskeidenheid declaration-- 'n tipe, 'n naam, 66 00:03:31,250 --> 00:03:31,880 en 'n grootte. 67 00:03:31,880 --> 00:03:34,088 Dit is baie soortgelyk aan 'n veranderlike verklaring, wat 68 00:03:34,088 --> 00:03:36,970 is net 'n tipe en 'n naam, die grootte element om 69 00:03:36,970 --> 00:03:39,860 die spesiale geval vir 'n skikking, want ons kry 'n klomp van hulle 70 00:03:39,860 --> 00:03:41,830 op dieselfde tyd. 71 00:03:41,830 --> 00:03:45,560 >> So die tipe is watter soort veranderlike wil elke element van die skikking te wees. 72 00:03:45,560 --> 00:03:47,150 Wil dit om 'n verskeidenheid van heelgetalle? 73 00:03:47,150 --> 00:03:49,010 Dan moet jy jou data tipe int wees. 74 00:03:49,010 --> 00:03:51,760 Wil jy dit aan 'n wees verskeidenheid van dubbelspel of dryf? 75 00:03:51,760 --> 00:03:54,545 Data tipe moet dubbel of float. 76 00:03:54,545 --> 00:03:56,420 Die naam is wat jy wil jou array noem. 77 00:03:56,420 --> 00:04:00,970 Wat wil jy hierdie reuse noem bank van heelgetalle of dryf of karakters 78 00:04:00,970 --> 00:04:03,250 of verdubbel, of wat ook al jy? 79 00:04:03,250 --> 00:04:04,700 Wat doen jy wil om dit te noem? 80 00:04:04,700 --> 00:04:06,110 Pretty selfverduidelikend. 81 00:04:06,110 --> 00:04:08,610 >> Laastens, grootte, wat gaan binnekant van vierkantige hakies, 82 00:04:08,610 --> 00:04:12,180 is hoeveel elemente wat jy sou soos jou array bevat. 83 00:04:12,180 --> 00:04:13,530 Hoeveel heelgetalle wil jy hê? 84 00:04:13,530 --> 00:04:15,570 Hoeveel dryf wil jy hê? 85 00:04:15,570 --> 00:04:19,070 >> So byvoorbeeld, int student grade 40. 86 00:04:19,070 --> 00:04:26,020 Dit verklaar 'n skikking met die naam Student grade, wat bestaan ​​uit 40 heelgetalle. 87 00:04:26,020 --> 00:04:28,180 Pretty selfverduidelikend, ek hoop. 88 00:04:28,180 --> 00:04:29,330 Hier is nog 'n voorbeeld. 89 00:04:29,330 --> 00:04:31,560 Double spyskaart pryse 8. 90 00:04:31,560 --> 00:04:34,610 Dit skep 'n skikking met die naam Menu pryse, wat bestaan ​​uit 91 00:04:34,610 --> 00:04:38,300 van die kamer in die geheue vir agt dubbelspel. 92 00:04:38,300 --> 00:04:42,000 93 00:04:42,000 --> 00:04:45,750 >> As jy dink van elke element van 'n verskeidenheid van data tipe-tipe, 94 00:04:45,750 --> 00:04:49,860 so byvoorbeeld, 'n enkele element van 'n verskeidenheid van tipe int, dieselfde manier wat jy 95 00:04:49,860 --> 00:04:52,770 sou dink aan enige ander veranderlike van tipe int, 96 00:04:52,770 --> 00:04:56,440 al die bekende bedrywighede dat ons voorheen bespreek in die Bedryf 97 00:04:56,440 --> 00:04:58,270 video sal sin maak nie. 98 00:04:58,270 --> 00:05:01,620 So hier, kan ons 'n verskeidenheid te verklaar boolse genoem Truthtable, 99 00:05:01,620 --> 00:05:05,590 wat bestaan ​​uit ruimte vir 10 Booleans. 100 00:05:05,590 --> 00:05:09,650 >> En dan, net soos ons kon net toewys 'n waarde aan enige ander veranderlike van tipe 101 00:05:09,650 --> 00:05:13,470 Boole, kan ons iets te sê soos Truthtable vierkante bracket 102 00:05:13,470 --> 00:05:18,040 2, wat is hoe ons te dui, watter element van die waarheid tafel? 103 00:05:18,040 --> 00:05:20,350 Die derde element van die waarheid tafel, want onthou, 104 00:05:20,350 --> 00:05:21,800 ons tel van 0. 105 00:05:21,800 --> 00:05:25,690 So dit is hoe ons dui die derde element van die waarheid tafel. 106 00:05:25,690 --> 00:05:28,680 Truthtable 2 is gelyk aan valse, net soos ons kon declare-- 107 00:05:28,680 --> 00:05:33,560 of ons kan toewys, eerder, enige Boole tipe veranderlike te wees valse. 108 00:05:33,560 --> 00:05:35,050 >> Ons kan dit ook gebruik in toestande. 109 00:05:35,050 --> 00:05:39,000 As (truthtable 7 == ware), wat is om te sê, 110 00:05:39,000 --> 00:05:42,370 As die agtste element van Truthtable is waar, 111 00:05:42,370 --> 00:05:46,760 Miskien wil ons 'n boodskap te druk aan die gebruiker, printf ("WAAR! n") ;. 112 00:05:46,760 --> 00:05:50,290 Dit veroorsaak dat ons Truthtable sê 10 is gelyk aan ware, reg? 113 00:05:50,290 --> 00:05:53,590 Wel, ek kan nie, maar dit is redelik gevaarlik, want onthou, 114 00:05:53,590 --> 00:05:56,260 ons het 'n verskeidenheid van 10 Booleans. 115 00:05:56,260 --> 00:06:02,340 So het die hoogste indeks wat die samesteller aan ons gegee het is 9. 116 00:06:02,340 --> 00:06:06,010 >> Hierdie program sal saamstel, maar as iets anders in die geheue 117 00:06:06,010 --> 00:06:09,110 bestaan ​​waar ons sou verwag Truthtable 10 om te gaan, 118 00:06:09,110 --> 00:06:13,980 ons het 'n fout segmentering kan ly. Ons kan wegkom met dit nie, maar in die algemeen, 119 00:06:13,980 --> 00:06:14,710 redelik gevaarlik. 120 00:06:14,710 --> 00:06:19,759 So wat ek hier doen, is reg C, maar nie noodwendig die beste beweeg. 121 00:06:19,759 --> 00:06:22,300 Nou, wanneer jy verklaar en inisialiseer 'n verskeidenheid gelyktydig, 122 00:06:22,300 --> 00:06:23,960 daar is eintlik 'n redelik spesiale sintaksis wat jy 123 00:06:23,960 --> 00:06:26,250 kan gebruik om te vul die skikking met sy beginspan waardes. 124 00:06:26,250 --> 00:06:30,130 Dit kan lastig te kry verklaar 'n verskeidenheid van grootte 100, 125 00:06:30,130 --> 00:06:33,430 en dan het om te sê, element 0 gelyk hierdie; element 1 gelyk hierdie; 126 00:06:33,430 --> 00:06:34,850 element 2 is gelyk aan daardie. 127 00:06:34,850 --> 00:06:36,370 Wat is die punt, reg? 128 00:06:36,370 --> 00:06:39,470 >> As dit is 'n klein verskeidenheid, jy kan iets soos hierdie te doen. 129 00:06:39,470 --> 00:06:44,360 Bool truthtable 3 gelyk oop krullerige brace en dan komma 130 00:06:44,360 --> 00:06:48,060 skei die lys van elemente wat jy wil in die skikking te sit. 131 00:06:48,060 --> 00:06:50,520 Dan sluit krullerige brace kommapunt. 132 00:06:50,520 --> 00:06:53,910 Dit skep 'n verskeidenheid van grootte drie genoem Truthtable, 133 00:06:53,910 --> 00:06:56,090 met elemente valse, waar, en waar. 134 00:06:56,090 --> 00:06:59,270 En in die feit, die Instantiëring sintaksis Ek het hier is 135 00:06:59,270 --> 00:07:03,350 presies dieselfde as wat die individuele element sintaksis hieronder. 136 00:07:03,350 --> 00:07:09,380 Hierdie twee maniere van kodering sou produseer die presiese dieselfde skikking. 137 00:07:09,380 --> 00:07:11,740 >> Net so, kan ons Itereer oor al die elemente 138 00:07:11,740 --> 00:07:15,400 van 'n skikking met behulp van 'n lus, wat in Trouens, is 'n baie sterk aanbeveel 139 00:07:15,400 --> 00:07:16,790 at-home oefening. 140 00:07:16,790 --> 00:07:20,720 Hoe kan jy 'n verskeidenheid te skep 100 heelgetalle, waar 141 00:07:20,720 --> 00:07:23,477 elke element van die skikking is die indeks? 142 00:07:23,477 --> 00:07:26,560 So byvoorbeeld, het ons 'n verskeidenheid van 100 heelgetalle, en in die eerste element, 143 00:07:26,560 --> 00:07:27,790 ons wil om te sit 0. 144 00:07:27,790 --> 00:07:29,810 In die tweede element, ons wil om te sit 1. 145 00:07:29,810 --> 00:07:33,319 In die derde element, ons wil 2 om te sit; en so aan en so aan. 146 00:07:33,319 --> 00:07:35,360 Dit is 'n baie goeie at-home oefening om dit te doen. 147 00:07:35,360 --> 00:07:38,190 148 00:07:38,190 --> 00:07:40,220 >> Hier lyk dit nie of soos te veel het verander. 149 00:07:40,220 --> 00:07:44,170 Maar let dat in tussen die vierkantige hakies, hierdie keer, 150 00:07:44,170 --> 00:07:45,830 Ek het eintlik uitgelaat die getal. 151 00:07:45,830 --> 00:07:48,000 As jy met behulp van hierdie baie spesiale Instantiëring 152 00:07:48,000 --> 00:07:50,380 sintaksis om 'n te skep verskeidenheid, wat jy eintlik doen nie 153 00:07:50,380 --> 00:07:53,491 nodig om die grootte aan te dui van die skikking vooraf. 154 00:07:53,491 --> 00:07:55,740 Die samesteller is slim genoeg om werklik te weet dat jy 155 00:07:55,740 --> 00:07:58,980 wil 'n skikking van grootte 3, omdat jy drie elemente 156 00:07:58,980 --> 00:08:00,640 aan die regterkant van die gelykaanteken. 157 00:08:00,640 --> 00:08:04,140 As jy vier gesit het, sou dit gegee 'n waarheidstabel grootte vier; 158 00:08:04,140 --> 00:08:06,270 en so aan en so aan. 159 00:08:06,270 --> 00:08:09,380 >> Skikkings is nie beperk tot 'n enkele dimensie, wat is pretty cool. 160 00:08:09,380 --> 00:08:12,000 Jy kan eintlik soveel kant spesifiseerders as jy wil. 161 00:08:12,000 --> 00:08:16,470 So byvoorbeeld, as jy wil skep 'n raad vir die spel Battle, wat 162 00:08:16,470 --> 00:08:20,910 As jy al ooit gespeel het, is 'n spel wat is gespeel met die penne op die 10 deur 10 rooster, 163 00:08:20,910 --> 00:08:22,450 jy kan 'n verskeidenheid soos hierdie te skep. 164 00:08:22,450 --> 00:08:26,030 Jy kan sê Bool slagskip vierkante bracket 10 165 00:08:26,030 --> 00:08:29,590 geslote vierkante vierkante bracket bracket 10 gesluit vierkante bracket. 166 00:08:29,590 --> 00:08:32,710 >> En dan, kan jy kies om interpreteer dit in jou gedagtes as 'n 10 167 00:08:32,710 --> 00:08:35,576 10 rooster van selle. 168 00:08:35,576 --> 00:08:37,409 Nou, in werklikheid, in die geheue, dit nie regtig net 169 00:08:37,409 --> 00:08:42,440 bly 'n 100 element, enkele dimensionele skikking. 170 00:08:42,440 --> 00:08:46,070 En dit, in werklikheid, geld vir as jy drie dimensies of vier of vyf. 171 00:08:46,070 --> 00:08:49,420 Dit is regtig net nie vermeerder al die indices-- 172 00:08:49,420 --> 00:08:51,130 of al die grootte specifiers-- saam 173 00:08:51,130 --> 00:08:53,480 en jy net 'n een-dimensionele verskeidenheid van die grootte. 174 00:08:53,480 --> 00:08:57,090 >> Maar in terme van die organisasie en visualisering en menslike persepsie, 175 00:08:57,090 --> 00:08:59,240 kan dit 'n baie makliker wees om te werk met 'n rooster 176 00:08:59,240 --> 00:09:02,980 As jy werk op 'n spel soos Tic-tac-toe of Battle, 177 00:09:02,980 --> 00:09:05,179 of iets soos dit. 178 00:09:05,179 --> 00:09:06,970 Dit is 'n groot abstraksie, in plaas van om 179 00:09:06,970 --> 00:09:09,340 na te dink oor 'n Tic-tac-toe raad as 'n lyn van nege 180 00:09:09,340 --> 00:09:13,810 vierkante of 'n Battle raad as 'n lyn van 100 vierkante. 181 00:09:13,810 --> 00:09:16,010 A 10 deur 10 rooster of 'n drie deur drie rooster is waarskynlik 182 00:09:16,010 --> 00:09:17,225 'n baie meer maklik om te sien. 183 00:09:17,225 --> 00:09:19,820 184 00:09:19,820 --> 00:09:22,280 >> Nou, iets wat regtig belangrik is oor skikkings. 185 00:09:22,280 --> 00:09:25,950 Ons kan elke individu te behandel element van die skikking as 'n veranderlike. 186 00:09:25,950 --> 00:09:27,700 Ons het gesien dat vroeër toe ons toeken 187 00:09:27,700 --> 00:09:32,240 die waarde Getrou aan sekere Booleans of hulle die toets in conditionals. 188 00:09:32,240 --> 00:09:35,960 Maar ons kan nie behandel hele skikkings hulself as veranderlikes. 189 00:09:35,960 --> 00:09:41,760 Ons kan nie, byvoorbeeld, wys een array om 'n skikking met die opdrag 190 00:09:41,760 --> 00:09:42,930 operateur. 191 00:09:42,930 --> 00:09:44,640 Dit is nie reg C. 192 00:09:44,640 --> 00:09:47,920 >> As ons wil, want example-- wat ons sou doen in daardie voorbeeld 193 00:09:47,920 --> 00:09:50,200 sou wees om een ​​array kopieer na 'n ander. 194 00:09:50,200 --> 00:09:53,810 As ons wil hê dat ons werklik doen nodig om 'n lus te gebruik om oor kopieer 195 00:09:53,810 --> 00:09:56,550 elke individuele element een op 'n tyd. 196 00:09:56,550 --> 00:09:58,700 Ek weet dit is 'n bietjie tyd in beslag. 197 00:09:58,700 --> 00:10:04,022 >> So byvoorbeeld, as ons het hierdie egpaar reëls van die kode, sal dit werk? 198 00:10:04,022 --> 00:10:05,230 Wel, nee, dit sou nie, reg? 199 00:10:05,230 --> 00:10:07,860 Want ons probeer om kos te wys aan bar. 200 00:10:07,860 --> 00:10:09,860 Dit gaan nie werk nie, want dit is 'n skikking, 201 00:10:09,860 --> 00:10:13,130 en ons het net beskryf dat dit is nie reg C. 202 00:10:13,130 --> 00:10:15,580 >> In plaas daarvan, as ons wil kopieer die inhoud van voedsel 203 00:10:15,580 --> 00:10:18,070 in bar, en dit is wat ons probeer om hier te doen, 204 00:10:18,070 --> 00:10:19,970 ons sou 'n sintaksis soos hierdie nodig. 205 00:10:19,970 --> 00:10:24,170 Ons het 'n lus vir die wat gaan van J is gelyk aan 0 tot 5, 206 00:10:24,170 --> 00:10:28,390 en ons inkrementeer J elke iterasie van die lus en wys elemente soos dit. 207 00:10:28,390 --> 00:10:33,360 Dit sal lei tot bar ook synde een, twee, drie, vier, vyf, 208 00:10:33,360 --> 00:10:36,730 maar ons het om dit te doen hierdie baie stadige element-by-element manier, 209 00:10:36,730 --> 00:10:40,009 in plaas van deur net kopiëring van die hele skikking. 210 00:10:40,009 --> 00:10:42,050 In ander programme tale, meer moderne kinders, 211 00:10:42,050 --> 00:10:45,610 jy kan, in werklikheid, nie net so eenvoudig gelyk sintaksis. 212 00:10:45,610 --> 00:10:49,620 Maar C, ongelukkig, ons is nie toegelaat om dit te doen. 213 00:10:49,620 --> 00:10:52,026 >> Nou, daar is een ander ding wat ek wil noem 214 00:10:52,026 --> 00:10:54,650 oor skikkings dat 'n bietjie kan wees bietjie lastig die eerste keer dat jy 215 00:10:54,650 --> 00:10:55,990 saam met hulle werk. 216 00:10:55,990 --> 00:10:59,860 Ons bespreek in 'n video oor veranderlike omvang, 217 00:10:59,860 --> 00:11:04,940 dat die meeste veranderlikes in C, wanneer jy bel hulle funksies, is verby waarde. 218 00:11:04,940 --> 00:11:08,620 Onthou jy wat dit beteken om iets deur waarde te slaag? 219 00:11:08,620 --> 00:11:12,570 Dit beteken dat ons 'n afskrif van die veranderlike wat is oorgedra in. 220 00:11:12,570 --> 00:11:16,290 Die callee-funksie dit is die ontvangs van die veranderlike, 221 00:11:16,290 --> 00:11:17,730 nie die veranderlike self te kry. 222 00:11:17,730 --> 00:11:20,850 Dit kry sy eie plaaslike afskrif daarvan om te werk met. 223 00:11:20,850 --> 00:11:24,070 >> Skikkings, natuurlik, doen volg nie hierdie reël. 224 00:11:24,070 --> 00:11:27,600 Inteendeel, wat ons noem verbygaan verwysing. 225 00:11:27,600 --> 00:11:31,360 Die callee eintlik ontvang nie die skikking. 226 00:11:31,360 --> 00:11:34,207 Dit maak nie ontvang sy eie plaaslike afskrif daarvan. 227 00:11:34,207 --> 00:11:36,040 En as jy dink oor dit, dit maak sin. 228 00:11:36,040 --> 00:11:39,750 As skikkings is regtig groot is, is dit neem soveel tyd en moeite 229 00:11:39,750 --> 00:11:44,470 'n afskrif van 'n verskeidenheid van maak 100 of 1000 of 10000 elemente, 230 00:11:44,470 --> 00:11:48,290 dat dit nie die moeite werd om 'n funksioneer om 'n kopie te ontvang van dit, 231 00:11:48,290 --> 00:11:51,037 'n werk te doen met dit, en dan net gedoen word met die kopie; 232 00:11:51,037 --> 00:11:53,120 dit nie nodig om dit hang rond nie. 233 00:11:53,120 --> 00:11:54,710 >> Omdat skikkings is 'n paar lywige en omslagtig, 234 00:11:54,710 --> 00:11:56,001 ons hulle net verby met verwysing. 235 00:11:56,001 --> 00:12:01,210 Ons het net vertrou dat funksie om, nie iets breek. 236 00:12:01,210 --> 00:12:03,010 Sodat dit nie eintlik kry die skikking. 237 00:12:03,010 --> 00:12:05,290 Dit maak nie sy eie plaaslike kopie van dit te kry. 238 00:12:05,290 --> 00:12:07,170 >> So wat beteken dit, Dan, wanneer die callee 239 00:12:07,170 --> 00:12:08,970 manipuleer elemente van die skikking? 240 00:12:08,970 --> 00:12:10,780 Wat gebeur? 241 00:12:10,780 --> 00:12:13,210 Vir nou, sal ons glans oor waarom juis hierdie 242 00:12:13,210 --> 00:12:15,320 gebeur, waarom skikkings geslaag deur verwysing 243 00:12:15,320 --> 00:12:17,810 en alles anders word geslaag deur waarde. 244 00:12:17,810 --> 00:12:20,470 Maar ek belowe jou, sal ons terug en gee jou die antwoord 245 00:12:20,470 --> 00:12:23,750 om dit in 'n later video. 246 00:12:23,750 --> 00:12:28,110 >> Hier is nog een oefening vir jou voordat ons draai dinge op skikkings. 247 00:12:28,110 --> 00:12:31,400 Die klomp van die kode hier, dis nie besonder goeie styl, 248 00:12:31,400 --> 00:12:33,400 net ek sal dit caveat te maak. 249 00:12:33,400 --> 00:12:36,660 Daar is geen kommentaar hier, wat is redelik slegte vorm. 250 00:12:36,660 --> 00:12:39,750 Maar dit is net omdat ek wou wees in staat wees om alles in te pas op die skerm. 251 00:12:39,750 --> 00:12:44,360 >> Op die top, kan jy sien dat ek twee funksie verklarings vir stel array 252 00:12:44,360 --> 00:12:45,820 en stel int. 253 00:12:45,820 --> 00:12:49,680 Stel verskeidenheid neem blykbaar 'n skikking vier heelgetalle aangesien sy insette. 254 00:12:49,680 --> 00:12:52,767 En stel int neem blykbaar 'n enkele heelgetal aangesien sy insette. 255 00:12:52,767 --> 00:12:54,350 Maar beide van hulle het nie 'n uitset. 256 00:12:54,350 --> 00:12:57,689 Die uitset, die terugkeer tik, van elkeen is nietig. 257 00:12:57,689 --> 00:12:59,480 In Main, het ons 'n paar reëls van die kode. 258 00:12:59,480 --> 00:13:02,730 Ons verklaar 'n heelgetal veranderlike genoem A en gee dit die waarde 10. 259 00:13:02,730 --> 00:13:07,080 Ons verklaar 'n verskeidenheid van vier heelgetalle genoem B en die elemente 0, 1 toewys, 260 00:13:07,080 --> 00:13:08,730 2 en 3 onderskeidelik. 261 00:13:08,730 --> 00:13:12,190 Dan het ons 'n oproep te stel int en 'n oproep om verskeidenheid te stel. 262 00:13:12,190 --> 00:13:15,910 Die definisies van vaste en stel array int is onder af, aan die onderkant. 263 00:13:15,910 --> 00:13:17,640 >> En so, weer, vra ek jou die vraag. 264 00:13:17,640 --> 00:13:20,770 Wat kry gedruk hier aan die einde van Main? 265 00:13:20,770 --> 00:13:23,020 Daar is 'n uitdruk Kol. Ek is uit te druk twee heelgetalle. 266 00:13:23,020 --> 00:13:28,010 Ek druk die inhoud van A en die inhoud van B vierkante bracket 0. 267 00:13:28,010 --> 00:13:29,880 Stop die video hier en neem 'n minuut. 268 00:13:29,880 --> 00:13:35,482 Kan jy uitvind wat dit funksie sal druk op die einde? 269 00:13:35,482 --> 00:13:38,190 Hopelik, as jy onthou die onderskeid tussen verbygaan waarde 270 00:13:38,190 --> 00:13:41,680 en verby deur verwysing, hierdie probleem was nie te moeilik vir jou. 271 00:13:41,680 --> 00:13:44,130 En die antwoord wat jy sou gevind het is dit. 272 00:13:44,130 --> 00:13:47,660 As jy nie seker as om waarom dit die geval is, neem 'n tweede, 273 00:13:47,660 --> 00:13:50,620 gaan terug, te hersien wat ek was net bespreek oor die verbygaan skikkings 274 00:13:50,620 --> 00:13:53,450 deur verwysing, versus verby ander veranderlikes volgens waarde 275 00:13:53,450 --> 00:13:56,680 en hopelik sal dit maak 'n bietjie meer sin. 276 00:13:56,680 --> 00:13:59,760 >> Ek is Doug Lloyd, en dit is CS50. 277 00:13:59,760 --> 00:14:01,467