C 结构体初始化?

12

如果结构体中的一个字段是另一个结构体,该如何初始化结构体?

3个回答

14

你需要使用更多的花括号(实际上,它们是可选的,但是现在GCC会发出警告)。这里是一个例子:

struct s1 { int a; int b; };
struct s2 { int c; struct s1 s; };

struct s2 my_s2 = { 5, { 6, 3 } };

只有在成员s完全初始化(即所有成员)的情况下才是可选的,如果您只想部分初始化结构,则是必需的。 - Clifford
4
在C99中,你可以使用以下更易于维护和阅读的表示方法:struct s2 my_s2 = { .c = 5, .s = { .a = 6, .b = 3 } }; - Jens Gustedt

1

结构的嵌套

如果结构中的一个字段本身就是一个结构,那么可以初始化该结构。

struct add{
    int house;
    char road;
};
struct emp{
    int phone;
    struct add a;
};

struct emp e = { 123456, 23, "abc"};
printf("%d %d %c",e.phone,e.a.house,e.a.road);

0
struct A
{
int n;
}

struct B
{
A a;
} b;

你可以通过下面的语句来初始化 n。这是你想要的吗?
b.a.n = 10;

2
在定义语言时使用的术语中,这是“赋值”而不是“初始化”的示例。在此情况下,初始化程序仅在对象声明时使用。 - Clifford

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接