×

Khai báo cấu trúc dữ liệu chứa nhiều biến với struct trong C

Trong ngôn ngữ lập trình C, "struct" là một từ khoá được sử dụng để tạo ra một kiểu dữ liệu mới cho phép bạn nhóm các biến có liên quan lại với nhau dưới một tên duy nhất. Điều này rất hữu ích khi bạn cần đại diện cho một thực thể chứa nhiều thuộc tính khác nhau, ví dụ như một nhân viên, một sinh viên, một điểm trong hệ tọa độ, v.v.

Cách khai báo và sử dụng struct

Khai báo struct

Khai báo một struct bao gồm việc xác định tên của struct và các biến thành phần của nó. Cú pháp tổng quát như sau:

struct TênStruct {
    kiểu_dữ_liệu thành_phần_1;
    kiểu_dữ_liệu thành_phần_2;
    // ... các thành phần khác
};

Ví dụ, giả sử bạn muốn tạo ra một kiểu struct để đại diện cho một sinh viên:

struct SinhVien {
    int ma_so;
    char ten[100];
    float diem_trung_binh;
};

Khởi tạo biến struct

Sau khi đã khai báo struct, bạn có thể khởi tạo các biến thuộc kiểu struct đó. Có nhiều cách để khởi tạo một biến struct.

struct SinhVien sv1; // Khởi tạo biến sinh viên
sv1.ma_so = 123;
strcpy(sv1.ten, "Nguyen Van A");
sv1.diem_trung_binh = 8.5;

Bạn cũng có thể khởi tạo trực tiếp khi khai báo:

struct SinhVien sv2 = {124, "Tran Thi B", 9.0};

Truy cập thành phần của struct

Để truy cập các thành phần của một struct, bạn sử dụng toán tử dấu chấm (.):

printf("Ma so: %d\n", sv1.ma_so);
printf("Ten: %s\n", sv1.ten);
printf("Diem trung binh: %.1f\n", sv1.diem_trung_binh);

Sử dụng con trỏ và hàm với struct

Con trỏ và struct

Bạn có thể sử dụng con trỏ để trỏ tới một struct và truy cập các thành phần của nó qua toán tử dấu mũi tên (->):

struct SinhVien *ptr = &sv1;
printf("Ma so (su dung con tro): %d\n", ptr->ma_so);

Hàm và struct

Bạn có thể truyền struct vào hàm hay trả về struct từ hàm. Khi truyền struct vào hàm, bạn có thể truyền bằng giá trị hoặc theo con trỏ.

Truyền struct bằng giá trị:

void hienThiThongTin(struct SinhVien sv) {
    printf("Ma so: %d\n", sv.ma_so);
    printf("Ten: %s\n", sv.ten);
    printf("Diem trung binh: %.1f\n", sv.diem_trung_binh);
}

Truyền struct theo con trỏ:

void capNhatDiem(struct SinhVien *sv, float diemMoi) {
    sv->diem_trung_binh = diemMoi;
}

Trong các trường hợp nâng cao, bạn có thể sử dụng typedef để giảm độ phức tạp khi khai báo các biến:

typedef struct {
    int ma_so;
    char ten[100];
    float diem_trung_binh;
} SinhVien;

SinhVien sv3 = {125, "Le Thi C", 7.5};

Tóm lại

Việc sử dụng struct trong C cung cấp một cách tiện lợi để nhóm các biến có liên quan lại với nhau. Điều này giúp mã nguồn trở nên rõ ràng và dễ quản lý hơn. Bằng cách kết hợp struct với con trỏ và hàm, bạn có thể xây dựng những ứng dụng phức tạp và quản lý dữ liệu một cách hiệu quả.

Comments