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

あなたはの目的を誤解していますunion。Aunionは、複数のタイプの値を格納できる単一の変数として使用することを目的としています。ただし、union最大のデータメンバーのタイプに十分なスペースを割り当てるだけです。したがって、一度に使用できるデータメンバーは1つだけです。1つのメンバーの値を設定するとすぐに、他のメンバーは無効になります。

複数のデータメンバーの値を保存できるようにする場合は、struct

于 2013-01-11T19:27:29.793 に答える
4

がありますunion。つまり、一度に1人のメンバーしかライブできません。memebrにアクセスすると、メンバーを上書きしたstrcpyメンバーstr自体が上書きされます。fi

   data.i = 10;

メンバーに格納し、またはintメンバーを読み取ると、おかしな値が生成され、場合によっては未定義の動作が発生します。floatchar[20]

   data.f = 220.5;

floatメンバーに保存すると、int以前に保存されていたものは失われます。

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

メンバーに保存するとstr、以前に保存されていfloatたものは失われます。

data.iとに出力される値は、応答data.fとして解釈される文字列の一部のバイトですintfloat

複数のメンバーを同時に使用するには、が必要ですstruct

于 2013-01-11T19:27:21.713 に答える
0

このオブジェクト「mystruct」には、「int」、「float」、文字列が続きます。アイテムの一部またはすべてを印刷できます。

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

このオブジェクト「 myunion」には、「int」、「float」、および文字列があり、すべてが他のオブジェクトの上にスーパーインポーズされています。データは、一度にこれらのタイプの1つに対してのみ「有効」になります。

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)または「floatとして扱う」(1)を区別します。

'役立つことを願っています..PSM

于 2013-01-11T19:29:28.760 に答える
0

実際には、unionとは異なりstructます。

struct各メンバーの場合、それはメモリ内に独自の場所を持っています。

unionすべてのメンバーが同じメモリに配置されている場合。したがって、現時点では実際には1人のメンバーしかいないため、ユニオンのすべてのメンバーを読み取ることはできません。

于 2013-01-11T19:35:40.633 に答える