Инициализация динамического массива союзов в C - PullRequest
0 голосов
/ 29 апреля 2018

Я попытался создать массив объединения, и мой код выглядит так:

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 голосов
/ 29 апреля 2018

Для определения типа объединения выполните

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

Для динамически выделяемого массива с n элементами типа union element do:

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

Примечание

Если это

 element* arr = malloc(n * ...

компилируется, тогда вы используете не компилятор C, а компилятор C ++.

Требуется компилятор C

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

Последний комментарий к вашей формулировке: " Initiallizing ... array ... ":

Код динамического создает n элементов объединения. Эти элементы не получают "инициализированный".

Инициализировать их при выделении calloc() instrad malloc();

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