我找不到解决办法我可以初始化一个结构数组,如下所示:

typedef struct S_A {
    int x;
} T_A;

T_A ta1[3];

ta1[0] = (T_A){0};
ta1[1] = (T_A){1};
ta1[2] = (T_A){2};

T_A ta2[3] = { {0}, {1}, {2} };

但是如何在声明之后进行单行初始化呢?
T_A ta3[3];

ta3 = (?){ {?}, {?}, {?} };

ta3 = (T_A[3]){ { 0 }, { 1 }, { 2 } }; // error
ta3 = (T_A*)  { { 0 }, { 1 }, { 2 } }; // error

最佳答案

数组在C语言中是特殊的。只能初始化一次数组然后就不能“重新初始化”数组。数组上的赋值不起作用数组在大多数上下文中是一个指针,您不能将其分配给它你不能:

int arr[3];
// arr = {1,2,3}; // will not work
// arr = anything; // will not work

您只能使用复合文字memcpy发送给他们:
memcpy(ta3, (T_A[3]){ { 0 }, { 1 }, { 2 } }, sizeof(ta3));

或者不使用compund literal初始化临时变量并memcpy
const T_A temp[3] = { { 0 }, { 1 }, { 2 } };
memcpy(ta3, temp, sizeof(ta3));

08-16 21:15