gpt4 book ai didi

c - union 只能使用其第一个成员 K&R 类型的值进行初始化

转载 作者:行者123 更新时间:2023-12-04 09:38:54 27 4
gpt4 key购买 nike

我正在学习 K&R C。在第 6.8 章中,它指出:

A union may only be initialized with a value of the type of its first member; thus union u described above can only be initialized with an integer value.



...并定义一个 union u 如下:
union u_tag {
int ival;
float fval;
char *sval;
} u;

我不知道如何理解这一点。什么意思, u的初始化必须是:
u.ival = 323;

显然,事实并非如此,因为我可以初始化 u作为:
u.fval = 1.0;

或者
u.sval = "hi";

里奇是什么意思?

最佳答案

发布的代码正在执行分配,而不是初始化。作者的意思是以下是有效的初始化为 323intu_tag的第一个成员是 int :

union u_tag u = { 323 }; /* Initializes u.ival. */

以下将无效,因为它会尝试初始化 intchar[] :
union u_tag u = { "hi" };

但是,从 C99 开始,情况不再如此。在 C99 中,引入了指示符:
union u_tag u = { .sval = "hi" };

在 C89 中,如果你想初始化一个 union使用除第一个以外的成员的值,您可以复制现有的 union .如果您想声明 union,这将特别有用。如 const .例如:
union u_tag make_u_tag_with_fval(const float a_fval)
{
union u_tag u;
u.fval = a_fval;
return u;
}

const union u_tag u_fval = make_u_tag_with_fval(1.0);

关于c - union 只能使用其第一个成员 K&R 类型的值进行初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13842025/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com