>> [CHWARAE CERDDORIAETH]
DOUG LLOYD: Pob hawl.
Gweithio gyda sengl newidynnau yn hwyl 'n bert.
Ond beth os ydym am weithio gyda llawer o newidynnau,
ond nid ydym am gael criw o enwau gwahanol yn hedfan o gwmpas ein cod?
Yn yr achos hwn, araeau yn mynd i ddod i mewn 'n sylweddol' n hylaw.
Araeau yn ddata gwirioneddol sylfaenol strwythur ar gyfer unrhyw iaith raglennu
y byddwch yn eu defnyddio.
Ac maent yn wirioneddol, yn ddefnyddiol iawn, yn enwedig, fel y byddwn yn gweld, yn CS 50.
>> Rydym yn defnyddio araeau i ddal gwerthoedd yr un math data
mewn lleoliadau cof cyffiniol.
Hynny yw, ei fod yn ffordd y gallwn grŵp
criw o gyfanrifau gyda'i gilydd mewn cof neu griw o gymeriadau
neu'n arnofio mewn cof n sylweddol agos at ei gilydd ac yn gweithio
gyda hwy heb orfod rhoi pob un ei enw unigryw ei hun, a all
cael feichus ar ôl ychydig.
>> Yn awr, un ffordd o analogize arrays yw meddwl am eich post lleol
swyddfa am eiliad.
Felly cam i ffwrdd o raglennu a dim ond caewch eich llygaid
a delweddu yn eich meddwl eich swyddfa bost leol.
Fel arfer, yn y rhan fwyaf post swyddfeydd, mae 'na fanc mawr
blychau swyddfa bost ar y wal.
>> Amrywiaeth yn floc mawr o gof cyffiniol,
yr un ffordd ag y mae post banc yn eich swyddfa bost
yn lle mawr ar y wal y swyddfa bost.
Araeau wedi cael eu rhannu i mewn i bach, yn union blociau o faint o le,
Gelwir pob un ohonynt yn elfen, yn yr un ffordd ag y wal y swydd
swyddfa wedi ei rhannu i mewn i bach, yn union blociau o faint o le,
yr ydym yn galw blwch PO.
Mae pob elfen y rhesi yn gallu storio rhywfaint o ddata,
yn union fel pob blwch swyddfa'r post yn gallu i ddal rhywfaint o bost.
>> Beth ellir ei storio ym mhob elfen o yr amrywiaeth yn newidynnau o'r un data
math, megis int neu torgoch, dim ond fel ym mlwch eich swyddfa bost,
gallwch ond cyd-fynd pethau o fath tebyg,
megis llythyrau neu becynnau bach.
Yn olaf, gallwn gael gafael ar bob elfen o'r yr amrywiaeth yn uniongyrchol gan rif mynegai,
yn union fel y gallwn gael mynediad i'n swyddfa bost blwch trwy wybod ei rif blwch post.
Gobeithio, bod cyfatebiaeth yn eich helpu i gael eich pen
ar y syniad o araeau gan analogizing i rywbeth arall
eich bod yn ôl pob tebyg eisoes yn gyfarwydd â.
>> Yn C, yr elfennau o amrywiaeth yn mynegeio gan ddechrau o 0, nid o 1.
Ac mae hyn yn wirioneddol bwysig.
Ac yn wir, dyma pam yr ydym ni, yn CS 50, a pham y cyfrifiadur gwyddonwyr yn aml
fydd yn cyfrif o 0, yw oherwydd amrywiaeth C
mynegeio, a oedd bob amser yn dechrau ar 0.
Felly os amrywiaeth yn cynnwys elfennau n, elfen gyntaf y array
wedi ei lleoli yn mynegai 0, ac yr elfen olaf y rhesi
wedi ei leoli yn mynegai n minws 1.
Unwaith eto, os oes elfennau n yn ein array, y mynegai ddiwethaf yn n minws 1.
>> Felly, os oes gan ein array 50 elfen, mae'r elfen gyntaf wedi ei lleoli yn mynegai 0,
a'r elfen olaf wedi ei leoli yn fynegai 49.
Yn anffodus, neu yn ffodus, yn dibynnu ar eich safbwynt,
C yn drugarog iawn yma.
Ni fydd yn eich atal rhag mynd allan waharddedig o'ch arae.
Gallech gael mynediad i'r minws 3 elfen o'ch array
neu elfen 59fed eich array, os mai dim ond gan eich array 50 elfen.
Ni fydd yn atal eich rhaglen o lunio, ond ar adeg ei redeg,
efallai y byddwch yn dod ar draws fai segmentu bondigrybwyll
os byddwch yn dechrau cael mynediad cof sydd y tu allan ffiniau'r hyn
gwnaethoch ofyn eich rhaglen i roi i chi.
Felly byddwch yn ofalus.
>> Beth mae amrywiaeth datganiad yn edrych?
Sut ydym ni'n cod amrywiaeth i fodolaeth fel rydym cod unrhyw newidyn arall?
Mae tair rhan i'r amrywiaeth declaration-- math, enw,
ac o faint.
Mae hyn yn debyg iawn i datganiad amrywiol, a oedd yn
yn unig yw math a enw, yr elfen maint yn
yr achos arbennig dros arae, oherwydd ein bod yn cael criw ohonynt
ar yr un amser.
>> Felly y math yw pa fath o newidyn chi am pob elfen y rhesi fod.
Peidiwch am iddo amrywiaeth o gyfanrifau?
Yna, dylai eich math data fod yn int.
Ydych chi am iddo fod yn amrywiaeth o dyblau neu arnofion?
Dylai math data fod yn dwbl neu arnofio.
Mae'r enw yn yr hyn yr ydych eisiau ffonio eich arae.
Beth ydych chi eisiau ei enwi cawr hwn banc o gyfanrifau neu fflotiau neu chars
neu yn dyblu, neu beth bynnag sydd gennych?
Beth ydych chi am ei alw?
Hunanesboniadol Pretty.
>> Yn olaf, maint, sy'n mynd tu mewn cromfachau sgwâr,
yw sut llawer o elfennau y byddech fel eich amrywiaeth o gynnwys.
Faint o gyfanrifau ydych chi eisiau?
Faint o fflotiau ydych chi eisiau?
>> Felly, er enghraifft, int graddau i fyfyrwyr 40.
Mae hyn yn datgan amrywiaeth o'r enw Fyfyrwyr graddau, sy'n cynnwys 40 o gyfanrifau.
Hunanesboniadol Pretty, yr wyf yn gobeithio.
Dyma enghraifft arall.
Prisiau dewislen Dwbl 8.
Mae hyn yn creu amrywiaeth o'r enw Prisiau Dewislen, sy'n cynnwys
o le er cof am wyth dyblau.
>> Os ydych yn meddwl am bob elfen o amrywiaeth o fath data-math,
felly er enghraifft, yn elfen unigol o amrywiaeth o'r math int, yr un modd i chi
Byddai meddwl am unrhyw un arall amrywiol o fath int,
yr holl weithrediadau cyfarwydd ein bod yn a drafodwyd yn flaenorol yn y Gweithrediadau
Bydd fideo yn gwneud synnwyr.
Felly dyma, gallem ddatgan amrywiaeth o Booleans elwir Truthtable,
sy'n cynnwys lle i 10 o Booleans.
>> Ac yna, yn union fel y gallem jyst aseinio gwerth at unrhyw newidyn arall o'r math
Boole, gallem ddweud rhywbeth fel Truthtable braced sgwâr
2, a dyna sut yr ydym yn nodi, pa elfen o'r tabl gwir?
Y drydedd elfen yn y tabl gwirionedd, gan fod yn cofio,
rydym yn cyfrif o 0.
Felly dyna sut yr ydym yn dangos yr trydedd elfen o'r tabl gwirionedd.
Truthtable 2 yn dychwelyd ffug, yn union fel y gallem declare--
neu gallem neilltuo, yn hytrach, unrhyw Newidyn math Boole bod yn ffug.
>> Gallwn hefyd ddefnyddio mewn amodau.
os (truthtable 7 == yn wir), sef ei ddweud,
os bydd yr elfen wythfed o Truthtable yn wir,
efallai rydym eisiau argraffu neges i'r defnyddiwr, printf ("n WIR!") ;.
Mae hynny'n ein peri i ddweud Truthtable 10 yn dychwelyd yn wir, dde?
Wel, yr wyf yn gallu, ond mae'n eithaf beryglus, gan fod yn cofio,
mae gennym amrywiaeth o 10 o Booleans.
Felly mae'r mynegai uchaf y mae'r compiler wedi rhoi i ni yw 9.
>> Bydd y rhaglen hon yn llunio, ond os rhywbeth arall er cof
yn bodoli lle byddem yn disgwyl i Truthtable 10 i fynd,
gallem ddioddef nam segmentu. Rydym yn Gallai gael i ffwrdd ag ef, ond yn gyffredinol,
'n bert beryglus.
Felly, yr hyn yr wyf i'n ei wneud yma yw C cyfreithiol, ond nid o reidrwydd y symud gorau.
Nawr, pan fyddwch yn datgan a ymgychwyn amrywiaeth yr un pryd,
mae mewn gwirionedd yn 'n bert cystrawen arbennig sy'n eich
Gall eu defnyddio i lenwi y rhesi gyda'i werthoedd cychwyn.
Gall fynd yn feichus i yn datgan amrywiaeth o faint 100,
ac mae'n rhaid wedyn i ddweud, elfen 0 yn dychwelyd hwn; Elfen 1 yn dychwelyd hwn;
Elfen 2 yn dychwelyd hynny.
Beth yw'r pwynt, dde?
>> Os yw'n amrywiaeth bach, yr ydych Gallai gwneud rhywbeth fel hyn.
Bool truthtable 3 yn dychwelyd agored Brace cyrliog ac yna atalnod
gwahanu y rhestr o elfennau eich bod am roi yn y rhesi.
Yna cau hanner colon Brace cyrliog.
Mae hyn yn creu amrywiaeth o Maint y tri enw Truthtable,
gydag elfennau ffug, yn wir, ac yn wir.
Ac yn wir, y instantiation cystrawen gennyf yma yw
yn union yr un fath â gwneud y Elfen cystrawen unigol isod.
Mae'r ddwy ffordd o godio fyddai cynhyrchu'r un casgliad union.
>> Yn yr un modd, gallem ailadrodd dros yr holl elfennau
o amrywiaeth ddefnyddio dolen, sydd, yn gwirionedd, yn argymhellir yn gryf iawn
yn y cartref ymarfer corff.
Sut ydych chi'n creu amrywiaeth o 100 o cyfanrifau, lle
pob elfen y rhesi yw ei mynegai?
Felly, er enghraifft, mae gennym amrywiaeth o 100 cyfanrifau, ac yn yr elfen gyntaf,
rydym eisiau rhoi 0.
Yn yr ail elfen, rydym eisiau rhoi 1.
Yn y drydedd elfen, rydym am i roi 2; ac yn y blaen ac yn y blaen.
Mae hynny'n wirioneddol dda yn-y cartref ymarfer corff i wneud hynny.
>> Yma, nid yw'n edrych fel gormod wedi newid.
Ond yn sylwi bod mewn rhwng yr cromfachau sgwâr, y tro hwn,
Fi 'n weithredol wedi hepgor y rhif.
Os ydych yn defnyddio hyn yn iawn instantiation arbennig
cystrawen i greu array, rydych nid yn ei wneud
Mae angen i ddangos faint y rhesi o flaen llaw.
Mae'r compiler yn ddigon craff i wybod bod chi mewn gwirionedd
eisiau amrywiaeth o faint 3, oherwydd eich bod yn rhoi tair elfen
ar y dde o'r arwydd cyfartal.
Os byddwch wedi rhoi pedwar, byddai'n cael Rhoddir tabl gwirionedd o faint pedwar chi;
ac yn y blaen ac yn y blaen.
>> Nid yw Araeau yn cael eu cyfyngu i un dimensiwn, sydd yn eithaf oer.
Gallwch chi mewn gwirionedd yn cael cymaint o rhagnodwyr ochr fel y dymunwch.
Felly er enghraifft, os ydych am greu bwrdd ar gyfer y gêm Llong Ryfel, a oedd,
os ydych chi erioed wedi chwarae, yn gêm sy'n chwarae gyda pegiau ar 10 o 10 grid,
gallech greu amrywiaeth fel hyn.
Fe allech chi ddweud Bool ryfel braced sgwâr 10
ar gau sgwâr braced sgwâr braced 10 gau braced sgwâr.
>> Ac yna, gallwch ddewis dehongli hyn yn eich meddwl fel 10
10 grid o gelloedd.
Yn awr, mewn gwirionedd, er cof, mae'n wir yn unig
parhau i fod yn elfen 100, amrywiaeth sengl dimensiwn.
Ac mae hyn, mewn gwirionedd, yn mynd am os ydych yn wedi tri dimensiwn neu bedwar neu bump.
Mae wir yn unig yn lluosi pob un o'r indices--
neu bob un o'r maint specifiers-- gyda'i gilydd,
a 'ch jyst cael un-dimensiwn amrywiaeth o'r maint hwnnw.
>> Ond o ran trefniadaeth a delweddu a chanfyddiad dynol,
gall fod yn llawer haws i weithio gyda grid
os ydych yn gweithio ar gêm fel Tic-tac-blaen neu Llong Ryfel,
neu rywbeth fel 'na.
Mae'n tynnu mawr, yn lle cael
i feddwl am Tic-tac-blaen bwrdd fel llinell o naw
sgwariau neu fwrdd Llong Ryfel fel llinell o 100 sgwariau.
Mae 10 o 10 grid neu dri gan dri grid yn ôl pob tebyg
llawer mwy hawdd i'w gweld.
>> Yn awr, rhywbeth gwirioneddol bwysig am araeau.
Gallwn drin pob unigolyn elfen y rhesi fel newidyn.
Gwelsom fod cynharach pan oeddem yn aseinio
mae'r gwerth Gwir i rai Booleans neu eu profi mewn conditionals.
Ond ni allwn drin cyfan Araeau eu hunain fel newidynnau.
Ni allwn, er enghraifft, yn aseinio un array i amrywiaeth arall gan ddefnyddio aseiniad
gweithredwr.
Nid yw'n C. cyfreithiol
>> Os ydym am, er example-- beth byddem yn ei wneud yn yr enghraifft honno
fyddai i gopïo un amrywiaeth mewn i un arall.
Os ydym am wneud hynny, rydym mewn gwirionedd angen defnyddio dolen i gopïo drosodd
bob elfen unigol un ar y tro.
Dwi'n gwybod ei fod ychydig cymryd llawer o amser.
>> Felly, er enghraifft, pe bai gennym y cwpl o linellau o god, byddai hyn yn gweithio?
Wel, na, na fyddai, dde?
Oherwydd ein bod yn ceisio i neilltuo bwyd bar.
Dyw hynny ddim yn mynd i weithio, am ei fod yn amrywiaeth,
ac yr ydym newydd ei ddisgrifio nad yw hynny'n C. cyfreithiol
>> Yn lle hynny, os ydym am copïo cynnwys y bwyd
i mewn i far, sef yr hyn ydym yn ceisio ei wneud yma,
byddai angen i cystrawen fel hyn arnom.
Mae gennym dros ddolen sy'n mynd o J yn hafal i 0 hyd at 5,
ac yr ydym yn cynyddiad J ar bob fersiwn o y ddolen ac elfennau aseinio fel 'na.
Byddai hyn yn arwain at bar hefyd bod yn un, dau, tri, pedwar, pump,
ond mae'n rhaid i wneud ei hyn iawn ffordd araf elfen-wrth-elfen,
yn hytrach na gan ddim ond copïo yr amrywiaeth cyfan.
Mewn rhaglenni eraill ieithoedd, rhai mwy modern,
gallwch chi, mewn gwirionedd, yn gwneud dim ond mor syml â hynny hafal cystrawen.
Ond yn C, yn anffodus, rydym yn Ni chaniateir i wneud hynny.
>> Yn awr, mae un arall beth yr wyf am sôn am
am araeau a all fod ychydig ychydig yn anodd y tro cyntaf y byddwch yn
gweithio gyda nhw.
Buom yn trafod mewn fideo am cwmpas amrywiol,
bod y rhan fwyaf newidynnau yn C, pan fyddwch yn ffonio iddynt mewn swyddogaethau, yn cael eu pasio gan werth.
Ydych chi'n cofio beth mae'n ei olygu i basio rhywbeth yn ôl gwerth?
Mae'n golygu ein bod yn gwneud copi o'r newidyn sy'n cael ei basio i mewn.
Mae'r swyddogaeth callee, y swyddogaeth sy'n derbyn y newidyn,
nid yw'n cael y newidyn ei hun.
Mae'n cael ei lleol eu hunain copi ohono i weithio gyda nhw.
>> Araeau, wrth gwrs, yn gwneud Nid yw dilyn y rheol hon.
Yn hytrach, yr hyn yr ydym yn galw hyn yn mynd heibio drwy gyfeirio.
Mae'r callee mewn gwirionedd yn derbyn y rhesi.
Nid yw'n cael ei copi lleol eu hunain ohono.
Ac os ydych yn meddwl am hynny, mae hyn yn gwneud synnwyr.
Os araeau yn wirioneddol fawr, mae'n yn cymryd cymaint o amser ac ymdrech
i wneud copi o amrywiaeth o 100 neu 1,000 neu 10,000 o elfennau,
nad yw'n werth ei gyfer swyddogaeth i dderbyn copi ohono,
wneud rhywfaint o waith gydag ef, ac yna dim ond yn cael ei wneud gyda'r copi;
Nid oes angen iddo gael mae'n hongian o gwmpas anymore.
>> Oherwydd bod araeau rai swmpus ac yn feichus,
rydym yn unig yn eu pasio drwy gyfeirio.
Rydym yn unig yn ymddiried yn y swyddogaeth honno i, nid yn torri unrhyw beth.
Felly yw'n mewn gwirionedd yn cael y rhesi.
Nid yw'n cael ei chopi lleol eu hunain ohono.
>> Felly beth mae hyn yn ei olygu, Yna, pan fydd y callee
yn trin elfennau o'r arae?
Beth sy'n Digwydd?
Am y tro, byddwn yn sglein dros pam yn union mae hyn
digwydd, pam araeau yn cael eu trosglwyddo trwy gyfeirio
a phopeth arall yn cael ei basio yn ôl gwerth.
Ond yr wyf yn addo i chi, byddwn yn dychwelyd a rhoi'r ateb i chi
at hyn mewn fideo diweddarach.
>> Dyma un ymarfer mwy i chi cyn i ni lapio fyny pethau ar araeau.
Mae criw o cod yma, dyna Nid yw yn arbennig o arddull da,
dim ond byddaf yn gwneud hynny cafeat.
Does dim sylwadau yn fan hyn, sydd yn ffurf eithaf gwael.
Ond dim ond am fy mod i eisiau bod gallu ffitio popeth ar y sgrin.
>> Ar y brig, gallwch weld bod gen i dau ddatganiad swyddogaeth ar gyfer amrywiaeth penodol
a gosod int.
Array Set ôl pob golwg yn cymryd amrywiaeth o bedwar gyfanrifau fel ei fewnbwn.
Ac int set yn ôl pob golwg yn cymryd cyfanrif unigol fel ei fewnbwn.
Ond nid oes rhaid i allbwn ddau ohonynt.
Mae'r allbwn, y ffurflen teipio, bob un yn ddi-rym.
Yn Main, mae gennym cwpl o linellau o god.
Rydym yn datgan newidyn cyfanrif Gelwir a benodi ei werth 10.
Rydym yn datgan amrywiaeth o bedwar gyfanrifau Gelwir B ac aseinio'r elfennau 0, 1,
2, a 3, yn y drefn honno.
Yna, mae gennym galwad i osod int a galwad i osod amrywiaeth.
Mae diffiniadau o amrywiaeth set a set int i lawr isod, ar y gwaelod.
>> Ac felly, unwaith eto, yr wyf yn gofyn y cwestiwn i chi.
Hyn sy'n cael ei argraffu yma ar ddiwedd Main?
Mae 'na col allbrint. Rwy'n argraffu dau rif cyfan.
Dw i'n argraffu'r cynnwys A ac cynnwys y B braced sgwâr 0.
Oedi y fideo yma ac gymryd munud.
Allwch chi chyfrif i maes beth mae hyn Bydd swyddogaeth argraffu ar y diwedd?
Gobeithio, os ydych yn cofio y gwahaniaethu rhwng pasio yn ôl gwerth
ac yn pasio drwy gyfeirio, mae hyn yn Nid problem yn rhy anodd i chi.
A'r ateb y byddech wedi dod o hyd yn hyn.
Os nad ydych yn siŵr ynglŷn â pam yw hynny'n wir, gymryd ail,
mynd yn ôl, yn adolygu'r hyn yr wyf yn unig oedd trafod am pasio araeau
drwy gyfeirio, yn erbyn pasio newidynnau eraill yn ôl gwerth,
a gobeithio, bydd yn gwneud ychydig bach mwy o synnwyr.
>> Rwy'n Doug Lloyd, ac mae hyn yn CS50.