这是我拥有的两个结构的简化版本:
struct MyStruct1 {
double d;
}
struct MyStruct2 {
struct MyStruct1* a;
int i;
}
我可以按如下方式初始化第二个结构:
void InitStruct(struct MyStruct2 pMyStruct2) {
static struct MyStruct1 A[] = { {.d=12} , {.d=17} , {.d=1} };
*pMyStruct2 = (struct MyStruct2) { .a = A, .i = 3 };
}
但实际上我必须以这种方式初始化它(因为这个结构又是一个更大的结构的一部分,应该立即初始化):
void InitStruct(struct MyStruct2 pMyStruct2) {
*pMyStruct2 = (struct MyStruct2) {
.a = (struct MyStruct1[]) {
{.d=12} , {.d=17} , {.d=1}},
.i=3 };
}
两种方式都可以编译而没有任何警告,但第二种解决方案中的数据已损坏。
我认为内部数组不是静态的,因此.a
-pointer 立即变得无效。
还有另一种方法可以告诉编译器将数组的数据保存在内存中吗?