2011年07月22日

C/C++で多次元配列を戻り値にするには

前回は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>();

さらに次回に続く。

参考

posted by 天井冴太 at 22:10
"C/C++で多次元配列を戻り値にするには"へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は180日以上新しい記事の投稿がないブログに表示されております。