#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;
}