C cấu trúc và con trỏ

Trong hướng dẫn này, bạn sẽ học cách sử dụng con trỏ để truy cập các thành viên của cấu trúc trong lập trình C. Bạn cũng sẽ học cách phân bổ động bộ nhớ của các kiểu cấu trúc.

Trước khi bạn tìm hiểu về cách con trỏ có thể được sử dụng với cấu trúc, hãy nhớ xem các hướng dẫn sau:

  • C Pointers
  • C struct

C Con trỏ tới cấu trúc

Đây là cách bạn có thể tạo con trỏ đến cấu trúc.

struct name {
    member1;
    member2;
    .
    .
};

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

Ở đây, ptr là một con trỏ tới struct.


Ví dụ: Truy cập thành viên bằng Pointer

Để 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ỏ, chúng ta sử 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 lưu trữ trong con trỏ personPtr bằng cách sử dụng personPtr = &person1;.

Bây giờ, bạn có thể truy cập các thành viên của person1 bằng personPtrcon trỏ.

Nhân tiện,

  • personPtr->age is equivalent to (*personPtr).age
  • personPtr->weight is equivalent to (*personPtr).weight

Cấp phát bộ nhớ động của cấu trúc

Trước khi bạn tiến hành phần này, chúng tôi khuyên bạn nên kiểm tra cấp phát bộ nhớ động C .

Đô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ụ: Cấp phát bộ nhớ động của cấu trúc

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

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

   printf("Enter the number of persons: ");
   scanf("%d", &n);

   // allocating memory for n numbers of struct person
   ptr = (struct person*) malloc(n * sizeof(struct person));

   for(i = 0; i < n; ++i)
   {
       printf("Enter first name and age respectively: ");

       // To access members of 1st struct person,
       // ptr->name and ptr->age is used

       // To access members of 2nd struct person,
       // (ptr+1)->name and (ptr+1)->age is used
       scanf("%s %d", (ptr+i)->name, &(ptr+i)->age);
   }

   printf("Displaying Information:\n");
   for(i = 0; i < n; ++i)
       printf("Name: %s\tAge: %d\n", (ptr+i)->name, (ptr+i)->age);

   return 0;
}

Khi bạn chạy chương trình, kết quả đầu ra sẽ là:

Enter the number of persons:  2
Enter first name and age respectively:  Harry 24
Enter first name and age respectively:  Gary 32
Displaying Information:
Name: Harry	Age: 24
Name: Gary	Age: 32

Trong ví dụ trên, n số biến cấu trúc được tạo trong đó n được nhập bởi người dùng.

Để phân bổ bộ nhớ cho n số người cấu trúc , chúng tôi đã sử dụng,

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

Sau đó, chúng tôi sử dụng con trỏ ptr để truy cập các phần tử của người .









Gõ tìm kiếm nhanh...