2

私は C/C++ を初めて使用しますが、私が見ている問題について知りたいと思っていました。

typedef union
{
   int a;
   float c;
   char b[20];
}
Union;

int main()
{
 Union y = {100};
 printf("Union y :%d - %s - %f \n",y.a,y.b,y.c);
}

そして、出力は

 Union y :100 - d - 0.000000

私の質問は...なぜ「d」が印刷されるのですか? ユニオンの順序を変更しても同じ出力です。しかし、共用体の外で char f[20] を宣言すると、何も出力されません。私は MacBook ライオン イメージを持っていて、xcode を使用しています。前もって感謝します

4

3 に答える 3

10

のASCIIコードは'd'100aです。b{'d', '\0', '\0', '\0', …noise…}printf"d"

于 2013-04-20T02:30:17.560 に答える
2

ユニオンの順序を変更しても同じ出力です。

ユニオンのすべての要素が同じメモリを使用するため、ユニオン内の要素の順序は何も変わりません。両方の式が同じバイトを解釈するため、コードは100fory.adfor を出力します。y.bしたがって、たとえば、設定y.bしてから再度印刷する行を追加すると、次のようになります。

Union y = {100};
printf("Union y :%d - %s - %f \n",y.a,y.b,y.c);
y.b = 'f';
printf("Union y :%d - %s - %f \n",y.a,y.b,y.c);

あなたはそれを見てy.ay.c.変化するたびy.bに変化し、逆もまた同様です。の ASCII 文字コードであるためy.a、2 番目の では 102 に変更する必要があります。printf()'f'

于 2013-04-20T05:38:03.980 に答える