How to pass an entire structure as an argument to function in C?

There are three ways by which the values of structure can be transferred from one function to another. They are as follows −
Passing individual members as arguments to function.
Passing individual members as arguments to function.
Passing entire structure as an argument to function.
Passing entire structure as an argument to function.
Passing the address of structure as an argument to function.
Passing the address of structure as an argument to function.
Now let’s see how to Pass an entire structure as an argument to function.
Name of the structure variable is given as argument in function call.
Name of the structure variable is given as argument in function call.
It is collected in another structure variable in function header.
It is collected in another structure variable in function header.
The disadvantage is that a copy of an entire structure is created again by wasting the memory.
The disadvantage is that a copy of an entire structure is created again by wasting the memory.
The following program shows how to pass an entire structure as an argument to function.
 Live Demo
#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);
}
When the above program is executed, it produces the following result −
enter the day, month and year:18 JAN 2021
day=18
month=JAN
year=2021
Consider another example, wherein, a C program to demonstrate the passing of an entire structure as an argument to function is explained.
 Live Demo
#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);
}
When the above program is executed, it produces the following result −
Enter variable 1 = 20
Enter variable 2 = 50
Added value is 70
An another C program to demonstrate the passing of an entire structure as an argument to function is given herewith which explains declaring structure, declaring and returning function etc.
 Live Demo
#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);
}
When the above program is executed, it produces the following result −
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