Trong ngôn ngữ lập trình C/C++, mảng cho phép bạn lưu trữ nhiều giá trị cùng kiểu dữ liệu. Tuy nhiên, cấu trúc là một loại dữ liệu khác, cho phép bạn tổ hợp các dữ liệu có kiểu khác nhau.
Khái niệm cấu trúc
Cấu trúc trong C/C++ được sử dụng để biểu diễn một bản ghi. Giả sử bạn muốn lưu trữ thông tin về một quyển sách trong thư viện của bạn, bạn có thể lưu trữ các thuộc tính sau:
- Tiêu đề
- Tác giả
- Chủ đề
- Book ID
Định nghĩa cấu trúc trong C++
Để định nghĩa một cấu trúc, bạn sử dụng từ khóa struct
. Với câu lệnh struct
, bạn có thể định nghĩa một kiểu dữ liệu mới với nhiều thành viên. Dưới đây là cú pháp tổng quát:
struct [tên_cấu_trúc] { phần định nghĩa thành viên; phần định nghĩa thành viên; ... phần định nghĩa thành viên; } [một hoặc nhiều_biến_cấu_trúc];
Lưu ý rằng [tên_cấu_trúc]
có thể tuỳ ý và một thành viên định nghĩa có thể là một biến thông thường như int i
hoặc một định nghĩa biến khác. Ở phần cuối cùng của định nghĩa cấu trúc, trước dấu chấm phẩy, bạn có thể xác định một hoặc nhiều biến cấu trúc (tuỳ chọn). Dưới đây là cách khai báo biến cấu trúc Book
:
struct Book { char tieude[50]; char tacgia[50]; char chude[100]; int book_id; } book;
Truy cập vào thành viên của cấu trúc trong C++
Để truy cập vào bất kỳ thành viên nào của cấu trúc, bạn sử dụng toán tử .
. Toán tử .
giữa tên biến cấu trúc và thành viên cấu trúc sẽ cho phép bạn truy cập vào thành viên đó. Bạn cần sử dụng từ khóa struct
để định nghĩa biến kiểu cấu trúc. Dưới đây là ví dụ về cách sử dụng cấu trúc trong C++:
#include #include using namespace std; struct Book { char tieude[50]; char tacgia[50]; char chude[100]; int book_id; }; int main() { struct Book QuyenSach1; // Khai báo QuyenSach1 là kiểu Book struct Book QuyenSach2; // Khai báo QuyenSach2 là kiểu Book // Chi tiết về quyển sách thứ nhất strcpy(QuyenSach1.tieude, "Ngôn ngữ Lập trình C++"); strcpy(QuyenSach1.tacgia, "Phạm Văn At"); strcpy(QuyenSach1.chude, "Lập trình"); QuyenSach1.book_id = 1225; // Chi tiết về quyển sách thứ hai strcpy(QuyenSach2.tieude, "Tôi thấy hoa vàng trên cỏ xanh"); strcpy(QuyenSach2.tacgia, "Nguyễn Nhật Ánh"); strcpy(QuyenSach2.chude, "Văn học"); QuyenSach2.book_id = 3214; // In thông tin về QuyenSach1 cout << "Tiêu đề của Quyển sách thứ nhất là: " << QuyenSach1.tieude << endl; cout << "Tác giả của Quyển sách thứ nhất là: " << QuyenSach1.tacgia << endl; cout << "Chủ đề của Quyển sách thứ nhất là: " << QuyenSach1.chude << endl; cout << "ID của Quyển sách thứ nhất là: " << QuyenSach1.book_id << endl; cout << "==================================================" << endl; // In thông tin về QuyenSach2 cout << "Tiêu đề của Quyển sách thứ hai là: " << QuyenSach2.tieude << endl; cout << "Tác giả của Quyển sách thứ hai là: " << QuyenSach2.tacgia << endl; cout << "Chủ đề của Quyển sách thứ hai là: " << QuyenSach2.chude << endl; cout << "ID của Quyển sách thứ hai là: " << QuyenSach2.book_id << endl; return 0; }
Cấu trúc dưới dạng tham số hàm trong C++
Bạn có thể truyền một cấu trúc như một tham số của hàm giống như khi truyền một biến hoặc con trỏ khác. Để truy cập vào biến cấu trúc theo cách tương tự như trên ví dụ trước đó:
#include #include using namespace std; void inthongtin(struct Book book); struct Book { char tieude[50]; char tacgia[50]; char chude[100]; int book_id; }; int main() { struct Book QuyenSach1; // Khai báo QuyenSach1 là kiểu Book struct Book QuyenSach2; // Khai báo QuyenSach2 là kiểu Book // Chi tiết về quyển sách thứ nhất strcpy(QuyenSach1.tieude, "Ngôn ngữ Lập trình C++"); strcpy(QuyenSach1.tacgia, "Phạm Văn At"); strcpy(QuyenSach1.chude, "Lập trình"); QuyenSach1.book_id = 1225; // Chi tiết về quyển sách thứ hai strcpy(QuyenSach2.tieude, "Tôi thấy hoa vàng trên cỏ xanh"); strcpy(QuyenSach2.tacgia, "Nguyễn Nhật Ánh"); strcpy(QuyenSach2.chude, "Văn học"); QuyenSach2.book_id = 3214; // In thông tin về QuyenSach1, bằng cách truyền địa chỉ của cấu trúc inthongtin(&QuyenSach1); // In thông tin về QuyenSach2, bằng cách truyền địa chỉ của cấu trúc inthongtin(&QuyenSach2); return 0; } // Hàm này chấp nhận con trỏ tới cấu trúc làm tham số void inthongtin(struct Book *book) { cout << "Tiêu đề sách: " << book->tieude << endl; cout << "Tác giả: " << book->tacgia << endl; cout << "Chủ đề: " << book->chude << endl; cout << "ID của sách là: " << book->book_id << endl; cout << "========================================" << endl; }
Con trỏ tới cấu trúc trong C++
Bạn có thể định nghĩa con trỏ tới cấu trúc tương tự như khi định nghĩa con trỏ tới bất kỳ biến nào khác:
struct Book *contro_struct;
Bây giờ, bạn có thể lưu địa chỉ của biến cấu trúc vào biến con trỏ, được định nghĩa ở trên. Để tìm địa chỉ của một biến cấu trúc, hãy đặt toán tử &
trước tên cấu trúc:
contro_struct = &QuyenSach1;
Để truy cập vào thành viên của một cấu trúc bằng cách sử dụng con trỏ tới cấu trúc, bạn cần sử dụng toán tử ->
:
contro_struct->tieude;
Để hiểu rõ hơn về khái niệm này, chúng ta sẽ viết lại ví dụ trước sử dụng con trỏ cấu trúc:
#include #include using namespace std; void inthongtin(struct Book *book); struct Book { char tieude[50]; char tacgia[50]; char chude[100]; int book_id; }; int main() { struct Book QuyenSach1; // Khai báo QuyenSach1 là kiểu Book struct Book QuyenSach2; // Khai báo QuyenSach2 là kiểu Book // Chi tiết về quyển sách thứ nhất strcpy(QuyenSach1.tieude, "Ngôn ngữ Lập trình C++"); strcpy(QuyenSach1.tacgia, "Phạm Văn At"); strcpy(QuyenSach1.chude, "Lập trình"); QuyenSach1.book_id = 1225; // Chi tiết về quyển sách thứ hai strcpy(QuyenSach2.tieude, "Tôi thấy hoa vàng trên cỏ xanh"); strcpy(QuyenSach2.tacgia, "Nguyễn Nhật Ánh"); strcpy(QuyenSach2.chude, "Văn học"); QuyenSach2.book_id = 3214; // In thông tin của QuyenSach1, bằng cách truyền địa chỉ của cấu trúc inthongtin(&QuyenSach1); // In thông tin của QuyenSach2, bằng cách truyền địa chỉ của cấu trúc inthongtin(&QuyenSach2); return 0; } // Hàm này chấp nhận con trỏ tới cấu trúc làm tham số void inthongtin(struct Book *book) { cout << "Tiêu đề sách: " << book->tieude << endl; cout << "Tác giả: " << book->tacgia << endl; cout << "Chủ đề: " << book->chude << endl; cout << "ID của sách: " << book->book_id << endl; cout << "========================================" << endl; }
Từ khóa typedef trong C++
Có một cách dễ dàng hơn để định nghĩa cấu trúc hoặc bạn có thể "đặt tên khác" cho các kiểu bạn tạo. Ví dụ:
typedef struct { char tieude[50]; char tacgia[50]; char chude[100]; int book_id; } Books;
Bây giờ, bạn có thể sử dụng Books
trực tiếp để định nghĩa các biến kiểu cấu trúc Books
mà không cần sử dụng từ khóa struct
. Dưới đây là ví dụ:
Books QuyenSach1, QuyenSach2;
Bạn cũng có thể sử dụng từ khóa typedef
trong C++ cho các kiểu không phải là cấu trúc, như sau:
typedef long int *pint32; pint32 x, y, z;
Với x
, y
, và z
đều là con trỏ tới long int
.
Theo Tutorialspoint