C言語 入門 構造体と関数の関係とは?値渡し

C Language

構造体と自作関数を使おうと思ったけど、うまくできない。

構造体では、自作関数の値渡しはどうなるの?

この記事を読めば、これらの悩みは解決できます。

そもそも、構造体が分からない人は、下の記事を参考にしてください。

構造体と、関数の値渡し

アドレス渡しや値渡しを使った関数が分からないという人は、下の記事を参考にしてください。

構造体を使って、関数の値渡しをする際の注意点は

・構造体変数に配列を使うのは難しい

・引数は構造体変数ごと

・引数に構造体メンバーを個別で指定はできない

・構造体は「main関数」の外でもOK

上から順に解説します。

前までの構造体の解説記事では、構造体変数に配列を使っているのですが、今回は変数を使います。配列を使うと難しくなるからです。

また、構造体メンバーを個別で引数にすることはできません。引数は必ず構造体変数でまとめましょう。

構造体変数は関数でも使えるように、グローバル変数として扱うため、構造体は「main関数」の外で使います。

以上のことを踏まえてプログラムをつくりましょう。構造体は過去の記事で丁寧に解説しているので、説明は少なめにします。

構造体の宣言はいくつか種類があるのですが、構造体の宣言と構造体変数の宣言を同時に行う方法を使います。

struct INFO
{
	char name[20];
	float height;
	float weight;
}search;

どうしてこのプログラムになるか分からないという人は、先ほどの記事を参考にしてください。

解説が必要なのはこれくらいなので、さっそくプログラムを書いてみましょう。身長165.4cm、体重47.8kgの「Mark」の情報を構造体と関数を使って出力します。

#include <stdio.h>
void print(struct INFO search);

struct INFO
{
   char name[20];
   float height;
   float weight;
}search;

int main()
{
   int i;

   search = { "Mark",165.4,47.8 };

   print(search);
}

void print(struct INFO search)
{
   int i;
   printf("name  :%s¥n",search.name);
   printf("height:%.1fcm¥n",search.height);
   printf("weight:%.1fkg¥n¥n",search.weight);
}

一応、補足しておくと、「struct INFO」というのは、構造体変数のデータ型です。構造体変数のデータ型は自分で決められます。

出力するとこんな感じです。

まとめ

今回説明した値渡しを詳しく勉強したい方は、こちらの記事を参考にしてください。