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

 

posted @ 2013-06-20 18:37  爱生活,爱编程  阅读(293)  评论(0编辑  收藏  举报