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

Làm cách nào để chuyển địa chỉ của cấu trúc làm đối số cho hàm trong C?

Có ba cách mà các giá trị của cấu trúc có thể được chuyển từ chức năng này sang chức năng khác. Chúng như sau -

  • Chuyển các thành viên riêng lẻ làm đối số để hoạt động.

  • Chuyển toàn bộ cấu trúc làm đối số cho hàm.

  • Truyền địa chỉ của cấu trúc làm đối số cho hàm.

Bây giờ, chúng ta hãy hiểu cách chuyển địa chỉ của cấu trúc làm đối số cho hàm.

  • Địa chỉ của cấu trúc được chuyển làm đối số cho hàm.

  • Nó được thu thập trong một con trỏ tới cấu trúc trong tiêu đề hàm.

Ưu điểm

Ưu điểm của việc chuyển địa chỉ của cấu trúc làm đối số cho hàm như sau -

  • Không lãng phí bộ nhớ vì không cần tạo lại bản sao.

  • Không cần trả về các giá trị, vì hàm có thể truy cập gián tiếp vào toàn bộ cấu trúc và sau đó hoạt động trên đó.

Ví dụ

Chương trình sau đây chỉ ra cách chuyển địa chỉ của một cấu trúc làm đối số cho hàm -

#include<stdio.h>
struct date{
   int day;
   char month[10];
   int year;
};
int main(){
   struct date d;
   printf("enter the day,month and year:");
   scanf("%d%s%d",&d.day,d.month,&d.year);
   display(&d);
   return 0;
}
void display(struct date *p){
   printf("day=%d\n",p->day);
   printf("month=%s\n",p->month);
   printf("year=%d\n",p->year);
}

Đầu ra

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

enter the day, month and year:20 MAR 2021
day=20
month=MAR
year=2021

Ví dụ

Dưới đây là một chương trình C để chứng minh các cấu trúc và hàm bằng cách gọi toàn bộ hàm dưới dạng một đối số. Do phương thức gọi hàm này, không lãng phí bộ nhớ, vì chúng ta không cần sao chép lại và trả về các giá trị.

#include<stdio.h>
//Declaring structure//
struct student{
   char Name[100];
   int Age;
   float Level;
   char Grade[50];
   char temp;
}s[5];
//Declaring and returning Function//
void show(struct student *p){
   //Declaring variable for For loop within the function//
   int i;
   //For loop for printing O/p//
   for(i=1;i<3;i++){
      printf("The Name of student %d is : %s\n",i,p->Name);
      printf("The Age of student %d is : %d\n",i,p->Age);
      printf("The Level of student %d is : %f\n",i,p->Level);
      printf("The Grade of student %d is : %s\n",i,p->Grade);
      p++;
   }
}
void main(){
   //Declaring variable for for loop//
   int i;
   //Declaring structure with pointer//
   struct student *p;
   //Reading User I/p//
   for(i=0;i<2;i++){
      printf("Enter the Name of student %d : ",i+1);
      gets(s[i].Name);
      printf("Enter the Age of student %d : ",i+1);
      scanf("%d",&s[i].Age);
      printf("Enter the Level of student %d :",i+1);
      scanf("%f",&s[i].Level);
      scanf("%c",&s[i].temp);//Clearing Buffer//
      printf("Enter the Grade of student %d :",i+1);
      gets(s[i].Grade);
   }
   //Assigning pointer to structure//
   p=&s;
   //Calling function//
   show(&s);
}

Đầ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 student 1 : Lucky
Enter the Age of student 1 : 27
Enter the Level of student 1 :2
Enter the Grade of student 1 :A
Enter the Name of student 2 : Pinky
Enter the Age of student 2 : 29
Enter the Level of student 2 :1
Enter the Grade of student 2 :B
The Name of student 1 is : Lucky
The Age of student 1 is : 27
The Level of student 1 is : 2.000000
The Grade of student 1 is : A
The Name of student 2 is : Pinky
The Age of student 2 is : 29
The Level of student 2 is : 1.000000
The Grade of student 2 is : B