我找不到解决办法我可以初始化一个结构数组,如下所示:
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));