c - 将结构指针发送到 C 中的函数

标签 c function pointers struct

我不喜欢这个,但我有一个内部有将近 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/

相关文章:

c - 我的代码无法编译,为什么?

c++ - 在类中使用指针作为私有(private)指针来访问 C++ 中的数组

c - 使用 NULL 数组将内存分配给二维数组 (c)

javascript - 尝试使用 ASP.NET 中的变量调用 JavaScript 函数

c - 必须在 C 中声明函数原型(prototype)吗?

javascript - 类似于 JQuery 的类编程快捷方式

c - 在函数中重新分配后出现段错误

c++ - 通过c中的指针传递二维数组时出错

在c中将int转换为字节数组

c - 错误 : conflicting types for ‘six’ with gcc