[Powered by Google Translate] Nin structs haqqında danışmaq edək. Structs birlikdə dəyişənlərin bir dəstə gruplandırmak üçün bir yol bizə təqdim bir gözəl paket daxil. O, dərhal bir örnek görmek üçün yəqin ki, asan deyil belə ki, biz struct demək sonra, buruq brace açılması və bu struct, biz, bir int yaş olacaq bir char * adı, və bu. O, buruq brace sonra nöqtəli vergül ilə qəribə görünə bilər lakin bu structs zəruri fakt var. Hər hansı bir etibarlı növü struct definition ərzində davam edə bilər. Burada, bir int və char * istifadə etdiyiniz lakin siz də, demək ki, 100 elementlərin bir sıra istifadə edə bilər və ya hətta başqa struct. Siz C structs istifadə etdiyiniz zaman, yeni növ oluşturuyorsanız digər növ toplusu həyata. Burada biz yeni bir növü edirik bir tam və char * həyata. Biz sonra görəcəksiniz kimi, struct növü alıştığınız hər hansı digər növü ekvivalent yolları bir çox var. Adətən, mən necə bir struct növü müqayisə olacaq bir tam növü kimi. Biz yazdı kodu etibarlı C, baxmayaraq Bu, çox faydalı deyil və cingilti bizə bir xəbərdarlıq verəcək. Structs və oxşar necə saxla? Yaxşı, biz əsasən yalnız bildirib int, bir çox faydalı xətt deyil. Belə nin həqiqətən bu cür bir dəyişən elan edək bu nöqtəli vergül əvvəl bir ad verərək. Biz dəyişən tələbə zəng edəcəyik. İndi biz bir dəyişən adlandırılan tələbə elan etdik bu struct verdiyi növü. Necə biz struct daxilində dəyişənlərin əldə edirsiniz? Bu dəyişənlər üçün texniki, adları üzvləridir. Bir tələbə struct hər hansı xüsusi üzv olmaq üçün, Siz dəyişən adı bir dot əlavə istədiyiniz üzv adı ilə izlədi. Belə ki, burada yalnız 2 etibarlı imkanlar student.age var və student.name. Və biz bir şey kimi edə bilərsiniz student.age = 12 və student.name = tələbəsi. İndi biz ikinci bir tələbə etmək istəyirdi, əgər? Siz bu sətirləri seçin və yapışdırıb hesab bilər və tələbə 2 və ya bir şey üçün tələbə dəyişdirmək, və işləyəcək, lakin texniki, tələbə və şagird 2 eyni tipli yoxdur. Bax, siz bir-birinə onları təyin edə bilməz. Bu, çünki, belə ki, uzaq Sizin struct anonim olmuşdur. Biz bu adı vermək lazımdır. Bunu etmək üçün, biz struct adı daxil edin sözü struct sonra. tələbə, müəyyən izlədi. Biz hələ dərhal tipli dəyişən elan edə bilər biz əvvəl olduğu kimi, tələbə struct. Biz S1 arayacaðým Bu struct adı verməklə, biz struct tələbə istifadə edə bilərsiniz demək olar ki, tam olaraq eyni şəkildə biz int istifadə edir. Belə ki, biz, növü struct tələbə bir dəyişən elan edə bilər kimi struct tələbə S2. Seriallardakı kimi, structs, qısa başlatma sintaksis təmin biz tələbə S2 struct, demək olar bərabərdir sol buruq brace 3, S2. Burada S2.age, 3 olacaq və S2.name S2 qeyd edəcək. Bir int tipli edə bilərsiniz bütün şeylər düşünün və onların əksəriyyəti bir struct tələbə növü ilə edə bilərsiniz. Biz bir funksiya parametr bir növü kimi struct tələbə istifadə edə bilərsiniz. Biz yeni struct daxilində struct tələbə istifadə edə bilərsiniz. Biz struct tələbə bir göstərici ola bilər. Biz struct tələbə ölçüsü edə bilərsiniz. Struct tələbə bir növü yalnız int kimi bir növüdür. Biz də S2 üçün S1 təyin edə bilər eyni tipli, çünki, belə ki, biz edə S1 = S2. Biz ne olur S1.age = 10? Bütün S2 dəyişiklik varmı? Yenə yalnız müntəzəm integers kimi structs düşünürəm. Bəzi int Y bəzi int X təyin etsəniz, X = Y kimi və sonra, X dəyişmək kimi X + +, Y bütün dəyişdirmək deyil? Y burada dəyişdirmək, və nə yuxarıda S2 nə deyil. S2.age hələ 3. Lakin qeyd bir struct təyin zaman ki, bu göstəricilər bütün hələ də eyni şey qeyd yalnız sitemizi yana. Siz göstəricilərinə ortaq olmaq istəmirsinizsə, siz özünüz ki, idarə etmək lazımdır bəlkə göstəricilərinə biri üçün yaddaş bir blok malicking ilə qeyd etmək və məlumat artıq çıxarmaq. Bu hər yerdə struct tələbə yazmaq üçün annoying ola bilər. Bir növü def istifadə edərək, biz edə növü def struct və biz bu tələbə zəng edəcəyik. İndi hər yerdə tələbə istifadə edə bilərsiniz biz struct tələbə istifadə üçün istifadə edir. Bu def anonim struct var və tələbə çağırır. Amma biz də tələbə identifikator saxlamaq əgər sözü struct yanında typedef struct tələbə kimi, biz əvəz indi struct tələbə və tələbə də istifadə edə bilər. Onlar hətta eyni adı yoxdur. Biz Bob üçün def struct tələbə yazın bilər və sonra tələbə və Bob struct əvəz növləri olacaq. Asılı olmayaraq növü def ki, biz struct yanındakı identifikator lazımdır əgər struct müəyyən recursive edir. Məsələn, növü def struct node və bir int val kimi müəyyən olunacaq və başqa struct node göstərir ki, bir göstərici olacaq. * Növbəti struct node kimi. Və sonra biz bu node zəng edəcəyik. Bu struct, recursive edir struct node müəyyən içinde içerdiğinden bir struct node bir göstərici. Biz struct node * Növbəti demək edək ki, bu struct node müəyyən daxilində, növü def imkan hələ bitmiş deyil bəri bizə bu sadələşdirmək yalnız node * yanında. Bu oxşar structs haqqında daha ətraflı məlumat lazımdır zaman bağlı siyahıları və ağac ilə məşğul. Bir funksiyası structs haqqında nə? Bu da mükəmməl etibarlıdır. Biz ola bilər FUNC ləğv ki, bir arqument kimi görür tələbə s və tələbə ilə bir şey yoxdur. Və sonra biz kimi tələbə struct kimi keçə bilər. Əvvəl S1 FUNC. Bu struct davranır bir tam funksiyası keçmiş zaman tam olaraq. FUNC S1 surətini qəbul və belə S1 dəyişdirə bilməz; deyil, S. bunun yalnız surəti saxlanılır ki, Əgər funksiyası S1 dəyişdirmək edə üçün FUNC, tələbə * S etmək lazımdır və bunu kimi, ünvanı S1 keçmək lazımdır. Tələbə * S, FUNC & S1. Burada ünvan keçmək başqa səbəb var. Bizim struct 100 sahələri olan nə varsa? Biz FUNC bir tələbə keçmək hər bir vaxt, proqram, FUNC arqumenti S o 100 sahələrdə bütün surəti lazımdır hətta əgər onların əksəriyyəti istifadə heç vaxt. FUNC tələbə değiştirmeyle haqqında niyyətində deyil Belə ki, hətta, hələ ünvan keçmək qiymətli ola bilər. OK, biz struct bir pointer yaratmaq istəyirsinizsə, nə? Biz bir şey edə tələbə * S malloc bərabərdir tələbə ölçüsü. Hələ burada işləyir ki, ölçüsü edək. Belə ki, necə biz indi yaş üzv olmaq yoxdur blokunun S bal ki? Siz ilk nə düşünə bilər * S.age = 4, lakin bu olduqca işləməyəcək. Bu, həqiqətən kimi təfsir edilə çünki Parantez = 4 * S.age, hətta tərtib edəcək S struct üçün struct və ya daha çox bir göstərici deyil, çünki və belə dot burada işləməyəcək. Biz edə (* S). Yaşı = 4 lakin parantez annoying və confusing əldə edə bilərsiniz. Şükür ki, biz xüsusi arrow operator var bir şey kimi görünür S-> yaş = 4. Yaş sened Bu 2 yol ekvivalent və biz, həqiqətən, heç arrow operator ehtiyac yoxdur lakin bu şeyi gözəl baxmaq edir. S struct olan yaddaş bəzi blok bir pointer olduğundan, İmleci arrow baxın kimi S> yaş hesab edə bilər və yaş üzv grab. Belə ki, niyə biz heç structs istifadə etməli? Bu, yalnız ibtidai integers ilə üz almaq üçün mütləq mümkün Sandıqı, göstəricilər və bu kimi biz istifadə edirik ki; əvəzinə S1 və S2 əvvəl, biz age1, age2, name1 və name2 var bilər ayrı-ayrı dəyişənlərin bütün. Bu, yalnız 2 tələbələri ilə gözəl lakin biz onlardan 10 olsaydı? Və nə əgər əvəzinə yalnız 2 sahələri, tələbə struct 100 sahələri var idi? GPA, kurslar, saç rəngi, cinsi, və s. Bunun əvəzinə yalnız 10 structs, biz 1000 ayrıca dəyişənlərin lazımdır. Həmçinin, bir funksiyası hesab ki, yalnız mübahisə ilə 100 sahələri ilə struct edir və bütün sahələrdə çap edir. Biz struct istifadə etmədikdə, biz ki, funksiyası zəng hər zaman biz bütün 100 dəyişənlərin da keçmək lazımdır və biz tələbə üçün 1 100 dəyişənlər varsa, və 100 tələbə 2 dəyişənlər, biz təsadüfən tələbə 1-dən bəzi dəyişənlər keçmək yoxdur əmin olmalıdır və tələbə 2 bəzi dəyişənlərin. O, struct ilə səhv etmək mümkün deyil 100 dəyişənlərin vahid paket yer çünki. Yekun qeydləri bir neçə: Bu baxımdan hər şeyi qədər böyük başa varsa. Video qalan yalnız tamlığı 'naminə edir. Structs göstərici istənilən aça bilər, çünki onlar da funksiyası göstəricilərinə aça bilər. Əgər obyekt yönümlü proqramlaşdırma ilə tanış edirsinizsə, bu bir obyekt yönümlü stil proqram structs istifadə etmək üçün bir yol təqdim edir. Başqa bir zaman funksiyası göstəricilər haqqında daha çox. Həmçinin, bəzən 2 structs ola bilər onun anlayışlar bir-birinə asılıdır. Məsələn, biz struct A bilər olan kimi müəyyən edilir bir struct B bir göstərici, struct B * X, və indi biz struct B ola bilər bir göstərici kimi müəyyən edilir bir struct A üçün struct A * Y. Amma bu, tərtib edəcək struct B struct A tərtib olunan zaman mövcud deyil bəri. Və biz struct A və struct dəyişdirmək əgər B, sonra biz yalnız eyni problem ilə tərk olarıq; Bu vaxt, A mövcud deyil struct. Bu həll etmək üçün biz yaza bilərsiniz struct B; struct A. anlayışına əvvəl Bu irəli bəyannamə adlanır. Bu yalnız compiler bilmək imkan verir ki, struct B tam sonra və ya başqa bir yerdə müəyyən bir etibarlı növüdür. My name Rob Bowden, bu CS50 edir. [CS50.TV]