0

谁能告诉我为什么data.i并且data.f被破坏了?该代码来自的网站试图解释它,但使用了错误的语法和许多拼写错误,所以我想知道这里是否有人可以帮助我。

#include <stdio.h>
#include <string.h>

union Data
{
   int i;
   float f;
   char  str[20];
};

int main( )
{
   union Data data;        

   data.i = 10;
   data.f = 220.5;
   strcpy( data.str, "C Programming");

   printf( "data.i : %d\n", data.i);
   printf( "data.f : %f\n", data.f);
   printf( "data.str : %s\n", data.str);

   return 0;
}

上述代码编译执行后,产生如下结果:

data.i:1917853763
data.f:4122360580327794860452759994368.000000
data.str:C编程

4

4 回答 4

5

你误解了 a 的目的union。Aunion旨在用作可以存储多种类型的值的单个变量。但是 aunion只为最大数据成员的类型分配了足够的空间。因此,您一次只能使用一个数据成员。一旦您设置了一个成员的值,它就会使其他成员无效。

如果您希望能够存储多个数据成员的值,则需要使用struct

于 2013-01-11T19:27:29.793 回答
4

你有一个union,这意味着一次只能有一个成员可以直播。当strcpy访问strf成员时,覆盖该成员的i成员本身将被覆盖。

   data.i = 10;

存储到int成员中,读取floatchar[20]成员会产生有趣的值,并且可能会产生未定义的行为。

   data.f = 220.5;

存储到float成员中,int先前存储的内容将丢失。

   strcpy( data.str, "C Programming");

存储到str成员中,先前存储float的内容将丢失。

data.i为和打印的值data.f是被解释为int相应字符串的一些字节。float.

要同时使用多个成员,您需要一个struct.

于 2013-01-11T19:27:21.713 回答
0

Actually, union differs from struct.

In the case of struct each member has it's own place in memory.

In the case of union all members are placed in the same memory. Thus, you actually have only one member at the moment, so you simply can not read all members of the union.

于 2013-01-11T19:35:40.633 回答
0

这个对象“mystruct”有一个“int”,后跟一个“float”,然后是一个字符串。您可以打印任何或所有项目。

struct mystruct
{
   int i;
   float f;
   char  str[20];
};

这个对象“myunion”有一个“int”、一个“float”和一个字符串ALL SUPERIMPOSED ON TOP OF EACH OTHER。一次数据将仅对其中一种类型“有效”。

union myunion
{
   int i;
   float f;
   char  str[20];
};

你通常会使用这样的联合:

#define INT 0
#define FLOAT 1

struct x
{
    int type_tag;
    union
    {
      int x;
      float y;
    }
}

您将在运行时为“标签”分配一个值,以区分“将此数据视为 int”(0)或“将其视为浮点数”(1)。

'希望有帮助.. PSM

于 2013-01-11T19:29:28.760 回答