【问题标题】:how to pass and access a struct to a variadic function in C如何将结构传递和访问C中的可变参数函数
【发布时间】:2021-04-03 15:49:52
【问题描述】:

您好,我想将一个结构传递给一个可变参数函数并在 C 中使用所述结构内的值。我不知道该怎么做是如何访问每个传递的结构的内容。

这是一个例子

typedef struct  {
 int num;
 bool dontIncludeFlag;
} number;


int average(unsigned count, ...){
    va_list ap;
    int j;
    int sum = 0;

    va_start(ap, count); 
    for (j = 0; j < count; j++) {
        if(va_arg(ap,number.dontIncludeFlag))        //This line does not work
        sum += va_arg(ap.num, number);               //so does this line
    }
    va_end(ap);

    return sum / count;
}


int main(){

   number a,b,c;

   a.num= 5;
   a.dontIncludeFlag = 0;

   b.num= 2;
   b.dontIncludeFlag= 1;

   c.num= 1;
   c.dontIncludeFlag= 0;

   average(3,a,b,c);
}

如何访问我传递的结构参数的内容

【问题讨论】:

  • 网上应该有不少关于如何使用可变参数函数的教程。他们都应该指出va_arg“函数”(它实际上是一个宏)将接受一个type作为参数,并获得下一个whole参数。您不能使用 va_arg 获取参数的一部分(如结构的一部分)。
  • 这能回答你的问题吗? An example of use of varargs in C
  • @Someprogrammerdude 你实际上带领我解决了这个问题,遗憾的是我正在阅读的那个没有提到任何这些。所以我是如何解决这个问题的,我在 for 循环中创建了一个临时结构变量number temp = va_arg(ap,number),然后在公园里散步,用if(temp.dontIncludeFlag == 0)sum+= temp.num; 替换两条有问题的行。如果您想发布一个答案好先生,请接受它以便您可以加分
  • @NikosAthanasiou 实际上没有,我的问题是访问在可变参数函数内部传递的结构。一些程序员老兄居然给了我解决问题的必要信息

标签: c variadic-functions variadic


【解决方案1】:

您错误地使用了va_arg。使用它将可变参数分配给变量,然后然后访问该成员。

    number n;
    for (j = 0; j < count; j++) {
        n = va_arg(ap, number);
        if(n.dontIncludeFlag)
            sum += va_arg(ap.num, number);
    }

【讨论】:

    猜你喜欢
    • 2018-05-29
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多