Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

構造全体を引数としてCで機能させるにはどうすればよいですか?


構造体の値をある関数から別の関数に転送する方法は3つあります。それらは次のとおりです-

  • 関数への引数として個々のメンバーを渡す。

  • 構造体全体を引数として関数に渡す。

  • 関数の引数として構造体のアドレスを渡す。

次に、構造体全体を関数の引数として渡す方法を見てみましょう。

  • 構造体変数の名前は、関数呼び出しの引数として指定されます。

  • 関数ヘッダーの別の構造変数に収集されます。

  • 欠点は、メモリを浪費することによって構造全体のコピーが再度作成されることです。

次のプログラムは、構造体全体を引数として関数に渡す方法を示しています。

#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);
}

出力

上記のプログラムを実行すると、次の結果が得られます-

enter the day, month and year:18 JAN 2021
day=18
month=JAN
year=2021

例2

別の例を考えてみましょう。ここでは、関数への引数として構造全体を渡すことを示すCプログラムが説明されています。

#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);
}

出力

上記のプログラムを実行すると、次の結果が得られます-

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

例3

関数への引数として構造全体を渡すことを示す別のCプログラムをここに示します。これは、構造の宣言、関数の宣言と戻りなどを説明しています。

#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);
}

出力

上記のプログラムを実行すると、次の結果が得られます-

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

  1. EnterキーをTkinterの関数にバインドするにはどうすればよいですか?

    キーを押してそのキーで操作を処理することは、ボタンを介してトリガーできるイベントです。 バインドを使用してキーイベントをバインドできます tkinterアプリケーションのメソッド。 キーがトリガーされるたびに、キーイベントの特定の操作を発生させるハンドラーが呼び出されます。 バインド機能でEnterキーをトリガーする場合 、 bind(、Handler)を使用します 方法。 Enterキーには、 bind(、Handler)を使用します 機能。 例 #Import the tkinter library from tkinter import * #Create an instance

  2. Python関数を関数の引数として渡す方法は?

    Pythonは、最初のパラメーターが関数である次のメソッドを実装します- map(function、iterable、...)-iterableのすべてのアイテムに関数を適用し、結果のリストを返します。 関数を引数として渡すことができるカスタム関数を作成することもできます。 指定されたコードを書き直して、mapメソッドを使用して関数sqr(x)を関数の引数として渡します。 例 s = [1, 3, 5, 7, 9] def sqr(x): return x ** 2 print(map(sqr, s)) We can as well use lambda function to get s