在 C 中初始化联合的动态数组

Initializing dynamic array of unions in C

我尝试创建联合数组,我的代码如下所示:

printf("Size of array:");
scanf_s(" %d", &n);

f* arr = malloc(n * sizeof(float)); 

我的工会是这样声明的:

        union element
    {
        int digit;
        char letter;
        float number;
    } f;

而且我真的不知道如何在 C 中声明联合数组。 我试过这样的事情:

f* arr = malloc(n * sizeof(float)); 

像这样:

float* arr = malloc(n * sizeof(float)); 

还有这个:

element* arr = malloc(n * sizeof(f)); 

它们中的任何一个都有效!

有人知道怎么做吗?

定义联合类型做

union element
{
    int digit;
    char letter;
    float number;
};

要动态分配一个包含 nunion element 类型元素的数组,请执行以下操作:

union element * pu = malloc(n * sizeof (union element));

甚至更好

union element * pu = malloc(n * sizeof *pu);

您在此处显示的代码

union element
{
    int digit;
    char letter;
    float number;
} f;

做两件事:

  1. 定义类型union element
  2. 将变量 f 定义为 union element
  3. 类型

备注

如果这个

 element* arr = malloc(n * ...

编译,那么你用的不是C编译器,而是C++编译器。

需要 C 编译器

 union element* arr = malloc(n * ...

对您的措辞的最后评论:“正在初始化...数组...”:

动态代码创建 n 个并集元素。这些元素 而不是 得到 "initialized"。

malloc()calloc() instrad 分配期间初始化它们;

... = calloc(n, sizeof ...); /* Note the different number of parameters. */