Cấu trúc dữ liệu C ++
Mảng C / C ++ cho phép bạn xác định các biến kết hợp một số mục dữ liệu cùng loại, nhưng structure là một kiểu dữ liệu khác do người dùng xác định cho phép bạn kết hợp các mục dữ liệu thuộc các loại khác nhau.
Cấu trúc được sử dụng để biểu thị một bản ghi, giả sử bạn muốn theo dõi sách của mình trong thư viện. Bạn có thể muốn theo dõi các thuộc tính sau về mỗi cuốn sách -
- Title
- Author
- Subject
- ID sách
Xác định cấu trúc
Để xác định một cấu trúc, bạn phải sử dụng câu lệnh struct. Câu lệnh struct xác định một kiểu dữ liệu mới, với nhiều hơn một thành viên, cho chương trình của bạn. Định dạng của câu lệnh struct là:
struct [structure tag] {
member definition;
member definition;
...
member definition;
} [one or more structure variables];
Các structure taglà tùy chọn và mỗi định nghĩa thành viên là một định nghĩa biến bình thường, chẳng hạn như int i; hoặc float f; hoặc bất kỳ định nghĩa biến hợp lệ nào khác. Ở cuối định nghĩa của cấu trúc, trước dấu chấm phẩy cuối cùng, bạn có thể chỉ định một hoặc nhiều biến cấu trúc nhưng nó là tùy chọn. Đây là cách bạn khai báo cấu trúc Sách -
struct Books {
char title[50];
char author[50];
char subject[100];
int book_id;
} book;
Truy cập thành viên cấu trúc
Để truy cập bất kỳ thành viên nào của một cấu trúc, chúng tôi sử dụng member access operator (.). Toán tử truy cập thành viên được mã hóa là dấu chấm giữa tên biến cấu trúc và thành viên cấu trúc mà chúng ta muốn truy cập. Bạn sẽ sử dụngstructtừ khóa để xác định các biến của kiểu cấu trúc. Sau đây là ví dụ để giải thích cách sử dụng cấu trúc:
#include <iostream>
#include <cstring>
using namespace std;
struct Books {
char title[50];
char author[50];
char subject[100];
int book_id;
};
int main() {
struct Books Book1; // Declare Book1 of type Book
struct Books Book2; // Declare Book2 of type Book
// book 1 specification
strcpy( Book1.title, "Learn C++ Programming");
strcpy( Book1.author, "Chand Miyan");
strcpy( Book1.subject, "C++ Programming");
Book1.book_id = 6495407;
// book 2 specification
strcpy( Book2.title, "Telecom Billing");
strcpy( Book2.author, "Yakit Singha");
strcpy( Book2.subject, "Telecom");
Book2.book_id = 6495700;
// Print Book1 info
cout << "Book 1 title : " << Book1.title <<endl;
cout << "Book 1 author : " << Book1.author <<endl;
cout << "Book 1 subject : " << Book1.subject <<endl;
cout << "Book 1 id : " << Book1.book_id <<endl;
// Print Book2 info
cout << "Book 2 title : " << Book2.title <<endl;
cout << "Book 2 author : " << Book2.author <<endl;
cout << "Book 2 subject : " << Book2.subject <<endl;
cout << "Book 2 id : " << Book2.book_id <<endl;
return 0;
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
Book 1 title : Learn C++ Programming
Book 1 author : Chand Miyan
Book 1 subject : C++ Programming
Book 1 id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Yakit Singha
Book 2 subject : Telecom
Book 2 id : 6495700
Cấu trúc dưới dạng đối số hàm
Bạn có thể truyền một cấu trúc dưới dạng đối số hàm theo cách tương tự như khi bạn truyền bất kỳ biến hoặc con trỏ nào khác. Bạn sẽ truy cập các biến cấu trúc theo cách tương tự như bạn đã truy cập trong ví dụ trên -
#include <iostream>
#include <cstring>
using namespace std;
void printBook( struct Books book );
struct Books {
char title[50];
char author[50];
char subject[100];
int book_id;
};
int main() {
struct Books Book1; // Declare Book1 of type Book
struct Books Book2; // Declare Book2 of type Book
// book 1 specification
strcpy( Book1.title, "Learn C++ Programming");
strcpy( Book1.author, "Chand Miyan");
strcpy( Book1.subject, "C++ Programming");
Book1.book_id = 6495407;
// book 2 specification
strcpy( Book2.title, "Telecom Billing");
strcpy( Book2.author, "Yakit Singha");
strcpy( Book2.subject, "Telecom");
Book2.book_id = 6495700;
// Print Book1 info
printBook( Book1 );
// Print Book2 info
printBook( Book2 );
return 0;
}
void printBook( struct Books book ) {
cout << "Book title : " << book.title <<endl;
cout << "Book author : " << book.author <<endl;
cout << "Book subject : " << book.subject <<endl;
cout << "Book id : " << book.book_id <<endl;
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
Book title : Learn C++ Programming
Book author : Chand Miyan
Book subject : C++ Programming
Book id : 6495407
Book title : Telecom Billing
Book author : Yakit Singha
Book subject : Telecom
Book id : 6495700
Con trỏ đến cấu trúc
Bạn có thể xác định con trỏ đến cấu trúc theo cách tương tự như bạn định nghĩa con trỏ cho bất kỳ biến nào khác như sau:
struct Books *struct_pointer;
Bây giờ, bạn có thể lưu trữ địa chỉ của một biến cấu trúc trong biến con trỏ đã xác định ở 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ủa cấu trúc như sau:
struct_pointer = &Book1;
Để truy cập các 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 phải sử dụng toán tử -> như sau:
struct_pointer->title;
Hãy để chúng tôi viết lại ví dụ trên bằng cách sử dụng con trỏ cấu trúc, hy vọng điều này sẽ dễ dàng cho bạn hiểu khái niệm -
#include <iostream>
#include <cstring>
using namespace std;
void printBook( struct Books *book );
struct Books {
char title[50];
char author[50];
char subject[100];
int book_id;
};
int main() {
struct Books Book1; // Declare Book1 of type Book
struct Books Book2; // Declare Book2 of type Book
// Book 1 specification
strcpy( Book1.title, "Learn C++ Programming");
strcpy( Book1.author, "Chand Miyan");
strcpy( Book1.subject, "C++ Programming");
Book1.book_id = 6495407;
// Book 2 specification
strcpy( Book2.title, "Telecom Billing");
strcpy( Book2.author, "Yakit Singha");
strcpy( Book2.subject, "Telecom");
Book2.book_id = 6495700;
// Print Book1 info, passing address of structure
printBook( &Book1 );
// Print Book1 info, passing address of structure
printBook( &Book2 );
return 0;
}
// This function accept pointer to structure as parameter.
void printBook( struct Books *book ) {
cout << "Book title : " << book->title <<endl;
cout << "Book author : " << book->author <<endl;
cout << "Book subject : " << book->subject <<endl;
cout << "Book id : " << book->book_id <<endl;
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
Book title : Learn C++ Programming
Book author : Chand Miyan
Book subject : C++ Programming
Book id : 6495407
Book title : Telecom Billing
Book author : Yakit Singha
Book subject : Telecom
Book id : 6495700
Từ khóa typedef
Có một cách dễ dàng hơn để xác định cấu trúc hoặc bạn có thể tạo các loại "bí danh". Ví dụ -
typedef struct {
char title[50];
char author[50];
char subject[100];
int book_id;
} Books;
Bây giờ, bạn có thể sử dụng Sách trực tiếp để xác định các biến của loại Sách mà không cần sử dụng từ khóa struct. Sau đây là ví dụ -
Books Book1, Book2;
Bạn có thể dùng typedef từ khóa cho không phải cấu trúc cũng như sau:
typedef long int *pint32;
pint32 x, y, z;
x, y và z đều là con trỏ đến số nguyên dài.