define struct使两个成员保持相同的值

时间:2016-10-20 02:20:35

标签: c struct

当我在main函数中给gpr [0] .a赋一个数字时,如何组织jo结构使成员c得到gpr [0] .a的值。似乎我不能使用'='来使它们在结构的定义中保持相同的值。 不要更改main函数,只需重新组织struct jo ,得到结果ou.c = 1,ou.d = 2

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    union {
        double a;
        int b;
    } gpr[2]; 
    double c, d;
} jo;

int main (int argc, char *argv[])
{
    jo ou;

    ou.gpr[0].a = 1;
    ou.gpr[1].a = 2;

    printf("%f\n", ou.c);
    printf("%f\n", ou.d);

    return 0;
}

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

这是为了测试你对工会的了解。所以目前你在长度为2的数组中有一个ab的联合。现在我们需要gpr[0]cgpr[1]相同,与d相同。

因此,数组的每个成员长度为sizeof(double),其中有两个成员。所以我们需要一个2个双精度(cd)的结构与gpr[2]变量联合。

因此这应该有效:

typedef struct {
     union {
          struct {
              double c;
              double d;
          };
          union {
              double a;
              int b;
          } gpr[2];
   };
} jo;

我们必须使用匿名结构和联合,否则代码必须更改才能引用成员。