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

Làm cách nào để truyền toàn bộ 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ờ, hãy xem cách Chuyển toàn bộ cấu trúc làm đối số cho hàm.

  • Tên của biến cấu trúc được đưa ra dưới dạng đối số trong lệnh gọi hàm.

  • Nó được thu thập trong một biến cấu trúc khác trong tiêu đề hàm.

  • Điểm bất lợi là một bản sao của toàn bộ cấu trúc được tạo lại bằng cách lãng phí bộ nhớ.

Ví dụ

Chương trình sau đây chỉ ra cách chuyển toàn bộ 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);//passing entire structure as an argument to function
   return 0;
}
void display(struct date d){
   printf("day=%d\n",d.day);
   printf("month=%s\n",d.month);
   printf("year=%d\n",d.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:18 JAN 2021
day=18
month=JAN
year=2021

Ví dụ 2

Hãy xem xét một ví dụ khác, trong đó, một chương trình C để chứng minh việc truyền toàn bộ cấu trúc làm đối số cho hàm được giải thích.

#include<stdio.h>
//Declaring structure//
struct add{
   int var1;
   int var2;
}a;
//Declaring and returning Function//
void show(struct add a){
   //Declaring sum variable//
   int sum;
   //Arithmetic Operation//
   sum=a.var1+a.var2;
   //Printing O/p//
   printf("Added value is %d",sum);
}
void main(){
   //Declaring structure//
   struct add a;
   //Reading User I/p//
   printf("Enter variable 1 = ");
   scanf("%d",&a.var1);
   printf("Enter variable 2 = ");
   scanf("%d",&a.var2);
   //Calling function//
   show(a);
}

Đầu ra

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

Enter variable 1 = 20
Enter variable 2 = 50
Added value is 70

Ví dụ 3

Một chương trình C khác để chứng minh việc truyền toàn bộ cấu trúc làm đối số cho hàm được đưa ra kèm theo đây là chương trình giải thích cấu trúc khai báo, khai báo và trả về hàm, v.v.

#include<stdio.h>
//Declaring structure//
struct student{
   int s1,s2,s3;
}s[5];
//Declaring and returning Function//
void addition(struct student s[]){
   //Declaring sum variable and For loop variable//
   int i,sum;
   //Arithmetic Operation//
   for(i=1;i<4;i++){
      sum=s[i].s1+s[i].s2+s[i].s3;
      printf("Student %d scored total of %d\n",i,sum);
   }
}
void main(){
   //Declaring variable for For loop//
   int i;
   //Reading User I/p through For loop//
   for(i=1;i<4;i++){
      printf("Enter marks for student %d in subject 1 = ",i);
      scanf("%d",&s[i].s1);
      printf("Enter marks for student %d in subject 2 = ",i);
      scanf("%d",&s[i].s2);
      printf("Enter marks for student %d in subject 3 = ",i);
      scanf("%d",&s[i].s3);
   }
   //Calling function//
   addition(s);
}

Đầu ra

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

Enter marks for student 1 in subject 1 = 25
Enter marks for student 1 in subject 2 = 89
Enter marks for student 1 in subject 3 = 45
Enter marks for student 2 in subject 1 = 12
Enter marks for student 2 in subject 2 = 45
Enter marks for student 2 in subject 3 = 89
Enter marks for student 3 in subject 1 = 12
Enter marks for student 3 in subject 2 = 78
Enter marks for student 3 in subject 3 = 12
Student 1 scored total of 159
Student 2 scored total of 146
Student 3 scored total of 102