如何解释这个C联合输出 #包括 联合p { int x; chary; } k={.y=97}; int main() { printf(“%d\n”,k.y); 返回0; } 产出:97
我遇到了这个问题。正如我们所知,我们只能初始化Union的第一个成员。但是在这种情况下,在初始化时,如何解释这个C联合输出 #包括 联合p { int x; chary; } k={.y=97}; int main() { printf(“%d\n”,k.y); 返回0; } 产出:97,c,unions,C,Unions,我遇到了这个问题。正如我们所知,我们只能初始化Union的第一个成员。但是在这种情况下,在初始化时,y变量是通过某种给定的方法初始化的 有谁能向我解释一下k={.Y=97}是如何违反丹尼斯·里奇的书《联合只能用其第一个成员类型的值初始化》中所述的规则并初始化第二个变量的?k&R是一本伟大的书,但它已经过时了。在C99中,您可以这样做 在同一示例中使用指定的初始值设定项 初始化第二个工会成员年龄: 谁告诉过你只能初始化某个联盟的第一个成员?这是一个错误(您可以初始化某些联合的任何单个成员)。指定的
y
变量是通过某种给定的方法初始化的
有谁能向我解释一下k={.Y=97}是如何违反丹尼斯·里奇的书《联合只能用其第一个成员类型的值初始化》中所述的规则并初始化第二个变量的?k&R是一本伟大的书,但它已经过时了。在C99中,您可以这样做 在同一示例中使用指定的初始值设定项 初始化第二个工会成员年龄:
谁告诉过你只能初始化某个
联盟的第一个成员?这是一个错误(您可以初始化某些联合的任何单个成员)。指定的初始化器是在c99中引入的。dmr在70年代就不知道这一点。也许endianness逆转了规则。+1个好问题。我也不知道!你说“K&R……很老”。我倾向于认为,在计算机世界中,35年(1978年第1版)有些超越了“旧”。。。甚至第二版(IIRC于1988年出版)也是“旧版”。。。
#include <stdio.h>
union p
{
int x;
char y;
}
k = {.y = 97};
int main()
{
printf("%d\n", k.y);
return 0;
}
OUTPUT: 97
union {
char birthday[9];
int age;
float weight;
} people = { .age = 14 };