Table of contents
Open Table of contents
1. Cấu trúc (Structures - Struct)
Trong khi mảng chỉ cho phép lưu các giá trị cùng kiểu, thì struct cho phép bạn gom nhóm các biến có kiểu dữ liệu khác nhau vào một đơn vị duy nhất.
Tạo một Struct:
Dùng từ khóa struct và khai báo các thành viên bên trong dấu ngoặc nhọn.
struct car {
string brand;
string model;
int year;
};
Truy cập Struct:
Bạn sử dụng dấu chấm . để truy cập vào các thành viên của struct.
car myCar1;
myCar1.brand = "BMW";
myCar1.model = "X5";
myCar1.year = 1999;
cout << myCar1.brand << " " << myCar1.year;
// Kết quả: BMW 1999
2. Kiểu Liệt kê (Enums)
enum (viết tắt của enumeration) là một kiểu dữ liệu đặc biệt dùng để định nghĩa một tập hợp các hằng số có tên, giúp mã nguồn dễ hiểu hơn.
enum Level {
LOW, // Tương ứng với 0
MEDIUM, // Tương ứng với 1
HIGH // Tương ứng với 2
};
int main() {
Level myVar = MEDIUM;
cout << myVar; // Kết quả: 1
return 0;
}
3. Tham chiếu (References)
Một biến tham chiếu là “bí danh” (alias) của một biến đã tồn tại. Bạn tạo tham chiếu bằng cách sử dụng toán tử &.
string food = "Pizza";
string &meal = food; // meal là bí danh của food
cout << food; // Kết quả: Pizza
cout << meal; // Kết quả: Pizza
meal = "Burger"; // Thay đổi meal cũng sẽ thay đổi food
cout << food; // Kết quả: Burger
4. Địa chỉ bộ nhớ (Memory Address)
Mọi biến khi được tạo ra đều được lưu trữ tại một địa chỉ cụ thể trong bộ nhớ máy tính. Bạn có thể xem địa chỉ này bằng toán tử &.
string food = "Pizza";
cout << &food; // Kết quả dạng Hexa: 0x6dfed4...
5. Con trỏ (Pointers)
Đây là khái niệm quyền năng nhất của C++. Con trỏ là một biến dùng để lưu trữ địa chỉ bộ nhớ của một biến khác.
Khai báo Con trỏ:
Sử dụng toán tử *. Kiểu dữ liệu của con trỏ phải khớp với kiểu dữ liệu của biến nó trỏ tới.
string food = "Pizza";
string* ptr = &food; // ptr lưu địa chỉ của food
cout << food; // In giá trị: Pizza
cout << &food; // In địa chỉ bộ nhớ
cout << ptr; // In địa chỉ bộ nhớ (giống dòng trên)
Giải tham chiếu (Dereferencing):
Để lấy lại giá trị thực tế tại địa chỉ mà con trỏ đang giữ, bạn sử dụng lại toán tử * trước tên con trỏ.
string food = "Pizza";
string* ptr = &food;
cout << *ptr; // Kết quả: Pizza (Lấy giá trị tại địa chỉ ptr giữ)
Tại sao lại dùng Con trỏ?
- Cho phép thao tác trực tiếp với bộ nhớ.
- Giúp truyền mảng và dữ liệu lớn vào hàm một cách hiệu quả (không cần copy dữ liệu).
- Là nền tảng để xây dựng các cấu trúc dữ liệu phức tạp như Linked List, Trees.
Lời kết Module 5
Module 5 đã mở ra cánh cửa tiến vào “trái tim” của C++. Con trỏ có thể hơi khó hiểu lúc mới bắt đầu, nhưng khi đã làm chủ được nó, bạn sẽ kiểm soát được tài nguyên máy tính một cách cực kỳ mạnh mẽ.
Trong Module 6, chúng ta sẽ học về Hàm (Functions) - cách chia nhỏ chương trình thành các khối mã có thể tái sử dụng.
Hẹn gặp lại các bạn!