構造体と自作関数を使おうと思ったけど、うまくできない。
構造体では、自作関数の値渡しはどうなるの?
この記事を読めば、これらの悩みは解決できます。
そもそも、構造体が分からない人は、下の記事を参考にしてください。
構造体と、関数の値渡し
アドレス渡しや値渡しを使った関数が分からないという人は、下の記事を参考にしてください。
構造体を使って、関数の値渡しをする際の注意点は
・構造体変数に配列を使うのは難しい
・引数は構造体変数ごと
・引数に構造体メンバーを個別で指定はできない
・構造体は「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」というのは、構造体変数のデータ型です。構造体変数のデータ型は自分で決められます。
出力するとこんな感じです。
まとめ
今回説明した値渡しを詳しく勉強したい方は、こちらの記事を参考にしてください。
コメント