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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值