連載
【問題13】「関数に配列を渡す」とは何か:完全マスター! 組み込みC言語プログラミング(14)(1/3 ページ)
C言語の関数呼び出しでは、まず引数(実引数)の値を求め、その値を呼び出す関数の仮引数に代入し、その後、関数に制御が移ります。では、「関数に配列を渡す」際にはどうなっているのでしょうか。
本連載では、これから組み込みシステムのプログラミングを学びたい人向けに、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を実行すると、次のような結果になります。
Copyright © ITmedia, Inc. All Rights Reserved.