函数不定参数

函数参数是以数据结构:栈的形式存取,从右至左入栈.
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;
}
原文地址:https://www.cnblogs.com/fjut/p/2935802.html