Bài giảng Hệ thống máy tính và ngôn ngữ C - Chương 13: Các kiểu dữ liệu có cấu trúc và kiểu dữ liệu tự định nghĩa

CHÖÔNG 13  
CAÙC KIEÅU DÖÕ LIEÄU COÙ CAÁU TRUÙC VAØ KIEÅU  
DÖÕ LIEÄU TÖÏ ÑÒNH NGHÓA  
CHÖÔNG 13  
CAÙC KIEÅU DÖÕ LIEÄU COÙ CAÁU TRUÙC VAØ KIEÅU DÖÕ  
LIEÄU TÖÏ ÑÒNH NGHÓA  
13.1 Kieåu STRUCT  
13.2 Kieåu UNION  
13.3 Kieåu ENUM (Enumerated)  
13.4 Ñònh nghóa kieåu baèng TYPEDEF  
Baøi taäp cuoái chöông  
CHÖÔNG 13  
CAÙC KIEÅU DÖÕ LIEÄU COÙ CAÁU TRUÙC VAØ KIEÅU  
DÖÕ LIEÄU TÖÏ ÑÒNH NGHÓA  
13.1 KIEÅU STRUCT  
13.1.1 Khaùi nieäm - Khai baùo struct  
Struct (taïm diïch lacau truc) lamot kieåu döõ lieäu phöùc hôïp  
ñöôïc taïo töø caùc kieåu döõ lieäu khaùc, caùc kieåu döõ lieäu naøy ñöôïc  
söû duïng khai baùo cho caùc bieán thaønh phaàn cuûa bieán kieåu  
struct.  
struct teân_caáu_truùc  
{
Khai baùo caùc bieán thaønh phaàn  
};  
CHÖÔNG 13  
CAÙC KIEÅU DÖÕ LIEÄU COÙ CAÁU TRUÙC VAØ KIEÅU  
DÖÕ LIEÄU TÖÏ ÑÒNH NGHÓA  
13.1 KIEÅU STRUCT  
13.1.1 Khaùi nieäm - Khai baùo struct  
struct sinh_vieân  
{
char ma_so[10];  
char ho_ten[40];  
int tuoi;  
char dia_chi[80];  
};  
CHÖÔNG 13  
CAÙC KIEÅU DÖÕ LIEÄU COÙ CAÁU TRUÙC VAØ KIEÅU  
DÖÕ LIEÄU TÖÏ ÑÒNH NGHÓA  
13.1 KIEÅU STRUCT  
13.1.1 Khaùi nieäm - Khai baùo struct  
Cuù phaùp cuûa moät khai baùo bieán caáu truùc gioáng nhö khai  
baùo bieán bình thöôøng:  
struct teân_struct teân_bieán;  
Ví duï:  
struct sinh_vien sv1, sv2;  
CHÖÔNG 13  
CAÙC KIEÅU DÖÕ LIEÄU COÙ CAÁU TRUÙC VAØ KIEÅU  
DÖÕ LIEÄU TÖÏ ÑÒNH NGHÓA  
13.1 KIEÅU STRUCT  
13.1.1 Khaùi nieäm - Khai baùo struct  
Ví duï:  
struct sinh_vieân  
{
char ma_so[10];  
char ho_ten[40];  
ino;  
char dia_chi[80];  
}
sv1, sv2;  
CHÖÔNG 13  
CAÙC KIEÅU DÖÕ LIEÄU COÙ CAÁU TRUÙC VAØ KIEÅU  
DÖÕ LIEÄU TÖÏ ÑÒNH NGHÓA  
13.1 KIEÅU STRUCT  
13.1.1 Khaùi nieäm - Khai baùo struct  
10 byte 40 byte 2 byte 80 byte  
ma_so ho_ten  
tuoi  
dia_chi  
CHÖÔNG 13  
CAÙC KIEÅU DÖÕ LIEÄU COÙ CAÁU TRUÙC VAØ KIEÅU  
DÖÕ LIEÄU TÖÏ ÑÒNH NGHÓA  
13.1 KIEÅU STRUCT  
13.1.1 Khaùi nieäm - Khai baùo struct  
Ví duï:  
struct sinh_vien sv1 = { "4950897", "Tran van Vinh", 21,  
"42 Truong Cong Dinh p.13 q.TB"};  
CHÖÔNG 13  
CAÙC KIEÅU DÖÕ LIEÄU COÙ CAÁU TRUÙC VAØ KIEÅU  
DÖÕ LIEÄU TÖÏ ÑÒNH NGHÓA  
13.1 KIEÅU STRUCT  
13.1.1 Khaùi nieäm - Khai baùo struct  
Ñeå truy xuaát moät thaønh phaàn cuûa bieán caáu truùc, C coù toaùn  
töû chaám .ñeå laáy töøng thaønh phaàn.  
Ví duï:  
strcpy (sv1.ma_so, 4950897");  
strcpy (sv1.ho_ten, Tran van Dinh");  
sv1.tuoi = 21;  
strcpy (sv1.dia_chi, "42 Truong Cong Dinh p.13 q.TB");  
CHÖÔNG 13  
CAÙC KIEÅU DÖÕ LIEÄU COÙ CAÁU TRUÙC VAØ KIEÅU  
DÖÕ LIEÄU TÖÏ ÑÒNH NGHÓA  
13.1 KIEÅU STRUCT  
13.1.1 Khaùi nieäm - Khai baùo struct  
C cho pheùp gaùn caùc caáu truùc cuøng kieåu cho nhau qua teân  
bieán caáu truùc thay vì phaûi gaùn töøng thaønh phaàn cho nhau.  
Ví duï:  
sv2 = sv1;  
Ví duï 14.8 (GT)  
CHÖÔNG 13  
CAÙC KIEÅU DÖÕ LIEÄU COÙ CAÁU TRUÙC VAØ KIEÅU  
DÖÕ LIEÄU TÖÏ ÑÒNH NGHÓA  
13.1 KIEÅU STRUCT  
13.1.1 Khaùi nieäm - Khai baùo struct  
Caùc thaønh phaàn cuûa bieán struct cuõng laø bieán bình thöôøng,  
neân ta coù theå laáy ñòa chæ cuûa chuùng, ñòa chæ naøy laø moät  
haèng pointer troû ñeán thaønh phaàn töông öùng.  
Ví duï 14.9 (GT)  
CHÖÔNG 13  
CAÙC KIEÅU DÖÕ LIEÄU COÙ CAÁU TRUÙC VAØ KIEÅU  
DÖÕ LIEÄU TÖÏ ÑÒNH NGHÓA  
13.1 KIEÅU STRUCT  
13.1.1 Khaùi nieäm - Khai baùo struct  
Kieåu struct coù theå ñöôïc laáy kích thöôùc tính theo byte nhôø  
toaùn töû sizeof, ví duï:  
sizeof (struct sinh_vien);  
CHÖÔNG 13  
CAÙC KIEÅU DÖÕ LIEÄU COÙ CAÁU TRUÙC VAØ KIEÅU  
DÖÕ LIEÄU TÖÏ ÑÒNH NGHÓA  
13.1 KIEÅU STRUCT  
13.1.2 Maûng caùc struct  
Cuù phaùp khai baùo mang cac struct:  
struct ten_cau_truc ten_mang [kich_thuoc];  
Ví duï:  
struct sinh_vien sv[50];  
strcpy (sv[0].ho_ten, “Dang thanh Tin”);  
sv[0].tuoi = 28;  
Ví duï 14.12(SGT)  
CHÖÔNG 13  
CAÙC KIEÅU DÖÕ LIEÄU COÙ CAÁU TRUÙC VAØ KIEÅU  
DÖÕ LIEÄU TÖÏ ÑÒNH NGHÓA  
13.1 KIEÅU STRUCT  
13.1.3 Pointer tôùi moät struct  
Cuù phaùp khai baùo bieán pointer naøy nhö sau:  
struct teân_caáu_truùc *teân_pointer;  
Ví duï :  
struct sinh_vien a, *psv;  
psv =&a;  
hoaëc  
struct sinh_vien sv[20], *psv;  
psv =sv;  
CHÖÔNG 13  
CAÙC KIEÅU DÖÕ LIEÄU COÙ CAÁU TRUÙC VAØ KIEÅU  
DÖÕ LIEÄU TÖÏ ÑÒNH NGHÓA  
13.1 KIEÅU STRUCT  
13.1.3 Pointer tôùi moät struct  
Vieäc truy xuaát ñen mot thanh phan cua moät caáu truùc thoâng  
qua moät pointer ñöôïc thöïc hieän baèng toaùn töû laáy thaønh  
phaàn cuûa ñoái töôïng cuûa pointer, kyù hieäu laø -> (coù theå goïi laø  
toaùn töû muõi teân).  
Ví duï:  
printf ("Ho ten sinh vien: %s \n", psv -> ho_ten);  
hay  
printf ("Ho ten sinh vien: %s \n", (*psv).ho_ten);  
CHÖÔNG 13  
CAÙC KIEÅU DÖÕ LIEÄU COÙ CAÁU TRUÙC VAØ KIEÅU  
DÖÕ LIEÄU TÖÏ ÑÒNH NGHÓA  
13.1 KIEÅU STRUCT  
13.1.3 Pointer tôùi moät struct  
Ví duï 7.16 (SGT)  
C laïi cho pheùp khai baùo struct maø trong caùc thaønh phaàn  
cuûa noù laïi coù caùc pointer chæ ñeán moät caáu truùc cuøng kieåu.  
Ví duï:  
struct node  
{
char message[81];  
struct node *next;  
};  
CHÖÔNG 13  
CAÙC KIEÅU DÖÕ LIEÄU COÙ CAÁU TRUÙC VAØ KIEÅU  
DÖÕ LIEÄU TÖÏ ÑÒNH NGHÓA  
13.1 KIEÅU STRUCT  
13.1.4 Struct daïng field  
C cho pheùp ta khai baùo caùc thaønh phaàn cuûa struct theo bit  
hoaëc moät nhoùm bit. Moät thaønh phaàn nhö vaäy ñöôïc goïi laø  
moät field (taïm dòch laø vuøng).  
struct teân_caáu_truùc  
{
kieåu teân_vuøng 1: soá_bit1;  
kieåu teân_vuøng 2:soá_bit2;  
...  
} teân_bieán;  
Vôùi kieåu chæ coù theå laø unsigned, signed hoaëc int  
CHÖÔNG 13  
CAÙC KIEÅU DÖÕ LIEÄU COÙ CAÁU TRUÙC VAØ KIEÅU  
DÖÕ LIEÄU TÖÏ ÑÒNH NGHÓA  
13.1 KIEÅU STRUCT  
13.1.4 Struct daïng field  
Ví duï:  
struct date  
{
unsigned day: 5;  
unsigned month: 4;  
unsgned yar6
int: 0;  
} ngay;  
CHÖÔNG 13  
CAÙC KIEÅU DÖÕ LIEÄU COÙ CAÁU TRUÙC VAØ KIEÅU  
DÖÕ LIEÄU TÖÏ ÑÒNH NGHÓA  
13.1 KIEÅU STRUCT  
13.1.4 Struct daïng field  
Chuù yù:  
-Moãi vuøng chæ coù theå daøi toái ña 16 bit (moät int) vaø  
ñöôïc caáp choã trong moät int, chöù khoâng theå naèm treân hai  
int khaùc nhau ñöôïc.  
-Söï phaân boá bit cho caùc field trong moät int cuûa  
struct (töø traùi sanphhnôïc lï)khoâng phaân bieät  
ñöôïc.  
-Moïi thao taùc thöïc hieän treân bieán kieåu field coù lieân  
quan ñeán ñòa chæ ñeàu khoâng ñöôïc thöïc hieän  
CHÖÔNG 13  
CAÙC KIEÅU DÖÕ LIEÄU COÙ CAÁU TRUÙC VAØ KIEÅU  
DÖÕ LIEÄU TÖÏ ÑÒNH NGHÓA  
13.1 KIEÅU STRUCT  
13.1.4 Struct daïng field  
Ví duï:  
Khi khai baùo  
struct vi_du  
{
unsigned field1: 7;  
unsigned field2: 5;  
unsigned field3: 2;  
unsigned field4: 6;  
unsigned field5: 7;  
} vd;  
CHÖÔNG 13  
CAÙC KIEÅU DÖÕ LIEÄU COÙ CAÁU TRUÙC VAØ KIEÅU  
DÖÕ LIEÄU TÖÏ ÑÒNH NGHÓA  
13.1 KIEÅU STRUCT  
13.1.4 Struct daïng field  
Ví duï:  
Tải về để xem bản đầy đủ
pdf 27 trang yennguyen 12/04/2022 6000
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Hệ thống máy tính và ngôn ngữ C - Chương 13: Các kiểu dữ liệu có cấu trúc và kiểu dữ liệu tự định nghĩa", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_he_thong_may_tinh_va_ngon_ngu_c_chuong_13_cac_kieu.pdf