前回はC/C++で多次元配列を引数にとる方法を記した。引数があるなら戻り値はどうだ?というのか今回の趣旨。正確には『多次元配列を指すポインタ』な訳であるが。
結論から言うと、以下のようになる。
/* int[x][3]を指すポインタを返す関数 */
int (*function(int))[3];
int (*function(int))[3] {
/* ... snip ... */
}
これは『配列を指すポインタ』の変数宣言とよく似ている。
また、前回挙げた引数の書き方(の1つ)ともよく似ている。
/* int[x][3]を指すポインタ */
int (*pointer)[3];
/* int[x][3]を指すポインタを引数とする関数 */
int function(int (*arg)[3]);
ただし、引数の場合と異なり、以下のような書き方は出来ない。
/* int[x][2](を指すポインタ)を返す関数……のつもり */
int functionX(int)[][2]; /* だがエラーだ */
引数の場合と同様、C++であればtemplate
を用いて、一番右の次元の要素数を限定せずに書く事が出来る。
template<std::size_t N> int (*function(void))[N];
int (*ret1)[1] = function<1>();
int (*ret2)[2] = function<2>();
さらに次回に続く。