c 可变参数列表

#include <stdio.h>
#include <stdarg.h>
void average(int length,...)
{       
        // 初始化 va_list 变量用于访问可变参数列表
        va_list list;
        int count;
        float sum=0;
        // 初始化可变参数列表,
        va_start(list,length);
        printf("%p\n",&length);
        printf("%p\n",list);
        printf("%d\n",(int)list - (int)(&length));// 就是在length的地址上加了4个字节
        // 循环获取 va_list 变量的值
        for(count=0;count < length;count++)
        {       
                //printf("%d\n",va_arg(list,int));
                sum+=va_arg(list,int);
        }
        printf("%f\n",sum);
        va_end(list);
}
/* 自己使用指针的方式实现不行了,好像这个实现已经改了  */
void average2(int length,...)
{       
        float sum=0;
        char *p=(char *)(&length);
        p=p+4;
        printf("%p\n",&length);
        printf("%p\n",p);
        printf("%d\n",(int)p - (int)(&length));
        for(int count=1;count<=length;count++)
        {
                //printf("%d => %d\n",count,*p);
                p+=4;
                //sum+=*(p+count);
        }
        //printf("%f\n",*p);
        //printf("%d\n",length);
        //printf("%d\n",sum);
}
int main(void)
{
        printf("average:\n");
        average(5,3,4,5,6,7);
        printf("average2:\n");
        average2(5,3,4,5,6,7);
        int i = 1, j = 2, k = 3, z = 4, num = 4;
        //printf("test1:\n");  
        //test(num, i, j, k, z);   
        return 0;
}

标签: none

添加新评论