如何在C中创建struct数组?

时间:2017-08-08 17:05:09

标签: c arrays struct

我已经宣布了这两个结构:

typedef struct {
    int skip_lines;
    int num;
    int i;
    char filename[70];
    char main_directory[16];
    char submain_directory[100];
} TABLE_;

typedef struct {
    TABLE_ radiation_insolation[7];
    TABLE_ radiation_radiation[5];
    TABLE_ winds[9];
    TABLE_ pressure[1];
    TABLE_ humidity[1];
    TABLE_ temperature[4];
} TABLES;

在main函数中,我想创建TABLE _。

类型的数组
TABLES tables; // this will be filled with data later

// Now my pseudo-code:
TABLE_ ** table_arrays;
table_arrays[0] = tables.radiation_insolation;
table_arrays[1] = tables.radiation_radiation;
table_arrays[2] = tables.winds;
table_arrays[3] = tables.pressure;
table_arrays[4] = tables.humidity;
table_arrays[5] = tables.temperature;

我想要做的是table_arrays的第一个元素指向tables.radiation_insolation。 tables.radiation_radiation的下一个元素依此类推。我知道我现在这样做的方式是错的,所以我问你如何正确地做到这一点?

2 个答案:

答案 0 :(得分:2)

如果声明指向数组的指针,则需要为其分配空间(例如,使用malloc()),然后才能分配元素。但是没有必要使用指针,只需声明一个数组并根据需要进行初始化。

TABLE_ *table_arrays[] = {
    tables.radiation_insolation,
    tables.radiation_radiation,
    tables.winds,
    tables.pressure,
    tables.humidity,
    tables.temperature
}

答案 1 :(得分:0)

正确地说,这应该是这样的:

void initiate(TABLES * tables){
  tables->radiation_insolation[0].num = 7; // initiate here
}
void processTables(TABLES * tables, TABLE_ * table_arrays[]){
   // do something with the pointer to TABLES or with pointer to TABLES_ array
}

TABLES tables;
TABLE_ * table_arrays[6];
initiate(&tables);
table_arrays[0] = tables.radiation_insolation;
table_arrays[1] = tables.radiation_radiation;
table_arrays[2] = tables.winds;
table_arrays[3] = tables.pressure;
table_arrays[4] = tables.humidity;
table_arrays[5] = tables.temperature;
processTables(&tables, table_arrays);