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