Struct trong C

Struct là gì?

Trong lập trình C, struct (hoặc cấu trúc) là một tập hợp các biến (có thể thuộc các loại khác nhau) dưới một tên duy nhất.


Định nghĩa struct như thế nào?

Trước khi bạn có thể tạo các biến cấu trúc, bạn cần xác định kiểu dữ liệu của nó. Để xác định một cấu trúc, từ khóa struct được sử dụng.

struct structureName 
{
    dataType member1;
    dataType member2;
    ...
};

Ví dụ

struct Person
{
    char name[50];
    int citNo;
    float salary;
};

Tạo các biến cấu trúc

Khi một kiểu cấu trúc được khai báo, không có bộ nhớ hoặc bộ nhớ được phân bổ. Để phân bổ bộ nhớ của một loại cấu trúc nhất định và làm việc với nó, chúng ta cần tạo các biến.

struct Person
{
    char name[50];
    int citNo;
    float salary;
};

int main()
{
    struct Person person1, person2, p[20];
    return 0;
}

person1, person2 là 2 biến cấu trúc Person.
p là một array tập hợp 20 phần tử cấu trúc Person.


Truy cập vào các thành phần của cấu trúc

Có hai loại toán tử được sử dụng để truy cập các thành viên của cấu trúc.
1. .– toán tử thành viên
2. ->– toán tử pointer cấu trúc


Ví dụ: tính tổng hai khoảng cách

// Program to add two distances (feet-inch)
#include <stdio.h>
struct Distance
{
    int feet;
    float inch;
} dist1, dist2, sum;

int main()
{
    printf("1st distance\n");
    printf("Enter feet: ");
    scanf("%d", &dist1.feet);

    printf("Enter inch: ");
    scanf("%f", &dist1.inch);
    printf("2nd distance\n");

    printf("Enter feet: ");
    scanf("%d", &dist2.feet);

    printf("Enter inch: ");
    scanf("%f", &dist2.inch);

    // adding feet
    sum.feet = dist1.feet + dist2.feet;
    // adding inches
    sum.inch = dist1.inch + dist2.inch;

    // changing to feet if inch is greater than 12
    while (sum.inch >= 12) 
    {
        ++sum.feet;
        sum.inch = sum.inch - 12;
    }

    printf("Sum of distances = %d\'-%.1f\"", sum.feet, sum.inch);
    return 0;
}

kết quả

1st distance
Enter feet: 12
Enter inch: 7.9
2nd distance
Enter feet: 2
Enter inch: 9.8
Sum of distances = 15'-5.7"

Từ khóa typedef

Chúng ta sử dụng từ khóa typedef để tạo tên bí danh cho các loại dữ liệu. Nó thường được sử dụng với các cấu trúc để đơn giản hóa cú pháp khai báo biến.

Đoạn code

struct Distance{
    int feet;
    float inch;
};

int main() {
    struct Distance d1, d2;
}

tương đương với

typedef struct Distance{
    int feet;
    float inch;
} distances;

int main() {
    distances d1, d2;
}

Cấu trúc lồng nhau

Bạn có thể tạo các cấu trúc trong một cấu trúc khác. Ví dụ:

struct complex
{
 int imag;
 float real;
};

struct number
{
   struct complex comp;
   int integers;
} num1, num2;

Giả sử bạn muốn đặt imag của num2 thành 11. Bạn có thể làm như sau

num2.comp.imag = 11;

Tại sao lại dùng struct trong C?

Giả sử, bạn muốn lưu trữ thông tin về một người: tên của anh ấy/cô ấy, số quốc tịch và tiền lương. Bạn có thể tạo các biến khác nhau: name, citNo and salary để lưu trữ thông tin này.

Nếu bạn cần lưu trữ thông tin của nhiều người thì sao? Bây giờ, bạn cần tạo các biến khác nhau cho mỗi thông tin cho mỗi người: name1, citNo1, salary1, name2, citNo2, salary2,…

Một cách tiếp cận tốt hơn là có một tập hợp tất cả các thông tin liên quan dưới một tên cấu trúc Person và sử dụng nó cho mỗi người.

Series Navigation<< Các hàm stringPointer & Struct trong C >>

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *