プログラミング演習1
― 課題4の付録2 ―
2次元配列の引き渡し
配列を関数(サブルーチン)とやりとりする場合、 受け取る側では主に2つのいくつかのやりかたがある。
初心者のうちは(1)の方法しか知らなくてもやむを得ないが、 プログラムが大きくなるとグローバル変数の管理が大変になるので、 (2)のやり方のほうがより一般的で、エレガントである。
- (1)
- グローバル変数でやり取りする。
- (2)
- 関数(サブルーチン)の引数を介してやり取りする。
引数を介するやりかたにおいては、いくつかの書き方が許される。2次元以上の配列では2つめの方法は要注意である。
- 配列の大きさ(サイズ)を明記する。
int func(double x[3], double f[3]) { ……………… }大きさを事前に定数マクロとして定義しておくほうが便利なので、実際には#define ND 3 int func(double x[ND], double f[ND]) { ……………… }- (最上位の)配列の大きさを省略する。
int func(double x[], double f[]) { ……………… }int Jcalc(double x[], double J[][]) { ……………… }では、エラーが出てしまう。int Jcalc(double x[], double J[][ND]) { ……………… }としなければならない。これは、引き渡された2次元配列が どこで折り返されているかという最低限のサイズ情報がないと、 配列の要素を特定できないからである。 省略できるのは最上位(一番左の[])の大きさのみである。
2次元情報を1次元配列に並べ替えておくといった安易な方法もある。int Jcalc(double x[], double J[]) { ……………… J[1] = …; // J11 J[2] = …; // J12 J[3] = …; // J21 J[4] = …; // J22 }
【目次】 | 【1.】 | 【2.】 | 【3.】 | 【付録1】