我不喜欢这个,但我有一个内部有将近 45 个成员的结构;都是字符或字符数组。也就是说,我将需要优化初始化每个结构的方式。通常,我会将整个对象传递到我的 init_struct() 函数中,但我觉得这不是最好的方法。
我将如何创建并使用指向结构的指针来完成此操作?
旧方法看起来像这样:
void init_struct(struct general){
...initialize members...
}
int main(){
struct general[10];
for(int i = 0 ; i < 10 ; ++i){
init_struct(general[i];
}
}
由于这个结构非常大,正如我所说的,其中有将近 45 个成员,我认为指向该结构的点将大大有助于优化此过程。我将如何实现?
以防万一,这是我的结构的 typedef
typedef struct
{
//Basically, everything we want to read from HUDL should be here...
int play_num;
char down;
char dist[3];
char ydln[4];
char gnls[3];
char hash[3];
char home[20];
char away[20];
char odk[2];
char qtr[2];
char series[3];
char result[20];
char penalty[20];
char act_cb[20]; //How do they act post-snap
char act_dl[20];
char act_lb[20];
char act_ol[20];
char act_qb[20];
char act_rb[20];
char act_saf[20];
char aln_cb[20]; //How do they align pre-snap
char aln_dl[20];
char aln_lb[20];
char aln_ol[20];
char aln_qb[20];
char aln_rb[20];
char aln_saf[20];
char aln_wr[20];
char blitz[20];
char box_cnt[3];
char saf_count[20];
char coverage[20];
char cvr_basic[20];
char def_front[20];
char mtn_def[20];
char num_rush[3];
char off_form[20];
char form_var[20];
char motion[20];
char off_pro[20];
char off_play[20];
char play_var[20];
char personnel[20];
char play_type[20];
char time[2];
char score_diff[4];
char field_zone[2];
char dd_type[2];
char form_strength[2];
} HUDL; // MAXIMUM of 63 Members
最佳答案
您的代码有几处错误。 首先,您的函数定义是错误的,因为您省略了参数名称。您的函数定义应如下所示:
void init_struct(struct general mygeneralstruct){}
或者,您可以使用 typedef 为您的结构使用别名,如下所示:
typedef struct {
int a;
} general;
在这种情况下,您的函数声明可能如下所示:
void init_struct(general mygeneralstruct){}
当您声明结构数组时,您会遇到同样的问题。您省略了变量的名称。而不是
struct general[10];
应该是
struct general mygeneralstruct[10]
或者
general mygeneralstruct[10]
(类型定义)
最后,您不能通过将每个结构的值传递给函数来更改结构数组。您需要传递每个结构的地址。 你的函数声明应该是(使用 typedef):
void init_struct(general* mygeneralstruct){}
和循环中的代码:
init_struct(&mygeneralstruct[i]);
关于c - 将结构指针发送到 C 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46055731/