代码之家  ›  专栏  ›  技术社区  ›  user9717641

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

  •  2
  • user9717641  · 技术社区  · 7 年前

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

    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)); 
    

    任何一个都可以!

    有人知道怎么做吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   alk    7 年前

    要定义联合类型,请执行以下操作

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

    要动态分配数组,请使用 n 类型的元素 union 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. 定义类型 联合元素
    2. 定义变量 f 类型为 联合元素

    笔记

    如果这个

     element* arr = malloc(n * ...
    

    编译,则您使用的不是C编译器,而是C++编译器。

    需要C编译器

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

    对您的措辞的最后评论:“ 正在初始化。。。大堆 “:

    代码动态 创建 一个并集的n个元素。这些元素 获取“初始化”。

    在分配期间对其进行初始化 calloc() instrad of malloc() ;

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