c 可变参数 定义可变参数的函数

定义可变参数的函数,需要在stdarg.h头文件中定义的va_list类型和va_startva_argva_end三个宏。

定义可变参数函数

va_list ap;  //实际是定义一个指针va_start(ap,num); // 用va_start宏,让ap指向num参数后面的那个参数。

int i = va_arg(ap,int);  // va_arg(ap,int) 读取ap指向的变量,ap指向下一个参数。读书的数据类型有va_arg的第二个参数控制

int * p_arg = va_arg(p_va,int*);  // 说明读取的参数是整型指针

char * p_arg = va_arg(p_va,char*);  // 说明读取的参数是char指针

va_end(ap);//在函数返回前调用

看写的例子: 可变参数求和的两种实现

 

#include <stdio.h>

#include <stdarg.h>



int add(int num, ...);

int add2(int * arg , ...);



int main(){

	int temp  = add(5,1,2,3,4,5);

	printf("-->> start result = %d \n", temp);

	printf("\n");



	int a=1, b=2, c=3, d=4, e=5;

	temp  = add2(&a,&b,&c,&d,&e,NULL);

	printf("-->> start result = %d \n", temp);

	return 0;

}



int add(int num, ...){

	va_list ap;

	int result = 0;

	va_start(ap,num);

	while(num!=0){

		int i =  va_arg(ap,int);

		result += i;

		printf("-->> i = %d \n", i);

		num--;

	}

	va_end(ap);

	return result;

}



int add2(int * arg , ...){

	va_list p_va;

	int *p_arg = NULL;

	int result = *arg;

	va_start(p_va,arg);

	p_arg = va_arg(p_va,int*);

	while(p_arg!=NULL){	

		result = result + *p_arg;

		printf("-->> *p_arg = %d \n", *p_arg);

		p_arg = va_arg(p_va,int*);

	}

	va_end(p_va);

	return result;

}

 

 


end

 

你可能感兴趣的:(可变参数)