初始化复合文字中的变量

Initialize Variable Inside Compound Literal

我对 C 还很陌生,只是偶然发现了复合文字,所以如果我的问题不准确,请纠正我。

我有一个结构;

typedef struct
{
  int someVal;
} foo;

现在我明白了这可以用下面的方法初始化。

int main()
{
  foo thisFoo = (foo) { .someVal = 2 };
}

我的问题是,我可以用 void 函数初始化 someVal 吗?

void init(int *f);

int main()
{
  foo thisFoo = (foo) { init(.someVal) }; // error: expected expression before '.' token
}

void init(int *f)
{
  *f = 2;
}

我已经设法在函数中初始化结构本身及其各自的成员,没有任何问题,但我很好奇这是否是一个替代(甚至合理)的选择?

不,你不能那样初始化。您可以在不初始化的情况下创建结构,然后使用成员的地址调用函数。

foo thisFoo;
init(&thisFoo.someVal);