Đặt vấn đề
Đã học qua về biến, cách để khai báo một biến. Thử khai báo và lưu trữ các thông tin của một sinh viên gồm có họ tên, mã sinh viên, điểm,... Sẽ thực hiện như sau?
char student_name[30]; char student_id[10]; float student_score;
Thực hiện lại thao tác trên nhưng với 100 sinh viên. Có thể giải quyết vấn đề như sau:
char student_name[100][30]; char student_id[100][10]; float student_score[100];
Dễ dàng nhận thấy rằng cách làm này rất dễ sai sót và gây ra rối mắt, bởi lượng thông tin khai báo quá nhiều. Vậy một câu hỏi đặt ra là: Tại sao không gom các thông tin liên quan này lại với nhau thành một cục cho dễ quản lý.
Khái niệm struct
Hiểu một cách nôm na thì struct
cho phép người lập trình tự định nghĩa ra một kiểu dữ liệu mới, gom nhiều thông tin của một đối tượng nào đó lại với nhau dưới một cái tên cho dễ quản lý. Đây cũng chính là tư tưởng chủ đạo của struct
.
Cú pháp
Cú pháp của struct như sau:
struct object_names { member1_type member1_name; member2_type member2_name; member3_type member3_name; . . };
Trở lại với vấn đề trên
Thử thực thi lại chương trình trên với struct
struct Student { // Cách tạo struct char m_name[30]; char m_id[10]; float m_score; }; int main() { struct Student _student[100]; // Khai báo đối tượng với kiểu dữ liệu mới strcpy(_student[0].m_name, "Ryan"); // Truy cập vào một đối tượng strcpy(_student[0].m_id, "11520035"); _student[0].m_score = 9.5f; }
Ở trên đã đưa ra khai báo và truy cập dữ liệu khi sử dụng struct. Với cách thức như trên lúc này việc quản lý tên hay điểm sẽ được tập trung và dễ quản lý hơn. Với bài toán trên có thể chạy vòng lặp để truy cập hết các đối tượng.