CHƯƠNG CẤU TRÚC CÁÚU TRỤC Cáúu trục l táûp håüp ca mäüt hồûc nhiãưu biãún, cọ thãø khạc kiãøu nhau, âỉåüc nhọm lải dỉåïi dảng mäüt tãn nháút cho tiãûn xỉí l (Giäúng cáúu trục Record Pascal) Cáúu trục giụp cho viãûc täø chỉïc cạc dỉỵ liãûu phổùc taỷp, õỷc bióỷt nhổợng chổồng trỗnh lồùn vỗ nhióửu tỗnh huọỳng chuùng cho phpeù nhoùm caùc bióỳn cọ liãn quan lải âãø xỉí l mäüt âån thay vỗ nhổ I ởnh nghộa cỏỳu truùc v khai bạo biãún cáúu trục Âënh nghéa cáúu trục struct { ; ; } Trong âọ: struct: L tỉì khoạ Tãn_kiãøu_cáúu_trục: l tãn báút k, ngỉåìi sỉí dủng âàût Vê duû: struct Date { int day; int month; int year; }; Âënh nghéa cáúu trục bàịng typedef Nãúu mäüt cỏỳu truùc õổồỹc õởnh nghộa vồùi tón_kióứu_cỏỳu_truùc thỗ ta coù thãø cng typedef âã âënh nghéa sau: Typedef struct < tãn_kiãøu_cáúu_trục> ; Vê dủ: typedef struct Date DATE; Nãúu mọỹt cỏỳu truùc chổa õởnh nghộa, thỗ ta coù thóứ dng typedef âãø âënh nghéa: Typedef struct [Tãn_kiãøu_cáúu_trục] { ; ; } ; Vê dủ: Våïi vê dủ trãn ta cọ thãø dng typedef âãø âënh nghéa lải sau: typedef struct { int day; int month; int year; } DATE; Khai baïo biãún cáúu trục Khai bạo kãút håüp: struct { ; ; } ; Vê dủ: struct Date { int day; int month; int year; } date, *pd; Khai bạo riãng l: Dng Tãn_kiãøu_bn_ghi hồûc thäng qua tãn cáúu trục â âỉåüc âënh nghéa bàịng typedef + Dng tãn_kiãøu_cáúu_trục: struct < tãn_kiãøu_cáúu_trục> II Vê dủ: struct Date date,*pd; + Dng tãn âënh nghéa bàịng typedef Vê dủ: DATE date,*pd Khåíi âáưu giạ trë cho cáúu trục: Ta cọ thãø khåíi âáưu giạ trë cho mäüt cáúu trục theo phỉång cạch l khåíi âáưu giạ trë cho mng Theo sau tãn_biãún_cáúu_trục l dáúu bàịng (=), sau âọ l danh dạch cạc giạ trë khåíi âáưu âỉåüc âàût cạc dáúu mọc {} Cạc giạ trë khåíi âáưu cọ cng kiãøu våïi cạc trỉåìng tỉång ỉïng cáúu trục Vê duû: DATE date = {12, 3, 2003} III Truy cáûp âãún cạc thnh pháưn ca cáúu trục: Cọ hai cạch tham chiãúu âãún cạc thnh pháưn ca cáúu trục tỉång ỉïng våïi hai trỉåìng håüp sau: Nãúu l mäüt biãún cáúu trục: Ta dng toạn tỉí dáúu cháúm (.) âãø tham chiãúu âãún cạc trỉåìng (thnh pháưn) ca cáúu trục Cụ phạp: . Nãúu l mäüt biãún tr tr âãún cáúu trục: Ta dng toạn tỉí mi tãn (->) âãø tham chiãúu âãún Cụ phạp: -> Vê duû: struct Date { int day; int month; int year; } date; typedef struct Date DATE DATE *p Våïi caïc khai bạo trãn ta cọ cạc cạch tham chiãúu sau: date.day=18; date.month=4; date.year=2003; Hồûc: p->day = 18 p->month=4; p->year=2003; Cạc phẹp toạn tr tỉång âỉång våïi: (*p).day=18; (*p).month=4; (*p).year=2003; Gạn hai biãún cáúu trục cho nhau(cng kiãøu cáúu trục) Vê dủ: struct Date d={18,4,2003}; struct Date today; today=d; Cọ thãø láúy âëa chè cạc trỉåìng ca cáúu trục, kãút qu l tr tr âãún thnh pháưn tỉång ỉïng Vê duû: scanf(“%2d - %2d %4d”, &today.day, &today.month, &today.year); IV Maớng caùc cỏỳu truùc Vỗ cỏỳu truùc laỡ khọỳi õọỳi tỉåüng dỉỵ liãûu, âọ hon ton cọ kh nàng tảo mäüt mng cạc cáúu trục Khai bạo mng cạc cáúu truc sau: struct []; Hồûc l dng tãn â âỉåüc khai bạo båíi typedef: []; Vê dủ: Khai bạo mng cáúu trục: struct Date aa[10]; DATE ab[10]; Lục âọ âãø tham chiãúu âãún cạc trỉåìng ta cọ thãø dng sau: aa[2].month = 4; (*(aa+2)).year=2003 V Cáúu trục läưng Mäüt cáúu trục âỉåüc gi l läưng nãúu cọ mäüt cạc trỉåìng ca cáúu trục ny lải cọ kiãøu cáúu trục Cáúu trục läưng thỉåìng âỉåüc dng phäø biãún láûp trỗnh C bồới vỗ noù cho pheùp taỷo caùc dỉỵ liãûu cọ thỉï báûc Vi dủ: Tảo cáúu trục âãø lỉu thäng tin ngy sinh ca mäüt ngỉåìi typedef struct { char name[30]; struct { int day; int month; int year; } birth_day; } BDATE; Hoàûc: typedef struct { char name[30]; struct Date birth_day; } BDATE; Hoàûc typedef { char name[30]; DATE birth_day; }BDATE; Tham chiãúu âãún cạc thnh phỏửn cuớa cỏỳu truùc lọửng thỗ hoaỡn toaỡn giọỳng våïi viãûc tham chiãúu cáúu trục khäng läưng nhau, chố coù nhổợng trổồỡng chổùa cỏỳu truùc thỗ phaới thãm tãn biãún cáúu trục âọ vo Vê dủ Våïi cáúu trục vỉìa âënh nghéa åí vê dủ trãn, ta tham chiãúu âãún cạc thnh pháưn ca biãún ngaysinh cọ kiãøu BDATE laì: Tãn: ngaysinh.name=“Tran Van A”; Ngaìy sinh: ngaysinh.birth_day.day=19; ngaysinh.birth_day.month=04; ngaysinh.birth_day.year=2003; Vóử mỷt lyù thuyóỳt thỗ khọng coù bỏỳt k mäüt giåïi hản no vãư säú mỉïc läưng ca cáúu trục Nhỉng lục âọ cạc tham chiãúu âãún cạc trỉåìng s cng tråí nãn phục tảp v khọ âc hån Cáúu trục tỉû tham chiãúu: Cạc cáúu trục gi l tỉû tham chiãúu nãúu chỉïa mäüt trỉåìng l tr tr âãún chênh Vê dủ: struct a { int a,b; float c; struct a *ptoa; }; Tênh tham chiãúu trỉåïc (Forward Referencing) Tênh cháút ny cho phẹp ta âỉa cạc khai bạo cạc tr tr âãún cạc cáúu trục chỉa âỉåüc âënh nghéa, âàûc ny cng cho phẹp ta tảo sỉû tỉû tham chiãúu â âãư cáûp åí trãn Ta cọ thãø tảo cáúu trục sỉû tham chiãúu láùn Vê duû: struct s1 { int a; struct s2 *b; }; struct s2 { int a; struct s1 *b; }; Âàûc ny khäng ạp dủng cạc khai bạo bàịng typedef VI Truưn cáúu trục cho hm Cọ hai cạch truưn cáúu trục cho hm: - Truưn theo biãún cáúu trục (gi l truưn theo giạ trë) - Truưn tr tr âãún cáúu trục (gi l truưn theo tham chiãúu) Vê duû: DATE d; func (d); /* Âënh nghéa haìm func(DATE d) */ func(&d);/* Âënh nghéa hm func (DATE *d)*/ Truưn theo âëa chè luọn nhanh hồn bồới vỗ chố laỡ mọỹt troớ âån gin âỉåüc chẹp âãún vng âäúi säú Màût khạc, truưn theo giạ trë s âi hi ton bäü cạc cáúu trục s âỉåüc chẹp Chè cọ hai trỉång håüp nãn truưn theo giạ trë: Cáúu trục nh (tỉïc l kêch thỉåïc cåỵ xáúp xè våïi mäüt tr) Mún bo âm ràịng låìi gi hm s khäng lm thay âäøi cáúu trục âỉåüc truưn vo (Khi mäüt õọỳi sọỳ truyóửn theo giaù trở, trỗnh bión dởch seợ tảo mäüt bn ca âäúi säú âọ Hm âỉåüc gi chè cọ thãø thay âäøi trãn bn m thäi) ... khọng coù bỏỳt kyỡ mọỹt giồùi haỷn no vãư säú mỉ? ?c läưng ca c? ?úu tr? ?c Nhỉng l? ?c âọ c? ? ?c tham chiãúu âãún c? ? ?c trỉåìng s cng tråí nãn ph? ?c tảp v khọ ? ?c hån ? ?C? ?úu tr? ?c tỉû tham chiãúu: C? ? ?c cáúu tr? ?c. .. Mng c? ? ?c cáúu tr? ?c Vỗ c? ??ỳu tru? ?c laỡ khọỳi õọỳi tổồỹng dổợ lióỷu, âọ hon ton c? ?? kh nàng tảo mäüt mng c? ? ?c cáúu tr? ?c Khai bạo mng c? ? ?c cáúu truc sau: struct [ ];... danh dạch c? ? ?c giạ trë khåíi âáưu âỉå? ?c âàût c? ? ?c dáúu m? ?c {} C? ? ?c giạ trë khåíi âáưu c? ?? cng kiãøu våïi c? ? ?c trỉåìng tỉång ỉïng c? ?úu tr? ?c Vê dủ: DATE date = {12, 3, 2003} III Truy c? ?ûp âãún c? ? ?c thnh