Computer >> Máy Tính >  >> Lập trình >> lập trình C

Giải thích việc cấp phát bộ nhớ động của con trỏ tới cấu trúc trong ngôn ngữ C

Con trỏ tới cấu trúc giữ phần bổ sung của toàn bộ cấu trúc.

Nó được sử dụng để tạo cấu trúc dữ liệu phức tạp như danh sách được liên kết, cây, đồ thị, v.v.

Các thành viên của cấu trúc có thể được truy cập bằng một toán tử đặc biệt được gọi là toán tử mũi tên (->).

Tuyên bố

Sau đây là phần khai báo cho con trỏ đến cấu trúc trong lập trình C -

struct tagname *ptr;

Ví dụ:struct student * s;

Đang truy cập

Dưới đây là giải thích cách truy cập con trỏ đến cấu trúc.

Ptr-> membername;

Ví dụ - s-> sno, s-> sname, s-> mark;

Ví dụ

Sau đây là chương trình C giải thích cấu trúc cấp phát bộ nhớ động trong lập trình 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 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;
}

Đầu ra

Khi chương trình trên được thực thi, nó tạo ra kết quả sau -

Enter the number of persons: 1
Enter name and age respectively: bhanu 24
Displaying Information:
Name: bhanu Age: 24

Ví dụ 2

Hãy xem xét một ví dụ khác về con trỏ và cấu trúc, trong đó, một chương trình C để chứng minh con trỏ và cấu trúc được đưa ra.

#include<stdio.h>
//Declaring outer and inter structures//
struct Manager{
   char Name[15];
   int Age;
   char Gender;
   float Level;
   char Role[50];
   char temp;
}m[20];
void main(){
   //Declaring variable for For loop and pointer variable//
   int i;
   struct Manager *p;
   //Defining Pointer//
   p=&m;
   //Reading User I/p//
   for (i=1;i<3;i++){//Declaring function to accept 2 manager's data//
      printf("Enter the Name of manager %d : ",i);
      gets(p->Name);
      printf("Enter the Age of manager %d : ",i);
      scanf("%d",&p->Age);
      scanf("%c",&p->temp);//Clearing Buffer//
      printf("Enter the Gender of manager %d : ",i);
      scanf("%c",&p->Gender);
      //scanf("%c",&p->temp);//Clearing Buffer//
      printf("Enter the level of manager %d : ",i);
      scanf("%f",&p->Level);
      scanf("%c",&p->temp);//Clearing Buffer//
      printf("Enter the role of manager %d : ",i);
      gets(p->Role);
      p++;
   }
   //Defining Pointer one more time to print output//
   p=&m;
   //Printing O/p//
   for (i=1;i<3;i++){
      printf("The Name of Manager %d is : %s\n",i,p->Name);
      printf("The Age of Manager %d is : %d\n",i,p->Age);
      printf("The Gender of Manager %d is : %c\n",i,p->Gender);
      printf("The Level of Manager %d is : %f\n",i,p->Level);
      printf("The Role of Manager %d is : %s\n",i,p->Role);
      p++;
   }
}

Đầu ra

Khi chương trình trên được thực thi, nó tạo ra kết quả sau -

Enter the Name of manager 1 : Hari
Enter the Age of manager 1 : 55
Enter the Gender of manager 1 : M
Enter the level of manager 1 : 2
Enter the role of manager 1 : Senior
Enter the Name of manager 2 : Bob
Enter the Age of manager 2 : 60
Enter the Gender of manager 2 : M
Enter the level of manager 2 : 1
Enter the role of manager 2 : CEO
The Name of Manager 1 is : Hari
The Age of Manager 1 is : 55
The Gender of Manager 1 is : M
The Level of Manager 1 is : 2.000000
The Role of Manager 1 is : Senior
The Name of Manager 2 is : Bob
The Age of Manager 2 is : 60
The Gender of Manager 2 is : M
The Level of Manager 2 is : 1.000000
The Role of Manager 2 is : CEO