11NGÔN NGỮ LẬP TRÌNH C/C++Nguyễn Hải ChâuKhoa Công nghệ thông tinTrường Đại học Công nghệ(Bài giảng tuần 8)2Nội dungzKiểu dữ liệu có cấu trúc{Cấu trúc{Hợp{TrườngzKiểu liệt kê
Trang 1NGÔN NGỮ LẬP TRÌNH
C/C++
Nguyễn Hải Châu Khoa Công nghệ thông tin Trường Đại học Công nghệ
(Bài giảng tuần 8)
2
Nội dung
zKiểu dữ liệu có cấu trúc
{ Cấu trúc { Hợp { Trường
zKiểu liệt kê
3
Kiểu cấu trúc
4
Khai báo và khởi tạo cấu trúc
struct <tên kiểu>
{ các thành phần;
} [<danh sách biến>];
khai báo biến
không
Khai báo biến cấu trúc
// Khai báo trong C
struct <tên cấu trúc> <danh sách biến>;
// Khai báo trong C++
<tên cấu trúc> <danh sách biến>;
Ví dụ:
struct vector {
Truy cập các thành phần cấu trúc
zNếu var là một biến cấu trúc và m là thành
phần của cấu trúc thì cách truy cập đến
thành phần là var.m
zNếu pvar là một biến con trỏ cấu trúc và
m là thành phần của cấu trúc thì cách truy
cập đến thành phần là pvar->m
Trang 2Phép gán và khởi tạo cấu trúc
zKhác với biến mảng, ta có thể gán hai
biến cấu trúc cùng kiểu
zVí dụ:
struct vector v1, v2, v3 = {1, 1, 1};
v1.x = 0; v1.y = 0; v1.z = 0;
v2 = v1; // Gán cấu trúc
8
Hàm và cấu trúc
9
Con trỏ và địa chỉ cấu trúc
zKhai báo con trỏ đến cấu trúc:
zstruct <tên cấu trúc> *p;
zTruy cập đến các thành phần:
{ p-><tên thành phần>, hoặc
{ *p.<tên thành phần>
zĐịa chỉ các thành phần:
{ &(p-><tên thành phần>)
10
Đối của hàm là cấu trúc
zMột cấu trúc có thể được sử dụng để làm đối của hàm dưới các dạng sau đây:
{ Là một biến cấu trúc, khi đó tham đối thực sự là một cấu trúc.
{ Là một con trỏ cấu trúc, tham đối thực sự là địa chỉ của một cấu trúc
{ Là một tham chiếu cấu trúc, tham đối thực sự là một cấu trúc.
{ Là một mảng cấu trúc hình thức hoặc con trỏ mảng, tham đối thực sự là tên mảng cấu trúc.
Giá trị của hàm là cấu trúc
zCũng tương tự như các kiểu dữ liệu cơ
bản, giá trị trả lại của một hàm cũng có thể
là các cấu trúc dưới các dạng sau:
{ là một biến cấu trúc.
{ là một con trỏ cấu trúc
{ là một tham chiếu cấu trúc.
Cấu trúc với thành phần kiểu bit
(trường)
Trang 3Khái niệm
zThông thường các biến trong C, C++ sử
dụng một số nguyên các byte để lưu trữ
zTrong các trường hợp cần thao tác với
các bit, ta sử dụng khai báo trường
14
Khai báo trường
struct <tên cấu trúc> { int <tên trường>:<số bit>;
<tên kiểu> <tên trường>’
}
z Chú ý: Tên trường bit phải có kiểu int hoặc unsigned int
15
Khai báo kiểu mới
ztypedef <tên kiểu> <tên kiểu mới>;
zVí dụ:
typedef struct vector vector_t;
typedef struct {
int ngay, thang, nam;
} Date;
16
Kiểu hợp (Union)
Khai báo
union <tên kiểu> {
Danh sách các thành phần;
};
zCách truy cập đến các thành phần: Giống
như kiểu cấu trúc
Kiểu liệt kê
Trang 4zCó thể gán các giá trị nguyên liên tiếp
(tính từ 0) cho các tên gọi cụ thể bằng
kiểu liệt kê theo khai báo sau đây:
zVí dụ:
enum Bool {Dung, Sai};
Bool Ok, NotOk;
Ok= Dung; NotOk = Sai;
Khai báo và sử dụng
20
Bài tập
zLàm các bài tập từ 1-28 (trang 179-183) trong giáo trình