初始化未命名的struct指针/数组

时间:2011-01-14 00:56:17

标签: c++ c arrays struct initialization

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} },
}

2 个答案:

答案 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} }
};