Структура должна знать размер массива, а здесь упускается одно измерение. Если объявление и инициализация были выполнены одновременно, вы могли бы, например,
int Array[][2] = {{1,2},{3,4},{5,6}};
затем компилятор создает пространство для массива и устанавливает значение (в противном случае это должно быть во время выполнения с использованием динамического распределения).
Во-вторых, в C, к сожалению, такой практичный способ инициализации массива невозможен.
StructType myStruct = { myArray };
Это нужно было бы сделать во время выполнения (и у C были бы некоторые проблемы с выполнением такого рода присваивания, например, в случае динамического распределения, поскольку нет механизма для поддержания размеров объектов в актуальном состоянии).
Однако вы можете установить размер недостающего измерения и скопировать массив благодаря функции памяти 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}} };
а в С99 даже
StructType myStruct = { .anArray = {{1,2},{3,4},{5,6}} };
person
Breaking not so bad
schedule
25.11.2017
struct
с более чем одним именованным элементом; у вас не может бытьstruct
, единственным элементом которого является гибкий массив. И после исправления этого я не верю, что вам разрешено инициализировать гибкие массивы так, как вы это делаете. - person AlexP   schedule 25.11.2017