【发布时间】:2015-04-19 16:58:25
【问题描述】:
对于下面的程序 int 打印了垃圾值,但预期是初始化值 50,输出时这个值有什么具体原因吗?
#include <stdio.h>
#include <string.h>
union data
{
int a;
float c;
char b[10];
};
int main()
{
union data x;
x.a = 50;
strcpy(x.b,"hello");
x.c = 21.50;
printf ("x.a:= %d\n",x.a );
printf ("x.b:= %s\n",x.b );
printf ("x.c:= %f\n",x.c );
return 0;
}
输出:
x.a:= 1101791232
x.b:=
x.c:= 21.500000
更新:对于下面提到的类似程序,一切正常,我不知道这如何产生预期的结果
#include <stdio.h>
#include <string.h>
union Data
{
int i;
float f;
char str[20];
};
int main( )
{
union Data data;
data.i = 10;
printf( "data.i : %d\n", data.i);
data.f = 220.5;
printf( "data.f : %f\n", data.f);
strcpy( data.str, "C Programming");
printf( "data.str : %s\n", data.str);
return 0;
}
输出:
data.i : 10
data.f : 220.500000
data.str : C Programming
【问题讨论】:
-
此时Union中只能存储一个值。
-
你的意思是使用
struct而不是union? -
@ligoore 你可以为问题中的第二个程序输入你的 cmets 吗?
-
第二个例子是正确的。您只能访问当前设置的值。所有值都存储在同一个内存块中。
标签: c