[Powered by Google Translate] Ligean ar labhairt faoi structs. Structs ar fáil dúinn ar bhealach a ghrúpáil a bunch na n-athróg le chéile isteach pacáiste deas. Is dócha is éasca a fheiceáil sampla ceart ar shiúl, mar sin deirimid struct, ansin a oscailt chatach is guailleán, agus sa struct, beidh orainn aois slánuimhir, ainm * Char, agus sin é. Féadfaidh sé cosúil aisteach le leathstad tar éis guailleán curly, ach tá sé i ndáiríre is gá le structs. Is féidir aon chineál bailí dul laistigh de shainmhíniú struct. Anseo, tá muid úsáid slánuimhir agus * Char, ach d'fhéadfá a úsáid chomh maith le sraith, de rá, 100 eilimintí nó fiú eile struct. Nuair a bhíonn tú ag baint úsáide as structs i C, bhfuil tú ag a chruthú cineálacha nua as bailiúchán de chineálacha eile. Anseo, tá muid ag déanamh le cineál nua as slánuimhir agus * ruabhreac. Mar beidh orainn a fheiceáil níos déanaí, i ndáil le cineál struct Is i go leor bealaí comhionann le haon chineál eile go bhfuil tú ag úsáid chun. De ghnáth, beidh mé ag gcomparáid conas i ndáil le cineál struct tá sé cosúil le cineál slánuimhir. Cé go bhfuil an cód scríobhamar C bailí, nach bhfuil sé an-úsáideach, agus beidh clang a thabhairt dúinn rabhadh. Cuimhnigh conas a structs agus a leithéid? Bhuel, tá muid go bunúsach a dúirt go díreach int, nach bhfuil ar líne an-chabhrach. Mar sin a ligean dhearbhú iarbhír athróg den chineál sin ag a thabhairt dó ainm roimh an leathstad. Beidh muid glaoch ar an mac léinn athraitheach. Anois, tá muid dhearbhú mac léinn athróg ar a dtugtar leis an gcineál tugtha ag an struct. Conas is féidir linn a fháil ar na hathróga, taobh istigh an struct? Go teicniúil, na hainmneacha do na hathróga Is iad comhaltaí. Chun rochtain a fháil ar aon bhall áirithe i struct mac léinn, gceangal tú ponc leis an ainm athraitheach, le leanúint ag an ainm an chomhalta is mian leat. Mar sin anseo, an 2 ach féidearthachtaí bailí Tá student.age agus student.name. Agus is féidir linn a dhéanamh rud éigin cosúil le student.age = 12 agus student.name = mac léinn. Anois, cad má bhíomar ag iarraidh a dhéanamh mac léinn an dara? D'fhéadfá smaoineamh a chóipeáil agus a ghreamú ar na línte agus mac léinn a athrú mac léinn 2 nó rud éigin, agus a bheidh ag obair, ach go teicniúil, mac léinn agus na mac léinn 2 nach bhfuil an cineál céanna. Féach, ní bheidh tú in ann iad a shannadh chuig a chéile. Tá sé seo toisc, a mhéid, Tá do struct bhí gan ainm. Ní mór dúinn a thabhairt dó ainm. Chun é sin a dhéanamh, ní mór dúinn isteach ainm an struct tar éis an struct focal. mac léinn, le leanúint ag an sainmhíniú. Is féidir linn go fóill a dhearbhú láithreach athróg de chineál struct mac léinn, mar a rinne muid roimh. Beidh muid glaoch S1 sé De réir a thabhairt ar an struct ainm, is féidir linn úsáid a bhaint anois mac léinn struct ar bhealach beagnach mar an céanna ba mhaith linn a úsáid slánuimhir. Mar sin, is féidir linn a dhearbhú go bhfuil athróg an mhic léinn struct cineál, cosúil le struct mac léinn S2. Cosúil le arrays, a chur ar fáil structs a error initialization aicearra, ionas gur féidir linn a rá, struct mac léinn S2 cothrom le chlé chatach is guailleán 3, S2. Anseo, beidh S2.age 3, agus beidh S2.name pointe S2. Smaoinigh ar na rudaí is féidir leat a dhéanamh le cineál slánuimhir agus is mó acu is féidir leat a dhéanamh le cineál mac léinn struct. Is féidir linn úsáid mac léinn struct mar chineál ar pharaiméadar feidhme. Is féidir linn úsáid mac léinn struct taobh istigh de struct nua. Féidir linn a bheith pointeoir le mac léinn struct. Is féidir linn a dhéanamh ar mhéid an mac léinn struct. Is struct mac léinn i ndáil le cineál díreach cosúil le slánuimhir is cineál. Is féidir linn a shannadh freisin S1 chun S2 ós rud é go bhfuil an dá den chineál céanna, ionas gur féidir linn a dhéanamh S1 = S2. Cad a tharlaíonn má dhéanaimid S1.age = 10? An bhfuil athrú S2 ar chor ar bith? Arís, smaoineamh ar an structs díreach mar slánuimhreacha rialta. Má shannadh againn roinnt X slánuimhir a roinnt Y slánuimhir, cosúil le X = Y agus a athrú ansin X, mar atá i X + +, Ní Y athrú ar chor ar bith? Ní Y athrú anseo, agus mar sin ní dhéanann S2 thuas. S2.age fós 3. Ach faoi deara nuair a shannadh amháin struct go ceann eile, gach ceann de na leideanna pointe fós ar an rud céanna, ós rud é go raibh siad ag chóipeáil díreach. Más rud é nach bhfuil tú ag iarraidh na leideanna a roinnt, beidh ort a láimhseáil de láimh sin, b'fhéidir ag malicking amháin bloc cuimhne do cheann de na leideanna a chur in iúl go agus a chóipeáil na sonraí os a chionn. Fhéadfadh sé a bheith annoying a bheith acu chun scríobh mac léinn struct i ngach áit. Ag baint úsáide as def cineál, is féidir linn a dhéanamh cineál def struct agus beidh muid ag glaoch air mac léinn. Anois, is féidir linn a úsáid mac léinn i ngach áit a úsáid againn a úsáid mac léinn struct. Tá sé seo def cineál an struct gan ainm agus iarrann sé mac léinn. Ach má táimid a choinneáil chomh maith an t-aitheantóir mac léinn in aice leis an struct focal, mar atá i mac léinn struct Rialú an, féidir linn a úsáid mac léinn struct araon agus mac léinn hidirmhalartaithe anois. Ní bhíonn fiú go bhfuil an ainm céanna. D'fhéadfadh muid mac léinn struct def cineál do Bob agus struct ansin mac léinn agus Bob a bheadh ​​cineálacha interchangeable. Beag beann ar an def cineál, ní mór dúinn an t-aitheantóir eile a struct más rud é an sainmhíniú ar an struct Is recursive. Mar shampla, cineál def struct nód agus déanfar é a shainmhíniú mar Val o agus beidh sé a bheith pointeoir go pointí eile nód struct., mar atá i struct nód * chugainn. Agus ansin beidh muid ag glaoch nód é. Is é seo an struct athchúrsach, ós rud é tá sainmhíniú ar nód struct laistigh de ar pointeoir go dtí nód struct. Fógra go mór dúinn a rá struct nód * eile taobh istigh den mhíniú ar an nód struct, ós rud é nach bhfuil an def cineál críochnaithe go fóill chun ligean dúinn a shimpliú seo go díreach * nód seo chugainn. Feicfidh tú níos mó a fhoghlaim faoi structs cosúil leis seo iad ag déileáil le liostaí nasctha agus crainn. Cad mar gheall ar structs chomhcheangal i bhfeidhm? Tá sé seo freisin go foirfe bailí. D'fhéadfadh muid a bheith neamhní feidhmeanna a thógann mar argóint, mac léinn na hInstitiúide agus a dhéanann rud éigin leis an mac léinn. Agus ansin is féidir linn a pas a fháil mar struct mac léinn mar seo. Feidhmeanna de S1 ó roimh. Behaves an struct díreach mar a bheadh ​​slánuimhir nuair a ritheadh ​​le feidhm. Feidhmeanna a fhaigheann cóip den S1 agus ní féidir a mhodhnú ionas S1; in áit, ach an chóip de tá sé go stóráilte i S. Más mian leat an fheidhm a bheith in ann S1 a mhodhnú, Beidh feidhmeanna is gá a ghlacadh * mac léinn S, agus go mbainfidh tú a S1 pas a fháil ag seoladh, mar seo. Mac Léinn * S, feidhmeanna agus S1. Níl cúis eile chun pas a fháil ag seoladh anseo. Cad a tharlaíonn má bhí ár n-struct 100 réimsí? Gach uair amháin pas muid mac léinn a feidhmeanna, riachtanais ár gclár a chóipeáil gach ceann de na 100 réimsí i S argóint feidhmeanna, ar Ní fiú má úsáideann sé an chuid is mó acu. Mar sin, fiú amháin más rud nach bhfuil feidhmeanna pleanáil ar a mhodhnú leis an mac léinn, Is féidir más rud é a bheith fós luachmhar chun pas a fháil trí seoladh. Maith go leor, cad más mian linn go pointeoir a chruthú le struct? D'fhéadfadh muid a dhéanamh rud éigin cosúil le mac léinn * S cothrom le malloc méid mac léinn. Fógra go bhfuil méid i gcónaí oibríonn anseo. Mar sin, conas is féidir linn rochtain anois ag an gcomhalta aois an bhloic go pointí S go? D'fhéadfá smaoineamh ar dtús a dhéanamh * S.age = 4, ach ní bheidh an obair go maith. Ós rud é go mbeidh an a léirmhíniú i ndáiríre mar * S.age idir lúibíní = 4, ní bheidh a chur le chéile, fiú, ós rud é nach bhfuil S struct nó in áit ar pointeoir go struct, agus mar sin ní bheidh an ponc ag obair anseo. D'fhéadfadh muid a dhéanamh (* S). Aois = 4 ach is féidir na lúibíní a fháil annoying agus mearbhaill. Thankfully, ní mór dúinn oibreoir arrow speisialta go Breathnaíonn rud éigin cosúil le S-> aois = 4. Tá na 2 bealaí tagairt aois atá coibhéiseach agus ní dhéanaimid i ndáiríre is gá riamh an t-oibreoir arrow, ach déanann sé rudaí cuma nicer. Ós rud é gurb é S a pointeoir le roinnt bloc cuimhne go bhfuil an struct, Is féidir leat smaoineamh ar S aois> mar a leanúint ar an arrow pointeoir agus grab an ball aois. Mar sin, ba chóir dúinn cén fáth a úsáid riamh structs? Tá sé cinnte is féidir a fháil amach le díreach na slánuimhreacha primitive, carachtair, leideanna agus a leithéidí go bhfuil muid ag úsáid chun; in ionad na S1 agus S2 roimh, d'fhéadfadh muid a raibh age1, age2, name1, agus name2 go léir ag an athróg ar leith. Tá sé seo breá le níl ach 2 mic léinn, ach cad má bhí againn 10 acu? Agus cad má in ionad ach 2 réimsí, an struct mac léinn a bhí 100 réimsí? GPA, cúrsaí, dath gruaige, inscne, agus mar sin de. In ionad ach 10 structs, ní mór dúinn 1,000 athróg ar leith. Chomh maith leis sin, a bhreithniú feidhm a thógann go struct le 100 réimsí lena argóint amháin agus priontaí amach gach réimse. Más rud é nach raibh muid úsáid struct, gach uair amháin tugaimid feidhme sin, ní mór dúinn chun pas a fháil ar chor ar 100 athróg, agus má táimid tar éis 100 athróg do mhic léinn 1, agus 100 athróg do mhic léinn 2, ní mór dúinn a bheith cinnte nach bhfuil muid pas a fháil trí thimpiste roinnt athróg ó mhic léinn 1 agus roinnt athróg ó mhic léinn 2. Tá sé dodhéanta a dhéanamh go botún le struct, ós rud é go léir 100 athróg le fáil i bpacáiste amháin. Just a cúpla nótaí deiridh: Má tá tú thuiscint gach rud suas go dtí an bpointe seo, iontach. Tá an chuid eile de na físeáin ach le haghaidh iomláine 'ar mhaithe le. Toisc gur féidir structs a shealbhú ar aon chineál pointeoir, is féidir leo a shealbhú chomh maith leideanna fheidhm. Má tá tú eolach ar cláir atá dírithe ar réad, cuireann sé seo ar bhealach a structs a úsáid chun clár i stíl réad atá dírithe ar. Breis eolais ar leideanna feidhm ag am eile. Chomh maith leis sin, uaireanta is féidir leat a bheith 2 structs ag brath a bhfuil sainmhínithe ar a chéile. Mar shampla, féidir linn a bheith struct A, a shainmhínítear mar ar pointeoir go B struct, struct B * X, agus anois is féidir linn a bheith B struct a shainmhíniú mar pointeoir le struct A, struct A * Y. Ach ní bheidh an chur le chéile, ós rud é nach struct B ann ag an am go struct Tá á chur le chéile. Agus má mhalartú againn struct A agus B struct, ansin gur mhaith linn a bheith fágtha díreach leis an fhadhb chéanna; an am seo, le struct Ní ann cheana féin. Chun an fhadhb seo, is féidir linn a scríobh struct B; roimh an míniú ar struct A. Seo ar a dtugtar dearbhú ar aghaidh. Ligeann sé seo ach an tiomsaitheoir a fhios go Is struct B i ndáil le cineál bailí a bheidh sainithe go hiomlán ina dhiaidh sin nó in áit eile. Is é mo ainm Rob Bowden, agus tá sé seo CS50. [CS50.TV]