連載
» 2014年12月02日 11時00分 UPDATE

完全マスター! 組み込みC言語プログラミング(14):【問題13】「関数に配列を渡す」とは何か (1/3)

C言語の関数呼び出しでは、まず引数(実引数)の値を求め、その値を呼び出す関数の仮引数に代入し、その後、関数に制御が移ります。では、「関数に配列を渡す」際にはどうなっているのでしょうか。

[横田一弘 埼玉県立新座総合技術高等学校 教諭,MONOist]
photo

 本連載では、これから組み込みシステムのプログラミングを学びたい人向けに、C言語を使ったマイコン制御プログラムの“イロハ”を解説していきます。

 毎回少しずつステップアップしていけるよう、本文の最後で問題を出し、次回その解答と解説を紹介していきます。

問題13の解答

 C言語の関数呼び出しでは、まず引数(実引数)の値を求め、その値を呼び出す関数の仮引数に代入し、その後、関数に制御が移ります。それでは問題13のように、「関数に配列を渡す」際にはどうなっているのかが今回のテーマです。

問題13:

大きさ12のintの配列に、1月から12月までの小遣いの支出金額が格納されている。その配列を引数とし、最も支出の多かった月を返す関数を作ります。


 結論を言うと、関数に配列を渡すとき、その配列の先頭ポインタを関数に渡します。ここでポインタが登場しますが、配列とポインタの共通性については問題9(完全マスター! 組み込みC言語プログラミング:【問題9】配列とポインタの深い関係)で解説しました。そちらも参考になさると理解が深まると思います。それでは解答を発表します。

#include <stdio.h>
 
int max_value_index(const int []);
 
void main(void)
{
    int moneies[12] = {3100,2900,3100,3000,3100,3000,3100,3100,3000,3100,3000,4000};
 
    printf("最大出費は%d月です¥n", max_value_index (moneies) + 1);
}
 
int max_value_index (const int v[])
{
    int imax, i;
    imax = 0;
    for (i = 1; i < 12; i++) if (v[i] > v[imax]) imax = i;
    return imax;
}
pocket_money.c

 pocket_moneies.cを実行すると、次のような結果になります。

photo
       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.