14
#include <stdio.h>
union p
{
    int x;
    char y;
}
k = {.y = 97};

int main()
{
    printf("%d\n", k.y);
    return 0;
}

OUTPUT: 97

この質問に出くわしました。ご存知のように、Union の最初のメンバーのみを初期化できます。しかし、これでは、初期化時に、y変数は特定のメソッドを介して初期化されます!

k={ .Y=97}がデニス・リッチーの本「ユニオンは最初のメンバーの型の値でのみ初期化できる」に記載されているルールを破り、代わりに2番目の変数を初期化する方法を説明できますか?

4

1 に答える 1

15

K&R は素晴らしい本ですが、古いです。C99ではこれができます。

同じ例で指定された初期化子を使用して、次の例では 2 番目のユニオン メンバー age を初期化します。

union {
       char birthday[9];
       int age;
       float weight;
      } people = { .age = 14 };
于 2013-06-16T17:30:24.110 に答える