1 00:00:07,360 --> 00:00:09,360 [Powered by Google Translate] Ejja nitkellmu dwar arrays. 2 00:00:09,360 --> 00:00:12,780 Allura għaliex kieku aħna qatt tixtieq li tuża arrays? 3 00:00:12,780 --> 00:00:17,210 Well ejja ngħidu li għandek program li jeħtieġ li jaħżen IDs istudent 5. 4 00:00:17,210 --> 00:00:21,270 Jista 'jidher raġonevoli li jkollhom 5 varjabbli separati. 5 00:00:21,270 --> 00:00:24,240 Għal raġunijiet aħna ser tara fil daqsxejn, aħna ser tibda tgħodd minn 0. 6 00:00:24,240 --> 00:00:30,700 Il-varjabbli aħna ser ikollhom se jkun id0 int, ID1 int, u l-bqija. 7 00:00:30,700 --> 00:00:34,870 Kull loġika irridu li jwettqu fuq ID student se jeħtieġu li jiġu kkupjati u pasted 8 00:00:34,870 --> 00:00:36,870 għal kull wieħed minn dawn IDs student. 9 00:00:36,870 --> 00:00:39,710 Jekk irridu li jiċċekkjaw li l-istudenti jinzertaw fl-CS50, 10 00:00:39,710 --> 00:00:43,910 aħna ser ewwel bżonn li jiċċekkja jekk il id0 tirrappreżenta l-istudent fil-kors. 11 00:00:43,910 --> 00:00:48,070 Imbagħad jagħmlu l-istess għall-istudent li jmiss, aħna ser bżonn li kopja u paste tal-kodiċi għall id0 12 00:00:48,070 --> 00:00:54,430 u ibdel kull okkorrenza ta 'id0 ma ID1 u dan ikompli sejjer għal ID2, 3, u 4. 13 00:00:54,430 --> 00:00:57,560 >> Hekk kif inti tisma li għandna bżonn li kopja u paste, 14 00:00:57,560 --> 00:01:00,440 inti għandek tibda taħseb li hemm soluzzjoni aħjar. 15 00:01:00,440 --> 00:01:05,360 Issa dak li jekk inti tirrealizza inti m'għandekx bżonn IDs student 5, iżda pjuttost 7? 16 00:01:05,360 --> 00:01:09,570 Ikollok bżonn li jmorru lura fis-source code tiegħek u żid fi ID5, l ID6, 17 00:01:09,570 --> 00:01:14,260 u kopja u paste tal-loġika għall-iċċekkjar jekk l-IDs jappartjenu għall-klassi għal dawn IDs 2 ġodda. 18 00:01:14,260 --> 00:01:19,600 M'hemm xejn li jgħaqqdu dawn IDs flimkien, u b'hekk m'hemm l-ebda mod ta 'tistaqsi 19 00:01:19,600 --> 00:01:22,040 il-programm li jagħmel dan IDs 0 sa 6. 20 00:01:22,040 --> 00:01:26,120 Ukoll issa inti tirrealizza li għandek IDs student 100. 21 00:01:26,120 --> 00:01:30,770 Huwa jibdew jidhru inqas minn ideali għall-ħtieġa li separatament jiddikjaraw kull wieħed minn dawn IDs, 22 00:01:30,770 --> 00:01:33,760 u kopja u paste xi loġika għal dawk IDs ġodda. 23 00:01:33,760 --> 00:01:38,380 Imma forsi aħna determinati, u nagħmlu dan għall-istudenti kollha 100. 24 00:01:38,380 --> 00:01:42,240 Imma x'jiġri jekk inti ma taf kif ħafna studenti hemm fil-fatt huma? 25 00:01:42,240 --> 00:01:47,320 Hemm biss xi studenti n u l-programm tiegħek għandu jitlob lill-utent dak li n hija. 26 00:01:47,320 --> 00:01:50,250 Uh oh. Dan mhux sejjer jaħdem tajjeb ħafna. 27 00:01:50,250 --> 00:01:53,820 Program tiegħek jaħdem biss għal xi numru kostanti ta 'studenti. 28 00:01:53,820 --> 00:01:57,520 >> Solving kollha ta 'dawn il-problemi hija l-sbuħija ta' arrays. 29 00:01:57,520 --> 00:01:59,930 Allura x'inhi l-firxa? 30 00:01:59,930 --> 00:02:04,480 F'xi lingwi ta 'programmar' tip firxa tista 'tkun kapaċi li jagħmlu ftit aktar, 31 00:02:04,480 --> 00:02:09,960 iżda hawnhekk aħna ser tiffoka fuq l-istruttura tad-data bażika firxa eżatt kif tkun taf tara fil C. 32 00:02:09,960 --> 00:02:14,030 Firxa huwa biss blokk kbir ta 'memorja. Li minnu. 33 00:02:14,030 --> 00:02:17,770 Meta ngħidu li għandna firxa ta '10 numri interi, li sempliċiment ifisser li għandna xi blokk 34 00:02:17,770 --> 00:02:20,740 ta 'memorja li huwa kbir biżżejjed biex iżomm 10 interi separati. 35 00:02:29,930 --> 00:02:33,410 Jekk wieħed jassumi li integer huwa ta '4 bytes, dan ifisser li l-firxa ta' 10 numri interi 36 00:02:33,410 --> 00:02:37,180 huwa blokk kontinwu ta '40 bytes fil-memorja. 37 00:02:42,660 --> 00:02:46,280 Anke meta tuża arrays multidimensjonali, li aħna mhux se jmorru fl għal hawn, 38 00:02:46,280 --> 00:02:49,200 huwa għadu biss blokk kbir ta 'memorja. 39 00:02:49,200 --> 00:02:51,840 Il-notazzjoni multidimensjonali hija biss konvenjenza. 40 00:02:51,840 --> 00:02:55,640 Jekk għandek 3 minn 3 firxa multidimensjonali tan-numri interi, 41 00:02:55,640 --> 00:03:00,650 imbagħad programm tiegħek se verament ftit jittratta dan bħala blokk kbir ta '36 bytes. 42 00:03:00,650 --> 00:03:05,460 In-numru totali ta 'numri interi huwa 3 darbiet 3, u kull numru sħiħ jieħu 4 bytes. 43 00:03:05,460 --> 00:03:07,750 >> Ejja tagħti ħarsa lejn eżempju bażiku. 44 00:03:07,750 --> 00:03:10,660 Nistgħu naraw hawn 2 modi differenti ta 'arrays tiddikjara. 45 00:03:15,660 --> 00:03:18,580 Aħna ser ikollhom biex jikkummentaw 1 minnhom barra għall-programm biex jikkompilaw 46 00:03:18,580 --> 00:03:20,900 peress li aħna tiddikjara x darbtejn. 47 00:03:20,900 --> 00:03:25,140 Aħna ser tagħti ħarsa lejn uħud mill-differenzi bejn dawn it-tipi 2 ta 'dikjarazzjonijiet fil-daqsxejn. 48 00:03:25,140 --> 00:03:28,560 Dawn iż-żewġ linji jiddikjara firxa ta 'N-daqs, 49 00:03:28,560 --> 00:03:30,740 fejn għandna # jiddefinixxu N bħala 10. 50 00:03:30,740 --> 00:03:34,460 Aħna jistgħu daqstant faċilment talbu l-utent għal numru sħiħ pożittiv 51 00:03:34,460 --> 00:03:37,250 u użati li integer bħala għadd ta 'elementi fil-firxa tagħna. 52 00:03:37,250 --> 00:03:41,960 Bħal eżempju tagħna ID student qabel, dan huwa tip ta 'bħal tiddikjara 10 kompletament separat 53 00:03:41,960 --> 00:03:49,000 varjabbli immaġinarja; X0, x1, x2, u hekk sa Xn-1. 54 00:03:57,270 --> 00:04:00,840 Jinjora l-linji fejn aħna tiddikjara l-firxa, l-avviż il-parentesi kwadri intatti 55 00:04:00,840 --> 00:04:02,090 ġewwa l-għal-linji. 56 00:04:02,090 --> 00:04:09,660 Meta aħna tikteb xi ħaġa bħal x [3], li jien ser biss jaqra kif x bracket 3, 57 00:04:09,660 --> 00:04:13,090 inti tista 'taħseb li bħal titlob għall-x3 immaġinarja. 58 00:04:13,090 --> 00:04:17,519 Avviż minn ma 'firxa ta' daqs N, dan ifisser li n-numru ta 'ġewwa tal-parentesi, 59 00:04:17,519 --> 00:04:22,630 li aħna ser sejħa-indiċi, jista 'jvarja minn 0 sa N-1, 60 00:04:22,630 --> 00:04:25,660 li huwa total ta 'indiċijiet N. 61 00:04:25,660 --> 00:04:28,260 >> Biex jaħsbu dwar kif dan attwalment xogħlijiet 62 00:04:28,260 --> 00:04:31,260 ftakar li l-firxa hija blokk kbir ta 'memorja. 63 00:04:31,260 --> 00:04:37,460 Jekk wieħed jassumi li integer huwa ta '4 bytes, il-x array kollu huwa blokk 40 byte ta 'memorja. 64 00:04:37,460 --> 00:04:41,360 Allura x0 jirreferi għall-ħafna ewwel 4 bytes tal-blokka. 65 00:04:45,810 --> 00:04:49,230 X [1] tirreferi għall-4 bytes u l-bqija. 66 00:04:49,230 --> 00:04:53,760 Dan ifisser li l-bidu ta 'x hija l-programm qatt jeħtieġ li jżommu rekord ta'. 67 00:04:55,660 --> 00:04:59,840 Jekk inti tixtieq li tuża x [400], allura l-programm jaf li dan huwa ekwivalenti 68 00:04:59,840 --> 00:05:03,460 għal ftit 1600 bytes wara l-bidu ta 'x. 69 00:05:03,460 --> 00:05:08,780 Where'd nikbru 1600 bytes minn? Huwa biss 400 darbiet 4 bytes kull numru sħiħ. 70 00:05:08,780 --> 00:05:13,170 >> Qabel ma jimxu fuq, huwa ferm importanti li tirrealizza li fis-C 71 00:05:13,170 --> 00:05:17,080 m'hemm l-ebda infurzar ta 'l-indiċi li nużaw fil-firxa. 72 00:05:17,080 --> 00:05:23,180 Blokk kbir tagħna huwa biss 10 interi twil, iżda xejn se Yell fil us jekk aħna tikteb x [20] 73 00:05:23,180 --> 00:05:26,060 jew saħansitra x [-5]. 74 00:05:26,060 --> 00:05:28,240 L-indiċi lanqas ma għandhom ikunu ta 'numru. 75 00:05:28,240 --> 00:05:30,630 Jista 'jkun kull espressjoni arbitrarja. 76 00:05:30,630 --> 00:05:34,800 Fil-programm nużaw il-i varjabbli mill-linja ta 'l-indiċi fil-firxa. 77 00:05:34,800 --> 00:05:40,340 Dan huwa mudell komuni ħafna, looping minn i = 0 għat-tul tal-firxa, 78 00:05:40,340 --> 00:05:43,350 u mbagħad tuża i bħala l-indiċi għall-firxa. 79 00:05:43,350 --> 00:05:46,160 B'dan il-mod inti effettivament jirkbu fuq il-firxa kollha, 80 00:05:46,160 --> 00:05:50,600 u inti tista 'jew tassenja lil kull post fil-firxa jew tagħmel użu minnha għal xi kalkolu. 81 00:05:50,600 --> 00:05:53,920 >> Fl-ewwel linja, i jibda fil 0, 82 00:05:53,920 --> 00:05:58,680 u għalhekk se jassenja lill-post 0 fil-firxa, il-valur 0 darbiet 2. 83 00:05:58,680 --> 00:06:04,370 Imbagħad i żidiet, u aħna tassenja l-post ewwel fil-firxa tal-valur 1 żminijiet 2. 84 00:06:04,370 --> 00:06:10,170 Imbagħad i żidiet għal darb'oħra u hekk sa aħna tassenja l-pożizzjoni N-1 fil-firxa 85 00:06:10,170 --> 00:06:13,370 il-valur N-1 żminijiet 2. 86 00:06:13,370 --> 00:06:17,810 Allura ħloqna firxa mal-ewwel 10 numri anke. 87 00:06:17,810 --> 00:06:21,970 Forsi evens kien ikun l-isem daqsxejn aħjar għall-varjabbli milli x- 88 00:06:21,970 --> 00:06:24,760 iżda li taw affarijiet bogħod. 89 00:06:24,760 --> 00:06:30,210 It-tieni għall loop allura biss prints-valuri li aħna diġà maħżuna ġewwa tal-firxa. 90 00:06:30,210 --> 00:06:33,600 >> Ejja nippruvaw li jmexxu l-programm ma 'żewġ tipi ta' dikjarazzjonijiet array 91 00:06:33,600 --> 00:06:36,330 u tagħti ħarsa lejn l-output tal-programm. 92 00:06:51,450 --> 00:06:57,020 Safejn nistgħu naraw, il-programm iġib ruħu bl-istess mod għaż-żewġ tipi ta 'dikjarazzjonijiet. 93 00:06:57,020 --> 00:07:02,230 Ejja wkoll tagħti ħarsa lejn dak li jiġri jekk aħna jibdlu l-linja ewwel li tiqafx fuq N 94 00:07:02,230 --> 00:07:05,040 iżda pjuttost jgħidu 10,000. 95 00:07:05,040 --> 00:07:07,430 Lil hinn mill-aħħar tas-array. 96 00:07:14,700 --> 00:07:17,210 Oops. Forsi inti stajt tidher dan qabel. 97 00:07:17,210 --> 00:07:20,440 A tort segmentazzjoni ifisser programm tiegħek ġġarraf. 98 00:07:20,440 --> 00:07:24,430 Inti tibda tara dawn meta inti touch oqsma tal-memorja inti m'għandekx tkun jmissu. 99 00:07:24,430 --> 00:07:27,870 Hawnhekk aħna huma jmissu 10000 postijiet lil hinn mill-bidu ta 'x, 100 00:07:27,870 --> 00:07:31,920 li evidentement huwa post fil-memorja aħna ma għandhom ikunu jmissux. 101 00:07:31,920 --> 00:07:37,690 Allura ħafna minna probabbilment mhux se aċċidentalment tpoġġi 10000 minflok N, 102 00:07:37,690 --> 00:07:42,930 imma dak jekk nagħmlu xi ħaġa aktar sottili bħal ngħidu tikteb inqas minn jew ugwali għal N 103 00:07:42,930 --> 00:07:46,830 fil-kundizzjoni loop għall-kuntrarju inqas minn N. 104 00:07:46,830 --> 00:07:50,100 Ftakar li l-firxa biss ikollu indiċi ta 'minn 0 sa N-1, 105 00:07:50,100 --> 00:07:54,510 li jfisser li indiċi N hija lil hinn mill-aħħar tal-firxa. 106 00:07:54,510 --> 00:07:58,050 Il-programm jista 'ma tiġrifa f'dan il-każ, iżda huwa għadu żball. 107 00:07:58,050 --> 00:08:01,950 Fil-fatt, dan l-iżball huwa tant komuni li għandha f'isimha proprju huwa, 108 00:08:01,950 --> 00:08:03,970 off sal-1 ta 'żball. 109 00:08:03,970 --> 00:08:05,970 >> Li lilha għall-affarijiet bażiċi. 110 00:08:05,970 --> 00:08:09,960 Allura x'inhuma l-differenzi kbar bejn it-tipi 2 ta 'dikjarazzjonijiet firxa? 111 00:08:09,960 --> 00:08:13,960 Wieħed differenza hija fejn l-blokk kbir ta 'memorja tmur. 112 00:08:13,960 --> 00:08:17,660 Fl-ewwel dikjarazzjoni, li jiena ser sejħa-tip bracket-array, 113 00:08:17,660 --> 00:08:20,300 għalkemm dan huwa bl-ebda mod l-isem konvenzjonali, 114 00:08:20,300 --> 00:08:22,480 se jmorru fuq il-munzell. 115 00:08:22,480 --> 00:08:27,450 Billi fit-tieni, li jiena ser sejħa-tip pointer-array, din se jmorru fuq il-borġ. 116 00:08:27,450 --> 00:08:32,480 Dan ifisser li meta l-prospetti funzjoni, il-firxa bracket awtomatikament se deallocated, 117 00:08:32,480 --> 00:08:36,419 billi kif inti trid explicitily sejħa b'xejn fuq il-firxa pointer 118 00:08:36,419 --> 00:08:38,010 jew inkella għandek nixxija memorja. 119 00:08:38,010 --> 00:08:42,750 Barra minn hekk, il-firxa kategorija mhix attwalment varjabbli. 120 00:08:42,750 --> 00:08:45,490 Dan huwa importanti. Huwa biss simbolu. 121 00:08:45,490 --> 00:08:49,160 Inti tista 'taħseb li bħala kostanti li l-kumpilatur jagħżel għalik. 122 00:08:49,160 --> 00:08:52,970 Dan ifisser li aħna ma tistax tagħmel xi ħaġa simili x + + mat-tip parentesi, 123 00:08:52,970 --> 00:08:56,240 għalkemm dan huwa perfettament valida mat-tip pointer. 124 00:08:56,240 --> 00:08:58,270 >> It-tip pointer hija varjabbli. 125 00:08:58,270 --> 00:09:01,510 Għat-tip pointer, għandna 2 blokki separati ta 'memorja. 126 00:09:01,510 --> 00:09:06,060 Il x varjabbli nnifisha hija maħżuna fil-munzell u huwa biss pointer wieħed, 127 00:09:06,060 --> 00:09:08,620 iżda l-blokk kbir ta 'memorja hija maħżuna fuq il-borġ. 128 00:09:08,620 --> 00:09:11,010 Il x varjabbli fuq il-munzell biss taħżen l-indirizz 129 00:09:11,010 --> 00:09:14,010 tal-blokka kbira tal-memorja fuq il-munzell. 130 00:09:14,010 --> 00:09:17,370 Wieħed implikazzjoni ta 'dan huwa l-daqs ta' l-operatur. 131 00:09:17,370 --> 00:09:22,480 Jekk inti ssaqsi għall-daqs tal-array bracket, se jagħtik l-daqs tal-blokk kbir ta 'memorja, 132 00:09:22,480 --> 00:09:24,620 xi ħaġa simili 40 bytes, 133 00:09:24,620 --> 00:09:26,920 imma jekk inti ssaqsi għall-daqs tat-tip pointer ta 'firxa, 134 00:09:26,920 --> 00:09:32,740 se jagħtik id-daqs ta 'l-x varjabbli innifsu, li fuq il-appliance huwa probabbli biss 4 bytes. 135 00:09:32,740 --> 00:09:36,530 Bl-użu tat-tip pointer-array, huwa impossibbli li direttament jistaqsu għal 136 00:09:36,530 --> 00:09:38,530 id-daqs tal-blokk kbir ta 'memorja. 137 00:09:38,530 --> 00:09:42,530 Dan mhuwiex normalment wisq ta 'restrizzjoni peress li aħna rari ħafna rridu id-daqs 138 00:09:42,530 --> 00:09:46,980 tal-blokk kbir ta 'memorja, u nistgħu normalment jikkalkulaw jekk għandna bżonn dan. 139 00:09:46,980 --> 00:09:51,490 >> Fl-aħħarnett, l-array parentesi jiġri li tagħtina shortcut għal initializing firxa. 140 00:09:51,490 --> 00:09:56,130 Ejja naraw kif nistgħu tikteb l-ewwel 10 interi anke bl-użu tal initilization shortcut. 141 00:10:11,220 --> 00:10:14,470 Bl-firxa pointer, ma jkunx hemm mod biex jagħmlu shortcut bħal dan. 142 00:10:14,470 --> 00:10:18,120 Dan huwa biss introduzzjoni għal dak li inti tista 'tagħmel ma' arrays. 143 00:10:18,120 --> 00:10:20,990 Huma juru up fi kważi kull program li tikteb. 144 00:10:20,990 --> 00:10:24,390 Nisperaw inti issa tista tara mod aħjar biex nagħmlu l-eżempju istudent IDs 145 00:10:24,390 --> 00:10:26,710 mill-bidu tal-video. 146 00:10:26,710 --> 00:10:29,960 >> Jisimni Rob Bowden, u dan huwa CS50.