
C言語入門|構造体・配列を扱う関数
よーし、お疲れさま!
これで関数の基本はしっかり身につきましたね。
「引数」「戻り値」「スコープ」「プロトタイプ宣言」
ここまで理解できていれば、もう初心者ゾーンは卒業間近です。
そして、ここからが 関数の本当の出番。
これまで学んできた 構造体 や 配列 を、関数と組み合わせて使っていきます。

基本型だけじゃない、関数の引数と戻り値
これまでの例では、
- int
- char
- double
といった 基本型 を引数や戻り値に使ってきました。
でも実は、関数はそれだけでは終わりません。
C言語では、
- 構造体型
- 配列型
といった 集成体型 も、関数の引数や戻り値として扱えます。
| 型の種類 | 関数で使えるか |
|---|---|
| int などの基本型 | 使える |
| 構造体型 | 使える |
| 配列型 | 使える |
これができるようになると、
一気に「実践的なプログラム」っぽくなってきます。
構造体を引数として受け取る関数
まずは、構造体を引数に取る関数の例を見てみましょう。
// キャラクター情報を表示する関数
// 引数:Character型変数 戻り値:なし
void showCharacter(Character c)
{
printf("%s Lv.%d (HP=%d)\n", c.name, c.level, c.hp);
}この関数があれば、
showCharacter(hero);と書くだけで、
キャラクターの情報をまとめて表示できます。
ポイント整理
| 項目 | 内容 |
|---|---|
| 引数 | 構造体を丸ごと受け取れる。 |
| 利点 | 情報を1つのまとまりとして扱える。 |
| 効果 | 呼び出し側のコードがスッキリする。 |
構造体を使うことで、
「名前」「HP」「レベル」などをバラバラに渡す必要がなくなるのが嬉しいところです。
配列を引数として受け取る関数
次は配列を扱う関数です。
配列は、ゲームや集計処理では欠かせない存在ですね。
// アイテム配列の中から指定IDの個数を数える関数
// 引数:配列items、検索ID 戻り値:個数
int countItem(int items[8], int target)
{
int count = 0;
for (int i = 0; i < 8; i++) {
if (items[i] == target) {
count++;
}
}
return count;
}呼び出し側では、次のように使えます。
int num;
num = countItem(items, POTION);この関数の強み
| ポイント | 内容 |
|---|---|
| ループ処理 | 関数の中に隠せる。 |
| 再利用性 | 何度でも同じ処理を使える。 |
| 可読性 | main関数が読みやすくなる。 |
「配列を調べる処理」を関数に閉じ込めることで、
ゲームロジック全体がとても見通しよくなります。
構造体や配列を戻り値として返す
集成体型のすごいところは、
戻り値としても使える 点です。
たとえば、こんな関数を作れます。
// キャラクターを強化した新キャラを生成する関数
// 引数:Character型変数 戻り値:強化後Character
Character powerUp(Character c)
{
Character pc;
pc = c; // 構造体をまとめてコピー
pc.hp *= 2;
pc.attack += 10;
return pc;
}この関数を使うと、
hero = powerUp(hero);という1行で、
「強化後のキャラクター」を受け取れます。
集成体型を戻り値に使うメリット
ここで、集成体型を戻り値に使う最大のメリットを整理しておきましょう。
| 項目 | 基本型 | 集成体型 |
|---|---|---|
| 戻せる情報 | 1つ | 複数まとめて |
| 可読性 | 普通 | とても良い |
| 実用性 | 小規模向け | 実践向け |
戻り値は1つしか返せませんが、
構造体や配列を使えば「複数の情報」をまとめて返せる のです。
これは、関数設計において非常に強力な武器になります。
関数 × 構造体 × 配列が“壁”を超える鍵
関数の学習は、ここで一度大きな壁にぶつかります。
- 引数が増えて混乱する。
- 配列や構造体が絡んで読みにくくなる。
でも、この壁を越えると、
「関数は処理をまとめる道具」
「構造体や配列はデータをまとめる道具」
という役割分担が、はっきり見えてきます。
