不定长参数:va_list、 va_start、 va_end
void func(int a, ...)
1)在函数里定义一个va_list型的变量,这里是arg_ptr,这个变量是指向参数的指针.
va_list arg_ptr;
2)用va_start宏初始化变量arg_ptr,参数二prev_arg是第一个可变参数的前一个参数,是一个固定的参数,此例中为a.
void va_start(va_list arg_ptr, prev_arg):
3)用va_arg获取参数列表的下一个参数,参数二是要返回的参数的类型,可以是int型.
type va_arg(va_list arg_ptr, type)
4)va_end宏用于回收arg_ptr指针
#include<stdio.h>
#include<string.h>
#include <stdarg.h>
void demo(char msg, ...)
{
va_list arg_ptr;
va_start(arg_ptr, msg);
int para;
int n = 0;
while (1)
{
para = va_arg(arg_ptr, int);
if (para == 0) break;
printf("Parameter %d is: %d\n", n++, para);
}
va_end(arg_ptr);
}
int main(){
demo('c', 1, 2, 3, 4,0, 5, 6, 7);
system("pause");
}