我已经宣布了这两个结构:
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的下一个元素依此类推。我知道我现在这样做的方式是错的,所以我问你如何正确地做到这一点?
答案 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);