联合存储程序的前一部分

时间:2019-04-13 04:33:39

标签: c linux union

如我之前的工作要求,我必须正确地完成两个功能:(a)部分涉及“枚举”,b部分涉及“结构”

现在它要我创建一个可以存储其中一个的联合 一种。 (a)部分的枚举 b。 (b)部分的结构 C。一个字符。

我很困惑。这是什么?

这里我要提到的是(a)部分和(b)部分的代码

a)

enum FavouriteFruits
{
    Cherries=4,
    Pears = 1,
    Berries = 2,
    Plums = 5
};

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

    printf("Cherries are %d \n", Cherries);
    printf("Pears are %d \n" , Pears);
    printf("Berries are %d \n", Berries);
    printf("Plums are %d \n", Plums);

    return 0;
}

b)

struct realnumber
{
    float array [2][3];
    char* (*function)(int);
};

1 个答案:

答案 0 :(得分:0)

联合是一种类型,它使用相同的内存来保存可以是几种不同类型之一的值。

union myUnion {
    enum FavouriteFruits ff;
    struct realnumber rn;
    char c;
};

您现在可以声明此类型的变量:

union myUnion u;

并分配给任何成员,就像分配给struct成员一样。

u.c = 'a';
u.ff = Pears;

struct的区别在于它们都共享相同的内存。当您分配给u.ff时,它将覆盖u.c。因此,您只能从您最后一次分配给该成员的成员中读取信息。跟踪哪个成员是您的责任。请参见How can a mixed data type (int, float, char, etc) be stored in an array?,了解一种可以用于此目的的称为 tagged联合的技术。