1 00:00:00,000 --> 00:00:03,388 >> [MUSIC nagpe-play] 2 00:00:03,388 --> 00:00:05,104 3 00:00:05,104 --> 00:00:06,020 DOUG LLOYD: Lahat ng karapatan. 4 00:00:06,020 --> 00:00:07,680 Paggawa gamit ang single variable ay medyo masaya. 5 00:00:07,680 --> 00:00:09,500 Ngunit ano kung nais namin na magtrabaho na may maraming mga variable, 6 00:00:09,500 --> 00:00:12,760 ngunit hindi namin nais na magkaroon ng isang grupo ng mga iba't ibang mga pangalan na lumilipad sa paligid ng aming mga code? 7 00:00:12,760 --> 00:00:15,980 Sa kasong ito, array ay pagpunta sa dumating sa talagang magaling. 8 00:00:15,980 --> 00:00:19,510 Ang mga array ay isang talagang pangunahing data structure para sa anumang wika programming 9 00:00:19,510 --> 00:00:20,260 na gagamitin mo. 10 00:00:20,260 --> 00:00:24,450 At ang mga ito ay tunay, tunay na kapaki-pakinabang, lalo na, dahil kakailanganin namin makita, sa CS 50. 11 00:00:24,450 --> 00:00:27,870 >> Ginagamit namin ang mga array na humawak mga halaga ng parehong uri ng data 12 00:00:27,870 --> 00:00:29,830 sa magkadikit na lokasyon ng memorya. 13 00:00:29,830 --> 00:00:32,430 Iyon ay upang sabihin, ito ay isang paraan na kaya namin ng grupo 14 00:00:32,430 --> 00:00:35,430 ng grupo ng mga integer magkasama sa memory o isang grupo ng mga character 15 00:00:35,430 --> 00:00:38,270 o sa kamay sa memory talaga malapit nang magkasama at trabaho 16 00:00:38,270 --> 00:00:41,930 sa kanila nang hindi upang bigyan ang bawat isa sa kanyang sariling natatanging pangalan, na maaaring 17 00:00:41,930 --> 00:00:44,500 makakuha ng pahirap pagkatapos ng ilang sandali. 18 00:00:44,500 --> 00:00:48,130 >> Ngayon, isang paraan upang analogize array ay mag-isip tungkol sa iyong lokal na post 19 00:00:48,130 --> 00:00:49,000 opisina para sa isang segundo. 20 00:00:49,000 --> 00:00:51,820 Kaya hakbang ang layo mula sa programming at isara ang iyong mga mata 21 00:00:51,820 --> 00:00:54,120 at mailarawan sa iyong isipan iyong lokal na post office. 22 00:00:54,120 --> 00:00:57,160 Karaniwan, sa karamihan ng mga post tanggapan, mayroong isang malaking bangko 23 00:00:57,160 --> 00:01:00,490 isang kahon ng post office sa dingding. 24 00:01:00,490 --> 00:01:03,510 >> Isang array ay isang higanteng block ng magkalapit memory, 25 00:01:03,510 --> 00:01:06,120 sa parehong paraan na ang isang mail bangko sa iyong post office 26 00:01:06,120 --> 00:01:11,230 ay isang malaking puwang sa pader ng post office. 27 00:01:11,230 --> 00:01:15,750 Ang mga array ay partitioned sa maliit, identically sized na mga bloke ng puwang, 28 00:01:15,750 --> 00:01:19,930 ang bawat isa ay tinatawag na isang elemento ng, sa parehong paraan na ang mga pader ng post 29 00:01:19,930 --> 00:01:23,840 office ay partitioned sa maliit, identically sized na mga bloke ng puwang, 30 00:01:23,840 --> 00:01:27,560 na tinatawag naming isang PO box. 31 00:01:27,560 --> 00:01:31,650 Ang bawat elemento ng array Maaari tindahan ng isang tiyak na halaga ng data, 32 00:01:31,650 --> 00:01:37,540 tulad ng bawat post office box ay may kakayahan upang i-hold ang isang tiyak na halaga ng mail. 33 00:01:37,540 --> 00:01:41,540 >> Ano ang maaaring naka-imbak sa bawat elemento ng array ay mga variable ng parehong data 34 00:01:41,540 --> 00:01:45,300 uri, tulad ng int o pansamantalang trabaho, lamang tulad ng sa iyong post office box, 35 00:01:45,300 --> 00:01:47,300 maaari ka lamang magkasya bagay ng isang katulad na uri, 36 00:01:47,300 --> 00:01:50,430 tulad ng mga titik o maliliit na pakete. 37 00:01:50,430 --> 00:01:55,050 Panghuli, maaari naming ma-access ang bawat elemento ng array direkta sa pamamagitan ng numero index, 38 00:01:55,050 --> 00:01:59,770 tulad ng maaari naming ma-access ang aming post office kahon sa pamamagitan ng alam ang numero ng mailbox nito. 39 00:01:59,770 --> 00:02:02,750 Sana, na pagkakatulad tumutulong sa iyo na makuha ang iyong ulo 40 00:02:02,750 --> 00:02:05,540 paligid ng ideya ng array sa pamamagitan ng analogizing sa ibang bagay 41 00:02:05,540 --> 00:02:08,400 na ikaw ay malamang na na pamilyar sa. 42 00:02:08,400 --> 00:02:13,182 >> Sa C, ang mga elemento ng isang array ay index simula sa 0, hindi mula sa 1. 43 00:02:13,182 --> 00:02:14,390 At ito ay talagang mahalaga. 44 00:02:14,390 --> 00:02:18,530 At sa katunayan, ito ay kung bakit namin, sa CS 50, at kung bakit computer siyentipiko madalas 45 00:02:18,530 --> 00:02:22,150 bibilangin mula sa 0, ay dahil sa array C ni 46 00:02:22,150 --> 00:02:24,660 pag-index, na kung saan ay laging nagsisimula sa 0. 47 00:02:24,660 --> 00:02:28,730 Kaya kung ang isang array ay binubuo ng n elemento, ang unang elemento ng array na 48 00:02:28,730 --> 00:02:32,960 ay matatagpuan sa index 0, at huling element ng array 49 00:02:32,960 --> 00:02:36,610 ay matatagpuan sa index n minus 1. 50 00:02:36,610 --> 00:02:43,160 Muli, kung may n elemento sa ating array, ang huling index ay n minus 1. 51 00:02:43,160 --> 00:02:46,820 >> Kaya kung ang aming array ay may 50 na mga elemento, ang mga unang elemento ay matatagpuan sa index 0, 52 00:02:46,820 --> 00:02:51,060 at ang huling elemento ay matatagpuan sa index 49. 53 00:02:51,060 --> 00:02:53,940 Sa kasamaang-palad, o sa kabutihang-palad, depende sa iyong mga pananaw, 54 00:02:53,940 --> 00:02:56,170 C ay tunay mahigpit dito. 55 00:02:56,170 --> 00:02:59,480 Hindi ito ay pigilan ka mula sa pagpunta sa labas ng hangganan ng iyong array. 56 00:02:59,480 --> 00:03:03,080 Ikaw ay maaaring ma-access ang minus 3 elemento ng iyong array 57 00:03:03,080 --> 00:03:07,400 o ang ika-59 na elemento ng iyong array, kung ang iyong array ay may 50 elemento lamang. 58 00:03:07,400 --> 00:03:11,060 Hindi ito ay titigil ang iyong mga programa mula sa ipon, ngunit sa tumakbo ng oras, 59 00:03:11,060 --> 00:03:14,350 Maaaring nakatagpo ka ng isang kinatatakutang segmentation fault 60 00:03:14,350 --> 00:03:17,460 kung sinimulan mo upang ma-access ang memory na nasa labas ng hangganan ng kung ano 61 00:03:17,460 --> 00:03:19,260 hiniling mo sa iyong programa na magbibigay sa iyo. 62 00:03:19,260 --> 00:03:21,250 Kaya huwag mag-ingat. 63 00:03:21,250 --> 00:03:23,120 >> Ano ang ginagawa ng isang array deklarasyon hitsura? 64 00:03:23,120 --> 00:03:26,940 Paano namin code sa isang array sa buhay tulad namin code anumang iba pang mga variable? 65 00:03:26,940 --> 00:03:31,250 May tatlong bahagi sa isang array declaration-- isang uri, isang pangalan, 66 00:03:31,250 --> 00:03:31,880 at isang laki. 67 00:03:31,880 --> 00:03:34,088 Ito ay halos kapareho sa isang pagdeklara ng variable, na 68 00:03:34,088 --> 00:03:36,970 ay lamang ng isang uri at isang pangalan, ang elemento size pagiging 69 00:03:36,970 --> 00:03:39,860 ang mga espesyal na mga kaso para sa isang array, dahil nakakakuha kami ng isang bungkos ng mga ito 70 00:03:39,860 --> 00:03:41,830 at sa parehong oras. 71 00:03:41,830 --> 00:03:45,560 >> Kaya ang uri ay kung anong uri ng variable sa iyo Gusto bawat elemento ng array na. 72 00:03:45,560 --> 00:03:47,150 Gusto ito sa isang array ng mga integer? 73 00:03:47,150 --> 00:03:49,010 Pagkatapos, i-type ang iyong data ay dapat na int. 74 00:03:49,010 --> 00:03:51,760 Gusto mo ito upang maging isang ang dami ng mga doble o sa kamay? 75 00:03:51,760 --> 00:03:54,545 Uri ng data ay dapat na double o lumutang. 76 00:03:54,545 --> 00:03:56,420 Ang pangalan ay kung ano ang iyong nais na tawagan ang iyong array. 77 00:03:56,420 --> 00:04:00,970 Ano ang gusto mong ipangalan sa giant bank ng integer o sa kamay o karakter 78 00:04:00,970 --> 00:04:03,250 o doubles, o kahit anong mayroon ka? 79 00:04:03,250 --> 00:04:04,700 Ano ang gusto mo sa tawag na ito? 80 00:04:04,700 --> 00:04:06,110 Medyo nagpapaliwanag sa sarili. 81 00:04:06,110 --> 00:04:08,610 >> Panghuli, laki, na kung saan napupunta sa loob ng mga square bracket, 82 00:04:08,610 --> 00:04:12,180 ay kung gaano karaming mga elemento ng ginagawa mo tulad ng iyong array na naglalaman ng. 83 00:04:12,180 --> 00:04:13,530 Gaano karaming mga integer ang gusto mo? 84 00:04:13,530 --> 00:04:15,570 Gaano karaming mga kamay ang gusto mo? 85 00:04:15,570 --> 00:04:19,070 >> Kaya halimbawa, int marka ng mag-aaral 40. 86 00:04:19,070 --> 00:04:26,020 Ito ay nagpapahayag ng isang array na tinatawag na Student marka, na binubuo ng 40 integer. 87 00:04:26,020 --> 00:04:28,180 Medyo nagpapaliwanag sa sarili, pag-asa ko. 88 00:04:28,180 --> 00:04:29,330 Narito ang isa pang halimbawa. 89 00:04:29,330 --> 00:04:31,560 Double menu presyo 8. 90 00:04:31,560 --> 00:04:34,610 Lumilikha ito ng isang array na tinatawag na Presyo Menu, na binubuo 91 00:04:34,610 --> 00:04:38,300 ng mga kuwarto sa memory para sa walong doubles. 92 00:04:38,300 --> 00:04:42,000 93 00:04:42,000 --> 00:04:45,750 >> Kung sa tingin mo ng bawat elemento ng isang hanay ng mga uri ng data-uri, 94 00:04:45,750 --> 00:04:49,860 kaya halimbawa, ang isang solong elemento ng isang hanay ng mga uri ng int, sa parehong paraan sa iyo 95 00:04:49,860 --> 00:04:52,770 ay sa tingin ng anumang iba pang mga variable ng uri int, 96 00:04:52,770 --> 00:04:56,440 ang lahat ng mga pamilyar na mga operasyon na namin tinalakay dati sa Operations 97 00:04:56,440 --> 00:04:58,270 video ay magkaroon ng kahulugan. 98 00:04:58,270 --> 00:05:01,620 Kaya dito, maaari naming ipahayag ang isang array ng Booleans tinatawag Truthtable, 99 00:05:01,620 --> 00:05:05,590 na binubuo ng room para sa 10 Booleans. 100 00:05:05,590 --> 00:05:09,650 >> At pagkatapos, tulad lamang namin ay maaaring lamang magtalaga isang halaga sa anumang iba pang mga variable ng uri 101 00:05:09,650 --> 00:05:13,470 Boolean, kami ay maaaring sabihin ng isang bagay tulad Truthtable square bracket 102 00:05:13,470 --> 00:05:18,040 2, na kung saan ay kung paano namin ipahiwatig, kung aling mga elemento ng katotohanan table? 103 00:05:18,040 --> 00:05:20,350 Ang ikatlong elemento ng katotohanan mesa, dahil tandaan, 104 00:05:20,350 --> 00:05:21,800 kami ay pagbibilang mula sa 0. 105 00:05:21,800 --> 00:05:25,690 Kaya na kung paano namin ipahiwatig ang ikatlong elemento ng katotohanan table. 106 00:05:25,690 --> 00:05:28,680 Truthtable 2 ay katumbas ng hindi totoo, tulad ng maaari naming declare-- 107 00:05:28,680 --> 00:05:33,560 o maaari naming magtalaga, sa halip, ang anumang Boolean uri ng variable na hindi totoo. 108 00:05:33,560 --> 00:05:35,050 >> Maaari din naming gamitin ang mga ito sa mga kondisyon. 109 00:05:35,050 --> 00:05:39,000 kung (truthtable 7 == true), na kung saan ay ang sabihin, 110 00:05:39,000 --> 00:05:42,370 kung ang ika-walong element ng Truthtable ay totoo, 111 00:05:42,370 --> 00:05:46,760 baka gusto naming i-print ang isang mensahe sa paggamit, printf ("TRUE! n") ;. 112 00:05:46,760 --> 00:05:50,290 Na nagiging sanhi sa amin upang sabihin Truthtable 10 ay katumbas ng totoo, di ba? 113 00:05:50,290 --> 00:05:53,590 Well, maaari ko, ngunit ito ay medyo mapanganib, dahil tandaan, 114 00:05:53,590 --> 00:05:56,260 kami ay may isang hanay ng mga 10 Booleans. 115 00:05:56,260 --> 00:06:02,340 Kaya ang pinakamataas na index na ang compiler ay nagbigay sa amin ay 9. 116 00:06:02,340 --> 00:06:06,010 >> Ang program na ito ay sumulat ng libro, ngunit kung may ibang tao sa memory 117 00:06:06,010 --> 00:06:09,110 umiiral na kung saan kami ay asahan Truthtable 10 upang pumunta, 118 00:06:09,110 --> 00:06:13,980 kami ay maaaring magdusa ng segmentation fault. Kami maaaring makakuha ng malayo sa mga ito, ngunit sa pangkalahatan, 119 00:06:13,980 --> 00:06:14,710 pretty mapanganib. 120 00:06:14,710 --> 00:06:19,759 Kaya ang ginagawa ko dito ay legal C, ngunit hindi kinakailangan ang pinakamahusay na ilipat. 121 00:06:19,759 --> 00:06:22,300 Ngayon, kapag ipinahayag sa iyo at magpasimula ng isang array ng sabay, 122 00:06:22,300 --> 00:06:23,960 may tunay na isang pretty espesyal na syntax na kayo 123 00:06:23,960 --> 00:06:26,250 ay maaaring gamitin upang punan ang mga array sa panimulang halaga nito. 124 00:06:26,250 --> 00:06:30,130 Maaaring makakuha ng pahirap upang magpahayag ng isang hanay ng mga laki sa 100, 125 00:06:30,130 --> 00:06:33,430 at pagkatapos ay upang sabihin, element 0 ay katumbas ng mga ito; element 1 ay katumbas ng mga ito; 126 00:06:33,430 --> 00:06:34,850 element 2 ay katumbas iyon. 127 00:06:34,850 --> 00:06:36,370 Ano ang punto, di ba? 128 00:06:36,370 --> 00:06:39,470 >> Kung ito ay isang maliit na hanay, maaari mo maaaring gawin ang isang bagay tulad nito. 129 00:06:39,470 --> 00:06:44,360 Bool truthtable 3 ay katumbas ng open kulot suhay at pagkatapos comma 130 00:06:44,360 --> 00:06:48,060 paghiwalayin ang mga listahan ng mga elemento na nais mong ilagay sa array. 131 00:06:48,060 --> 00:06:50,520 Pagkatapos isara kulot suhay semicolon. 132 00:06:50,520 --> 00:06:53,910 Lumilikha ito ng isang hanay ng mga size tatlong tinatawag Truthtable, 133 00:06:53,910 --> 00:06:56,090 may mga elemento na hindi totoo, totoo, at totoo. 134 00:06:56,090 --> 00:06:59,270 At sa katunayan, ang Instantiation syntax ko rito ay 135 00:06:59,270 --> 00:07:03,350 eksaktong katulad ng ginagawa ng mga indibidwal na syntax element ibaba. 136 00:07:03,350 --> 00:07:09,380 Ang dalawang paraan ng coding gagawin makabuo ng eksaktong parehong array. 137 00:07:09,380 --> 00:07:11,740 >> Katulad nito, maaari naming umulit sa ibabaw ng lahat ng mga elemento 138 00:07:11,740 --> 00:07:15,400 ng isang array gamit ang isang loop, kung saan, sa katunayan, ay isang napaka-Matindi ang pinapayong 139 00:07:15,400 --> 00:07:16,790 sa-bahay ehersisyo. 140 00:07:16,790 --> 00:07:20,720 Paano mo lumikha ng isang array of 100 integer, na kung saan ang 141 00:07:20,720 --> 00:07:23,477 bawat elemento ng array ay index nito? 142 00:07:23,477 --> 00:07:26,560 Kaya halimbawa, kami ay may isang hanay ng mga 100 integer, at sa unang elemento, 143 00:07:26,560 --> 00:07:27,790 gusto naming ilagay ang 0. 144 00:07:27,790 --> 00:07:29,810 Sa pangalawang elemento, gusto naming ilagay 1. 145 00:07:29,810 --> 00:07:33,319 Sa ikatlong element, gusto naming upang ilagay ang 2; at iba pa at iba pa. 146 00:07:33,319 --> 00:07:35,360 Iyan ay isang tunay na mabuting sa-bahay na gawin exercise na iyon. 147 00:07:35,360 --> 00:07:38,190 148 00:07:38,190 --> 00:07:40,220 >> Dito, ito ay hindi hitsura tulad ng masyadong maraming ay nagbago. 149 00:07:40,220 --> 00:07:44,170 Ngunit mapansin na sa pagitan ng square bracket, oras na ito, 150 00:07:44,170 --> 00:07:45,830 Ang tunay ko na tinanggal na ang numero. 151 00:07:45,830 --> 00:07:48,000 Kung gumagamit ka ng mga ito tunay espesyal Instantiation 152 00:07:48,000 --> 00:07:50,380 syntax upang lumikha ng isang array, na talagang hindi 153 00:07:50,380 --> 00:07:53,491 kailangan upang ipahiwatig ang laki ng array muna. 154 00:07:53,491 --> 00:07:55,740 Ang tagatala ay matalino sapat upang malaman na ikaw ay tunay na 155 00:07:55,740 --> 00:07:58,980 gusto ng isang hanay ng mga laki 3, dahil inilagay mo tatlong mga sangkap 156 00:07:58,980 --> 00:08:00,640 sa kanan ng katumbas sign. 157 00:08:00,640 --> 00:08:04,140 Kung nagkaroon ka maglagay ng apat, ito ay may bibigyan ka ng isang katotohanan talahanayan ng mga sukat apat; 158 00:08:04,140 --> 00:08:06,270 at iba pa at iba pa. 159 00:08:06,270 --> 00:08:09,380 >> Ang mga array ay hindi limitado sa isang solong dimensyon, kung saan ay medyo cool. 160 00:08:09,380 --> 00:08:12,000 Maaari mong aktwal na magkaroon ng maraming side specifiers hangga't gusto mo. 161 00:08:12,000 --> 00:08:16,470 Kaya halimbawa, kung nais mong lumikha ng isang board para sa laro Battleship, na kung saan, 162 00:08:16,470 --> 00:08:20,910 kung sakaling ang naglaro, ay isang laro na ay nilalaro gamit ang mga peg sa 10 sa pamamagitan ng 10 grid, 163 00:08:20,910 --> 00:08:22,450 maaari kang lumikha ng isang array tulad nito. 164 00:08:22,450 --> 00:08:26,030 Maaari mong sabihin Bool battleship square bracket 10 165 00:08:26,030 --> 00:08:29,590 closed square bracket square bracket 10 sarado square bracket. 166 00:08:29,590 --> 00:08:32,710 >> At pagkatapos, maaari mong piliin na bigyang-kahulugan na ito sa iyong isip bilang isang 10 167 00:08:32,710 --> 00:08:35,576 sa pamamagitan ng 10 grid ng mga cell. 168 00:08:35,576 --> 00:08:37,409 Ngayon, sa katunayan, sa memorya, tunay na ginagawa ito lamang 169 00:08:37,409 --> 00:08:42,440 mananatiling isang 100 element, single dimensional array. 170 00:08:42,440 --> 00:08:46,070 At ito, sa katunayan, ay pumunta para sa kung ikaw may tatlong sukat o apat o limang. 171 00:08:46,070 --> 00:08:49,420 Ito ay talagang lamang ay multiply lahat ng mga indices-- 172 00:08:49,420 --> 00:08:51,130 o lahat ng mga laki specifiers-- magkasama, 173 00:08:51,130 --> 00:08:53,480 at kumuha ka ng isang one-dimensional array ng laki. 174 00:08:53,480 --> 00:08:57,090 >> Ngunit sa mga tuntunin ng mga organisasyon at visualization at pang-unawa ng tao, 175 00:08:57,090 --> 00:08:59,240 maaaring ito ay isang pulutong mas madali upang gumana sa isang grid 176 00:08:59,240 --> 00:09:02,980 kung ikaw ay nagtatrabaho sa isang laro tulad ng Tic-tac-daliri ng paa o Battleship, 177 00:09:02,980 --> 00:09:05,179 o isang bagay tulad na. 178 00:09:05,179 --> 00:09:06,970 Ito ay isang mahusay abstraction, sa halip ng pagkakaroon 179 00:09:06,970 --> 00:09:09,340 mag-isip tungkol sa isang Tic-tac-daliri board bilang isang linya ng siyam 180 00:09:09,340 --> 00:09:13,810 parisukat o ng isang Battleship board bilang isang linya ng 100 parisukat. 181 00:09:13,810 --> 00:09:16,010 Isang 10 sa pamamagitan ng 10 grid o isang tatlong sa pamamagitan ng tatlong grid ay marahil 182 00:09:16,010 --> 00:09:17,225 isang pulutong mas madaling mahalata. 183 00:09:17,225 --> 00:09:19,820 184 00:09:19,820 --> 00:09:22,280 >> Ngayon, isang bagay na talagang mahalaga tungkol sa array. 185 00:09:22,280 --> 00:09:25,950 Maaari naming ituring ang bawat indibidwal na element ng array bilang isang variable. 186 00:09:25,950 --> 00:09:27,700 Nakita namin na ang mas maaga kapag kami ay nagtatalaga 187 00:09:27,700 --> 00:09:32,240 ang halaga True sa tiyak Booleans o pagsubok sa kanila sa conditionals. 188 00:09:32,240 --> 00:09:35,960 Ngunit hindi namin maaaring gamutin ang buong arrays kanilang mga sarili bilang mga variable. 189 00:09:35,960 --> 00:09:41,760 Maaari naming hindi, halimbawa, magtalaga ng isa array sa isa pang array gamit ang assignment 190 00:09:41,760 --> 00:09:42,930 operator. 191 00:09:42,930 --> 00:09:44,640 Ito ay hindi legal C. 192 00:09:44,640 --> 00:09:47,920 >> Kung nais namin na, para sa example-- ano Gusto namin ay ginagawa sa halimbawa na 193 00:09:47,920 --> 00:09:50,200 ay upang kopyahin ang isa array na sa iba. 194 00:09:50,200 --> 00:09:53,810 Kung gusto namin upang gawin iyon, kami ay tunay na kailangang gumamit ng loop upang kopyahin sa paglipas ng 195 00:09:53,810 --> 00:09:56,550 bawat indibidwal na elemento nang paisa-isa. 196 00:09:56,550 --> 00:09:58,700 Alam ko ito ay isang maliit na oras. 197 00:09:58,700 --> 00:10:04,022 >> Kaya halimbawa, kung kami ay may mga pares mga linya ng code, ito gumagana? 198 00:10:04,022 --> 00:10:05,230 Well, hindi, hindi ito gagawin, di ba? 199 00:10:05,230 --> 00:10:07,860 Dahil kami ay nagsisikap upang magtalaga ng pagkain sa bar. 200 00:10:07,860 --> 00:10:09,860 Iyan ay hindi pagpunta sa trabaho, dahil sa ito ay isang array, 201 00:10:09,860 --> 00:10:13,130 at inilarawan namin na iyan ay hindi legal C. 202 00:10:13,130 --> 00:10:15,580 >> Sa halip, kung gusto naming kopyahin ang mga nilalaman ng pagkain 203 00:10:15,580 --> 00:10:18,070 sa bar, na kung saan ay kung ano ang kami ay nagsisikap upang gawin dito, 204 00:10:18,070 --> 00:10:19,970 kami ay kailangan ng isang syntax tulad nito. 205 00:10:19,970 --> 00:10:24,170 Kami ay may isang para sa loop na napupunta mula sa J ay katumbas sa 0 hanggang 5, 206 00:10:24,170 --> 00:10:28,390 at paglakas namin J sa bawat pag-ulit ng loop at magtalaga ng mga elemento tulad ng. 207 00:10:28,390 --> 00:10:33,360 Ito ay magreresulta sa bar din pagiging isa, dalawa, tatlo, apat, lima, 208 00:10:33,360 --> 00:10:36,730 ngunit kami ay may sa gawin ito sa napaka mabagal element-by-element paraan, 209 00:10:36,730 --> 00:10:40,009 sa halip ng sa pamamagitan lamang kopyahin ang buong array. 210 00:10:40,009 --> 00:10:42,050 Sa ibang programming wika, mas modernong mga bago, 211 00:10:42,050 --> 00:10:45,610 maaari mong, sa katunayan, lamang gawin na ang mga simpleng katumbas ng syntax. 212 00:10:45,610 --> 00:10:49,620 Ngunit C, sa kasamaang-palad, hindi namin hindi pinapayagan na gawin iyon. 213 00:10:49,620 --> 00:10:52,026 >> Ngayon, may isa pang bagay na gusto kong banggitin 214 00:10:52,026 --> 00:10:54,650 tungkol sa array na ay maaaring maging isang maliit na bit mapanlinlang ang unang beses na 215 00:10:54,650 --> 00:10:55,990 magtrabaho sa kanila. 216 00:10:55,990 --> 00:10:59,860 Tinalakay namin sa isang video tungkol sa variable na saklaw, 217 00:10:59,860 --> 00:11:04,940 na ang karamihan sa mga variable sa C, kapag tumawag ka ang mga ito sa pag-andar, ay dumaan sa pamamagitan ng halaga. 218 00:11:04,940 --> 00:11:08,620 Huwag mo matandaan kung ano ang ibig sabihin nito upang pumasa ang isang bagay sa pamamagitan ng halaga? 219 00:11:08,620 --> 00:11:12,570 Ito ay nangangahulugan na kami ay gumawa ng isang kopya ng variable na ini lumipas in. 220 00:11:12,570 --> 00:11:16,290 Ang callee function, ang function na tumatanggap ng mga variable, 221 00:11:16,290 --> 00:11:17,730 ay hindi makuha ang variable mismo. 222 00:11:17,730 --> 00:11:20,850 Ito ay makakakuha ng kanyang sariling lokal na kopya ng mga ito upang magtrabaho sa. 223 00:11:20,850 --> 00:11:24,070 >> Ang mga array, siyempre, gawin hindi sundin ang patakaran na ito. 224 00:11:24,070 --> 00:11:27,600 Sa halip, kung ano ang tawag namin ito Dumaraan reference. 225 00:11:27,600 --> 00:11:31,360 Callee Ang aktwal ay tumanggap ng array. 226 00:11:31,360 --> 00:11:34,207 Ito ay hindi makatanggap ng kanyang mga sariling lokal na kopya nito. 227 00:11:34,207 --> 00:11:36,040 At kung sa tingin mo tungkol sa ito, ito ang akma. 228 00:11:36,040 --> 00:11:39,750 Kung array ay talagang malaki, ito tumatagal kaya magkano ng oras at pagsisikap 229 00:11:39,750 --> 00:11:44,470 upang gumawa ng isang kopya ng isang hanay ng mga 100 o 1,000 o 10,000 na mga elemento, 230 00:11:44,470 --> 00:11:48,290 na ito ay hindi katumbas ng halaga para sa isang gumana upang makatanggap ng isang kopya ng mga ito, 231 00:11:48,290 --> 00:11:51,037 gumawa ng ilang trabaho sa mga ito, at pagkatapos ay lamang gawin sa mga kopya; 232 00:11:51,037 --> 00:11:53,120 ito ay hindi kailangan na magkaroon ng ito sa pader sa paligid anymore. 233 00:11:53,120 --> 00:11:54,710 >> Dahil array ay ilang malaki at nakakabahala, 234 00:11:54,710 --> 00:11:56,001 ipasa namin lamang ang mga ito sa pamamagitan ng reference. 235 00:11:56,001 --> 00:12:01,210 Lamang ang tiwala namin na function na na, huwag masira ng kahit ano. 236 00:12:01,210 --> 00:12:03,010 Kaya ito ay tunay na makuha ang array. 237 00:12:03,010 --> 00:12:05,290 Ito ay hindi makakuha ng kanyang sariling lokal na kopya nito. 238 00:12:05,290 --> 00:12:07,170 >> Kaya kung ano ang ibig sabihin nito, pagkatapos ay, kapag ang callee 239 00:12:07,170 --> 00:12:08,970 minamanipula elemento ng array? 240 00:12:08,970 --> 00:12:10,780 Ano ang mangyayari? 241 00:12:10,780 --> 00:12:13,210 Para sa ngayon, ipapakita namin pagtakpan sa ibabaw kung bakit eksaktong ito 242 00:12:13,210 --> 00:12:15,320 mangyayari, bakit array ay dumaan sa pamamagitan ng reference 243 00:12:15,320 --> 00:12:17,810 at lahat ng iba pa ay dumaan sa pamamagitan ng halaga. 244 00:12:17,810 --> 00:12:20,470 Ngunit pangako ko sa iyo, kami ay bumalik at magbigay sa iyo ang sagot 245 00:12:20,470 --> 00:12:23,750 sa mga ito sa isang mas huling video. 246 00:12:23,750 --> 00:12:28,110 >> Narito ang isa pang ehersisyo para sa iyo bago namin tapusin ang mga bagay-bagay sa array. 247 00:12:28,110 --> 00:12:31,400 Ang grupo ng mga code dito, na hindi partikular na mahusay na estilo, 248 00:12:31,400 --> 00:12:33,400 kukunin ko na lang gumawa na caveat. 249 00:12:33,400 --> 00:12:36,660 Walang mga komento sa dito, na kung saan ay medyo masamang form. 250 00:12:36,660 --> 00:12:39,750 Ngunit ito ay lamang dahil gusto kong maging magagawa upang magkasya ang lahat ng bagay sa screen. 251 00:12:39,750 --> 00:12:44,360 >> Sa tuktok, makikita mo na mayroon akong dalawang deklarasyon ng function para sa set array 252 00:12:44,360 --> 00:12:45,820 at itakda ang int. 253 00:12:45,820 --> 00:12:49,680 Set array tila kumukuha ng isang array ng apat na integer bilang input nito. 254 00:12:49,680 --> 00:12:52,767 At set int tila tumatagal isang solong integer bilang input nito. 255 00:12:52,767 --> 00:12:54,350 Ngunit pareho ng mga ito ay hindi magkakaroon ng isang output. 256 00:12:54,350 --> 00:12:57,689 Ang output, ang pagbabalik type, sa bawat isa ay walang bisa. 257 00:12:57,689 --> 00:12:59,480 Sa Main, kami ay may isang ilang linya ng code. 258 00:12:59,480 --> 00:13:02,730 Ipinapahayag namin ang isang integer variable tinatawag na A at italaga ito ang halaga na 10. 259 00:13:02,730 --> 00:13:07,080 Ipinapahayag namin ang isang array ng apat na integer tinatawag na B at magtalaga ng mga elemento ng 0, 1, 260 00:13:07,080 --> 00:13:08,730 2, at 3, ayon sa pagkakabanggit. 261 00:13:08,730 --> 00:13:12,190 Pagkatapos, kami ay may isang tawag upang i-set int at isang tawag sa set array. 262 00:13:12,190 --> 00:13:15,910 Ang mga kahulugan ng set array at set int ay down sa ibaba, sa ilalim. 263 00:13:15,910 --> 00:13:17,640 >> At ito, muli, hinihiling ko sa iyo ang tanong. 264 00:13:17,640 --> 00:13:20,770 Ano ang makakakuha ng naka-print out dito sa dulo ng Main? 265 00:13:20,770 --> 00:13:23,020 May isang printout col. Ako ay imprenta ang dalawang integer. 266 00:13:23,020 --> 00:13:28,010 Ako nagpi-print out ang mga nilalaman ng A at ang mga nilalaman ng B square bracket 0. 267 00:13:28,010 --> 00:13:29,880 I-pause ang video dito at kumuha nang isang minuto. 268 00:13:29,880 --> 00:13:35,482 Maaari mong malaman kung ano ang mga ito function na ay i-print sa dulo? 269 00:13:35,482 --> 00:13:38,190 Sana, kung ang pagpapabalik sa iyo ang pagkakaiba sa pagitan ng pagpasa sa pamamagitan ng halaga 270 00:13:38,190 --> 00:13:41,680 at pagpasa sa pamamagitan ng reference, ito Ang problema ay hindi masyadong mahirap ito para sa iyo. 271 00:13:41,680 --> 00:13:44,130 At ang sagot ng ginagawa mo Nakakita ay na ito. 272 00:13:44,130 --> 00:13:47,660 Kung hindi ka talagang sigurado kung bakit iyon ang kaso, kumuha ng isang segundo, 273 00:13:47,660 --> 00:13:50,620 bumalik, suriin kung ano ang ako ay lamang pagtalakay tungkol sa paglipas ng array 274 00:13:50,620 --> 00:13:53,450 sa pamamagitan ng reference, laban sa pagpasa iba pang mga variable sa pamamagitan ng halaga, 275 00:13:53,450 --> 00:13:56,680 at sana, ito ay gumawa ng isang maliit na piraso ng higit pang kahulugan. 276 00:13:56,680 --> 00:13:59,760 >> Ako Doug Lloyd, at ito ay CS50. 277 00:13:59,760 --> 00:14:01,467