【发布时间】:2013-01-08 14:16:08
【问题描述】:
抱歉英语不好。
假设代码(C99 或更高版本):
typedef struct {
int a, b;
} foo_t;
foo_t f = { .a = 1, .b = 2 };
f = (foo_t){ .b = 3 };
f.a 现在是什么? C标准对此有什么说法吗?
我知道对于部分初始化,标准保证所有未初始化的成员将被初始化为“适当的零”(0 用于整数,0.0 用于浮动,NULL 用于指针等.)。但最后一条语句不是初始化(据我所知),因为f 已经存在。我很困惑。
【问题讨论】:
-
我当然不知道标准是怎么说的,但很明显,您正在分配一个新创建的(匿名)结构,该结构已部分初始化。该分配将复制所有成员,因此
a将为 0。 -
@user707650 我认为您的意思是“您正在分配 from 一个新创建的(匿名)结构,该结构已部分初始化”,对吗?并从该部分初始化的对象 分配给 f。换句话说,最后一行是创建一个临时 foo_t,其中元素 a 清零,然后将其分配给 f。 (好消息!我最初认为最后一行会简单地改变 f 中的 b 字段...)