構造体は配列のサイズを知る必要があります。ここでは次元が1つ欠けています。宣言と初期化が同時に行われた場合、あなたは
int Array[][2] = {{1,2},{3,4},{5,6}};
を例えば可能性があり、コンパイラは配列のためのスペースを作り、(そうでなければそれは動的割り当てを使用して、実行時でなければならないであろう)の値を設定します。
第二に、Cで残念ながら、アレイを初期化するの実用的な方法が
実行時に行われなければならない(及びCは、いくつかのトラブルの場合には割り当てのようなものを実行しなければならない
StructType myStruct = { myArray };
ことは不可能ですオブジェクトのサイズを最新の状態に保つメカニズムがないため)あなたは何ができるか
が、しかし、行方不明の次元のサイズを設定し、そして配列をコピーされたメモリ機能のおかげでmemcpy
typedef const int Array[3][2];
typedef struct {
Array anArray;
} StructType;
int main(int argc, char **argv) {
Array myArray = {{1,2},{3,4},{5,6}};
StructType myStruct;
memcpy(myStruct.anArray,myArray,sizeof(myArray));
また、このよう
構造体の宣言と初期化を行うことができます
StructType myStruct = { {{1,2},{3,4},{5,6}} };
とC99で、ためにも
StructType myStruct = { .anArray = {{1,2},{3,4},{5,6}} };
私はあなたがしたいことをかなり得ていません。 – coderredoc
フレキシブル配列は、複数の名前付きメンバを持つ 'struct'の最後のメンバとしてのみ使用できます。唯一のメンバがフレキシブルな配列である 'struct'を持つことはできません。これを修正した後、私はあなたがやっているように柔軟な配列を初期化できるとは思わない。 – AlexP
配列ポインタではありません。それは配列です。このようなFAMの定義は、構造体の割り当てが配列をコピーしないので、とにかくまったく役に立たないでしょう。したがって、memcpyを使用する必要があります。そして、その配列に何個の要素*があるのか何もない。 –