[原]变参函数原理详解
/*
变参函数原理说明:
va_start就是求得第一个可变参的地址.
下面几个宏的作用:保是来确定可变参数的列表中每个参数的地址.
实现变参函数的要点,就是想办法取得每个参数的地址.
*/
#include <stdio.h>
#include <stdarg.h>
#if 0
#define va_list void*
#define va_arg(arg, type) *(type*)arg; arg = (char*)arg + sizeof(type);
#define va_start(arg, start) arg = (va_list)(((char*)&(start)) + sizeof(start))
#endif
int sum(int nr, ...)
{
int i = 0;
int result = 0;
va_list arg = NULL;//定义一个变量
//va_start的作用却实是将第一个变量的址址给arg.
va_start(arg, nr); //将第一个变量的地址给arg
for(i = 0; i < nr; i++)
{
result += va_arg(arg, int);
}
return result;
}
int main(int argc, char* argv[])
{
printf("%d\n", sum(4, 100,100,100,100));
printf("%d\n", sum(3, 200, 200, 200));
return 0;
}
___________________________________________
第二次程序:
#include <stdio.h>
void fun1(char *fmt,...)
{
char **lst;
printf( "fun1\n" );
lst = (char *)&fmt+sizeof(char *);
printf(" the parameter is [%s]\n",*lst);
}
void fun2(int a,...)
{
char *lst;
printf( "fun2\n" );
lst = (char *)&a+sizeof(int);
printf(" the parameter is [%d]\n",*lst);
}
int main(void)
{
fun1("hello","world");
fun2(1, 2, 3, 4);
return 0;
}
欢迎访问:wenhao.ink