如何将结构指针作为参数传递给C中的变量参数函数

时间:2016-09-26 12:12:48

标签: c

我需要在我的函数中传递一个带有变量参数的结构指针。这样做的正确方法是什么。我试过以下代码。只是粘贴代码片段,而不是完整的代码。

struct node {
int label,
bool visited} vertex;

//My arguments in this function should be variable/unknown at runtime. It should take n number of streuct pointer arguments
int and_gate(struct vertex * v1, )
{
  va_list valist;
  va_start(valist, num) //not sure
  int out=0;

  for(int i=0;i<num,i++)
    out = va_args(valist, v1);
}

int main()
{
   struct vertex a,b,c;
   and_gate(3, &a,&b,&c)
}

2 个答案:

答案 0 :(得分:1)

使用动态数组

int and_gate(int n, struct vertex *v1)
{
  for(int i = 0; i < n; ++i)
    printf("%d", v1[0].label);
}

int main()
{
   int n=3;
   struct vertex *a;
   a = malloc(n * sizeof(struct vertex));
   and_gate(n, a);
}

答案 1 :(得分:1)

首先,代码中没有声明struct vertex。这样:

struct node {
int label,
bool visited} vertex;

只是名为vertex的全局变量的定义,其类型为struct node。接下来要求的类型声明:

struct vertex {
    int label,
    bool visited
};

然后必须正确声明and_gate()。根据你如何使用它的方式,它可能看起来像这样:

int and_gate(int vert_num, ...)
{
  va_list valist;
  va_start(valist, vert_num);
  struct vertex *vert;

  for(int i=0; i < vert_num; i++) {
    vert = va_arg(valist, struct vertex *);
    /* do what you want with `vert` */
  }
}

但无论如何 - 在这里使用stdargs闻起来像过度设计的解决方案。由于传递的数据是同质的 - 传递struct vertex数组更好更清晰。它可以是静态或动态数组,具体取决于上下文。 E.g:

int and_gate(struct vertex * data, int num)
{
  struct vertex *vert;

  for(int i=0; i < num; i++) {
      vert = data[i];
      /* do what you want with `vert` */
  } 
}

int main()
{
   struct vertex data[3] = { /* init array members */ };
   and_gate(data, 3)
}