C 以下代码的输出。。联合
谁能解释一下为什么下面的代码会打印20而不是10 谢谢C 以下代码的输出。。联合,c,unions,C,Unions,谁能解释一下为什么下面的代码会打印20而不是10 谢谢 #include<stdio.h> int main() { union var { int a, b; }; union var v; v.a=10; v.b=20; printf("%d\n", v.a); return 0; } #包括 int main() { 联合变量 { INTA,b; }; 联合var v; v、 a=10; v、
#include<stdio.h>
int main()
{
union var
{
int a, b;
};
union var v;
v.a=10;
v.b=20;
printf("%d\n", v.a);
return 0;
}
#包括
int main()
{
联合变量
{
INTA,b;
};
联合var v;
v、 a=10;
v、 b=20;
printf(“%d\n”,v.a.);
返回0;
}
根据联合的定义:不能同时使用v.a
和v.b
,因为这两个字段共享相同的地址。引用标准:
并集类型描述了重叠
成员对象的非空集,每个
其中有一个可选指定的
名称和可能的不同类型
在这里,只要分配给v.b
,就可以覆盖v.a
。在您的例子中,事情不会变得糟糕,因为这两个变量的类型相同,但是想象一下如果a
是一个float
和b
一个字符会怎么样
如果您的目标是使
var
成为包含两个不同int
的复合变量,那么您应该使用struct
,而不是union
,根据union的定义:您不能同时使用v.a
和v.b
,因为这两个字段共享相同的地址。引用标准:
并集类型描述了重叠
成员对象的非空集,每个
其中有一个可选指定的
名称和可能的不同类型
在这里,只要分配给v.b
,就可以覆盖v.a
。在您的例子中,事情不会变得糟糕,因为这两个变量的类型相同,但是想象一下如果a
是一个float
和b
一个字符会怎么样
如果您的目标是使
var
成为包含两个不同int
的复合变量,那么您应该使用struct
,而不是union
,union的宽度足以存储它所包含的最宽类型,并且这些类型将共享相同的地址。如果希望a
和b
不同,请使用struct
根据C99标准第6.7.2.1节:
工会的规模足以容纳其最大的成员。at的价值
大多数成员可以随时存储在联合对象中。指向联合对象的指针
经过适当转换的union对象指向其每个成员(或者如果成员是位-
现场,然后是其所在单位),反之亦然
根据第6.5.8节:
指向同一联合对象成员的所有指针比较相等
联合将足够宽以存储它所包含的最宽类型,并且这些类型将共享相同的地址。如果希望
a
和b
不同,请使用struct
根据C99标准第6.7.2.1节:
工会的规模足以容纳其最大的成员。at的价值
大多数成员可以随时存储在联合对象中。指向联合对象的指针
经过适当转换的union对象指向其每个成员(或者如果成员是位-
现场,然后是其所在单位),反之亦然
根据第6.5.8节:
指向同一联合对象成员的所有指针比较相等
联合是一种提供对不同类型的相同内存的访问的东西。因此,在您的代码中,第一个赋值没有多大意义,因为第二个赋值存在。它会按最后一个顺序影响内存,因此您会得到最后一个赋值。联合是一种提供对不同类型的相同内存的访问的东西。因此,在您的代码中,第一个赋值没有多大意义,因为第二个赋值存在。它会按最后一个顺序影响内存,因此您会得到最后一个赋值。在发布之前,您是否阅读了
union
的定义?在发布之前,您是否阅读了union
的定义?