c语言接收可变参数

也许某些时候, 你遇到这种情况,希望设计一个函数,可以接受的参数个数

是变化的,就是说它的参数个数,不是预先定义好的, C语言提供了一种方案

可以实现一个函数,接受可变参数。

下面例子,展现一个这样的例子:


int fun(int, ...){
	
}

int main() {
	func(1, 2, 3);
	func(1, 2, 3, 4);
}

注意,func 最后一个参数是省略号,就是 (...) , 省略号前面,必须是一个int ,

用来表示传入参数的个数。如果你想使用这个功能,需要include stdarg.h 这个

头文件,并按如下规则去做:

  • 定义一个函数,它的最后一个参数是省略号,并且省略号之前的参数是int, 用以表示参数的个数。
  • 创建 va_list 类型的变量
  • 使用int 参数 各va_start 去初始化参数列表
  • 使用va_arg 和va_list 去访问参数列表中的每一个参数。
  • 使用va_end 去free 掉va_list 所占用的内存
#include <stdio.h>
#include <stdarg.h>

double average(int num,...){
	va_list valist;
	double sum = 0.0;
	int i;
	
	/* initialize valist for num number of arguments */
	
	va_start(valist, num);
	
	/* access all the argument assigned to valist */
	for (i = 0; i < num; i++){
		sum += va_arg(valist, int);
	}
	
	/* clean memory reserved for valist */
	va_end(valist);
	
	return sum/num;
	
}

int main(){
	printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2, 3, 4, 5));
	printf("Average of 5, 10, 15, = %f\n", average(3, 5, 10, 15));
}
int
SetMemm (int num, ...  )
{
    va_list valist;
	int sum = 0;
	int i;

	/* initialize valist for num number of arguments */
	 VA_START(valist, num);


	/* access all the arguments assigned to valist */
	for (i = 0; i < num; i++) {
		sum += VA_ARG(valist, int);
	}

	/* clean memory reserved for valist */
    VA_END(valist);

	return sum;
	
 // return InternalMemSetMem (Buffer, Length, Value);
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值