ec1*_*ec1 1 c union if-statement
嘿,我在此C代码上有一个作业问题:
#include<stdio.h>
typedef union{
char var1;
int var2;
float var3;
}data;
int main()
{
data mydata;
mydata.var1 = 'B';
mydata.var2 = 12;
if(mydata.var1 == 'B')
mydata.var3 = 3.5;
else
mydata.var3 = 7.1;
printf("%.1f", mydata.var3);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是7.1,我想知道是否有人可以解释为什么输出是7.1而不是3.5。
为您的帮助加油。
您应该知道的第一件事是union为其所有成员分配一个公共存储空间。我们一次只能访问一个工会成员。
在您的示例中,“ B”被分配给联合成员“ mydata.var1”。内存位置名称为mydata.var1,此位置存储的值为“ B”。然后将12分配给联合成员“ mydata.var2”。现在,内存位置名称为“ mydata.var2”,其值为12。(一次只能容纳一个成员)。这就是在程序中调用else部分的原因。如果要打印3.5而不是7.1,则应使用struct而不是并集,因为该结构会为所有成员分别分配空间。
typedef struct{
char var1;
int var2;
float var3;
}data;
int main()
{
data mydata;
mydata.var1 = 'B';
mydata.var2 = 12;
if(mydata.var1 == 'B')
mydata.var3 = 3.5;
else
mydata.var3 = 7.1;
printf("%.1f", mydata.var3);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
希望这会帮助你。