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

时间:2018-04-29 14:19:28

标签: c arrays pointers dynamic unions

我试图创建一个联合数组,我的代码看起来像这样:

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 个答案:

答案 0 :(得分:2)

要定义联合类型,请执行

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. 定义类型union element
  2. 将变量f定义为union element
  3. 类型

    注意

    如果这个

     element* arr = malloc(n * ...
    

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

    需要C编译器

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

    对您的措辞的最终评论:" 初始化......数组...... ":

    代码动态创建联合的n个元素。那些元素得到"初始化"。

    在分配calloc() malloc() ... = calloc(n, sizeof ...); /* Note the different number of parameters. */ 期间初始化它们;

    publicPath: '/'