struct A
{
int member1;
int member2;
struct B
{
int member3;
int member4;
} *b;
};
如何初始化A
并同时创建一个B
数组来填充b
字段?我想要一个静态变量,最好是函数调用。
我尝试了这个,但它不起作用(我认为不会):
static A a = {
1,
2,
& { {3, 4}, {5, 6} },
}
答案 0 :(得分:3)
我认为这段代码存在问题:
& { {3, 4}, {5, 6} }
问题是{{3, 4}, {5, 6}}
是一个右值(一个值,而不是一个对象),你不能取rvalue的地址。毕竟,这个对象的内存来自哪里?但是,您可能可以将此重写为
A::B elems[2] = {{3, 4}, {5, 6}};
static A a = {
1,
2,
elems
};
从现在开始你有一个左值,你可以指向。
答案 1 :(得分:1)
你用C和C ++标记过它;以下答案适用于C.
在C89中,你可以这样做:
static struct B a_b_init[] = { {3, 4}, {5, 6} };
static struct A a = {
1,
2,
a_b_init
};
在C99中,您可以使用复合文字,其语法与您的尝试非常相似:
static struct A a = {
1,
2,
(struct B []){ {3, 4}, {5, 6} }
};