簡體   English   中英

初始化未命名的結構指針/數組

[英]Initialize unnamed struct pointer/array

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

我認為此代碼的問題是這一行:

& { {3, 4}, {5, 6} }

問題在於{{3, 4}, {5, 6}}是一個右值(一個值,而不是一個對象),您不能使用右值的地址。 畢竟,該對象的內存從哪里來? 但是,您可能可以將其重寫為

A::B elems[2] = {{3, 4}, {5, 6}};
static A a = {
    1,
    2,
    elems
};

從現在開始,您可以指向一個左值。

您已經使用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} }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM