未知のサイズの配列へのポインタへのポインタを取るインタフェースを定義したいと思います。関数本体は、この配列にすでに静的に割り当てられた配列を移入する必要があります。未知の次元の配列へのポインタを更新するプロトタイプ
問題は、私が渡している配列が未知の1次元と2次元アレイの一部である、次のとおりです。
T_MY_STRUCT (*pMyConfigArray)[][2];
私は唯一のインタフェースへの呼び出しごとに既知の寸法に沿って更新します。
、以下のように事前に割り当てられた配列は、(2
と寸法が知られているが、10
は発呼側によって不明である)別のファイル(インターフェイスの理由)で定義されている:
T_MY_STRUCT preAllocatedArray[2][10] =
{
{
{0,TRUE,0,1,&dummyParam[0]},
{1,TRUE,1,1,&dummyParam[1]},
{2,TRUE,2,1,&dummyParam[2]},
{3,TRUE,3,1,&dummyParam[3]},
{4,TRUE,4,1,&dummyParam[4]},
{5,TRUE,5,1,&dummyParam[5]},
{6,TRUE,6,1,&dummyParam[6]},
{7,TRUE,7,1,&dummyParam[7]},
{8,TRUE,8,1,&dummyParam[8]},
{9,TRUE,9,1,&dummyParam[9]}
},
{
{0,TRUE, 0,1,&dummyParam[0]},
{1,FALSE,1,1,&dummyParam[1]},
{2,TRUE, 2,1,&dummyParam[2]},
{3,FALSE,3,1,&dummyParam[3]},
{4,TRUE, 4,1,&dummyParam[4]},
{5,FALSE,5,1,&dummyParam[5]},
{6,TRUE, 6,1,&dummyParam[6]},
{7,FALSE,7,1,&dummyParam[7]},
{8,TRUE, 8,1,&dummyParam[8]},
{9,FALSE,9,1,&dummyParam[9]}
}
};
構造「コピー」できるようにするインターフェース機能は、以下のように実装されます。
int retrieveConfigArray(int arrayIndex, T_MY_STRUCT (**configTab)[])
{
int nbParam = 0;
if ((configTab != NULL_VOID_PTR) && (arrayIndex < 2))
{
*configTab = &(preAllocatedArray[mmsPid]);
nbParam = 10;
}
return nbParam;
}
そして、それを更新することができますので、私は、この関数にpMyConfigArray
のアドレスを渡す:
私の質問は、どのようにこれらの配列定義/宣言だけでなく、関数のプロトタイプを定義して目的の動作を得ることができますか?上のように、私は配列を渡す行に error: invalid use of array with unspecified bounds
を受け取ります。配列関数のプロトタイプと一致する正しい次元へのポインタを渡すために配列ポインタの崩壊とアドレス演算子をどのように利用できますか?
http://stackoverflow.com/questions/35614862/passing-a-2d-array-of-structs/35615201#35615201 – Olaf