はじめに
C言語では多次元配列をreturnで返すことできないと勝手に思い込んでいたのですが,どうもできるようなので,備忘録としてここに残しておこうかと.
まあよほどのことがない限りはout引数にするとは思いますが.
方法
以下のコードに示すように,関数の宣言,定義に2次元目以降の要素数を明記してやることで多次元配列を返すことができるようです.
main.cpp
#include <iostream>
// 要素数
constexpr int ARY_SIZE1 = 2;
constexpr int ARY_SIZE2 = 5;
// 多次元配列を持つクラス
class NAryClass
{
private:
// ARY_SIZE1×ARY_SIZE2の配列
int mAry[ARY_SIZE1][ARY_SIZE2];
public:
NAryClass();
~NAryClass();
// 2次元配列を返す関数
int(*getAry())[ARY_SIZE2];
};
// コンストラクタ
NAryClass::NAryClass()
{
// 適当なデータの設定
for (int i = 0; i < ARY_SIZE1; i++)
{
for (int jj = 0; jj < ARY_SIZE2; jj++)
{
mAry[i][jj] = (i + 1) * jj;
}
}
}
// デストラクタ
NAryClass::~NAryClass()
{
}
// 多次元配列を返す
int (*NAryClass::getAry())[ARY_SIZE2]
{
return mAry;
}
int main()
{
NAryClass nAry;
// 多次元配列を取得
int(*nAryData)[ARY_SIZE2] = nAry.getAry();
// 取得データ表示
for (int i = 0; i < ARY_SIZE1; i++)
{
for (int jj = 0; jj < ARY_SIZE2; jj++)
{
std::cout << nAryData[i][jj] << " ";
}
std::cout << std::endl;
}
return 0;
}