>> [CHWARAE CERDDORIAETH]
>> DOUG LLOYD: OK.
Rydym wedi gweithio gyda chyfanrifau, rydym wedi gweithio gyda chymeriadau,
rydym wedi gweithio fflotiau, dyblau, llinynnau, a bools.
Rydym wedi blino'n lân 'n bert lawer pob y [Anghlywadwy] mathau sy'n
wedi bod ar gael i ni i gyd ar hyd.
Ond yn awr yr ydym am wneud rhywbeth mwy.
Sut rydym yn gwneud hynny?
Sut rydym yn creu gwahanol fathau o ddata?
Gallwn wneud hynny drwy ddefnyddio strwythurau.
Felly strwythurau yn ein galluogi i uno newidynnau o wahanol fathau
i mewn i fath newidyn sengl, newydd, y gallwn aseinio ei henw fath ei hun.
Mae hwn yn wirioneddol gryf beth i fod yn gallu ei wneud,
oherwydd ein bod yn gallu nawr grŵp elfennau o wahanol fathau o ddata
ynghyd sydd â chysylltiad rhesymegol.
Rydym wedi bod yn gallu gwneud hyn gyda arrays fath o, dde?
Gallwn newidynnau grŵp o'r un math data
gyda'i gilydd mewn uned fawr o gof, amrywiaeth.
>> Ond nid ydym wedi gallu cymysgu i fyny o wahanol fathau o ddata at ei gilydd.
Ni allwn, yn dweud, pâr yn gyfanrif, ac yn gymeriad, a dwbl i gyd
yn yr un peth a yn galw bod un uned.
Ond gyda strwythurau, neu y cyfeirir atynt yn aml fel structs,
rydym mewn gwirionedd yn gallu.
Felly strwythur yn didoli o fel newidyn super.
Mae'n newidyn sy'n cynnwys newidynnau eraill tu mewn iddo.
Felly dyma enghraifft o strwythur syml iawn.
Mae hyn yn hyn y byddai'r gystrawen yn edrych yn hoffi i greu strwythur ar gyfer car.
Yn awr, gadewch i ni fynd drwy'r gystrawen yma.
Struct, dyna'r gair allweddol sy'n dangos
fy mod i'n creu math data newydd yma.
Yn benodol, enw y math data yn mynd i fod yn gar struct, fel y byddwn yn gweld.
Ond mae hyn yn y math o domen ffwrdd i'r casglwr bod hyn
fel grŵp o newidynnau sy'n mynd i gael ei ystyried yn rhan o'r un math
mewn munud.
>> Cars, dim ond enw'r strwythur.
Unwaith eto, y math data yma yn mynd i fod car struct, nid dim ond car.
Ond os oes gennych different-- os ydych yn creu structs lluosog
yn yr un rhaglen, mae angen i chi gwahaniaethu rhwng struct a struct.
Car Felly struct, efallai y byddwn hefyd yn cael myfyriwr struct, er enghraifft,
yn yr un rhaglen.
Y tu mewn i'r braces cyrliog yn pob un o'r caeau hyn a elwir yn,
neu aelodau o'r strwythur.
Felly beth yw rhai o'r pethau sy'n gynhenid ​​mewn car?
Wel, mae fel arfer mae gan y flwyddyn, wedi enw model, a phlât trwydded,
mae odomedr sydd fel arfer rhyw nifer y milltiroedd arno,
ac efallai bydd maint yr injan.
Ac fel y gwelwch, dw i'n cymysgu i fyny cyfanrifau a chymeriadau a dyblau.
Maen nhw i gyd yn mynd i fod yn rhan o'r math hwn o ddata newydd.
>> Yn olaf, y peth olaf mae angen i mi ei wneud, peidiwch ag anghofio hanner colon bach hwn
Yn y diwedd.
Ar ôl i ni orffen diffinio'r strwythur, mae angen i ni roi hanner colon ar y diwedd.
Mae'n cystrawennol gyffredin iawn camgymeriad, gan fod â swyddogaeth,
er enghraifft, byddech yn unig wedi Brace cyrliog agored, Brace cyrliog agos.
Nid ydych yn rhoi hanner colon yn y diwedd diffiniad swyddogaeth.
Mae hyn yn edrych fel swyddogaeth ddiffiniad, ond nid yw'n,
ac felly mae'r hanner colon yno yn unig yw ein hatgoffa bod chi
Mae angen i roi yno, oherwydd fel arall mae'r compiler ni fydd
yn gwybod beth i'w wneud ag ef.
Mae'n gamgymeriad cyffredin iawn i wneud yn ddamweiniol
pan fyddwch yn diffinio strwythurau gyntaf.
>> IAWN.
Felly, rydym fel arfer yn diffinio ein strwythurau ar frig ein rhaglenni
oherwydd yn ôl pob tebyg maen nhw'n mynd i'w defnyddio gan swyddogaethau lluosog.
Nid ydym am i ddiffinio struct tu mewn swyddogaeth,
oherwydd wedyn gallwn only-- y cwmpas y strwythur mewn gwirionedd
ond yn bodoli y tu mewn y swyddogaeth honno.
Mae'n debyg byddem yn awyddus i ddiffinio strwythur fel y gallwn ei defnyddio mewn swyddogaethau lluosog,
neu efallai mewn aml ffeiliau sy'n cael eu clymu at ei gilydd
i greu ein rhaglen sengl.
Weithiau hefyd yn lle hynny o ddiffinio strwythur
ar yr union top lle rydych yn rhoi eich bunt yn cynnwys a'ch punt yn diffinio,
er enghraifft, efallai y byddwch yn eu rhoi mewn ffeiliau dot h wahân, yr ydych wedyn yn
bunt yn cynnwys chi eich hun.
>> Felly mae gennym strwythurau, ond erbyn hyn mae angen i ni fynd i mewn ohonynt.
Sut ydym yn mynd y tu mewn o strwythur i fynediad
yr is-newidynnau, newidynnau hynny sy'n bodoli y tu mewn i'r strwythur?
Wel, mae gennym rywbeth o'r enw gweithredwr y dot, sy'n ein galluogi
i gael mynediad at y meysydd y strwythur.
Felly, er enghraifft, gadewch i ni ddweud fy mod i wedi datgan fy nata strwythur teipiwch rhywle
ar ben fy rhaglen, neu efallai mewn ffeil dot h fy mod i wedi punt cynnwys.
Os wyf Yna eisiau creu newydd amrywiol o'r math data, gallaf ddweud,
car struct, fy nghar, hanner colon.
Yn union fel yr wyf yn gallai ddweud int x, neu enw llinyn hanner colon.
>> Y math data yma yw car struct, enw'r newidyn yw fy car,
ac yna gallaf ddefnyddio'r dot gweithredwr gael mynediad at y gwahanol feysydd o fy nghar.
Felly, gallaf ddweud fy nghar dot flwyddyn yn cyfateb 2011 ymlaen.
Mae hynny'n berffaith iawn.
Flwyddyn, os cofiwch, Diffiniwyd fel maes cyfanrifol tu mewn y car struct
Math o ddata.
Felly unrhyw newidyn o ddata car struct math, megis fy car, gallaf ddweud fy nghar
dot flwyddyn yn cyfateb ac yna aseinio mae'n rhywfaint o werth cyfanrif, 2011 ymlaen.
Mae fy dot car plât hafal CS50.
Fy ngherdyn dot odomedr yn hafal i 50,505 hanner colon.
Mae pob un o'r rheini'n berffaith iawn a dyna
sut yr ydym yn cael mynediad i'r meysydd y strwythur.
Strwythurau, fodd bynnag, nid oes angen i gael eu creu ar y corn.
Yn union fel unrhyw newidyn arall, rydym Gall ddyrannu iddynt ddynamig.
Os oes gennym raglen y gallai yn cynhyrchu llawer o strwythurau,
nid ydym yn gwybod faint o rydym yn mynd i angen,
yna mae angen i ddeinamig dyrannu strwythurau hynny
gan fod ein rhaglen yn rhedeg.
Ac felly os ydym yn mynd i gael mynediad i'r meysydd strwythur yn y cyd-destun,
dwyn i gof y mae angen yn gyntaf i ni i dereference pwyntydd i'r strwythur,
ac yna ar ôl i ni dereference y pwyntydd, yna gallwn gael mynediad i'r caeau.
Os mai dim ond un Pointer i'r strwythur,
ni allwn dim ond dweud pwyntydd dot cae enwi a chael yr hyn rydym yn chwilio amdano.
Mae y cam ychwanegol o dereferencing.
Felly, gadewch i ni ddweud bod yn hytrach na'r previous--
yn union fel yr enghraifft flaenorol, yn hytrach na datgan ei
ar y simnai, car struct, fy car, hanner colon, yr wyf yn dweud car struct,
seren, pwyntydd i car struct enw fy car,
yn hafal i faint malloc o gar struct.
Maint y fe wnawn ni chyfrif i faint o bytes eich math data newydd yn dechrau.
Nid ydynt o reidrwydd yn unig angen i chi ddefnyddio maint, lled, int, neu torgoch, neu unrhyw
o'r mathau data adeiledig yn.
Mae'r compiler yn ddigon craff at chyfrif i maes faint o bytes
Mae'n ofynnol gan eich strwythur newydd.
Felly yr wyf yn malloc fy hun yn uned o gof ddigon mawr i ddal car struct,
ac yr wyf yn cael pwyntydd yn ôl i'r bloc o cof,
ac y pwyntydd cael ei neilltuo i fy nghar.
>> Yn awr, os ydw i eisiau mynediad meysydd fy nghar,
Yn gyntaf dereference fy nghar i mi ddefnyddio gweithredwr dereference, seren
ein bod wedi gweld o'r awgrymiadau fideos, ac yna ar ôl i mi dereference,
yna gallaf ddefnyddio'r dot gweithredwr gael mynediad at y gwahanol feysydd o fy nghar.
Seren fy nghar dot flwyddyn yn cyfateb 2011 ymlaen.
Byddai hynny'n cael yr effaith yr ydym am yn yr achos hwn,
oherwydd ein bod i wedi ddynamig ddyrannu fy nghar.
>> Dyna fath o blino, fodd bynnag, dde?
Mae proses 2 gam yn awr.
Nawr mae'n rhaid i ni dereference-- mae gennym gweithredwr seren,
ac mae gennym gweithredwr dot.
Ac fel y gallech ddisgwyl, gan fod Rhaglenwyr C caru ffyrdd byrrach
i wneud pethau, mae ffordd byrrach i wneud hyn.
Mae weithredwr arall o'r enw saeth, sy'n gwneud y broses hon yn llawer haws.
Mae'r ffordd y saeth gweithio yw mae'n dereferences cyntaf
pwyntydd ar y chwith ochr y gweithredydd,
ac yna, ar ôl dereferenced pwyntydd ar y chwith,
mae'n mynedfeydd y cae ar y dde.
Ac felly yn flaenorol oedd gennym y math hwn o seren fy nghar dot holl bethau hyn,
fel yr oedd llawer yn digwydd yno.
Ond beth allwn ni yn lle hynny wneud yw this-- fy mlwyddyn arrow car hafal 2011 ymlaen.
>> Unwaith eto, yr hyn sy'n digwydd yma?
Yn gyntaf, rwy'n dereferencing fy car.
Sydd unwaith eto, yn pwyntydd yma.
Yna, ar ôl cael dereferenced fy car, yr wyf yn
Yna, yn gallu cael mynediad i'r caeau flwyddyn, plât, a odomedr
yn union ag y gallwn cyn cael yn gyntaf seren a ddefnyddir i dereference fy car,
a dot i gael mynediad at y maes.
Felly, gallwch gael strwythurau, i chi gallu cael awgrymiadau i strwythurau,
ac mae gennych ffyrdd o fynediad meysydd strwythurau hynny,
a oes gennych awgrymiadau i nhw neu y newidynnau eu hunain.
Dot neu saeth, yn dibynnu ar sut y newidyn ei ddatgan.
Rwy'n Doug Lloyd, mae hyn yn CS50.