函数参数是以数据结构:栈的形式存取,从右至左入栈.
1. va_list用于声明一个变量,我们知道函数的可变参数列表其实就是一个字符串,所以va_list才被声明为字符型指针,
这个类型用于声明一个指向参数列表的字符型指针变量,例如:va_list ap; //ap:arguement pointer
2. va_start(ap,v),它的第一个参数是指向可变参数字符串的变量,第二个参数是可变参数函数的第一个参数,通常用于指定可变参数列表中参数的个数。
3. va_arg(ap,t),它的第一个参数指向可变参数字符串的变量,第二个参数是可变参数的类型。
4. va_end(ap) 用于将存放可变参数字符串的变量清空(赋值为NULL)
int sum(int number,...)
{
va_list vaptr;
int i = 0;
int sum = 0;
va_start(vaptr, number);
for(i = 0; i < number; i++)
{
printf("fjut:%d\n", va_arg(vaptr, int));
}
va_end(vaptr);
return sum;
}
void fun(int a, ...)
{
int* temp = &a;
temp++;
for (int i = 0; i < a; i++)
{
cout << *temp<< endl;
temp++;
}
}
int main ()
{
fun (4, 4, 3, 2, 1);
sum (4, 4, 3, 2, 1);
return 0;
}