Pointer & Struct trong C

Pointer đến Struct

struct name {
    member1;
    member2;
    .
    .
};

int main()
{
    struct name *ptr, Harry;
}

Ở đây ptrpointer đến struct.


Ví dụ : Truy cập các phần tử bằng pointer

Để truy cập các phần tử của struct bằng pointer ta cần dùng toán tử ->.

#include <stdio.h>
struct person
{
   int age;
   float weight;
};

int main()
{
    struct person *personPtr, person1;
    personPtr = &person1;   

    printf("Enter age: ");
    scanf("%d", &personPtr->age);

    printf("Enter weight: ");
    scanf("%f", &personPtr->weight);

    printf("Displaying:\n");
    printf("Age: %d\n", personPtr->age);
    printf("weight: %f", personPtr->weight);

    return 0;
}

Trong ví dụ này, địa chỉ của person1 được chứa trong personPtr qua lệnh personPtr = &person1;.

Bây giờ chúng ta có thể truy cập vào các phần tử của person1 thông qua personPtr bằng cách:
personPtr->age tương đương với (*personPtr).age tương đương với person1.age.
personPtr->weight tương đương với (*personPtr).weight tương đương với person1.weight.


Cấp phát động của Struct

Đôi khi, số lượng biến cấu trúc bạn khai báo có thể không đủ. Bạn có thể cần phân bổ bộ nhớ trong thời gian chạy. Đây là cách bạn có thể đạt được điều này trong lập trình C.

Ví dụ

#include <stdio.h>
#include <stdlib.h>
struct person {
   int age;
   float weight;
   char name[30];
};

int main()
{
   struct person *ptr;
   int i, n;

   printf("Nhập số người: ");
   scanf("%d", &n);

   // phân phát bộ nhớ cho n số người
   ptr = (struct person*) malloc(n * sizeof(struct person));

   for(i = 0; i < n; ++i)
   {
       printf("Nhập tên và tuổi: ");

       scanf("%s %d", (ptr+i)->name, &(ptr+i)->age);
   }

   printf("Hiển thị thông tin:\n");
   for(i = 0; i < n; ++i)
       printf("Tên: %s\tTuổi: %d\n", (ptr+i)->name, (ptr+i)->age);

   return 0;
}

Kết quả:

Nhập số người:  2
Nhập tên và tuổi:  Saitama 24
Nhập tên và tuổi:  King 32
Hiển thị thông tin:
Tên: Saitama    Tuổi: 24
Tên: King   Tuổi: 32

Trong ví dụ trên, n là số biến struct person được tạo ra.
Để phân bố bộ nhớ cho n biến struct person, ta dùng lệnh

ptr = (struct person*) malloc(n * sizeof(struct person));

Sau đó, ta sử dụng pointer ptr để truy cập vào các phần tử của struct person.

Series Navigation<< Struct trong CStruct và Hàm 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 *