Cプログラミング · 1 min read · Nov 18, 2025

Linux Cプログラミングチュートリアル パート26 - 構造体と関数

以前のコマンドラインチュートリアルの1つで、構造体の概念に触れました。わかりやすい例を使って、構造体とは何か、なぜ必要なのかといった基本的なことを議論しました。それを踏まえて、このチュートリアルでは、構造体と関数をどのように一緒に使用できるかについて説明します。

Cプログラミング言語における構造体と関数

始める前に、構造体がどのように宣言されるかを簡単に復習しましょう。以下はその例です:

struct emp_details {  
  int emp_code;  
  int emp_age;  
};

ここで、structキーワードは、Cで構造体を定義する際に必須であり、宣言の開始を示します。その後にタグ、つまり構造体の名前が続きます。次に、括弧の中に2つの整数変数があり、これらはこの構造体の一部としてグループ化されています。

この構造体を使用するには、まずそのインスタンスまたはオブジェクトを定義する必要があります。以下のようにできます:

emp_details obj;

そして、構造体メンバーには以下のようにアクセスできます:

obj.emp_code  
obj.emp_age

次に、関数についてですが、関数は構造体を返すことも、引数の形で構造体を受け取ることもできます。以下はその例です:

#include   

struct emp_details {  
  int emp_code;  
  int emp_age;  
};  

struct emp_details fill(int code, int age)  
{  
  struct emp_details obj;  
  obj.emp_code = code;  
  obj.emp_age = age;  
  
  return obj;  
}  
  
int main()  
{  
  int x,y;  
  
  printf("Enter employee code: ");  
  scanf("%d", &x);  
  
  printf("\n Enter employee age: ");  
  scanf("%d", &y);  
  
  struct emp_details new_obj;  
  
  new_obj = fill(x,y);  
  
  printf("\n The employee code and age you entered are: %d and %d", new_obj.emp_code, new_obj.emp_age);  
  
  return 0;  
}

この例では、’fill’という関数が2つの整数を受け取り、それをコードと年齢として扱い、この情報に基づいて構造体を埋め、構造体を値として関数の呼び出し元に返します。

先ほどの文で述べたように、構造体は関数の引数としても渡すことができます。以下は、関数’fill’が’emp_details’構造体を引数として受け取る例です。

#include   

struct emp_details {  
  int emp_code;  
  int emp_age;  
};  

void fill(struct emp_details obj)  
{  
  printf("\n The employee code and age you entered are: %d and %d", obj.emp_code, obj.emp_age);  
}  
  
int main()  
{  
  int x,y;  
  
  printf("Enter employee code: ");  
  scanf("%d", &x);  
  
  printf("\n Enter employee age: ");  
  scanf("%d", &y);  
  
  struct emp_details new_obj;  
  new_obj.emp_code = x;  
  new_obj.emp_age = y;  
  
  fill(new_obj);  
  
  return 0;  
}

私の場合の出力は以下の通りです:

Enter employee code: 36   
 Enter employee age: 29   
   
 The employee code and age you entered are: 36 and 29

次に、通常の変数、配列などと同様に、構造体へのポインタも存在します。以下はその例です:

struct emp_details *ptr;

常に、ポインタは構造体のサイズが大きい場合や、関数に引数として渡す場合に便利です。理想的には、ポインタオブジェクトを通じて構造体変数にアクセスする方法は以下の通りです:

(*ptr).emp_code  
(*ptr).emp_age

しかし、簡単さのために、Cでは*と.を省略し、’->’を代わりに使用することができます。以下はその例です:

ptr->emp_code  
ptr->emp_age 

構造体ポインタを使用した例は以下の通りです:

#include   

struct emp_details {  
  int emp_code;  
  int emp_age;  
};  

void fill(struct emp_details *obj)  
{  
  printf("\n The employee code and age you entered are: %d and %d", obj->emp_code, obj->emp_age);  
}  
  
int main()  
{  
  int x,y;  
  
  printf("Enter employee code: ");  
  scanf("%d", &x);  
  
  printf("\n Enter employee age: ");  
  scanf("%d", &y);  
  
  struct emp_details new_obj;  
  new_obj.emp_code = x;  
  new_obj.emp_age = y;  
  
  fill(&new_obj);  
  
  return 0;  
}

これは以前に使用したのと同じ例ですが、構造体ポインタを使用しているため、変更点が太字で強調されています。

結論

このチュートリアルでは、構造体と関数を一緒に使用する方法について議論することで、構造体の理解を深めました。ここで使用した例をローカルシステムで試してみることをお勧めします。疑問や質問がある場合は、下にコメントを残してください。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。