1,当无法确定函数的所有实参的类型和数目时,可用省略号指定参数表
void foo(int i, ...)
printf(fmt, .....)
2、函数参数的传递原理
函数参数是以数据结构:栈的形式存取的,从右至左入栈
#include <iostream>
void fun(int a, ...)
{
int *tmp = &a;
tmp ++;
for(int i=0; i<a; i++)
{
cout << *tmp <<endl;
tmp++;
}
}
int main()
{
int a = 1;
int b = 2;
int c = 3;
int d = 4;
fun(4, a, b, c, d);
return 0;
}
output:
1
2
3
4
3、va_start使argp指向第一个可选参数,va_arg返回参数列表中的当前参数并使argp指向参数列表中下一个参数,va_end把argp指针清为NULL.函数可以多次遍历这些参数,但是都必须以va_start开始,va_end结束。
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
int demo(char, ...)
void main()
{
demo("DEMO", "this", "is", "demo!", "");
}
int demo(char msg, ...)
{
va_list argp;
int argno = 0;
char para;
va_start(argp, msg);
while(1)
{
para = va_arg(argp, char);
if(strcmp(para, "") == 0)
break;
printf("Parameter #%d is : %s\n", argno, para);
argno++;
}
va_end(argp);
return 0;
}