当我在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;
}
任何帮助将不胜感激
答案 0 :(得分:1)
这是为了测试你对工会的了解。所以目前你在长度为2的数组中有一个a
和b
的联合。现在我们需要gpr[0]
与c
和gpr[1]
相同,与d
相同。
因此,数组的每个成员长度为sizeof(double)
,其中有两个成员。所以我们需要一个2个双精度(c
和d
)的结构与gpr[2]
变量联合。
因此这应该有效:
typedef struct {
union {
struct {
double c;
double d;
};
union {
double a;
int b;
} gpr[2];
};
} jo;
我们必须使用匿名结构和联合,否则代码必须更改才能引用成员。