我定义了一个可变参数的函数
void func(T_Progs tProgs,...)
{
}
T_Progs是一个结构
怎样取得传进来的参数呢

解决方案 »

  1.   

    tProgs结构里的参数?
    直接用就可以,tProgs.XXX
      

  2.   

    传进来的是多个T_Progs,我是指要取到每一个T_Progs,不是指结构中的变量
      

  3.   

    #include <stdio.h>
    #include <stdarg.h>struct T_Progs
    {
    int i;
    };int Add( T_Progs tProgs1, ... )
    {
    va_list pArgs;
    va_start( pArgs, tProgs1 ); T_Progs tProgs = tProgs1;
    int sum = 0;
    while( tProgs.i != -1 )
    {
    sum += tProgs.i;
    tProgs = va_arg( pArgs, T_Progs );
    } va_end( pArgs );
    return sum;
    }int main(int argc, char* argv[])
    {
    T_Progs p1, p2, p3, p4;
    p1.i = 1;
    p2.i = 2;
    p3.i = 3;
    p4.i = -1;
    sum = Add( p1, p2, p3, p4 );
    printf( "Add( 1, 2, 3 ) = %d\n", sum );
    return 0;
    }参数最好用指针int Add( T_Progs* ptProgs1, ... );int Add( T_Progs* ptProgs1, ... )
    {
    va_list pArgs;
    va_start( pArgs, ptProgs1 ); T_Progs* ptProgs = ptProgs1;
    int sum = 0;
    while( ptProgs )
    {
    sum += ptProgs->i;
    ptProgs = va_arg( pArgs, T_Progs* );
    } va_end( pArgs );
    return sum;
    }int main(int argc, char* argv[])
    {
    T_Progs p1, p2, p3;
    p1.i = 1;
    p2.i = 2;
    p3.i = 3;
    sum = Add( &p1, &p2, &p3, NULL );
    printf( "Add( 1, 2, 3 ) = %d\n", sum );
    return 0;
    }
      

  4.   

    #include <stdio.h>
    #include <stdarg.h>
    struct T_Progs{
    int x;
    int y;
    };
        
    void func(T_Progs *tProgs,...)
    {
    int total = 0;
        va_list ap;
    T_Progs *p;
        va_start(ap, tProgs);
    p = tProgs;
    printf("x[%d]=%d\n",total,p->x);
    printf("y[%d]=%d\n",total,p->y);
    total++;
        while (p = (va_arg(ap,T_Progs *))) 
    {
    printf("x[%d]=%d\n",total,p->x);
    printf("y[%d]=%d\n",total,p->y);
    total ++;
        }
    va_end(ap);
    printf("参数个数:%d\n",total);
     }
    void main(void) 
    {
    T_Progs test1,test2;
    test1.x = 1;test2.x = 3;
    test1.y = 2;test2.y = 4;
    func(&test1,&test2,NULL);
    }