[Powered by Google Translate] Ejja nitkellmu dwar arrays.
Allura għaliex kieku aħna qatt tixtieq li tuża arrays?
Well ejja ngħidu li għandek program li jeħtieġ li jaħżen IDs istudent 5.
Jista 'jidher raġonevoli li jkollhom 5 varjabbli separati.
Għal raġunijiet aħna ser tara fil daqsxejn, aħna ser tibda tgħodd minn 0.
Il-varjabbli aħna ser ikollhom se jkun id0 int, ID1 int, u l-bqija.
Kull loġika irridu li jwettqu fuq ID student se jeħtieġu li jiġu kkupjati u pasted
għal kull wieħed minn dawn IDs student.
Jekk irridu li jiċċekkjaw li l-istudenti jinzertaw fl-CS50,
aħna ser ewwel bżonn li jiċċekkja jekk il id0 tirrappreżenta l-istudent fil-kors.
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
u ibdel kull okkorrenza ta 'id0 ma ID1 u dan ikompli sejjer għal ID2, 3, u 4.
>> Hekk kif inti tisma li għandna bżonn li kopja u paste,
inti għandek tibda taħseb li hemm soluzzjoni aħjar.
Issa dak li jekk inti tirrealizza inti m'għandekx bżonn IDs student 5, iżda pjuttost 7?
Ikollok bżonn li jmorru lura fis-source code tiegħek u żid fi ID5, l ID6,
u kopja u paste tal-loġika għall-iċċekkjar jekk l-IDs jappartjenu għall-klassi għal dawn IDs 2 ġodda.
M'hemm xejn li jgħaqqdu dawn IDs flimkien, u b'hekk m'hemm l-ebda mod ta 'tistaqsi
il-programm li jagħmel dan IDs 0 sa 6.
Ukoll issa inti tirrealizza li għandek IDs student 100.
Huwa jibdew jidhru inqas minn ideali għall-ħtieġa li separatament jiddikjaraw kull wieħed minn dawn IDs,
u kopja u paste xi loġika għal dawk IDs ġodda.
Imma forsi aħna determinati, u nagħmlu dan għall-istudenti kollha 100.
Imma x'jiġri jekk inti ma taf kif ħafna studenti hemm fil-fatt huma?
Hemm biss xi studenti n u l-programm tiegħek għandu jitlob lill-utent dak li n hija.
Uh oh. Dan mhux sejjer jaħdem tajjeb ħafna.
Program tiegħek jaħdem biss għal xi numru kostanti ta 'studenti.
>> Solving kollha ta 'dawn il-problemi hija l-sbuħija ta' arrays.
Allura x'inhi l-firxa?
F'xi lingwi ta 'programmar' tip firxa tista 'tkun kapaċi li jagħmlu ftit aktar,
iżda hawnhekk aħna ser tiffoka fuq l-istruttura tad-data bażika firxa eżatt kif tkun taf tara fil C.
Firxa huwa biss blokk kbir ta 'memorja. Li minnu.
Meta ngħidu li għandna firxa ta '10 numri interi, li sempliċiment ifisser li għandna xi blokk
ta 'memorja li huwa kbir biżżejjed biex iżomm 10 interi separati.
Jekk wieħed jassumi li integer huwa ta '4 bytes, dan ifisser li l-firxa ta' 10 numri interi
huwa blokk kontinwu ta '40 bytes fil-memorja.
Anke meta tuża arrays multidimensjonali, li aħna mhux se jmorru fl għal hawn,
huwa għadu biss blokk kbir ta 'memorja.
Il-notazzjoni multidimensjonali hija biss konvenjenza.
Jekk għandek 3 minn 3 firxa multidimensjonali tan-numri interi,
imbagħad programm tiegħek se verament ftit jittratta dan bħala blokk kbir ta '36 bytes.
In-numru totali ta 'numri interi huwa 3 darbiet 3, u kull numru sħiħ jieħu 4 bytes.
>> Ejja tagħti ħarsa lejn eżempju bażiku.
Nistgħu naraw hawn 2 modi differenti ta 'arrays tiddikjara.
Aħna ser ikollhom biex jikkummentaw 1 minnhom barra għall-programm biex jikkompilaw
peress li aħna tiddikjara x darbtejn.
Aħna ser tagħti ħarsa lejn uħud mill-differenzi bejn dawn it-tipi 2 ta 'dikjarazzjonijiet fil-daqsxejn.
Dawn iż-żewġ linji jiddikjara firxa ta 'N-daqs,
fejn għandna # jiddefinixxu N bħala 10.
Aħna jistgħu daqstant faċilment talbu l-utent għal numru sħiħ pożittiv
u użati li integer bħala għadd ta 'elementi fil-firxa tagħna.
Bħal eżempju tagħna ID student qabel, dan huwa tip ta 'bħal tiddikjara 10 kompletament separat
varjabbli immaġinarja; X0, x1, x2, u hekk sa Xn-1.
Jinjora l-linji fejn aħna tiddikjara l-firxa, l-avviż il-parentesi kwadri intatti
ġewwa l-għal-linji.
Meta aħna tikteb xi ħaġa bħal x [3], li jien ser biss jaqra kif x bracket 3,
inti tista 'taħseb li bħal titlob għall-x3 immaġinarja.
Avviż minn ma 'firxa ta' daqs N, dan ifisser li n-numru ta 'ġewwa tal-parentesi,
li aħna ser sejħa-indiċi, jista 'jvarja minn 0 sa N-1,
li huwa total ta 'indiċijiet N.
>> Biex jaħsbu dwar kif dan attwalment xogħlijiet
ftakar li l-firxa hija blokk kbir ta 'memorja.
Jekk wieħed jassumi li integer huwa ta '4 bytes, il-x array kollu huwa blokk 40 byte ta 'memorja.
Allura x0 jirreferi għall-ħafna ewwel 4 bytes tal-blokka.
X [1] tirreferi għall-4 bytes u l-bqija.
Dan ifisser li l-bidu ta 'x hija l-programm qatt jeħtieġ li jżommu rekord ta'.
Jekk inti tixtieq li tuża x [400], allura l-programm jaf li dan huwa ekwivalenti
għal ftit 1600 bytes wara l-bidu ta 'x.
Where'd nikbru 1600 bytes minn? Huwa biss 400 darbiet 4 bytes kull numru sħiħ.
>> Qabel ma jimxu fuq, huwa ferm importanti li tirrealizza li fis-C
m'hemm l-ebda infurzar ta 'l-indiċi li nużaw fil-firxa.
Blokk kbir tagħna huwa biss 10 interi twil, iżda xejn se Yell fil us jekk aħna tikteb x [20]
jew saħansitra x [-5].
L-indiċi lanqas ma għandhom ikunu ta 'numru.
Jista 'jkun kull espressjoni arbitrarja.
Fil-programm nużaw il-i varjabbli mill-linja ta 'l-indiċi fil-firxa.
Dan huwa mudell komuni ħafna, looping minn i = 0 għat-tul tal-firxa,
u mbagħad tuża i bħala l-indiċi għall-firxa.
B'dan il-mod inti effettivament jirkbu fuq il-firxa kollha,
u inti tista 'jew tassenja lil kull post fil-firxa jew tagħmel użu minnha għal xi kalkolu.
>> Fl-ewwel linja, i jibda fil 0,
u għalhekk se jassenja lill-post 0 fil-firxa, il-valur 0 darbiet 2.
Imbagħad i żidiet, u aħna tassenja l-post ewwel fil-firxa tal-valur 1 żminijiet 2.
Imbagħad i żidiet għal darb'oħra u hekk sa aħna tassenja l-pożizzjoni N-1 fil-firxa
il-valur N-1 żminijiet 2.
Allura ħloqna firxa mal-ewwel 10 numri anke.
Forsi evens kien ikun l-isem daqsxejn aħjar għall-varjabbli milli x-
iżda li taw affarijiet bogħod.
It-tieni għall loop allura biss prints-valuri li aħna diġà maħżuna ġewwa tal-firxa.
>> Ejja nippruvaw li jmexxu l-programm ma 'żewġ tipi ta' dikjarazzjonijiet array
u tagħti ħarsa lejn l-output tal-programm.
Safejn nistgħu naraw, il-programm iġib ruħu bl-istess mod għaż-żewġ tipi ta 'dikjarazzjonijiet.
Ejja wkoll tagħti ħarsa lejn dak li jiġri jekk aħna jibdlu l-linja ewwel li tiqafx fuq N
iżda pjuttost jgħidu 10,000.
Lil hinn mill-aħħar tas-array.
Oops. Forsi inti stajt tidher dan qabel.
A tort segmentazzjoni ifisser programm tiegħek ġġarraf.
Inti tibda tara dawn meta inti touch oqsma tal-memorja inti m'għandekx tkun jmissu.
Hawnhekk aħna huma jmissu 10000 postijiet lil hinn mill-bidu ta 'x,
li evidentement huwa post fil-memorja aħna ma għandhom ikunu jmissux.
Allura ħafna minna probabbilment mhux se aċċidentalment tpoġġi 10000 minflok N,
imma dak jekk nagħmlu xi ħaġa aktar sottili bħal ngħidu tikteb inqas minn jew ugwali għal N
fil-kundizzjoni loop għall-kuntrarju inqas minn N.
Ftakar li l-firxa biss ikollu indiċi ta 'minn 0 sa N-1,
li jfisser li indiċi N hija lil hinn mill-aħħar tal-firxa.
Il-programm jista 'ma tiġrifa f'dan il-każ, iżda huwa għadu żball.
Fil-fatt, dan l-iżball huwa tant komuni li għandha f'isimha proprju huwa,
off sal-1 ta 'żball.
>> Li lilha għall-affarijiet bażiċi.
Allura x'inhuma l-differenzi kbar bejn it-tipi 2 ta 'dikjarazzjonijiet firxa?
Wieħed differenza hija fejn l-blokk kbir ta 'memorja tmur.
Fl-ewwel dikjarazzjoni, li jiena ser sejħa-tip bracket-array,
għalkemm dan huwa bl-ebda mod l-isem konvenzjonali,
se jmorru fuq il-munzell.
Billi fit-tieni, li jiena ser sejħa-tip pointer-array, din se jmorru fuq il-borġ.
Dan ifisser li meta l-prospetti funzjoni, il-firxa bracket awtomatikament se deallocated,
billi kif inti trid explicitily sejħa b'xejn fuq il-firxa pointer
jew inkella għandek nixxija memorja.
Barra minn hekk, il-firxa kategorija mhix attwalment varjabbli.
Dan huwa importanti. Huwa biss simbolu.
Inti tista 'taħseb li bħala kostanti li l-kumpilatur jagħżel għalik.
Dan ifisser li aħna ma tistax tagħmel xi ħaġa simili x + + mat-tip parentesi,
għalkemm dan huwa perfettament valida mat-tip pointer.
>> It-tip pointer hija varjabbli.
Għat-tip pointer, għandna 2 blokki separati ta 'memorja.
Il x varjabbli nnifisha hija maħżuna fil-munzell u huwa biss pointer wieħed,
iżda l-blokk kbir ta 'memorja hija maħżuna fuq il-borġ.
Il x varjabbli fuq il-munzell biss taħżen l-indirizz
tal-blokka kbira tal-memorja fuq il-munzell.
Wieħed implikazzjoni ta 'dan huwa l-daqs ta' l-operatur.
Jekk inti ssaqsi għall-daqs tal-array bracket, se jagħtik l-daqs tal-blokk kbir ta 'memorja,
xi ħaġa simili 40 bytes,
imma jekk inti ssaqsi għall-daqs tat-tip pointer ta 'firxa,
se jagħtik id-daqs ta 'l-x varjabbli innifsu, li fuq il-appliance huwa probabbli biss 4 bytes.
Bl-użu tat-tip pointer-array, huwa impossibbli li direttament jistaqsu għal
id-daqs tal-blokk kbir ta 'memorja.
Dan mhuwiex normalment wisq ta 'restrizzjoni peress li aħna rari ħafna rridu id-daqs
tal-blokk kbir ta 'memorja, u nistgħu normalment jikkalkulaw jekk għandna bżonn dan.
>> Fl-aħħarnett, l-array parentesi jiġri li tagħtina shortcut għal initializing firxa.
Ejja naraw kif nistgħu tikteb l-ewwel 10 interi anke bl-użu tal initilization shortcut.
Bl-firxa pointer, ma jkunx hemm mod biex jagħmlu shortcut bħal dan.
Dan huwa biss introduzzjoni għal dak li inti tista 'tagħmel ma' arrays.
Huma juru up fi kważi kull program li tikteb.
Nisperaw inti issa tista tara mod aħjar biex nagħmlu l-eżempju istudent IDs
mill-bidu tal-video.
>> Jisimni Rob Bowden, u dan huwa CS50.