Bài giảng Hệ thống máy tính và ngôn ngữ lập trình - Chương 13: Kiểu dữ liệu có cấu trúc và kiểu dữ liệu tự định nghĩa. Bài giảng cung cấp cho học viên những kiến thức về kiểu STRUCT; kiểu UNION; kiểu ENUM (Enumerated); định nghĩa kiểu bằng TYPEDEF;... Mời các bạn cùng tham khảo!
1 Các nội dung: Kiểu STRUCT Kiểu UNION Kiểu ENUM (Enumerated) Định nghĩa kiểu TYPEDEF © TS Nguyễn Phúc Khải KIỂU STRUCT Khái niệm - Khai báo struct Struct (tạm dich cấu trúc) kiểu liệu phức hợp tạo từ kiểu liệu khác, kiểu liệu sử dụng khai báo cho biến thành phần biến kiểu struct struct tên_cấu_trúc { Khai báo biến thành phần }; © TS Nguyễn Phúc Khải Ví dụ: struct sinh_vien { char ma_so[10]; char ho_ten[40]; int tuoi; char dia_chi[80]; }; © TS Nguyễn Phúc Khải Cú pháp khai báo biến cấu trúc giống khai báo biến bình thường: struct tên_struct tên_biến; Ví dụ: struct sinh_vien sv1, sv2; struct sinh_vien sv1 = { "49508XX", "Tran van V", 21, "42 Tr Dinh p.13 q.TB"}; © TS Nguyễn Phúc Khải Ví dụ: struct sinh_vien { char ma_so[10]; char ho_ten[40]; int tuoi; char dia_chi[80]; } sv1, sv2; © TS Nguyễn Phúc Khải 10 byte 40 byte byte 80 byte ma_so ho_ten tuoi dia_chi © TS Nguyễn Phúc Khải Để truy xuất thành phần biến cấu trúc, C có tốn tử chấm “.” để lấy thành phần Ví dụ: strcpy (sv1.ma_so, “49508XX"); strcpy (sv1.ho_ten, “Tran van D"); sv1.tuoi = 21; strcpy (sv1.dia_chi, " 42 Tr Dinh p.13 q.TB"); © TS Nguyễn Phúc Khải C cho phép gán cấu trúc kiểu cho qua tên biến cấu trúc thay phải gán thành phần cho Ví dụ: sv2 = sv1; © TS Nguyễn Phúc Khải Các thành phần biến struct biến bình thường, nên ta lấy địa chúng Kiểu struct lấy kích thước tính theo byte nhờ tốn tử sizeof Ví du: sizeof (struct sinh_vien); © TS Nguyễn Phúc Khải 10 Mảng struct: Cú pháp khai báo mảng struct: struct ten_cau_truc ten_mang [kich_thuoc]; Ví dụ: struct sinh_vien sv[50]; © TS Nguyễn Phúc Khải 11 Pointer trỏ tới struct: Cú pháp khai báo biến pointer sau: struct tên_cấu_trúc *tên_pointer; Ví dụ: struct sinh_vien a, sv[50], *pa, *psv; pa =&a; psv = sv; © TS Nguyễn Phúc Khải 12 Việc truy xuất đến thành phần cấu trúc thông qua pointer thực toán tử lấy thành phần đối tượng pointer, ký hiệu -> (có thể gọi tốn tử mũi tên) Ví dụ: printf ("Ho ten sinh vien: %s \n", psv -> ho_ten); Hay printf ("Ho ten sinh vien: %s \n", (*psv).ho_ten); © TS Nguyễn Phúc Khải 13 C lại cho phép khai báo struct mà thành phần lại có pointer đến cấu trúc kiểu Ví dụ: struct node { char message[81]; struct node *next; © TS Nguyễn Phúc Khải }; 14 Struct dạng field: C cho phép ta khai báo thành phần struct theo bit nhóm bit Một thành phần gọi field (tạm dịch vùng) struct tên_cấu_trúc { kiểu tên_vùng 1: số_bit1; kiểu tên_vùng 2:số_bit2; } tên_biến; Với kiểu unsigned, signed int © TS Nguyễn Phúc Khải 15 Ví dụ: struct date { unsigned day: 5; unsigned month: 4; unsigned year: 6; int: 0; } ngay; © TS Nguyễn Phúc Khải 16 Struct dạng field: Mỗi vùng dài tối đa 16 bit (một int) cấp chỗ int, nằm hai int khác Sự phân bố bit cho field int struct (từ trái sang phải hay ngược lại), không phân biệt Mọi thao tác thực biến kiểu field có liên quan đến địa khơng thực © TS Nguyễn Phúc Khải 17 Ví dụ: struct vi_du { unsigned field1: 7; unsigned field2: 5; unsigned field3: 2; unsigned field4: 6; unsigned field5: 7; © TS Nguyễn Phúc Khải } vd; 18 KIỂU UNION Ngôn ngữ C có kiểu liệu union (tạm dịch kiểu hợp nhất), kiểu liệu đặc biệt mà khai báo ứng với vùng nhớ, giá trị thời điểm khác có kiểu khác tùy vào việc sử dụng biến thành phần © TS Nguyễn Phúc Khải 19 Khai báo biến kiểu union: union tên_union { khai_báo_biến_thành_phần } biến, biến [, ]; union tên_union biến, biến [ ]; © TS Nguyễn Phúc Khải 20 Ví dụ: union thu { char c; int i; float f; double d; }; © TS Nguyễn Phúc Khải 21 Để truy xuất đến biến thành phần biến thuộc kiểu union, ta dùng toán tử chấm “.” Ví dụ: union thu a; a.c = 'a'; Ta khai báo biến pointer đến biến kiểu union Ví dụ: union thu *pthu, a; pthu = &a; © TS Nguyễn Phúc Khải 22 Việc truy xuất đến thành phần union qua pointer thực toán tử mũi tên, để lấy thành phần union pointer đến Ví dụ: pthu->c = 'A'; Kiểu union lấy kích thước tính theo byte qua tốn tử sizeof © TS Nguyễn Phúc Khải 23 © TS Nguyễn Phúc Khải 24 ... Kiểu STRUCT Kiểu UNION Kiểu ENUM (Enumerated) Định nghĩa kiểu TYPEDEF © TS Nguyễn Phúc Khải KIỂU STRUCT Khái niệm - Khai báo struct Struct (tạm dich cấu trúc) kiểu liệu phức hợp tạo từ kiểu. .. Phúc Khải } vd; 18 KIỂU UNION Ngôn ngữ C có kiểu liệu union (tạm dịch kiểu hợp nhất), kiểu liệu đặc biệt mà khai báo ứng với vùng nhớ, giá trị thời điểm khác có kiểu khác tùy vào việc sử dụng... phép gán cấu trúc kiểu cho qua tên biến cấu trúc thay phải gán thành phần cho Ví dụ: sv2 = sv1; © TS Nguyễn Phúc Khải Các thành phần biến struct biến bình thường, nên ta lấy địa chúng Kiểu