Создать массив с элементами разных типов - PullRequest
2 голосов
/ 04 октября 2011

Мне нужно объявить массив, состоящий из различных типов переменных, в основном:

char *A; uint32_t B; int C;

Как я понял в уроках, в массиве вы объявляете тип и номер элемента.Так сказать что-то вроде:

int a[3];

, где в этом случае типом всех трех элементов являются целые числа.Итак, как я хочу объявить массив, который состоит из трех различных типов, упомянутых выше?

Ответы [ 2 ]

3 голосов
/ 04 октября 2011

Определение массива в C - это набор элементов того же типа. То, что вы ищете, вероятно, struct.

struct s
{
    char* A;
    uint32_t B;
    int C;
};

int main(void)
{
    struct s test;
    test.A = "Hello";
    test.B = 12345;
    test.C = -2;

    // Do stuff with 'test'
    return 0;
}

Или, как упомянуто в комментарии ниже, вы можете использовать union вместо этого. Но тогда вы не можете использовать A, B и C одновременно, как в предыдущем примере - только один из них будет сохранен - ​​в моем примере это будет C.

Вы можете создать массив структур, если вам нужно.

struct s test[5];  // Array of structures
1 голос
/ 04 октября 2011

Вам нужно использовать union

т.е.

typedef struct {
        int type;
        union {

        char *A;
        uint32_t B;
        int C; 
        }} item;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...