[英]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.