08/11/07 19:56:33
>>472
関数に配列を渡すことはできない。渡されるのは常に配列の戦闘要素へのポインタである。
double data[X][Y] という配列があるとき、data は double の配列の配列であり、
これを関数呼び出しの引数に書くと、それは double の配列へのポインタに変換される。
実際に関数にわたるのはこのポインタで、その型は double (*)[Y] である。
だから関数の仮引数の宣言は以下のようになる。
int func(double (*data)[Y]) …①
ただし、これは次のように書いてもいい。
int func(double data[X][Y]) …②
int func(double data[][Y]) …③
②は配列そのものを表しているが、既に述べたように関数が配列そのものを受け取ることはない。
そこで、関数の仮引数に配列が書かれたときには、配列がその先頭要素へのポインタに置き換わるのと同様に、
その配列要素へのポインタを宣言したのと同じに扱われることになっている。だから②の持つ意味は①と同じである。
ここで②がポインタに置き換わるとき、当然最初の添字Xは無視されることとなる。つまり③のように省略が可能である。