[Powered by Google Translate] Se pou nou pale sou strukt.
Strukt ba nou yon fason nan gwoup yon pakèt moun sou varyab ansanm
nan yon pake bèl.
Li pwobableman pi fasil yo wè yon egzanp touswit,
pou nou di struct,
Lè sa a, louvri Curly atèl,
ak sa a nan struct, nou pral gen yon laj Int,
yon non * Char,
ak sa a, se li.
Li pouvwa sanble etranj ak yon virgules apre yon atèl Curly,
men li la nan fè ki nesesè ak strukt.
Nenpòt ki kalite ki valab ka ale nan definisyon an struct.
Isit la, nou te itilize yon int ak yon * Char,
men ou ta ka tou itilize yon etalaj, nan di, 100 eleman
oswa menm yon lòt struct.
Lè w ap sèvi ak strukt nan C,
ou se kreye kalite nouvo
soti nan yon koleksyon kalite ak lòt.
Isit la, nou ap fè yon kalite nouvo
soti nan yon nonb antye relatif ak yon * Char.
Kòm nou pral wè pita, yon struct kalite
se nan yon anpil nan fason ekivalan a nenpòt ki kalite lòt w ap itilize yo.
Anjeneral, mwen pral konpare kouman yon struct kalite
se menm jan ak yon lòt kalite antye ki pè.
Pandan ke kòd la nou te ekri se C ki valab,
li pa trè itil,
ak rezone pral ban nou yon avètisman.
Sonje kijan strukt ak li yo ki sanblab?
Bon, nou bazikman jis di
int,
ki se pa yon liy trè itil.
Se konsa, kite a aktyèlman deklare yon varyab la ki kalite
pa bay li yon non anvan virgules la.
Nou pral rele elèv la varyab.
Koulye a, nou te deklare yon varyab elèv yo rele
ak kalite yo te bay nan struct la.
Ki jan nou jwenn yo varyab yo andedan struct a?
Teknikman, non yo pou sa yo varyab
yo se manm.
Pou jwenn aksè a nenpòt manm patikilye nan yon struct elèv yo,
ou ajoute yon dot nan non la varyab,
ki te swiv pa non an nan manm lan ou vle.
Se konsa, isit la, se sèlman 2 posibilite yo ki valab
yo se student.age
ak student.name.
E nou ka fè yon bagay tankou
student.age = 12
ak student.name = elèv yo.
Kounye a ki sa si nou te vle fè yon etidyan dezyèm?
Ou ta ka panse a kapab bay kopi ak keratin liy sa yo
ak chanje elèv nan elèv 2 oubyen yon bagay,
ak ki pral travay,
men teknikman la, elèv ak elèv 2
pa gen kalite a menm.
Al gade nan, ou pa yo pral kapab plase yo nan youn ak lòt.
Sa a se paske, se konsa, lwen,
te struct ou a te anonim.
Nou bezwen bay li yon non.
Pou fè sa, nou ekri non an nan struct la
apre struct an mo.
elèv yo,
ki te swiv pa definisyon an.
Nou ka toujou imedyatman deklare yon varyab nan kalite
struct elèv yo, tankou nou te fè sa anvan.
Nou pral rele li S1
Pa bay struct a yon non,
nou kapab kounye a itilize elèv struct
nan prèske fason an egzak menm jan nou ta sèvi ak int.
Se konsa, nou ka deklare yon varyab nan elèv struct kalite,
tankou
struct elèv S2.
Menm jan ak ranje, strukt bay yon sentaks inisyalizasyon rakoursi,
pou nou ka di, struct elèv S2
egal
gòch Curly 3 atèl, S2.
Isit la, S2.age pral 3,
ak S2.name ap lonje dwèt sou S2.
Panse a tout bagay sa yo ou kapab fè avèk yon lòt kalite int
ak pi fò nan yo ou kapab fè avèk yon kalite elèv struct.
Nou ka sèvi ak yon elèv struct kòm yon kalite yon paramèt fonksyon.
Nou ka sèvi ak elèv struct andedan yon struct nouvo.
Nou ka gen yon konsèy nan yon elèv struct.
Nou ka fè gwosè nan elèv struct.
Struct elèv se yon kalite
jis tankou int se yon kalite.
Nou kapab tou bay S1 S2
depi tou de yo se nan kalite la menm, pou nou ka fè
S1 = S2.
Kisa kap rive si nou fè
S1.age = 10?
Èske chanjman S2 nan tout?
Yon fwa ankò, panse a strukt yo menm jan nonm antye relatif regilye.
Si nou bay kèk X int nan kèk Y Int,
tankou X Y =
ak Lè sa a, chanje X,
kòm nan X + +,
Y chanje nan tout?
Y pa chanje isit la, se pou nou fè sa ki pa ni S2 pi wo a.
S2.age se toujou 3.
Men, sonje ke lè plase yon sèl struct nan yon lòt,
tout endikasyon yo te toujou lonje dwèt sou menm bagay la,
depi yo te jis kopye.
Si ou pa vle pwent yo nou kapab pataje,
ou pral bezwen manuelman okipe sa,
petèt pa malicking yon blòk nan memwa pou youn nan pwent yo nan pwen
ak kopye done yo sou.
Li ta kapab anmèdan 'gen yo ekri elèv struct toupatou.
Sèvi ak yon Def kalite, nou ka fè
kalite Def
struct
epi n ap rele li elèv yo.
Koulye a, nou ka sèvi ak elèv tout kote
ke nou itilize yo itilize elèv struct.
Sa a Def kalite nan yon struct anonim
ak rele l elèv yo.
Men, si nou menm tou nou kenbe idantifyan elèv la
akote struct nan mo, tankou nan tipedèf elèv struct,
nou te ka sèvi ak toude elèv struct ak elèv interchangeable kounye a.
Yo pa menm gen gen non an menm.
Nou te ka tape Def elèv struct Bob
ak Lè sa a, struct elèv yo ak Bob
ta dwe kalite ka ranplase.
Kèlkeswa Def nan kalite,
nou bezwen idantifyan nan pwochen struct
si definisyon an struct la
se repetitif.
Pou egzanp,
kalite Def struct ne
epi li pral gen defini kòm yon Val int
epi li pral gen yon konsèy ki pwen a yon lòt ne struct.,
kòm nan struct ne * kap vini an.
Lè sa a, nou pral rele li ne.
Sa a se struct repetitif,
depi definisyon an ne struct gen nan li
yon konsèy nan yon ne struct.
Remake ke nou te di struct ne * pwochen
andedan nan definisyon an ne la struct,
depi Def nan kalite pa te fini ankò yo pèmèt nou senplifye sa a
jis * ne kap vini an.
Ou ap aprann plis sou strukt menm jan ak sa a
lè trafik ak lye lis ak pye bwa.
Ki sa ki sou strukt nan yon fonksyon?
Sa a se tou parfètman valid.
Nou te ka gen
anile fonksyone
ki te pran kòm yon agiman,
elèv yo
ak fè yon bagay ak elèv sa a.
Lè sa a, nou ka pase l kòm struct elèv tankou sa.
Fonksyone nan S1 soti nan anvan.
Struct a konpòte li
egzakteman jan ta yon nonb antye relatif lè te pase nan yon fonksyon.
Fonksyone resevwa yon kopi S1
e konsa pa ka modifye S1;
olye, se sèlman kopi nan li ki nan ki estoke nan S.
Si ou vle fonksyon an pou kapab modifye S1,
fonksyone pral bezwen pran yon elèv * ki S,
epi ou pral dwe pase S1 pa adrès li, tankou sa.
Elèv * S, fonksyone & S1.
Genyen yon lòt rezon ki fè yo pase pa adrès isit la.
E si struct nou genyen 100 jaden?
Chak fwa yon sèl nou pase yon elèv nan fonksyone,
pwogram nou an bezwen yon kopi tout nan 100 moun jaden an S agiman fonksyone a,
menm si li pa janm sèvi ak a vas majorite nan yo.
Se konsa, menm si fonksyone pa planifye sou chanje elèv la,
si ka toujou gen anpil valè yo pase pa adrès.
Okay, sa ki si nou vle kreye yon konsèy nan yon struct?
Nou te ka fè yon bagay tankou
elèv * S
egal malok
gwosè nan elèv yo.
Remake gwosè toujou ap travay isit la.
Se konsa, kouman nou koulye a jwenn aksè manm nan laj
nan blòk la ki S pwen fè?
Ou ta ka panse ke premye fè
* S.age = 4,
men sa a pa pral byen travay.
Depi sa a pral reyèlman kapab entèprete kòm
* S.age nan parantèz = 4,
ki pa pral menm konpile,
depi S se pa yon struct ou pito konsèy yon nan yon struct,
ak sa dot a pa pral travay isit la.
Nou ta ka fè
(* S). Laj = 4
men parantèz yo kapab jwenn annwiyeu ak konfizyon.
Erezman, nou gen yon operatè flèch espesyal
ki sanble yon bagay tankou
S-> laj = 4.
Fason sa yo 2 nan indican laj
yo se ekivalan
epi nou pa vrèman janm bezwen operatè a flèch,
men li fè bagay sa yo gade joli.
Depi S se yon konsèy nan kèk blòk de memwa ki gen struct a,
ou ka panse a laj S> kòm swiv flèch la konsèy
ak gen tan pwan manm nan laj.
Se konsa, poukisa nou ta dwe janm sèvi ak strukt?
Li definitivman posib jwenn lwen ak jis nonm antye relatif yo primitif,
charaktèr, endikasyon ak renmen an
ke nou ap itilize yo;
olye pou yo S1 ak S2 anvan,
nou te ka te gen age1, age2, name1, ak name2
tout nan varyab ki apa a.
Sa a se amann ak sèlman 2 elèv yo,
men ki sa si nou te gen 10 nan yo?
Ak sa ki si olye pou yo sèlman 2 chan sa yo,
struct elèv la te gen 100 jaden?
GPA, kou, koulè cheve, sèks, ak sou sa.
Olye pou yo jis 10 strukt, nou bezwen 1,000 varyab apa.
Epitou, konsidere yon fonksyon
ki pran ki struct ak 100 jaden ak agiman sèlman li yo
ak simagri soti tout jaden yo.
Si nou pa t 'sèvi ak yon struct,
chak fwa nou rele yon sèl ki fonksyon,
nou bezwen pase nan 100 tout varyab,
epi si nou gen 100 varyab pou elèv 1,
ak 100 varyab pou elèv 2,
nou bezwen asire w ke nou pa aksidantèlman pase kèk varyab soti nan elèv 1
ak kèk varyab soti nan elèv 2.
Li nan enposib fè ki erè ak yon struct,
depi tout varyab 100 genyen nan yo nan yon pake sèl.
Jis yon koup nan nòt final:
Si ou te konprann tout bagay jiska pwen sa a, gwo.
Rès la nan videyo a se jis pou dedomajman pou konplè '.
Paske strukt ka kenbe nenpòt ki kalite konsèy,
yo kapab tou kenbe endikasyon fonksyon.
Si w ap abitye ak pwogram objè oryante,
sa a bay yon fason yo sèvi ak strukt nan pwogram nan yon style objè oryante.
Plis sou pwent fonksyon yon lòt lè.
Epitou, pafwa ou ka gen 2 strukt
definisyon ki gen depann sou youn ak lòt.
Pou egzanp,
nou te ka gen struct A,
ki se defini kòm
yon konsèy nan yon B struct,
struct B * X,
e kounye a nou ka gen yon B struct
ki se defini kòm yon konsèy
nan yon Yon struct,
struct A * Y.
Men, sa pa pral konpile,
depi struct B pa egziste nan moman sa a struct Yon se ke yo te konpile.
Men, si nou boukante struct A ak struct B,
Lè sa a, nou ta va jis kite avèk menm pwoblèm nan;
tan sa a, ak struct Yon ki deja egziste pa.
Pou rezoud sa a, nou ka ekri
struct B;
anvan definisyon an struct A.
Se sa yo rele yon deklarasyon pi devan.
Sa a jis pèmèt du a konnen ke
struct B se yon kalite ki valab ke yo pral konplètman defini pita oswa yon lòt kote.
Non mwen se Rob Bowden, ak sa a se CS50.
[CS50.TV]