
1
1
NGÔ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>];
zMỗi thành phần (một trường) là một
khai báo biến
zPhần <danh sách biến> có thểcó hoặc
không
5
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 {
double x, y, z;
};
struct vector v1, *v2; // Khai báo vector trong C
vector v3, *v4; // Khai báo vector trong C++
6
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à mlà 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à
mlà thành phần của cấu trúc thì cách truy
cập đến thành phần là pvar->m
zVí dụ:
{Thành phần x, y, z của các vector trong ví dụ
trên: v1.x, v1.y, v1.z; v2->x, v2->y, v2->z

2
7
Phé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.
11
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.
12
Cấu trúc với thành phần kiểu bit
(trường)

3
13
Khá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>’
...
}
zChú ý: 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)
17
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
18
Kiểu liệt kê

4
19
zCó 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:
zenum tên_kiểu { d/s tên các giá trị};
zVí dụ:
{enum Bool {false, true};
Khai báo
20
Sửdụng kiểu liệt kê
Biến tham chiếu
int i;
int &j=i; // j là một cách tham chiếu khác
// của biến i
j = 5; // Sau lệnh gán này i cũng có giá trị5
Biến tham chiếu phải được khởi tạo khi
khai báo

