[Powered by Google Translate] Ejja nitkellmu dwar structs.
Structs tagħtina mod biex tiġbor mazz ta 'varjabbli flimkien
fis-pakkett sbieħ.
Huwa probabbilment aktar faċli li wieħed jara eżempju dritt bogħod,
hekk aħna ngħidu Struct,
imbagħad ftuħ Brace kaboċċi,
u f'dan Struct, aħna ser ikollhom l-età int,
isem char *,
u li hu.
Dan jista 'jidher stramb ma' punto virgola wara Brace kaboċċi,
iżda huwa fil-fatt meħtieġ mal structs.
Kwalunkwe tip valida tista 'tmur taħt id-definizzjoni Struct.
Hawnhekk, aħna ve użat int u * char,
imma int tista 'wkoll tuża firxa, tal jgħidu, 100 elementi
jew saħansitra ieħor Struct.
Meta inti qed tuża structs fis-C,
int ħolqien ta 'tipi ġodda
barra ta 'ġbir ta' tipi oħra.
Hawnhekk, aħna qed jagħmlu tip ġdid
minn integer u * char.
Kif Ser naraw aktar tard, tip Struct
huwa fil-lott ta 'modi ekwivalenti għal kwalunkwe tip ieħor int użati biex.
Normalment, I ser tkun jitqabblu kif tip Struct
huwa simili għal tip numru sħiħ.
Filwaqt li l-kodiċi aħna kiteb huwa C valida,
mhuwiex utli ħafna,
u clang se tagħtina twissija.
Ftakar kif structs u tagħha huma simili?
Ukoll, aħna bażikament biss qal
int,
li ma jkunx konformi utli ħafna.
Mela ejja attwalment tiddikjara varjabbli ta 'dak it-tip
billi jagħtuha l-isem qabel il-virgola.
Aħna ser sejħa-istudent varjabbli.
Issa aħna ve iddikjarat student imsejħa varjabbli
mat-tip mogħtija mill-Struct.
Kif se nilħqu dawn l-varjabbli ġewwa l-Struct?
Teknikament, l-ismijiet ta 'dawn il-varjabbli
huma membri.
Biex ikollok aċċess għal xi membru partikolari fi Struct student,
inti tehmeż dot għall-isem varjabbli,
segwit bl-isem tal-membru li trid.
Allura hawn, l-uniċi 2 possibbiltajiet validi
huma student.age
. student.name u
U nistgħu nagħmlu xi ħaġa simili
student.age = 12
u student.name. istudent =
Issa dak li jekk ridna li tagħmel student tieni?
Għandek mnejn taħseb li kopja u paste dawn il-linji
u l-bidla istudenti għall-istudenti 2 jew xi ħaġa,
u li se jaħdmu,
iżda teknikament, l-istudenti u l-istudenti 2
ma jkollhomx l-istess tip.
Ara, inti mhux ser ikunu jistgħu jassenjaw lill xulxin.
Dan għaliex, s'issa,
Struct tiegħek ġie anonimu.
Għandna bżonn li tagħtiha isem.
Biex tagħmel dan, aħna daħħal l-isem tal-Struct
wara l-Struct kelma.
student,
segwita mid-definizzjoni.
Nistgħu xorta immedjatament tiddikjara varjabbli ta 'tip
Struct student, bħal għamilna qabel.
Aħna ser sejħa hija S1
Billi tagħti l-Struct isem,
nistgħu issa jużaw istudent Struct
fi kważi bl-istess mod eżatt aħna se jużaw int.
Allura nistgħu tiddikjara varjabbli ta 'student Struct tip,
bħal
S2 student Struct.
Bħal arrays, structs jipprovdu sintassi inizjalizzazzjoni shortcut,
hekk nistgħu ngħidu, Struct student S2
ugwali
xellug kaboċċi Brace 3, S2.
Hawnhekk, S2.age se jkun 3,
u S2.name se jindika S2.
Think ta 'l-affarijiet inti tista' tagħmel ma 'tip int
u ħafna minnhom inti tista 'tagħmel ma' tip student Struct.
Nistgħu nużaw student Struct bħala tip ta 'parametru funzjoni.
Nistgħu nużaw student Struct ġewwa ta 'Struct ġdid.
Jista 'jkollna pointer li student Struct.
Nistgħu nagħmlu daqs ta 'student Struct.
Struct istudent huwa tip
bħad int huwa tip.
Nistgħu wkoll jassenja S1 sa S2
peress li kemm huma tal-istess tip, sabiex inkunu nistgħu nagħmlu
S1 =. S2
X'jiġri jekk nagħmlu
S1.age = 10?
Il-bidla S2 fil-livelli kollha?
Għal darb'oħra, think tal-structs biss bħala interi regolari.
Jekk aħna tassenja xi X int sa ċertu Y int,
bħall X = Y
u mbagħad bidla X,
bħal fil X + +,
ma Y bidla fil-livelli kollha?
Y ma tinbidilx hawn, u għalhekk lanqas ma S2 hawn fuq.
S2.age għadu 3.
Iżda jinnota li meta jassenjaw 1 Struct għall-ieħor,
kollha tal-pointers għadhom jindikaw li l-istess ħaġa,
peress li dawn kienu biss kkupjati.
Jekk inti ma tridx l-pointers li tkun maqsuma,
ikollok bzonn li manwalment jimmaniġġjaw dan,
forsi billi malicking blokka waħda ta 'memorja għal wieħed mill-indikaturi għall-punt li
u l-ikkupjar tad-data fuq.
Jista 'jkun annoying li jkollhom biex jiktbu student Struct kullimkien.
Permezz ta 'def tip, nistgħu nagħmlu
Tip def
Struct
u aħna ser sejħa hija student.
Issa, nistgħu nużaw l-istudenti kullimkien
li aħna użati biex jużaw istudent Struct.
Dan it-tip huwa def xi Struct anonimu
u jitlob li l-istudenti.
Imma jekk aħna wkoll iżommu l-identifikatur istudent
ħdejn il-Struct kelma, bħal fil student Struct typedef,
nistgħu jużaw kemm Struct student u student xulxin issa.
Huma ma jkollhomx li jkollhom l-istess isem.
Nistgħu tip istudenti Struct def li Bob
u mbagħad Struct student u Bob
Ikun tipi interkambjabbli.
Irrispettivament mill-def tip,
għandna bżonn l-identifikatur jmiss Struct
jekk id-definizzjoni ta 'l-Struct
huwa rikursivi.
Per eżempju,
Tip def Struct node
u se jiġi definit bħala val int
u din se jkollha pointer li l-punti għall-ieħor node Struct.,
bħal fil Struct node * jmiss.
U allura aħna ser sejħa hija node.
Dan Struct huwa rikursivi,
peress li d-definizzjoni ta node Struct jkun jinkludi l
pointer għal node Struct.
Avviż li rridu ngħidu Struct node * li jmiss
ġewwa tad-definizzjoni ta 'l-node Struct,
peress li l-def tip ma jkunx għadu lest biex inessu li tkun simplifikata din
għal ftit * node. jmiss
Int ser ikollok jitgħallmu aktar dwar structs simili għal din
meta jittrattaw mal-listi marbuta u siġar.
What about structs fil-funzjoni?
Dan huwa wkoll perfettament valida.
Aħna jista 'jkollhom
null funzjonijiet
li tieħu bħala argument,
istudent s
u ma xi ħaġa ma 'dak istudent.
U allura nistgħu jgħaddu bħala Struct student bħal dan.
Funzjoni tal S1 minn qabel.
Il Struct jaġixxi
eżatt kif integer kien meta għadda għal funzjoni.
Funzjonijiet tirċievi kopja ta 'S1
u għalhekk ma jistgħux jimmodifikaw S1;
pjuttost, biss il-kopja ta 'dan li l-maħżuna S.
Jekk trid li l-funzjoni li tkun tista 'timmodifika S1,
funzjonijiet ser ikollok bżonn tieħu * student S,
u inti ser ikollhom jgħaddu S1 mill-indirizz, bħal dan.
Student * S, funzjonijiet u S1.
Hemm raġuni oħra li jgħaddu minn indirizz hawn.
X'jiġri jekk Struct tagħna jinsab 100 oqsma?
Kull darba waħda aħna jgħaddu student funzjoni,
programm tagħna jeħtieġ li kopja kollha ta 'dawk l-oqsma 100 fis S argument funzjonament, il-
anke jekk qatt ma juża l-maġġoranza l-kbira minnhom.
Għalhekk anki jekk funzjoni ma pjan dwar timmodifika l-istudent,
jekk xorta tista 'tkun ta' valur li jgħaddu mill-indirizz.
Okay, dak li jekk irridu li tinħoloq pointer għal Struct?
Nistgħu nagħmlu xi ħaġa simili
student * S
ugwali malloc
daqs tal-istudent.
Avviż li d-daqs tal-għadu jaħdem hawn.
Allura kif nistgħu issa jaċċessaw il-membru età
tal-blokka li l-punti S sa?
Inti tista 'taħseb l-ewwel li jagħmlu
* S.age = 4,
iżda dan mhux se pjuttost xogħol.
Peress li dan se verament jiġi interpretat bħala li
* S.age fil-parentesi = 4,
li mhux saħansitra se jiġbor,
peress S mhix Struct jew pjuttost pointer għal Struct,
u għalhekk il-dot mhux se jaħdem hawn.
Nistgħu nagħmlu
(* S). Età = 4
iżda l-parentesi jistgħu jiksbu annoying u konfuża.
B'xorti tajba, aħna għandna operatur vleġġa speċjali
li tidher xi ħaġa bħal
S-> età = 4.
Dawn il-modi 2 ta 'referenzar età
huma ekwivalenti
u aħna ma verament qatt bżonn l-operatur vleġġa,
iżda jagħmel l-affarijiet ħarsa nicer.
Peress S hija pointer għal xi blokk ta 'memorja li fiha l-Struct,
inti tista 'taħseb età> S kif ġej il-vleġġa pointer
u grab-membru età.
Allura għaliex għandna qatt tuża structs?
Huwa ċertament possibbli li jitbiegħed mal biss l-interi primittiv,
Chars, pointers u simili
li aħna qed jintużaw biex;
minflok S1 u S2 qabel,
nistgħu kellhom age1, age2, name1, u name2
kollha fl varjabbli separati.
Dan huwa multa ma 'biss 2 istudenti,
imma dak jekk kellna 10 minnhom?
U jekk dak minflok biss 2 oqsma,
il Struct istudent kellu 100 oqsma?
GPA, korsijiet, kulur tax-xagħar, sess, u l-bqija.
Minflok biss 10 structs, għandna bżonn 1000 varjabbli separati.
Ukoll, jikkunsidraw il-funzjoni
li tieħu din Struct bi 100 oqsma l-argument biss tagħha
u tistampa oqsma kollha.
Jekk aħna ma użatx Struct,
kull wieħed ħin nitolbu dik il-funzjoni,
għandna bżonn li tgħaddi fil-varjabbli 100,
u jekk għandna 100 fatturi varjabbli għall-istudenti 1,
u 100 fatturi varjabbli għall-istudenti 2,
għandna bżonn biex tkun ċert aħna ma aċċidentalment jgħaddu xi varjabbli minn student 1
u xi varjabbli minn student 2.
Huwa impossibbli li jagħmlu dan żball ma 'Struct,
peress varjabbli kollha 100 jinsabu fil-pakkett wieħed.
Biss ftit ta 'noti finali:
Jekk inti ħadthom mifhum kollox sa dan il-punt, kbir.
Il-bqija tal-video huwa biss għall-finijiet kompletezza ".
Minħabba structs tista 'żżomm kull tip ta' pointer,
huma jistgħu jżommu wkoll pointers funzjoni.
Jekk int familjari mal-programmazzjoni orjentata oġġett,
dan jipprovdi mod biex jużaw structs għall-programm bi stil orjentati oġġett.
Aktar dwar pointers funzjoni f 'mument ieħor.
Ukoll, kultant jista 'jkollok 2 structs
definizzjonijiet li jiddependu fuq xulxin.
Per eżempju,
jista 'jkollna Struct A,
li hija definita bħala
pointer għal B Struct,
Struct B * X,
u issa jista 'jkollna B Struct
li hija definita bħala indikatur
għal Struct A,
Struct A * Y.
Imma dan mhux se jiġbor,
peress Struct B ma jeżistix fil-ħin li Struct A qed tiġi miġbura.
U jekk aħna tpartit Struct A u Struct B,
allura aħna'd biss jitħallew bil-istess problema;
din id-darba, ma Struct A eżistenti le.
Biex issolvi din, nistgħu jikteb
Struct B;
qabel id-definizzjoni ta Struct A.
Dan jissejjaħ dikjarazzjoni quddiem.
Dan biss tikri l-kumpilatur jafu li
Struct B huwa tip valida li se tkun kompletament definiti aktar tard jew x'imkien ieħor.
Jisimni Rob Bowden, u dan huwa CS50.
[CS50.TV]